@rentman/rm-core 1.5.7-1 → 1.5.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/changelog.md +0 -6
- package/dist/rm-core.js +11 -14
- package/dist/rm-core.min.js +1 -1
- package/dist/src/classes/CollectionHandler.d.ts +2 -2
- package/dist/src/classes/ItemAdministrator.d.ts +10 -52
- package/dist/src/classes/LocalCache.d.ts +4 -12
- package/dist/src/classes/Util.d.ts +1 -1
- package/dist/src/models/CollectionEditResource.d.ts +2 -2
- package/dist/src/models/CollectionResource.d.ts +2 -2
- package/dist/src/models/ItemResource.d.ts +1 -1
- package/dist/src/types/ItemTypesCollection.d.ts +8 -8
- package/package.json +1 -1
package/dist/rm-core.js
CHANGED
|
@@ -3324,7 +3324,6 @@ var CollectionHandler_CollectionHandler = /** @class */ (function () {
|
|
|
3324
3324
|
return collections;
|
|
3325
3325
|
});
|
|
3326
3326
|
};
|
|
3327
|
-
// todo[TS] how do we type this ?
|
|
3328
3327
|
CollectionHandler.prototype.batchExtend = function (parentType, itemType, options, queryCallback, collections, returnAllItems) {
|
|
3329
3328
|
var _this = this;
|
|
3330
3329
|
if (returnAllItems === void 0) { returnAllItems = false; }
|
|
@@ -3356,9 +3355,7 @@ var CollectionHandler_CollectionHandler = /** @class */ (function () {
|
|
|
3356
3355
|
CollectionHandler.prototype.batchFetch = function (parentType, parentIdArray, itemType, options, itemCache, localCollectionCache, deferredCollectionCache) {
|
|
3357
3356
|
var _this = this;
|
|
3358
3357
|
var errorHandler = this.errorHandler;
|
|
3359
|
-
var batchStatus = this.batchStatusFactory.construct(itemType, function (collectionEntry) { return
|
|
3360
|
-
if (isFunction(parentIdArray))
|
|
3361
|
-
parentIdArray = parentIdArray();
|
|
3358
|
+
var batchStatus = this.batchStatusFactory.construct(itemType, function (collectionEntry) { return collectionEntry.parent.itemId; }, function (collectionEntry) { return collectionEntry.promise; });
|
|
3362
3359
|
for (var _i = 0, parentIdArray_3 = parentIdArray; _i < parentIdArray_3.length; _i++) {
|
|
3363
3360
|
var parentId = parentIdArray_3[_i];
|
|
3364
3361
|
batchStatus.add(this.getEntryStatus(itemType, this.collectionEntryService.cloneOptions(options, { itemType: parentType, itemId: parentId }), localCollectionCache, deferredCollectionCache));
|
|
@@ -3403,7 +3400,7 @@ var CollectionHandler_CollectionHandler = /** @class */ (function () {
|
|
|
3403
3400
|
result[parentId] = collectionEntry;
|
|
3404
3401
|
});
|
|
3405
3402
|
batchStatus.forEachEntry([ENTRY_STATUS.RESOLVE], function (collectionEntry, parentId) {
|
|
3406
|
-
var itemEntries =
|
|
3403
|
+
var itemEntries = itemEntryCompound.items[parentId];
|
|
3407
3404
|
result[parentId] = collectionEntry.resolve({
|
|
3408
3405
|
initial: itemEntries,
|
|
3409
3406
|
modified: itemEntries.concat(localItems[parentId]),
|
|
@@ -6609,6 +6606,7 @@ var QueryParser_QueryParser = /** @class */ (function () {
|
|
|
6609
6606
|
return [query, string];
|
|
6610
6607
|
};
|
|
6611
6608
|
QueryParser.prototype.parseSimpleQuery = function (key, value, comparator) {
|
|
6609
|
+
if (comparator === void 0) { comparator = Array.isArray(value[QueryParser_CONSTANTS.OBJ]) ? 'IN' : '='; }
|
|
6612
6610
|
value = this.formatValue(value);
|
|
6613
6611
|
if (comparator === undefined)
|
|
6614
6612
|
comparator = Array.isArray(value[QueryParser_CONSTANTS.OBJ]) ? 'IN' : '=';
|
|
@@ -6781,15 +6779,14 @@ var SocketMessageHandler = /** @class */ (function () {
|
|
|
6781
6779
|
SocketMessageHandler.prototype.groupByCollectionId = function (itemType, collectionMap) {
|
|
6782
6780
|
var result = {};
|
|
6783
6781
|
for (var itemId in collectionMap) {
|
|
6784
|
-
var
|
|
6785
|
-
for (var status_1 in
|
|
6786
|
-
var
|
|
6787
|
-
|
|
6788
|
-
var
|
|
6789
|
-
var collectionId = collectionEntry.id;
|
|
6782
|
+
var collections = collectionMap[itemId];
|
|
6783
|
+
for (var status_1 in collections) {
|
|
6784
|
+
for (var _i = 0, _a = collections[status_1]; _i < _a.length; _i++) {
|
|
6785
|
+
var collection = _a[_i];
|
|
6786
|
+
var collectionId = collection.id;
|
|
6790
6787
|
if (result[collectionId] === undefined) {
|
|
6791
6788
|
result[collectionId] = {
|
|
6792
|
-
collection:
|
|
6789
|
+
collection: collection,
|
|
6793
6790
|
fitting: [],
|
|
6794
6791
|
notfitting: [],
|
|
6795
6792
|
maybe: []
|
|
@@ -7419,7 +7416,7 @@ var TemplateFactory_TemplateFactory = /** @class */ (function () {
|
|
|
7419
7416
|
var core_RmCore = /** @class */ (function () {
|
|
7420
7417
|
function RmCore(externalApiRequestService, localCacheManager, authInterface, errorHandlerInterface, promiseLibraryInterface) {
|
|
7421
7418
|
this.noop = noop;
|
|
7422
|
-
this.version = '1.5.7
|
|
7419
|
+
this.version = '1.5.7';
|
|
7423
7420
|
this.apiFormatter = new ApiFormatter_ApiFormatter();
|
|
7424
7421
|
this.keyService = new KeyService_KeyService();
|
|
7425
7422
|
this.queryService = new QueryService();
|
|
@@ -7586,4 +7583,4 @@ function identity(value) {
|
|
|
7586
7583
|
/***/ })
|
|
7587
7584
|
/******/ ]);
|
|
7588
7585
|
});
|
|
7589
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9SbUNvcmUvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL1JtQ29yZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9SbUNvcmUvZXh0ZXJuYWwgXCJtb21lbnRcIiIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9VdGlsLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0FwaUZvcm1hdHRlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9BcGlSZXF1ZXN0U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9BcGlSZXNwb25zZVByb2Nlc3Nvci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY29uc3RhbnRzLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0JhdGNoU3RhdHVzLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NoYW5nZXNDb21waWxhdGlvbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9DaGFuZ2VzUHJvY2Vzc29yLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25DYWNoZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL0l0ZW1FbnRyeU9wdGlvbnMudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9JdGVtUmVzb3VyY2VPcHRpb25zLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvSXRlbUVudHJ5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvSXRlbVJlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvVmlld1Jlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvRWRpdFJlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvbkVudHJ5T3B0aW9ucy50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL0NvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnMudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9Db2xsZWN0aW9uRW50cnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9Db2xsZWN0aW9uUmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9Db2xsZWN0aW9uVmlld1Jlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvbkVkaXRSZXNvdXJjZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL1RlbXBsYXRlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sbGVjdGlvbkVudHJ5U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2xsZWN0aW9uSGFuZGxlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2xsZWN0aW9uTWF0Y2hlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbHVtbkNhY2hlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbHVtbkV4cGFuc2lvbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2x1bW5IYW5kbGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbHVtbkluZm8udHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uU2V0LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbHVtblN1YnNldENhY2hlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbHVtblV0aWwudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ3JlYXRlUmVxdWVzdC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtQWRtaW5pc3RyYXRvci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvSXRlbUVudHJ5U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtSGFuZGxlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtUmVxdWVzdFNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvS2V5U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvdHlwZXMvSXRlbVR5cGVzQ29sbGVjdGlvbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvdHlwZXMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvTG9jYWxDYWNoZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Mb2NrU2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Nb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb24udHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvUXVlcnlNYXRjaGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL1F1ZXJ5UGFyc2VyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL1F1ZXJ5U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9SZXF1ZXN0Q29sdW1uRXhwYW5zaW9uLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL1NvY2tldE1lc3NhZ2VIYW5kbGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL2luZGV4LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQmF0Y2hTdGF0dXNGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sbGVjdGlvbkNhY2hlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbGxlY3Rpb25FbnRyeUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2xsZWN0aW9uTWF0Y2hlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sdW1uRXhwYW5zaW9uRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbHVtbkluZm9GYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sdW1uU2V0RmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbHVtblN1YnNldENhY2hlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NyZWF0ZVJlcXVlc3RGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvSXRlbUNhY2hlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0l0ZW1FbnRyeUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9JdGVtUmVzb3VyY2VGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvTG9jYWxDYWNoZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Nb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvUXVlcnlNYXRjaGVyRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL1F1ZXJ5UGFyc2VyRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL1JlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvVGVtcGxhdGVGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NvcmUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxPO0FDVkE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrREFBMEMsZ0NBQWdDO0FBQzFFO0FBQ0E7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LEVBQ3RCLGlCQUFpQixFQUNqQixJQUFJLENBQUMsK0JBQStCLEVBQ3BDLHVCQUF1QixFQUN2QixJQUFJLENBQUMsWUFBWSxDQUNqQixDQUFDO1FBRUYsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksb0JBQW9CLENBQ25ELElBQUksQ0FBQyxZQUFZLEVBQ2pCLElBQUksQ0FBQyxpQkFBaUIsRUFDdEIsSUFBSSxDQUFDLGlCQUFpQixFQUN0QixJQUFJLENBQUMsc0JBQXNCLEVBQzNCLElBQUksQ0FBQyxnQkFBZ0IsRUFDckIscUJBQXFCLEVBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsRUFDckIsSUFBSSxDQUFDLFdBQVcsRUFDaEIsaUJBQWlCLEVBQ2pCLHVCQUF1QixFQUN2QixJQUFJLENBQUMsNkJBQTZCLENBQ2xDLENBQUM7SUFDSCxDQUFDO0lBQ0YsYUFBQztBQUFELENBQUM7O0FBRUssU0FBVSxJQUFJO0FBQ3BCLENBQUM7QUFFSyxTQUFVLFFBQVEsQ0FBRSxLQUFLO0lBQzlCLE9BQU8sS0FBSyxDQUFDO0FBQ2QsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3ZTc0I7QUFDSztBQUNIO0FBRUM7QUFDRTtBQUNKIiwiZmlsZSI6InJtLWNvcmUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJtb21lbnRcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW1wibW9tZW50XCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIlJtQ29yZVwiXSA9IGZhY3RvcnkocmVxdWlyZShcIm1vbWVudFwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiUm1Db3JlXCJdID0gZmFjdG9yeShyb290W1wibW9tZW50XCJdKTtcbn0pKHdpbmRvdywgZnVuY3Rpb24oX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fMF9fKSB7XG5yZXR1cm4gIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDEpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX18wX187IiwiZXhwb3J0IGZ1bmN0aW9uIGluc3RhbnRpYXRlT3B0aW9ucyAob3B0aW9uczoge1trZXk6IHN0cmluZ106IGFueX0sIHZhbHVlczogb2JqZWN0KTogdm9pZCB7XG5cdGZvciAoY29uc3Qga2V5IGluIHZhbHVlcykge1xuXHRcdGlmICghKGtleSBpbiBvcHRpb25zKSlcblx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0aWYgKHZhbHVlc1trZXldID09PSB1bmRlZmluZWQpXG5cdFx0XHRjb250aW51ZTtcblxuXHRcdG9wdGlvbnNba2V5XSA9IHZhbHVlc1trZXldO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaGFsbG93TWVyZ2UgKG9iamVjdCwgZGVmYXVsdHMpIHtcblx0aWYgKG9iamVjdCA9PT0gdW5kZWZpbmVkKVxuXHRcdHJldHVybiBkZWZhdWx0cztcblxuXHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRmb3IgKGNvbnN0IGtleSBpbiBkZWZhdWx0cykge1xuXHRcdHJlc3VsdFtrZXldID0gb2JqZWN0W2tleV0gPT09IHVuZGVmaW5lZCA/XG5cdFx0XHRkZWZhdWx0c1trZXldIDogb2JqZWN0W2tleV07XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzUHJvcGVydGllcyAob2JqZWN0KSB7XG5cdC8vIEB0cy1pZ25vcmVcblx0Zm9yIChjb25zdCBrZXkgaW4gb2JqZWN0KVxuXHRcdHJldHVybiB0cnVlO1xuXG5cdHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpcnN0UHJvcGVydHkgKG9iamVjdCkge1xuXHRpZiAodHlwZW9mIG9iamVjdCAhPT0gJ29iamVjdCcpXG5cdFx0cmV0dXJuIG51bGw7XG5cblx0Zm9yIChjb25zdCBrZXkgaW4gb2JqZWN0KVxuXHRcdHJldHVybiBrZXk7XG5cblx0cmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbkFycmF5IChuZWVkbGUsIGhheXN0YWNrKSB7XG5cdGZvciAoY29uc3QgaGF5IG9mIGhheXN0YWNrKSB7XG5cdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcblx0XHRpZiAobmVlZGxlID09IGhheSlcblx0XHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyQXJyYXk8VD4gKHNvdXJjZTogVFtdLCBjYWxsYmFjazogKFQpID0+IGJvb2xlYW4pOiBib29sZWFuIHtcblx0Y29uc3QgZmlsdGVyZWQ6IFRbXSA9IFtdO1xuXG5cdGZvciAoY29uc3Qgc3JjIG9mIHNvdXJjZSkge1xuXHRcdGlmIChjYWxsYmFjayhzcmMpKVxuXHRcdFx0ZmlsdGVyZWQucHVzaChzcmMpO1xuXHR9XG5cblx0aWYgKGZpbHRlcmVkLmxlbmd0aCA9PT0gc291cmNlLmxlbmd0aClcblx0XHRyZXR1cm4gZmFsc2U7XG5cblx0ZW1wdHlBcnJheShzb3VyY2UpO1xuXG5cdGZvciAoY29uc3QgZmlsdGVyIG9mIGZpbHRlcmVkKVxuXHRcdHNvdXJjZS5wdXNoKGZpbHRlcik7XG5cblx0cmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbXB0eUFycmF5IChhcnJheSk6IHZvaWQge1xuXHRhcnJheS5zcGxpY2UoMCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoRXhpc3RzIChzb3VyY2UsIHBhdGgpIHtcblx0aWYgKHR5cGVvZiBzb3VyY2UgPT09ICd1bmRlZmluZWQnKVxuXHRcdHJldHVybiBmYWxzZTtcblxuXHRmb3IgKGNvbnN0IHAgb2YgcGF0aCkge1xuXHRcdGlmICh0eXBlb2Ygc291cmNlW3BdID09PSAndW5kZWZpbmVkJylcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHNvdXJjZSA9IHNvdXJjZVtwXTtcblx0fVxuXG5cdHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGF0aCA8VD4gKG9iamVjdDogYW55LCBwYXRoOiBBcnJheTxudW1iZXIgfCBzdHJpbmc+LCBkZWZhdWx0czogYW55W10pOiBUIHtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3QgdmFsdWUgPSBwYXRoW2ldO1xuXG5cdFx0aWYgKG9iamVjdFt2YWx1ZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdG9iamVjdFt2YWx1ZV0gPSBkZWZhdWx0c1tpXTtcblxuXHRcdG9iamVjdCA9IG9iamVjdFt2YWx1ZV07XG5cdH1cblxuXHRyZXR1cm4gb2JqZWN0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGF0aCAob2JqZWN0OiB7fSwgcGF0aDogQXJyYXk8bnVtYmVyIHwgc3RyaW5nPiwgY3JlYXRlOiBib29sZWFuID0gZmFsc2UpOiBhbnkge1xuXHRpZiAob2JqZWN0ID09PSB1bmRlZmluZWQpXG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRmb3IgKGNvbnN0IHAgb2YgcGF0aCkge1xuXHRcdG9iamVjdCA9IG9iamVjdFtwXTsgLy8gd29uJ3QgYWx0ZXIgdGhlIGNhbGxlcidzIHZhclxuXG5cdFx0aWYgKG9iamVjdCA9PT0gdW5kZWZpbmVkICYmICFjcmVhdGUpXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0cmV0dXJuIG9iamVjdDtcbn1cblxuLy8gVGFrZW4gZnJvbSBBbmd1bGFySlMsIGFkZGVkIGNvbW1lbnRzIHRvIGlnbm9yZSBUeXBlU2NyaXB0IGVycm9yc1xuZnVuY3Rpb24gYmFzZUV4dGVuZCAoZHN0LCBvYmpzLCBkZWVwKSB7XG5cdGZvciAobGV0IGkgPSAwLCBpaSA9IG9ianMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuXHRcdGNvbnN0IG9iaiA9IG9ianNbaV07XG5cblx0XHRpZiAoIWlzT2JqZWN0KG9iaikgJiYgIWlzRnVuY3Rpb24ob2JqKSlcblx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG5cblx0XHRmb3IgKGxldCBqID0gMCwgamogPSBrZXlzLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcblx0XHRcdGNvbnN0IGtleSA9IGtleXNbal07XG5cdFx0XHRjb25zdCBzcmMgPSBvYmpba2V5XTtcblxuXHRcdFx0aWYgKGRlZXAgJiYgaXNPYmplY3Qoc3JjKSkge1xuXHRcdFx0XHRpZiAoaXNEYXRlKHNyYykpIHtcblx0XHRcdFx0XHRkc3Rba2V5XSA9IG5ldyBEYXRlKHNyYy52YWx1ZU9mKCkpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGlzUmVnRXhwKHNyYykpIHtcblx0XHRcdFx0XHRkc3Rba2V5XSA9IG5ldyBSZWdFeHAoc3JjKTtcblx0XHRcdFx0fSBlbHNlIGlmIChzcmMubm9kZU5hbWUpIHtcblx0XHRcdFx0XHRkc3Rba2V5XSA9IHNyYy5jbG9uZU5vZGUodHJ1ZSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoaXNFbGVtZW50KHNyYykpIHtcblx0XHRcdFx0XHRkc3Rba2V5XSA9IHNyYy5jbG9uZSgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmICghaXNPYmplY3QoZHN0W2tleV0pKVxuXHRcdFx0XHRcdFx0ZHN0W2tleV0gPSBpc0FycmF5KHNyYykgPyBbXSA6IHt9O1xuXG5cdFx0XHRcdFx0YmFzZUV4dGVuZChkc3Rba2V5XSwgW3NyY10sIHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkc3Rba2V5XSA9IHNyYztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZHN0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0ZW5kIChkc3QsIC4uLmFyZ3MpIHtcblx0cmV0dXJuIGJhc2VFeHRlbmQoZHN0LCBhcmdzLCBmYWxzZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZSAoZHN0LCAuLi5hcmdzKSB7XG5cdHJldHVybiBiYXNlRXh0ZW5kKGRzdCwgYXJncywgdHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdCAodmFsdWUpIHtcblx0Ly8gaHR0cDovL2pzcGVyZi5jb20vaXNvYmplY3Q0XG5cdHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNCbGFua09iamVjdCAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgIU9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZyAodmFsdWUpIHtcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlciAodmFsdWUpIHtcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGUgKHZhbHVlKSB7XG5cdHJldHVybiB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufVxuXG5leHBvcnQgY29uc3QgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bmN0aW9uPFQ+ICh2YWx1ZTogYW55KTogdmFsdWUgaXMgVCB7XG5cdHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JlZ0V4cCAodmFsdWUpIHtcblx0cmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBSZWdFeHBdJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQm9vbGVhbiAodmFsdWUpIHtcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFbGVtZW50IChub2RlKSB7XG5cdHJldHVybiAhIShub2RlICYmXG5cdFx0KFxuXHRcdFx0bm9kZS5ub2RlTmFtZSAgLy8gV2UgYXJlIGEgZGlyZWN0IGVsZW1lbnQuXG5cdFx0XHR8fCAobm9kZS5wcm9wICYmIG5vZGUuYXR0ciAmJiBub2RlLmZpbmQpXG5cdFx0KVxuXHQpOyAgLy8gV2UgaGF2ZSBhbiBvbiBhbmQgZmluZCBtZXRob2QgcGFydCBvZiBqUXVlcnkgQVBJLlxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNXaW5kb3cgKG9iaikge1xuXHRyZXR1cm4gb2JqICYmIG9iai53aW5kb3cgPT09IG9iajtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVmaW5lZCAodmFsdWUpIHtcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbHMgKG8xLCBvMikge1xuXHRpZiAobzEgPT09IG8yKVxuXHRcdHJldHVybiB0cnVlO1xuXG5cdGlmIChvMSA9PT0gbnVsbCB8fCBvMiA9PT0gbnVsbClcblx0XHRyZXR1cm4gZmFsc2U7XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuXHRpZiAobzEgIT09IG8xICYmIG8yICE9PSBvMilcblx0XHRyZXR1cm4gdHJ1ZTsgLy8gTmFOID09PSBOYU5cblxuXHRjb25zdCB0MSA9IHR5cGVvZiBvMTtcblx0Y29uc3QgdDIgPSB0eXBlb2YgbzI7XG5cblx0bGV0IGxlbmd0aDtcblx0bGV0IGtleTtcblx0bGV0IGtleVNldDtcblxuXHRpZiAodDEgPT09IHQyICYmIHQxID09PSAnb2JqZWN0Jykge1xuXHRcdGlmIChpc0FycmF5KG8xKSkge1xuXHRcdFx0aWYgKCFpc0FycmF5KG8yKSlcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0XHRsZW5ndGggPSBvMS5sZW5ndGg7XG5cblx0XHRcdGlmIChvMS5sZW5ndGggPT09IG8yLmxlbmd0aCkge1xuXHRcdFx0XHRmb3IgKGtleSA9IDA7IGtleSA8IGxlbmd0aDsga2V5KyspIHtcblx0XHRcdFx0XHRpZiAoIWVxdWFscyhvMVtrZXldLCBvMltrZXldKSlcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoaXNEYXRlKG8xKSkge1xuXHRcdFx0aWYgKCFpc0RhdGUobzIpKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRcdHJldHVybiBzaW1wbGVDb21wYXJlKG8xLmdldFRpbWUoKSwgbzIuZ2V0VGltZSgpKTtcblx0XHR9IGVsc2UgaWYgKGlzUmVnRXhwKG8xKSkge1xuXHRcdFx0aWYgKCFpc1JlZ0V4cChvMikpXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdFx0cmV0dXJuIG8xLnRvU3RyaW5nKCkgPT09IG8yLnRvU3RyaW5nKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChpc1dpbmRvdyhvMSkgfHwgaXNXaW5kb3cobzIpIHx8IGlzQXJyYXkobzIpIHx8IGlzRGF0ZShvMikgfHwgaXNSZWdFeHAobzIpKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRcdGtleVNldCA9IGNyZWF0ZU1hcCgpO1xuXHRcdFx0Zm9yIChrZXkgaW4gbzEpIHtcblx0XHRcdFx0aWYgKGlzRnVuY3Rpb24obzFba2V5XSkpXG5cdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0aWYgKCFlcXVhbHMobzFba2V5XSwgbzJba2V5XSkpXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0XHRcdGtleVNldFtrZXldID0gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yIChrZXkgaW4gbzIpIHtcblx0XHRcdFx0aWYgKCEoa2V5IGluIGtleVNldCkgJiYgaXNEZWZpbmVkKG8yW2tleV0pICYmICFpc0Z1bmN0aW9uKG8yW2tleV0pKVxuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVNYXAgKCkge1xuXHRyZXR1cm4gT2JqZWN0LmNyZWF0ZShudWxsKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuZnVuY3Rpb24gc2ltcGxlQ29tcGFyZSAoYSwgYikge1xuXHRyZXR1cm4gYSA9PT0gYiB8fCAoYSAhPT0gYSAmJiBiICE9PSBiKTtcbn1cblxuZnVuY3Rpb24gaXNWYWxpZE9iamVjdE1heERlcHRoIChtYXhEZXB0aCkge1xuXHRyZXR1cm4gaXNOdW1iZXIobWF4RGVwdGgpICYmIG1heERlcHRoID4gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHkgKHNvdXJjZSwgZGVzdGluYXRpb24/LCBtYXhEZXB0aD8pIHtcblx0Y29uc3Qgc3RhY2tTb3VyY2UgPSBbXTtcblx0Y29uc3Qgc3RhY2tEZXN0ID0gW107XG5cblx0bWF4RGVwdGggPSBpc1ZhbGlkT2JqZWN0TWF4RGVwdGgobWF4RGVwdGgpID8gbWF4RGVwdGggOiBOYU47XG5cblx0aWYgKGRlc3RpbmF0aW9uKSB7XG5cdFx0aWYgKHNvdXJjZSA9PT0gZGVzdGluYXRpb24pIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBjb3B5ISBTb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSBpZGVudGljYWwuJyk7XG5cdFx0fVxuXG5cdFx0Ly8gRW1wdHkgdGhlIGRlc3RpbmF0aW9uIG9iamVjdFxuXHRcdGlmIChpc0FycmF5KGRlc3RpbmF0aW9uKSkge1xuXHRcdFx0ZGVzdGluYXRpb24ubGVuZ3RoID0gMDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gZGVzdGluYXRpb24pXG5cdFx0XHRcdGRlbGV0ZSBkZXN0aW5hdGlvbltrZXldO1xuXHRcdH1cblxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRzdGFja1NvdXJjZS5wdXNoKHNvdXJjZSk7XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdHN0YWNrRGVzdC5wdXNoKGRlc3RpbmF0aW9uKTtcblxuXHRcdHJldHVybiBjb3B5UmVjdXJzZShzb3VyY2UsIGRlc3RpbmF0aW9uLCBtYXhEZXB0aCk7XG5cdH1cblxuXHRyZXR1cm4gY29weUVsZW1lbnQoc291cmNlLCBtYXhEZXB0aCk7XG5cblx0ZnVuY3Rpb24gY29weVJlY3Vyc2UgKF9zb3VyY2UsIF9kZXN0aW5hdGlvbiwgX21heERlcHRoKSB7XG5cdFx0X21heERlcHRoLS07XG5cblx0XHRpZiAoX21heERlcHRoIDwgMClcblx0XHRcdHJldHVybiAnLi4uJztcblxuXHRcdGlmIChpc0FycmF5KF9zb3VyY2UpKSB7XG5cdFx0XHRmb3IgKGxldCBpID0gMCwgaWkgPSBfc291cmNlLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcblx0XHRcdFx0X2Rlc3RpbmF0aW9uLnB1c2goY29weUVsZW1lbnQoX3NvdXJjZVtpXSwgX21heERlcHRoKSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChpc0JsYW5rT2JqZWN0KF9zb3VyY2UpKSB7XG5cdFx0XHQvLyBjcmVhdGVNYXAoKSBmYXN0IHBhdGggLS0tIFNhZmUgdG8gYXZvaWQgaGFzT3duUHJvcGVydHkgY2hlY2sgYmVjYXVzZSBwcm90b3R5cGUgY2hhaW4gaXMgZW1wdHlcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIF9zb3VyY2UpIHtcblx0XHRcdFx0X2Rlc3RpbmF0aW9uW2tleV0gPSBjb3B5RWxlbWVudChfc291cmNlW2tleV0sIF9tYXhEZXB0aCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChfc291cmNlICYmIHR5cGVvZiBfc291cmNlLmhhc093blByb3BlcnR5ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHQvLyBTbG93IHBhdGgsIHdoaWNoIG11c3QgcmVseSBvbiBoYXNPd25Qcm9wZXJ0eVxuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gX3NvdXJjZSkge1xuXHRcdFx0XHRpZiAoX3NvdXJjZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRcdFx0X2Rlc3RpbmF0aW9uW2tleV0gPSBjb3B5RWxlbWVudChfc291cmNlW2tleV0sIF9tYXhEZXB0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gU2xvd2VzdCBwYXRoIC0tLSBoYXNPd25Qcm9wZXJ0eSBjYW4ndCBiZSBjYWxsZWQgYXMgYSBtZXRob2Rcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIF9zb3VyY2UpIHtcblx0XHRcdFx0aWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfc291cmNlLCBrZXkpKSB7XG5cdFx0XHRcdFx0X2Rlc3RpbmF0aW9uW2tleV0gPSBjb3B5RWxlbWVudChfc291cmNlW2tleV0sIF9tYXhEZXB0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gX2Rlc3RpbmF0aW9uO1xuXHR9XG5cblx0ZnVuY3Rpb24gY29weUVsZW1lbnQgKF9zb3VyY2UsIF9tYXhEZXB0aCA9IDUpIHtcblx0XHQvLyBTaW1wbGUgdmFsdWVzXG5cdFx0aWYgKCFpc09iamVjdChfc291cmNlKSlcblx0XHRcdHJldHVybiBfc291cmNlO1xuXG5cdFx0Ly8gQWxyZWFkeSBjb3BpZWQgdmFsdWVzXG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdGNvbnN0IGluZGV4ID0gc3RhY2tTb3VyY2UuaW5kZXhPZihfc291cmNlKTtcblxuXHRcdGlmIChpbmRleCAhPT0gLTEpXG5cdFx0XHRyZXR1cm4gc3RhY2tEZXN0W2luZGV4XTtcblxuXHRcdGlmIChpc1dpbmRvdyhfc291cmNlKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IGNvcHkhIE1ha2luZyBjb3BpZXMgb2YgV2luZG93IGluc3RhbmNlcyBpcyBub3Qgc3VwcG9ydGVkLicpO1xuXHRcdH1cblxuXHRcdGxldCBuZWVkc1JlY3Vyc2UgPSBmYWxzZTtcblx0XHRsZXQgX2Rlc3RpbmF0aW9uID0gY29weVR5cGUoX3NvdXJjZSk7XG5cblx0XHRpZiAoX2Rlc3RpbmF0aW9uID09PSB1bmRlZmluZWQpIHtcblx0XHRcdF9kZXN0aW5hdGlvbiA9IGlzQXJyYXkoX3NvdXJjZSkgPyBbXSA6IE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKF9zb3VyY2UpKTtcblx0XHRcdG5lZWRzUmVjdXJzZSA9IHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdHN0YWNrU291cmNlLnB1c2goX3NvdXJjZSk7XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdHN0YWNrRGVzdC5wdXNoKF9kZXN0aW5hdGlvbik7XG5cblx0XHRyZXR1cm4gbmVlZHNSZWN1cnNlXG5cdFx0XHQ/IGNvcHlSZWN1cnNlKF9zb3VyY2UsIF9kZXN0aW5hdGlvbiwgX21heERlcHRoKVxuXHRcdFx0OiBfZGVzdGluYXRpb247XG5cdH1cblxuXHRmdW5jdGlvbiBjb3B5VHlwZSAoX3NvdXJjZSkge1xuXHRcdHN3aXRjaCAodG9TdHJpbmcuY2FsbChfc291cmNlKSkge1xuXHRcdFx0Y2FzZSAnW29iamVjdCBJbnQ4QXJyYXldJzpcblx0XHRcdGNhc2UgJ1tvYmplY3QgSW50MTZBcnJheV0nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBJbnQzMkFycmF5XSc6XG5cdFx0XHRjYXNlICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBGbG9hdDY0QXJyYXldJzpcblx0XHRcdGNhc2UgJ1tvYmplY3QgVWludDhBcnJheV0nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBVaW50MTZBcnJheV0nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBVaW50MzJBcnJheV0nOlxuXHRcdFx0XHRyZXR1cm4gbmV3IF9zb3VyY2UuY29uc3RydWN0b3IoY29weUVsZW1lbnQoX3NvdXJjZS5idWZmZXIpLCBfc291cmNlLmJ5dGVPZmZzZXQsIF9zb3VyY2UubGVuZ3RoKTtcblxuXHRcdFx0Y2FzZSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nOlxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRTEwXG5cdFx0XHRcdGlmICghX3NvdXJjZS5zbGljZSkge1xuXHRcdFx0XHRcdC8vIElmIHdlJ3JlIGluIHRoaXMgY2FzZSB3ZSBrbm93IHRoZSBlbnZpcm9ubWVudCBzdXBwb3J0cyBBcnJheUJ1ZmZlclxuXHRcdFx0XHRcdC8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG5cdFx0XHRcdFx0Y29uc3QgY29waWVkID0gbmV3IEFycmF5QnVmZmVyKF9zb3VyY2UuYnl0ZUxlbmd0aCk7XG5cdFx0XHRcdFx0bmV3IFVpbnQ4QXJyYXkoY29waWVkKS5zZXQobmV3IFVpbnQ4QXJyYXkoX3NvdXJjZSkpO1xuXHRcdFx0XHRcdC8qIGVzbGludC1lbmFibGUgKi9cblx0XHRcdFx0XHRyZXR1cm4gY29waWVkO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBfc291cmNlLnNsaWNlKDApO1xuXG5cdFx0XHRjYXNlICdbb2JqZWN0IEJvb2xlYW5dJzpcblx0XHRcdGNhc2UgJ1tvYmplY3QgTnVtYmVyXSc6XG5cdFx0XHRjYXNlICdbb2JqZWN0IFN0cmluZ10nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBEYXRlXSc6XG5cdFx0XHRcdHJldHVybiBuZXcgX3NvdXJjZS5jb25zdHJ1Y3Rvcihfc291cmNlLnZhbHVlT2YoKSk7XG5cblx0XHRcdGNhc2UgJ1tvYmplY3QgUmVnRXhwXSc6XG5cdFx0XHRcdGNvbnN0IHJlID0gbmV3IFJlZ0V4cChfc291cmNlLl9zb3VyY2UsIF9zb3VyY2UudG9TdHJpbmcoKS5tYXRjaCgvW14vXSokLylbMF0pO1xuXG5cdFx0XHRcdHJlLmxhc3RJbmRleCA9IF9zb3VyY2UubGFzdEluZGV4O1xuXG5cdFx0XHRcdHJldHVybiByZTtcblxuXHRcdFx0Y2FzZSAnW29iamVjdCBCbG9iXSc6XG5cdFx0XHRcdHJldHVybiBuZXcgX3NvdXJjZS5jb25zdHJ1Y3RvcihbX3NvdXJjZV0sIHt0eXBlOiBfc291cmNlLnR5cGV9KTtcblx0XHR9XG5cblx0XHRpZiAoaXNGdW5jdGlvbihfc291cmNlLmNsb25lTm9kZSkpIHtcblx0XHRcdHJldHVybiBfc291cmNlLmNsb25lTm9kZSh0cnVlKTtcblx0XHR9XG5cdH1cbn1cbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG5pbXBvcnQgeyBDb2x1bW5JbmZvIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBGaWVsZE1hcCB9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgY29weSwgZXF1YWxzIH0gZnJvbSAnLi9VdGlsJztcblxuZXhwb3J0IGNsYXNzIEFwaUZvcm1hdHRlciB7XG5cdE1PTUVOVF9JTlZBTElEID0gJ0ludmFsaWQgZGF0ZSc7XG5cdFNFUlZFUl9EQVRFVElNRV9GT1JNQVQgPSAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzWic7XG5cdFNFUlZFUl9USU1FX0ZPUk1BVCA9ICdISDptbTpzcyc7XG5cdFNFUlZFUl9EQVRFX0ZPUk1BVCA9ICdZWVlZLU1NLUREJztcblxuXHRjb25zdHJ1Y3RvciAoKSB7XG5cblx0fVxuXG5cdGZvcm1hdFJlc3BvbnNlIChmaWVsZHM6IEZpZWxkTWFwLCBjb2x1bW5zOiBDb2x1bW5JbmZvW10pOiBGaWVsZE1hcCB7XG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucylcblx0XHRcdGZpZWxkc1tjb2x1bW4ucGF0aF0gPSB0aGlzLmZvcm1hdFJlc3BvbnNlVmFsdWUoY29sdW1uLmFwaUNvbHVtbi50eXBlLCBmaWVsZHNbY29sdW1uLnBhdGhdKTtcblxuXHRcdHJldHVybiBmaWVsZHM7XG5cdH1cblxuXHRleHBhbmRSZXNwb25zZSAoY3VycmVudDogRmllbGRNYXAsIGV4cGFuZGVkOiBGaWVsZE1hcCwgY29sdW1uczogQ29sdW1uSW5mb1tdKTogRmllbGRNYXAge1xuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpXG5cdFx0XHRjdXJyZW50W2NvbHVtbi5wYXRoXSA9IHRoaXMuZm9ybWF0UmVzcG9uc2VWYWx1ZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUsIGV4cGFuZGVkW2NvbHVtbi5wYXRoXSk7XG5cblx0XHRyZXR1cm4gY3VycmVudDtcblx0fVxuXG5cdGZvcm1hdFJlcXVlc3QgKGluaXRpYWw6IEZpZWxkTWFwLCBtb2RpZmllZDogRmllbGRNYXAsIGNvbHVtbnM6IENvbHVtbkluZm9bXSk6IEZpZWxkTWFwIHtcblx0XHRjb25zdCByZXN1bHQ6IHtbY29sdW1uSWQ6IHN0cmluZ106IGFueX0gPSB7fTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uLmlkO1xuXHRcdFx0Y29uc3QgYXBpQ29sdW1uID0gY29sdW1uLmFwaUNvbHVtbjtcblx0XHRcdGNvbnN0IGNvbHVtblR5cGUgPSBhcGlDb2x1bW4udHlwZTtcblxuXHRcdFx0aWYgKGFwaUNvbHVtbi5yZWFkT25seSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGlmICghdGhpcy5jb21wYXJlRmllbGRzKGNvbHVtblR5cGUsIGluaXRpYWxbY29sdW1uSWRdLCBtb2RpZmllZFtjb2x1bW5JZF0pKVxuXHRcdFx0XHRyZXN1bHRbY29sdW1uSWRdID0gdGhpcy5mb3JtYXRSZXF1ZXN0VmFsdWUoY29sdW1uVHlwZSwgbW9kaWZpZWRbY29sdW1uSWRdKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Zm9ybWF0UmVxdWVzdExvY2FsIChmaWVsZHM6IEZpZWxkTWFwLCBjb2x1bW5zOiBDb2x1bW5JbmZvW10pOiBGaWVsZE1hcCB7XG5cdFx0Y29uc3QgcmVzdWx0OiB7W2NvbHVtbklkOiBzdHJpbmddOiBhbnl9ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcblx0XHRcdGNvbnN0IGFwaUNvbHVtbiA9IGNvbHVtbi5hcGlDb2x1bW47XG5cblx0XHRcdGlmIChhcGlDb2x1bW4ucmVhZE9ubHkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRyZXN1bHRbY29sdW1uSWRdID0gdGhpcy5mb3JtYXRSZXF1ZXN0VmFsdWUoYXBpQ29sdW1uLnR5cGUsIGZpZWxkc1tjb2x1bW5JZF0pO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRoYXNDaGFuZ2VzIChpbml0aWFsOiBGaWVsZE1hcCwgbW9kaWZpZWQ6IEZpZWxkTWFwLCBjb2x1bW5zOiBDb2x1bW5JbmZvW10pOiBib29sZWFuIHtcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcblx0XHRcdGNvbnN0IGFwaUNvbHVtbiA9IGNvbHVtbi5hcGlDb2x1bW47XG5cblx0XHRcdGlmIChhcGlDb2x1bW4ucmVhZE9ubHkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAoIXRoaXMuY29tcGFyZUZpZWxkcyhhcGlDb2x1bW4udHlwZSwgaW5pdGlhbFtjb2x1bW5JZF0sIG1vZGlmaWVkW2NvbHVtbklkXSkpXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGdldENoYW5nZXMgKGluaXRpYWw6IEZpZWxkTWFwLCBtb2RpZmllZDogRmllbGRNYXAsIGNvbHVtbnM6IENvbHVtbkluZm9bXSk6IEZpZWxkTWFwIHtcblx0XHRjb25zdCByZXN1bHQ6IG9iamVjdFtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcblx0XHRcdGNvbnN0IGFwaUNvbHVtbiA9IGNvbHVtbi5hcGlDb2x1bW47XG5cblx0XHRcdGlmIChhcGlDb2x1bW4ucmVhZE9ubHkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAoIXRoaXMuY29tcGFyZUZpZWxkcyhhcGlDb2x1bW4udHlwZSwgaW5pdGlhbFtjb2x1bW5JZF0sIG1vZGlmaWVkW2NvbHVtbklkXSkpIHtcblx0XHRcdFx0cmVzdWx0LnB1c2goXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0b2xkVmFsdWU6IGluaXRpYWxbY29sdW1uSWRdLFxuXHRcdFx0XHRcdFx0bmV3VmFsdWU6IG1vZGlmaWVkW2NvbHVtbklkXSxcblx0XHRcdFx0XHRcdGNvbHVtbjogY29sdW1uLmFwaUNvbHVtblxuXHRcdFx0XHRcdH1cblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Y29weUZpZWxkcyAoc291cmNlOiBGaWVsZE1hcCwgZGVzdGluYXRpb246IEZpZWxkTWFwLCBjb2x1bW5zOiBDb2x1bW5JbmZvW10pOiBGaWVsZE1hcCB7XG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0Y29uc3QgY29sdW1uUGF0aCA9IGNvbHVtbi5wYXRoO1xuXG5cdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5QYXRoXSA9IHRoaXMuY2xvbmUoY29sdW1uLmFwaUNvbHVtbi50eXBlLCBzb3VyY2VbY29sdW1uUGF0aF0pO1xuXHRcdH1cblxuXHRcdHJldHVybiBkZXN0aW5hdGlvbjtcblx0fVxuXG5cdHNoYWxsb3dDb3B5RmllbGRzIChcblx0XHRzaGFsbG93U291cmNlOiBGaWVsZE1hcCxcblx0XHRkZWVwU291cmNlOiBGaWVsZE1hcCxcblx0XHRkZXN0aW5hdGlvbjogRmllbGRNYXAsXG5cdFx0Y29sdW1uczogQ29sdW1uSW5mb1tdXG5cdCk6IEZpZWxkTWFwIHtcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5QYXRoID0gY29sdW1uLnBhdGg7XG5cblx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtblBhdGhdID0gc2hhbGxvd1NvdXJjZVtjb2x1bW5QYXRoXSAhPT0gdW5kZWZpbmVkID9cblx0XHRcdFx0c2hhbGxvd1NvdXJjZVtjb2x1bW5QYXRoXSA6XG5cdFx0XHRcdHRoaXMuY2xvbmUoY29sdW1uLmFwaUNvbHVtbi50eXBlLCBkZWVwU291cmNlW2NvbHVtblBhdGhdKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGVzdGluYXRpb247XG5cdH1cblxuXHRzZXREZWZhdWx0VmFsdWVzIChkZXN0aW5hdGlvbjogRmllbGRNYXAsIGNvbHVtbnM6IENvbHVtbkluZm9bXSk6IEZpZWxkTWFwIHtcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKVxuXHRcdFx0ZGVzdGluYXRpb25bY29sdW1uLmlkXSA9IHRoaXMuZ2V0RGVmYXVsdFZhbHVlKGNvbHVtbi5hcGlDb2x1bW4udHlwZSk7XG5cblx0XHRyZXR1cm4gZGVzdGluYXRpb247XG5cdH1cblxuXHRjb21wYXJlRmllbGRzIChjb2x1bW5UeXBlOiBzdHJpbmcsIGZpcnN0PzogYW55LCBzZWNvbmQ/OiBhbnkpOiBib29sZWFuIHtcblx0XHRpZiAoZmlyc3QgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBzZWNvbmQgPT09IHVuZGVmaW5lZDtcblxuXHRcdGlmIChzZWNvbmQgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHN3aXRjaCAoY29sdW1uVHlwZSkge1xuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRjYXNlICd0aW1lJzpcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29tcGFyZU1vbWVudE9iamVjdHMoZmlyc3QsIHNlY29uZCk7XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbXBhcmVEdXJhdGlvbnMoZmlyc3QsIHNlY29uZCk7XG5cdFx0XHRjYXNlICdpZCc6IC8vIGlkIHR5cGVzXG5cdFx0XHRjYXNlICdpdGVtJzpcblx0XHRcdGNhc2UgJ2xpbmsnOlxuXHRcdFx0Y2FzZSAnY2hpbGQnOlxuXHRcdFx0Y2FzZSAnc2libGluZyc6XG5cdFx0XHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXG5cdFx0XHRcdHJldHVybiBmaXJzdCA9PSBzZWNvbmQ7IC8vIHVzZSBub24tc3RyaWN0IGNvbXBhcmlzb25cblx0XHRcdGNhc2UgJ2N1cnJlbnQnOlxuXHRcdFx0Y2FzZSAnZGltZW5zaW9uJzpcblx0XHRcdGNhc2UgJ2Rpc3RhbmNlJzpcblx0XHRcdGNhc2UgJ2RvdWJsZSc6IC8vIGZsb2F0aW5nIHBvaW50IHR5cGVzXG5cdFx0XHRjYXNlICdmaWxlc2l6ZSc6XG5cdFx0XHRjYXNlICdudW1iZXInOlxuXHRcdFx0Y2FzZSAncG93ZXInOlxuXHRcdFx0Y2FzZSAncXVhbnRpdHknOlxuXHRcdFx0Y2FzZSAndm9sdW1lJzpcblx0XHRcdGNhc2UgJ3dlaWdodCc6XG5cdFx0XHRjYXNlICdjb29yZGluYXRlJzpcblx0XHRcdGNhc2UgJ3ByaWNlJzpcblx0XHRcdGNhc2UgJ3BlcmNlbnRhZ2UnOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb21wYXJlRmxvYXRzKGZpcnN0LCBzZWNvbmQpO1xuXHRcdFx0Y2FzZSAnaW50JzogLy8gaW50ZWdlciB0eXBlc1xuXHRcdFx0Y2FzZSAnYm9vbCc6IC8vIGJvb2xlYW4gdHlwZXNcblx0XHRcdGNhc2UgJ2VudW0nOlxuXHRcdFx0Y2FzZSAnZW1haWwnOiAvLyBzdHJpbmcgdHlwZXNcblx0XHRcdGNhc2UgJ3Bob25lJzpcblx0XHRcdGNhc2UgJ3VybCc6XG5cdFx0XHRjYXNlICd0ZXh0Jzpcblx0XHRcdGNhc2UgJ2xvbmd0ZXh0Jzpcblx0XHRcdGNhc2UgJ2NvbG9yJzpcblx0XHRcdGNhc2UgJ29yZGVyJzpcblx0XHRcdFx0cmV0dXJuIGZpcnN0ID09PSBzZWNvbmQ7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZXF1YWxzKGZpcnN0LCBzZWNvbmQpO1xuXHRcdH1cblx0fVxuXG5cdGNvbXBhcmVGbG9hdHMgKGE6IG51bWJlciwgYjogbnVtYmVyKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgYWJzQSA9IE1hdGguYWJzKGEpO1xuXHRcdGNvbnN0IGFic0IgPSBNYXRoLmFicyhiKTtcblx0XHRjb25zdCBkaWZmID0gTWF0aC5hYnMoYSAtIGIpO1xuXG5cdFx0Y29uc3QgRVBTSUxPTiA9IDEuMTllLTA3O1xuXG5cdFx0Ly8gc2hvcnRjdXQsIGhhbmRsZXMgaW5maW5pdGllc1xuXHRcdGlmIChhID09PSBiKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2UgaWYgKGEgPT09IDAgfHwgYiA9PT0gMCB8fCBkaWZmIDwgTnVtYmVyLk1JTl9WQUxVRSkge1xuXHRcdFx0Ly8gYSBvciBiIGlzIHplcm8gb3IgYm90aCBhcmUgZXh0cmVtZWx5IGNsb3NlIHRvIGl0XG5cdFx0XHQvLyByZWxhdGl2ZSBlcnJvciBpcyBsZXNzIG1lYW5pbmdmdWwgaGVyZVxuXHRcdFx0cmV0dXJuIGRpZmYgPCAoRVBTSUxPTiAqIE51bWJlci5NSU5fVkFMVUUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyB1c2UgcmVsYXRpdmUgZXJyb3Jcblx0XHRcdHJldHVybiBkaWZmIC8gTWF0aC5taW4oKGFic0EgKyBhYnNCKSwgTnVtYmVyLk1BWF9WQUxVRSkgPCBFUFNJTE9OO1xuXHRcdH1cblx0fVxuXG5cdGNvbXBhcmVNb21lbnRPYmplY3RzIChmaXJzdDogbW9tZW50Lk1vbWVudCwgc2Vjb25kOiBtb21lbnQuTW9tZW50KTogYm9vbGVhbiB7XG5cdFx0aWYgKCFmaXJzdC5pc1ZhbGlkKCkpXG5cdFx0XHRyZXR1cm4gIXNlY29uZC5pc1ZhbGlkKCk7XG5cblx0XHRpZiAoIXNlY29uZC5pc1ZhbGlkKCkpXG5cdFx0XHRyZXR1cm4gZmFsc2U7IC8vIGZpcnN0IElTIHZhbGlkXG5cblx0XHRyZXR1cm4gZmlyc3QuaXNTYW1lKHNlY29uZCk7XG5cdH1cblxuXHRjb21wYXJlRHVyYXRpb25zIChmaXJzdDogbW9tZW50LkR1cmF0aW9uLCBzZWNvbmQ6IG1vbWVudC5EdXJhdGlvbik6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBmaXJzdC5hc01pbGxpc2Vjb25kcygpID09PSBzZWNvbmQuYXNNaWxsaXNlY29uZHMoKTtcblx0fVxuXG5cdGZvcm1hdFJlc3BvbnNlVmFsdWUgKGNvbHVtblR5cGU6IHN0cmluZywgdmFsdWU6IGFueSkge1xuXHRcdHN3aXRjaCAoY29sdW1uVHlwZSkge1xuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlc3BvbnNlRGF0ZSh2YWx1ZSk7XG5cdFx0XHRjYXNlICdjb2xvcic6XG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlc3BvbnNlQ29sb3IodmFsdWUpO1xuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXNwb25zZUR1cmF0aW9uKHZhbHVlKTtcblx0XHRcdGNhc2UgJ2pzb24nOlxuXHRcdFx0XHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZSAhPT0gJycgPyBKU09OLnBhcnNlKHZhbHVlKSA6IHZhbHVlO1xuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcblx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSAwID8gbnVsbCA6IHZhbHVlO1xuXHRcdFx0Y2FzZSAnZmlsZXNpemUnOlxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgLyAxMDAwMDAwO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblx0fVxuXG5cdGZvcm1hdFJlcXVlc3RWYWx1ZSAoY29sdW1uVHlwZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG5cdFx0c3dpdGNoIChjb2x1bW5UeXBlKSB7XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlcXVlc3REYXRlVGltZSh2YWx1ZSk7XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVxdWVzdERhdGUodmFsdWUpO1xuXHRcdFx0Y2FzZSAnY29sb3InOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXF1ZXN0Q29sb3IodmFsdWUpO1xuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXF1ZXN0RHVyYXRpb24odmFsdWUpO1xuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcblx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSAwID8gbnVsbCA6IHZhbHVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblx0fVxuXG5cdGZvcm1hdFJlc3BvbnNlRGF0ZSAodmFsdWU6IG51bGwgfCBhbnkpOiBtb21lbnQuTW9tZW50IHtcblx0XHRyZXR1cm4gdmFsdWUgPT09IG51bGwgPyBtb21lbnQuaW52YWxpZCgpIDogbW9tZW50KHZhbHVlKTtcblx0fVxuXG5cdGZvcm1hdFJlc3BvbnNlRHVyYXRpb24gKHZhbHVlOiBudWxsIHwgbnVtYmVyKTogbW9tZW50LkR1cmF0aW9uIHtcblx0XHRyZXR1cm4gbW9tZW50LmR1cmF0aW9uKHZhbHVlID09PSBudWxsID8gMCA6IHZhbHVlLCAnc2Vjb25kcycpO1xuXHR9XG5cblx0Zm9ybWF0UmVzcG9uc2VDb2xvciAodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHZhbHVlLmNoYXJBdCgwKSA9PT0gJyMnID8gdmFsdWUgOiAnIycgKyB2YWx1ZTtcblx0fVxuXG5cdGZvcm1hdFJlcXVlc3REYXRlVGltZSAodmFsdWU6IG1vbWVudC5Nb21lbnQpOiBzdHJpbmcgfCBudWxsIHtcblx0XHRyZXR1cm4gdmFsdWUuaXNWYWxpZCgpID8gdmFsdWUuZm9ybWF0KHRoaXMuU0VSVkVSX0RBVEVUSU1FX0ZPUk1BVCkgOiBudWxsO1xuXHR9XG5cblx0Zm9ybWF0UmVxdWVzdERhdGUgKHZhbHVlOiBtb21lbnQuTW9tZW50KTogc3RyaW5nIHwgbnVsbCB7XG5cdFx0cmV0dXJuIHZhbHVlLmlzVmFsaWQoKSA/IHZhbHVlLmZvcm1hdCh0aGlzLlNFUlZFUl9EQVRFX0ZPUk1BVCkgOiBudWxsO1xuXHR9XG5cblx0Zm9ybWF0UmVxdWVzdER1cmF0aW9uICh2YWx1ZTogbW9tZW50LkR1cmF0aW9uKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdmFsdWUuYXNTZWNvbmRzKCk7XG5cdH1cblxuXHRmb3JtYXRSZXF1ZXN0Q29sb3IgKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdHJldHVybiB2YWx1ZS5jaGFyQXQoMCkgPT09ICcjJyA/IHZhbHVlLnN1YnN0cmluZygxKSA6IHZhbHVlO1xuXHR9XG5cblx0Z2V0RGVmYXVsdFZhbHVlIChjb2x1bW5UeXBlOiBzdHJpbmcpOiBhbnkge1xuXHRcdHN3aXRjaCAoY29sdW1uVHlwZSkge1xuXHRcdFx0Y2FzZSAnaW50Jzpcblx0XHRcdGNhc2UgJ2RvdWJsZSc6XG5cdFx0XHRjYXNlICdwZXJjZW50YWdlJzpcblx0XHRcdGNhc2UgJ3ByaWNlJzpcblx0XHRcdGNhc2UgJ29yZGVyJzpcblx0XHRcdFx0cmV0dXJuIDA7XG5cdFx0XHRjYXNlICdpdGVtJzpcblx0XHRcdGNhc2UgJ2xpbmsnOlxuXHRcdFx0Y2FzZSAnY2hpbGQnOlxuXHRcdFx0Y2FzZSAnc2libGluZyc6XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0Y2FzZSAnYm9vbCc6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdGNhc2UgJ2VudW0nOlxuXHRcdFx0XHRyZXR1cm4gJzAnO1xuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRjYXNlICd0aW1lJzpcblx0XHRcdFx0cmV0dXJuIG1vbWVudC5pbnZhbGlkKCk7XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRcdHJldHVybiBtb21lbnQuZHVyYXRpb24oKTtcblx0XHRcdGNhc2UgJ3RleHQnOlxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxuXHRcdFx0XHRyZXR1cm4gJyc7XG5cdFx0XHRjYXNlICdjb2xvcic6XG5cdFx0XHRcdHJldHVybiAnIzAwMDAwMCc7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gJyc7XG5cdFx0XHQvLyBcdFx0XHRcdFx0ZW1haWxcblx0XHRcdC8vIFx0XHRcdFx0XHR1cmxcblx0XHRcdC8vIFx0XHRcdFx0XHRodG1sXG5cdFx0XHQvLyBcdFx0XHRcdFx0anNvblxuXHRcdFx0Ly8gXHRcdFx0XHRcdGRhdGFcblx0XHR9XG5cdH1cblxuXHRpc0RlZmF1bHRWYWx1ZSAoY29sdW1uVHlwZTogc3RyaW5nLCB2YWx1ZTogYW55KTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuY29tcGFyZUZpZWxkcyhjb2x1bW5UeXBlLCB2YWx1ZSwgdGhpcy5nZXREZWZhdWx0VmFsdWUoY29sdW1uVHlwZSkpO1xuXHR9XG5cblx0Y2xvbmUgKGNvbHVtblR5cGU6IHN0cmluZywgdmFsdWU6IGFueSk6IGFueSB7XG5cdFx0c3dpdGNoIChjb2x1bW5UeXBlKSB7XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRcdHJldHVybiB0aGlzLmNsb25lRHVyYXRpb24odmFsdWUpO1xuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRcdHJldHVybiBtb21lbnQodmFsdWUpO1xuXHRcdFx0Y2FzZSAnanNvbic6XG5cdFx0XHRcdHJldHVybiBjb3B5KHZhbHVlKTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cdH1cblxuXHRnZXRDbG9uZUZ1bmN0aW9uIChjb2x1bW5UeXBlOiBzdHJpbmcpIHtcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuY2xvbmVEdXJhdGlvbjtcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jbG9uZURhdGU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5pZGVudGl0eTtcblx0XHR9XG5cdH1cblxuXHRjbG9uZUR1cmF0aW9uIChkdXJhdGlvbjogbW9tZW50LkR1cmF0aW9uKSB7XG5cdFx0cmV0dXJuIG1vbWVudC5kdXJhdGlvbihkdXJhdGlvbik7XG5cdH1cblxuXHRjbG9uZURhdGUgKGRhdGU6IG1vbWVudC5Nb21lbnQpOiBtb21lbnQuTW9tZW50IHtcblx0XHRyZXR1cm4gZGF0ZS5jbG9uZSgpO1xuXHR9XG5cblx0aWRlbnRpdHkgPFQ+IChpbnB1dDogVCk6IFQge1xuXHRcdHJldHVybiBpbnB1dDtcblx0fVxufVxuIiwiaW1wb3J0IHsgQXBpUmVzcG9uc2VQcm9jZXNzb3IgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHtcblx0QXBpUmVxdWVzdENvbHVtbk1hcCwgQXBpUmVxdWVzdEl0ZW1NYXAsIEFwaVJlcXVlc3RMaW1pdCwgSXRlbUlkLCBJdGVtVHlwZSwgUHJvbWlzZUludGVyZmFjZVxufSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBBcGlSZXF1ZXN0U2VydmljZSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgYXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5OiBBcGlSZXNwb25zZVByb2Nlc3NvckZhY3Rvcnlcblx0KSB7XG5cblx0fVxuXG5cdHRlbXBsYXRlIChpdGVtVHlwZTogSXRlbVR5cGUsIHBhcmFtczogYW55KTogUHJvbWlzZUludGVyZmFjZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UudGVtcGxhdGUoaXRlbVR5cGUsIHBhcmFtcykpO1xuXHR9XG5cblx0Y3JlYXRlIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkLCB2YWx1ZXM6IGFueSwgcGFyZW50VHlwZT86IEl0ZW1UeXBlLCBwYXJlbnRJZD86IEl0ZW1JZCk6IFByb21pc2VJbnRlcmZhY2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLmNyZWF0ZShpdGVtVHlwZSwgaXRlbUlkLCB2YWx1ZXMsIHBhcmVudFR5cGUsIHBhcmVudElkKSk7XG5cdH1cblxuXHRkZWxldGUgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkczogSXRlbUlkW10pOiBQcm9taXNlSW50ZXJmYWNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5kZWxldGUoaXRlbVR5cGUsIGl0ZW1JZHMpKTtcblx0fVxuXG5cdHVwZGF0ZUl0ZW1zIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1zOiBBcGlSZXF1ZXN0SXRlbU1hcCwgY29sdW1uczogYW55KTogUHJvbWlzZUludGVyZmFjZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UudXBkYXRlSXRlbXMoaXRlbVR5cGUsIGl0ZW1zLCBjb2x1bW5zKSk7XG5cdH1cblxuXHRyZXF1ZXN0U2tlbGV0b24gKHBhcmFtczogYW55LCByZXF1ZXN0Q2FuY2VsZXI/OiBQcm9taXNlSW50ZXJmYWNlPGFueT4pOiBQcm9taXNlSW50ZXJmYWNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5yZXF1ZXN0U2tlbGV0b24ocGFyYW1zLCByZXF1ZXN0Q2FuY2VsZXIpKTtcblx0fVxuXG5cdG1vdmVJdGVtcyAocGFyZW50VHlwZTogSXRlbVR5cGUsIHBhcmVudElkOiBJdGVtSWQsIGl0ZW1zOiB7W2l0ZW1UeXBlOiBzdHJpbmddOiBJdGVtSWRbXX0pOiBQcm9taXNlSW50ZXJmYWNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5tb3ZlSXRlbXMocGFyZW50VHlwZSwgcGFyZW50SWQsIGl0ZW1zKSk7XG5cdH1cblxuXHRjb2x1bW5zIChpdGVtVHlwZTogSXRlbVR5cGUsIGNvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5NYXAsIHBhcmFtcz86IGFueSk6IFByb21pc2VJbnRlcmZhY2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLmNvbHVtbnMoaXRlbVR5cGUsIGNvbHVtbnMsIHBhcmFtcykpO1xuXHR9XG5cblx0cXVlcnkgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcXVlcnk6IGFueSwgY29sdW1uczogQXBpUmVxdWVzdENvbHVtbk1hcCwgbGltaXQ/OiBBcGlSZXF1ZXN0TGltaXQpOiBQcm9taXNlSW50ZXJmYWNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5xdWVyeShpdGVtVHlwZSwgcXVlcnksIGNvbHVtbnMsIGxpbWl0KSk7XG5cdH1cblxuXHRwcm9jZXNzUmVzcG9uc2UgKHJlcXVlc3Q6IGFueSk6IFByb21pc2VJbnRlcmZhY2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRyZXR1cm4gcmVxdWVzdC50aGVuKChyZXNwb25zZTogYW55KSA9PiB0aGlzLmFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeS5jb25zdHJ1Y3QocmVzcG9uc2UpKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQXBpRm9ybWF0dGVyIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBGaWVsZE1hcCwgSXRlbUlkLCBJdGVtVHlwZSwgSXRlbVR5cGVNYXAsIFJlc3BvbnNlQ29sdW1uIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQXBpUmVzcG9uc2VQcm9jZXNzb3Ige1xuXHRjb2x1bW5zOiBJdGVtVHlwZU1hcDtcblx0aXRlbXM6IHtcblx0XHRbaXRlbVR5cGU6IHN0cmluZ106IHtcblx0XHRcdFtpdGVtSWQ6IG51bWJlcl06IGFueVxuXHRcdH1cblx0fTtcblx0bGlua3M6IEl0ZW1UeXBlTWFwO1xuXHRjYWNoZWFibGU6IGJvb2xlYW47XG5cdG1hcDogYW55O1xuXG5cdGNvbHVtbkluZGV4TWFwOiBhbnkgPSB7fTtcblx0Y29sdW1uTWFwOiBhbnkgPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHVibGljIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxuXHRcdHB1YmxpYyByZXNwb25zZTogYW55XG5cdCkge1xuXHRcdHRoaXMuY29sdW1ucyA9IHJlc3BvbnNlLmNvbHVtbnM7XG5cdFx0dGhpcy5pdGVtcyA9IHJlc3BvbnNlLml0ZW1zO1xuXHRcdHRoaXMubGlua3MgPSByZXNwb25zZS5saW5rcztcblx0XHR0aGlzLmNhY2hlYWJsZSA9IHJlc3BvbnNlLmNhY2hlYWJsZTtcblx0XHR0aGlzLm1hcCA9IHJlc3BvbnNlLm1hcDtcblxuXHRcdHRoaXMuY3JlYXRlQ29sdW1uTWFwcygpO1xuXHR9XG5cblx0Y3JlYXRlQ29sdW1uTWFwcyAoKSB7XG5cdFx0Zm9yIChjb25zdCBjb2x1bW5UeXBlIGluIHRoaXMuY29sdW1ucykge1xuXHRcdFx0dGhpcy5jb2x1bW5JbmRleE1hcFtjb2x1bW5UeXBlXSA9IHt9O1xuXHRcdFx0dGhpcy5jb2x1bW5NYXBbY29sdW1uVHlwZV0gPSB7fTtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnNbY29sdW1uVHlwZV0ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Y29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zW2NvbHVtblR5cGVdW2ldO1xuXHRcdFx0XHR0aGlzLmNvbHVtbkluZGV4TWFwW2NvbHVtblR5cGVdW2NvbHVtbi5pZF0gPSBpO1xuXHRcdFx0XHR0aGlzLmNvbHVtbk1hcFtjb2x1bW5UeXBlXVtjb2x1bW4uaWRdID0gY29sdW1uO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZldGNoVmFsdWUgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQsIGNvbHVtbklkOiBzdHJpbmcpIHtcblx0XHRpZiAodGhpcy5pdGVtc1tpdGVtVHlwZV1baXRlbUlkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdHJldHVybiB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdLmRhdGFbdGhpcy5jb2x1bW5JbmRleE1hcFtpdGVtVHlwZV1bY29sdW1uSWRdXTtcblx0fVxuXG5cdGZldGNoRGVyaXZlZE9iamVjdCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCwgcm9vdENvbHVtbnM6IFJlc3BvbnNlQ29sdW1uW10pIHtcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIHJvb3RDb2x1bW5zKSB7XG5cdFx0XHR0aGlzLmZldGNoRGVyaXZlZFZhbHVlcyhcblx0XHRcdFx0dGhpcy5mZXRjaFZhbHVlKGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtbi5pZCksXG5cdFx0XHRcdGNvbHVtbixcblx0XHRcdFx0cmVzdWx0XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmZXRjaERlcml2ZWRWYWx1ZXMgKHZhbHVlOiBhbnksIGNvbHVtbjogUmVzcG9uc2VDb2x1bW4sIGRlc3RpbmF0aW9uOiBhbnkpOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IGNoaWxkQ29sdW1uIG9mIGNvbHVtbi5jaGlsZHJlbikge1xuXHRcdFx0bGV0IGNoaWxkVmFsdWU7XG5cblx0XHRcdGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuXHRcdFx0XHRjaGlsZFZhbHVlID0gbnVsbDtcblx0XHRcdFx0ZGVzdGluYXRpb25bY2hpbGRDb2x1bW4ucGF0aF0gPSB0aGlzLmFwaUZvcm1hdHRlci5nZXREZWZhdWx0VmFsdWUoY2hpbGRDb2x1bW4uYXBpQ29sdW1uLnR5cGUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y2hpbGRWYWx1ZSA9IHRoaXMuZmV0Y2hWYWx1ZShjb2x1bW4uaXRlbVR5cGUsIHZhbHVlLCBjaGlsZENvbHVtbi5pZCk7XG5cdFx0XHRcdGRlc3RpbmF0aW9uW2NoaWxkQ29sdW1uLnBhdGhdID0gY2hpbGRWYWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGNoaWxkQ29sdW1uLmlzTGVhZilcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdHRoaXMuZmV0Y2hEZXJpdmVkVmFsdWVzKGNoaWxkVmFsdWUsIGNoaWxkQ29sdW1uLCBkZXN0aW5hdGlvbik7XG5cdFx0fVxuXHR9XG5cblx0ZmV0Y2hPYmplY3QgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBzdHJpbmcgfCBJdGVtSWQsIGluY2x1ZGVMaW5rczogYm9vbGVhbiA9IGZhbHNlKTogYW55IHtcblx0XHRpZiAodGhpcy5pdGVtc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRjb25zdCBpdGVtID0gdGhpcy5pdGVtc1tpdGVtVHlwZV1baXRlbUlkXTtcblxuXHRcdGlmIChpdGVtID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0Y29uc3QgZGF0YSA9IHRoaXMuaXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF0uZGF0YTtcblx0XHRjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRyZXN1bHRbdGhpcy5jb2x1bW5zW2l0ZW1UeXBlXVtpXS5pZF0gPSBkYXRhW2ldO1xuXHRcdH1cblxuXHRcdGlmIChpbmNsdWRlTGlua3MpIHtcblx0XHRcdGNvbnN0IGxpbmtzID0gdGhpcy5pdGVtc1tpdGVtVHlwZV1baXRlbUlkXS5saW5rcztcblx0XHRcdHJlc3VsdC5fX2xpbmtzID0ge307XG5cblx0XHRcdGZvciAoY29uc3QgbGlua1R5cGUgaW4gbGlua3MpXG5cdFx0XHRcdHJlc3VsdC5fX2xpbmtzW2xpbmtUeXBlXSA9XG5cdFx0XHRcdFx0dGhpcy5mZXRjaE9iamVjdEFycmF5KGxpbmtUeXBlLCBpbmNsdWRlTGlua3MsIGxpbmtzW2xpbmtUeXBlXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGZldGNoT2JqZWN0QXJyYXkgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaW5jbHVkZUxpbmtzOiBib29sZWFuLCBpZEFycmF5OiBJdGVtSWRbXSk6IGFueVtdIHtcblx0XHRjb25zdCByZXN1bHQ6IGFueVtdID0gW107XG5cblx0XHRpZiAoaWRBcnJheSA9PT0gbnVsbCkge1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5pdGVtc1tpdGVtVHlwZV0pXG5cdFx0XHRcdHJlc3VsdC5wdXNoKHRoaXMuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgaW5jbHVkZUxpbmtzKSk7XG5cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXG5cdFx0aWYgKGlkQXJyYXkgPT09IHVuZGVmaW5lZClcblx0XHRcdGlkQXJyYXkgPSB0aGlzLmxpbmtzW2l0ZW1UeXBlXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIG9mIGlkQXJyYXkpXG5cdFx0XHRyZXN1bHQucHVzaCh0aGlzLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGluY2x1ZGVMaW5rcykpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGZldGNoT2JqZWN0TWFwIChpdGVtVHlwZTogSXRlbVR5cGUsIGNvbHVtbklkOiBzdHJpbmcsIGluY2x1ZGVMaW5rcz86IGJvb2xlYW4sIHJldHVybktleXM/OiBib29sZWFuKSB7XG5cdFx0Y29uc3QgY29sdW1uSW5kZXggPSB0aGlzLmNvbHVtbkluZGV4TWFwW2l0ZW1UeXBlXVtjb2x1bW5JZF07XG5cdFx0Y29uc3QgcmVzdWx0OiB7W2tleTogc3RyaW5nXTogYW55fSA9IHt9O1xuXHRcdGNvbnN0IGtleXM6IHN0cmluZ1tdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSkge1xuXHRcdFx0Y29uc3Qga2V5ID0gdGhpcy5pdGVtc1tpdGVtVHlwZV1baXRlbUlkXS5kYXRhW2NvbHVtbkluZGV4XTtcblx0XHRcdGtleXMucHVzaChrZXkpO1xuXHRcdFx0cmVzdWx0W2tleV0gPSB0aGlzLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGluY2x1ZGVMaW5rcyk7XG5cdFx0fVxuXG5cdFx0aWYgKHJldHVybktleXMpXG5cdFx0XHRyZXR1cm4ge3Jlc3VsdDogcmVzdWx0LCBrZXlzOiBrZXlzfTtcblx0XHRlbHNlXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0ZmV0Y2hGaWVsZE1hcCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBjb2x1bW5JZDogc3RyaW5nKSB7XG5cdFx0Y29uc3QgaW5kZXggPSB0aGlzLmNvbHVtbkluZGV4TWFwW2l0ZW1UeXBlXVtjb2x1bW5JZF07XG5cdFx0Y29uc3QgcmVzdWx0OiB7W2l0ZW1JZDogbnVtYmVyXTogRmllbGRNYXB9ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGlkIGluIHRoaXMuaXRlbXNbaXRlbVR5cGVdKVxuXHRcdFx0cmVzdWx0W2lkXSA9IHRoaXMuaXRlbXNbaXRlbVR5cGVdW2lkXS5kYXRhW2luZGV4XTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmZXRjaENvbHVtbkFycmF5IChpdGVtVHlwZTogSXRlbVR5cGUpOiBSZXNwb25zZUNvbHVtbltdIHtcblx0XHRjb25zdCByZXN1bHQ6IFJlc3BvbnNlQ29sdW1uW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgYXBpQ29sdW1uIG9mIHRoaXMuY29sdW1uc1tpdGVtVHlwZV0pXG5cdFx0XHRyZXN1bHQucHVzaChhcGlDb2x1bW4pO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGZldGNoQ29sdW1uT2JqZWN0IChpdGVtVHlwZTogSXRlbVR5cGUpOiBSZXNwb25zZUNvbHVtbiB7XG5cdFx0cmV0dXJuIHRoaXMuY29sdW1uTWFwW2l0ZW1UeXBlXTtcblx0fVxuXG5cdGZldGNoQ29sdW1uc09iamVjdCAoKToge1tpdGVtVHlwZTogc3RyaW5nXTogUmVzcG9uc2VDb2x1bW59IHtcblx0XHRyZXR1cm4gdGhpcy5jb2x1bW5NYXA7XG5cdH1cblxuXHRjcmVhdGVSZXNvdXJjZSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpZDogSXRlbUlkKToge29iamVjdDogRmllbGRNYXAsIGxpbmtzOiBhbnl9IHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0b2JqZWN0OiB0aGlzLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpZCksXG5cdFx0XHRsaW5rczogdGhpcy5pdGVtc1tpdGVtVHlwZV1baWRdLmxpbmtzXG5cdFx0fTtcblx0fVxuXG5cdGhhc0l0ZW1zIChpdGVtVHlwZTogSXRlbVR5cGUpOiBib29sZWFuIHtcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5pdGVtc1tpdGVtVHlwZV0pXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGdldElkQXJyYXkgKGl0ZW1UeXBlOiBJdGVtVHlwZSk6IEl0ZW1JZFtdIHtcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1JZFtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSkge1xuXHRcdFx0cmVzdWx0LnB1c2gocGFyc2VJbnQoaXRlbUlkLCAxMCkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cbn1cbiIsImV4cG9ydCBlbnVtIEVOVFJZX1NUQVRVUyB7XG5cdENBQ0hFRCA9ICdjYWNoZWQnLFxuXHRMT0NBTCA9ICdsb2NhbCcsXG5cdFBST01JU0VEID0gJ3Byb21pc2VkJyxcblx0RVhQQU5EID0gJ2V4cGFuZCcsXG5cdFBST01JU0VEX0VYUEFORCA9ICdwcm9taXNlZC1leHBhbmQnLFxuXHRFWFBBTkRfTE9DQUwgPSAnZXhwYW5kLWxvY2FsJyxcblx0UFJPTUlTRURfRVhQQU5EX0xPQ0FMID0gJ3Byb21pc2VkLWV4cGFuZC1sb2NhbCcsXG5cdFJFU09MVkUgPSAncmVzb2x2ZScsXG5cdFJFU09MVkVfVkFMVUVTID0gJ3Jlc29sdmUtdmFsdWVzJ1xufVxuXG5leHBvcnQgY29uc3QgQUxMX1BFUk1JU1NJT05TID0gJzcnO1xuXG5leHBvcnQgY29uc3QgQ09MVU1OX1NFUEVSQVRPUiA9ICc+JztcbmV4cG9ydCBjb25zdCBSRU5ERVJfQVNfU0VQRVJBVE9SID0gJzonO1xuXG5leHBvcnQgY29uc3QgTkVXX1BSRUZJWDogc3RyaW5nID0gJy0xJztcbmV4cG9ydCBjb25zdCBEVVBMSUNBVEVfUFJFRklYOiBzdHJpbmcgPSAnLTInO1xuXG5leHBvcnQgY29uc3QgTkVXX0tFWVdPUkQ6IHN0cmluZyA9ICduZXctJztcbmV4cG9ydCBjb25zdCBEVVBMSUNBVEVfS0VZV09SRDogc3RyaW5nID0gJ2R1cC0nO1xuIiwiaW1wb3J0IHsgRU5UUllfU1RBVFVTIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBFbnRyeVN0YXR1cywgRW50cnlTdGF0dXNNYXAsIEl0ZW1JZCwgSXRlbVR5cGUsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBCYXRjaFN0YXR1czxUPiB7XG5cdHJlYWRvbmx5IHJlcXVlc3RTdGF0dXMgPSBbXG5cdFx0RU5UUllfU1RBVFVTLlJFU09MVkUsXG5cdFx0RU5UUllfU1RBVFVTLlJFU09MVkVfVkFMVUVTLFxuXHRcdEVOVFJZX1NUQVRVUy5FWFBBTkQsXG5cdFx0RU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORFxuXHRdO1xuXG5cdHJlYWRvbmx5IHJlbW90ZUV4cGFuZFN0YXR1cyA9IFtFTlRSWV9TVEFUVVMuRVhQQU5ELCBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EXTtcblxuXHRyZWFkb25seSBsb2NhbEV4cGFuZFN0YXR1cyA9IFtFTlRSWV9TVEFUVVMuRVhQQU5EX0xPQ0FMLCBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EX0xPQ0FMXTtcblxuXHRlbnRyaWVzOiBFbnRyeVN0YXR1c01hcDxUPiA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZSxcblx0XHRwdWJsaWMgaXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHB1YmxpYyBnZXRJdGVtSWQ6IChpdGVtRW50cnk6IFQpID0+IEl0ZW1JZCxcblx0XHRwdWJsaWMgZ2V0UHJvbWlzZTogKGl0ZW1FbnRyeTogVCkgPT4gUHJvbWlzZUludGVyZmFjZTxUPlxuXHQpIHtcblx0XHRmb3IgKGNvbnN0IHN0YXR1cyBpbiBFTlRSWV9TVEFUVVMpXG5cdFx0XHR0aGlzLmVudHJpZXNbRU5UUllfU1RBVFVTW3N0YXR1c11dID0gW107XG5cdH1cblxuXHRhZGQgKGVudHJ5U3RhdHVzOiBFbnRyeVN0YXR1czxUPik6IHZvaWQge1xuXHRcdHRoaXMuZW50cmllc1tlbnRyeVN0YXR1cy5zdGF0dXNdLnB1c2goZW50cnlTdGF0dXMuZW50cnkpO1xuXHR9XG5cblx0aGFzRW50cmllcyAoc3RhdHVzQXJyYXk6IEVOVFJZX1NUQVRVU1tdKTogYm9vbGVhbiB7XG5cdFx0Zm9yIChjb25zdCBzdGF0dXMgb2Ygc3RhdHVzQXJyYXkpIHtcblx0XHRcdGlmICh0aGlzLmVudHJpZXNbc3RhdHVzXS5sZW5ndGggPiAwKVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRoYXNSZXF1ZXN0cyAoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuaGFzRW50cmllcyh0aGlzLnJlcXVlc3RTdGF0dXMpO1xuXHR9XG5cblx0Zm9yRWFjaEVudHJ5IChzdGF0dXNBcnJheTogRU5UUllfU1RBVFVTW10sIGNhbGxiYWNrOiAoZW50cnk6IFQsIGl0ZW1JZDogSXRlbUlkKSA9PiB2b2lkKTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBzdGF0dXMgb2Ygc3RhdHVzQXJyYXkpIHtcblx0XHRcdGNvbnN0IHN0YXR1c0VudHJpZXMgPSB0aGlzLmVudHJpZXNbc3RhdHVzXTtcblxuXHRcdFx0Zm9yIChjb25zdCBzdGF0dXNFbnRyeSBvZiBzdGF0dXNFbnRyaWVzKVxuXHRcdFx0XHRjYWxsYmFjayhzdGF0dXNFbnRyeSwgdGhpcy5nZXRJdGVtSWQoc3RhdHVzRW50cnkpKTtcblx0XHR9XG5cdH1cblxuXHRyZWR1Y2VFbnRyaWVzPFU+IChcblx0XHRzdGF0dXNBcnJheTogRU5UUllfU1RBVFVTW10sXG5cdFx0Y2FsbGJhY2s6IChlbnRyeTogVCwgaXRlbUlkOiBJdGVtSWQsIGRlc3RpbmF0aW9uOiBVKSA9PiB2b2lkLFxuXHRcdGRlc3RpbmF0aW9uOiBVXG5cdCk6IFUge1xuXHRcdGZvciAoY29uc3Qgc3RhdHVzIG9mIHN0YXR1c0FycmF5KSB7XG5cdFx0XHRjb25zdCBzdGF0dXNFbnRyaWVzID0gdGhpcy5lbnRyaWVzW3N0YXR1c107XG5cblx0XHRcdGZvciAoY29uc3Qgc3RhdHVzRW50cnkgb2Ygc3RhdHVzRW50cmllcylcblx0XHRcdFx0Y2FsbGJhY2soc3RhdHVzRW50cnksIHRoaXMuZ2V0SXRlbUlkKHN0YXR1c0VudHJ5KSwgZGVzdGluYXRpb24pO1xuXHRcdH1cblxuXHRcdHJldHVybiBkZXN0aW5hdGlvbjtcblx0fVxuXG5cdHJlZHVjZUFsbEVudHJpZXM8VT4gKFxuXHRcdGNhbGxiYWNrOiAoZW50cnk6IFQsIGl0ZW1JZDogSXRlbUlkLCBkZXN0aW5hdGlvbjogVSkgPT4gdm9pZCxcblx0XHRkZXN0aW5hdGlvbjogVVxuXHQpOiBVIHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzO1xuXG5cdFx0Zm9yIChjb25zdCBzdGF0dXMgaW4gZW50cmllcykge1xuXHRcdFx0Y29uc3Qgc3RhdHVzRW50cmllcyA9IGVudHJpZXNbc3RhdHVzXTtcblxuXHRcdFx0Zm9yIChjb25zdCBzdGF0dXNFbnRyeSBvZiBzdGF0dXNFbnRyaWVzKVxuXHRcdFx0XHRjYWxsYmFjayhzdGF0dXNFbnRyeSwgdGhpcy5nZXRJdGVtSWQoc3RhdHVzRW50cnkpLCBkZXN0aW5hdGlvbik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRlc3RpbmF0aW9uO1xuXHR9XG5cblx0Z2V0UHJvbWlzZXMgKCk6IFByb21pc2VJbnRlcmZhY2U8VFtdPiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKFxuXHRcdFx0dGhpcy5yZWR1Y2VFbnRyaWVzKFxuXHRcdFx0XHRbRU5UUllfU1RBVFVTLlBST01JU0VELCBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EXSxcblx0XHRcdFx0KGVudHJ5OiBULCBfaXRlbUlkOiBJdGVtSWQsIGRlc3RpbmF0aW9uKSA9PiB7XG5cdFx0XHRcdFx0ZGVzdGluYXRpb24ucHVzaCh0aGlzLmdldFByb21pc2UoZW50cnkpKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0PEFycmF5PFByb21pc2VJbnRlcmZhY2U8VD4+PiBbXVxuXHRcdFx0KVxuXHRcdCk7XG5cdH1cblxuXHRnZXRJdGVtSWRzIChzdGF0dXNBcnJheTogRU5UUllfU1RBVFVTW10pOiBJdGVtSWRbXSB7XG5cdFx0cmV0dXJuIHRoaXMucmVkdWNlRW50cmllcyhcblx0XHRcdHN0YXR1c0FycmF5LFxuXHRcdFx0KF8sIGl0ZW1JZCwgZGVzdGluYXRpb24pID0+IHtcblx0XHRcdFx0ZGVzdGluYXRpb24ucHVzaChpdGVtSWQpO1xuXHRcdFx0fSxcblx0XHRcdDxJdGVtSWRbXT4gW11cblx0XHQpO1xuXHR9XG5cblx0Z2V0UmVxdWVzdElkcyAoKTogSXRlbUlkW10ge1xuXHRcdHJldHVybiB0aGlzLmdldEl0ZW1JZHModGhpcy5yZXF1ZXN0U3RhdHVzKTtcblx0fVxuXG5cdGdldEFycmF5IChzdGF0dXNBcnJheT86IEVOVFJZX1NUQVRVU1tdKTogVFtdIHtcblx0XHRjb25zdCBjYWxsYmFjayA9IChlbnRyeTogVCwgX2l0ZW1JZDogSXRlbUlkLCBkZXN0aW5hdGlvbjogVFtdKSA9PiB7XG5cdFx0XHRkZXN0aW5hdGlvbi5wdXNoKGVudHJ5KTtcblx0XHR9O1xuXG5cdFx0aWYgKHN0YXR1c0FycmF5ID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5yZWR1Y2VBbGxFbnRyaWVzKGNhbGxiYWNrLCA8VFtdPiBbXSk7XG5cblx0XHRyZXR1cm4gdGhpcy5yZWR1Y2VFbnRyaWVzKHN0YXR1c0FycmF5LCBjYWxsYmFjaywgPFRbXT4gW10pO1xuXHR9XG5cblx0Z2V0TWFwICgpOiB7W2l0ZW1JZDogc3RyaW5nXTogVH0ge1xuXHRcdHJldHVybiB0aGlzLnJlZHVjZUFsbEVudHJpZXMoXG5cdFx0XHQoZW50cnk6IFQsIGl0ZW1JZDogSXRlbUlkLCBkZXN0aW5hdGlvbjoge1tpdGVtSWQ6IG51bWJlcl06IFR9KSA9PiB7XG5cdFx0XHRcdGRlc3RpbmF0aW9uW2l0ZW1JZF0gPSBlbnRyeTtcblx0XHRcdH0sXG5cdFx0XHR7fVxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSwgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBFbnRyeVBhcmVudCwgRW50cnlQYXJlbnROdWxsLCBJdGVtRW50cnlNYXAsIEl0ZW1JZCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IGNyZWF0ZVBhdGgsIGdldFBhdGggfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgdHlwZSBEZWxldGVNYXBFbnRyeSA9IHtpdGVtOiBJdGVtRW50cnksIHBhcmVudDogRW50cnlQYXJlbnROdWxsfTtcblxuZXhwb3J0IHR5cGUgTW92ZU1hcEVudHJ5ID0ge2l0ZW06IEl0ZW1FbnRyeSwgcGFyZW50OiBFbnRyeVBhcmVudH07XG5cbmV4cG9ydCB0eXBlIENyZWF0ZUNvbXBpbGF0aW9uID0ge1xuXHRbcGFyZW50VHlwZTogc3RyaW5nXToge1xuXHRcdFtwYXJlbnRJZDogbnVtYmVyXTogSXRlbUVudHJ5TWFwXG5cdH1cbn07XG5cbmV4cG9ydCB0eXBlIERlbGV0ZUNvbXBpbGF0aW9uID0ge1xuXHRbaXRlbVR5cGU6IHN0cmluZ106IEl0ZW1FbnRyeVtdXG59O1xuXG5leHBvcnQgdHlwZSBVcGRhdGVDb21waWxhdGlvbiA9IEl0ZW1FbnRyeU1hcDtcblxuZXhwb3J0IHR5cGUgTW92ZUNvbXBpbGF0aW9uID0ge1xuXHRbcGFyZW50VHlwZTogc3RyaW5nXToge1xuXHRcdFtwYXJlbnRJZDogbnVtYmVyXTogTW92ZU1hcEVudHJ5W11cblx0fVxufTtcblxuZXhwb3J0IGNsYXNzIENoYW5nZXNDb21waWxhdGlvbiB7XG5cdGNvbXBpbGF0aW9uOiB7XG5cdFx0Y3JlYXRlOiBDcmVhdGVDb21waWxhdGlvbixcblx0XHRkZWxldGU6IERlbGV0ZUNvbXBpbGF0aW9uLFxuXHRcdHVwZGF0ZTogVXBkYXRlQ29tcGlsYXRpb24sXG5cdFx0bW92ZTogTW92ZUNvbXBpbGF0aW9uXG5cdH0gPSB7XG5cdFx0Y3JlYXRlOiB7fSxcblx0XHRkZWxldGU6IHt9LFxuXHRcdHVwZGF0ZToge30sXG5cdFx0bW92ZToge31cblx0fTtcblxuXHRjb2xsZWN0aW9uczogQ29sbGVjdGlvbkNhY2hlO1xuXG5cdHByaXZhdGUgbW92ZUFycmF5OiBJdGVtRW50cnlbXSA9IFtdO1xuXG5cdHByaXZhdGUgZGVsZXRlTWFwOiB7XG5cdFx0W2l0ZW1UeXBlOiBzdHJpbmddOiB7XG5cdFx0XHRbaXRlbUlkOiBudW1iZXJdOiBEZWxldGVNYXBFbnRyeVxuXHRcdH1cblx0fSA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25DYWNoZUZhY3Rvcnk6IENvbGxlY3Rpb25DYWNoZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuXHRcdHB1YmxpYyBzaW5nbGVJdGVtczogSXRlbUVudHJ5W10sXG5cdFx0Y29sbGVjdGlvbkVudHJpZXM6IENvbGxlY3Rpb25FbnRyeVtdXG5cdCkge1xuXHRcdHRoaXMuY29sbGVjdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XG5cblx0XHR0aGlzLnByb2Nlc3NTaW5nbGVJdGVtcygpO1xuXHRcdHRoaXMucHJvY2Vzc0NvbGxlY3Rpb25zKGNvbGxlY3Rpb25FbnRyaWVzKTtcblx0XHR0aGlzLnBvc3RQcm9jZXNzKCk7XG5cdH1cblxuXHRnZXREZWZhdWx0UGFyZW50ICgpOiBFbnRyeVBhcmVudCB7XG5cdFx0cmV0dXJuIHtpdGVtVHlwZTogJ1ZvaWQnLCBpdGVtSWQ6IDB9O1xuXHR9XG5cblx0YWRkTW92ZUVudHJ5IChpdGVtRW50cnk6IEl0ZW1FbnRyeSk6IHZvaWQge1xuXHRcdHRoaXMubW92ZUFycmF5LnB1c2goaXRlbUVudHJ5KTtcblx0fVxuXG5cdGFkZERlbGV0ZUVudHJ5IChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgcGFyZW50OiBFbnRyeVBhcmVudE51bGwpOiB2b2lkIHtcblx0XHRjcmVhdGVQYXRoKFxuXHRcdFx0dGhpcy5kZWxldGVNYXAsXG5cdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcblx0XHRcdFt7fSwge2l0ZW06IGl0ZW1FbnRyeSwgcGFyZW50OiBwYXJlbnR9XVxuXHRcdCk7XG5cdH1cblxuXHRhZGRVcGRhdGVFbnRyeSAoaXRlbUVudHJ5OiBJdGVtRW50cnkpOiB2b2lkIHtcblx0XHRjcmVhdGVQYXRoKFxuXHRcdFx0dGhpcy5jb21waWxhdGlvbi51cGRhdGUsXG5cdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcblx0XHRcdFt7fSwgaXRlbUVudHJ5XVxuXHRcdCk7XG5cdH1cblxuXHRhZGRDcmVhdGVFbnRyeSAoaXRlbUVudHJ5OiBJdGVtRW50cnkpOiB2b2lkIHtcblx0XHRsZXQgcGFyZW50ID0gaXRlbUVudHJ5LnBhcmVudDtcblxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXG5cdFx0XHRwYXJlbnQgPSB0aGlzLmdldERlZmF1bHRQYXJlbnQoKTtcblxuXHRcdGNyZWF0ZVBhdGgoXG5cdFx0XHR0aGlzLmNvbXBpbGF0aW9uLmNyZWF0ZSxcblx0XHRcdFtwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQsIGl0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXG5cdFx0XHRbe30sIHt9LCB7fSwgaXRlbUVudHJ5XVxuXHRcdCk7XG5cdH1cblxuXHRjb250YWluc0NyZWF0ZUVudHJ5IChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgY3JlYXRlQ29tcGlsYXRpb24gPSB0aGlzLmNvbXBpbGF0aW9uLmNyZWF0ZTtcblxuXHRcdGZvciAoY29uc3QgcGFyZW50VHlwZSBpbiBjcmVhdGVDb21waWxhdGlvbikge1xuXHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBjcmVhdGVDb21waWxhdGlvbltwYXJlbnRUeXBlXSkge1xuXHRcdFx0XHRjb25zdCBpdGVtRW50cnlNYXAgPSBjcmVhdGVDb21waWxhdGlvbltwYXJlbnRUeXBlXVtwYXJlbnRJZF1baXRlbVR5cGVdO1xuXG5cdFx0XHRcdGlmIChpdGVtRW50cnlNYXAgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBpdGVtRW50cnlNYXApIHtcblx0XHRcdFx0XHRpZiAoaXRlbUVudHJ5TWFwW2tleV0uaXRlbUlkID09PSBpdGVtSWQpXG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHByaXZhdGUgY3JlYXRlRGVsZXRlQ29tcGlsYXRpb24gKCk6IHZvaWQge1xuXHRcdGNvbnN0IGRlbGV0ZU1hcCA9IHRoaXMuZGVsZXRlTWFwO1xuXHRcdGNvbnN0IGRlbGV0ZUNvbXBpbGF0aW9uID0gdGhpcy5jb21waWxhdGlvbi5kZWxldGU7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGRlbGV0ZU1hcCkge1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZGVsZXRlTWFwW2l0ZW1UeXBlXSkge1xuXHRcdFx0XHRjb25zdCBpdGVtRW50cnk6IEl0ZW1FbnRyeSA9IGRlbGV0ZU1hcFtpdGVtVHlwZV1baXRlbUlkXS5pdGVtO1xuXG5cdFx0XHRcdGlmIChkZWxldGVDb21waWxhdGlvbltpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRkZWxldGVDb21waWxhdGlvbltpdGVtVHlwZV0gPSBbXTtcblxuXHRcdFx0XHRkZWxldGVDb21waWxhdGlvbltpdGVtVHlwZV0ucHVzaChpdGVtRW50cnkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHBvc3RQcm9jZXNzICgpOiB2b2lkIHtcblx0XHRjb25zdCBkZWxldGVNYXAgPSB0aGlzLmRlbGV0ZU1hcDtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIHRoaXMubW92ZUFycmF5KSB7XG5cdFx0XHRjb25zdCBkZWxldGVFbnRyeTogRGVsZXRlTWFwRW50cnkgPSBnZXRQYXRoKGRlbGV0ZU1hcCwgW2l0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0pO1xuXG5cdFx0XHRpZiAoZGVsZXRlRW50cnkgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdC8vIGFzc3VtZSB0aGUgaXRlbUVudHJ5IGhhcyBhIHBhcmVudCAob3Igc29tZXRoaW5nIHdlbnQgc2VyaW91c2x5IHdyb25nKVxuXHRcdFx0Y29uc3Qge2l0ZW1UeXBlOiBwYXJlbnRUeXBlLCBpdGVtSWQ6IHBhcmVudElkfSA9IDxFbnRyeVBhcmVudD4gaXRlbUVudHJ5LnBhcmVudDtcblxuXHRcdFx0aWYgKHRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQocGFyZW50SWQpICYmICF0aGlzLmNvbnRhaW5zQ3JlYXRlRW50cnkocGFyZW50VHlwZSwgcGFyZW50SWQpKSB7XG5cdFx0XHRcdGl0ZW1FbnRyeS5wYXJlbnQgPSBkZWxldGVFbnRyeS5wYXJlbnQ7XG5cblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGNyZWF0ZVBhdGg8RGVsZXRlTWFwRW50cnlbXT4odGhpcy5jb21waWxhdGlvbi5tb3ZlLCBbcGFyZW50VHlwZSwgcGFyZW50SWRdLCBbe30sIFtdXSkucHVzaChkZWxldGVFbnRyeSk7XG5cblx0XHRcdGRlbGV0ZSBkZWxldGVNYXBbaXRlbUVudHJ5Lml0ZW1UeXBlXVtpdGVtRW50cnkuaXRlbUlkXTtcblx0XHR9XG5cblx0XHR0aGlzLmNyZWF0ZURlbGV0ZUNvbXBpbGF0aW9uKCk7XG5cdH1cblxuXHRwcml2YXRlIHByb2Nlc3NTaW5nbGVJdGVtcyAoKTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgdGhpcy5zaW5nbGVJdGVtcykge1xuXHRcdFx0aWYgKGl0ZW1FbnRyeS5pc0xvY2FsKCkpXG5cdFx0XHRcdHRoaXMuYWRkQ3JlYXRlRW50cnkoaXRlbUVudHJ5KTtcblx0XHRcdGVsc2UgaWYgKGl0ZW1FbnRyeS5oYXNDaGFuZ2VzKCkpXG5cdFx0XHRcdHRoaXMuYWRkVXBkYXRlRW50cnkoaXRlbUVudHJ5KTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHByb2Nlc3NDb2xsZWN0aW9ucyAoY29sbGVjdGlvbkVudHJpZXM6IENvbGxlY3Rpb25FbnRyeVtdKTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgY29sbGVjdGlvbkVudHJpZXMpIHtcblx0XHRcdHRoaXMuY29sbGVjdGlvbnMuYWRkKGNvbGxlY3Rpb25FbnRyeSk7XG5cblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXNEZWZlcnJlZCgpKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0bGV0IGFkZGVkSXRlbXM6IEl0ZW1FbnRyeVtdO1xuXHRcdFx0bGV0IHJlbW92ZWRJdGVtczogSXRlbUVudHJ5W107XG5cblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXNMb2NhbCgpKSB7XG5cdFx0XHRcdGFkZGVkSXRlbXMgPSBjb2xsZWN0aW9uRW50cnkuaXRlbXM7XG5cdFx0XHRcdHJlbW92ZWRJdGVtcyA9IFtdO1xuXHRcdFx0fSBlbHNlIGlmIChjb2xsZWN0aW9uRW50cnkuaGFzRWRpdFJlc291cmNlcykge1xuXHRcdFx0XHRhZGRlZEl0ZW1zID0gY29sbGVjdGlvbkVudHJ5LmdldEFkZGVkSXRlbXMoKTtcblx0XHRcdFx0cmVtb3ZlZEl0ZW1zID0gY29sbGVjdGlvbkVudHJ5LmdldFJlbW92ZWRJdGVtcygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YWRkZWRJdGVtcyA9IFtdO1xuXHRcdFx0XHRyZW1vdmVkSXRlbXMgPSBbXTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yIChjb25zdCBhZGRlZEl0ZW0gb2YgYWRkZWRJdGVtcykgeyAvLyBpdCBpcyBwb3NzaWJsZSB0byBtb3ZlIGFuIGV4aXN0aW5nIGl0ZW0gdG8gYSBuZXcgY29sbGVjdGlvblxuXHRcdFx0XHRpZiAoYWRkZWRJdGVtLmlzTG9jYWwoKSlcblx0XHRcdFx0XHR0aGlzLmFkZENyZWF0ZUVudHJ5KGFkZGVkSXRlbSk7XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHR0aGlzLmFkZE1vdmVFbnRyeShhZGRlZEl0ZW0pO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGNvbnN0IHJlbW92ZWRJdGVtIG9mIHJlbW92ZWRJdGVtcylcblx0XHRcdFx0dGhpcy5hZGREZWxldGVFbnRyeShyZW1vdmVkSXRlbSwgY29sbGVjdGlvbkVudHJ5LnBhcmVudCk7XG5cblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaGFzSXRlbUVkaXRSZXNvdXJjZXMpIHtcblx0XHRcdFx0Y29uc3QgdXBkYXRlZEl0ZW1zID0gY29sbGVjdGlvbkVudHJ5LmdldFVwZGF0ZWRJdGVtcygpO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgdXBkYXRlZEl0ZW0gb2YgdXBkYXRlZEl0ZW1zKVxuXHRcdFx0XHRcdHRoaXMuYWRkVXBkYXRlRW50cnkodXBkYXRlZEl0ZW0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuIiwiaW1wb3J0IHtcblx0QXBpRm9ybWF0dGVyLFxuXHRDaGFuZ2VzQ29tcGlsYXRpb24sXG5cdENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdENvbGxlY3Rpb25IYW5kbGVyLFxuXHRDb2x1bW5JbmZvLFxuXHREZWxldGVDb21waWxhdGlvbixcblx0SXRlbUhhbmRsZXIsXG5cdE1vdmVDb21waWxhdGlvbixcblx0TW92ZU1hcEVudHJ5LFxuXHRVcGRhdGVDb21waWxhdGlvblxufSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7XG5cdENoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXG5cdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdENyZWF0ZVJlcXVlc3RGYWN0b3J5LFxuXHRSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxufSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7XG5cdEFwaVJlcXVlc3RNb3ZlSXRlbXMsXG5cdEFwaVJlc3BvbnNlLFxuXHRDcmVhdGVSZXF1ZXN0RW50cnksXG5cdENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAsXG5cdEVudHJ5UGFyZW50LCBGaWVsZE1hcCxcblx0SXRlbUlkLFxuXHRJdGVtSWRDb252ZXJzaW9uTWFwLFxuXHRJdGVtVHlwZSxcblx0UHJvbWlzZUludGVyZmFjZVxufSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IGNyZWF0ZVBhdGgsIGdldFBhdGgsIGhhc1Byb3BlcnRpZXMsIGluQXJyYXkgfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgY2xhc3MgQ2hhbmdlc1Byb2Nlc3NvciB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgY2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeTogQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25FbnRyeVNlcnZpY2U6IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgY3JlYXRlUmVxdWVzdEZhY3Rvcnk6IENyZWF0ZVJlcXVlc3RGYWN0b3J5LFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSByZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnlcblx0KSB7XG5cdH1cblxuXHRidWlsZE1vdmVSZXF1ZXN0IChjb21waWxhdGlvbkVudHJpZXM6IE1vdmVNYXBFbnRyeVtdKTogQXBpUmVxdWVzdE1vdmVJdGVtcyB7XG5cdFx0Y29uc3QgcmVzdWx0OiBBcGlSZXF1ZXN0TW92ZUl0ZW1zID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGNvbXBpbGF0aW9uRW50cnkgb2YgY29tcGlsYXRpb25FbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSBjb21waWxhdGlvbkVudHJ5Lml0ZW07XG5cdFx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcblxuXHRcdFx0aWYgKHJlc3VsdFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0cmVzdWx0W2l0ZW1UeXBlXSA9IFtdO1xuXG5cdFx0XHRyZXN1bHRbaXRlbVR5cGVdLnB1c2goaXRlbUVudHJ5Lml0ZW1JZCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldE1hcFZhbHVlIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkLCBtYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApOiBJdGVtSWQgfCB1bmRlZmluZWQge1xuXHRcdGlmIChtYXAgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRpZiAobWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdHJldHVybiBtYXBbaXRlbVR5cGVdW2l0ZW1JZF07XG5cdH1cblxuXHRwcml2YXRlIGV4ZWN1dGVDcmVhdGVSZXF1ZXN0cyAoXG5cdFx0Y2hhbmdlc0NvbXBpbGF0aW9uOiBDaGFuZ2VzQ29tcGlsYXRpb24sXG5cdFx0cGFyYW1ldGVyczogQ3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCxcblx0XHRjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwLFxuXHRcdGJyZWFrdXBCeVBhcmVudD86IGJvb2xlYW4sXG5cdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrPzogKGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApID0+IHZvaWRcblx0KTogUHJvbWlzZUludGVyZmFjZTxJdGVtSWRDb252ZXJzaW9uTWFwPiB7XG5cdFx0Y29uc3QgcmVxdWVzdHMgPSB0aGlzLmNyZWF0ZVJlcXVlc3RGYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdGNoYW5nZXNDb21waWxhdGlvbi5jb21waWxhdGlvbi5jcmVhdGUsXG5cdFx0XHRjaGFuZ2VzQ29tcGlsYXRpb24uY29sbGVjdGlvbnMsXG5cdFx0XHRwYXJhbWV0ZXJzLFxuXHRcdFx0YnJlYWt1cEJ5UGFyZW50XG5cdFx0KS5ydW4oKTtcblxuXHRcdGNvbnN0IHJlc3BvbnNlczogQXJyYXk8UHJvbWlzZUludGVyZmFjZTxhbnk+PiA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCByZXF1ZXN0IG9mIHJlcXVlc3RzKVxuXHRcdFx0cmVzcG9uc2VzLnB1c2godGhpcy5leGVjdXRlQ3JlYXRlUmVxdWVzdChyZXF1ZXN0LCBjb252ZXJzaW9uTWFwKS50aGVuKG5vdGlmeSkpO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHJlc3BvbnNlcykudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIGNvbnZlcnNpb25NYXA7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblxuXHRcdGZ1bmN0aW9uIG5vdGlmeSAocmVzdWx0OiBhbnkpIHtcblx0XHRcdGlmIChvbkFmdGVyQ3JlYXRlQ2FsbGJhY2sgIT09IHVuZGVmaW5lZClcblx0XHRcdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrKGNvbnZlcnNpb25NYXApO1xuXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZXhlY3V0ZUNyZWF0ZVJlcXVlc3QgKFxuXHRcdHJlcXVlc3RSZXNvdXJjZTogQ3JlYXRlUmVxdWVzdEVudHJ5LFxuXHRcdGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXBcblx0KTogUHJvbWlzZUludGVyZmFjZTx2b2lkPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucmVxdWVzdFNrZWxldG9uKHJlcXVlc3RSZXNvdXJjZS5yZXF1ZXN0KS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRjb25zdCByZXNwb25zZU1hcCA9IHJlc3BvbnNlLm1hcDtcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCk7XG5cdFx0XHRcdGNvbnN0IGl0ZW1FbnRyaWVzID0gcmVxdWVzdFJlc291cmNlLml0ZW1zO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gaXRlbUVudHJpZXMpIHtcblx0XHRcdFx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0XHRyZXF1ZXN0UmVzb3VyY2UucmVxdWVzdC5jb2x1bW5zW2l0ZW1UeXBlXSxcblx0XHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1uc1xuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtRW50cmllc1tpdGVtVHlwZV0pIHtcblx0XHRcdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeTogSXRlbUVudHJ5ID0gaXRlbUVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF07XG5cdFx0XHRcdFx0XHRjb25zdCBuZXdJdGVtSWQgPSB0aGlzLmdldE1hcFZhbHVlKGl0ZW1UeXBlLCBwYXJzZUludChpdGVtSWQsIDEwKSwgcmVzcG9uc2VNYXApO1xuXG5cdFx0XHRcdFx0XHRpZiAobmV3SXRlbUlkID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKCdDcmVhdGUgZmFpbGVkIScsIGl0ZW1FbnRyeSk7XG5cdFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRjb25zdCBmaWVsZHMgPSByZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgbmV3SXRlbUlkKTtcblx0XHRcdFx0XHRcdGNvbnN0IGV4cGFuZFJlc291cmNlID0gY29sdW1uRXhwYW5zaW9uLnJ1bihpdGVtRW50cnkuY29sdW1ucyk7XG5cblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5pdGVtSWQgPSBuZXdJdGVtSWQ7XG5cdFx0XHRcdFx0XHRpdGVtRW50cnkudXBkYXRlRmllbGRzKFxuXHRcdFx0XHRcdFx0XHRmaWVsZHMsXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgbmV3SXRlbUlkLCBpdGVtRW50cnkuY29sdW1ucy5yb290KSxcblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdGlmIChleHBhbmRSZXNvdXJjZSAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnkuZXhwYW5kKFxuXHRcdFx0XHRcdFx0XHRcdGZpZWxkcyxcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIG5ld0l0ZW1JZCwgZXhwYW5kUmVzb3VyY2UuZGlmZmVyZW5jZS5yb290KSxcblx0XHRcdFx0XHRcdFx0XHRleHBhbmRSZXNvdXJjZVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuYWRkKGl0ZW1FbnRyeSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmVxdWVzdFJlc291cmNlLmNvbGxlY3Rpb25zLmFkZFRvQ29sbGVjdGlvbnMoKTtcblxuXHRcdFx0XHQvLyBleHRlbmQgY29udmVyc2lvbiBtYXBcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiByZXNwb25zZU1hcCkge1xuXHRcdFx0XHRcdGlmIChjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdFx0Y29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPSB7fTtcblxuXHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHJlc3BvbnNlTWFwW2l0ZW1UeXBlXSlcblx0XHRcdFx0XHRcdGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdW3BhcnNlSW50KGl0ZW1JZCwgMTApXSA9IHJlc3BvbnNlTWFwW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgZXhlY3V0ZVVwZGF0ZVJlcXVlc3RzIChjb21waWxhdGlvbjogVXBkYXRlQ29tcGlsYXRpb24sIHBhcmFtZXRlcnM6IGFueSkge1xuXHRcdGNvbnN0IHJlcXVlc3RzOiBBcnJheTxQcm9taXNlSW50ZXJmYWNlPEFwaVJlc3BvbnNlPj4gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gY29tcGlsYXRpb24pXG5cdFx0XHRyZXF1ZXN0cy5wdXNoKHRoaXMuZXhlY3V0ZVVwZGF0ZVJlcXVlc3QoaXRlbVR5cGUsIGNvbXBpbGF0aW9uW2l0ZW1UeXBlXSwgcGFyYW1ldGVycykpO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHJlcXVlc3RzKTtcblx0fVxuXG5cdHByaXZhdGUgZXhlY3V0ZVVwZGF0ZVJlcXVlc3QgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUVudHJpZXM6IHtbaXRlbUlkOiBudW1iZXJdOiBJdGVtRW50cnl9LCBwYXJhbWV0ZXJNYXA6IGFueSkge1xuXHRcdGNvbnN0IHJlcXVlc3Q6IHtbaXRlbVR5cGU6IHN0cmluZ106IHtbaXRlbUlkOiBudW1iZXJdOiBGaWVsZE1hcH19ID0ge307XG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSB0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdCgpO1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25NYXRjaGVyID0gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5nZXRDb2xsZWN0aW9uTWF0Y2hlcigpO1xuXG5cdFx0cmVxdWVzdFtpdGVtVHlwZV0gPSB7fTtcblxuXHRcdC8vIHdlIG5lZWQgdG8gZG8gdGhlIGZvcm1hdFJlcXVlc3QgY2FsbCBoZXJlIChmaWVsZHMgbWlnaHQgaGF2ZSBiZWVuIHVwZGF0ZWQpXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbUVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGl0ZW1FbnRyaWVzW2l0ZW1JZF07XG5cdFx0XHQvLyBSTUNvcmUgdG9kbzogdHlwZVxuXHRcdFx0Y29uc3QgaXRlbVJlcXVlc3Q6IGFueSA9IHJlcXVlc3RbaXRlbVR5cGVdW2l0ZW1JZF0gPSB7fTtcblx0XHRcdGNvbnN0IHBhcmFtZXRlcnMgPSBnZXRQYXRoKHBhcmFtZXRlck1hcCwgW2l0ZW1UeXBlLCBpdGVtSWRdKTtcblxuXHRcdFx0aXRlbVJlcXVlc3QudmFsdWVzID0gaXRlbUVudHJ5LmZvcm1hdFJlcXVlc3QoKTtcblxuXHRcdFx0aWYgKHBhcmFtZXRlcnMgIT09IHVuZGVmaW5lZClcblx0XHRcdFx0aXRlbVJlcXVlc3QucGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7XG5cblx0XHRcdHJlcXVlc3RDb2x1bW5zLmV4cGFuZChpdGVtRW50cnkuY29sdW1ucyk7XG5cdFx0XHRjb2xsZWN0aW9uTWF0Y2hlci5leHBhbmQoaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRjb25zdCBjb2xsZWN0aW9uc1dpdGhGaXR0aW5nSXRlbXMgPSBjb2xsZWN0aW9uTWF0Y2hlci5nZXRDb2xsZWN0aW9uc1dpdGhGaXR0aW5nSXRlbXMoKTtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9uc1dpdGhGaXR0aW5nSXRlbXMpXG5cdFx0XHRyZXF1ZXN0Q29sdW1ucy5leHBhbmQoY29sbGVjdGlvbi5jb2x1bW5zKTtcblxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnVwZGF0ZUl0ZW1zKGl0ZW1UeXBlLCByZXF1ZXN0LCByZXF1ZXN0Q29sdW1ucy5nZXQoKSkudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRyZXF1ZXN0Q29sdW1ucy5nZXQoKVtpdGVtVHlwZV0sXG5cdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KClcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtRW50cmllcykge1xuXHRcdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGl0ZW1FbnRyaWVzW2l0ZW1JZF07XG5cdFx0XHRcdFx0Y29uc3QgZmllbGRzID0gcmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCk7XG5cblx0XHRcdFx0XHRpZiAoZmllbGRzID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdGNvbnNvbGUud2FybignVXBkYXRlIGZhaWxlZCEnLCBpdGVtRW50cnkpO1xuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29uc3QgcHJldmlvdXMgPSB0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGl0ZW1FbnRyeS5pbml0aWFsLCB7fSwgaXRlbUVudHJ5LmNvbHVtbnMubWFpbik7XG5cblx0XHRcdFx0XHRpdGVtRW50cnlcblx0XHRcdFx0XHRcdC51cGRhdGVGaWVsZHMoZmllbGRzLCByZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgaXRlbUVudHJ5LmNvbHVtbnMucm9vdCkpXG5cdFx0XHRcdFx0XHQuY2FsbE9uQ2hhbmdlKHByZXZpb3VzKTtcblxuXHRcdFx0XHRcdGNvbnN0IGV4cGFuZFJlc291cmNlID0gY29sdW1uRXhwYW5zaW9uLnJ1bihpdGVtRW50cnkuY29sdW1ucyk7XG5cblx0XHRcdFx0XHRpZiAoZXhwYW5kUmVzb3VyY2UgPT09IG51bGwpXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5leHBhbmQoXG5cdFx0XHRcdFx0XHRmaWVsZHMsXG5cdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgZXhwYW5kUmVzb3VyY2UuZGlmZmVyZW5jZS5yb290KSxcblx0XHRcdFx0XHRcdGV4cGFuZFJlc291cmNlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyLnJlbW92ZUZyb21BbmRBZGRUb0NvbGxlY3Rpb25zKCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgZXhlY3V0ZURlbGV0ZVJlcXVlc3RzIChjb21waWxhdGlvbjogRGVsZXRlQ29tcGlsYXRpb24pIHtcblx0XHRjb25zdCByZXF1ZXN0czogQXJyYXk8UHJvbWlzZUludGVyZmFjZTx2b2lkPj4gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gY29tcGlsYXRpb24pIC8vIGNsZWFyaW5nIG5vdCBuZWNlc3Nhcnlcblx0XHRcdHJlcXVlc3RzLnB1c2godGhpcy5leGVjdXRlRGVsZXRlUmVxdWVzdChpdGVtVHlwZSwgY29tcGlsYXRpb25baXRlbVR5cGVdKSk7XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocmVxdWVzdHMpO1xuXHR9XG5cblx0cHJpdmF0ZSBleGVjdXRlRGVsZXRlUmVxdWVzdCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtRW50cmllczogSXRlbUVudHJ5W10pIHtcblx0XHRjb25zdCBpZEFycmF5OiBJdGVtSWRbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXG5cdFx0XHRpZEFycmF5LnB1c2goaXRlbUVudHJ5Lml0ZW1JZCk7XG5cblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5kZWxldGUoaXRlbVR5cGUsIGlkQXJyYXkpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlSWRBcnJheSA9IHJlc3BvbnNlLml0ZW1zO1xuXHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uTWF0Y2hlciA9IHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZ2V0Q29sbGVjdGlvbk1hdGNoZXIoKTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0XHRcdGlmICghaW5BcnJheShpdGVtRW50cnkuaXRlbUlkLCByZXNwb25zZUlkQXJyYXkpKVxuXHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKCdEZWxldGUgZmFpbGVkIScsIGl0ZW1FbnRyeSk7XG5cblx0XHRcdFx0XHRjb2xsZWN0aW9uTWF0Y2hlci5leHBhbmQoaXRlbUVudHJ5KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyLnJlbW92ZUZyb21Db2xsZWN0aW9ucygpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIGV4ZWN1dGVNb3ZlUmVxdWVzdHMgKGNvbXBpbGF0aW9uOiBNb3ZlQ29tcGlsYXRpb24sIGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblx0XHRjb25zdCByZXF1ZXN0czogQXJyYXk8UHJvbWlzZUludGVyZmFjZTx2b2lkPj4gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgcGFyZW50VHlwZSBpbiBjb21waWxhdGlvbikge1xuXHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBjb21waWxhdGlvbltwYXJlbnRUeXBlXSlcblx0XHRcdFx0ZXhlY3V0ZU1vdmVSZXF1ZXN0KHBhcmVudFR5cGUsICtwYXJlbnRJZCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHJlcXVlc3RzKTtcblxuXHRcdGZ1bmN0aW9uIGV4ZWN1dGVNb3ZlUmVxdWVzdCAocGFyZW50VHlwZTogSXRlbVR5cGUsIHBhcmVudElkOiBJdGVtSWQpIHtcblx0XHRcdC8vIG9ubHkgdGhlIHBhcmVudCBpZCBjb3VsZCBoYXZlIGJlZW4gdXBkYXRlZFxuXHRcdFx0Y29uc3QgY29tcGlsYXRpb25FbnRyaWVzID0gY29tcGlsYXRpb25bcGFyZW50VHlwZV1bcGFyZW50SWRdO1xuXHRcdFx0Y29uc3QgbmV3UGFyZW50SWQgPSBzZWxmLmdldE1hcFZhbHVlKHBhcmVudFR5cGUsIHBhcmVudElkLCBjb252ZXJzaW9uTWFwKTtcblxuXHRcdFx0cmVxdWVzdHMucHVzaChcblx0XHRcdFx0c2VsZi5hcGlSZXF1ZXN0U2VydmljZS5tb3ZlSXRlbXMoXG5cdFx0XHRcdFx0cGFyZW50VHlwZSxcblx0XHRcdFx0XHRuZXdQYXJlbnRJZCAhPT0gdW5kZWZpbmVkID8gbmV3UGFyZW50SWQgOiBwYXJlbnRJZCxcblx0XHRcdFx0XHRzZWxmLmJ1aWxkTW92ZVJlcXVlc3QoY29tcGlsYXRpb25FbnRyaWVzKVxuXHRcdFx0XHQpLnRoZW4oXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0c2VsZi5wcm9jZXNzTW92ZVJlc3BvbnNlKC8qIHJlc3BvbnNlLCAqL2NvbXBpbGF0aW9uRW50cmllcyk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRzZWxmLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHByb2Nlc3NNb3ZlUmVzcG9uc2UgKC8qIHJlc3BvbnNlLCAqL2NvbXBpbGF0aW9uRW50cmllczogTW92ZU1hcEVudHJ5W10pIHtcblx0XHQvLyBUT0RPOiBwcm9jZXNzIHJlc3BvbnNlXG5cblx0XHRjb25zdCBpdGVtRW50cmllczogSXRlbUVudHJ5W10gPSBbXTtcblx0XHRjb25zdCByZW1vdmVDb2xsZWN0aW9uTWFwID0ge307XG5cdFx0Y29uc3QgYWRkQ29sbGVjdGlvbk1hcCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBjb21waWxhdGlvbkVudHJ5IG9mIGNvbXBpbGF0aW9uRW50cmllcykge1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5OiBJdGVtRW50cnkgPSBjb21waWxhdGlvbkVudHJ5Lml0ZW07XG5cblx0XHRcdHRoaXMuYWRkQ29sbGVjdGlvbk1hcEVudHJ5KFxuXHRcdFx0XHRyZW1vdmVDb2xsZWN0aW9uTWFwLFxuXHRcdFx0XHRjb21waWxhdGlvbkVudHJ5LnBhcmVudC5pdGVtSWQsXG5cdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0aXRlbUVudHJ5Lml0ZW1JZFxuXHRcdFx0KTtcblxuXHRcdFx0dGhpcy5hZGRDb2xsZWN0aW9uTWFwRW50cnkoXG5cdFx0XHRcdGFkZENvbGxlY3Rpb25NYXAsXG5cdFx0XHRcdChpdGVtRW50cnkucGFyZW50IGFzIEVudHJ5UGFyZW50KS5pdGVtSWQsXG5cdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0aXRlbUVudHJ5XG5cdFx0XHQpO1xuXG5cdFx0XHRpdGVtRW50cmllcy5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5mb3JFYWNoQ29sbGVjdGlvbihyZW1vdmVDb2xsZWN0aW9uTWFwLCAncmVtb3ZlSXRlbXMnKTtcblx0XHR0aGlzLmZvckVhY2hDb2xsZWN0aW9uKGFkZENvbGxlY3Rpb25NYXAsICdhZGRJdGVtcycpO1xuXHR9XG5cblx0cHJpdmF0ZSBhZGRDb2xsZWN0aW9uTWFwRW50cnk8VD4gKGNvbGxlY3Rpb25NYXA6IGFueSwgcGFyZW50SWQ6IEl0ZW1JZCwgaXRlbUVudHJ5OiBJdGVtRW50cnksIHZhbHVlOiBUKTogdm9pZCB7XG5cdFx0Y29uc3QgY29sbGVjdGlvbk1hcEVudHJ5ID0gY3JlYXRlUGF0aDxUW10+KFxuXHRcdFx0Y29sbGVjdGlvbk1hcCxcblx0XHRcdFtpdGVtRW50cnkucGFyZW50IS5pdGVtVHlwZSwgcGFyZW50SWQsIGl0ZW1FbnRyeS5pdGVtVHlwZV0sXG5cdFx0XHRbe30sIHt9LCBbXV1cblx0XHQpO1xuXG5cdFx0Y29sbGVjdGlvbk1hcEVudHJ5LnB1c2godmFsdWUpO1xuXHR9XG5cblx0cHJpdmF0ZSBmb3JFYWNoQ29sbGVjdGlvbiAoY29sbGVjdGlvbk1hcDogYW55LCBtZXRob2Q6IGtleW9mIENvbGxlY3Rpb25FbnRyeSkge1xuXHRcdGZvciAoY29uc3QgcGFyZW50VHlwZSBpbiBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGNvbGxlY3Rpb25NYXBbcGFyZW50VHlwZV0pIHtcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBjb2xsZWN0aW9uTWFwW3BhcmVudFR5cGVdW3BhcmVudElkXSkge1xuXHRcdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZW50cmllcy5nZXRCeVBhcmVudChwYXJlbnRUeXBlLCBwYXJzZUludChwYXJlbnRJZCwgMTApLCBpdGVtVHlwZSk7XG5cblx0XHRcdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ID09PSBudWxsKVxuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cnlbbWV0aG9kXShcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb25NYXBbcGFyZW50VHlwZV1bcGFyZW50SWRdW2l0ZW1UeXBlXSxcblx0XHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIG5vdGU6IHdpdGggdGhlIG5ldyBpdGVtIHN0cnVjdHVyZSwgKmFsbCogbG9jYWwgaXRlbXMgYXJlIGluIHRoZSBzaW5nbGUgaXRlbSBjYWNoZVxuXHRwcml2YXRlIG9uSXRlbXNDcmVhdGVkIChcblx0XHRjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwLFxuXHRcdHNpbmdsZUl0ZW1zOiBJdGVtRW50cnlbXSxcblx0XHRjb2xsZWN0aW9uczogQ29sbGVjdGlvbkVudHJ5W11cblx0KSB7XG5cdFx0aWYgKCFoYXNQcm9wZXJ0aWVzKGNvbnZlcnNpb25NYXApKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgY29sbGVjdGlvbnMpIHtcblx0XHRcdGNvbnN0IHBhcmVudCA9IGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQ7XG5cdFx0XHRjb25zdCB1cGRhdGVkQ29sdW1uczoge1tjb2x1bW5JZDogc3RyaW5nXTogQ29sdW1uSW5mb30gPVxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuZ2V0VXBkYXRlZEl0ZW1Db2x1bW5zKGNvbnZlcnNpb25NYXApO1xuXG5cdFx0XHRpZiAocGFyZW50ICE9PSBudWxsKSB7XG5cdFx0XHRcdGNvbnN0IG5ld1BhcmVudElkID0gdGhpcy5nZXRNYXBWYWx1ZShwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQsIGNvbnZlcnNpb25NYXApO1xuXG5cdFx0XHRcdGlmIChuZXdQYXJlbnRJZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0cGFyZW50Lml0ZW1JZCA9IG5ld1BhcmVudElkO1xuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5xdWVyeSA9IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jcmVhdGVRdWVyeShjb2xsZWN0aW9uRW50cnkub3B0aW9ucyk7XG5cblx0XHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmVudHJpZXMuYWRkKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKCFoYXNQcm9wZXJ0aWVzKHVwZGF0ZWRDb2x1bW5zKSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGlmICh1cGRhdGVkQ29sdW1ucy5pZCAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkub25JdGVtc0NyZWF0ZWQoY29udmVyc2lvbk1hcFtjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGVdKTtcblxuXHRcdFx0Ly8gd2hlbiB1cGRhdGluZyBhbiBpdGVtIHRvIHJlZmVyIHRvIGEgbmV3bHkgY3JlYXRlZCBpdGVtLCB0aGUgdXBkYXRlZCBpdGVtIHdpbGwgKm5vdCogYmUgYWRkZWQgdG9cblx0XHRcdC8vIHNpbmdsZSBpdGVtcyAoZS5nLiBtb3ZpbmcgYSBmdW5jdGlvbiB0byBhIG5ld2x5IGNyZWF0ZWQgZnVuY3Rpb24gZ3JvdXApXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBjb2xsZWN0aW9uRW50cnkuaXRlbXMpXG5cdFx0XHRcdGl0ZW1FbnRyeS51cGRhdGVJdGVtRmllbGRzKGNvbnZlcnNpb25NYXApO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIHNpbmdsZUl0ZW1zKSB7XG5cdFx0XHRjb25zdCBwYXJlbnQgPSBpdGVtRW50cnkucGFyZW50O1xuXG5cdFx0XHRpdGVtRW50cnkudXBkYXRlSXRlbUZpZWxkcyhjb252ZXJzaW9uTWFwKTtcblxuXHRcdFx0aWYgKHBhcmVudCAhPT0gbnVsbCkge1xuXHRcdFx0XHRjb25zdCBuZXdQYXJlbnRJZCA9IHRoaXMuZ2V0TWFwVmFsdWUocGFyZW50Lml0ZW1UeXBlLCBwYXJlbnQuaXRlbUlkLCBjb252ZXJzaW9uTWFwKTtcblxuXHRcdFx0XHRpZiAobmV3UGFyZW50SWQgIT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRwYXJlbnQuaXRlbUlkID0gbmV3UGFyZW50SWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gcHJvcGVyIG9yZGVyOiBjcmVhdGUgLSBtb3ZlIC0gZGVsZXRlIC0gdXBkYXRlXG5cdGV4ZWN1dGUgKFxuXHRcdHNpbmdsZUl0ZW1zOiBJdGVtRW50cnlbXSxcblx0XHRjb2xsZWN0aW9uczogQ29sbGVjdGlvbkVudHJ5W10sXG5cdFx0cGFyYW1ldGVyczogQ3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCA9IHt9LFxuXHRcdGJyZWFrdXBCeVBhcmVudD86IGJvb2xlYW4sXG5cdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrPzogKGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApID0+IHZvaWRcblx0KTogUHJvbWlzZUludGVyZmFjZTxJdGVtSWRDb252ZXJzaW9uTWFwPiB7XG5cdFx0Y29uc3QgZXJyb3JIYW5kbGVyID0gdGhpcy5lcnJvckhhbmRsZXI7XG5cdFx0Y29uc3QgY2hhbmdlc0NvbXBpbGF0aW9uID0gdGhpcy5jaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LmNvbnN0cnVjdChzaW5nbGVJdGVtcywgY29sbGVjdGlvbnMpO1xuXHRcdGNvbnN0IGNvbXBpbGF0aW9uID0gY2hhbmdlc0NvbXBpbGF0aW9uLmNvbXBpbGF0aW9uO1xuXHRcdGNvbnN0IGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAgPSB7fTtcblxuXHRcdHJldHVybiB0aGlzLmV4ZWN1dGVDcmVhdGVSZXF1ZXN0cyhcblx0XHRcdGNoYW5nZXNDb21waWxhdGlvbixcblx0XHRcdHBhcmFtZXRlcnMsXG5cdFx0XHRjb252ZXJzaW9uTWFwLFxuXHRcdFx0YnJlYWt1cEJ5UGFyZW50LFxuXHRcdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrXG5cdFx0KS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHR0aGlzLm9uSXRlbXNDcmVhdGVkKGNvbnZlcnNpb25NYXAsIHNpbmdsZUl0ZW1zLCBjb2xsZWN0aW9ucyk7XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZU1vdmVSZXF1ZXN0cyhjb21waWxhdGlvbi5tb3ZlLCBjb252ZXJzaW9uTWFwKTtcblx0XHRcdH0sXG5cdFx0XHRlcnJvciA9PiB7XG5cdFx0XHRcdHRoaXMub25JdGVtc0NyZWF0ZWQoY29udmVyc2lvbk1hcCwgc2luZ2xlSXRlbXMsIGNvbGxlY3Rpb25zKTtcblxuXHRcdFx0XHRyZXR1cm4gZXJyb3JIYW5kbGVyLnJlamVjdChlcnJvcik7XG5cdFx0XHR9XG5cdFx0KS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5leGVjdXRlVXBkYXRlUmVxdWVzdHMoY29tcGlsYXRpb24udXBkYXRlLCBwYXJhbWV0ZXJzKTtcblx0XHRcdH0sXG5cdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5leGVjdXRlRGVsZXRlUmVxdWVzdHMoY29tcGlsYXRpb24uZGVsZXRlKTtcblx0XHRcdH0sXG5cdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gY29udmVyc2lvbk1hcDtcblx0XHRcdH0sXG5cdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uTWF0Y2hSZXN1bHQsIENvbGxlY3Rpb25RdWVyeSwgRW50cnlQYXJlbnROdWxsLCBGaWVsZE1hcCwgSXRlbUlkLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZW51bSBDT05TVEFOVFMge1xuXHRNQVlCRSA9ICdtYXliZSdcbn1cblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25DYWNoZSB7XG5cdGVudHJpZXM6IHtcblx0XHRbaXRlbVR5cGU6IHN0cmluZ106IHtcblx0XHRcdFtjb2xsZWN0aW9uRW50cnlJZDogbnVtYmVyXTogQ29sbGVjdGlvbkVudHJ5XG5cdFx0fVxuXHR9ID0ge307XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeVxuXHQpIHtcblxuXHR9XG5cblx0Y29udGFpbnMgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGVdO1xuXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJldHVybiBlbnRyaWVzW2NvbGxlY3Rpb25FbnRyeS5pZF0gIT09IHVuZGVmaW5lZDtcblx0fVxuXG5cdHNvbWUgKGNhbGxiYWNrOiAoZW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4gYm9vbGVhbik6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGVudHJpZXMpIHtcblx0XHRcdGZvciAoY29uc3QgZW50cnlJZCBpbiBlbnRyaWVzW2l0ZW1UeXBlXSkge1xuXHRcdFx0XHRpZiAoY2FsbGJhY2soZW50cmllc1tpdGVtVHlwZV1bZW50cnlJZF0pKVxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIFRPRE86IGNoZWNrIGlmIHRoaXMgaXMgc3RpbGwgaW4gdXNlXG5cdGZvckVhY2ggKGNhbGxiYWNrOiAoZW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4gdm9pZCk6IHZvaWQge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGVudHJpZXMpIHtcblx0XHRcdGZvciAoY29uc3QgZW50cnlJZCBpbiBlbnRyaWVzW2l0ZW1UeXBlXSlcblx0XHRcdFx0Y2FsbGJhY2soZW50cmllc1tpdGVtVHlwZV1bZW50cnlJZF0pO1xuXHRcdH1cblx0fVxuXG5cdHRvQXJyYXkgKCkge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uRW50cnlbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBlbnRyaWVzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllc1tpdGVtVHlwZV0pXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGVudHJpZXNbaXRlbVR5cGVdW2VudHJ5SWRdKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0YWRkIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSk6IENvbGxlY3Rpb25FbnRyeSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZTtcblxuXHRcdGlmIChlbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0ZW50cmllc1tpdGVtVHlwZV0gPSB7fTtcblxuXHRcdHJldHVybiBlbnRyaWVzW2l0ZW1UeXBlXVtjb2xsZWN0aW9uRW50cnkuaWRdID0gY29sbGVjdGlvbkVudHJ5O1xuXHR9XG5cblx0Y2xlYXIgKGNvbGxlY3Rpb25FbnRyeT86IENvbGxlY3Rpb25FbnRyeSk6IGJvb2xlYW4ge1xuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5lbnRyaWVzID0ge307XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICghdGhpcy5jb250YWlucyhjb2xsZWN0aW9uRW50cnkpKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0cmV0dXJuIGRlbGV0ZSB0aGlzLmVudHJpZXNbY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlXVtjb2xsZWN0aW9uRW50cnkuaWRdO1xuXHR9XG5cblx0Z2V0QnlJdGVtVHlwZSAoaXRlbVR5cGU6IHN0cmluZykge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xuXHRcdGNvbnN0IHJlc3VsdDogQ29sbGVjdGlvbkVudHJ5W10gPSBbXTtcblxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXMpXG5cdFx0XHRyZXN1bHQucHVzaChlbnRyaWVzW2VudHJ5SWRdKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRtYXRjaFBhcmVudCAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZDogSXRlbUlkKSB7XG5cdFx0Y29uc3QgcGFyZW50ID0gY29sbGVjdGlvbkVudHJ5LnBhcmVudDtcblxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHQvLyA9PSB0byBjb21wYXJlIGl0ZW1JZHNcblx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuXHRcdHJldHVybiBwYXJlbnQuaXRlbVR5cGUgPT09IGl0ZW1UeXBlICYmIHBhcmVudC5pdGVtSWQgPT0gaXRlbUlkO1xuXHR9XG5cblx0Ly8gVE9ETzogdGhpbmsgb2YgYmV0dGVyIG5hbWVcblx0Z2V0QnlQYXJlbnQgKHBhcmVudFR5cGU6IEl0ZW1UeXBlLCBwYXJlbnRJZDogSXRlbUlkLCBpdGVtVHlwZTogSXRlbVR5cGUpOiBDb2xsZWN0aW9uRW50cnkgfCBudWxsIHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcblxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdGZvciAoY29uc3QgZW50cnlJZCBpbiBlbnRyaWVzKSB7XG5cdFx0XHRpZiAodGhpcy5tYXRjaFBhcmVudChlbnRyaWVzW2VudHJ5SWRdLCBwYXJlbnRUeXBlLCBwYXJlbnRJZCkpXG5cdFx0XHRcdHJldHVybiBlbnRyaWVzW2VudHJ5SWRdO1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Z2V0UmVzb3VyY2VCeVBhcmVudCAocGFyZW50VHlwZTogSXRlbVR5cGUsIHBhcmVudElkOiBJdGVtSWQsIGl0ZW1UeXBlOiBJdGVtVHlwZSk6IENvbGxlY3Rpb25SZXNvdXJjZSB8IG51bGwge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuZ2V0QnlQYXJlbnQocGFyZW50VHlwZSwgcGFyZW50SWQsIGl0ZW1UeXBlKTtcblxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkgPT09IG51bGwpXG5cdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnkuZ2V0Q3VycmVudFJlc291cmNlKCk7XG5cdH1cblxuXHRnZXRDb2xsZWN0aW9uc0J5UGFyZW50IChwYXJlbnRUeXBlOiBJdGVtVHlwZSwgcGFyZW50SWQ6IEl0ZW1JZCkge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uRW50cnlbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBlbnRyaWVzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllc1tpdGVtVHlwZV0pIHtcblx0XHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gZW50cmllc1tpdGVtVHlwZV1bZW50cnlJZF07XG5cblx0XHRcdFx0aWYgKHRoaXMubWF0Y2hQYXJlbnQoY29sbGVjdGlvbkVudHJ5LCBwYXJlbnRUeXBlLCBwYXJlbnRJZCkpXG5cdFx0XHRcdFx0cmVzdWx0LnB1c2goY29sbGVjdGlvbkVudHJ5KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIE9ubHkgcmVzb3VyY2VzXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpdGVtVHlwZVxuXHQgKiBAcGFyYW0ge1N0cmluZ3xJbnRlZ2VyfSBpdGVtSWRcblx0ICogQHJldHVybnMge09iamVjdH0gQXJyYXkgb2YgY29sbGVjdGlvbnMuXG5cdCAqL1xuXHRnZXRCeUNvbnRhaW5pbmdJdGVtIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkKSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uRW50cnlbXSA9IFtdO1xuXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllcykge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gZW50cmllc1tlbnRyeUlkXTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5nZXRJdGVtQnlJZChpdGVtSWQpICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGNvbGxlY3Rpb25zIHRoZSBpdGVtICdiZWxvbmdzJyBpbi5cblx0ICovXG5cdGdldEJ5Rml0dGluZ0l0ZW0gKGl0ZW1UeXBlOiBJdGVtVHlwZSwgZmllbGRzOiBGaWVsZE1hcCwgcGFyZW50OiBFbnRyeVBhcmVudE51bGwpIHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcblx0XHRjb25zdCByZXN1bHQ6IENvbGxlY3Rpb25NYXRjaFJlc3VsdCA9IHtmaXR0aW5nOiBbXSwgbm90Zml0dGluZzogW10sIG1heWJlOiBbXX07XG5cblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblxuXHRcdC8vIGNvbnNvbGUudGltZSgnZ2V0QnlGaXR0aW5nSXRlbScpO1xuXG5cdFx0Y29uc3QgcXVlcnlNYXRjaGVyID0gdGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgZmllbGRzLCBwYXJlbnQpO1xuXG5cdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGVudHJpZXNbZW50cnlJZF07XG5cdFx0XHRjb25zdCBtYXRjaFJlc3VsdCA9IHF1ZXJ5TWF0Y2hlci5tYXRjaFF1ZXJ5KGNvbGxlY3Rpb25FbnRyeS5xdWVyeS5vYmplY3QpO1xuXG5cdFx0XHQvLyBUT0RPOiBtYXliZT9cblx0XHRcdGlmIChtYXRjaFJlc3VsdCA9PT0gdHJ1ZSkgLy8gbWlnaHQgYWxzbyByZXR1cm4gJ21heWJlJ1xuXHRcdFx0XHRyZXN1bHQuZml0dGluZy5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0XHRlbHNlIGlmIChtYXRjaFJlc3VsdCA9PT0gQ09OU1RBTlRTLk1BWUJFKVxuXHRcdFx0XHRyZXN1bHQubWF5YmUucHVzaChjb2xsZWN0aW9uRW50cnkpO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRyZXN1bHQubm90Zml0dGluZy5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0fVxuXG5cdFx0Ly8gY29uc29sZS50aW1lRW5kKCdnZXRCeUZpdHRpbmdJdGVtJyk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0QnlRdWVyeSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBxdWVyeTogQ29sbGVjdGlvblF1ZXJ5KTogQ29sbGVjdGlvbkVudHJ5IHwgbnVsbCB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XG5cblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllcykge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gZW50cmllc1tlbnRyeUlkXTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5xdWVyeS5zdHJpbmcgPT09IHF1ZXJ5LnN0cmluZylcblx0XHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25FbnRyeTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGdldEJ5S2V5IChpdGVtVHlwZTogSXRlbVR5cGUsIGVudHJ5S2V5OiBzdHJpbmcpOiBDb2xsZWN0aW9uRW50cnlbXSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uRW50cnlbXSA9IFtdO1xuXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllcykge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gZW50cmllc1tlbnRyeUlkXTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zLmVudHJ5S2V5ID09PSBlbnRyeUtleSlcblx0XHRcdFx0cmVzdWx0LnB1c2goY29sbGVjdGlvbkVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0UmVzb3VyY2VCeUtleSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCByZXNvdXJjZUtleTogc3RyaW5nKTogQ29sbGVjdGlvblJlc291cmNlW10ge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xuXHRcdGNvbnN0IHJlc3VsdDogQ29sbGVjdGlvblJlc291cmNlW10gPSBbXTtcblxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXMpIHtcblx0XHRcdGNvbnN0IHJlc291cmNlcyA9IGVudHJpZXNbZW50cnlJZF0ucmVzb3VyY2VzO1xuXG5cdFx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc291cmNlcykge1xuXHRcdFx0XHRpZiAocmVzb3VyY2Uub3B0aW9ucy5yZXNvdXJjZUtleSA9PT0gcmVzb3VyY2VLZXkpXG5cdFx0XHRcdFx0cmVzdWx0LnB1c2gocmVzb3VyY2UpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cbn1cbiIsImltcG9ydCB7IGluc3RhbnRpYXRlT3B0aW9ucyB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdENvbHVtbk1hcCwgQXBpUmVxdWVzdENvbHVtbnMsIEVudHJ5UGFyZW50TnVsbCB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgSXRlbUVudHJ5T3B0aW9uc0ludGVyZmFjZSA9IFBhcnRpYWw8SXRlbUVudHJ5T3B0aW9ucz47XG5cbmV4cG9ydCBjbGFzcyBJdGVtRW50cnlPcHRpb25zIHtcblx0Y29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMgPSB0cnVlO1xuXHRwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCA9IG51bGw7XG5cdHRlbXBsYXRlT3B0aW9uczogYW55ID0ge307IC8vIFRPRE9cblx0dGVtcGxhdGVDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1uTWFwID0ge307XG5cdGRlZmVyUmVxdWVzdDogYm9vbGVhbiA9IGZhbHNlO1xuXHRpc0R1cGxpY2F0ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG5cdGNvbnN0cnVjdG9yICh2YWx1ZXM6IEl0ZW1FbnRyeU9wdGlvbnNJbnRlcmZhY2UpIHtcblx0XHRpbnN0YW50aWF0ZU9wdGlvbnModGhpcywgdmFsdWVzKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgaW5zdGFudGlhdGVPcHRpb25zIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vY29yZSc7XG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgT25DaGFuZ2VGdW5jdGlvbiB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgSXRlbVJlc291cmNlT3B0aW9uc0ludGVyZmFjZSA9IFBhcnRpYWw8SXRlbVJlc291cmNlT3B0aW9ucz47XG5cbmV4cG9ydCBjbGFzcyBJdGVtUmVzb3VyY2VPcHRpb25zIHtcblx0ZWRpdDogYm9vbGVhbiA9IGZhbHNlO1xuXHRvbkNoYW5nZTogT25DaGFuZ2VGdW5jdGlvbiA9IG5vb3A7XG5cdG9uRGVhY3RpdmF0ZTogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiB2b2lkID0gbm9vcDtcblxuXHRjb25zdHJ1Y3RvciAodmFsdWVzOiBJdGVtUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlKSB7XG5cdFx0aW5zdGFudGlhdGVPcHRpb25zKHRoaXMsIHZhbHVlcyk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtbkluZm8sIENvbHVtblNldCB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgSXRlbUVudHJ5RmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtcblx0Q29sdW1uRXhwYW5zaW9uUmVzdWx0LCBFbnRyeVBhcmVudE51bGwsIEZpZWxkTWFwLCBJdGVtRXJyb3IsIEl0ZW1JZCwgSXRlbUlkQ29udmVyc2lvbk1hcCwgSXRlbVR5cGUsIFByb21pc2VJbnRlcmZhY2Vcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgRGVmZXJyZWQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxubGV0IGN1cnJlbnRJZCA9IDA7XG5cbmV4cG9ydCBjbGFzcyBJdGVtRW50cnkge1xuXHRpZDogbnVtYmVyID0gKytjdXJyZW50SWQ7XG5cblx0cmVsb2FkUXVldWVkOiBib29sZWFuID0gZmFsc2U7XG5cdGRlZmVyUmVxdWVzdDogYm9vbGVhbiA9IGZhbHNlO1xuXHRkZWZlcnJlZD86IERlZmVycmVkPHRoaXM+O1xuXHRwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCA9IG51bGw7XG5cblx0aW5pdGlhbDogRmllbGRNYXA7XG5cdG1vZGlmaWVkOiBGaWVsZE1hcDtcblx0ZGVyaXZlZDogRmllbGRNYXA7XG5cblx0cmVzb3VyY2VzOiBJdGVtUmVzb3VyY2VbXSA9IFtdO1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3RvcnksXG5cdFx0cHVibGljIGl0ZW1UeXBlOiBzdHJpbmcsXG5cdFx0cHVibGljIGl0ZW1JZDogSXRlbUlkLFxuXHRcdHB1YmxpYyBjb2x1bW5zOiBDb2x1bW5TZXRcblx0KSB7XG5cdH1cblxuXHRxdWV1ZVJlbG9hZCAoKTogdGhpcyB7XG5cdFx0dGhpcy5yZWxvYWRRdWV1ZWQgPSB0cnVlO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRkZWZlciAoZGVmZXJSZXF1ZXN0OiBib29sZWFuID0gZmFsc2UpOiB0aGlzIHtcblx0XHR0aGlzLmRlZmVycmVkID0gdGhpcy5mYWN0b3J5LnByb21pc2VTZXJ2aWNlLmRlZmVyKCk7XG5cdFx0dGhpcy5kZWZlclJlcXVlc3QgPSBkZWZlclJlcXVlc3Q7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGdldFByb21pc2UgKCk6IFByb21pc2VJbnRlcmZhY2U8dGhpcz4ge1xuXHRcdGNvbnN0IGRlZmVycmVkID0gdGhpcy5kZWZlcnJlZDtcblxuXHRcdGlmIChkZWZlcnJlZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXMuZmFjdG9yeS5wcm9taXNlU2VydmljZS53aGVuKHRoaXMpO1xuXG5cdFx0cmV0dXJuIGRlZmVycmVkLnByb21pc2U7XG5cdH1cblxuXHRyZXNvbHZlICgpOiB0aGlzIHtcblx0XHRjb25zdCBkZWZlcnJlZCA9IHRoaXMuZGVmZXJyZWQ7XG5cblx0XHRpZiAoZGVmZXJyZWQgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0Ly8gdGhlIHJlc29sdmUgZnVuY3Rpb24gbWlnaHQgZGVmZXIgdGhlIGl0ZW0gYWdhaW4sIHNvIGRlbGV0ZSB0aGUgcHJvcGVydGllcyBmaXJzdFxuXHRcdGRlbGV0ZSB0aGlzLmRlZmVycmVkO1xuXHRcdGRlbGV0ZSB0aGlzLmRlZmVyUmVxdWVzdDtcblxuXHRcdGRlZmVycmVkLnJlc29sdmUodGhpcyk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHJlc29sdmVEZWZlcnJlZCAoaW5pdGlhbDogRmllbGRNYXAsIGRlcml2ZWQ6IEZpZWxkTWFwLCBjb2x1bW5zOiBDb2x1bW5TZXQpOiB0aGlzIHtcblx0XHR0aGlzLmNvbHVtbnMgPSBjb2x1bW5zO1xuXHRcdHRoaXMuc2V0RmllbGRzKGluaXRpYWwsIGRlcml2ZWQpO1xuXG5cdFx0cmV0dXJuIHRoaXMucmVzb2x2ZSgpO1xuXHR9XG5cblx0aXNEZWZlcnJlZCAoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZGVmZXJyZWQgIT09IHVuZGVmaW5lZDtcblx0fVxuXG5cdHJlamVjdCAoZXJyb3I6IEl0ZW1FcnJvciA9IHRoaXMuZmFjdG9yeS5pdGVtRW50cnlTZXJ2aWNlLmNyZWF0ZVVuZm91bmRSZW1vdGVJdGVtRXJyb3IoKSk6IHRoaXMge1xuXHRcdGNvbnN0IGRlZmVycmVkID0gdGhpcy5kZWZlcnJlZDtcblxuXHRcdGlmIChkZWZlcnJlZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHRkZWZlcnJlZC5yZWplY3QoZXJyb3IpO1xuXG5cdFx0ZGVsZXRlIHRoaXMuZGVmZXJyZWQ7XG5cdFx0ZGVsZXRlIHRoaXMuZGVmZXJSZXF1ZXN0O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRGaWVsZHMgKGluaXRpYWw6IEZpZWxkTWFwLCBkZXJpdmVkOiBGaWVsZE1hcCk6IHRoaXMge1xuXHRcdGNvbnN0IGFwaUZvcm1hdHRlciA9IHRoaXMuZmFjdG9yeS5hcGlGb3JtYXR0ZXI7XG5cdFx0Y29uc3QgZm9ybWF0dGVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5mb3JtYXR0ZWQ7XG5cblx0XHR0aGlzLmluaXRpYWwgPSBhcGlGb3JtYXR0ZXIuZm9ybWF0UmVzcG9uc2UoaW5pdGlhbCwgZm9ybWF0dGVkQ29sdW1ucy5tYWluKTtcblx0XHR0aGlzLmRlcml2ZWQgPSBhcGlGb3JtYXR0ZXIuZm9ybWF0UmVzcG9uc2UoZGVyaXZlZCwgZm9ybWF0dGVkQ29sdW1ucy5kZXJpdmVkKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Ly8gV2Ugc2hvdWxkIGNyZWF0ZSBhIGNvcHkgb2YgaW5pdGlhbCBoZXJlLCBiZWNhdXNlIGluIG1vc3QgaW5zdGFuY2VzIGl0IHdpbGwgYmUgYSB0ZW1wbGF0ZS5cblx0c2V0TG9jYWxGaWVsZHMgKFxuXHRcdGluaXRpYWxWYWx1ZXM6IEZpZWxkTWFwLFxuXHRcdGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAsXG5cdFx0Y29sdW1uczogQ29sdW1uU2V0ID0gdGhpcy5jb2x1bW5zXG5cdCk6IHRoaXMge1xuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XG5cdFx0Y29uc3QgaW5pdGlhbCA9IGZhY3RvcnkuaXRlbUVudHJ5U2VydmljZS5nZXRMb2NhbERlZmF1bHRWYWx1ZXMoKTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMubWFpbikge1xuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XG5cblx0XHRcdGluaXRpYWxbY29sdW1uSWRdID0gaW5pdGlhbFZhbHVlc1tjb2x1bW5JZF07XG5cdFx0fVxuXG5cdFx0dGhpcy5pbml0aWFsID0gZmFjdG9yeS5hcGlGb3JtYXR0ZXIuZm9ybWF0UmVzcG9uc2UoaW5pdGlhbCwgY29sdW1ucy5mb3JtYXR0ZWQubWFpbik7XG5cdFx0dGhpcy5kZXJpdmVkID0geydjcmVhdG9yPmRpc3BsYXluYW1lJzogZmFjdG9yeS5hdXRoSW50ZXJmYWNlLmdldFVzZXJEaXNwbGF5bmFtZSgpfTtcblxuXHRcdHJldHVybiB0aGlzLnVwZGF0ZUl0ZW1GaWVsZHMoY29udmVyc2lvbk1hcCk7XG5cdH1cblxuXHRjbG9uZSAoY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCA9IHt9KTogSXRlbUVudHJ5IHtcblx0XHRjb25zdCBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5O1xuXHRcdGNvbnN0IGFwaUZvcm1hdHRlciA9IGZhY3RvcnkuYXBpRm9ybWF0dGVyO1xuXHRcdGNvbnN0IGl0ZW1FbnRyeVNlcnZpY2UgPSBmYWN0b3J5Lml0ZW1FbnRyeVNlcnZpY2U7XG5cdFx0Y29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1ucztcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcblx0XHRjb25zdCBuZXdJdGVtSWQgPSBpdGVtRW50cnlTZXJ2aWNlLmV4cGFuZENvbnZlcnNpb25NYXAodGhpcywgY29udmVyc2lvbk1hcCk7XG5cblx0XHQvLyB3ZSdsbCBjb3B5IG1vZGlmaWVkIHRvIHJlc3VsdC5pbml0aWFsIChpbml0aWFsIG1heSBiZSBhIHRlbXBsYXRlKVxuXHRcdGNvbnN0IGNsb25lZEVudHJ5ID0gZmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRuZXdJdGVtSWQsXG5cdFx0XHRhcGlGb3JtYXR0ZXIuY29weUZpZWxkcyh0aGlzLmdldEZpZWxkcygpLCB7fSwgY29sdW1ucy5tYWluKSxcblx0XHRcdGFwaUZvcm1hdHRlci5jb3B5RmllbGRzKHRoaXMuZGVyaXZlZCwge30sIGNvbHVtbnMuZGVyaXZlZCksXG5cdFx0XHRjb2x1bW5zXG5cdFx0KTtcblxuXHRcdGNsb25lZEVudHJ5LnVwZGF0ZUl0ZW1GaWVsZHMoY29udmVyc2lvbk1hcCk7XG5cblx0XHRjbG9uZWRFbnRyeS5tb2RpZmllZCA9IGFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGNsb25lZEVudHJ5LmluaXRpYWwsIHt9LCBjb2x1bW5zLm1haW4pO1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdHJldHVybiBjbG9uZWRFbnRyeTtcblxuXHRcdGNvbnN0IHBhcmVudElkID0gaXRlbUVudHJ5U2VydmljZS5nZXRDb252ZXJzaW9uVmFsdWUocGFyZW50Lml0ZW1UeXBlLCBwYXJlbnQuaXRlbUlkLCBjb252ZXJzaW9uTWFwKTtcblxuXHRcdGNsb25lZEVudHJ5LnNldFBhcmVudChcblx0XHRcdHBhcmVudC5pdGVtVHlwZSxcblx0XHRcdHBhcmVudElkID09PSB1bmRlZmluZWQgPyBwYXJlbnQuaXRlbUlkIDogcGFyZW50SWRcblx0XHQpO1xuXG5cdFx0cmV0dXJuIGNsb25lZEVudHJ5O1xuXHR9XG5cblx0cmVzZXREZXJpdmVkIChjb2x1bW5JZHM6IHN0cmluZ1tdKTogdGhpcyB7XG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0XHRjb25zdCByb290Q29sdW1ucyA9IHRoaXMuY29sdW1ucy5yb290O1xuXHRcdGNvbnN0IGZpbHRlcmVkQ29sdW1uczogQ29sdW1uSW5mb1tdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiByb290Q29sdW1ucykge1xuXHRcdFx0aWYgKGNvbHVtbklkcy5pbmRleE9mKGNvbHVtbi5pZCkgIT09IC0xKVxuXHRcdFx0XHRmaWx0ZXJlZENvbHVtbnMucHVzaChjb2x1bW4pO1xuXHRcdH1cblxuXHRcdHJlc2V0RGVyaXZlZFJlY3Vyc2l2ZWx5KGZpbHRlcmVkQ29sdW1ucyk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHRcdGZ1bmN0aW9uIHJlc2V0RGVyaXZlZFJlY3Vyc2l2ZWx5IChjb2x1bW5zOiBDb2x1bW5JbmZvW10pIHtcblx0XHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdFx0aWYgKCFjb2x1bW4uaXNMZWFmKVxuXHRcdFx0XHRcdHJlc2V0RGVyaXZlZFJlY3Vyc2l2ZWx5KGNvbHVtbi5jaGlsZHJlbik7XG5cblx0XHRcdFx0ZGVsZXRlIHNlbGYuZGVyaXZlZFtjb2x1bW4ucGF0aF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Y2xlYXJSZXNvdXJjZXMgKCk6IHRoaXMge1xuXHRcdHRoaXMucmVzb3VyY2VzID0gW107XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGRlYWN0aXZhdGVSZXNvdXJjZXMgKCk6IHRoaXMge1xuXHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzOyAvLyBvbiBvZiB0aGUgZGVhY3RpdmF0ZSBjYWxsYmFja3MgbWlnaHQgY2FsbCBjbGVhclJlc291cmNlc1xuXG5cdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNvdXJjZXMpXG5cdFx0XHRyZXNvdXJjZS5kZWFjdGl2YXRlKCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGdldEZpZWxkcyAoKTogRmllbGRNYXAge1xuXHRcdGlmICh0aGlzLm1vZGlmaWVkICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5tb2RpZmllZDtcblxuXHRcdHJldHVybiB0aGlzLmluaXRpYWw7XG5cdH1cblxuXHQvLyBzaG91bGQgYmUgZmFzdFxuXHRleHBhbmQgKG1haW46IEZpZWxkTWFwLCBkZXJpdmVkOiBGaWVsZE1hcCwgY29sdW1uRXhwYW5zaW9uUmVzdWx0OiBDb2x1bW5FeHBhbnNpb25SZXN1bHQpOiB0aGlzIHtcblx0XHRjb25zdCBhcGlGb3JtYXR0ZXIgPSB0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyO1xuXHRcdGNvbnN0IGRpZmZlcmVuY2UgPSBjb2x1bW5FeHBhbnNpb25SZXN1bHQuZGlmZmVyZW5jZTtcblxuXHRcdHRoaXMuY29sdW1ucyA9IGNvbHVtbkV4cGFuc2lvblJlc3VsdC5tZXJnZWQ7XG5cblx0XHRhcGlGb3JtYXR0ZXIuZXhwYW5kUmVzcG9uc2UodGhpcy5pbml0aWFsLCBtYWluLCBkaWZmZXJlbmNlLm1haW4pO1xuXHRcdGFwaUZvcm1hdHRlci5leHBhbmRSZXNwb25zZSh0aGlzLmRlcml2ZWQsIGRlcml2ZWQsIGRpZmZlcmVuY2UuZGVyaXZlZCk7XG5cblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHRhcGlGb3JtYXR0ZXIuZXhwYW5kUmVzcG9uc2UodGhpcy5tb2RpZmllZCwgbWFpbiwgZGlmZmVyZW5jZS5tYWluKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZXhwYW5kTG9jYWwgKGNvbHVtbkV4cGFuc2lvblJlc3VsdDogQ29sdW1uRXhwYW5zaW9uUmVzdWx0KTogdGhpcyB7XG5cdFx0Y29uc3QgbWFpbkNvbHVtbnMgPSBjb2x1bW5FeHBhbnNpb25SZXN1bHQuZGlmZmVyZW5jZS5tYWluO1xuXG5cdFx0dGhpcy5jb2x1bW5zID0gY29sdW1uRXhwYW5zaW9uUmVzdWx0Lm1lcmdlZDtcblxuXHRcdGlmIChtYWluQ29sdW1ucy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdHRoaXMuc2V0TG9jYWxWYWx1ZXModGhpcy5pbml0aWFsLCBtYWluQ29sdW1ucyk7XG5cblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHR0aGlzLnNldExvY2FsVmFsdWVzKHRoaXMubW9kaWZpZWQsIG1haW5Db2x1bW5zKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHJpdmF0ZSBzZXRMb2NhbFZhbHVlcyAoZmllbGRzOiBGaWVsZE1hcCwgY29sdW1uczogQ29sdW1uSW5mb1tdKTogdm9pZCB7XG5cdFx0Y29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTtcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uLmlkO1xuXG5cdFx0XHRpZiAoZmllbGRzW2NvbHVtbklkXSAhPT0gdW5kZWZpbmVkKSAvLyBwYXJlbnQgY29sdW1ucyBtaWdodCBhbHNvIGJlIGluY2x1ZGVkIGluIHRoZSBkaWZmZXJlbmNlXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRjb25zdCBjb2x1bW5UeXBlID0gY29sdW1uLmFwaUNvbHVtbi50eXBlO1xuXG5cdFx0XHRmaWVsZHNbY29sdW1uSWRdID0gY29sdW1uVHlwZSA9PT0gJ2xpbmsnICYmIHBhcmVudCAhPT0gbnVsbCA/XG5cdFx0XHRcdHBhcmVudC5pdGVtSWQgOlxuXHRcdFx0XHRmYWN0b3J5LmFwaUZvcm1hdHRlci5nZXREZWZhdWx0VmFsdWUoY29sdW1uVHlwZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGUgaW5pdGlhbCwgbW9kaWZpZWQsIGRlcml2ZWQgcHJvcGVydGllcyBhcmUgYWxyZWFkeSBzZXQuIEl0IHdpbGwgdXBkYXRlIHRoZSB2YWx1ZXNcblx0ICogdGhlbXNlbHZlcyB0byBwcmVzZXJ2ZSByZWZlcmVuY2VzIGluIGV4aXN0aW5nIGl0ZW0gcmVzb3VyY2VzLlxuXHQgKi9cblx0dXBkYXRlRmllbGRzIChmaWVsZHM6IEZpZWxkTWFwLCBkZXJpdmVkOiBGaWVsZE1hcCB8IG51bGwgPSBudWxsLCBvdmVyd3JpdGU6IGJvb2xlYW4gPSB0cnVlKTogdGhpcyB7XG5cdFx0Y29uc3QgYXBpRm9ybWF0dGVyID0gdGhpcy5mYWN0b3J5LmFwaUZvcm1hdHRlcjtcblx0XHRjb25zdCBtYWluQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYWluO1xuXHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmluaXRpYWw7XG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLm1vZGlmaWVkO1xuXG5cdFx0Ly8gZm9yIHNvbWUgd2VpcmQgcmVhc29uIHRoaXMgZnVuY3Rpb24gaXMgbm90IGF0b21pYywgc28gb3ZlcndyaXRlIHRoZSB2YWx1ZXMgd2l0aCB0aGVpciBmb3JtYXR0ZWQgY291bnRlcnBhcnRzXG5cdFx0Ly8gaW1tZWRpYXRlbHlcblx0XHRpZiAobW9kaWZpZWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgbWFpbkNvbHVtbnMpIHtcblx0XHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XG5cdFx0XHRcdGNvbnN0IGNvbHVtblR5cGUgPSBjb2x1bW4uYXBpQ29sdW1uLnR5cGU7XG5cblx0XHRcdFx0aWYgKG92ZXJ3cml0ZSB8fCBhcGlGb3JtYXR0ZXIuY29tcGFyZUZpZWxkcyhjb2x1bW5UeXBlLCBpbml0aWFsW2NvbHVtbklkXSwgbW9kaWZpZWRbY29sdW1uSWRdKSlcblx0XHRcdFx0XHRtb2RpZmllZFtjb2x1bW5JZF0gPSBhcGlGb3JtYXR0ZXIuZm9ybWF0UmVzcG9uc2VWYWx1ZShjb2x1bW5UeXBlLCBmaWVsZHNbY29sdW1uSWRdKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBtYWluQ29sdW1ucykge1xuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XG5cblx0XHRcdGluaXRpYWxbY29sdW1uSWRdID0gYXBpRm9ybWF0dGVyLmZvcm1hdFJlc3BvbnNlVmFsdWUoY29sdW1uLmFwaUNvbHVtbi50eXBlLCBmaWVsZHNbY29sdW1uSWRdKTtcblx0XHR9XG5cblx0XHRpZiAoZGVyaXZlZCAhPT0gbnVsbClcblx0XHRcdHRoaXMuc2V0RGVyaXZlZChkZXJpdmVkKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHJpdmF0ZSB1cGRhdGVJdGVtVmFsdWVzIChmaWVsZHM6IEZpZWxkTWFwLCBpdGVtQ29sdW1uczogQ29sdW1uSW5mb1tdLCBjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwKTogdm9pZCB7XG5cdFx0Y29uc3QgaXRlbUVudHJ5U2VydmljZSA9IHRoaXMuZmFjdG9yeS5pdGVtRW50cnlTZXJ2aWNlO1xuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgaXRlbUNvbHVtbnMpIHtcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uLmlkO1xuXHRcdFx0Y29uc3QgYXBpQ29sdW1uID0gY29sdW1uLmFwaUNvbHVtbjtcblxuXHRcdFx0Ly8gVE9ETzogd2UgY2FuIHJlY29uc2lkZXIgdGhpcyBvbmNlIGFsbCBjb2x1bW5zIGFyZSByZXNwZWN0ZWQgZm9yIGxvY2FsIGl0ZW1zIFtSTTQtMTAzNzhdXG5cdFx0XHRsZXQgbmV3VmFsdWU7XG5cblx0XHRcdGlmIChhcGlDb2x1bW4udHlwZSA9PT0gJ2xpbmsnICYmIGZpZWxkc1tjb2x1bW5JZF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpZiAocGFyZW50ICE9PSBudWxsKVxuXHRcdFx0XHRcdG5ld1ZhbHVlID0gcGFyZW50Lml0ZW1JZDtcblx0XHRcdH0gZWxzZVxuXHRcdFx0XHRuZXdWYWx1ZSA9IGl0ZW1FbnRyeVNlcnZpY2UuZ2V0Q29udmVyc2lvblZhbHVlKGFwaUNvbHVtbi5pdGVtVHlwZSwgZmllbGRzW2NvbHVtbklkXSwgY29udmVyc2lvbk1hcCk7XG5cblx0XHRcdGlmIChuZXdWYWx1ZSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRmaWVsZHNbY29sdW1uSWRdID0gbmV3VmFsdWU7XG5cdFx0fVxuXHR9XG5cblx0dXBkYXRlSXRlbUZpZWxkcyAoY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCwgY29sdW1uczogQ29sdW1uU2V0ID0gdGhpcy5jb2x1bW5zKTogdGhpcyB7XG5cdFx0Y29uc3QgaXRlbUNvbHVtbnMgPSBjb2x1bW5zLml0ZW07XG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLm1vZGlmaWVkO1xuXG5cdFx0dGhpcy51cGRhdGVJdGVtVmFsdWVzKHRoaXMuaW5pdGlhbCwgaXRlbUNvbHVtbnMsIGNvbnZlcnNpb25NYXApO1xuXG5cdFx0aWYgKG1vZGlmaWVkID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdHRoaXMudXBkYXRlSXRlbVZhbHVlcyhtb2RpZmllZCwgaXRlbUNvbHVtbnMsIGNvbnZlcnNpb25NYXApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRmb3JtYXRSZXF1ZXN0ICgpOiBGaWVsZE1hcCB7XG5cdFx0Y29uc3QgYXBpRm9ybWF0dGVyID0gdGhpcy5mYWN0b3J5LmFwaUZvcm1hdHRlcjtcblx0XHRjb25zdCBtYWluQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYWluO1xuXG5cdFx0aWYgKHRoaXMuaXNMb2NhbCgpKVxuXHRcdFx0cmV0dXJuIGFwaUZvcm1hdHRlci5mb3JtYXRSZXF1ZXN0TG9jYWwodGhpcy5nZXRGaWVsZHMoKSwgbWFpbkNvbHVtbnMpO1xuXG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB7fTtcblxuXHRcdHJldHVybiBhcGlGb3JtYXR0ZXIuZm9ybWF0UmVxdWVzdCh0aGlzLmluaXRpYWwsIHRoaXMubW9kaWZpZWQsIG1haW5Db2x1bW5zKTtcblx0fVxuXG5cdHNldERpc3BsYXlOYW1lICgpOiB0aGlzIHtcblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHRjb25zdCByZXN1bHQgPSB0aGlzLmdldERpc3BsYXlOYW1lKCk7XG5cblx0XHRpZiAocmVzdWx0KVxuXHRcdFx0dGhpcy5tb2RpZmllZC5kaXNwbGF5bmFtZSA9IHJlc3VsdDtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Z2V0RGlzcGxheU5hbWUgKCk6IHN0cmluZyB7XG5cdFx0Y29uc3QgaXRlbUVudHJ5U2VydmljZSA9IHRoaXMuZmFjdG9yeS5pdGVtRW50cnlTZXJ2aWNlO1xuXHRcdGNvbnN0IGZpZWxkcyA9IHRoaXMuZ2V0RmllbGRzKCk7XG5cblx0XHRzd2l0Y2ggKHRoaXMuaXRlbVR5cGUpIHtcblx0XHRcdGNhc2UgJ0NvbnRhY3QnOlxuXHRcdFx0XHRyZXR1cm4gZmllbGRzLnR5cGUgPT09ICdiZWRyaWpmJyA/XG5cdFx0XHRcdFx0ZmllbGRzLmJlZHJpamYgOiBpdGVtRW50cnlTZXJ2aWNlLmdldEZ1bGxOYW1lKFxuXHRcdFx0XHRcdFx0ZmllbGRzLnZvb3JuYWFtLFxuXHRcdFx0XHRcdFx0ZmllbGRzLnR1c3NlbnZvZWdzZWwsXG5cdFx0XHRcdFx0XHRmaWVsZHMubmFhbVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRjYXNlICdNZWRld2Vya2VyJzpcblx0XHRcdGNhc2UgJ1BlcnNvbic6XG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnlTZXJ2aWNlLmdldEZ1bGxOYW1lKFxuXHRcdFx0XHRcdGZpZWxkcy52b29ybmFhbSxcblx0XHRcdFx0XHRmaWVsZHMudHVzc2Vudm9lZ3NlbCxcblx0XHRcdFx0XHRmaWVsZHMuYWNodGVybmFhbVxuXHRcdFx0XHQpO1xuXHRcdFx0Y2FzZSAnUmVwYXJhdGllJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuZGVyaXZlZFsnbWF0ZXJpYWFsPm5hYW0nXTsgLy8gVE9ETyFcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmaWVsZHNbaXRlbUVudHJ5U2VydmljZS5nZXRUaXRsZUZpZWxkKHRoaXMuaXRlbVR5cGUpXTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtCb29sZWFufSByZXR1cm5BbGwgUmV0dXJucyBhbGwgaW5pdGlhbCB2YWx1ZXMgaWYgdHJ1ZVxuXHQgKiBAcmV0dXJucyB7T2JqZWN0fVxuXHQgKi9cblx0Z2V0Q2hhbmdlcyAocmV0dXJuQWxsOiBib29sZWFuID0gZmFsc2UpIHtcblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkICYmICFyZXR1cm5BbGwpXG5cdFx0XHRyZXR1cm4gW107XG5cblx0XHRyZXR1cm4gdGhpcy5mYWN0b3J5LmFwaUZvcm1hdHRlci5nZXRDaGFuZ2VzKFxuXHRcdFx0dGhpcy5pbml0aWFsLFxuXHRcdFx0cmV0dXJuQWxsID8ge30gOiB0aGlzLm1vZGlmaWVkLFxuXHRcdFx0dGhpcy5jb2x1bW5zLm1haW5cblx0XHQpO1xuXHR9XG5cblx0aXNMb2NhbCAoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZmFjdG9yeS5rZXlTZXJ2aWNlLmlzTG9jYWxJZCh0aGlzLml0ZW1JZCk7XG5cdH1cblxuXHRpc0xvY2thYmxlICgpOiBib29sZWFuIHtcblx0XHRpZiAodGhpcy5pc0xvY2FsKCkpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRzd2l0Y2ggKHRoaXMuaXRlbVR5cGUpIHtcblx0XHRcdGNhc2UgJ1Byb2plY3QnOlxuXHRcdFx0Y2FzZSAnTWF0ZXJpYWFsJzpcblx0XHRcdGNhc2UgJ0NvbnRhY3QnOlxuXHRcdFx0Y2FzZSAnTWVkZXdlcmtlcic6XG5cdFx0XHRjYXNlICdWb2VydHVpZyc6XG5cdFx0XHRjYXNlICdUZW1wbGF0ZSc6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGhhc0NoYW5nZXMgKCk6IGJvb2xlYW4ge1xuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRyZXR1cm4gdGhpcy5mYWN0b3J5LmFwaUZvcm1hdHRlci5oYXNDaGFuZ2VzKFxuXHRcdFx0dGhpcy5pbml0aWFsLFxuXHRcdFx0dGhpcy5tb2RpZmllZCxcblx0XHRcdHRoaXMuY29sdW1ucy5tYWluXG5cdFx0KTtcblx0fVxuXG5cdHJlc2V0TW9kaWZpZWQgKCk6IHRoaXMge1xuXHRcdGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFpbjtcblxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdHRoaXMubW9kaWZpZWRbY29sdW1uLmlkXSA9IHRoaXMuZmFjdG9yeS5hcGlGb3JtYXR0ZXIuY2xvbmUoXG5cdFx0XHRcdGNvbHVtbi5hcGlDb2x1bW4udHlwZSxcblx0XHRcdFx0dGhpcy5pbml0aWFsW2NvbHVtbi5pZF1cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRJbml0aWFsICh2YWx1ZXM6IEZpZWxkTWFwLCBlbmFibGVDYWxsYmFja3M6IGJvb2xlYW4gPSBmYWxzZSk6IHRoaXMge1xuXHRcdGNvbnN0IGFwaUZvcm1hdHRlciA9IHRoaXMuZmFjdG9yeS5hcGlGb3JtYXR0ZXI7XG5cdFx0bGV0IHByZXZpb3VzO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB2YWx1ZXMpXG5cdFx0XHR0aGlzLmluaXRpYWxbY29sdW1uSWRdID0gdmFsdWVzW2NvbHVtbklkXTtcblxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmIChlbmFibGVDYWxsYmFja3MpXG5cdFx0XHRcdHRoaXMuY2FsbE9uQ2hhbmdlKGFwaUZvcm1hdHRlci5jb3B5RmllbGRzKHRoaXMuaW5pdGlhbCwge30sIHRoaXMuY29sdW1ucy5tYWluKSk7XG5cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdHByZXZpb3VzID0gYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHModGhpcy5tb2RpZmllZCwge30sIHRoaXMuY29sdW1ucy5tYWluKTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gdmFsdWVzKVxuXHRcdFx0dGhpcy5tb2RpZmllZFtjb2x1bW5JZF0gPSB2YWx1ZXNbY29sdW1uSWRdO1xuXG5cdFx0aWYgKGVuYWJsZUNhbGxiYWNrcylcblx0XHRcdHRoaXMuY2FsbE9uQ2hhbmdlKHByZXZpb3VzKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIERvZXMgYSBzaGFsbG93IGNvcHkgb2YgdmFsdWVzIVxuXHQgKi9cblx0c2V0TW9kaWZpZWQgKHZhbHVlcz86IEZpZWxkTWFwKTogdGhpcyB7XG5cdFx0Y29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTtcblx0XHRjb25zdCBhcGlGb3JtYXR0ZXIgPSBmYWN0b3J5LmFwaUZvcm1hdHRlcjtcblx0XHRjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xuXHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1ucyA9IGNvbHVtbnMucmVzcG9uc2VbdGhpcy5pdGVtVHlwZV07XG5cblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCByZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcblx0XHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmluaXRpYWw7XG5cdFx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMubW9kaWZpZWQgPSB0aGlzLmlzTG9jYWwoKSA/IGZhY3RvcnkuaXRlbUVudHJ5U2VydmljZS5nZXRMb2NhbERlZmF1bHRWYWx1ZXMoKSA6IHt9O1xuXG5cdFx0XHRpZiAodmFsdWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGluaXRpYWwsIG1vZGlmaWVkLCBjb2x1bW5zLm1haW4pO1xuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdGFwaUZvcm1hdHRlci5zaGFsbG93Q29weUZpZWxkcyh2YWx1ZXMsIGluaXRpYWwsIG1vZGlmaWVkLCBjb2x1bW5zLm1haW4pO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gdmFsdWVzKSB7XG5cdFx0XHRcdFx0aWYgKHJlc3BvbnNlQ29sdW1uc1tjb2x1bW5JZF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0Ly8gdG9kbzogZGV2IG1vZGUgY29uc3RhbnRcblx0XHRcdFx0XHRcdC8vIGlmIChERVZfTU9ERSlcblx0XHRcdFx0XHRcdC8vIFx0Y29uc29sZS53YXJuKCdzZXRNb2RpZmllZDogbm8gY29sdW1uIGZvdW5kIGZvcicsIGNvbHVtbklkKTtcblxuXHRcdFx0XHRcdFx0bW9kaWZpZWRbY29sdW1uSWRdID0gdmFsdWVzW2NvbHVtbklkXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNvdXJjZXMpXG5cdFx0XHRcdHJlc291cmNlLmZpZWxkcyA9IG1vZGlmaWVkO1xuXG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRpZiAodmFsdWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gdmFsdWVzKVxuXHRcdFx0dGhpcy5tb2RpZmllZFtjb2x1bW5JZF0gPSB2YWx1ZXNbY29sdW1uSWRdO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXREZXJpdmVkICh2YWx1ZXM6IEZpZWxkTWFwKTogdGhpcyB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gdmFsdWVzKVxuXHRcdFx0dGhpcy5kZXJpdmVkW2tleV0gPSB2YWx1ZXNba2V5XTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0UGFyZW50IChwYXJlbnRUeXBlOiBJdGVtVHlwZSwgcGFyZW50SWQ6IEl0ZW1JZCk6IHRoaXMge1xuXHRcdHRoaXMucGFyZW50ID0ge1xuXHRcdFx0aXRlbVR5cGU6IHBhcmVudFR5cGUsXG5cdFx0XHRpdGVtSWQ6IHBhcmVudElkXG5cdFx0fTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y2FsbE9uQ2hhbmdlIChwcmV2aW91cz86IEZpZWxkTWFwKTogdGhpcyB7XG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSB0aGlzLnJlc291cmNlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdGNvbnN0IGl0ZW1SZXNvdXJjZSA9IHRoaXMucmVzb3VyY2VzW2ldO1xuXG5cdFx0XHRpZiAoaXRlbVJlc291cmNlICE9PSBudWxsKVxuXHRcdFx0XHRpdGVtUmVzb3VyY2Uub3B0aW9ucy5vbkNoYW5nZShpdGVtUmVzb3VyY2UsIHByZXZpb3VzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHRvSlNPTiAoKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGlkOiB0aGlzLmlkLFxuXHRcdFx0cGFyZW50OiB0aGlzLnBhcmVudCxcblx0XHRcdGluaXRpYWw6IHRoaXMuaW5pdGlhbCxcblx0XHRcdG1vZGlmaWVkOiB0aGlzLm1vZGlmaWVkLFxuXHRcdFx0ZGVyaXZlZDogdGhpcy5kZXJpdmVkLFxuXHRcdFx0Y29sdW1uczogdGhpcy5jb2x1bW5zXG5cdFx0fTtcblx0fVxufVxuIiwiaW1wb3J0IHsgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2VPcHRpb25zIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IEZpZWxkTWFwLCBSZXNwb25zZUNvbHVtbiB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEl0ZW1SZXNvdXJjZSB7XG5cdGNvbHVtbnM6IHsgW2NvbHVtbklkOiBzdHJpbmddOiBSZXNwb25zZUNvbHVtbiB9O1xuXHRmaWVsZHM6IEZpZWxkTWFwO1xuXHRkZXJpdmVkOiBGaWVsZE1hcDtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHVibGljIGVudHJ5OiBJdGVtRW50cnksXG5cdFx0cHVibGljIG9wdGlvbnM6IEl0ZW1SZXNvdXJjZU9wdGlvbnMsXG5cdFx0cHJvdGVjdGVkIHJlYWRvbmx5IF9pc05ldzogYm9vbGVhbiA9IGZhbHNlXG5cdCkge1xuXHRcdHRoaXMuZGVyaXZlZCA9IGVudHJ5LmRlcml2ZWQ7XG5cdFx0dGhpcy5jb2x1bW5zID0gZW50cnkuY29sdW1ucy5yZXNwb25zZVtlbnRyeS5jb2x1bW5zLml0ZW1UeXBlXTtcblxuXHRcdGVudHJ5LnJlc291cmNlcy5wdXNoKHRoaXMpO1xuXHR9XG5cblx0aXNOZXcgKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLl9pc05ldztcblx0fVxuXG5cdGlzTG9jYWwgKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmVudHJ5LmlzTG9jYWwoKTtcblx0fVxuXG5cdGNsZWFyUmVzb3VyY2UgKCk6IHZvaWQge1xuXHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMuZW50cnkucmVzb3VyY2VzO1xuXHRcdGNvbnN0IGluZGV4ID0gcmVzb3VyY2VzLmluZGV4T2YodGhpcyk7XG5cblx0XHRpZiAoaW5kZXggIT09IC0xKVxuXHRcdFx0cmVzb3VyY2VzLnNwbGljZShpbmRleCwgMSk7XG5cdH1cblxuXHRkZWFjdGl2YXRlICgpOiB2b2lkIHtcblx0XHR0aGlzLm9wdGlvbnMub25EZWFjdGl2YXRlKHRoaXMuZW50cnkpO1xuXHR9XG5cblx0dG9KU09OICgpIHtcblx0XHRjb25zdCBjb2x1bW5JZHM6IHN0cmluZ1tdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHRoaXMuY29sdW1ucylcblx0XHRcdGNvbHVtbklkcy5wdXNoKGNvbHVtbklkKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRjb2x1bW5zOiBjb2x1bW5JZHMsXG5cdFx0XHRmaWVsZHM6IHRoaXMuZmllbGRzLFxuXHRcdFx0ZGVyaXZlZDogdGhpcy5kZXJpdmVkLFxuXHRcdFx0ZW50cnk6IHRoaXMuZW50cnlcblx0XHR9O1xuXHR9XG59XG4iLCJpbXBvcnQgeyBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSwgSXRlbVJlc291cmNlT3B0aW9ucyB9IGZyb20gJy4uL21vZGVscyc7XG5cbmV4cG9ydCBjbGFzcyBWaWV3UmVzb3VyY2UgZXh0ZW5kcyBJdGVtUmVzb3VyY2Uge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0ZW50cnk6IEl0ZW1FbnRyeSxcblx0XHRvcHRpb25zOiBJdGVtUmVzb3VyY2VPcHRpb25zLFxuXHRcdGlzTmV3PzogYm9vbGVhblxuXHQpIHtcblx0XHRzdXBlcihlbnRyeSwgb3B0aW9ucywgaXNOZXcpO1xuXG5cdFx0dGhpcy5maWVsZHMgPSBlbnRyeS5tb2RpZmllZCA9PT0gdW5kZWZpbmVkID9cblx0XHRcdGVudHJ5LmluaXRpYWwgOiBlbnRyeS5tb2RpZmllZDtcblx0fVxufVxuIiwiaW1wb3J0IHsgY3JlYXRlUGF0aCB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgSXRlbVJlc291cmNlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSwgSXRlbVJlc291cmNlT3B0aW9ucyB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBGaWVsZE1hcCwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIEVkaXRSZXNvdXJjZSBleHRlbmRzIEl0ZW1SZXNvdXJjZSB7XG5cdGxvY2FsQ29waWVzOiBGaWVsZE1hcFtdID0gW107XG5cdHRyYW5zYWN0aW9uczogbnVtYmVyID0gMDtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBmYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdGVudHJ5OiBJdGVtRW50cnksXG5cdFx0b3B0aW9uczogSXRlbVJlc291cmNlT3B0aW9ucyxcblx0XHRpc05ldz86IGJvb2xlYW5cblx0KSB7XG5cdFx0c3VwZXIoZW50cnksIG9wdGlvbnMsIGlzTmV3KTtcblxuXHRcdGVudHJ5LnNldE1vZGlmaWVkKCk7XG5cblx0XHR0aGlzLmZpZWxkcyA9IGVudHJ5Lm1vZGlmaWVkO1xuXHR9XG5cblx0aXNOZXcgKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLl9pc05ldyAmJiB0aGlzLnRyYW5zYWN0aW9ucyA9PT0gMDtcblx0fVxuXG5cdHN0YXJ0ICgpOiB0aGlzIHtcblx0XHRpZiAodGhpcy5sb2NhbENvcGllcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0dGhpcy5sb2NhbENvcGllcyA9IFtdO1xuXG5cdFx0dGhpcy5sb2NhbENvcGllcy5wdXNoKHRoaXMuY29weUZpZWxkcygpKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cm9sbGJhY2sgKCk6IHRoaXMge1xuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuZW50cnk7XG5cblx0XHR0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoPEZpZWxkTWFwPiB0aGlzLmxvY2FsQ29waWVzLnBvcCgpLCBpdGVtRW50cnkubW9kaWZpZWQsIGl0ZW1FbnRyeS5jb2x1bW5zLm1haW4pO1xuXG5cdFx0aWYgKHRoaXMuaXNOZXcoKSAmJiB0aGlzLmxvY2FsQ29waWVzLmxlbmd0aCA9PT0gMClcblx0XHRcdHRoaXMuZGVhY3RpdmF0ZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjb21taXQgKGNhbGxPbkNoYW5nZTogYm9vbGVhbiA9IHRydWUpOiB0aGlzIHtcblx0XHRjb25zdCBwcmV2aW91cyA9IDxGaWVsZE1hcD4gdGhpcy5sb2NhbENvcGllcy5wb3AoKTtcblxuXHRcdGlmIChjYWxsT25DaGFuZ2UpXG5cdFx0XHR0aGlzLmNhbGxPbkNoYW5nZShwcmV2aW91cyk7XG5cblx0XHR0aGlzLnRyYW5zYWN0aW9ucysrOyAvLyBjb21wbGV0ZWQgdHJhbnNhY3Rpb25zXG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGdldExvY2FsQ29weSAoKTogRmllbGRNYXAgfCBudWxsIHtcblx0XHRjb25zdCBsb2NhbENvcGllcyA9IHRoaXMubG9jYWxDb3BpZXM7XG5cblx0XHRpZiAobG9jYWxDb3BpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0aWYgKGxvY2FsQ29waWVzLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0cmV0dXJuIGxvY2FsQ29waWVzW2xvY2FsQ29waWVzLmxlbmd0aCAtIDFdO1xuXHR9XG5cblx0Y29weUZpZWxkcyAoZGVzdGluYXRpb246IEZpZWxkTWFwID0ge30pOiBGaWVsZE1hcCB7XG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyeTtcblxuXHRcdHJldHVybiB0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoaXRlbUVudHJ5Lm1vZGlmaWVkLCBkZXN0aW5hdGlvbiwgaXRlbUVudHJ5LmNvbHVtbnMubWFpbik7XG5cdH1cblxuXHRzZXRGaWVsZHMgKHZhbHVlczogRmllbGRNYXAsIGNhbGxPbkNoYW5nZTogYm9vbGVhbiA9IHRydWUpOiB0aGlzIHtcblx0XHRjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xuXHRcdGNvbnN0IGZpZWxkcyA9IHRoaXMuZmllbGRzO1xuXHRcdGxldCBoYXNDaGFuZ2VzID0gZmFsc2U7XG5cdFx0bGV0IHByZXZpb3VzO1xuXG5cdFx0aWYgKGNhbGxPbkNoYW5nZSlcblx0XHRcdHByZXZpb3VzID0gdGhpcy5jb3B5RmllbGRzKCk7XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHZhbHVlcykge1xuXHRcdFx0Y29uc3QgY29sdW1uID0gY29sdW1uc1tjb2x1bW5JZF07XG5cblx0XHRcdGlmIChjb2x1bW4gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25zb2xlLndhcm4oJ3NldEZpZWxkczogbm8gY29sdW1uIGZvdW5kIGZvcicsIGNvbHVtbklkKTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyLmNvbXBhcmVGaWVsZHMoY29sdW1uLnR5cGUsIGZpZWxkc1tjb2x1bW5JZF0sIHZhbHVlc1tjb2x1bW5JZF0pKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0ZmllbGRzW2NvbHVtbklkXSA9IHZhbHVlc1tjb2x1bW5JZF07XG5cdFx0XHRoYXNDaGFuZ2VzID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoY2FsbE9uQ2hhbmdlICYmIGhhc0NoYW5nZXMpXG5cdFx0XHR0aGlzLmNhbGxPbkNoYW5nZShwcmV2aW91cyk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNhbGxPbkNoYW5nZSAocHJldmlvdXM/OiBGaWVsZE1hcCk6IHRoaXMge1xuXHRcdHRoaXMuZW50cnkuY2FsbE9uQ2hhbmdlKHByZXZpb3VzKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2F2ZSAocGFyYW1ldGVycz86IGFueSk6IFByb21pc2VJbnRlcmZhY2U8dGhpcz4ge1xuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyeTtcblx0XHRjb25zdCBwYXJhbWV0ZXJNYXAgPSB7fTtcblxuXHRcdGlmIChwYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNyZWF0ZVBhdGgoXG5cdFx0XHRcdHBhcmFtZXRlck1hcCxcblx0XHRcdFx0W2l0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXG5cdFx0XHRcdFt7fSwgcGFyYW1ldGVyc11cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIChcblx0XHRcdGl0ZW1FbnRyeS5pc0xvY2thYmxlKCkgP1xuXHRcdFx0XHRmYWN0b3J5LmxvY2tTZXJ2aWNlLmZldGNoTG9jayhpdGVtRW50cnkpIDpcblx0XHRcdFx0ZmFjdG9yeS5wcm9taXNlU2VydmljZS53aGVuKClcblx0XHQpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdC8vIGFkZFRvQ29sbGVjdGlvbnMgaXMgY2FsbGVkIGluIGNoYW5nZXNQcm9jZXNzb3Jcblx0XHRcdFx0cmV0dXJuIGZhY3RvcnkuY2hhbmdlc1Byb2Nlc3Nvci5leGVjdXRlKFtpdGVtRW50cnldLCBbXSwgcGFyYW1ldGVyTWFwKTtcblx0XHRcdH0sXG5cdFx0XHRmYWN0b3J5LmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdGZhY3RvcnkuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IGluc3RhbnRpYXRlT3B0aW9ucyB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQXBpUXVlcnksIEFwaVJlcXVlc3RDb2x1bW5zLCBBcGlSZXF1ZXN0TGltaXQsIEVudHJ5UGFyZW50TnVsbCB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgQ29sbGVjdGlvbkVudHJ5T3B0aW9uc0ludGVyZmFjZSA9IFBhcnRpYWw8Q29sbGVjdGlvbkVudHJ5T3B0aW9ucz47XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRW50cnlPcHRpb25zIHtcblx0Y29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMgPSBbXTtcblx0cXVlcnk6IEFwaVF1ZXJ5IHwgbnVsbCA9IG51bGw7XG5cdHF1ZXJ5UGFyYW1zOiBhbnkgPSB7fTsgLy8gVE9ET1xuXHRwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCA9IG51bGw7XG5cdGRlZmVyUmVxdWVzdDogYm9vbGVhbiA9IGZhbHNlO1xuXHRsaW1pdDogQXBpUmVxdWVzdExpbWl0IHwgbnVsbCA9IG51bGw7XG5cdGVudHJ5S2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuXHRjb25zdHJ1Y3RvciAodmFsdWVzOiBDb2xsZWN0aW9uRW50cnlPcHRpb25zSW50ZXJmYWNlKSB7XG5cdFx0aW5zdGFudGlhdGVPcHRpb25zKHRoaXMsIHZhbHVlcyk7XG5cdH1cbn1cbiIsImltcG9ydCB7IGluc3RhbnRpYXRlT3B0aW9ucyB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4uL2NvcmUnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IENvbnZlcnNpb25NYXAsIE9uQ2hhbmdlRnVuY3Rpb24gfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCB0eXBlIENvbGxlY3Rpb25SZXNvdXJjZUNhbGxiYWNrID0gKFxuXHRpdGVtUmVzb3VyY2VzOiBJdGVtUmVzb3VyY2VbXSxcblx0Y29sbGVjdGlvblJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2VcbikgPT4gdm9pZDtcblxuZXhwb3J0IHR5cGUgQ29sbGVjdGlvblJlc291cmNlSW5pdGlhbENhbGxiYWNrID0gKFxuXHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXG5cdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5XG4pID0+IHZvaWQ7XG5cbmV4cG9ydCB0eXBlIE9uSXRlbXNDcmVhdGVkQ2FsbGJhY2sgPSAoY29udmVyc2lvbk1hcDogQ29udmVyc2lvbk1hcCkgPT4gdm9pZDtcblxuZXhwb3J0IHR5cGUgQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZSA9IFBhcnRpYWw8Q29sbGVjdGlvblJlc291cmNlT3B0aW9ucz47XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zIHtcblx0ZWRpdEl0ZW1zOiBib29sZWFuID0gZmFsc2U7XG5cdGVkaXRDb2xsZWN0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cdG1vZEluc3RhbnQ6IGJvb2xlYW4gPSBmYWxzZTtcblx0ZW5hYmxlU2F2ZTogYm9vbGVhbiA9IHRydWU7XG5cdG9uSXRlbXNDcmVhdGVkOiBPbkl0ZW1zQ3JlYXRlZENhbGxiYWNrID0gbm9vcDtcblx0b25DaGFuZ2U6IE9uQ2hhbmdlRnVuY3Rpb24gPSBub29wO1xuXHRvbkFkZDogQ29sbGVjdGlvblJlc291cmNlQ2FsbGJhY2sgPSBub29wO1xuXHRvblJlbW92ZTogQ29sbGVjdGlvblJlc291cmNlQ2FsbGJhY2sgPSBub29wO1xuXHRvbkFkZEluaXRpYWw6IENvbGxlY3Rpb25SZXNvdXJjZUluaXRpYWxDYWxsYmFjayA9IG5vb3A7XG5cdG9uUmVtb3ZlSW5pdGlhbDogQ29sbGVjdGlvblJlc291cmNlSW5pdGlhbENhbGxiYWNrID0gbm9vcDtcblx0cmVzb3VyY2VLZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXHRjbGVhck9uVGFiQ2hhbmdlOiBib29sZWFuID0gdHJ1ZTtcblx0Y2xlYXJPblN1YlRhYkNoYW5nZTogYm9vbGVhbiA9IHRydWU7XG5cdGN1c3RvbTogYW55ID0gbnVsbDtcblxuXHRjb25zdHJ1Y3RvciAodmFsdWVzOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlKSB7XG5cdFx0aW5zdGFudGlhdGVPcHRpb25zKHRoaXMsIHZhbHVlcyk7XG5cdH1cbn1cbiIsImltcG9ydCB7XG5cdEJhdGNoU3RhdHVzLCBDb2x1bW5FeHBhbnNpb24sIENvbHVtbkluZm8sIENvbHVtblNldCwgaW5BcnJheSwgSXRlbUNhY2hlXG59IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5RmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQge1xuXHRDb2xsZWN0aW9uRWRpdFJlc291cmNlLFxuXHRDb2xsZWN0aW9uRW50cnlPcHRpb25zLFxuXHRDb2xsZWN0aW9uUmVzb3VyY2UsIENvbGxlY3Rpb25WaWV3UmVzb3VyY2UsXG5cdEl0ZW1FbnRyeSxcblx0VGVtcGxhdGUsXG5cdFZpZXdSZXNvdXJjZVxufSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtcblx0QXBpUmVxdWVzdENvbHVtbnMsIENvbGxlY3Rpb25RdWVyeSwgQ29udmVyc2lvbk1hcCxcblx0RW50cnlQYXJlbnROdWxsLFxuXHRGaWVsZE1hcCxcblx0SXRlbUlkLFxuXHRJdGVtSWRDb252ZXJzaW9uTWFwLFxuXHRJdGVtVHlwZSxcblx0UHJvbWlzZUludGVyZmFjZSxcblx0UXVlcnlDYWxsYmFja1xufSBmcm9tICcuLi90eXBlcyc7XG5cbmxldCBjdXJyZW50SWQgPSAwO1xuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkVudHJ5IHtcblx0aWQ6IG51bWJlciA9IGN1cnJlbnRJZCsrO1xuXHRxdWVyeTogQ29sbGVjdGlvblF1ZXJ5O1xuXHRjb2x1bW5zOiBDb2x1bW5TZXQ7XG5cdHRlbXBsYXRlQ29sdW1uczogQ29sdW1uU2V0IHwgbnVsbCA9IG51bGw7XG5cblx0cGFyZW50OiBFbnRyeVBhcmVudE51bGwgPSBudWxsO1xuXG5cdGluaXRpYWw6IEl0ZW1FbnRyeVtdID0gW107XG5cdGl0ZW1zOiBJdGVtRW50cnlbXSA9IFtdO1xuXG5cdHJlc291cmNlczogQXJyYXk8Q29sbGVjdGlvblZpZXdSZXNvdXJjZSB8IENvbGxlY3Rpb25FZGl0UmVzb3VyY2U+ID0gW107XG5cdGRlZmVycmVkOiBhbnk7XG5cdHByb21pc2U6IFByb21pc2VJbnRlcmZhY2U8dGhpcz47XG5cdHJlbG9hZFF1ZXVlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG5cdGhhc0VkaXRSZXNvdXJjZXMgPSBmYWxzZTtcblx0aGFzSXRlbUVkaXRSZXNvdXJjZXMgPSBmYWxzZTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBmYWN0b3J5OiBDb2xsZWN0aW9uRW50cnlGYWN0b3J5LFxuXHRcdHB1YmxpYyBpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cHVibGljIG9wdGlvbnM6IENvbGxlY3Rpb25FbnRyeU9wdGlvbnNcblx0KSB7XG5cdFx0dGhpcy5wYXJlbnQgPSBvcHRpb25zLnBhcmVudDtcblx0XHR0aGlzLnF1ZXJ5ID0gZmFjdG9yeS5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNyZWF0ZVF1ZXJ5KG9wdGlvbnMpO1xuXHRcdHRoaXMuY29sdW1ucyA9IGZhY3RvcnkuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3RTdHViKGl0ZW1UeXBlLCBvcHRpb25zLmNvbHVtbnMpO1xuXG5cdFx0dGhpcy5kZWZlcigpO1xuXHR9XG5cblx0ZGVmZXIgKCk6IHRoaXMge1xuXHRcdGlmICh0aGlzLmlzRGVmZXJyZWQoKSlcblx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0dGhpcy5kZWZlcnJlZCA9IHRoaXMuZmFjdG9yeS5wcm9taXNlU2VydmljZS5kZWZlcigpO1xuXHRcdHRoaXMucHJvbWlzZSA9IHRoaXMuZGVmZXJyZWQucHJvbWlzZTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0aXNEZWZlcnJlZCAoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZSAhPT0gdW5kZWZpbmVkO1xuXHR9XG5cblx0X3Jlc29sdmUgKCk6IHRoaXMge1xuXHRcdGNvbnN0IGRlZmVycmVkID0gdGhpcy5kZWZlcnJlZDtcblxuXHRcdGRlbGV0ZSB0aGlzLmRlZmVycmVkO1xuXHRcdGRlbGV0ZSB0aGlzLnByb21pc2U7XG5cblx0XHRkZWZlcnJlZC5yZXNvbHZlKHRoaXMpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRyZXNvbHZlIChpdGVtRW50cnlDb21wb3VuZDoge2NvbHVtbnM6IENvbHVtblNldCwgaW5pdGlhbDogSXRlbUVudHJ5W10sIG1vZGlmaWVkPzogSXRlbUVudHJ5W119KTogdGhpcyB7XG5cdFx0Y29uc3Qge2luaXRpYWwsIG1vZGlmaWVkfSA9IGl0ZW1FbnRyeUNvbXBvdW5kO1xuXG5cdFx0dGhpcy5jb2x1bW5zID0gaXRlbUVudHJ5Q29tcG91bmQuY29sdW1ucztcblx0XHR0aGlzLmluaXRpYWwgPSBpbml0aWFsO1xuXHRcdHRoaXMuaXRlbXMgPSBtb2RpZmllZCAhPT0gdW5kZWZpbmVkID8gbW9kaWZpZWQgOiBpbml0aWFsLnNsaWNlKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5fcmVzb2x2ZSgpO1xuXHR9XG5cblx0aXNMb2NhbCAoKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG5cblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0cmV0dXJuIHRoaXMuZmFjdG9yeS5rZXlTZXJ2aWNlLmlzTG9jYWxJZChwYXJlbnQuaXRlbUlkKTtcblx0fVxuXG5cdG1hdGNoUGFyZW50IChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG5cblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0Ly8gPT0gdG8gY29tcGFyZSBpdGVtSWRzXG5cdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcblx0XHRyZXR1cm4gcGFyZW50Lml0ZW1UeXBlID09PSBpdGVtVHlwZSAmJiBwYXJlbnQuaXRlbUlkID09IGl0ZW1JZDtcblx0fVxuXG5cdGZvckVhY2ggKGNhbGxiYWNrOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IHZvaWQpOiB2b2lkIHtcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XG5cblx0XHRmb3IgKGNvbnN0IG1vZCBvZiBtb2RpZmllZClcblx0XHRcdGNhbGxiYWNrKG1vZCk7XG5cdH1cblxuXHRnZXRJdGVtQnlJZCAoaXRlbUlkOiBJdGVtSWQpOiBJdGVtRW50cnkgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIG1vZGlmaWVkKSB7XG5cdFx0XHRpZiAoaXRlbUVudHJ5Lml0ZW1JZCA9PT0gaXRlbUlkKVxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5O1xuXHRcdH1cblxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRnZXRJZEFycmF5IChhY2N1bXVsYXRvcjogSXRlbUlkW10gPSBbXSk6IEl0ZW1JZFtdIHtcblx0XHRyZXR1cm4gdGhpcy5mYWN0b3J5LmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuZ2V0SWRBcnJheSh0aGlzLml0ZW1zLCBhY2N1bXVsYXRvcik7XG5cdH1cblxuXHQvLyBzaG91bGQgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHJlc29sdmVEZXJpdmVkXG5cdGNyZWF0ZUl0ZW1zICh2YWx1ZXNBcnJheTogRmllbGRNYXBbXSk6IFByb21pc2VJbnRlcmZhY2U8SXRlbUVudHJ5W10+IHtcblx0XHRjb25zdCBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5O1xuXHRcdGNvbnN0IGNvbHVtblNldCA9IHRoaXMuY29sdW1ucztcblx0XHRsZXQgdGVtcGxhdGU6IFRlbXBsYXRlO1xuXG5cdFx0cmV0dXJuIGZhY3RvcnkuaXRlbUhhbmRsZXIuZmV0Y2hUZW1wbGF0ZSh0aGlzLml0ZW1UeXBlKS50aGVuKFxuXHRcdFx0KHRlbXBsYXRlSW5zdGFuY2U6IFRlbXBsYXRlKSA9PiB7XG5cdFx0XHRcdHRlbXBsYXRlID0gdGVtcGxhdGVJbnN0YW5jZTtcblxuXHRcdFx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVtdID0gW107XG5cblx0XHRcdFx0aWYgKHRoaXMudGVtcGxhdGVDb2x1bW5zID09PSBudWxsKSB7XG5cdFx0XHRcdFx0dGhpcy50ZW1wbGF0ZUNvbHVtbnMgPSB0ZW1wbGF0ZS5jb2x1bW5zLm1lcmdlKGNvbHVtblNldCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKGNvbnN0IHZhbHVlcyBvZiB2YWx1ZXNBcnJheSkge1xuXHRcdFx0XHRcdHJlc3VsdC5wdXNoKFxuXHRcdFx0XHRcdFx0ZmFjdG9yeS5pdGVtRW50cnlGYWN0b3J5LmNvbnN0cnVjdExvY2FsKFxuXHRcdFx0XHRcdFx0XHRmYWN0b3J5LmtleVNlcnZpY2UuZ2V0TG9jYWxJZCgpLFxuXHRcdFx0XHRcdFx0XHR0ZW1wbGF0ZSxcblx0XHRcdFx0XHRcdFx0dmFsdWVzLFxuXHRcdFx0XHRcdFx0XHR7fSxcblx0XHRcdFx0XHRcdFx0dGhpcy5wYXJlbnQsXG5cdFx0XHRcdFx0XHRcdHRoaXMudGVtcGxhdGVDb2x1bW5zXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cblx0XHRcdH0sXG5cdFx0XHRmYWN0b3J5LmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cmVzb2x2ZURlcml2ZWRWYWx1ZXMgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgbG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZSk6IFByb21pc2VJbnRlcmZhY2U8SXRlbUVudHJ5W10+IHtcblx0XHRyZXR1cm4gdGhpcy5mYWN0b3J5Lml0ZW1IYW5kbGVyLnJlc29sdmVEZXJpdmVkVmFsdWVzKGl0ZW1FbnRyaWVzLCB0aGlzLmNvbHVtbnMucm9vdCwgbG9jYWxJdGVtQ2FjaGUpO1xuXHR9XG5cblx0YWRkSXRlbXM8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZT4gKFxuXHRcdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcblx0XHRyZXN1bHRSZXNvdXJjZTogVSxcblx0XHR1cGRhdGVJbml0aWFsPzogYm9vbGVhbixcblx0XHRjYWxsT25BZGQ/OiBib29sZWFuLFxuXHRcdGNhbGxPbkFjdGl2YXRlPzogYm9vbGVhblxuXHQpOiBVWydpdGVtcyddO1xuXG5cdGFkZEl0ZW1zIChcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXG5cdFx0cmVzdWx0UmVzb3VyY2U/OiBudWxsLFxuXHRcdHVwZGF0ZUluaXRpYWw/OiBib29sZWFuLFxuXHRcdGNhbGxPbkFkZD86IGJvb2xlYW4sXG5cdFx0Y2FsbE9uQWN0aXZhdGU/OiBib29sZWFuXG5cdCk6IG51bGw7XG5cblx0YWRkSXRlbXM8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZT4gKFxuXHRcdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcblx0XHRyZXN1bHRSZXNvdXJjZT86IFUgfCBudWxsLFxuXHRcdHVwZGF0ZUluaXRpYWw/OiBib29sZWFuLFxuXHRcdGNhbGxPbkFkZD86IGJvb2xlYW4sXG5cdFx0Y2FsbE9uQWN0aXZhdGU/OiBib29sZWFuXG5cdCk6IFVbJ2l0ZW1zJ10gfCBudWxsO1xuXG5cdGFkZEl0ZW1zPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U+IChcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXG5cdFx0cmVzdWx0UmVzb3VyY2U/OiBVIHwgbnVsbCxcblx0XHR1cGRhdGVJbml0aWFsPzogYm9vbGVhbixcblx0XHRjYWxsT25BZGQ/OiBib29sZWFuLFxuXHRcdGNhbGxPbkFjdGl2YXRlPzogYm9vbGVhblxuXHQpOiBVWydpdGVtcyddIHwgbnVsbCB7XG5cdFx0Ly8gbG9jYWwgZW50cnkgbWlnaHQgYmUgYWRkZWQgbXVsdGlwbGUgdGltZXMgKGV4dGVuZD8pXG5cdFx0aWYgKGl0ZW1FbnRyaWVzLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiBbXTtcblxuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcblx0XHRjb25zdCBwYXJlbnRDb2x1bW4gPSB0aGlzLmNvbHVtbnMubGluaztcblx0XHRjb25zdCBlbnRyaWVzQWRkZWRUb0luaXRpYWw6IEl0ZW1FbnRyeVtdID0gW107XG5cdFx0Y29uc3QgZW50cmllc0FkZGVkVG9Nb2RpZmllZDogSXRlbUVudHJ5W10gPSBbXTtcblxuXHRcdGlmICh1cGRhdGVJbml0aWFsKSB7XG5cdFx0XHRjb25zdCBpbml0aWFsID0gdGhpcy5pbml0aWFsO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0XHQvLyB3aGVuIHNhdmluZywgaXRlbXMgdGhhdCBtaWdodCBhbHJlYWR5IGJlIGluIG1vZGlmaWVkIGFyZSBhZGRlZCB0byBpbml0aWFsXG5cdFx0XHRcdGlmIChpbml0aWFsLmluZGV4T2YoaXRlbUVudHJ5KSA9PT0gLTEpIHtcblx0XHRcdFx0XHRpbml0aWFsLnB1c2goaXRlbUVudHJ5KTtcblx0XHRcdFx0XHRlbnRyaWVzQWRkZWRUb0luaXRpYWwucHVzaChpdGVtRW50cnkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdGlmIChtb2RpZmllZC5pbmRleE9mKGl0ZW1FbnRyeSkgPT09IC0xKSB7XG5cdFx0XHRcdGlmIChwYXJlbnQgIT09IG51bGwpIHtcblx0XHRcdFx0XHRpdGVtRW50cnkucGFyZW50ID0gcGFyZW50O1xuXG5cdFx0XHRcdFx0aWYgKHBhcmVudENvbHVtbiAhPT0gbnVsbCAmJiBpdGVtRW50cnkubW9kaWZpZWQgIT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5tb2RpZmllZFtwYXJlbnRDb2x1bW4uaWRdID0gcGFyZW50Lml0ZW1JZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdG1vZGlmaWVkLnB1c2goaXRlbUVudHJ5KTtcblx0XHRcdFx0ZW50cmllc0FkZGVkVG9Nb2RpZmllZC5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuaGFuZGxlQWRkZWRJdGVtQ2FsbGJhY2tzKFxuXHRcdFx0ZW50cmllc0FkZGVkVG9Jbml0aWFsLFxuXHRcdFx0ZW50cmllc0FkZGVkVG9Nb2RpZmllZCxcblx0XHRcdHJlc3VsdFJlc291cmNlLFxuXHRcdFx0Y2FsbE9uQWRkLFxuXHRcdFx0Y2FsbE9uQWN0aXZhdGVcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBoYW5kbGVBZGRlZEl0ZW1DYWxsYmFja3M8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZT4gKFxuXHRcdGVudHJpZXNBZGRlZFRvSW5pdGlhbDogSXRlbUVudHJ5W10sXG5cdFx0ZW50cmllc0FkZGVkVG9Nb2RpZmllZDogSXRlbUVudHJ5W10sXG5cdFx0cmVzdWx0UmVzb3VyY2U6IFUsXG5cdFx0Y2FsbE9uQWRkPzogYm9vbGVhbixcblx0XHRjYWxsT25BY3RpdmF0ZT86IGJvb2xlYW5cblx0KTogVVsnaXRlbXMnXTtcblxuXHRwcml2YXRlIGhhbmRsZUFkZGVkSXRlbUNhbGxiYWNrcyAoXG5cdFx0ZW50cmllc0FkZGVkVG9Jbml0aWFsOiBJdGVtRW50cnlbXSxcblx0XHRlbnRyaWVzQWRkZWRUb01vZGlmaWVkOiBJdGVtRW50cnlbXSxcblx0XHRyZXN1bHRSZXNvdXJjZT86IG51bGwsXG5cdFx0Y2FsbE9uQWRkPzogYm9vbGVhbixcblx0XHRjYWxsT25BY3RpdmF0ZT86IGJvb2xlYW5cblx0KTogbnVsbDtcblxuXHRwcml2YXRlIGhhbmRsZUFkZGVkSXRlbUNhbGxiYWNrczxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPiAoXG5cdFx0ZW50cmllc0FkZGVkVG9Jbml0aWFsOiBJdGVtRW50cnlbXSxcblx0XHRlbnRyaWVzQWRkZWRUb01vZGlmaWVkOiBJdGVtRW50cnlbXSxcblx0XHRyZXN1bHRSZXNvdXJjZT86IFUgfCBudWxsLFxuXHRcdGNhbGxPbkFkZD86IGJvb2xlYW4sXG5cdFx0Y2FsbE9uQWN0aXZhdGU/OiBib29sZWFuXG5cdCk6IFVbJ2l0ZW1zJ10gfCBudWxsO1xuXG5cdHByaXZhdGUgaGFuZGxlQWRkZWRJdGVtQ2FsbGJhY2tzPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U+IChcblx0XHRlbnRyaWVzQWRkZWRUb0luaXRpYWw6IEl0ZW1FbnRyeVtdLFxuXHRcdGVudHJpZXNBZGRlZFRvTW9kaWZpZWQ6IEl0ZW1FbnRyeVtdLFxuXHRcdHJlc3VsdFJlc291cmNlOiBVIHwgbnVsbCA9IG51bGwsXG5cdFx0Y2FsbE9uQWRkPzogYm9vbGVhbixcblx0XHRjYWxsT25BY3RpdmF0ZT86IGJvb2xlYW5cblx0KTogVVsnaXRlbXMnXSB8IG51bGwge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcblxuXHRcdGlmIChlbnRyaWVzQWRkZWRUb0luaXRpYWwubGVuZ3RoID4gMCkge1xuXHRcdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2Ugb2YgY29sbGVjdGlvblJlc291cmNlcylcblx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLm9wdGlvbnMub25BZGRJbml0aWFsKGVudHJpZXNBZGRlZFRvSW5pdGlhbCwgdGhpcyk7XG5cdFx0fVxuXG5cdFx0aWYgKGVudHJpZXNBZGRlZFRvTW9kaWZpZWQubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIHJlc3VsdFJlc291cmNlID09PSBudWxsID8gbnVsbCA6IFtdO1xuXG5cdFx0aWYgKGNhbGxPbkFjdGl2YXRlICYmIGNvbGxlY3Rpb25SZXNvdXJjZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgbG9jYWxDYWNoZSA9IGNvbGxlY3Rpb25SZXNvdXJjZXNbMF0ubG9jYWxDYWNoZTtcblxuXHRcdFx0Zm9yIChjb25zdCBhZGRlZEl0ZW1FbnRyeSBvZiBlbnRyaWVzQWRkZWRUb01vZGlmaWVkKVxuXHRcdFx0XHRsb2NhbENhY2hlLm9uQWN0aXZhdGVJdGVtKGFkZGVkSXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRsZXQgcmVzdWx0OiBVWydpdGVtcyddIHwgbnVsbCA9IG51bGw7XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZSBvZiBjb2xsZWN0aW9uUmVzb3VyY2VzKSB7XG5cdFx0XHRjb25zdCBhZGRlZFJlc291cmNlcyA9IGNvbGxlY3Rpb25SZXNvdXJjZS5hZGRJdGVtUmVzb3VyY2VzKGVudHJpZXNBZGRlZFRvTW9kaWZpZWQpO1xuXG5cdFx0XHRpZiAoY29sbGVjdGlvblJlc291cmNlID09PSByZXN1bHRSZXNvdXJjZSkge1xuXHRcdFx0XHRyZXN1bHQgPSBhZGRlZFJlc291cmNlcztcblxuXHRcdFx0XHRpZiAoY2FsbE9uQWRkKSB7XG5cdFx0XHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5jYWxsT25BZGQoYWRkZWRSZXNvdXJjZXMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Vcblx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLmNhbGxPbkFkZChhZGRlZFJlc291cmNlcyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHJlbW92ZUl0ZW1zPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U+IChcblx0XHRpZEFycmF5OiBJdGVtSWRbXSxcblx0XHRyZXN1bHRSZXNvdXJjZTogVSxcblx0XHR1cGRhdGVJbml0aWFsPzogYm9vbGVhbixcblx0XHRjYWxsT25SZW1vdmU/OiBib29sZWFuXG5cdCk6IFVbJ2l0ZW1zJ107XG5cblx0cmVtb3ZlSXRlbXMgKFxuXHRcdGlkQXJyYXk6IEl0ZW1JZFtdLFxuXHRcdHJlc3VsdFJlc291cmNlPzogbnVsbCxcblx0XHR1cGRhdGVJbml0aWFsPzogYm9vbGVhbixcblx0XHRjYWxsT25SZW1vdmU/OiBib29sZWFuXG5cdCk6IG51bGw7XG5cblx0cmVtb3ZlSXRlbXM8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZT4gKFxuXHRcdGlkQXJyYXk6IEl0ZW1JZFtdLFxuXHRcdHJlc3VsdFJlc291cmNlPzogVSB8IG51bGwsXG5cdFx0dXBkYXRlSW5pdGlhbD86IGJvb2xlYW4sXG5cdFx0Y2FsbE9uUmVtb3ZlPzogYm9vbGVhblxuXHQpOiBVWydpdGVtcyddIHwgbnVsbDtcblxuXHRyZW1vdmVJdGVtczxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPiAoXG5cdFx0aWRBcnJheTogSXRlbUlkW10sXG5cdFx0cmVzdWx0UmVzb3VyY2U/OiBVIHwgbnVsbCxcblx0XHR1cGRhdGVJbml0aWFsPzogYm9vbGVhbixcblx0XHRjYWxsT25SZW1vdmU/OiBib29sZWFuXG5cdCk6IFVbJ2l0ZW1zJ10gfCBudWxsIHtcblx0XHRpZiAoaWRBcnJheS5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gW107XG5cblx0XHRyZXR1cm4gdGhpcy5oYW5kbGVSZW1vdmVkSXRlbXMoXG5cdFx0XHRpdGVtRW50cnkgPT4gIWluQXJyYXkoaXRlbUVudHJ5Lml0ZW1JZCwgaWRBcnJheSksXG5cdFx0XHRyZXN1bHRSZXNvdXJjZSxcblx0XHRcdHVwZGF0ZUluaXRpYWwsXG5cdFx0XHRjYWxsT25SZW1vdmVcblx0XHQpO1xuXHR9XG5cblx0Y2xlYXI8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZT4gKFxuXHRcdHJlc3VsdFJlc291cmNlOiBVLFxuXHRcdHVwZGF0ZUluaXRpYWw/OiBib29sZWFuLFxuXHRcdGNhbGxPblJlbW92ZT86IGJvb2xlYW5cblx0KTogVVsnaXRlbXMnXTtcblxuXHRjbGVhciAoXG5cdFx0cmVzdWx0UmVzb3VyY2U/OiBudWxsLFxuXHRcdHVwZGF0ZUluaXRpYWw/OiBib29sZWFuLFxuXHRcdGNhbGxPblJlbW92ZT86IGJvb2xlYW5cblx0KTogbnVsbDtcblxuXHRjbGVhcjxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPiAoXG5cdFx0cmVzdWx0UmVzb3VyY2U/OiBVIHwgbnVsbCxcblx0XHR1cGRhdGVJbml0aWFsPzogYm9vbGVhbixcblx0XHRjYWxsT25SZW1vdmU/OiBib29sZWFuXG5cdCkge1xuXHRcdHJldHVybiB0aGlzLmhhbmRsZVJlbW92ZWRJdGVtcyhcblx0XHRcdCgpID0+IGZhbHNlLFxuXHRcdFx0cmVzdWx0UmVzb3VyY2UsXG5cdFx0XHR1cGRhdGVJbml0aWFsLFxuXHRcdFx0Y2FsbE9uUmVtb3ZlXG5cdFx0KTtcblx0fVxuXG5cdGhhbmRsZVJlbW92ZWRJdGVtczxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPiAoXG5cdFx0ZmlsdGVyRnVuY3Rpb246IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gYm9vbGVhbixcblx0XHRyZXN1bHRSZXNvdXJjZTogVSxcblx0XHR1cGRhdGVJbml0aWFsPzogYm9vbGVhbixcblx0XHRjYWxsT25SZW1vdmU/OiBib29sZWFuXG5cdCk6IFVbJ2l0ZW1zJ107XG5cblx0aGFuZGxlUmVtb3ZlZEl0ZW1zIChcblx0XHRmaWx0ZXJGdW5jdGlvbjogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBib29sZWFuLFxuXHRcdHJlc3VsdFJlc291cmNlPzogbnVsbCxcblx0XHR1cGRhdGVJbml0aWFsPzogYm9vbGVhbixcblx0XHRjYWxsT25SZW1vdmU/OiBib29sZWFuXG5cdCk6IG51bGw7XG5cblx0aGFuZGxlUmVtb3ZlZEl0ZW1zPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U+IChcblx0XHRmaWx0ZXJGdW5jdGlvbjogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBib29sZWFuLFxuXHRcdHJlc3VsdFJlc291cmNlPzogVSB8IG51bGwsXG5cdFx0dXBkYXRlSW5pdGlhbD86IGJvb2xlYW4sXG5cdFx0Y2FsbE9uUmVtb3ZlPzogYm9vbGVhblxuXHQpOiBVWydpdGVtcyddIHwgbnVsbDtcblxuXHRoYW5kbGVSZW1vdmVkSXRlbXM8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZT4gKFxuXHRcdGZpbHRlckZ1bmN0aW9uOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGJvb2xlYW4sXG5cdFx0cmVzdWx0UmVzb3VyY2U/OiBVIHwgbnVsbCxcblx0XHR1cGRhdGVJbml0aWFsOiBib29sZWFuID0gZmFsc2UsXG5cdFx0Y2FsbE9uUmVtb3ZlPzogYm9vbGVhblxuXHQpOiBVWydpdGVtcyddIHwgbnVsbCB7XG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5U2VydmljZSA9IHRoaXMuZmFjdG9yeS5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlO1xuXHRcdGNvbnN0IHJlbW92ZWRGcm9tTW9kaWZpZWQgPSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmZpbHRlckFycmF5KHRoaXMuaXRlbXMsIGZpbHRlckZ1bmN0aW9uKTtcblx0XHRsZXQgcmVtb3ZlZEZyb21Jbml0aWFsOiBJdGVtRW50cnlbXTtcblxuXHRcdGlmICh1cGRhdGVJbml0aWFsKVxuXHRcdFx0cmVtb3ZlZEZyb21Jbml0aWFsID0gY29sbGVjdGlvbkVudHJ5U2VydmljZS5maWx0ZXJBcnJheSh0aGlzLmluaXRpYWwsIGZpbHRlckZ1bmN0aW9uKTtcblx0XHRlbHNlIHtcblx0XHRcdC8vIHJlbW92ZSBhbGwgKmxvY2FsKiBpdGVtcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIGZyb20gbW9kaWZpZWQgZnJvbSBpbml0aWFsLCB0b29cblx0XHRcdGNvbnN0IGxvY2FsUmVtb3ZlZEZyb21Nb2RpZmllZDogSXRlbUVudHJ5W10gPSBbXTtcblxuXHRcdFx0Zm9yIChjb25zdCByZW1vdmVkRW50cnkgb2YgcmVtb3ZlZEZyb21Nb2RpZmllZCkge1xuXHRcdFx0XHRpZiAocmVtb3ZlZEVudHJ5LmlzTG9jYWwoKSlcblx0XHRcdFx0XHRsb2NhbFJlbW92ZWRGcm9tTW9kaWZpZWQucHVzaChyZW1vdmVkRW50cnkpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAobG9jYWxSZW1vdmVkRnJvbU1vZGlmaWVkLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0cmVtb3ZlZEZyb21Jbml0aWFsID0gY29sbGVjdGlvbkVudHJ5U2VydmljZS5maWx0ZXJBcnJheShcblx0XHRcdFx0XHR0aGlzLmluaXRpYWwsXG5cdFx0XHRcdFx0aXRlbUVudHJ5ID0+IGxvY2FsUmVtb3ZlZEZyb21Nb2RpZmllZC5pbmRleE9mKGl0ZW1FbnRyeSkgPT09IC0xXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Vcblx0XHRcdFx0cmVtb3ZlZEZyb21Jbml0aWFsID0gW107XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuaGFuZGxlUmVtb3ZlZEl0ZW1DYWxsYmFja3MocmVtb3ZlZEZyb21Jbml0aWFsLCByZW1vdmVkRnJvbU1vZGlmaWVkLCByZXN1bHRSZXNvdXJjZSwgY2FsbE9uUmVtb3ZlKTtcblx0fVxuXG5cdHByaXZhdGUgaGFuZGxlUmVtb3ZlZEl0ZW1DYWxsYmFja3M8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZT4gKFxuXHRcdHJlbW92ZWRGcm9tSW5pdGlhbDogSXRlbUVudHJ5W10sXG5cdFx0cmVtb3ZlZEZyb21Nb2RpZmllZDogSXRlbUVudHJ5W10sXG5cdFx0cmVzdWx0UmVzb3VyY2U6IFUsXG5cdFx0Y2FsbE9uUmVtb3ZlPzogYm9vbGVhblxuXHQpOiBVWydpdGVtcyddO1xuXG5cdHByaXZhdGUgaGFuZGxlUmVtb3ZlZEl0ZW1DYWxsYmFja3MgKFxuXHRcdHJlbW92ZWRGcm9tSW5pdGlhbDogSXRlbUVudHJ5W10sXG5cdFx0cmVtb3ZlZEZyb21Nb2RpZmllZDogSXRlbUVudHJ5W10sXG5cdFx0cmVzdWx0UmVzb3VyY2U/OiBudWxsLFxuXHRcdGNhbGxPblJlbW92ZT86IGJvb2xlYW5cblx0KTogbnVsbDtcblxuXHRwcml2YXRlIGhhbmRsZVJlbW92ZWRJdGVtQ2FsbGJhY2tzPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U+IChcblx0XHRyZW1vdmVkRnJvbUluaXRpYWw6IEl0ZW1FbnRyeVtdLFxuXHRcdHJlbW92ZWRGcm9tTW9kaWZpZWQ6IEl0ZW1FbnRyeVtdLFxuXHRcdHJlc3VsdFJlc291cmNlPzogVSB8IG51bGwsXG5cdFx0Y2FsbE9uUmVtb3ZlPzogYm9vbGVhblxuXHQpOiBVWydpdGVtcyddIHwgbnVsbDtcblxuXHRwcml2YXRlIGhhbmRsZVJlbW92ZWRJdGVtQ2FsbGJhY2tzPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U+IChcblx0XHRyZW1vdmVkRnJvbUluaXRpYWw6IEl0ZW1FbnRyeVtdLFxuXHRcdHJlbW92ZWRGcm9tTW9kaWZpZWQ6IEl0ZW1FbnRyeVtdLFxuXHRcdHJlc3VsdFJlc291cmNlPzogVSB8IG51bGwsXG5cdFx0Y2FsbE9uUmVtb3ZlOiBib29sZWFuID0gdHJ1ZVxuXHQpOiBVWydpdGVtcyddIHwgbnVsbCB7XG5cdFx0Y29uc3QgY29sbGVjdGlvblJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xuXG5cdFx0aWYgKHJlbW92ZWRGcm9tSW5pdGlhbC5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZSBvZiBjb2xsZWN0aW9uUmVzb3VyY2VzKVxuXHRcdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2Uub3B0aW9ucy5vblJlbW92ZUluaXRpYWwocmVtb3ZlZEZyb21Jbml0aWFsLCB0aGlzKTtcblx0XHR9XG5cblx0XHRpZiAocmVtb3ZlZEZyb21Nb2RpZmllZC5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gcmVzdWx0UmVzb3VyY2UgPT09IG51bGwgPyBudWxsIDogW107XG5cblx0XHRsZXQgcmVzdWx0OiBVWydpdGVtcyddIHwgbnVsbCA9IG51bGw7XG5cblx0XHRmb3IgKGNvbnN0IHJlbW92ZWRFbnRyeSBvZiByZW1vdmVkRnJvbU1vZGlmaWVkKVxuXHRcdFx0cmVtb3ZlZEVudHJ5LmRlYWN0aXZhdGVSZXNvdXJjZXMoKTtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvblJlc291cmNlIG9mIGNvbGxlY3Rpb25SZXNvdXJjZXMpIHtcblx0XHRcdGNvbnN0IHJlbW92ZWRSZXNvdXJjZXMgPSBjb2xsZWN0aW9uUmVzb3VyY2UucmVtb3ZlSXRlbVJlc291cmNlcyhyZW1vdmVkRnJvbU1vZGlmaWVkKTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25SZXNvdXJjZSA9PT0gcmVzdWx0UmVzb3VyY2UpIHtcblx0XHRcdFx0cmVzdWx0ID0gcmVtb3ZlZFJlc291cmNlcztcblxuXHRcdFx0XHRpZiAoY2FsbE9uUmVtb3ZlKVxuXHRcdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5jYWxsT25SZW1vdmUocmVtb3ZlZFJlc291cmNlcyk7XG5cdFx0XHR9IGVsc2Vcblx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLmNhbGxPblJlbW92ZShyZW1vdmVkUmVzb3VyY2VzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cHJpdmF0ZSBjcmVhdGVCYXRjaFN0YXR1cyAoXG5cdFx0aXRlbUlkczogSXRlbUlkW10sXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRcdGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGVcblx0KTogQmF0Y2hTdGF0dXM8SXRlbUVudHJ5PiB7XG5cdFx0cmV0dXJuIHRoaXMuZmFjdG9yeS5pdGVtSGFuZGxlci5jcmVhdGVCYXRjaFN0YXR1cyhcblx0XHRcdHRoaXMuaXRlbVR5cGUsXG5cdFx0XHRpdGVtSWRzLFxuXHRcdFx0dGhpcy5wYXJlbnQsXG5cdFx0XHRyZXF1ZXN0Q29sdW1ucyxcblx0XHRcdGZhbHNlLFxuXHRcdFx0bG9jYWxJdGVtQ2FjaGUsXG5cdFx0XHRmYWxzZVxuXHRcdCkuYmF0Y2hTdGF0dXM7XG5cdH1cblxuXHRwcml2YXRlIGV4cGFuZExvY2FsIChcblx0XHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMsXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPENvbHVtbkV4cGFuc2lvbj4ge1xuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XG5cdFx0Y29uc3QgZXJyb3JIYW5kbGVyID0gZmFjdG9yeS5lcnJvckhhbmRsZXI7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSB0aGlzLml0ZW1UeXBlO1xuXG5cdFx0cmV0dXJuIGZhY3RvcnkuY29sdW1uSGFuZGxlci5mZXRjaChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMpLnRoZW4oXG5cdFx0XHRyZXNwb25zZUNvbHVtbnMgPT4ge1xuXHRcdFx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSBmYWN0b3J5LmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdHJlcXVlc3RDb2x1bW5zLFxuXHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1uc1xuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGNvbnN0IGJhdGNoU3RhdHVzID0gdGhpcy5jcmVhdGVCYXRjaFN0YXR1cyh0aGlzLmdldElkQXJyYXkoKSwgcmVxdWVzdENvbHVtbnMsIGxvY2FsSXRlbUNhY2hlKTtcblxuXHRcdFx0XHRyZXR1cm4gYmF0Y2hTdGF0dXMuZ2V0UHJvbWlzZXMoKS50aGVuKFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBmYWN0b3J5Lml0ZW1IYW5kbGVyLmhhbmRsZUJhdGNoUmVzcG9uc2UoXG5cdFx0XHRcdFx0XHRcdGJhdGNoU3RhdHVzLFxuXHRcdFx0XHRcdFx0XHRsb2NhbEl0ZW1DYWNoZSxcblx0XHRcdFx0XHRcdFx0cmVxdWVzdENvbHVtbnMsXG5cdFx0XHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1ucyxcblx0XHRcdFx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHQpLnRoZW4oXG5cdFx0XHRcdFx0KCkgPT4gY29sdW1uRXhwYW5zaW9uLFxuXHRcdFx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgZXhwYW5kUmVtb3RlIChcblx0XHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMsXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPENvbHVtbkV4cGFuc2lvbj4ge1xuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XG5cdFx0Y29uc3QgZXJyb3JIYW5kbGVyID0gZmFjdG9yeS5lcnJvckhhbmRsZXI7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSB0aGlzLml0ZW1UeXBlO1xuXG5cdFx0cmV0dXJuIGZhY3RvcnkuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RJdGVtcyh0aGlzLCB1bmRlZmluZWQsIHJlcXVlc3RDb2x1bW5zKS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRjb25zdCByZXNwb25zZUl0ZW1zID0gcmVzcG9uc2UuaXRlbXNbaXRlbVR5cGVdO1xuXHRcdFx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKTtcblxuXHRcdFx0XHR0aGlzLmhhbmRsZVJlbW92ZWRJdGVtcyhcblx0XHRcdFx0XHRpdGVtRW50cnkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlSXRlbXNbaXRlbUVudHJ5Lml0ZW1JZF0gIT09IHVuZGVmaW5lZCB8fCBpdGVtRW50cnkuaXNMb2NhbCgpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdHRydWVcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSBmYWN0b3J5LmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdHJlcXVlc3RDb2x1bW5zLFxuXHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1uc1xuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGNvbnN0IGJhdGNoU3RhdHVzID0gdGhpcy5jcmVhdGVCYXRjaFN0YXR1cyhyZXNwb25zZS5saW5rc1tpdGVtVHlwZV0sIHJlcXVlc3RDb2x1bW5zLCBsb2NhbEl0ZW1DYWNoZSk7XG5cblx0XHRcdFx0cmV0dXJuIGJhdGNoU3RhdHVzLmdldFByb21pc2VzKCkudGhlbihcblx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFjdG9yeS5pdGVtSGFuZGxlci5oYW5kbGVCYXRjaFJlc3BvbnNlKFxuXHRcdFx0XHRcdFx0XHRiYXRjaFN0YXR1cyxcblx0XHRcdFx0XHRcdFx0bG9jYWxJdGVtQ2FjaGUsXG5cdFx0XHRcdFx0XHRcdHJlcXVlc3RDb2x1bW5zLFxuXHRcdFx0XHRcdFx0XHRyZXNwb25zZSxcblx0XHRcdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHQpLnRoZW4oXG5cdFx0XHRcdFx0KCkgPT4gY29sdW1uRXhwYW5zaW9uLFxuXHRcdFx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGV4cGFuZCAobmV3Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMsIGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGUpOiBQcm9taXNlSW50ZXJmYWNlPHRoaXM+IHtcblx0XHRpZiAobmV3Q29sdW1ucyAhPT0gdHJ1ZSAmJiBuZXdDb2x1bW5zLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiB0aGlzLmZhY3RvcnkucHJvbWlzZVNlcnZpY2Uud2hlbih0aGlzKTtcblxuXHRcdHJldHVybiAoXG5cdFx0XHR0aGlzLmlzTG9jYWwoKSA/XG5cdFx0XHRcdHRoaXMuZXhwYW5kTG9jYWwobmV3Q29sdW1ucywgbG9jYWxJdGVtQ2FjaGUpIDpcblx0XHRcdFx0dGhpcy5leHBhbmRSZW1vdGUobmV3Q29sdW1ucywgbG9jYWxJdGVtQ2FjaGUpXG5cdFx0KS50aGVuKFxuXHRcdFx0Y29sdW1uRXhwYW5zaW9uID0+IHtcblx0XHRcdFx0dGhpcy5leHBhbmRDb2x1bW5zKGNvbHVtbkV4cGFuc2lvbik7XG5cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdGV4dGVuZFF1ZXJ5IChjYWxsYmFjaz86IFF1ZXJ5Q2FsbGJhY2spIHtcblx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXG5cdFx0aWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5xdWVyeTtcblxuXHRcdG9wdGlvbnMucXVlcnlQYXJhbXMgPSBjYWxsYmFjayhvcHRpb25zLnF1ZXJ5UGFyYW1zKTtcblxuXHRcdHJldHVybiB0aGlzLnF1ZXJ5ID0gdGhpcy5mYWN0b3J5LmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuY3JlYXRlUXVlcnkob3B0aW9ucyk7XG5cdH1cblxuXHRleHRlbmQ8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZT4gKFxuXHRcdHF1ZXJ5Q2FsbGJhY2s6IFF1ZXJ5Q2FsbGJhY2ssXG5cdFx0Y29sbGVjdGlvblJlc291cmNlPzogVSxcblx0XHRjYWxsT25BZGQ/OiBib29sZWFuLFxuXHRcdHVwZGF0ZUluaXRpYWw/OiBib29sZWFuXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8VVsnaXRlbXMnXT47XG5cblx0ZXh0ZW5kIChcblx0XHRxdWVyeUNhbGxiYWNrOiBRdWVyeUNhbGxiYWNrLFxuXHRcdGNvbGxlY3Rpb25SZXNvdXJjZT86IG51bGwsXG5cdFx0Y2FsbE9uQWRkPzogYm9vbGVhbixcblx0XHR1cGRhdGVJbml0aWFsPzogYm9vbGVhblxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPG51bGw+O1xuXG5cdGV4dGVuZDxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPiAoXG5cdFx0cXVlcnlDYWxsYmFjazogUXVlcnlDYWxsYmFjayxcblx0XHRjb2xsZWN0aW9uUmVzb3VyY2U/OiBVIHwgbnVsbCxcblx0XHRjYWxsT25BZGQ/OiBib29sZWFuLFxuXHRcdHVwZGF0ZUluaXRpYWw/OiBib29sZWFuXG5cdCkge1xuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XG5cdFx0Y29uc3QgZXJyb3JIYW5kbGVyID0gZmFjdG9yeS5lcnJvckhhbmRsZXI7XG5cdFx0Y29uc3QgZXh0ZW5kZWRRdWVyeSA9IHRoaXMuZXh0ZW5kUXVlcnkocXVlcnlDYWxsYmFjaykub2JqZWN0O1xuXHRcdGNvbnN0IGZ1bGxRdWVyeSA9IGZhY3RvcnkucXVlcnlTZXJ2aWNlLmFkZEFuZENvbmRpdGlvbihcblx0XHRcdGV4dGVuZGVkUXVlcnksXG5cdFx0XHRmYWN0b3J5LnF1ZXJ5U2VydmljZS5jcmVhdGVOb3RJbih0aGlzLmdldElkQXJyYXkoKSlcblx0XHQpO1xuXG5cdFx0Ly8gdG9kbzogYWxzbyBkbyB0aGUgbGltaXQgY2hlY2sgaW4gYmF0Y2hFeHRlbmRcblx0XHRjb25zdCBwcm9taXNlID0gZmFjdG9yeS5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdEl0ZW1zKFxuXHRcdFx0dGhpcyxcblx0XHRcdC8vIFdoZW4gdGhlcmUncyBhIGxpbWl0IHdlIHdhbnQgdG8gZmV0Y2ggYWxsIGl0ZW1zIGJlY2F1c2Ugd2Ugd2lsbCBkbyBzb3J0aW5nIGFuZCBzcGxpY2luZyBvZiB0aGUgZXhjZXNzIGl0ZW1zXG5cdFx0XHR0aGlzLm9wdGlvbnMubGltaXQgIT09IG51bGwgPyBleHRlbmRlZFF1ZXJ5IDogZnVsbFF1ZXJ5XG5cdFx0KS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHQvLyByZW1vdmVBYnNlbnRJdGVtcyhyZXNwb25zZSk7IFRPRE86IHdlIGNhbiBvbmx5IGRvIHRoaXMgd2hlbiB3ZSByZXF1ZXN0ICphbGwqIHRoZSBpdGVtc1xuXHRcdFx0XHRyZXR1cm4gZmFjdG9yeS5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc1Jlc3BvbnNlKFxuXHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHRcdHJlc3BvbnNlLmxpbmtzW3RoaXMuaXRlbVR5cGVdLFxuXHRcdFx0XHRcdHRoaXMucGFyZW50LFxuXHRcdFx0XHRcdHRoaXMuY29sdW1uc1xuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHRpdGVtRW50cmllcyA9PiB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzLnByb21pc2U7XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuYWRkSXRlbXMoaXRlbUVudHJpZXMsIGNvbGxlY3Rpb25SZXNvdXJjZSwgdXBkYXRlSW5pdGlhbCwgY2FsbE9uQWRkLCBmYWxzZSk7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cblx0XHR0aGlzLnByb21pc2UgPSBwcm9taXNlLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXG5cdFx0cmV0dXJuIHByb21pc2U7XG5cdH1cblxuXHRxdWV1ZVJlbG9hZCAoKTogdm9pZCB7XG5cdFx0dGhpcy5yZWxvYWRRdWV1ZWQgPSB0cnVlO1xuXHR9XG5cblx0ZXhwYW5kQ29sdW1ucyAoY29sdW1uRXhwYW5zaW9uOiBDb2x1bW5FeHBhbnNpb24pOiB2b2lkIHtcblx0XHRjb25zdCBleHBhbnNpb25SZXN1bHQgPSBjb2x1bW5FeHBhbnNpb24ucnVuKHRoaXMuY29sdW1ucyk7XG5cblx0XHRpZiAoZXhwYW5zaW9uUmVzdWx0ID09PSBudWxsKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0dGhpcy5jb2x1bW5zID0gZXhwYW5zaW9uUmVzdWx0Lm1lcmdlZDtcblx0XHR0aGlzLnRlbXBsYXRlQ29sdW1ucyA9IG51bGw7XG5cdFx0dGhpcy5vcHRpb25zLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMucmVxdWVzdDtcblx0fVxuXG5cdGV4cGFuZFJlcXVlc3RDb2x1bW5zIChyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMpOiB2b2lkIHtcblx0XHR0aGlzLmNvbHVtbnMuZXhwYW5kUmVxdWVzdENvbHVtbnMocmVxdWVzdENvbHVtbnMpO1xuXHRcdHRoaXMub3B0aW9ucy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zLnJlcXVlc3Q7XG5cdH1cblxuXHRnZXRBZGRlZEl0ZW1zIChyZXR1cm5JdGVtSWRzOiB0cnVlKTogSXRlbUlkW107XG5cdGdldEFkZGVkSXRlbXMgKHJldHVybkl0ZW1JZHM/OiBib29sZWFuKTogSXRlbUVudHJ5W107XG5cdGdldEFkZGVkSXRlbXMgKHJldHVybkl0ZW1JZHM6IGJvb2xlYW4gPSBmYWxzZSkge1xuXHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmluaXRpYWw7XG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xuXHRcdGNvbnN0IHJlc3VsdDogQXJyYXk8SXRlbUVudHJ5IHwgSXRlbUlkPiA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgbW9kaWZpZWQpIHtcblx0XHRcdGlmIChpbml0aWFsLmluZGV4T2YoaXRlbUVudHJ5KSA9PT0gLTEpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKHJldHVybkl0ZW1JZHMgPyBpdGVtRW50cnkuaXRlbUlkIDogaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0UmVtb3ZlZEl0ZW1zIChyZXR1cm5JdGVtSWRzOiB0cnVlKTogSXRlbUlkW107XG5cdGdldFJlbW92ZWRJdGVtcyAocmV0dXJuSXRlbUlkcz86IGJvb2xlYW4pOiBJdGVtRW50cnlbXTtcblx0Z2V0UmVtb3ZlZEl0ZW1zIChyZXR1cm5JdGVtSWRzOiBib29sZWFuID0gZmFsc2UpIHtcblx0XHRjb25zdCBpbml0aWFsID0gdGhpcy5pbml0aWFsO1xuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcblx0XHRjb25zdCByZXN1bHQ6IEFycmF5PEl0ZW1FbnRyeSB8IEl0ZW1JZD4gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGluaXRpYWwpIHtcblx0XHRcdGlmIChtb2RpZmllZC5pbmRleE9mKGl0ZW1FbnRyeSkgPT09IC0xKVxuXHRcdFx0XHRyZXN1bHQucHVzaChyZXR1cm5JdGVtSWRzID8gaXRlbUVudHJ5Lml0ZW1JZCA6IGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldFVwZGF0ZWRJdGVtcyAoKTogSXRlbUVudHJ5W10ge1xuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBtb2RpZmllZCkge1xuXHRcdFx0aWYgKCFpdGVtRW50cnkuaXNMb2NhbCgpICYmIGl0ZW1FbnRyeS5oYXNDaGFuZ2VzKCkpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGhhc0FkZGVkSXRlbXMgKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLml0ZW1zLmxlbmd0aCA+IHRoaXMuaW5pdGlhbC5sZW5ndGg7XG5cdH1cblxuXHRoYXNSZW1vdmVkSXRlbXMgKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmluaXRpYWwubGVuZ3RoID4gdGhpcy5pdGVtcy5sZW5ndGg7XG5cdH1cblxuXHRoYXNVcGRhdGVkSXRlbXMgKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcblxuXHRcdGZvciAoY29uc3QgbW9kaWZpZWRJdGVtRW50cnkgb2YgbW9kaWZpZWQpIHtcblx0XHRcdGlmIChtb2RpZmllZEl0ZW1FbnRyeS5oYXNDaGFuZ2VzKCkpXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGdldEN1cnJlbnRSZXNvdXJjZTxUIGV4dGVuZHMgQ29sbGVjdGlvblZpZXdSZXNvdXJjZSA9IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8Vmlld1Jlc291cmNlPj4gKCk6IFQge1xuXHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xuXG5cdFx0Ly8gQHRzLWlnbm9yZSByZXR1cm4gdHlwZSBpcyBiZWluZyB3ZWlyZCwgYnV0IHlvdSBzaG91bGQganVzdCBiZSBhYmxlIHRvIHBhc3MgaXRcblx0XHRyZXR1cm4gcmVzb3VyY2VzW3Jlc291cmNlcy5sZW5ndGggLSAxXTtcblx0fVxuXG5cdGNsZWFyUmVzb3VyY2VzIChpc1N1YnRhYkNoYW5nZTogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG5cdFx0Y29uc3QgaXRlbUVudHJpZXMgPSB0aGlzLml0ZW1zOyAvLyBUT0RPOiBpbml0aWFsXG5cdFx0Y29uc3QgY3VycmVudFJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xuXHRcdGNvbnN0IG5ld1Jlc291cmNlczogQ29sbGVjdGlvblJlc291cmNlW10gPSBbXTtcblxuXHRcdC8vIHdlJ2xsIGFkZCB0aGUgaXRlbSByZXNvdXJjZXMgYmFjayBpbiBsYXRlclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxuXHRcdFx0aXRlbUVudHJ5LmNsZWFyUmVzb3VyY2VzKCk7XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZSBvZiBjdXJyZW50UmVzb3VyY2VzKSB7XG5cdFx0XHRpZiAoY29sbGVjdGlvblJlc291cmNlLm9wdGlvbnNbaXNTdWJ0YWJDaGFuZ2UgPyAnY2xlYXJPblN1YlRhYkNoYW5nZScgOiAnY2xlYXJPblRhYkNoYW5nZSddKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0bmV3UmVzb3VyY2VzLnB1c2goY29sbGVjdGlvblJlc291cmNlKTtcblxuXHRcdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgY29sbGVjdGlvblJlc291cmNlLml0ZW1zKVxuXHRcdFx0XHRpdGVtUmVzb3VyY2UuZW50cnkucmVzb3VyY2VzLnB1c2goaXRlbVJlc291cmNlKTsgLy8gcmVzb3VyY2VzIHNob3VsZCBiZSBlbXB0eSBieSBub3cgOi0pXG5cdFx0fVxuXG5cdFx0dGhpcy5yZXNvdXJjZXMgPSBuZXdSZXNvdXJjZXM7XG5cdH1cblxuXHQvKipcblx0ICogQGRlc2NyaXB0aW9uXG5cdCAqIHRoaXMgZG9lc24ndCByZXZlcnQgdXBkYXRlc1xuXHQgKi9cblx0cmV2ZXJ0Q2hhbmdlcyAoKTogdm9pZCB7XG5cdFx0Ly8gc2F2ZSB0aGVzZSBiZWZvcmUgcmVzZXR0aW5nIHRoZSBpdGVtcyBwcm9wZXJ0eVxuXHRcdGNvbnN0IGFkZGVkSXRlbXMgPSB0aGlzLmdldEFkZGVkSXRlbXMoKTtcblx0XHRjb25zdCByZW1vdmVkSXRlbXMgPSB0aGlzLmdldFJlbW92ZWRJdGVtcygpO1xuXG5cdFx0dGhpcy5pdGVtcyA9IHRoaXMuaW5pdGlhbC5zbGljZSgpO1xuXG5cdFx0dGhpcy5oYW5kbGVBZGRlZEl0ZW1DYWxsYmFja3MoW10sIHJlbW92ZWRJdGVtcyk7XG5cdFx0dGhpcy5oYW5kbGVSZW1vdmVkSXRlbUNhbGxiYWNrcyhbXSwgYWRkZWRJdGVtcyk7XG5cdH1cblxuXHRvbkl0ZW1zQ3JlYXRlZCAoY29udmVyc2lvbk1hcDogQ29udmVyc2lvbk1hcCk6IHZvaWQge1xuXHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xuXG5cdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNvdXJjZXMpIHtcblx0XHRcdHJlc291cmNlLnJlYnVpbGRNYXAoKTtcblx0XHRcdHJlc291cmNlLm9wdGlvbnMub25JdGVtc0NyZWF0ZWQoY29udmVyc2lvbk1hcCk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0VXBkYXRlZEl0ZW1Db2x1bW5zIChjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwKToge1tjb2x1bW5JZDogc3RyaW5nXTogQ29sdW1uSW5mb30ge1xuXHRcdGNvbnN0IGl0ZW1Db2x1bW5zID0gdGhpcy5jb2x1bW5zLml0ZW07XG5cdFx0Y29uc3QgcmVzdWx0OiB7W2NvbHVtbklkOiBzdHJpbmddOiBDb2x1bW5JbmZvfSA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgaXRlbUNvbHVtbnMpIHtcblx0XHRcdGlmIChjb252ZXJzaW9uTWFwW2NvbHVtbi5hcGlDb2x1bW4uaXRlbVR5cGVdICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdHJlc3VsdFtjb2x1bW4uaWRdID0gY29sdW1uO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRjbG9uZSAocGFyZW50OiBFbnRyeVBhcmVudE51bGwsIGNvbnZlcnNpb25NYXA/OiBJdGVtSWRDb252ZXJzaW9uTWFwKSB7XG5cdFx0Y29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTtcblx0XHRjb25zdCBjbG9uZWRJdGVtRW50cmllcyA9IGZhY3RvcnkuaXRlbUVudHJ5U2VydmljZS5iYXRjaENsb25lKHRoaXMuaXRlbXMsIGNvbnZlcnNpb25NYXApO1xuXG5cdFx0Zm9yIChjb25zdCBjbG9uZWRJdGVtRW50cnkgb2YgY2xvbmVkSXRlbUVudHJpZXMpXG5cdFx0XHRjbG9uZWRJdGVtRW50cnkucGFyZW50ID0gcGFyZW50O1xuXG5cdFx0cmV0dXJuIGZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0dGhpcy5pdGVtVHlwZSxcblx0XHRcdGZhY3RvcnkuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jbG9uZU9wdGlvbnModGhpcy5vcHRpb25zLCBwYXJlbnQpXG5cdFx0KS5yZXNvbHZlKFxuXHRcdFx0e2NvbHVtbnM6IHRoaXMuY29sdW1ucywgaW5pdGlhbDogY2xvbmVkSXRlbUVudHJpZXN9XG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgZmlsdGVyQXJyYXksIExvY2FsQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEl0ZW1SZXNvdXJjZUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvblJlc291cmNlT3B0aW9ucywgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UsIFZpZXdSZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBJdGVtUmVzb3VyY2VJdGVtSWRNYXAsIFByb21pc2VJbnRlcmZhY2UsIFF1ZXJ5Q2FsbGJhY2ssIFJlc3BvbnNlQ29sdW1uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnkgfSBmcm9tICcuL0NvbGxlY3Rpb25FbnRyeSc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDb2xsZWN0aW9uUmVzb3VyY2U8VCBleHRlbmRzIEl0ZW1SZXNvdXJjZSA9IFZpZXdSZXNvdXJjZT4ge1xuXHRpdGVtczogVFtdO1xuXHRpdGVtSWRNYXA6IEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcDxUPiA9IHt9O1xuXHRjb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcDtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdHB1YmxpYyBlbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdHB1YmxpYyBvcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zLFxuXHRcdHB1YmxpYyBsb2NhbENhY2hlOiBMb2NhbENhY2hlXG5cdCkge1xuXHRcdHRoaXMuY29sdW1ucyA9IGVudHJ5LmNvbHVtbnMucmVzcG9uc2U7XG5cdFx0dGhpcy5pdGVtSWRNYXAgPSB7fTtcblx0XHR0aGlzLml0ZW1zID0gW107XG5cblx0XHRlbnRyeS5yZXNvdXJjZXMucHVzaCh0aGlzKTtcblxuXHRcdHRoaXMuYWRkSXRlbVJlc291cmNlcyhlbnRyeS5pdGVtcyk7XG5cdH1cblxuXHRnZXRJdGVtQnlJZCAoaXRlbUlkOiBudW1iZXIpOiBUIHtcblx0XHRyZXR1cm4gdGhpcy5pdGVtSWRNYXBbaXRlbUlkXTtcblx0fVxuXG5cdHJlYnVpbGRNYXAgKCk6IHZvaWQge1xuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xuXHRcdGNvbnN0IGl0ZW1JZE1hcDogSXRlbVJlc291cmNlSXRlbUlkTWFwPFQ+ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKVxuXHRcdFx0aXRlbUlkTWFwW2l0ZW1SZXNvdXJjZS5lbnRyeS5pdGVtSWRdID0gaXRlbVJlc291cmNlO1xuXG5cdFx0dGhpcy5pdGVtSWRNYXAgPSBpdGVtSWRNYXA7XG5cdH1cblxuXHRhZGRJdGVtUmVzb3VyY2VzIChpdGVtRW50cmllczogSXRlbUVudHJ5W10pOiBUW10geyAvLyBzaG91bGQgYmUgZmFzdFxuXHRcdGlmIChpdGVtRW50cmllcy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gW107XG5cblx0XHRjb25zdCByZXN1bHQ6IFRbXSA9IFtdO1xuXHRcdGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cdFx0Y29uc3QgaXRlbXMgPSB0aGlzLml0ZW1zO1xuXHRcdGNvbnN0IGl0ZW1JZE1hcCA9IHRoaXMuaXRlbUlkTWFwO1xuXHRcdGNvbnN0IGNvbnN0cnVjdG9yID0gdGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LmdldENvbnN0cnVjdG9yKFxuXHRcdFx0e1xuXHRcdFx0XHRlZGl0OiBvcHRpb25zLmVkaXRJdGVtcyxcblx0XHRcdFx0b25DaGFuZ2U6IG9wdGlvbnMub25DaGFuZ2UsXG5cdFx0XHRcdG9uRGVhY3RpdmF0ZTogaXRlbUVudHJ5ID0+IHRoaXMubG9jYWxDYWNoZS5vbkRlYWN0aXZhdGVJdGVtKGl0ZW1FbnRyeSlcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XG5cblx0XHRcdGxldCBpdGVtUmVzb3VyY2U7XG5cblx0XHRcdGlmIChpdGVtSWRNYXBbaXRlbUlkXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGl0ZW1SZXNvdXJjZSA9IGNvbnN0cnVjdG9yKGl0ZW1FbnRyeSkgYXMgVDtcblx0XHRcdFx0aXRlbXMucHVzaChpdGVtUmVzb3VyY2UpO1xuXHRcdFx0XHRpdGVtSWRNYXBbaXRlbUlkXSA9IGl0ZW1SZXNvdXJjZTtcblx0XHRcdH0gZWxzZVxuXHRcdFx0XHRpdGVtUmVzb3VyY2UgPSBpdGVtSWRNYXBbaXRlbUlkXTtcblxuXHRcdFx0cmVzdWx0LnB1c2goaXRlbVJlc291cmNlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSBpdGVtRW50cmllc1xuXHQgKiBAcmV0dXJucyB7SXRlbVJlc291cmNlW119XG5cdCAqXG5cdCAqIFJldHVybnMgdGhlIEl0ZW1yZXNvdXJjZXMgdGhhdCB3aGVyZSByZW1vdmVkIENvbGxlY3Rpb24uXG5cdCAqIEZpbHRlcnMgb24gSXRlbVJlc291cmNlLmVudHJ5ID09PSBJdGVtRW50cnlcblx0ICovXG5cdHJlbW92ZUl0ZW1SZXNvdXJjZXMgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSk6IFRbXSB7XG5cdFx0Y29uc3QgcmVzdWx0OiBUW10gPSBbXTtcblxuXHRcdGZpbHRlckFycmF5KFxuXHRcdFx0dGhpcy5pdGVtcyxcblx0XHRcdGl0ZW1SZXNvdXJjZSA9PiB7XG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRcdFx0aWYgKGl0ZW1SZXNvdXJjZS5lbnRyeSA9PT0gaXRlbUVudHJ5KSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQucHVzaChpdGVtUmVzb3VyY2UpO1xuXHRcdFx0XHRcdFx0ZGVsZXRlIHRoaXMuaXRlbUlkTWFwW2l0ZW1FbnRyeS5pdGVtSWRdO1xuXG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRjYWxsT25BZGQgKGl0ZW1SZXNvdXJjZXM6IHRoaXNbJ2l0ZW1zJ10pOiB2b2lkIHtcblx0XHR0aGlzLm9wdGlvbnMub25BZGQoaXRlbVJlc291cmNlcywgdGhpcyk7XG5cdH1cblxuXHRjYWxsT25SZW1vdmUgKGl0ZW1SZXNvdXJjZXM6IHRoaXNbJ2l0ZW1zJ10pOiB2b2lkIHtcblx0XHR0aGlzLm9wdGlvbnMub25SZW1vdmUoaXRlbVJlc291cmNlcywgdGhpcyk7XG5cdH1cblxuXHRmb3JFYWNoIChjYWxsYmFjazogKGl0ZW1SZXNvdXJjZTogVCkgPT4gdm9pZCk6IHZvaWQge1xuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcylcblx0XHRcdGNhbGxiYWNrKGl0ZW1SZXNvdXJjZSk7XG5cdH1cblxuXHRmaWx0ZXIgKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBUKSA9PiBib29sZWFuKTogVFtdIHtcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcblx0XHRjb25zdCByZXN1bHQ6IFRbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcykge1xuXHRcdFx0aWYgKGNhbGxiYWNrKGl0ZW1SZXNvdXJjZSkpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1SZXNvdXJjZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGZpcnN0IChjYWxsYmFjazogKGl0ZW1SZXNvdXJjZTogVCkgPT4gYm9vbGVhbik6IFQgfCBudWxsIHtcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcblxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpIHtcblx0XHRcdGlmIChjYWxsYmFjayhpdGVtUmVzb3VyY2UpKVxuXHRcdFx0XHRyZXR1cm4gaXRlbVJlc291cmNlO1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0c29tZSAoY2FsbGJhY2s6IChpdGVtUmVzb3VyY2U6IFQpID0+IGJvb2xlYW4pOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5maXJzdChjYWxsYmFjaykgIT09IG51bGw7XG5cdH1cblxuXHRncm91cEJ5IChhcmd1bWVudDogc3RyaW5nIHwgKChpdGVtUmVzb3VyY2U6IFQpID0+IHN0cmluZyB8IG51bGwpKToge1trZXk6IHN0cmluZ106IFRbXX0ge1xuXHRcdGNvbnN0IGl0ZW1zUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcblx0XHRjb25zdCByZXN1bHQ6IHtba2V5OiBzdHJpbmddOiBUW119ID0ge307XG5cblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnc3RyaW5nJykge1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbXNSZXNvdXJjZXMpIHtcblx0XHRcdFx0Y29uc3QgdmFsdWUgPSBpdGVtUmVzb3VyY2UuZmllbGRzW2FyZ3VtZW50XTtcblxuXHRcdFx0XHRpZiAocmVzdWx0W3ZhbHVlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdHJlc3VsdFt2YWx1ZV0gPSBbXTtcblxuXHRcdFx0XHRyZXN1bHRbdmFsdWVdLnB1c2goaXRlbVJlc291cmNlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtc1Jlc291cmNlcykge1xuXHRcdFx0XHRjb25zdCB2YWx1ZSA9IGFyZ3VtZW50KGl0ZW1SZXNvdXJjZSk7XG5cblx0XHRcdFx0aWYgKHZhbHVlID09PSBudWxsKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdGlmIChyZXN1bHRbdmFsdWVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0cmVzdWx0W3ZhbHVlXSA9IFtdO1xuXG5cdFx0XHRcdHJlc3VsdFt2YWx1ZV0ucHVzaChpdGVtUmVzb3VyY2UpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRtYXA8VT4gKGFyZ3VtZW50OiBzdHJpbmcgfCAoKGl0ZW1SZXNvdXJjZTogVCkgPT4gVSkpOiBVW10ge1xuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xuXHRcdGNvbnN0IGxlbmd0aCA9IGl0ZW1SZXNvdXJjZXMubGVuZ3RoO1xuXHRcdGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheShsZW5ndGgpO1xuXG5cdFx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycpIHtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG5cdFx0XHRcdHJlc3VsdFtpXSA9IGl0ZW1SZXNvdXJjZXNbaV0uZmllbGRzW2FyZ3VtZW50XTtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuXHRcdFx0XHRyZXN1bHRbaV0gPSBhcmd1bWVudChpdGVtUmVzb3VyY2VzW2ldKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cmVkdWNlPFU+IChjYWxsYmFjazogKGl0ZW1SZXNvdXJjZTogVCwgdmFsdWU6IFUpID0+IFUsIHZhbHVlOiBVKTogVSB7XG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKVxuXHRcdFx0dmFsdWUgPSBjYWxsYmFjayhpdGVtUmVzb3VyY2UsIHZhbHVlKTtcblxuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXG5cdGV4dGVuZCAocXVlcnlDYWxsYmFjazogUXVlcnlDYWxsYmFjaywgcmV0dXJuQWxsSXRlbXM6IGJvb2xlYW4gPSBmYWxzZSwgY2FsbE9uQWRkPzogYm9vbGVhbik6IFByb21pc2VJbnRlcmZhY2U8dGhpc1snaXRlbXMnXT4ge1xuXHRcdHJldHVybiB0aGlzLmVudHJ5LmV4dGVuZChxdWVyeUNhbGxiYWNrLCB0aGlzLCBjYWxsT25BZGQsIHRydWUpXG5cdFx0XHQudGhlbihcblx0XHRcdFx0aXRlbVJlc291cmNlcyA9PiByZXR1cm5BbGxJdGVtcyA/IHRoaXMuaXRlbXMgOiBpdGVtUmVzb3VyY2VzXG5cdFx0XHQpO1xuXHR9XG5cblx0ZGVhY3RpdmF0ZSAoKTogdm9pZCB7XG5cdFx0dGhpcy5sb2NhbENhY2hlLmNsZWFyQ29sbGVjdGlvbih0aGlzKTtcblx0fVxuXG5cdGNsZWFyUmVzb3VyY2UgKCk6IHZvaWQge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZXMgPSB0aGlzLmVudHJ5LnJlc291cmNlcztcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcblx0XHRjb25zdCBpbmRleCA9IGNvbGxlY3Rpb25SZXNvdXJjZXMuaW5kZXhPZih0aGlzKTtcblxuXHRcdGlmIChpbmRleCAhPT0gLTEpXG5cdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2VzLnNwbGljZShpbmRleCwgMSk7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKVxuXHRcdFx0aXRlbVJlc291cmNlLmNsZWFyUmVzb3VyY2UoKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgTG9jYWxDYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgSXRlbVJlc291cmNlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSwgQ29sbGVjdGlvblJlc291cmNlT3B0aW9ucywgRWRpdFJlc291cmNlLCBWaWV3UmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvblZpZXdSZXNvdXJjZSA8VCBleHRlbmRzIEVkaXRSZXNvdXJjZSB8IFZpZXdSZXNvdXJjZSA9IFZpZXdSZXNvdXJjZT4gZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2UgPFQ+IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9ucyxcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlXG5cdCkge1xuXHRcdHN1cGVyKGl0ZW1SZXNvdXJjZUZhY3RvcnksIGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucywgbG9jYWxDYWNoZSk7XG5cdH1cbn1cbiIsImltcG9ydCB7IExvY2FsQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHtcblx0Q29sbGVjdGlvbkVudHJ5LFxuXHRDb2xsZWN0aW9uUmVzb3VyY2UsXG5cdENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnMsXG5cdEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlLFxuXHRWaWV3UmVzb3VyY2Vcbn0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IEZpZWxkTWFwLCBJdGVtSWQsIEl0ZW1JZENvbnZlcnNpb25NYXAsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRWRpdFJlc291cmNlIDxUIGV4dGVuZHMgSXRlbVJlc291cmNlID0gVmlld1Jlc291cmNlPiBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZSA8VD4ge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBmYWN0b3J5OiBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnMsXG5cdFx0bG9jYWxDYWNoZTogTG9jYWxDYWNoZVxuXHQpIHtcblx0XHRzdXBlcihmYWN0b3J5Lml0ZW1SZXNvdXJjZUZhY3RvcnksIGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucywgbG9jYWxDYWNoZSk7XG5cdH1cblxuXHRzYXZlICgpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1JZENvbnZlcnNpb25NYXA+IHtcblx0XHRpZiAoIXRoaXMub3B0aW9ucy5lbmFibGVTYXZlKVxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBTYXZpbmcgZGlzYWJsZWQnKTtcblxuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gdGhpcy5lbnRyeTtcblx0XHRjb25zdCBwYXJlbnQgPSBjb2xsZWN0aW9uRW50cnkucGFyZW50O1xuXG5cdFx0aWYgKHBhcmVudCAhPT0gbnVsbCAmJiBmYWN0b3J5LmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudC5pdGVtSWQpKVxuXHRcdFx0cmV0dXJuIGZhY3RvcnkucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xuXG5cdFx0cmV0dXJuIGZhY3RvcnkuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkuY29uc3RydWN0KCkuZXhlY3V0ZShbXSwgW2NvbGxlY3Rpb25FbnRyeV0pO1xuXHR9XG5cblx0Ly8gVE9ETzogdXNlIGNhbGxiYWNrIGZ1bmN0aW9uXG5cdG1vdmVJdGVtcyAoaWRBcnJheTogSXRlbUlkW10sIGRlc3RpbmF0aW9uOiBDb2xsZWN0aW9uUmVzb3VyY2UsIGVuYWJsZUNhbGxiYWNrcz86IGJvb2xlYW4pOiB0aGlzWydpdGVtcyddIHtcblx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSB0aGlzLmVudHJ5O1xuXHRcdGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cblx0XHRpZiAob3B0aW9ucy5lbmFibGVTYXZlIHx8IG9wdGlvbnMubW9kSW5zdGFudClcblx0XHRcdHRocm93IG5ldyBFcnJvcignY29sbGVjdGlvblJlc291cmNlU2VydmljZTogQ2Fubm90IG1vdmUgaXRlbXM6IHNhdmluZyBlbmFibGVkJyk7XG5cblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlICE9PSBkZXN0aW5hdGlvbi5lbnRyeS5pdGVtVHlwZSlcblx0XHRcdHRocm93IG5ldyBFcnJvcignY29sbGVjdGlvblJlc291cmNlU2VydmljZTogQ2Fubm90IG1vdmUgaXRlbXM6IGl0ZW1UeXBlIG1pc21hdGNoJyk7XG5cblx0XHRjb25zdCByZW1vdmVkSXRlbVJlc291cmNlcyA9IGNvbGxlY3Rpb25FbnRyeS5yZW1vdmVJdGVtcyhpZEFycmF5LCB0aGlzLCBmYWxzZSwgZW5hYmxlQ2FsbGJhY2tzKTtcblx0XHRjb25zdCBpdGVtRW50cmllczogSXRlbUVudHJ5W10gPSBbXTtcblxuXHRcdGlmIChyZW1vdmVkSXRlbVJlc291cmNlcyAhPT0gbnVsbCkge1xuXHRcdFx0Zm9yIChjb25zdCByZW1vdmVkSXRlbVJlc291cmNlIG9mIHJlbW92ZWRJdGVtUmVzb3VyY2VzKVxuXHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKHJlbW92ZWRJdGVtUmVzb3VyY2UuZW50cnkpO1xuXG5cdFx0XHRkZXN0aW5hdGlvbi5lbnRyeS5hZGRJdGVtcyhpdGVtRW50cmllcywgZGVzdGluYXRpb24sIGZhbHNlLCBlbmFibGVDYWxsYmFja3MpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZW1vdmVkSXRlbVJlc291cmNlcztcblx0fVxuXG5cdHJlbW92ZUl0ZW1zIChpZEFycmF5OiBJdGVtSWRbXSwgY2FsbE9uUmVtb3ZlOiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2VJbnRlcmZhY2U8dGhpc1snaXRlbXMnXT4ge1xuXHRcdC8vIGNhbGxPblJlbW92ZSBzaG91bGQgYmUgZmFsc2UgaGVyZSB0byBwcmV2ZW50IG9uUmVtb3ZlIGZyb20gYmVpbmcgY2FsbGVkIHR3aWNlXG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuZW50cnkucmVtb3ZlSXRlbXMoaWRBcnJheSwgdGhpcywgZmFsc2UsIGZhbHNlKTtcblxuXHRcdGlmIChpdGVtUmVzb3VyY2VzID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIHRoaXMuZmFjdG9yeS5wcm9taXNlU2VydmljZS53aGVuKFtdKTtcblxuXHRcdGlmICh0aGlzLm9wdGlvbnMubW9kSW5zdGFudClcblx0XHRcdHJldHVybiB0aGlzLnNhdmUoKS50aGVuKFxuXHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0aWYgKGNhbGxPblJlbW92ZSlcblx0XHRcdFx0XHRcdHRoaXMuY2FsbE9uUmVtb3ZlKGl0ZW1SZXNvdXJjZXMpO1xuXG5cdFx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXM7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cblx0XHRpZiAoY2FsbE9uUmVtb3ZlKVxuXHRcdFx0dGhpcy5jYWxsT25SZW1vdmUoaXRlbVJlc291cmNlcyk7XG5cblx0XHRyZXR1cm4gdGhpcy5mYWN0b3J5LnByb21pc2VTZXJ2aWNlLndoZW4oaXRlbVJlc291cmNlcyk7XG5cdH1cblxuXHRyZW1vdmVJdGVtIChpdGVtSWQ6IEl0ZW1JZCwgY2FsbE9uUmVtb3ZlPzogYm9vbGVhbik6IFByb21pc2VJbnRlcmZhY2U8VD4ge1xuXHRcdHJldHVybiB0aGlzLnJlbW92ZUl0ZW1zKFtpdGVtSWRdLCBjYWxsT25SZW1vdmUpLnRoZW4oXG5cdFx0XHRpdGVtUmVzb3VyY2VzID0+IHtcblx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXNbMF07XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5mYWN0b3J5LmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0YWRkSXRlbXMgKHZhbHVlc0FycmF5OiBGaWVsZE1hcFtdLCBjYWxsT25BZGQ6IGJvb2xlYW4gPSB0cnVlLCBjYWxsT25BY3RpdmF0ZT86IGJvb2xlYW4pOiBQcm9taXNlSW50ZXJmYWNlPHRoaXNbJ2l0ZW1zJ10+IHtcblx0XHRjb25zdCBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5O1xuXHRcdGNvbnN0IG1vZEluc3RhbnQgPSB0aGlzLm9wdGlvbnMubW9kSW5zdGFudDtcblxuXHRcdHJldHVybiB0aGlzLmVudHJ5LmNyZWF0ZUl0ZW1zKHZhbHVlc0FycmF5KS50aGVuKFxuXHRcdFx0aXRlbUVudHJpZXMgPT4ge1xuXHRcdFx0XHRpZiAobW9kSW5zdGFudClcblx0XHRcdFx0XHRyZXR1cm4gaXRlbUVudHJpZXM7XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuZW50cnkucmVzb2x2ZURlcml2ZWRWYWx1ZXMoaXRlbUVudHJpZXMsIHRoaXMubG9jYWxDYWNoZS5pdGVtcyk7XG5cdFx0XHR9XG5cdFx0KS50aGVuKFxuXHRcdFx0aXRlbUVudHJpZXMgPT4ge1xuXHRcdFx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5lbnRyeS5hZGRJdGVtcyhcblx0XHRcdFx0XHRpdGVtRW50cmllcyxcblx0XHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdGNhbGxPbkFjdGl2YXRlXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0aWYgKGl0ZW1SZXNvdXJjZXMgPT09IG51bGwpXG5cdFx0XHRcdFx0cmV0dXJuIFtdO1xuXG5cdFx0XHRcdGlmIChtb2RJbnN0YW50KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2F2ZSgpLnRoZW4oXG5cdFx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChjYWxsT25BZGQpXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5jYWxsT25BZGQoaXRlbVJlc291cmNlcyk7XG5cblx0XHRcdFx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXM7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0ZmFjdG9yeS5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjYWxsT25BZGQpXG5cdFx0XHRcdFx0dGhpcy5jYWxsT25BZGQoaXRlbVJlc291cmNlcyk7XG5cblx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXM7XG5cdFx0XHR9LFxuXHRcdFx0ZmFjdG9yeS5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGFkZEl0ZW0gKHZhbHVlczogRmllbGRNYXAsIGNhbGxPbkFkZD86IGJvb2xlYW4sIGNhbGxPbkFjdGl2YXRlPzogYm9vbGVhbik6IFByb21pc2VJbnRlcmZhY2U8VD4ge1xuXHRcdHJldHVybiB0aGlzLmFkZEl0ZW1zKFt2YWx1ZXNdLCBjYWxsT25BZGQsIGNhbGxPbkFjdGl2YXRlKS50aGVuKFxuXHRcdFx0aXRlbVJlc291cmNlcyA9PiB7XG5cdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2VzWzBdO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZmFjdG9yeS5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGNsZWFyIChlbmFibGVDYWxsYmFja3M6IGJvb2xlYW4pIHtcblx0XHRyZXR1cm4gdGhpcy5lbnRyeS5jbGVhcih0aGlzLCBmYWxzZSwgZW5hYmxlQ2FsbGJhY2tzKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sdW1uU2V0IH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBUZW1wbGF0ZUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgQXBpUmVzcG9uc2UsIEZpZWxkTWFwLCBJdGVtVHlwZSwgUmVzcG9uc2VDb2x1bW5NYXAgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZSB7XG5cdGZpZWxkczogRmllbGRNYXA7XG5cdHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXA7XG5cdGNvbHVtbnM6IENvbHVtblNldDsgLy8gVE9ETzogcmVuYW1lIHRvIGNvbHVtblNldFxuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRmYWN0b3J5OiBUZW1wbGF0ZUZhY3RvcnksXG5cdFx0cHVibGljIGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRwdWJsaWMgcmVzcG9uc2U6IEFwaVJlc3BvbnNlLFxuXHRcdGFkZGl0aW9uYWxDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcFxuXHQpIHtcblx0XHR0aGlzLmZpZWxkcyA9IHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCByZXNwb25zZS5saW5rc1tpdGVtVHlwZV1bMF0pO1xuXG5cdFx0dGhpcy5yZXNwb25zZUNvbHVtbnMgPSBmYWN0b3J5LmNvbHVtblV0aWwubWVyZ2VSZXNwb25zZUNvbHVtbnMocmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCksIGFkZGl0aW9uYWxDb2x1bW5zKS5tZXJnZWQ7XG5cblx0XHR0aGlzLmNvbHVtbnMgPSBmYWN0b3J5LmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCB0cnVlLCB0aGlzLnJlc3BvbnNlQ29sdW1ucyk7XG5cdH1cbn1cbiIsIi8vIHNob3VsZCBiZSBvcmRlcmVkIGJ5IGRlcGVuZGVuY3khXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1FbnRyeU9wdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9JdGVtUmVzb3VyY2VPcHRpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vSXRlbUVudHJ5JztcbmV4cG9ydCAqIGZyb20gJy4vSXRlbVJlc291cmNlJztcbmV4cG9ydCAqIGZyb20gJy4vVmlld1Jlc291cmNlJztcbmV4cG9ydCAqIGZyb20gJy4vRWRpdFJlc291cmNlJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkVudHJ5T3B0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uRW50cnknO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uUmVzb3VyY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uVmlld1Jlc291cmNlJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkVkaXRSZXNvdXJjZSc7XG5leHBvcnQgKiBmcm9tICcuL1RlbXBsYXRlJztcbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG5pbXBvcnQgeyBRdWVyeVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IFF1ZXJ5UGFyc2VyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnlPcHRpb25zLCBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2UsIENvbGxlY3Rpb25RdWVyeSwgRW50cnlQYXJlbnROdWxsLCBJdGVtSWQgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlIHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcXVlcnlQYXJzZXJGYWN0b3J5OiBRdWVyeVBhcnNlckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZVxuXHQpIHtcblxuXHR9XG5cblx0Ly8gbm8gbmVlZCB0byB3b3JyeSBhYm91dCB0aGUgY29sdW1ucyBwcm9wZXJ0eSwgaXQgd2lsbCBiZSByZXBsYWNlZCBpbiB3aGVuIGNvbHVtbnMgYXJlIGV4cGFuZGVkXG5cdGNsb25lT3B0aW9ucyAob3B0aW9uczogQ29sbGVjdGlvbkVudHJ5T3B0aW9ucywgcGFyZW50OiBFbnRyeVBhcmVudE51bGwpIHtcblx0XHRjb25zdCByZXN1bHQgPSBuZXcgQ29sbGVjdGlvbkVudHJ5T3B0aW9ucyhvcHRpb25zKTsgLy8gZG9lcyBhIHNoYWxsb3cgY29weVxuXG5cdFx0cmVzdWx0LnF1ZXJ5UGFyYW1zID0gdGhpcy5jbG9uZVF1ZXJ5UGFyYW1zKG9wdGlvbnMucXVlcnlQYXJhbXMpO1xuXHRcdHJlc3VsdC5wYXJlbnQgPSBwYXJlbnQ7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cHJvY2Vzc09wdGlvbnMgKG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlKTogQ29sbGVjdGlvbkVudHJ5T3B0aW9ucyB7XG5cdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uRW50cnlPcHRpb25zKG9wdGlvbnMpO1xuXHR9XG5cblx0Y2xvbmVRdWVyeVBhcmFtczxUIGV4dGVuZHMgb2JqZWN0PiAocGFyYW1ldGVyczogVCk6IFQge1xuXHRcdGNvbnN0IHJlc3VsdDogYW55ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGtleSBpbiBwYXJhbWV0ZXJzKSB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IHBhcmFtZXRlcnNba2V5XTtcblx0XHRcdGxldCBjbG9uZTtcblxuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKVxuXHRcdFx0XHRjbG9uZSA9IHZhbHVlLnNsaWNlKCk7IC8vIHdlJ3JlIG9ubHkgdXNpbmcgcHJpbWl0aXZlIGFycmF5c1xuXHRcdFx0ZWxzZSBpZiAobW9tZW50LmlzTW9tZW50KHZhbHVlKSlcblx0XHRcdFx0Y2xvbmUgPSB2YWx1ZS5jbG9uZSgpO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRjbG9uZSA9IHZhbHVlO1xuXG5cdFx0XHRyZXN1bHRba2V5XSA9IGNsb25lO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRjcmVhdGVRdWVyeSAob3B0aW9uczogQ29sbGVjdGlvbkVudHJ5T3B0aW9ucyk6IENvbGxlY3Rpb25RdWVyeSB7XG5cdFx0Y29uc3QgcGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XG5cblx0XHRsZXQgcXVlcnk7XG5cblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxuXHRcdFx0cXVlcnkgPSBvcHRpb25zLnF1ZXJ5O1xuXHRcdGVsc2Uge1xuXHRcdFx0Y29uc3QgbGlua2VkVG9RdWVyeSA9IHtsaW5rZWRUbzogcGFyZW50Lml0ZW1UeXBlLCBxdWVyeToge2lkOiAnJnBhcmVudElkJ319O1xuXHRcdFx0b3B0aW9ucy5xdWVyeVBhcmFtcy5wYXJlbnRJZCA9IHBhcmVudC5pdGVtSWQ7XG5cblx0XHRcdHF1ZXJ5ID0gb3B0aW9ucy5xdWVyeSA9PT0gbnVsbCA/XG5cdFx0XHRcdGxpbmtlZFRvUXVlcnkgOlxuXHRcdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5hZGRBbmRDb25kaXRpb24ob3B0aW9ucy5xdWVyeSwgbGlua2VkVG9RdWVyeSk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcGFyc2VkUXVlcnkgPSB0aGlzLnF1ZXJ5UGFyc2VyRmFjdG9yeS5jb25zdHJ1Y3QocXVlcnksIG9wdGlvbnMucXVlcnlQYXJhbXMpLnBhcnNlKCk7XG5cblx0XHRyZXR1cm4ge29iamVjdDogcGFyc2VkUXVlcnlbMF0sIHN0cmluZzogcGFyc2VkUXVlcnlbMV19O1xuXHR9XG5cblx0Z2V0SWRBcnJheSAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCBhY2N1bXVsYXRvcjogSXRlbUlkW10gPSBbXSk6IEl0ZW1JZFtdIHtcblx0XHRpZiAoYWNjdW11bGF0b3IgPT09IHVuZGVmaW5lZClcblx0XHRcdGFjY3VtdWxhdG9yID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdGFjY3VtdWxhdG9yLnB1c2goaXRlbUVudHJ5Lml0ZW1JZCk7XG5cblx0XHRyZXR1cm4gYWNjdW11bGF0b3I7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtJdGVtRW50cnlbXX0gaXRlbUVudHJpZXNcblx0ICogQHBhcmFtIHsoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGJvb2xlYW59IGNhbGxiYWNrXG5cdCAqIEByZXR1cm5zIHtJdGVtRW50cnlbXX1cblx0ICpcblx0ICogZmlsdGVyIGFuIGFycmF5IGFjY29yZGluZyB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uIFJldHVybiB0aGUgZW50cmllcyB0aGF0IGZhaWxlZCB0aGUgY29uZGl0aW9uXG5cdCAqIFJlcGxhY2UgdGhlIGdpdmVuIGFycmF5IHdpdGggdGhlIGVudHJpZXMgdGhhdCBkaWRuJ3QgZmFpbCB0aGUgY29uZGl0aW9uLlxuXHQgKi9cblx0ZmlsdGVyQXJyYXkgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgY2FsbGJhY2s6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gYm9vbGVhbik6IEl0ZW1FbnRyeVtdIHtcblx0XHRjb25zdCBmaWx0ZXJlZEVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XG5cdFx0Y29uc3QgcmVtb3ZlZEVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdChjYWxsYmFjayhpdGVtRW50cnkpID8gZmlsdGVyZWRFbnRyaWVzIDogcmVtb3ZlZEVudHJpZXMpLnB1c2goaXRlbUVudHJ5KTtcblxuXHRcdGlmIChyZW1vdmVkRW50cmllcy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gcmVtb3ZlZEVudHJpZXM7XG5cblx0XHRpdGVtRW50cmllcy5sZW5ndGggPSBmaWx0ZXJlZEVudHJpZXMubGVuZ3RoO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtRW50cmllcy5sZW5ndGg7IGkrKylcblx0XHRcdGl0ZW1FbnRyaWVzW2ldID0gZmlsdGVyZWRFbnRyaWVzW2ldO1xuXG5cdFx0cmV0dXJuIHJlbW92ZWRFbnRyaWVzO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uRW50cnlPcHRpb25zLCBDb2xsZWN0aW9uVmlld1Jlc291cmNlLCBpZGVudGl0eSwgaXNGdW5jdGlvbiwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uLyc7XG5pbXBvcnQge1xuXHRCYXRjaFN0YXR1cyxcblx0Q29sbGVjdGlvbkNhY2hlLFxuXHRDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRDb2xsZWN0aW9uTWF0Y2hlcixcblx0Q29sdW1uRXhwYW5zaW9uLFxuXHRDb2x1bW5IYW5kbGVyLFxuXHRDb2x1bW5TZXQsXG5cdEl0ZW1DYWNoZSxcblx0SXRlbUhhbmRsZXIsXG5cdEl0ZW1SZXF1ZXN0U2VydmljZSxcblx0S2V5U2VydmljZSxcblx0UXVlcnlTZXJ2aWNlXG59IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgRU5UUllfU1RBVFVTIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7XG5cdEJhdGNoU3RhdHVzRmFjdG9yeSxcblx0Q29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0Q29sbGVjdGlvbkVudHJ5RmFjdG9yeSxcblx0Q29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxuXHRDb2x1bW5TZXRGYWN0b3J5LFxuXHRRdWVyeVBhcnNlckZhY3Rvcnlcbn0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgQ29sbGVjdGlvblJlc291cmNlLCBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtcblx0QXBpUmVxdWVzdENvbHVtbixcblx0Q29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXAsXG5cdENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwLFxuXHRFbnRyeVN0YXR1cyxcblx0SXRlbUVudHJ5UGFyZW50SWRNYXAsXG5cdEl0ZW1JZCxcblx0SXRlbVJlc291cmNlSXRlbUlkTWFwLFxuXHRJdGVtVHlwZSxcblx0UXVlcnlDYWxsYmFja1xufSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IGhhc1Byb3BlcnRpZXMgfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkhhbmRsZXIge1xuXHRlbnRyaWVzOiBDb2xsZWN0aW9uQ2FjaGU7XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYmF0Y2hTdGF0dXNGYWN0b3J5OiBCYXRjaFN0YXR1c0ZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkVudHJ5RmFjdG9yeTogQ29sbGVjdGlvbkVudHJ5RmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25FbnRyeVNlcnZpY2U6IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnk6IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBpdGVtUmVxdWVzdFNlcnZpY2U6IEl0ZW1SZXF1ZXN0U2VydmljZSxcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBxdWVyeVBhcnNlckZhY3Rvcnk6IFF1ZXJ5UGFyc2VyRmFjdG9yeSxcblx0XHRwcml2YXRlIHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlXG5cdCkge1xuXHRcdHRoaXMuZW50cmllcyA9IHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeS5jb25zdHJ1Y3QoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAZGVwcmVjYXRlZCwgdXNlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeVxuXHQgKi9cblx0cmVtb3ZlRnJvbUFuZEFkZFRvQ29sbGVjdGlvbnMgKGNvbGxlY3Rpb25NYXA6IGFueSwgdXBkYXRlSW5pdGlhbD86IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0XHRjb25zdCBlbnRyeSA9IGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXTtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb246IENvbGxlY3Rpb25FbnRyeSA9IGVudHJ5LmNvbGxlY3Rpb247XG5cblx0XHRcdGNvbGxlY3Rpb24ucmVtb3ZlSXRlbXMoZW50cnkubm90Zml0dGluZywgbnVsbCwgdHJ1ZSk7XG5cdFx0XHRjb2xsZWN0aW9uLmFkZEl0ZW1zKGVudHJ5LmZpdHRpbmcsIG51bGwsIHRydWUpOyAvLyBkb2Vzbid0IGRvIGFueXRoaW5nIHdpdGggaW5pdGlhbFxuXG5cdFx0XHRpZiAoZW50cnkubWF5YmUubGVuZ3RoID4gMClcblx0XHRcdFx0Y29sbGVjdGlvbi5leHRlbmQoaWRlbnRpdHksIG51bGwsIHRydWUsIHVwZGF0ZUluaXRpYWwpO1xuXHRcdH1cblx0fVxuXG5cdGdldENvbGxlY3Rpb25NYXRjaGVyICgpOiBDb2xsZWN0aW9uTWF0Y2hlciB7XG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdChbdGhpcy5lbnRyaWVzXSwgdHJ1ZSwgdHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogQGRlcHJlY2F0ZWQsIHVzZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnlcblx0ICovXG5cdHJlbW92ZUZyb21Db2xsZWN0aW9uczxUIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlID0gQ29sbGVjdGlvblZpZXdSZXNvdXJjZT4gKFxuXHRcdGNvbGxlY3Rpb25NYXAsXG5cdFx0dXBkYXRlSW5pdGlhbD86IGJvb2xlYW4sXG5cdFx0cmVzdWx0UmVzb3VyY2U6IFQgfCBudWxsID0gbnVsbFxuXHQpOiBUWydpdGVtcyddIHwgbnVsbCB7XG5cdFx0bGV0IHJlc3VsdDtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIGNvbGxlY3Rpb25NYXApIHtcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gY29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdO1xuXHRcdFx0Y29uc3QgZml0dGluZyA9IG1hcEVudHJ5LmZpdHRpbmc7XG5cdFx0XHRjb25zdCBtYXliZSA9IG1hcEVudHJ5Lm1heWJlO1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkgPSBtYXBFbnRyeS5jb2xsZWN0aW9uO1xuXHRcdFx0Y29uc3QgaWRBcnJheTogSXRlbUlkW10gPSBbXTtcblxuXHRcdFx0Zm9yIChjb25zdCBmaXR0aW5nSXRlbSBvZiBmaXR0aW5nKVxuXHRcdFx0XHRpZEFycmF5LnB1c2goZml0dGluZ0l0ZW0uaXRlbUlkKTtcblxuXHRcdFx0Zm9yIChjb25zdCBtYXliZUl0ZW0gb2YgbWF5YmUpXG5cdFx0XHRcdGlkQXJyYXkucHVzaChtYXliZUl0ZW0pO1xuXG5cdFx0XHRpZiAocmVzdWx0UmVzb3VyY2UgIT09IG51bGwgJiYgY29sbGVjdGlvbkVudHJ5ID09PSByZXN1bHRSZXNvdXJjZS5lbnRyeSlcblx0XHRcdFx0cmVzdWx0ID0gY29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGlkQXJyYXksIHJlc3VsdFJlc291cmNlLCB1cGRhdGVJbml0aWFsKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGlkQXJyYXksIG51bGwsIHVwZGF0ZUluaXRpYWwpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvLyBUT0RPOiBtYXliZSwgYm9vbGVhbiBpbnN0ZWFkIG9mIG1lc3NhZ2Vcblx0LyoqXG5cdCAqIEBkZXByZWNhdGVkLCB1c2UgY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5XG5cdCAqL1xuXHRhZGRUb0NvbGxlY3Rpb25zPFQgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2UgPSBDb2xsZWN0aW9uVmlld1Jlc291cmNlPiAoXG5cdFx0Y29sbGVjdGlvbk1hcCxcblx0XHR1cGRhdGVJbml0aWFsOiBib29sZWFuLFxuXHRcdHJlc3VsdFJlc291cmNlOiBUIHwgbnVsbCA9IG51bGxcblx0KTogVFsnaXRlbXMnXSB7XG5cdFx0bGV0IHJlc3VsdDtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIGNvbGxlY3Rpb25NYXApIHtcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gY29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdO1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gbWFwRW50cnkuY29sbGVjdGlvbjtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0RlZmVycmVkKCkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAocmVzdWx0UmVzb3VyY2UgIT09IG51bGwgJiYgY29sbGVjdGlvbkVudHJ5ID09PSByZXN1bHRSZXNvdXJjZS5lbnRyeSlcblx0XHRcdFx0cmVzdWx0ID0gY29sbGVjdGlvbkVudHJ5LmFkZEl0ZW1zKG1hcEVudHJ5LmZpdHRpbmcsIHJlc3VsdFJlc291cmNlLCB1cGRhdGVJbml0aWFsKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LmFkZEl0ZW1zKG1hcEVudHJ5LmZpdHRpbmcsIG51bGwsIHVwZGF0ZUluaXRpYWwpO1xuXG5cdFx0XHRpZiAodXBkYXRlSW5pdGlhbCAmJiBtYXBFbnRyeS5tYXliZS5sZW5ndGggPiAwKVxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuZXh0ZW5kKGlkZW50aXR5LCBudWxsLCB0cnVlLCB1cGRhdGVJbml0aWFsKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0YmF0Y2hFeHBhbmQgKFxuXHRcdHBhcmVudFR5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRjb2xsZWN0aW9uczogQ29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXAsXG5cdFx0bmV3Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbltdXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA+IHtcblx0XHRpZiAobmV3Q29sdW1ucy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGNvbGxlY3Rpb25zKTtcblxuXHRcdGNvbnN0IHBhcmVudElkQXJyYXk6IEl0ZW1JZFtdID0gW107XG5cdFx0bGV0IGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSA9IFtdO1xuXG5cdFx0Ly8gVE9ETzogZmlsdGVyIGxvY2FsIGl0ZW1zP1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBjb2xsZWN0aW9ucykge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gY29sbGVjdGlvbnNbcGFyZW50SWRdLmVudHJ5O1xuXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuZGVmZXIoKTtcblxuXHRcdFx0cGFyZW50SWRBcnJheS5wdXNoKGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQhLml0ZW1JZCk7XG5cdFx0XHRpdGVtRW50cmllcyA9IGl0ZW1FbnRyaWVzLmNvbmNhdChjb2xsZWN0aW9uRW50cnkuaXRlbXMpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5yZXF1ZXN0TGlua0l0ZW1zKFxuXHRcdFx0cGFyZW50VHlwZSxcblx0XHRcdHBhcmVudElkQXJyYXksXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdG51bGwsXG5cdFx0XHRuZXdDb2x1bW5zXG5cdFx0KS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzRXhwYW5zaW9uKFxuXHRcdFx0XHRcdG5ld0NvbHVtbnMsXG5cdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0aXRlbUVudHJpZXNcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIG9mIHBhcmVudElkQXJyYXkpIHtcblx0XHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBjb2xsZWN0aW9uc1twYXJlbnRJZF0uZW50cnk7XG5cblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuZXhwYW5kQ29sdW1ucyhjb2x1bW5FeHBhbnNpb24pO1xuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5fcmVzb2x2ZSgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25zO1xuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxuXHQvLyB0b2RvW1RTXSBob3cgZG8gd2UgdHlwZSB0aGlzID9cblx0YmF0Y2hFeHRlbmQgPFQgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcD4gKFxuXHRcdHBhcmVudFR5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uRW50cnlPcHRpb25zLFxuXHRcdHF1ZXJ5Q2FsbGJhY2s6IFF1ZXJ5Q2FsbGJhY2ssXG5cdFx0Y29sbGVjdGlvbnM6IFQsXG5cdFx0cmV0dXJuQWxsSXRlbXM6IGJvb2xlYW4gPSBmYWxzZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcD4ge1xuXHRcdGlmICghaGFzUHJvcGVydGllcyhjb2xsZWN0aW9ucykpXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKHt9KTtcblxuXHRcdGNvbnN0IHBhcmVudElkQXJyYXk6IEl0ZW1JZFtdID0gW107XG5cdFx0bGV0IGl0ZW1JZEFycmF5OiBJdGVtSWRbXSA9IFtdO1xuXG5cdFx0b3B0aW9ucy5xdWVyeVBhcmFtcyA9IHF1ZXJ5Q2FsbGJhY2sob3B0aW9ucy5xdWVyeVBhcmFtcyk7XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGNvbGxlY3Rpb25zKSB7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBjb2xsZWN0aW9uc1twYXJlbnRJZF0uZW50cnk7XG5cblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5leHRlbmRRdWVyeShxdWVyeUNhbGxiYWNrKTtcblx0XHRcdHBhcmVudElkQXJyYXkucHVzaChjb2xsZWN0aW9uRW50cnkucGFyZW50IS5pdGVtSWQpO1xuXG5cdFx0XHRpdGVtSWRBcnJheSA9IGl0ZW1JZEFycmF5LmNvbmNhdChjb2xsZWN0aW9uRW50cnkuZ2V0SWRBcnJheSgpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdExpbmtJdGVtcyhcblx0XHRcdHBhcmVudFR5cGUsXG5cdFx0XHRwYXJlbnRJZEFycmF5LFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5hZGRBbmRDb25kaXRpb24oXG5cdFx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jcmVhdGVRdWVyeShvcHRpb25zKS5vYmplY3QsXG5cdFx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLmNyZWF0ZU5vdEluKGl0ZW1JZEFycmF5KVxuXHRcdFx0KSxcblx0XHRcdG9wdGlvbnMuY29sdW1uc1xuXHRcdCkudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NMaW5rUmVzcG9uc2UoXG5cdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0cGFyZW50VHlwZSxcblx0XHRcdFx0XHRwYXJlbnRJZEFycmF5LFxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdG9wdGlvbnNcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHRpdGVtRW50cnlSZXNvdXJjZSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgb2YgcGFyZW50SWRBcnJheSkge1xuXHRcdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZSA9IGNvbGxlY3Rpb25zW3BhcmVudElkXTtcblx0XHRcdFx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gY29sbGVjdGlvblJlc291cmNlLmVudHJ5LmFkZEl0ZW1zKCAvLyBzaG91bGQgZ28gZmlyc3Rcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeVJlc291cmNlLml0ZW1zW3BhcmVudElkXSxcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZVxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gcmV0dXJuQWxsSXRlbXMgPyBjb2xsZWN0aW9uUmVzb3VyY2UuaXRlbXMgOiBpdGVtUmVzb3VyY2VzO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0YmF0Y2hGZXRjaCAoXG5cdFx0cGFyZW50VHlwZTogSXRlbVR5cGUsXG5cdFx0cGFyZW50SWRBcnJheTogSXRlbUlkW10gfCAoKCkgPT4gSXRlbUlkW10pLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uRW50cnlPcHRpb25zLFxuXHRcdGl0ZW1DYWNoZTogSXRlbUNhY2hlLFxuXHRcdGxvY2FsQ29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGUsXG5cdFx0ZGVmZXJyZWRDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwPiB7XG5cdFx0Y29uc3QgZXJyb3JIYW5kbGVyID0gdGhpcy5lcnJvckhhbmRsZXI7XG5cdFx0Y29uc3QgYmF0Y2hTdGF0dXM6IEJhdGNoU3RhdHVzPENvbGxlY3Rpb25FbnRyeT4gPSB0aGlzLmJhdGNoU3RhdHVzRmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdGNvbGxlY3Rpb25FbnRyeSA9PiAoY29sbGVjdGlvbkVudHJ5LnBhcmVudCEpLml0ZW1JZCxcblx0XHRcdGNvbGxlY3Rpb25FbnRyeSA9PiBjb2xsZWN0aW9uRW50cnkucHJvbWlzZVxuXHRcdCk7XG5cblx0XHRpZiAoaXNGdW5jdGlvbjwoKSA9PiBJdGVtSWRbXT4ocGFyZW50SWRBcnJheSkpXG5cdFx0XHRwYXJlbnRJZEFycmF5ID0gcGFyZW50SWRBcnJheSgpO1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBvZiBwYXJlbnRJZEFycmF5KSB7XG5cdFx0XHRiYXRjaFN0YXR1cy5hZGQoXG5cdFx0XHRcdHRoaXMuZ2V0RW50cnlTdGF0dXMoXG5cdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNsb25lT3B0aW9ucyhvcHRpb25zLCB7aXRlbVR5cGU6IHBhcmVudFR5cGUsIGl0ZW1JZDogcGFyZW50SWR9KSxcblx0XHRcdFx0XHRsb2NhbENvbGxlY3Rpb25DYWNoZSxcblx0XHRcdFx0XHRkZWZlcnJlZENvbGxlY3Rpb25DYWNoZVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChiYXRjaFN0YXR1cy5nZXRQcm9taXNlcygpKS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRjb25zdCByZXF1ZXN0SWRzID0gYmF0Y2hTdGF0dXMuZ2V0UmVxdWVzdElkcygpO1xuXHRcdFx0XHRsZXQgaXRlbUVudHJ5Q29tcG91bmRQcm9taXNlO1xuXHRcdFx0XHRsZXQgYWRkaXRpb25hbFF1ZXJ5O1xuXG5cdFx0XHRcdGlmIChvcHRpb25zLnF1ZXJ5ID09PSBudWxsKVxuXHRcdFx0XHRcdGFkZGl0aW9uYWxRdWVyeSA9IG51bGw7XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IHBhcnNlZFF1ZXJ5ID0gdGhpcy5xdWVyeVBhcnNlckZhY3RvcnkuY29uc3RydWN0KG9wdGlvbnMucXVlcnksIG9wdGlvbnMucXVlcnlQYXJhbXMpLnBhcnNlKCk7XG5cdFx0XHRcdFx0YWRkaXRpb25hbFF1ZXJ5ID0ge29iamVjdDogcGFyc2VkUXVlcnlbMF0sIHN0cmluZzogcGFyc2VkUXVlcnlbMV19O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHJlcXVlc3RJZHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdGl0ZW1FbnRyeUNvbXBvdW5kUHJvbWlzZSA9IHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RMaW5rSXRlbXMoXG5cdFx0XHRcdFx0XHRwYXJlbnRUeXBlLFxuXHRcdFx0XHRcdFx0cmVxdWVzdElkcyxcblx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdFx0YWRkaXRpb25hbFF1ZXJ5ID09PSBudWxsID8gbnVsbCA6IGFkZGl0aW9uYWxRdWVyeS5vYmplY3QsXG5cdFx0XHRcdFx0XHRvcHRpb25zLmNvbHVtbnNcblx0XHRcdFx0XHQpLnRoZW4oXG5cdFx0XHRcdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzTGlua1Jlc3BvbnNlKFxuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHRcdFx0XHRcdHBhcmVudFR5cGUsXG5cdFx0XHRcdFx0XHRcdFx0cmVxdWVzdElkcyxcblx0XHRcdFx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRcdFx0XHRvcHRpb25zXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYmF0Y2hTdGF0dXMuaGFzRW50cmllcyhbRU5UUllfU1RBVFVTLkxPQ0FMXSkpIHtcblx0XHRcdFx0XHRpdGVtRW50cnlDb21wb3VuZFByb21pc2UgPSB0aGlzLmNvbHVtbkhhbmRsZXIuZmV0Y2goaXRlbVR5cGUsIG9wdGlvbnMuY29sdW1ucykudGhlbihcblx0XHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1ucyA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0Y29sdW1uczogdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdFx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdFx0XHRcdFx0b3B0aW9ucy5jb2x1bW5zLFxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZmFsc2Vcblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gZWxzZVxuXHRcdFx0XHRcdHJldHVybiBiYXRjaFN0YXR1cy5nZXRNYXAoKTtcblxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5Q29tcG91bmRQcm9taXNlLnRoZW4oXG5cdFx0XHRcdFx0aXRlbUVudHJ5Q29tcG91bmQgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5TWFwID0gaXRlbUNhY2hlLmJhdGNoR2V0TG9jYWxCeVBhcmVudChcblx0XHRcdFx0XHRcdFx0cGFyZW50VHlwZSxcblx0XHRcdFx0XHRcdFx0cGFyZW50SWRBcnJheSBhcyBJdGVtSWRbXSxcblx0XHRcdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0XHRcdGFkZGl0aW9uYWxRdWVyeVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0bGV0IGl0ZW1FbnRyeUFycmF5OiBJdGVtRW50cnlbXSA9IFtdO1xuXG5cdFx0XHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGl0ZW1FbnRyeU1hcClcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5QXJyYXkgPSBpdGVtRW50cnlBcnJheS5jb25jYXQoaXRlbUVudHJ5TWFwW3BhcmVudElkXSk7XG5cblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLmV4cGFuZExvY2FsSXRlbUVudHJpZXMoXG5cdFx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnlBcnJheSxcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5Q29tcG91bmQuY29sdW1ucyxcblx0XHRcdFx0XHRcdFx0aXRlbUNhY2hlXG5cdFx0XHRcdFx0XHQpLnRoZW4oXG5cdFx0XHRcdFx0XHRcdCgpID0+IHRoaXMuaGFuZGxlQmF0Y2hSZXNwb25zZShiYXRjaFN0YXR1cywgaXRlbUVudHJ5Q29tcG91bmQsIGl0ZW1FbnRyeU1hcCksXG5cdFx0XHRcdFx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHQvLyBUT0RPOiBzb21lIHN0YXR1c2VzIGFyZSBub3QgdGFrZW4gaW50byBhY2NvdW50XG5cdGhhbmRsZUJhdGNoUmVzcG9uc2UgKFxuXHRcdGJhdGNoU3RhdHVzOiBCYXRjaFN0YXR1czxDb2xsZWN0aW9uRW50cnk+LFxuXHRcdGl0ZW1FbnRyeUNvbXBvdW5kOiB7XG5cdFx0XHRjb2x1bW5zOiBDb2x1bW5TZXQsXG5cdFx0XHRjb2x1bW5FeHBhbnNpb24/OiBDb2x1bW5FeHBhbnNpb24sXG5cdFx0XHRpdGVtcz86IEl0ZW1FbnRyeVBhcmVudElkTWFwXG5cdFx0fSxcblx0XHRsb2NhbEl0ZW1zOiBJdGVtRW50cnlQYXJlbnRJZE1hcFxuXHQpOiBDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCB7XG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXG5cdFx0XHRbRU5UUllfU1RBVFVTLkNBQ0hFRF0sXG5cdFx0XHQoY29sbGVjdGlvbkVudHJ5LCBwYXJlbnRJZCkgPT4ge1xuXHRcdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gY29sbGVjdGlvbkVudHJ5O1xuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXG5cdFx0XHRbRU5UUllfU1RBVFVTLlJFU09MVkVdLFxuXHRcdFx0KGNvbGxlY3Rpb25FbnRyeSwgcGFyZW50SWQpID0+IHtcblx0XHRcdFx0Y29uc3QgaXRlbUVudHJpZXMgPSAoaXRlbUVudHJ5Q29tcG91bmQuaXRlbXMhKVtwYXJlbnRJZF07XG5cblx0XHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IGNvbGxlY3Rpb25FbnRyeS5yZXNvbHZlKFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGluaXRpYWw6IGl0ZW1FbnRyaWVzLFxuXHRcdFx0XHRcdFx0bW9kaWZpZWQ6IGl0ZW1FbnRyaWVzLmNvbmNhdChsb2NhbEl0ZW1zW3BhcmVudElkXSksXG5cdFx0XHRcdFx0XHRjb2x1bW5zOiBpdGVtRW50cnlDb21wb3VuZC5jb2x1bW5zXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXG5cdFx0XHRiYXRjaFN0YXR1cy5yZW1vdGVFeHBhbmRTdGF0dXMsXG5cdFx0XHQoY29sbGVjdGlvbkVudHJ5LCBwYXJlbnRJZCkgPT4ge1xuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuZXhwYW5kQ29sdW1ucyhpdGVtRW50cnlDb21wb3VuZC5jb2x1bW5FeHBhbnNpb24hKTtcblx0XHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IGNvbGxlY3Rpb25FbnRyeS5fcmVzb2x2ZSgpO1xuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXG5cdFx0XHRbRU5UUllfU1RBVFVTLkxPQ0FMXSxcblx0XHRcdChjb2xsZWN0aW9uRW50cnksIHBhcmVudElkKSA9PiB7XG5cdFx0XHRcdHJlc3VsdFtwYXJlbnRJZF0gPSBjb2xsZWN0aW9uRW50cnkucmVzb2x2ZShcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRpbml0aWFsOiBsb2NhbEl0ZW1zW3BhcmVudElkXSxcblx0XHRcdFx0XHRcdGNvbHVtbnM6IGl0ZW1FbnRyeUNvbXBvdW5kLmNvbHVtbnNcblx0XHRcdFx0XHR9XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmZXRjaCAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25FbnRyeU9wdGlvbnMsXG5cdFx0aXRlbUNhY2hlOiBJdGVtQ2FjaGUsXG5cdFx0bG9jYWxDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZSxcblx0XHRkZWZlcnJlZENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvbkVudHJ5PiB7XG5cdFx0Y29uc3QgZXJyb3JIYW5kbGVyID0gdGhpcy5lcnJvckhhbmRsZXI7XG5cdFx0Y29uc3Qgc3RhdHVzUmVzb3VyY2UgPSB0aGlzLmdldEVudHJ5U3RhdHVzKGl0ZW1UeXBlLCBvcHRpb25zLCBsb2NhbENvbGxlY3Rpb25DYWNoZSwgZGVmZXJyZWRDb2xsZWN0aW9uQ2FjaGUpO1xuXHRcdGNvbnN0IGVudHJ5ID0gc3RhdHVzUmVzb3VyY2UuZW50cnk7XG5cblx0XHRzd2l0Y2ggKHN0YXR1c1Jlc291cmNlLnN0YXR1cykge1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuQ0FDSEVEOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGVudHJ5KTtcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLlBST01JU0VEOlxuXHRcdFx0XHRyZXR1cm4gZW50cnkucHJvbWlzZTtcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLkVYUEFORDpcblx0XHRcdFx0cmV0dXJuIGVudHJ5LmV4cGFuZChvcHRpb25zLmNvbHVtbnMsIGl0ZW1DYWNoZSkudGhlbihcblx0XHRcdFx0XHQoKSA9PiBlbnRyeS5fcmVzb2x2ZSgpLFxuXHRcdFx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KTtcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORDpcblx0XHRcdFx0cmV0dXJuIGVudHJ5LnByb21pc2UudGhlbihcblx0XHRcdFx0XHQoKSA9PiBlbnRyeS5kZWZlcigpLmV4cGFuZChvcHRpb25zLmNvbHVtbnMsIGl0ZW1DYWNoZSksXG5cdFx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHQpLnRoZW4oXG5cdFx0XHRcdFx0KCkgPT4gZW50cnkuX3Jlc29sdmUoKSxcblx0XHRcdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdCk7XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5MT0NBTDpcblx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb2x2ZUxvY2FsKGVudHJ5LCBpdGVtQ2FjaGUpO1xuXHRcdFx0ZGVmYXVsdDogLy8gY2FzZSBFTlRSWV9TVEFUVVMuUkVTT0xWRTpcblx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb2x2ZVJlbW90ZShlbnRyeSwgaXRlbUNhY2hlKTtcblx0XHR9XG5cdH1cblxuXHRnZXRDYWNoZWRFbnRyeVN0YXR1cyAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIG9wdGlvbnMpOiBFTlRSWV9TVEFUVVMge1xuXHRcdGlmICghY29sbGVjdGlvbkVudHJ5LmNvbHVtbnMuaXNTdXBlcnNldE9mKG9wdGlvbnMuY29sdW1ucykpIHtcblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXNEZWZlcnJlZCgpKVxuXHRcdFx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORDtcblxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LmRlZmVyKCk7XG5cblx0XHRcdHJldHVybiBFTlRSWV9TVEFUVVMuRVhQQU5EO1xuXHRcdH1cblxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXNEZWZlcnJlZCgpKVxuXHRcdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5QUk9NSVNFRDtcblxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkucmVsb2FkUXVldWVkKSB7XG5cdFx0XHRjb2xsZWN0aW9uRW50cnkucmVsb2FkUXVldWVkID0gZmFsc2U7XG5cblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXNMb2NhbCgpKVxuXHRcdFx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLkNBQ0hFRDtcblxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LmRlZmVyKCk7XG5cblx0XHRcdHJldHVybiBFTlRSWV9TVEFUVVMuUkVTT0xWRTtcblx0XHR9XG5cblx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLkNBQ0hFRDtcblx0fVxuXG5cdGdldERlZmVycmVkRW50cnlTdGF0dXMgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zLFxuXHRcdHF1ZXJ5LFxuXHRcdGRlZmVycmVkRW50cmllczogQ29sbGVjdGlvbkNhY2hlXG5cdCk6IHtlbnRyeTogQ29sbGVjdGlvbkVudHJ5LCBpc0RlZmVycmVkOiBib29sZWFufSB7XG5cdFx0bGV0IGNvbGxlY3Rpb25FbnRyeTtcblxuXHRcdGlmICghb3B0aW9ucy5kZWZlclJlcXVlc3QpIHtcblx0XHRcdGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuY29sbGVjdGlvbkVudHJ5RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIG9wdGlvbnMpO1xuXG5cdFx0XHRyZXR1cm4ge2VudHJ5OiBjb2xsZWN0aW9uRW50cnksIGlzRGVmZXJyZWQ6IGZhbHNlfTtcblx0XHR9XG5cblx0XHRjb2xsZWN0aW9uRW50cnkgPSBkZWZlcnJlZEVudHJpZXMuZ2V0QnlRdWVyeShpdGVtVHlwZSwgcXVlcnkpO1xuXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeSAhPT0gbnVsbCkge1xuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LmV4cGFuZFJlcXVlc3RDb2x1bW5zKG9wdGlvbnMuY29sdW1ucyk7XG5cblx0XHRcdHJldHVybiB7ZW50cnk6IGNvbGxlY3Rpb25FbnRyeSwgaXNEZWZlcnJlZDogZmFsc2V9O1xuXHRcdH1cblxuXHRcdGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuY29sbGVjdGlvbkVudHJ5RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIG9wdGlvbnMpO1xuXG5cdFx0cmV0dXJuIHtlbnRyeTogZGVmZXJyZWRFbnRyaWVzLmFkZChjb2xsZWN0aW9uRW50cnkpLCBpc0RlZmVycmVkOiB0cnVlfTtcblx0fVxuXG5cdGdldEVudHJ5U3RhdHVzIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0b3B0aW9ucyxcblx0XHRsb2NhbEVudHJpZXM6IENvbGxlY3Rpb25DYWNoZSxcblx0XHRkZWZlcnJlZEVudHJpZXM6IENvbGxlY3Rpb25DYWNoZVxuXHQpOiBFbnRyeVN0YXR1czxDb2xsZWN0aW9uRW50cnk+IHtcblx0XHRjb25zdCBxdWVyeSA9IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jcmVhdGVRdWVyeShvcHRpb25zKTtcblx0XHRsZXQgY29sbGVjdGlvbkVudHJ5O1xuXHRcdGxldCBpc0RlZmVycmVkO1xuXG5cdFx0aWYgKHRoaXMuaXNMb2NhbChvcHRpb25zKSkge1xuXHRcdFx0Y29sbGVjdGlvbkVudHJ5ID0gbG9jYWxFbnRyaWVzLmdldEJ5UXVlcnkoaXRlbVR5cGUsIHF1ZXJ5KTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeSAhPT0gbnVsbClcblx0XHRcdFx0cmV0dXJuIHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBzdGF0dXM6IHRoaXMuZ2V0Q2FjaGVkRW50cnlTdGF0dXMoY29sbGVjdGlvbkVudHJ5LCBvcHRpb25zKX07XG5cblx0XHRcdCh7ZW50cnk6IGNvbGxlY3Rpb25FbnRyeSwgaXNEZWZlcnJlZH0gPSB0aGlzLmdldERlZmVycmVkRW50cnlTdGF0dXMoXG5cdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRvcHRpb25zLFxuXHRcdFx0XHRxdWVyeSxcblx0XHRcdFx0ZGVmZXJyZWRFbnRyaWVzXG5cdFx0XHQpKTtcblxuXHRcdFx0aWYgKGlzRGVmZXJyZWQpXG5cdFx0XHRcdHJldHVybiB7ZW50cnk6IGNvbGxlY3Rpb25FbnRyeSwgc3RhdHVzOiBFTlRSWV9TVEFUVVMuUFJPTUlTRUR9O1xuXG5cdFx0XHQvLyBuZXcgbG9jYWwgZW50cnkgY3JlYXRlZCwgc2hvdWxkIGJlIGFkZGVkIHRvIGxvY2FsIGNhY2hlIG9ubHlcblx0XHRcdHJldHVybiB7ZW50cnk6IGxvY2FsRW50cmllcy5hZGQoY29sbGVjdGlvbkVudHJ5KSwgc3RhdHVzOiBFTlRSWV9TVEFUVVMuTE9DQUx9O1xuXHRcdH1cblxuXHRcdGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuZW50cmllcy5nZXRCeVF1ZXJ5KGl0ZW1UeXBlLCBxdWVyeSk7XG5cblx0XHQvLyBlbnRyeSBhbHJlYWR5IGV4aXN0cyBpbiBnbG9iYWwgY2FjaGUsIGFkZCB0byBsb2NhbCBjYWNoZVxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkgIT09IG51bGwpXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRlbnRyeTogbG9jYWxFbnRyaWVzLmFkZChjb2xsZWN0aW9uRW50cnkpLFxuXHRcdFx0XHRzdGF0dXM6IHRoaXMuZ2V0Q2FjaGVkRW50cnlTdGF0dXMoY29sbGVjdGlvbkVudHJ5LCBvcHRpb25zKVxuXHRcdFx0fTtcblxuXHRcdCh7ZW50cnk6IGNvbGxlY3Rpb25FbnRyeSwgaXNEZWZlcnJlZH0gPSB0aGlzLmdldERlZmVycmVkRW50cnlTdGF0dXMoaXRlbVR5cGUsIG9wdGlvbnMsIHF1ZXJ5LCBkZWZlcnJlZEVudHJpZXMpKTtcblxuXHRcdGlmIChpc0RlZmVycmVkKVxuXHRcdFx0cmV0dXJuIHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBzdGF0dXM6IEVOVFJZX1NUQVRVUy5QUk9NSVNFRH07XG5cblx0XHQvLyBuZXcgZ2xvYmFsIGVudHJ5IGNyZWF0ZWQsIGFkZCB0byBib3RoIGxvY2FsIGFuZCBnbG9iYWwgY2FjaGVcblx0XHRsb2NhbEVudHJpZXMuYWRkKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0dGhpcy5lbnRyaWVzLmFkZChjb2xsZWN0aW9uRW50cnkpO1xuXG5cdFx0cmV0dXJuIHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBzdGF0dXM6IEVOVFJZX1NUQVRVUy5SRVNPTFZFfTtcblx0fVxuXG5cdHJlc29sdmVMb2NhbCAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIGl0ZW1DYWNoZTogSXRlbUNhY2hlKTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uRW50cnk+IHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZTtcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zLmNvbHVtbnM7XG5cblx0XHRyZXR1cm4gdGhpcy5jb2x1bW5IYW5kbGVyLmZldGNoKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucykudGhlbihcblx0XHRcdHJlc3BvbnNlQ29sdW1ucyA9PiB7XG5cdFx0XHRcdGNvbnN0IGNvbHVtblNldCA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMsIGZhbHNlKTtcblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5leHBhbmRMb2NhbEl0ZW1FbnRyaWVzKFxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdGl0ZW1DYWNoZS5nZXRMb2NhbEJ5UXVlcnkoaXRlbVR5cGUsIGNvbGxlY3Rpb25FbnRyeS5xdWVyeSksXG5cdFx0XHRcdFx0Y29sdW1uU2V0LFxuXHRcdFx0XHRcdGl0ZW1DYWNoZVxuXHRcdFx0XHQpLnRoZW4oXG5cdFx0XHRcdFx0bG9jYWxFbnRyaWVzID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnkucmVzb2x2ZSh7aW5pdGlhbDogbG9jYWxFbnRyaWVzLCBjb2x1bW5zOiBjb2x1bW5TZXR9KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRyZXNvbHZlUmVtb3RlIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgaXRlbUNhY2hlOiBJdGVtQ2FjaGUpOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25FbnRyeT4ge1xuXHRcdGNvbnN0IGVycm9ySGFuZGxlciA9IHRoaXMuZXJyb3JIYW5kbGVyO1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlO1xuXG5cdFx0bGV0IGNvbHVtblNldDtcblxuXHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5yZXF1ZXN0SXRlbXMoY29sbGVjdGlvbkVudHJ5KS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRjb2x1bW5TZXQgPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zLmNvbHVtbnMsXG5cdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KClcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc1Jlc3BvbnNlKFxuXHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHRcdHJlc3BvbnNlLmxpbmtzW2l0ZW1UeXBlXSxcblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cnkucGFyZW50LFxuXHRcdFx0XHRcdGNvbHVtblNldFxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHRyZW1vdGVFbnRyaWVzID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhwYW5kTG9jYWxJdGVtRW50cmllcyhcblx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRpdGVtQ2FjaGUuZ2V0TG9jYWxCeVF1ZXJ5KGl0ZW1UeXBlLCBjb2xsZWN0aW9uRW50cnkucXVlcnkpLFxuXHRcdFx0XHRcdGNvbHVtblNldCxcblx0XHRcdFx0XHRpdGVtQ2FjaGVcblx0XHRcdFx0KS50aGVuKFxuXHRcdFx0XHRcdGxvY2FsRW50cmllcyA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gY29sbGVjdGlvbkVudHJ5LnJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRpbml0aWFsOiByZW1vdGVFbnRyaWVzLFxuXHRcdFx0XHRcdFx0XHRcdG1vZGlmaWVkOiByZW1vdGVFbnRyaWVzLmNvbmNhdChsb2NhbEVudHJpZXMpLFxuXHRcdFx0XHRcdFx0XHRcdGNvbHVtbnM6IGNvbHVtblNldFxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0aXNMb2NhbCAob3B0aW9ucykge1xuXHRcdGNvbnN0IHBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJldHVybiB0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudC5pdGVtSWQpO1xuXHR9XG5cblx0cHJpdmF0ZSBleHBhbmRMb2NhbEl0ZW1FbnRyaWVzIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRcdGNvbHVtblNldDogQ29sdW1uU2V0LFxuXHRcdGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGVcblx0KTogUHJvbWlzZUludGVyZmFjZTxJdGVtRW50cnlbXT4ge1xuXHRcdHJldHVybiB0aGlzLml0ZW1IYW5kbGVyLmV4cGFuZExvY2FsRW50cmllcyhcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0aXRlbUVudHJpZXMsXG5cdFx0XHRjb2x1bW5TZXQucmVxdWVzdCxcblx0XHRcdGNvbHVtblNldC5yZXNwb25zZSxcblx0XHRcdGxvY2FsSXRlbUNhY2hlXG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgaWRlbnRpdHksIEl0ZW1JZCB9IGZyb20gJy4uLyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IFF1ZXJ5TWF0Y2hlckZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMvJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgQ29sbGVjdGlvblJlc291cmNlLCBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XG5cbmV4cG9ydCB0eXBlIENvbGxlY3Rpb25NYXRjaGVyTWF0Y2hlcyA9IHtcblx0W2l0ZW1JZDogbnVtYmVyXToge1xuXHRcdGl0ZW06IEl0ZW1FbnRyeSxcblx0XHRpc01hdGNoOiBib29sZWFuIHwgJ21heWJlJ1xuXHR9XG59O1xuXG5leHBvcnQgdHlwZSBHcm91cGVkQ29sbGVjdGlvbk1hdGNoZXJSZXN1bHQgPSB7XG5cdGZpdHRpbmc6IEl0ZW1FbnRyeVtdLFxuXHRub3RGaXR0aW5nOiBJdGVtSWRbXSxcblx0bWF5YmU6IEl0ZW1FbnRyeVtdXG59O1xuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbk1hdGNoZXIge1xuXHRtYXA6IHtcblx0XHRbY29sbGVjdGlvbkVudHJ5SWQ6IG51bWJlcl06IHtcblx0XHRcdGNvbGxlY3Rpb246IENvbGxlY3Rpb25FbnRyeVxuXHRcdFx0bWF0Y2hlczogQ29sbGVjdGlvbk1hdGNoZXJNYXRjaGVzXG5cdFx0fVxuXHR9ID0ge307XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25DYWNoZXM6IENvbGxlY3Rpb25DYWNoZVtdLFxuXHRcdHByaXZhdGUgdXBkYXRlSW5pdGlhbDogYm9vbGVhbixcblx0XHRwcml2YXRlIGNhbGxPbkFjdGl2YXRlOiBib29sZWFuXG5cdCkge1xuXG5cdH1cblxuXHRleHBhbmQgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KTogdGhpcyB7XG5cdFx0Y29uc3QgcXVlcnlNYXRjaGVyID0gdGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdGl0ZW1FbnRyeS5pdGVtVHlwZSxcblx0XHRcdGl0ZW1FbnRyeS5nZXRGaWVsZHMoKSxcblx0XHRcdGl0ZW1FbnRyeS5wYXJlbnRcblx0XHQpO1xuXG5cdFx0cmV0dXJuIHRoaXMuX2V4cGFuZChcblx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdGNvbGxlY3Rpb25FbnRyeSA9PiBxdWVyeU1hdGNoZXIubWF0Y2hRdWVyeShjb2xsZWN0aW9uRW50cnkucXVlcnkub2JqZWN0KVxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIF9leHBhbmQgKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5LFxuXHRcdG1hdGNoRnVuY3Rpb246IChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4gYm9vbGVhbiB8ICdtYXliZSdcblx0KTogdGhpcyB7XG5cdFx0Y29uc3QgbWFwID0gdGhpcy5tYXA7XG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkNhY2hlIG9mIHRoaXMuY29sbGVjdGlvbkNhY2hlcykge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJpZXMgPSBjb2xsZWN0aW9uQ2FjaGUuZ2V0QnlJdGVtVHlwZShpdGVtRW50cnkuaXRlbVR5cGUpO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiBjb2xsZWN0aW9uRW50cmllcykge1xuXHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnlJZCA9IGNvbGxlY3Rpb25FbnRyeS5pZDtcblx0XHRcdFx0bGV0IG1hdGNoZXM7XG5cblx0XHRcdFx0aWYgKG1hcFtjb2xsZWN0aW9uRW50cnlJZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRtYXBbY29sbGVjdGlvbkVudHJ5SWRdID0ge2NvbGxlY3Rpb246IGNvbGxlY3Rpb25FbnRyeSwgbWF0Y2hlczoge319O1xuXG5cdFx0XHRcdG1hdGNoZXMgPSBtYXBbY29sbGVjdGlvbkVudHJ5SWRdLm1hdGNoZXM7XG5cblx0XHRcdFx0aWYgKG1hdGNoZXNbaXRlbUlkXSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdG1hdGNoZXNbaXRlbUlkXSA9IHtpdGVtOiBpdGVtRW50cnksIGlzTWF0Y2g6IG1hdGNoRnVuY3Rpb24oY29sbGVjdGlvbkVudHJ5KX07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRnZXRDb2xsZWN0aW9uc1dpdGhGaXR0aW5nSXRlbXMgKCk6IENvbGxlY3Rpb25FbnRyeVtdIHtcblx0XHRjb25zdCByZXN1bHQ6IENvbGxlY3Rpb25FbnRyeVtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiB0aGlzLm1hcCkge1xuXHRcdFx0Y29uc3QgbWFwRW50cnkgPSB0aGlzLm1hcFtjb2xsZWN0aW9uSWRdO1xuXG5cdFx0XHRpZiAodGhpcy5oYXNGaXR0aW5nSXRlbXMobWFwRW50cnkubWF0Y2hlcykpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKG1hcEVudHJ5LmNvbGxlY3Rpb24pO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRhZGRUb0NvbGxlY3Rpb25zPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U+IChyZXN1bHRSZXNvdXJjZTogVSk6IFVbJ2l0ZW1zJ107XG5cdGFkZFRvQ29sbGVjdGlvbnMgKHJlc3VsdFJlc291cmNlPzogbnVsbCk6IG51bGw7XG5cdGFkZFRvQ29sbGVjdGlvbnM8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZT4gKHJlc3VsdFJlc291cmNlPzogQ29sbGVjdGlvblJlc291cmNlIHwgbnVsbCk6IFVbJ2l0ZW1zJ10gfCBudWxsO1xuXHRhZGRUb0NvbGxlY3Rpb25zPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U+IChyZXN1bHRSZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlIHwgbnVsbCA9IG51bGwpOiBVWydpdGVtcyddIHwgbnVsbCB7XG5cdFx0bGV0IHJlc3VsdDogYW55ID0gbnVsbDtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIHRoaXMubWFwKSB7XG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IHRoaXMubWFwW2NvbGxlY3Rpb25JZF07XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBtYXBFbnRyeS5jb2xsZWN0aW9uO1xuXHRcdFx0Y29uc3QgZ3JvdXBlZEl0ZW1FbnRyaWVzID0gdGhpcy5ncm91cEl0ZW1FbnRyaWVzKG1hcEVudHJ5Lm1hdGNoZXMpO1xuXHRcdFx0Y29uc3QgZml0dGluZ0l0ZW1FbnRyaWVzID0gZ3JvdXBlZEl0ZW1FbnRyaWVzLmZpdHRpbmc7XG5cblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXNEZWZlcnJlZCgpKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0aWYgKHJlc3VsdFJlc291cmNlICE9PSBudWxsICYmIGNvbGxlY3Rpb25FbnRyeSA9PT0gcmVzdWx0UmVzb3VyY2UuZW50cnkpIHtcblx0XHRcdFx0cmVzdWx0ID0gY29sbGVjdGlvbkVudHJ5LmFkZEl0ZW1zKFxuXHRcdFx0XHRcdGZpdHRpbmdJdGVtRW50cmllcyxcblx0XHRcdFx0XHRyZXN1bHRSZXNvdXJjZSxcblx0XHRcdFx0XHR0aGlzLnVwZGF0ZUluaXRpYWwsXG5cdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHR0aGlzLmNhbGxPbkFjdGl2YXRlXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuYWRkSXRlbXMoXG5cdFx0XHRcdFx0Zml0dGluZ0l0ZW1FbnRyaWVzLFxuXHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0dGhpcy51cGRhdGVJbml0aWFsLFxuXHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0dGhpcy5jYWxsT25BY3RpdmF0ZVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy51cGRhdGVJbml0aWFsICYmIGdyb3VwZWRJdGVtRW50cmllcy5tYXliZS5sZW5ndGggPiAwKVxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuZXh0ZW5kKGlkZW50aXR5LCBudWxsLCB0cnVlLCB0aGlzLnVwZGF0ZUluaXRpYWwpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRyZW1vdmVGcm9tQ29sbGVjdGlvbnM8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZT4gKHJlc3VsdFJlc291cmNlOiBVKTogVVsnaXRlbXMnXTtcblx0cmVtb3ZlRnJvbUNvbGxlY3Rpb25zIChyZXN1bHRSZXNvdXJjZT86IG51bGwpOiBudWxsO1xuXHRyZW1vdmVGcm9tQ29sbGVjdGlvbnM8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZT4gKHJlc3VsdFJlc291cmNlPzogQ29sbGVjdGlvblJlc291cmNlIHwgbnVsbCk6IFVbJ2l0ZW1zJ10gfCBudWxsO1xuXHRyZW1vdmVGcm9tQ29sbGVjdGlvbnM8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZT4gKHJlc3VsdFJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsID0gbnVsbCk6IFVbJ2l0ZW1zJ10gfCBudWxsIHtcblx0XHRsZXQgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSB8IG51bGwgPSBudWxsO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gdGhpcy5tYXApIHtcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gdGhpcy5tYXBbY29sbGVjdGlvbklkXTtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IG1hcEVudHJ5LmNvbGxlY3Rpb247XG5cdFx0XHRjb25zdCBmaXR0aW5nSXRlbUlkcyA9IHRoaXMuZ3JvdXBJdGVtSWRzKG1hcEVudHJ5Lm1hdGNoZXMpLmZpdHRpbmc7XG5cblx0XHRcdGlmIChyZXN1bHRSZXNvdXJjZSA9PT0gbnVsbCB8fCBjb2xsZWN0aW9uRW50cnkgIT09IHJlc3VsdFJlc291cmNlLmVudHJ5KVxuXHRcdFx0XHRyZXN1bHQgPSBjb2xsZWN0aW9uRW50cnkucmVtb3ZlSXRlbXMoZml0dGluZ0l0ZW1JZHMsIHJlc3VsdFJlc291cmNlLCB0aGlzLnVwZGF0ZUluaXRpYWwpO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkucmVtb3ZlSXRlbXMoZml0dGluZ0l0ZW1JZHMsIG51bGwsIHRoaXMudXBkYXRlSW5pdGlhbCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHJlbW92ZUZyb21BbmRBZGRUb0NvbGxlY3Rpb25zICgpOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiB0aGlzLm1hcCkge1xuXHRcdFx0Y29uc3QgbWFwRW50cnkgPSB0aGlzLm1hcFtjb2xsZWN0aW9uSWRdO1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gbWFwRW50cnkuY29sbGVjdGlvbjtcblx0XHRcdGNvbnN0IGdyb3VwZWRJdGVtRW50cmllcyA9IHRoaXMuZ3JvdXBJdGVtRW50cmllcyhtYXBFbnRyeS5tYXRjaGVzKTtcblxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGdyb3VwZWRJdGVtRW50cmllcy5ub3RGaXR0aW5nLCBudWxsLCB0aGlzLnVwZGF0ZUluaXRpYWwpO1xuXG5cdFx0XHQvLyBkb2Vzbid0IGRvIGFueXRoaW5nIHdpdGggaW5pdGlhbFxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LmFkZEl0ZW1zKGdyb3VwZWRJdGVtRW50cmllcy5maXR0aW5nLCBudWxsLCB0aGlzLnVwZGF0ZUluaXRpYWwpO1xuXG5cdFx0XHRpZiAoZ3JvdXBlZEl0ZW1FbnRyaWVzLm1heWJlLmxlbmd0aCA+IDApXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5leHRlbmQoaWRlbnRpdHksIG51bGwsIHRydWUsIHRoaXMudXBkYXRlSW5pdGlhbCk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBncm91cEl0ZW1FbnRyaWVzIChtYXRjaGVzOiBDb2xsZWN0aW9uTWF0Y2hlck1hdGNoZXMpOiBHcm91cGVkQ29sbGVjdGlvbk1hdGNoZXJSZXN1bHQge1xuXHRcdGNvbnN0IGZpdHRpbmc6IEl0ZW1FbnRyeVtdID0gW107XG5cdFx0Y29uc3Qgbm90Rml0dGluZzogSXRlbUlkW10gPSBbXTtcblx0XHRjb25zdCBtYXliZTogSXRlbUVudHJ5W10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIG1hdGNoZXMpIHtcblx0XHRcdGNvbnN0IG1hdGNoID0gbWF0Y2hlc1tpdGVtSWRdO1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gbWF0Y2guaXRlbTtcblx0XHRcdGNvbnN0IGlzTWF0Y2ggPSBtYXRjaC5pc01hdGNoO1xuXG5cdFx0XHRpZiAoaXNNYXRjaCA9PT0gdHJ1ZSlcblx0XHRcdFx0Zml0dGluZy5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0XHRlbHNlIGlmIChpc01hdGNoID09PSBmYWxzZSlcblx0XHRcdFx0bm90Rml0dGluZy5wdXNoKGl0ZW1FbnRyeS5pdGVtSWQpO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRtYXliZS5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtmaXR0aW5nOiBmaXR0aW5nLCBub3RGaXR0aW5nOiBub3RGaXR0aW5nLCBtYXliZTogbWF5YmV9O1xuXHR9XG5cblx0cHJpdmF0ZSBncm91cEl0ZW1JZHMgKG1hdGNoZXM6IENvbGxlY3Rpb25NYXRjaGVyTWF0Y2hlcykge1xuXHRcdC8vIGFsc28gaW5jbHVkZXMgJ21heWJlJztcblx0XHRjb25zdCBmaXR0aW5nOiBJdGVtSWRbXSA9IFtdO1xuXHRcdGNvbnN0IG5vdEZpdHRpbmc6IEl0ZW1JZFtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBtYXRjaGVzKSB7XG5cdFx0XHRjb25zdCBtYXRjaCA9IG1hdGNoZXNbaXRlbUlkXTtcblxuXHRcdFx0KG1hdGNoLmlzTWF0Y2ggPT09IGZhbHNlID8gbm90Rml0dGluZyA6IGZpdHRpbmcpLnB1c2gobWF0Y2guaXRlbS5pdGVtSWQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7Zml0dGluZzogZml0dGluZywgbm90Rml0dGluZzogbm90Rml0dGluZ307XG5cdH1cblxuXHRwcml2YXRlIGhhc0ZpdHRpbmdJdGVtcyAobWF0Y2hlczogQ29sbGVjdGlvbk1hdGNoZXJNYXRjaGVzKSB7XG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gbWF0Y2hlcykge1xuXHRcdFx0aWYgKG1hdGNoZXNbaXRlbUlkXS5pc01hdGNoID09PSB0cnVlKVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnMsIENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UsIEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBJdGVtSWQgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlIHtcblx0cHJvY2Vzc09wdGlvbnMgKG9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UpOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zIHtcblx0XHRyZXR1cm4gbmV3IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnMob3B0aW9ucyk7XG5cdH1cblxuXHRnZXRJZEFycmF5IChpdGVtUmVzb3VyY2VzOiBJdGVtUmVzb3VyY2VbXSk6IEl0ZW1JZFtdIHtcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1JZFtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKVxuXHRcdFx0cmVzdWx0LnB1c2goaXRlbVJlc291cmNlLmVudHJ5Lml0ZW1JZCk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5VdGlsIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0Q29sdW1uLCBBcGlSZXF1ZXN0Q29sdW1ucywgSXRlbVR5cGUsIFJlc3BvbnNlQ29sdW1uLCBSZXNwb25zZUNvbHVtbk1hcCB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIENvbHVtbkNhY2hlIHtcblx0Y2FjaGU6IFJlc3BvbnNlQ29sdW1uTWFwID0ge307XG5cdGFsbENvbHVtbnM6IHtbaXRlbVR5cGU6IHN0cmluZ106IGJvb2xlYW59ID0ge307XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxuXHQpIHtcblx0fVxuXG5cdHNldENvbHVtbiAoaXRlbVR5cGU6IEl0ZW1UeXBlLCByZXNwb25zZUNvbHVtbjogUmVzcG9uc2VDb2x1bW4pOiBSZXNwb25zZUNvbHVtbiB7XG5cdFx0Y29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlO1xuXG5cdFx0aWYgKGNhY2hlW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0Y2FjaGVbaXRlbVR5cGVdID0ge307XG5cblx0XHRjb25zdCBlbnRyeSA9IGNhY2hlW2l0ZW1UeXBlXTtcblx0XHRjb25zdCBjb2x1bW5JZCA9IHJlc3BvbnNlQ29sdW1uLmlkO1xuXG5cdFx0aWYgKGVudHJ5W2NvbHVtbklkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0ZW50cnlbY29sdW1uSWRdID0gcmVzcG9uc2VDb2x1bW47XG5cblx0XHRyZXR1cm4gZW50cnlbY29sdW1uSWRdO1xuXHR9XG5cblx0c2V0Q29sdW1ucyAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyxcblx0XHRyZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwXG5cdCk6IFJlc3BvbnNlQ29sdW1uTWFwIHtcblx0XHRjb25zdCByZXN1bHQ6IFJlc3BvbnNlQ29sdW1uTWFwICA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCByZXNwb25zZVR5cGUgaW4gcmVzcG9uc2VDb2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5zID0gcmVzcG9uc2VDb2x1bW5zW3Jlc3BvbnNlVHlwZV07XG5cblx0XHRcdHJlc3VsdFtyZXNwb25zZVR5cGVdID0ge307XG5cblx0XHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gY29sdW1ucylcblx0XHRcdFx0cmVzdWx0W3Jlc3BvbnNlVHlwZV1bY29sdW1uSWRdID0gdGhpcy5zZXRDb2x1bW4ocmVzcG9uc2VUeXBlLCBjb2x1bW5zW2NvbHVtbklkXSk7XG5cdFx0fVxuXG5cdFx0aWYgKHJlcXVlc3RDb2x1bW5zID09PSB0cnVlKVxuXHRcdFx0dGhpcy5hbGxDb2x1bW5zW2l0ZW1UeXBlXSA9IHRydWU7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cmV0cmlldmUgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnNcblx0KToge2NhY2hlZDogUmVzcG9uc2VDb2x1bW5NYXAsIG1pc3Npbmc6IEFwaVJlcXVlc3RDb2x1bW5zfSB7XG5cdFx0aWYgKHJlcXVlc3RDb2x1bW5zID09PSB0cnVlKSB7XG5cdFx0XHRpZiAodGhpcy5jb250YWluc0FsbChpdGVtVHlwZSkpXG5cdFx0XHRcdHJldHVybiB7Y2FjaGVkOiB0aGlzLmdldENvbHVtbnMoaXRlbVR5cGUpLCBtaXNzaW5nOiBbXX07XG5cblx0XHRcdHJldHVybiB7Y2FjaGVkOiB7fSwgbWlzc2luZzogdHJ1ZX07XG5cdFx0fVxuXG5cdFx0Y29uc3QgcmVzcG9uc2VBY2N1bXVsYXRvciA9IHt9O1xuXHRcdGNvbnN0IHJlcXVlc3RBY2N1bXVsYXRvcjogUmVzcG9uc2VDb2x1bW5bXSA9IFtdO1xuXG5cdFx0dGhpcy5yZXRyaWV2ZUNvbHVtbnMoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXF1ZXN0QWNjdW11bGF0b3IsIHJlc3BvbnNlQWNjdW11bGF0b3IpO1xuXG5cdFx0cmV0dXJuIHtjYWNoZWQ6IHJlc3BvbnNlQWNjdW11bGF0b3IsIG1pc3Npbmc6IHJlcXVlc3RBY2N1bXVsYXRvcn07XG5cdH1cblxuXHRjb250YWluc0FsbCAoaXRlbVR5cGU6IEl0ZW1UeXBlKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuYWxsQ29sdW1uc1tpdGVtVHlwZV0gPT09IHRydWU7XG5cdH1cblxuXHRnZXRDb2x1bW5zIChpdGVtVHlwZTogSXRlbVR5cGUpOiBSZXNwb25zZUNvbHVtbk1hcCB7XG5cdFx0Y29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlO1xuXG5cdFx0cmV0dXJuIHtbaXRlbVR5cGVdOiBjYWNoZVtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCA/IFtdIDogY2FjaGVbaXRlbVR5cGVdfTtcblx0fVxuXG5cdHByaXZhdGUgcmV0cmlldmVDb2x1bW5zIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5bXSxcblx0XHRyZXF1ZXN0QWNjdW11bGF0b3I6IEFwaVJlcXVlc3RDb2x1bW5bXSxcblx0XHRyZXNwb25zZUFjY3VtdWxhdG9yOiBSZXNwb25zZUNvbHVtbk1hcFxuXHQpOiB2b2lkIHtcblx0XHQvLyBhbHdheXMgcmV0cmlldmUgdGhlIGlkIGNvbHVtblxuXHRcdHRoaXMucmV0cmlldmVDb2x1bW4oaXRlbVR5cGUsICdpZCcsIHJlcXVlc3RBY2N1bXVsYXRvciwgcmVzcG9uc2VBY2N1bXVsYXRvcik7XG5cblx0XHRmb3IgKGNvbnN0IHJlcXVlc3RDb2x1bW4gb2YgcmVxdWVzdENvbHVtbnMpXG5cdFx0XHR0aGlzLnJldHJpZXZlQ29sdW1uKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1uLCByZXF1ZXN0QWNjdW11bGF0b3IsIHJlc3BvbnNlQWNjdW11bGF0b3IpO1xuXHR9XG5cblx0cHJpdmF0ZSByZXRyaWV2ZUNvbHVtbiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHJlcXVlc3RDb2x1bW46IEFwaVJlcXVlc3RDb2x1bW4sXG5cdFx0cmVxdWVzdEFjY3VtdWxhdG9yOiBSZXNwb25zZUNvbHVtbltdLFxuXHRcdHJlc3BvbnNlQWNjdW11bGF0b3I6IFJlc3BvbnNlQ29sdW1uTWFwXG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1uVXRpbC5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XG5cdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW4gPSB0aGlzLmdldENvbHVtbihpdGVtVHlwZSwgY29sdW1uLmlkKTtcblxuXHRcdGlmIChyZXNwb25zZUNvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXF1ZXN0QWNjdW11bGF0b3IucHVzaChyZXF1ZXN0Q29sdW1uKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAocmVzcG9uc2VBY2N1bXVsYXRvcltpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJlc3BvbnNlQWNjdW11bGF0b3JbaXRlbVR5cGVdID0ge307XG5cblx0XHRyZXNwb25zZUFjY3VtdWxhdG9yW2l0ZW1UeXBlXVtjb2x1bW4uaWRdID0gcmVzcG9uc2VDb2x1bW47XG5cblx0XHRpZiAoY29sdW1uLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybjtcblxuXHRcdGNvbnN0IG1pc3NpbmdEZXJpdmVkOiBSZXNwb25zZUNvbHVtbltdID0gW107XG5cblx0XHR0aGlzLnJldHJpZXZlQ29sdW1ucyhyZXNwb25zZUNvbHVtbi5pdGVtVHlwZSwgY29sdW1uLmNoaWxkcmVuLCBtaXNzaW5nRGVyaXZlZCwgcmVzcG9uc2VBY2N1bXVsYXRvcik7XG5cblx0XHRpZiAobWlzc2luZ0Rlcml2ZWQubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0cmVxdWVzdEFjY3VtdWxhdG9yLnB1c2goe1tjb2x1bW4uaWRdOiBtaXNzaW5nRGVyaXZlZH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRDb2x1bW4gKGl0ZW1UeXBlOiBJdGVtVHlwZSwgY29sdW1uSWQ6IHN0cmluZyk6IFJlc3BvbnNlQ29sdW1uIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGVbaXRlbVR5cGVdO1xuXG5cdFx0aWYgKGNhY2hlID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm47XG5cblx0XHRyZXR1cm4gY2FjaGVbY29sdW1uSWRdO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5JbmZvLCBDb2x1bW5TZXQgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENvbHVtbkluZm9GYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7XG5cdEFwaVJlcXVlc3RDb2x1bW4sXG5cdEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRDb2x1bW5FeHBhbnNpb25SZXN1bHQsXG5cdEl0ZW1UeXBlLFxuXHRSZXNwb25zZUNvbHVtbk1hcCxcblx0Um9vdENvbHVtbk1hcFxufSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IGdldEZpcnN0UHJvcGVydHkgfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uRXhwYW5zaW9uIHtcblx0ZXhwYW5zaW9uTWFwOiB7W2NvbHVtblNldElkOiBzdHJpbmddOiBDb2x1bW5FeHBhbnNpb25SZXN1bHQgfCBudWxsfSA9IHt9O1xuXHRleHBhbnNpb25NYXBTaXplOiBudW1iZXIgPSAwO1xuXHRyZXF1ZXN0Q29sdW1uc1RydWU6IGJvb2xlYW47XG5cdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1uW107XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sdW1uSW5mb0ZhY3Rvcnk6IENvbHVtbkluZm9GYWN0b3J5LFxuXHRcdHB1YmxpYyBpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRcdHB1YmxpYyByZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwXG5cdCkge1xuXHRcdGlmIChyZXF1ZXN0Q29sdW1ucyA9PT0gdHJ1ZSkge1xuXHRcdFx0Ly8gcmVxdWVzdENvbHVtbnMgc2hvdWxkIGFsd2F5cyBiZSBhbiBhcnJheSwgd2hlbiBpdCBpcyB0cnVlIGRlcml2ZWQgY29sdW1uIGluZm9ybWF0aW9uIHdpbGwgYmUgbG9zdFxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUgPSB0cnVlO1xuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1ucyA9IFtdO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHJlc3BvbnNlQ29sdW1uc1tpdGVtVHlwZV0pXG5cdFx0XHRcdHRoaXMucmVxdWVzdENvbHVtbnMucHVzaChjb2x1bW5JZCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbnNUcnVlID0gZmFsc2U7XG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zID0gcmVxdWVzdENvbHVtbnM7XG5cdFx0fVxuXHR9XG5cblx0cnVuIChjb2x1bW5TZXQ6IENvbHVtblNldCk6IENvbHVtbkV4cGFuc2lvblJlc3VsdCB8IG51bGwge1xuXHRcdGNvbnN0IGV4cGFuc2lvbk1hcCA9IHRoaXMuZXhwYW5zaW9uTWFwO1xuXHRcdGNvbnN0IGNvbHVtblNldElkID0gY29sdW1uU2V0LmlkO1xuXG5cdFx0aWYgKGV4cGFuc2lvbk1hcFtjb2x1bW5TZXRJZF0gIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBleHBhbnNpb25NYXBbY29sdW1uU2V0SWRdO1xuXG5cdFx0dGhpcy5leHBhbnNpb25NYXBTaXplKys7XG5cblx0XHRyZXR1cm4gZXhwYW5zaW9uTWFwW2NvbHVtblNldElkXSA9IGNvbHVtblNldC5pc1N1cGVyc2V0T2YodGhpcy5yZXF1ZXN0Q29sdW1ucykgP1xuXHRcdFx0bnVsbCA6XG5cdFx0XHRjb2x1bW5TZXQuZXhwYW5kKHRoaXMucmVxdWVzdENvbHVtbnMsIHRoaXMucmVxdWVzdENvbHVtbnNUcnVlLCB0aGlzLnJlc3BvbnNlQ29sdW1ucyk7XG5cdH1cblxuXHRhZ2dyZWdhdGVSb290Q29sdW1ucyAoKTogQ29sdW1uSW5mb1tdIHtcblx0XHRjb25zdCBleHBhbnNpb25NYXAgPSB0aGlzLmV4cGFuc2lvbk1hcDtcblxuXHRcdGlmICh0aGlzLmV4cGFuc2lvbk1hcFNpemUgPT09IDEpIHtcblx0XHRcdGNvbnN0IGV4cGFuc2lvblJlc3VsdCA9IGV4cGFuc2lvbk1hcFtnZXRGaXJzdFByb3BlcnR5KGV4cGFuc2lvbk1hcCkgYXMgc3RyaW5nXTtcblxuXHRcdFx0cmV0dXJuIGV4cGFuc2lvblJlc3VsdCAhPT0gbnVsbCA/IGV4cGFuc2lvblJlc3VsdC5kaWZmZXJlbmNlLnJvb3QgOiBbXTtcblx0XHR9XG5cblx0XHRjb25zdCByb290Q29sdW1uTWFwOiBSb290Q29sdW1uTWFwID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtblNldElkIGluIGV4cGFuc2lvbk1hcCkge1xuXHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gZXhwYW5zaW9uTWFwW2NvbHVtblNldElkXTtcblxuXHRcdFx0aWYgKGNvbHVtbkV4cGFuc2lvbiA9PT0gbnVsbClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdHRoaXMuZXhwYW5kUm9vdENvbHVtbk1hcChjb2x1bW5FeHBhbnNpb24uZGlmZmVyZW5jZS5yb290LCByb290Q29sdW1uTWFwKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUm9vdENvbHVtbk1hcChyb290Q29sdW1uTWFwLCBudWxsKTtcblx0fVxuXG5cdHByaXZhdGUgZXhwYW5kUm9vdENvbHVtbk1hcCAoY29sdW1uczogQ29sdW1uSW5mb1tdLCBkZXN0aW5hdGlvbjogUm9vdENvbHVtbk1hcCkge1xuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uLmlkO1xuXG5cdFx0XHRpZiAoZGVzdGluYXRpb25bY29sdW1uSWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtbklkXSA9IHthcGlDb2x1bW46IGNvbHVtbi5hcGlDb2x1bW4sIGNoaWxkcmVuOiB7fX07XG5cblx0XHRcdHRoaXMuZXhwYW5kUm9vdENvbHVtbk1hcChjb2x1bW4uY2hpbGRyZW4sIGRlc3RpbmF0aW9uW2NvbHVtbklkXS5jaGlsZHJlbik7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBwcm9jZXNzUm9vdENvbHVtbk1hcCAocm9vdENvbHVtbk1hcDogUm9vdENvbHVtbk1hcCwgcGFyZW50OiBDb2x1bW5JbmZvIHwgbnVsbCk6IENvbHVtbkluZm9bXSB7XG5cdFx0Y29uc3QgcmVzdWx0OiBDb2x1bW5JbmZvW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gcm9vdENvbHVtbk1hcCkge1xuXHRcdFx0Y29uc3QgY29sdW1uTWFwRW50cnkgPSByb290Q29sdW1uTWFwW2NvbHVtbklkXTtcblx0XHRcdGNvbnN0IGNvbHVtbkluZm8gPSB0aGlzLmNvbHVtbkluZm9GYWN0b3J5LmNvbnN0cnVjdChjb2x1bW5NYXBFbnRyeS5hcGlDb2x1bW4sIHBhcmVudCk7XG5cdFx0XHRjb25zdCBjaGlsZENvbHVtbnMgPSB0aGlzLnByb2Nlc3NSb290Q29sdW1uTWFwKGNvbHVtbk1hcEVudHJ5LmNoaWxkcmVuLCBjb2x1bW5JbmZvKTtcblxuXHRcdFx0aWYgKGNoaWxkQ29sdW1ucy5sZW5ndGggPiAwKVxuXHRcdFx0XHRjb2x1bW5JbmZvLnNldENoaWxkcmVuKGNvbHVtbkluZm8uYXBpQ29sdW1uLml0ZW1UeXBlLCBjaGlsZENvbHVtbnMpO1xuXG5cdFx0XHRyZXN1bHQucHVzaChjb2x1bW5JbmZvKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5DYWNoZSwgQ29sdW1uVXRpbCB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7XG5cdEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRJdGVtVHlwZSxcblx0UHJvbWlzZUludGVyZmFjZSxcblx0UmVzcG9uc2VDb2x1bW4sXG5cdFJlc3BvbnNlQ29sdW1uTWFwXG59IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIENvbHVtbkhhbmRsZXIge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZSxcblx0XHRwcml2YXRlIGNhY2hlOiBDb2x1bW5DYWNoZSxcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWxcblx0KSB7XG5cdH1cblxuXHRzZXRDb2x1bW4gKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcmVzcG9uc2VDb2x1bW46IFJlc3BvbnNlQ29sdW1uKTogUmVzcG9uc2VDb2x1bW4ge1xuXHRcdHJldHVybiB0aGlzLmNhY2hlLnNldENvbHVtbihpdGVtVHlwZSwgcmVzcG9uc2VDb2x1bW4pO1xuXHR9XG5cblx0c2V0Q29sdW1ucyAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyxcblx0XHRyZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwXG5cdCk6IFJlc3BvbnNlQ29sdW1uTWFwIHtcblx0XHRyZXR1cm4gdGhpcy5jYWNoZS5zZXRDb2x1bW5zKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKTtcblx0fVxuXG5cdGZldGNoSXRlbVR5cGVUcmFuc2xhdGlvbnMgKGl0ZW1UeXBlczogSXRlbVR5cGVbXSk6IFByb21pc2VJbnRlcmZhY2U8e1tpdGVtVHlwZTogc3RyaW5nXTogc3RyaW5nfT4ge1xuXHRcdGNvbnN0IHByb21pc2VzOiB7W2l0ZW1UeXBlOiBzdHJpbmddOiBQcm9taXNlSW50ZXJmYWNlPFJlc3BvbnNlQ29sdW1uTWFwPn0gPSB7fTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgb2YgaXRlbVR5cGVzKVxuXHRcdFx0cHJvbWlzZXNbaXRlbVR5cGVdID0gdGhpcy5mZXRjaChpdGVtVHlwZSwgWydpZCddKTtcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChwcm9taXNlcylcblx0XHRcdC50aGVuKFxuXHRcdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgcmVzdWx0OiB7W2l0ZW1UeXBlOiBzdHJpbmddOiBzdHJpbmd9ID0ge307XG5cblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHJlc3BvbnNlKVxuXHRcdFx0XHRcdFx0cmVzdWx0W2l0ZW1UeXBlXSA9IHJlc3BvbnNlW2l0ZW1UeXBlXVtpdGVtVHlwZV0uaWQubmFtZTtcblxuXHRcdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0KTtcblx0fVxuXG5cdHJlcXVlc3QgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRjb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyxcblx0XHRwYXJhbXMgPSB7ZmlsdGVyOiBmYWxzZX1cblx0KTogUHJvbWlzZUludGVyZmFjZTxSZXNwb25zZUNvbHVtbk1hcD4ge1xuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLmNvbHVtbnMoaXRlbVR5cGUsIHtbaXRlbVR5cGVdOiBjb2x1bW5zfSwgcGFyYW1zKS50aGVuKFxuXHRcdFx0Y29sdW1uUmVzb3VyY2UgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5jYWNoZS5zZXRDb2x1bW5zKFxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdGNvbHVtbnMsXG5cdFx0XHRcdFx0Y29sdW1uUmVzb3VyY2UuZmV0Y2hDb2x1bW5zT2JqZWN0KClcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0ZmV0Y2ggKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLCBwYXJhbXM/OiBhbnkpOiBQcm9taXNlSW50ZXJmYWNlPFJlc3BvbnNlQ29sdW1uTWFwPiB7XG5cdFx0Y29uc3QgY29sdW1uUmVzb3VyY2UgPSB0aGlzLmNhY2hlLnJldHJpZXZlKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucyk7XG5cblx0XHRpZiAoY29sdW1uUmVzb3VyY2UubWlzc2luZyAhPT0gdHJ1ZSAmJiBjb2x1bW5SZXNvdXJjZS5taXNzaW5nLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oY29sdW1uUmVzb3VyY2UuY2FjaGVkKTtcblxuXHRcdHJldHVybiB0aGlzLnJlcXVlc3QoaXRlbVR5cGUsIGNvbHVtblJlc291cmNlLm1pc3NpbmcsIHBhcmFtcykudGhlbihcblx0XHRcdHJlc3BvbnNlQ29sdW1ucyA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXNwb25zZUNvbHVtbnMoXG5cdFx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zLFxuXHRcdFx0XHRcdGNvbHVtblJlc291cmNlLmNhY2hlZFxuXHRcdFx0XHQpLm1lcmdlZDtcblx0XHRcdH1cblx0XHQpO1xuXHR9XG5cblx0ZmV0Y2hBbGwgKGl0ZW1UeXBlOiBJdGVtVHlwZSk6IFByb21pc2VJbnRlcmZhY2U8UmVzcG9uc2VDb2x1bW5NYXA+IHtcblx0XHRpZiAodGhpcy5jYWNoZS5jb250YWluc0FsbChpdGVtVHlwZSkpXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKHRoaXMuY2FjaGUuZ2V0Q29sdW1ucyhpdGVtVHlwZSkpO1xuXG5cdFx0cmV0dXJuIHRoaXMucmVxdWVzdChpdGVtVHlwZSwgdHJ1ZSk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENPTFVNTl9TRVBFUkFUT1IgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgSXRlbVR5cGUsIFJlc3BvbnNlQ29sdW1uIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uSW5mbyB7XG5cdGlkOiBzdHJpbmc7XG5cdGxldmVsOiBudW1iZXI7XG5cdHBhdGg6IHN0cmluZztcblx0dGFpbFBhdGg6IHN0cmluZztcblx0aXRlbVR5cGU6IEl0ZW1UeXBlIHwgbnVsbCA9IG51bGw7XG5cdGNoaWxkcmVuOiBDb2x1bW5JbmZvW10gPSBbXTtcblx0aXNMZWFmOiBib29sZWFuID0gdHJ1ZTtcblxuXHRjb25zdHJ1Y3RvciAocmVhZG9ubHkgYXBpQ29sdW1uOiBSZXNwb25zZUNvbHVtbiwgcmVhZG9ubHkgcGFyZW50OiBDb2x1bW5JbmZvIHwgbnVsbCA9IG51bGwpIHtcblx0XHRjb25zdCBjb2x1bW5JZCA9IGFwaUNvbHVtbi5pZDtcblxuXHRcdHRoaXMuaWQgPSBjb2x1bW5JZDtcblxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpIHtcblx0XHRcdHRoaXMubGV2ZWwgPSAwO1xuXHRcdFx0dGhpcy5wYXRoID0gY29sdW1uSWQ7XG5cdFx0XHR0aGlzLnRhaWxQYXRoID0gJyc7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMubGV2ZWwgPSBwYXJlbnQubGV2ZWwgKyAxO1xuXHRcdFx0dGhpcy5wYXRoID0gcGFyZW50LnBhdGggKyBDT0xVTU5fU0VQRVJBVE9SICsgY29sdW1uSWQ7XG5cdFx0XHR0aGlzLnRhaWxQYXRoID0gcGFyZW50LmxldmVsID09PSAwID9cblx0XHRcdFx0Y29sdW1uSWQgOlxuXHRcdFx0XHRwYXJlbnQudGFpbFBhdGggKyBDT0xVTU5fU0VQRVJBVE9SICsgY29sdW1uSWQ7XG5cdFx0fVxuXHR9XG5cblx0c2V0Q2hpbGRyZW4gKGl0ZW1UeXBlOiBJdGVtVHlwZSwgY2hpbGRyZW46IENvbHVtbkluZm9bXSk6IHRoaXMge1xuXHRcdHRoaXMuaXRlbVR5cGUgPSBpdGVtVHlwZTtcblx0XHR0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47XG5cdFx0dGhpcy5pc0xlYWYgPSBmYWxzZTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5IYW5kbGVyLCBDb2x1bW5JbmZvLCBDb2x1bW5VdGlsIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDb2x1bW5JbmZvRmFjdG9yeSwgQ29sdW1uU2V0RmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQge1xuXHRBcGlSZXF1ZXN0Q29sdW1uLFxuXHRBcGlSZXF1ZXN0Q29sdW1ucyxcblx0Q29sdW1uRXhwYW5zaW9uUmVzdWx0LFxuXHRDb2x1bW5TZXRFeHBhbnNpb24sXG5cdEl0ZW1UeXBlLFxuXHRSZXNwb25zZUNvbHVtbk1hcFxufSBmcm9tICcuLi90eXBlcyc7XG5cbmNvbnN0IGVtcHR5T2JqZWN0ID0ge307XG5sZXQgY3VycmVudElkID0gMDtcblxuZXhwb3J0IGNsYXNzIENvbHVtblNldCB7XG5cdGlkID0gKytjdXJyZW50SWQ7XG5cblx0cmVxdWVzdENvbHVtbnNUcnVlOiBib29sZWFuO1xuXHRyZXNwb25zZTogUmVzcG9uc2VDb2x1bW5NYXAgPSBlbXB0eU9iamVjdDtcblxuXHRsaW5rOiBDb2x1bW5JbmZvIHwgbnVsbCA9IG51bGw7XG5cdG1haW46IENvbHVtbkluZm9bXSA9IFtdO1xuXHRkZXJpdmVkOiBDb2x1bW5JbmZvW10gPSBbXTtcblx0cm9vdDogQ29sdW1uSW5mb1tdID0gW107XG5cdGxlYWY6IENvbHVtbkluZm9bXSA9IFtdO1xuXHRmb3JtYXR0ZWQ6IHttYWluOiBDb2x1bW5JbmZvW10sIGRlcml2ZWQ6IENvbHVtbkluZm9bXX0gPSB7bWFpbjogW10sIGRlcml2ZWQ6IFtdfTtcblx0ZmlsdGVyZWQ6IENvbHVtbkluZm9bXSA9IFtdO1xuXHRjdXN0b206IENvbHVtbkluZm9bXSA9IFtdO1xuXHRzZWFyY2hhYmxlOiBDb2x1bW5JbmZvW10gPSBbXTtcblx0aXRlbTogQ29sdW1uSW5mb1tdID0gW107XG5cdG5vdEl0ZW06IENvbHVtbkluZm9bXSA9IFtdO1xuXG5cdGVuYWJsZUNhY2hpbmc6IGJvb2xlYW47XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sdW1uSGFuZGxlcjogQ29sdW1uSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWwsXG5cdFx0cHJpdmF0ZSBjb2x1bW5JbmZvRmFjdG9yeTogQ29sdW1uSW5mb0ZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxuXHRcdHB1YmxpYyBpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cHVibGljIHJlcXVlc3Q6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHQpIHtcblx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSA9IHRoaXMucmVxdWVzdENvbHVtbnNJc1RydWUodGhpcy5yZXF1ZXN0KTtcblx0fVxuXG5cdHRvSlNPTiAoKSB7XG5cdFx0Y29uc3QgcGFyc2VDb2x1bW5zID0gKGNvbHVtbnM6IENvbHVtbkluZm9bXSkgPT4gY29sdW1ucy5tYXAoYyA9PiBjLmlkKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRtYWluOiBwYXJzZUNvbHVtbnModGhpcy5tYWluKSxcblx0XHRcdGRlcml2ZWQ6IHBhcnNlQ29sdW1ucyh0aGlzLmRlcml2ZWQpXG5cdFx0fTtcblx0fVxuXG5cdHJlc29sdmUgKHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXAsIGVuYWJsZUNhY2hpbmcgPSB0cnVlLCBpbmNsdWRlSWRDb2x1bW4gPSB0cnVlKTogdGhpcyB7XG5cdFx0dGhpcy5lbmFibGVDYWNoaW5nID0gZW5hYmxlQ2FjaGluZztcblxuXHRcdGlmICh0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSlcblx0XHRcdHRoaXMucHJvY2Vzc1Jlc3BvbnNlQ29sdW1ucyhyZXNwb25zZUNvbHVtbnMpO1xuXHRcdGVsc2Vcblx0XHRcdHRoaXMucHJvY2Vzc1JlcXVlc3RDb2x1bW5zKHJlc3BvbnNlQ29sdW1ucywgaW5jbHVkZUlkQ29sdW1uKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZXhwYW5kUmVxdWVzdENvbHVtbnMgKGNvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zKTogdm9pZCB7XG5cdFx0Y29uc3QgbWVyZ2VkUmVxdWVzdENvbHVtbnMgPSB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXF1ZXN0Q29sdW1ucyh0aGlzLnJlcXVlc3QsIGNvbHVtbnMpLm1lcmdlZDtcblxuXHRcdHRoaXMucmVxdWVzdCA9IG1lcmdlZFJlcXVlc3RDb2x1bW5zO1xuXHRcdHRoaXMucmVxdWVzdENvbHVtbnNUcnVlID0gbWVyZ2VkUmVxdWVzdENvbHVtbnMgPT09IHRydWU7XG5cdH1cblxuXHRpc1N1cGVyc2V0T2YgKGNvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zKTogYm9vbGVhbiB7XG5cdFx0aWYgKGNvbHVtbnMgPT09IHRydWUpXG5cdFx0XHRyZXR1cm4gdGhpcy5yZXF1ZXN0Q29sdW1uc1RydWU7XG5cblx0XHRjb25zdCBjb2x1bW5VdGlsID0gdGhpcy5jb2x1bW5VdGlsO1xuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0gdGhpcy5yZXF1ZXN0O1xuXG5cdFx0aWYgKHJlcXVlc3RDb2x1bW5zID09PSB0cnVlKVxuXHRcdFx0cmV0dXJuICFjb2x1bW5VdGlsLmNvbnRhaW5zRGVyaXZlZENvbHVtbnMoY29sdW1ucyk7XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cdFx0XHRpZiAoIWNvbHVtblV0aWwuY29udGFpbnNDb2x1bW4oY29sdW1uLCByZXF1ZXN0Q29sdW1ucykpXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHByaXZhdGUgcHJvY2Vzc1Jlc3BvbnNlQ29sdW1ucyAocmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcCkge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gdGhpcy5pdGVtVHlwZTtcblxuXHRcdHRoaXMucmVxdWVzdCA9IFtdO1xuXHRcdHRoaXMucmVzcG9uc2UgPSB0aGlzLmVuYWJsZUNhY2hpbmcgP1xuXHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLnNldENvbHVtbnModGhpcy5pdGVtVHlwZSwgdHJ1ZSwgcmVzcG9uc2VDb2x1bW5zKSA6XG5cdFx0XHRyZXNwb25zZUNvbHVtbnM7XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHJlc3BvbnNlQ29sdW1uc1tpdGVtVHlwZV0pIHtcblx0XHRcdHRoaXMubWFpbi5wdXNoKHRoaXMuZ2V0Q29sdW1uSW5mbyhjb2x1bW5JZCwgaXRlbVR5cGUsIFtdLCBudWxsLCByZXNwb25zZUNvbHVtbnMpKTtcblx0XHRcdHRoaXMucmVxdWVzdC5wdXNoKGNvbHVtbklkKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHJlcXVlc3RDb2x1bW5zSXNUcnVlIChyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMpOiByZXF1ZXN0Q29sdW1ucyBpcyB0cnVlIHtcblx0XHRyZXR1cm4gcmVxdWVzdENvbHVtbnMgPT09IHRydWU7XG5cdH1cblxuXHRwcml2YXRlIHByb2Nlc3NSZXF1ZXN0Q29sdW1ucyAocmVzcG9uc2VDb2x1bW5zOiBhbnksIGluY2x1ZGVJZENvbHVtbj86IGJvb2xlYW4pIHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IHRoaXMuaXRlbVR5cGU7XG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSB0aGlzLnJlcXVlc3Q7IC8vIHdlIGNhbiBhc3N1bWUgcmVxdWVzdENvbHVtbnMgaXMgYW4gYXJyYXkgaGVyZVxuXG5cdFx0dGhpcy5yZXNwb25zZSA9IHt9O1xuXG5cdFx0aWYgKHRoaXMucmVxdWVzdENvbHVtbnNJc1RydWUocmVxdWVzdENvbHVtbnMpIHx8IHJlcXVlc3RDb2x1bW5zLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybjtcblxuXHRcdGZvciAoY29uc3QgcmVxdWVzdENvbHVtbiBvZiByZXF1ZXN0Q29sdW1ucykge1xuXHRcdFx0Y29uc3QgY29sdW1uSW5mbyA9IHRoaXMuZ2V0UmVxdWVzdENvbHVtbkluZm8ocmVxdWVzdENvbHVtbiwgaXRlbVR5cGUsIG51bGwsIHJlc3BvbnNlQ29sdW1ucyk7XG5cblx0XHRcdGlmIChjb2x1bW5JbmZvID09PSBudWxsKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0dGhpcy5tYWluLnB1c2goY29sdW1uSW5mbyk7XG5cblx0XHRcdGlmICghY29sdW1uSW5mby5pc0xlYWYpXG5cdFx0XHRcdHRoaXMucm9vdC5wdXNoKGNvbHVtbkluZm8pO1xuXHRcdH1cblxuXHRcdGlmIChpbmNsdWRlSWRDb2x1bW4gJiYgdGhpcy5yZXNwb25zZVtpdGVtVHlwZV0uaWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgY29sdW1uSW5mbyA9IHRoaXMuZ2V0UmVxdWVzdENvbHVtbkluZm8oJ2lkJywgaXRlbVR5cGUsIG51bGwsIHJlc3BvbnNlQ29sdW1ucyk7XG5cblx0XHRcdGlmIChjb2x1bW5JbmZvICE9PSBudWxsKVxuXHRcdFx0XHR0aGlzLm1haW4ucHVzaChjb2x1bW5JbmZvKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGdldFJlcXVlc3RDb2x1bW5JbmZvIChyZXF1ZXN0Q29sdW1uOiBBcGlSZXF1ZXN0Q29sdW1uLCBpdGVtVHlwZTogSXRlbVR5cGUsIHBhcmVudDogQ29sdW1uSW5mbyB8IG51bGwsIHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXApIHtcblx0XHRjb25zdCBwYXJzZWRDb2x1bW4gPSB0aGlzLmNvbHVtblV0aWwucGFyc2VSZXF1ZXN0Q29sdW1uKHJlcXVlc3RDb2x1bW4pO1xuXHRcdGNvbnN0IGNvbHVtbklkID0gcGFyc2VkQ29sdW1uLmlkO1xuXG5cdFx0bGV0IHJlc3BvbnNlQ29sdW1uO1xuXG5cdFx0aWYgKHJlc3BvbnNlQ29sdW1uc1tpdGVtVHlwZV0gIT09IHVuZGVmaW5lZClcblx0XHRcdHJlc3BvbnNlQ29sdW1uID0gcmVzcG9uc2VDb2x1bW5zW2l0ZW1UeXBlXVtjb2x1bW5JZF07XG5cblx0XHRpZiAocmVzcG9uc2VDb2x1bW4gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdObyBhcGkgY29sdW1uIGZvciByZXF1ZXN0IGNvbHVtbicsIGNvbHVtbklkLCAnZm9yIGl0ZW1UeXBlJywgaXRlbVR5cGUpO1xuXG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5lbmFibGVDYWNoaW5nKVxuXHRcdFx0cmVzcG9uc2VDb2x1bW4gPSB0aGlzLmNvbHVtbkhhbmRsZXIuc2V0Q29sdW1uKGl0ZW1UeXBlLCByZXNwb25zZUNvbHVtbik7XG5cblx0XHRjb25zdCByZXN1bHRSZXNwb25zZSA9IHRoaXMucmVzcG9uc2U7XG5cblx0XHRpZiAocmVzdWx0UmVzcG9uc2VbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXN1bHRSZXNwb25zZVtpdGVtVHlwZV0gPSB7fTtcblxuXHRcdGlmIChyZXN1bHRSZXNwb25zZVtpdGVtVHlwZV1bY29sdW1uSWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXN1bHRSZXNwb25zZVtpdGVtVHlwZV1bY29sdW1uSWRdID0gcmVzcG9uc2VDb2x1bW47XG5cblx0XHRyZXR1cm4gdGhpcy5nZXRDb2x1bW5JbmZvKGNvbHVtbklkLCBpdGVtVHlwZSwgcGFyc2VkQ29sdW1uLmNoaWxkcmVuLCBwYXJlbnQsIHJlc3BvbnNlQ29sdW1ucyk7XG5cdH1cblxuXHRwcml2YXRlIGdldENvbHVtbkluZm8gKFxuXHRcdGNvbHVtbklkOiBzdHJpbmcsXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGNoaWxkcmVuOiBBcGlSZXF1ZXN0Q29sdW1uW10sXG5cdFx0cGFyZW50OiBDb2x1bW5JbmZvIHwgbnVsbCxcblx0XHRyZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwXG5cdCk6IENvbHVtbkluZm8ge1xuXHRcdGNvbnN0IGNvbHVtblV0aWwgPSB0aGlzLmNvbHVtblV0aWw7XG5cdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW4gPSByZXNwb25zZUNvbHVtbnNbaXRlbVR5cGVdW2NvbHVtbklkXTtcblx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5jb2x1bW5JbmZvRmFjdG9yeS5jb25zdHJ1Y3QocmVzcG9uc2VDb2x1bW4sIHBhcmVudCk7XG5cdFx0Y29uc3QgaXNEZXJpdmVkID0gcGFyZW50ICE9PSBudWxsO1xuXG5cdFx0aWYgKGlzRGVyaXZlZClcblx0XHRcdHRoaXMuZGVyaXZlZC5wdXNoKGNvbHVtbkluZm8pO1xuXHRcdGVsc2UgLy8gd2UgY291bGQgcG9zc2libHkgYWRkIGRlcml2ZWQgY29sdW1ucyB0byAnbm90SXRlbSdcblx0XHRcdHRoaXNbY29sdW1uVXRpbC5pc0l0ZW1Db2x1bW4ocmVzcG9uc2VDb2x1bW4pID8gJ2l0ZW0nIDogJ25vdEl0ZW0nXS5wdXNoKGNvbHVtbkluZm8pO1xuXG5cdFx0aWYgKGNvbHVtblV0aWwuaXNGb3JtYXR0ZWRDb2x1bW4ocmVzcG9uc2VDb2x1bW4pKVxuXHRcdFx0dGhpcy5mb3JtYXR0ZWRbaXNEZXJpdmVkID8gJ2Rlcml2ZWQnIDogJ21haW4nXS5wdXNoKGNvbHVtbkluZm8pO1xuXG5cdFx0aWYgKGNvbHVtblV0aWwuaXNGaWx0ZXJlZENvbHVtbihyZXNwb25zZUNvbHVtbikpXG5cdFx0XHR0aGlzLmZpbHRlcmVkLnB1c2goY29sdW1uSW5mbyk7XG5cblx0XHRpZiAoY29sdW1uVXRpbC5pc1NlYXJjaGFibGVDb2x1bW4ocmVzcG9uc2VDb2x1bW4pKVxuXHRcdFx0dGhpcy5zZWFyY2hhYmxlLnB1c2goY29sdW1uSW5mbyk7XG5cblx0XHRpZiAoY29sdW1uVXRpbC5pc0N1c3RvbUNvbHVtbihyZXNwb25zZUNvbHVtbikpXG5cdFx0XHR0aGlzLmN1c3RvbS5wdXNoKGNvbHVtbkluZm8pO1xuXG5cdFx0aWYgKHJlc3BvbnNlQ29sdW1uLnR5cGUgPT09ICdsaW5rJylcblx0XHRcdHRoaXMubGluayA9IGNvbHVtbkluZm87XG5cblx0XHRpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG5cdFx0XHR0aGlzLmxlYWYucHVzaChjb2x1bW5JbmZvKTtcblxuXHRcdFx0cmV0dXJuIGNvbHVtbkluZm87XG5cdFx0fVxuXG5cdFx0Y29uc3QgY2hpbGRDb2x1bW5zOiBDb2x1bW5JbmZvW10gPSBbXTtcblxuXHRcdC8vIGNvbHVtbnMgaXMgKm5vdCogdHJ1ZVxuXHRcdGZvciAoY29uc3QgY2hpbGRDb2x1bW5JZCBvZiBjaGlsZHJlbikge1xuXHRcdFx0Y29uc3QgY2hpbGRDb2x1bW4gPSB0aGlzLmdldFJlcXVlc3RDb2x1bW5JbmZvKFxuXHRcdFx0XHRjaGlsZENvbHVtbklkLFxuXHRcdFx0XHRyZXNwb25zZUNvbHVtbi5pdGVtVHlwZSxcblx0XHRcdFx0Y29sdW1uSW5mbyxcblx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoY2hpbGRDb2x1bW4gPT09IG51bGwpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRjaGlsZENvbHVtbnMucHVzaChjaGlsZENvbHVtbik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbHVtbkluZm8uc2V0Q2hpbGRyZW4ocmVzcG9uc2VDb2x1bW4uaXRlbVR5cGUsIGNoaWxkQ29sdW1ucyk7XG5cdH1cblxuXHRwcml2YXRlIGdldENvbHVtblNldEV4cGFuc2lvbiAoXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRcdHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXBcblx0KTogQ29sdW1uU2V0RXhwYW5zaW9uIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0cmVxdWVzdDogdGhpcy5jb2x1bW5VdGlsLm1lcmdlUmVxdWVzdENvbHVtbnModGhpcy5yZXF1ZXN0LCByZXF1ZXN0Q29sdW1ucyksXG5cdFx0XHRyZXNwb25zZTogdGhpcy5jb2x1bW5VdGlsLm1lcmdlUmVzcG9uc2VDb2x1bW5zKHRoaXMucmVzcG9uc2UsIHJlc3BvbnNlQ29sdW1ucykubWVyZ2VkXG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0TWVyZ2VkQ29sdW1uU2V0IChjb2x1bW5TZXRFeHBhbnNpb246IENvbHVtblNldEV4cGFuc2lvbiwgcmVxdWVzdENvbHVtbnNUcnVlOiBib29sZWFuKTogQ29sdW1uU2V0IHtcblx0XHRjb25zdCByZXN1bHQgPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0dGhpcy5pdGVtVHlwZSxcblx0XHRcdGNvbHVtblNldEV4cGFuc2lvbi5yZXF1ZXN0Lm1lcmdlZCxcblx0XHRcdGNvbHVtblNldEV4cGFuc2lvbi5yZXNwb25zZVxuXHRcdCk7XG5cblx0XHRyZXN1bHQucmVxdWVzdENvbHVtbnNUcnVlID0gdGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUgfHwgcmVxdWVzdENvbHVtbnNUcnVlO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdG1lcmdlIChjb2x1bW5TZXQ6IENvbHVtblNldCk6IENvbHVtblNldCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TWVyZ2VkQ29sdW1uU2V0KFxuXHRcdFx0dGhpcy5nZXRDb2x1bW5TZXRFeHBhbnNpb24oY29sdW1uU2V0LnJlcXVlc3QsIGNvbHVtblNldC5yZXNwb25zZSksXG5cdFx0XHRjb2x1bW5TZXQucmVxdWVzdENvbHVtbnNUcnVlXG5cdFx0KTtcblx0fVxuXG5cdGV4cGFuZCAoXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRcdHJlcXVlc3RDb2x1bW5zVHJ1ZTogYm9vbGVhbixcblx0XHRyZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwXG5cdCk6IENvbHVtbkV4cGFuc2lvblJlc3VsdCB7XG5cdFx0Y29uc3QgY29sdW1uU2V0RXhwYW5zaW9uID0gdGhpcy5nZXRDb2x1bW5TZXRFeHBhbnNpb24ocmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucyk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0bWVyZ2VkOiB0aGlzLmdldE1lcmdlZENvbHVtblNldChjb2x1bW5TZXRFeHBhbnNpb24sIHJlcXVlc3RDb2x1bW5zVHJ1ZSksXG5cdFx0XHRkaWZmZXJlbmNlOiB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHR0aGlzLml0ZW1UeXBlLFxuXHRcdFx0XHRjb2x1bW5TZXRFeHBhbnNpb24ucmVxdWVzdC5kaWZmZXJlbmNlLFxuXHRcdFx0XHRjb2x1bW5TZXRFeHBhbnNpb24ucmVzcG9uc2UsIC8vIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBsb29rIHVwIHRoZSBwYXJlbnQgb2YgZGVyaXZlZCBjb2x1bW5zXG5cdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRmYWxzZVxuXHRcdFx0KVxuXHRcdH07XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtblNldCB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdENvbHVtbnMgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5TdWJzZXRDYWNoZSB7XG5cdHByaXZhdGUgY2FjaGU6IHtbY29sdW1uU2V0SWQ6IG51bWJlcl06IGJvb2xlYW59ID0ge307XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHB1YmxpYyByZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnNcblx0KSB7XG5cblx0fVxuXG5cdHJ1biAoY29sdW1uU2V0OiBDb2x1bW5TZXQpOiBib29sZWFuIHtcblx0XHRjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGU7XG5cdFx0Y29uc3QgY29sdW1uU2V0SWQgPSBjb2x1bW5TZXQuaWQ7XG5cblx0XHRpZiAoY2FjaGVbY29sdW1uU2V0SWRdICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gY2FjaGVbY29sdW1uU2V0SWRdO1xuXG5cdFx0cmV0dXJuIGNhY2hlW2NvbHVtblNldElkXSA9IGNvbHVtblNldC5pc1N1cGVyc2V0T2YodGhpcy5yZXF1ZXN0Q29sdW1ucyk7XG5cdH1cbn1cbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG5pbXBvcnQgeyBDT0xVTU5fU0VQRVJBVE9SLCBSRU5ERVJfQVNfU0VQRVJBVE9SIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IEFwaVJlcXVlc3RDb2x1bW4sIEFwaVJlcXVlc3RDb2x1bW5zLCBJdGVtVHlwZSwgUmVzcG9uc2VDb2x1bW4sIFJlc3BvbnNlQ29sdW1uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBleHRlbmQsIGlzRGVmaW5lZCB9IGZyb20gJy4vVXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5VdGlsIHtcblx0Y29uc3RydWN0b3IgKCkge1xuXHR9XG5cblx0Z2V0Q29sdW1uUGF0aCAoY29sdW1uczogUmVzcG9uc2VDb2x1bW5bXSwgcmVuZGVyQXM6IG51bGwgfCBzdHJpbmcpIHtcblx0XHRsZXQgc2VwYXJhdG9yID0gJyc7XG5cdFx0bGV0IHJlc3VsdCA9ICcnO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0cmVzdWx0ICs9IHNlcGFyYXRvciArIGNvbHVtbi5pZDtcblx0XHRcdHNlcGFyYXRvciA9IENPTFVNTl9TRVBFUkFUT1I7XG5cdFx0fVxuXG5cdFx0aWYgKHJlbmRlckFzICE9PSBudWxsKVxuXHRcdFx0cmVzdWx0ICs9IFJFTkRFUl9BU19TRVBFUkFUT1IgKyByZW5kZXJBcztcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRnZXREYXRlRm9ybWF0T3B0aW9ucyAoY29sdW1uVHlwZT86ICdkYXRldGltZScpIHtcblx0XHRjb25zdCBub3cgPSBtb21lbnQoKTtcblxuXHRcdGNvbnN0IGZvcm1hdHMgPSB7XG5cdFx0XHQnSi1NLVknOiBub3cuZm9ybWF0KCdERC1NTS1ZWVlZJyksXG5cdFx0XHQnSi1NJzogbm93LmZvcm1hdCgnREQtTU0nKSxcblx0XHRcdCdqK0YrWSc6IG5vdy5mb3JtYXQoJ0QgTU1NIFlZWVknKSxcblx0XHRcdCdEK2orRitZJzogbm93LmZvcm1hdCgnZGRkZCBEIE1NTSBZWVlZJyksXG5cdFx0XHQnRic6IG5vdy5mb3JtYXQoJ01NTScpLFxuXHRcdFx0J2YnOiBub3cuZm9ybWF0KCdNTU1NJyksXG5cdFx0XHQnRCc6IG5vdy5mb3JtYXQoJ2RkZGQnKSxcblx0XHRcdCdkJzogbm93LmZvcm1hdCgnZGRkJylcblx0XHR9O1xuXG5cdFx0aWYgKGNvbHVtblR5cGUgPT09ICdkYXRldGltZScpXG5cdFx0XHRleHRlbmQoZm9ybWF0cywge1xuXHRcdFx0XHQnSi1NLVkrSDppJzogbm93LmZvcm1hdCgnREQtTU0tWVlZWSBISDptbScpLFxuXHRcdFx0XHQnSi1NK0g6aSc6IG5vdy5mb3JtYXQoJ0RELU1NIEhIOm1tJyksXG5cdFx0XHRcdCdqK0YrWStIOmknOiBub3cuZm9ybWF0KCdERCBNTU1NIFkgSEg6bW0nKSxcblx0XHRcdFx0J0QraitGK1krSDppJzogbm93LmZvcm1hdCgnZGRkZCBERCBNTU0gWSBISDptbScpLFxuXHRcdFx0XHQnSDppJzogbm93LmZvcm1hdCgnSEg6bW0nKVxuXHRcdFx0fSk7XG5cblx0XHRyZXR1cm4gZm9ybWF0cztcblx0fVxuXG5cdGlzU3RyaW5nQ29sdW1uIChjb2x1bW46IFJlc3BvbnNlQ29sdW1uKTogYm9vbGVhbiB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnZW1haWwnOlxuXHRcdFx0Y2FzZSAncGhvbmUnOlxuXHRcdFx0Y2FzZSAndXJsJzpcblx0XHRcdGNhc2UgJ3RleHQnOlxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxuXHRcdFx0Y2FzZSAndGV4dHJlcGxhY2UnOlxuXHRcdFx0XHQvLyBjYXNlICdodG1sJzogLy8gVE9ETzogc29ydCBvbiBmaWx0ZXJlZCB2YWx1ZVxuXHRcdFx0XHQvLyBjYXNlICdlbnVtJzpcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aXNGbG9hdENvbHVtbiAoY29sdW1uOiBSZXNwb25zZUNvbHVtbik6IGJvb2xlYW4ge1xuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2RvdWJsZSc6IC8vIGZsb2F0aW5nIHBvaW50IHR5cGVzXG5cdFx0XHRjYXNlICd2b2x1bWUnOlxuXHRcdFx0Y2FzZSAnd2VpZ2h0Jzpcblx0XHRcdGNhc2UgJ2Rpc3RhbmNlJzpcblx0XHRcdGNhc2UgJ2RpbWVuc2lvbic6XG5cdFx0XHRjYXNlICdwb3dlcic6XG5cdFx0XHRjYXNlICdjdXJyZW50Jzpcblx0XHRcdGNhc2UgJ3ByaWNlJzpcblx0XHRcdGNhc2UgJ3BlcmNlbnRhZ2UnOlxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpc0ludENvbHVtbiAoY29sdW1uOiBSZXNwb25zZUNvbHVtbik6IGJvb2xlYW4ge1xuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2ludCc6IC8vIGludGVnZXIgdHlwZXNcblx0XHRcdGNhc2UgJ251bWJlcic6XG5cdFx0XHRjYXNlICdxdWFudGl0eSc6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlzTnVtYmVyQ29sdW1uIChjb2x1bW46IFJlc3BvbnNlQ29sdW1uKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuaXNGbG9hdENvbHVtbihjb2x1bW4pIHx8IHRoaXMuaXNJbnRDb2x1bW4oY29sdW1uKTtcblx0fVxuXG5cdGlzQ3VzdG9tQ29sdW1uIChjb2x1bW46IFJlc3BvbnNlQ29sdW1uKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIGNvbHVtbi5maWVsZHR5cGUgPT09ICdjdXN0b21maWVsZCc7XG5cdH1cblxuXHRpc0l0ZW1Db2x1bW4gKGNvbHVtbjogUmVzcG9uc2VDb2x1bW4sIGluY2x1ZGVJZCA9IHRydWUpOiBib29sZWFuIHtcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG5cdFx0XHRjYXNlICdpZCc6XG5cdFx0XHRcdHJldHVybiBpbmNsdWRlSWQ7XG5cdFx0XHRjYXNlICdpdGVtJzpcblx0XHRcdGNhc2UgJ2NoaWxkJzpcblx0XHRcdGNhc2UgJ3NpYmxpbmcnOlxuXHRcdFx0Y2FzZSAnbGluayc6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlzRGF0ZUNvbHVtbiAoY29sdW1uOiBSZXNwb25zZUNvbHVtbik6IGJvb2xlYW4ge1xuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpc1JlbmRlcmVkQ29sdW1uIChjb2x1bW46IFJlc3BvbnNlQ29sdW1uKTogYm9vbGVhbiB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlzRmlsdGVyZWRDb2x1bW4gKGNvbHVtbjogUmVzcG9uc2VDb2x1bW4pOiBib29sZWFuIHtcblx0XHQvLyB1Z2x5IGhhY2sgOi0oXG5cdFx0aWYgKGNvbHVtbi5pZCA9PT0gJ3N0YWZmZWwnKVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cblx0XHRpZiAoY29sdW1uLmdlbmVyYXRvciAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG5cdFx0XHRjYXNlICdwcmljZSc6XG5cdFx0XHRjYXNlICdib29sJzpcblx0XHRcdGNhc2UgJ2VudW0nOlxuXHRcdFx0Y2FzZSAnY291bnRyeSc6XG5cdFx0XHRjYXNlICd2b2x1bWUnOlxuXHRcdFx0Y2FzZSAnd2VpZ2h0Jzpcblx0XHRcdGNhc2UgJ2Rpc3RhbmNlJzpcblx0XHRcdGNhc2UgJ2RpbWVuc2lvbic6XG5cdFx0XHRjYXNlICdxdWFudGl0eSc6XG5cdFx0XHRjYXNlICdlbWFpbCc6XG5cdFx0XHRjYXNlICd1cmwnOlxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRjYXNlICd0aW1lJzpcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdGNhc2UgJ2h0bWwnOlxuXHRcdFx0Y2FzZSAndGV4dHJlcGxhY2UnOlxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxuXHRcdFx0Y2FzZSAncGVyY2VudGFnZSc6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlzRm9ybWF0dGVkQ29sdW1uIChjb2x1bW46IFJlc3BvbnNlQ29sdW1uKTogYm9vbGVhbiB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRjYXNlICd0aW1lJzpcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdGNhc2UgJ2NvbG9yJzpcblx0XHRcdGNhc2UgJ2pzb24nOlxuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcblx0XHRcdGNhc2UgJ2ZpbGVzaXplJzpcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aXNTZWxlY3RhYmxlQ29sdW1uIChjb2x1bW46IFJlc3BvbnNlQ29sdW1uKTogYm9vbGVhbiB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnYmxvYic6XG5cdFx0XHRjYXNlICdjb29yZGluYXRlJzpcblx0XHRcdGNhc2UgJ2ZvcmNldXBkYXRlJzpcblx0XHRcdGNhc2UgJ2lkJzpcblx0XHRcdGNhc2UgJ2pzb24nOlxuXHRcdFx0Y2FzZSAnb3JkZXInOlxuXHRcdFx0Y2FzZSAncGFyZW50aWQnOlxuXHRcdFx0Y2FzZSAncGFyZW50dHlwZSc6XG5cdFx0XHRjYXNlICdwYXNzd29yZCc6XG5cdFx0XHRjYXNlICd0b2tlbic6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGhhc0xvY2F0aW9uUHJvcGVydHkgKGNvbHVtbjogUmVzcG9uc2VDb2x1bW4sIGxvY2F0aW9uOiBudW1iZXIpOiBib29sZWFuIHtcblx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxuXHRcdHJldHVybiAobG9jYXRpb24gJiBjb2x1bW4ubG9jYXRpb24pICE9PSAwO1xuXHR9XG5cblx0aXNFZGl0YWJsZUNvbHVtbiAoY29sdW1uOiBSZXNwb25zZUNvbHVtbik6IGJvb2xlYW4ge1xuXHRcdGlmIChjb2x1bW4ucmVhZE9ubHkpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0aXNTZWFyY2hhYmxlQ29sdW1uIChjb2x1bW46IFJlc3BvbnNlQ29sdW1uKTogYm9vbGVhbiB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnZW1haWwnOlxuXHRcdFx0Y2FzZSAncGhvbmUnOlxuXHRcdFx0Y2FzZSAndGV4dCc6XG5cdFx0XHRjYXNlICdsb25ndGV4dCc6XG5cdFx0XHRjYXNlICdodG1sJzpcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0Z2V0RGVmYXVsdFdlaWdodCAoY29sdW1uOiBSZXNwb25zZUNvbHVtbik6IG51bWJlciB7XG5cdFx0Ly8gXHRcdFx0Y29uc29sZS5sb2coJ2dldERlZmF1bHRXZWlnaHQnLCBjb2x1bW4pO1xuXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnZG91YmxlJzpcblx0XHRcdGNhc2UgJ3ByaWNlJzpcblx0XHRcdGNhc2UgJ2Jvb2wnOlxuXHRcdFx0Y2FzZSAnaW50Jzpcblx0XHRcdGNhc2UgJ3BlcmNlbnRhZ2UnOlxuXHRcdFx0Y2FzZSAnY29sb3InOlxuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcblx0XHRcdGNhc2UgJ3Bvd2VyJzpcblx0XHRcdGNhc2UgJ2N1cnJlbnQnOlxuXHRcdFx0XHRyZXR1cm4gMC41O1xuXG5cdFx0XHRjYXNlICd1cmwnOlxuXHRcdFx0Y2FzZSAnZW51bSc6XG5cdFx0XHRjYXNlICdlbWFpbCc6XG5cdFx0XHRjYXNlICd0ZXh0Jzpcblx0XHRcdGNhc2UgJ2l0ZW0nOlxuXHRcdFx0Y2FzZSAnbGluayc6XG5cdFx0XHRcdHJldHVybiAxLjU7XG5cblx0XHRcdGNhc2UgJ2xvbmd0ZXh0Jzpcblx0XHRcdGNhc2UgJ2h0bWwnOlxuXHRcdFx0Y2FzZSAndGV4dHJlcGxhY2UnOlxuXHRcdFx0XHRyZXR1cm4gMjtcblxuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRjYXNlICd0aW1lJzpcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gMTtcblx0XHR9XG5cdH1cblxuXHRnZXRDb21wYXJhdG9ycyAoY29sdW1uOiBSZXNwb25zZUNvbHVtbiAmIHt0eXBlOiAnZGltZW5zaW9uJyB8ICd3ZWlnaHQnIHwgJ3ByaWNlJ30pOiBbJz0nLCAnPicsICc8J107XG5cdGdldENvbXBhcmF0b3JzIChjb2x1bW46IFJlc3BvbnNlQ29sdW1uICYge3R5cGU6ICdkYXRlJyB8ICdkYXRldGltZScgfCAndGltZScgfCAnZHVyYXRpb24nfSk6IFsnPicsICc8J107XG5cdGdldENvbXBhcmF0b3JzIChjb2x1bW46IFJlc3BvbnNlQ29sdW1uKTogWyc9JywgJyE9J107XG5cdGdldENvbXBhcmF0b3JzIChjb2x1bW46IFJlc3BvbnNlQ29sdW1uKSB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnZGltZW5zaW9uJzpcblx0XHRcdGNhc2UgJ3dlaWdodCc6XG5cdFx0XHRjYXNlICdwcmljZSc6XG5cdFx0XHRcdHJldHVybiBbJz0nLCAnPicsICc8J107XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdGNhc2UgJ3RpbWUnOlxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxuXHRcdFx0XHRyZXR1cm4gWyc+JywgJzwnXTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBbJz0nLCAnIT0nXTtcblx0XHR9XG5cdH1cblxuXHRjb250YWluc0NvbHVtbiAocmVxdWVzdENvbHVtbjogQXBpUmVxdWVzdENvbHVtbiwgZGVzdGluYXRpb246IEFwaVJlcXVlc3RDb2x1bW5bXSk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGNvbHVtbiA9IHRoaXMucGFyc2VSZXF1ZXN0Q29sdW1uKHJlcXVlc3RDb2x1bW4pO1xuXHRcdGNvbnN0IGNvbHVtbkluZGV4ID0gdGhpcy5maW5kUmVxdWVzdENvbHVtbihjb2x1bW4uaWQsIGRlc3RpbmF0aW9uKTtcblxuXHRcdGlmIChjb2x1bW5JbmRleCA9PT0gLTEpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRpZiAoY29sdW1uLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0aWYgKHR5cGVvZiBkZXN0aW5hdGlvbltjb2x1bW5JbmRleF0gPT09ICdzdHJpbmcnKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0Zm9yIChjb25zdCBjaGlsZENvbHVtbiBvZiBjb2x1bW4uY2hpbGRyZW4pIHtcblx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdGlmICghdGhpcy5jb250YWluc0NvbHVtbihjaGlsZENvbHVtbiwgZGVzdGluYXRpb25bY29sdW1uSW5kZXhdW2NvbHVtbi5pZF0pKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRjb250YWluc0Rlcml2ZWRDb2x1bW5zIChyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbltdKTogYm9vbGVhbiB7XG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gaW4gcmVxdWVzdENvbHVtbnMpIHtcblx0XHRcdGlmICh0aGlzLnBhcnNlUmVxdWVzdENvbHVtbihjb2x1bW4pLmNoaWxkcmVuLmxlbmd0aCA+IDApXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJlc3BvbnNlQ29sdW1uc0F2YWlsYWJsZSAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1uW10sXG5cdFx0cmVzcG9uc2VDb2x1bW5NYXA6IFJlc3BvbnNlQ29sdW1uTWFwXG5cdCk6IGJvb2xlYW4ge1xuXHRcdGZvciAoY29uc3QgcmVxdWVzdENvbHVtbiBvZiByZXF1ZXN0Q29sdW1ucykge1xuXHRcdFx0Y29uc3QgcGFyc2VkQ29sdW1uID0gdGhpcy5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XG5cdFx0XHRjb25zdCBjaGlsZHJlbiA9IHBhcnNlZENvbHVtbi5jaGlsZHJlbjtcblx0XHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1ucyA9IHJlc3BvbnNlQ29sdW1uTWFwW2l0ZW1UeXBlXTtcblx0XHRcdGxldCByZXNwb25zZUNvbHVtbjtcblxuXHRcdFx0aWYgKHJlc3BvbnNlQ29sdW1ucyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRcdHJlc3BvbnNlQ29sdW1uID0gcmVzcG9uc2VDb2x1bW5zW3BhcnNlZENvbHVtbi5pZF07XG5cblx0XHRcdGlmIChyZXNwb25zZUNvbHVtbiA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRcdGlmIChcblx0XHRcdFx0Y2hpbGRyZW4ubGVuZ3RoID4gMCAmJlxuXHRcdFx0XHQhdGhpcy5yZXNwb25zZUNvbHVtbnNBdmFpbGFibGUocmVzcG9uc2VDb2x1bW4uaXRlbVR5cGUsIGNoaWxkcmVuLCByZXNwb25zZUNvbHVtbk1hcClcblx0XHRcdClcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Y29weVJlcXVlc3RDb2x1bW5zIChjb2x1bW5zOiB0cnVlKTogdHJ1ZTtcblx0Y29weVJlcXVlc3RDb2x1bW5zIChjb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1uW10pOiBBcGlSZXF1ZXN0Q29sdW1uW107XG5cdGNvcHlSZXF1ZXN0Q29sdW1ucyAoY29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMpOiBBcGlSZXF1ZXN0Q29sdW1ucyB7XG5cdFx0aWYgKGNvbHVtbnMgPT09IHRydWUpXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRcdGNvbnN0IHJlc3VsdDogQXBpUmVxdWVzdENvbHVtbltdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKVxuXHRcdFx0cmVzdWx0LnB1c2godGhpcy5jb3B5UmVxdWVzdENvbHVtbihjb2x1bW4pKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRjb3B5UmVxdWVzdENvbHVtbiAocmVxdWVzdENvbHVtbjogQXBpUmVxdWVzdENvbHVtbik6IEFwaVJlcXVlc3RDb2x1bW4ge1xuXHRcdGNvbnN0IGNvbHVtbiA9IHRoaXMucGFyc2VSZXF1ZXN0Q29sdW1uKHJlcXVlc3RDb2x1bW4pO1xuXG5cdFx0aWYgKGNvbHVtbi5jaGlsZHJlbi5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gY29sdW1uLmlkO1xuXG5cdFx0Y29uc3QgY2hpbGRyZW46IEFwaVJlcXVlc3RDb2x1bW5bXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBjaGlsZENvbHVtbiBvZiBjb2x1bW4uY2hpbGRyZW4pXG5cdFx0XHRjaGlsZHJlbi5wdXNoKHRoaXMuY29weVJlcXVlc3RDb2x1bW4oY2hpbGRDb2x1bW4pKTtcblxuXHRcdHJldHVybiB7W2NvbHVtbi5pZF06IGNoaWxkcmVufTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEaWZmZXJlbmNlOiBjb2x1bW5zIHRoYXQgYXJlIGluIHNlY29uZCwgYnV0IG5vdCBpbiBmaXJzdFxuXHQgKiBAcGFyYW0ge0FycmF5fSBmaXJzdFxuXHQgKiBAcGFyYW0ge0FycmF5fSBzZWNvbmRcblx0ICogQHJldHVybnMge09iamVjdH0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgJ21lcmdlZCcgYW5kICdkaWZmZXJlbmNlJyBwcm9wZXJ0aWVzXG5cdCAqL1xuXHRtZXJnZVJlcXVlc3RDb2x1bW5zIChcblx0XHRmaXJzdDogdHJ1ZSxcblx0XHRzZWNvbmQ6IEFwaVJlcXVlc3RDb2x1bW5zXG5cdCk6IHttZXJnZWQ6IHRydWUsIGRpZmZlcmVuY2U6IFtdfTtcblx0bWVyZ2VSZXF1ZXN0Q29sdW1ucyAoXG5cdFx0Zmlyc3Q6IEFwaVJlcXVlc3RDb2x1bW5bXSxcblx0XHRzZWNvbmQ6IHRydWVcblx0KToge21lcmdlZDogdHJ1ZSwgZGlmZmVyZW5jZTogdHJ1ZX07XG5cdG1lcmdlUmVxdWVzdENvbHVtbnMgKFxuXHRcdGZpcnN0OiBBcGlSZXF1ZXN0Q29sdW1uW10sXG5cdFx0c2Vjb25kOiBBcGlSZXF1ZXN0Q29sdW1uW11cblx0KToge21lcmdlZDogQXBpUmVxdWVzdENvbHVtbltdLCBkaWZmZXJlbmNlOiBBcGlSZXF1ZXN0Q29sdW1uW119O1xuXHRtZXJnZVJlcXVlc3RDb2x1bW5zIChcblx0XHRmaXJzdDogQXBpUmVxdWVzdENvbHVtbnMsXG5cdFx0c2Vjb25kOiBBcGlSZXF1ZXN0Q29sdW1uc1xuXHQpOiB7bWVyZ2VkOiBBcGlSZXF1ZXN0Q29sdW1ucywgZGlmZmVyZW5jZTogQXBpUmVxdWVzdENvbHVtbnN9O1xuXHRtZXJnZVJlcXVlc3RDb2x1bW5zIChcblx0XHRmaXJzdDogQXBpUmVxdWVzdENvbHVtbnMsXG5cdFx0c2Vjb25kOiBBcGlSZXF1ZXN0Q29sdW1uc1xuXHQpOiB7bWVyZ2VkOiBBcGlSZXF1ZXN0Q29sdW1ucywgZGlmZmVyZW5jZTogQXBpUmVxdWVzdENvbHVtbnN9IHtcblx0XHRpZiAoZmlyc3QgPT09IHRydWUpIC8vID09PSBvcGVyYXRvciBuZWVkZWQgaGVyZVxuXHRcdFx0cmV0dXJuIHttZXJnZWQ6IHRydWUsIGRpZmZlcmVuY2U6IFtdfTtcblxuXHRcdGlmIChzZWNvbmQgPT09IHRydWUpXG5cdFx0XHRyZXR1cm4ge21lcmdlZDogdHJ1ZSwgZGlmZmVyZW5jZTogdHJ1ZX07XG5cblx0XHRjb25zdCBtZXJnZWQgPSB0aGlzLmNvcHlSZXF1ZXN0Q29sdW1ucyhmaXJzdCk7XG5cdFx0Y29uc3QgZGlmZmVyZW5jZTogQXBpUmVxdWVzdENvbHVtbltdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBzZWNvbmQpIHtcblx0XHRcdGNvbnN0IGFkZGVkQ29sdW1uID0gdGhpcy5tZXJnZVJlcXVlc3RDb2x1bW4oY29sdW1uLCBtZXJnZWQpO1xuXG5cdFx0XHRpZiAoYWRkZWRDb2x1bW4gIT09IG51bGwpXG5cdFx0XHRcdGRpZmZlcmVuY2UucHVzaChhZGRlZENvbHVtbik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHttZXJnZWQ6IG1lcmdlZCwgZGlmZmVyZW5jZTogZGlmZmVyZW5jZX07XG5cdH1cblxuXHRtZXJnZVJlcXVlc3RDb2x1bW4gKHJlcXVlc3RDb2x1bW46IEFwaVJlcXVlc3RDb2x1bW4sIGRlc3RpbmF0aW9uOiBBcGlSZXF1ZXN0Q29sdW1uW10pIHtcblx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcblx0XHRjb25zdCBjb2x1bW5JbmRleCA9IHRoaXMuZmluZFJlcXVlc3RDb2x1bW4oY29sdW1uLmlkLCBkZXN0aW5hdGlvbik7XG5cblx0XHRpZiAoY29sdW1uSW5kZXggPT09IC0xKSB7XG5cdFx0XHRkZXN0aW5hdGlvbi5wdXNoKHJlcXVlc3RDb2x1bW4pO1xuXHRcdFx0cmV0dXJuIHJlcXVlc3RDb2x1bW47XG5cdFx0fVxuXG5cdFx0aWYgKGNvbHVtbi5jaGlsZHJlbi5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdGlmICh0eXBlb2YgZGVzdGluYXRpb25bY29sdW1uSW5kZXhdID09PSAnc3RyaW5nJykge1xuXHRcdFx0ZGVzdGluYXRpb25bY29sdW1uSW5kZXhdID0ge1xuXHRcdFx0XHRbY29sdW1uLmlkXTogW11cblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0Y29uc3QgYWRkZWRDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBjaGlsZENvbHVtbiBvZiBjb2x1bW4uY2hpbGRyZW4pIHtcblx0XHRcdGNvbnN0IGFkZGVkQ29sdW1uID0gdGhpcy5tZXJnZVJlcXVlc3RDb2x1bW4oXG5cdFx0XHRcdGNoaWxkQ29sdW1uLFxuXHRcdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XVtjb2x1bW4uaWRdXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoYWRkZWRDb2x1bW4gIT09IG51bGwpXG5cdFx0XHRcdGFkZGVkQ29sdW1ucy5wdXNoKGFkZGVkQ29sdW1uKTtcblx0XHR9XG5cblx0XHRpZiAoYWRkZWRDb2x1bW5zLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0cmV0dXJuIHtbY29sdW1uLmlkXTogYWRkZWRDb2x1bW5zfTtcblx0fVxuXG5cdGdldFJlcXVlc3RDb2x1bW5JZCAocmVxdWVzdENvbHVtbjogQXBpUmVxdWVzdENvbHVtbik6IHN0cmluZyB7XG5cdFx0aWYgKHR5cGVvZiByZXF1ZXN0Q29sdW1uID09PSAnc3RyaW5nJylcblx0XHRcdHJldHVybiByZXF1ZXN0Q29sdW1uO1xuXG5cdFx0bGV0IGNvbHVtbklkO1xuXG5cdFx0Zm9yIChjb2x1bW5JZCBpbiByZXF1ZXN0Q29sdW1uKSB7fVxuXG5cdFx0cmV0dXJuIGNvbHVtbklkIGFzIHN0cmluZztcblx0fVxuXG5cdHBhcnNlUmVxdWVzdENvbHVtbiAocmVxdWVzdENvbHVtbjogQXBpUmVxdWVzdENvbHVtbik6IHtpZDogc3RyaW5nLCBjaGlsZHJlbjogQXBpUmVxdWVzdENvbHVtbltdfSB7XG5cdFx0aWYgKHR5cGVvZiByZXF1ZXN0Q29sdW1uID09PSAnc3RyaW5nJylcblx0XHRcdHJldHVybiB7aWQ6IHJlcXVlc3RDb2x1bW4sIGNoaWxkcmVuOiBbXX07XG5cblx0XHRsZXQgY29sdW1uSWQ7XG5cblx0XHRmb3IgKGNvbHVtbklkIGluIHJlcXVlc3RDb2x1bW4pIHt9XG5cblx0XHRyZXR1cm4ge2lkOiBjb2x1bW5JZCBhcyBzdHJpbmcsIGNoaWxkcmVuOiByZXF1ZXN0Q29sdW1uW2NvbHVtbklkIGFzIHN0cmluZ119O1xuXHR9XG5cblx0LyoqXG5cdCAqIE1lcmdlcyB0d28gc2V0cyBvZiByZXNwb25zZSBjb2x1bW5zLlxuXHQgKiBAcGFyYW0ge29iamVjdH0gZmlyc3Rcblx0ICogQHBhcmFtIHtvYmplY3R9IHNlY29uZFxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBBbiBvYmplY3QgY29udGFpbmluZyBhICdtZXJnZWQnIGFuZCBhICdkaWZmZXJlbmNlJyBwcm9wZXJ0eS5cblx0ICovXG5cdG1lcmdlUmVzcG9uc2VDb2x1bW5zIChcblx0XHRmaXJzdDogUmVzcG9uc2VDb2x1bW5NYXAsXG5cdFx0c2Vjb25kOiBSZXNwb25zZUNvbHVtbk1hcFxuXHQpOiB7bWVyZ2VkOiBSZXNwb25zZUNvbHVtbk1hcCwgZGlmZmVyZW5jZTogUmVzcG9uc2VDb2x1bW5NYXB9IHtcblx0XHRjb25zdCBtZXJnZWQ6IFJlc3BvbnNlQ29sdW1uTWFwID0ge307XG5cdFx0Y29uc3QgZGlmZmVyZW5jZTogUmVzcG9uc2VDb2x1bW5NYXAgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gZmlyc3QpIHtcblx0XHRcdGlmIChzZWNvbmRbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0bWVyZ2VkW2l0ZW1UeXBlXSA9IGZpcnN0W2l0ZW1UeXBlXTtcblxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgbWVyZ2VSZXN1bHQgPSB0aGlzLm1lcmdlUmVzcG9uc2VDb2x1bW5NYXAoXG5cdFx0XHRcdGZpcnN0W2l0ZW1UeXBlXSxcblx0XHRcdFx0c2Vjb25kW2l0ZW1UeXBlXVxuXHRcdFx0KTtcblxuXHRcdFx0bWVyZ2VkW2l0ZW1UeXBlXSA9IG1lcmdlUmVzdWx0Lm1lcmdlZDtcblx0XHRcdGRpZmZlcmVuY2VbaXRlbVR5cGVdID0gbWVyZ2VSZXN1bHQuZGlmZmVyZW5jZTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHNlY29uZCkge1xuXHRcdFx0aWYgKGZpcnN0W2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdG1lcmdlZFtpdGVtVHlwZV0gPSBzZWNvbmRbaXRlbVR5cGVdO1xuXHRcdFx0XHRkaWZmZXJlbmNlW2l0ZW1UeXBlXSA9IHNlY29uZFtpdGVtVHlwZV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHttZXJnZWQ6IG1lcmdlZCwgZGlmZmVyZW5jZTogZGlmZmVyZW5jZX07XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHthcnJheX0gZmlyc3Rcblx0ICogQHBhcmFtIHthcnJheX0gc2Vjb25kXG5cdCAqIEByZXR1cm5zIHtvYmplY3R9IGRpZmZlcmVuY2U6IHRoZSBjb2x1bW5zIHRoYXQgYXJlIGluIHNlY29uZCwgYnV0IG5vdCBpbiBmaXJzdC5cblx0ICovXG5cdG1lcmdlUmVzcG9uc2VDb2x1bW5NYXAgKGZpcnN0OiBSZXNwb25zZUNvbHVtbk1hcCwgc2Vjb25kOiBSZXNwb25zZUNvbHVtbk1hcCk6IHttZXJnZWQ6IFJlc3BvbnNlQ29sdW1uTWFwLCBkaWZmZXJlbmNlOiBSZXNwb25zZUNvbHVtbk1hcH0ge1xuXHRcdGNvbnN0IG1lcmdlZDogUmVzcG9uc2VDb2x1bW5NYXAgPSB7fTtcblx0XHRjb25zdCBkaWZmZXJlbmNlOiBSZXNwb25zZUNvbHVtbk1hcCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiBmaXJzdClcblx0XHRcdG1lcmdlZFtjb2x1bW5JZF0gPSBmaXJzdFtjb2x1bW5JZF07XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHNlY29uZCkge1xuXHRcdFx0aWYgKGlzRGVmaW5lZChmaXJzdFtjb2x1bW5JZF0pKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0bWVyZ2VkW2NvbHVtbklkXSA9IHNlY29uZFtjb2x1bW5JZF07XG5cdFx0XHRkaWZmZXJlbmNlW2NvbHVtbklkXSA9IHNlY29uZFtjb2x1bW5JZF07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHttZXJnZWQ6IG1lcmdlZCwgZGlmZmVyZW5jZTogZGlmZmVyZW5jZX07XG5cdH1cblxuXHRpc0xvY2FsQ29sdW1uSWQgKGNvbHVtbklkOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gY29sdW1uSWQuc3Vic3RyaW5nKDAsIDIpID09PSAnX18nO1xuXHR9XG5cblx0cHJvY2Vzc0NvbmZpZ0NvbHVtbnMgKGNvbmZpZ0NvbHVtbnM6IHN0cmluZ1tdKTogQXBpUmVxdWVzdENvbHVtbltdIHtcblx0XHRjb25zdCByZXF1ZXN0OiBBcGlSZXF1ZXN0Q29sdW1uW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbmZpZ0NvbHVtbnMpIHtcblx0XHRcdGlmICh0aGlzLmlzTG9jYWxDb2x1bW5JZChjb2x1bW4pKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0dGhpcy5wcm9jZXNzQ29uZmlnQ29sdW1uKHRoaXMucGFyc2VDb25maWdDb2x1bW4oY29sdW1uKSwgcmVxdWVzdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlcXVlc3Q7XG5cdH1cblxuXHRwYXJzZUNvbmZpZ0NvbHVtbiAoY29uZmlnQ29sdW1uOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG5cdFx0cmV0dXJuIGNvbmZpZ0NvbHVtbi5zcGxpdChSRU5ERVJfQVNfU0VQRVJBVE9SKVswXS5zcGxpdChDT0xVTU5fU0VQRVJBVE9SKTtcblx0fVxuXG5cdHByb2Nlc3NDb25maWdDb2x1bW4gKHBhcnNlZENvbmZpZ0NvbHVtbjogc3RyaW5nW10sIGRlc3RpbmF0aW9uOiBBcGlSZXF1ZXN0Q29sdW1uW10pIHtcblx0XHRjb25zdCBjb2x1bW5JZCA9IHBhcnNlZENvbmZpZ0NvbHVtblswXTtcblx0XHRjb25zdCBpc0xlYWYgPSBwYXJzZWRDb25maWdDb2x1bW4ubGVuZ3RoID09PSAxO1xuXHRcdGxldCBjb2x1bW5JbmRleCA9IHRoaXMuZmluZFJlcXVlc3RDb2x1bW4oY29sdW1uSWQsIGRlc3RpbmF0aW9uKTtcblxuXHRcdGlmIChpc0xlYWYpIHtcblx0XHRcdGlmIChjb2x1bW5JbmRleCA9PT0gLTEpXG5cdFx0XHRcdGRlc3RpbmF0aW9uLnB1c2goY29sdW1uSWQpO1xuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKGNvbHVtbkluZGV4ID09PSAtMSlcblx0XHRcdGNvbHVtbkluZGV4ID0gZGVzdGluYXRpb24ucHVzaCh7W2NvbHVtbklkXTogW119KSAtIDE7XG5cdFx0ZWxzZSBpZiAodHlwZW9mIGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XSA9PT0gJ3N0cmluZycpXG5cdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5JbmRleF0gPSB7W2NvbHVtbklkXTogW119O1xuXG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdHRoaXMucHJvY2Vzc0NvbmZpZ0NvbHVtbihwYXJzZWRDb25maWdDb2x1bW4uc2xpY2UoMSksIGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XVtjb2x1bW5JZF0pO1xuXHR9XG5cblx0ZmluZFJlcXVlc3RDb2x1bW4gKGNvbHVtbklkOiBzdHJpbmcsIHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1uW10pOiBudW1iZXIge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcmVxdWVzdENvbHVtbnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGNvbHVtbiA9IHJlcXVlc3RDb2x1bW5zW2ldO1xuXG5cdFx0XHRpZiAodGhpcy5nZXRSZXF1ZXN0Q29sdW1uSWQoY29sdW1uKSA9PT0gY29sdW1uSWQpXG5cdFx0XHRcdHJldHVybiBpO1xuXHRcdH1cblxuXHRcdHJldHVybiAtMTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlLCBDb2xsZWN0aW9uSGFuZGxlciwgQ3JlYXRlQ29tcGlsYXRpb24sIEtleVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSwgUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgQ3JlYXRlUmVxdWVzdEVudHJ5LCBDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwLCBJdGVtRW50cnlNYXAsIEl0ZW1JZCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IGdldFBhdGggfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgY2xhc3MgQ3JlYXRlUmVxdWVzdCB7XG5cdHJlcXVlc3RzOiBDcmVhdGVSZXF1ZXN0RW50cnlbXSA9IFtdO1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeTogQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwcml2YXRlIHJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbXBpbGF0aW9uOiBDcmVhdGVDb21waWxhdGlvbixcblx0XHRwcml2YXRlIGxvY2FsQ29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGUsXG5cdFx0cHJpdmF0ZSBwYXJhbWV0ZXJNYXA6IENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAsXG5cdFx0cHJpdmF0ZSBicmVha3VwQnlQYXJlbnQgPSBmYWxzZVxuXHQpIHtcblx0fVxuXG5cdGZpbmFsaXplUmVxdWVzdCAocmVxdWVzdFJlc291cmNlOiBDcmVhdGVSZXF1ZXN0RW50cnkpIHtcblx0XHRjb25zdCBjb2xsZWN0aW9uRW50cmllcyA9IHJlcXVlc3RSZXNvdXJjZS5jb2xsZWN0aW9ucy5nZXRDb2xsZWN0aW9uc1dpdGhGaXR0aW5nSXRlbXMoKTtcblx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSByZXF1ZXN0UmVzb3VyY2UuY29sdW1ucztcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIGNvbGxlY3Rpb25FbnRyaWVzKVxuXHRcdFx0Y29sdW1uRXhwYW5zaW9uLmV4cGFuZChjb2xsZWN0aW9uRW50cnkuY29sdW1ucyk7XG5cblx0XHRyZXF1ZXN0UmVzb3VyY2UucmVxdWVzdC5jb2x1bW5zID0gY29sdW1uRXhwYW5zaW9uLmdldCgpO1xuXG5cdFx0cmV0dXJuIHJlcXVlc3RSZXNvdXJjZTtcblx0fVxuXG5cdHNldFJlcXVlc3RQYXJlbnQgKHBhcmVudFR5cGU6IEl0ZW1UeXBlLCByZXF1ZXN0RW50cnk6IENyZWF0ZVJlcXVlc3RFbnRyeSkge1xuXHRcdGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0RW50cnkucmVxdWVzdDtcblxuXHRcdGlmIChwYXJlbnRUeXBlID09PSAnVm9pZCcpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRyZXF1ZXN0LnBhcmVudFR5cGUgPSBwYXJlbnRUeXBlO1xuXHRcdHJlcXVlc3QucGFyZW50SWQgPSB7fTtcblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cnVuICgpIHtcblx0XHRjb25zdCBjb21waWxhdGlvbiA9IHRoaXMuY29tcGlsYXRpb247XG5cblx0XHRpZiAodGhpcy5icmVha3VwQnlQYXJlbnQpIHtcblx0XHRcdGZvciAoY29uc3QgcGFyZW50VHlwZSBpbiBjb21waWxhdGlvbikge1xuXHRcdFx0XHRjb25zdCBwYXJlbnRNYXAgPSBjb21waWxhdGlvbltwYXJlbnRUeXBlXTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHBhcmVudE1hcCkge1xuXHRcdFx0XHRcdGlmICh0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudElkKSlcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdFx0Y29uc3QgcmVxdWVzdFJlc291cmNlID0gdGhpcy5pbml0aWFsaXplUmVxdWVzdCgpO1xuXG5cdFx0XHRcdFx0dGhpcy5leHRlbmRSZXF1ZXN0KFxuXHRcdFx0XHRcdFx0cGFyZW50TWFwW3BhcmVudElkXSxcblx0XHRcdFx0XHRcdHRoaXMuc2V0UmVxdWVzdFBhcmVudChwYXJlbnRUeXBlLCByZXF1ZXN0UmVzb3VyY2UpID8gK3BhcmVudElkIDogbnVsbCxcblx0XHRcdFx0XHRcdHJlcXVlc3RSZXNvdXJjZVxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHR0aGlzLnJlcXVlc3RzLnB1c2godGhpcy5maW5hbGl6ZVJlcXVlc3QocmVxdWVzdFJlc291cmNlKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yIChjb25zdCBwYXJlbnRUeXBlIGluIGNvbXBpbGF0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IHBhcmVudE1hcCA9IGNvbXBpbGF0aW9uW3BhcmVudFR5cGVdO1xuXHRcdFx0XHRjb25zdCByZXF1ZXN0UmVzb3VyY2UgPSB0aGlzLmluaXRpYWxpemVSZXF1ZXN0KCk7XG5cdFx0XHRcdGNvbnN0IGhhc1BhcmVudCA9IHRoaXMuc2V0UmVxdWVzdFBhcmVudChwYXJlbnRUeXBlLCByZXF1ZXN0UmVzb3VyY2UpO1xuXG5cdFx0XHRcdGxldCB2YWxpZFJlcXVlc3QgPSBmYWxzZTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHBhcmVudE1hcCkge1xuXHRcdFx0XHRcdGlmICh0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudElkKSlcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdFx0dGhpcy5leHRlbmRSZXF1ZXN0KFxuXHRcdFx0XHRcdFx0cGFyZW50TWFwW3BhcmVudElkXSxcblx0XHRcdFx0XHRcdGhhc1BhcmVudCA/ICtwYXJlbnRJZCA6IG51bGwsXG5cdFx0XHRcdFx0XHRyZXF1ZXN0UmVzb3VyY2Vcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0dmFsaWRSZXF1ZXN0ID0gdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh2YWxpZFJlcXVlc3QpXG5cdFx0XHRcdFx0dGhpcy5yZXF1ZXN0cy5wdXNoKHRoaXMuZmluYWxpemVSZXF1ZXN0KHJlcXVlc3RSZXNvdXJjZSkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnJlcXVlc3RzO1xuXHR9XG5cblx0aW5pdGlhbGl6ZVJlcXVlc3QgKCk6IENyZWF0ZVJlcXVlc3RFbnRyeSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHJlcXVlc3Q6IHtcblx0XHRcdFx0cmVxdWVzdFR5cGU6ICdjcmVhdGUnLFxuXHRcdFx0XHRpdGVtczoge30sXG5cdFx0XHRcdGNvbHVtbnM6IHt9XG5cdFx0XHR9LFxuXHRcdFx0Y29sdW1uczogdGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoKSxcblx0XHRcdGl0ZW1zOiB7fSxcblx0XHRcdGNvbGxlY3Rpb25zOiB0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRcdFt0aGlzLmxvY2FsQ29sbGVjdGlvbkNhY2hlLCB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmVudHJpZXNdLFxuXHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRmYWxzZVxuXHRcdFx0KVxuXHRcdH07XG5cdH1cblxuXHRwcml2YXRlIGV4dGVuZFJlcXVlc3QgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlNYXAsIHJlcXVlc3RQYXJlbnRJZDogSXRlbUlkIHwgbnVsbCwgZGVzdGluYXRpb246IENyZWF0ZVJlcXVlc3RFbnRyeSkge1xuXHRcdGNvbnN0IHJlcXVlc3QgPSBkZXN0aW5hdGlvbi5yZXF1ZXN0O1xuXHRcdGNvbnN0IGl0ZW1FbnRyeU1hcCA9IGRlc3RpbmF0aW9uLml0ZW1zO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBpdGVtRW50cmllcykge1xuXHRcdFx0aWYgKHJlcXVlc3QuaXRlbVR5cGUgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0cmVxdWVzdC5pdGVtVHlwZSA9IGl0ZW1UeXBlO1xuXG5cdFx0XHRpZiAoaXRlbUVudHJ5TWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV0gPSB7fTtcblx0XHRcdFx0cmVxdWVzdC5pdGVtc1tpdGVtVHlwZV0gPSB7fTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbUVudHJpZXNbaXRlbVR5cGVdKSB7XG5cdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGl0ZW1FbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXHRcdFx0XHRjb25zdCBjaGlsZEVudHJpZXMgPSBnZXRQYXRoKHRoaXMuY29tcGlsYXRpb24sIFtpdGVtVHlwZSwgaXRlbUlkXSk7XG5cdFx0XHRcdGNvbnN0IGl0ZW1SZXF1ZXN0OiBhbnkgPSByZXF1ZXN0Lml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdID0ge307XG5cdFx0XHRcdGNvbnN0IHBhcmFtZXRlcnMgPSBnZXRQYXRoKHRoaXMucGFyYW1ldGVyTWFwLCBbaXRlbVR5cGUsIGl0ZW1JZF0pO1xuXG5cdFx0XHRcdGlmIChyZXF1ZXN0UGFyZW50SWQgIT09IG51bGwpXG5cdFx0XHRcdFx0KDx7W2l0ZW1JZDogc3RyaW5nXTogSXRlbUlkfT4gcmVxdWVzdC5wYXJlbnRJZClbaXRlbUlkXSA9IHJlcXVlc3RQYXJlbnRJZDtcblxuXHRcdFx0XHRkZXN0aW5hdGlvbi5jb2x1bW5zLmV4cGFuZChpdGVtRW50cnkuY29sdW1ucyk7XG5cdFx0XHRcdGRlc3RpbmF0aW9uLmNvbGxlY3Rpb25zLmV4cGFuZChpdGVtRW50cnkpO1xuXG5cdFx0XHRcdGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV1baXRlbUlkXSA9IGl0ZW1FbnRyeTtcblxuXHRcdFx0XHRpdGVtUmVxdWVzdC52YWx1ZXMgPSBpdGVtRW50cnkuZm9ybWF0UmVxdWVzdCgpO1xuXHRcdFx0XHRpdGVtUmVxdWVzdC5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcblxuXHRcdFx0XHRpZiAoY2hpbGRFbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0Y29uc3QgbGlua3M6IHtbaXRlbVR5cGU6IHN0cmluZ106IEl0ZW1JZFtdfSA9IGl0ZW1SZXF1ZXN0LmxpbmtzID0ge307XG5cblx0XHRcdFx0Zm9yIChjb25zdCBjaGlsZFR5cGUgaW4gY2hpbGRFbnRyaWVzKSB7XG5cdFx0XHRcdFx0bGlua3NbY2hpbGRUeXBlXSA9IFtdO1xuXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBjaGlsZElkIGluIGNoaWxkRW50cmllc1tjaGlsZFR5cGVdKVxuXHRcdFx0XHRcdFx0bGlua3NbY2hpbGRUeXBlXS5wdXNoKHBhcnNlSW50KGNoaWxkSWQsIDEwKSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLmV4dGVuZFJlcXVlc3QoY2hpbGRFbnRyaWVzLCBudWxsLCBkZXN0aW5hdGlvbik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG4iLCJpbXBvcnQge1xuXHRDb2xsZWN0aW9uQ2FjaGUsXG5cdENvbGxlY3Rpb25IYW5kbGVyLFxuXHRDb2xsZWN0aW9uTWF0Y2hlcixcblx0Q29sdW1uU2V0LFxuXHRJdGVtQ2FjaGUsXG5cdEl0ZW1IYW5kbGVyLFxuXHRJdGVtUmVxdWVzdFNlcnZpY2UsXG5cdEtleVNlcnZpY2UsXG5cdExvY2FsQ2FjaGUsIE1vZHVsZUNoYW5nZXNDb21waWxhdGlvblJlc3VsdCxcblx0UXVlcnlTZXJ2aWNlXG59IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHtcblx0Q29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxuXHRDb2x1bW5TZXRGYWN0b3J5LFxuXHRMb2NhbENhY2hlRmFjdG9yeSxcblx0TW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeVxufSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHtcblx0QXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdEF1dGhJbnRlcmZhY2UsXG5cdEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0TG9jYWxDYWNoZU1hbmFnZXJJbnRlcmZhY2UsXG5cdFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlXG59IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHtcblx0Q29sbGVjdGlvbkVkaXRSZXNvdXJjZSxcblx0Q29sbGVjdGlvbkVudHJ5LFxuXHRDb2xsZWN0aW9uRW50cnlPcHRpb25zLFxuXHRDb2xsZWN0aW9uUmVzb3VyY2UsXG5cdENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnMsXG5cdENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UsIENvbGxlY3Rpb25WaWV3UmVzb3VyY2UsXG5cdEVkaXRSZXNvdXJjZSxcblx0SXRlbUVudHJ5LFxuXHRJdGVtRW50cnlPcHRpb25zLFxuXHRJdGVtUmVzb3VyY2UsIEl0ZW1SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UsIFZpZXdSZXNvdXJjZVxufSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtcblx0QXBpUXVlcnksXG5cdENvbGxlY3Rpb25EZWZpbml0aW9uLFxuXHRDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCxcblx0Q29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2UsXG5cdENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwLCBDb252ZXJzaW9uTWFwLFxuXHRDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwLFxuXHRJdGVtSWQsXG5cdEl0ZW1JZENvbnZlcnNpb25NYXAsXG5cdEl0ZW1PcHRpb25zSW50ZXJmYWNlLFxuXHRJdGVtUmVzb3VyY2VzSXRlbVR5cGVNYXAsXG5cdEl0ZW1UeXBlLCBMaW5rQ29sbGVjdGlvbkRlZmluaXRpb24sXG5cdExpbmtlZEl0ZW1FbnRyeU1hcCxcblx0TG9jYWxDYWNoZUNhbGxiYWNrQ29uZGl0aW9uLFxuXHRPblNhdmVDYWxsYmFjayxcblx0UHJvbWlzZUludGVyZmFjZSxcblx0U3RhdGVLZXlUeXBlLFxuXHRUZW1wbGF0ZUl0ZW1FbnRyeU1hcFxufSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IGNyZWF0ZVBhdGggfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgY2xhc3MgSXRlbUFkbWluaXN0cmF0b3Ige1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBhdXRoSW50ZXJmYWNlOiBBdXRoSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5OiBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBpdGVtUmVxdWVzdFNlcnZpY2U6IEl0ZW1SZXF1ZXN0U2VydmljZSxcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBsb2NhbENhY2hlRmFjdG9yeTogTG9jYWxDYWNoZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBsb2NhbENhY2hlTWFuYWdlcjogTG9jYWxDYWNoZU1hbmFnZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBtb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5OiBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgcHJvbWlzZUludGVyZmFjZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZVxuXHQpIHtcblxuXHR9XG5cblx0aW52YWxpZGF0ZUNhY2hlICgpOiB2b2lkIHtcblx0XHQvLyB0aGUgaXRlbUhhbmRsZXIgY2FjaGUgb25seSBjb250YWlucyByZW1vdGUgZW50cmllc1xuXHRcdHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5mb3JFYWNoKFxuXHRcdFx0aXRlbUVudHJ5ID0+IGl0ZW1FbnRyeS5xdWV1ZVJlbG9hZCgpXG5cdFx0KTtcblxuXHRcdC8vIHF1ZXVlUmVsb2FkIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkIGZvciBlYWNoIGluZGl2aWR1YWwgaXRlbVxuXHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZW50cmllcy5mb3JFYWNoKFxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5ID0+IGNvbGxlY3Rpb25FbnRyeS5xdWV1ZVJlbG9hZCgpXG5cdFx0KTtcblx0fVxuXG5cdGdldENvbGxlY3Rpb25NYXRjaGVyIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGFkZFRvVGFiOiBib29sZWFuID0gdHJ1ZSk6IENvbGxlY3Rpb25NYXRjaGVyIHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cdFx0Y29uc3QgY29sbGVjdGlvbk1hdGNoZXIgPSB0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QoW2xvY2FsQ2FjaGUuY29sbGVjdGlvbnNdLCBmYWxzZSwgdHJ1ZSk7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0Ly8gdGhpcyBpcyBvbmx5IHJlbGV2YW50IGlmIHRoZXJlIGFyZSBubyBjb2xsZWN0aW9ucyB0byBhZGQgdGhlIGl0ZW0gdG8sIGJ1dCB3ZSBzdGlsbCB3YW50IHRvIHNhdmUgdGhlIGl0ZW1cblx0XHRcdGlmIChhZGRUb1RhYilcblx0XHRcdFx0bG9jYWxDYWNoZS5pdGVtcy5hZGQoaXRlbUVudHJ5KTtcblxuXHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIuZXhwYW5kKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbGxlY3Rpb25NYXRjaGVyO1xuXHR9XG5cblx0ZmV0Y2hUaXRsZSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCwgZGVmZXJSZXF1ZXN0PzogYm9vbGVhbik6IFByb21pc2VJbnRlcmZhY2U8c3RyaW5nPiB7XG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZmV0Y2hUaXRsZShpdGVtVHlwZSwgaXRlbUlkLCBkZWZlclJlcXVlc3QsIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLml0ZW1zKTtcblx0fVxuXG5cdGdldEl0ZW1CeUlkIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUlkOiBJdGVtSWQsXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgPSB7fSxcblx0XHRpc1Jvb3Q/OiBib29sZWFuXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8SXRlbVJlc291cmNlPiB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZmV0Y2hJdGVtKFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRpdGVtSWQsXG5cdFx0XHRuZXcgSXRlbUVudHJ5T3B0aW9ucyhvcHRpb25zKSxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXNcblx0XHQpLnRoZW4oXG5cdFx0XHQoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlSXRlbVJlc291cmNlKGl0ZW1FbnRyeSwgb3B0aW9ucywgaXNSb290KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0SXRlbXNCeUlkIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUlkczogSXRlbUlkW10sXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgPSB7fVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1SZXNvdXJjZVtdPiB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZmV0Y2hJdGVtcyhcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkcyxcblx0XHRcdG5ldyBJdGVtRW50cnlPcHRpb25zKG9wdGlvbnMpLFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtc1xuXHRcdCkudGhlbihcblx0XHRcdChpdGVtRW50cmllczogSXRlbUVudHJ5W10pID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlSXRlbVJlc291cmNlcyhpdGVtRW50cmllcywgb3B0aW9ucyk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldEl0ZW1zQnlRdWVyeSAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHF1ZXJ5OiBBcGlRdWVyeSxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0OiB0cnVlfVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEVkaXRSZXNvdXJjZVtdPjtcblxuXHRnZXRJdGVtc0J5UXVlcnkgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRxdWVyeTogQXBpUXVlcnksXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2Vcblx0KTogUHJvbWlzZUludGVyZmFjZTxWaWV3UmVzb3VyY2VbXT47XG5cblx0Z2V0SXRlbXNCeVF1ZXJ5IChpdGVtVHlwZTogSXRlbVR5cGUsIHF1ZXJ5OiBBcGlRdWVyeSwgb3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgPSB7fSkge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblx0XHRjb25zdCBlbnRyeU9wdGlvbnMgPSBuZXcgSXRlbUVudHJ5T3B0aW9ucyhvcHRpb25zKTtcblxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5hZGRQYXJlbnRDb25kaXRpb24ocXVlcnksIGVudHJ5T3B0aW9ucy5wYXJlbnQpLFxuXHRcdFx0e1tpdGVtVHlwZV06IGVudHJ5T3B0aW9ucy5jb2x1bW5zfVxuXHRcdCkudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NSZXNwb25zZShcblx0XHRcdFx0XHRyZXNwb25zZSxcblx0XHRcdFx0XHRyZXNwb25zZS5saW5rc1tpdGVtVHlwZV0sXG5cdFx0XHRcdFx0ZW50cnlPcHRpb25zLnBhcmVudCxcblx0XHRcdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCBlbnRyeU9wdGlvbnMuY29sdW1ucywgcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCkpXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0KGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVJdGVtUmVzb3VyY2VzKGl0ZW1FbnRyaWVzLCBvcHRpb25zKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0TmV3UmVzb3VyY2UgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSxcblx0XHRyZXR1cm5MaW5rczogdHJ1ZSxcblx0XHRpc1Jvb3Q/OiBib29sZWFuXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8e21haW46IEVkaXRSZXNvdXJjZSwgbGlua2VkOiBJdGVtUmVzb3VyY2VzSXRlbVR5cGVNYXB9PjtcblxuXHRnZXROZXdSZXNvdXJjZSAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlLFxuXHRcdHJldHVybkxpbmtzPzogYm9vbGVhbixcblx0XHRpc1Jvb3Q/OiBib29sZWFuXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8RWRpdFJlc291cmNlPjtcblxuXHRnZXROZXdSZXNvdXJjZSAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlID0ge30sXG5cdFx0cmV0dXJuTGlua3M6IGJvb2xlYW4gPSBmYWxzZSxcblx0XHRpc1Jvb3Q/OiBib29sZWFuXG5cdCkge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblxuXHRcdG9wdGlvbnMuZWRpdCA9IHRydWU7XG5cblx0XHRyZXR1cm4gdGhpcy5pdGVtSGFuZGxlci5mZXRjaE5ld0l0ZW0oXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdG5ldyBJdGVtRW50cnlPcHRpb25zKG9wdGlvbnMpLFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtc1xuXHRcdCkudGhlbihcblx0XHRcdChpdGVtRW50cnlSZXNvdXJjZTogVGVtcGxhdGVJdGVtRW50cnlNYXApID0+IHtcblx0XHRcdFx0Y29uc3QgbWFpbiA9IGxvY2FsQ2FjaGUuY3JlYXRlSXRlbVJlc291cmNlKGl0ZW1FbnRyeVJlc291cmNlLm1haW4sIG9wdGlvbnMsIGlzUm9vdCwgdHJ1ZSk7XG5cdFx0XHRcdGNvbnN0IGxpbmtlZCA9IHRoaXMucHJvY2Vzc0xpbmtlZEl0ZW1zKGl0ZW1FbnRyeVJlc291cmNlLmxpbmtlZCwgb3B0aW9ucywgdHJ1ZSk7IC8vIGRvIHRoaXMgYmVmb3JlaGFuZFxuXG5cdFx0XHRcdGlmICghcmV0dXJuTGlua3MpXG5cdFx0XHRcdFx0cmV0dXJuIG1haW47XG5cblx0XHRcdFx0cmV0dXJuIHttYWluOiBtYWluLCBsaW5rZWQ6IGxpbmtlZH07XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldER1cGxpY2F0ZUJ5SWQgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRkdXBsaWNhdGVJZDogSXRlbUlkLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlICYge2VkaXQ6IHRydWV9LFxuXHRcdHJldHVybkxpbmtzPzogYm9vbGVhbixcblx0XHRpc1Jvb3Q/OiBib29sZWFuXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8RWRpdFJlc291cmNlPjtcblxuXHRnZXREdXBsaWNhdGVCeUlkIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0ZHVwbGljYXRlSWQ6IEl0ZW1JZCxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSxcblx0XHRyZXR1cm5MaW5rcz86IGJvb2xlYW4sXG5cdFx0aXNSb290PzogYm9vbGVhblxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPFZpZXdSZXNvdXJjZT47XG5cblx0Z2V0RHVwbGljYXRlQnlJZCAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGR1cGxpY2F0ZUlkOiBJdGVtSWQsXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgPSB7fSxcblx0XHRyZXR1cm5MaW5rcz86IGJvb2xlYW4sXG5cdFx0aXNSb290PzogYm9vbGVhblxuXHQpIHtcblx0XHRvcHRpb25zLmlzRHVwbGljYXRlID0gdHJ1ZTtcblxuXHRcdGlmIChvcHRpb25zLnRlbXBsYXRlT3B0aW9ucyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0b3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMgPSB7fTtcblxuXHRcdGlmIChvcHRpb25zLnRlbXBsYXRlT3B0aW9ucy5pdGVtID09PSB1bmRlZmluZWQpXG5cdFx0XHRvcHRpb25zLnRlbXBsYXRlT3B0aW9ucy5pdGVtID0gZHVwbGljYXRlSWQ7XG5cblx0XHRyZXR1cm4gdGhpcy5nZXROZXdSZXNvdXJjZShpdGVtVHlwZSwgb3B0aW9ucywgcmV0dXJuTGlua3MsIGlzUm9vdCk7XG5cdH1cblxuXHRnZXRJdGVtQnlTdGF0ZSAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHN0YXRlS2V5OiBJdGVtSWQgfCBzdHJpbmcsXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdDogdHJ1ZX0sXG5cdFx0aXNSb290PzogYm9vbGVhblxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEVkaXRSZXNvdXJjZT47XG5cblx0Z2V0SXRlbUJ5U3RhdGUgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRzdGF0ZUtleTogSXRlbUlkIHwgc3RyaW5nLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlLFxuXHRcdGlzUm9vdD86IGJvb2xlYW5cblx0KTogUHJvbWlzZUludGVyZmFjZTxWaWV3UmVzb3VyY2U+O1xuXG5cdC8vIHN0YXRlS2V5IGNhbiBiZSBhIGtleXdvcmQgb3IgYSBsb2NhbCBpZCAoaW4gY2FzZSBvZiBhIHJlZnJlc2gpXG5cdGdldEl0ZW1CeVN0YXRlIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0c3RhdGVLZXk6IEl0ZW1JZCB8IHN0cmluZyxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSA9IHt9LFxuXHRcdGlzUm9vdD86IGJvb2xlYW5cblx0KSB7XG5cdFx0Y29uc3QgcGFyc2VkU3RhdGVLZXkgPSB0aGlzLmtleVNlcnZpY2UucGFyc2VTdGF0ZUtleShzdGF0ZUtleSBhcyBzdHJpbmcpO1xuXG5cdFx0aWYgKHBhcnNlZFN0YXRlS2V5ID09PSBudWxsKSB7XG5cdFx0XHRjb25zdCBpdGVtSWQgPSBzdGF0ZUtleSBhcyBJdGVtSWQ7XG5cblx0XHRcdGlmICghdGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZChpdGVtSWQpIHx8IHRoaXMuZ2V0TG9jYWxDYWNoZSgpLml0ZW1zLmNvbnRhaW5zKGl0ZW1UeXBlLCBpdGVtSWQpKVxuXHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRJdGVtQnlJZChpdGVtVHlwZSwgaXRlbUlkLCBvcHRpb25zLCBpc1Jvb3QpO1xuXHRcdH0gZWxzZSBpZiAocGFyc2VkU3RhdGVLZXkudHlwZSA9PT0gU3RhdGVLZXlUeXBlLkR1cGxpY2F0ZSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0RHVwbGljYXRlQnlJZChcblx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdHBhcnNlZFN0YXRlS2V5Lml0ZW1JZCBhcyBJdGVtSWQsXG5cdFx0XHRcdG9wdGlvbnMsXG5cdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRpc1Jvb3Rcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZ2V0TmV3UmVzb3VyY2UoaXRlbVR5cGUsIG9wdGlvbnMsIGZhbHNlLCBpc1Jvb3QpO1xuXHR9XG5cblx0Z2V0Q29sbGVjdGlvbkRlZiAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZSk6IENvbGxlY3Rpb25EZWZpbml0aW9uIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0aXRlbVR5cGU6IGl0ZW1UeXBlLFxuXHRcdFx0b3B0aW9uczoge1xuXHRcdFx0XHRlbnRyeTogbmV3IENvbGxlY3Rpb25FbnRyeU9wdGlvbnMob3B0aW9ucyksIC8vIHdlIG5lZWQgdGhlIGRlZmF1bHQgY29sdW1uIHZhbHVlXG5cdFx0XHRcdHJlc291cmNlOiBuZXcgQ29sbGVjdGlvblJlc291cmNlT3B0aW9ucyhvcHRpb25zKVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHRnZXRMaW5rQ29sbGVjdGlvbnNEZWYgKFxuXHRcdGxpbmtUeXBlOiBJdGVtVHlwZSxcblx0XHRsaW5rSWRBcnJheTogSXRlbUlkW10gfCAoKCkgPT4gSXRlbUlkW10pLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRsaW5rRmllbGQ6IHN0cmluZyxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZVxuXHQpOiBMaW5rQ29sbGVjdGlvbkRlZmluaXRpb24ge1xuXHRcdHJldHVybiB7XG5cdFx0XHRpdGVtVHlwZTogaXRlbVR5cGUsXG5cdFx0XHRsaW5rVHlwZTogbGlua1R5cGUsXG5cdFx0XHRsaW5rSWRBcnJheTogbGlua0lkQXJyYXksXG5cdFx0XHRsaW5rRmllbGQ6IGxpbmtGaWVsZCxcblx0XHRcdG9wdGlvbnM6IHtcblx0XHRcdFx0ZW50cnk6IG5ldyBDb2xsZWN0aW9uRW50cnlPcHRpb25zKG9wdGlvbnMpLCAvLyB3ZSBuZWVkIHRoZSBkZWZhdWx0IGNvbHVtbiB2YWx1ZVxuXHRcdFx0XHRyZXNvdXJjZTogbmV3IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnMob3B0aW9ucylcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0Z2V0Q29sbGVjdGlvbiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlICYge2VkaXRDb2xsZWN0aW9uOiB0cnVlLCBlZGl0SXRlbXM6IHRydWV9XG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvbkVkaXRSZXNvdXJjZTxFZGl0UmVzb3VyY2U+PjtcblxuXHRnZXRDb2xsZWN0aW9uIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdEl0ZW1zOiB0cnVlfVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8RWRpdFJlc291cmNlPj47XG5cblx0Z2V0Q29sbGVjdGlvbiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlICYge2VkaXRDb2xsZWN0aW9uOiB0cnVlfVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25FZGl0UmVzb3VyY2U+O1xuXG5cdGdldENvbGxlY3Rpb24gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25WaWV3UmVzb3VyY2U+O1xuXG5cdGdldENvbGxlY3Rpb24gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZVxuXHQpIHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5mZXRjaChcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0bmV3IENvbGxlY3Rpb25FbnRyeU9wdGlvbnMob3B0aW9ucyksXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxuXHRcdFx0bG9jYWxDYWNoZS5jb2xsZWN0aW9ucyxcblx0XHRcdGxvY2FsQ2FjaGUuZGVmZXJyZWRDb2xsZWN0aW9uc1xuXHRcdCkudGhlbihcblx0XHRcdGVudHJ5ID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlKGVudHJ5LCBuZXcgQ29sbGVjdGlvblJlc291cmNlT3B0aW9ucyhvcHRpb25zKSk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldENvbGxlY3Rpb25Gcm9tRGVmIChkZWZpbml0aW9uOiBDb2xsZWN0aW9uRGVmaW5pdGlvbik6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvblJlc291cmNlPiB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZmV0Y2goXG5cdFx0XHRkZWZpbml0aW9uLml0ZW1UeXBlLFxuXHRcdFx0ZGVmaW5pdGlvbi5vcHRpb25zLmVudHJ5LFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtcyxcblx0XHRcdGxvY2FsQ2FjaGUuY29sbGVjdGlvbnMsXG5cdFx0XHRsb2NhbENhY2hlLmRlZmVycmVkQ29sbGVjdGlvbnNcblx0XHQpLnRoZW4oXG5cdFx0XHRlbnRyeSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZShlbnRyeSwgZGVmaW5pdGlvbi5vcHRpb25zLnJlc291cmNlKTtcblxuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQGRlcHJlY2F0ZWQsIHVzZSBgcGFyZW50YCBpbiBvcHRpb25zXG5cdCAqL1xuXHRnZXRMaW5rQ29sbGVjdGlvbiAoXG5cdFx0bGlua1R5cGU6IEl0ZW1UeXBlLFxuXHRcdGxpbmtJZDogSXRlbUlkLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZSA9IHt9XG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvblJlc291cmNlPiB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXG5cdFx0b3B0aW9ucy5wYXJlbnQgPSB7aXRlbVR5cGU6IGxpbmtUeXBlLCBpdGVtSWQ6IGxpbmtJZH07XG5cblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5mZXRjaChcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0bmV3IENvbGxlY3Rpb25FbnRyeU9wdGlvbnMob3B0aW9ucyksXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxuXHRcdFx0bG9jYWxDYWNoZS5jb2xsZWN0aW9ucyxcblx0XHRcdGxvY2FsQ2FjaGUuZGVmZXJyZWRDb2xsZWN0aW9uc1xuXHRcdCkudGhlbihcblx0XHRcdChlbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZShlbnRyeSwgb3B0aW9ucyk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldExpbmtDb2xsZWN0aW9ucyAoXG5cdFx0bGlua1R5cGU6IEl0ZW1UeXBlLFxuXHRcdGxpbmtJZEFycmF5OiBJdGVtSWRbXSxcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdEl0ZW1zOiB0cnVlLCBlZGl0Q29sbGVjdGlvbjogdHJ1ZX1cblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcDxDb2xsZWN0aW9uRWRpdFJlc291cmNlPEVkaXRSZXNvdXJjZT4+PjtcblxuXHRnZXRMaW5rQ29sbGVjdGlvbnMgKFxuXHRcdGxpbmtUeXBlOiBJdGVtVHlwZSxcblx0XHRsaW5rSWRBcnJheTogSXRlbUlkW10sXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlICYge2VkaXRDb2xsZWN0aW9uOiB0cnVlfVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwPENvbGxlY3Rpb25FZGl0UmVzb3VyY2U8Vmlld1Jlc291cmNlPj4+O1xuXG5cdGdldExpbmtDb2xsZWN0aW9ucyAoXG5cdFx0bGlua1R5cGU6IEl0ZW1UeXBlLFxuXHRcdGxpbmtJZEFycmF5OiBJdGVtSWRbXSxcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdEl0ZW1zOiB0cnVlfVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwPENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8RWRpdFJlc291cmNlPj4+O1xuXG5cdGdldExpbmtDb2xsZWN0aW9ucyAoXG5cdFx0bGlua1R5cGU6IEl0ZW1UeXBlLFxuXHRcdGxpbmtJZEFycmF5OiBJdGVtSWRbXSxcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2Vcblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcDxDb2xsZWN0aW9uVmlld1Jlc291cmNlPFZpZXdSZXNvdXJjZT4+PjtcblxuXHRnZXRMaW5rQ29sbGVjdGlvbnMgKFxuXHRcdGxpbmtUeXBlOiBJdGVtVHlwZSxcblx0XHRsaW5rSWRBcnJheTogSXRlbUlkW10sXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlXG5cdCkge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmJhdGNoRmV0Y2goXG5cdFx0XHRsaW5rVHlwZSxcblx0XHRcdGxpbmtJZEFycmF5LFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRuZXcgQ29sbGVjdGlvbkVudHJ5T3B0aW9ucyhvcHRpb25zKSxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMsXG5cdFx0XHRsb2NhbENhY2hlLmNvbGxlY3Rpb25zLFxuXHRcdFx0bG9jYWxDYWNoZS5kZWZlcnJlZENvbGxlY3Rpb25zXG5cdFx0KS50aGVuKFxuXHRcdFx0KGNvbGxlY3Rpb25FbnRyaWVzOiBDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2VzKGNvbGxlY3Rpb25FbnRyaWVzLCBvcHRpb25zKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0TGlua0NvbGxlY3Rpb25zRnJvbURlZiAoZGVmaW5pdGlvbjogTGlua0NvbGxlY3Rpb25EZWZpbml0aW9uKTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcD4ge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmJhdGNoRmV0Y2goXG5cdFx0XHRkZWZpbml0aW9uLmxpbmtUeXBlLFxuXHRcdFx0ZGVmaW5pdGlvbi5saW5rSWRBcnJheSxcblx0XHRcdGRlZmluaXRpb24uaXRlbVR5cGUsXG5cdFx0XHRkZWZpbml0aW9uLm9wdGlvbnMuZW50cnksXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxuXHRcdFx0bG9jYWxDYWNoZS5jb2xsZWN0aW9ucyxcblx0XHRcdGxvY2FsQ2FjaGUuZGVmZXJyZWRDb2xsZWN0aW9uc1xuXHRcdCkudGhlbihcblx0XHRcdChjb2xsZWN0aW9uRW50cmllczogQ29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXApID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlcyhcblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cmllcyxcblx0XHRcdFx0XHRkZWZpbml0aW9uLm9wdGlvbnMucmVzb3VyY2Vcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0QWxsTGlua0NvbGxlY3Rpb25zIChcblx0XHRsaW5rVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlICYge2VkaXRJdGVtczogdHJ1ZSwgZWRpdENvbGxlY3Rpb246IHRydWV9XG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA8Q29sbGVjdGlvbkVkaXRSZXNvdXJjZTxFZGl0UmVzb3VyY2U+Pj47XG5cblx0Z2V0QWxsTGlua0NvbGxlY3Rpb25zIChcblx0XHRsaW5rVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlICYge2VkaXRDb2xsZWN0aW9uOiB0cnVlfVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwPENvbGxlY3Rpb25FZGl0UmVzb3VyY2U8Vmlld1Jlc291cmNlPj4+O1xuXG5cdGdldEFsbExpbmtDb2xsZWN0aW9ucyAoXG5cdFx0bGlua1R5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0SXRlbXM6IHRydWV9XG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA8Q29sbGVjdGlvblZpZXdSZXNvdXJjZTxFZGl0UmVzb3VyY2U+Pj47XG5cblx0Z2V0QWxsTGlua0NvbGxlY3Rpb25zIChcblx0XHRsaW5rVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA8Q29sbGVjdGlvblZpZXdSZXNvdXJjZTxWaWV3UmVzb3VyY2U+Pj47XG5cblx0Z2V0QWxsTGlua0NvbGxlY3Rpb25zIChcblx0XHRsaW5rVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA+IHtcblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShsaW5rVHlwZSwge30sIHt9KVxuXHRcdFx0LnRoZW4oXG5cdFx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRMaW5rQ29sbGVjdGlvbnMoXG5cdFx0XHRcdFx0XHRsaW5rVHlwZSxcblx0XHRcdFx0XHRcdHJlc3BvbnNlLmxpbmtzW2xpbmtUeXBlXSxcblx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdFx0b3B0aW9uc1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0KTtcblx0fVxuXG5cdGNsb25lSXRlbSAoXG5cdFx0aXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UsXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdDogdHJ1ZX1cblx0KTogRWRpdFJlc291cmNlO1xuXG5cdGNsb25lSXRlbSAoXG5cdFx0aXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UsXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2Vcblx0KTogVmlld1Jlc291cmNlO1xuXG5cdGNsb25lSXRlbSAoXG5cdFx0aXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UsXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2Vcblx0KSB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkU2luZ2xlSXRlbShpdGVtUmVzb3VyY2UuZW50cnkuY2xvbmUoKSwgb3B0aW9ucywgZmFsc2UpO1xuXHR9XG5cblx0Y2xvbmVDb2xsZWN0aW9uIChcblx0XHRjb2xsZWN0aW9uUmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0SXRlbXM6IHRydWUsIGVkaXRDb2xsZWN0aW9uOiB0cnVlfSxcblx0XHRjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwXG5cdCk6IENvbGxlY3Rpb25FZGl0UmVzb3VyY2U8RWRpdFJlc291cmNlPjtcblxuXHRjbG9uZUNvbGxlY3Rpb24gKFxuXHRcdGNvbGxlY3Rpb25SZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlICYge2VkaXRJdGVtczogdHJ1ZX0sXG5cdFx0Y29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcFxuXHQpOiBDb2xsZWN0aW9uVmlld1Jlc291cmNlPEVkaXRSZXNvdXJjZT47XG5cblx0Y2xvbmVDb2xsZWN0aW9uIChcblx0XHRjb2xsZWN0aW9uUmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0Q29sbGVjdGlvbjogdHJ1ZX0sXG5cdFx0Y29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcFxuXHQpOiBDb2xsZWN0aW9uRWRpdFJlc291cmNlPFZpZXdSZXNvdXJjZT47XG5cblx0Y2xvbmVDb2xsZWN0aW9uIChcblx0XHRjb2xsZWN0aW9uUmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZSxcblx0XHRjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwXG5cdCk6IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8Vmlld1Jlc291cmNlPjtcblxuXHRjbG9uZUNvbGxlY3Rpb24gKFxuXHRcdGNvbGxlY3Rpb25SZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlLFxuXHRcdGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXBcblx0KSB7XG5cdFx0bGV0IHBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cGFyZW50ID0gbnVsbDtcblxuXHRcdHJldHVybiB0aGlzLmFkZENvbGxlY3Rpb24oXG5cdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2UuZW50cnkuY2xvbmUocGFyZW50LCBjb252ZXJzaW9uTWFwKSxcblx0XHRcdG9wdGlvbnNcblx0XHQpO1xuXHR9XG5cblx0c2F2ZUN1cnJlbnRMb2NhbENhY2hlIChcblx0XHRjbG9zZVRhYj86IGJvb2xlYW4sXG5cdFx0cGFyYW1ldGVycz86IENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAsXG5cdFx0YnJlYWt1cEJ5UGFyZW50PzogYm9vbGVhbixcblx0XHRvbkFmdGVyQ3JlYXRlQ2FsbGJhY2s/OiAoY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCkgPT4gdm9pZFxuXHQpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbENhY2hlKCkuc2F2ZShjbG9zZVRhYiwgcGFyYW1ldGVycywgYnJlYWt1cEJ5UGFyZW50LCBvbkFmdGVyQ3JlYXRlQ2FsbGJhY2spO1xuXHR9XG5cblx0Z2V0Q3VycmVudENvbGxlY3Rpb25zICgpOiBDb2xsZWN0aW9uQ2FjaGUge1xuXHRcdHJldHVybiB0aGlzLmdldExvY2FsQ2FjaGUoKS5jb2xsZWN0aW9ucztcblx0fVxuXG5cdGdldEN1cnJlbnRJdGVtcyAoKTogSXRlbUNhY2hlIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbENhY2hlKCkuaXRlbXM7XG5cdH1cblxuXHRnZXRNb2R1bGVDaGFuZ2VzIChsb2NhbENhY2hlOiBMb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCkpOiBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25SZXN1bHQge1xuXHRcdGlmIChsb2NhbENhY2hlLnJvb3RJdGVtID09PSB1bmRlZmluZWQpXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2l0ZW1BZG1pbmlzdHJhdG9yOiBObyByb290IGl0ZW0gZm9yIGxvY2FsIGNhY2hlICcgKyBsb2NhbENhY2hlLmlkKTtcblxuXHRcdHJldHVybiB0aGlzLm1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0bG9jYWxDYWNoZS5yb290SXRlbSxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMsXG5cdFx0XHRsb2NhbENhY2hlLmNvbGxlY3Rpb25zXG5cdFx0KS5wcm9jZXNzKCk7XG5cdH1cblxuXHRhZGRTaW5nbGVJdGVtIChcblx0XHRpdGVtRW50cnk6IEl0ZW1FbnRyeSxcblx0XHRvcHRpb25zOiBJdGVtUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlICYge2VkaXQ6IHRydWV9LFxuXHRcdGlzUm9vdD86IGJvb2xlYW4sXG5cdFx0bG9jYWxDYWNoZT86IExvY2FsQ2FjaGVcblx0KTogRWRpdFJlc291cmNlO1xuXG5cdGFkZFNpbmdsZUl0ZW0gKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5LFxuXHRcdG9wdGlvbnM6IEl0ZW1SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UsXG5cdFx0aXNSb290PzogYm9vbGVhbixcblx0XHRsb2NhbENhY2hlPzogTG9jYWxDYWNoZVxuXHQpOiBWaWV3UmVzb3VyY2U7XG5cblx0YWRkU2luZ2xlSXRlbSAoXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnksXG5cdFx0b3B0aW9uczogSXRlbVJlc291cmNlT3B0aW9uc0ludGVyZmFjZSA9IHt9LFxuXHRcdGlzUm9vdD86IGJvb2xlYW4sXG5cdFx0bG9jYWxDYWNoZTogTG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpXG5cdCkge1xuXHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUl0ZW1SZXNvdXJjZShsb2NhbENhY2hlLml0ZW1zLmFkZChpdGVtRW50cnkpLCBvcHRpb25zLCBpc1Jvb3QpO1xuXHR9XG5cblx0YWRkU2luZ2xlSXRlbXMgKFxuXHRcdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcblx0XHRvcHRpb25zOiBJdGVtUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlICYge2VkaXQ6IHRydWV9XG5cdCk6IEVkaXRSZXNvdXJjZVtdO1xuXG5cdGFkZFNpbmdsZUl0ZW1zIChcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXG5cdFx0b3B0aW9uczogSXRlbVJlc291cmNlT3B0aW9uc0ludGVyZmFjZVxuXHQpOiBWaWV3UmVzb3VyY2VbXTtcblxuXHRhZGRTaW5nbGVJdGVtcyAoXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRcdG9wdGlvbnM6IEl0ZW1SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2Vcblx0KSB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXHRcdGNvbnN0IHJlc3VsdDogSXRlbVJlc291cmNlW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxuXHRcdFx0cmVzdWx0LnB1c2godGhpcy5hZGRTaW5nbGVJdGVtKGl0ZW1FbnRyeSwgb3B0aW9ucywgZmFsc2UsIGxvY2FsQ2FjaGUpKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRhZGRDb2xsZWN0aW9uIChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlICYge2VkaXRDb2xsZWN0aW9uOiB0cnVlLCBlZGl0SXRlbXM6IHRydWV9XG5cdCk6IENvbGxlY3Rpb25FZGl0UmVzb3VyY2U8RWRpdFJlc291cmNlPjtcblxuXHRhZGRDb2xsZWN0aW9uIChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlICYge2VkaXRJdGVtczogdHJ1ZX1cblx0KTogQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxFZGl0UmVzb3VyY2U+O1xuXG5cdGFkZENvbGxlY3Rpb24gKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdENvbGxlY3Rpb246IHRydWV9XG5cdCk6IENvbGxlY3Rpb25FZGl0UmVzb3VyY2U8Vmlld1Jlc291cmNlPjtcblxuXHRhZGRDb2xsZWN0aW9uIChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlXG5cdCk6IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8Vmlld1Jlc291cmNlPjtcblxuXHRhZGRDb2xsZWN0aW9uIChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlXG5cdCkge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblxuXHRcdGxvY2FsQ2FjaGUuY29sbGVjdGlvbnMuYWRkKGNvbGxlY3Rpb25FbnRyeSk7XG5cblx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UoY29sbGVjdGlvbkVudHJ5LCBvcHRpb25zKTtcblx0fVxuXG5cdHByaXZhdGUgY3JlYXRlSXRlbVJlc291cmNlcyAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcblx0XHRvcHRpb25zOiBJdGVtUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlICYge2VkaXQ6IHRydWV9LFxuXHRcdGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGVcblx0KTogRWRpdFJlc291cmNlW107XG5cblx0cHJpdmF0ZSBjcmVhdGVJdGVtUmVzb3VyY2VzIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRcdG9wdGlvbnM6IEl0ZW1SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UsXG5cdFx0bG9jYWxDYWNoZTogTG9jYWxDYWNoZVxuXHQpOiBWaWV3UmVzb3VyY2VbXTtcblxuXHRwcml2YXRlIGNyZWF0ZUl0ZW1SZXNvdXJjZXMgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXG5cdFx0b3B0aW9uczogSXRlbVJlc291cmNlT3B0aW9uc0ludGVyZmFjZSxcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlXG5cdCkge1xuXHRcdGNvbnN0IHJlc3VsdDogSXRlbVJlc291cmNlW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRyZXN1bHQucHVzaChsb2NhbENhY2hlLmNyZWF0ZUl0ZW1SZXNvdXJjZShpdGVtRW50cnksIG9wdGlvbnMpKTtcblxuXHRcdFx0aWYgKGl0ZW1UeXBlID09PSAnUHJvamVjdG5vdGl0aWUnKSB7XG5cdFx0XHRcdGNyZWF0ZVBhdGgoXG5cdFx0XHRcdFx0bG9jYWxDYWNoZS50YWJSZXF1ZXN0UGFyYW1ldGVycyxcblx0XHRcdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcblx0XHRcdFx0XHRbe30sIHtub19ub3RpZmljYXRpb246IHRydWV9XVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRwcm9jZXNzTGlua2VkSXRlbXMgKFxuXHRcdGxpbmtlZEVudHJpZXM6IExpbmtlZEl0ZW1FbnRyeU1hcFtdLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlICYge2VkaXQ6IHRydWV9LFxuXHRcdGFkZFRvQ29sbGVjdGlvbnM6IGJvb2xlYW5cblx0KTogSXRlbVJlc291cmNlc0l0ZW1UeXBlTWFwPEVkaXRSZXNvdXJjZT47XG5cblx0cHJvY2Vzc0xpbmtlZEl0ZW1zIChcblx0XHRsaW5rZWRFbnRyaWVzOiBMaW5rZWRJdGVtRW50cnlNYXBbXSxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSxcblx0XHRhZGRUb0NvbGxlY3Rpb25zOiBib29sZWFuXG5cdCk6IEl0ZW1SZXNvdXJjZXNJdGVtVHlwZU1hcDxWaWV3UmVzb3VyY2U+O1xuXG5cdHByb2Nlc3NMaW5rZWRJdGVtcyAoXG5cdFx0bGlua2VkRW50cmllczogTGlua2VkSXRlbUVudHJ5TWFwW10sXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UsXG5cdFx0YWRkVG9Db2xsZWN0aW9uczogYm9vbGVhbiA9IHRydWVcblx0KSB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXHRcdGNvbnN0IHJlc3VsdDogSXRlbVJlc291cmNlc0l0ZW1UeXBlTWFwID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIGxpbmtlZEVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGl0ZW1UeXBlID0gZW50cnkuaXRlbVR5cGU7XG5cblx0XHRcdHJlc3VsdFtpdGVtVHlwZV0gPSB0aGlzLmNyZWF0ZUl0ZW1SZXNvdXJjZXMoZW50cnkuaXRlbVR5cGUsIGVudHJ5Lml0ZW1FbnRyaWVzLCBvcHRpb25zLCBsb2NhbENhY2hlKTtcblx0XHR9XG5cblx0XHRpZiAoIWFkZFRvQ29sbGVjdGlvbnMpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Ly8gdGhlIGl0ZW1FbnRyaWVzIGFyZSBpbiB0b3AtZG93biBvcmRlciwgc28gY2FsbCBmb3IgZWFjaCBpdGVtIHR5cGUgc2VwYXJhdGVseVxuXHRcdGZvciAoY29uc3QgZW50cnkgb2YgbGlua2VkRW50cmllcylcblx0XHRcdHRoaXMuZ2V0Q29sbGVjdGlvbk1hdGNoZXIoZW50cnkuaXRlbUVudHJpZXMsIGZhbHNlKS5hZGRUb0NvbGxlY3Rpb25zKCk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0ZXhwYW5kUHJvY2Vzc0xpbmtlZEl0ZW1zIChcblx0XHRsaW5rZWRFbnRyaWVzOiBMaW5rZWRJdGVtRW50cnlNYXBbXSxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0OiB0cnVlfVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1SZXNvdXJjZXNJdGVtVHlwZU1hcDxFZGl0UmVzb3VyY2U+PjtcblxuXHRleHBhbmRQcm9jZXNzTGlua2VkSXRlbXMgKFxuXHRcdGxpbmtlZEVudHJpZXM6IExpbmtlZEl0ZW1FbnRyeU1hcFtdLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8SXRlbVJlc291cmNlc0l0ZW1UeXBlTWFwPFZpZXdSZXNvdXJjZT4+O1xuXG5cdGV4cGFuZFByb2Nlc3NMaW5rZWRJdGVtcyAoXG5cdFx0bGlua2VkRW50cmllczogTGlua2VkSXRlbUVudHJ5TWFwW10sXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2Vcblx0KSB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXHRcdGxldCBwcm9taXNlQ2hhaW4gPSB0aGlzLnByb21pc2VJbnRlcmZhY2Uud2hlbih7fSk7XG5cblx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIGxpbmtlZEVudHJpZXMpIHtcblx0XHRcdC8vIHRoZSBpdGVtRW50cmllcyBhcmUgaW4gdG9wLWRvd24gb3JkZXIsIHNvIGNhbGwgZm9yIGVhY2ggaXRlbSB0eXBlIHNlcGFyYXRlbHlcblx0XHRcdHByb21pc2VDaGFpbiA9IHByb21pc2VDaGFpbi50aGVuKFxuXHRcdFx0XHR0aGlzLmNvbnN0cnVjdE9uSXRlbXNFeHBhbmRlZChlbnRyeS5pdGVtVHlwZSwgZW50cnkuaXRlbUVudHJpZXMsIG9wdGlvbnMsIGxvY2FsQ2FjaGUpLFxuXHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHByb21pc2VDaGFpbjtcblx0fVxuXG5cdHByaXZhdGUgY29uc3RydWN0T25JdGVtc0V4cGFuZGVkIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRcdGl0ZW1PcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0OiB0cnVlfSxcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlXG5cdCk6IChkZXN0aW5hdGlvbjogSXRlbVJlc291cmNlc0l0ZW1UeXBlTWFwKSA9PiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1SZXNvdXJjZXNJdGVtVHlwZU1hcDxFZGl0UmVzb3VyY2U+PjtcblxuXHRwcml2YXRlIGNvbnN0cnVjdE9uSXRlbXNFeHBhbmRlZCAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcblx0XHRpdGVtT3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UsXG5cdFx0bG9jYWxDYWNoZTogTG9jYWxDYWNoZVxuXHQpOiAoZGVzdGluYXRpb246IEl0ZW1SZXNvdXJjZXNJdGVtVHlwZU1hcCkgPT4gUHJvbWlzZUludGVyZmFjZTxJdGVtUmVzb3VyY2VzSXRlbVR5cGVNYXA8Vmlld1Jlc291cmNlPj47XG5cblx0cHJpdmF0ZSBjb25zdHJ1Y3RPbkl0ZW1zRXhwYW5kZWQgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXG5cdFx0aXRlbU9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlLFxuXHRcdGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGVcblx0KTogKGRlc3RpbmF0aW9uOiBJdGVtUmVzb3VyY2VzSXRlbVR5cGVNYXApID0+IFByb21pc2VJbnRlcmZhY2U8SXRlbVJlc291cmNlc0l0ZW1UeXBlTWFwPiB7XG5cdFx0cmV0dXJuIGRlc3RpbmF0aW9uID0+IHtcblx0XHRcdHJldHVybiB0aGlzLmV4cGFuZEFkZFRvQ29sbGVjdGlvbnMoaXRlbVR5cGUsIGl0ZW1FbnRyaWVzLCBudWxsLCBsb2NhbENhY2hlKS50aGVuKFxuXHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0ZGVzdGluYXRpb25baXRlbVR5cGVdID0gdGhpcy5jcmVhdGVJdGVtUmVzb3VyY2VzKGl0ZW1UeXBlLCBpdGVtRW50cmllcywgaXRlbU9wdGlvbnMsIGxvY2FsQ2FjaGUpO1xuXG5cdFx0XHRcdFx0cmV0dXJuIGRlc3RpbmF0aW9uO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdCk7XG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgZXhwYW5kQWRkVG9Db2xsZWN0aW9uczxUIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlID0gQ29sbGVjdGlvblZpZXdSZXNvdXJjZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXG5cdFx0cmVzdWx0Q29sbGVjdGlvblJlc291cmNlOiBULFxuXHRcdGxvY2FsQ2FjaGU/OiBMb2NhbENhY2hlXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8VFsnaXRlbXMnXT47XG5cblx0cHJpdmF0ZSBleHBhbmRBZGRUb0NvbGxlY3Rpb25zIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRcdHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZT86IG51bGwsXG5cdFx0bG9jYWxDYWNoZT86IExvY2FsQ2FjaGVcblx0KTogUHJvbWlzZUludGVyZmFjZTxudWxsPjtcblxuXHRwcml2YXRlIGV4cGFuZEFkZFRvQ29sbGVjdGlvbnM8VCBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZSA9IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U+IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRcdHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZT86IFQgfCBudWxsLFxuXHRcdGxvY2FsQ2FjaGU/OiBMb2NhbENhY2hlXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8VFsnaXRlbXMnXSB8IG51bGw+O1xuXG5cdHByaXZhdGUgZXhwYW5kQWRkVG9Db2xsZWN0aW9uczxUIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlID0gQ29sbGVjdGlvblZpZXdSZXNvdXJjZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXG5cdFx0cmVzdWx0Q29sbGVjdGlvblJlc291cmNlOiBUIHwgbnVsbCA9IG51bGwsXG5cdFx0bG9jYWxDYWNoZTogTG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8VFsnaXRlbXMnXSB8IG51bGw+IHtcblx0XHRjb25zdCBjb2xsZWN0aW9uTWF0Y2hlciA9IHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdFtsb2NhbENhY2hlLmNvbGxlY3Rpb25zXSxcblx0XHRcdGZhbHNlLFxuXHRcdFx0ZmFsc2Vcblx0XHQpO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXG5cdFx0XHRjb2xsZWN0aW9uTWF0Y2hlci5leHBhbmQoaXRlbUVudHJ5KTtcblxuXHRcdGNvbnN0IGNvbHVtblN1cGVyc2V0ID0gdGhpcy5nZXRDb2x1bW5TdXBlcnNldChjb2xsZWN0aW9uTWF0Y2hlci5nZXRDb2xsZWN0aW9uc1dpdGhGaXR0aW5nSXRlbXMoKSk7XG5cblx0XHRpZiAoY29sdW1uU3VwZXJzZXQgPT09IG51bGwpXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlSW50ZXJmYWNlLndoZW4oQ29sbGVjdGlvblJlc291cmNlID09PSBudWxsID8gbnVsbCA6IFtdKTtcblxuXHRcdHJldHVybiB0aGlzLml0ZW1IYW5kbGVyLmV4cGFuZExvY2FsRW50cmllcyhcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0aXRlbUVudHJpZXMsXG5cdFx0XHRjb2x1bW5TdXBlcnNldC5yZXF1ZXN0LFxuXHRcdFx0Y29sdW1uU3VwZXJzZXQucmVzcG9uc2UsXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zXG5cdFx0KS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gY29sbGVjdGlvbk1hdGNoZXIuYWRkVG9Db2xsZWN0aW9ucyhyZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2UpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHQvLyB3ZSBjb3VsZCBtb3ZlIHRoaXMgdG8gdGhlIENvbGxlY3Rpb25NYXRjaGVyIGlmIHdlIGVuZm9yY2UgYSBzaW5nbGUgaXRlbSB0eXBlXG5cdHByaXZhdGUgZ2V0Q29sdW1uU3VwZXJzZXQgKGNvbGxlY3Rpb25FbnRyaWVzOiBDb2xsZWN0aW9uRW50cnlbXSk6IENvbHVtblNldCB8IG51bGwge1xuXHRcdGNvbnN0IGNvbHVtblNldElkTWFwOiB7W2NvbHVtblNldElkOiBudW1iZXJdOiBib29sZWFufSA9IHt9O1xuXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyaWVzLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0bGV0IHJlc3VsdCA9IGNvbGxlY3Rpb25FbnRyaWVzWzBdLmNvbHVtbnM7XG5cblx0XHRmb3IgKGxldCBpID0gMTsgaSA8IGNvbGxlY3Rpb25FbnRyaWVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBjb2xsZWN0aW9uRW50cmllc1tpXTtcblx0XHRcdGNvbnN0IGNvbHVtblNldCA9IGNvbGxlY3Rpb25FbnRyeS5jb2x1bW5zO1xuXG5cdFx0XHRpZiAoY29sdW1uU2V0SWRNYXBbY29sdW1uU2V0LmlkXSA9PT0gdHJ1ZSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGNvbHVtblNldElkTWFwW2NvbHVtblNldC5pZF0gPSB0cnVlO1xuXG5cdFx0XHRyZXN1bHQgPSByZXN1bHQubWVyZ2UoY29sdW1uU2V0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0TG9jYWxDYWNoZSAoKTogTG9jYWxDYWNoZSB7XG5cdFx0cmV0dXJuIHRoaXMubG9jYWxDYWNoZU1hbmFnZXIuZ2V0Q3VycmVudExvY2FsQ2FjaGUodGhpcy5hdXRoSW50ZXJmYWNlLmdldFVuaXF1ZVVzZXJJZCgpKTtcblx0fVxuXG5cdHJlc2V0TG9jYWxDYWNoZSAoKSB7XG5cdFx0Y29uc3Qgb2xkTG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmxvY2FsQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xuXG5cdFx0b2xkTG9jYWxDYWNoZS5jbGVhclJlc291cmNlcygpO1xuXG5cdFx0dGhpcy5sb2NhbENhY2hlTWFuYWdlci5zZXRDdXJyZW50TG9jYWxDYWNoZSh0aGlzLmF1dGhJbnRlcmZhY2UuZ2V0VW5pcXVlVXNlcklkKCksIGxvY2FsQ2FjaGUpO1xuXHR9XG5cblx0YWRkVG9Db2xsZWN0aW9ucyAoXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRcdHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlPEVkaXRSZXNvdXJjZT5cblx0KTogRWRpdFJlc291cmNlW107XG5cdGFkZFRvQ29sbGVjdGlvbnMgKFxuXHRcdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcblx0XHRyZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZTxWaWV3UmVzb3VyY2U+XG5cdCk6IFZpZXdSZXNvdXJjZVtdO1xuXHRhZGRUb0NvbGxlY3Rpb25zIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZT86IG51bGwpOiBudWxsO1xuXHRhZGRUb0NvbGxlY3Rpb25zIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZT86IENvbGxlY3Rpb25SZXNvdXJjZSB8IG51bGwpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRDb2xsZWN0aW9uTWF0Y2hlcihpdGVtRW50cmllcykuYWRkVG9Db2xsZWN0aW9ucyhyZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2UpO1xuXHR9XG5cblx0cmVtb3ZlRnJvbUNvbGxlY3Rpb25zPFQgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2UgPSBDb2xsZWN0aW9uVmlld1Jlc291cmNlPiAoXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRcdHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZTogVFxuXHQpOiBUWydpdGVtcyddO1xuXG5cdHJlbW92ZUZyb21Db2xsZWN0aW9ucyAoXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRcdHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZT86IG51bGxcblx0KTogbnVsbDtcblxuXHRyZW1vdmVGcm9tQ29sbGVjdGlvbnM8VCBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZSA9IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U+IChcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXG5cdFx0cmVzdWx0Q29sbGVjdGlvblJlc291cmNlPzogVCB8IG51bGxcblx0KSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0Q29sbGVjdGlvbk1hdGNoZXIoaXRlbUVudHJpZXMsIGZhbHNlKS5yZW1vdmVGcm9tQ29sbGVjdGlvbnMocmVzdWx0Q29sbGVjdGlvblJlc291cmNlKTtcblx0fVxuXG5cdHNhdmVMb2NhbCAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpIHtcblx0XHRjb25zdCBpdGVtRW50cnkgPSBpdGVtUmVzb3VyY2UuZW50cnk7XG5cblx0XHRpdGVtRW50cnkuc2V0RGlzcGxheU5hbWUoKTtcblx0XHR0aGlzLmFkZFRvQ29sbGVjdGlvbnMoW2l0ZW1FbnRyeV0pO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZUludGVyZmFjZS53aGVuKGl0ZW1SZXNvdXJjZSk7XG5cdH1cblxuXHR1cGRhdGVJdGVtSWRNYXAgKGNvbGxlY3Rpb25NYXA6IGFueSwgY29udmVyc2lvbk1hcDogQ29udmVyc2lvbk1hcCk6IHZvaWQge1xuXHRcdGlmIChjb252ZXJzaW9uTWFwID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm47XG5cblx0XHRmb3IgKGNvbnN0IG9sZElkIGluIGNvbnZlcnNpb25NYXApIHtcblx0XHRcdGNvbnN0IG5ld0lkID0gY29udmVyc2lvbk1hcFtvbGRJZF07XG5cblx0XHRcdGlmIChjb2xsZWN0aW9uTWFwW29sZElkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0Y29sbGVjdGlvbk1hcFtuZXdJZF0gPSBjb2xsZWN0aW9uTWFwW29sZElkXTtcblx0XHRcdGRlbGV0ZSBjb2xsZWN0aW9uTWFwW29sZElkXTtcblx0XHR9XG5cdH1cblxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UgKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdHJlc291cmNlT3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0SXRlbXM6IHRydWUsIGVkaXRDb2xsZWN0aW9uOiB0cnVlfVxuXHQpOiBDb2xsZWN0aW9uRWRpdFJlc291cmNlPEVkaXRSZXNvdXJjZT47XG5cblx0Y3JlYXRlQ29sbGVjdGlvblJlc291cmNlIChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRyZXNvdXJjZU9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdEl0ZW1zOiB0cnVlfVxuXHQpOiBDb2xsZWN0aW9uVmlld1Jlc291cmNlPEVkaXRSZXNvdXJjZT47XG5cblx0Y3JlYXRlQ29sbGVjdGlvblJlc291cmNlIChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRyZXNvdXJjZU9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdENvbGxlY3Rpb246IHRydWV9XG5cdCk6IENvbGxlY3Rpb25FZGl0UmVzb3VyY2U8Vmlld1Jlc291cmNlPjtcblxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UgKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdHJlc291cmNlT3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZVxuXHQpOiBDb2xsZWN0aW9uVmlld1Jlc291cmNlPFZpZXdSZXNvdXJjZT47XG5cblx0Y3JlYXRlQ29sbGVjdGlvblJlc291cmNlIChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRyZXNvdXJjZU9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2Vcblx0KTogQ29sbGVjdGlvblJlc291cmNlPEl0ZW1SZXNvdXJjZT4ge1xuXHRcdHJldHVybiB0aGlzLmFkZENvbGxlY3Rpb24oY29sbGVjdGlvbkVudHJ5LCByZXNvdXJjZU9wdGlvbnMpO1xuXHR9XG5cblx0Y3JlYXRlSXRlbVJlc291cmNlIChcblx0XHRpdGVtRW50cnk6IEl0ZW1FbnRyeSxcblx0XHRvcHRpb25zOiBJdGVtUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlICYge2VkaXQ6IHRydWV9LFxuXHRcdGlzUm9vdDogYm9vbGVhblxuXHQpOiBFZGl0UmVzb3VyY2U7XG5cdGNyZWF0ZUl0ZW1SZXNvdXJjZSAoaXRlbUVudHJ5OiBJdGVtRW50cnksIG9wdGlvbnM6IEl0ZW1SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UsIGlzUm9vdDogYm9vbGVhbik6IFZpZXdSZXNvdXJjZTtcblx0Y3JlYXRlSXRlbVJlc291cmNlIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgb3B0aW9uczogSXRlbVJlc291cmNlT3B0aW9uc0ludGVyZmFjZSwgaXNSb290OiBib29sZWFuKTogSXRlbVJlc291cmNlIHtcblx0XHRyZXR1cm4gdGhpcy5hZGRTaW5nbGVJdGVtKGl0ZW1FbnRyeSwgb3B0aW9ucywgaXNSb290KTtcblx0fVxuXG5cdG9uQmVmb3JlU2F2ZSAoa2V5OiBzdHJpbmcsIGNhbGxiYWNrOiAobG9jYWxDYWNoZTogTG9jYWxDYWNoZSkgPT4gYW55LCBjb25kaXRpb24/OiBMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24pIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbENhY2hlKCkub25CZWZvcmVTYXZlKGtleSwgY2FsbGJhY2ssIGNvbmRpdGlvbik7XG5cdH1cblxuXHRvblNhdmVTdWNjZXNzIChrZXk6IHN0cmluZywgY2FsbGJhY2s6IE9uU2F2ZUNhbGxiYWNrLCBjb25kaXRpb24/OiBMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24pIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbENhY2hlKCkub25TYXZlU3VjY2VzcyhrZXksIGNhbGxiYWNrLCBjb25kaXRpb24pO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBRdWVyeU1hdGNoZXJGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uUXVlcnksIEl0ZW1FbnRyeU1hcCwgSXRlbUVudHJ5UGFyZW50SWRNYXAsIEl0ZW1JZCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBJdGVtQ2FjaGUge1xuXHRwcml2YXRlIGVudHJpZXM6IEl0ZW1FbnRyeU1hcCA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3Rvcnlcblx0KSB7XG5cdH1cblxuXHRzb21lIChjYWxsYmFjazogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBib29sZWFuKSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gZW50cmllcykge1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllc1tpdGVtVHlwZV0pIHtcblx0XHRcdFx0aWYgKGNhbGxiYWNrKGVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF0pKVxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGdldEJ5SXRlbVR5cGUgKGl0ZW1UeXBlOiBJdGVtVHlwZSkge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5W10gPSBbXTtcblxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllcylcblx0XHRcdHJlc3VsdC5wdXNoKGVudHJpZXNbaXRlbUlkXSk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0QnlRdWVyeSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBxdWVyeTogQ29sbGVjdGlvblF1ZXJ5KSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xuXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBlbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSBlbnRyaWVzW2l0ZW1JZF07XG5cblx0XHRcdGlmIChpdGVtRW50cnkuaXNEZWZlcnJlZCgpKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0aWYgKHRoaXMubWF0Y2hRdWVyeShpdGVtRW50cnksIHF1ZXJ5KSlcblx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0TG9jYWxCeVF1ZXJ5IChpdGVtVHlwZTogSXRlbVR5cGUsIHF1ZXJ5OiBDb2xsZWN0aW9uUXVlcnkpIHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVtdID0gW107XG5cblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGVudHJpZXNbaXRlbUlkXTtcblxuXHRcdFx0aWYgKCFpdGVtRW50cnkuaXNMb2NhbCgpKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0aWYgKHRoaXMubWF0Y2hRdWVyeShpdGVtRW50cnksIHF1ZXJ5KSlcblx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0QnlQYXJlbnQgKHBhcmVudFR5cGU6IEl0ZW1UeXBlLCBwYXJlbnRJZDogSXRlbUlkLCBpdGVtVHlwZTogSXRlbVR5cGUpIHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVtdID0gW107XG5cblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGVudHJpZXNbaXRlbUlkXTtcblx0XHRcdGNvbnN0IHBhcmVudCA9IGl0ZW1FbnRyeS5wYXJlbnQ7XG5cblx0XHRcdGlmIChwYXJlbnQgPT09IG51bGwpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuXHRcdFx0aWYgKHBhcmVudC5pdGVtVHlwZSA9PT0gcGFyZW50VHlwZSAmJiBwYXJlbnQuaXRlbUlkID09IHBhcmVudElkKVxuXHRcdFx0XHRyZXN1bHQucHVzaChpdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRiYXRjaEdldExvY2FsQnlQYXJlbnQgKFxuXHRcdHBhcmVudFR5cGU6IEl0ZW1UeXBlLFxuXHRcdHBhcmVudElkczogSXRlbUlkW10sXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGFkZGl0aW9uYWxRdWVyeTogYW55XG5cdCk6IEl0ZW1FbnRyeVBhcmVudElkTWFwIHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVBhcmVudElkTWFwID0ge307XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIG9mIHBhcmVudElkcylcblx0XHRcdHJlc3VsdFtwYXJlbnRJZF0gPSBbXTtcblxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllcykge1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gZW50cmllc1tpdGVtSWRdO1xuXHRcdFx0Y29uc3QgcGFyZW50ID0gaXRlbUVudHJ5LnBhcmVudDtcblxuXHRcdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGlmIChwYXJlbnQuaXRlbVR5cGUgIT09IHBhcmVudFR5cGUgfHwgcmVzdWx0W3BhcmVudC5pdGVtSWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAoIWl0ZW1FbnRyeS5pc0xvY2FsKCkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAoYWRkaXRpb25hbFF1ZXJ5ID09PSBudWxsIHx8IHRoaXMubWF0Y2hRdWVyeShpdGVtRW50cnksIGFkZGl0aW9uYWxRdWVyeSkpXG5cdFx0XHRcdHJlc3VsdFtwYXJlbnQuaXRlbUlkXS5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGZvckVhY2ggKGNhbGxiYWNrOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IHZvaWQpIHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBlbnRyaWVzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBlbnRyaWVzW2l0ZW1UeXBlXSlcblx0XHRcdFx0Y2FsbGJhY2soZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXSk7XG5cdFx0fVxuXHR9XG5cblx0dG9BcnJheSAoKSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGVudHJpZXMpIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGVudHJpZXNbaXRlbVR5cGVdKVxuXHRcdFx0XHRyZXN1bHQucHVzaChlbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0YWRkIChpdGVtRW50cnk6IEl0ZW1FbnRyeSk6IEl0ZW1FbnRyeSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcblxuXHRcdGlmIChlbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0ZW50cmllc1tpdGVtVHlwZV0gPSB7fTtcblxuXHRcdHJldHVybiBlbnRyaWVzW2l0ZW1UeXBlXVtpdGVtRW50cnkuaXRlbUlkXSA9IGl0ZW1FbnRyeTtcblx0fVxuXG5cdGdldCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IHN0cmluZyB8IEl0ZW1JZCk6IHVuZGVmaW5lZCB8IEl0ZW1FbnRyeSB7XG5cdFx0cmV0dXJuIHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXTtcblx0fVxuXG5cdC8vIHNob3VsZCBiZSBmYXN0XG5cdGNvbnRhaW5zIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogc3RyaW5nIHwgSXRlbUlkKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZW50cmllc1tpdGVtVHlwZV0gIT09IHVuZGVmaW5lZCAmJiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF0gIT09IHVuZGVmaW5lZDtcblx0fVxuXG5cdHVwZGF0ZUl0ZW1JZCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIG9sZEl0ZW1JZDogc3RyaW5nIHwgSXRlbUlkKTogSXRlbUVudHJ5IHtcblx0XHRjb25zdCBlbnRyeU1hcCA9IHRoaXMuZW50cmllc1tpdGVtRW50cnkuaXRlbVR5cGVdO1xuXG5cdFx0ZGVsZXRlIGVudHJ5TWFwW29sZEl0ZW1JZF07XG5cdFx0cmV0dXJuIGVudHJ5TWFwW2l0ZW1FbnRyeS5pdGVtSWRdID0gaXRlbUVudHJ5O1xuXHR9XG5cblx0Y2xlYXIgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KTogYm9vbGVhbiB7XG5cdFx0aWYgKGl0ZW1FbnRyeSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLmVudHJpZXMgPSB7fTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmNsZWFyQnlJdGVtSWQoaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkKTtcblx0fVxuXG5cdGNsZWFyQnlJdGVtSWQgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQpOiBib29sZWFuIHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcblxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRyZXR1cm4gZGVsZXRlIGVudHJpZXNbaXRlbUlkXTtcblx0fVxuXG5cdG1hdGNoUXVlcnkgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBxdWVyeTogQ29sbGVjdGlvblF1ZXJ5KTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRpdGVtRW50cnkuaXRlbVR5cGUsXG5cdFx0XHRpdGVtRW50cnkuZ2V0RmllbGRzKCksXG5cdFx0XHRpdGVtRW50cnkucGFyZW50XG5cdFx0KS5tYXRjaFF1ZXJ5KHF1ZXJ5Lm9iamVjdCkgPT09IHRydWU7IC8vIFRPRE86IG1heWJlP1xuXHR9XG59XG4iLCJpbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcblxuaW1wb3J0IHsgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQUxMX1BFUk1JU1NJT05TIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IEF1dGhJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEl0ZW1FbnRyeSwgSXRlbUVudHJ5T3B0aW9ucyB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge1xuXHRBcGlSZXNwb25zZSxcblx0RmllbGRNYXAsXG5cdEl0ZW1FcnJvcixcblx0SXRlbUlkLFxuXHRJdGVtSWRDb252ZXJzaW9uTWFwLFxuXHRJdGVtT3B0aW9uc0ludGVyZmFjZSxcblx0SXRlbVR5cGVcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgSXRlbUVudHJ5U2VydmljZSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGF1dGhJbnRlcmZhY2U6IEF1dGhJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlXG5cdCkge1xuXG5cdH1cblxuXHRwcm9jZXNzT3B0aW9ucyAob3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UpOiBJdGVtRW50cnlPcHRpb25zIHtcblx0XHRyZXR1cm4gbmV3IEl0ZW1FbnRyeU9wdGlvbnMob3B0aW9ucyk7XG5cdH1cblxuXHQvLyB0b2RvOiB0cmFuc2xhdGVcblx0Y3JlYXRlVW5mb3VuZFJlbW90ZUl0ZW1FcnJvciAoKTogSXRlbUVycm9yIHtcblx0XHRyZXR1cm4ge21lc3NhZ2U6ICdUaGUgcmVxdWVzdGVkIGl0ZW0gY291bGQgbm90IGJlIGZvdW5kIC8geW91ciBjdXJyZW50IHBlcm1pc3Npb25zIGFyZSBub3Qgc3VmZmljaWVudCd9O1xuXHR9XG5cblx0Y3JlYXRlVW5mb3VuZExvY2FsSXRlbUVycm9yIChpdGVtVHlwZTogSXRlbVR5cGUpIHtcblx0XHRyZXR1cm4ge21lc3NhZ2U6ICdBIGxvY2FsIGl0ZW0gb2YgdHlwZSAnICsgaXRlbVR5cGUgKyAnIGNvdWxkIG5vdCBiZSBmb3VuZCd9O1xuXHR9XG5cblx0Y3JlYXRlTG9jYWxDb252ZXJzaW9uTWFwIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUlkOiBJdGVtSWQsXG5cdFx0ZG9FeHRlbmQ6IGJvb2xlYW4gPSBmYWxzZSxcblx0XHRhcGlSZXNwb25zZTogQXBpUmVzcG9uc2Vcblx0KTogSXRlbUlkQ29udmVyc2lvbk1hcCB7XG5cdFx0Y29uc3QgYXBpSXRlbUlkID0gYXBpUmVzcG9uc2UubGlua3NbaXRlbVR5cGVdWzBdO1xuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUlkQ29udmVyc2lvbk1hcCA9IHt9O1xuXG5cdFx0cmVzdWx0W2l0ZW1UeXBlXSA9IHt9O1xuXHRcdHJlc3VsdFtpdGVtVHlwZV1bYXBpSXRlbUlkXSA9IGl0ZW1JZDtcblxuXHRcdGlmIChkb0V4dGVuZClcblx0XHRcdHRoaXMuZXhwYW5kTG9jYWxDb252ZXJzaW9uTWFwKGl0ZW1UeXBlLCBhcGlJdGVtSWQsIGFwaVJlc3BvbnNlLCByZXN1bHQpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGV4cGFuZExvY2FsQ29udmVyc2lvbk1hcCAoXG5cdFx0cGFyZW50VHlwZTogSXRlbVR5cGUsXG5cdFx0cGFyZW50SWQ6IEl0ZW1JZCxcblx0XHRhcGlSZXNwb25zZTogQXBpUmVzcG9uc2UsXG5cdFx0Y29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcFxuXHQpOiB2b2lkIHtcblx0XHRjb25zdCBsaW5rcyA9IGFwaVJlc3BvbnNlLml0ZW1zW3BhcmVudFR5cGVdW3BhcmVudElkXS5saW5rcztcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gbGlua3MpIHtcblx0XHRcdGNvbnN0IGlkQXJyYXkgPSBsaW5rc1tpdGVtVHlwZV07XG5cblx0XHRcdGlmIChjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXSA9IHt9O1xuXG5cdFx0XHRmb3IgKGNvbnN0IGFwaUl0ZW1JZCBvZiBpZEFycmF5KSB7XG5cdFx0XHRcdGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdW2FwaUl0ZW1JZF0gPSB0aGlzLmtleVNlcnZpY2UuZ2V0TG9jYWxJZCgpO1xuXG5cdFx0XHRcdHRoaXMuZXhwYW5kTG9jYWxDb252ZXJzaW9uTWFwKGl0ZW1UeXBlLCBhcGlJdGVtSWQsIGFwaVJlc3BvbnNlLCBjb252ZXJzaW9uTWFwKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRleHBhbmRDb252ZXJzaW9uTWFwIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCwgbmV3SXRlbUlkPzogSXRlbUlkKTogSXRlbUlkIHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xuXG5cdFx0bGV0IGNvbnZlcnNpb25NYXBFbnRyeTtcblxuXHRcdGlmIChjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0Y29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPSB7fTtcblxuXHRcdGNvbnZlcnNpb25NYXBFbnRyeSA9IGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdO1xuXG5cdFx0aWYgKGNvbnZlcnNpb25NYXBFbnRyeVtpdGVtSWRdICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gY29udmVyc2lvbk1hcEVudHJ5W2l0ZW1JZF07XG5cblx0XHRpZiAobmV3SXRlbUlkID09PSB1bmRlZmluZWQpXG5cdFx0XHRuZXdJdGVtSWQgPSB0aGlzLmtleVNlcnZpY2UuZ2V0TG9jYWxJZCgpO1xuXG5cdFx0cmV0dXJuIGNvbnZlcnNpb25NYXBFbnRyeVtpdGVtSWRdID0gbmV3SXRlbUlkO1xuXHR9XG5cblx0YmF0Y2hFeHBhbmRDb252ZXJzaW9uTWFwIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApOiBJdGVtSWRDb252ZXJzaW9uTWFwIHtcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdHRoaXMuZXhwYW5kQ29udmVyc2lvbk1hcChpdGVtRW50cnksIGNvbnZlcnNpb25NYXApO1xuXG5cdFx0cmV0dXJuIGNvbnZlcnNpb25NYXA7XG5cdH1cblxuXHRnZXRDb252ZXJzaW9uVmFsdWUgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQsIG1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCk6IEl0ZW1JZCB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKG1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRyZXR1cm4gbWFwW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXHR9XG5cblx0YmF0Y2hDbG9uZSAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCBjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwID0ge30pOiBJdGVtRW50cnlbXSB7XG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xuXG5cdFx0Ly8gdGhlIHRoZSBpdGVtcyBtaWdodCByZWZlcmVuY2UgZWFjaCBvdGhlciwgc28gdXBkYXRlIHRoZSBjb252ZXJzaW9uIG1hcCBmaXJzdFxuXHRcdHRoaXMuYmF0Y2hFeHBhbmRDb252ZXJzaW9uTWFwKGl0ZW1FbnRyaWVzLCBjb252ZXJzaW9uTWFwKTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxuXHRcdFx0cmVzdWx0LnB1c2goaXRlbUVudHJ5LmNsb25lKGNvbnZlcnNpb25NYXApKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRnZXRGdWxsTmFtZSAoZmlyc3ROYW1lOiBzdHJpbmcsIGluZml4OiBzdHJpbmcsIGxhc3ROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdHJldHVybiBmaXJzdE5hbWUudHJpbSgpXG5cdFx0XHQuY29uY2F0KCcgJywgaW5maXgpLnRyaW0oKSAvLyBpbmZpeCBjYW4gYmUgYW4gZW1wdHkgc3RyaW5nXG5cdFx0XHQuY29uY2F0KCcgJywgbGFzdE5hbWUpO1xuXHR9XG5cblx0Z2V0VGl0bGVGaWVsZCAoaXRlbVR5cGU6IEl0ZW1UeXBlKTogc3RyaW5nIHtcblx0XHRzd2l0Y2ggKGl0ZW1UeXBlKSB7XG5cdFx0XHRjYXNlICdFeGVtcGxhYXInOlxuXHRcdFx0XHRyZXR1cm4gJ3NlcmllbnVtbWVyJztcblx0XHRcdGNhc2UgJ0ZhY3R1dXInOlxuXHRcdFx0XHRyZXR1cm4gJ251bW1lcic7XG5cdFx0XHRjYXNlICdGaWxlcyc6XG5cdFx0XHRcdHJldHVybiAnZnJpZW5kbHluYW1lJztcblx0XHRcdGNhc2UgJ0Z1bmN0aWUnOlxuXHRcdFx0Y2FzZSAnU3RhbmRhYXJkZnVuY3RpZSc6XG5cdFx0XHRcdHJldHVybiAnbmFhbWludGVybic7XG5cdFx0XHRjYXNlICdWb29ycmFhZG11dGF0aWUnOlxuXHRcdFx0XHRyZXR1cm4gJ29tc2NocmlqdmluZyc7XG5cdFx0XHRjYXNlICdCYXJjb2RlJzpcblx0XHRcdFx0cmV0dXJuICdjb2RlJztcblx0XHRcdGNhc2UgJ0JldGFhbG1pZGRlbCc6XG5cdFx0XHRjYXNlICdCZXRhbGluZ3Njb25kaXRpZSc6XG5cdFx0XHRjYXNlICdCcmllZnBhcGllcic6XG5cdFx0XHRjYXNlICdUYXhDbGFzcyc6XG5cdFx0XHRjYXNlICdUYXhTY2hlbWEnOlxuXHRcdFx0Y2FzZSAnQ29uZGl0aW9uJzpcblx0XHRcdGNhc2UgJ0ZhY3R1dXJtb21lbnQnOlxuXHRcdFx0Y2FzZSAnRnVuY3RpZWdyb2VwJzpcblx0XHRcdGNhc2UgJ0dyb290Ym9layc6XG5cdFx0XHRjYXNlICdJbmh1dXInOlxuXHRcdFx0Y2FzZSAnSW5odXVyZ3JvZXAnOlxuXHRcdFx0Y2FzZSAnSW5odXVybWF0ZXJpYWFsJzpcblx0XHRcdGNhc2UgJ01hdGVyaWFhbCc6XG5cdFx0XHRjYXNlICdNYXRlcmlhYWxDYXQnOlxuXHRcdFx0Y2FzZSAnTWVkZXdlcmtlcnRhcmllZic6XG5cdFx0XHRjYXNlICdOb3RpdGllJzpcblx0XHRcdGNhc2UgJ1BsYW5uaW5nbWF0ZXJpYWFsJzpcblx0XHRcdGNhc2UgJ1Byb2plY3QnOlxuXHRcdFx0Y2FzZSAnU3RhZmZlbGdyb2VwJzpcblx0XHRcdGNhc2UgJ1N1YnByb2plY3QnOlxuXHRcdFx0Y2FzZSAnVGFhayc6XG5cdFx0XHRjYXNlICdUYWcnOlxuXHRcdFx0Y2FzZSAnVGVtcGxhdGUnOlxuXHRcdFx0Y2FzZSAnVGlqZCc6XG5cdFx0XHRjYXNlICdUaXRlbCc6XG5cdFx0XHRjYXNlICdUeXBlJzpcblx0XHRcdGNhc2UgJ1ZvZXJ0dWlnJzpcblx0XHRcdFx0cmV0dXJuICduYWFtJztcblx0XHRcdC8vIGNhc2UgJ0NvbnRhY3QnOlxuXHRcdFx0Ly8gY2FzZSAnTWVkZXdlcmtlcic6XG5cdFx0XHQvLyBjYXNlICdQZXJzb24nOlxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0Ly8gb25seSB1c2UgZGlzcGxheW5hbWUgZm9yIGl0ZW1zIHRoYXQgZG9udCd0IGhhdmUgYSBzaW1wbGUsIHdyaXRhYmxlIG5hbWUgZmllbGRcblx0XHRcdFx0Ly8gdGhpcyBmdW5jdGlvbiBpcyBhbHNvIHVzZWQgZm9yIHRlbXBsYXRlZCBpdGVtc1xuXHRcdFx0XHRyZXR1cm4gJ2Rpc3BsYXluYW1lJztcblx0XHR9XG5cdH1cblxuXHQvLyBUT0RPOiB3ZSBjYW4gcmVtb3ZlIHRoZXNlIG9uY2UgYWxsIGNvbHVtbnMgYXJlIHJlc3BlY3RlZCBmb3IgbG9jYWwgaXRlbXMgW1JNNC0xMDM3OF1cblx0Z2V0TG9jYWxEZWZhdWx0VmFsdWVzICgpOiBGaWVsZE1hcCB7XG5cdFx0cmV0dXJuIHtwZXJtaXNzaW9uczogQUxMX1BFUk1JU1NJT05TLCBjcmVhdG9yOiB0aGlzLmF1dGhJbnRlcmZhY2UuZ2V0VXNlcklkKCksIGNyZWF0ZWQ6IG1vbWVudCgpfTtcblx0fVxuXG5cdGhhc0xvY2FsRGVmYXVsdFZhbHVlIChjb2x1bW5JZDogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0c3dpdGNoIChjb2x1bW5JZCkge1xuXHRcdFx0Y2FzZSAncGVybWlzc2lvbnMnOlxuXHRcdFx0Y2FzZSAnY3JlYXRvcic6XG5cdFx0XHRjYXNlICdjcmVhdGVkJzpcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG59XG4iLCJpbXBvcnQge1xuXHRBcGlGb3JtYXR0ZXIsXG5cdEFwaVJlc3BvbnNlUHJvY2Vzc29yLFxuXHRCYXRjaFN0YXR1cyxcblx0Q29sdW1uRXhwYW5zaW9uLFxuXHRDb2x1bW5IYW5kbGVyLFxuXHRDb2x1bW5JbmZvLFxuXHRDb2x1bW5TZXQsXG5cdENvbHVtblN1YnNldENhY2hlLFxuXHRDb2x1bW5VdGlsLFxuXHRJdGVtQ2FjaGUsXG5cdEl0ZW1FbnRyeVNlcnZpY2UsXG5cdEtleVNlcnZpY2Vcbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBFTlRSWV9TVEFUVVMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHtcblx0QmF0Y2hTdGF0dXNGYWN0b3J5LFxuXHRDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRDb2x1bW5TZXRGYWN0b3J5LFxuXHRDb2x1bW5TdWJzZXRDYWNoZUZhY3RvcnksXG5cdEl0ZW1DYWNoZUZhY3RvcnksXG5cdEl0ZW1FbnRyeUZhY3RvcnksXG5cdFRlbXBsYXRlRmFjdG9yeVxufSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEl0ZW1FbnRyeSwgSXRlbUVudHJ5T3B0aW9ucywgVGVtcGxhdGUgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtcblx0QXBpUmVxdWVzdENvbHVtbnMsXG5cdEFwaVJlc3BvbnNlLCBFbnRyeVBhcmVudE51bGwsXG5cdEVudHJ5U3RhdHVzLFxuXHRGaWVsZE1hcCxcblx0SXRlbUlkLFxuXHRJdGVtSWRDb252ZXJzaW9uTWFwLFxuXHRJdGVtVHlwZSxcblx0TGlua2VkSXRlbUVudHJ5TWFwLFxuXHRQcm9taXNlSW50ZXJmYWNlLCBSZXNwb25zZUNvbHVtbk1hcCxcblx0VGVtcGxhdGVJdGVtRW50cnlNYXBcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBnZXRGaXJzdFByb3BlcnR5LCBoYXNQcm9wZXJ0aWVzIH0gZnJvbSAnLi9VdGlsJztcblxuLy8gdG9kbyBtYWtlIGNsYXNzXG5cbmV4cG9ydCBjbGFzcyBJdGVtSGFuZGxlciB7XG5cdGVudHJpZXM6IEl0ZW1DYWNoZTtcblx0dGVtcGxhdGVzOiB7W2l0ZW1UeXBlOiBzdHJpbmddOiBUZW1wbGF0ZX0gPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGJhdGNoU3RhdHVzRmFjdG9yeTogQmF0Y2hTdGF0dXNGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sdW1uU3Vic2V0Q2FjaGVGYWN0b3J5OiBDb2x1bW5TdWJzZXRDYWNoZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsLFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBpdGVtQ2FjaGVGYWN0b3J5OiBJdGVtQ2FjaGVGYWN0b3J5LFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5RmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeSxcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgdGVtcGxhdGVGYWN0b3J5OiBUZW1wbGF0ZUZhY3Rvcnlcblx0KSB7XG5cdFx0dGhpcy5lbnRyaWVzID0gdGhpcy5pdGVtQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xuXHR9XG5cblx0ZmV0Y2hJdGVtIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUlkOiBJdGVtSWQsXG5cdFx0b3B0aW9uczogSXRlbUVudHJ5T3B0aW9ucyxcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8SXRlbUVudHJ5PiB7XG5cdFx0Y29uc3QgZW50cnlTdGF0dXMgPSB0aGlzLmdldEVudHJ5U3RhdHVzKFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRpdGVtSWQsXG5cdFx0XHRvcHRpb25zLnBhcmVudCxcblx0XHRcdG9wdGlvbnMuZGVmZXJSZXF1ZXN0LFxuXHRcdFx0bG9jYWxJdGVtQ2FjaGUsXG5cdFx0XHR0cnVlLFxuXHRcdFx0dGhpcy5jb2x1bW5TdWJzZXRDYWNoZUZhY3RvcnkuY29uc3RydWN0KG9wdGlvbnMuY29sdW1ucylcblx0XHQpO1xuXG5cdFx0aWYgKGVudHJ5U3RhdHVzID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdCh0aGlzLml0ZW1FbnRyeVNlcnZpY2UuY3JlYXRlVW5mb3VuZExvY2FsSXRlbUVycm9yKGl0ZW1UeXBlKSk7XG5cblx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlQ2FjaGVkKGVudHJ5U3RhdHVzLmVudHJ5LCBlbnRyeVN0YXR1cy5zdGF0dXMsIG9wdGlvbnMsIGxvY2FsSXRlbUNhY2hlKTtcblx0fVxuXG5cdGZldGNoTmV3SXRlbSAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnM6IEl0ZW1FbnRyeU9wdGlvbnMsXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPFRlbXBsYXRlSXRlbUVudHJ5TWFwPiB7XG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gbG9jYWxJdGVtQ2FjaGUuYWRkKFxuXHRcdFx0dGhpcy5pdGVtRW50cnlGYWN0b3J5LmNvbnN0cnVjdERlZmVycmVkKFxuXHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0b3B0aW9ucy5pc0R1cGxpY2F0ZSA/IHRoaXMua2V5U2VydmljZS5nZXRMb2NhbER1cGxpY2F0ZUlkKCkgOiB0aGlzLmtleVNlcnZpY2UuZ2V0TG9jYWxJZCgpLFxuXHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRmYWxzZVxuXHRcdFx0KVxuXHRcdCk7XG5cblx0XHRyZXR1cm4gdGhpcy5mZXRjaFRlbXBsYXRlKGl0ZW1UeXBlLCBvcHRpb25zLnRlbXBsYXRlT3B0aW9ucywgb3B0aW9ucy50ZW1wbGF0ZUNvbHVtbnMpLnRoZW4oXG5cdFx0XHR0ZW1wbGF0ZSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnJlc29sdmVMb2NhbChpdGVtRW50cnksIG9wdGlvbnMucGFyZW50LCB0ZW1wbGF0ZSwgbG9jYWxJdGVtQ2FjaGUpO1xuXHRcdFx0fSxcblx0XHRcdGVycm9yID0+IHtcblx0XHRcdFx0aXRlbUVudHJ5LnJlamVjdChlcnJvcik7XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdChlcnJvcik7XG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdGNyZWF0ZUJhdGNoU3RhdHVzIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUlkczogSXRlbUlkW10sXG5cdFx0cGFyZW50OiBFbnRyeVBhcmVudE51bGwsXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRcdGRlZmVyUmVxdWVzdDogYm9vbGVhbixcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlLFxuXHRcdGFkZFRvTG9jYWxDYWNoZTogYm9vbGVhblxuXHQpOiB7YmF0Y2hTdGF0dXM6IEJhdGNoU3RhdHVzPEl0ZW1FbnRyeT4sIHN1Y2Nlc3M6IGJvb2xlYW59IHtcblx0XHRjb25zdCBjb2x1bW5TdWJzZXRDYWNoZTogQ29sdW1uU3Vic2V0Q2FjaGUgPSB0aGlzLmNvbHVtblN1YnNldENhY2hlRmFjdG9yeS5jb25zdHJ1Y3QocmVxdWVzdENvbHVtbnMpO1xuXHRcdGNvbnN0IGJhdGNoU3RhdHVzID0gdGhpcy5iYXRjaFN0YXR1c0ZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHQoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGl0ZW1FbnRyeS5pdGVtSWQsXG5cdFx0XHQoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGl0ZW1FbnRyeS5nZXRQcm9taXNlKClcblx0XHQpO1xuXHRcdGxldCBzdWNjZXNzID0gdHJ1ZTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIG9mIGl0ZW1JZHMpIHtcblx0XHRcdGNvbnN0IGVudHJ5U3RhdHVzID0gdGhpcy5nZXRFbnRyeVN0YXR1cyhcblx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdGl0ZW1JZCxcblx0XHRcdFx0cGFyZW50LFxuXHRcdFx0XHRkZWZlclJlcXVlc3QsXG5cdFx0XHRcdGxvY2FsSXRlbUNhY2hlLFxuXHRcdFx0XHRhZGRUb0xvY2FsQ2FjaGUsXG5cdFx0XHRcdGNvbHVtblN1YnNldENhY2hlXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoZW50cnlTdGF0dXMgPT09IG51bGwpIHtcblx0XHRcdFx0c3VjY2VzcyA9IGZhbHNlO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0YmF0Y2hTdGF0dXMuYWRkKGVudHJ5U3RhdHVzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4ge2JhdGNoU3RhdHVzOiBiYXRjaFN0YXR1cywgc3VjY2Vzczogc3VjY2Vzc307XG5cdH1cblxuXHQvKipcblx0ICogRm9yIGV2ZXJ5IGl0ZW0gSUQgZmluZCB0aGUgc3RhdHVzIG9mIHRoZSBJdGVtRW50cnkgYW5kIHJlc29sdmUgdGhlIHByb21pc2VzIHNvIHRoZSByZXN1bHQgaXNcblx0ICogYSB1c2FibGUgSXRlbUVudHJ5XG5cdCAqL1xuXHRmZXRjaEl0ZW1zIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUlkczogSXRlbUlkW10sXG5cdFx0b3B0aW9uczogSXRlbUVudHJ5T3B0aW9ucyxcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8SXRlbUVudHJ5W10+IHtcblx0XHRjb25zdCBlcnJvckhhbmRsZXIgPSB0aGlzLmVycm9ySGFuZGxlcjtcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IG9wdGlvbnMuY29sdW1ucztcblxuXHRcdGNvbnN0IHtiYXRjaFN0YXR1cywgc3VjY2Vzc30gPSB0aGlzLmNyZWF0ZUJhdGNoU3RhdHVzKFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRpdGVtSWRzLFxuXHRcdFx0b3B0aW9ucy5wYXJlbnQsXG5cdFx0XHRyZXF1ZXN0Q29sdW1ucyxcblx0XHRcdG9wdGlvbnMuZGVmZXJSZXF1ZXN0LFxuXHRcdFx0bG9jYWxJdGVtQ2FjaGUsXG5cdFx0XHR0cnVlXG5cdFx0KTtcblxuXHRcdGxldCByZXNwb25zZVByb21pc2U7XG5cdFx0bGV0IGNvbHVtbnNQcm9taXNlO1xuXG5cdFx0aWYgKGJhdGNoU3RhdHVzLmhhc1JlcXVlc3RzKCkpIHtcblx0XHRcdHJlc3BvbnNlUHJvbWlzZSA9IHRoaXMucmVxdWVzdEl0ZW1zKGl0ZW1UeXBlLCBiYXRjaFN0YXR1cy5nZXRSZXF1ZXN0SWRzKCksIHJlcXVlc3RDb2x1bW5zKTtcblx0XHRcdGNvbHVtbnNQcm9taXNlID0gcmVzcG9uc2VQcm9taXNlLnRoZW4oXG5cdFx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGVycm9yID0+IHtcblx0XHRcdFx0XHQvLyBubyBpdGVtcyB3aWxsIGJlIHJldHVybmVkLCBzbyBjbGVhcmluZyBpcyBzdWZmaWNpZW50IGhlcmVcblx0XHRcdFx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXG5cdFx0XHRcdFx0XHRbRU5UUllfU1RBVFVTLlJFU09MVkVdLFxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5ID0+IHRoaXMuY2xlYXJJdGVtKGl0ZW1FbnRyeSwgbG9jYWxJdGVtQ2FjaGUpXG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdHJldHVybiBlcnJvckhhbmRsZXIucmVqZWN0KGVycm9yKTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9IGVsc2UgaWYgKGJhdGNoU3RhdHVzLmhhc0VudHJpZXMoYmF0Y2hTdGF0dXMubG9jYWxFeHBhbmRTdGF0dXMpKSB7XG5cdFx0XHRyZXNwb25zZVByb21pc2UgPSBudWxsO1xuXHRcdFx0Y29sdW1uc1Byb21pc2UgPSB0aGlzLmNvbHVtbkhhbmRsZXIuZmV0Y2goaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVzcG9uc2VQcm9taXNlID0gbnVsbDtcblx0XHRcdGNvbHVtbnNQcm9taXNlID0gbnVsbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwoXG5cdFx0XHR7XG5cdFx0XHRcdGVudHJpZXM6IGJhdGNoU3RhdHVzLmdldFByb21pc2VzKCksXG5cdFx0XHRcdHJlc3BvbnNlOiByZXNwb25zZVByb21pc2UsXG5cdFx0XHRcdGNvbHVtbnM6IGNvbHVtbnNQcm9taXNlXG5cdFx0XHR9XG5cdFx0KS50aGVuKFxuXHRcdFx0KFxuXHRcdFx0XHRyZXNvbHZlZDoge1xuXHRcdFx0XHRcdGVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRcdFx0XHRcdHJlc3BvbnNlOiBBcGlSZXNwb25zZVByb2Nlc3NvciB8IG51bGwsXG5cdFx0XHRcdFx0Y29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXAgfCBudWxsXG5cdFx0XHRcdH1cblx0XHRcdCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVCYXRjaFJlc3BvbnNlKFxuXHRcdFx0XHRcdGJhdGNoU3RhdHVzLFxuXHRcdFx0XHRcdGxvY2FsSXRlbUNhY2hlLFxuXHRcdFx0XHRcdHJlcXVlc3RDb2x1bW5zLFxuXHRcdFx0XHRcdHJlc29sdmVkLnJlc3BvbnNlLFxuXHRcdFx0XHRcdHJlc29sdmVkLmNvbHVtbnNcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0KHJlc29sdmVkOiBib29sZWFuKSA9PiB7XG5cdFx0XHRcdHJldHVybiByZXNvbHZlZCAmJiBzdWNjZXNzID8gYmF0Y2hTdGF0dXMuZ2V0QXJyYXkoKSA6IGVycm9ySGFuZGxlci5yZWplY3QoKTtcblx0XHRcdH0sXG5cdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGhhbmRsZUJhdGNoUmVzcG9uc2UgKFxuXHRcdGJhdGNoU3RhdHVzOiBCYXRjaFN0YXR1czxJdGVtRW50cnk+LFxuXHRcdGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGUsXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRcdHJlc3BvbnNlOiBBcGlSZXNwb25zZVByb2Nlc3NvciB8IG51bGwsXG5cdFx0cmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcCB8IG51bGwsXG5cdFx0Y29sdW1uRXhwYW5zaW9uPzogQ29sdW1uRXhwYW5zaW9uXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Ym9vbGVhbj4ge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gYmF0Y2hTdGF0dXMuaXRlbVR5cGU7XG5cdFx0Y29uc3QgcmVzb2x2ZVN0YXR1cyA9IFtFTlRSWV9TVEFUVVMuUkVTT0xWRV07XG5cblx0XHRsZXQgc3VjY2VzcyA9IHRydWU7XG5cblx0XHRpZiAoYmF0Y2hTdGF0dXMuaGFzRW50cmllcyhyZXNvbHZlU3RhdHVzKSkge1xuXHRcdFx0Y29uc3QgY29sdW1uSW5mbyA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRyZXF1ZXN0Q29sdW1ucyxcblx0XHRcdFx0PFJlc3BvbnNlQ29sdW1uTWFwPiByZXNwb25zZUNvbHVtbnNcblx0XHRcdCk7XG5cblx0XHRcdGJhdGNoU3RhdHVzLmZvckVhY2hFbnRyeShcblx0XHRcdFx0cmVzb2x2ZVN0YXR1cyxcblx0XHRcdFx0aXRlbUVudHJ5ID0+IHtcblx0XHRcdFx0XHRpZiAoIXRoaXMucmVzb2x2ZVJlbW90ZShpdGVtRW50cnksIGNvbHVtbkluZm8sIDxBcGlSZXNwb25zZVByb2Nlc3Nvcj4gcmVzcG9uc2UsIGxvY2FsSXRlbUNhY2hlKSlcblx0XHRcdFx0XHRcdHN1Y2Nlc3MgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXG5cdFx0XHRbRU5UUllfU1RBVFVTLlJFU09MVkVfVkFMVUVTXSxcblx0XHRcdGl0ZW1FbnRyeSA9PiB7XG5cdFx0XHRcdGlmICghdGhpcy5yZXNvbHZlUmVtb3RlVmFsdWVzKGl0ZW1FbnRyeSwgPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiByZXNwb25zZSkpXG5cdFx0XHRcdFx0c3VjY2VzcyA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRpZiAoYmF0Y2hTdGF0dXMuaGFzRW50cmllcyhiYXRjaFN0YXR1cy5yZW1vdGVFeHBhbmRTdGF0dXMpKSB7XG5cdFx0XHRpZiAoY29sdW1uRXhwYW5zaW9uID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRyZXF1ZXN0Q29sdW1ucyxcblx0XHRcdFx0XHQ8UmVzcG9uc2VDb2x1bW5NYXA+IHJlc3BvbnNlQ29sdW1uc1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXG5cdFx0XHRcdGJhdGNoU3RhdHVzLnJlbW90ZUV4cGFuZFN0YXR1cyxcblx0XHRcdFx0aXRlbUVudHJ5ID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlRXhwYW5zaW9uKFxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRcdFx0PENvbHVtbkV4cGFuc2lvbj4gY29sdW1uRXhwYW5zaW9uLFxuXHRcdFx0XHRcdFx0PEFwaVJlc3BvbnNlUHJvY2Vzc29yPiByZXNwb25zZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0aWYgKGJhdGNoU3RhdHVzLmhhc0VudHJpZXMoYmF0Y2hTdGF0dXMubG9jYWxFeHBhbmRTdGF0dXMpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5leHBhbmRMb2NhbEVudHJpZXMoXG5cdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRiYXRjaFN0YXR1cy5nZXRBcnJheShiYXRjaFN0YXR1cy5sb2NhbEV4cGFuZFN0YXR1cyksXG5cdFx0XHRcdHJlcXVlc3RDb2x1bW5zLFxuXHRcdFx0XHQ8UmVzcG9uc2VDb2x1bW5NYXA+IHJlc3BvbnNlQ29sdW1ucyxcblx0XHRcdFx0bG9jYWxJdGVtQ2FjaGVcblx0XHRcdCkudGhlbihcblx0XHRcdFx0aXRlbUVudHJpZXMgPT4ge1xuXHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LnJlc29sdmUoKTtcblxuXHRcdFx0XHRcdHJldHVybiBzdWNjZXNzO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihzdWNjZXNzKTtcblx0fVxuXG5cdHJlc29sdmVDYWNoZWQgKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5LFxuXHRcdHN0YXR1czogRU5UUllfU1RBVFVTLFxuXHRcdG9wdGlvbnM6IEl0ZW1FbnRyeU9wdGlvbnMsXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1FbnRyeT4ge1xuXHRcdGNvbnN0IHJlamVjdEl0ZW1FbnRyeSA9IChlcnJvcjogYW55KSA9PiB7IGl0ZW1FbnRyeS5yZWplY3QoZXJyb3IpOyB9O1xuXHRcdGxldCBjb2x1bW5EaWZmZXJlbmNlOiBBcGlSZXF1ZXN0Q29sdW1ucztcblxuXHRcdHN3aXRjaCAoc3RhdHVzKSB7XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5MT0NBTDogLy8gaGVyZSBmb3IgY29tcGxldGlvblxuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuQ0FDSEVEOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGl0ZW1FbnRyeSk7XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5QUk9NSVNFRDpcblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5nZXRQcm9taXNlKCk7XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5FWFBBTkQ6XG5cdFx0XHRcdGNvbHVtbkRpZmZlcmVuY2UgPSB0aGlzLmdldENvbHVtbkRpZmZlcmVuY2UoaXRlbUVudHJ5LCBvcHRpb25zLmNvbHVtbnMpO1xuXG5cdFx0XHRcdHRoaXMucmVxdWVzdEl0ZW0oaXRlbUVudHJ5LCBjb2x1bW5EaWZmZXJlbmNlKS50aGVuKFxuXHRcdFx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0XHRcdHRoaXMucmVzb2x2ZUV4cGFuc2lvbihcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRcdFx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5pdGVtVHlwZSxcblx0XHRcdFx0XHRcdFx0XHRjb2x1bW5EaWZmZXJlbmNlLFxuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0cmVqZWN0SXRlbUVudHJ5XG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5nZXRQcm9taXNlKCk7XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5FWFBBTkRfTE9DQUw6XG5cdFx0XHRcdGNvbHVtbkRpZmZlcmVuY2UgPSB0aGlzLmdldENvbHVtbkRpZmZlcmVuY2UoaXRlbUVudHJ5LCBvcHRpb25zLmNvbHVtbnMpO1xuXG5cdFx0XHRcdHRoaXMuY29sdW1uSGFuZGxlci5mZXRjaChpdGVtRW50cnkuaXRlbVR5cGUsIGNvbHVtbkRpZmZlcmVuY2UpLnRoZW4oXG5cdFx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLmV4cGFuZExvY2FsRW50cmllcyhcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5Lml0ZW1UeXBlLFxuXHRcdFx0XHRcdFx0XHRbaXRlbUVudHJ5XSxcblx0XHRcdFx0XHRcdFx0Y29sdW1uRGlmZmVyZW5jZSxcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zLFxuXHRcdFx0XHRcdFx0XHRsb2NhbEl0ZW1DYWNoZVxuXHRcdFx0XHRcdFx0KS50aGVuKFxuXHRcdFx0XHRcdFx0XHQoKSA9PiBpdGVtRW50cnkucmVzb2x2ZSgpLFxuXHRcdFx0XHRcdFx0XHRyZWplY3RJdGVtRW50cnlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRyZWplY3RJdGVtRW50cnlcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmdldFByb21pc2UoKTtcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORDpcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORF9MT0NBTDpcblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5nZXRQcm9taXNlKCkudGhlbihcblx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlQ2FjaGVkKFxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnksXG5cdFx0XHRcdFx0XHRcdHRoaXMuZ2V0Q2FjaGVkRW50cnlTdGF0dXMoXG5cdFx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuY29sdW1uU3Vic2V0Q2FjaGVGYWN0b3J5LmNvbnN0cnVjdChvcHRpb25zLmNvbHVtbnMpXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdG9wdGlvbnMsXG5cdFx0XHRcdFx0XHRcdGxvY2FsSXRlbUNhY2hlXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdCk7XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5SRVNPTFZFX1ZBTFVFUzpcblx0XHRcdFx0dGhpcy5yZXF1ZXN0SXRlbShpdGVtRW50cnkpLnRoZW4oXG5cdFx0XHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5yZXNvbHZlUmVtb3RlVmFsdWVzKGl0ZW1FbnRyeSwgcmVzcG9uc2UpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZXJyb3IgPT4ge1xuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LnJlamVjdChlcnJvcik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnkuZ2V0UHJvbWlzZSgpO1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuUkVTT0xWRTpcblx0XHRcdFx0dGhpcy5yZXF1ZXN0SXRlbShpdGVtRW50cnkpLnRoZW4oXG5cdFx0XHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5yZXNvbHZlUmVtb3RlKFxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnksXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5jb2x1bW5zLnJlc29sdmUocmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCkpLFxuXHRcdFx0XHRcdFx0XHRyZXNwb25zZSxcblx0XHRcdFx0XHRcdFx0bG9jYWxJdGVtQ2FjaGVcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRlcnJvciA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLmNsZWFySXRlbShpdGVtRW50cnksIGxvY2FsSXRlbUNhY2hlKTtcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5yZWplY3QoZXJyb3IpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0KTtcblxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmdldFByb21pc2UoKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGdldENvbHVtbkRpZmZlcmVuY2UgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCByZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMpOiBBcGlSZXF1ZXN0Q29sdW1ucyB7XG5cdFx0cmV0dXJuIHRoaXMuY29sdW1uVXRpbC5tZXJnZVJlcXVlc3RDb2x1bW5zKGl0ZW1FbnRyeS5jb2x1bW5zLnJlcXVlc3QsIHJlcXVlc3RDb2x1bW5zKS5kaWZmZXJlbmNlO1xuXHR9XG5cblx0cmVzb2x2ZUxvY2FsIChcblx0XHRpdGVtRW50cnk6IEl0ZW1FbnRyeSxcblx0XHRwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCxcblx0XHR0ZW1wbGF0ZTogVGVtcGxhdGUsXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZVxuXHQpOiBUZW1wbGF0ZUl0ZW1FbnRyeU1hcCB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcblx0XHRjb25zdCBpdGVtSWRDb252ZXJzaW9uID0gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLmNyZWF0ZUxvY2FsQ29udmVyc2lvbk1hcChpdGVtVHlwZSwgaXRlbUlkLCB0cnVlLCB0ZW1wbGF0ZS5yZXNwb25zZSk7XG5cblx0XHRpdGVtRW50cnkuY29sdW1ucyA9IHRlbXBsYXRlLmNvbHVtbnM7XG5cblx0XHRpZiAocGFyZW50ICE9PSBudWxsKVxuXHRcdFx0aXRlbUVudHJ5LnNldFBhcmVudChwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQpOyAvLyBjcmVhdGUgbmV3IG9iamVjdFxuXG5cdFx0aXRlbUVudHJ5LnNldExvY2FsRmllbGRzKHRlbXBsYXRlLmZpZWxkcywgaXRlbUlkQ29udmVyc2lvbikucmVzb2x2ZSgpO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdG1haW46IGl0ZW1FbnRyeSxcblx0XHRcdGxpbmtlZDogdGhpcy5jcmVhdGVMb2NhbEVudHJpZXMoaXRlbVR5cGUsIGl0ZW1JZCwgdGVtcGxhdGUsIGl0ZW1JZENvbnZlcnNpb24sIGxvY2FsSXRlbUNhY2hlKVxuXHRcdH07XG5cdH1cblxuXHRyZXNvbHZlRXhwYW5zaW9uIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgY29sdW1uRXhwYW5zaW9uOiBDb2x1bW5FeHBhbnNpb24sIHJlc3BvbnNlOiBBcGlSZXNwb25zZSk6IEl0ZW1FbnRyeSB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcblx0XHRjb25zdCBleHBhbnNpb25SZXN1bHQgPSBjb2x1bW5FeHBhbnNpb24ucnVuKGl0ZW1FbnRyeS5jb2x1bW5zKTtcblxuXHRcdC8vIEFub3RoZXIgcmVxdWVzdCBhbHJlYWR5IHJlcXVlc3RlZCB0aGUgY29sdW1ucyB3ZSBuZWVkIGhlcmUsIG5vIG5lZWQgdG8gZXhwYW5kIHRoZSBpdGVtIGFuZCByZXNvbHZlIGl0IChhbHJlYWR5IGRvbmUgYnkgb3RoZXIgcmVxdWVzdClcblx0XHRpZiAoZXhwYW5zaW9uUmVzdWx0ID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIGl0ZW1FbnRyeTtcblxuXHRcdGl0ZW1FbnRyeS5leHBhbmQoXG5cdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKSxcblx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBleHBhbnNpb25SZXN1bHQuZGlmZmVyZW5jZS5yb290KSxcblx0XHRcdGV4cGFuc2lvblJlc3VsdFxuXHRcdCk7XG5cblx0XHRyZXR1cm4gaXRlbUVudHJ5LnJlc29sdmUoKTtcblx0fVxuXG5cdHByaXZhdGUgY2xlYXJJdGVtIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgbG9jYWxDYWNoZTogSXRlbUNhY2hlKTogdm9pZCB7XG5cdFx0dGhpcy5lbnRyaWVzLmNsZWFyKGl0ZW1FbnRyeSk7XG5cdFx0bG9jYWxDYWNoZS5jbGVhcihpdGVtRW50cnkpO1xuXHR9XG5cblx0cHJpdmF0ZSByZXNvbHZlUmVtb3RlIChcblx0XHRpdGVtRW50cnk6IEl0ZW1FbnRyeSxcblx0XHRjb2x1bW5TZXQ6IENvbHVtblNldCxcblx0XHRyZXNwb25zZTogQXBpUmVzcG9uc2UsXG5cdFx0bG9jYWxDYWNoZTogSXRlbUNhY2hlXG5cdCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHJlc3BvbnNlRmllbGRzID0gdGhpcy5nZXRSZXNwb25zZUZpZWxkcyhpdGVtRW50cnksIGNvbHVtblNldCwgcmVzcG9uc2UpO1xuXG5cdFx0aWYgKHJlc3BvbnNlRmllbGRzID09PSBudWxsKSB7XG5cdFx0XHR0aGlzLmNsZWFySXRlbShpdGVtRW50cnksIGxvY2FsQ2FjaGUpO1xuXHRcdFx0aXRlbUVudHJ5LnJlamVjdCgpO1xuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0aXRlbUVudHJ5LnJlc29sdmVEZWZlcnJlZChyZXNwb25zZUZpZWxkcy5pbml0aWFsLCByZXNwb25zZUZpZWxkcy5kZXJpdmVkLCBjb2x1bW5TZXQpO1xuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRwcml2YXRlIHJlc29sdmVSZW1vdGVWYWx1ZXMgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCByZXNwb25zZTogQXBpUmVzcG9uc2UpOiBib29sZWFuIHtcblx0XHRjb25zdCByZXNwb25zZUZpZWxkcyA9IHRoaXMuZ2V0UmVzcG9uc2VGaWVsZHMoaXRlbUVudHJ5LCBpdGVtRW50cnkuY29sdW1ucywgcmVzcG9uc2UpO1xuXG5cdFx0aWYgKHJlc3BvbnNlRmllbGRzID09PSBudWxsKSB7XG5cdFx0XHRpdGVtRW50cnkucmVqZWN0KCk7XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRpdGVtRW50cnkudXBkYXRlRmllbGRzKHJlc3BvbnNlRmllbGRzLmluaXRpYWwsIHJlc3BvbnNlRmllbGRzLmRlcml2ZWQsIGZhbHNlKS5yZXNvbHZlKCk7XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0UmVzcG9uc2VGaWVsZHMgKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5LFxuXHRcdGNvbHVtblNldDogQ29sdW1uU2V0LFxuXHRcdHJlc3BvbnNlOiBBcGlSZXNwb25zZVxuXHQpOiB7aW5pdGlhbDogRmllbGRNYXAsIGRlcml2ZWQ6IEZpZWxkTWFwfSB8IG51bGwge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XG5cdFx0Y29uc3QgaW5pdGlhbCA9IHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXG5cdFx0aWYgKGluaXRpYWwgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGluaXRpYWw6IGluaXRpYWwsXG5cdFx0XHRkZXJpdmVkOiByZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgY29sdW1uU2V0LnJvb3QpXG5cdFx0fTtcblx0fVxuXG5cdGZldGNoVGVtcGxhdGUgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgdGVtcGxhdGVPcHRpb25zOiBhbnkgPSB7fSwgdGVtcGxhdGVDb2x1bW5zOiBhbnkgPSB7fSk6IFByb21pc2VJbnRlcmZhY2U8VGVtcGxhdGU+IHtcblx0XHRjb25zdCBoYXNUZW1wbGF0ZU9wdGlvbnMgPSBoYXNQcm9wZXJ0aWVzKHRlbXBsYXRlT3B0aW9ucyk7XG5cdFx0Y29uc3QgY29sdW1uSXRlbVR5cGUgPSBnZXRGaXJzdFByb3BlcnR5KHRlbXBsYXRlQ29sdW1ucyk7IC8vIGl0J3MgcG9zc2libGUgdG8gYWRkIGNvbHVtbnMgdG8gbGlua2VkIGl0ZW1zXG5cblx0XHRpZiAoIWhhc1RlbXBsYXRlT3B0aW9ucykge1xuXHRcdFx0Y29uc3QgY2FjaGVkVGVtcGxhdGUgPSB0aGlzLnRlbXBsYXRlc1tpdGVtVHlwZV07XG5cblx0XHRcdGlmIChcblx0XHRcdFx0Y2FjaGVkVGVtcGxhdGUgIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0XHQoXG5cdFx0XHRcdFx0Y29sdW1uSXRlbVR5cGUgPT09IG51bGwgfHxcblx0XHRcdFx0XHR0aGlzLmNvbHVtblV0aWwucmVzcG9uc2VDb2x1bW5zQXZhaWxhYmxlKFxuXHRcdFx0XHRcdFx0Y29sdW1uSXRlbVR5cGUsXG5cdFx0XHRcdFx0XHR0ZW1wbGF0ZUNvbHVtbnNbY29sdW1uSXRlbVR5cGVdLFxuXHRcdFx0XHRcdFx0Y2FjaGVkVGVtcGxhdGUucmVzcG9uc2VDb2x1bW5zXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihjYWNoZWRUZW1wbGF0ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKFxuXHRcdFx0e1xuXHRcdFx0XHR0ZW1wbGF0ZTogdGhpcy5hcGlSZXF1ZXN0U2VydmljZS50ZW1wbGF0ZShpdGVtVHlwZSwgdGVtcGxhdGVPcHRpb25zKSxcblx0XHRcdFx0YWRkaXRpb25hbENvbHVtbnM6IGNvbHVtbkl0ZW1UeXBlID09PSBudWxsID9cblx0XHRcdFx0XHR7fSA6XG5cdFx0XHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLmZldGNoKGNvbHVtbkl0ZW1UeXBlLCB0ZW1wbGF0ZUNvbHVtbnNbY29sdW1uSXRlbVR5cGVdKVxuXHRcdFx0fVxuXHRcdCkudGhlbihcblx0XHRcdHJlc29sdmVkID0+IHtcblx0XHRcdFx0Y29uc3QgdGVtcGxhdGVSZXNwb25zZSA9IHJlc29sdmVkLnRlbXBsYXRlO1xuXG5cdFx0XHRcdGNvbnN0IHRlbXBsYXRlID0gdGhpcy50ZW1wbGF0ZUZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCB0ZW1wbGF0ZVJlc3BvbnNlLCByZXNvbHZlZC5hZGRpdGlvbmFsQ29sdW1ucyk7XG5cblx0XHRcdFx0aWYgKCFoYXNUZW1wbGF0ZU9wdGlvbnMgJiYgdGVtcGxhdGVSZXNwb25zZS5jYWNoZWFibGUpXG5cdFx0XHRcdFx0dGhpcy50ZW1wbGF0ZXNbaXRlbVR5cGVdID0gdGVtcGxhdGU7XG5cblx0XHRcdFx0cmV0dXJuIHRlbXBsYXRlO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXRFbnRyeVN0YXR1cyAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1JZDogSXRlbUlkLFxuXHRcdHBhcmVudDogRW50cnlQYXJlbnROdWxsLFxuXHRcdGRlZmVyUmVxdWVzdDogYm9vbGVhbixcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlLFxuXHRcdGFkZFRvTG9jYWxDYWNoZTogYm9vbGVhbixcblx0XHRjb2x1bW5TdWJzZXRDYWNoZTogQ29sdW1uU3Vic2V0Q2FjaGVcblx0KTogRW50cnlTdGF0dXM8SXRlbUVudHJ5PiB8IG51bGwge1xuXHRcdGxldCBpdGVtRW50cnk7XG5cblx0XHRpZiAodGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZChpdGVtSWQpKSB7XG5cdFx0XHRpdGVtRW50cnkgPSBsb2NhbEl0ZW1DYWNoZS5nZXQoaXRlbVR5cGUsIGl0ZW1JZCk7XG5cblx0XHRcdGlmIChpdGVtRW50cnkgIT09IHVuZGVmaW5lZClcblx0XHRcdFx0cmV0dXJuIHtlbnRyeTogaXRlbUVudHJ5LCBzdGF0dXM6IHRoaXMuZ2V0Q2FjaGVkRW50cnlTdGF0dXMoaXRlbUVudHJ5LCBjb2x1bW5TdWJzZXRDYWNoZSl9O1xuXG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRpdGVtRW50cnkgPSB0aGlzLmVudHJpZXMuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXG5cdFx0aWYgKGl0ZW1FbnRyeSAhPT0gdW5kZWZpbmVkKSB7IC8vIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHJlbW90ZSBpdGVtIHRoYXQgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGdsb2JhbCBjYWNoZVxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0ZW50cnk6IGFkZFRvTG9jYWxDYWNoZSA/IGxvY2FsSXRlbUNhY2hlLmFkZChpdGVtRW50cnkpIDogaXRlbUVudHJ5LFxuXHRcdFx0XHRzdGF0dXM6IHRoaXMuZ2V0Q2FjaGVkRW50cnlTdGF0dXMoaXRlbUVudHJ5LCBjb2x1bW5TdWJzZXRDYWNoZSlcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0aXRlbUVudHJ5ID0gdGhpcy5pdGVtRW50cnlGYWN0b3J5LmNvbnN0cnVjdERlZmVycmVkKCAvLyBjcmVhdGUgYSBuZXcgcmVtb3RlIGl0ZW1cblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkLFxuXHRcdFx0Y29sdW1uU3Vic2V0Q2FjaGUucmVxdWVzdENvbHVtbnMsXG5cdFx0XHRkZWZlclJlcXVlc3Rcblx0XHQpO1xuXG5cdFx0aWYgKHBhcmVudCAhPT0gbnVsbClcblx0XHRcdGl0ZW1FbnRyeS5zZXRQYXJlbnQocGFyZW50Lml0ZW1UeXBlLCBwYXJlbnQuaXRlbUlkKTtcblxuXHRcdGlmIChhZGRUb0xvY2FsQ2FjaGUpXG5cdFx0XHRsb2NhbEl0ZW1DYWNoZS5hZGQoaXRlbUVudHJ5KTtcblxuXHRcdHRoaXMuZW50cmllcy5hZGQoaXRlbUVudHJ5KTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRlbnRyeTogaXRlbUVudHJ5LFxuXHRcdFx0c3RhdHVzOiBkZWZlclJlcXVlc3QgPyBFTlRSWV9TVEFUVVMuUFJPTUlTRUQgOiBFTlRSWV9TVEFUVVMuUkVTT0xWRVxuXHRcdH07XG5cdH1cblxuXHRnZXRDYWNoZWRFbnRyeVN0YXR1cyAoaXRlbUVudHJ5OiBJdGVtRW50cnksIGNvbHVtblN1YnNldENhY2hlOiBDb2x1bW5TdWJzZXRDYWNoZSk6IEVOVFJZX1NUQVRVUyB7XG5cdFx0Y29uc3QgY29sdW1uU2V0ID0gaXRlbUVudHJ5LmNvbHVtbnM7XG5cblx0XHRpZiAoaXRlbUVudHJ5LmlzRGVmZXJyZWQoKSkge1xuXHRcdFx0aWYgKGl0ZW1FbnRyeS5kZWZlclJlcXVlc3QpIHtcblx0XHRcdFx0Y29sdW1uU2V0LmV4cGFuZFJlcXVlc3RDb2x1bW5zKGNvbHVtblN1YnNldENhY2hlLnJlcXVlc3RDb2x1bW5zKTtcblxuXHRcdFx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLlJFU09MVkU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjb2x1bW5TdWJzZXRDYWNoZS5ydW4oY29sdW1uU2V0KSlcblx0XHRcdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5QUk9NSVNFRDtcblxuXHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5pc0xvY2FsKCkgPyBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EX0xPQ0FMIDogRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORDtcblx0XHR9XG5cblx0XHRpZiAoIWNvbHVtblN1YnNldENhY2hlLnJ1bihjb2x1bW5TZXQpKSB7XG5cdFx0XHRpdGVtRW50cnkuZGVmZXIoKTtcblxuXHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5pc0xvY2FsKCkgPyBFTlRSWV9TVEFUVVMuRVhQQU5EX0xPQ0FMIDogRU5UUllfU1RBVFVTLkVYUEFORDtcblx0XHR9XG5cblx0XHRpZiAoaXRlbUVudHJ5LnJlbG9hZFF1ZXVlZCkge1xuXHRcdFx0aXRlbUVudHJ5LnJlbG9hZFF1ZXVlZCA9IGZhbHNlO1xuXG5cdFx0XHRpZiAoaXRlbUVudHJ5LmlzTG9jYWwoKSlcblx0XHRcdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5DQUNIRUQ7XG5cblx0XHRcdGl0ZW1FbnRyeS5kZWZlcigpO1xuXG5cdFx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLlJFU09MVkVfVkFMVUVTO1xuXHRcdH1cblxuXHRcdHJldHVybiBFTlRSWV9TVEFUVVMuQ0FDSEVEO1xuXHR9XG5cblx0ZmV0Y2hUaXRsZSAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1JZDogSXRlbUlkLFxuXHRcdGRlZmVyUmVxdWVzdDogYm9vbGVhbiA9IHRydWUsXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPHN0cmluZz4ge1xuXHRcdGNvbnN0IHRpdGxlRmllbGQgPSB0aGlzLml0ZW1FbnRyeVNlcnZpY2UuZ2V0VGl0bGVGaWVsZChpdGVtVHlwZSk7XG5cblx0XHRyZXR1cm4gdGhpcy5mZXRjaEl0ZW0oXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdGl0ZW1JZCxcblx0XHRcdG5ldyBJdGVtRW50cnlPcHRpb25zKHtjb2x1bW5zOiBbdGl0bGVGaWVsZF0sIGRlZmVyUmVxdWVzdDogZGVmZXJSZXF1ZXN0fSksXG5cdFx0XHRsb2NhbEl0ZW1DYWNoZVxuXHRcdCkudGhlbihcblx0XHRcdGl0ZW1FbnRyeSA9PiB7XG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnkuZ2V0RmllbGRzKClbdGl0bGVGaWVsZF07XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGNyZWF0ZUxvY2FsRW50cmllcyAoXG5cdFx0cGFyZW50VHlwZTogSXRlbVR5cGUsXG5cdFx0bG9jYWxQYXJlbnRJZDogSXRlbUlkLFxuXHRcdHRlbXBsYXRlOiBUZW1wbGF0ZSxcblx0XHRpdGVtSWRDb252ZXJzaW9uOiBJdGVtSWRDb252ZXJzaW9uTWFwLFxuXHRcdGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGUsXG5cdFx0ZmlsdGVySXRlbUVudHJ5OiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGJvb2xlYW4gPSAoKSA9PiB0cnVlIC8vIHJldHVybiB0cnVlIHRvIGluY2x1ZGUgaXRlbVxuXHQpOiBMaW5rZWRJdGVtRW50cnlNYXBbXSB7XG5cdFx0Y29uc3QgYXBpUmVzcG9uc2UgPSB0ZW1wbGF0ZS5yZXNwb25zZTtcblx0XHRjb25zdCBpdGVtRW50cnlNYXA6IHtbaXRlbVR5cGU6IHN0cmluZ106IEl0ZW1FbnRyeVtdfSA9IHt9O1xuXHRcdGNvbnN0IGNvbHVtblNldE1hcDoge1tpdGVtVHlwZTogc3RyaW5nXTogQ29sdW1uU2V0fSA9IHt9O1xuXHRcdGNvbnN0IHJlc3VsdDogTGlua2VkSXRlbUVudHJ5TWFwW10gPSBbXTtcblxuXHRcdGNvbnN0IGNyZWF0ZUVudHJpZXMgPSAoX3BhcmVudFR5cGU6IEl0ZW1UeXBlLCBfbG9jYWxQYXJlbnRJZDogSXRlbUlkLCBhcGlQYXJlbnRJZDogSXRlbUlkKSA9PiB7XG5cdFx0XHRjb25zdCBwYXJlbnQgPSB7aXRlbVR5cGU6IF9wYXJlbnRUeXBlLCBpdGVtSWQ6IF9sb2NhbFBhcmVudElkfTtcblx0XHRcdGNvbnN0IGxpbmtzID0gYXBpUmVzcG9uc2UuaXRlbXNbX3BhcmVudFR5cGVdW2FwaVBhcmVudElkXS5saW5rcztcblxuXHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBsaW5rcykge1xuXHRcdFx0XHRpZiAoIWxpbmtzLmhhc093blByb3BlcnR5KGl0ZW1UeXBlKSlcblx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHQvLyB0aGUgaXRlbSBlbnRyaWVzIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgcmVzdWx0IGluIHRvcC1kb3duIG9yZGVyXG5cdFx0XHRcdGlmIChpdGVtRW50cnlNYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRyZXN1bHQucHVzaChcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0aXRlbVR5cGU6IGl0ZW1UeXBlLFxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cmllczogaXRlbUVudHJ5TWFwW2l0ZW1UeXBlXSA9IFtdLFxuXHRcdFx0XHRcdFx0XHRjb2x1bW5TZXQ6IGNvbHVtblNldE1hcFtpdGVtVHlwZV0gPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0dGVtcGxhdGUucmVzcG9uc2VDb2x1bW5zXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yIChjb25zdCBhcGlJdGVtSWQgb2YgbGlua3NbaXRlbVR5cGVdKSB7XG5cdFx0XHRcdFx0Y29uc3QgbG9jYWxJdGVtSWQgPSBpdGVtSWRDb252ZXJzaW9uW2l0ZW1UeXBlXVthcGlJdGVtSWRdO1xuXG5cdFx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5pdGVtRW50cnlGYWN0b3J5LmNvbnN0cnVjdExvY2FsTGlua2VkKFxuXHRcdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0XHRsb2NhbEl0ZW1JZCxcblx0XHRcdFx0XHRcdGFwaVJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBhcGlJdGVtSWQpLFxuXHRcdFx0XHRcdFx0cGFyZW50LFxuXHRcdFx0XHRcdFx0Y29sdW1uU2V0TWFwW2l0ZW1UeXBlXSxcblx0XHRcdFx0XHRcdGl0ZW1JZENvbnZlcnNpb25cblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0aWYgKCFmaWx0ZXJJdGVtRW50cnkoaXRlbUVudHJ5KSlcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdFx0bG9jYWxJdGVtQ2FjaGUuYWRkKGl0ZW1FbnRyeSk7XG5cdFx0XHRcdFx0aXRlbUVudHJ5TWFwW2l0ZW1UeXBlXS5wdXNoKGl0ZW1FbnRyeSk7XG5cblx0XHRcdFx0XHRjcmVhdGVFbnRyaWVzKGl0ZW1UeXBlLCBsb2NhbEl0ZW1JZCwgYXBpSXRlbUlkKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRjcmVhdGVFbnRyaWVzKHBhcmVudFR5cGUsIGxvY2FsUGFyZW50SWQsIGFwaVJlc3BvbnNlLmxpbmtzW3BhcmVudFR5cGVdWzBdKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRleHBhbmRMb2NhbEVudHJpZXMgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRcdHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXAsXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1FbnRyeVtdPiB7XG5cdFx0aWYgKGl0ZW1FbnRyaWVzLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oaXRlbUVudHJpZXMpO1xuXG5cdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucyk7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0Y29uc3QgZXhwYW5zaW9uUmVzdWx0ID0gY29sdW1uRXhwYW5zaW9uLnJ1bihpdGVtRW50cnkuY29sdW1ucyk7XG5cblx0XHRcdGlmIChleHBhbnNpb25SZXN1bHQgIT09IG51bGwpXG5cdFx0XHRcdGl0ZW1FbnRyeS5leHBhbmRMb2NhbChleHBhbnNpb25SZXN1bHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnJlc29sdmVEZXJpdmVkVmFsdWVzKGl0ZW1FbnRyaWVzLCBjb2x1bW5FeHBhbnNpb24uYWdncmVnYXRlUm9vdENvbHVtbnMoKSwgbG9jYWxJdGVtQ2FjaGUpO1xuXHR9XG5cblx0cmVzb2x2ZURlcml2ZWRWYWx1ZXMgKFxuXHRcdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcblx0XHRjb2x1bW5zOiBDb2x1bW5JbmZvW10sXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1FbnRyeVtdPiB7XG5cdFx0Y29uc3QgcHJvbWlzZXM6IEFycmF5PFByb21pc2VJbnRlcmZhY2U8YW55Pj4gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpXG5cdFx0XHRwcm9taXNlcy5wdXNoKHRoaXMuZmV0Y2hEZXJpdmVkVmFsdWVzQnlDb2x1bW4oaXRlbUVudHJpZXMsIGNvbHVtbiwgbG9jYWxJdGVtQ2FjaGUpKTtcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChwcm9taXNlcykudGhlbihcblx0XHRcdCgpID0+IGl0ZW1FbnRyaWVzLFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgc2V0RGVmYXVsdFZhbHVlc0J5Q29sdW1uIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIHJvb3RDb2x1bW46IENvbHVtbkluZm8pOiB2b2lkIHtcblx0XHRjb25zdCBjaGlsZENvbHVtbnMgPSByb290Q29sdW1uLmNoaWxkcmVuO1xuXG5cdFx0aWYgKGNoaWxkQ29sdW1ucy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm47XG5cblx0XHQvLyBubyBuZWVkIHRvIGRvIGEgcmVjdXJzaXZlIGNhbGwgaGVyZSwgZnVuY3Rpb24gd2lsbCBnZXQgY2FsbGVkIG11bHRpcGxlIHRpbWVzXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY2hpbGRDb2x1bW5zKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdFx0aXRlbUVudHJ5LmRlcml2ZWRbY29sdW1uLnBhdGhdID0gdGhpcy5hcGlGb3JtYXR0ZXIuZ2V0RGVmYXVsdFZhbHVlKGNvbHVtbi5hcGlDb2x1bW4udHlwZSk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBnZXRJdGVtSWRCeUNvbHVtbiAoaXRlbUVudHJ5OiBJdGVtRW50cnksIGNvbHVtbjogQ29sdW1uSW5mbyk6IEl0ZW1JZCB7XG5cdFx0aWYgKGNvbHVtbi5sZXZlbCA9PT0gMCkge1xuXHRcdFx0aWYgKGNvbHVtbi5hcGlDb2x1bW4udHlwZSA9PT0gJ2xpbmsnICYmIGl0ZW1FbnRyeS5wYXJlbnQgIT09IG51bGwpXG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnkucGFyZW50Lml0ZW1JZDtcblxuXHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5nZXRGaWVsZHMoKVtjb2x1bW4ucGF0aF07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeS5kZXJpdmVkW2NvbHVtbi5wYXRoXTtcblx0fVxuXG5cdHByaXZhdGUgZmV0Y2hEZXJpdmVkVmFsdWVzQnlDb2x1bW4gKFxuXHRcdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcblx0XHRyb290Q29sdW1uOiBDb2x1bW5JbmZvLFxuXHRcdGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGVcblx0KTogUHJvbWlzZUludGVyZmFjZTx2b2lkIHwgSXRlbUVudHJ5W10+IHtcblx0XHRjb25zdCBjaGlsZENvbHVtbnMgPSByb290Q29sdW1uLmNoaWxkcmVuO1xuXG5cdFx0aWYgKGNoaWxkQ29sdW1ucy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XG5cblx0XHRjb25zdCBmaXJzdENoaWxkID0gY2hpbGRDb2x1bW5zWzBdO1xuXG5cdFx0aWYgKGNoaWxkQ29sdW1ucy5sZW5ndGggPT09IDEgJiYgZmlyc3RDaGlsZC5hcGlDb2x1bW4udHlwZSA9PT0gJ2lkJykge1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXG5cdFx0XHRcdGl0ZW1FbnRyeS5kZXJpdmVkW2ZpcnN0Q2hpbGQucGF0aF0gPSB0aGlzLmdldEl0ZW1JZEJ5Q29sdW1uKGl0ZW1FbnRyeSwgcm9vdENvbHVtbik7XG5cblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcblx0XHR9XG5cblx0XHRjb25zdCBpdGVtSWRNYXA6IHtbaXRlbUlkOiBzdHJpbmddOiBJdGVtRW50cnlbXX0gPSB7fTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBpdGVtSWQgPSB0aGlzLmdldEl0ZW1JZEJ5Q29sdW1uKGl0ZW1FbnRyeSwgcm9vdENvbHVtbik7XG5cblx0XHRcdGlmIChpdGVtSWRNYXBbaXRlbUlkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRpdGVtSWRNYXBbaXRlbUlkXSA9IFtdO1xuXG5cdFx0XHRpdGVtSWRNYXBbaXRlbUlkXS5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0aWYgKGl0ZW1JZE1hcC5udWxsICE9PSB1bmRlZmluZWQpXG5cdFx0XHR0aGlzLnNldERlZmF1bHRWYWx1ZXNCeUNvbHVtbihpdGVtSWRNYXAubnVsbCwgcm9vdENvbHVtbik7XG5cblx0XHRjb25zdCBpdGVtSWRzOiBJdGVtSWRbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbUlkTWFwKSB7XG5cdFx0XHRpZiAoaXRlbUlkID09PSAnbnVsbCcpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpdGVtSWRzLnB1c2goK2l0ZW1JZCk7XG5cdFx0fVxuXG5cdFx0aWYgKGl0ZW1JZHMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xuXG5cdFx0Y29uc3QgY29sdW1uSWRzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY2hpbGRDb2x1bW5zKVxuXHRcdFx0Y29sdW1uSWRzLnB1c2goY29sdW1uLmlkKTtcblxuXHRcdHJldHVybiB0aGlzLmZldGNoSXRlbXMoXG5cdFx0XHQ8SXRlbVR5cGU+IHJvb3RDb2x1bW4uaXRlbVR5cGUsXG5cdFx0XHRpdGVtSWRzLFxuXHRcdFx0bmV3IEl0ZW1FbnRyeU9wdGlvbnMoe2NvbHVtbnM6IGNvbHVtbklkc30pLFxuXHRcdFx0bG9jYWxJdGVtQ2FjaGVcblx0XHQpLnRoZW4oXG5cdFx0XHRzb3VyY2VJdGVtRW50cmllcyA9PiB7XG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIHNvdXJjZUl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5RmllbGRzID0gaXRlbUVudHJ5LmdldEZpZWxkcygpO1xuXHRcdFx0XHRcdGNvbnN0IGRlc3RpbmF0aW9uSXRlbUVudHJpZXMgPSBpdGVtSWRNYXBbaXRlbUVudHJ5Lml0ZW1JZF07XG5cblx0XHRcdFx0XHRmb3IgKGNvbnN0IGRlc3RpbmF0aW9uSXRlbUVudHJ5IG9mIGRlc3RpbmF0aW9uSXRlbUVudHJpZXMpIHtcblx0XHRcdFx0XHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNoaWxkQ29sdW1ucylcblx0XHRcdFx0XHRcdFx0ZGVzdGluYXRpb25JdGVtRW50cnkuZGVyaXZlZFtjb2x1bW4ucGF0aF0gPSBpdGVtRW50cnlGaWVsZHNbY29sdW1uLmlkXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlRGVyaXZlZFZhbHVlcyhpdGVtRW50cmllcywgY2hpbGRDb2x1bW5zLCBsb2NhbEl0ZW1DYWNoZSk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHJlcXVlc3RJdGVtIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgcmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zID0gaXRlbUVudHJ5LmNvbHVtbnMucmVxdWVzdCkge1xuXHRcdHJldHVybiB0aGlzLnJlcXVlc3RJdGVtcyhpdGVtRW50cnkuaXRlbVR5cGUsIFtpdGVtRW50cnkuaXRlbUlkXSwgcmVxdWVzdENvbHVtbnMpO1xuXHR9XG5cblx0cmVxdWVzdEl0ZW1zIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZHM6IEl0ZW1JZFtdLCBjb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyk6IFByb21pc2VJbnRlcmZhY2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShpdGVtVHlwZSwge2lkOiBpdGVtSWRzfSwge1tpdGVtVHlwZV06IGNvbHVtbnN9KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQXBpUmVzcG9uc2VQcm9jZXNzb3IsIENvbHVtbkV4cGFuc2lvbiwgQ29sdW1uU2V0LCBJdGVtSGFuZGxlciwgUXVlcnlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LCBDb2x1bW5TZXRGYWN0b3J5LCBJdGVtRW50cnlGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge1xuXHRBcGlRdWVyeSxcblx0QXBpUmVxdWVzdENvbHVtbnMsXG5cdEFwaVJlc3BvbnNlLFxuXHRFbnRyeVBhcmVudE51bGwsXG5cdEl0ZW1JZCxcblx0SXRlbVR5cGUsXG5cdFByb21pc2VJbnRlcmZhY2Vcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBwYXRoRXhpc3RzIH0gZnJvbSAnLi9VdGlsJztcblxuZXhwb3J0IGNsYXNzIEl0ZW1SZXF1ZXN0U2VydmljZSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlGYWN0b3J5OiBJdGVtRW50cnlGYWN0b3J5LFxuXHRcdHByaXZhdGUgcXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2Vcblx0KSB7XG5cdH1cblxuXHRyZXF1ZXN0SXRlbSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCwgY29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMpOiBQcm9taXNlSW50ZXJmYWNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSB7XG5cdFx0XHRbaXRlbVR5cGVdOiBjb2x1bW5zXG5cdFx0fTtcblxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHR7aWQ6IGl0ZW1JZH0sXG5cdFx0XHRyZXF1ZXN0Q29sdW1uc1xuXHRcdCk7XG5cdH1cblxuXHRyZXF1ZXN0SXRlbXMgKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdHF1ZXJ5OiBBcGlRdWVyeSA9IGNvbGxlY3Rpb25FbnRyeS5xdWVyeS5vYmplY3QsXG5cdFx0Y29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMgPSBjb2xsZWN0aW9uRW50cnkub3B0aW9ucy5jb2x1bW5zXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZTtcblxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RTa2VsZXRvbihcblx0XHRcdHtcblx0XHRcdFx0cmVxdWVzdFR5cGU6ICdxdWVyeScsXG5cdFx0XHRcdGl0ZW1UeXBlOiBpdGVtVHlwZSxcblx0XHRcdFx0Y29sdW1uczoge1tpdGVtVHlwZV06IGNvbHVtbnN9LFxuXHRcdFx0XHRxdWVyeTogcXVlcnksXG5cdFx0XHRcdGxpbWl0OiBjb2xsZWN0aW9uRW50cnkub3B0aW9ucy5saW1pdFxuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxuXHRyZXF1ZXN0TGlua0l0ZW1zIChcblx0XHRwYXJlbnRUeXBlOiBJdGVtVHlwZSxcblx0XHRwYXJlbnRJZEFycmF5OiBJdGVtSWRbXSxcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cXVlcnk6IEFwaVF1ZXJ5LFxuXHRcdGNvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IHtcblx0XHRcdFtpdGVtVHlwZV06IGNvbHVtbnNcblx0XHR9O1xuXG5cdFx0cmV0dXJuIHF1ZXJ5ID09PSBudWxsID9cblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoXG5cdFx0XHRcdHBhcmVudFR5cGUsXG5cdFx0XHRcdHtpZDogcGFyZW50SWRBcnJheX0sXG5cdFx0XHRcdHJlcXVlc3RDb2x1bW5zXG5cdFx0XHQpIDpcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoXG5cdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5hZGRBbmRDb25kaXRpb24oXG5cdFx0XHRcdFx0cXVlcnksXG5cdFx0XHRcdFx0e2xpbmtlZFRvOiBwYXJlbnRUeXBlLCBxdWVyeToge2lkOiBwYXJlbnRJZEFycmF5fX1cblx0XHRcdFx0KSxcblx0XHRcdFx0cmVxdWVzdENvbHVtbnMgLy8gc2hvdWxkIGNvbnRhaW4gYSBkZXJpdmVkIGNvbHVtbiB0aGF0IHJlZmVycyB0byB0aGUgcGFyZW50XG5cdFx0XHQpO1xuXHR9XG5cblx0cHJvY2Vzc0V4cGFuc2lvbiAoXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRcdHJlc3BvbnNlOiBBcGlSZXNwb25zZSxcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdXG5cdCkge1xuXHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdHJlcXVlc3RDb2x1bW5zLFxuXHRcdFx0cmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KClcblx0XHQpO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdGlmIChpdGVtRW50cnkuaXNMb2NhbCgpKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0dGhpcy5oYW5kbGVDYWNoZWRJdGVtKGl0ZW1FbnRyeSwgcmVzcG9uc2UsIGNvbHVtbkV4cGFuc2lvbik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbHVtbkV4cGFuc2lvbjtcblx0fVxuXG5cdHByb2Nlc3NSZXNwb25zZSAoXG5cdFx0cmVzcG9uc2U6IEFwaVJlc3BvbnNlLFxuXHRcdGlkQXJyYXk6IEl0ZW1JZFtdLFxuXHRcdHBhcmVudDogRW50cnlQYXJlbnROdWxsLFxuXHRcdGNvbHVtblNldDogQ29sdW1uU2V0LFxuXHRcdGNvbHVtbkV4cGFuc2lvbjogQ29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdGNvbHVtblNldC5pdGVtVHlwZSxcblx0XHRcdGNvbHVtblNldC5yZXF1ZXN0Q29sdW1uc1RydWUgPyB0cnVlIDogY29sdW1uU2V0LnJlcXVlc3QsXG5cdFx0XHRjb2x1bW5TZXQucmVzcG9uc2Vcblx0XHQpXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8SXRlbUVudHJ5W10+IHtcblx0XHRjb25zdCBpdGVtSGFuZGxlciA9IHRoaXMuaXRlbUhhbmRsZXI7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBjb2x1bW5TZXQuaXRlbVR5cGU7XG5cdFx0Y29uc3Qgcm9vdENvbHVtbnMgPSBjb2x1bW5TZXQucm9vdDtcblx0XHRjb25zdCBpdGVtRW50cmllczogSXRlbUVudHJ5W10gPSBbXTtcblx0XHRjb25zdCBkZWZlcnJlZEVudHJpZXM6IEFycmF5PFByb21pc2VJbnRlcmZhY2U8SXRlbUVudHJ5Pj4gPSBbXTtcblxuXHRcdC8vIHNob3VsZCBiZSBmYXN0Li4uXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgaWRBcnJheSkge1xuXHRcdFx0bGV0IGl0ZW1FbnRyeSA9IGl0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXG5cdFx0XHRpZiAoaXRlbUVudHJ5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0aXRlbUVudHJ5ID0gdGhpcy5pdGVtRW50cnlGYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdFx0XHRpdGVtSWQsXG5cdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCksXG5cdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIHJvb3RDb2x1bW5zKSxcblx0XHRcdFx0XHRjb2x1bW5TZXRcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRpdGVtSGFuZGxlci5lbnRyaWVzLmFkZChpdGVtRW50cnkpO1xuXHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoaXRlbUVudHJ5LmlzRGVmZXJyZWQoKSkge1xuXHRcdFx0XHRcdGlmIChpdGVtRW50cnkuZGVmZXJSZXF1ZXN0KSB7XG5cdFx0XHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKFxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnkucmVzb2x2ZURlZmVycmVkKFxuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQpLFxuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCByb290Q29sdW1ucyksXG5cdFx0XHRcdFx0XHRcdFx0Y29sdW1uU2V0XG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSBlbHNlXG5cdFx0XHRcdFx0XHRkZWZlcnJlZEVudHJpZXMucHVzaChpdGVtRW50cnkuZ2V0UHJvbWlzZSgpKTtcblx0XHRcdFx0fSBlbHNlIGlmIChpdGVtRW50cnkucmVsb2FkUXVldWVkKSB7XG5cdFx0XHRcdFx0aXRlbUVudHJ5LnJlbG9hZFF1ZXVlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdGl0ZW1FbnRyeS51cGRhdGVGaWVsZHMoXG5cdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKSxcblx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCByb290Q29sdW1ucyksXG5cdFx0XHRcdFx0XHRmYWxzZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aXRlbUVudHJpZXMucHVzaChpdGVtRW50cnkpO1xuXHRcdFx0XHR9IGVsc2Vcblx0XHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKHRoaXMuaGFuZGxlQ2FjaGVkSXRlbShpdGVtRW50cnksIHJlc3BvbnNlLCBjb2x1bW5FeHBhbnNpb24pKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHBhcmVudCAhPT0gbnVsbClcblx0XHRcdFx0aXRlbUVudHJ5LnBhcmVudCA9IHBhcmVudDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwoZGVmZXJyZWRFbnRyaWVzKS50aGVuKFxuXHRcdFx0cmVzb2x2ZWRFbnRyaWVzID0+IHtcblx0XHRcdFx0Zm9yIChjb25zdCByZXNvbHZlZEVudHJ5IG9mIHJlc29sdmVkRW50cmllcykge1xuXHRcdFx0XHRcdGl0ZW1FbnRyaWVzLnB1c2goXG5cdFx0XHRcdFx0XHR0aGlzLmhhbmRsZUNhY2hlZEl0ZW0oXG5cdFx0XHRcdFx0XHRcdHJlc29sdmVkRW50cnksXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHRcdFx0XHRjb2x1bW5FeHBhbnNpb25cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyaWVzO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRoYW5kbGVDYWNoZWRJdGVtIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgcmVzcG9uc2U6IEFwaVJlc3BvbnNlLCBjb2x1bW5FeHBhbnNpb246IENvbHVtbkV4cGFuc2lvbikge1xuXHRcdGNvbnN0IGV4cGFuc2lvblJlc3VsdCA9IGNvbHVtbkV4cGFuc2lvbi5ydW4oaXRlbUVudHJ5LmNvbHVtbnMpO1xuXG5cdFx0cmV0dXJuIGV4cGFuc2lvblJlc3VsdCA9PT0gbnVsbCA/XG5cdFx0XHRpdGVtRW50cnkgOlxuXHRcdFx0aXRlbUVudHJ5LmV4cGFuZChcblx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkKSxcblx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KFxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5pdGVtVHlwZSxcblx0XHRcdFx0XHRpdGVtRW50cnkuaXRlbUlkLFxuXHRcdFx0XHRcdGV4cGFuc2lvblJlc3VsdC5kaWZmZXJlbmNlLnJvb3Rcblx0XHRcdFx0KSxcblx0XHRcdFx0ZXhwYW5zaW9uUmVzdWx0XG5cdFx0XHQpO1xuXHR9XG5cblx0cHJvY2Vzc0xpbmtSZXNwb25zZSAoXG5cdFx0cmVzcG9uc2U6IEFwaVJlc3BvbnNlLFxuXHRcdHBhcmVudFR5cGU6IEl0ZW1UeXBlLFxuXHRcdHBhcmVudElkQXJyYXk6IEl0ZW1JZFtdLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zOiBhbnlcblx0KSB7XG5cdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCk7XG5cdFx0Y29uc3QgY29sdW1uU2V0ID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucy5jb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xuXHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIG9wdGlvbnMuY29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKTtcblx0XHRjb25zdCBwYXJlbnRJdGVtcyA9IHJlc3BvbnNlLml0ZW1zW3BhcmVudFR5cGVdO1xuXHRcdGNvbnN0IHByb21pc2VzOiBhbnkgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgb2YgcGFyZW50SWRBcnJheSkge1xuXHRcdFx0cHJvbWlzZXNbcGFyZW50SWRdID0gcGF0aEV4aXN0cyhwYXJlbnRJdGVtcywgW3BhcmVudElkLCAnbGlua3MnLCBpdGVtVHlwZV0pID9cblx0XHRcdFx0dGhpcy5wcm9jZXNzUmVzcG9uc2UoXG5cdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0cGFyZW50SXRlbXNbcGFyZW50SWRdLmxpbmtzW2l0ZW1UeXBlXSxcblx0XHRcdFx0XHR7aXRlbVR5cGU6IHBhcmVudFR5cGUsIGl0ZW1JZDogcGFyZW50SWR9LFxuXHRcdFx0XHRcdGNvbHVtblNldCxcblx0XHRcdFx0XHRjb2x1bW5FeHBhbnNpb25cblx0XHRcdFx0KSA6XG5cdFx0XHRcdFtdO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChwcm9taXNlcykudGhlbihcblx0XHRcdHJlc29sdmVkID0+IHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRpdGVtczogcmVzb2x2ZWQsXG5cdFx0XHRcdFx0Y29sdW1uczogY29sdW1uU2V0LFxuXHRcdFx0XHRcdGNvbHVtbkV4cGFuc2lvbjogY29sdW1uRXhwYW5zaW9uXG5cdFx0XHRcdH07XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgRFVQTElDQVRFX0tFWVdPUkQsIERVUExJQ0FURV9QUkVGSVgsIE5FV19LRVlXT1JELCBORVdfUFJFRklYIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IEl0ZW1JZCwgU3RhdGVLZXksIFN0YXRlS2V5VHlwZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIEtleVNlcnZpY2Uge1xuXHRzZXBhcmF0b3I6IHN0cmluZyA9ICc6JztcblxuXHRjb25zdHJ1Y3RvciAoKSB7fVxuXG5cdGdldFNpbmdsZUtleSAoaXRlbVR5cGU6IHN0cmluZywgaXRlbUlkOiBudW1iZXIgfCBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdHJldHVybiBpdGVtVHlwZSArIHRoaXMuc2VwYXJhdG9yICsgaXRlbUlkO1xuXHR9XG5cblx0Z2V0Q3NzS2V5ICgpOiBzdHJpbmcge1xuXHRcdHJldHVybiBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKGFyZ3VtZW50cywgJ18nKTtcblx0fVxuXG5cdHBhcnNlU3RhdGVLZXkgKHN0YXRlS2V5OiBzdHJpbmcpOiBTdGF0ZUtleSB8IG51bGwge1xuXHRcdHN0YXRlS2V5ID0gc3RhdGVLZXkudG9TdHJpbmcoKTtcblxuXHRcdGlmIChzdGF0ZUtleS5zdWJzdHJpbmcoMCwgTkVXX0tFWVdPUkQubGVuZ3RoKSA9PT0gTkVXX0tFWVdPUkQpXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0eXBlOiBTdGF0ZUtleVR5cGUuTmV3LFxuXHRcdFx0XHR0ZW1wbGF0ZTogc3RhdGVLZXkuc3Vic3RyaW5nKE5FV19LRVlXT1JELmxlbmd0aCkgLy8gVE9ETzogdGhpcyBpcyBjdXJyZW50bHkgbm90IGJlaW5nIHVzZWQsIHJlZXZhbHVhdGVcblx0XHRcdH07XG5cblx0XHRpZiAoc3RhdGVLZXkuc3Vic3RyaW5nKDAsIERVUExJQ0FURV9LRVlXT1JELmxlbmd0aCkgPT09IERVUExJQ0FURV9LRVlXT1JEKVxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dHlwZTogU3RhdGVLZXlUeXBlLkR1cGxpY2F0ZSxcblx0XHRcdFx0aXRlbUlkOiArc3RhdGVLZXkuc3Vic3RyaW5nKERVUExJQ0FURV9LRVlXT1JELmxlbmd0aClcblx0XHRcdH07XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGdldER1cGxpY2F0ZVN0YXRlS2V5IChpdGVtSWQ6IHN0cmluZyB8IG51bWJlcik6IHN0cmluZyB7XG5cdFx0cmV0dXJuIERVUExJQ0FURV9LRVlXT1JEICsgaXRlbUlkO1xuXHR9XG5cblx0Z2V0TmV3U3RhdGVLZXkgKHRlbXBsYXRlVHlwZTogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gTkVXX0tFWVdPUkQgKyB0ZW1wbGF0ZVR5cGU7XG5cdH1cblxuXHRnZXRMb2NhbElkICgpOiBJdGVtSWQge1xuXHRcdHJldHVybiArKE5FV19QUkVGSVggKyB0aGlzLmdldFJhbmRvbVN0cmluZygpKTtcblx0fVxuXG5cdGdldExvY2FsRHVwbGljYXRlSWQgKCk6IEl0ZW1JZCB7XG5cdFx0cmV0dXJuICsoRFVQTElDQVRFX1BSRUZJWCArIHRoaXMuZ2V0UmFuZG9tU3RyaW5nKCkpO1xuXHR9XG5cblx0Z2V0UmFuZG9tU3RyaW5nICgpOiBzdHJpbmcge1xuXHRcdHJldHVybiAoJycgKyBNYXRoLnJhbmRvbSgpKS5zcGxpdCgnLicpWzFdLnN1YnN0cigwLCA4KTtcblx0fVxuXG5cdC8vIG5vdGU6IHRoZSBjaGFuZ2VzIGNvbXBpbGVyIHVzZXMgdGhpc1xuXHQvLyBtaWdodCBiZSBjYWxsZWQgd2l0aCB1bmRlZmluZWQgKGl0ZW1IYW5kbGVyLmNyZWF0ZVJlcXVlc3QpXG5cdGlzTG9jYWxJZCAoaXRlbUlkOiBJdGVtSWQgfCBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gaXRlbUlkICE9PSB1bmRlZmluZWQgJiYgKHRoaXMuaXNOZXdJZChpdGVtSWQpIHx8IHRoaXMuaXNEdXBsaWNhdGVJZChpdGVtSWQpKTtcblx0fVxuXG5cdGlzTmV3SWQgKGl0ZW1JZDogSXRlbUlkIHwgc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIGl0ZW1JZCA9PT0gTkVXX0tFWVdPUkQgfHwgKCcnICsgaXRlbUlkKS5zdWJzdHJpbmcoMCwgTkVXX1BSRUZJWC5sZW5ndGgpID09PSBORVdfUFJFRklYO1xuXHR9XG5cblx0aXNEdXBsaWNhdGVJZCAoaXRlbUlkOiBJdGVtSWQgfCBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gaXRlbUlkID09PSBEVVBMSUNBVEVfS0VZV09SRCB8fCAoJycgKyBpdGVtSWQpLnN1YnN0cmluZygwLCBEVVBMSUNBVEVfUFJFRklYLmxlbmd0aCkgPT09IERVUExJQ0FURV9QUkVGSVg7XG5cdH1cbn1cbiIsImltcG9ydCB7IEFwaVJlc3BvbnNlUHJvY2Vzc29yLCBDb2xsZWN0aW9uTWF0Y2hlciwgQ29sdW1uU2V0LCBMb2NhbENhY2hlLCBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBFTlRSWV9TVEFUVVMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHtcblx0Q29sbGVjdGlvbkVudHJ5LFxuXHRDb2xsZWN0aW9uRW50cnlPcHRpb25zLFxuXHRDb2xsZWN0aW9uRW50cnlPcHRpb25zSW50ZXJmYWNlLFxuXHRDb2xsZWN0aW9uUmVzb3VyY2UsXG5cdENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnMsXG5cdENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UsIENvbGxlY3Rpb25WaWV3UmVzb3VyY2UsXG5cdEl0ZW1FbnRyeSxcblx0SXRlbUVudHJ5T3B0aW9uc0ludGVyZmFjZSxcblx0SXRlbVJlc291cmNlLFxuXHRJdGVtUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlLCBWaWV3UmVzb3VyY2Vcbn0gZnJvbSAnLi4vbW9kZWxzJztcblxuZXhwb3J0IHR5cGUgRW50cnlQYXJlbnQgPSB7aXRlbVR5cGU6IHN0cmluZywgaXRlbUlkOiBudW1iZXJ9O1xuXG5leHBvcnQgdHlwZSBFbnRyeVBhcmVudE51bGwgPSBFbnRyeVBhcmVudCB8IG51bGw7XG5cbmV4cG9ydCB0eXBlIEZpZWxkTWFwID0ge1xuXHRba2V5OiBzdHJpbmddOiBhbnlcbn07XG5cbmV4cG9ydCB0eXBlIEl0ZW1PcHRpb25zSW50ZXJmYWNlID0gSXRlbUVudHJ5T3B0aW9uc0ludGVyZmFjZSAmIEl0ZW1SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2U7XG5cbmV4cG9ydCB0eXBlIENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlID0gQ29sbGVjdGlvbkVudHJ5T3B0aW9uc0ludGVyZmFjZSAmIENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2U7XG5cbmV4cG9ydCB0eXBlIENvbGxlY3Rpb25EZWZpbml0aW9uID0ge1xuXHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdG9wdGlvbnM6IHtlbnRyeTogQ29sbGVjdGlvbkVudHJ5T3B0aW9ucywgcmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnN9XG59O1xuXG5leHBvcnQgdHlwZSBMaW5rQ29sbGVjdGlvbkRlZmluaXRpb24gPSB7XG5cdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0bGlua1R5cGU6IEl0ZW1UeXBlLFxuXHRsaW5rSWRBcnJheTogSXRlbUlkW10gfCAoKCkgPT4gSXRlbUlkW10pLFxuXHRsaW5rRmllbGQ6IHN0cmluZyxcblx0b3B0aW9uczoge2VudHJ5OiBDb2xsZWN0aW9uRW50cnlPcHRpb25zLCByZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc31cbn07XG5cbmV4cG9ydCB0eXBlIE9uQ2hhbmdlRnVuY3Rpb24gPSAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UsIHByZXZpb3VzPzogRmllbGRNYXApID0+IHZvaWQ7XG5cbmV4cG9ydCBjb25zdCBlbnVtIFN0YXRlS2V5VHlwZSB7XG5cdE5ldyA9ICduZXcnLFxuXHREdXBsaWNhdGUgPSAnZHVwbGljYXRlJ1xufVxuXG5leHBvcnQgdHlwZSBTdGF0ZUtleSA9IHt0eXBlOiBTdGF0ZUtleVR5cGUsIHRlbXBsYXRlPzogc3RyaW5nLCBpdGVtSWQ/OiBudW1iZXJ9O1xuXG5leHBvcnQgdHlwZSBPblNhdmVDYWxsYmFjayA9IChsb2NhbENhY2hlOiBMb2NhbENhY2hlLCBjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwKSA9PiBhbnk7XG5cbmV4cG9ydCBlbnVtIExvY2FsQ2FjaGVDYWxsYmFja0NvbmRpdGlvbiB7XG5cdEFsd2F5cyA9ICdhbHdheXMnLFxuXHRPbkNsb3NlID0gJ29uQ2xvc2UnLFxuXHRTa2lwT25DbG9zZSA9ICdza2lwT25DbG9zZSdcbn1cblxuZXhwb3J0IHR5cGUgTG9jYWxDYWNoZUNhbGxiYWNrczxUPiA9IHtcblx0YWx3YXlzOiB7W2tleTogc3RyaW5nXTogVH0sXG5cdG9uQ2xvc2U6IHtba2V5OiBzdHJpbmddOiBUfSxcblx0c2tpcE9uQ2xvc2U6IHtba2V5OiBzdHJpbmddOiBUfVxufTtcblxuZXhwb3J0IHR5cGUgU29ja2V0TWVzc2FnZVR5cGUgPSAnZXZlbnQnIHwgJ25vdGlmaWNhdGlvbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU29ja2V0TWVzc2FnZSB7XG5cdGhlYWRlcjoge1xuXHRcdGRvbWFpbjogc3RyaW5nLFxuXHRcdGFjY291bnQ6IHN0cmluZyxcblx0XHRzZW5kZXI6IHtcblx0XHRcdGRpc3BsYXluYW1lOiBzdHJpbmcsXG5cdFx0XHRpdGVtVHlwZTogJ01lZGV3ZXJrZXInLFxuXHRcdFx0aXRlbUlkOiBJdGVtSWQsXG5cdFx0XHRhdXRob3JpemVkOiBib29sZWFuLFxuXHRcdFx0c2Vzc2lvbjogc3RyaW5nXG5cdFx0fSxcblx0XHRtZXNzYWdlSWQ6IHtcblx0XHRcdElkOiBzdHJpbmcsXG5cdFx0XHRzZXF1ZW5jZTogbnVtYmVyLFxuXHRcdFx0YmF0Y2g6IG51bWJlcixcblx0XHRcdHJlcXVlc3Q6IG51bWJlclxuXHRcdH0sXG5cdFx0c2VudDogc3RyaW5nLFxuXHRcdGZvcmNlRXZhbHVhdGU6IGJvb2xlYW5cblx0fTtcblx0Ym9keTogYW55O1xuXHRtZXNzYWdlVHlwZTogU29ja2V0TWVzc2FnZVR5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZVNvY2tldE1lc3NhZ2UgZXh0ZW5kcyBTb2NrZXRNZXNzYWdlIHtcblx0Ym9keToge1xuXHRcdGl0ZW1UeXBlOiAnRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZScsXG5cdFx0W2tleTogc3RyaW5nXTogYW55XG5cdH07XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEl0ZW0gcmVzb3VyY2VcblxuZXhwb3J0IHR5cGUgSXRlbVJlc291cmNlSXRlbUlkTWFwIDxUIGV4dGVuZHMgSXRlbVJlc291cmNlID0gVmlld1Jlc291cmNlPiA9IHtcblx0W2l0ZW1JZDogbnVtYmVyXTogVFxufTtcblxuZXhwb3J0IHR5cGUgSXRlbVJlc291cmNlc0l0ZW1UeXBlTWFwIDxUIGV4dGVuZHMgSXRlbVJlc291cmNlID0gVmlld1Jlc291cmNlPiA9IHtcblx0W2l0ZW1UeXBlOiBzdHJpbmddOiBUW11cbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEl0ZW0gRW50cnlcblxuZXhwb3J0IHR5cGUgSXRlbUlkID0gbnVtYmVyO1xuXG5leHBvcnQgdHlwZSBJdGVtVHlwZSA9IHN0cmluZztcblxuZXhwb3J0IHR5cGUgSXRlbU1hcDxUPiA9IHtcblx0W2l0ZW1UeXBlOiBzdHJpbmddOiB7XG5cdFx0W2l0ZW1JZDogc3RyaW5nXTogVFxuXHR9XG59O1xuXG5leHBvcnQgdHlwZSBJdGVtRW50cnlNYXAgPSBJdGVtTWFwPEl0ZW1FbnRyeT47XG5cbmV4cG9ydCB0eXBlIExpbmtlZEl0ZW1FbnRyeU1hcCA9IHtcblx0aXRlbVR5cGU6IHN0cmluZyxcblx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRjb2x1bW5TZXQ6IENvbHVtblNldFxufTtcblxuZXhwb3J0IHR5cGUgRW50cnlTdGF0dXNNYXA8VD4gPSB7XG5cdFtlbnRyeVN0YXR1czogc3RyaW5nXTogVFtdO1xufTtcblxuZXhwb3J0IHR5cGUgSXRlbUVudHJ5UGFyZW50SWRNYXAgPSB7XG5cdFtwYXJlbnRJZDogbnVtYmVyXTogSXRlbUVudHJ5W107XG59O1xuXG5leHBvcnQgdHlwZSBDb252ZXJzaW9uTWFwID0ge1xuXHRbaXRlbUlkOiBudW1iZXJdOiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBJdGVtSWRDb252ZXJzaW9uTWFwID0ge1xuXHRbaXRlbVR5cGU6IHN0cmluZ106IENvbnZlcnNpb25NYXBcbn07XG5cbmV4cG9ydCB0eXBlIENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAgPSBJdGVtTWFwPGFueT47XG5cbmV4cG9ydCB0eXBlIEl0ZW1FcnJvciA9IHttZXNzYWdlOiBzdHJpbmd9O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBDb2xsZWN0aW9uIEVudHJ5XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5UGFyYW1zID0gYW55OyAvLyBUT0RPXG5cbmV4cG9ydCB0eXBlIENvbGxlY3Rpb25RdWVyeSA9IHtvYmplY3Q6IG9iamVjdCwgc3RyaW5nOiBzdHJpbmd9O1xuXG5leHBvcnQgdHlwZSBRdWVyeUNhbGxiYWNrID0gKHF1ZXJ5UGFyYW1zOiBRdWVyeVBhcmFtcykgPT4gUXVlcnlQYXJhbXM7XG5cbmV4cG9ydCB0eXBlIENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwID0ge1xuXHRbcGFyZW50SWQ6IG51bWJlcl06IENvbGxlY3Rpb25FbnRyeVxufTtcblxuZXhwb3J0IHR5cGUgQ29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA8VCBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZSA9IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U+ID0ge1xuXHRbcGFyZW50SWQ6IG51bWJlcl06IFRcbn07XG5cbmV4cG9ydCB0eXBlIENvbGxlY3Rpb25NYXRjaFJlc3VsdCA9IHtcblx0Zml0dGluZzogQ29sbGVjdGlvbkVudHJ5W10sXG5cdG5vdGZpdHRpbmc6IENvbGxlY3Rpb25FbnRyeVtdLFxuXHRtYXliZTogQ29sbGVjdGlvbkVudHJ5W11cbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXh0ZW5kZWRDb2xsZWN0aW9uTWF0Y2hSZXN1bHQgZXh0ZW5kcyBDb2xsZWN0aW9uTWF0Y2hSZXN1bHQge1xuXHRjb2xsZWN0aW9uOiBDb2xsZWN0aW9uRW50cnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBlZEV4dGVuZGVkQ29sbGVjdGlvbk1hdGNoUmVzdWx0IHtcblx0W2NvbGxlY3Rpb25JZDogbnVtYmVyXTogRXh0ZW5kZWRDb2xsZWN0aW9uTWF0Y2hSZXN1bHQ7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IENvbHVtbnNcblxuZXhwb3J0IHR5cGUgUmVzcG9uc2VDb2x1bW4gPSBhbnk7IC8vIFRPRE9cblxuZXhwb3J0IHR5cGUgUmVzcG9uc2VDb2x1bW5NYXAgPSB7XG5cdFtpdGVtVHlwZTogc3RyaW5nXToge1xuXHRcdFtjb2x1bW5JZDogc3RyaW5nXTogUmVzcG9uc2VDb2x1bW5cblx0fVxufTtcblxuZXhwb3J0IHR5cGUgQ29sdW1uRXhwYW5zaW9uUmVzdWx0ID0ge1xuXHRtZXJnZWQ6IENvbHVtblNldCxcblx0ZGlmZmVyZW5jZTogQ29sdW1uU2V0XG59O1xuXG5leHBvcnQgdHlwZSBDb2x1bW5TZXRFeHBhbnNpb24gPSB7XG5cdHJlcXVlc3Q6IHttZXJnZWQ6IEFwaVJlcXVlc3RDb2x1bW5zLCBkaWZmZXJlbmNlOiBBcGlSZXF1ZXN0Q29sdW1uc30sXG5cdHJlc3BvbnNlOiBSZXNwb25zZUNvbHVtbk1hcFxufTtcblxuZXhwb3J0IHR5cGUgUm9vdENvbHVtbk1hcCA9IHtbY29sdW1uSWQ6IHN0cmluZ106IHthcGlDb2x1bW46IFJlc3BvbnNlQ29sdW1uLCBjaGlsZHJlbjogUm9vdENvbHVtbk1hcH19O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBBcGkgcmVmZXJlbmNlXG5cbmV4cG9ydCB0eXBlIEFwaVJlc3BvbnNlID0gQXBpUmVzcG9uc2VQcm9jZXNzb3I7IC8vIFRPRE9cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gQXBpIHRlbXBsYXRlIHJlc3BvbnNlXG5leHBvcnQgdHlwZSBUZW1wbGF0ZUl0ZW1SZXNvdXJjZU1hcCA8VCBleHRlbmRzIEl0ZW1SZXNvdXJjZT4gPSB7XG5cdG1haW46IFQ7XG5cdGxpbmtlZDogSXRlbVJlc291cmNlc0l0ZW1UeXBlTWFwXG59O1xuXG5leHBvcnQgdHlwZSBUZW1wbGF0ZUl0ZW1FbnRyeU1hcCA9IHtcblx0bWFpbjogSXRlbUVudHJ5O1xuXHRsaW5rZWQ6IExpbmtlZEl0ZW1FbnRyeU1hcFtdO1xufTtcblxuZXhwb3J0IHR5cGUgSXRlbVR5cGVNYXAgPSB7XG5cdFtpdGVtVHlwZTogc3RyaW5nXTogYW55O1xufTtcblxuZXhwb3J0IHR5cGUgRW50cnlTdGF0dXM8VD4gPSB7XG5cdGVudHJ5OiBUO1xuXHRzdGF0dXM6IEVOVFJZX1NUQVRVUztcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEFwaSByZXF1ZXN0XG5cbmV4cG9ydCB0eXBlIEFwaVF1ZXJ5ID0gYW55OyAvLyBUT0RPXG5cbmV4cG9ydCB0eXBlIEFwaVJlcXVlc3RJdGVtVmFsdWVzID0ge1xuXHR2YWx1ZXM/OiBhbnksXG5cdGxpbmtzPzoge1xuXHRcdFtpdGVtVHlwZTogc3RyaW5nXTogSXRlbUlkW11cblx0fVxufTtcblxuZXhwb3J0IHR5cGUgQXBpUmVxdWVzdEl0ZW1NYXAgPSB7XG5cdFtpdGVtVHlwZTogc3RyaW5nXToge1xuXHRcdFtpdGVtSWQ6IG51bWJlcl06IEFwaVJlcXVlc3RJdGVtVmFsdWVzXG5cdH07XG59O1xuXG5leHBvcnQgdHlwZSBBcGlSZXF1ZXN0Q29sdW1uID0gc3RyaW5nIHwge1tjb2x1bW5JZDogc3RyaW5nXTogQXBpUmVxdWVzdENvbHVtbltdfTtcblxuZXhwb3J0IHR5cGUgQXBpUmVxdWVzdENvbHVtbnMgPSBBcGlSZXF1ZXN0Q29sdW1uW10gfCB0cnVlO1xuXG5leHBvcnQgdHlwZSBBcGlSZXF1ZXN0Q29sdW1uTWFwID0ge1xuXHRbaXRlbVR5cGU6IHN0cmluZ106IEFwaVJlcXVlc3RDb2x1bW5zXG59O1xuXG5leHBvcnQgdHlwZSBBcGlSZXF1ZXN0TGltaXQgPSB7XG5cdGZpZWxkOiBzdHJpbmcsXG5cdGxpbWl0OiBudW1iZXIsXG5cdG9mZnNldD86IG51bWJlcixcblx0b3JkZXI/OiAnZGVzYycgfCAnYXNjJ1xufTtcblxuZXhwb3J0IHR5cGUgQXBpUmVxdWVzdE1vdmVJdGVtcyA9IHtcblx0W2l0ZW1UeXBlOiBzdHJpbmddOiBJdGVtSWRbXVxufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gQ3JlYXRlIHJlcXVlc3RcblxuZXhwb3J0IHR5cGUgQ3JlYXRlUmVxdWVzdEVudHJ5ID0ge1xuXHRyZXF1ZXN0OiB7XG5cdFx0cmVxdWVzdFR5cGU6ICdjcmVhdGUnLFxuXHRcdGl0ZW1UeXBlPzogSXRlbVR5cGUsXG5cdFx0cGFyZW50VHlwZT86IEl0ZW1UeXBlLFxuXHRcdHBhcmVudElkPzoge1tpdGVtSWQ6IHN0cmluZ106IEl0ZW1JZH0sXG5cdFx0aXRlbXM6IEFwaVJlcXVlc3RJdGVtTWFwLFxuXHRcdGNvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5NYXBcblx0fSxcblx0Y29sdW1uczogUmVxdWVzdENvbHVtbkV4cGFuc2lvbixcblx0aXRlbXM6IEl0ZW1FbnRyeU1hcCxcblx0Y29sbGVjdGlvbnM6IENvbGxlY3Rpb25NYXRjaGVyXG59O1xuIiwiZXhwb3J0ICogZnJvbSAnLi9JdGVtVHlwZXNDb2xsZWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vUHJvbWlzZUludGVyZmFjZSc7XG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUsIEl0ZW1DYWNoZSwgTG9ja1NlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7XG5cdENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRJdGVtQ2FjaGVGYWN0b3J5LFxuXHRJdGVtUmVzb3VyY2VGYWN0b3J5XG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQge1xuXHRDb2xsZWN0aW9uRWRpdFJlc291cmNlLFxuXHRDb2xsZWN0aW9uRW50cnksXG5cdENvbGxlY3Rpb25SZXNvdXJjZSxcblx0Q29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZSwgQ29sbGVjdGlvblZpZXdSZXNvdXJjZSwgRWRpdFJlc291cmNlLFxuXHRJdGVtRW50cnksXG5cdEl0ZW1SZXNvdXJjZSwgVmlld1Jlc291cmNlXG59IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge1xuXHRDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCwgQ29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXAsXG5cdENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAsXG5cdEl0ZW1JZENvbnZlcnNpb25NYXAsXG5cdEl0ZW1PcHRpb25zSW50ZXJmYWNlLFxuXHRMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24sXG5cdExvY2FsQ2FjaGVDYWxsYmFja3MsXG5cdE9uU2F2ZUNhbGxiYWNrLFxuXHRQcm9taXNlSW50ZXJmYWNlXG59IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSAnLi9VdGlsJztcblxuZXhwb3J0IGNsYXNzIExvY2FsQ2FjaGUge1xuXHRpdGVtczogSXRlbUNhY2hlO1xuXHRyb290SXRlbTogSXRlbUVudHJ5IHwgdW5kZWZpbmVkO1xuXHRjb2xsZWN0aW9uczogQ29sbGVjdGlvbkNhY2hlO1xuXHRkZWZlcnJlZENvbGxlY3Rpb25zOiBDb2xsZWN0aW9uQ2FjaGU7XG5cdHRhYlJlcXVlc3RQYXJhbWV0ZXJzID0ge307XG5cblx0aXNTYXZpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuXHRwcml2YXRlIGNhbGxiYWNrczoge1xuXHRcdG9uQmVmb3JlU2F2ZTogTG9jYWxDYWNoZUNhbGxiYWNrczwobG9jYWxDYWNoZTogTG9jYWxDYWNoZSkgPT4gYW55Pixcblx0XHRvblNhdmVTdWNjZXNzOiBMb2NhbENhY2hlQ2FsbGJhY2tzPE9uU2F2ZUNhbGxiYWNrPixcblx0fSA9IHtcblx0XHRvbkJlZm9yZVNhdmU6IHthbHdheXM6IHt9LCBvbkNsb3NlOiB7fSwgc2tpcE9uQ2xvc2U6IHt9fSxcblx0XHRvblNhdmVTdWNjZXNzOiB7YWx3YXlzOiB7fSwgb25DbG9zZToge30sIHNraXBPbkNsb3NlOiB7fX1cblx0fTtcblxuXHRwcml2YXRlIGNoYW5nZXNJbnRlcnZhbDogbnVsbCB8IG51bWJlciA9IG51bGw7XG5cdGhhc0NoYW5nZXMgPSBmYWxzZTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGxvY2tTZXJ2aWNlOiBMb2NrU2VydmljZSxcblx0XHRwcml2YXRlIGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRcdHByaXZhdGUgY2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnk6IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRcdHByaXZhdGUgaXRlbUNhY2hlRmFjdG9yeTogSXRlbUNhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnk6IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXG5cdFx0cHVibGljIGlkOiBzdHJpbmcgPSAnJ1xuXHQpIHtcblx0XHR0aGlzLml0ZW1zID0gdGhpcy5pdGVtQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xuXHRcdHRoaXMuY29sbGVjdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XG5cdFx0dGhpcy5kZWZlcnJlZENvbGxlY3Rpb25zID0gdGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xuXHR9XG5cblx0Y3JlYXRlSXRlbVJlc291cmNlIChcblx0XHRpdGVtRW50cnk6IEl0ZW1FbnRyeSxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0OiB0cnVlfSxcblx0XHRpc1Jvb3Q/OiBib29sZWFuLFxuXHRcdGlzTmV3PzogYm9vbGVhblxuXHQpOiBFZGl0UmVzb3VyY2U7XG5cdGNyZWF0ZUl0ZW1SZXNvdXJjZSAoXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnksXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UsXG5cdFx0aXNSb290PzogYm9vbGVhbixcblx0XHRpc05ldz86IGJvb2xlYW5cblx0KTogVmlld1Jlc291cmNlO1xuXHRjcmVhdGVJdGVtUmVzb3VyY2UgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSwgaXNSb290OiBib29sZWFuID0gZmFsc2UsIGlzTmV3PzogYm9vbGVhbikge1xuXHRcdGlmIChpc1Jvb3QpXG5cdFx0XHR0aGlzLnJvb3RJdGVtID0gaXRlbUVudHJ5O1xuXG5cdFx0b3B0aW9ucy5vbkRlYWN0aXZhdGUgPSAoX2l0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiB0aGlzLm9uRGVhY3RpdmF0ZUl0ZW0oX2l0ZW1FbnRyeSk7XG5cblx0XHRyZXR1cm4gdGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LmNvbnN0cnVjdChpdGVtRW50cnksIG9wdGlvbnMsIGlzTmV3KTtcblx0fVxuXG5cdGNyZWF0ZUl0ZW1SZXNvdXJjZXMgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgb3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdDogdHJ1ZX0pOiBFZGl0UmVzb3VyY2VbXTtcblx0Y3JlYXRlSXRlbVJlc291cmNlcyAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCBvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSk6IFZpZXdSZXNvdXJjZVtdO1xuXHRjcmVhdGVJdGVtUmVzb3VyY2VzIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlKSB7XG5cdFx0b3B0aW9ucy5vbkRlYWN0aXZhdGUgPSAoX2l0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiB0aGlzLm9uRGVhY3RpdmF0ZUl0ZW0oX2l0ZW1FbnRyeSk7XG5cblx0XHRjb25zdCBjb25zdHJ1Y3RvciA9IHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeS5nZXRDb25zdHJ1Y3RvcihvcHRpb25zKTtcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1SZXNvdXJjZVtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdHJlc3VsdC5wdXNoKGNvbnN0cnVjdG9yKGl0ZW1FbnRyeSkpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZSAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksXG5cdFx0cmVzb3VyY2VPcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlICYge2VkaXRJdGVtczogdHJ1ZSwgZWRpdENvbGxlY3Rpb246IHRydWV9XG5cdCk6IENvbGxlY3Rpb25FZGl0UmVzb3VyY2U8RWRpdFJlc291cmNlPjtcblxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UgKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdHJlc291cmNlT3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0Q29sbGVjdGlvbjogdHJ1ZX1cblx0KTogQ29sbGVjdGlvbkVkaXRSZXNvdXJjZTxWaWV3UmVzb3VyY2U+O1xuXG5cdGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZSAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksXG5cdFx0cmVzb3VyY2VPcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlICYge2VkaXRJdGVtczogdHJ1ZX1cblx0KTogQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxFZGl0UmVzb3VyY2U+O1xuXG5cdGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZSAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksXG5cdFx0cmVzb3VyY2VPcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlXG5cdCk6IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8Vmlld1Jlc291cmNlPjtcblxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UgKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdHJlc291cmNlT3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZVxuXHQpOiBDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVJlc291cmNlPiB7XG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvblJlc291cmNlRmFjdG9yeS5jb25zdHJ1Y3QoY29sbGVjdGlvbkVudHJ5LCByZXNvdXJjZU9wdGlvbnMsIHRoaXMpO1xuXHR9XG5cblx0Y3JlYXRlQ29sbGVjdGlvblJlc291cmNlcyAoXG5cdFx0Y29sbGVjdGlvbkVudHJpZXM6IENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwLFxuXHRcdHJlc291cmNlT3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0SXRlbXM6IHRydWUsIGVkaXRDb2xsZWN0aW9uOiB0cnVlfVxuXHQpOiBDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcDxDb2xsZWN0aW9uRWRpdFJlc291cmNlPEVkaXRSZXNvdXJjZT4+O1xuXG5cdGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZXMgKFxuXHRcdGNvbGxlY3Rpb25FbnRyaWVzOiBDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCxcblx0XHRyZXNvdXJjZU9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdENvbGxlY3Rpb246IHRydWV9XG5cdCk6IENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwPENvbGxlY3Rpb25FZGl0UmVzb3VyY2U8Vmlld1Jlc291cmNlPj47XG5cblx0Y3JlYXRlQ29sbGVjdGlvblJlc291cmNlcyAoXG5cdFx0Y29sbGVjdGlvbkVudHJpZXM6IENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwLFxuXHRcdHJlc291cmNlT3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZSAgJiB7ZWRpdEl0ZW1zOiB0cnVlfVxuXHQpOiBDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcDxDb2xsZWN0aW9uVmlld1Jlc291cmNlPEVkaXRSZXNvdXJjZT4+O1xuXG5cdGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZXMgKFxuXHRcdGNvbGxlY3Rpb25FbnRyaWVzOiBDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCxcblx0XHRyZXNvdXJjZU9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2Vcblx0KTogQ29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA8Q29sbGVjdGlvblZpZXdSZXNvdXJjZTxWaWV3UmVzb3VyY2U+PjtcblxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2VzIChcblx0XHRjb2xsZWN0aW9uRW50cmllczogQ29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXAsXG5cdFx0cmVzb3VyY2VPcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlXG5cdCkge1xuXHRcdGNvbnN0IHJlc3VsdDoge1twYXJlbnRJZDogc3RyaW5nXTogQ29sbGVjdGlvblJlc291cmNlfSA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBjb2xsZWN0aW9uRW50cmllcylcblx0XHRcdHJlc3VsdFtwYXJlbnRJZF0gPSB0aGlzLmNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZShjb2xsZWN0aW9uRW50cmllc1twYXJlbnRJZF0sIHJlc291cmNlT3B0aW9ucyk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Y2xlYXJJdGVtIChpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSk6IHZvaWQge1xuXHRcdHRoaXMuY2xlYXJJdGVtRW50cnkoaXRlbVJlc291cmNlLmVudHJ5KTtcblx0fVxuXG5cdGNsZWFySXRlbUVudHJ5IChpdGVtRW50cnk6IEl0ZW1FbnRyeSk6IHZvaWQge1xuXHRcdHRoaXMuaXRlbXMuY2xlYXIoaXRlbUVudHJ5KTtcblx0XHRpdGVtRW50cnkuY2xlYXJSZXNvdXJjZXMoKTtcblx0fVxuXG5cdGNsZWFyQ29sbGVjdGlvbiAoY29sbGVjdGlvblJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UpOiB2b2lkIHtcblx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBjb2xsZWN0aW9uUmVzb3VyY2UuZW50cnk7XG5cblx0XHR0aGlzLmNvbGxlY3Rpb25zLmNsZWFyKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0Y29sbGVjdGlvbkVudHJ5LmNsZWFyUmVzb3VyY2VzKCk7XG5cdH1cblxuXHRjbGVhclJlc291cmNlcyAoaXNTdWJUYWJDaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuXHRcdHRoaXMuaXRlbXMuZm9yRWFjaChcblx0XHRcdChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gaXRlbUVudHJ5LmNsZWFyUmVzb3VyY2VzKClcblx0XHQpO1xuXG5cdFx0dGhpcy5jb2xsZWN0aW9ucy5mb3JFYWNoKFxuXHRcdFx0KGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiBjb2xsZWN0aW9uRW50cnkuY2xlYXJSZXNvdXJjZXMoaXNTdWJUYWJDaGFuZ2UpXG5cdFx0KTtcblxuXHRcdHRoaXMuZGVmZXJyZWRDb2xsZWN0aW9ucy5jbGVhcigpO1xuXHR9XG5cblx0dXBkYXRlU2luZ2xlSXRlbXMgKGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGNvbnZlcnNpb25NYXApIHtcblx0XHRcdGZvciAoY29uc3Qgb2xkSXRlbUlkIGluIGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdKSB7XG5cdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuaXRlbXMuZ2V0KGl0ZW1UeXBlLCBwYXJzZUludChvbGRJdGVtSWQsIDEwKSk7XG5cblx0XHRcdFx0aWYgKGl0ZW1FbnRyeSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdHRoaXMuaXRlbXMudXBkYXRlSXRlbUlkKGl0ZW1FbnRyeSwgcGFyc2VJbnQob2xkSXRlbUlkLCAxMCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIHJlc291cmNlcyB3aWxsIGJlIGNsZWFyZWQgbGF0ZXIgKGNsZWFyIGZ1bmN0aW9uKVxuXHRyZXZlcnRDaGFuZ2VzICgpOiBQcm9taXNlSW50ZXJmYWNlPHZvaWQ+IHtcblx0XHR0aGlzLml0ZW1zLmZvckVhY2goXG5cdFx0XHQoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGl0ZW1FbnRyeS5yZXNldE1vZGlmaWVkKClcblx0XHQpO1xuXG5cdFx0dGhpcy5jb2xsZWN0aW9ucy5mb3JFYWNoKFxuXHRcdFx0KGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiB0aGlzLnJlc2V0Q29sbGVjdGlvbihjb2xsZWN0aW9uRW50cnkpXG5cdFx0KTtcblxuXHRcdHRoaXMuaGFzQ2hhbmdlcyA9IGZhbHNlO1xuXG5cdFx0cmV0dXJuIHRoaXMuaXNMb2NrYWJsZSgpID9cblx0XHRcdHRoaXMubG9ja1NlcnZpY2UuZGVsZXRlTG9jayh0aGlzLnJvb3RJdGVtISkgOlxuXHRcdFx0dGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XG5cdH1cblxuXHRyZXNldENvbGxlY3Rpb24gKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KTogdm9pZCB7XG5cdFx0Ly8gcmV2ZXJ0IGNoYW5nZXMgZm9yICphbGwqIGNvbGxlY3Rpb25zLCBpdGVtcyBtaWdodCBoYXZlIGJlZW4gYWRkZWQgb24gcmVzb2x2ZVxuXHRcdGNvbGxlY3Rpb25FbnRyeS5pdGVtcyA9IGNvbGxlY3Rpb25FbnRyeS5pbml0aWFsLnNsaWNlKCk7XG5cblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5Lmhhc0l0ZW1FZGl0UmVzb3VyY2VzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBjb2xsZWN0aW9uRW50cnkuaXRlbXMpXG5cdFx0XHRcdGl0ZW1FbnRyeS5yZXNldE1vZGlmaWVkKCk7XG5cdFx0fVxuXHR9XG5cblx0ZGV0ZWN0Q2hhbmdlcyAoKTogYm9vbGVhbiB7XG5cdFx0aWYgKHRoaXMuaGFzQ2hhbmdlcylcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0aWYgKHRoaXMuaXRlbXMuc29tZSgoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGl0ZW1FbnRyeS5oYXNDaGFuZ2VzKCkpKVxuXHRcdFx0cmV0dXJuIHRoaXMuaGFzQ2hhbmdlcyA9IHRydWU7XG5cblx0XHRyZXR1cm4gdGhpcy5oYXNDaGFuZ2VzID0gdGhpcy5jb2xsZWN0aW9ucy5zb21lKChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4gdGhpcy5jb2xsZWN0aW9uSGFzQ2hhbmdlcyhjb2xsZWN0aW9uRW50cnkpKTtcblx0fVxuXG5cdHByaXZhdGUgY29sbGVjdGlvbkhhc0NoYW5nZXMgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KTogYm9vbGVhbiB7XG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5oYXNFZGl0UmVzb3VyY2VzICYmIChjb2xsZWN0aW9uRW50cnkuaGFzQWRkZWRJdGVtcygpIHx8IGNvbGxlY3Rpb25FbnRyeS5oYXNSZW1vdmVkSXRlbXMoKSkpXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnkuaGFzSXRlbUVkaXRSZXNvdXJjZXMgJiYgY29sbGVjdGlvbkVudHJ5Lmhhc1VwZGF0ZWRJdGVtcygpO1xuXHR9XG5cblx0aXNMb2NrYWJsZSAoKTogYm9vbGVhbiB7XG5cdFx0aWYgKHRoaXMucm9vdEl0ZW0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJldHVybiB0aGlzLnJvb3RJdGVtLmlzTG9ja2FibGUoKTtcblx0fVxuXG5cdHNhdmUgKFxuXHRcdGNsb3NlVGFiID0gZmFsc2UsXG5cdFx0cGFyYW1ldGVyczogQ3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCA9IHt9LFxuXHRcdGJyZWFrVXBCeVBhcmVudD86IGJvb2xlYW4sXG5cdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrPzogKGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApID0+IHZvaWRcblx0KTogUHJvbWlzZUludGVyZmFjZTxJdGVtSWRDb252ZXJzaW9uTWFwPiB7XG5cdFx0aWYgKHRoaXMuaXNTYXZpbmcpXG5cdFx0XHRyZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIucmVqZWN0KCk7XG5cblx0XHR0aGlzLmlzU2F2aW5nID0gdHJ1ZTtcblxuXHRcdHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xuXHRcdHRoaXMuZGlzYWJsZUNoYW5nZXNXYXRjaGVyKCk7XG5cblx0XHRyZXR1cm4gKHRoaXMuaXNMb2NrYWJsZSgpID8gdGhpcy5sb2NrU2VydmljZS5mZXRjaExvY2sodGhpcy5yb290SXRlbSBhcyBJdGVtRW50cnkpIDogdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCkpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmV4ZWN1dGVDYWxsYmFja0V2ZW50KHRoaXMuY2FsbGJhY2tzLm9uQmVmb3JlU2F2ZSwgY2FsbGJhY2sgPT4gY2FsbGJhY2sodGhpcyksIGNsb3NlVGFiKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlcXVlc3RQYXJhbWV0ZXJzID0gZXh0ZW5kKHt9LCB0aGlzLnRhYlJlcXVlc3RQYXJhbWV0ZXJzLCBwYXJhbWV0ZXJzKTtcblxuXHRcdFx0XHR0aGlzLnRhYlJlcXVlc3RQYXJhbWV0ZXJzID0ge307XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkuY29uc3RydWN0KCkuZXhlY3V0ZShcblx0XHRcdFx0XHR0aGlzLml0ZW1zLnRvQXJyYXkoKSxcblx0XHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25zLnRvQXJyYXkoKSxcblx0XHRcdFx0XHRyZXF1ZXN0UGFyYW1ldGVycyxcblx0XHRcdFx0XHRicmVha1VwQnlQYXJlbnQsXG5cdFx0XHRcdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0KGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuaXNMb2NrYWJsZSgpKVxuXHRcdFx0XHRcdHRoaXMubG9ja1NlcnZpY2UuY2xlYXJMb2NrKHRoaXMucm9vdEl0ZW0gYXMgSXRlbUVudHJ5KTtcblxuXHRcdFx0XHR0aGlzLmhhc0NoYW5nZXMgPSBmYWxzZTtcblxuXHRcdFx0XHRpZiAoIWNsb3NlVGFiKVxuXHRcdFx0XHRcdHRoaXMudXBkYXRlU2luZ2xlSXRlbXMoY29udmVyc2lvbk1hcCk7XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZUNhbGxiYWNrRXZlbnQoXG5cdFx0XHRcdFx0dGhpcy5jYWxsYmFja3Mub25TYXZlU3VjY2Vzcyxcblx0XHRcdFx0XHRjYWxsYmFjayA9PiBjYWxsYmFjayh0aGlzLCBjb252ZXJzaW9uTWFwKSxcblx0XHRcdFx0XHRjbG9zZVRhYlxuXHRcdFx0XHQpLnRoZW4oXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKCFjbG9zZVRhYilcblx0XHRcdFx0XHRcdFx0dGhpcy5lbmFibGVDaGFuZ2VzV2F0Y2hlcigpO1xuXG5cdFx0XHRcdFx0XHR0aGlzLmlzU2F2aW5nID0gZmFsc2U7XG5cblx0XHRcdFx0XHRcdHJldHVybiBjb252ZXJzaW9uTWFwO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS5jYXRjaCgoZXJyb3I6IGFueSkgPT4ge1xuXHRcdFx0dGhpcy5pc1NhdmluZyA9IGZhbHNlO1xuXG5cdFx0XHRyZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIucmVqZWN0KGVycm9yKTtcblx0XHR9KTtcblx0fVxuXG5cdG9uQmVmb3JlU2F2ZSAoXG5cdFx0a2V5OiBzdHJpbmcsXG5cdFx0Y2FsbGJhY2s6IChsb2NhbENhY2hlOiBMb2NhbENhY2hlKSA9PiBhbnksXG5cdFx0Y29uZGl0aW9uOiBMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24gPSBMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24uQWx3YXlzXG5cdCk6ICgpID0+IHZvaWQge1xuXHRcdGNvbnN0IGNhbGxiYWNrcyA9IHRoaXMuY2FsbGJhY2tzLm9uQmVmb3JlU2F2ZVtjb25kaXRpb25dO1xuXG5cdFx0Y2FsbGJhY2tzW2tleV0gPSBjYWxsYmFjaztcblxuXHRcdHJldHVybiAoKSA9PiBkZWxldGUgY2FsbGJhY2tzW2tleV07XG5cdH1cblxuXHRvblNhdmVTdWNjZXNzIChcblx0XHRrZXk6IHN0cmluZyxcblx0XHRjYWxsYmFjazogT25TYXZlQ2FsbGJhY2ssXG5cdFx0Y29uZGl0aW9uOiBMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24gPSBMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24uQWx3YXlzXG5cdCk6ICgpID0+IHZvaWQge1xuXHRcdGNvbnN0IGNhbGxiYWNrcyA9IHRoaXMuY2FsbGJhY2tzLm9uU2F2ZVN1Y2Nlc3NbY29uZGl0aW9uXTtcblxuXHRcdGNhbGxiYWNrc1trZXldID0gY2FsbGJhY2s7XG5cblx0XHRyZXR1cm4gKCkgPT4gZGVsZXRlIGNhbGxiYWNrc1trZXldO1xuXHR9XG5cblx0cHJpdmF0ZSBleGVjdXRlQ2FsbGJhY2tFdmVudDxUPiAoXG5cdFx0Y2FsbGJhY2tzOiBMb2NhbENhY2hlQ2FsbGJhY2tzPFQ+LFxuXHRcdGV4ZWN1dGU6IChjYWxsYmFjazogVCkgPT4gYW55LFxuXHRcdGNsb3NlVGFiOiBib29sZWFuXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8YW55PiB7XG5cdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZUNhbGxiYWNrcyhjYWxsYmFja3NbTG9jYWxDYWNoZUNhbGxiYWNrQ29uZGl0aW9uLkFsd2F5c10sIGV4ZWN1dGUpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmV4ZWN1dGVDYWxsYmFja3MoXG5cdFx0XHRcdFx0Y2FsbGJhY2tzW2Nsb3NlVGFiID8gTG9jYWxDYWNoZUNhbGxiYWNrQ29uZGl0aW9uLk9uQ2xvc2UgOiBMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24uU2tpcE9uQ2xvc2VdLFxuXHRcdFx0XHRcdGV4ZWN1dGVcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBleGVjdXRlQ2FsbGJhY2tzPFQ+IChjYWxsYmFja3M6IHtba2V5OiBzdHJpbmddOiBUfSwgZXhlY3V0ZTogKGNhbGxiYWNrOiBUKSA9PiBhbnkpIHtcblx0XHRjb25zdCByZXN1bHQ6IHtba2V5OiBzdHJpbmddOiBhbnl9ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGtleSBpbiBjYWxsYmFja3MpXG5cdFx0XHRyZXN1bHRba2V5XSA9IGV4ZWN1dGUoY2FsbGJhY2tzW2tleV0pO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHJlc3VsdCk7XG5cdH1cblxuXHRlbmFibGVDaGFuZ2VzV2F0Y2hlciAoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuY2hhbmdlc0ludGVydmFsICE9PSBudWxsKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ0NoYW5nZXMgd2F0Y2hlciBhbHJlYWR5IHJ1bm5pbmchJywgdGhpcyk7XG5cdFx0XHR0aGlzLmRpc2FibGVDaGFuZ2VzV2F0Y2hlcigpO1xuXHRcdH1cblxuXHRcdHRoaXMuY2hhbmdlc0ludGVydmFsID0gc2V0SW50ZXJ2YWwoXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdGlmICghdGhpcy5kZXRlY3RDaGFuZ2VzKCkpXG5cdFx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHRcdHRoaXMuZGlzYWJsZUNoYW5nZXNXYXRjaGVyKCk7XG5cblx0XHRcdFx0aWYgKHRoaXMuaXNMb2NrYWJsZSgpKVxuXHRcdFx0XHRcdHRoaXMubG9ja1NlcnZpY2UuZmV0Y2hMb2NrKHRoaXMucm9vdEl0ZW0gYXMgSXRlbUVudHJ5KTtcblx0XHRcdH0sXG5cdFx0XHQzMDAwXG5cdFx0KTtcblx0fVxuXG5cdGRpc2FibGVDaGFuZ2VzV2F0Y2hlciAoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuY2hhbmdlc0ludGVydmFsID09PSBudWxsKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0Y2xlYXJJbnRlcnZhbCh0aGlzLmNoYW5nZXNJbnRlcnZhbCk7XG5cdFx0dGhpcy5jaGFuZ2VzSW50ZXJ2YWwgPSBudWxsO1xuXHR9XG5cblx0b25EZWFjdGl2YXRlSXRlbSAoaXRlbUVudHJ5OiBJdGVtRW50cnkpOiB2b2lkIHtcblx0XHR0aGlzLmNsZWFySXRlbUVudHJ5KGl0ZW1FbnRyeSk7XG5cdFx0Ly8gdGhpcy5oYXNDaGFuZ2VzID0gdHJ1ZTtcblx0fVxuXG5cdG9uQWN0aXZhdGVJdGVtIChpdGVtRW50cnk6IEl0ZW1FbnRyeSk6IHZvaWQge1xuXHRcdHRoaXMuaXRlbXMuYWRkKGl0ZW1FbnRyeSk7XG5cdFx0Ly8gdGhpcy5oYXNDaGFuZ2VzID0gdHJ1ZTtcblx0fVxufVxuIiwiaW1wb3J0IHsgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBJdGVtSWQsIEl0ZW1NYXAsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IGNyZWF0ZVBhdGggfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgdHlwZSBMb2NrVG9rZW4gPSB7aXNGb3JlaWduOiBmYWxzZSwgaWQ6IG51bWJlciwgdG9rZW46IHN0cmluZ30gfCB7aXNGb3JlaWduOiB0cnVlLCBtZXNzYWdlOiBzdHJpbmd9O1xuXG5leHBvcnQgY2xhc3MgTG9ja1NlcnZpY2Uge1xuXHRsb2NrSXRlbXM6IEl0ZW1NYXA8TG9ja1Rva2VuPiA9IHt9O1xuXG5cdHByb21pc2VzOiBJdGVtTWFwPFByb21pc2VJbnRlcmZhY2U8TG9ja1Rva2VuPj4gPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2Vcblx0KSB7XG5cblx0fVxuXG5cdHByaXZhdGUgZ2V0VmFsdWU8VD4gKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBtYXA6IEl0ZW1NYXA8VD4pOiB1bmRlZmluZWQgfCBUIHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcblxuXHRcdGlmIChtYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0cmV0dXJuIG1hcFtpdGVtVHlwZV1baXRlbUVudHJ5Lml0ZW1JZF07XG5cdH1cblxuXHRwcml2YXRlIHNldFZhbHVlPFQ+IChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgdmFsdWU6IFQsIG1hcDogSXRlbU1hcDxUPik6IFQge1xuXHRcdHJldHVybiBjcmVhdGVQYXRoKFxuXHRcdFx0bWFwLFxuXHRcdFx0W2l0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXG5cdFx0XHRbe30sIHZhbHVlXVxuXHRcdCk7XG5cdH1cblxuXHRnZXRMb2NrcyAoKTogdGhpc1snbG9ja0l0ZW1zJ10ge1xuXHRcdHJldHVybiB0aGlzLmxvY2tJdGVtcztcblx0fVxuXG5cdGhhc0xvY2sgKGxvY2tUb2tlbklkOiBJdGVtSWQpOiBib29sZWFuIHtcblx0XHRjb25zdCBsb2NrSXRlbXMgPSB0aGlzLmxvY2tJdGVtcztcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gbG9ja0l0ZW1zKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBsb2NrSXRlbXNbaXRlbVR5cGVdKSB7XG5cdFx0XHRcdGNvbnN0IGxvY2tJdGVtID0gbG9ja0l0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXG5cdFx0XHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXG5cdFx0XHRcdGlmICghbG9ja0l0ZW0uaXNGb3JlaWduICYmIGxvY2tJdGVtLmlkID09IGxvY2tUb2tlbklkKVxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIHNob3VsZCBiZSBmYXN0ICh3YXRjaGVkKVxuXHRpc0xvY2tlZCAoaXRlbUVudHJ5OiBJdGVtRW50cnkpOiBib29sZWFuIHtcblx0XHRjb25zdCBsb2NrSXRlbSA9IHRoaXMuZ2V0VmFsdWUoaXRlbUVudHJ5LCB0aGlzLmxvY2tJdGVtcyk7XG5cblx0XHRpZiAobG9ja0l0ZW0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJldHVybiBsb2NrSXRlbS5pc0ZvcmVpZ247XG5cdH1cblxuXHRnZXRNZXNzYWdlIChpdGVtRW50cnk6IEl0ZW1FbnRyeSk6IHVuZGVmaW5lZCB8IHN0cmluZyB7XG5cdFx0Y29uc3QgbG9ja0l0ZW0gPSB0aGlzLmdldFZhbHVlKGl0ZW1FbnRyeSwgdGhpcy5sb2NrSXRlbXMpO1xuXG5cdFx0aWYgKGxvY2tJdGVtID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0aWYgKCFsb2NrSXRlbS5pc0ZvcmVpZ24pXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0cmV0dXJuIGxvY2tJdGVtLm1lc3NhZ2U7XG5cdH1cblxuXHQvLyBkb2VzIG5vdCByZWplY3Qgd2hlbiBhIGZvcmVpZ24gbG9jayBpcyBlbmNvdW50ZXJlZFxuXHQvLyBpcyBhbHNvIHVzZWQgYnkgZGVsZXRlTG9ja1xuXHRmZXRjaENhY2hlZExvY2sgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KTogUHJvbWlzZUludGVyZmFjZTx1bmRlZmluZWQgfCBMb2NrVG9rZW4+IHtcblx0XHRjb25zdCBsb2NrID0gdGhpcy5nZXRWYWx1ZShpdGVtRW50cnksIHRoaXMubG9ja0l0ZW1zKTtcblxuXHRcdGlmIChsb2NrICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGxvY2spO1xuXG5cdFx0Y29uc3QgcHJvbWlzZSA9IHRoaXMuZ2V0VmFsdWUoaXRlbUVudHJ5LCB0aGlzLnByb21pc2VzKTtcblxuXHRcdGlmIChwcm9taXNlICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcHJvbWlzZTtcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcblx0fVxuXG5cdGZldGNoTG9jayAoaXRlbUVudHJ5OiBJdGVtRW50cnkpOiBQcm9taXNlSW50ZXJmYWNlPHN0cmluZz4ge1xuXHRcdGNvbnN0IGVycm9ySGFuZGxlciA9IHRoaXMuZXJyb3JIYW5kbGVyO1xuXG5cdFx0cmV0dXJuIHRoaXMuZmV0Y2hDYWNoZWRMb2NrKGl0ZW1FbnRyeSkudGhlbihcblx0XHRcdGxvY2tJdGVtID0+IHtcblx0XHRcdFx0aWYgKGxvY2tJdGVtICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0cmV0dXJuIGxvY2tJdGVtO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLnJlcXVlc3RMb2NrKGl0ZW1FbnRyeSk7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihcblx0XHRcdGxvY2tJdGVtID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2tJdGVtLmlzRm9yZWlnbiA/XG5cdFx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdChsb2NrSXRlbS5tZXNzYWdlKSA6XG5cdFx0XHRcdFx0bG9ja0l0ZW0udG9rZW47XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRyZXF1ZXN0TG9jayAoaXRlbUVudHJ5OiBJdGVtRW50cnkpOiBQcm9taXNlSW50ZXJmYWNlPExvY2tUb2tlbj4ge1xuXHRcdGNvbnN0IHtpdGVtVHlwZSwgaXRlbUlkfSA9IGl0ZW1FbnRyeTtcblxuXHRcdGNvbnN0IHByb21pc2UgPSB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLmNyZWF0ZShcblx0XHRcdCdMb2NrdG9rZW4nLFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKSxcblx0XHRcdHtpdGVtdHlwZTogaXRlbVR5cGUsIGl0ZW06IGl0ZW1JZH1cblx0XHQpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzLnByb21pc2VzW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLnNldFZhbHVlKFxuXHRcdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChcblx0XHRcdFx0XHRcdCdMb2NrdG9rZW4nLFxuXHRcdFx0XHRcdFx0cmVzcG9uc2UubGlua3MuTG9ja3Rva2VuWzBdXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR0aGlzLmxvY2tJdGVtc1xuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdGVycm9yID0+IHtcblx0XHRcdFx0ZGVsZXRlIHRoaXMucHJvbWlzZXNbaXRlbVR5cGVdW2l0ZW1JZF07XG5cblx0XHRcdFx0aWYgKGVycm9yLmNvZGUgPT09IDMwMSkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLnNldFZhbHVlKFxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRpc0ZvcmVpZ246IHRydWUsXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2Vcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR0aGlzLmxvY2tJdGVtc1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIucmVqZWN0KGVycm9yKTtcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0cmV0dXJuIHRoaXMuc2V0VmFsdWUoaXRlbUVudHJ5LCBwcm9taXNlLCB0aGlzLnByb21pc2VzKTtcblx0fVxuXG5cdGRlbGV0ZUxvY2sgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KTogUHJvbWlzZUludGVyZmFjZTx2b2lkPiB7XG5cdFx0cmV0dXJuIHRoaXMuZmV0Y2hDYWNoZWRMb2NrKGl0ZW1FbnRyeSkudGhlbihcblx0XHRcdGNhY2hlZExvY2sgPT4ge1xuXHRcdFx0XHRpZiAoY2FjaGVkTG9jayA9PT0gdW5kZWZpbmVkKSAvLyB1bmRlZmluZWQ6IG5vdCByZXF1ZXN0ZWQgeWV0XG5cdFx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHRcdGlmIChjYWNoZWRMb2NrLmlzRm9yZWlnbikge1xuXHRcdFx0XHRcdHRoaXMuY2xlYXJMb2NrKGl0ZW1FbnRyeSk7XG5cblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5kZWxldGUoJ0xvY2t0b2tlbicsIFtjYWNoZWRMb2NrLmlkXSkudGhlbihcblx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLmNsZWFyTG9jayhpdGVtRW50cnkpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGNsZWFyTG9jayAoaXRlbUVudHJ5OiBJdGVtRW50cnkpOiBib29sZWFuIHtcblx0XHRjb25zdCBsb2NrSXRlbXMgPSB0aGlzLmxvY2tJdGVtc1tpdGVtRW50cnkuaXRlbVR5cGVdO1xuXG5cdFx0aWYgKGxvY2tJdGVtcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0cmV0dXJuIGRlbGV0ZSBsb2NrSXRlbXNbaXRlbUVudHJ5Lml0ZW1JZF07XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSwgSXRlbUNhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdEl0ZW1NYXAsIEZpZWxkTWFwLCBJdGVtSWQsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBoYXNQcm9wZXJ0aWVzIH0gZnJvbSAnLi9VdGlsJztcblxuY29uc3QgRU1QVFlfRU5UUlkgPSB7fTtcblxuZXhwb3J0IHR5cGUgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uUmVzdWx0ID0ge1xuXHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdGl0ZW1JZDogSXRlbUlkLFxuXHRpdGVtczogQXBpUmVxdWVzdEl0ZW1NYXBcbn07XG5cbmV4cG9ydCBjbGFzcyBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb24ge1xuXHRwYXJlbnRNYXA6IGFueSA9IHt9O1xuXHRkZXN0aW5hdGlvbjogQXBpUmVxdWVzdEl0ZW1NYXAgPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSByb290SXRlbUVudHJ5OiBJdGVtRW50cnksXG5cdFx0cHJpdmF0ZSBzaW5nbGVJdGVtQ2FjaGU6IEl0ZW1DYWNoZSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlXG5cdCkge1xuXHR9XG5cblx0cHJvY2VzcyAoKTogTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uUmVzdWx0IHtcblx0XHR0aGlzLnBhcmVudE1hcCA9IHRoaXMuY3JlYXRlUGFyZW50TWFwKHRoaXMuc2luZ2xlSXRlbUNhY2hlKTtcblx0XHR0aGlzLnByb2Nlc3NJdGVtcyh0aGlzLnJvb3RJdGVtRW50cnkuaXRlbVR5cGUsIFt0aGlzLnJvb3RJdGVtRW50cnldLCB7fSk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0aXRlbVR5cGU6IHRoaXMucm9vdEl0ZW1FbnRyeS5pdGVtVHlwZSxcblx0XHRcdGl0ZW1JZDogdGhpcy5yb290SXRlbUVudHJ5Lml0ZW1JZCxcblx0XHRcdGl0ZW1zOiB0aGlzLmRlc3RpbmF0aW9uXG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgY3JlYXRlUGFyZW50TWFwIChpdGVtQ2FjaGU6IEl0ZW1DYWNoZSkge1xuXHRcdGNvbnN0IHJlc3VsdDoge1xuXHRcdFx0W3BhcmVudFR5cGU6IHN0cmluZ106IHtcblx0XHRcdFx0W3BhcmVudElkOiBudW1iZXJdOiB7XG5cdFx0XHRcdFx0W2l0ZW1UeXBlOiBzdHJpbmddOiBJdGVtRW50cnlbXVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSA9IHt9O1xuXG5cdFx0aXRlbUNhY2hlLmZvckVhY2goXG5cdFx0XHRpdGVtRW50cnkgPT4ge1xuXHRcdFx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcblx0XHRcdFx0Y29uc3QgcGFyZW50ID0gaXRlbUVudHJ5LnBhcmVudDtcblxuXHRcdFx0XHRpZiAocGFyZW50ID09PSBudWxsKSAvLyB3ZSBkb24ndCBjYXJlIGZvciBpdGVtcyB0aGF0IGFyZSBub3QgbGlua2VkIHRvIHRoZSByb290IGl0ZW1cblx0XHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdFx0Y29uc3QgcGFyZW50VHlwZSA9IHBhcmVudC5pdGVtVHlwZTtcblx0XHRcdFx0Y29uc3QgcGFyZW50SWQgPSBwYXJlbnQuaXRlbUlkO1xuXG5cdFx0XHRcdGlmIChyZXN1bHRbcGFyZW50VHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRyZXN1bHRbcGFyZW50VHlwZV0gPSB7fTtcblxuXHRcdFx0XHRpZiAocmVzdWx0W3BhcmVudFR5cGVdW3BhcmVudElkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdHJlc3VsdFtwYXJlbnRUeXBlXVtwYXJlbnRJZF0gPSB7fTtcblxuXHRcdFx0XHRpZiAocmVzdWx0W3BhcmVudFR5cGVdW3BhcmVudElkXVtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRyZXN1bHRbcGFyZW50VHlwZV1bcGFyZW50SWRdW2l0ZW1UeXBlXSA9IFtdO1xuXG5cdFx0XHRcdHJlc3VsdFtwYXJlbnRUeXBlXVtwYXJlbnRJZF1baXRlbVR5cGVdLnB1c2goaXRlbUVudHJ5KTtcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHByaXZhdGUgcHJvY2Vzc0l0ZW1zIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgbGlua0FjY3VtdWxhdG9yOiB7W2l0ZW1UeXBlOiBzdHJpbmddOiBJdGVtSWRbXX0pIHtcblx0XHRpZiAodGhpcy5kZXN0aW5hdGlvbltpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHRoaXMuZGVzdGluYXRpb25baXRlbVR5cGVdID0ge307XG5cblx0XHRpZiAobGlua0FjY3VtdWxhdG9yW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0bGlua0FjY3VtdWxhdG9yW2l0ZW1UeXBlXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XG5cblx0XHRcdC8vIGVhY2ggaXRlbSBvbmx5IGhhcyBhIHNpbmdsZSBwYXJlbnQsIHNvIHdlIGNhbiBzYWZlbHkgZG8gdGhpc1xuXHRcdFx0aWYgKHRoaXMuZGVzdGluYXRpb25baXRlbVR5cGVdW2l0ZW1JZF0gIT09IHVuZGVmaW5lZClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGxpbmtBY2N1bXVsYXRvcltpdGVtVHlwZV0ucHVzaChpdGVtSWQpO1xuXG5cdFx0XHR0aGlzLmRlc3RpbmF0aW9uW2l0ZW1UeXBlXVtpdGVtSWRdID0gdGhpcy5wcm9jZXNzSXRlbShpdGVtRW50cnkpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgcHJvY2Vzc0l0ZW0gKGl0ZW1FbnRyeTogSXRlbUVudHJ5KToge3ZhbHVlcz86IEZpZWxkTWFwLCBsaW5rcz86IHtbaXRlbVR5cGU6IHN0cmluZ106IEl0ZW1JZFtdfX0ge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XG5cdFx0Y29uc3QgY2hpbGRJdGVtcyA9IHRoaXMuZ2V0SXRlbXNCeVBhcmVudChpdGVtVHlwZSwgaXRlbUlkKTtcblx0XHRjb25zdCBjaGlsZENvbGxlY3Rpb25zID0gdGhpcy5jb2xsZWN0aW9uQ2FjaGUuZ2V0Q29sbGVjdGlvbnNCeVBhcmVudChpdGVtVHlwZSwgaXRlbUlkKTtcblx0XHRjb25zdCB2YWx1ZXMgPSBpdGVtRW50cnkuZm9ybWF0UmVxdWVzdCgpO1xuXHRcdGNvbnN0IGxpbmtzID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGNoaWxkVHlwZSBpbiBjaGlsZEl0ZW1zKVxuXHRcdFx0dGhpcy5wcm9jZXNzSXRlbXMoY2hpbGRUeXBlLCBjaGlsZEl0ZW1zW2NoaWxkVHlwZV0sIGxpbmtzKTtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIGNoaWxkQ29sbGVjdGlvbnMpIHtcblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkub3B0aW9ucy5xdWVyeSAhPT0gbnVsbClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdHRoaXMucHJvY2Vzc0l0ZW1zKGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZSwgY29sbGVjdGlvbkVudHJ5Lml0ZW1zLCBsaW5rcyk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaGFzVmFsdWVzID0gaGFzUHJvcGVydGllcyh2YWx1ZXMpO1xuXHRcdGNvbnN0IGhhc0xpbmtzID0gaGFzUHJvcGVydGllcyhsaW5rcyk7XG5cblx0XHRpZiAoaGFzVmFsdWVzICYmIGhhc0xpbmtzKVxuXHRcdFx0cmV0dXJuIHt2YWx1ZXM6IHZhbHVlcywgbGlua3M6IGxpbmtzfTtcblxuXHRcdGlmIChoYXNWYWx1ZXMpXG5cdFx0XHRyZXR1cm4ge3ZhbHVlczogdmFsdWVzfTtcblxuXHRcdGlmIChoYXNMaW5rcylcblx0XHRcdHJldHVybiB7bGlua3M6IGxpbmtzfTtcblxuXHRcdHJldHVybiBFTVBUWV9FTlRSWTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0SXRlbXNCeVBhcmVudCAocGFyZW50VHlwZTogSXRlbVR5cGUsIHBhcmVudElkOiBJdGVtSWQpIHtcblx0XHRjb25zdCBtYXBFbnRyeSA9IHRoaXMucGFyZW50TWFwW3BhcmVudFR5cGVdO1xuXG5cdFx0aWYgKG1hcEVudHJ5ID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4ge307XG5cblx0XHRpZiAobWFwRW50cnlbcGFyZW50SWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4ge307XG5cblx0XHRyZXR1cm4gbWFwRW50cnlbcGFyZW50SWRdO1xuXHR9XG59XG4iLCJpbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcblxuaW1wb3J0IHsgQXBpRm9ybWF0dGVyIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBFbnRyeVBhcmVudE51bGwsIEZpZWxkTWFwLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgaGFzUHJvcGVydGllcywgaW5BcnJheSB9IGZyb20gJy4vVXRpbCc7XG5cbmNvbnN0IE1BWUJFID0gJ21heWJlJztcblxuZXhwb3J0IGNsYXNzIFF1ZXJ5TWF0Y2hlciB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxuXHRcdHB1YmxpYyBpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cHVibGljIGZpZWxkczogRmllbGRNYXAsXG5cdFx0cHVibGljIHBhcmVudDogRW50cnlQYXJlbnROdWxsID0gbnVsbFxuXHQpIHtcblxuXHR9XG5cblx0cHJpdmF0ZSBjb21wYXJlVmFsdWVzICh2YWx1ZTogYW55LCBxdWVyeVZhbHVlOiBhbnkpOiBib29sZWFuIHtcblx0XHRpZiAobW9tZW50LmlzTW9tZW50KHF1ZXJ5VmFsdWUpKVxuXHRcdFx0cmV0dXJuIHRoaXMuYXBpRm9ybWF0dGVyLmNvbXBhcmVNb21lbnRPYmplY3RzKHF1ZXJ5VmFsdWUsIHZhbHVlKTtcblxuXHRcdGlmIChtb21lbnQuaXNEdXJhdGlvbihxdWVyeVZhbHVlKSlcblx0XHRcdHJldHVybiB0aGlzLmFwaUZvcm1hdHRlci5jb21wYXJlRHVyYXRpb25zKHF1ZXJ5VmFsdWUsIHZhbHVlKTtcblxuXHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXG5cdFx0cmV0dXJuIHF1ZXJ5VmFsdWUgPT0gdmFsdWU7XG5cdH1cblxuXHRtYXRjaFF1ZXJ5IChxdWVyeTogYW55KTogYm9vbGVhbiB8ICdtYXliZScge1xuXHRcdGlmIChxdWVyeS5zZWFyY2ggIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBNQVlCRTtcblxuXHRcdGlmIChxdWVyeS5jdXN0b20gIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBNQVlCRTtcblxuXHRcdGlmIChxdWVyeS5saW5rZWRUbyAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXMubWF0Y2hMaW5rZWRUb1F1ZXJ5KHF1ZXJ5KTtcblxuXHRcdGlmIChxdWVyeS5jb25kaXRpb25zICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5tYXRjaENvbXBsZXhRdWVyeShxdWVyeSk7XG5cblx0XHRpZiAocXVlcnkua2V5ICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5tYXRjaFNpbXBsZVF1ZXJ5KHRoaXMuZmllbGRzW3F1ZXJ5LmtleV0sIHF1ZXJ5KTtcblxuXHRcdGlmICghaGFzUHJvcGVydGllcyhxdWVyeSkpXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRcdHRocm93IG5ldyBFcnJvcigncXVlcnlNYXRjaGVyOiBVbnN1cHBvcnRlZCBxdWVyeSEgUGFyc2VkPycpO1xuXHR9XG5cblx0cHJpdmF0ZSBtYXRjaExpbmtlZFRvUXVlcnkgKHF1ZXJ5OiBhbnkpOiBib29sZWFuIHwgJ21heWJlJyB7XG5cdFx0aWYgKHF1ZXJ5LnJldmVyc2UpXG5cdFx0XHRyZXR1cm4gTUFZQkU7XG5cblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcblx0XHRsZXQgbWF0Y2g7XG5cblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxuXHRcdFx0bWF0Y2ggPSBmYWxzZTtcblx0XHRlbHNlIGlmIChxdWVyeS5saW5rZWRUbyAhPT0gcGFyZW50Lml0ZW1UeXBlKVxuXHRcdFx0bWF0Y2ggPSBmYWxzZTtcblx0XHRlbHNlXG5cdFx0XHRtYXRjaCA9IHRoaXMubWF0Y2hTaW1wbGVRdWVyeShwYXJlbnQuaXRlbUlkLCBxdWVyeS5xdWVyeSk7XG5cblx0XHRpZiAobWF0Y2ggPT09IE1BWUJFKVxuXHRcdFx0cmV0dXJuIE1BWUJFO1xuXG5cdFx0cmV0dXJuIHF1ZXJ5Lm5vdCA/ICFtYXRjaCA6ICEhbWF0Y2g7XG5cdH1cblxuXHRwcml2YXRlIG1hdGNoQ29tcGxleFF1ZXJ5IChxdWVyeTogYW55KTogYm9vbGVhbiB8ICdtYXliZScge1xuXHRcdGNvbnN0IGNvbmRpdGlvbnMgPSBxdWVyeS5jb25kaXRpb25zO1xuXG5cdFx0bGV0IHJlc3VsdDtcblx0XHRsZXQgdGVybWluYWw7XG5cblx0XHRzd2l0Y2ggKHF1ZXJ5Lm9wZXJhdG9yKSB7XG5cdFx0XHRjYXNlICdBTkQnOlxuXHRcdFx0XHRyZXN1bHQgPSB0cnVlO1xuXHRcdFx0XHR0ZXJtaW5hbCA9IGZhbHNlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ09SJzpcblx0XHRcdFx0cmVzdWx0ID0gZmFsc2U7XG5cdFx0XHRcdHRlcm1pbmFsID0gdHJ1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ3F1ZXJ5TWF0Y2hlcjogVW5zdXBwb3J0ZWQgb3BlcmF0b3InKTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGNvbmRpdGlvbiBvZiBjb25kaXRpb25zKSB7XG5cdFx0XHRjb25zdCBtYXRjaCA9IHRoaXMubWF0Y2hRdWVyeShjb25kaXRpb24pO1xuXG5cdFx0XHRpZiAobWF0Y2ggPT09IHRlcm1pbmFsKVxuXHRcdFx0XHRyZXR1cm4gdGVybWluYWw7XG5cblx0XHRcdGlmIChtYXRjaCA9PT0gTUFZQkUpXG5cdFx0XHRcdHJlc3VsdCA9IE1BWUJFO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQgPT09IE1BWUJFID8gTUFZQkUgOiAhIXJlc3VsdDtcblx0fVxuXG5cdHByaXZhdGUgbWF0Y2hTaW1wbGVRdWVyeSAodmFsdWU6IGFueSwgcXVlcnk6IGFueSk6IGJvb2xlYW4gfCAnbWF5YmUnIHtcblx0XHRjb25zdCBrZXkgPSBxdWVyeS5rZXk7XG5cdFx0bGV0IHF1ZXJ5VmFsdWUgPSBxdWVyeS52YWx1ZTtcblxuXHRcdGlmICghaGFzUHJvcGVydGllcyhxdWVyeSkpIC8vIENvdWxkIGJlIGxpbmtlZFRvIGFuIGVtcHR5IG9iamVjdFxuXHRcdFx0cmV0dXJuIHRydWU7XG5cblx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdSZXF1aXJlZCBmaWVsZCcsIGtleSwgJ25vdCBmb3VuZCBmb3InLCB0aGlzLml0ZW1UeXBlKTtcblx0XHRcdHJldHVybiBNQVlCRTtcblx0XHR9XG5cblx0XHRpZiAocXVlcnlWYWx1ZSA9PT0gJ05PVycpXG5cdFx0XHRxdWVyeVZhbHVlID0gbW9tZW50KCk7XG5cblx0XHRzd2l0Y2ggKHF1ZXJ5LmNvbXBhcmF0b3IpIHtcblx0XHRcdGNhc2UgJz0nOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb21wYXJlVmFsdWVzKHZhbHVlLCBxdWVyeVZhbHVlKTtcblx0XHRcdGNhc2UgJyE9Jzpcblx0XHRcdFx0cmV0dXJuICF0aGlzLmNvbXBhcmVWYWx1ZXModmFsdWUsIHF1ZXJ5VmFsdWUpO1xuXHRcdFx0Y2FzZSAnPCc6XG5cdFx0XHRcdHJldHVybiB2YWx1ZSA8IHF1ZXJ5VmFsdWU7XG5cdFx0XHRjYXNlICc8PSc6XG5cdFx0XHRcdHJldHVybiB2YWx1ZSA8PSBxdWVyeVZhbHVlO1xuXHRcdFx0Y2FzZSAnPic6XG5cdFx0XHRcdHJldHVybiB2YWx1ZSA+IHF1ZXJ5VmFsdWU7XG5cdFx0XHRjYXNlICc+PSc6XG5cdFx0XHRcdHJldHVybiB2YWx1ZSA+PSBxdWVyeVZhbHVlO1xuXHRcdFx0Y2FzZSAnSU4nOlxuXHRcdFx0XHRyZXR1cm4gaW5BcnJheSh2YWx1ZSwgcXVlcnlWYWx1ZSk7XG5cdFx0XHRjYXNlICdOT1QgSU4nOlxuXHRcdFx0XHRyZXR1cm4gIWluQXJyYXkodmFsdWUsIHF1ZXJ5VmFsdWUpO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdxdWVyeU1hdGNoZXI6IFVuc3VwcG9ydGVkIGNvbXBhcmF0b3I6ICcgKyBxdWVyeS5jb21wYXJhdG9yICsgJyBpbiBxdWVyeSAnICsgcXVlcnkpO1xuXHRcdH1cblx0fVxufVxuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBnZXRGaXJzdFByb3BlcnR5IH0gZnJvbSAnLi9VdGlsJztcbmltcG9ydCB7IEFwaVF1ZXJ5IH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5lbnVtIENPTlNUQU5UUyB7XG5cdE9CSiA9IDAsXG5cdFNUUiA9IDEsXG5cdFNFUCA9ICc6J1xufVxuXG5leHBvcnQgY2xhc3MgUXVlcnlQYXJzZXIge1xuXHRxdWVyeTogQXBpUXVlcnk7XG5cdHBhcmFtZXRlcnM6IGFueTtcblxuXHRjb25zdHJ1Y3RvciAocXVlcnk6IEFwaVF1ZXJ5LCBwYXJhbWV0ZXJzPzogb2JqZWN0KSB7XG5cdFx0dGhpcy5xdWVyeSA9IHF1ZXJ5O1xuXHRcdHRoaXMucGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7XG5cdH1cblxuXHRwcml2YXRlIGNvbXBhcmVQYXJzZWRRdWVyaWVzIChhOiBbb2JqZWN0LCBzdHJpbmddLCBiOiBbb2JqZWN0LCBzdHJpbmddKSB7XG5cdFx0aWYgKGFbQ09OU1RBTlRTLlNUUl0gPT09IGJbQ09OU1RBTlRTLlNUUl0pXG5cdFx0XHRyZXR1cm4gMDtcblxuXHRcdHJldHVybiBhW0NPTlNUQU5UUy5TVFJdID4gYltDT05TVEFOVFMuU1RSXSA/IDEgOiAtMTtcblx0fVxuXG5cdHBhcnNlIChxdWVyeTogQXBpUXVlcnkgPSB0aGlzLnF1ZXJ5KTogW29iamVjdCwgc3RyaW5nXSB7XG5cdFx0aWYgKHF1ZXJ5LmxpbmtlZFRvICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZUxpbmtlZFRvUXVlcnkoXG5cdFx0XHRcdHF1ZXJ5LmxpbmtlZFRvLFxuXHRcdFx0XHRxdWVyeS5xdWVyeSxcblx0XHRcdFx0cXVlcnkucmV2ZXJzZSxcblx0XHRcdFx0cXVlcnkubm90XG5cdFx0XHQpO1xuXG5cdFx0aWYgKHF1ZXJ5Lm5vdCAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdxdWVyeVBhcnNlcjogXCJOb3RcIiBub3Qgc3VwcG9ydGVkJyk7XG5cblx0XHRpZiAocXVlcnkuY3VzdG9tICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZUN1c3RvbVF1ZXJ5KFxuXHRcdFx0XHRxdWVyeS5jdXN0b20sXG5cdFx0XHRcdHF1ZXJ5LnBhcmFtZXRlcnNcblx0XHRcdCk7XG5cblx0XHRpZiAocXVlcnkuc2VhcmNoICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZVNlYXJjaFF1ZXJ5KHF1ZXJ5LnNlYXJjaCk7XG5cblx0XHRpZiAocXVlcnkuY29uZGl0aW9ucyAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXMucGFyc2VDb21wbGV4UXVlcnkoXG5cdFx0XHRcdHF1ZXJ5LmNvbmRpdGlvbnMsXG5cdFx0XHRcdHF1ZXJ5Lm9wZXJhdG9yXG5cdFx0XHQpO1xuXG5cdFx0aWYgKHF1ZXJ5LmtleSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXMucGFyc2VTaW1wbGVRdWVyeShcblx0XHRcdFx0cXVlcnkua2V5LFxuXHRcdFx0XHRxdWVyeS52YWx1ZSxcblx0XHRcdFx0cXVlcnkuY29tcGFyYXRvclxuXHRcdFx0KTtcblxuXHRcdGNvbnN0IGtleSA9IGdldEZpcnN0UHJvcGVydHkocXVlcnkpO1xuXG5cdFx0aWYgKGtleSA9PT0gbnVsbClcblx0XHRcdHJldHVybiBbe30sICd7fSddO1xuXG5cdFx0cmV0dXJuIHRoaXMucGFyc2VTaW1wbGVRdWVyeShrZXksIHF1ZXJ5W2tleV0pO1xuXHR9XG5cblx0cHJpdmF0ZSBwYXJzZVNlYXJjaFF1ZXJ5ICh2YWx1ZTogYW55KTogW29iamVjdCwgc3RyaW5nXSB7XG5cdFx0dmFsdWUgPSB0aGlzLmZvcm1hdFZhbHVlKHZhbHVlKTtcblxuXHRcdHJldHVybiBbXG5cdFx0XHR7c2VhcmNoOiB2YWx1ZVtDT05TVEFOVFMuT0JKXX0sXG5cdFx0XHQnWycgKyAnc2VhcmNoJyArIENPTlNUQU5UUy5TRVAgKyB2YWx1ZVtDT05TVEFOVFMuU1RSXSArICddJ1xuXHRcdF07XG5cdH1cblxuXHRwcml2YXRlIHBhcnNlQ3VzdG9tUXVlcnkgKGN1c3RvbTogQXBpUXVlcnksIHBhcmFtZXRlcnM6IGFueSk6IFtvYmplY3QsIHN0cmluZ10ge1xuXHRcdGlmIChwYXJhbWV0ZXJzID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiBbXG5cdFx0XHRcdHtjdXN0b206IGN1c3RvbX0sXG5cdFx0XHRcdCdbJyArIGN1c3RvbSArICddJ1xuXHRcdFx0XTtcblx0XHR9XG5cblx0XHRjb25zdCBwYXJzZWRQYXJhbWV0ZXJzID0gdGhpcy5wYXJzZUN1c3RvbVBhcmFtZXRlcnMocGFyYW1ldGVycyk7XG5cblx0XHRyZXR1cm4gW1xuXHRcdFx0e2N1c3RvbTogY3VzdG9tLCBwYXJhbWV0ZXJzOiBwYXJzZWRQYXJhbWV0ZXJzW0NPTlNUQU5UUy5PQkpdfSxcblx0XHRcdCdbJyArIGN1c3RvbSArIENPTlNUQU5UUy5TRVAgKyBwYXJzZWRQYXJhbWV0ZXJzW0NPTlNUQU5UUy5TVFJdICsgJ10nXG5cdFx0XTtcblx0fVxuXG5cdHByaXZhdGUgcGFyc2VDdXN0b21QYXJhbWV0ZXJzIChwYXJhbWV0ZXJzOiBhbnkpOiBbb2JqZWN0LCBzdHJpbmddIHtcblx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocGFyYW1ldGVycykuc29ydCgpO1xuXG5cdFx0Y29uc3QgcXVlcnk6IEFwaVF1ZXJ5ID0ge307XG5cdFx0bGV0IHN0cmluZyA9ICcnO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBrZXkgPSBrZXlzW2ldO1xuXHRcdFx0Y29uc3QgdmFsdWUgPSB0aGlzLmZvcm1hdFZhbHVlKHBhcmFtZXRlcnNba2V5XSk7XG5cblx0XHRcdHF1ZXJ5W2tleV0gPSB2YWx1ZVtDT05TVEFOVFMuT0JKXTtcblxuXHRcdFx0aWYgKGkgPiAwKVxuXHRcdFx0XHRzdHJpbmcgKz0gQ09OU1RBTlRTLlNFUDtcblxuXHRcdFx0c3RyaW5nICs9IHZhbHVlW0NPTlNUQU5UUy5TVFJdO1xuXHRcdH1cblxuXHRcdHJldHVybiBbcXVlcnksIHN0cmluZ107XG5cdH1cblxuXHRwcml2YXRlIHBhcnNlU2ltcGxlUXVlcnkgKGtleTogc3RyaW5nLCB2YWx1ZTogYW55LCBjb21wYXJhdG9yPzogc3RyaW5nKTogW29iamVjdCwgc3RyaW5nXSB7XG5cdFx0dmFsdWUgPSB0aGlzLmZvcm1hdFZhbHVlKHZhbHVlKTtcblxuXHRcdGlmIChjb21wYXJhdG9yID09PSB1bmRlZmluZWQpXG5cdFx0XHRjb21wYXJhdG9yID0gQXJyYXkuaXNBcnJheSh2YWx1ZVtDT05TVEFOVFMuT0JKXSkgPyAnSU4nIDogJz0nO1xuXG5cdFx0cmV0dXJuIFtcblx0XHRcdHtrZXk6IGtleSwgdmFsdWU6IHZhbHVlW0NPTlNUQU5UUy5PQkpdLCBjb21wYXJhdG9yOiBjb21wYXJhdG9yfSxcblx0XHRcdCdbJyArIGNvbXBhcmF0b3IgKyBDT05TVEFOVFMuU0VQICsga2V5ICsgQ09OU1RBTlRTLlNFUCArIHZhbHVlW0NPTlNUQU5UUy5TVFJdICsgJ10nXG5cdFx0XTtcblx0fVxuXG5cdHByaXZhdGUgcGFyc2VMaW5rZWRUb1F1ZXJ5IChsaW5rZWRUbzogYW55LCBxdWVyeSA9IHt9LCByZXZlcnNlID0gZmFsc2UsIG5vdCA9IGZhbHNlKTogW29iamVjdCwgc3RyaW5nXSB7XG5cdFx0Y29uc3QgcGFyc2VkUXVlcnkgPSB0aGlzLnBhcnNlKHF1ZXJ5KTtcblxuXHRcdHJldHVybiBbXG5cdFx0XHR7bGlua2VkVG86IGxpbmtlZFRvLCBxdWVyeTogcGFyc2VkUXVlcnlbQ09OU1RBTlRTLk9CSl0sIHJldmVyc2U6IHJldmVyc2UsIG5vdDogbm90fSxcblx0XHRcdCdbJyArICdsaW5rZWRUbycgKyBDT05TVEFOVFMuU0VQICsgbGlua2VkVG8gKyBDT05TVEFOVFMuU0VQICsgcGFyc2VkUXVlcnlbQ09OU1RBTlRTLlNUUl0gKyBDT05TVEFOVFMuU0VQICsgcmV2ZXJzZSArIENPTlNUQU5UUy5TRVAgKyBub3QgKyAnXSdcblx0XHRdO1xuXHR9XG5cblx0cHJpdmF0ZSBwYXJzZUNvbXBsZXhRdWVyeSAoY29uZGl0aW9uczogb2JqZWN0W10sIG9wZXJhdG9yID0gJ0FORCcpOiBbb2JqZWN0LCBzdHJpbmddIHtcblx0XHRvcGVyYXRvciA9IG9wZXJhdG9yLnRvVXBwZXJDYXNlKCk7XG5cblx0XHRjb25zdCBwYXJzZWRDb25kaXRpb25zID0gdGhpcy5wYXJzZUNvbmRpdGlvbnMoY29uZGl0aW9ucyk7XG5cblx0XHRyZXR1cm4gW1xuXHRcdFx0e2NvbmRpdGlvbnM6IHBhcnNlZENvbmRpdGlvbnNbQ09OU1RBTlRTLk9CSl0sIG9wZXJhdG9yOiBvcGVyYXRvcn0sXG5cdFx0XHQnWycgKyBvcGVyYXRvciArIHBhcnNlZENvbmRpdGlvbnNbQ09OU1RBTlRTLlNUUl0gKyAnXSdcblx0XHRdO1xuXHR9XG5cblx0cHJpdmF0ZSBwYXJzZUNvbmRpdGlvbnMgKGNvbmRpdGlvbnM6IG9iamVjdFtdKTogW29iamVjdCwgc3RyaW5nXSB7XG5cdFx0bGV0IHBhcnNlZENvbmRpdGlvbnM6IEFycmF5PFtvYmplY3QsIHN0cmluZ10+ID0gW107XG5cdFx0Y29uc3QgcXVlcnk6IG9iamVjdFtdID0gW107XG5cdFx0bGV0IHN0cmluZyA9ICcnO1xuXG5cdFx0Zm9yIChjb25zdCBjb25kaXRpb24gb2YgY29uZGl0aW9ucylcblx0XHRcdHBhcnNlZENvbmRpdGlvbnMucHVzaCh0aGlzLnBhcnNlKGNvbmRpdGlvbikpO1xuXG5cdFx0cGFyc2VkQ29uZGl0aW9ucyA9IHBhcnNlZENvbmRpdGlvbnMuc29ydCgoYSwgYikgPT4gdGhpcy5jb21wYXJlUGFyc2VkUXVlcmllcyhhLCBiKSk7XG5cblx0XHRmb3IgKGNvbnN0IHBhcnNlZENvbmRpdGlvbiBvZiBwYXJzZWRDb25kaXRpb25zKSB7XG5cdFx0XHRxdWVyeS5wdXNoKHBhcnNlZENvbmRpdGlvbltDT05TVEFOVFMuT0JKXSk7XG5cdFx0XHRzdHJpbmcgKz0gcGFyc2VkQ29uZGl0aW9uW0NPTlNUQU5UUy5TVFJdO1xuXHRcdH1cblxuXHRcdHJldHVybiBbcXVlcnksIHN0cmluZ107XG5cdH1cblxuXHRwcml2YXRlIGZvcm1hdFZhbHVlPFQ+ICh2YWx1ZTogVCk6IFtULCBzdHJpbmddIHtcblx0XHRsZXQgcHJvY2Vzc2VkVmFsdWU7XG5cblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5jaGFyQXQoMCkgPT09ICcmJykge1xuXHRcdFx0Y29uc3Qga2V5ID0gdmFsdWUuc3Vic3RyaW5nKDEpO1xuXG5cdFx0XHR2YWx1ZSA9IHRoaXMucGFyYW1ldGVyc1trZXldO1xuXG5cdFx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdxdWVyeVBhcnNlcjogVW5kZWZpbmVkIHRlbXBsYXRlIHBhcmFtZXRlciBcXCcnICsga2V5ICsgJ1xcJycpO1xuXG5cdFx0XHRwcm9jZXNzZWRWYWx1ZSA9IHRoaXMucHJvY2Vzc1ZhbHVlKHZhbHVlKTtcblxuXHRcdFx0cmV0dXJuIFtwcm9jZXNzZWRWYWx1ZSwga2V5ICsgJz4nICsgdmFsdWVdO1xuXHRcdH1cblxuXHRcdHByb2Nlc3NlZFZhbHVlID0gdGhpcy5wcm9jZXNzVmFsdWUodmFsdWUpO1xuXG5cdFx0cmV0dXJuIFtwcm9jZXNzZWRWYWx1ZSwgJycgKyBwcm9jZXNzZWRWYWx1ZV07XG5cdH1cblxuXHRwcml2YXRlIHByb2Nlc3NWYWx1ZTxUPiAodmFsdWU6IFRbXSk6IFRbXTtcblx0cHJpdmF0ZSBwcm9jZXNzVmFsdWUgKHZhbHVlOiBtb21lbnQuTW9tZW50KTogbW9tZW50Lk1vbWVudDtcblx0cHJpdmF0ZSBwcm9jZXNzVmFsdWUgKHZhbHVlOiBtb21lbnQuRHVyYXRpb24pOiBtb21lbnQuRHVyYXRpb247XG5cdHByaXZhdGUgcHJvY2Vzc1ZhbHVlPFQ+ICh2YWx1ZTogVCk6IFQ7XG5cdHByaXZhdGUgcHJvY2Vzc1ZhbHVlPFQ+ICh2YWx1ZTogVCB8IFRbXSB8IG1vbWVudC5Nb21lbnQgfCBtb21lbnQuRHVyYXRpb24pe1xuXHRcdC8vIGFsZ29yaXRobSBpcyBub3QgaW1wb3J0YW50LCBhcyBsb25nIGFzIGFsbCBhcnJheXMgYXJlIHNvcnRlZCB0aGUgc2FtZSB3YXlcblx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpXG5cdFx0XHRyZXR1cm4gdmFsdWUuc2xpY2UoKS5zb3J0KCk7XG5cblx0XHRpZiAobW9tZW50LmlzTW9tZW50KHZhbHVlKSlcblx0XHRcdHJldHVybiBtb21lbnQodmFsdWUpO1xuXG5cdFx0aWYgKG1vbWVudC5pc0R1cmF0aW9uKHZhbHVlKSlcblx0XHRcdHJldHVybiBtb21lbnQuZHVyYXRpb24odmFsdWUpO1xuXG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBBcGlRdWVyeSwgRW50cnlQYXJlbnROdWxsLCBJdGVtSWQgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBRdWVyeVNlcnZpY2Uge1xuXHRjb25zdHJ1Y3RvciAoKSB7XG5cdH1cblxuXHRhZGRBbmRDb25kaXRpb24gKHF1ZXJ5OiBBcGlRdWVyeSwgY29uZGl0aW9uOiBBcGlRdWVyeSk6IEFwaVF1ZXJ5IHtcblx0XHRpZiAocXVlcnkuY29uZGl0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IHF1ZXJ5Lm9wZXJhdG9yID09PSAnb3InKVxuXHRcdFx0cmV0dXJuIHtjb25kaXRpb25zOiBbcXVlcnksIGNvbmRpdGlvbl19O1xuXG5cdFx0Ly8gd2UgaGF2ZSBhbiAnYW5kJyBjb25kaXRpb25cblx0XHRyZXR1cm4ge2NvbmRpdGlvbnM6IHF1ZXJ5LmNvbmRpdGlvbnMuY29uY2F0KGNvbmRpdGlvbil9O1xuXHR9XG5cblx0YWRkT3JDb25kaXRpb24gKHF1ZXJ5OiBBcGlRdWVyeSwgY29uZGl0aW9uOiBBcGlRdWVyeSk6IEFwaVF1ZXJ5IHtcblx0XHRpZiAocXVlcnkub3BlcmF0b3IgPT09ICdvcicpXG5cdFx0XHRyZXR1cm4ge2NvbmRpdGlvbnM6IHF1ZXJ5LmNvbmRpdGlvbnMuY29uY2F0KGNvbmRpdGlvbil9O1xuXG5cdFx0Ly8gd2UgaGF2ZSBhbiAnYW5kJyBjb25kaXRpb25cblx0XHRyZXR1cm4ge2NvbmRpdGlvbnM6IFtxdWVyeSwgY29uZGl0aW9uXSwgb3BlcmF0b3I6ICdvcid9O1xuXHR9XG5cblx0YWRkUGFyZW50Q29uZGl0aW9uIChxdWVyeTogQXBpUXVlcnksIHBhcmVudDogRW50cnlQYXJlbnROdWxsKTogQXBpUXVlcnkge1xuXHRcdGxldCBsaW5rZWRUb1F1ZXJ5O1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdHJldHVybiBxdWVyeTtcblxuXHRcdGxpbmtlZFRvUXVlcnkgPSB7bGlua2VkVG86IHBhcmVudC5pdGVtVHlwZSwgcXVlcnk6IHBhcmVudC5pdGVtSWR9O1xuXG5cdFx0cmV0dXJuIHF1ZXJ5ID09PSBudWxsID8gbGlua2VkVG9RdWVyeSA6IHRoaXMuYWRkQW5kQ29uZGl0aW9uKHF1ZXJ5LCBsaW5rZWRUb1F1ZXJ5KTtcblx0fVxuXG5cdGNyZWF0ZU5vdEluIChpZEFycmF5OiBJdGVtSWRbXSk6IEFwaVF1ZXJ5IHtcblx0XHRyZXR1cm4ge2NvbXBhcmF0b3I6ICdOT1QgSU4nLCBrZXk6ICdpZCcsIHZhbHVlOiBpZEFycmF5fTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sdW1uU2V0LCBDb2x1bW5VdGlsIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0Q29sdW1ucyB9IGZyb20gJy4uL3R5cGVzJztcblxudHlwZSBSZXF1ZXN0Q29sdW1uTWFwID0ge1tpdGVtVHlwZTogc3RyaW5nXTogQXBpUmVxdWVzdENvbHVtbnN9O1xuXG5leHBvcnQgY2xhc3MgUmVxdWVzdENvbHVtbkV4cGFuc2lvbiB7XG5cdHByaXZhdGUgY29sdW1uczogUmVxdWVzdENvbHVtbk1hcCA9IHt9O1xuXHRwcml2YXRlIGNvbHVtblNldElkTWFwOiB7W2NvbHVtblNldElkOiBudW1iZXJdOiBib29sZWFufSA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWxcblx0KSB7XG5cdH1cblxuXHRleHBhbmQgKGNvbHVtblNldDogQ29sdW1uU2V0KTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuY29sdW1uU2V0SWRNYXBbY29sdW1uU2V0LmlkXSlcblx0XHRcdHJldHVybjtcblxuXHRcdGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBjb2x1bW5TZXQuaXRlbVR5cGU7XG5cblx0XHRpZiAoY29sdW1uc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdGNvbHVtbnNbaXRlbVR5cGVdID0gW107XG5cblx0XHRjb2x1bW5zW2l0ZW1UeXBlXSA9IHRoaXMuY29sdW1uVXRpbFxuXHRcdFx0Lm1lcmdlUmVxdWVzdENvbHVtbnMoY29sdW1uc1tpdGVtVHlwZV0sIGNvbHVtblNldC5yZXF1ZXN0KVxuXHRcdFx0Lm1lcmdlZDtcblxuXHRcdHRoaXMuY29sdW1uU2V0SWRNYXBbY29sdW1uU2V0LmlkXSA9IHRydWU7XG5cdH1cblxuXHRnZXQgKCk6IFJlcXVlc3RDb2x1bW5NYXAge1xuXHRcdHJldHVybiB0aGlzLmNvbHVtbnM7XG5cdH1cbn1cbiIsImltcG9ydCB7IEFwaUZvcm1hdHRlciwgQ29sbGVjdGlvbkhhbmRsZXIsIEl0ZW1IYW5kbGVyIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQge1xuXHRDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRDb2x1bW5TZXRGYWN0b3J5LFxuXHRJdGVtRW50cnlGYWN0b3J5LFxuXHRSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxufSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHtcblx0QXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0TG9jYWxDYWNoZU1hbmFnZXJJbnRlcmZhY2UsXG5cdFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlXG59IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge1xuXHRBcGlSZXF1ZXN0Q29sdW1ucywgQXBpUmVzcG9uc2UsXG5cdENvbGxlY3Rpb25NYXRjaFJlc3VsdCxcblx0RmllbGRNYXAsIEZ1bmN0aW9uQ2hhbmdlc1Jlc29sdmVTb2NrZXRNZXNzYWdlLFxuXHRHcm91cGVkRXh0ZW5kZWRDb2xsZWN0aW9uTWF0Y2hSZXN1bHQsXG5cdEl0ZW1JZCwgSXRlbVR5cGUsXG5cdFByb21pc2VJbnRlcmZhY2UsIFJlc3BvbnNlQ29sdW1uLCBTb2NrZXRNZXNzYWdlXG59IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgU29ja2V0Q29sbGVjdGlvbk1hcCA9IHtbaXRlbUlkOiBudW1iZXJdOiBDb2xsZWN0aW9uTWF0Y2hSZXN1bHR9O1xuXG5leHBvcnQgY2xhc3MgU29ja2V0TWVzc2FnZUhhbmRsZXIge1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGl0ZW1FbnRyeUZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBsb2NhbENhY2hlTWFuYWdlcjogTG9jYWxDYWNoZU1hbmFnZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSByZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnlcblx0KSB7XG5cdH1cblxuXHRvbk1lc3NhZ2VSZWNlaXZlZCAobWVzc2FnZTogU29ja2V0TWVzc2FnZSk6IGFueSB7XG5cdFx0c3dpdGNoIChtZXNzYWdlLmJvZHkuZXZlbnRUeXBlKSB7XG5cdFx0XHRjYXNlICd1cGRhdGUnOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVVcGRhdGUobWVzc2FnZSk7XG5cdFx0XHRjYXNlICdjcmVhdGUnOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVDcmVhdGUobWVzc2FnZSk7XG5cdFx0XHRjYXNlICdkZWxldGUnOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVEZWxldGUobWVzc2FnZSk7XG5cdFx0XHRjYXNlICdsaW5rVG8nOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVMaW5rTW92ZSgvKiBtZXNzYWdlICovKTtcblx0XHR9XG5cdH1cblxuXHRmb3JtYXRNZXNzYWdlVmFsdWVzICh2YWx1ZXM6IGFueSwgY29sdW1uczogUmVzcG9uc2VDb2x1bW5bXSk6IEZpZWxkTWFwIHtcblx0XHRjb25zdCByZXN1bHQ6IEZpZWxkTWFwID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIGNvbHVtbnMpXG5cdFx0XHRyZXN1bHRbY29sdW1uSWRdID0gdGhpcy5hcGlGb3JtYXR0ZXIuZm9ybWF0UmVzcG9uc2VWYWx1ZShjb2x1bW5zW2NvbHVtbklkXS50eXBlLCB2YWx1ZXNbY29sdW1uSWRdKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRjcmVhdGVDb2xsZWN0aW9uTWFwIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1zOiB7W2l0ZW1JZDogbnVtYmVyXTogYW55fSwgY29sdW1uczogUmVzcG9uc2VDb2x1bW5bXSk6IFNvY2tldENvbGxlY3Rpb25NYXAge1xuXHRcdGNvbnN0IHJlc3VsdDogU29ja2V0Q29sbGVjdGlvbk1hcCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbXMpIHtcblx0XHRcdGNvbnN0IGl0ZW0gPSBpdGVtc1tpdGVtSWRdO1xuXHRcdFx0Y29uc3QgcGFyZW50ID0gaXRlbS5wYXJlbnQgIT09IG51bGwgPyBpdGVtLnBhcmVudCA6IHt9O1xuXG5cdFx0XHRyZXN1bHRbaXRlbUlkXSA9IHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZW50cmllcy5nZXRCeUZpdHRpbmdJdGVtKFxuXHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0dGhpcy5mb3JtYXRNZXNzYWdlVmFsdWVzKGl0ZW0udmFsdWVzLCBjb2x1bW5zKSxcblx0XHRcdFx0cGFyZW50XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRncm91cEJ5Q29sbGVjdGlvbklkIChpdGVtVHlwZTogSXRlbVR5cGUsIGNvbGxlY3Rpb25NYXA6IFNvY2tldENvbGxlY3Rpb25NYXApOiBHcm91cGVkRXh0ZW5kZWRDb2xsZWN0aW9uTWF0Y2hSZXN1bHQge1xuXHRcdGNvbnN0IHJlc3VsdDogR3JvdXBlZEV4dGVuZGVkQ29sbGVjdGlvbk1hdGNoUmVzdWx0ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uTWF0Y2hSZXN1bHQgPSBjb2xsZWN0aW9uTWFwW2l0ZW1JZF07XG5cblx0XHRcdGZvciAoY29uc3Qgc3RhdHVzIGluIGNvbGxlY3Rpb25NYXRjaFJlc3VsdCkge1xuXHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cmllcyA9IGNvbGxlY3Rpb25NYXRjaFJlc3VsdFtzdGF0dXMgYXMga2V5b2YgQ29sbGVjdGlvbk1hdGNoUmVzdWx0XTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiBjb2xsZWN0aW9uRW50cmllcykge1xuXHRcdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25JZCA9IGNvbGxlY3Rpb25FbnRyeS5pZDtcblxuXHRcdFx0XHRcdGlmIChyZXN1bHRbY29sbGVjdGlvbklkXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRyZXN1bHRbY29sbGVjdGlvbklkXSA9IHtcblx0XHRcdFx0XHRcdFx0Y29sbGVjdGlvbjogY29sbGVjdGlvbkVudHJ5LFxuXHRcdFx0XHRcdFx0XHRmaXR0aW5nOiBbXSxcblx0XHRcdFx0XHRcdFx0bm90Zml0dGluZzogW10sXG5cdFx0XHRcdFx0XHRcdG1heWJlOiBbXVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXN1bHRbY29sbGVjdGlvbklkXVtzdGF0dXNdLnB1c2goXG5cdFx0XHRcdFx0XHRzdGF0dXMgPT09ICdmaXR0aW5nJyA/IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZCkgOiBpdGVtSWRcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldFJlcXVlc3RDb2x1bW5zIChpdGVtVHlwZTogSXRlbVR5cGUsIGNvbGxlY3Rpb25NYXA6IFNvY2tldENvbGxlY3Rpb25NYXApIHtcblx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdCgpO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gY29sbGVjdGlvbk1hcCkge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbnMgPSBjb2xsZWN0aW9uTWFwW2l0ZW1JZF07XG5cdFx0XHRjb25zdCBmaXR0aW5nQ29sbGVjdGlvbnMgPSBjb2xsZWN0aW9ucy5maXR0aW5nO1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkKTtcblxuXHRcdFx0Zm9yIChjb25zdCBmaXR0aW5nQ29sbGVjdGlvbiBvZiBmaXR0aW5nQ29sbGVjdGlvbnMpXG5cdFx0XHRcdGNvbHVtbkV4cGFuc2lvbi5leHBhbmQoZml0dGluZ0NvbGxlY3Rpb24uY29sdW1ucyk7XG5cblx0XHRcdGlmIChpdGVtRW50cnkgIT09IHVuZGVmaW5lZClcblx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uLmV4cGFuZChpdGVtRW50cnkuY29sdW1ucyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbHVtbkV4cGFuc2lvbi5nZXQoKTtcblx0fVxuXG5cdGRlZmVyRW50cnkgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KTogSXRlbUVudHJ5IHwgUHJvbWlzZUludGVyZmFjZTxJdGVtRW50cnk+IHtcblx0XHRjb25zdCBkZWZlcnJlZCA9IGl0ZW1FbnRyeS5kZWZlcnJlZDtcblxuXHRcdGlmIChkZWZlcnJlZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5kZWZlcigpO1xuXG5cdFx0cmV0dXJuIGRlZmVycmVkLnByb21pc2UudGhlbihcblx0XHRcdHRoaXMuZGVmZXJFbnRyeS5iaW5kKHRoaXMpLFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHByb2Nlc3NNZXNzYWdlIChib2R5OiBhbnkpOiBQcm9taXNlSW50ZXJmYWNlPEdyb3VwZWRFeHRlbmRlZENvbGxlY3Rpb25NYXRjaFJlc3VsdD4ge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gYm9keS5pdGVtVHlwZTtcblx0XHRjb25zdCBjb2xsZWN0aW9uTWFwID0gdGhpcy5jcmVhdGVDb2xsZWN0aW9uTWFwKGl0ZW1UeXBlLCBib2R5Lml0ZW1zW2l0ZW1UeXBlXSwgYm9keS5jb2x1bW5zW2l0ZW1UeXBlXSk7XG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSB0aGlzLmdldFJlcXVlc3RDb2x1bW5zKGl0ZW1UeXBlLCBjb2xsZWN0aW9uTWFwKTtcblx0XHRjb25zdCBkZWZlcnJlZEVudHJpZXM6IEFycmF5PEl0ZW1FbnRyeSB8IFByb21pc2VJbnRlcmZhY2U8SXRlbUVudHJ5Pj4gPSBbXTtcblx0XHRjb25zdCByZXF1ZXN0SWRzOiBJdGVtSWRbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWRTdHJpbmcgaW4gY29sbGVjdGlvbk1hcCkge1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkU3RyaW5nKTtcblx0XHRcdGNvbnN0IGl0ZW1JZCA9ICtpdGVtSWRTdHJpbmc7XG5cblx0XHRcdGlmIChpdGVtRW50cnkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRkZWZlcnJlZEVudHJpZXMucHVzaCh0aGlzLmRlZmVyRW50cnkoaXRlbUVudHJ5KSk7XG5cdFx0XHRcdHJlcXVlc3RJZHMucHVzaChpdGVtSWQpO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25NYXBbaXRlbUlkXS5maXR0aW5nLmxlbmd0aCA9PT0gMClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5hZGQoXG5cdFx0XHRcdHRoaXMuaXRlbUVudHJ5RmFjdG9yeS5jb25zdHJ1Y3REZWZlcnJlZChpdGVtVHlwZSwgaXRlbUlkLCByZXF1ZXN0Q29sdW1uc1tpdGVtVHlwZV0sIGZhbHNlKVxuXHRcdFx0KTtcblxuXHRcdFx0cmVxdWVzdElkcy5wdXNoKGl0ZW1JZCk7XG5cdFx0fVxuXG5cdFx0aWYgKHJlcXVlc3RJZHMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbih0aGlzLmdyb3VwQnlDb2xsZWN0aW9uSWQoaXRlbVR5cGUsIGNvbGxlY3Rpb25NYXApKTsgLy8gY29sbGVjdGlvbk1hcCBtaWdodCBjb250YWluICdtYXliZScgbWF0Y2hlc1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKGRlZmVycmVkRW50cmllcykudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoaXRlbVR5cGUsIHtpZDogcmVxdWVzdElkc30sIHJlcXVlc3RDb2x1bW5zKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmhhbmRsZVJlc3BvbnNlKGl0ZW1UeXBlLCByZXF1ZXN0SWRzLCByZXF1ZXN0Q29sdW1uc1tpdGVtVHlwZV0sIHJlc3BvbnNlLCBjb2xsZWN0aW9uTWFwKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cHJvY2Vzc0Z1bmN0aW9uQ2hhbmdlc1Jlc29sdmUgKGJvZHk6IGFueSk6IFByb21pc2VJbnRlcmZhY2U8dm9pZD4ge1xuXHRcdGNvbnN0IGl0ZW1zID0gYm9keS5pdGVtcy5GdW5jdGlvbkNoYW5nZXNSZXNvbHZlO1xuXHRcdGNvbnN0IGRlZmVycmVkRW50cmllczogQXJyYXk8SXRlbUVudHJ5IHwgUHJvbWlzZUludGVyZmFjZTxJdGVtRW50cnk+PiA9IFtdO1xuXHRcdGNvbnN0IHJlcXVlc3RJZHM6IEl0ZW1JZFtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtcykge1xuXHRcdFx0Y29uc3QgZnVuY3Rpb25JZCA9IGl0ZW1zW2l0ZW1JZF0ucGFyZW50Lml0ZW1JZDtcblx0XHRcdGNvbnN0IGZ1bmN0aW9uRW50cnkgPSB0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KCdGdW5jdGllJywgZnVuY3Rpb25JZCk7XG5cblx0XHRcdGlmIChmdW5jdGlvbkVudHJ5ID09PSB1bmRlZmluZWQgfHwgZnVuY3Rpb25FbnRyeS5jb2x1bW5zLnJlc3BvbnNlLkZ1bmN0aWUubmV3Y2hhbmdlcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0ZGVmZXJyZWRFbnRyaWVzLnB1c2godGhpcy5kZWZlckVudHJ5KGZ1bmN0aW9uRW50cnkpKTtcblx0XHRcdHJlcXVlc3RJZHMucHVzaChmdW5jdGlvbklkKTtcblx0XHR9XG5cblx0XHRpZiAocmVxdWVzdElkcy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwoZGVmZXJyZWRFbnRyaWVzKS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeSgnRnVuY3RpZScsIHtpZDogcmVxdWVzdElkc30sIHtGdW5jdGllOiBbJ25ld2NoYW5nZXMnXX0pO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2VJZHMgPSByZXNwb25zZS5saW5rcy5GdW5jdGllO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbUlkIG9mIHJlc3BvbnNlSWRzKSB7XG5cdFx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gPEl0ZW1FbnRyeT4gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldCgnRnVuY3RpZScsIGl0ZW1JZCk7XG5cblx0XHRcdFx0XHRjb25zdCBwcmV2aW91cyA9IHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoXG5cdFx0XHRcdFx0XHRpdGVtRW50cnkuZ2V0RmllbGRzKCksXG5cdFx0XHRcdFx0XHR7fSxcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5jb2x1bW5zLm1haW5cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGNvbnN0IHJlc3BvbnNlVmFsdWUgPSByZXNwb25zZS5mZXRjaFZhbHVlKCdGdW5jdGllJywgaXRlbUlkLCAnbmV3Y2hhbmdlcycpO1xuXG5cdFx0XHRcdFx0aWYgKHJlc3BvbnNlVmFsdWUgPT09IHByZXZpb3VzLm5ld2NoYW5nZXMpXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRcdGl0ZW1FbnRyeVxuXHRcdFx0XHRcdFx0LnNldEluaXRpYWwoe25ld2NoYW5nZXM6IHJlc3BvbnNlVmFsdWV9LCB0cnVlKVxuXHRcdFx0XHRcdFx0LmNhbGxPbkNoYW5nZShwcmV2aW91cylcblx0XHRcdFx0XHRcdC5yZXNvbHZlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLmNhdGNoKHRoaXMuZXJyb3JIYW5kbGVyLm5vdGlmeUVycm9yKTtcblx0fVxuXG5cdGhhbmRsZVJlc3BvbnNlIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cmVxdWVzdElkczogSXRlbUlkW10sXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRcdHJlc3BvbnNlOiBBcGlSZXNwb25zZSxcblx0XHRjb2xsZWN0aW9uTWFwOiBTb2NrZXRDb2xsZWN0aW9uTWFwXG5cdCk6IEdyb3VwZWRFeHRlbmRlZENvbGxlY3Rpb25NYXRjaFJlc3VsdCB7XG5cdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCk7XG5cdFx0Y29uc3QgY29sdW1uSW5mbyA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xuXHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgcmVxdWVzdElkcykge1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gPEl0ZW1FbnRyeT4gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkKTtcblx0XHRcdGNvbnN0IGlzTmV3ID0gaXRlbUVudHJ5LmluaXRpYWwgPT09IHVuZGVmaW5lZDtcblx0XHRcdGNvbnN0IGZpZWxkcyA9IHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXG5cdFx0XHRpZiAoZmllbGRzID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0aXRlbUVudHJ5LnJlamVjdCgpO1xuXG5cdFx0XHRcdGlmIChpc05ldylcblx0XHRcdFx0XHR0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuY2xlYXIoaXRlbUVudHJ5KTtcblxuXHRcdFx0XHRkZWxldGUgY29sbGVjdGlvbk1hcFtpdGVtSWRdO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgZGVyaXZlZCA9IHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBjb2x1bW5JbmZvLnJvb3QpO1xuXG5cdFx0XHRpZiAoaXNOZXcpXG5cdFx0XHRcdGl0ZW1FbnRyeS5yZXNvbHZlRGVmZXJyZWQoZmllbGRzLCBkZXJpdmVkLCBjb2x1bW5JbmZvKTtcblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRjb25zdCBleHBhbnNpb25SZXN1bHQgPSBjb2x1bW5FeHBhbnNpb24ucnVuKGl0ZW1FbnRyeS5jb2x1bW5zKTtcblx0XHRcdFx0Y29uc3QgcHJldmlvdXMgPSB0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKFxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5nZXRGaWVsZHMoKSxcblx0XHRcdFx0XHR7fSxcblx0XHRcdFx0XHRpdGVtRW50cnkuY29sdW1ucy5tYWluXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0aWYgKGV4cGFuc2lvblJlc3VsdCAhPT0gbnVsbClcblx0XHRcdFx0XHRpdGVtRW50cnkuZXhwYW5kKGZpZWxkcywgZGVyaXZlZCwgZXhwYW5zaW9uUmVzdWx0KTtcblxuXHRcdFx0XHRpdGVtRW50cnlcblx0XHRcdFx0XHQudXBkYXRlRmllbGRzKGZpZWxkcywgZGVyaXZlZCwgZmFsc2UpXG5cdFx0XHRcdFx0LmNhbGxPbkNoYW5nZShwcmV2aW91cylcblx0XHRcdFx0XHQucmVzb2x2ZSgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmdyb3VwQnlDb2xsZWN0aW9uSWQoaXRlbVR5cGUsIGNvbGxlY3Rpb25NYXApO1xuXHR9XG5cblx0cHJpdmF0ZSBpc0Z1bmN0aW9uQ2hhbmdlc1Jlc29sdmVNZXNzYWdlIChtZXNzYWdlOiBTb2NrZXRNZXNzYWdlKTogbWVzc2FnZSBpcyBGdW5jdGlvbkNoYW5nZXNSZXNvbHZlU29ja2V0TWVzc2FnZSB7XG5cdFx0cmV0dXJuIG1lc3NhZ2UuYm9keS5pdGVtVHlwZSA9PT0gJ0Z1bmN0aW9uQ2hhbmdlc1Jlc29sdmUnO1xuXHR9XG5cblx0aGFuZGxlQ3JlYXRlIChtZXNzYWdlOiBGdW5jdGlvbkNoYW5nZXNSZXNvbHZlU29ja2V0TWVzc2FnZSk6IFByb21pc2VJbnRlcmZhY2U8dm9pZD47XG5cdGhhbmRsZUNyZWF0ZSAobWVzc2FnZTogU29ja2V0TWVzc2FnZSk6IFByb21pc2VJbnRlcmZhY2U8SXRlbVJlc291cmNlW10+O1xuXHRoYW5kbGVDcmVhdGUgKG1lc3NhZ2U6IFNvY2tldE1lc3NhZ2UpOiBhbnkge1xuXHRcdGNvbnN0IGJvZHkgPSBtZXNzYWdlLmJvZHk7XG5cblx0XHRpZiAodGhpcy5pc0Z1bmN0aW9uQ2hhbmdlc1Jlc29sdmVNZXNzYWdlKG1lc3NhZ2UpKVxuXHRcdFx0cmV0dXJuIHRoaXMucHJvY2Vzc0Z1bmN0aW9uQ2hhbmdlc1Jlc29sdmUoYm9keSk7XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzTWVzc2FnZShib2R5KS50aGVuKFxuXHRcdFx0Y29sbGVjdGlvbk1hcCA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmFkZFRvQ29sbGVjdGlvbnMoY29sbGVjdGlvbk1hcCwgdHJ1ZSk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS5jYXRjaCh0aGlzLmVycm9ySGFuZGxlci5ub3RpZnlFcnJvcik7XG5cdH1cblxuXHRoYW5kbGVVcGRhdGUgKG1lc3NhZ2U6IFNvY2tldE1lc3NhZ2UpOiBQcm9taXNlSW50ZXJmYWNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzTWVzc2FnZShtZXNzYWdlLmJvZHkpLnRoZW4oXG5cdFx0XHRjb2xsZWN0aW9uTWFwID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIucmVtb3ZlRnJvbUFuZEFkZFRvQ29sbGVjdGlvbnMoY29sbGVjdGlvbk1hcCwgdHJ1ZSk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS5jYXRjaCh0aGlzLmVycm9ySGFuZGxlci5ub3RpZnlFcnJvcik7XG5cdH1cblxuXHRoYW5kbGVEZWxldGUgKG1lc3NhZ2U6IFNvY2tldE1lc3NhZ2UpOiBQcm9taXNlSW50ZXJmYWNlPHZvaWQ+IHtcblx0XHRjb25zdCBib2R5ID0gbWVzc2FnZS5ib2R5O1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gYm9keS5pdGVtVHlwZTtcblx0XHRjb25zdCBsb2NhbENhY2hlcyA9IHRoaXMubG9jYWxDYWNoZU1hbmFnZXIuZ2V0QWxsTG9jYWxDYWNoZXMoKTtcblx0XHRjb25zdCBjb2xsZWN0aW9uTWFwOiB7W2NvbGxlY3Rpb25JZDogbnVtYmVyXToge2NvbGxlY3Rpb246IENvbGxlY3Rpb25FbnRyeSwgaXRlbXM6IEl0ZW1JZFtdfX0gPSB7fTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIG9mIGJvZHkuaXRlbXMpIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25zID0gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5lbnRyaWVzLmdldEJ5Q29udGFpbmluZ0l0ZW0oaXRlbVR5cGUsIGl0ZW1JZCk7XG5cblx0XHRcdGZvciAoY29uc3QgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9ucykge1xuXHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uSWQgPSBjb2xsZWN0aW9uLmlkO1xuXG5cdFx0XHRcdGlmIChjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF0gPSB7Y29sbGVjdGlvbjogY29sbGVjdGlvbiwgaXRlbXM6IFtdfTtcblxuXHRcdFx0XHRjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF0uaXRlbXMucHVzaChpdGVtSWQpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuY2xlYXJCeUl0ZW1JZChpdGVtVHlwZSwgaXRlbUlkKTtcblxuXHRcdFx0Zm9yIChjb25zdCBsb2NhbENhY2hlIG9mIGxvY2FsQ2FjaGVzKVxuXHRcdFx0XHRsb2NhbENhY2hlLml0ZW1zLmNsZWFyQnlJdGVtSWQoaXRlbVR5cGUsIGl0ZW1JZCk7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gY29sbGVjdGlvbk1hcCkge1xuXHRcdFx0Y29uc3QgbWFwRW50cnkgPSBjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF07XG5cdFx0XHRtYXBFbnRyeS5jb2xsZWN0aW9uLnJlbW92ZUl0ZW1zKG1hcEVudHJ5Lml0ZW1zLCBudWxsLCB0cnVlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XG5cdH1cblxuXHQvLyBUT0RPIVxuXHRoYW5kbGVMaW5rTW92ZSAoKTogUHJvbWlzZUludGVyZmFjZTx2b2lkPiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xuXHR9XG5cblx0LypcdGhhbmRsZUxpbmtNb3ZlIChtZXNzYWdlKSB7XG5cdFx0XHRwcm9jZXNzTWVzc2FnZShcblx0XHRcdFx0bWVzc2FnZSxcblx0XHRcdFx0ZnVuY3Rpb24gKGNvbGxlY3Rpb24sIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRcdFx0Ly8gZml0cyBpbiB0aGlzIGNvbGxlY3Rpb24sIHRvZG86IGdldCB0aGUgb2xkIGNvbGxlY3Rpb24gaXQgYmVsb25nZWQgdG9cblx0XHRcdFx0XHRjb2xsZWN0aW9uLm1vdmVJdGVtcyhpdGVtRW50cmllcywgbnVsbCwgdHJ1ZSk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGZ1bmN0aW9uIChjb2xsZWN0aW9uLCBpdGVtRW50cmllcykge1xuXHRcdFx0XHRcdC8vIG1heWJlIGZpdHNcblx0XHRcdFx0XHQvLyB0b2RvOiBhbHNvIHJlbW92ZSB0aGVtIGZyb20gdGhlIG9sZCBjb2xsZWN0aW9uXG5cdFx0XHRcdFx0Y29sbGVjdGlvbi5leHRlbmQoYW5ndWxhci5pZGVudGl0eSwgZmFsc2UsIGZhbHNlKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0ZnVuY3Rpb24gKGNvbGxlY3Rpb24sIGlkcykge1xuXHRcdFx0XHRcdC8vIG5vdCBmaXR0aW5nIGluIHRoaXMgY29sbGVjdGlvbiwgcmVtb3ZlIGl0ID9cblx0XHRcdFx0XHRjb2xsZWN0aW9uLnJlbW92ZUl0ZW1zKGlkcywgbnVsbCwgbWVzc2FnZSk7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0fVxuXHQqL1xufVxuIiwiZXhwb3J0ICogZnJvbSAnLi9BcGlGb3JtYXR0ZXInO1xuZXhwb3J0ICogZnJvbSAnLi9BcGlSZXF1ZXN0U2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL0FwaVJlc3BvbnNlUHJvY2Vzc29yJztcbmV4cG9ydCAqIGZyb20gJy4vQmF0Y2hTdGF0dXMnO1xuZXhwb3J0ICogZnJvbSAnLi9DaGFuZ2VzQ29tcGlsYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9DaGFuZ2VzUHJvY2Vzc29yJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkNhY2hlJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkVudHJ5U2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25IYW5kbGVyJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbk1hdGNoZXInO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uQ2FjaGUnO1xuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5FeHBhbnNpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5IYW5kbGVyJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uSW5mbyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbHVtblNldCc7XG5leHBvcnQgKiBmcm9tICcuL0NvbHVtblN1YnNldENhY2hlJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uVXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL0NyZWF0ZVJlcXVlc3QnO1xuZXhwb3J0ICogZnJvbSAnLi9JdGVtQWRtaW5pc3RyYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL0l0ZW1DYWNoZSc7XG5leHBvcnQgKiBmcm9tICcuL0l0ZW1FbnRyeVNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9JdGVtSGFuZGxlcic7XG5leHBvcnQgKiBmcm9tICcuL0l0ZW1SZXF1ZXN0U2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL0tleVNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9Mb2NhbENhY2hlJztcbmV4cG9ydCAqIGZyb20gJy4vTG9ja1NlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9Nb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9RdWVyeU1hdGNoZXInO1xuZXhwb3J0ICogZnJvbSAnLi9RdWVyeVBhcnNlcic7XG5leHBvcnQgKiBmcm9tICcuL1F1ZXJ5U2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL1JlcXVlc3RDb2x1bW5FeHBhbnNpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9Tb2NrZXRNZXNzYWdlSGFuZGxlcic7XG5leHBvcnQgKiBmcm9tICcuL1V0aWwnO1xuIiwiaW1wb3J0IHsgQXBpRm9ybWF0dGVyLCBBcGlSZXNwb25zZVByb2Nlc3NvciB9IGZyb20gJy4uL2NsYXNzZXMnO1xuXG5leHBvcnQgY2xhc3MgQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIpIHtcblxuXHR9XG5cblx0Y29uc3RydWN0IChyZXNwb25zZTogYW55KTogQXBpUmVzcG9uc2VQcm9jZXNzb3Ige1xuXHRcdHJldHVybiBuZXcgQXBpUmVzcG9uc2VQcm9jZXNzb3IodGhpcy5hcGlGb3JtYXR0ZXIsIHJlc3BvbnNlKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQmF0Y2hTdGF0dXMgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJdGVtSWQsIEl0ZW1UeXBlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQmF0Y2hTdGF0dXNGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxuXHQpIHtcblx0fVxuXG5cdGNvbnN0cnVjdDxUPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGdldEl0ZW1JZDogKGVudHJ5OiBUKSA9PiBJdGVtSWQsXG5cdFx0Z2V0UHJvbWlzZTogKGVudHJ5OiBUKSA9PiBQcm9taXNlSW50ZXJmYWNlPFQ+XG5cdCk6IEJhdGNoU3RhdHVzPFQ+IHtcblx0XHRyZXR1cm4gbmV3IEJhdGNoU3RhdHVzKFxuXHRcdFx0dGhpcy5wcm9taXNlU2VydmljZSxcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0Z2V0SXRlbUlkLFxuXHRcdFx0Z2V0UHJvbWlzZVxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENoYW5nZXNDb21waWxhdGlvbiwgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuXG5pbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5IH0gZnJvbSAnLi8nO1xuXG5leHBvcnQgY2xhc3MgQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25DYWNoZUZhY3Rvcnk6IENvbGxlY3Rpb25DYWNoZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlXG5cdCkge1xuXHR9XG5cblx0Y29uc3RydWN0IChzaW5nbGVJdGVtczogSXRlbUVudHJ5W10sIGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uRW50cnlbXSk6IENoYW5nZXNDb21waWxhdGlvbiB7XG5cdFx0cmV0dXJuIG5ldyBDaGFuZ2VzQ29tcGlsYXRpb24oXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnksXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHRzaW5nbGVJdGVtcyxcblx0XHRcdGNvbGxlY3Rpb25zXG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHtcblx0QXBpRm9ybWF0dGVyLFxuXHRDaGFuZ2VzUHJvY2Vzc29yLFxuXHRDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRDb2xsZWN0aW9uSGFuZGxlcixcblx0SXRlbUhhbmRsZXJcbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQge1xuXHRDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxuXHRDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRDcmVhdGVSZXF1ZXN0RmFjdG9yeSxcblx0UmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnlcbn0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBjbGFzcyBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgY2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeTogQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25FbnRyeVNlcnZpY2U6IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgY3JlYXRlUmVxdWVzdEZhY3Rvcnk6IENyZWF0ZVJlcXVlc3RGYWN0b3J5LFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSByZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnlcblx0KSB7XG5cblx0fVxuXG5cdGNvbnN0cnVjdCAoKTogQ2hhbmdlc1Byb2Nlc3NvciB7XG5cdFx0cmV0dXJuIG5ldyBDaGFuZ2VzUHJvY2Vzc29yKFxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0dGhpcy5jaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcblx0XHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRcdHRoaXMuY3JlYXRlUmVxdWVzdEZhY3RvcnksXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlcixcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXG5cdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlLFxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxuXHRcdCk7XG5cdH1cblxufVxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBRdWVyeU1hdGNoZXJGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25DYWNoZUZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5XG5cdCkge1xuXHR9XG5cblx0Y29uc3RydWN0ICgpOiBDb2xsZWN0aW9uQ2FjaGUge1xuXHRcdHJldHVybiBuZXcgQ29sbGVjdGlvbkNhY2hlKFxuXHRcdFx0dGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5XG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHtcblx0Q29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0Q29sdW1uSGFuZGxlcixcblx0SXRlbUVudHJ5U2VydmljZSxcblx0SXRlbUhhbmRsZXIsXG5cdEl0ZW1SZXF1ZXN0U2VydmljZSxcblx0S2V5U2VydmljZSxcblx0UXVlcnlTZXJ2aWNlXG59IGZyb20gJy4uL2NsYXNzZXMvJztcbmltcG9ydCB7IENvbHVtbkV4cGFuc2lvbkZhY3RvcnksIENvbHVtblNldEZhY3RvcnksIEl0ZW1FbnRyeUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMvJztcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzLyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25FbnRyeU9wdGlvbnMsIENvbGxlY3Rpb25FbnRyeU9wdGlvbnNJbnRlcmZhY2UgfSBmcm9tICcuLi9tb2RlbHMvJztcbmltcG9ydCB7IEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMvJztcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25FbnRyeUZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHVibGljIGNvbGxlY3Rpb25FbnRyeVNlcnZpY2U6IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdFx0cHVibGljIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXG5cdFx0cHVibGljIGNvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0cHVibGljIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXG5cdFx0cHVibGljIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHB1YmxpYyBpdGVtRW50cnlGYWN0b3J5OiBJdGVtRW50cnlGYWN0b3J5LFxuXHRcdHB1YmxpYyBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxuXHRcdHB1YmxpYyBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXG5cdFx0cHVibGljIGl0ZW1SZXF1ZXN0U2VydmljZTogSXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRcdHB1YmxpYyBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuXHRcdHB1YmxpYyBwcm9taXNlU2VydmljZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXG5cdFx0cHVibGljIHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlXG5cdCkge1xuXHR9XG5cblx0Y29uc3RydWN0IChpdGVtVHlwZTogSXRlbVR5cGUsIG9wdGlvbnM6IENvbGxlY3Rpb25FbnRyeU9wdGlvbnNJbnRlcmZhY2UpOiBDb2xsZWN0aW9uRW50cnkge1xuXHRcdHJldHVybiBuZXcgQ29sbGVjdGlvbkVudHJ5KFxuXHRcdFx0dGhpcyxcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0bmV3IENvbGxlY3Rpb25FbnRyeU9wdGlvbnMob3B0aW9ucylcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUsIENvbGxlY3Rpb25NYXRjaGVyIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBRdWVyeU1hdGNoZXJGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3Rvcnlcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3QgKGNvbGxlY3Rpb25DYWNoZXM6IENvbGxlY3Rpb25DYWNoZVtdLCB1cGRhdGVJbml0aWFsOiBib29sZWFuLCBjYWxsT25BY3RpdmF0ZTogYm9vbGVhbik6IENvbGxlY3Rpb25NYXRjaGVyIHtcblx0XHRyZXR1cm4gbmV3IENvbGxlY3Rpb25NYXRjaGVyKFxuXHRcdFx0dGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5LFxuXHRcdFx0Y29sbGVjdGlvbkNhY2hlcyxcblx0XHRcdHVwZGF0ZUluaXRpYWwsXG5cdFx0XHRjYWxsT25BY3RpdmF0ZVxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEtleVNlcnZpY2UsIExvY2FsQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LCBJdGVtUmVzb3VyY2VGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7XG5cdENvbGxlY3Rpb25FZGl0UmVzb3VyY2UsXG5cdENvbGxlY3Rpb25FbnRyeSxcblx0Q29sbGVjdGlvblJlc291cmNlT3B0aW9ucyxcblx0Q29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZSxcblx0Q29sbGVjdGlvblZpZXdSZXNvdXJjZSwgRWRpdFJlc291cmNlLCBWaWV3UmVzb3VyY2Vcbn0gZnJvbSAnLi4vbW9kZWxzJztcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHVibGljIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHB1YmxpYyBpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdHB1YmxpYyBjaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeTogQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXG5cdFx0cHVibGljIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXG5cdFx0cHVibGljIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZVxuXHQpIHtcblxuXHR9XG5cblx0Y29uc3RydWN0IChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlICYge2VkaXRJdGVtczogdHJ1ZSwgZWRpdENvbGxlY3Rpb246IHRydWV9LFxuXHRcdGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGVcblx0KTogQ29sbGVjdGlvbkVkaXRSZXNvdXJjZTxFZGl0UmVzb3VyY2U+O1xuXG5cdGNvbnN0cnVjdCAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0Q29sbGVjdGlvbjogdHJ1ZX0sXG5cdFx0bG9jYWxDYWNoZTogTG9jYWxDYWNoZVxuXHQpOiBDb2xsZWN0aW9uRWRpdFJlc291cmNlPFZpZXdSZXNvdXJjZT47XG5cblx0Y29uc3RydWN0IChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlICYge2VkaXRJdGVtczogdHJ1ZX0sXG5cdFx0bG9jYWxDYWNoZTogTG9jYWxDYWNoZVxuXHQpOiBDb2xsZWN0aW9uVmlld1Jlc291cmNlPEVkaXRSZXNvdXJjZT47XG5cblx0Y29uc3RydWN0IChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlLFxuXHRcdGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGVcblx0KTogQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxWaWV3UmVzb3VyY2U+O1xuXG5cdGNvbnN0cnVjdCAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIG9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UsIGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUpIHtcblx0XHRjb25zdCBvcHRpb25zSW5zdGFuY2UgPSBuZXcgQ29sbGVjdGlvblJlc291cmNlT3B0aW9ucyhvcHRpb25zKTtcblxuXHRcdGlmIChvcHRpb25zSW5zdGFuY2UuZWRpdEl0ZW1zKVxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5Lmhhc0l0ZW1FZGl0UmVzb3VyY2VzID0gdHJ1ZTtcblxuXHRcdGlmIChvcHRpb25zSW5zdGFuY2UuZWRpdENvbGxlY3Rpb24pIHtcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5oYXNFZGl0UmVzb3VyY2VzID0gdHJ1ZTtcblxuXHRcdFx0aWYgKG9wdGlvbnNJbnN0YW5jZS5lZGl0SXRlbXMpXG5cdFx0XHRcdHJldHVybiBuZXcgQ29sbGVjdGlvbkVkaXRSZXNvdXJjZTxFZGl0UmVzb3VyY2U+KHRoaXMsIGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9uc0luc3RhbmNlLCBsb2NhbENhY2hlKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uRWRpdFJlc291cmNlPFZpZXdSZXNvdXJjZT4odGhpcywgY29sbGVjdGlvbkVudHJ5LCBvcHRpb25zSW5zdGFuY2UsIGxvY2FsQ2FjaGUpO1xuXHRcdH1cblxuXHRcdGlmIChvcHRpb25zSW5zdGFuY2UuZWRpdEl0ZW1zKVxuXHRcdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uVmlld1Jlc291cmNlPEVkaXRSZXNvdXJjZT4odGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LCBjb2xsZWN0aW9uRW50cnksIG9wdGlvbnNJbnN0YW5jZSwgbG9jYWxDYWNoZSk7XG5cblx0XHRyZXR1cm4gbmV3IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8Vmlld1Jlc291cmNlPih0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnksIGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9uc0luc3RhbmNlLCBsb2NhbENhY2hlKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sdW1uRXhwYW5zaW9uIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDb2x1bW5JbmZvRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0Q29sdW1ucywgSXRlbVR5cGUsIFJlc3BvbnNlQ29sdW1uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbHVtbkluZm9GYWN0b3J5OiBDb2x1bW5JbmZvRmFjdG9yeVxuXHQpIHtcblxuXHR9XG5cblx0Y29uc3RydWN0IChpdGVtVHlwZTogSXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcCk6IENvbHVtbkV4cGFuc2lvbiB7XG5cdFx0cmV0dXJuIG5ldyBDb2x1bW5FeHBhbnNpb24odGhpcy5jb2x1bW5JbmZvRmFjdG9yeSwgaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5JbmZvIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBSZXNwb25zZUNvbHVtbiB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIENvbHVtbkluZm9GYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKCkge31cblxuXHRjb25zdHJ1Y3QgKGFwaUNvbHVtbjogUmVzcG9uc2VDb2x1bW4sIHBhcmVudDogQ29sdW1uSW5mbyB8IG51bGwpOiBDb2x1bW5JbmZvIHtcblx0XHRyZXR1cm4gbmV3IENvbHVtbkluZm8oYXBpQ29sdW1uLCBwYXJlbnQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5IYW5kbGVyLCBDb2x1bW5TZXQsIENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENvbHVtbkluZm9GYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEFwaVJlcXVlc3RDb2x1bW5zLCBJdGVtVHlwZSwgUmVzcG9uc2VDb2x1bW5NYXAgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5TZXRGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sdW1uSGFuZGxlcjogQ29sdW1uSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWwsXG5cdFx0cHJpdmF0ZSBjb2x1bW5JbmZvRmFjdG9yeTogQ29sdW1uSW5mb0ZhY3Rvcnlcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3RTdHViIChpdGVtVHlwZTogSXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucykge1xuXHRcdHJldHVybiBuZXcgQ29sdW1uU2V0KFxuXHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2x1bW5VdGlsLFxuXHRcdFx0dGhpcy5jb2x1bW5JbmZvRmFjdG9yeSxcblx0XHRcdHRoaXMsXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdHJlcXVlc3RDb2x1bW5zXG5cdFx0KTtcblx0fVxuXG5cdGNvbnN0cnVjdCAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyxcblx0XHRyZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwLFxuXHRcdGVuYWJsZUNhY2hpbmc/OiBib29sZWFuLFxuXHRcdGluY2x1ZGVJZENvbHVtbj86IGJvb2xlYW5cblx0KSB7XG5cdFx0cmV0dXJuIHRoaXMuY29uc3RydWN0U3R1YihpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMpLnJlc29sdmUocmVzcG9uc2VDb2x1bW5zLCBlbmFibGVDYWNoaW5nLCBpbmNsdWRlSWRDb2x1bW4pO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5TdWJzZXRDYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdENvbHVtbnMgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5TdWJzZXRDYWNoZUZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoKSB7fVxuXG5cdGNvbnN0cnVjdCAocmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zKTogQ29sdW1uU3Vic2V0Q2FjaGUge1xuXHRcdHJldHVybiBuZXcgQ29sdW1uU3Vic2V0Q2FjaGUocmVxdWVzdENvbHVtbnMpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUsIENvbGxlY3Rpb25IYW5kbGVyLCBDcmVhdGVDb21waWxhdGlvbiwgQ3JlYXRlUmVxdWVzdCwgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LCBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQ3JlYXRlUmVxdWVzdEZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnk6IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSByZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnlcblx0KSB7XG5cblx0fVxuXG5cdGNvbnN0cnVjdCAoXG5cdFx0Y29tcGlsYXRpb246IENyZWF0ZUNvbXBpbGF0aW9uLFxuXHRcdGxvY2FsQ29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGUsXG5cdFx0cGFyYW1ldGVyTWFwOiBDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwLFxuXHRcdGJyZWFrdXBCeVBhcmVudD86IGJvb2xlYW5cblx0KTogQ3JlYXRlUmVxdWVzdCB7XG5cdFx0cmV0dXJuIG5ldyBDcmVhdGVSZXF1ZXN0KFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcblx0XHRcdHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRcdGNvbXBpbGF0aW9uLFxuXHRcdFx0bG9jYWxDb2xsZWN0aW9uQ2FjaGUsXG5cdFx0XHRwYXJhbWV0ZXJNYXAsXG5cdFx0XHRicmVha3VwQnlQYXJlbnRcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBJdGVtQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IFF1ZXJ5TWF0Y2hlckZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuXG5leHBvcnQgY2xhc3MgSXRlbUNhY2hlRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3Rvcnlcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3QgKCk6IEl0ZW1DYWNoZSB7XG5cdFx0cmV0dXJuIG5ldyBJdGVtQ2FjaGUodGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQXBpRm9ybWF0dGVyLCBDb2x1bW5TZXQsIEl0ZW1FbnRyeVNlcnZpY2UsIEtleVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENvbHVtblNldEZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgQXV0aEludGVyZmFjZSwgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEl0ZW1FbnRyeSwgVGVtcGxhdGUgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdENvbHVtbnMsIEVudHJ5UGFyZW50TnVsbCwgRmllbGRNYXAsIEl0ZW1JZCwgSXRlbUlkQ29udmVyc2lvbk1hcCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBJdGVtRW50cnlGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHB1YmxpYyBhdXRoSW50ZXJmYWNlOiBBdXRoSW50ZXJmYWNlLFxuXHRcdHB1YmxpYyBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcblx0XHRwdWJsaWMgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcblx0XHRwdWJsaWMgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcblx0XHRwdWJsaWMga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwdWJsaWMgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlXG5cdCkge1xuXHR9XG5cblx0Y29uc3RydWN0U3R1YiAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCwgY29sdW1uU2V0U3R1YjogQ29sdW1uU2V0KTogSXRlbUVudHJ5IHtcblx0XHRyZXR1cm4gbmV3IEl0ZW1FbnRyeSh0aGlzLCBpdGVtVHlwZSwgaXRlbUlkLCBjb2x1bW5TZXRTdHViKTtcblx0fVxuXG5cdGNvbnN0cnVjdExvY2FsTGlua2VkIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUlkOiBJdGVtSWQsXG5cdFx0aW5pdGlhbDogRmllbGRNYXAsXG5cdFx0cGFyZW50OiBFbnRyeVBhcmVudE51bGwsXG5cdFx0Y29sdW1uU2V0OiBDb2x1bW5TZXQsXG5cdFx0Y29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcFxuXHQpOiBJdGVtRW50cnkge1xuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuY29uc3RydWN0U3R1YihpdGVtVHlwZSwgaXRlbUlkLCBjb2x1bW5TZXQpO1xuXG5cdFx0aXRlbUVudHJ5LnBhcmVudCA9IHBhcmVudDtcblxuXHRcdHJldHVybiBpdGVtRW50cnkuc2V0TG9jYWxGaWVsZHMoaW5pdGlhbCwgY29udmVyc2lvbk1hcCk7XG5cdH1cblxuXHRjb25zdHJ1Y3RMb2NhbCAoXG5cdFx0aXRlbUlkOiBJdGVtSWQsXG5cdFx0dGVtcGxhdGU6IFRlbXBsYXRlLFxuXHRcdG1vZGlmaWVkOiBGaWVsZE1hcCxcblx0XHRkZXJpdmVkOiBGaWVsZE1hcCxcblx0XHRwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCA9IG51bGwsXG5cdFx0Y29sdW1uU2V0OiBDb2x1bW5TZXQgPSB0ZW1wbGF0ZS5jb2x1bW5zLFxuXHRcdGNvbnZlcnNpb25NYXA/OiBJdGVtSWRDb252ZXJzaW9uTWFwXG5cdCk6IEl0ZW1FbnRyeSB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSB0ZW1wbGF0ZS5jb2x1bW5zLml0ZW1UeXBlO1xuXG5cdFx0aWYgKGNvbnZlcnNpb25NYXAgPT09IHVuZGVmaW5lZClcblx0XHRcdGNvbnZlcnNpb25NYXAgPSB0aGlzLml0ZW1FbnRyeVNlcnZpY2UuY3JlYXRlTG9jYWxDb252ZXJzaW9uTWFwKGl0ZW1UeXBlLCBpdGVtSWQsIHRydWUsIHRlbXBsYXRlLnJlc3BvbnNlKTtcblxuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuY29uc3RydWN0U3R1YihpdGVtVHlwZSwgaXRlbUlkLCBjb2x1bW5TZXQpO1xuXG5cdFx0aXRlbUVudHJ5LnBhcmVudCA9IHBhcmVudDtcblxuXHRcdHJldHVybiBpdGVtRW50cnlcblx0XHRcdC5zZXRMb2NhbEZpZWxkcyh0ZW1wbGF0ZS5maWVsZHMsIGNvbnZlcnNpb25NYXAsIHRlbXBsYXRlLmNvbHVtbnMpXG5cdFx0XHQuc2V0TW9kaWZpZWQobW9kaWZpZWQpXG5cdFx0XHQuc2V0RGVyaXZlZChkZXJpdmVkKTtcblx0fVxuXG5cdGNvbnN0cnVjdERlZmVycmVkIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUlkOiBJdGVtSWQsXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRcdGRlZmVyUmVxdWVzdDogYm9vbGVhblxuXHQpOiBJdGVtRW50cnkge1xuXHRcdGNvbnN0IGl0ZW1FbnRyeVN0dWIgPSB0aGlzLmNvbnN0cnVjdFN0dWIoXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdGl0ZW1JZCxcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3RTdHViKFxuXHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0cmVxdWVzdENvbHVtbnNcblx0XHRcdClcblx0XHQpO1xuXG5cdFx0aXRlbUVudHJ5U3R1Yi5kZWZlcihkZWZlclJlcXVlc3QpO1xuXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeVN0dWI7XG5cdH1cblxuXHRjb25zdHJ1Y3QgKFxuXHRcdGl0ZW1JZDogSXRlbUlkLFxuXHRcdGluaXRpYWw6IEZpZWxkTWFwLFxuXHRcdGRlcml2ZWQ6IEZpZWxkTWFwLFxuXHRcdGNvbHVtbkluZm86IENvbHVtblNldFxuXHQpOiBJdGVtRW50cnkge1xuXHRcdHJldHVybiB0aGlzLmNvbnN0cnVjdFN0dWIoXG5cdFx0XHRjb2x1bW5JbmZvLml0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkLCAvLyBpbml0aWFsLmlkICh3aGVuIGluaXRpYWwgaXMgbm90IGEgdGVtcGxhdGUpXG5cdFx0XHRjb2x1bW5JbmZvLFxuXHRcdCkuc2V0RmllbGRzKFxuXHRcdFx0aW5pdGlhbCwgLy8gY2FuIGFsc28gYmUgYSB0ZW1wbGF0ZVxuXHRcdFx0ZGVyaXZlZCxcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBBcGlGb3JtYXR0ZXIsIENoYW5nZXNQcm9jZXNzb3IsIExvY2tTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBFZGl0UmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlT3B0aW9ucywgVmlld1Jlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IEl0ZW1PcHRpb25zSW50ZXJmYWNlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgSXRlbVJlc291cmNlRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwdWJsaWMgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXG5cdFx0cHVibGljIGxvY2tTZXJ2aWNlOiBMb2NrU2VydmljZSxcblx0XHRwdWJsaWMgY2hhbmdlc1Byb2Nlc3NvcjogQ2hhbmdlc1Byb2Nlc3Nvcixcblx0XHRwdWJsaWMgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHVibGljIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZVxuXHQpIHtcblx0fVxuXG5cdGdldENvbnN0cnVjdG9yIChvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0OiB0cnVlfSk6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gRWRpdFJlc291cmNlO1xuXHRnZXRDb25zdHJ1Y3RvciAob3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UpOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IFZpZXdSZXNvdXJjZTtcblx0Z2V0Q29uc3RydWN0b3IgKG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlKSB7XG5cdFx0Y29uc3Qgb3B0aW9uc0luc3RhbmNlID0gbmV3IEl0ZW1SZXNvdXJjZU9wdGlvbnMob3B0aW9ucyk7XG5cblx0XHRyZXR1cm4gKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiB7XG5cdFx0XHRyZXR1cm4gb3B0aW9uc0luc3RhbmNlLmVkaXQgP1xuXHRcdFx0XHRuZXcgRWRpdFJlc291cmNlKHRoaXMsIGl0ZW1FbnRyeSwgb3B0aW9uc0luc3RhbmNlKSA6XG5cdFx0XHRcdG5ldyBWaWV3UmVzb3VyY2UoaXRlbUVudHJ5LCBvcHRpb25zSW5zdGFuY2UpO1xuXHRcdH07XG5cdH1cblxuXHRjb25zdHJ1Y3QgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0OiB0cnVlfSwgaXNOZXc/OiBib29sZWFuKTogRWRpdFJlc291cmNlO1xuXHRjb25zdHJ1Y3QgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSwgaXNOZXc/OiBib29sZWFuKTogVmlld1Jlc291cmNlO1xuXHRjb25zdHJ1Y3QgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSwgaXNOZXc/OiBib29sZWFuKSB7XG5cdFx0Y29uc3Qgb3B0aW9uc0luc3RhbmNlID0gbmV3IEl0ZW1SZXNvdXJjZU9wdGlvbnMob3B0aW9ucyk7XG5cblx0XHRyZXR1cm4gb3B0aW9ucy5lZGl0ID9cblx0XHRcdG5ldyBFZGl0UmVzb3VyY2UodGhpcywgaXRlbUVudHJ5LCBvcHRpb25zSW5zdGFuY2UsIGlzTmV3KSA6XG5cdFx0XHRuZXcgVmlld1Jlc291cmNlKGl0ZW1FbnRyeSwgb3B0aW9uc0luc3RhbmNlLCBpc05ldyk7XG5cdH1cbn1cbiIsImltcG9ydCB7IExvY2FsQ2FjaGUsIExvY2tTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQge1xuXHRDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcblx0Q29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0Q29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcblx0SXRlbUNhY2hlRmFjdG9yeSxcblx0SXRlbVJlc291cmNlRmFjdG9yeVxufSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlTGlicmFyeUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5leHBvcnQgY2xhc3MgTG9jYWxDYWNoZUZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGxvY2tTZXJ2aWNlOiBMb2NrU2VydmljZSxcblx0XHRwcml2YXRlIGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRcdHByaXZhdGUgY2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnk6IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRcdHByaXZhdGUgaXRlbUNhY2hlRmFjdG9yeTogSXRlbUNhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnk6IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2Vcblx0KSB7XG5cblx0fVxuXG5cdGNvbnN0cnVjdCAoaWQ/OiBzdHJpbmcpOiBMb2NhbENhY2hlIHtcblx0XHRyZXR1cm4gbmV3IExvY2FsQ2FjaGUoXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlcixcblx0XHRcdHRoaXMubG9ja1NlcnZpY2UsXG5cdFx0XHR0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRcdFx0dGhpcy5pdGVtQ2FjaGVGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRcdFx0dGhpcy5wcm9taXNlU2VydmljZSxcblx0XHRcdGlkXG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlLCBJdGVtQ2FjaGUsIE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbiB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcblxuZXhwb3J0IGNsYXNzIE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnkge1xuXHRjb25zdHJ1Y3QgKHJvb3RJdGVtOiBJdGVtRW50cnksIHNpbmdsZUl0ZW1DYWNoZTogSXRlbUNhY2hlLCBjb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZSk6IE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbiB7XG5cdFx0cmV0dXJuIG5ldyBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb24ocm9vdEl0ZW0sIHNpbmdsZUl0ZW1DYWNoZSwgY29sbGVjdGlvbkNhY2hlKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQXBpRm9ybWF0dGVyLCBRdWVyeU1hdGNoZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEVudHJ5UGFyZW50TnVsbCwgRmllbGRNYXAsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgUXVlcnlNYXRjaGVyRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyXG5cdCkge1xuXG5cdH1cblxuXHRjb25zdHJ1Y3QgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgZmllbGRzOiBGaWVsZE1hcCwgcGFyZW50OiBFbnRyeVBhcmVudE51bGwpOiBRdWVyeU1hdGNoZXIge1xuXHRcdHJldHVybiBuZXcgUXVlcnlNYXRjaGVyKFxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdGZpZWxkcyxcblx0XHRcdHBhcmVudFxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IFF1ZXJ5UGFyc2VyIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBBcGlRdWVyeSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIFF1ZXJ5UGFyc2VyRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yICgpIHtcblx0fVxuXG5cdGNvbnN0cnVjdCAocXVlcnk6IEFwaVF1ZXJ5LCBwYXJhbWV0ZXJzPzogYW55KTogUXVlcnlQYXJzZXIge1xuXHRcdHJldHVybiBuZXcgUXVlcnlQYXJzZXIocXVlcnksIHBhcmFtZXRlcnMpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5VdGlsLCBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5cbmV4cG9ydCBjbGFzcyBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWxcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3QgKCk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb24ge1xuXHRcdHJldHVybiBuZXcgUmVxdWVzdENvbHVtbkV4cGFuc2lvbihcblx0XHRcdHRoaXMuY29sdW1uVXRpbFxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENvbHVtblNldEZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgQXBpUmVzcG9uc2UsIEl0ZW1UeXBlLCBSZXNwb25zZUNvbHVtbk1hcCB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwdWJsaWMgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcblx0XHRwdWJsaWMgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxuXHQpIHt9XG5cblx0Y29uc3RydWN0IChpdGVtVHlwZTogSXRlbVR5cGUsIHJlc3BvbnNlOiBBcGlSZXNwb25zZSwgYWRkaXRpb25hbENvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwKTogVGVtcGxhdGUge1xuXHRcdHJldHVybiBuZXcgVGVtcGxhdGUodGhpcywgaXRlbVR5cGUsIHJlc3BvbnNlLCBhZGRpdGlvbmFsQ29sdW1ucyk7XG5cdH1cbn1cbiIsImV4cG9ydCAqIGZyb20gJy4vQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vQmF0Y2hTdGF0dXNGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0NoYW5nZXNQcm9jZXNzb3JGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25FbnRyeUZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uTWF0Y2hlckZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0NvbHVtbkluZm9GYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uU2V0RmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0NvbHVtblN1YnNldENhY2hlRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0NyZWF0ZVJlcXVlc3RGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vSXRlbUNhY2hlRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0l0ZW1FbnRyeUZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9JdGVtUmVzb3VyY2VGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vTG9jYWxDYWNoZUZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9Nb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vUXVlcnlNYXRjaGVyRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL1F1ZXJ5UGFyc2VyRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL1JlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vVGVtcGxhdGVGYWN0b3J5JztcbiIsImltcG9ydCB7XG5cdEFwaUZvcm1hdHRlcixcblx0QXBpUmVxdWVzdFNlcnZpY2UsXG5cdENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdENvbGxlY3Rpb25IYW5kbGVyLFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLFxuXHRDb2x1bW5DYWNoZSxcblx0Q29sdW1uSGFuZGxlcixcblx0Q29sdW1uVXRpbCxcblx0SXRlbUFkbWluaXN0cmF0b3IsXG5cdEl0ZW1FbnRyeVNlcnZpY2UsXG5cdEl0ZW1IYW5kbGVyLFxuXHRJdGVtUmVxdWVzdFNlcnZpY2UsXG5cdEtleVNlcnZpY2UsXG5cdExvY2tTZXJ2aWNlLFxuXHRRdWVyeVNlcnZpY2UsXG5cdFNvY2tldE1lc3NhZ2VIYW5kbGVyXG59IGZyb20gJy4vY2xhc3Nlcyc7XG5pbXBvcnQge1xuXHRBcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnksXG5cdEJhdGNoU3RhdHVzRmFjdG9yeSxcblx0Q2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcblx0Q2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXG5cdENvbGxlY3Rpb25DYWNoZUZhY3RvcnksXG5cdENvbGxlY3Rpb25FbnRyeUZhY3RvcnksXG5cdENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcblx0Q29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcblx0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0Q29sdW1uSW5mb0ZhY3RvcnksXG5cdENvbHVtblNldEZhY3RvcnksXG5cdENvbHVtblN1YnNldENhY2hlRmFjdG9yeSxcblx0Q3JlYXRlUmVxdWVzdEZhY3RvcnksXG5cdEl0ZW1DYWNoZUZhY3RvcnksXG5cdEl0ZW1FbnRyeUZhY3RvcnksXG5cdEl0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdExvY2FsQ2FjaGVGYWN0b3J5LFxuXHRNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxuXHRRdWVyeU1hdGNoZXJGYWN0b3J5LFxuXHRRdWVyeVBhcnNlckZhY3RvcnksXG5cdFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LCBUZW1wbGF0ZUZhY3Rvcnlcbn0gZnJvbSAnLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHtcblx0QXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdEF1dGhJbnRlcmZhY2UsXG5cdEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0TG9jYWxDYWNoZU1hbmFnZXJJbnRlcmZhY2UsXG5cdFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlXG59IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBjbGFzcyBSbUNvcmUge1xuXHR2ZXJzaW9uOiBzdHJpbmc7XG5cdG5vb3AgPSBub29wO1xuXG5cdGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyO1xuXHRhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2U7XG5cdGFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeTogQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5O1xuXHRiYXRjaFN0YXR1c0ZhY3Rvcnk6IEJhdGNoU3RhdHVzRmFjdG9yeTtcblx0Y2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeTogQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeTtcblx0Y2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnk6IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5O1xuXHRjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5O1xuXHRjb2xsZWN0aW9uRW50cnlGYWN0b3J5OiBDb2xsZWN0aW9uRW50cnlGYWN0b3J5O1xuXHRjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlO1xuXHRjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXI7XG5cdGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeTogQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5O1xuXHRjb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5OiBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5O1xuXHRjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlO1xuXHRjb2x1bW5DYWNoZTogQ29sdW1uQ2FjaGU7XG5cdGNvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk7XG5cdGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXI7XG5cdGNvbHVtbkluZm9GYWN0b3J5OiBDb2x1bW5JbmZvRmFjdG9yeTtcblx0Y29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeTtcblx0Y29sdW1uU3Vic2V0Q2FjaGVGYWN0b3J5OiBDb2x1bW5TdWJzZXRDYWNoZUZhY3Rvcnk7XG5cdGNvbHVtblV0aWw6IENvbHVtblV0aWw7XG5cdGNyZWF0ZVJlcXVlc3RGYWN0b3J5OiBDcmVhdGVSZXF1ZXN0RmFjdG9yeTtcblx0aXRlbUFkbWluaXN0cmF0b3I6IEl0ZW1BZG1pbmlzdHJhdG9yO1xuXHRpdGVtQ2FjaGVGYWN0b3J5OiBJdGVtQ2FjaGVGYWN0b3J5O1xuXHRpdGVtRW50cnlGYWN0b3J5OiBJdGVtRW50cnlGYWN0b3J5O1xuXHRpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlO1xuXHRpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXI7XG5cdGl0ZW1SZXF1ZXN0U2VydmljZTogSXRlbVJlcXVlc3RTZXJ2aWNlO1xuXHRpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5O1xuXHRrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlO1xuXHRsb2NhbENhY2hlRmFjdG9yeTogTG9jYWxDYWNoZUZhY3Rvcnk7XG5cdGxvY2tTZXJ2aWNlOiBMb2NrU2VydmljZTtcblx0bW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeTogTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeTtcblx0cXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeTtcblx0cXVlcnlQYXJzZXJGYWN0b3J5OiBRdWVyeVBhcnNlckZhY3Rvcnk7XG5cdHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlO1xuXHRyZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk7XG5cdHNvY2tldE1lc3NhZ2VIYW5kbGVyOiBTb2NrZXRNZXNzYWdlSGFuZGxlcjtcblx0dGVtcGxhdGVGYWN0b3J5OiBUZW1wbGF0ZUZhY3Rvcnk7XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdGV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdGxvY2FsQ2FjaGVNYW5hZ2VyOiBMb2NhbENhY2hlTWFuYWdlckludGVyZmFjZSxcblx0XHRhdXRoSW50ZXJmYWNlOiBBdXRoSW50ZXJmYWNlLFxuXHRcdGVycm9ySGFuZGxlckludGVyZmFjZTogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByb21pc2VMaWJyYXJ5SW50ZXJmYWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZVxuXHQpIHtcblx0XHR0aGlzLnZlcnNpb24gPSAnMS41LjctMSc7XG5cblx0XHR0aGlzLmFwaUZvcm1hdHRlciA9IG5ldyBBcGlGb3JtYXR0ZXIoKTtcblx0XHR0aGlzLmtleVNlcnZpY2UgPSBuZXcgS2V5U2VydmljZSgpO1xuXHRcdHRoaXMucXVlcnlTZXJ2aWNlID0gbmV3IFF1ZXJ5U2VydmljZSgpO1xuXHRcdHRoaXMuY29sdW1uVXRpbCA9IG5ldyBDb2x1bW5VdGlsKCk7XG5cblx0XHR0aGlzLmFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSA9IG5ldyBBcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnkodGhpcy5hcGlGb3JtYXR0ZXIpO1xuXG5cdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZSA9IG5ldyBBcGlSZXF1ZXN0U2VydmljZShleHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLCB0aGlzLmFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSk7XG5cblx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UgPSBuZXcgSXRlbUVudHJ5U2VydmljZShhdXRoSW50ZXJmYWNlLCB0aGlzLmtleVNlcnZpY2UpO1xuXG5cdFx0dGhpcy5sb2NrU2VydmljZSA9IG5ldyBMb2NrU2VydmljZShcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHRwcm9taXNlTGlicmFyeUludGVyZmFjZVxuXHRcdCk7XG5cdFx0dGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5ID0gbmV3IFF1ZXJ5TWF0Y2hlckZhY3RvcnkodGhpcy5hcGlGb3JtYXR0ZXIpO1xuXHRcdHRoaXMuaXRlbUNhY2hlRmFjdG9yeSA9IG5ldyBJdGVtQ2FjaGVGYWN0b3J5KHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeSk7XG5cdFx0dGhpcy5iYXRjaFN0YXR1c0ZhY3RvcnkgPSBuZXcgQmF0Y2hTdGF0dXNGYWN0b3J5KHByb21pc2VMaWJyYXJ5SW50ZXJmYWNlKTtcblxuXHRcdHRoaXMuY29sdW1uQ2FjaGUgPSBuZXcgQ29sdW1uQ2FjaGUodGhpcy5jb2x1bW5VdGlsKTtcblx0XHR0aGlzLmNvbHVtbkhhbmRsZXIgPSBuZXcgQ29sdW1uSGFuZGxlcihcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHRwcm9taXNlTGlicmFyeUludGVyZmFjZSxcblx0XHRcdHRoaXMuY29sdW1uQ2FjaGUsXG5cdFx0XHR0aGlzLmNvbHVtblV0aWxcblx0XHQpO1xuXG5cdFx0dGhpcy5jb2x1bW5JbmZvRmFjdG9yeSA9IG5ldyBDb2x1bW5JbmZvRmFjdG9yeSgpO1xuXHRcdHRoaXMuY29sdW1uU3Vic2V0Q2FjaGVGYWN0b3J5ID0gbmV3IENvbHVtblN1YnNldENhY2hlRmFjdG9yeSgpO1xuXHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSA9IG5ldyBDb2x1bW5FeHBhbnNpb25GYWN0b3J5KHRoaXMuY29sdW1uSW5mb0ZhY3RvcnkpO1xuXHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSA9IG5ldyBDb2x1bW5TZXRGYWN0b3J5KHRoaXMuY29sdW1uSGFuZGxlciwgdGhpcy5jb2x1bW5VdGlsLCB0aGlzLmNvbHVtbkluZm9GYWN0b3J5KTtcblxuXHRcdHRoaXMudGVtcGxhdGVGYWN0b3J5ID0gbmV3IFRlbXBsYXRlRmFjdG9yeSh0aGlzLmNvbHVtblNldEZhY3RvcnksIHRoaXMuY29sdW1uVXRpbCk7XG5cblx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnkgPSBuZXcgSXRlbUVudHJ5RmFjdG9yeShcblx0XHRcdGF1dGhJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMua2V5U2VydmljZSxcblx0XHRcdHByb21pc2VMaWJyYXJ5SW50ZXJmYWNlXG5cdFx0KTtcblx0XHR0aGlzLml0ZW1IYW5kbGVyID0gbmV3IEl0ZW1IYW5kbGVyKFxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0dGhpcy5iYXRjaFN0YXR1c0ZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbHVtbkhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbHVtblN1YnNldENhY2hlRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sdW1uVXRpbCxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUNhY2hlRmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5RmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMua2V5U2VydmljZSxcblx0XHRcdHByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxuXHRcdFx0dGhpcy50ZW1wbGF0ZUZhY3Rvcnlcblx0XHQpO1xuXHRcdHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlID0gbmV3IEl0ZW1SZXF1ZXN0U2VydmljZSh0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcblx0XHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5RmFjdG9yeSxcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUxpYnJhcnlJbnRlcmZhY2Vcblx0XHQpO1xuXG5cdFx0dGhpcy5xdWVyeVBhcnNlckZhY3RvcnkgPSBuZXcgUXVlcnlQYXJzZXJGYWN0b3J5KCk7XG5cdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlID0gbmV3IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UodGhpcy5xdWVyeVBhcnNlckZhY3RvcnksIHRoaXMucXVlcnlTZXJ2aWNlKTtcblx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UgPSBuZXcgQ29sbGVjdGlvblJlc291cmNlU2VydmljZSgpO1xuXHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5RmFjdG9yeSA9IG5ldyBDb2xsZWN0aW9uRW50cnlGYWN0b3J5KFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5pdGVtRW50cnlGYWN0b3J5LFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcblx0XHRcdHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZVxuXHRcdCk7XG5cdFx0dGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5ID0gbmV3IENvbGxlY3Rpb25DYWNoZUZhY3RvcnkodGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5KTtcblx0XHR0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSA9IG5ldyBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnkodGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5KTtcblx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyID0gbmV3IENvbGxlY3Rpb25IYW5kbGVyKFxuXHRcdFx0dGhpcy5iYXRjaFN0YXR1c0ZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeUZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sdW1uSGFuZGxlcixcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXG5cdFx0XHR0aGlzLml0ZW1SZXF1ZXN0U2VydmljZSxcblx0XHRcdHRoaXMua2V5U2VydmljZSxcblx0XHRcdHByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5xdWVyeVBhcnNlckZhY3RvcnksXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZVxuXHRcdCk7XG5cblx0XHR0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5ID0gbmV3IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5KHRoaXMuY29sdW1uVXRpbCk7XG5cdFx0dGhpcy5jcmVhdGVSZXF1ZXN0RmFjdG9yeSA9IG5ldyBDcmVhdGVSZXF1ZXN0RmFjdG9yeShcblx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcblx0XHRcdHRoaXMua2V5U2VydmljZSxcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnlcblx0XHQpO1xuXHRcdHRoaXMuY2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSA9IG5ldyBDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5KHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSwgdGhpcy5rZXlTZXJ2aWNlKTtcblx0XHR0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5ID0gbmV3IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5KFxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0dGhpcy5jaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcblx0XHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRcdHRoaXMuY3JlYXRlUmVxdWVzdEZhY3RvcnksXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLFxuXHRcdFx0cHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XG5cdFx0KTtcblx0XHR0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnkgPSBuZXcgSXRlbVJlc291cmNlRmFjdG9yeShcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxuXHRcdFx0dGhpcy5sb2NrU2VydmljZSxcblx0XHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkuY29uc3RydWN0KCksXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHRwcm9taXNlTGlicmFyeUludGVyZmFjZVxuXHRcdCk7XG5cdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5ID0gbmV3IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkoXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUxpYnJhcnlJbnRlcmZhY2Vcblx0XHQpO1xuXG5cdFx0dGhpcy5sb2NhbENhY2hlRmFjdG9yeSA9IG5ldyBMb2NhbENhY2hlRmFjdG9yeShcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMubG9ja1NlcnZpY2UsXG5cdFx0XHR0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRcdFx0dGhpcy5pdGVtQ2FjaGVGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRcdFx0cHJvbWlzZUxpYnJhcnlJbnRlcmZhY2Vcblx0XHQpO1xuXHRcdHRoaXMubW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSA9IG5ldyBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5KCk7XG5cblx0XHR0aGlzLml0ZW1BZG1pbmlzdHJhdG9yID0gbmV3IEl0ZW1BZG1pbmlzdHJhdG9yKFxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcblx0XHRcdGF1dGhJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnksXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLFxuXHRcdFx0dGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHR0aGlzLmxvY2FsQ2FjaGVGYWN0b3J5LFxuXHRcdFx0bG9jYWxDYWNoZU1hbmFnZXIsXG5cdFx0XHR0aGlzLm1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXG5cdFx0XHRwcm9taXNlTGlicmFyeUludGVyZmFjZSxcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlXG5cdFx0KTtcblxuXHRcdHRoaXMuc29ja2V0TWVzc2FnZUhhbmRsZXIgPSBuZXcgU29ja2V0TWVzc2FnZUhhbmRsZXIoXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5pdGVtRW50cnlGYWN0b3J5LFxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcblx0XHRcdGxvY2FsQ2FjaGVNYW5hZ2VyLFxuXHRcdFx0cHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XG5cdFx0KTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9vcCAoKSB7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eSAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlO1xufVxuIiwiZXhwb3J0ICogZnJvbSAnLi9jb3JlJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RhbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzJztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJmYWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL2NsYXNzZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9mYWN0b3JpZXMnO1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XG4iXSwic291cmNlUm9vdCI6IiJ9
|
|
7586
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9SbUNvcmUvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL1JtQ29yZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9SbUNvcmUvZXh0ZXJuYWwgXCJtb21lbnRcIiIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9VdGlsLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0FwaUZvcm1hdHRlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9BcGlSZXF1ZXN0U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9BcGlSZXNwb25zZVByb2Nlc3Nvci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY29uc3RhbnRzLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0JhdGNoU3RhdHVzLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NoYW5nZXNDb21waWxhdGlvbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9DaGFuZ2VzUHJvY2Vzc29yLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25DYWNoZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL0l0ZW1FbnRyeU9wdGlvbnMudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9JdGVtUmVzb3VyY2VPcHRpb25zLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvSXRlbUVudHJ5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvSXRlbVJlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvVmlld1Jlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvRWRpdFJlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvbkVudHJ5T3B0aW9ucy50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL0NvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnMudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9Db2xsZWN0aW9uRW50cnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9Db2xsZWN0aW9uUmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9Db2xsZWN0aW9uVmlld1Jlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvbkVkaXRSZXNvdXJjZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL1RlbXBsYXRlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sbGVjdGlvbkVudHJ5U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2xsZWN0aW9uSGFuZGxlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2xsZWN0aW9uTWF0Y2hlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbHVtbkNhY2hlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbHVtbkV4cGFuc2lvbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2x1bW5IYW5kbGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbHVtbkluZm8udHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uU2V0LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbHVtblN1YnNldENhY2hlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbHVtblV0aWwudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ3JlYXRlUmVxdWVzdC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtQWRtaW5pc3RyYXRvci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvSXRlbUVudHJ5U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtSGFuZGxlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtUmVxdWVzdFNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvS2V5U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvdHlwZXMvSXRlbVR5cGVzQ29sbGVjdGlvbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvdHlwZXMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvTG9jYWxDYWNoZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Mb2NrU2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Nb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb24udHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvUXVlcnlNYXRjaGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL1F1ZXJ5UGFyc2VyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL1F1ZXJ5U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9SZXF1ZXN0Q29sdW1uRXhwYW5zaW9uLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL1NvY2tldE1lc3NhZ2VIYW5kbGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL2luZGV4LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQmF0Y2hTdGF0dXNGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sbGVjdGlvbkNhY2hlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbGxlY3Rpb25FbnRyeUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2xsZWN0aW9uTWF0Y2hlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sdW1uRXhwYW5zaW9uRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbHVtbkluZm9GYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sdW1uU2V0RmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbHVtblN1YnNldENhY2hlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NyZWF0ZVJlcXVlc3RGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvSXRlbUNhY2hlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0l0ZW1FbnRyeUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9JdGVtUmVzb3VyY2VGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvTG9jYWxDYWNoZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Nb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvUXVlcnlNYXRjaGVyRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL1F1ZXJ5UGFyc2VyRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL1JlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvVGVtcGxhdGVGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NvcmUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxPO0FDVkE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrREFBMEMsZ0NBQWdDO0FBQzFFO0FBQ0E7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QkFBK0IsRUFDcEMsdUJBQXVCLEVBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQ2pCLENBQUM7UUFFRixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxvQkFBb0IsQ0FDbkQsSUFBSSxDQUFDLFlBQVksRUFDakIsSUFBSSxDQUFDLGlCQUFpQixFQUN0QixJQUFJLENBQUMsaUJBQWlCLEVBQ3RCLElBQUksQ0FBQyxzQkFBc0IsRUFDM0IsSUFBSSxDQUFDLGdCQUFnQixFQUNyQixxQkFBcUIsRUFDckIsSUFBSSxDQUFDLGdCQUFnQixFQUNyQixJQUFJLENBQUMsV0FBVyxFQUNoQixpQkFBaUIsRUFDakIsdUJBQXVCLEVBQ3ZCLElBQUksQ0FBQyw2QkFBNkIsQ0FDbEMsQ0FBQztJQUNILENBQUM7SUFDRixhQUFDO0FBQUQsQ0FBQzs7QUFFSyxTQUFVLElBQUk7QUFDcEIsQ0FBQztBQUVLLFNBQVUsUUFBUSxDQUFFLEtBQUs7SUFDOUIsT0FBTyxLQUFLLENBQUM7QUFDZCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDdlNzQjtBQUNLO0FBQ0g7QUFFQztBQUNFO0FBQ0oiLCJmaWxlIjoicm0tY29yZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIm1vbWVudFwiKSk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXCJtb21lbnRcIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiUm1Db3JlXCJdID0gZmFjdG9yeShyZXF1aXJlKFwibW9tZW50XCIpKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJSbUNvcmVcIl0gPSBmYWN0b3J5KHJvb3RbXCJtb21lbnRcIl0pO1xufSkod2luZG93LCBmdW5jdGlvbihfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX18wX18pIHtcbnJldHVybiAiLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzBfXzsiLCJleHBvcnQgZnVuY3Rpb24gaW5zdGFudGlhdGVPcHRpb25zIChvcHRpb25zOiB7W2tleTogc3RyaW5nXTogYW55fSwgdmFsdWVzOiBvYmplY3QpOiB2b2lkIHtcblx0Zm9yIChjb25zdCBrZXkgaW4gdmFsdWVzKSB7XG5cdFx0aWYgKCEoa2V5IGluIG9wdGlvbnMpKVxuXHRcdFx0Y29udGludWU7XG5cblx0XHRpZiAodmFsdWVzW2tleV0gPT09IHVuZGVmaW5lZClcblx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0b3B0aW9uc1trZXldID0gdmFsdWVzW2tleV07XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNoYWxsb3dNZXJnZSAob2JqZWN0LCBkZWZhdWx0cykge1xuXHRpZiAob2JqZWN0ID09PSB1bmRlZmluZWQpXG5cdFx0cmV0dXJuIGRlZmF1bHRzO1xuXG5cdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdGZvciAoY29uc3Qga2V5IGluIGRlZmF1bHRzKSB7XG5cdFx0cmVzdWx0W2tleV0gPSBvYmplY3Rba2V5XSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdGRlZmF1bHRzW2tleV0gOiBvYmplY3Rba2V5XTtcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNQcm9wZXJ0aWVzIChvYmplY3QpIHtcblx0Ly8gQHRzLWlnbm9yZVxuXHRmb3IgKGNvbnN0IGtleSBpbiBvYmplY3QpXG5cdFx0cmV0dXJuIHRydWU7XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rmlyc3RQcm9wZXJ0eSAob2JqZWN0KSB7XG5cdGlmICh0eXBlb2Ygb2JqZWN0ICE9PSAnb2JqZWN0Jylcblx0XHRyZXR1cm4gbnVsbDtcblxuXHRmb3IgKGNvbnN0IGtleSBpbiBvYmplY3QpXG5cdFx0cmV0dXJuIGtleTtcblxuXHRyZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluQXJyYXkgKG5lZWRsZSwgaGF5c3RhY2spIHtcblx0Zm9yIChjb25zdCBoYXkgb2YgaGF5c3RhY2spIHtcblx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuXHRcdGlmIChuZWVkbGUgPT0gaGF5KVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJBcnJheTxUPiAoc291cmNlOiBUW10sIGNhbGxiYWNrOiAoVCkgPT4gYm9vbGVhbik6IGJvb2xlYW4ge1xuXHRjb25zdCBmaWx0ZXJlZDogVFtdID0gW107XG5cblx0Zm9yIChjb25zdCBzcmMgb2Ygc291cmNlKSB7XG5cdFx0aWYgKGNhbGxiYWNrKHNyYykpXG5cdFx0XHRmaWx0ZXJlZC5wdXNoKHNyYyk7XG5cdH1cblxuXHRpZiAoZmlsdGVyZWQubGVuZ3RoID09PSBzb3VyY2UubGVuZ3RoKVxuXHRcdHJldHVybiBmYWxzZTtcblxuXHRlbXB0eUFycmF5KHNvdXJjZSk7XG5cblx0Zm9yIChjb25zdCBmaWx0ZXIgb2YgZmlsdGVyZWQpXG5cdFx0c291cmNlLnB1c2goZmlsdGVyKTtcblxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVtcHR5QXJyYXkgKGFycmF5KTogdm9pZCB7XG5cdGFycmF5LnNwbGljZSgwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhFeGlzdHMgKHNvdXJjZSwgcGF0aCkge1xuXHRpZiAodHlwZW9mIHNvdXJjZSA9PT0gJ3VuZGVmaW5lZCcpXG5cdFx0cmV0dXJuIGZhbHNlO1xuXG5cdGZvciAoY29uc3QgcCBvZiBwYXRoKSB7XG5cdFx0aWYgKHR5cGVvZiBzb3VyY2VbcF0gPT09ICd1bmRlZmluZWQnKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0c291cmNlID0gc291cmNlW3BdO1xuXHR9XG5cblx0cmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQYXRoIDxUPiAob2JqZWN0OiBhbnksIHBhdGg6IEFycmF5PG51bWJlciB8IHN0cmluZz4sIGRlZmF1bHRzOiBhbnlbXSk6IFQge1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCB2YWx1ZSA9IHBhdGhbaV07XG5cblx0XHRpZiAob2JqZWN0W3ZhbHVlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0b2JqZWN0W3ZhbHVlXSA9IGRlZmF1bHRzW2ldO1xuXG5cdFx0b2JqZWN0ID0gb2JqZWN0W3ZhbHVlXTtcblx0fVxuXG5cdHJldHVybiBvYmplY3Q7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXRoIChvYmplY3Q6IHt9LCBwYXRoOiBBcnJheTxudW1iZXIgfCBzdHJpbmc+LCBjcmVhdGU6IGJvb2xlYW4gPSBmYWxzZSk6IGFueSB7XG5cdGlmIChvYmplY3QgPT09IHVuZGVmaW5lZClcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdGZvciAoY29uc3QgcCBvZiBwYXRoKSB7XG5cdFx0b2JqZWN0ID0gb2JqZWN0W3BdOyAvLyB3b24ndCBhbHRlciB0aGUgY2FsbGVyJ3MgdmFyXG5cblx0XHRpZiAob2JqZWN0ID09PSB1bmRlZmluZWQgJiYgIWNyZWF0ZSlcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRyZXR1cm4gb2JqZWN0O1xufVxuXG4vLyBUYWtlbiBmcm9tIEFuZ3VsYXJKUywgYWRkZWQgY29tbWVudHMgdG8gaWdub3JlIFR5cGVTY3JpcHQgZXJyb3JzXG5mdW5jdGlvbiBiYXNlRXh0ZW5kIChkc3QsIG9ianMsIGRlZXApIHtcblx0Zm9yIChsZXQgaSA9IDAsIGlpID0gb2Jqcy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG5cdFx0Y29uc3Qgb2JqID0gb2Jqc1tpXTtcblxuXHRcdGlmICghaXNPYmplY3Qob2JqKSAmJiAhaXNGdW5jdGlvbihvYmopKVxuXHRcdFx0Y29udGludWU7XG5cblx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcblxuXHRcdGZvciAobGV0IGogPSAwLCBqaiA9IGtleXMubGVuZ3RoOyBqIDwgamo7IGorKykge1xuXHRcdFx0Y29uc3Qga2V5ID0ga2V5c1tqXTtcblx0XHRcdGNvbnN0IHNyYyA9IG9ialtrZXldO1xuXG5cdFx0XHRpZiAoZGVlcCAmJiBpc09iamVjdChzcmMpKSB7XG5cdFx0XHRcdGlmIChpc0RhdGUoc3JjKSkge1xuXHRcdFx0XHRcdGRzdFtrZXldID0gbmV3IERhdGUoc3JjLnZhbHVlT2YoKSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoaXNSZWdFeHAoc3JjKSkge1xuXHRcdFx0XHRcdGRzdFtrZXldID0gbmV3IFJlZ0V4cChzcmMpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHNyYy5ub2RlTmFtZSkge1xuXHRcdFx0XHRcdGRzdFtrZXldID0gc3JjLmNsb25lTm9kZSh0cnVlKTtcblx0XHRcdFx0fSBlbHNlIGlmIChpc0VsZW1lbnQoc3JjKSkge1xuXHRcdFx0XHRcdGRzdFtrZXldID0gc3JjLmNsb25lKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWYgKCFpc09iamVjdChkc3Rba2V5XSkpXG5cdFx0XHRcdFx0XHRkc3Rba2V5XSA9IGlzQXJyYXkoc3JjKSA/IFtdIDoge307XG5cblx0XHRcdFx0XHRiYXNlRXh0ZW5kKGRzdFtrZXldLCBbc3JjXSwgdHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRzdFtrZXldID0gc3JjO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBkc3Q7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRlbmQgKGRzdCwgLi4uYXJncykge1xuXHRyZXR1cm4gYmFzZUV4dGVuZChkc3QsIGFyZ3MsIGZhbHNlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlIChkc3QsIC4uLmFyZ3MpIHtcblx0cmV0dXJuIGJhc2VFeHRlbmQoZHN0LCBhcmdzLCB0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0ICh2YWx1ZSkge1xuXHQvLyBodHRwOi8vanNwZXJmLmNvbS9pc29iamVjdDRcblx0cmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0JsYW5rT2JqZWN0ICh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nICh2YWx1ZSkge1xuXHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVtYmVyICh2YWx1ZSkge1xuXHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0ZSAodmFsdWUpIHtcblx0cmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBEYXRlXSc7XG59XG5cbmV4cG9ydCBjb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRnVuY3Rpb24gKHZhbHVlKSB7XG5cdHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JlZ0V4cCAodmFsdWUpIHtcblx0cmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBSZWdFeHBdJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQm9vbGVhbiAodmFsdWUpIHtcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFbGVtZW50IChub2RlKSB7XG5cdHJldHVybiAhIShub2RlICYmXG5cdFx0KFxuXHRcdFx0bm9kZS5ub2RlTmFtZSAgLy8gV2UgYXJlIGEgZGlyZWN0IGVsZW1lbnQuXG5cdFx0XHR8fCAobm9kZS5wcm9wICYmIG5vZGUuYXR0ciAmJiBub2RlLmZpbmQpXG5cdFx0KVxuXHQpOyAgLy8gV2UgaGF2ZSBhbiBvbiBhbmQgZmluZCBtZXRob2QgcGFydCBvZiBqUXVlcnkgQVBJLlxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNXaW5kb3cgKG9iaikge1xuXHRyZXR1cm4gb2JqICYmIG9iai53aW5kb3cgPT09IG9iajtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVmaW5lZCAodmFsdWUpIHtcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbHMgKG8xLCBvMikge1xuXHRpZiAobzEgPT09IG8yKVxuXHRcdHJldHVybiB0cnVlO1xuXG5cdGlmIChvMSA9PT0gbnVsbCB8fCBvMiA9PT0gbnVsbClcblx0XHRyZXR1cm4gZmFsc2U7XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuXHRpZiAobzEgIT09IG8xICYmIG8yICE9PSBvMilcblx0XHRyZXR1cm4gdHJ1ZTsgLy8gTmFOID09PSBOYU5cblxuXHRjb25zdCB0MSA9IHR5cGVvZiBvMTtcblx0Y29uc3QgdDIgPSB0eXBlb2YgbzI7XG5cblx0bGV0IGxlbmd0aDtcblx0bGV0IGtleTtcblx0bGV0IGtleVNldDtcblxuXHRpZiAodDEgPT09IHQyICYmIHQxID09PSAnb2JqZWN0Jykge1xuXHRcdGlmIChpc0FycmF5KG8xKSkge1xuXHRcdFx0aWYgKCFpc0FycmF5KG8yKSlcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0XHRsZW5ndGggPSBvMS5sZW5ndGg7XG5cblx0XHRcdGlmIChvMS5sZW5ndGggPT09IG8yLmxlbmd0aCkge1xuXHRcdFx0XHRmb3IgKGtleSA9IDA7IGtleSA8IGxlbmd0aDsga2V5KyspIHtcblx0XHRcdFx0XHRpZiAoIWVxdWFscyhvMVtrZXldLCBvMltrZXldKSlcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoaXNEYXRlKG8xKSkge1xuXHRcdFx0aWYgKCFpc0RhdGUobzIpKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRcdHJldHVybiBzaW1wbGVDb21wYXJlKG8xLmdldFRpbWUoKSwgbzIuZ2V0VGltZSgpKTtcblx0XHR9IGVsc2UgaWYgKGlzUmVnRXhwKG8xKSkge1xuXHRcdFx0aWYgKCFpc1JlZ0V4cChvMikpXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdFx0cmV0dXJuIG8xLnRvU3RyaW5nKCkgPT09IG8yLnRvU3RyaW5nKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChpc1dpbmRvdyhvMSkgfHwgaXNXaW5kb3cobzIpIHx8IGlzQXJyYXkobzIpIHx8IGlzRGF0ZShvMikgfHwgaXNSZWdFeHAobzIpKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRcdGtleVNldCA9IGNyZWF0ZU1hcCgpO1xuXHRcdFx0Zm9yIChrZXkgaW4gbzEpIHtcblx0XHRcdFx0aWYgKGlzRnVuY3Rpb24obzFba2V5XSkpXG5cdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0aWYgKCFlcXVhbHMobzFba2V5XSwgbzJba2V5XSkpXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0XHRcdGtleVNldFtrZXldID0gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yIChrZXkgaW4gbzIpIHtcblx0XHRcdFx0aWYgKCEoa2V5IGluIGtleVNldCkgJiYgaXNEZWZpbmVkKG8yW2tleV0pICYmICFpc0Z1bmN0aW9uKG8yW2tleV0pKVxuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVNYXAgKCkge1xuXHRyZXR1cm4gT2JqZWN0LmNyZWF0ZShudWxsKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuZnVuY3Rpb24gc2ltcGxlQ29tcGFyZSAoYSwgYikge1xuXHRyZXR1cm4gYSA9PT0gYiB8fCAoYSAhPT0gYSAmJiBiICE9PSBiKTtcbn1cblxuZnVuY3Rpb24gaXNWYWxpZE9iamVjdE1heERlcHRoIChtYXhEZXB0aCkge1xuXHRyZXR1cm4gaXNOdW1iZXIobWF4RGVwdGgpICYmIG1heERlcHRoID4gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHkgKHNvdXJjZSwgZGVzdGluYXRpb24/LCBtYXhEZXB0aD8pIHtcblx0Y29uc3Qgc3RhY2tTb3VyY2UgPSBbXTtcblx0Y29uc3Qgc3RhY2tEZXN0ID0gW107XG5cblx0bWF4RGVwdGggPSBpc1ZhbGlkT2JqZWN0TWF4RGVwdGgobWF4RGVwdGgpID8gbWF4RGVwdGggOiBOYU47XG5cblx0aWYgKGRlc3RpbmF0aW9uKSB7XG5cdFx0aWYgKHNvdXJjZSA9PT0gZGVzdGluYXRpb24pIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBjb3B5ISBTb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSBpZGVudGljYWwuJyk7XG5cdFx0fVxuXG5cdFx0Ly8gRW1wdHkgdGhlIGRlc3RpbmF0aW9uIG9iamVjdFxuXHRcdGlmIChpc0FycmF5KGRlc3RpbmF0aW9uKSkge1xuXHRcdFx0ZGVzdGluYXRpb24ubGVuZ3RoID0gMDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gZGVzdGluYXRpb24pXG5cdFx0XHRcdGRlbGV0ZSBkZXN0aW5hdGlvbltrZXldO1xuXHRcdH1cblxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRzdGFja1NvdXJjZS5wdXNoKHNvdXJjZSk7XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdHN0YWNrRGVzdC5wdXNoKGRlc3RpbmF0aW9uKTtcblxuXHRcdHJldHVybiBjb3B5UmVjdXJzZShzb3VyY2UsIGRlc3RpbmF0aW9uLCBtYXhEZXB0aCk7XG5cdH1cblxuXHRyZXR1cm4gY29weUVsZW1lbnQoc291cmNlLCBtYXhEZXB0aCk7XG5cblx0ZnVuY3Rpb24gY29weVJlY3Vyc2UgKF9zb3VyY2UsIF9kZXN0aW5hdGlvbiwgX21heERlcHRoKSB7XG5cdFx0X21heERlcHRoLS07XG5cblx0XHRpZiAoX21heERlcHRoIDwgMClcblx0XHRcdHJldHVybiAnLi4uJztcblxuXHRcdGlmIChpc0FycmF5KF9zb3VyY2UpKSB7XG5cdFx0XHRmb3IgKGxldCBpID0gMCwgaWkgPSBfc291cmNlLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcblx0XHRcdFx0X2Rlc3RpbmF0aW9uLnB1c2goY29weUVsZW1lbnQoX3NvdXJjZVtpXSwgX21heERlcHRoKSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChpc0JsYW5rT2JqZWN0KF9zb3VyY2UpKSB7XG5cdFx0XHQvLyBjcmVhdGVNYXAoKSBmYXN0IHBhdGggLS0tIFNhZmUgdG8gYXZvaWQgaGFzT3duUHJvcGVydHkgY2hlY2sgYmVjYXVzZSBwcm90b3R5cGUgY2hhaW4gaXMgZW1wdHlcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIF9zb3VyY2UpIHtcblx0XHRcdFx0X2Rlc3RpbmF0aW9uW2tleV0gPSBjb3B5RWxlbWVudChfc291cmNlW2tleV0sIF9tYXhEZXB0aCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChfc291cmNlICYmIHR5cGVvZiBfc291cmNlLmhhc093blByb3BlcnR5ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHQvLyBTbG93IHBhdGgsIHdoaWNoIG11c3QgcmVseSBvbiBoYXNPd25Qcm9wZXJ0eVxuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gX3NvdXJjZSkge1xuXHRcdFx0XHRpZiAoX3NvdXJjZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRcdFx0X2Rlc3RpbmF0aW9uW2tleV0gPSBjb3B5RWxlbWVudChfc291cmNlW2tleV0sIF9tYXhEZXB0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gU2xvd2VzdCBwYXRoIC0tLSBoYXNPd25Qcm9wZXJ0eSBjYW4ndCBiZSBjYWxsZWQgYXMgYSBtZXRob2Rcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIF9zb3VyY2UpIHtcblx0XHRcdFx0aWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfc291cmNlLCBrZXkpKSB7XG5cdFx0XHRcdFx0X2Rlc3RpbmF0aW9uW2tleV0gPSBjb3B5RWxlbWVudChfc291cmNlW2tleV0sIF9tYXhEZXB0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gX2Rlc3RpbmF0aW9uO1xuXHR9XG5cblx0ZnVuY3Rpb24gY29weUVsZW1lbnQgKF9zb3VyY2UsIF9tYXhEZXB0aCA9IDUpIHtcblx0XHQvLyBTaW1wbGUgdmFsdWVzXG5cdFx0aWYgKCFpc09iamVjdChfc291cmNlKSlcblx0XHRcdHJldHVybiBfc291cmNlO1xuXG5cdFx0Ly8gQWxyZWFkeSBjb3BpZWQgdmFsdWVzXG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdGNvbnN0IGluZGV4ID0gc3RhY2tTb3VyY2UuaW5kZXhPZihfc291cmNlKTtcblxuXHRcdGlmIChpbmRleCAhPT0gLTEpXG5cdFx0XHRyZXR1cm4gc3RhY2tEZXN0W2luZGV4XTtcblxuXHRcdGlmIChpc1dpbmRvdyhfc291cmNlKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IGNvcHkhIE1ha2luZyBjb3BpZXMgb2YgV2luZG93IGluc3RhbmNlcyBpcyBub3Qgc3VwcG9ydGVkLicpO1xuXHRcdH1cblxuXHRcdGxldCBuZWVkc1JlY3Vyc2UgPSBmYWxzZTtcblx0XHRsZXQgX2Rlc3RpbmF0aW9uID0gY29weVR5cGUoX3NvdXJjZSk7XG5cblx0XHRpZiAoX2Rlc3RpbmF0aW9uID09PSB1bmRlZmluZWQpIHtcblx0XHRcdF9kZXN0aW5hdGlvbiA9IGlzQXJyYXkoX3NvdXJjZSkgPyBbXSA6IE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKF9zb3VyY2UpKTtcblx0XHRcdG5lZWRzUmVjdXJzZSA9IHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdHN0YWNrU291cmNlLnB1c2goX3NvdXJjZSk7XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdHN0YWNrRGVzdC5wdXNoKF9kZXN0aW5hdGlvbik7XG5cblx0XHRyZXR1cm4gbmVlZHNSZWN1cnNlXG5cdFx0XHQ/IGNvcHlSZWN1cnNlKF9zb3VyY2UsIF9kZXN0aW5hdGlvbiwgX21heERlcHRoKVxuXHRcdFx0OiBfZGVzdGluYXRpb247XG5cdH1cblxuXHRmdW5jdGlvbiBjb3B5VHlwZSAoX3NvdXJjZSkge1xuXHRcdHN3aXRjaCAodG9TdHJpbmcuY2FsbChfc291cmNlKSkge1xuXHRcdFx0Y2FzZSAnW29iamVjdCBJbnQ4QXJyYXldJzpcblx0XHRcdGNhc2UgJ1tvYmplY3QgSW50MTZBcnJheV0nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBJbnQzMkFycmF5XSc6XG5cdFx0XHRjYXNlICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBGbG9hdDY0QXJyYXldJzpcblx0XHRcdGNhc2UgJ1tvYmplY3QgVWludDhBcnJheV0nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBVaW50MTZBcnJheV0nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBVaW50MzJBcnJheV0nOlxuXHRcdFx0XHRyZXR1cm4gbmV3IF9zb3VyY2UuY29uc3RydWN0b3IoY29weUVsZW1lbnQoX3NvdXJjZS5idWZmZXIpLCBfc291cmNlLmJ5dGVPZmZzZXQsIF9zb3VyY2UubGVuZ3RoKTtcblxuXHRcdFx0Y2FzZSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nOlxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRTEwXG5cdFx0XHRcdGlmICghX3NvdXJjZS5zbGljZSkge1xuXHRcdFx0XHRcdC8vIElmIHdlJ3JlIGluIHRoaXMgY2FzZSB3ZSBrbm93IHRoZSBlbnZpcm9ubWVudCBzdXBwb3J0cyBBcnJheUJ1ZmZlclxuXHRcdFx0XHRcdC8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG5cdFx0XHRcdFx0Y29uc3QgY29waWVkID0gbmV3IEFycmF5QnVmZmVyKF9zb3VyY2UuYnl0ZUxlbmd0aCk7XG5cdFx0XHRcdFx0bmV3IFVpbnQ4QXJyYXkoY29waWVkKS5zZXQobmV3IFVpbnQ4QXJyYXkoX3NvdXJjZSkpO1xuXHRcdFx0XHRcdC8qIGVzbGludC1lbmFibGUgKi9cblx0XHRcdFx0XHRyZXR1cm4gY29waWVkO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBfc291cmNlLnNsaWNlKDApO1xuXG5cdFx0XHRjYXNlICdbb2JqZWN0IEJvb2xlYW5dJzpcblx0XHRcdGNhc2UgJ1tvYmplY3QgTnVtYmVyXSc6XG5cdFx0XHRjYXNlICdbb2JqZWN0IFN0cmluZ10nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBEYXRlXSc6XG5cdFx0XHRcdHJldHVybiBuZXcgX3NvdXJjZS5jb25zdHJ1Y3Rvcihfc291cmNlLnZhbHVlT2YoKSk7XG5cblx0XHRcdGNhc2UgJ1tvYmplY3QgUmVnRXhwXSc6XG5cdFx0XHRcdGNvbnN0IHJlID0gbmV3IFJlZ0V4cChfc291cmNlLl9zb3VyY2UsIF9zb3VyY2UudG9TdHJpbmcoKS5tYXRjaCgvW14vXSokLylbMF0pO1xuXG5cdFx0XHRcdHJlLmxhc3RJbmRleCA9IF9zb3VyY2UubGFzdEluZGV4O1xuXG5cdFx0XHRcdHJldHVybiByZTtcblxuXHRcdFx0Y2FzZSAnW29iamVjdCBCbG9iXSc6XG5cdFx0XHRcdHJldHVybiBuZXcgX3NvdXJjZS5jb25zdHJ1Y3RvcihbX3NvdXJjZV0sIHt0eXBlOiBfc291cmNlLnR5cGV9KTtcblx0XHR9XG5cblx0XHRpZiAoaXNGdW5jdGlvbihfc291cmNlLmNsb25lTm9kZSkpIHtcblx0XHRcdHJldHVybiBfc291cmNlLmNsb25lTm9kZSh0cnVlKTtcblx0XHR9XG5cdH1cbn1cbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG5pbXBvcnQgeyBDb2x1bW5JbmZvIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBGaWVsZE1hcCB9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgY29weSwgZXF1YWxzIH0gZnJvbSAnLi9VdGlsJztcblxuZXhwb3J0IGNsYXNzIEFwaUZvcm1hdHRlciB7XG5cdE1PTUVOVF9JTlZBTElEID0gJ0ludmFsaWQgZGF0ZSc7XG5cdFNFUlZFUl9EQVRFVElNRV9GT1JNQVQgPSAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzWic7XG5cdFNFUlZFUl9USU1FX0ZPUk1BVCA9ICdISDptbTpzcyc7XG5cdFNFUlZFUl9EQVRFX0ZPUk1BVCA9ICdZWVlZLU1NLUREJztcblxuXHRjb25zdHJ1Y3RvciAoKSB7XG5cblx0fVxuXG5cdGZvcm1hdFJlc3BvbnNlIChmaWVsZHM6IEZpZWxkTWFwLCBjb2x1bW5zOiBDb2x1bW5JbmZvW10pOiBGaWVsZE1hcCB7XG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucylcblx0XHRcdGZpZWxkc1tjb2x1bW4ucGF0aF0gPSB0aGlzLmZvcm1hdFJlc3BvbnNlVmFsdWUoY29sdW1uLmFwaUNvbHVtbi50eXBlLCBmaWVsZHNbY29sdW1uLnBhdGhdKTtcblxuXHRcdHJldHVybiBmaWVsZHM7XG5cdH1cblxuXHRleHBhbmRSZXNwb25zZSAoY3VycmVudDogRmllbGRNYXAsIGV4cGFuZGVkOiBGaWVsZE1hcCwgY29sdW1uczogQ29sdW1uSW5mb1tdKTogRmllbGRNYXAge1xuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpXG5cdFx0XHRjdXJyZW50W2NvbHVtbi5wYXRoXSA9IHRoaXMuZm9ybWF0UmVzcG9uc2VWYWx1ZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUsIGV4cGFuZGVkW2NvbHVtbi5wYXRoXSk7XG5cblx0XHRyZXR1cm4gY3VycmVudDtcblx0fVxuXG5cdGZvcm1hdFJlcXVlc3QgKGluaXRpYWw6IEZpZWxkTWFwLCBtb2RpZmllZDogRmllbGRNYXAsIGNvbHVtbnM6IENvbHVtbkluZm9bXSk6IEZpZWxkTWFwIHtcblx0XHRjb25zdCByZXN1bHQ6IHtbY29sdW1uSWQ6IHN0cmluZ106IGFueX0gPSB7fTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uLmlkO1xuXHRcdFx0Y29uc3QgYXBpQ29sdW1uID0gY29sdW1uLmFwaUNvbHVtbjtcblx0XHRcdGNvbnN0IGNvbHVtblR5cGUgPSBhcGlDb2x1bW4udHlwZTtcblxuXHRcdFx0aWYgKGFwaUNvbHVtbi5yZWFkT25seSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGlmICghdGhpcy5jb21wYXJlRmllbGRzKGNvbHVtblR5cGUsIGluaXRpYWxbY29sdW1uSWRdLCBtb2RpZmllZFtjb2x1bW5JZF0pKVxuXHRcdFx0XHRyZXN1bHRbY29sdW1uSWRdID0gdGhpcy5mb3JtYXRSZXF1ZXN0VmFsdWUoY29sdW1uVHlwZSwgbW9kaWZpZWRbY29sdW1uSWRdKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Zm9ybWF0UmVxdWVzdExvY2FsIChmaWVsZHM6IEZpZWxkTWFwLCBjb2x1bW5zOiBDb2x1bW5JbmZvW10pOiBGaWVsZE1hcCB7XG5cdFx0Y29uc3QgcmVzdWx0OiB7W2NvbHVtbklkOiBzdHJpbmddOiBhbnl9ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcblx0XHRcdGNvbnN0IGFwaUNvbHVtbiA9IGNvbHVtbi5hcGlDb2x1bW47XG5cblx0XHRcdGlmIChhcGlDb2x1bW4ucmVhZE9ubHkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRyZXN1bHRbY29sdW1uSWRdID0gdGhpcy5mb3JtYXRSZXF1ZXN0VmFsdWUoYXBpQ29sdW1uLnR5cGUsIGZpZWxkc1tjb2x1bW5JZF0pO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRoYXNDaGFuZ2VzIChpbml0aWFsOiBGaWVsZE1hcCwgbW9kaWZpZWQ6IEZpZWxkTWFwLCBjb2x1bW5zOiBDb2x1bW5JbmZvW10pOiBib29sZWFuIHtcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcblx0XHRcdGNvbnN0IGFwaUNvbHVtbiA9IGNvbHVtbi5hcGlDb2x1bW47XG5cblx0XHRcdGlmIChhcGlDb2x1bW4ucmVhZE9ubHkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAoIXRoaXMuY29tcGFyZUZpZWxkcyhhcGlDb2x1bW4udHlwZSwgaW5pdGlhbFtjb2x1bW5JZF0sIG1vZGlmaWVkW2NvbHVtbklkXSkpXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGdldENoYW5nZXMgKGluaXRpYWw6IEZpZWxkTWFwLCBtb2RpZmllZDogRmllbGRNYXAsIGNvbHVtbnM6IENvbHVtbkluZm9bXSk6IEZpZWxkTWFwIHtcblx0XHRjb25zdCByZXN1bHQ6IG9iamVjdFtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcblx0XHRcdGNvbnN0IGFwaUNvbHVtbiA9IGNvbHVtbi5hcGlDb2x1bW47XG5cblx0XHRcdGlmIChhcGlDb2x1bW4ucmVhZE9ubHkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAoIXRoaXMuY29tcGFyZUZpZWxkcyhhcGlDb2x1bW4udHlwZSwgaW5pdGlhbFtjb2x1bW5JZF0sIG1vZGlmaWVkW2NvbHVtbklkXSkpIHtcblx0XHRcdFx0cmVzdWx0LnB1c2goXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0b2xkVmFsdWU6IGluaXRpYWxbY29sdW1uSWRdLFxuXHRcdFx0XHRcdFx0bmV3VmFsdWU6IG1vZGlmaWVkW2NvbHVtbklkXSxcblx0XHRcdFx0XHRcdGNvbHVtbjogY29sdW1uLmFwaUNvbHVtblxuXHRcdFx0XHRcdH1cblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Y29weUZpZWxkcyAoc291cmNlOiBGaWVsZE1hcCwgZGVzdGluYXRpb246IEZpZWxkTWFwLCBjb2x1bW5zOiBDb2x1bW5JbmZvW10pOiBGaWVsZE1hcCB7XG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0Y29uc3QgY29sdW1uUGF0aCA9IGNvbHVtbi5wYXRoO1xuXG5cdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5QYXRoXSA9IHRoaXMuY2xvbmUoY29sdW1uLmFwaUNvbHVtbi50eXBlLCBzb3VyY2VbY29sdW1uUGF0aF0pO1xuXHRcdH1cblxuXHRcdHJldHVybiBkZXN0aW5hdGlvbjtcblx0fVxuXG5cdHNoYWxsb3dDb3B5RmllbGRzIChcblx0XHRzaGFsbG93U291cmNlOiBGaWVsZE1hcCxcblx0XHRkZWVwU291cmNlOiBGaWVsZE1hcCxcblx0XHRkZXN0aW5hdGlvbjogRmllbGRNYXAsXG5cdFx0Y29sdW1uczogQ29sdW1uSW5mb1tdXG5cdCk6IEZpZWxkTWFwIHtcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5QYXRoID0gY29sdW1uLnBhdGg7XG5cblx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtblBhdGhdID0gc2hhbGxvd1NvdXJjZVtjb2x1bW5QYXRoXSAhPT0gdW5kZWZpbmVkID9cblx0XHRcdFx0c2hhbGxvd1NvdXJjZVtjb2x1bW5QYXRoXSA6XG5cdFx0XHRcdHRoaXMuY2xvbmUoY29sdW1uLmFwaUNvbHVtbi50eXBlLCBkZWVwU291cmNlW2NvbHVtblBhdGhdKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGVzdGluYXRpb247XG5cdH1cblxuXHRzZXREZWZhdWx0VmFsdWVzIChkZXN0aW5hdGlvbjogRmllbGRNYXAsIGNvbHVtbnM6IENvbHVtbkluZm9bXSk6IEZpZWxkTWFwIHtcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKVxuXHRcdFx0ZGVzdGluYXRpb25bY29sdW1uLmlkXSA9IHRoaXMuZ2V0RGVmYXVsdFZhbHVlKGNvbHVtbi5hcGlDb2x1bW4udHlwZSk7XG5cblx0XHRyZXR1cm4gZGVzdGluYXRpb247XG5cdH1cblxuXHRjb21wYXJlRmllbGRzIChjb2x1bW5UeXBlOiBzdHJpbmcsIGZpcnN0PzogYW55LCBzZWNvbmQ/OiBhbnkpOiBib29sZWFuIHtcblx0XHRpZiAoZmlyc3QgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBzZWNvbmQgPT09IHVuZGVmaW5lZDtcblxuXHRcdGlmIChzZWNvbmQgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHN3aXRjaCAoY29sdW1uVHlwZSkge1xuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRjYXNlICd0aW1lJzpcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29tcGFyZU1vbWVudE9iamVjdHMoZmlyc3QsIHNlY29uZCk7XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbXBhcmVEdXJhdGlvbnMoZmlyc3QsIHNlY29uZCk7XG5cdFx0XHRjYXNlICdpZCc6IC8vIGlkIHR5cGVzXG5cdFx0XHRjYXNlICdpdGVtJzpcblx0XHRcdGNhc2UgJ2xpbmsnOlxuXHRcdFx0Y2FzZSAnY2hpbGQnOlxuXHRcdFx0Y2FzZSAnc2libGluZyc6XG5cdFx0XHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXG5cdFx0XHRcdHJldHVybiBmaXJzdCA9PSBzZWNvbmQ7IC8vIHVzZSBub24tc3RyaWN0IGNvbXBhcmlzb25cblx0XHRcdGNhc2UgJ2N1cnJlbnQnOlxuXHRcdFx0Y2FzZSAnZGltZW5zaW9uJzpcblx0XHRcdGNhc2UgJ2Rpc3RhbmNlJzpcblx0XHRcdGNhc2UgJ2RvdWJsZSc6IC8vIGZsb2F0aW5nIHBvaW50IHR5cGVzXG5cdFx0XHRjYXNlICdmaWxlc2l6ZSc6XG5cdFx0XHRjYXNlICdudW1iZXInOlxuXHRcdFx0Y2FzZSAncG93ZXInOlxuXHRcdFx0Y2FzZSAncXVhbnRpdHknOlxuXHRcdFx0Y2FzZSAndm9sdW1lJzpcblx0XHRcdGNhc2UgJ3dlaWdodCc6XG5cdFx0XHRjYXNlICdjb29yZGluYXRlJzpcblx0XHRcdGNhc2UgJ3ByaWNlJzpcblx0XHRcdGNhc2UgJ3BlcmNlbnRhZ2UnOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb21wYXJlRmxvYXRzKGZpcnN0LCBzZWNvbmQpO1xuXHRcdFx0Y2FzZSAnaW50JzogLy8gaW50ZWdlciB0eXBlc1xuXHRcdFx0Y2FzZSAnYm9vbCc6IC8vIGJvb2xlYW4gdHlwZXNcblx0XHRcdGNhc2UgJ2VudW0nOlxuXHRcdFx0Y2FzZSAnZW1haWwnOiAvLyBzdHJpbmcgdHlwZXNcblx0XHRcdGNhc2UgJ3Bob25lJzpcblx0XHRcdGNhc2UgJ3VybCc6XG5cdFx0XHRjYXNlICd0ZXh0Jzpcblx0XHRcdGNhc2UgJ2xvbmd0ZXh0Jzpcblx0XHRcdGNhc2UgJ2NvbG9yJzpcblx0XHRcdGNhc2UgJ29yZGVyJzpcblx0XHRcdFx0cmV0dXJuIGZpcnN0ID09PSBzZWNvbmQ7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZXF1YWxzKGZpcnN0LCBzZWNvbmQpO1xuXHRcdH1cblx0fVxuXG5cdGNvbXBhcmVGbG9hdHMgKGE6IG51bWJlciwgYjogbnVtYmVyKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgYWJzQSA9IE1hdGguYWJzKGEpO1xuXHRcdGNvbnN0IGFic0IgPSBNYXRoLmFicyhiKTtcblx0XHRjb25zdCBkaWZmID0gTWF0aC5hYnMoYSAtIGIpO1xuXG5cdFx0Y29uc3QgRVBTSUxPTiA9IDEuMTllLTA3O1xuXG5cdFx0Ly8gc2hvcnRjdXQsIGhhbmRsZXMgaW5maW5pdGllc1xuXHRcdGlmIChhID09PSBiKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2UgaWYgKGEgPT09IDAgfHwgYiA9PT0gMCB8fCBkaWZmIDwgTnVtYmVyLk1JTl9WQUxVRSkge1xuXHRcdFx0Ly8gYSBvciBiIGlzIHplcm8gb3IgYm90aCBhcmUgZXh0cmVtZWx5IGNsb3NlIHRvIGl0XG5cdFx0XHQvLyByZWxhdGl2ZSBlcnJvciBpcyBsZXNzIG1lYW5pbmdmdWwgaGVyZVxuXHRcdFx0cmV0dXJuIGRpZmYgPCAoRVBTSUxPTiAqIE51bWJlci5NSU5fVkFMVUUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyB1c2UgcmVsYXRpdmUgZXJyb3Jcblx0XHRcdHJldHVybiBkaWZmIC8gTWF0aC5taW4oKGFic0EgKyBhYnNCKSwgTnVtYmVyLk1BWF9WQUxVRSkgPCBFUFNJTE9OO1xuXHRcdH1cblx0fVxuXG5cdGNvbXBhcmVNb21lbnRPYmplY3RzIChmaXJzdDogbW9tZW50Lk1vbWVudCwgc2Vjb25kOiBtb21lbnQuTW9tZW50KTogYm9vbGVhbiB7XG5cdFx0aWYgKCFmaXJzdC5pc1ZhbGlkKCkpXG5cdFx0XHRyZXR1cm4gIXNlY29uZC5pc1ZhbGlkKCk7XG5cblx0XHRpZiAoIXNlY29uZC5pc1ZhbGlkKCkpXG5cdFx0XHRyZXR1cm4gZmFsc2U7IC8vIGZpcnN0IElTIHZhbGlkXG5cblx0XHRyZXR1cm4gZmlyc3QuaXNTYW1lKHNlY29uZCk7XG5cdH1cblxuXHRjb21wYXJlRHVyYXRpb25zIChmaXJzdDogbW9tZW50LkR1cmF0aW9uLCBzZWNvbmQ6IG1vbWVudC5EdXJhdGlvbik6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBmaXJzdC5hc01pbGxpc2Vjb25kcygpID09PSBzZWNvbmQuYXNNaWxsaXNlY29uZHMoKTtcblx0fVxuXG5cdGZvcm1hdFJlc3BvbnNlVmFsdWUgKGNvbHVtblR5cGU6IHN0cmluZywgdmFsdWU6IGFueSkge1xuXHRcdHN3aXRjaCAoY29sdW1uVHlwZSkge1xuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlc3BvbnNlRGF0ZSh2YWx1ZSk7XG5cdFx0XHRjYXNlICdjb2xvcic6XG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlc3BvbnNlQ29sb3IodmFsdWUpO1xuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXNwb25zZUR1cmF0aW9uKHZhbHVlKTtcblx0XHRcdGNhc2UgJ2pzb24nOlxuXHRcdFx0XHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZSAhPT0gJycgPyBKU09OLnBhcnNlKHZhbHVlKSA6IHZhbHVlO1xuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcblx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSAwID8gbnVsbCA6IHZhbHVlO1xuXHRcdFx0Y2FzZSAnZmlsZXNpemUnOlxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgLyAxMDAwMDAwO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblx0fVxuXG5cdGZvcm1hdFJlcXVlc3RWYWx1ZSAoY29sdW1uVHlwZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG5cdFx0c3dpdGNoIChjb2x1bW5UeXBlKSB7XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlcXVlc3REYXRlVGltZSh2YWx1ZSk7XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVxdWVzdERhdGUodmFsdWUpO1xuXHRcdFx0Y2FzZSAnY29sb3InOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXF1ZXN0Q29sb3IodmFsdWUpO1xuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXF1ZXN0RHVyYXRpb24odmFsdWUpO1xuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcblx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSAwID8gbnVsbCA6IHZhbHVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblx0fVxuXG5cdGZvcm1hdFJlc3BvbnNlRGF0ZSAodmFsdWU6IG51bGwgfCBhbnkpOiBtb21lbnQuTW9tZW50IHtcblx0XHRyZXR1cm4gdmFsdWUgPT09IG51bGwgPyBtb21lbnQuaW52YWxpZCgpIDogbW9tZW50KHZhbHVlKTtcblx0fVxuXG5cdGZvcm1hdFJlc3BvbnNlRHVyYXRpb24gKHZhbHVlOiBudWxsIHwgbnVtYmVyKTogbW9tZW50LkR1cmF0aW9uIHtcblx0XHRyZXR1cm4gbW9tZW50LmR1cmF0aW9uKHZhbHVlID09PSBudWxsID8gMCA6IHZhbHVlLCAnc2Vjb25kcycpO1xuXHR9XG5cblx0Zm9ybWF0UmVzcG9uc2VDb2xvciAodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHZhbHVlLmNoYXJBdCgwKSA9PT0gJyMnID8gdmFsdWUgOiAnIycgKyB2YWx1ZTtcblx0fVxuXG5cdGZvcm1hdFJlcXVlc3REYXRlVGltZSAodmFsdWU6IG1vbWVudC5Nb21lbnQpOiBzdHJpbmcgfCBudWxsIHtcblx0XHRyZXR1cm4gdmFsdWUuaXNWYWxpZCgpID8gdmFsdWUuZm9ybWF0KHRoaXMuU0VSVkVSX0RBVEVUSU1FX0ZPUk1BVCkgOiBudWxsO1xuXHR9XG5cblx0Zm9ybWF0UmVxdWVzdERhdGUgKHZhbHVlOiBtb21lbnQuTW9tZW50KTogc3RyaW5nIHwgbnVsbCB7XG5cdFx0cmV0dXJuIHZhbHVlLmlzVmFsaWQoKSA/IHZhbHVlLmZvcm1hdCh0aGlzLlNFUlZFUl9EQVRFX0ZPUk1BVCkgOiBudWxsO1xuXHR9XG5cblx0Zm9ybWF0UmVxdWVzdER1cmF0aW9uICh2YWx1ZTogbW9tZW50LkR1cmF0aW9uKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdmFsdWUuYXNTZWNvbmRzKCk7XG5cdH1cblxuXHRmb3JtYXRSZXF1ZXN0Q29sb3IgKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdHJldHVybiB2YWx1ZS5jaGFyQXQoMCkgPT09ICcjJyA/IHZhbHVlLnN1YnN0cmluZygxKSA6IHZhbHVlO1xuXHR9XG5cblx0Z2V0RGVmYXVsdFZhbHVlIChjb2x1bW5UeXBlOiBzdHJpbmcpOiBhbnkge1xuXHRcdHN3aXRjaCAoY29sdW1uVHlwZSkge1xuXHRcdFx0Y2FzZSAnaW50Jzpcblx0XHRcdGNhc2UgJ2RvdWJsZSc6XG5cdFx0XHRjYXNlICdwZXJjZW50YWdlJzpcblx0XHRcdGNhc2UgJ3ByaWNlJzpcblx0XHRcdGNhc2UgJ29yZGVyJzpcblx0XHRcdFx0cmV0dXJuIDA7XG5cdFx0XHRjYXNlICdpdGVtJzpcblx0XHRcdGNhc2UgJ2xpbmsnOlxuXHRcdFx0Y2FzZSAnY2hpbGQnOlxuXHRcdFx0Y2FzZSAnc2libGluZyc6XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0Y2FzZSAnYm9vbCc6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdGNhc2UgJ2VudW0nOlxuXHRcdFx0XHRyZXR1cm4gJzAnO1xuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRjYXNlICd0aW1lJzpcblx0XHRcdFx0cmV0dXJuIG1vbWVudC5pbnZhbGlkKCk7XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRcdHJldHVybiBtb21lbnQuZHVyYXRpb24oKTtcblx0XHRcdGNhc2UgJ3RleHQnOlxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxuXHRcdFx0XHRyZXR1cm4gJyc7XG5cdFx0XHRjYXNlICdjb2xvcic6XG5cdFx0XHRcdHJldHVybiAnIzAwMDAwMCc7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gJyc7XG5cdFx0XHQvLyBcdFx0XHRcdFx0ZW1haWxcblx0XHRcdC8vIFx0XHRcdFx0XHR1cmxcblx0XHRcdC8vIFx0XHRcdFx0XHRodG1sXG5cdFx0XHQvLyBcdFx0XHRcdFx0anNvblxuXHRcdFx0Ly8gXHRcdFx0XHRcdGRhdGFcblx0XHR9XG5cdH1cblxuXHRpc0RlZmF1bHRWYWx1ZSAoY29sdW1uVHlwZTogc3RyaW5nLCB2YWx1ZTogYW55KTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuY29tcGFyZUZpZWxkcyhjb2x1bW5UeXBlLCB2YWx1ZSwgdGhpcy5nZXREZWZhdWx0VmFsdWUoY29sdW1uVHlwZSkpO1xuXHR9XG5cblx0Y2xvbmUgKGNvbHVtblR5cGU6IHN0cmluZywgdmFsdWU6IGFueSk6IGFueSB7XG5cdFx0c3dpdGNoIChjb2x1bW5UeXBlKSB7XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRcdHJldHVybiB0aGlzLmNsb25lRHVyYXRpb24odmFsdWUpO1xuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRcdHJldHVybiBtb21lbnQodmFsdWUpO1xuXHRcdFx0Y2FzZSAnanNvbic6XG5cdFx0XHRcdHJldHVybiBjb3B5KHZhbHVlKTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cdH1cblxuXHRnZXRDbG9uZUZ1bmN0aW9uIChjb2x1bW5UeXBlOiBzdHJpbmcpIHtcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuY2xvbmVEdXJhdGlvbjtcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jbG9uZURhdGU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5pZGVudGl0eTtcblx0XHR9XG5cdH1cblxuXHRjbG9uZUR1cmF0aW9uIChkdXJhdGlvbjogbW9tZW50LkR1cmF0aW9uKSB7XG5cdFx0cmV0dXJuIG1vbWVudC5kdXJhdGlvbihkdXJhdGlvbik7XG5cdH1cblxuXHRjbG9uZURhdGUgKGRhdGU6IG1vbWVudC5Nb21lbnQpOiBtb21lbnQuTW9tZW50IHtcblx0XHRyZXR1cm4gZGF0ZS5jbG9uZSgpO1xuXHR9XG5cblx0aWRlbnRpdHkgPFQ+IChpbnB1dDogVCk6IFQge1xuXHRcdHJldHVybiBpbnB1dDtcblx0fVxufVxuIiwiaW1wb3J0IHsgQXBpUmVzcG9uc2VQcm9jZXNzb3IgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHtcblx0QXBpUmVxdWVzdENvbHVtbk1hcCwgQXBpUmVxdWVzdEl0ZW1NYXAsIEFwaVJlcXVlc3RMaW1pdCwgSXRlbUlkLCBJdGVtVHlwZSwgUHJvbWlzZUludGVyZmFjZVxufSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBBcGlSZXF1ZXN0U2VydmljZSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgYXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5OiBBcGlSZXNwb25zZVByb2Nlc3NvckZhY3Rvcnlcblx0KSB7XG5cblx0fVxuXG5cdHRlbXBsYXRlIChpdGVtVHlwZTogSXRlbVR5cGUsIHBhcmFtczogYW55KTogUHJvbWlzZUludGVyZmFjZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UudGVtcGxhdGUoaXRlbVR5cGUsIHBhcmFtcykpO1xuXHR9XG5cblx0Y3JlYXRlIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkLCB2YWx1ZXM6IGFueSwgcGFyZW50VHlwZT86IEl0ZW1UeXBlLCBwYXJlbnRJZD86IEl0ZW1JZCk6IFByb21pc2VJbnRlcmZhY2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLmNyZWF0ZShpdGVtVHlwZSwgaXRlbUlkLCB2YWx1ZXMsIHBhcmVudFR5cGUsIHBhcmVudElkKSk7XG5cdH1cblxuXHRkZWxldGUgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkczogSXRlbUlkW10pOiBQcm9taXNlSW50ZXJmYWNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5kZWxldGUoaXRlbVR5cGUsIGl0ZW1JZHMpKTtcblx0fVxuXG5cdHVwZGF0ZUl0ZW1zIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1zOiBBcGlSZXF1ZXN0SXRlbU1hcCwgY29sdW1uczogYW55KTogUHJvbWlzZUludGVyZmFjZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UudXBkYXRlSXRlbXMoaXRlbVR5cGUsIGl0ZW1zLCBjb2x1bW5zKSk7XG5cdH1cblxuXHRyZXF1ZXN0U2tlbGV0b24gKHBhcmFtczogYW55LCByZXF1ZXN0Q2FuY2VsZXI/OiBQcm9taXNlSW50ZXJmYWNlPGFueT4pOiBQcm9taXNlSW50ZXJmYWNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5yZXF1ZXN0U2tlbGV0b24ocGFyYW1zLCByZXF1ZXN0Q2FuY2VsZXIpKTtcblx0fVxuXG5cdG1vdmVJdGVtcyAocGFyZW50VHlwZTogSXRlbVR5cGUsIHBhcmVudElkOiBJdGVtSWQsIGl0ZW1zOiB7W2l0ZW1UeXBlOiBzdHJpbmddOiBJdGVtSWRbXX0pOiBQcm9taXNlSW50ZXJmYWNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5tb3ZlSXRlbXMocGFyZW50VHlwZSwgcGFyZW50SWQsIGl0ZW1zKSk7XG5cdH1cblxuXHRjb2x1bW5zIChpdGVtVHlwZTogSXRlbVR5cGUsIGNvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5NYXAsIHBhcmFtcz86IGFueSk6IFByb21pc2VJbnRlcmZhY2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLmNvbHVtbnMoaXRlbVR5cGUsIGNvbHVtbnMsIHBhcmFtcykpO1xuXHR9XG5cblx0cXVlcnkgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcXVlcnk6IGFueSwgY29sdW1uczogQXBpUmVxdWVzdENvbHVtbk1hcCwgbGltaXQ/OiBBcGlSZXF1ZXN0TGltaXQpOiBQcm9taXNlSW50ZXJmYWNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5xdWVyeShpdGVtVHlwZSwgcXVlcnksIGNvbHVtbnMsIGxpbWl0KSk7XG5cdH1cblxuXHRwcm9jZXNzUmVzcG9uc2UgKHJlcXVlc3Q6IGFueSk6IFByb21pc2VJbnRlcmZhY2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRyZXR1cm4gcmVxdWVzdC50aGVuKChyZXNwb25zZTogYW55KSA9PiB0aGlzLmFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeS5jb25zdHJ1Y3QocmVzcG9uc2UpKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQXBpRm9ybWF0dGVyIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBGaWVsZE1hcCwgSXRlbUlkLCBJdGVtVHlwZSwgSXRlbVR5cGVNYXAsIFJlc3BvbnNlQ29sdW1uIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQXBpUmVzcG9uc2VQcm9jZXNzb3Ige1xuXHRjb2x1bW5zOiBJdGVtVHlwZU1hcDtcblx0aXRlbXM6IHtcblx0XHRbaXRlbVR5cGU6IHN0cmluZ106IHtcblx0XHRcdFtpdGVtSWQ6IG51bWJlcl06IGFueVxuXHRcdH1cblx0fTtcblx0bGlua3M6IEl0ZW1UeXBlTWFwO1xuXHRjYWNoZWFibGU6IGJvb2xlYW47XG5cdG1hcDogYW55O1xuXG5cdGNvbHVtbkluZGV4TWFwOiBhbnkgPSB7fTtcblx0Y29sdW1uTWFwOiBhbnkgPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHVibGljIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxuXHRcdHB1YmxpYyByZXNwb25zZTogYW55XG5cdCkge1xuXHRcdHRoaXMuY29sdW1ucyA9IHJlc3BvbnNlLmNvbHVtbnM7XG5cdFx0dGhpcy5pdGVtcyA9IHJlc3BvbnNlLml0ZW1zO1xuXHRcdHRoaXMubGlua3MgPSByZXNwb25zZS5saW5rcztcblx0XHR0aGlzLmNhY2hlYWJsZSA9IHJlc3BvbnNlLmNhY2hlYWJsZTtcblx0XHR0aGlzLm1hcCA9IHJlc3BvbnNlLm1hcDtcblxuXHRcdHRoaXMuY3JlYXRlQ29sdW1uTWFwcygpO1xuXHR9XG5cblx0Y3JlYXRlQ29sdW1uTWFwcyAoKSB7XG5cdFx0Zm9yIChjb25zdCBjb2x1bW5UeXBlIGluIHRoaXMuY29sdW1ucykge1xuXHRcdFx0dGhpcy5jb2x1bW5JbmRleE1hcFtjb2x1bW5UeXBlXSA9IHt9O1xuXHRcdFx0dGhpcy5jb2x1bW5NYXBbY29sdW1uVHlwZV0gPSB7fTtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnNbY29sdW1uVHlwZV0ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Y29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zW2NvbHVtblR5cGVdW2ldO1xuXHRcdFx0XHR0aGlzLmNvbHVtbkluZGV4TWFwW2NvbHVtblR5cGVdW2NvbHVtbi5pZF0gPSBpO1xuXHRcdFx0XHR0aGlzLmNvbHVtbk1hcFtjb2x1bW5UeXBlXVtjb2x1bW4uaWRdID0gY29sdW1uO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZldGNoVmFsdWUgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQsIGNvbHVtbklkOiBzdHJpbmcpIHtcblx0XHRpZiAodGhpcy5pdGVtc1tpdGVtVHlwZV1baXRlbUlkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdHJldHVybiB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdLmRhdGFbdGhpcy5jb2x1bW5JbmRleE1hcFtpdGVtVHlwZV1bY29sdW1uSWRdXTtcblx0fVxuXG5cdGZldGNoRGVyaXZlZE9iamVjdCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCwgcm9vdENvbHVtbnM6IFJlc3BvbnNlQ29sdW1uW10pIHtcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIHJvb3RDb2x1bW5zKSB7XG5cdFx0XHR0aGlzLmZldGNoRGVyaXZlZFZhbHVlcyhcblx0XHRcdFx0dGhpcy5mZXRjaFZhbHVlKGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtbi5pZCksXG5cdFx0XHRcdGNvbHVtbixcblx0XHRcdFx0cmVzdWx0XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmZXRjaERlcml2ZWRWYWx1ZXMgKHZhbHVlOiBhbnksIGNvbHVtbjogUmVzcG9uc2VDb2x1bW4sIGRlc3RpbmF0aW9uOiBhbnkpOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IGNoaWxkQ29sdW1uIG9mIGNvbHVtbi5jaGlsZHJlbikge1xuXHRcdFx0bGV0IGNoaWxkVmFsdWU7XG5cblx0XHRcdGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuXHRcdFx0XHRjaGlsZFZhbHVlID0gbnVsbDtcblx0XHRcdFx0ZGVzdGluYXRpb25bY2hpbGRDb2x1bW4ucGF0aF0gPSB0aGlzLmFwaUZvcm1hdHRlci5nZXREZWZhdWx0VmFsdWUoY2hpbGRDb2x1bW4uYXBpQ29sdW1uLnR5cGUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y2hpbGRWYWx1ZSA9IHRoaXMuZmV0Y2hWYWx1ZShjb2x1bW4uaXRlbVR5cGUsIHZhbHVlLCBjaGlsZENvbHVtbi5pZCk7XG5cdFx0XHRcdGRlc3RpbmF0aW9uW2NoaWxkQ29sdW1uLnBhdGhdID0gY2hpbGRWYWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGNoaWxkQ29sdW1uLmlzTGVhZilcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdHRoaXMuZmV0Y2hEZXJpdmVkVmFsdWVzKGNoaWxkVmFsdWUsIGNoaWxkQ29sdW1uLCBkZXN0aW5hdGlvbik7XG5cdFx0fVxuXHR9XG5cblx0ZmV0Y2hPYmplY3QgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBzdHJpbmcgfCBJdGVtSWQsIGluY2x1ZGVMaW5rczogYm9vbGVhbiA9IGZhbHNlKTogYW55IHtcblx0XHRpZiAodGhpcy5pdGVtc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRjb25zdCBpdGVtID0gdGhpcy5pdGVtc1tpdGVtVHlwZV1baXRlbUlkXTtcblxuXHRcdGlmIChpdGVtID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0Y29uc3QgZGF0YSA9IHRoaXMuaXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF0uZGF0YTtcblx0XHRjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRyZXN1bHRbdGhpcy5jb2x1bW5zW2l0ZW1UeXBlXVtpXS5pZF0gPSBkYXRhW2ldO1xuXHRcdH1cblxuXHRcdGlmIChpbmNsdWRlTGlua3MpIHtcblx0XHRcdGNvbnN0IGxpbmtzID0gdGhpcy5pdGVtc1tpdGVtVHlwZV1baXRlbUlkXS5saW5rcztcblx0XHRcdHJlc3VsdC5fX2xpbmtzID0ge307XG5cblx0XHRcdGZvciAoY29uc3QgbGlua1R5cGUgaW4gbGlua3MpXG5cdFx0XHRcdHJlc3VsdC5fX2xpbmtzW2xpbmtUeXBlXSA9XG5cdFx0XHRcdFx0dGhpcy5mZXRjaE9iamVjdEFycmF5KGxpbmtUeXBlLCBpbmNsdWRlTGlua3MsIGxpbmtzW2xpbmtUeXBlXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGZldGNoT2JqZWN0QXJyYXkgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaW5jbHVkZUxpbmtzOiBib29sZWFuLCBpZEFycmF5OiBJdGVtSWRbXSk6IGFueVtdIHtcblx0XHRjb25zdCByZXN1bHQ6IGFueVtdID0gW107XG5cblx0XHRpZiAoaWRBcnJheSA9PT0gbnVsbCkge1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5pdGVtc1tpdGVtVHlwZV0pXG5cdFx0XHRcdHJlc3VsdC5wdXNoKHRoaXMuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgaW5jbHVkZUxpbmtzKSk7XG5cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXG5cdFx0aWYgKGlkQXJyYXkgPT09IHVuZGVmaW5lZClcblx0XHRcdGlkQXJyYXkgPSB0aGlzLmxpbmtzW2l0ZW1UeXBlXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIG9mIGlkQXJyYXkpXG5cdFx0XHRyZXN1bHQucHVzaCh0aGlzLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGluY2x1ZGVMaW5rcykpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGZldGNoT2JqZWN0TWFwIChpdGVtVHlwZTogSXRlbVR5cGUsIGNvbHVtbklkOiBzdHJpbmcsIGluY2x1ZGVMaW5rcz86IGJvb2xlYW4sIHJldHVybktleXM/OiBib29sZWFuKSB7XG5cdFx0Y29uc3QgY29sdW1uSW5kZXggPSB0aGlzLmNvbHVtbkluZGV4TWFwW2l0ZW1UeXBlXVtjb2x1bW5JZF07XG5cdFx0Y29uc3QgcmVzdWx0OiB7W2tleTogc3RyaW5nXTogYW55fSA9IHt9O1xuXHRcdGNvbnN0IGtleXM6IHN0cmluZ1tdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSkge1xuXHRcdFx0Y29uc3Qga2V5ID0gdGhpcy5pdGVtc1tpdGVtVHlwZV1baXRlbUlkXS5kYXRhW2NvbHVtbkluZGV4XTtcblx0XHRcdGtleXMucHVzaChrZXkpO1xuXHRcdFx0cmVzdWx0W2tleV0gPSB0aGlzLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGluY2x1ZGVMaW5rcyk7XG5cdFx0fVxuXG5cdFx0aWYgKHJldHVybktleXMpXG5cdFx0XHRyZXR1cm4ge3Jlc3VsdDogcmVzdWx0LCBrZXlzOiBrZXlzfTtcblx0XHRlbHNlXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0ZmV0Y2hGaWVsZE1hcCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBjb2x1bW5JZDogc3RyaW5nKSB7XG5cdFx0Y29uc3QgaW5kZXggPSB0aGlzLmNvbHVtbkluZGV4TWFwW2l0ZW1UeXBlXVtjb2x1bW5JZF07XG5cdFx0Y29uc3QgcmVzdWx0OiB7W2l0ZW1JZDogbnVtYmVyXTogRmllbGRNYXB9ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGlkIGluIHRoaXMuaXRlbXNbaXRlbVR5cGVdKVxuXHRcdFx0cmVzdWx0W2lkXSA9IHRoaXMuaXRlbXNbaXRlbVR5cGVdW2lkXS5kYXRhW2luZGV4XTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmZXRjaENvbHVtbkFycmF5IChpdGVtVHlwZTogSXRlbVR5cGUpOiBSZXNwb25zZUNvbHVtbltdIHtcblx0XHRjb25zdCByZXN1bHQ6IFJlc3BvbnNlQ29sdW1uW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgYXBpQ29sdW1uIG9mIHRoaXMuY29sdW1uc1tpdGVtVHlwZV0pXG5cdFx0XHRyZXN1bHQucHVzaChhcGlDb2x1bW4pO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGZldGNoQ29sdW1uT2JqZWN0IChpdGVtVHlwZTogSXRlbVR5cGUpOiBSZXNwb25zZUNvbHVtbiB7XG5cdFx0cmV0dXJuIHRoaXMuY29sdW1uTWFwW2l0ZW1UeXBlXTtcblx0fVxuXG5cdGZldGNoQ29sdW1uc09iamVjdCAoKToge1tpdGVtVHlwZTogc3RyaW5nXTogUmVzcG9uc2VDb2x1bW59IHtcblx0XHRyZXR1cm4gdGhpcy5jb2x1bW5NYXA7XG5cdH1cblxuXHRjcmVhdGVSZXNvdXJjZSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpZDogSXRlbUlkKToge29iamVjdDogRmllbGRNYXAsIGxpbmtzOiBhbnl9IHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0b2JqZWN0OiB0aGlzLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpZCksXG5cdFx0XHRsaW5rczogdGhpcy5pdGVtc1tpdGVtVHlwZV1baWRdLmxpbmtzXG5cdFx0fTtcblx0fVxuXG5cdGhhc0l0ZW1zIChpdGVtVHlwZTogSXRlbVR5cGUpOiBib29sZWFuIHtcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5pdGVtc1tpdGVtVHlwZV0pXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGdldElkQXJyYXkgKGl0ZW1UeXBlOiBJdGVtVHlwZSk6IEl0ZW1JZFtdIHtcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1JZFtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSkge1xuXHRcdFx0cmVzdWx0LnB1c2gocGFyc2VJbnQoaXRlbUlkLCAxMCkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cbn1cbiIsImV4cG9ydCBlbnVtIEVOVFJZX1NUQVRVUyB7XG5cdENBQ0hFRCA9ICdjYWNoZWQnLFxuXHRMT0NBTCA9ICdsb2NhbCcsXG5cdFBST01JU0VEID0gJ3Byb21pc2VkJyxcblx0RVhQQU5EID0gJ2V4cGFuZCcsXG5cdFBST01JU0VEX0VYUEFORCA9ICdwcm9taXNlZC1leHBhbmQnLFxuXHRFWFBBTkRfTE9DQUwgPSAnZXhwYW5kLWxvY2FsJyxcblx0UFJPTUlTRURfRVhQQU5EX0xPQ0FMID0gJ3Byb21pc2VkLWV4cGFuZC1sb2NhbCcsXG5cdFJFU09MVkUgPSAncmVzb2x2ZScsXG5cdFJFU09MVkVfVkFMVUVTID0gJ3Jlc29sdmUtdmFsdWVzJ1xufVxuXG5leHBvcnQgY29uc3QgQUxMX1BFUk1JU1NJT05TID0gJzcnO1xuXG5leHBvcnQgY29uc3QgQ09MVU1OX1NFUEVSQVRPUiA9ICc+JztcbmV4cG9ydCBjb25zdCBSRU5ERVJfQVNfU0VQRVJBVE9SID0gJzonO1xuXG5leHBvcnQgY29uc3QgTkVXX1BSRUZJWDogc3RyaW5nID0gJy0xJztcbmV4cG9ydCBjb25zdCBEVVBMSUNBVEVfUFJFRklYOiBzdHJpbmcgPSAnLTInO1xuXG5leHBvcnQgY29uc3QgTkVXX0tFWVdPUkQ6IHN0cmluZyA9ICduZXctJztcbmV4cG9ydCBjb25zdCBEVVBMSUNBVEVfS0VZV09SRDogc3RyaW5nID0gJ2R1cC0nO1xuIiwiaW1wb3J0IHsgRU5UUllfU1RBVFVTIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBFbnRyeVN0YXR1cywgRW50cnlTdGF0dXNNYXAsIEl0ZW1JZCwgSXRlbVR5cGUsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBCYXRjaFN0YXR1czxUPiB7XG5cdHJlYWRvbmx5IHJlcXVlc3RTdGF0dXMgPSBbXG5cdFx0RU5UUllfU1RBVFVTLlJFU09MVkUsXG5cdFx0RU5UUllfU1RBVFVTLlJFU09MVkVfVkFMVUVTLFxuXHRcdEVOVFJZX1NUQVRVUy5FWFBBTkQsXG5cdFx0RU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORFxuXHRdO1xuXG5cdHJlYWRvbmx5IHJlbW90ZUV4cGFuZFN0YXR1cyA9IFtFTlRSWV9TVEFUVVMuRVhQQU5ELCBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EXTtcblxuXHRyZWFkb25seSBsb2NhbEV4cGFuZFN0YXR1cyA9IFtFTlRSWV9TVEFUVVMuRVhQQU5EX0xPQ0FMLCBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EX0xPQ0FMXTtcblxuXHRlbnRyaWVzOiBFbnRyeVN0YXR1c01hcDxUPiA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZSxcblx0XHRwdWJsaWMgaXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHB1YmxpYyBnZXRJdGVtSWQ6IChpdGVtRW50cnk6IFQpID0+IEl0ZW1JZCxcblx0XHRwdWJsaWMgZ2V0UHJvbWlzZTogKGl0ZW1FbnRyeTogVCkgPT4gUHJvbWlzZUludGVyZmFjZTxUPlxuXHQpIHtcblx0XHRmb3IgKGNvbnN0IHN0YXR1cyBpbiBFTlRSWV9TVEFUVVMpXG5cdFx0XHR0aGlzLmVudHJpZXNbRU5UUllfU1RBVFVTW3N0YXR1c11dID0gW107XG5cdH1cblxuXHRhZGQgKGVudHJ5U3RhdHVzOiBFbnRyeVN0YXR1czxUPik6IHZvaWQge1xuXHRcdHRoaXMuZW50cmllc1tlbnRyeVN0YXR1cy5zdGF0dXNdLnB1c2goZW50cnlTdGF0dXMuZW50cnkpO1xuXHR9XG5cblx0aGFzRW50cmllcyAoc3RhdHVzQXJyYXk6IEVOVFJZX1NUQVRVU1tdKTogYm9vbGVhbiB7XG5cdFx0Zm9yIChjb25zdCBzdGF0dXMgb2Ygc3RhdHVzQXJyYXkpIHtcblx0XHRcdGlmICh0aGlzLmVudHJpZXNbc3RhdHVzXS5sZW5ndGggPiAwKVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRoYXNSZXF1ZXN0cyAoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuaGFzRW50cmllcyh0aGlzLnJlcXVlc3RTdGF0dXMpO1xuXHR9XG5cblx0Zm9yRWFjaEVudHJ5IChzdGF0dXNBcnJheTogRU5UUllfU1RBVFVTW10sIGNhbGxiYWNrOiAoZW50cnk6IFQsIGl0ZW1JZDogSXRlbUlkKSA9PiB2b2lkKTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBzdGF0dXMgb2Ygc3RhdHVzQXJyYXkpIHtcblx0XHRcdGNvbnN0IHN0YXR1c0VudHJpZXMgPSB0aGlzLmVudHJpZXNbc3RhdHVzXTtcblxuXHRcdFx0Zm9yIChjb25zdCBzdGF0dXNFbnRyeSBvZiBzdGF0dXNFbnRyaWVzKVxuXHRcdFx0XHRjYWxsYmFjayhzdGF0dXNFbnRyeSwgdGhpcy5nZXRJdGVtSWQoc3RhdHVzRW50cnkpKTtcblx0XHR9XG5cdH1cblxuXHRyZWR1Y2VFbnRyaWVzPFU+IChcblx0XHRzdGF0dXNBcnJheTogRU5UUllfU1RBVFVTW10sXG5cdFx0Y2FsbGJhY2s6IChlbnRyeTogVCwgaXRlbUlkOiBJdGVtSWQsIGRlc3RpbmF0aW9uOiBVKSA9PiB2b2lkLFxuXHRcdGRlc3RpbmF0aW9uOiBVXG5cdCk6IFUge1xuXHRcdGZvciAoY29uc3Qgc3RhdHVzIG9mIHN0YXR1c0FycmF5KSB7XG5cdFx0XHRjb25zdCBzdGF0dXNFbnRyaWVzID0gdGhpcy5lbnRyaWVzW3N0YXR1c107XG5cblx0XHRcdGZvciAoY29uc3Qgc3RhdHVzRW50cnkgb2Ygc3RhdHVzRW50cmllcylcblx0XHRcdFx0Y2FsbGJhY2soc3RhdHVzRW50cnksIHRoaXMuZ2V0SXRlbUlkKHN0YXR1c0VudHJ5KSwgZGVzdGluYXRpb24pO1xuXHRcdH1cblxuXHRcdHJldHVybiBkZXN0aW5hdGlvbjtcblx0fVxuXG5cdHJlZHVjZUFsbEVudHJpZXM8VT4gKFxuXHRcdGNhbGxiYWNrOiAoZW50cnk6IFQsIGl0ZW1JZDogSXRlbUlkLCBkZXN0aW5hdGlvbjogVSkgPT4gdm9pZCxcblx0XHRkZXN0aW5hdGlvbjogVVxuXHQpOiBVIHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzO1xuXG5cdFx0Zm9yIChjb25zdCBzdGF0dXMgaW4gZW50cmllcykge1xuXHRcdFx0Y29uc3Qgc3RhdHVzRW50cmllcyA9IGVudHJpZXNbc3RhdHVzXTtcblxuXHRcdFx0Zm9yIChjb25zdCBzdGF0dXNFbnRyeSBvZiBzdGF0dXNFbnRyaWVzKVxuXHRcdFx0XHRjYWxsYmFjayhzdGF0dXNFbnRyeSwgdGhpcy5nZXRJdGVtSWQoc3RhdHVzRW50cnkpLCBkZXN0aW5hdGlvbik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRlc3RpbmF0aW9uO1xuXHR9XG5cblx0Z2V0UHJvbWlzZXMgKCk6IFByb21pc2VJbnRlcmZhY2U8VFtdPiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKFxuXHRcdFx0dGhpcy5yZWR1Y2VFbnRyaWVzKFxuXHRcdFx0XHRbRU5UUllfU1RBVFVTLlBST01JU0VELCBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EXSxcblx0XHRcdFx0KGVudHJ5OiBULCBfaXRlbUlkOiBJdGVtSWQsIGRlc3RpbmF0aW9uKSA9PiB7XG5cdFx0XHRcdFx0ZGVzdGluYXRpb24ucHVzaCh0aGlzLmdldFByb21pc2UoZW50cnkpKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0PEFycmF5PFByb21pc2VJbnRlcmZhY2U8VD4+PiBbXVxuXHRcdFx0KVxuXHRcdCk7XG5cdH1cblxuXHRnZXRJdGVtSWRzIChzdGF0dXNBcnJheTogRU5UUllfU1RBVFVTW10pOiBJdGVtSWRbXSB7XG5cdFx0cmV0dXJuIHRoaXMucmVkdWNlRW50cmllcyhcblx0XHRcdHN0YXR1c0FycmF5LFxuXHRcdFx0KF8sIGl0ZW1JZCwgZGVzdGluYXRpb24pID0+IHtcblx0XHRcdFx0ZGVzdGluYXRpb24ucHVzaChpdGVtSWQpO1xuXHRcdFx0fSxcblx0XHRcdDxJdGVtSWRbXT4gW11cblx0XHQpO1xuXHR9XG5cblx0Z2V0UmVxdWVzdElkcyAoKTogSXRlbUlkW10ge1xuXHRcdHJldHVybiB0aGlzLmdldEl0ZW1JZHModGhpcy5yZXF1ZXN0U3RhdHVzKTtcblx0fVxuXG5cdGdldEFycmF5IChzdGF0dXNBcnJheT86IEVOVFJZX1NUQVRVU1tdKTogVFtdIHtcblx0XHRjb25zdCBjYWxsYmFjayA9IChlbnRyeTogVCwgX2l0ZW1JZDogSXRlbUlkLCBkZXN0aW5hdGlvbjogVFtdKSA9PiB7XG5cdFx0XHRkZXN0aW5hdGlvbi5wdXNoKGVudHJ5KTtcblx0XHR9O1xuXG5cdFx0aWYgKHN0YXR1c0FycmF5ID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5yZWR1Y2VBbGxFbnRyaWVzKGNhbGxiYWNrLCA8VFtdPiBbXSk7XG5cblx0XHRyZXR1cm4gdGhpcy5yZWR1Y2VFbnRyaWVzKHN0YXR1c0FycmF5LCBjYWxsYmFjaywgPFRbXT4gW10pO1xuXHR9XG5cblx0Z2V0TWFwICgpOiB7W2l0ZW1JZDogc3RyaW5nXTogVH0ge1xuXHRcdHJldHVybiB0aGlzLnJlZHVjZUFsbEVudHJpZXMoXG5cdFx0XHQoZW50cnk6IFQsIGl0ZW1JZDogSXRlbUlkLCBkZXN0aW5hdGlvbjoge1tpdGVtSWQ6IG51bWJlcl06IFR9KSA9PiB7XG5cdFx0XHRcdGRlc3RpbmF0aW9uW2l0ZW1JZF0gPSBlbnRyeTtcblx0XHRcdH0sXG5cdFx0XHR7fVxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSwgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBFbnRyeVBhcmVudCwgRW50cnlQYXJlbnROdWxsLCBJdGVtRW50cnlNYXAsIEl0ZW1JZCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IGNyZWF0ZVBhdGgsIGdldFBhdGggfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgdHlwZSBEZWxldGVNYXBFbnRyeSA9IHtpdGVtOiBJdGVtRW50cnksIHBhcmVudDogRW50cnlQYXJlbnROdWxsfTtcblxuZXhwb3J0IHR5cGUgTW92ZU1hcEVudHJ5ID0ge2l0ZW06IEl0ZW1FbnRyeSwgcGFyZW50OiBFbnRyeVBhcmVudH07XG5cbmV4cG9ydCB0eXBlIENyZWF0ZUNvbXBpbGF0aW9uID0ge1xuXHRbcGFyZW50VHlwZTogc3RyaW5nXToge1xuXHRcdFtwYXJlbnRJZDogbnVtYmVyXTogSXRlbUVudHJ5TWFwXG5cdH1cbn07XG5cbmV4cG9ydCB0eXBlIERlbGV0ZUNvbXBpbGF0aW9uID0ge1xuXHRbaXRlbVR5cGU6IHN0cmluZ106IEl0ZW1FbnRyeVtdXG59O1xuXG5leHBvcnQgdHlwZSBVcGRhdGVDb21waWxhdGlvbiA9IEl0ZW1FbnRyeU1hcDtcblxuZXhwb3J0IHR5cGUgTW92ZUNvbXBpbGF0aW9uID0ge1xuXHRbcGFyZW50VHlwZTogc3RyaW5nXToge1xuXHRcdFtwYXJlbnRJZDogbnVtYmVyXTogTW92ZU1hcEVudHJ5W11cblx0fVxufTtcblxuZXhwb3J0IGNsYXNzIENoYW5nZXNDb21waWxhdGlvbiB7XG5cdGNvbXBpbGF0aW9uOiB7XG5cdFx0Y3JlYXRlOiBDcmVhdGVDb21waWxhdGlvbixcblx0XHRkZWxldGU6IERlbGV0ZUNvbXBpbGF0aW9uLFxuXHRcdHVwZGF0ZTogVXBkYXRlQ29tcGlsYXRpb24sXG5cdFx0bW92ZTogTW92ZUNvbXBpbGF0aW9uXG5cdH0gPSB7XG5cdFx0Y3JlYXRlOiB7fSxcblx0XHRkZWxldGU6IHt9LFxuXHRcdHVwZGF0ZToge30sXG5cdFx0bW92ZToge31cblx0fTtcblxuXHRjb2xsZWN0aW9uczogQ29sbGVjdGlvbkNhY2hlO1xuXG5cdHByaXZhdGUgbW92ZUFycmF5OiBJdGVtRW50cnlbXSA9IFtdO1xuXG5cdHByaXZhdGUgZGVsZXRlTWFwOiB7XG5cdFx0W2l0ZW1UeXBlOiBzdHJpbmddOiB7XG5cdFx0XHRbaXRlbUlkOiBudW1iZXJdOiBEZWxldGVNYXBFbnRyeVxuXHRcdH1cblx0fSA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25DYWNoZUZhY3Rvcnk6IENvbGxlY3Rpb25DYWNoZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuXHRcdHB1YmxpYyBzaW5nbGVJdGVtczogSXRlbUVudHJ5W10sXG5cdFx0Y29sbGVjdGlvbkVudHJpZXM6IENvbGxlY3Rpb25FbnRyeVtdXG5cdCkge1xuXHRcdHRoaXMuY29sbGVjdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XG5cblx0XHR0aGlzLnByb2Nlc3NTaW5nbGVJdGVtcygpO1xuXHRcdHRoaXMucHJvY2Vzc0NvbGxlY3Rpb25zKGNvbGxlY3Rpb25FbnRyaWVzKTtcblx0XHR0aGlzLnBvc3RQcm9jZXNzKCk7XG5cdH1cblxuXHRnZXREZWZhdWx0UGFyZW50ICgpOiBFbnRyeVBhcmVudCB7XG5cdFx0cmV0dXJuIHtpdGVtVHlwZTogJ1ZvaWQnLCBpdGVtSWQ6IDB9O1xuXHR9XG5cblx0YWRkTW92ZUVudHJ5IChpdGVtRW50cnk6IEl0ZW1FbnRyeSk6IHZvaWQge1xuXHRcdHRoaXMubW92ZUFycmF5LnB1c2goaXRlbUVudHJ5KTtcblx0fVxuXG5cdGFkZERlbGV0ZUVudHJ5IChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgcGFyZW50OiBFbnRyeVBhcmVudE51bGwpOiB2b2lkIHtcblx0XHRjcmVhdGVQYXRoKFxuXHRcdFx0dGhpcy5kZWxldGVNYXAsXG5cdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcblx0XHRcdFt7fSwge2l0ZW06IGl0ZW1FbnRyeSwgcGFyZW50OiBwYXJlbnR9XVxuXHRcdCk7XG5cdH1cblxuXHRhZGRVcGRhdGVFbnRyeSAoaXRlbUVudHJ5OiBJdGVtRW50cnkpOiB2b2lkIHtcblx0XHRjcmVhdGVQYXRoKFxuXHRcdFx0dGhpcy5jb21waWxhdGlvbi51cGRhdGUsXG5cdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcblx0XHRcdFt7fSwgaXRlbUVudHJ5XVxuXHRcdCk7XG5cdH1cblxuXHRhZGRDcmVhdGVFbnRyeSAoaXRlbUVudHJ5OiBJdGVtRW50cnkpOiB2b2lkIHtcblx0XHRsZXQgcGFyZW50ID0gaXRlbUVudHJ5LnBhcmVudDtcblxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXG5cdFx0XHRwYXJlbnQgPSB0aGlzLmdldERlZmF1bHRQYXJlbnQoKTtcblxuXHRcdGNyZWF0ZVBhdGgoXG5cdFx0XHR0aGlzLmNvbXBpbGF0aW9uLmNyZWF0ZSxcblx0XHRcdFtwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQsIGl0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXG5cdFx0XHRbe30sIHt9LCB7fSwgaXRlbUVudHJ5XVxuXHRcdCk7XG5cdH1cblxuXHRjb250YWluc0NyZWF0ZUVudHJ5IChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgY3JlYXRlQ29tcGlsYXRpb24gPSB0aGlzLmNvbXBpbGF0aW9uLmNyZWF0ZTtcblxuXHRcdGZvciAoY29uc3QgcGFyZW50VHlwZSBpbiBjcmVhdGVDb21waWxhdGlvbikge1xuXHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBjcmVhdGVDb21waWxhdGlvbltwYXJlbnRUeXBlXSkge1xuXHRcdFx0XHRjb25zdCBpdGVtRW50cnlNYXAgPSBjcmVhdGVDb21waWxhdGlvbltwYXJlbnRUeXBlXVtwYXJlbnRJZF1baXRlbVR5cGVdO1xuXG5cdFx0XHRcdGlmIChpdGVtRW50cnlNYXAgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBpdGVtRW50cnlNYXApIHtcblx0XHRcdFx0XHRpZiAoaXRlbUVudHJ5TWFwW2tleV0uaXRlbUlkID09PSBpdGVtSWQpXG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHByaXZhdGUgY3JlYXRlRGVsZXRlQ29tcGlsYXRpb24gKCk6IHZvaWQge1xuXHRcdGNvbnN0IGRlbGV0ZU1hcCA9IHRoaXMuZGVsZXRlTWFwO1xuXHRcdGNvbnN0IGRlbGV0ZUNvbXBpbGF0aW9uID0gdGhpcy5jb21waWxhdGlvbi5kZWxldGU7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGRlbGV0ZU1hcCkge1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZGVsZXRlTWFwW2l0ZW1UeXBlXSkge1xuXHRcdFx0XHRjb25zdCBpdGVtRW50cnk6IEl0ZW1FbnRyeSA9IGRlbGV0ZU1hcFtpdGVtVHlwZV1baXRlbUlkXS5pdGVtO1xuXG5cdFx0XHRcdGlmIChkZWxldGVDb21waWxhdGlvbltpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRkZWxldGVDb21waWxhdGlvbltpdGVtVHlwZV0gPSBbXTtcblxuXHRcdFx0XHRkZWxldGVDb21waWxhdGlvbltpdGVtVHlwZV0ucHVzaChpdGVtRW50cnkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHBvc3RQcm9jZXNzICgpOiB2b2lkIHtcblx0XHRjb25zdCBkZWxldGVNYXAgPSB0aGlzLmRlbGV0ZU1hcDtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIHRoaXMubW92ZUFycmF5KSB7XG5cdFx0XHRjb25zdCBkZWxldGVFbnRyeTogRGVsZXRlTWFwRW50cnkgPSBnZXRQYXRoKGRlbGV0ZU1hcCwgW2l0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0pO1xuXG5cdFx0XHRpZiAoZGVsZXRlRW50cnkgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdC8vIGFzc3VtZSB0aGUgaXRlbUVudHJ5IGhhcyBhIHBhcmVudCAob3Igc29tZXRoaW5nIHdlbnQgc2VyaW91c2x5IHdyb25nKVxuXHRcdFx0Y29uc3Qge2l0ZW1UeXBlOiBwYXJlbnRUeXBlLCBpdGVtSWQ6IHBhcmVudElkfSA9IDxFbnRyeVBhcmVudD4gaXRlbUVudHJ5LnBhcmVudDtcblxuXHRcdFx0aWYgKHRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQocGFyZW50SWQpICYmICF0aGlzLmNvbnRhaW5zQ3JlYXRlRW50cnkocGFyZW50VHlwZSwgcGFyZW50SWQpKSB7XG5cdFx0XHRcdGl0ZW1FbnRyeS5wYXJlbnQgPSBkZWxldGVFbnRyeS5wYXJlbnQ7XG5cblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGNyZWF0ZVBhdGg8RGVsZXRlTWFwRW50cnlbXT4odGhpcy5jb21waWxhdGlvbi5tb3ZlLCBbcGFyZW50VHlwZSwgcGFyZW50SWRdLCBbe30sIFtdXSkucHVzaChkZWxldGVFbnRyeSk7XG5cblx0XHRcdGRlbGV0ZSBkZWxldGVNYXBbaXRlbUVudHJ5Lml0ZW1UeXBlXVtpdGVtRW50cnkuaXRlbUlkXTtcblx0XHR9XG5cblx0XHR0aGlzLmNyZWF0ZURlbGV0ZUNvbXBpbGF0aW9uKCk7XG5cdH1cblxuXHRwcml2YXRlIHByb2Nlc3NTaW5nbGVJdGVtcyAoKTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgdGhpcy5zaW5nbGVJdGVtcykge1xuXHRcdFx0aWYgKGl0ZW1FbnRyeS5pc0xvY2FsKCkpXG5cdFx0XHRcdHRoaXMuYWRkQ3JlYXRlRW50cnkoaXRlbUVudHJ5KTtcblx0XHRcdGVsc2UgaWYgKGl0ZW1FbnRyeS5oYXNDaGFuZ2VzKCkpXG5cdFx0XHRcdHRoaXMuYWRkVXBkYXRlRW50cnkoaXRlbUVudHJ5KTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHByb2Nlc3NDb2xsZWN0aW9ucyAoY29sbGVjdGlvbkVudHJpZXM6IENvbGxlY3Rpb25FbnRyeVtdKTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgY29sbGVjdGlvbkVudHJpZXMpIHtcblx0XHRcdHRoaXMuY29sbGVjdGlvbnMuYWRkKGNvbGxlY3Rpb25FbnRyeSk7XG5cblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXNEZWZlcnJlZCgpKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0bGV0IGFkZGVkSXRlbXM6IEl0ZW1FbnRyeVtdO1xuXHRcdFx0bGV0IHJlbW92ZWRJdGVtczogSXRlbUVudHJ5W107XG5cblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXNMb2NhbCgpKSB7XG5cdFx0XHRcdGFkZGVkSXRlbXMgPSBjb2xsZWN0aW9uRW50cnkuaXRlbXM7XG5cdFx0XHRcdHJlbW92ZWRJdGVtcyA9IFtdO1xuXHRcdFx0fSBlbHNlIGlmIChjb2xsZWN0aW9uRW50cnkuaGFzRWRpdFJlc291cmNlcykge1xuXHRcdFx0XHRhZGRlZEl0ZW1zID0gY29sbGVjdGlvbkVudHJ5LmdldEFkZGVkSXRlbXMoKTtcblx0XHRcdFx0cmVtb3ZlZEl0ZW1zID0gY29sbGVjdGlvbkVudHJ5LmdldFJlbW92ZWRJdGVtcygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YWRkZWRJdGVtcyA9IFtdO1xuXHRcdFx0XHRyZW1vdmVkSXRlbXMgPSBbXTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yIChjb25zdCBhZGRlZEl0ZW0gb2YgYWRkZWRJdGVtcykgeyAvLyBpdCBpcyBwb3NzaWJsZSB0byBtb3ZlIGFuIGV4aXN0aW5nIGl0ZW0gdG8gYSBuZXcgY29sbGVjdGlvblxuXHRcdFx0XHRpZiAoYWRkZWRJdGVtLmlzTG9jYWwoKSlcblx0XHRcdFx0XHR0aGlzLmFkZENyZWF0ZUVudHJ5KGFkZGVkSXRlbSk7XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHR0aGlzLmFkZE1vdmVFbnRyeShhZGRlZEl0ZW0pO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGNvbnN0IHJlbW92ZWRJdGVtIG9mIHJlbW92ZWRJdGVtcylcblx0XHRcdFx0dGhpcy5hZGREZWxldGVFbnRyeShyZW1vdmVkSXRlbSwgY29sbGVjdGlvbkVudHJ5LnBhcmVudCk7XG5cblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaGFzSXRlbUVkaXRSZXNvdXJjZXMpIHtcblx0XHRcdFx0Y29uc3QgdXBkYXRlZEl0ZW1zID0gY29sbGVjdGlvbkVudHJ5LmdldFVwZGF0ZWRJdGVtcygpO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgdXBkYXRlZEl0ZW0gb2YgdXBkYXRlZEl0ZW1zKVxuXHRcdFx0XHRcdHRoaXMuYWRkVXBkYXRlRW50cnkodXBkYXRlZEl0ZW0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuIiwiaW1wb3J0IHtcblx0QXBpRm9ybWF0dGVyLFxuXHRDaGFuZ2VzQ29tcGlsYXRpb24sXG5cdENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdENvbGxlY3Rpb25IYW5kbGVyLFxuXHRDb2x1bW5JbmZvLFxuXHREZWxldGVDb21waWxhdGlvbixcblx0SXRlbUhhbmRsZXIsXG5cdE1vdmVDb21waWxhdGlvbixcblx0TW92ZU1hcEVudHJ5LFxuXHRVcGRhdGVDb21waWxhdGlvblxufSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7XG5cdENoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXG5cdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdENyZWF0ZVJlcXVlc3RGYWN0b3J5LFxuXHRSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxufSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7XG5cdEFwaVJlcXVlc3RNb3ZlSXRlbXMsXG5cdEFwaVJlc3BvbnNlLFxuXHRDcmVhdGVSZXF1ZXN0RW50cnksXG5cdENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAsXG5cdEVudHJ5UGFyZW50LCBGaWVsZE1hcCxcblx0SXRlbUlkLFxuXHRJdGVtSWRDb252ZXJzaW9uTWFwLFxuXHRJdGVtVHlwZSxcblx0UHJvbWlzZUludGVyZmFjZVxufSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IGNyZWF0ZVBhdGgsIGdldFBhdGgsIGhhc1Byb3BlcnRpZXMsIGluQXJyYXkgfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgY2xhc3MgQ2hhbmdlc1Byb2Nlc3NvciB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgY2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeTogQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25FbnRyeVNlcnZpY2U6IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgY3JlYXRlUmVxdWVzdEZhY3Rvcnk6IENyZWF0ZVJlcXVlc3RGYWN0b3J5LFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSByZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnlcblx0KSB7XG5cdH1cblxuXHRidWlsZE1vdmVSZXF1ZXN0IChjb21waWxhdGlvbkVudHJpZXM6IE1vdmVNYXBFbnRyeVtdKTogQXBpUmVxdWVzdE1vdmVJdGVtcyB7XG5cdFx0Y29uc3QgcmVzdWx0OiBBcGlSZXF1ZXN0TW92ZUl0ZW1zID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGNvbXBpbGF0aW9uRW50cnkgb2YgY29tcGlsYXRpb25FbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSBjb21waWxhdGlvbkVudHJ5Lml0ZW07XG5cdFx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcblxuXHRcdFx0aWYgKHJlc3VsdFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0cmVzdWx0W2l0ZW1UeXBlXSA9IFtdO1xuXG5cdFx0XHRyZXN1bHRbaXRlbVR5cGVdLnB1c2goaXRlbUVudHJ5Lml0ZW1JZCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldE1hcFZhbHVlIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkLCBtYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApOiBJdGVtSWQgfCB1bmRlZmluZWQge1xuXHRcdGlmIChtYXAgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRpZiAobWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdHJldHVybiBtYXBbaXRlbVR5cGVdW2l0ZW1JZF07XG5cdH1cblxuXHRwcml2YXRlIGV4ZWN1dGVDcmVhdGVSZXF1ZXN0cyAoXG5cdFx0Y2hhbmdlc0NvbXBpbGF0aW9uOiBDaGFuZ2VzQ29tcGlsYXRpb24sXG5cdFx0cGFyYW1ldGVyczogQ3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCxcblx0XHRjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwLFxuXHRcdGJyZWFrdXBCeVBhcmVudD86IGJvb2xlYW4sXG5cdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrPzogKGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApID0+IHZvaWRcblx0KTogUHJvbWlzZUludGVyZmFjZTxJdGVtSWRDb252ZXJzaW9uTWFwPiB7XG5cdFx0Y29uc3QgcmVxdWVzdHMgPSB0aGlzLmNyZWF0ZVJlcXVlc3RGYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdGNoYW5nZXNDb21waWxhdGlvbi5jb21waWxhdGlvbi5jcmVhdGUsXG5cdFx0XHRjaGFuZ2VzQ29tcGlsYXRpb24uY29sbGVjdGlvbnMsXG5cdFx0XHRwYXJhbWV0ZXJzLFxuXHRcdFx0YnJlYWt1cEJ5UGFyZW50XG5cdFx0KS5ydW4oKTtcblxuXHRcdGNvbnN0IHJlc3BvbnNlczogQXJyYXk8UHJvbWlzZUludGVyZmFjZTxhbnk+PiA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCByZXF1ZXN0IG9mIHJlcXVlc3RzKVxuXHRcdFx0cmVzcG9uc2VzLnB1c2godGhpcy5leGVjdXRlQ3JlYXRlUmVxdWVzdChyZXF1ZXN0LCBjb252ZXJzaW9uTWFwKS50aGVuKG5vdGlmeSkpO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHJlc3BvbnNlcykudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIGNvbnZlcnNpb25NYXA7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblxuXHRcdGZ1bmN0aW9uIG5vdGlmeSAocmVzdWx0OiBhbnkpIHtcblx0XHRcdGlmIChvbkFmdGVyQ3JlYXRlQ2FsbGJhY2sgIT09IHVuZGVmaW5lZClcblx0XHRcdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrKGNvbnZlcnNpb25NYXApO1xuXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZXhlY3V0ZUNyZWF0ZVJlcXVlc3QgKFxuXHRcdHJlcXVlc3RSZXNvdXJjZTogQ3JlYXRlUmVxdWVzdEVudHJ5LFxuXHRcdGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXBcblx0KTogUHJvbWlzZUludGVyZmFjZTx2b2lkPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucmVxdWVzdFNrZWxldG9uKHJlcXVlc3RSZXNvdXJjZS5yZXF1ZXN0KS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRjb25zdCByZXNwb25zZU1hcCA9IHJlc3BvbnNlLm1hcDtcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCk7XG5cdFx0XHRcdGNvbnN0IGl0ZW1FbnRyaWVzID0gcmVxdWVzdFJlc291cmNlLml0ZW1zO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gaXRlbUVudHJpZXMpIHtcblx0XHRcdFx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0XHRyZXF1ZXN0UmVzb3VyY2UucmVxdWVzdC5jb2x1bW5zW2l0ZW1UeXBlXSxcblx0XHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1uc1xuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtRW50cmllc1tpdGVtVHlwZV0pIHtcblx0XHRcdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeTogSXRlbUVudHJ5ID0gaXRlbUVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF07XG5cdFx0XHRcdFx0XHRjb25zdCBuZXdJdGVtSWQgPSB0aGlzLmdldE1hcFZhbHVlKGl0ZW1UeXBlLCBwYXJzZUludChpdGVtSWQsIDEwKSwgcmVzcG9uc2VNYXApO1xuXG5cdFx0XHRcdFx0XHRpZiAobmV3SXRlbUlkID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKCdDcmVhdGUgZmFpbGVkIScsIGl0ZW1FbnRyeSk7XG5cdFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRjb25zdCBmaWVsZHMgPSByZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgbmV3SXRlbUlkKTtcblx0XHRcdFx0XHRcdGNvbnN0IGV4cGFuZFJlc291cmNlID0gY29sdW1uRXhwYW5zaW9uLnJ1bihpdGVtRW50cnkuY29sdW1ucyk7XG5cblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5pdGVtSWQgPSBuZXdJdGVtSWQ7XG5cdFx0XHRcdFx0XHRpdGVtRW50cnkudXBkYXRlRmllbGRzKFxuXHRcdFx0XHRcdFx0XHRmaWVsZHMsXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgbmV3SXRlbUlkLCBpdGVtRW50cnkuY29sdW1ucy5yb290KSxcblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdGlmIChleHBhbmRSZXNvdXJjZSAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnkuZXhwYW5kKFxuXHRcdFx0XHRcdFx0XHRcdGZpZWxkcyxcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIG5ld0l0ZW1JZCwgZXhwYW5kUmVzb3VyY2UuZGlmZmVyZW5jZS5yb290KSxcblx0XHRcdFx0XHRcdFx0XHRleHBhbmRSZXNvdXJjZVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuYWRkKGl0ZW1FbnRyeSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmVxdWVzdFJlc291cmNlLmNvbGxlY3Rpb25zLmFkZFRvQ29sbGVjdGlvbnMoKTtcblxuXHRcdFx0XHQvLyBleHRlbmQgY29udmVyc2lvbiBtYXBcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiByZXNwb25zZU1hcCkge1xuXHRcdFx0XHRcdGlmIChjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdFx0Y29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPSB7fTtcblxuXHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHJlc3BvbnNlTWFwW2l0ZW1UeXBlXSlcblx0XHRcdFx0XHRcdGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdW3BhcnNlSW50KGl0ZW1JZCwgMTApXSA9IHJlc3BvbnNlTWFwW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgZXhlY3V0ZVVwZGF0ZVJlcXVlc3RzIChjb21waWxhdGlvbjogVXBkYXRlQ29tcGlsYXRpb24sIHBhcmFtZXRlcnM6IGFueSkge1xuXHRcdGNvbnN0IHJlcXVlc3RzOiBBcnJheTxQcm9taXNlSW50ZXJmYWNlPEFwaVJlc3BvbnNlPj4gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gY29tcGlsYXRpb24pXG5cdFx0XHRyZXF1ZXN0cy5wdXNoKHRoaXMuZXhlY3V0ZVVwZGF0ZVJlcXVlc3QoaXRlbVR5cGUsIGNvbXBpbGF0aW9uW2l0ZW1UeXBlXSwgcGFyYW1ldGVycykpO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHJlcXVlc3RzKTtcblx0fVxuXG5cdHByaXZhdGUgZXhlY3V0ZVVwZGF0ZVJlcXVlc3QgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUVudHJpZXM6IHtbaXRlbUlkOiBudW1iZXJdOiBJdGVtRW50cnl9LCBwYXJhbWV0ZXJNYXA6IGFueSkge1xuXHRcdGNvbnN0IHJlcXVlc3Q6IHtbaXRlbVR5cGU6IHN0cmluZ106IHtbaXRlbUlkOiBudW1iZXJdOiBGaWVsZE1hcH19ID0ge307XG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSB0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdCgpO1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25NYXRjaGVyID0gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5nZXRDb2xsZWN0aW9uTWF0Y2hlcigpO1xuXG5cdFx0cmVxdWVzdFtpdGVtVHlwZV0gPSB7fTtcblxuXHRcdC8vIHdlIG5lZWQgdG8gZG8gdGhlIGZvcm1hdFJlcXVlc3QgY2FsbCBoZXJlIChmaWVsZHMgbWlnaHQgaGF2ZSBiZWVuIHVwZGF0ZWQpXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbUVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGl0ZW1FbnRyaWVzW2l0ZW1JZF07XG5cdFx0XHQvLyBSTUNvcmUgdG9kbzogdHlwZVxuXHRcdFx0Y29uc3QgaXRlbVJlcXVlc3Q6IGFueSA9IHJlcXVlc3RbaXRlbVR5cGVdW2l0ZW1JZF0gPSB7fTtcblx0XHRcdGNvbnN0IHBhcmFtZXRlcnMgPSBnZXRQYXRoKHBhcmFtZXRlck1hcCwgW2l0ZW1UeXBlLCBpdGVtSWRdKTtcblxuXHRcdFx0aXRlbVJlcXVlc3QudmFsdWVzID0gaXRlbUVudHJ5LmZvcm1hdFJlcXVlc3QoKTtcblxuXHRcdFx0aWYgKHBhcmFtZXRlcnMgIT09IHVuZGVmaW5lZClcblx0XHRcdFx0aXRlbVJlcXVlc3QucGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7XG5cblx0XHRcdHJlcXVlc3RDb2x1bW5zLmV4cGFuZChpdGVtRW50cnkuY29sdW1ucyk7XG5cdFx0XHRjb2xsZWN0aW9uTWF0Y2hlci5leHBhbmQoaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRjb25zdCBjb2xsZWN0aW9uc1dpdGhGaXR0aW5nSXRlbXMgPSBjb2xsZWN0aW9uTWF0Y2hlci5nZXRDb2xsZWN0aW9uc1dpdGhGaXR0aW5nSXRlbXMoKTtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9uc1dpdGhGaXR0aW5nSXRlbXMpXG5cdFx0XHRyZXF1ZXN0Q29sdW1ucy5leHBhbmQoY29sbGVjdGlvbi5jb2x1bW5zKTtcblxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnVwZGF0ZUl0ZW1zKGl0ZW1UeXBlLCByZXF1ZXN0LCByZXF1ZXN0Q29sdW1ucy5nZXQoKSkudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRyZXF1ZXN0Q29sdW1ucy5nZXQoKVtpdGVtVHlwZV0sXG5cdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KClcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtRW50cmllcykge1xuXHRcdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGl0ZW1FbnRyaWVzW2l0ZW1JZF07XG5cdFx0XHRcdFx0Y29uc3QgZmllbGRzID0gcmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCk7XG5cblx0XHRcdFx0XHRpZiAoZmllbGRzID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdGNvbnNvbGUud2FybignVXBkYXRlIGZhaWxlZCEnLCBpdGVtRW50cnkpO1xuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29uc3QgcHJldmlvdXMgPSB0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGl0ZW1FbnRyeS5pbml0aWFsLCB7fSwgaXRlbUVudHJ5LmNvbHVtbnMubWFpbik7XG5cblx0XHRcdFx0XHRpdGVtRW50cnlcblx0XHRcdFx0XHRcdC51cGRhdGVGaWVsZHMoZmllbGRzLCByZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgaXRlbUVudHJ5LmNvbHVtbnMucm9vdCkpXG5cdFx0XHRcdFx0XHQuY2FsbE9uQ2hhbmdlKHByZXZpb3VzKTtcblxuXHRcdFx0XHRcdGNvbnN0IGV4cGFuZFJlc291cmNlID0gY29sdW1uRXhwYW5zaW9uLnJ1bihpdGVtRW50cnkuY29sdW1ucyk7XG5cblx0XHRcdFx0XHRpZiAoZXhwYW5kUmVzb3VyY2UgPT09IG51bGwpXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5leHBhbmQoXG5cdFx0XHRcdFx0XHRmaWVsZHMsXG5cdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgZXhwYW5kUmVzb3VyY2UuZGlmZmVyZW5jZS5yb290KSxcblx0XHRcdFx0XHRcdGV4cGFuZFJlc291cmNlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyLnJlbW92ZUZyb21BbmRBZGRUb0NvbGxlY3Rpb25zKCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgZXhlY3V0ZURlbGV0ZVJlcXVlc3RzIChjb21waWxhdGlvbjogRGVsZXRlQ29tcGlsYXRpb24pIHtcblx0XHRjb25zdCByZXF1ZXN0czogQXJyYXk8UHJvbWlzZUludGVyZmFjZTx2b2lkPj4gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gY29tcGlsYXRpb24pIC8vIGNsZWFyaW5nIG5vdCBuZWNlc3Nhcnlcblx0XHRcdHJlcXVlc3RzLnB1c2godGhpcy5leGVjdXRlRGVsZXRlUmVxdWVzdChpdGVtVHlwZSwgY29tcGlsYXRpb25baXRlbVR5cGVdKSk7XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocmVxdWVzdHMpO1xuXHR9XG5cblx0cHJpdmF0ZSBleGVjdXRlRGVsZXRlUmVxdWVzdCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtRW50cmllczogSXRlbUVudHJ5W10pIHtcblx0XHRjb25zdCBpZEFycmF5OiBJdGVtSWRbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXG5cdFx0XHRpZEFycmF5LnB1c2goaXRlbUVudHJ5Lml0ZW1JZCk7XG5cblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5kZWxldGUoaXRlbVR5cGUsIGlkQXJyYXkpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlSWRBcnJheSA9IHJlc3BvbnNlLml0ZW1zO1xuXHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uTWF0Y2hlciA9IHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZ2V0Q29sbGVjdGlvbk1hdGNoZXIoKTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0XHRcdGlmICghaW5BcnJheShpdGVtRW50cnkuaXRlbUlkLCByZXNwb25zZUlkQXJyYXkpKVxuXHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKCdEZWxldGUgZmFpbGVkIScsIGl0ZW1FbnRyeSk7XG5cblx0XHRcdFx0XHRjb2xsZWN0aW9uTWF0Y2hlci5leHBhbmQoaXRlbUVudHJ5KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyLnJlbW92ZUZyb21Db2xsZWN0aW9ucygpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIGV4ZWN1dGVNb3ZlUmVxdWVzdHMgKGNvbXBpbGF0aW9uOiBNb3ZlQ29tcGlsYXRpb24sIGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblx0XHRjb25zdCByZXF1ZXN0czogQXJyYXk8UHJvbWlzZUludGVyZmFjZTx2b2lkPj4gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgcGFyZW50VHlwZSBpbiBjb21waWxhdGlvbikge1xuXHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBjb21waWxhdGlvbltwYXJlbnRUeXBlXSlcblx0XHRcdFx0ZXhlY3V0ZU1vdmVSZXF1ZXN0KHBhcmVudFR5cGUsICtwYXJlbnRJZCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHJlcXVlc3RzKTtcblxuXHRcdGZ1bmN0aW9uIGV4ZWN1dGVNb3ZlUmVxdWVzdCAocGFyZW50VHlwZTogSXRlbVR5cGUsIHBhcmVudElkOiBJdGVtSWQpIHtcblx0XHRcdC8vIG9ubHkgdGhlIHBhcmVudCBpZCBjb3VsZCBoYXZlIGJlZW4gdXBkYXRlZFxuXHRcdFx0Y29uc3QgY29tcGlsYXRpb25FbnRyaWVzID0gY29tcGlsYXRpb25bcGFyZW50VHlwZV1bcGFyZW50SWRdO1xuXHRcdFx0Y29uc3QgbmV3UGFyZW50SWQgPSBzZWxmLmdldE1hcFZhbHVlKHBhcmVudFR5cGUsIHBhcmVudElkLCBjb252ZXJzaW9uTWFwKTtcblxuXHRcdFx0cmVxdWVzdHMucHVzaChcblx0XHRcdFx0c2VsZi5hcGlSZXF1ZXN0U2VydmljZS5tb3ZlSXRlbXMoXG5cdFx0XHRcdFx0cGFyZW50VHlwZSxcblx0XHRcdFx0XHRuZXdQYXJlbnRJZCAhPT0gdW5kZWZpbmVkID8gbmV3UGFyZW50SWQgOiBwYXJlbnRJZCxcblx0XHRcdFx0XHRzZWxmLmJ1aWxkTW92ZVJlcXVlc3QoY29tcGlsYXRpb25FbnRyaWVzKVxuXHRcdFx0XHQpLnRoZW4oXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0c2VsZi5wcm9jZXNzTW92ZVJlc3BvbnNlKC8qIHJlc3BvbnNlLCAqL2NvbXBpbGF0aW9uRW50cmllcyk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRzZWxmLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHByb2Nlc3NNb3ZlUmVzcG9uc2UgKC8qIHJlc3BvbnNlLCAqL2NvbXBpbGF0aW9uRW50cmllczogTW92ZU1hcEVudHJ5W10pIHtcblx0XHQvLyBUT0RPOiBwcm9jZXNzIHJlc3BvbnNlXG5cblx0XHRjb25zdCBpdGVtRW50cmllczogSXRlbUVudHJ5W10gPSBbXTtcblx0XHRjb25zdCByZW1vdmVDb2xsZWN0aW9uTWFwID0ge307XG5cdFx0Y29uc3QgYWRkQ29sbGVjdGlvbk1hcCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBjb21waWxhdGlvbkVudHJ5IG9mIGNvbXBpbGF0aW9uRW50cmllcykge1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5OiBJdGVtRW50cnkgPSBjb21waWxhdGlvbkVudHJ5Lml0ZW07XG5cblx0XHRcdHRoaXMuYWRkQ29sbGVjdGlvbk1hcEVudHJ5KFxuXHRcdFx0XHRyZW1vdmVDb2xsZWN0aW9uTWFwLFxuXHRcdFx0XHRjb21waWxhdGlvbkVudHJ5LnBhcmVudC5pdGVtSWQsXG5cdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0aXRlbUVudHJ5Lml0ZW1JZFxuXHRcdFx0KTtcblxuXHRcdFx0dGhpcy5hZGRDb2xsZWN0aW9uTWFwRW50cnkoXG5cdFx0XHRcdGFkZENvbGxlY3Rpb25NYXAsXG5cdFx0XHRcdChpdGVtRW50cnkucGFyZW50IGFzIEVudHJ5UGFyZW50KS5pdGVtSWQsXG5cdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0aXRlbUVudHJ5XG5cdFx0XHQpO1xuXG5cdFx0XHRpdGVtRW50cmllcy5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5mb3JFYWNoQ29sbGVjdGlvbihyZW1vdmVDb2xsZWN0aW9uTWFwLCAncmVtb3ZlSXRlbXMnKTtcblx0XHR0aGlzLmZvckVhY2hDb2xsZWN0aW9uKGFkZENvbGxlY3Rpb25NYXAsICdhZGRJdGVtcycpO1xuXHR9XG5cblx0cHJpdmF0ZSBhZGRDb2xsZWN0aW9uTWFwRW50cnk8VD4gKGNvbGxlY3Rpb25NYXA6IGFueSwgcGFyZW50SWQ6IEl0ZW1JZCwgaXRlbUVudHJ5OiBJdGVtRW50cnksIHZhbHVlOiBUKTogdm9pZCB7XG5cdFx0Y29uc3QgY29sbGVjdGlvbk1hcEVudHJ5ID0gY3JlYXRlUGF0aDxUW10+KFxuXHRcdFx0Y29sbGVjdGlvbk1hcCxcblx0XHRcdFtpdGVtRW50cnkucGFyZW50IS5pdGVtVHlwZSwgcGFyZW50SWQsIGl0ZW1FbnRyeS5pdGVtVHlwZV0sXG5cdFx0XHRbe30sIHt9LCBbXV1cblx0XHQpO1xuXG5cdFx0Y29sbGVjdGlvbk1hcEVudHJ5LnB1c2godmFsdWUpO1xuXHR9XG5cblx0cHJpdmF0ZSBmb3JFYWNoQ29sbGVjdGlvbiAoY29sbGVjdGlvbk1hcDogYW55LCBtZXRob2Q6IGtleW9mIENvbGxlY3Rpb25FbnRyeSkge1xuXHRcdGZvciAoY29uc3QgcGFyZW50VHlwZSBpbiBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGNvbGxlY3Rpb25NYXBbcGFyZW50VHlwZV0pIHtcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBjb2xsZWN0aW9uTWFwW3BhcmVudFR5cGVdW3BhcmVudElkXSkge1xuXHRcdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZW50cmllcy5nZXRCeVBhcmVudChwYXJlbnRUeXBlLCBwYXJzZUludChwYXJlbnRJZCwgMTApLCBpdGVtVHlwZSk7XG5cblx0XHRcdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ID09PSBudWxsKVxuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cnlbbWV0aG9kXShcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb25NYXBbcGFyZW50VHlwZV1bcGFyZW50SWRdW2l0ZW1UeXBlXSxcblx0XHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIG5vdGU6IHdpdGggdGhlIG5ldyBpdGVtIHN0cnVjdHVyZSwgKmFsbCogbG9jYWwgaXRlbXMgYXJlIGluIHRoZSBzaW5nbGUgaXRlbSBjYWNoZVxuXHRwcml2YXRlIG9uSXRlbXNDcmVhdGVkIChcblx0XHRjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwLFxuXHRcdHNpbmdsZUl0ZW1zOiBJdGVtRW50cnlbXSxcblx0XHRjb2xsZWN0aW9uczogQ29sbGVjdGlvbkVudHJ5W11cblx0KSB7XG5cdFx0aWYgKCFoYXNQcm9wZXJ0aWVzKGNvbnZlcnNpb25NYXApKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgY29sbGVjdGlvbnMpIHtcblx0XHRcdGNvbnN0IHBhcmVudCA9IGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQ7XG5cdFx0XHRjb25zdCB1cGRhdGVkQ29sdW1uczoge1tjb2x1bW5JZDogc3RyaW5nXTogQ29sdW1uSW5mb30gPVxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuZ2V0VXBkYXRlZEl0ZW1Db2x1bW5zKGNvbnZlcnNpb25NYXApO1xuXG5cdFx0XHRpZiAocGFyZW50ICE9PSBudWxsKSB7XG5cdFx0XHRcdGNvbnN0IG5ld1BhcmVudElkID0gdGhpcy5nZXRNYXBWYWx1ZShwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQsIGNvbnZlcnNpb25NYXApO1xuXG5cdFx0XHRcdGlmIChuZXdQYXJlbnRJZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0cGFyZW50Lml0ZW1JZCA9IG5ld1BhcmVudElkO1xuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5xdWVyeSA9IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jcmVhdGVRdWVyeShjb2xsZWN0aW9uRW50cnkub3B0aW9ucyk7XG5cblx0XHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmVudHJpZXMuYWRkKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKCFoYXNQcm9wZXJ0aWVzKHVwZGF0ZWRDb2x1bW5zKSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGlmICh1cGRhdGVkQ29sdW1ucy5pZCAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkub25JdGVtc0NyZWF0ZWQoY29udmVyc2lvbk1hcFtjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGVdKTtcblxuXHRcdFx0Ly8gd2hlbiB1cGRhdGluZyBhbiBpdGVtIHRvIHJlZmVyIHRvIGEgbmV3bHkgY3JlYXRlZCBpdGVtLCB0aGUgdXBkYXRlZCBpdGVtIHdpbGwgKm5vdCogYmUgYWRkZWQgdG9cblx0XHRcdC8vIHNpbmdsZSBpdGVtcyAoZS5nLiBtb3ZpbmcgYSBmdW5jdGlvbiB0byBhIG5ld2x5IGNyZWF0ZWQgZnVuY3Rpb24gZ3JvdXApXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBjb2xsZWN0aW9uRW50cnkuaXRlbXMpXG5cdFx0XHRcdGl0ZW1FbnRyeS51cGRhdGVJdGVtRmllbGRzKGNvbnZlcnNpb25NYXApO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIHNpbmdsZUl0ZW1zKSB7XG5cdFx0XHRjb25zdCBwYXJlbnQgPSBpdGVtRW50cnkucGFyZW50O1xuXG5cdFx0XHRpdGVtRW50cnkudXBkYXRlSXRlbUZpZWxkcyhjb252ZXJzaW9uTWFwKTtcblxuXHRcdFx0aWYgKHBhcmVudCAhPT0gbnVsbCkge1xuXHRcdFx0XHRjb25zdCBuZXdQYXJlbnRJZCA9IHRoaXMuZ2V0TWFwVmFsdWUocGFyZW50Lml0ZW1UeXBlLCBwYXJlbnQuaXRlbUlkLCBjb252ZXJzaW9uTWFwKTtcblxuXHRcdFx0XHRpZiAobmV3UGFyZW50SWQgIT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRwYXJlbnQuaXRlbUlkID0gbmV3UGFyZW50SWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gcHJvcGVyIG9yZGVyOiBjcmVhdGUgLSBtb3ZlIC0gZGVsZXRlIC0gdXBkYXRlXG5cdGV4ZWN1dGUgKFxuXHRcdHNpbmdsZUl0ZW1zOiBJdGVtRW50cnlbXSxcblx0XHRjb2xsZWN0aW9uczogQ29sbGVjdGlvbkVudHJ5W10sXG5cdFx0cGFyYW1ldGVyczogQ3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCA9IHt9LFxuXHRcdGJyZWFrdXBCeVBhcmVudD86IGJvb2xlYW4sXG5cdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrPzogKGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApID0+IHZvaWRcblx0KTogUHJvbWlzZUludGVyZmFjZTxJdGVtSWRDb252ZXJzaW9uTWFwPiB7XG5cdFx0Y29uc3QgZXJyb3JIYW5kbGVyID0gdGhpcy5lcnJvckhhbmRsZXI7XG5cdFx0Y29uc3QgY2hhbmdlc0NvbXBpbGF0aW9uID0gdGhpcy5jaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LmNvbnN0cnVjdChzaW5nbGVJdGVtcywgY29sbGVjdGlvbnMpO1xuXHRcdGNvbnN0IGNvbXBpbGF0aW9uID0gY2hhbmdlc0NvbXBpbGF0aW9uLmNvbXBpbGF0aW9uO1xuXHRcdGNvbnN0IGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAgPSB7fTtcblxuXHRcdHJldHVybiB0aGlzLmV4ZWN1dGVDcmVhdGVSZXF1ZXN0cyhcblx0XHRcdGNoYW5nZXNDb21waWxhdGlvbixcblx0XHRcdHBhcmFtZXRlcnMsXG5cdFx0XHRjb252ZXJzaW9uTWFwLFxuXHRcdFx0YnJlYWt1cEJ5UGFyZW50LFxuXHRcdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrXG5cdFx0KS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHR0aGlzLm9uSXRlbXNDcmVhdGVkKGNvbnZlcnNpb25NYXAsIHNpbmdsZUl0ZW1zLCBjb2xsZWN0aW9ucyk7XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZU1vdmVSZXF1ZXN0cyhjb21waWxhdGlvbi5tb3ZlLCBjb252ZXJzaW9uTWFwKTtcblx0XHRcdH0sXG5cdFx0XHRlcnJvciA9PiB7XG5cdFx0XHRcdHRoaXMub25JdGVtc0NyZWF0ZWQoY29udmVyc2lvbk1hcCwgc2luZ2xlSXRlbXMsIGNvbGxlY3Rpb25zKTtcblxuXHRcdFx0XHRyZXR1cm4gZXJyb3JIYW5kbGVyLnJlamVjdChlcnJvcik7XG5cdFx0XHR9XG5cdFx0KS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5leGVjdXRlVXBkYXRlUmVxdWVzdHMoY29tcGlsYXRpb24udXBkYXRlLCBwYXJhbWV0ZXJzKTtcblx0XHRcdH0sXG5cdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5leGVjdXRlRGVsZXRlUmVxdWVzdHMoY29tcGlsYXRpb24uZGVsZXRlKTtcblx0XHRcdH0sXG5cdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gY29udmVyc2lvbk1hcDtcblx0XHRcdH0sXG5cdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uTWF0Y2hSZXN1bHQsIENvbGxlY3Rpb25RdWVyeSwgRW50cnlQYXJlbnROdWxsLCBGaWVsZE1hcCwgSXRlbUlkLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZW51bSBDT05TVEFOVFMge1xuXHRNQVlCRSA9ICdtYXliZSdcbn1cblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25DYWNoZSB7XG5cdGVudHJpZXM6IHtcblx0XHRbaXRlbVR5cGU6IHN0cmluZ106IHtcblx0XHRcdFtjb2xsZWN0aW9uRW50cnlJZDogbnVtYmVyXTogQ29sbGVjdGlvbkVudHJ5XG5cdFx0fVxuXHR9ID0ge307XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeVxuXHQpIHtcblxuXHR9XG5cblx0Y29udGFpbnMgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGVdO1xuXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJldHVybiBlbnRyaWVzW2NvbGxlY3Rpb25FbnRyeS5pZF0gIT09IHVuZGVmaW5lZDtcblx0fVxuXG5cdHNvbWUgKGNhbGxiYWNrOiAoZW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4gYm9vbGVhbik6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGVudHJpZXMpIHtcblx0XHRcdGZvciAoY29uc3QgZW50cnlJZCBpbiBlbnRyaWVzW2l0ZW1UeXBlXSkge1xuXHRcdFx0XHRpZiAoY2FsbGJhY2soZW50cmllc1tpdGVtVHlwZV1bZW50cnlJZF0pKVxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIFRPRE86IGNoZWNrIGlmIHRoaXMgaXMgc3RpbGwgaW4gdXNlXG5cdGZvckVhY2ggKGNhbGxiYWNrOiAoZW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4gdm9pZCk6IHZvaWQge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGVudHJpZXMpIHtcblx0XHRcdGZvciAoY29uc3QgZW50cnlJZCBpbiBlbnRyaWVzW2l0ZW1UeXBlXSlcblx0XHRcdFx0Y2FsbGJhY2soZW50cmllc1tpdGVtVHlwZV1bZW50cnlJZF0pO1xuXHRcdH1cblx0fVxuXG5cdHRvQXJyYXkgKCkge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uRW50cnlbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBlbnRyaWVzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllc1tpdGVtVHlwZV0pXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGVudHJpZXNbaXRlbVR5cGVdW2VudHJ5SWRdKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0YWRkIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSk6IENvbGxlY3Rpb25FbnRyeSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZTtcblxuXHRcdGlmIChlbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0ZW50cmllc1tpdGVtVHlwZV0gPSB7fTtcblxuXHRcdHJldHVybiBlbnRyaWVzW2l0ZW1UeXBlXVtjb2xsZWN0aW9uRW50cnkuaWRdID0gY29sbGVjdGlvbkVudHJ5O1xuXHR9XG5cblx0Y2xlYXIgKGNvbGxlY3Rpb25FbnRyeT86IENvbGxlY3Rpb25FbnRyeSk6IGJvb2xlYW4ge1xuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5lbnRyaWVzID0ge307XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICghdGhpcy5jb250YWlucyhjb2xsZWN0aW9uRW50cnkpKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0cmV0dXJuIGRlbGV0ZSB0aGlzLmVudHJpZXNbY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlXVtjb2xsZWN0aW9uRW50cnkuaWRdO1xuXHR9XG5cblx0Z2V0QnlJdGVtVHlwZSAoaXRlbVR5cGU6IHN0cmluZykge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xuXHRcdGNvbnN0IHJlc3VsdDogQ29sbGVjdGlvbkVudHJ5W10gPSBbXTtcblxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXMpXG5cdFx0XHRyZXN1bHQucHVzaChlbnRyaWVzW2VudHJ5SWRdKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRtYXRjaFBhcmVudCAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZDogSXRlbUlkKSB7XG5cdFx0Y29uc3QgcGFyZW50ID0gY29sbGVjdGlvbkVudHJ5LnBhcmVudDtcblxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHQvLyA9PSB0byBjb21wYXJlIGl0ZW1JZHNcblx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuXHRcdHJldHVybiBwYXJlbnQuaXRlbVR5cGUgPT09IGl0ZW1UeXBlICYmIHBhcmVudC5pdGVtSWQgPT0gaXRlbUlkO1xuXHR9XG5cblx0Ly8gVE9ETzogdGhpbmsgb2YgYmV0dGVyIG5hbWVcblx0Z2V0QnlQYXJlbnQgKHBhcmVudFR5cGU6IEl0ZW1UeXBlLCBwYXJlbnRJZDogSXRlbUlkLCBpdGVtVHlwZTogSXRlbVR5cGUpOiBDb2xsZWN0aW9uRW50cnkgfCBudWxsIHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcblxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdGZvciAoY29uc3QgZW50cnlJZCBpbiBlbnRyaWVzKSB7XG5cdFx0XHRpZiAodGhpcy5tYXRjaFBhcmVudChlbnRyaWVzW2VudHJ5SWRdLCBwYXJlbnRUeXBlLCBwYXJlbnRJZCkpXG5cdFx0XHRcdHJldHVybiBlbnRyaWVzW2VudHJ5SWRdO1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Z2V0UmVzb3VyY2VCeVBhcmVudCAocGFyZW50VHlwZTogSXRlbVR5cGUsIHBhcmVudElkOiBJdGVtSWQsIGl0ZW1UeXBlOiBJdGVtVHlwZSk6IENvbGxlY3Rpb25SZXNvdXJjZSB8IG51bGwge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuZ2V0QnlQYXJlbnQocGFyZW50VHlwZSwgcGFyZW50SWQsIGl0ZW1UeXBlKTtcblxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkgPT09IG51bGwpXG5cdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnkuZ2V0Q3VycmVudFJlc291cmNlKCk7XG5cdH1cblxuXHRnZXRDb2xsZWN0aW9uc0J5UGFyZW50IChwYXJlbnRUeXBlOiBJdGVtVHlwZSwgcGFyZW50SWQ6IEl0ZW1JZCkge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uRW50cnlbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBlbnRyaWVzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllc1tpdGVtVHlwZV0pIHtcblx0XHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gZW50cmllc1tpdGVtVHlwZV1bZW50cnlJZF07XG5cblx0XHRcdFx0aWYgKHRoaXMubWF0Y2hQYXJlbnQoY29sbGVjdGlvbkVudHJ5LCBwYXJlbnRUeXBlLCBwYXJlbnRJZCkpXG5cdFx0XHRcdFx0cmVzdWx0LnB1c2goY29sbGVjdGlvbkVudHJ5KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIE9ubHkgcmVzb3VyY2VzXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpdGVtVHlwZVxuXHQgKiBAcGFyYW0ge1N0cmluZ3xJbnRlZ2VyfSBpdGVtSWRcblx0ICogQHJldHVybnMge09iamVjdH0gQXJyYXkgb2YgY29sbGVjdGlvbnMuXG5cdCAqL1xuXHRnZXRCeUNvbnRhaW5pbmdJdGVtIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkKSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uRW50cnlbXSA9IFtdO1xuXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllcykge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gZW50cmllc1tlbnRyeUlkXTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5nZXRJdGVtQnlJZChpdGVtSWQpICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGNvbGxlY3Rpb25zIHRoZSBpdGVtICdiZWxvbmdzJyBpbi5cblx0ICovXG5cdGdldEJ5Rml0dGluZ0l0ZW0gKGl0ZW1UeXBlOiBJdGVtVHlwZSwgZmllbGRzOiBGaWVsZE1hcCwgcGFyZW50OiBFbnRyeVBhcmVudE51bGwpIHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcblx0XHRjb25zdCByZXN1bHQ6IENvbGxlY3Rpb25NYXRjaFJlc3VsdCA9IHtmaXR0aW5nOiBbXSwgbm90Zml0dGluZzogW10sIG1heWJlOiBbXX07XG5cblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblxuXHRcdC8vIGNvbnNvbGUudGltZSgnZ2V0QnlGaXR0aW5nSXRlbScpO1xuXG5cdFx0Y29uc3QgcXVlcnlNYXRjaGVyID0gdGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgZmllbGRzLCBwYXJlbnQpO1xuXG5cdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGVudHJpZXNbZW50cnlJZF07XG5cdFx0XHRjb25zdCBtYXRjaFJlc3VsdCA9IHF1ZXJ5TWF0Y2hlci5tYXRjaFF1ZXJ5KGNvbGxlY3Rpb25FbnRyeS5xdWVyeS5vYmplY3QpO1xuXG5cdFx0XHQvLyBUT0RPOiBtYXliZT9cblx0XHRcdGlmIChtYXRjaFJlc3VsdCA9PT0gdHJ1ZSkgLy8gbWlnaHQgYWxzbyByZXR1cm4gJ21heWJlJ1xuXHRcdFx0XHRyZXN1bHQuZml0dGluZy5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0XHRlbHNlIGlmIChtYXRjaFJlc3VsdCA9PT0gQ09OU1RBTlRTLk1BWUJFKVxuXHRcdFx0XHRyZXN1bHQubWF5YmUucHVzaChjb2xsZWN0aW9uRW50cnkpO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRyZXN1bHQubm90Zml0dGluZy5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0fVxuXG5cdFx0Ly8gY29uc29sZS50aW1lRW5kKCdnZXRCeUZpdHRpbmdJdGVtJyk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0QnlRdWVyeSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBxdWVyeTogQ29sbGVjdGlvblF1ZXJ5KTogQ29sbGVjdGlvbkVudHJ5IHwgbnVsbCB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XG5cblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllcykge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gZW50cmllc1tlbnRyeUlkXTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5xdWVyeS5zdHJpbmcgPT09IHF1ZXJ5LnN0cmluZylcblx0XHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25FbnRyeTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGdldEJ5S2V5IChpdGVtVHlwZTogSXRlbVR5cGUsIGVudHJ5S2V5OiBzdHJpbmcpOiBDb2xsZWN0aW9uRW50cnlbXSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uRW50cnlbXSA9IFtdO1xuXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllcykge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gZW50cmllc1tlbnRyeUlkXTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zLmVudHJ5S2V5ID09PSBlbnRyeUtleSlcblx0XHRcdFx0cmVzdWx0LnB1c2goY29sbGVjdGlvbkVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0UmVzb3VyY2VCeUtleSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCByZXNvdXJjZUtleTogc3RyaW5nKTogQ29sbGVjdGlvblJlc291cmNlW10ge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xuXHRcdGNvbnN0IHJlc3VsdDogQ29sbGVjdGlvblJlc291cmNlW10gPSBbXTtcblxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXMpIHtcblx0XHRcdGNvbnN0IHJlc291cmNlcyA9IGVudHJpZXNbZW50cnlJZF0ucmVzb3VyY2VzO1xuXG5cdFx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc291cmNlcykge1xuXHRcdFx0XHRpZiAocmVzb3VyY2Uub3B0aW9ucy5yZXNvdXJjZUtleSA9PT0gcmVzb3VyY2VLZXkpXG5cdFx0XHRcdFx0cmVzdWx0LnB1c2gocmVzb3VyY2UpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cbn1cbiIsImltcG9ydCB7IGluc3RhbnRpYXRlT3B0aW9ucyB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdENvbHVtbk1hcCwgQXBpUmVxdWVzdENvbHVtbnMsIEVudHJ5UGFyZW50TnVsbCB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgSXRlbUVudHJ5T3B0aW9uc0ludGVyZmFjZSA9IFBhcnRpYWw8SXRlbUVudHJ5T3B0aW9ucz47XG5cbmV4cG9ydCBjbGFzcyBJdGVtRW50cnlPcHRpb25zIHtcblx0Y29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMgPSB0cnVlO1xuXHRwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCA9IG51bGw7XG5cdHRlbXBsYXRlT3B0aW9uczogYW55ID0ge307IC8vIFRPRE9cblx0dGVtcGxhdGVDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1uTWFwID0ge307XG5cdGRlZmVyUmVxdWVzdDogYm9vbGVhbiA9IGZhbHNlO1xuXHRpc0R1cGxpY2F0ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG5cdGNvbnN0cnVjdG9yICh2YWx1ZXM6IEl0ZW1FbnRyeU9wdGlvbnNJbnRlcmZhY2UpIHtcblx0XHRpbnN0YW50aWF0ZU9wdGlvbnModGhpcywgdmFsdWVzKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgaW5zdGFudGlhdGVPcHRpb25zIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vY29yZSc7XG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgT25DaGFuZ2VGdW5jdGlvbiB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgSXRlbVJlc291cmNlT3B0aW9uc0ludGVyZmFjZSA9IFBhcnRpYWw8SXRlbVJlc291cmNlT3B0aW9ucz47XG5cbmV4cG9ydCBjbGFzcyBJdGVtUmVzb3VyY2VPcHRpb25zIHtcblx0ZWRpdDogYm9vbGVhbiA9IGZhbHNlO1xuXHRvbkNoYW5nZTogT25DaGFuZ2VGdW5jdGlvbiA9IG5vb3A7XG5cdG9uRGVhY3RpdmF0ZTogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiB2b2lkID0gbm9vcDtcblxuXHRjb25zdHJ1Y3RvciAodmFsdWVzOiBJdGVtUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlKSB7XG5cdFx0aW5zdGFudGlhdGVPcHRpb25zKHRoaXMsIHZhbHVlcyk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtbkluZm8sIENvbHVtblNldCB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgSXRlbUVudHJ5RmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtcblx0Q29sdW1uRXhwYW5zaW9uUmVzdWx0LCBFbnRyeVBhcmVudE51bGwsIEZpZWxkTWFwLCBJdGVtRXJyb3IsIEl0ZW1JZCwgSXRlbUlkQ29udmVyc2lvbk1hcCwgSXRlbVR5cGUsIFByb21pc2VJbnRlcmZhY2Vcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgRGVmZXJyZWQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxubGV0IGN1cnJlbnRJZCA9IDA7XG5cbmV4cG9ydCBjbGFzcyBJdGVtRW50cnkge1xuXHRpZDogbnVtYmVyID0gKytjdXJyZW50SWQ7XG5cblx0cmVsb2FkUXVldWVkOiBib29sZWFuID0gZmFsc2U7XG5cdGRlZmVyUmVxdWVzdDogYm9vbGVhbiA9IGZhbHNlO1xuXHRkZWZlcnJlZD86IERlZmVycmVkPHRoaXM+O1xuXHRwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCA9IG51bGw7XG5cblx0aW5pdGlhbDogRmllbGRNYXA7XG5cdG1vZGlmaWVkOiBGaWVsZE1hcDtcblx0ZGVyaXZlZDogRmllbGRNYXA7XG5cblx0cmVzb3VyY2VzOiBJdGVtUmVzb3VyY2VbXSA9IFtdO1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3RvcnksXG5cdFx0cHVibGljIGl0ZW1UeXBlOiBzdHJpbmcsXG5cdFx0cHVibGljIGl0ZW1JZDogSXRlbUlkLFxuXHRcdHB1YmxpYyBjb2x1bW5zOiBDb2x1bW5TZXRcblx0KSB7XG5cdH1cblxuXHRxdWV1ZVJlbG9hZCAoKTogdGhpcyB7XG5cdFx0dGhpcy5yZWxvYWRRdWV1ZWQgPSB0cnVlO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRkZWZlciAoZGVmZXJSZXF1ZXN0OiBib29sZWFuID0gZmFsc2UpOiB0aGlzIHtcblx0XHR0aGlzLmRlZmVycmVkID0gdGhpcy5mYWN0b3J5LnByb21pc2VTZXJ2aWNlLmRlZmVyKCk7XG5cdFx0dGhpcy5kZWZlclJlcXVlc3QgPSBkZWZlclJlcXVlc3Q7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGdldFByb21pc2UgKCk6IFByb21pc2VJbnRlcmZhY2U8dGhpcz4ge1xuXHRcdGNvbnN0IGRlZmVycmVkID0gdGhpcy5kZWZlcnJlZDtcblxuXHRcdGlmIChkZWZlcnJlZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXMuZmFjdG9yeS5wcm9taXNlU2VydmljZS53aGVuKHRoaXMpO1xuXG5cdFx0cmV0dXJuIGRlZmVycmVkLnByb21pc2U7XG5cdH1cblxuXHRyZXNvbHZlICgpOiB0aGlzIHtcblx0XHRjb25zdCBkZWZlcnJlZCA9IHRoaXMuZGVmZXJyZWQ7XG5cblx0XHRpZiAoZGVmZXJyZWQgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0Ly8gdGhlIHJlc29sdmUgZnVuY3Rpb24gbWlnaHQgZGVmZXIgdGhlIGl0ZW0gYWdhaW4sIHNvIGRlbGV0ZSB0aGUgcHJvcGVydGllcyBmaXJzdFxuXHRcdGRlbGV0ZSB0aGlzLmRlZmVycmVkO1xuXHRcdGRlbGV0ZSB0aGlzLmRlZmVyUmVxdWVzdDtcblxuXHRcdGRlZmVycmVkLnJlc29sdmUodGhpcyk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHJlc29sdmVEZWZlcnJlZCAoaW5pdGlhbDogRmllbGRNYXAsIGRlcml2ZWQ6IEZpZWxkTWFwLCBjb2x1bW5zOiBDb2x1bW5TZXQpOiB0aGlzIHtcblx0XHR0aGlzLmNvbHVtbnMgPSBjb2x1bW5zO1xuXHRcdHRoaXMuc2V0RmllbGRzKGluaXRpYWwsIGRlcml2ZWQpO1xuXG5cdFx0cmV0dXJuIHRoaXMucmVzb2x2ZSgpO1xuXHR9XG5cblx0aXNEZWZlcnJlZCAoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZGVmZXJyZWQgIT09IHVuZGVmaW5lZDtcblx0fVxuXG5cdHJlamVjdCAoZXJyb3I6IEl0ZW1FcnJvciA9IHRoaXMuZmFjdG9yeS5pdGVtRW50cnlTZXJ2aWNlLmNyZWF0ZVVuZm91bmRSZW1vdGVJdGVtRXJyb3IoKSk6IHRoaXMge1xuXHRcdGNvbnN0IGRlZmVycmVkID0gdGhpcy5kZWZlcnJlZDtcblxuXHRcdGlmIChkZWZlcnJlZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHRkZWZlcnJlZC5yZWplY3QoZXJyb3IpO1xuXG5cdFx0ZGVsZXRlIHRoaXMuZGVmZXJyZWQ7XG5cdFx0ZGVsZXRlIHRoaXMuZGVmZXJSZXF1ZXN0O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRGaWVsZHMgKGluaXRpYWw6IEZpZWxkTWFwLCBkZXJpdmVkOiBGaWVsZE1hcCk6IHRoaXMge1xuXHRcdGNvbnN0IGFwaUZvcm1hdHRlciA9IHRoaXMuZmFjdG9yeS5hcGlGb3JtYXR0ZXI7XG5cdFx0Y29uc3QgZm9ybWF0dGVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5mb3JtYXR0ZWQ7XG5cblx0XHR0aGlzLmluaXRpYWwgPSBhcGlGb3JtYXR0ZXIuZm9ybWF0UmVzcG9uc2UoaW5pdGlhbCwgZm9ybWF0dGVkQ29sdW1ucy5tYWluKTtcblx0XHR0aGlzLmRlcml2ZWQgPSBhcGlGb3JtYXR0ZXIuZm9ybWF0UmVzcG9uc2UoZGVyaXZlZCwgZm9ybWF0dGVkQ29sdW1ucy5kZXJpdmVkKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Ly8gV2Ugc2hvdWxkIGNyZWF0ZSBhIGNvcHkgb2YgaW5pdGlhbCBoZXJlLCBiZWNhdXNlIGluIG1vc3QgaW5zdGFuY2VzIGl0IHdpbGwgYmUgYSB0ZW1wbGF0ZS5cblx0c2V0TG9jYWxGaWVsZHMgKFxuXHRcdGluaXRpYWxWYWx1ZXM6IEZpZWxkTWFwLFxuXHRcdGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAsXG5cdFx0Y29sdW1uczogQ29sdW1uU2V0ID0gdGhpcy5jb2x1bW5zXG5cdCk6IHRoaXMge1xuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XG5cdFx0Y29uc3QgaW5pdGlhbCA9IGZhY3RvcnkuaXRlbUVudHJ5U2VydmljZS5nZXRMb2NhbERlZmF1bHRWYWx1ZXMoKTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMubWFpbikge1xuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XG5cblx0XHRcdGluaXRpYWxbY29sdW1uSWRdID0gaW5pdGlhbFZhbHVlc1tjb2x1bW5JZF07XG5cdFx0fVxuXG5cdFx0dGhpcy5pbml0aWFsID0gZmFjdG9yeS5hcGlGb3JtYXR0ZXIuZm9ybWF0UmVzcG9uc2UoaW5pdGlhbCwgY29sdW1ucy5mb3JtYXR0ZWQubWFpbik7XG5cdFx0dGhpcy5kZXJpdmVkID0geydjcmVhdG9yPmRpc3BsYXluYW1lJzogZmFjdG9yeS5hdXRoSW50ZXJmYWNlLmdldFVzZXJEaXNwbGF5bmFtZSgpfTtcblxuXHRcdHJldHVybiB0aGlzLnVwZGF0ZUl0ZW1GaWVsZHMoY29udmVyc2lvbk1hcCk7XG5cdH1cblxuXHRjbG9uZSAoY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCA9IHt9KTogSXRlbUVudHJ5IHtcblx0XHRjb25zdCBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5O1xuXHRcdGNvbnN0IGFwaUZvcm1hdHRlciA9IGZhY3RvcnkuYXBpRm9ybWF0dGVyO1xuXHRcdGNvbnN0IGl0ZW1FbnRyeVNlcnZpY2UgPSBmYWN0b3J5Lml0ZW1FbnRyeVNlcnZpY2U7XG5cdFx0Y29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1ucztcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcblx0XHRjb25zdCBuZXdJdGVtSWQgPSBpdGVtRW50cnlTZXJ2aWNlLmV4cGFuZENvbnZlcnNpb25NYXAodGhpcywgY29udmVyc2lvbk1hcCk7XG5cblx0XHQvLyB3ZSdsbCBjb3B5IG1vZGlmaWVkIHRvIHJlc3VsdC5pbml0aWFsIChpbml0aWFsIG1heSBiZSBhIHRlbXBsYXRlKVxuXHRcdGNvbnN0IGNsb25lZEVudHJ5ID0gZmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRuZXdJdGVtSWQsXG5cdFx0XHRhcGlGb3JtYXR0ZXIuY29weUZpZWxkcyh0aGlzLmdldEZpZWxkcygpLCB7fSwgY29sdW1ucy5tYWluKSxcblx0XHRcdGFwaUZvcm1hdHRlci5jb3B5RmllbGRzKHRoaXMuZGVyaXZlZCwge30sIGNvbHVtbnMuZGVyaXZlZCksXG5cdFx0XHRjb2x1bW5zXG5cdFx0KTtcblxuXHRcdGNsb25lZEVudHJ5LnVwZGF0ZUl0ZW1GaWVsZHMoY29udmVyc2lvbk1hcCk7XG5cblx0XHRjbG9uZWRFbnRyeS5tb2RpZmllZCA9IGFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGNsb25lZEVudHJ5LmluaXRpYWwsIHt9LCBjb2x1bW5zLm1haW4pO1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdHJldHVybiBjbG9uZWRFbnRyeTtcblxuXHRcdGNvbnN0IHBhcmVudElkID0gaXRlbUVudHJ5U2VydmljZS5nZXRDb252ZXJzaW9uVmFsdWUocGFyZW50Lml0ZW1UeXBlLCBwYXJlbnQuaXRlbUlkLCBjb252ZXJzaW9uTWFwKTtcblxuXHRcdGNsb25lZEVudHJ5LnNldFBhcmVudChcblx0XHRcdHBhcmVudC5pdGVtVHlwZSxcblx0XHRcdHBhcmVudElkID09PSB1bmRlZmluZWQgPyBwYXJlbnQuaXRlbUlkIDogcGFyZW50SWRcblx0XHQpO1xuXG5cdFx0cmV0dXJuIGNsb25lZEVudHJ5O1xuXHR9XG5cblx0cmVzZXREZXJpdmVkIChjb2x1bW5JZHM6IHN0cmluZ1tdKTogdGhpcyB7XG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0XHRjb25zdCByb290Q29sdW1ucyA9IHRoaXMuY29sdW1ucy5yb290O1xuXHRcdGNvbnN0IGZpbHRlcmVkQ29sdW1uczogQ29sdW1uSW5mb1tdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiByb290Q29sdW1ucykge1xuXHRcdFx0aWYgKGNvbHVtbklkcy5pbmRleE9mKGNvbHVtbi5pZCkgIT09IC0xKVxuXHRcdFx0XHRmaWx0ZXJlZENvbHVtbnMucHVzaChjb2x1bW4pO1xuXHRcdH1cblxuXHRcdHJlc2V0RGVyaXZlZFJlY3Vyc2l2ZWx5KGZpbHRlcmVkQ29sdW1ucyk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHRcdGZ1bmN0aW9uIHJlc2V0RGVyaXZlZFJlY3Vyc2l2ZWx5IChjb2x1bW5zOiBDb2x1bW5JbmZvW10pIHtcblx0XHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdFx0aWYgKCFjb2x1bW4uaXNMZWFmKVxuXHRcdFx0XHRcdHJlc2V0RGVyaXZlZFJlY3Vyc2l2ZWx5KGNvbHVtbi5jaGlsZHJlbik7XG5cblx0XHRcdFx0ZGVsZXRlIHNlbGYuZGVyaXZlZFtjb2x1bW4ucGF0aF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Y2xlYXJSZXNvdXJjZXMgKCk6IHRoaXMge1xuXHRcdHRoaXMucmVzb3VyY2VzID0gW107XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGRlYWN0aXZhdGVSZXNvdXJjZXMgKCk6IHRoaXMge1xuXHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzOyAvLyBvbiBvZiB0aGUgZGVhY3RpdmF0ZSBjYWxsYmFja3MgbWlnaHQgY2FsbCBjbGVhclJlc291cmNlc1xuXG5cdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNvdXJjZXMpXG5cdFx0XHRyZXNvdXJjZS5kZWFjdGl2YXRlKCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGdldEZpZWxkcyAoKTogRmllbGRNYXAge1xuXHRcdGlmICh0aGlzLm1vZGlmaWVkICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5tb2RpZmllZDtcblxuXHRcdHJldHVybiB0aGlzLmluaXRpYWw7XG5cdH1cblxuXHQvLyBzaG91bGQgYmUgZmFzdFxuXHRleHBhbmQgKG1haW46IEZpZWxkTWFwLCBkZXJpdmVkOiBGaWVsZE1hcCwgY29sdW1uRXhwYW5zaW9uUmVzdWx0OiBDb2x1bW5FeHBhbnNpb25SZXN1bHQpOiB0aGlzIHtcblx0XHRjb25zdCBhcGlGb3JtYXR0ZXIgPSB0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyO1xuXHRcdGNvbnN0IGRpZmZlcmVuY2UgPSBjb2x1bW5FeHBhbnNpb25SZXN1bHQuZGlmZmVyZW5jZTtcblxuXHRcdHRoaXMuY29sdW1ucyA9IGNvbHVtbkV4cGFuc2lvblJlc3VsdC5tZXJnZWQ7XG5cblx0XHRhcGlGb3JtYXR0ZXIuZXhwYW5kUmVzcG9uc2UodGhpcy5pbml0aWFsLCBtYWluLCBkaWZmZXJlbmNlLm1haW4pO1xuXHRcdGFwaUZvcm1hdHRlci5leHBhbmRSZXNwb25zZSh0aGlzLmRlcml2ZWQsIGRlcml2ZWQsIGRpZmZlcmVuY2UuZGVyaXZlZCk7XG5cblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHRhcGlGb3JtYXR0ZXIuZXhwYW5kUmVzcG9uc2UodGhpcy5tb2RpZmllZCwgbWFpbiwgZGlmZmVyZW5jZS5tYWluKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZXhwYW5kTG9jYWwgKGNvbHVtbkV4cGFuc2lvblJlc3VsdDogQ29sdW1uRXhwYW5zaW9uUmVzdWx0KTogdGhpcyB7XG5cdFx0Y29uc3QgbWFpbkNvbHVtbnMgPSBjb2x1bW5FeHBhbnNpb25SZXN1bHQuZGlmZmVyZW5jZS5tYWluO1xuXG5cdFx0dGhpcy5jb2x1bW5zID0gY29sdW1uRXhwYW5zaW9uUmVzdWx0Lm1lcmdlZDtcblxuXHRcdGlmIChtYWluQ29sdW1ucy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdHRoaXMuc2V0TG9jYWxWYWx1ZXModGhpcy5pbml0aWFsLCBtYWluQ29sdW1ucyk7XG5cblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHR0aGlzLnNldExvY2FsVmFsdWVzKHRoaXMubW9kaWZpZWQsIG1haW5Db2x1bW5zKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHJpdmF0ZSBzZXRMb2NhbFZhbHVlcyAoZmllbGRzOiBGaWVsZE1hcCwgY29sdW1uczogQ29sdW1uSW5mb1tdKTogdm9pZCB7XG5cdFx0Y29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTtcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uLmlkO1xuXG5cdFx0XHRpZiAoZmllbGRzW2NvbHVtbklkXSAhPT0gdW5kZWZpbmVkKSAvLyBwYXJlbnQgY29sdW1ucyBtaWdodCBhbHNvIGJlIGluY2x1ZGVkIGluIHRoZSBkaWZmZXJlbmNlXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRjb25zdCBjb2x1bW5UeXBlID0gY29sdW1uLmFwaUNvbHVtbi50eXBlO1xuXG5cdFx0XHRmaWVsZHNbY29sdW1uSWRdID0gY29sdW1uVHlwZSA9PT0gJ2xpbmsnICYmIHBhcmVudCAhPT0gbnVsbCA/XG5cdFx0XHRcdHBhcmVudC5pdGVtSWQgOlxuXHRcdFx0XHRmYWN0b3J5LmFwaUZvcm1hdHRlci5nZXREZWZhdWx0VmFsdWUoY29sdW1uVHlwZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGUgaW5pdGlhbCwgbW9kaWZpZWQsIGRlcml2ZWQgcHJvcGVydGllcyBhcmUgYWxyZWFkeSBzZXQuIEl0IHdpbGwgdXBkYXRlIHRoZSB2YWx1ZXNcblx0ICogdGhlbXNlbHZlcyB0byBwcmVzZXJ2ZSByZWZlcmVuY2VzIGluIGV4aXN0aW5nIGl0ZW0gcmVzb3VyY2VzLlxuXHQgKi9cblx0dXBkYXRlRmllbGRzIChmaWVsZHM6IEZpZWxkTWFwLCBkZXJpdmVkOiBGaWVsZE1hcCB8IG51bGwgPSBudWxsLCBvdmVyd3JpdGU6IGJvb2xlYW4gPSB0cnVlKTogdGhpcyB7XG5cdFx0Y29uc3QgYXBpRm9ybWF0dGVyID0gdGhpcy5mYWN0b3J5LmFwaUZvcm1hdHRlcjtcblx0XHRjb25zdCBtYWluQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYWluO1xuXHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmluaXRpYWw7XG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLm1vZGlmaWVkO1xuXG5cdFx0Ly8gZm9yIHNvbWUgd2VpcmQgcmVhc29uIHRoaXMgZnVuY3Rpb24gaXMgbm90IGF0b21pYywgc28gb3ZlcndyaXRlIHRoZSB2YWx1ZXMgd2l0aCB0aGVpciBmb3JtYXR0ZWQgY291bnRlcnBhcnRzXG5cdFx0Ly8gaW1tZWRpYXRlbHlcblx0XHRpZiAobW9kaWZpZWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgbWFpbkNvbHVtbnMpIHtcblx0XHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XG5cdFx0XHRcdGNvbnN0IGNvbHVtblR5cGUgPSBjb2x1bW4uYXBpQ29sdW1uLnR5cGU7XG5cblx0XHRcdFx0aWYgKG92ZXJ3cml0ZSB8fCBhcGlGb3JtYXR0ZXIuY29tcGFyZUZpZWxkcyhjb2x1bW5UeXBlLCBpbml0aWFsW2NvbHVtbklkXSwgbW9kaWZpZWRbY29sdW1uSWRdKSlcblx0XHRcdFx0XHRtb2RpZmllZFtjb2x1bW5JZF0gPSBhcGlGb3JtYXR0ZXIuZm9ybWF0UmVzcG9uc2VWYWx1ZShjb2x1bW5UeXBlLCBmaWVsZHNbY29sdW1uSWRdKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBtYWluQ29sdW1ucykge1xuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XG5cblx0XHRcdGluaXRpYWxbY29sdW1uSWRdID0gYXBpRm9ybWF0dGVyLmZvcm1hdFJlc3BvbnNlVmFsdWUoY29sdW1uLmFwaUNvbHVtbi50eXBlLCBmaWVsZHNbY29sdW1uSWRdKTtcblx0XHR9XG5cblx0XHRpZiAoZGVyaXZlZCAhPT0gbnVsbClcblx0XHRcdHRoaXMuc2V0RGVyaXZlZChkZXJpdmVkKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHJpdmF0ZSB1cGRhdGVJdGVtVmFsdWVzIChmaWVsZHM6IEZpZWxkTWFwLCBpdGVtQ29sdW1uczogQ29sdW1uSW5mb1tdLCBjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwKTogdm9pZCB7XG5cdFx0Y29uc3QgaXRlbUVudHJ5U2VydmljZSA9IHRoaXMuZmFjdG9yeS5pdGVtRW50cnlTZXJ2aWNlO1xuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgaXRlbUNvbHVtbnMpIHtcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uLmlkO1xuXHRcdFx0Y29uc3QgYXBpQ29sdW1uID0gY29sdW1uLmFwaUNvbHVtbjtcblxuXHRcdFx0Ly8gVE9ETzogd2UgY2FuIHJlY29uc2lkZXIgdGhpcyBvbmNlIGFsbCBjb2x1bW5zIGFyZSByZXNwZWN0ZWQgZm9yIGxvY2FsIGl0ZW1zIFtSTTQtMTAzNzhdXG5cdFx0XHRsZXQgbmV3VmFsdWU7XG5cblx0XHRcdGlmIChhcGlDb2x1bW4udHlwZSA9PT0gJ2xpbmsnICYmIGZpZWxkc1tjb2x1bW5JZF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpZiAocGFyZW50ICE9PSBudWxsKVxuXHRcdFx0XHRcdG5ld1ZhbHVlID0gcGFyZW50Lml0ZW1JZDtcblx0XHRcdH0gZWxzZVxuXHRcdFx0XHRuZXdWYWx1ZSA9IGl0ZW1FbnRyeVNlcnZpY2UuZ2V0Q29udmVyc2lvblZhbHVlKGFwaUNvbHVtbi5pdGVtVHlwZSwgZmllbGRzW2NvbHVtbklkXSwgY29udmVyc2lvbk1hcCk7XG5cblx0XHRcdGlmIChuZXdWYWx1ZSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRmaWVsZHNbY29sdW1uSWRdID0gbmV3VmFsdWU7XG5cdFx0fVxuXHR9XG5cblx0dXBkYXRlSXRlbUZpZWxkcyAoY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCwgY29sdW1uczogQ29sdW1uU2V0ID0gdGhpcy5jb2x1bW5zKTogdGhpcyB7XG5cdFx0Y29uc3QgaXRlbUNvbHVtbnMgPSBjb2x1bW5zLml0ZW07XG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLm1vZGlmaWVkO1xuXG5cdFx0dGhpcy51cGRhdGVJdGVtVmFsdWVzKHRoaXMuaW5pdGlhbCwgaXRlbUNvbHVtbnMsIGNvbnZlcnNpb25NYXApO1xuXG5cdFx0aWYgKG1vZGlmaWVkID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdHRoaXMudXBkYXRlSXRlbVZhbHVlcyhtb2RpZmllZCwgaXRlbUNvbHVtbnMsIGNvbnZlcnNpb25NYXApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRmb3JtYXRSZXF1ZXN0ICgpOiBGaWVsZE1hcCB7XG5cdFx0Y29uc3QgYXBpRm9ybWF0dGVyID0gdGhpcy5mYWN0b3J5LmFwaUZvcm1hdHRlcjtcblx0XHRjb25zdCBtYWluQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYWluO1xuXG5cdFx0aWYgKHRoaXMuaXNMb2NhbCgpKVxuXHRcdFx0cmV0dXJuIGFwaUZvcm1hdHRlci5mb3JtYXRSZXF1ZXN0TG9jYWwodGhpcy5nZXRGaWVsZHMoKSwgbWFpbkNvbHVtbnMpO1xuXG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB7fTtcblxuXHRcdHJldHVybiBhcGlGb3JtYXR0ZXIuZm9ybWF0UmVxdWVzdCh0aGlzLmluaXRpYWwsIHRoaXMubW9kaWZpZWQsIG1haW5Db2x1bW5zKTtcblx0fVxuXG5cdHNldERpc3BsYXlOYW1lICgpOiB0aGlzIHtcblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHRjb25zdCByZXN1bHQgPSB0aGlzLmdldERpc3BsYXlOYW1lKCk7XG5cblx0XHRpZiAocmVzdWx0KVxuXHRcdFx0dGhpcy5tb2RpZmllZC5kaXNwbGF5bmFtZSA9IHJlc3VsdDtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Z2V0RGlzcGxheU5hbWUgKCk6IHN0cmluZyB7XG5cdFx0Y29uc3QgaXRlbUVudHJ5U2VydmljZSA9IHRoaXMuZmFjdG9yeS5pdGVtRW50cnlTZXJ2aWNlO1xuXHRcdGNvbnN0IGZpZWxkcyA9IHRoaXMuZ2V0RmllbGRzKCk7XG5cblx0XHRzd2l0Y2ggKHRoaXMuaXRlbVR5cGUpIHtcblx0XHRcdGNhc2UgJ0NvbnRhY3QnOlxuXHRcdFx0XHRyZXR1cm4gZmllbGRzLnR5cGUgPT09ICdiZWRyaWpmJyA/XG5cdFx0XHRcdFx0ZmllbGRzLmJlZHJpamYgOiBpdGVtRW50cnlTZXJ2aWNlLmdldEZ1bGxOYW1lKFxuXHRcdFx0XHRcdFx0ZmllbGRzLnZvb3JuYWFtLFxuXHRcdFx0XHRcdFx0ZmllbGRzLnR1c3NlbnZvZWdzZWwsXG5cdFx0XHRcdFx0XHRmaWVsZHMubmFhbVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRjYXNlICdNZWRld2Vya2VyJzpcblx0XHRcdGNhc2UgJ1BlcnNvbic6XG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnlTZXJ2aWNlLmdldEZ1bGxOYW1lKFxuXHRcdFx0XHRcdGZpZWxkcy52b29ybmFhbSxcblx0XHRcdFx0XHRmaWVsZHMudHVzc2Vudm9lZ3NlbCxcblx0XHRcdFx0XHRmaWVsZHMuYWNodGVybmFhbVxuXHRcdFx0XHQpO1xuXHRcdFx0Y2FzZSAnUmVwYXJhdGllJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuZGVyaXZlZFsnbWF0ZXJpYWFsPm5hYW0nXTsgLy8gVE9ETyFcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmaWVsZHNbaXRlbUVudHJ5U2VydmljZS5nZXRUaXRsZUZpZWxkKHRoaXMuaXRlbVR5cGUpXTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtCb29sZWFufSByZXR1cm5BbGwgUmV0dXJucyBhbGwgaW5pdGlhbCB2YWx1ZXMgaWYgdHJ1ZVxuXHQgKiBAcmV0dXJucyB7T2JqZWN0fVxuXHQgKi9cblx0Z2V0Q2hhbmdlcyAocmV0dXJuQWxsOiBib29sZWFuID0gZmFsc2UpIHtcblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkICYmICFyZXR1cm5BbGwpXG5cdFx0XHRyZXR1cm4gW107XG5cblx0XHRyZXR1cm4gdGhpcy5mYWN0b3J5LmFwaUZvcm1hdHRlci5nZXRDaGFuZ2VzKFxuXHRcdFx0dGhpcy5pbml0aWFsLFxuXHRcdFx0cmV0dXJuQWxsID8ge30gOiB0aGlzLm1vZGlmaWVkLFxuXHRcdFx0dGhpcy5jb2x1bW5zLm1haW5cblx0XHQpO1xuXHR9XG5cblx0aXNMb2NhbCAoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZmFjdG9yeS5rZXlTZXJ2aWNlLmlzTG9jYWxJZCh0aGlzLml0ZW1JZCk7XG5cdH1cblxuXHRpc0xvY2thYmxlICgpOiBib29sZWFuIHtcblx0XHRpZiAodGhpcy5pc0xvY2FsKCkpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRzd2l0Y2ggKHRoaXMuaXRlbVR5cGUpIHtcblx0XHRcdGNhc2UgJ1Byb2plY3QnOlxuXHRcdFx0Y2FzZSAnTWF0ZXJpYWFsJzpcblx0XHRcdGNhc2UgJ0NvbnRhY3QnOlxuXHRcdFx0Y2FzZSAnTWVkZXdlcmtlcic6XG5cdFx0XHRjYXNlICdWb2VydHVpZyc6XG5cdFx0XHRjYXNlICdUZW1wbGF0ZSc6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGhhc0NoYW5nZXMgKCk6IGJvb2xlYW4ge1xuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRyZXR1cm4gdGhpcy5mYWN0b3J5LmFwaUZvcm1hdHRlci5oYXNDaGFuZ2VzKFxuXHRcdFx0dGhpcy5pbml0aWFsLFxuXHRcdFx0dGhpcy5tb2RpZmllZCxcblx0XHRcdHRoaXMuY29sdW1ucy5tYWluXG5cdFx0KTtcblx0fVxuXG5cdHJlc2V0TW9kaWZpZWQgKCk6IHRoaXMge1xuXHRcdGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFpbjtcblxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdHRoaXMubW9kaWZpZWRbY29sdW1uLmlkXSA9IHRoaXMuZmFjdG9yeS5hcGlGb3JtYXR0ZXIuY2xvbmUoXG5cdFx0XHRcdGNvbHVtbi5hcGlDb2x1bW4udHlwZSxcblx0XHRcdFx0dGhpcy5pbml0aWFsW2NvbHVtbi5pZF1cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRJbml0aWFsICh2YWx1ZXM6IEZpZWxkTWFwLCBlbmFibGVDYWxsYmFja3M6IGJvb2xlYW4gPSBmYWxzZSk6IHRoaXMge1xuXHRcdGNvbnN0IGFwaUZvcm1hdHRlciA9IHRoaXMuZmFjdG9yeS5hcGlGb3JtYXR0ZXI7XG5cdFx0bGV0IHByZXZpb3VzO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB2YWx1ZXMpXG5cdFx0XHR0aGlzLmluaXRpYWxbY29sdW1uSWRdID0gdmFsdWVzW2NvbHVtbklkXTtcblxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmIChlbmFibGVDYWxsYmFja3MpXG5cdFx0XHRcdHRoaXMuY2FsbE9uQ2hhbmdlKGFwaUZvcm1hdHRlci5jb3B5RmllbGRzKHRoaXMuaW5pdGlhbCwge30sIHRoaXMuY29sdW1ucy5tYWluKSk7XG5cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdHByZXZpb3VzID0gYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHModGhpcy5tb2RpZmllZCwge30sIHRoaXMuY29sdW1ucy5tYWluKTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gdmFsdWVzKVxuXHRcdFx0dGhpcy5tb2RpZmllZFtjb2x1bW5JZF0gPSB2YWx1ZXNbY29sdW1uSWRdO1xuXG5cdFx0aWYgKGVuYWJsZUNhbGxiYWNrcylcblx0XHRcdHRoaXMuY2FsbE9uQ2hhbmdlKHByZXZpb3VzKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIERvZXMgYSBzaGFsbG93IGNvcHkgb2YgdmFsdWVzIVxuXHQgKi9cblx0c2V0TW9kaWZpZWQgKHZhbHVlcz86IEZpZWxkTWFwKTogdGhpcyB7XG5cdFx0Y29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTtcblx0XHRjb25zdCBhcGlGb3JtYXR0ZXIgPSBmYWN0b3J5LmFwaUZvcm1hdHRlcjtcblx0XHRjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xuXHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1ucyA9IGNvbHVtbnMucmVzcG9uc2VbdGhpcy5pdGVtVHlwZV07XG5cblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCByZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcblx0XHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmluaXRpYWw7XG5cdFx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMubW9kaWZpZWQgPSB0aGlzLmlzTG9jYWwoKSA/IGZhY3RvcnkuaXRlbUVudHJ5U2VydmljZS5nZXRMb2NhbERlZmF1bHRWYWx1ZXMoKSA6IHt9O1xuXG5cdFx0XHRpZiAodmFsdWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGluaXRpYWwsIG1vZGlmaWVkLCBjb2x1bW5zLm1haW4pO1xuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdGFwaUZvcm1hdHRlci5zaGFsbG93Q29weUZpZWxkcyh2YWx1ZXMsIGluaXRpYWwsIG1vZGlmaWVkLCBjb2x1bW5zLm1haW4pO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gdmFsdWVzKSB7XG5cdFx0XHRcdFx0aWYgKHJlc3BvbnNlQ29sdW1uc1tjb2x1bW5JZF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0Ly8gdG9kbzogZGV2IG1vZGUgY29uc3RhbnRcblx0XHRcdFx0XHRcdC8vIGlmIChERVZfTU9ERSlcblx0XHRcdFx0XHRcdC8vIFx0Y29uc29sZS53YXJuKCdzZXRNb2RpZmllZDogbm8gY29sdW1uIGZvdW5kIGZvcicsIGNvbHVtbklkKTtcblxuXHRcdFx0XHRcdFx0bW9kaWZpZWRbY29sdW1uSWRdID0gdmFsdWVzW2NvbHVtbklkXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNvdXJjZXMpXG5cdFx0XHRcdHJlc291cmNlLmZpZWxkcyA9IG1vZGlmaWVkO1xuXG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRpZiAodmFsdWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gdmFsdWVzKVxuXHRcdFx0dGhpcy5tb2RpZmllZFtjb2x1bW5JZF0gPSB2YWx1ZXNbY29sdW1uSWRdO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXREZXJpdmVkICh2YWx1ZXM6IEZpZWxkTWFwKTogdGhpcyB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gdmFsdWVzKVxuXHRcdFx0dGhpcy5kZXJpdmVkW2tleV0gPSB2YWx1ZXNba2V5XTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0UGFyZW50IChwYXJlbnRUeXBlOiBJdGVtVHlwZSwgcGFyZW50SWQ6IEl0ZW1JZCk6IHRoaXMge1xuXHRcdHRoaXMucGFyZW50ID0ge1xuXHRcdFx0aXRlbVR5cGU6IHBhcmVudFR5cGUsXG5cdFx0XHRpdGVtSWQ6IHBhcmVudElkXG5cdFx0fTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y2FsbE9uQ2hhbmdlIChwcmV2aW91cz86IEZpZWxkTWFwKTogdGhpcyB7XG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSB0aGlzLnJlc291cmNlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdGNvbnN0IGl0ZW1SZXNvdXJjZSA9IHRoaXMucmVzb3VyY2VzW2ldO1xuXG5cdFx0XHRpZiAoaXRlbVJlc291cmNlICE9PSBudWxsKVxuXHRcdFx0XHRpdGVtUmVzb3VyY2Uub3B0aW9ucy5vbkNoYW5nZShpdGVtUmVzb3VyY2UsIHByZXZpb3VzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHRvSlNPTiAoKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGlkOiB0aGlzLmlkLFxuXHRcdFx0cGFyZW50OiB0aGlzLnBhcmVudCxcblx0XHRcdGluaXRpYWw6IHRoaXMuaW5pdGlhbCxcblx0XHRcdG1vZGlmaWVkOiB0aGlzLm1vZGlmaWVkLFxuXHRcdFx0ZGVyaXZlZDogdGhpcy5kZXJpdmVkLFxuXHRcdFx0Y29sdW1uczogdGhpcy5jb2x1bW5zXG5cdFx0fTtcblx0fVxufVxuIiwiaW1wb3J0IHsgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2VPcHRpb25zIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IEZpZWxkTWFwLCBSZXNwb25zZUNvbHVtbiB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIEl0ZW1SZXNvdXJjZSB7XG5cdGNvbHVtbnM6IHsgW2NvbHVtbklkOiBzdHJpbmddOiBSZXNwb25zZUNvbHVtbiB9O1xuXHRmaWVsZHM6IEZpZWxkTWFwO1xuXHRkZXJpdmVkOiBGaWVsZE1hcDtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHVibGljIGVudHJ5OiBJdGVtRW50cnksXG5cdFx0cHVibGljIG9wdGlvbnM6IEl0ZW1SZXNvdXJjZU9wdGlvbnMsXG5cdFx0cHJvdGVjdGVkIHJlYWRvbmx5IF9pc05ldzogYm9vbGVhbiA9IGZhbHNlXG5cdCkge1xuXHRcdHRoaXMuZGVyaXZlZCA9IGVudHJ5LmRlcml2ZWQ7XG5cdFx0dGhpcy5jb2x1bW5zID0gZW50cnkuY29sdW1ucy5yZXNwb25zZVtlbnRyeS5jb2x1bW5zLml0ZW1UeXBlXTtcblxuXHRcdGVudHJ5LnJlc291cmNlcy5wdXNoKHRoaXMpO1xuXHR9XG5cblx0aXNOZXcgKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLl9pc05ldztcblx0fVxuXG5cdGlzTG9jYWwgKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmVudHJ5LmlzTG9jYWwoKTtcblx0fVxuXG5cdGNsZWFyUmVzb3VyY2UgKCk6IHZvaWQge1xuXHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMuZW50cnkucmVzb3VyY2VzO1xuXHRcdGNvbnN0IGluZGV4ID0gcmVzb3VyY2VzLmluZGV4T2YodGhpcyk7XG5cblx0XHRpZiAoaW5kZXggIT09IC0xKVxuXHRcdFx0cmVzb3VyY2VzLnNwbGljZShpbmRleCwgMSk7XG5cdH1cblxuXHRkZWFjdGl2YXRlICgpOiB2b2lkIHtcblx0XHR0aGlzLm9wdGlvbnMub25EZWFjdGl2YXRlKHRoaXMuZW50cnkpO1xuXHR9XG5cblx0dG9KU09OICgpIHtcblx0XHRjb25zdCBjb2x1bW5JZHM6IHN0cmluZ1tdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHRoaXMuY29sdW1ucylcblx0XHRcdGNvbHVtbklkcy5wdXNoKGNvbHVtbklkKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRjb2x1bW5zOiBjb2x1bW5JZHMsXG5cdFx0XHRmaWVsZHM6IHRoaXMuZmllbGRzLFxuXHRcdFx0ZGVyaXZlZDogdGhpcy5kZXJpdmVkLFxuXHRcdFx0ZW50cnk6IHRoaXMuZW50cnlcblx0XHR9O1xuXHR9XG59XG4iLCJpbXBvcnQgeyBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSwgSXRlbVJlc291cmNlT3B0aW9ucyB9IGZyb20gJy4uL21vZGVscyc7XG5cbmV4cG9ydCBjbGFzcyBWaWV3UmVzb3VyY2UgZXh0ZW5kcyBJdGVtUmVzb3VyY2Uge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0ZW50cnk6IEl0ZW1FbnRyeSxcblx0XHRvcHRpb25zOiBJdGVtUmVzb3VyY2VPcHRpb25zLFxuXHRcdGlzTmV3PzogYm9vbGVhblxuXHQpIHtcblx0XHRzdXBlcihlbnRyeSwgb3B0aW9ucywgaXNOZXcpO1xuXG5cdFx0dGhpcy5maWVsZHMgPSBlbnRyeS5tb2RpZmllZCA9PT0gdW5kZWZpbmVkID9cblx0XHRcdGVudHJ5LmluaXRpYWwgOiBlbnRyeS5tb2RpZmllZDtcblx0fVxufVxuIiwiaW1wb3J0IHsgY3JlYXRlUGF0aCB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgSXRlbVJlc291cmNlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSwgSXRlbVJlc291cmNlT3B0aW9ucyB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBGaWVsZE1hcCwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIEVkaXRSZXNvdXJjZSBleHRlbmRzIEl0ZW1SZXNvdXJjZSB7XG5cdGxvY2FsQ29waWVzOiBGaWVsZE1hcFtdID0gW107XG5cdHRyYW5zYWN0aW9uczogbnVtYmVyID0gMDtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBmYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdGVudHJ5OiBJdGVtRW50cnksXG5cdFx0b3B0aW9uczogSXRlbVJlc291cmNlT3B0aW9ucyxcblx0XHRpc05ldz86IGJvb2xlYW5cblx0KSB7XG5cdFx0c3VwZXIoZW50cnksIG9wdGlvbnMsIGlzTmV3KTtcblxuXHRcdGVudHJ5LnNldE1vZGlmaWVkKCk7XG5cblx0XHR0aGlzLmZpZWxkcyA9IGVudHJ5Lm1vZGlmaWVkO1xuXHR9XG5cblx0aXNOZXcgKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLl9pc05ldyAmJiB0aGlzLnRyYW5zYWN0aW9ucyA9PT0gMDtcblx0fVxuXG5cdHN0YXJ0ICgpOiB0aGlzIHtcblx0XHRpZiAodGhpcy5sb2NhbENvcGllcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0dGhpcy5sb2NhbENvcGllcyA9IFtdO1xuXG5cdFx0dGhpcy5sb2NhbENvcGllcy5wdXNoKHRoaXMuY29weUZpZWxkcygpKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cm9sbGJhY2sgKCk6IHRoaXMge1xuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuZW50cnk7XG5cblx0XHR0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoPEZpZWxkTWFwPiB0aGlzLmxvY2FsQ29waWVzLnBvcCgpLCBpdGVtRW50cnkubW9kaWZpZWQsIGl0ZW1FbnRyeS5jb2x1bW5zLm1haW4pO1xuXG5cdFx0aWYgKHRoaXMuaXNOZXcoKSAmJiB0aGlzLmxvY2FsQ29waWVzLmxlbmd0aCA9PT0gMClcblx0XHRcdHRoaXMuZGVhY3RpdmF0ZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjb21taXQgKGNhbGxPbkNoYW5nZTogYm9vbGVhbiA9IHRydWUpOiB0aGlzIHtcblx0XHRjb25zdCBwcmV2aW91cyA9IDxGaWVsZE1hcD4gdGhpcy5sb2NhbENvcGllcy5wb3AoKTtcblxuXHRcdGlmIChjYWxsT25DaGFuZ2UpXG5cdFx0XHR0aGlzLmNhbGxPbkNoYW5nZShwcmV2aW91cyk7XG5cblx0XHR0aGlzLnRyYW5zYWN0aW9ucysrOyAvLyBjb21wbGV0ZWQgdHJhbnNhY3Rpb25zXG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGdldExvY2FsQ29weSAoKTogRmllbGRNYXAgfCBudWxsIHtcblx0XHRjb25zdCBsb2NhbENvcGllcyA9IHRoaXMubG9jYWxDb3BpZXM7XG5cblx0XHRpZiAobG9jYWxDb3BpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0aWYgKGxvY2FsQ29waWVzLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0cmV0dXJuIGxvY2FsQ29waWVzW2xvY2FsQ29waWVzLmxlbmd0aCAtIDFdO1xuXHR9XG5cblx0Y29weUZpZWxkcyAoZGVzdGluYXRpb246IEZpZWxkTWFwID0ge30pOiBGaWVsZE1hcCB7XG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyeTtcblxuXHRcdHJldHVybiB0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoaXRlbUVudHJ5Lm1vZGlmaWVkLCBkZXN0aW5hdGlvbiwgaXRlbUVudHJ5LmNvbHVtbnMubWFpbik7XG5cdH1cblxuXHRzZXRGaWVsZHMgKHZhbHVlczogRmllbGRNYXAsIGNhbGxPbkNoYW5nZTogYm9vbGVhbiA9IHRydWUpOiB0aGlzIHtcblx0XHRjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xuXHRcdGNvbnN0IGZpZWxkcyA9IHRoaXMuZmllbGRzO1xuXHRcdGxldCBoYXNDaGFuZ2VzID0gZmFsc2U7XG5cdFx0bGV0IHByZXZpb3VzO1xuXG5cdFx0aWYgKGNhbGxPbkNoYW5nZSlcblx0XHRcdHByZXZpb3VzID0gdGhpcy5jb3B5RmllbGRzKCk7XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHZhbHVlcykge1xuXHRcdFx0Y29uc3QgY29sdW1uID0gY29sdW1uc1tjb2x1bW5JZF07XG5cblx0XHRcdGlmIChjb2x1bW4gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25zb2xlLndhcm4oJ3NldEZpZWxkczogbm8gY29sdW1uIGZvdW5kIGZvcicsIGNvbHVtbklkKTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyLmNvbXBhcmVGaWVsZHMoY29sdW1uLnR5cGUsIGZpZWxkc1tjb2x1bW5JZF0sIHZhbHVlc1tjb2x1bW5JZF0pKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0ZmllbGRzW2NvbHVtbklkXSA9IHZhbHVlc1tjb2x1bW5JZF07XG5cdFx0XHRoYXNDaGFuZ2VzID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoY2FsbE9uQ2hhbmdlICYmIGhhc0NoYW5nZXMpXG5cdFx0XHR0aGlzLmNhbGxPbkNoYW5nZShwcmV2aW91cyk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNhbGxPbkNoYW5nZSAocHJldmlvdXM/OiBGaWVsZE1hcCk6IHRoaXMge1xuXHRcdHRoaXMuZW50cnkuY2FsbE9uQ2hhbmdlKHByZXZpb3VzKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2F2ZSAocGFyYW1ldGVycz86IGFueSk6IFByb21pc2VJbnRlcmZhY2U8dGhpcz4ge1xuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyeTtcblx0XHRjb25zdCBwYXJhbWV0ZXJNYXAgPSB7fTtcblxuXHRcdGlmIChwYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNyZWF0ZVBhdGgoXG5cdFx0XHRcdHBhcmFtZXRlck1hcCxcblx0XHRcdFx0W2l0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXG5cdFx0XHRcdFt7fSwgcGFyYW1ldGVyc11cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIChcblx0XHRcdGl0ZW1FbnRyeS5pc0xvY2thYmxlKCkgP1xuXHRcdFx0XHRmYWN0b3J5LmxvY2tTZXJ2aWNlLmZldGNoTG9jayhpdGVtRW50cnkpIDpcblx0XHRcdFx0ZmFjdG9yeS5wcm9taXNlU2VydmljZS53aGVuKClcblx0XHQpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdC8vIGFkZFRvQ29sbGVjdGlvbnMgaXMgY2FsbGVkIGluIGNoYW5nZXNQcm9jZXNzb3Jcblx0XHRcdFx0cmV0dXJuIGZhY3RvcnkuY2hhbmdlc1Byb2Nlc3Nvci5leGVjdXRlKFtpdGVtRW50cnldLCBbXSwgcGFyYW1ldGVyTWFwKTtcblx0XHRcdH0sXG5cdFx0XHRmYWN0b3J5LmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdGZhY3RvcnkuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IGluc3RhbnRpYXRlT3B0aW9ucyB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQXBpUXVlcnksIEFwaVJlcXVlc3RDb2x1bW5zLCBBcGlSZXF1ZXN0TGltaXQsIEVudHJ5UGFyZW50TnVsbCB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgQ29sbGVjdGlvbkVudHJ5T3B0aW9uc0ludGVyZmFjZSA9IFBhcnRpYWw8Q29sbGVjdGlvbkVudHJ5T3B0aW9ucz47XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRW50cnlPcHRpb25zIHtcblx0Y29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMgPSBbXTtcblx0cXVlcnk6IEFwaVF1ZXJ5IHwgbnVsbCA9IG51bGw7XG5cdHF1ZXJ5UGFyYW1zOiBhbnkgPSB7fTsgLy8gVE9ET1xuXHRwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCA9IG51bGw7XG5cdGRlZmVyUmVxdWVzdDogYm9vbGVhbiA9IGZhbHNlO1xuXHRsaW1pdDogQXBpUmVxdWVzdExpbWl0IHwgbnVsbCA9IG51bGw7XG5cdGVudHJ5S2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuXHRjb25zdHJ1Y3RvciAodmFsdWVzOiBDb2xsZWN0aW9uRW50cnlPcHRpb25zSW50ZXJmYWNlKSB7XG5cdFx0aW5zdGFudGlhdGVPcHRpb25zKHRoaXMsIHZhbHVlcyk7XG5cdH1cbn1cbiIsImltcG9ydCB7IGluc3RhbnRpYXRlT3B0aW9ucyB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4uL2NvcmUnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IENvbnZlcnNpb25NYXAsIE9uQ2hhbmdlRnVuY3Rpb24gfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCB0eXBlIENvbGxlY3Rpb25SZXNvdXJjZUNhbGxiYWNrID0gKFxuXHRpdGVtUmVzb3VyY2VzOiBJdGVtUmVzb3VyY2VbXSxcblx0Y29sbGVjdGlvblJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2VcbikgPT4gdm9pZDtcblxuZXhwb3J0IHR5cGUgQ29sbGVjdGlvblJlc291cmNlSW5pdGlhbENhbGxiYWNrID0gKFxuXHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXG5cdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5XG4pID0+IHZvaWQ7XG5cbmV4cG9ydCB0eXBlIE9uSXRlbXNDcmVhdGVkQ2FsbGJhY2sgPSAoY29udmVyc2lvbk1hcDogQ29udmVyc2lvbk1hcCkgPT4gdm9pZDtcblxuZXhwb3J0IHR5cGUgQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZSA9IFBhcnRpYWw8Q29sbGVjdGlvblJlc291cmNlT3B0aW9ucz47XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zIHtcblx0ZWRpdEl0ZW1zOiBib29sZWFuID0gZmFsc2U7XG5cdGVkaXRDb2xsZWN0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cdG1vZEluc3RhbnQ6IGJvb2xlYW4gPSBmYWxzZTtcblx0ZW5hYmxlU2F2ZTogYm9vbGVhbiA9IHRydWU7XG5cdG9uSXRlbXNDcmVhdGVkOiBPbkl0ZW1zQ3JlYXRlZENhbGxiYWNrID0gbm9vcDtcblx0b25DaGFuZ2U6IE9uQ2hhbmdlRnVuY3Rpb24gPSBub29wO1xuXHRvbkFkZDogQ29sbGVjdGlvblJlc291cmNlQ2FsbGJhY2sgPSBub29wO1xuXHRvblJlbW92ZTogQ29sbGVjdGlvblJlc291cmNlQ2FsbGJhY2sgPSBub29wO1xuXHRvbkFkZEluaXRpYWw6IENvbGxlY3Rpb25SZXNvdXJjZUluaXRpYWxDYWxsYmFjayA9IG5vb3A7XG5cdG9uUmVtb3ZlSW5pdGlhbDogQ29sbGVjdGlvblJlc291cmNlSW5pdGlhbENhbGxiYWNrID0gbm9vcDtcblx0cmVzb3VyY2VLZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXHRjbGVhck9uVGFiQ2hhbmdlOiBib29sZWFuID0gdHJ1ZTtcblx0Y2xlYXJPblN1YlRhYkNoYW5nZTogYm9vbGVhbiA9IHRydWU7XG5cdGN1c3RvbTogYW55ID0gbnVsbDtcblxuXHRjb25zdHJ1Y3RvciAodmFsdWVzOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlKSB7XG5cdFx0aW5zdGFudGlhdGVPcHRpb25zKHRoaXMsIHZhbHVlcyk7XG5cdH1cbn1cbiIsImltcG9ydCB7XG5cdEJhdGNoU3RhdHVzLCBDb2x1bW5FeHBhbnNpb24sIENvbHVtbkluZm8sIENvbHVtblNldCwgaW5BcnJheSwgSXRlbUNhY2hlXG59IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5RmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQge1xuXHRDb2xsZWN0aW9uRWRpdFJlc291cmNlLFxuXHRDb2xsZWN0aW9uRW50cnlPcHRpb25zLFxuXHRDb2xsZWN0aW9uUmVzb3VyY2UsIENvbGxlY3Rpb25WaWV3UmVzb3VyY2UsXG5cdEl0ZW1FbnRyeSxcblx0VGVtcGxhdGUsXG5cdFZpZXdSZXNvdXJjZVxufSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtcblx0QXBpUmVxdWVzdENvbHVtbnMsIENvbGxlY3Rpb25RdWVyeSwgQ29udmVyc2lvbk1hcCxcblx0RW50cnlQYXJlbnROdWxsLFxuXHRGaWVsZE1hcCxcblx0SXRlbUlkLFxuXHRJdGVtSWRDb252ZXJzaW9uTWFwLFxuXHRJdGVtVHlwZSxcblx0UHJvbWlzZUludGVyZmFjZSxcblx0UXVlcnlDYWxsYmFja1xufSBmcm9tICcuLi90eXBlcyc7XG5cbmxldCBjdXJyZW50SWQgPSAwO1xuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkVudHJ5IHtcblx0aWQ6IG51bWJlciA9IGN1cnJlbnRJZCsrO1xuXHRxdWVyeTogQ29sbGVjdGlvblF1ZXJ5O1xuXHRjb2x1bW5zOiBDb2x1bW5TZXQ7XG5cdHRlbXBsYXRlQ29sdW1uczogQ29sdW1uU2V0IHwgbnVsbCA9IG51bGw7XG5cblx0cGFyZW50OiBFbnRyeVBhcmVudE51bGwgPSBudWxsO1xuXG5cdGluaXRpYWw6IEl0ZW1FbnRyeVtdID0gW107XG5cdGl0ZW1zOiBJdGVtRW50cnlbXSA9IFtdO1xuXG5cdHJlc291cmNlczogQXJyYXk8Q29sbGVjdGlvblZpZXdSZXNvdXJjZSB8IENvbGxlY3Rpb25FZGl0UmVzb3VyY2U+ID0gW107XG5cdGRlZmVycmVkOiBhbnk7XG5cdHByb21pc2U6IFByb21pc2VJbnRlcmZhY2U8dGhpcz47XG5cdHJlbG9hZFF1ZXVlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG5cdGhhc0VkaXRSZXNvdXJjZXMgPSBmYWxzZTtcblx0aGFzSXRlbUVkaXRSZXNvdXJjZXMgPSBmYWxzZTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBmYWN0b3J5OiBDb2xsZWN0aW9uRW50cnlGYWN0b3J5LFxuXHRcdHB1YmxpYyBpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cHVibGljIG9wdGlvbnM6IENvbGxlY3Rpb25FbnRyeU9wdGlvbnNcblx0KSB7XG5cdFx0dGhpcy5wYXJlbnQgPSBvcHRpb25zLnBhcmVudDtcblx0XHR0aGlzLnF1ZXJ5ID0gZmFjdG9yeS5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNyZWF0ZVF1ZXJ5KG9wdGlvbnMpO1xuXHRcdHRoaXMuY29sdW1ucyA9IGZhY3RvcnkuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3RTdHViKGl0ZW1UeXBlLCBvcHRpb25zLmNvbHVtbnMpO1xuXG5cdFx0dGhpcy5kZWZlcigpO1xuXHR9XG5cblx0ZGVmZXIgKCk6IHRoaXMge1xuXHRcdGlmICh0aGlzLmlzRGVmZXJyZWQoKSlcblx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0dGhpcy5kZWZlcnJlZCA9IHRoaXMuZmFjdG9yeS5wcm9taXNlU2VydmljZS5kZWZlcigpO1xuXHRcdHRoaXMucHJvbWlzZSA9IHRoaXMuZGVmZXJyZWQucHJvbWlzZTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0aXNEZWZlcnJlZCAoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZSAhPT0gdW5kZWZpbmVkO1xuXHR9XG5cblx0X3Jlc29sdmUgKCk6IHRoaXMge1xuXHRcdGNvbnN0IGRlZmVycmVkID0gdGhpcy5kZWZlcnJlZDtcblxuXHRcdGRlbGV0ZSB0aGlzLmRlZmVycmVkO1xuXHRcdGRlbGV0ZSB0aGlzLnByb21pc2U7XG5cblx0XHRkZWZlcnJlZC5yZXNvbHZlKHRoaXMpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRyZXNvbHZlIChpdGVtRW50cnlDb21wb3VuZDoge2NvbHVtbnM6IENvbHVtblNldCwgaW5pdGlhbDogSXRlbUVudHJ5W10sIG1vZGlmaWVkPzogSXRlbUVudHJ5W119KTogdGhpcyB7XG5cdFx0Y29uc3Qge2luaXRpYWwsIG1vZGlmaWVkfSA9IGl0ZW1FbnRyeUNvbXBvdW5kO1xuXG5cdFx0dGhpcy5jb2x1bW5zID0gaXRlbUVudHJ5Q29tcG91bmQuY29sdW1ucztcblx0XHR0aGlzLmluaXRpYWwgPSBpbml0aWFsO1xuXHRcdHRoaXMuaXRlbXMgPSBtb2RpZmllZCAhPT0gdW5kZWZpbmVkID8gbW9kaWZpZWQgOiBpbml0aWFsLnNsaWNlKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5fcmVzb2x2ZSgpO1xuXHR9XG5cblx0aXNMb2NhbCAoKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG5cblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0cmV0dXJuIHRoaXMuZmFjdG9yeS5rZXlTZXJ2aWNlLmlzTG9jYWxJZChwYXJlbnQuaXRlbUlkKTtcblx0fVxuXG5cdG1hdGNoUGFyZW50IChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG5cblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0Ly8gPT0gdG8gY29tcGFyZSBpdGVtSWRzXG5cdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcblx0XHRyZXR1cm4gcGFyZW50Lml0ZW1UeXBlID09PSBpdGVtVHlwZSAmJiBwYXJlbnQuaXRlbUlkID09IGl0ZW1JZDtcblx0fVxuXG5cdGZvckVhY2ggKGNhbGxiYWNrOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IHZvaWQpOiB2b2lkIHtcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XG5cblx0XHRmb3IgKGNvbnN0IG1vZCBvZiBtb2RpZmllZClcblx0XHRcdGNhbGxiYWNrKG1vZCk7XG5cdH1cblxuXHRnZXRJdGVtQnlJZCAoaXRlbUlkOiBJdGVtSWQpOiBJdGVtRW50cnkgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIG1vZGlmaWVkKSB7XG5cdFx0XHRpZiAoaXRlbUVudHJ5Lml0ZW1JZCA9PT0gaXRlbUlkKVxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5O1xuXHRcdH1cblxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRnZXRJZEFycmF5IChhY2N1bXVsYXRvcjogSXRlbUlkW10gPSBbXSk6IEl0ZW1JZFtdIHtcblx0XHRyZXR1cm4gdGhpcy5mYWN0b3J5LmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuZ2V0SWRBcnJheSh0aGlzLml0ZW1zLCBhY2N1bXVsYXRvcik7XG5cdH1cblxuXHQvLyBzaG91bGQgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHJlc29sdmVEZXJpdmVkXG5cdGNyZWF0ZUl0ZW1zICh2YWx1ZXNBcnJheTogRmllbGRNYXBbXSk6IFByb21pc2VJbnRlcmZhY2U8SXRlbUVudHJ5W10+IHtcblx0XHRjb25zdCBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5O1xuXHRcdGNvbnN0IGNvbHVtblNldCA9IHRoaXMuY29sdW1ucztcblx0XHRsZXQgdGVtcGxhdGU6IFRlbXBsYXRlO1xuXG5cdFx0cmV0dXJuIGZhY3RvcnkuaXRlbUhhbmRsZXIuZmV0Y2hUZW1wbGF0ZSh0aGlzLml0ZW1UeXBlKS50aGVuKFxuXHRcdFx0KHRlbXBsYXRlSW5zdGFuY2U6IFRlbXBsYXRlKSA9PiB7XG5cdFx0XHRcdHRlbXBsYXRlID0gdGVtcGxhdGVJbnN0YW5jZTtcblxuXHRcdFx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVtdID0gW107XG5cblx0XHRcdFx0aWYgKHRoaXMudGVtcGxhdGVDb2x1bW5zID09PSBudWxsKSB7XG5cdFx0XHRcdFx0dGhpcy50ZW1wbGF0ZUNvbHVtbnMgPSB0ZW1wbGF0ZS5jb2x1bW5zLm1lcmdlKGNvbHVtblNldCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKGNvbnN0IHZhbHVlcyBvZiB2YWx1ZXNBcnJheSkge1xuXHRcdFx0XHRcdHJlc3VsdC5wdXNoKFxuXHRcdFx0XHRcdFx0ZmFjdG9yeS5pdGVtRW50cnlGYWN0b3J5LmNvbnN0cnVjdExvY2FsKFxuXHRcdFx0XHRcdFx0XHRmYWN0b3J5LmtleVNlcnZpY2UuZ2V0TG9jYWxJZCgpLFxuXHRcdFx0XHRcdFx0XHR0ZW1wbGF0ZSxcblx0XHRcdFx0XHRcdFx0dmFsdWVzLFxuXHRcdFx0XHRcdFx0XHR7fSxcblx0XHRcdFx0XHRcdFx0dGhpcy5wYXJlbnQsXG5cdFx0XHRcdFx0XHRcdHRoaXMudGVtcGxhdGVDb2x1bW5zXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cblx0XHRcdH0sXG5cdFx0XHRmYWN0b3J5LmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cmVzb2x2ZURlcml2ZWRWYWx1ZXMgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgbG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZSk6IFByb21pc2VJbnRlcmZhY2U8SXRlbUVudHJ5W10+IHtcblx0XHRyZXR1cm4gdGhpcy5mYWN0b3J5Lml0ZW1IYW5kbGVyLnJlc29sdmVEZXJpdmVkVmFsdWVzKGl0ZW1FbnRyaWVzLCB0aGlzLmNvbHVtbnMucm9vdCwgbG9jYWxJdGVtQ2FjaGUpO1xuXHR9XG5cblx0YWRkSXRlbXM8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZT4gKFxuXHRcdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcblx0XHRyZXN1bHRSZXNvdXJjZTogVSxcblx0XHR1cGRhdGVJbml0aWFsPzogYm9vbGVhbixcblx0XHRjYWxsT25BZGQ/OiBib29sZWFuLFxuXHRcdGNhbGxPbkFjdGl2YXRlPzogYm9vbGVhblxuXHQpOiBVWydpdGVtcyddO1xuXG5cdGFkZEl0ZW1zIChcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXG5cdFx0cmVzdWx0UmVzb3VyY2U/OiBudWxsLFxuXHRcdHVwZGF0ZUluaXRpYWw/OiBib29sZWFuLFxuXHRcdGNhbGxPbkFkZD86IGJvb2xlYW4sXG5cdFx0Y2FsbE9uQWN0aXZhdGU/OiBib29sZWFuXG5cdCk6IG51bGw7XG5cblx0YWRkSXRlbXM8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZT4gKFxuXHRcdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcblx0XHRyZXN1bHRSZXNvdXJjZT86IFUgfCBudWxsLFxuXHRcdHVwZGF0ZUluaXRpYWw/OiBib29sZWFuLFxuXHRcdGNhbGxPbkFkZD86IGJvb2xlYW4sXG5cdFx0Y2FsbE9uQWN0aXZhdGU/OiBib29sZWFuXG5cdCk6IFVbJ2l0ZW1zJ10gfCBudWxsO1xuXG5cdGFkZEl0ZW1zPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U+IChcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXG5cdFx0cmVzdWx0UmVzb3VyY2U/OiBVIHwgbnVsbCxcblx0XHR1cGRhdGVJbml0aWFsPzogYm9vbGVhbixcblx0XHRjYWxsT25BZGQ/OiBib29sZWFuLFxuXHRcdGNhbGxPbkFjdGl2YXRlPzogYm9vbGVhblxuXHQpOiBVWydpdGVtcyddIHwgbnVsbCB7XG5cdFx0Ly8gbG9jYWwgZW50cnkgbWlnaHQgYmUgYWRkZWQgbXVsdGlwbGUgdGltZXMgKGV4dGVuZD8pXG5cdFx0aWYgKGl0ZW1FbnRyaWVzLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiBbXTtcblxuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcblx0XHRjb25zdCBwYXJlbnRDb2x1bW4gPSB0aGlzLmNvbHVtbnMubGluaztcblx0XHRjb25zdCBlbnRyaWVzQWRkZWRUb0luaXRpYWw6IEl0ZW1FbnRyeVtdID0gW107XG5cdFx0Y29uc3QgZW50cmllc0FkZGVkVG9Nb2RpZmllZDogSXRlbUVudHJ5W10gPSBbXTtcblxuXHRcdGlmICh1cGRhdGVJbml0aWFsKSB7XG5cdFx0XHRjb25zdCBpbml0aWFsID0gdGhpcy5pbml0aWFsO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0XHQvLyB3aGVuIHNhdmluZywgaXRlbXMgdGhhdCBtaWdodCBhbHJlYWR5IGJlIGluIG1vZGlmaWVkIGFyZSBhZGRlZCB0byBpbml0aWFsXG5cdFx0XHRcdGlmIChpbml0aWFsLmluZGV4T2YoaXRlbUVudHJ5KSA9PT0gLTEpIHtcblx0XHRcdFx0XHRpbml0aWFsLnB1c2goaXRlbUVudHJ5KTtcblx0XHRcdFx0XHRlbnRyaWVzQWRkZWRUb0luaXRpYWwucHVzaChpdGVtRW50cnkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdGlmIChtb2RpZmllZC5pbmRleE9mKGl0ZW1FbnRyeSkgPT09IC0xKSB7XG5cdFx0XHRcdGlmIChwYXJlbnQgIT09IG51bGwpIHtcblx0XHRcdFx0XHRpdGVtRW50cnkucGFyZW50ID0gcGFyZW50O1xuXG5cdFx0XHRcdFx0aWYgKHBhcmVudENvbHVtbiAhPT0gbnVsbCAmJiBpdGVtRW50cnkubW9kaWZpZWQgIT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5tb2RpZmllZFtwYXJlbnRDb2x1bW4uaWRdID0gcGFyZW50Lml0ZW1JZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdG1vZGlmaWVkLnB1c2goaXRlbUVudHJ5KTtcblx0XHRcdFx0ZW50cmllc0FkZGVkVG9Nb2RpZmllZC5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuaGFuZGxlQWRkZWRJdGVtQ2FsbGJhY2tzKFxuXHRcdFx0ZW50cmllc0FkZGVkVG9Jbml0aWFsLFxuXHRcdFx0ZW50cmllc0FkZGVkVG9Nb2RpZmllZCxcblx0XHRcdHJlc3VsdFJlc291cmNlLFxuXHRcdFx0Y2FsbE9uQWRkLFxuXHRcdFx0Y2FsbE9uQWN0aXZhdGVcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBoYW5kbGVBZGRlZEl0ZW1DYWxsYmFja3M8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZT4gKFxuXHRcdGVudHJpZXNBZGRlZFRvSW5pdGlhbDogSXRlbUVudHJ5W10sXG5cdFx0ZW50cmllc0FkZGVkVG9Nb2RpZmllZDogSXRlbUVudHJ5W10sXG5cdFx0cmVzdWx0UmVzb3VyY2U6IFUsXG5cdFx0Y2FsbE9uQWRkPzogYm9vbGVhbixcblx0XHRjYWxsT25BY3RpdmF0ZT86IGJvb2xlYW5cblx0KTogVVsnaXRlbXMnXTtcblxuXHRwcml2YXRlIGhhbmRsZUFkZGVkSXRlbUNhbGxiYWNrcyAoXG5cdFx0ZW50cmllc0FkZGVkVG9Jbml0aWFsOiBJdGVtRW50cnlbXSxcblx0XHRlbnRyaWVzQWRkZWRUb01vZGlmaWVkOiBJdGVtRW50cnlbXSxcblx0XHRyZXN1bHRSZXNvdXJjZT86IG51bGwsXG5cdFx0Y2FsbE9uQWRkPzogYm9vbGVhbixcblx0XHRjYWxsT25BY3RpdmF0ZT86IGJvb2xlYW5cblx0KTogbnVsbDtcblxuXHRwcml2YXRlIGhhbmRsZUFkZGVkSXRlbUNhbGxiYWNrczxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPiAoXG5cdFx0ZW50cmllc0FkZGVkVG9Jbml0aWFsOiBJdGVtRW50cnlbXSxcblx0XHRlbnRyaWVzQWRkZWRUb01vZGlmaWVkOiBJdGVtRW50cnlbXSxcblx0XHRyZXN1bHRSZXNvdXJjZT86IFUgfCBudWxsLFxuXHRcdGNhbGxPbkFkZD86IGJvb2xlYW4sXG5cdFx0Y2FsbE9uQWN0aXZhdGU/OiBib29sZWFuXG5cdCk6IFVbJ2l0ZW1zJ10gfCBudWxsO1xuXG5cdHByaXZhdGUgaGFuZGxlQWRkZWRJdGVtQ2FsbGJhY2tzPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U+IChcblx0XHRlbnRyaWVzQWRkZWRUb0luaXRpYWw6IEl0ZW1FbnRyeVtdLFxuXHRcdGVudHJpZXNBZGRlZFRvTW9kaWZpZWQ6IEl0ZW1FbnRyeVtdLFxuXHRcdHJlc3VsdFJlc291cmNlOiBVIHwgbnVsbCA9IG51bGwsXG5cdFx0Y2FsbE9uQWRkPzogYm9vbGVhbixcblx0XHRjYWxsT25BY3RpdmF0ZT86IGJvb2xlYW5cblx0KTogVVsnaXRlbXMnXSB8IG51bGwge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcblxuXHRcdGlmIChlbnRyaWVzQWRkZWRUb0luaXRpYWwubGVuZ3RoID4gMCkge1xuXHRcdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2Ugb2YgY29sbGVjdGlvblJlc291cmNlcylcblx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLm9wdGlvbnMub25BZGRJbml0aWFsKGVudHJpZXNBZGRlZFRvSW5pdGlhbCwgdGhpcyk7XG5cdFx0fVxuXG5cdFx0aWYgKGVudHJpZXNBZGRlZFRvTW9kaWZpZWQubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIHJlc3VsdFJlc291cmNlID09PSBudWxsID8gbnVsbCA6IFtdO1xuXG5cdFx0aWYgKGNhbGxPbkFjdGl2YXRlICYmIGNvbGxlY3Rpb25SZXNvdXJjZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgbG9jYWxDYWNoZSA9IGNvbGxlY3Rpb25SZXNvdXJjZXNbMF0ubG9jYWxDYWNoZTtcblxuXHRcdFx0Zm9yIChjb25zdCBhZGRlZEl0ZW1FbnRyeSBvZiBlbnRyaWVzQWRkZWRUb01vZGlmaWVkKVxuXHRcdFx0XHRsb2NhbENhY2hlLm9uQWN0aXZhdGVJdGVtKGFkZGVkSXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRsZXQgcmVzdWx0OiBVWydpdGVtcyddIHwgbnVsbCA9IG51bGw7XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZSBvZiBjb2xsZWN0aW9uUmVzb3VyY2VzKSB7XG5cdFx0XHRjb25zdCBhZGRlZFJlc291cmNlcyA9IGNvbGxlY3Rpb25SZXNvdXJjZS5hZGRJdGVtUmVzb3VyY2VzKGVudHJpZXNBZGRlZFRvTW9kaWZpZWQpO1xuXG5cdFx0XHRpZiAoY29sbGVjdGlvblJlc291cmNlID09PSByZXN1bHRSZXNvdXJjZSkge1xuXHRcdFx0XHRyZXN1bHQgPSBhZGRlZFJlc291cmNlcztcblxuXHRcdFx0XHRpZiAoY2FsbE9uQWRkKSB7XG5cdFx0XHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5jYWxsT25BZGQoYWRkZWRSZXNvdXJjZXMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Vcblx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLmNhbGxPbkFkZChhZGRlZFJlc291cmNlcyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHJlbW92ZUl0ZW1zPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U+IChcblx0XHRpZEFycmF5OiBJdGVtSWRbXSxcblx0XHRyZXN1bHRSZXNvdXJjZTogVSxcblx0XHR1cGRhdGVJbml0aWFsPzogYm9vbGVhbixcblx0XHRjYWxsT25SZW1vdmU/OiBib29sZWFuXG5cdCk6IFVbJ2l0ZW1zJ107XG5cblx0cmVtb3ZlSXRlbXMgKFxuXHRcdGlkQXJyYXk6IEl0ZW1JZFtdLFxuXHRcdHJlc3VsdFJlc291cmNlPzogbnVsbCxcblx0XHR1cGRhdGVJbml0aWFsPzogYm9vbGVhbixcblx0XHRjYWxsT25SZW1vdmU/OiBib29sZWFuXG5cdCk6IG51bGw7XG5cblx0cmVtb3ZlSXRlbXM8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZT4gKFxuXHRcdGlkQXJyYXk6IEl0ZW1JZFtdLFxuXHRcdHJlc3VsdFJlc291cmNlPzogVSB8IG51bGwsXG5cdFx0dXBkYXRlSW5pdGlhbD86IGJvb2xlYW4sXG5cdFx0Y2FsbE9uUmVtb3ZlPzogYm9vbGVhblxuXHQpOiBVWydpdGVtcyddIHwgbnVsbDtcblxuXHRyZW1vdmVJdGVtczxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPiAoXG5cdFx0aWRBcnJheTogSXRlbUlkW10sXG5cdFx0cmVzdWx0UmVzb3VyY2U/OiBVIHwgbnVsbCxcblx0XHR1cGRhdGVJbml0aWFsPzogYm9vbGVhbixcblx0XHRjYWxsT25SZW1vdmU/OiBib29sZWFuXG5cdCk6IFVbJ2l0ZW1zJ10gfCBudWxsIHtcblx0XHRpZiAoaWRBcnJheS5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gW107XG5cblx0XHRyZXR1cm4gdGhpcy5oYW5kbGVSZW1vdmVkSXRlbXMoXG5cdFx0XHRpdGVtRW50cnkgPT4gIWluQXJyYXkoaXRlbUVudHJ5Lml0ZW1JZCwgaWRBcnJheSksXG5cdFx0XHRyZXN1bHRSZXNvdXJjZSxcblx0XHRcdHVwZGF0ZUluaXRpYWwsXG5cdFx0XHRjYWxsT25SZW1vdmVcblx0XHQpO1xuXHR9XG5cblx0Y2xlYXI8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZT4gKFxuXHRcdHJlc3VsdFJlc291cmNlOiBVLFxuXHRcdHVwZGF0ZUluaXRpYWw/OiBib29sZWFuLFxuXHRcdGNhbGxPblJlbW92ZT86IGJvb2xlYW5cblx0KTogVVsnaXRlbXMnXTtcblxuXHRjbGVhciAoXG5cdFx0cmVzdWx0UmVzb3VyY2U/OiBudWxsLFxuXHRcdHVwZGF0ZUluaXRpYWw/OiBib29sZWFuLFxuXHRcdGNhbGxPblJlbW92ZT86IGJvb2xlYW5cblx0KTogbnVsbDtcblxuXHRjbGVhcjxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPiAoXG5cdFx0cmVzdWx0UmVzb3VyY2U/OiBVIHwgbnVsbCxcblx0XHR1cGRhdGVJbml0aWFsPzogYm9vbGVhbixcblx0XHRjYWxsT25SZW1vdmU/OiBib29sZWFuXG5cdCkge1xuXHRcdHJldHVybiB0aGlzLmhhbmRsZVJlbW92ZWRJdGVtcyhcblx0XHRcdCgpID0+IGZhbHNlLFxuXHRcdFx0cmVzdWx0UmVzb3VyY2UsXG5cdFx0XHR1cGRhdGVJbml0aWFsLFxuXHRcdFx0Y2FsbE9uUmVtb3ZlXG5cdFx0KTtcblx0fVxuXG5cdGhhbmRsZVJlbW92ZWRJdGVtczxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPiAoXG5cdFx0ZmlsdGVyRnVuY3Rpb246IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gYm9vbGVhbixcblx0XHRyZXN1bHRSZXNvdXJjZTogVSxcblx0XHR1cGRhdGVJbml0aWFsPzogYm9vbGVhbixcblx0XHRjYWxsT25SZW1vdmU/OiBib29sZWFuXG5cdCk6IFVbJ2l0ZW1zJ107XG5cblx0aGFuZGxlUmVtb3ZlZEl0ZW1zIChcblx0XHRmaWx0ZXJGdW5jdGlvbjogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBib29sZWFuLFxuXHRcdHJlc3VsdFJlc291cmNlPzogbnVsbCxcblx0XHR1cGRhdGVJbml0aWFsPzogYm9vbGVhbixcblx0XHRjYWxsT25SZW1vdmU/OiBib29sZWFuXG5cdCk6IG51bGw7XG5cblx0aGFuZGxlUmVtb3ZlZEl0ZW1zPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U+IChcblx0XHRmaWx0ZXJGdW5jdGlvbjogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBib29sZWFuLFxuXHRcdHJlc3VsdFJlc291cmNlPzogVSB8IG51bGwsXG5cdFx0dXBkYXRlSW5pdGlhbD86IGJvb2xlYW4sXG5cdFx0Y2FsbE9uUmVtb3ZlPzogYm9vbGVhblxuXHQpOiBVWydpdGVtcyddIHwgbnVsbDtcblxuXHRoYW5kbGVSZW1vdmVkSXRlbXM8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZT4gKFxuXHRcdGZpbHRlckZ1bmN0aW9uOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGJvb2xlYW4sXG5cdFx0cmVzdWx0UmVzb3VyY2U/OiBVIHwgbnVsbCxcblx0XHR1cGRhdGVJbml0aWFsOiBib29sZWFuID0gZmFsc2UsXG5cdFx0Y2FsbE9uUmVtb3ZlPzogYm9vbGVhblxuXHQpOiBVWydpdGVtcyddIHwgbnVsbCB7XG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5U2VydmljZSA9IHRoaXMuZmFjdG9yeS5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlO1xuXHRcdGNvbnN0IHJlbW92ZWRGcm9tTW9kaWZpZWQgPSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmZpbHRlckFycmF5KHRoaXMuaXRlbXMsIGZpbHRlckZ1bmN0aW9uKTtcblx0XHRsZXQgcmVtb3ZlZEZyb21Jbml0aWFsOiBJdGVtRW50cnlbXTtcblxuXHRcdGlmICh1cGRhdGVJbml0aWFsKVxuXHRcdFx0cmVtb3ZlZEZyb21Jbml0aWFsID0gY29sbGVjdGlvbkVudHJ5U2VydmljZS5maWx0ZXJBcnJheSh0aGlzLmluaXRpYWwsIGZpbHRlckZ1bmN0aW9uKTtcblx0XHRlbHNlIHtcblx0XHRcdC8vIHJlbW92ZSBhbGwgKmxvY2FsKiBpdGVtcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIGZyb20gbW9kaWZpZWQgZnJvbSBpbml0aWFsLCB0b29cblx0XHRcdGNvbnN0IGxvY2FsUmVtb3ZlZEZyb21Nb2RpZmllZDogSXRlbUVudHJ5W10gPSBbXTtcblxuXHRcdFx0Zm9yIChjb25zdCByZW1vdmVkRW50cnkgb2YgcmVtb3ZlZEZyb21Nb2RpZmllZCkge1xuXHRcdFx0XHRpZiAocmVtb3ZlZEVudHJ5LmlzTG9jYWwoKSlcblx0XHRcdFx0XHRsb2NhbFJlbW92ZWRGcm9tTW9kaWZpZWQucHVzaChyZW1vdmVkRW50cnkpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAobG9jYWxSZW1vdmVkRnJvbU1vZGlmaWVkLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0cmVtb3ZlZEZyb21Jbml0aWFsID0gY29sbGVjdGlvbkVudHJ5U2VydmljZS5maWx0ZXJBcnJheShcblx0XHRcdFx0XHR0aGlzLmluaXRpYWwsXG5cdFx0XHRcdFx0aXRlbUVudHJ5ID0+IGxvY2FsUmVtb3ZlZEZyb21Nb2RpZmllZC5pbmRleE9mKGl0ZW1FbnRyeSkgPT09IC0xXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Vcblx0XHRcdFx0cmVtb3ZlZEZyb21Jbml0aWFsID0gW107XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuaGFuZGxlUmVtb3ZlZEl0ZW1DYWxsYmFja3MocmVtb3ZlZEZyb21Jbml0aWFsLCByZW1vdmVkRnJvbU1vZGlmaWVkLCByZXN1bHRSZXNvdXJjZSwgY2FsbE9uUmVtb3ZlKTtcblx0fVxuXG5cdHByaXZhdGUgaGFuZGxlUmVtb3ZlZEl0ZW1DYWxsYmFja3M8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZT4gKFxuXHRcdHJlbW92ZWRGcm9tSW5pdGlhbDogSXRlbUVudHJ5W10sXG5cdFx0cmVtb3ZlZEZyb21Nb2RpZmllZDogSXRlbUVudHJ5W10sXG5cdFx0cmVzdWx0UmVzb3VyY2U6IFUsXG5cdFx0Y2FsbE9uUmVtb3ZlPzogYm9vbGVhblxuXHQpOiBVWydpdGVtcyddO1xuXG5cdHByaXZhdGUgaGFuZGxlUmVtb3ZlZEl0ZW1DYWxsYmFja3MgKFxuXHRcdHJlbW92ZWRGcm9tSW5pdGlhbDogSXRlbUVudHJ5W10sXG5cdFx0cmVtb3ZlZEZyb21Nb2RpZmllZDogSXRlbUVudHJ5W10sXG5cdFx0cmVzdWx0UmVzb3VyY2U/OiBudWxsLFxuXHRcdGNhbGxPblJlbW92ZT86IGJvb2xlYW5cblx0KTogbnVsbDtcblxuXHRwcml2YXRlIGhhbmRsZVJlbW92ZWRJdGVtQ2FsbGJhY2tzPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U+IChcblx0XHRyZW1vdmVkRnJvbUluaXRpYWw6IEl0ZW1FbnRyeVtdLFxuXHRcdHJlbW92ZWRGcm9tTW9kaWZpZWQ6IEl0ZW1FbnRyeVtdLFxuXHRcdHJlc3VsdFJlc291cmNlPzogVSB8IG51bGwsXG5cdFx0Y2FsbE9uUmVtb3ZlPzogYm9vbGVhblxuXHQpOiBVWydpdGVtcyddIHwgbnVsbDtcblxuXHRwcml2YXRlIGhhbmRsZVJlbW92ZWRJdGVtQ2FsbGJhY2tzPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U+IChcblx0XHRyZW1vdmVkRnJvbUluaXRpYWw6IEl0ZW1FbnRyeVtdLFxuXHRcdHJlbW92ZWRGcm9tTW9kaWZpZWQ6IEl0ZW1FbnRyeVtdLFxuXHRcdHJlc3VsdFJlc291cmNlPzogVSB8IG51bGwsXG5cdFx0Y2FsbE9uUmVtb3ZlOiBib29sZWFuID0gdHJ1ZVxuXHQpOiBVWydpdGVtcyddIHwgbnVsbCB7XG5cdFx0Y29uc3QgY29sbGVjdGlvblJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xuXG5cdFx0aWYgKHJlbW92ZWRGcm9tSW5pdGlhbC5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZSBvZiBjb2xsZWN0aW9uUmVzb3VyY2VzKVxuXHRcdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2Uub3B0aW9ucy5vblJlbW92ZUluaXRpYWwocmVtb3ZlZEZyb21Jbml0aWFsLCB0aGlzKTtcblx0XHR9XG5cblx0XHRpZiAocmVtb3ZlZEZyb21Nb2RpZmllZC5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gcmVzdWx0UmVzb3VyY2UgPT09IG51bGwgPyBudWxsIDogW107XG5cblx0XHRsZXQgcmVzdWx0OiBVWydpdGVtcyddIHwgbnVsbCA9IG51bGw7XG5cblx0XHRmb3IgKGNvbnN0IHJlbW92ZWRFbnRyeSBvZiByZW1vdmVkRnJvbU1vZGlmaWVkKVxuXHRcdFx0cmVtb3ZlZEVudHJ5LmRlYWN0aXZhdGVSZXNvdXJjZXMoKTtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvblJlc291cmNlIG9mIGNvbGxlY3Rpb25SZXNvdXJjZXMpIHtcblx0XHRcdGNvbnN0IHJlbW92ZWRSZXNvdXJjZXMgPSBjb2xsZWN0aW9uUmVzb3VyY2UucmVtb3ZlSXRlbVJlc291cmNlcyhyZW1vdmVkRnJvbU1vZGlmaWVkKTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25SZXNvdXJjZSA9PT0gcmVzdWx0UmVzb3VyY2UpIHtcblx0XHRcdFx0cmVzdWx0ID0gcmVtb3ZlZFJlc291cmNlcztcblxuXHRcdFx0XHRpZiAoY2FsbE9uUmVtb3ZlKVxuXHRcdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5jYWxsT25SZW1vdmUocmVtb3ZlZFJlc291cmNlcyk7XG5cdFx0XHR9IGVsc2Vcblx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLmNhbGxPblJlbW92ZShyZW1vdmVkUmVzb3VyY2VzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cHJpdmF0ZSBjcmVhdGVCYXRjaFN0YXR1cyAoXG5cdFx0aXRlbUlkczogSXRlbUlkW10sXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRcdGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGVcblx0KTogQmF0Y2hTdGF0dXM8SXRlbUVudHJ5PiB7XG5cdFx0cmV0dXJuIHRoaXMuZmFjdG9yeS5pdGVtSGFuZGxlci5jcmVhdGVCYXRjaFN0YXR1cyhcblx0XHRcdHRoaXMuaXRlbVR5cGUsXG5cdFx0XHRpdGVtSWRzLFxuXHRcdFx0dGhpcy5wYXJlbnQsXG5cdFx0XHRyZXF1ZXN0Q29sdW1ucyxcblx0XHRcdGZhbHNlLFxuXHRcdFx0bG9jYWxJdGVtQ2FjaGUsXG5cdFx0XHRmYWxzZVxuXHRcdCkuYmF0Y2hTdGF0dXM7XG5cdH1cblxuXHRwcml2YXRlIGV4cGFuZExvY2FsIChcblx0XHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMsXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPENvbHVtbkV4cGFuc2lvbj4ge1xuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XG5cdFx0Y29uc3QgZXJyb3JIYW5kbGVyID0gZmFjdG9yeS5lcnJvckhhbmRsZXI7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSB0aGlzLml0ZW1UeXBlO1xuXG5cdFx0cmV0dXJuIGZhY3RvcnkuY29sdW1uSGFuZGxlci5mZXRjaChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMpLnRoZW4oXG5cdFx0XHRyZXNwb25zZUNvbHVtbnMgPT4ge1xuXHRcdFx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSBmYWN0b3J5LmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdHJlcXVlc3RDb2x1bW5zLFxuXHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1uc1xuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGNvbnN0IGJhdGNoU3RhdHVzID0gdGhpcy5jcmVhdGVCYXRjaFN0YXR1cyh0aGlzLmdldElkQXJyYXkoKSwgcmVxdWVzdENvbHVtbnMsIGxvY2FsSXRlbUNhY2hlKTtcblxuXHRcdFx0XHRyZXR1cm4gYmF0Y2hTdGF0dXMuZ2V0UHJvbWlzZXMoKS50aGVuKFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBmYWN0b3J5Lml0ZW1IYW5kbGVyLmhhbmRsZUJhdGNoUmVzcG9uc2UoXG5cdFx0XHRcdFx0XHRcdGJhdGNoU3RhdHVzLFxuXHRcdFx0XHRcdFx0XHRsb2NhbEl0ZW1DYWNoZSxcblx0XHRcdFx0XHRcdFx0cmVxdWVzdENvbHVtbnMsXG5cdFx0XHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1ucyxcblx0XHRcdFx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHQpLnRoZW4oXG5cdFx0XHRcdFx0KCkgPT4gY29sdW1uRXhwYW5zaW9uLFxuXHRcdFx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgZXhwYW5kUmVtb3RlIChcblx0XHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMsXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPENvbHVtbkV4cGFuc2lvbj4ge1xuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XG5cdFx0Y29uc3QgZXJyb3JIYW5kbGVyID0gZmFjdG9yeS5lcnJvckhhbmRsZXI7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSB0aGlzLml0ZW1UeXBlO1xuXG5cdFx0cmV0dXJuIGZhY3RvcnkuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RJdGVtcyh0aGlzLCB1bmRlZmluZWQsIHJlcXVlc3RDb2x1bW5zKS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRjb25zdCByZXNwb25zZUl0ZW1zID0gcmVzcG9uc2UuaXRlbXNbaXRlbVR5cGVdO1xuXHRcdFx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKTtcblxuXHRcdFx0XHR0aGlzLmhhbmRsZVJlbW92ZWRJdGVtcyhcblx0XHRcdFx0XHRpdGVtRW50cnkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlSXRlbXNbaXRlbUVudHJ5Lml0ZW1JZF0gIT09IHVuZGVmaW5lZCB8fCBpdGVtRW50cnkuaXNMb2NhbCgpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdHRydWVcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSBmYWN0b3J5LmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdHJlcXVlc3RDb2x1bW5zLFxuXHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1uc1xuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGNvbnN0IGJhdGNoU3RhdHVzID0gdGhpcy5jcmVhdGVCYXRjaFN0YXR1cyhyZXNwb25zZS5saW5rc1tpdGVtVHlwZV0sIHJlcXVlc3RDb2x1bW5zLCBsb2NhbEl0ZW1DYWNoZSk7XG5cblx0XHRcdFx0cmV0dXJuIGJhdGNoU3RhdHVzLmdldFByb21pc2VzKCkudGhlbihcblx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFjdG9yeS5pdGVtSGFuZGxlci5oYW5kbGVCYXRjaFJlc3BvbnNlKFxuXHRcdFx0XHRcdFx0XHRiYXRjaFN0YXR1cyxcblx0XHRcdFx0XHRcdFx0bG9jYWxJdGVtQ2FjaGUsXG5cdFx0XHRcdFx0XHRcdHJlcXVlc3RDb2x1bW5zLFxuXHRcdFx0XHRcdFx0XHRyZXNwb25zZSxcblx0XHRcdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHQpLnRoZW4oXG5cdFx0XHRcdFx0KCkgPT4gY29sdW1uRXhwYW5zaW9uLFxuXHRcdFx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGV4cGFuZCAobmV3Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMsIGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGUpOiBQcm9taXNlSW50ZXJmYWNlPHRoaXM+IHtcblx0XHRpZiAobmV3Q29sdW1ucyAhPT0gdHJ1ZSAmJiBuZXdDb2x1bW5zLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiB0aGlzLmZhY3RvcnkucHJvbWlzZVNlcnZpY2Uud2hlbih0aGlzKTtcblxuXHRcdHJldHVybiAoXG5cdFx0XHR0aGlzLmlzTG9jYWwoKSA/XG5cdFx0XHRcdHRoaXMuZXhwYW5kTG9jYWwobmV3Q29sdW1ucywgbG9jYWxJdGVtQ2FjaGUpIDpcblx0XHRcdFx0dGhpcy5leHBhbmRSZW1vdGUobmV3Q29sdW1ucywgbG9jYWxJdGVtQ2FjaGUpXG5cdFx0KS50aGVuKFxuXHRcdFx0Y29sdW1uRXhwYW5zaW9uID0+IHtcblx0XHRcdFx0dGhpcy5leHBhbmRDb2x1bW5zKGNvbHVtbkV4cGFuc2lvbik7XG5cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdGV4dGVuZFF1ZXJ5IChjYWxsYmFjaz86IFF1ZXJ5Q2FsbGJhY2spIHtcblx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXG5cdFx0aWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5xdWVyeTtcblxuXHRcdG9wdGlvbnMucXVlcnlQYXJhbXMgPSBjYWxsYmFjayhvcHRpb25zLnF1ZXJ5UGFyYW1zKTtcblxuXHRcdHJldHVybiB0aGlzLnF1ZXJ5ID0gdGhpcy5mYWN0b3J5LmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuY3JlYXRlUXVlcnkob3B0aW9ucyk7XG5cdH1cblxuXHRleHRlbmQ8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZT4gKFxuXHRcdHF1ZXJ5Q2FsbGJhY2s6IFF1ZXJ5Q2FsbGJhY2ssXG5cdFx0Y29sbGVjdGlvblJlc291cmNlPzogVSxcblx0XHRjYWxsT25BZGQ/OiBib29sZWFuLFxuXHRcdHVwZGF0ZUluaXRpYWw/OiBib29sZWFuXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8VVsnaXRlbXMnXT47XG5cblx0ZXh0ZW5kIChcblx0XHRxdWVyeUNhbGxiYWNrOiBRdWVyeUNhbGxiYWNrLFxuXHRcdGNvbGxlY3Rpb25SZXNvdXJjZT86IG51bGwsXG5cdFx0Y2FsbE9uQWRkPzogYm9vbGVhbixcblx0XHR1cGRhdGVJbml0aWFsPzogYm9vbGVhblxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPG51bGw+O1xuXG5cdGV4dGVuZDxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPiAoXG5cdFx0cXVlcnlDYWxsYmFjazogUXVlcnlDYWxsYmFjayxcblx0XHRjb2xsZWN0aW9uUmVzb3VyY2U/OiBVIHwgbnVsbCxcblx0XHRjYWxsT25BZGQ/OiBib29sZWFuLFxuXHRcdHVwZGF0ZUluaXRpYWw/OiBib29sZWFuXG5cdCkge1xuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XG5cdFx0Y29uc3QgZXJyb3JIYW5kbGVyID0gZmFjdG9yeS5lcnJvckhhbmRsZXI7XG5cdFx0Y29uc3QgZXh0ZW5kZWRRdWVyeSA9IHRoaXMuZXh0ZW5kUXVlcnkocXVlcnlDYWxsYmFjaykub2JqZWN0O1xuXHRcdGNvbnN0IGZ1bGxRdWVyeSA9IGZhY3RvcnkucXVlcnlTZXJ2aWNlLmFkZEFuZENvbmRpdGlvbihcblx0XHRcdGV4dGVuZGVkUXVlcnksXG5cdFx0XHRmYWN0b3J5LnF1ZXJ5U2VydmljZS5jcmVhdGVOb3RJbih0aGlzLmdldElkQXJyYXkoKSlcblx0XHQpO1xuXG5cdFx0Ly8gdG9kbzogYWxzbyBkbyB0aGUgbGltaXQgY2hlY2sgaW4gYmF0Y2hFeHRlbmRcblx0XHRjb25zdCBwcm9taXNlID0gZmFjdG9yeS5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdEl0ZW1zKFxuXHRcdFx0dGhpcyxcblx0XHRcdC8vIFdoZW4gdGhlcmUncyBhIGxpbWl0IHdlIHdhbnQgdG8gZmV0Y2ggYWxsIGl0ZW1zIGJlY2F1c2Ugd2Ugd2lsbCBkbyBzb3J0aW5nIGFuZCBzcGxpY2luZyBvZiB0aGUgZXhjZXNzIGl0ZW1zXG5cdFx0XHR0aGlzLm9wdGlvbnMubGltaXQgIT09IG51bGwgPyBleHRlbmRlZFF1ZXJ5IDogZnVsbFF1ZXJ5XG5cdFx0KS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHQvLyByZW1vdmVBYnNlbnRJdGVtcyhyZXNwb25zZSk7IFRPRE86IHdlIGNhbiBvbmx5IGRvIHRoaXMgd2hlbiB3ZSByZXF1ZXN0ICphbGwqIHRoZSBpdGVtc1xuXHRcdFx0XHRyZXR1cm4gZmFjdG9yeS5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc1Jlc3BvbnNlKFxuXHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHRcdHJlc3BvbnNlLmxpbmtzW3RoaXMuaXRlbVR5cGVdLFxuXHRcdFx0XHRcdHRoaXMucGFyZW50LFxuXHRcdFx0XHRcdHRoaXMuY29sdW1uc1xuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHRpdGVtRW50cmllcyA9PiB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzLnByb21pc2U7XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuYWRkSXRlbXMoaXRlbUVudHJpZXMsIGNvbGxlY3Rpb25SZXNvdXJjZSwgdXBkYXRlSW5pdGlhbCwgY2FsbE9uQWRkLCBmYWxzZSk7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cblx0XHR0aGlzLnByb21pc2UgPSBwcm9taXNlLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXG5cdFx0cmV0dXJuIHByb21pc2U7XG5cdH1cblxuXHRxdWV1ZVJlbG9hZCAoKTogdm9pZCB7XG5cdFx0dGhpcy5yZWxvYWRRdWV1ZWQgPSB0cnVlO1xuXHR9XG5cblx0ZXhwYW5kQ29sdW1ucyAoY29sdW1uRXhwYW5zaW9uOiBDb2x1bW5FeHBhbnNpb24pOiB2b2lkIHtcblx0XHRjb25zdCBleHBhbnNpb25SZXN1bHQgPSBjb2x1bW5FeHBhbnNpb24ucnVuKHRoaXMuY29sdW1ucyk7XG5cblx0XHRpZiAoZXhwYW5zaW9uUmVzdWx0ID09PSBudWxsKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0dGhpcy5jb2x1bW5zID0gZXhwYW5zaW9uUmVzdWx0Lm1lcmdlZDtcblx0XHR0aGlzLnRlbXBsYXRlQ29sdW1ucyA9IG51bGw7XG5cdFx0dGhpcy5vcHRpb25zLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMucmVxdWVzdDtcblx0fVxuXG5cdGV4cGFuZFJlcXVlc3RDb2x1bW5zIChyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMpOiB2b2lkIHtcblx0XHR0aGlzLmNvbHVtbnMuZXhwYW5kUmVxdWVzdENvbHVtbnMocmVxdWVzdENvbHVtbnMpO1xuXHRcdHRoaXMub3B0aW9ucy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zLnJlcXVlc3Q7XG5cdH1cblxuXHRnZXRBZGRlZEl0ZW1zIChyZXR1cm5JdGVtSWRzOiB0cnVlKTogSXRlbUlkW107XG5cdGdldEFkZGVkSXRlbXMgKHJldHVybkl0ZW1JZHM/OiBib29sZWFuKTogSXRlbUVudHJ5W107XG5cdGdldEFkZGVkSXRlbXMgKHJldHVybkl0ZW1JZHM6IGJvb2xlYW4gPSBmYWxzZSkge1xuXHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmluaXRpYWw7XG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xuXHRcdGNvbnN0IHJlc3VsdDogQXJyYXk8SXRlbUVudHJ5IHwgSXRlbUlkPiA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgbW9kaWZpZWQpIHtcblx0XHRcdGlmIChpbml0aWFsLmluZGV4T2YoaXRlbUVudHJ5KSA9PT0gLTEpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKHJldHVybkl0ZW1JZHMgPyBpdGVtRW50cnkuaXRlbUlkIDogaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0UmVtb3ZlZEl0ZW1zIChyZXR1cm5JdGVtSWRzOiB0cnVlKTogSXRlbUlkW107XG5cdGdldFJlbW92ZWRJdGVtcyAocmV0dXJuSXRlbUlkcz86IGJvb2xlYW4pOiBJdGVtRW50cnlbXTtcblx0Z2V0UmVtb3ZlZEl0ZW1zIChyZXR1cm5JdGVtSWRzOiBib29sZWFuID0gZmFsc2UpIHtcblx0XHRjb25zdCBpbml0aWFsID0gdGhpcy5pbml0aWFsO1xuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcblx0XHRjb25zdCByZXN1bHQ6IEFycmF5PEl0ZW1FbnRyeSB8IEl0ZW1JZD4gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGluaXRpYWwpIHtcblx0XHRcdGlmIChtb2RpZmllZC5pbmRleE9mKGl0ZW1FbnRyeSkgPT09IC0xKVxuXHRcdFx0XHRyZXN1bHQucHVzaChyZXR1cm5JdGVtSWRzID8gaXRlbUVudHJ5Lml0ZW1JZCA6IGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldFVwZGF0ZWRJdGVtcyAoKTogSXRlbUVudHJ5W10ge1xuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBtb2RpZmllZCkge1xuXHRcdFx0aWYgKCFpdGVtRW50cnkuaXNMb2NhbCgpICYmIGl0ZW1FbnRyeS5oYXNDaGFuZ2VzKCkpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGhhc0FkZGVkSXRlbXMgKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLml0ZW1zLmxlbmd0aCA+IHRoaXMuaW5pdGlhbC5sZW5ndGg7XG5cdH1cblxuXHRoYXNSZW1vdmVkSXRlbXMgKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmluaXRpYWwubGVuZ3RoID4gdGhpcy5pdGVtcy5sZW5ndGg7XG5cdH1cblxuXHRoYXNVcGRhdGVkSXRlbXMgKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcblxuXHRcdGZvciAoY29uc3QgbW9kaWZpZWRJdGVtRW50cnkgb2YgbW9kaWZpZWQpIHtcblx0XHRcdGlmIChtb2RpZmllZEl0ZW1FbnRyeS5oYXNDaGFuZ2VzKCkpXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGdldEN1cnJlbnRSZXNvdXJjZTxUIGV4dGVuZHMgQ29sbGVjdGlvblZpZXdSZXNvdXJjZSA9IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8Vmlld1Jlc291cmNlPj4gKCk6IFQge1xuXHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xuXG5cdFx0Ly8gQHRzLWlnbm9yZSByZXR1cm4gdHlwZSBpcyBiZWluZyB3ZWlyZCwgYnV0IHlvdSBzaG91bGQganVzdCBiZSBhYmxlIHRvIHBhc3MgaXRcblx0XHRyZXR1cm4gcmVzb3VyY2VzW3Jlc291cmNlcy5sZW5ndGggLSAxXTtcblx0fVxuXG5cdGNsZWFyUmVzb3VyY2VzIChpc1N1YnRhYkNoYW5nZTogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG5cdFx0Y29uc3QgaXRlbUVudHJpZXMgPSB0aGlzLml0ZW1zOyAvLyBUT0RPOiBpbml0aWFsXG5cdFx0Y29uc3QgY3VycmVudFJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xuXHRcdGNvbnN0IG5ld1Jlc291cmNlczogQ29sbGVjdGlvblJlc291cmNlW10gPSBbXTtcblxuXHRcdC8vIHdlJ2xsIGFkZCB0aGUgaXRlbSByZXNvdXJjZXMgYmFjayBpbiBsYXRlclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxuXHRcdFx0aXRlbUVudHJ5LmNsZWFyUmVzb3VyY2VzKCk7XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZSBvZiBjdXJyZW50UmVzb3VyY2VzKSB7XG5cdFx0XHRpZiAoY29sbGVjdGlvblJlc291cmNlLm9wdGlvbnNbaXNTdWJ0YWJDaGFuZ2UgPyAnY2xlYXJPblN1YlRhYkNoYW5nZScgOiAnY2xlYXJPblRhYkNoYW5nZSddKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0bmV3UmVzb3VyY2VzLnB1c2goY29sbGVjdGlvblJlc291cmNlKTtcblxuXHRcdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgY29sbGVjdGlvblJlc291cmNlLml0ZW1zKVxuXHRcdFx0XHRpdGVtUmVzb3VyY2UuZW50cnkucmVzb3VyY2VzLnB1c2goaXRlbVJlc291cmNlKTsgLy8gcmVzb3VyY2VzIHNob3VsZCBiZSBlbXB0eSBieSBub3cgOi0pXG5cdFx0fVxuXG5cdFx0dGhpcy5yZXNvdXJjZXMgPSBuZXdSZXNvdXJjZXM7XG5cdH1cblxuXHQvKipcblx0ICogQGRlc2NyaXB0aW9uXG5cdCAqIHRoaXMgZG9lc24ndCByZXZlcnQgdXBkYXRlc1xuXHQgKi9cblx0cmV2ZXJ0Q2hhbmdlcyAoKTogdm9pZCB7XG5cdFx0Ly8gc2F2ZSB0aGVzZSBiZWZvcmUgcmVzZXR0aW5nIHRoZSBpdGVtcyBwcm9wZXJ0eVxuXHRcdGNvbnN0IGFkZGVkSXRlbXMgPSB0aGlzLmdldEFkZGVkSXRlbXMoKTtcblx0XHRjb25zdCByZW1vdmVkSXRlbXMgPSB0aGlzLmdldFJlbW92ZWRJdGVtcygpO1xuXG5cdFx0dGhpcy5pdGVtcyA9IHRoaXMuaW5pdGlhbC5zbGljZSgpO1xuXG5cdFx0dGhpcy5oYW5kbGVBZGRlZEl0ZW1DYWxsYmFja3MoW10sIHJlbW92ZWRJdGVtcyk7XG5cdFx0dGhpcy5oYW5kbGVSZW1vdmVkSXRlbUNhbGxiYWNrcyhbXSwgYWRkZWRJdGVtcyk7XG5cdH1cblxuXHRvbkl0ZW1zQ3JlYXRlZCAoY29udmVyc2lvbk1hcDogQ29udmVyc2lvbk1hcCk6IHZvaWQge1xuXHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xuXG5cdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNvdXJjZXMpIHtcblx0XHRcdHJlc291cmNlLnJlYnVpbGRNYXAoKTtcblx0XHRcdHJlc291cmNlLm9wdGlvbnMub25JdGVtc0NyZWF0ZWQoY29udmVyc2lvbk1hcCk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0VXBkYXRlZEl0ZW1Db2x1bW5zIChjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwKToge1tjb2x1bW5JZDogc3RyaW5nXTogQ29sdW1uSW5mb30ge1xuXHRcdGNvbnN0IGl0ZW1Db2x1bW5zID0gdGhpcy5jb2x1bW5zLml0ZW07XG5cdFx0Y29uc3QgcmVzdWx0OiB7W2NvbHVtbklkOiBzdHJpbmddOiBDb2x1bW5JbmZvfSA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgaXRlbUNvbHVtbnMpIHtcblx0XHRcdGlmIChjb252ZXJzaW9uTWFwW2NvbHVtbi5hcGlDb2x1bW4uaXRlbVR5cGVdICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdHJlc3VsdFtjb2x1bW4uaWRdID0gY29sdW1uO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRjbG9uZSAocGFyZW50OiBFbnRyeVBhcmVudE51bGwsIGNvbnZlcnNpb25NYXA/OiBJdGVtSWRDb252ZXJzaW9uTWFwKSB7XG5cdFx0Y29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTtcblx0XHRjb25zdCBjbG9uZWRJdGVtRW50cmllcyA9IGZhY3RvcnkuaXRlbUVudHJ5U2VydmljZS5iYXRjaENsb25lKHRoaXMuaXRlbXMsIGNvbnZlcnNpb25NYXApO1xuXG5cdFx0Zm9yIChjb25zdCBjbG9uZWRJdGVtRW50cnkgb2YgY2xvbmVkSXRlbUVudHJpZXMpXG5cdFx0XHRjbG9uZWRJdGVtRW50cnkucGFyZW50ID0gcGFyZW50O1xuXG5cdFx0cmV0dXJuIGZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0dGhpcy5pdGVtVHlwZSxcblx0XHRcdGZhY3RvcnkuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jbG9uZU9wdGlvbnModGhpcy5vcHRpb25zLCBwYXJlbnQpXG5cdFx0KS5yZXNvbHZlKFxuXHRcdFx0e2NvbHVtbnM6IHRoaXMuY29sdW1ucywgaW5pdGlhbDogY2xvbmVkSXRlbUVudHJpZXN9XG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgZmlsdGVyQXJyYXksIExvY2FsQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEl0ZW1SZXNvdXJjZUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvblJlc291cmNlT3B0aW9ucywgRWRpdFJlc291cmNlLCBJdGVtRW50cnksIFZpZXdSZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBJdGVtUmVzb3VyY2VJdGVtSWRNYXAsIFByb21pc2VJbnRlcmZhY2UsIFF1ZXJ5Q2FsbGJhY2ssIFJlc3BvbnNlQ29sdW1uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnkgfSBmcm9tICcuL0NvbGxlY3Rpb25FbnRyeSc7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uUmVzb3VyY2U8VCBleHRlbmRzIFZpZXdSZXNvdXJjZSB8IEVkaXRSZXNvdXJjZSA9IFZpZXdSZXNvdXJjZT4ge1xuXHRpdGVtczogVFtdO1xuXHRpdGVtSWRNYXA6IEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcDxUPiA9IHt9O1xuXHRjb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcDtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdHB1YmxpYyBlbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdHB1YmxpYyBvcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zLFxuXHRcdHB1YmxpYyBsb2NhbENhY2hlOiBMb2NhbENhY2hlXG5cdCkge1xuXHRcdHRoaXMuY29sdW1ucyA9IGVudHJ5LmNvbHVtbnMucmVzcG9uc2U7XG5cdFx0dGhpcy5pdGVtSWRNYXAgPSB7fTtcblx0XHR0aGlzLml0ZW1zID0gW107XG5cblx0XHRlbnRyeS5yZXNvdXJjZXMucHVzaCh0aGlzKTtcblxuXHRcdHRoaXMuYWRkSXRlbVJlc291cmNlcyhlbnRyeS5pdGVtcyk7XG5cdH1cblxuXHRnZXRJdGVtQnlJZCAoaXRlbUlkOiBudW1iZXIpOiBUIHtcblx0XHRyZXR1cm4gdGhpcy5pdGVtSWRNYXBbaXRlbUlkXTtcblx0fVxuXG5cdHJlYnVpbGRNYXAgKCk6IHZvaWQge1xuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xuXHRcdGNvbnN0IGl0ZW1JZE1hcDogSXRlbVJlc291cmNlSXRlbUlkTWFwPFQ+ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKVxuXHRcdFx0aXRlbUlkTWFwW2l0ZW1SZXNvdXJjZS5lbnRyeS5pdGVtSWRdID0gaXRlbVJlc291cmNlO1xuXG5cdFx0dGhpcy5pdGVtSWRNYXAgPSBpdGVtSWRNYXA7XG5cdH1cblxuXHRhZGRJdGVtUmVzb3VyY2VzIChpdGVtRW50cmllczogSXRlbUVudHJ5W10pOiBUW10geyAvLyBzaG91bGQgYmUgZmFzdFxuXHRcdGlmIChpdGVtRW50cmllcy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gW107XG5cblx0XHRjb25zdCByZXN1bHQ6IFRbXSA9IFtdO1xuXHRcdGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cdFx0Y29uc3QgaXRlbXMgPSB0aGlzLml0ZW1zO1xuXHRcdGNvbnN0IGl0ZW1JZE1hcCA9IHRoaXMuaXRlbUlkTWFwO1xuXHRcdGNvbnN0IGNvbnN0cnVjdG9yID0gdGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LmdldENvbnN0cnVjdG9yKFxuXHRcdFx0e1xuXHRcdFx0XHRlZGl0OiBvcHRpb25zLmVkaXRJdGVtcyxcblx0XHRcdFx0b25DaGFuZ2U6IG9wdGlvbnMub25DaGFuZ2UsXG5cdFx0XHRcdG9uRGVhY3RpdmF0ZTogaXRlbUVudHJ5ID0+IHRoaXMubG9jYWxDYWNoZS5vbkRlYWN0aXZhdGVJdGVtKGl0ZW1FbnRyeSlcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XG5cblx0XHRcdGxldCBpdGVtUmVzb3VyY2U7XG5cblx0XHRcdGlmIChpdGVtSWRNYXBbaXRlbUlkXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGl0ZW1SZXNvdXJjZSA9IGNvbnN0cnVjdG9yKGl0ZW1FbnRyeSkgYXMgVDtcblx0XHRcdFx0aXRlbXMucHVzaChpdGVtUmVzb3VyY2UpO1xuXHRcdFx0XHRpdGVtSWRNYXBbaXRlbUlkXSA9IGl0ZW1SZXNvdXJjZTtcblx0XHRcdH0gZWxzZVxuXHRcdFx0XHRpdGVtUmVzb3VyY2UgPSBpdGVtSWRNYXBbaXRlbUlkXTtcblxuXHRcdFx0cmVzdWx0LnB1c2goaXRlbVJlc291cmNlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSBpdGVtRW50cmllc1xuXHQgKiBAcmV0dXJucyB7SXRlbVJlc291cmNlW119XG5cdCAqXG5cdCAqIFJldHVybnMgdGhlIEl0ZW1yZXNvdXJjZXMgdGhhdCB3aGVyZSByZW1vdmVkIENvbGxlY3Rpb24uXG5cdCAqIEZpbHRlcnMgb24gSXRlbVJlc291cmNlLmVudHJ5ID09PSBJdGVtRW50cnlcblx0ICovXG5cdHJlbW92ZUl0ZW1SZXNvdXJjZXMgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSk6IFRbXSB7XG5cdFx0Y29uc3QgcmVzdWx0OiBUW10gPSBbXTtcblxuXHRcdGZpbHRlckFycmF5KFxuXHRcdFx0dGhpcy5pdGVtcyxcblx0XHRcdGl0ZW1SZXNvdXJjZSA9PiB7XG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRcdFx0aWYgKGl0ZW1SZXNvdXJjZS5lbnRyeSA9PT0gaXRlbUVudHJ5KSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQucHVzaChpdGVtUmVzb3VyY2UpO1xuXHRcdFx0XHRcdFx0ZGVsZXRlIHRoaXMuaXRlbUlkTWFwW2l0ZW1FbnRyeS5pdGVtSWRdO1xuXG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRjYWxsT25BZGQgKGl0ZW1SZXNvdXJjZXM6IHRoaXNbJ2l0ZW1zJ10pOiB2b2lkIHtcblx0XHR0aGlzLm9wdGlvbnMub25BZGQoaXRlbVJlc291cmNlcywgdGhpcyk7XG5cdH1cblxuXHRjYWxsT25SZW1vdmUgKGl0ZW1SZXNvdXJjZXM6IHRoaXNbJ2l0ZW1zJ10pOiB2b2lkIHtcblx0XHR0aGlzLm9wdGlvbnMub25SZW1vdmUoaXRlbVJlc291cmNlcywgdGhpcyk7XG5cdH1cblxuXHRmb3JFYWNoIChjYWxsYmFjazogKGl0ZW1SZXNvdXJjZTogVCkgPT4gdm9pZCk6IHZvaWQge1xuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcylcblx0XHRcdGNhbGxiYWNrKGl0ZW1SZXNvdXJjZSk7XG5cdH1cblxuXHRmaWx0ZXIgKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBUKSA9PiBib29sZWFuKTogVFtdIHtcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcblx0XHRjb25zdCByZXN1bHQ6IFRbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcykge1xuXHRcdFx0aWYgKGNhbGxiYWNrKGl0ZW1SZXNvdXJjZSkpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1SZXNvdXJjZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGZpcnN0IChjYWxsYmFjazogKGl0ZW1SZXNvdXJjZTogVCkgPT4gYm9vbGVhbik6IFQgfCBudWxsIHtcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcblxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpIHtcblx0XHRcdGlmIChjYWxsYmFjayhpdGVtUmVzb3VyY2UpKVxuXHRcdFx0XHRyZXR1cm4gaXRlbVJlc291cmNlO1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0c29tZSAoY2FsbGJhY2s6IChpdGVtUmVzb3VyY2U6IFQpID0+IGJvb2xlYW4pOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5maXJzdChjYWxsYmFjaykgIT09IG51bGw7XG5cdH1cblxuXHRncm91cEJ5IChhcmd1bWVudDogc3RyaW5nIHwgKChpdGVtUmVzb3VyY2U6IFQpID0+IHN0cmluZyB8IG51bGwpKToge1trZXk6IHN0cmluZ106IFRbXX0ge1xuXHRcdGNvbnN0IGl0ZW1zUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcblx0XHRjb25zdCByZXN1bHQ6IHtba2V5OiBzdHJpbmddOiBUW119ID0ge307XG5cblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnc3RyaW5nJykge1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbXNSZXNvdXJjZXMpIHtcblx0XHRcdFx0Y29uc3QgdmFsdWUgPSBpdGVtUmVzb3VyY2UuZmllbGRzW2FyZ3VtZW50XTtcblxuXHRcdFx0XHRpZiAocmVzdWx0W3ZhbHVlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdHJlc3VsdFt2YWx1ZV0gPSBbXTtcblxuXHRcdFx0XHRyZXN1bHRbdmFsdWVdLnB1c2goaXRlbVJlc291cmNlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtc1Jlc291cmNlcykge1xuXHRcdFx0XHRjb25zdCB2YWx1ZSA9IGFyZ3VtZW50KGl0ZW1SZXNvdXJjZSk7XG5cblx0XHRcdFx0aWYgKHZhbHVlID09PSBudWxsKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdGlmIChyZXN1bHRbdmFsdWVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0cmVzdWx0W3ZhbHVlXSA9IFtdO1xuXG5cdFx0XHRcdHJlc3VsdFt2YWx1ZV0ucHVzaChpdGVtUmVzb3VyY2UpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRtYXA8VT4gKGFyZ3VtZW50OiBzdHJpbmcgfCAoKGl0ZW1SZXNvdXJjZTogVCkgPT4gVSkpOiBVW10ge1xuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xuXHRcdGNvbnN0IGxlbmd0aCA9IGl0ZW1SZXNvdXJjZXMubGVuZ3RoO1xuXHRcdGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheShsZW5ndGgpO1xuXG5cdFx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycpIHtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG5cdFx0XHRcdHJlc3VsdFtpXSA9IGl0ZW1SZXNvdXJjZXNbaV0uZmllbGRzW2FyZ3VtZW50XTtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuXHRcdFx0XHRyZXN1bHRbaV0gPSBhcmd1bWVudChpdGVtUmVzb3VyY2VzW2ldKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cmVkdWNlPFU+IChjYWxsYmFjazogKGl0ZW1SZXNvdXJjZTogVCwgdmFsdWU6IFUpID0+IFUsIHZhbHVlOiBVKTogVSB7XG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKVxuXHRcdFx0dmFsdWUgPSBjYWxsYmFjayhpdGVtUmVzb3VyY2UsIHZhbHVlKTtcblxuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXG5cdGV4dGVuZCAocXVlcnlDYWxsYmFjazogUXVlcnlDYWxsYmFjaywgcmV0dXJuQWxsSXRlbXM6IGJvb2xlYW4gPSBmYWxzZSwgY2FsbE9uQWRkPzogYm9vbGVhbik6IFByb21pc2VJbnRlcmZhY2U8dGhpc1snaXRlbXMnXT4ge1xuXHRcdHJldHVybiB0aGlzLmVudHJ5LmV4dGVuZChxdWVyeUNhbGxiYWNrLCB0aGlzLCBjYWxsT25BZGQsIHRydWUpXG5cdFx0XHQudGhlbihcblx0XHRcdFx0aXRlbVJlc291cmNlcyA9PiByZXR1cm5BbGxJdGVtcyA/IHRoaXMuaXRlbXMgOiBpdGVtUmVzb3VyY2VzXG5cdFx0XHQpO1xuXHR9XG5cblx0ZGVhY3RpdmF0ZSAoKTogdm9pZCB7XG5cdFx0dGhpcy5sb2NhbENhY2hlLmNsZWFyQ29sbGVjdGlvbih0aGlzKTtcblx0fVxuXG5cdGNsZWFyUmVzb3VyY2UgKCk6IHZvaWQge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZXMgPSB0aGlzLmVudHJ5LnJlc291cmNlcztcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcblx0XHRjb25zdCBpbmRleCA9IGNvbGxlY3Rpb25SZXNvdXJjZXMuaW5kZXhPZih0aGlzKTtcblxuXHRcdGlmIChpbmRleCAhPT0gLTEpXG5cdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2VzLnNwbGljZShpbmRleCwgMSk7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKVxuXHRcdFx0aXRlbVJlc291cmNlLmNsZWFyUmVzb3VyY2UoKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgTG9jYWxDYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgSXRlbVJlc291cmNlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSwgQ29sbGVjdGlvblJlc291cmNlT3B0aW9ucywgRWRpdFJlc291cmNlLCBWaWV3UmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvblZpZXdSZXNvdXJjZSA8VCBleHRlbmRzIEVkaXRSZXNvdXJjZSB8IFZpZXdSZXNvdXJjZSA9IFZpZXdSZXNvdXJjZT4gZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2UgPFQ+IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9ucyxcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlXG5cdCkge1xuXHRcdHN1cGVyKGl0ZW1SZXNvdXJjZUZhY3RvcnksIGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucywgbG9jYWxDYWNoZSk7XG5cdH1cbn1cbiIsImltcG9ydCB7IExvY2FsQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHtcblx0Q29sbGVjdGlvbkVudHJ5LFxuXHRDb2xsZWN0aW9uUmVzb3VyY2UsXG5cdENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnMsIEVkaXRSZXNvdXJjZSxcblx0SXRlbUVudHJ5LFxuXHRWaWV3UmVzb3VyY2Vcbn0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IEZpZWxkTWFwLCBJdGVtSWQsIEl0ZW1JZENvbnZlcnNpb25NYXAsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRWRpdFJlc291cmNlIDxUIGV4dGVuZHMgVmlld1Jlc291cmNlIHwgRWRpdFJlc291cmNlID0gVmlld1Jlc291cmNlPiBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZSA8VD4ge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBmYWN0b3J5OiBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnMsXG5cdFx0bG9jYWxDYWNoZTogTG9jYWxDYWNoZVxuXHQpIHtcblx0XHRzdXBlcihmYWN0b3J5Lml0ZW1SZXNvdXJjZUZhY3RvcnksIGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucywgbG9jYWxDYWNoZSk7XG5cdH1cblxuXHRzYXZlICgpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1JZENvbnZlcnNpb25NYXA+IHtcblx0XHRpZiAoIXRoaXMub3B0aW9ucy5lbmFibGVTYXZlKVxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBTYXZpbmcgZGlzYWJsZWQnKTtcblxuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gdGhpcy5lbnRyeTtcblx0XHRjb25zdCBwYXJlbnQgPSBjb2xsZWN0aW9uRW50cnkucGFyZW50O1xuXG5cdFx0aWYgKHBhcmVudCAhPT0gbnVsbCAmJiBmYWN0b3J5LmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudC5pdGVtSWQpKVxuXHRcdFx0cmV0dXJuIGZhY3RvcnkucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xuXG5cdFx0cmV0dXJuIGZhY3RvcnkuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkuY29uc3RydWN0KCkuZXhlY3V0ZShbXSwgW2NvbGxlY3Rpb25FbnRyeV0pO1xuXHR9XG5cblx0Ly8gVE9ETzogdXNlIGNhbGxiYWNrIGZ1bmN0aW9uXG5cdG1vdmVJdGVtcyAoaWRBcnJheTogSXRlbUlkW10sIGRlc3RpbmF0aW9uOiBDb2xsZWN0aW9uUmVzb3VyY2UsIGVuYWJsZUNhbGxiYWNrcz86IGJvb2xlYW4pOiB0aGlzWydpdGVtcyddIHtcblx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSB0aGlzLmVudHJ5O1xuXHRcdGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cblx0XHRpZiAob3B0aW9ucy5lbmFibGVTYXZlIHx8IG9wdGlvbnMubW9kSW5zdGFudClcblx0XHRcdHRocm93IG5ldyBFcnJvcignY29sbGVjdGlvblJlc291cmNlU2VydmljZTogQ2Fubm90IG1vdmUgaXRlbXM6IHNhdmluZyBlbmFibGVkJyk7XG5cblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlICE9PSBkZXN0aW5hdGlvbi5lbnRyeS5pdGVtVHlwZSlcblx0XHRcdHRocm93IG5ldyBFcnJvcignY29sbGVjdGlvblJlc291cmNlU2VydmljZTogQ2Fubm90IG1vdmUgaXRlbXM6IGl0ZW1UeXBlIG1pc21hdGNoJyk7XG5cblx0XHRjb25zdCByZW1vdmVkSXRlbVJlc291cmNlcyA9IGNvbGxlY3Rpb25FbnRyeS5yZW1vdmVJdGVtcyhpZEFycmF5LCB0aGlzLCBmYWxzZSwgZW5hYmxlQ2FsbGJhY2tzKTtcblx0XHRjb25zdCBpdGVtRW50cmllczogSXRlbUVudHJ5W10gPSBbXTtcblxuXHRcdGlmIChyZW1vdmVkSXRlbVJlc291cmNlcyAhPT0gbnVsbCkge1xuXHRcdFx0Zm9yIChjb25zdCByZW1vdmVkSXRlbVJlc291cmNlIG9mIHJlbW92ZWRJdGVtUmVzb3VyY2VzKVxuXHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKHJlbW92ZWRJdGVtUmVzb3VyY2UuZW50cnkpO1xuXG5cdFx0XHRkZXN0aW5hdGlvbi5lbnRyeS5hZGRJdGVtcyhpdGVtRW50cmllcywgZGVzdGluYXRpb24sIGZhbHNlLCBlbmFibGVDYWxsYmFja3MpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZW1vdmVkSXRlbVJlc291cmNlcztcblx0fVxuXG5cdHJlbW92ZUl0ZW1zIChpZEFycmF5OiBJdGVtSWRbXSwgY2FsbE9uUmVtb3ZlOiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2VJbnRlcmZhY2U8dGhpc1snaXRlbXMnXT4ge1xuXHRcdC8vIGNhbGxPblJlbW92ZSBzaG91bGQgYmUgZmFsc2UgaGVyZSB0byBwcmV2ZW50IG9uUmVtb3ZlIGZyb20gYmVpbmcgY2FsbGVkIHR3aWNlXG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuZW50cnkucmVtb3ZlSXRlbXMoaWRBcnJheSwgdGhpcywgZmFsc2UsIGZhbHNlKTtcblxuXHRcdGlmIChpdGVtUmVzb3VyY2VzID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIHRoaXMuZmFjdG9yeS5wcm9taXNlU2VydmljZS53aGVuKFtdKTtcblxuXHRcdGlmICh0aGlzLm9wdGlvbnMubW9kSW5zdGFudClcblx0XHRcdHJldHVybiB0aGlzLnNhdmUoKS50aGVuKFxuXHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0aWYgKGNhbGxPblJlbW92ZSlcblx0XHRcdFx0XHRcdHRoaXMuY2FsbE9uUmVtb3ZlKGl0ZW1SZXNvdXJjZXMpO1xuXG5cdFx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXM7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cblx0XHRpZiAoY2FsbE9uUmVtb3ZlKVxuXHRcdFx0dGhpcy5jYWxsT25SZW1vdmUoaXRlbVJlc291cmNlcyk7XG5cblx0XHRyZXR1cm4gdGhpcy5mYWN0b3J5LnByb21pc2VTZXJ2aWNlLndoZW4oaXRlbVJlc291cmNlcyk7XG5cdH1cblxuXHRyZW1vdmVJdGVtIChpdGVtSWQ6IEl0ZW1JZCwgY2FsbE9uUmVtb3ZlPzogYm9vbGVhbik6IFByb21pc2VJbnRlcmZhY2U8VD4ge1xuXHRcdHJldHVybiB0aGlzLnJlbW92ZUl0ZW1zKFtpdGVtSWRdLCBjYWxsT25SZW1vdmUpLnRoZW4oXG5cdFx0XHRpdGVtUmVzb3VyY2VzID0+IHtcblx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXNbMF07XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5mYWN0b3J5LmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0YWRkSXRlbXMgKHZhbHVlc0FycmF5OiBGaWVsZE1hcFtdLCBjYWxsT25BZGQ6IGJvb2xlYW4gPSB0cnVlLCBjYWxsT25BY3RpdmF0ZT86IGJvb2xlYW4pOiBQcm9taXNlSW50ZXJmYWNlPHRoaXNbJ2l0ZW1zJ10+IHtcblx0XHRjb25zdCBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5O1xuXHRcdGNvbnN0IG1vZEluc3RhbnQgPSB0aGlzLm9wdGlvbnMubW9kSW5zdGFudDtcblxuXHRcdHJldHVybiB0aGlzLmVudHJ5LmNyZWF0ZUl0ZW1zKHZhbHVlc0FycmF5KS50aGVuKFxuXHRcdFx0aXRlbUVudHJpZXMgPT4ge1xuXHRcdFx0XHRpZiAobW9kSW5zdGFudClcblx0XHRcdFx0XHRyZXR1cm4gaXRlbUVudHJpZXM7XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuZW50cnkucmVzb2x2ZURlcml2ZWRWYWx1ZXMoaXRlbUVudHJpZXMsIHRoaXMubG9jYWxDYWNoZS5pdGVtcyk7XG5cdFx0XHR9XG5cdFx0KS50aGVuKFxuXHRcdFx0aXRlbUVudHJpZXMgPT4ge1xuXHRcdFx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5lbnRyeS5hZGRJdGVtcyhcblx0XHRcdFx0XHRpdGVtRW50cmllcyxcblx0XHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdGNhbGxPbkFjdGl2YXRlXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0aWYgKGl0ZW1SZXNvdXJjZXMgPT09IG51bGwpXG5cdFx0XHRcdFx0cmV0dXJuIFtdO1xuXG5cdFx0XHRcdGlmIChtb2RJbnN0YW50KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2F2ZSgpLnRoZW4oXG5cdFx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChjYWxsT25BZGQpXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5jYWxsT25BZGQoaXRlbVJlc291cmNlcyk7XG5cblx0XHRcdFx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXM7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0ZmFjdG9yeS5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjYWxsT25BZGQpXG5cdFx0XHRcdFx0dGhpcy5jYWxsT25BZGQoaXRlbVJlc291cmNlcyk7XG5cblx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXM7XG5cdFx0XHR9LFxuXHRcdFx0ZmFjdG9yeS5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGFkZEl0ZW0gKHZhbHVlczogRmllbGRNYXAsIGNhbGxPbkFkZD86IGJvb2xlYW4sIGNhbGxPbkFjdGl2YXRlPzogYm9vbGVhbik6IFByb21pc2VJbnRlcmZhY2U8VD4ge1xuXHRcdHJldHVybiB0aGlzLmFkZEl0ZW1zKFt2YWx1ZXNdLCBjYWxsT25BZGQsIGNhbGxPbkFjdGl2YXRlKS50aGVuKFxuXHRcdFx0aXRlbVJlc291cmNlcyA9PiB7XG5cdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2VzWzBdO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZmFjdG9yeS5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGNsZWFyIChlbmFibGVDYWxsYmFja3M6IGJvb2xlYW4pIHtcblx0XHRyZXR1cm4gdGhpcy5lbnRyeS5jbGVhcih0aGlzLCBmYWxzZSwgZW5hYmxlQ2FsbGJhY2tzKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sdW1uU2V0IH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBUZW1wbGF0ZUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgQXBpUmVzcG9uc2UsIEZpZWxkTWFwLCBJdGVtVHlwZSwgUmVzcG9uc2VDb2x1bW5NYXAgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZSB7XG5cdGZpZWxkczogRmllbGRNYXA7XG5cdHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXA7XG5cdGNvbHVtbnM6IENvbHVtblNldDsgLy8gVE9ETzogcmVuYW1lIHRvIGNvbHVtblNldFxuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRmYWN0b3J5OiBUZW1wbGF0ZUZhY3RvcnksXG5cdFx0cHVibGljIGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRwdWJsaWMgcmVzcG9uc2U6IEFwaVJlc3BvbnNlLFxuXHRcdGFkZGl0aW9uYWxDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcFxuXHQpIHtcblx0XHR0aGlzLmZpZWxkcyA9IHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCByZXNwb25zZS5saW5rc1tpdGVtVHlwZV1bMF0pO1xuXG5cdFx0dGhpcy5yZXNwb25zZUNvbHVtbnMgPSBmYWN0b3J5LmNvbHVtblV0aWwubWVyZ2VSZXNwb25zZUNvbHVtbnMocmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCksIGFkZGl0aW9uYWxDb2x1bW5zKS5tZXJnZWQ7XG5cblx0XHR0aGlzLmNvbHVtbnMgPSBmYWN0b3J5LmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCB0cnVlLCB0aGlzLnJlc3BvbnNlQ29sdW1ucyk7XG5cdH1cbn1cbiIsIi8vIHNob3VsZCBiZSBvcmRlcmVkIGJ5IGRlcGVuZGVuY3khXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1FbnRyeU9wdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9JdGVtUmVzb3VyY2VPcHRpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vSXRlbUVudHJ5JztcbmV4cG9ydCAqIGZyb20gJy4vSXRlbVJlc291cmNlJztcbmV4cG9ydCAqIGZyb20gJy4vVmlld1Jlc291cmNlJztcbmV4cG9ydCAqIGZyb20gJy4vRWRpdFJlc291cmNlJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkVudHJ5T3B0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uRW50cnknO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uUmVzb3VyY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uVmlld1Jlc291cmNlJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkVkaXRSZXNvdXJjZSc7XG5leHBvcnQgKiBmcm9tICcuL1RlbXBsYXRlJztcbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG5pbXBvcnQgeyBRdWVyeVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IFF1ZXJ5UGFyc2VyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnlPcHRpb25zLCBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2UsIENvbGxlY3Rpb25RdWVyeSwgRW50cnlQYXJlbnROdWxsLCBJdGVtSWQgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlIHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcXVlcnlQYXJzZXJGYWN0b3J5OiBRdWVyeVBhcnNlckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZVxuXHQpIHtcblxuXHR9XG5cblx0Ly8gbm8gbmVlZCB0byB3b3JyeSBhYm91dCB0aGUgY29sdW1ucyBwcm9wZXJ0eSwgaXQgd2lsbCBiZSByZXBsYWNlZCBpbiB3aGVuIGNvbHVtbnMgYXJlIGV4cGFuZGVkXG5cdGNsb25lT3B0aW9ucyAob3B0aW9uczogQ29sbGVjdGlvbkVudHJ5T3B0aW9ucywgcGFyZW50OiBFbnRyeVBhcmVudE51bGwpIHtcblx0XHRjb25zdCByZXN1bHQgPSBuZXcgQ29sbGVjdGlvbkVudHJ5T3B0aW9ucyhvcHRpb25zKTsgLy8gZG9lcyBhIHNoYWxsb3cgY29weVxuXG5cdFx0cmVzdWx0LnF1ZXJ5UGFyYW1zID0gdGhpcy5jbG9uZVF1ZXJ5UGFyYW1zKG9wdGlvbnMucXVlcnlQYXJhbXMpO1xuXHRcdHJlc3VsdC5wYXJlbnQgPSBwYXJlbnQ7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cHJvY2Vzc09wdGlvbnMgKG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlKTogQ29sbGVjdGlvbkVudHJ5T3B0aW9ucyB7XG5cdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uRW50cnlPcHRpb25zKG9wdGlvbnMpO1xuXHR9XG5cblx0Y2xvbmVRdWVyeVBhcmFtczxUIGV4dGVuZHMgb2JqZWN0PiAocGFyYW1ldGVyczogVCk6IFQge1xuXHRcdGNvbnN0IHJlc3VsdDogYW55ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGtleSBpbiBwYXJhbWV0ZXJzKSB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IHBhcmFtZXRlcnNba2V5XTtcblx0XHRcdGxldCBjbG9uZTtcblxuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKVxuXHRcdFx0XHRjbG9uZSA9IHZhbHVlLnNsaWNlKCk7IC8vIHdlJ3JlIG9ubHkgdXNpbmcgcHJpbWl0aXZlIGFycmF5c1xuXHRcdFx0ZWxzZSBpZiAobW9tZW50LmlzTW9tZW50KHZhbHVlKSlcblx0XHRcdFx0Y2xvbmUgPSB2YWx1ZS5jbG9uZSgpO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRjbG9uZSA9IHZhbHVlO1xuXG5cdFx0XHRyZXN1bHRba2V5XSA9IGNsb25lO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRjcmVhdGVRdWVyeSAob3B0aW9uczogQ29sbGVjdGlvbkVudHJ5T3B0aW9ucyk6IENvbGxlY3Rpb25RdWVyeSB7XG5cdFx0Y29uc3QgcGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XG5cblx0XHRsZXQgcXVlcnk7XG5cblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxuXHRcdFx0cXVlcnkgPSBvcHRpb25zLnF1ZXJ5O1xuXHRcdGVsc2Uge1xuXHRcdFx0Y29uc3QgbGlua2VkVG9RdWVyeSA9IHtsaW5rZWRUbzogcGFyZW50Lml0ZW1UeXBlLCBxdWVyeToge2lkOiAnJnBhcmVudElkJ319O1xuXHRcdFx0b3B0aW9ucy5xdWVyeVBhcmFtcy5wYXJlbnRJZCA9IHBhcmVudC5pdGVtSWQ7XG5cblx0XHRcdHF1ZXJ5ID0gb3B0aW9ucy5xdWVyeSA9PT0gbnVsbCA/XG5cdFx0XHRcdGxpbmtlZFRvUXVlcnkgOlxuXHRcdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5hZGRBbmRDb25kaXRpb24ob3B0aW9ucy5xdWVyeSwgbGlua2VkVG9RdWVyeSk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcGFyc2VkUXVlcnkgPSB0aGlzLnF1ZXJ5UGFyc2VyRmFjdG9yeS5jb25zdHJ1Y3QocXVlcnksIG9wdGlvbnMucXVlcnlQYXJhbXMpLnBhcnNlKCk7XG5cblx0XHRyZXR1cm4ge29iamVjdDogcGFyc2VkUXVlcnlbMF0sIHN0cmluZzogcGFyc2VkUXVlcnlbMV19O1xuXHR9XG5cblx0Z2V0SWRBcnJheSAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCBhY2N1bXVsYXRvcjogSXRlbUlkW10gPSBbXSk6IEl0ZW1JZFtdIHtcblx0XHRpZiAoYWNjdW11bGF0b3IgPT09IHVuZGVmaW5lZClcblx0XHRcdGFjY3VtdWxhdG9yID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdGFjY3VtdWxhdG9yLnB1c2goaXRlbUVudHJ5Lml0ZW1JZCk7XG5cblx0XHRyZXR1cm4gYWNjdW11bGF0b3I7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtJdGVtRW50cnlbXX0gaXRlbUVudHJpZXNcblx0ICogQHBhcmFtIHsoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGJvb2xlYW59IGNhbGxiYWNrXG5cdCAqIEByZXR1cm5zIHtJdGVtRW50cnlbXX1cblx0ICpcblx0ICogZmlsdGVyIGFuIGFycmF5IGFjY29yZGluZyB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uIFJldHVybiB0aGUgZW50cmllcyB0aGF0IGZhaWxlZCB0aGUgY29uZGl0aW9uXG5cdCAqIFJlcGxhY2UgdGhlIGdpdmVuIGFycmF5IHdpdGggdGhlIGVudHJpZXMgdGhhdCBkaWRuJ3QgZmFpbCB0aGUgY29uZGl0aW9uLlxuXHQgKi9cblx0ZmlsdGVyQXJyYXkgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgY2FsbGJhY2s6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gYm9vbGVhbik6IEl0ZW1FbnRyeVtdIHtcblx0XHRjb25zdCBmaWx0ZXJlZEVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XG5cdFx0Y29uc3QgcmVtb3ZlZEVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdChjYWxsYmFjayhpdGVtRW50cnkpID8gZmlsdGVyZWRFbnRyaWVzIDogcmVtb3ZlZEVudHJpZXMpLnB1c2goaXRlbUVudHJ5KTtcblxuXHRcdGlmIChyZW1vdmVkRW50cmllcy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gcmVtb3ZlZEVudHJpZXM7XG5cblx0XHRpdGVtRW50cmllcy5sZW5ndGggPSBmaWx0ZXJlZEVudHJpZXMubGVuZ3RoO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtRW50cmllcy5sZW5ndGg7IGkrKylcblx0XHRcdGl0ZW1FbnRyaWVzW2ldID0gZmlsdGVyZWRFbnRyaWVzW2ldO1xuXG5cdFx0cmV0dXJuIHJlbW92ZWRFbnRyaWVzO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uRW50cnlPcHRpb25zLCBDb2xsZWN0aW9uVmlld1Jlc291cmNlLCBpZGVudGl0eSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uLyc7XG5pbXBvcnQge1xuXHRCYXRjaFN0YXR1cyxcblx0Q29sbGVjdGlvbkNhY2hlLFxuXHRDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRDb2xsZWN0aW9uTWF0Y2hlcixcblx0Q29sdW1uRXhwYW5zaW9uLFxuXHRDb2x1bW5IYW5kbGVyLFxuXHRDb2x1bW5TZXQsXG5cdEl0ZW1DYWNoZSxcblx0SXRlbUhhbmRsZXIsXG5cdEl0ZW1SZXF1ZXN0U2VydmljZSxcblx0S2V5U2VydmljZSxcblx0UXVlcnlTZXJ2aWNlXG59IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgRU5UUllfU1RBVFVTIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7XG5cdEJhdGNoU3RhdHVzRmFjdG9yeSxcblx0Q29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0Q29sbGVjdGlvbkVudHJ5RmFjdG9yeSxcblx0Q29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxuXHRDb2x1bW5TZXRGYWN0b3J5LFxuXHRRdWVyeVBhcnNlckZhY3Rvcnlcbn0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgQ29sbGVjdGlvblJlc291cmNlLCBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtcblx0QXBpUmVxdWVzdENvbHVtbixcblx0Q29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXAsXG5cdENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwLFxuXHRFbnRyeVBhcmVudCxcblx0RW50cnlTdGF0dXMsXG5cdEl0ZW1FbnRyeVBhcmVudElkTWFwLFxuXHRJdGVtSWQsXG5cdEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcCxcblx0SXRlbVR5cGUsXG5cdFF1ZXJ5Q2FsbGJhY2tcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBoYXNQcm9wZXJ0aWVzIH0gZnJvbSAnLi9VdGlsJztcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25IYW5kbGVyIHtcblx0ZW50cmllczogQ29sbGVjdGlvbkNhY2hlO1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGJhdGNoU3RhdHVzRmFjdG9yeTogQmF0Y2hTdGF0dXNGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlRmFjdG9yeTogQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25FbnRyeUZhY3Rvcnk6IENvbGxlY3Rpb25FbnRyeUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5OiBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxuXHRcdHByaXZhdGUgaXRlbVJlcXVlc3RTZXJ2aWNlOiBJdGVtUmVxdWVzdFNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgcXVlcnlQYXJzZXJGYWN0b3J5OiBRdWVyeVBhcnNlckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZVxuXHQpIHtcblx0XHR0aGlzLmVudHJpZXMgPSB0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XG5cdH1cblxuXHQvKipcblx0ICogQGRlcHJlY2F0ZWQsIHVzZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnlcblx0ICovXG5cdHJlbW92ZUZyb21BbmRBZGRUb0NvbGxlY3Rpb25zIChjb2xsZWN0aW9uTWFwOiBhbnksIHVwZGF0ZUluaXRpYWw/OiBib29sZWFuKTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gY29sbGVjdGlvbk1hcCkge1xuXHRcdFx0Y29uc3QgZW50cnkgPSBjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF07XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uRW50cnkgPSBlbnRyeS5jb2xsZWN0aW9uO1xuXG5cdFx0XHRjb2xsZWN0aW9uLnJlbW92ZUl0ZW1zKGVudHJ5Lm5vdGZpdHRpbmcsIG51bGwsIHRydWUpO1xuXHRcdFx0Y29sbGVjdGlvbi5hZGRJdGVtcyhlbnRyeS5maXR0aW5nLCBudWxsLCB0cnVlKTsgLy8gZG9lc24ndCBkbyBhbnl0aGluZyB3aXRoIGluaXRpYWxcblxuXHRcdFx0aWYgKGVudHJ5Lm1heWJlLmxlbmd0aCA+IDApXG5cdFx0XHRcdGNvbGxlY3Rpb24uZXh0ZW5kKGlkZW50aXR5LCBudWxsLCB0cnVlLCB1cGRhdGVJbml0aWFsKTtcblx0XHR9XG5cdH1cblxuXHRnZXRDb2xsZWN0aW9uTWF0Y2hlciAoKTogQ29sbGVjdGlvbk1hdGNoZXIge1xuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QoW3RoaXMuZW50cmllc10sIHRydWUsIHRydWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBkZXByZWNhdGVkLCB1c2UgY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5XG5cdCAqL1xuXHRyZW1vdmVGcm9tQ29sbGVjdGlvbnM8VCBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZSA9IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U+IChcblx0XHRjb2xsZWN0aW9uTWFwLFxuXHRcdHVwZGF0ZUluaXRpYWw/OiBib29sZWFuLFxuXHRcdHJlc3VsdFJlc291cmNlOiBUIHwgbnVsbCA9IG51bGxcblx0KTogVFsnaXRlbXMnXSB8IG51bGwge1xuXHRcdGxldCByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXTtcblx0XHRcdGNvbnN0IGZpdHRpbmcgPSBtYXBFbnRyeS5maXR0aW5nO1xuXHRcdFx0Y29uc3QgbWF5YmUgPSBtYXBFbnRyeS5tYXliZTtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5ID0gbWFwRW50cnkuY29sbGVjdGlvbjtcblx0XHRcdGNvbnN0IGlkQXJyYXk6IEl0ZW1JZFtdID0gW107XG5cblx0XHRcdGZvciAoY29uc3QgZml0dGluZ0l0ZW0gb2YgZml0dGluZylcblx0XHRcdFx0aWRBcnJheS5wdXNoKGZpdHRpbmdJdGVtLml0ZW1JZCk7XG5cblx0XHRcdGZvciAoY29uc3QgbWF5YmVJdGVtIG9mIG1heWJlKVxuXHRcdFx0XHRpZEFycmF5LnB1c2gobWF5YmVJdGVtKTtcblxuXHRcdFx0aWYgKHJlc3VsdFJlc291cmNlICE9PSBudWxsICYmIGNvbGxlY3Rpb25FbnRyeSA9PT0gcmVzdWx0UmVzb3VyY2UuZW50cnkpXG5cdFx0XHRcdHJlc3VsdCA9IGNvbGxlY3Rpb25FbnRyeS5yZW1vdmVJdGVtcyhpZEFycmF5LCByZXN1bHRSZXNvdXJjZSwgdXBkYXRlSW5pdGlhbCk7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5yZW1vdmVJdGVtcyhpZEFycmF5LCBudWxsLCB1cGRhdGVJbml0aWFsKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Ly8gVE9ETzogbWF5YmUsIGJvb2xlYW4gaW5zdGVhZCBvZiBtZXNzYWdlXG5cdC8qKlxuXHQgKiBAZGVwcmVjYXRlZCwgdXNlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeVxuXHQgKi9cblx0YWRkVG9Db2xsZWN0aW9uczxUIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlID0gQ29sbGVjdGlvblZpZXdSZXNvdXJjZT4gKFxuXHRcdGNvbGxlY3Rpb25NYXAsXG5cdFx0dXBkYXRlSW5pdGlhbDogYm9vbGVhbixcblx0XHRyZXN1bHRSZXNvdXJjZTogVCB8IG51bGwgPSBudWxsXG5cdCk6IFRbJ2l0ZW1zJ10ge1xuXHRcdGxldCByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXTtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IG1hcEVudHJ5LmNvbGxlY3Rpb247XG5cblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXNEZWZlcnJlZCgpKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0aWYgKHJlc3VsdFJlc291cmNlICE9PSBudWxsICYmIGNvbGxlY3Rpb25FbnRyeSA9PT0gcmVzdWx0UmVzb3VyY2UuZW50cnkpXG5cdFx0XHRcdHJlc3VsdCA9IGNvbGxlY3Rpb25FbnRyeS5hZGRJdGVtcyhtYXBFbnRyeS5maXR0aW5nLCByZXN1bHRSZXNvdXJjZSwgdXBkYXRlSW5pdGlhbCk7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5hZGRJdGVtcyhtYXBFbnRyeS5maXR0aW5nLCBudWxsLCB1cGRhdGVJbml0aWFsKTtcblxuXHRcdFx0aWYgKHVwZGF0ZUluaXRpYWwgJiYgbWFwRW50cnkubWF5YmUubGVuZ3RoID4gMClcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LmV4dGVuZChpZGVudGl0eSwgbnVsbCwgdHJ1ZSwgdXBkYXRlSW5pdGlhbCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGJhdGNoRXhwYW5kIChcblx0XHRwYXJlbnRUeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0Y29sbGVjdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwLFxuXHRcdG5ld0NvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5bXVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwPiB7XG5cdFx0aWYgKG5ld0NvbHVtbnMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihjb2xsZWN0aW9ucyk7XG5cblx0XHRjb25zdCBwYXJlbnRJZEFycmF5OiBJdGVtSWRbXSA9IFtdO1xuXHRcdGxldCBpdGVtRW50cmllczogSXRlbUVudHJ5W10gPSBbXTtcblxuXHRcdC8vIFRPRE86IGZpbHRlciBsb2NhbCBpdGVtcz9cblxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gY29sbGVjdGlvbnMpIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGNvbGxlY3Rpb25zW3BhcmVudElkXS5lbnRyeTtcblxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LmRlZmVyKCk7XG5cblx0XHRcdHBhcmVudElkQXJyYXkucHVzaCgoPEVudHJ5UGFyZW50PmNvbGxlY3Rpb25FbnRyeS5wYXJlbnQpLml0ZW1JZCk7XG5cdFx0XHRpdGVtRW50cmllcyA9IGl0ZW1FbnRyaWVzLmNvbmNhdChjb2xsZWN0aW9uRW50cnkuaXRlbXMpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5yZXF1ZXN0TGlua0l0ZW1zKFxuXHRcdFx0cGFyZW50VHlwZSxcblx0XHRcdHBhcmVudElkQXJyYXksXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdG51bGwsXG5cdFx0XHRuZXdDb2x1bW5zXG5cdFx0KS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzRXhwYW5zaW9uKFxuXHRcdFx0XHRcdG5ld0NvbHVtbnMsXG5cdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0aXRlbUVudHJpZXNcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIG9mIHBhcmVudElkQXJyYXkpIHtcblx0XHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBjb2xsZWN0aW9uc1twYXJlbnRJZF0uZW50cnk7XG5cblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuZXhwYW5kQ29sdW1ucyhjb2x1bW5FeHBhbnNpb24pO1xuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5fcmVzb2x2ZSgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25zO1xuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxuXHRiYXRjaEV4dGVuZCAoXG5cdFx0cGFyZW50VHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25FbnRyeU9wdGlvbnMsXG5cdFx0cXVlcnlDYWxsYmFjazogUXVlcnlDYWxsYmFjayxcblx0XHRjb2xsZWN0aW9uczogQ29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXAsXG5cdFx0cmV0dXJuQWxsSXRlbXM6IGJvb2xlYW4gPSBmYWxzZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcD4ge1xuXHRcdGlmICghaGFzUHJvcGVydGllcyhjb2xsZWN0aW9ucykpXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKHt9KTtcblxuXHRcdGNvbnN0IHBhcmVudElkQXJyYXk6IEl0ZW1JZFtdID0gW107XG5cdFx0bGV0IGl0ZW1JZEFycmF5OiBJdGVtSWRbXSA9IFtdO1xuXG5cdFx0b3B0aW9ucy5xdWVyeVBhcmFtcyA9IHF1ZXJ5Q2FsbGJhY2sob3B0aW9ucy5xdWVyeVBhcmFtcyk7XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGNvbGxlY3Rpb25zKSB7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBjb2xsZWN0aW9uc1twYXJlbnRJZF0uZW50cnk7XG5cblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5leHRlbmRRdWVyeShxdWVyeUNhbGxiYWNrKTtcblx0XHRcdHBhcmVudElkQXJyYXkucHVzaCgoPEVudHJ5UGFyZW50PmNvbGxlY3Rpb25FbnRyeS5wYXJlbnQpLml0ZW1JZCk7XG5cblx0XHRcdGl0ZW1JZEFycmF5ID0gaXRlbUlkQXJyYXkuY29uY2F0KGNvbGxlY3Rpb25FbnRyeS5nZXRJZEFycmF5KCkpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5yZXF1ZXN0TGlua0l0ZW1zKFxuXHRcdFx0cGFyZW50VHlwZSxcblx0XHRcdHBhcmVudElkQXJyYXksXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLmFkZEFuZENvbmRpdGlvbihcblx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNyZWF0ZVF1ZXJ5KG9wdGlvbnMpLm9iamVjdCxcblx0XHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UuY3JlYXRlTm90SW4oaXRlbUlkQXJyYXkpXG5cdFx0XHQpLFxuXHRcdFx0b3B0aW9ucy5jb2x1bW5zXG5cdFx0KS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc0xpbmtSZXNwb25zZShcblx0XHRcdFx0XHRyZXNwb25zZSxcblx0XHRcdFx0XHRwYXJlbnRUeXBlLFxuXHRcdFx0XHRcdHBhcmVudElkQXJyYXksXG5cdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0b3B0aW9uc1xuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihcblx0XHRcdGl0ZW1FbnRyeVJlc291cmNlID0+IHtcblx0XHRcdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBvZiBwYXJlbnRJZEFycmF5KSB7XG5cdFx0XHRcdFx0Y29uc3QgY29sbGVjdGlvblJlc291cmNlID0gY29sbGVjdGlvbnNbcGFyZW50SWRdO1xuXHRcdFx0XHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSBjb2xsZWN0aW9uUmVzb3VyY2UuZW50cnkuYWRkSXRlbXMoIC8vIHNob3VsZCBnbyBmaXJzdFxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5UmVzb3VyY2UuaXRlbXNbcGFyZW50SWRdLFxuXHRcdFx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlXG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdHJlc3VsdFtwYXJlbnRJZF0gPSByZXR1cm5BbGxJdGVtcyA/IGNvbGxlY3Rpb25SZXNvdXJjZS5pdGVtcyA6IGl0ZW1SZXNvdXJjZXM7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRiYXRjaEZldGNoIChcblx0XHRwYXJlbnRUeXBlOiBJdGVtVHlwZSxcblx0XHRwYXJlbnRJZEFycmF5OiBJdGVtSWRbXSxcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbkVudHJ5T3B0aW9ucyxcblx0XHRpdGVtQ2FjaGU6IEl0ZW1DYWNoZSxcblx0XHRsb2NhbENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlLFxuXHRcdGRlZmVycmVkQ29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGVcblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcD4ge1xuXHRcdGNvbnN0IGVycm9ySGFuZGxlciA9IHRoaXMuZXJyb3JIYW5kbGVyO1xuXHRcdGNvbnN0IGJhdGNoU3RhdHVzOiBCYXRjaFN0YXR1czxDb2xsZWN0aW9uRW50cnk+ID0gdGhpcy5iYXRjaFN0YXR1c0ZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkgPT4gKDxFbnRyeVBhcmVudD5jb2xsZWN0aW9uRW50cnkucGFyZW50KS5pdGVtSWQsXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkgPT4gY29sbGVjdGlvbkVudHJ5LnByb21pc2Vcblx0XHQpO1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBvZiBwYXJlbnRJZEFycmF5KSB7XG5cdFx0XHRiYXRjaFN0YXR1cy5hZGQoXG5cdFx0XHRcdHRoaXMuZ2V0RW50cnlTdGF0dXMoXG5cdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNsb25lT3B0aW9ucyhvcHRpb25zLCB7aXRlbVR5cGU6IHBhcmVudFR5cGUsIGl0ZW1JZDogcGFyZW50SWR9KSxcblx0XHRcdFx0XHRsb2NhbENvbGxlY3Rpb25DYWNoZSxcblx0XHRcdFx0XHRkZWZlcnJlZENvbGxlY3Rpb25DYWNoZVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChiYXRjaFN0YXR1cy5nZXRQcm9taXNlcygpKS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRjb25zdCByZXF1ZXN0SWRzID0gYmF0Y2hTdGF0dXMuZ2V0UmVxdWVzdElkcygpO1xuXHRcdFx0XHRsZXQgaXRlbUVudHJ5Q29tcG91bmRQcm9taXNlO1xuXHRcdFx0XHRsZXQgYWRkaXRpb25hbFF1ZXJ5O1xuXG5cdFx0XHRcdGlmIChvcHRpb25zLnF1ZXJ5ID09PSBudWxsKVxuXHRcdFx0XHRcdGFkZGl0aW9uYWxRdWVyeSA9IG51bGw7XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IHBhcnNlZFF1ZXJ5ID0gdGhpcy5xdWVyeVBhcnNlckZhY3RvcnkuY29uc3RydWN0KG9wdGlvbnMucXVlcnksIG9wdGlvbnMucXVlcnlQYXJhbXMpLnBhcnNlKCk7XG5cdFx0XHRcdFx0YWRkaXRpb25hbFF1ZXJ5ID0ge29iamVjdDogcGFyc2VkUXVlcnlbMF0sIHN0cmluZzogcGFyc2VkUXVlcnlbMV19O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHJlcXVlc3RJZHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdGl0ZW1FbnRyeUNvbXBvdW5kUHJvbWlzZSA9IHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RMaW5rSXRlbXMoXG5cdFx0XHRcdFx0XHRwYXJlbnRUeXBlLFxuXHRcdFx0XHRcdFx0cmVxdWVzdElkcyxcblx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdFx0YWRkaXRpb25hbFF1ZXJ5ID09PSBudWxsID8gbnVsbCA6IGFkZGl0aW9uYWxRdWVyeS5vYmplY3QsXG5cdFx0XHRcdFx0XHRvcHRpb25zLmNvbHVtbnNcblx0XHRcdFx0XHQpLnRoZW4oXG5cdFx0XHRcdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzTGlua1Jlc3BvbnNlKFxuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHRcdFx0XHRcdHBhcmVudFR5cGUsXG5cdFx0XHRcdFx0XHRcdFx0cmVxdWVzdElkcyxcblx0XHRcdFx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRcdFx0XHRvcHRpb25zXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYmF0Y2hTdGF0dXMuaGFzRW50cmllcyhbRU5UUllfU1RBVFVTLkxPQ0FMXSkpIHtcblx0XHRcdFx0XHRpdGVtRW50cnlDb21wb3VuZFByb21pc2UgPSB0aGlzLmNvbHVtbkhhbmRsZXIuZmV0Y2goaXRlbVR5cGUsIG9wdGlvbnMuY29sdW1ucykudGhlbihcblx0XHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1ucyA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0Y29sdW1uczogdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdFx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdFx0XHRcdFx0b3B0aW9ucy5jb2x1bW5zLFxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZmFsc2Vcblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gZWxzZVxuXHRcdFx0XHRcdHJldHVybiBiYXRjaFN0YXR1cy5nZXRNYXAoKTtcblxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5Q29tcG91bmRQcm9taXNlLnRoZW4oXG5cdFx0XHRcdFx0aXRlbUVudHJ5Q29tcG91bmQgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5TWFwID0gaXRlbUNhY2hlLmJhdGNoR2V0TG9jYWxCeVBhcmVudChcblx0XHRcdFx0XHRcdFx0cGFyZW50VHlwZSxcblx0XHRcdFx0XHRcdFx0cGFyZW50SWRBcnJheSxcblx0XHRcdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0XHRcdGFkZGl0aW9uYWxRdWVyeVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0bGV0IGl0ZW1FbnRyeUFycmF5OiBJdGVtRW50cnlbXSA9IFtdO1xuXG5cdFx0XHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGl0ZW1FbnRyeU1hcClcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5QXJyYXkgPSBpdGVtRW50cnlBcnJheS5jb25jYXQoaXRlbUVudHJ5TWFwW3BhcmVudElkXSk7XG5cblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLmV4cGFuZExvY2FsSXRlbUVudHJpZXMoXG5cdFx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnlBcnJheSxcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5Q29tcG91bmQuY29sdW1ucyxcblx0XHRcdFx0XHRcdFx0aXRlbUNhY2hlXG5cdFx0XHRcdFx0XHQpLnRoZW4oXG5cdFx0XHRcdFx0XHRcdCgpID0+IHRoaXMuaGFuZGxlQmF0Y2hSZXNwb25zZShiYXRjaFN0YXR1cywgaXRlbUVudHJ5Q29tcG91bmQsIGl0ZW1FbnRyeU1hcCksXG5cdFx0XHRcdFx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHQvLyBUT0RPOiBzb21lIHN0YXR1c2VzIGFyZSBub3QgdGFrZW4gaW50byBhY2NvdW50XG5cdGhhbmRsZUJhdGNoUmVzcG9uc2UgKFxuXHRcdGJhdGNoU3RhdHVzOiBCYXRjaFN0YXR1czxDb2xsZWN0aW9uRW50cnk+LFxuXHRcdGl0ZW1FbnRyeUNvbXBvdW5kOiB7XG5cdFx0XHRjb2x1bW5zOiBDb2x1bW5TZXQsXG5cdFx0XHRjb2x1bW5FeHBhbnNpb24/OiBDb2x1bW5FeHBhbnNpb24sXG5cdFx0XHRpdGVtcz86IEl0ZW1FbnRyeVBhcmVudElkTWFwXG5cdFx0fSxcblx0XHRsb2NhbEl0ZW1zOiBJdGVtRW50cnlQYXJlbnRJZE1hcFxuXHQpOiBDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCB7XG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXG5cdFx0XHRbRU5UUllfU1RBVFVTLkNBQ0hFRF0sXG5cdFx0XHQoY29sbGVjdGlvbkVudHJ5LCBwYXJlbnRJZCkgPT4ge1xuXHRcdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gY29sbGVjdGlvbkVudHJ5O1xuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXG5cdFx0XHRbRU5UUllfU1RBVFVTLlJFU09MVkVdLFxuXHRcdFx0KGNvbGxlY3Rpb25FbnRyeSwgcGFyZW50SWQpID0+IHtcblx0XHRcdFx0Y29uc3QgaXRlbUVudHJpZXMgPSAoPEl0ZW1FbnRyeVBhcmVudElkTWFwPml0ZW1FbnRyeUNvbXBvdW5kLml0ZW1zKVtwYXJlbnRJZF07XG5cblx0XHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IGNvbGxlY3Rpb25FbnRyeS5yZXNvbHZlKFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGluaXRpYWw6IGl0ZW1FbnRyaWVzLFxuXHRcdFx0XHRcdFx0bW9kaWZpZWQ6IGl0ZW1FbnRyaWVzLmNvbmNhdChsb2NhbEl0ZW1zW3BhcmVudElkXSksXG5cdFx0XHRcdFx0XHRjb2x1bW5zOiBpdGVtRW50cnlDb21wb3VuZC5jb2x1bW5zXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXG5cdFx0XHRiYXRjaFN0YXR1cy5yZW1vdGVFeHBhbmRTdGF0dXMsXG5cdFx0XHQoY29sbGVjdGlvbkVudHJ5LCBwYXJlbnRJZCkgPT4ge1xuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuZXhwYW5kQ29sdW1ucyg8Q29sdW1uRXhwYW5zaW9uPml0ZW1FbnRyeUNvbXBvdW5kLmNvbHVtbkV4cGFuc2lvbik7XG5cdFx0XHRcdHJlc3VsdFtwYXJlbnRJZF0gPSBjb2xsZWN0aW9uRW50cnkuX3Jlc29sdmUoKTtcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0YmF0Y2hTdGF0dXMuZm9yRWFjaEVudHJ5KFxuXHRcdFx0W0VOVFJZX1NUQVRVUy5MT0NBTF0sXG5cdFx0XHQoY29sbGVjdGlvbkVudHJ5LCBwYXJlbnRJZCkgPT4ge1xuXHRcdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gY29sbGVjdGlvbkVudHJ5LnJlc29sdmUoXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0aW5pdGlhbDogbG9jYWxJdGVtc1twYXJlbnRJZF0sXG5cdFx0XHRcdFx0XHRjb2x1bW5zOiBpdGVtRW50cnlDb21wb3VuZC5jb2x1bW5zXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0ZmV0Y2ggKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uRW50cnlPcHRpb25zLFxuXHRcdGl0ZW1DYWNoZTogSXRlbUNhY2hlLFxuXHRcdGxvY2FsQ29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGUsXG5cdFx0ZGVmZXJyZWRDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25FbnRyeT4ge1xuXHRcdGNvbnN0IGVycm9ySGFuZGxlciA9IHRoaXMuZXJyb3JIYW5kbGVyO1xuXHRcdGNvbnN0IHN0YXR1c1Jlc291cmNlID0gdGhpcy5nZXRFbnRyeVN0YXR1cyhpdGVtVHlwZSwgb3B0aW9ucywgbG9jYWxDb2xsZWN0aW9uQ2FjaGUsIGRlZmVycmVkQ29sbGVjdGlvbkNhY2hlKTtcblx0XHRjb25zdCBlbnRyeSA9IHN0YXR1c1Jlc291cmNlLmVudHJ5O1xuXG5cdFx0c3dpdGNoIChzdGF0dXNSZXNvdXJjZS5zdGF0dXMpIHtcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLkNBQ0hFRDpcblx0XHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihlbnRyeSk7XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5QUk9NSVNFRDpcblx0XHRcdFx0cmV0dXJuIGVudHJ5LnByb21pc2U7XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5FWFBBTkQ6XG5cdFx0XHRcdHJldHVybiBlbnRyeS5leHBhbmQob3B0aW9ucy5jb2x1bW5zLCBpdGVtQ2FjaGUpLnRoZW4oXG5cdFx0XHRcdFx0KCkgPT4gZW50cnkuX3Jlc29sdmUoKSxcblx0XHRcdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdCk7XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkQ6XG5cdFx0XHRcdHJldHVybiBlbnRyeS5wcm9taXNlLnRoZW4oXG5cdFx0XHRcdFx0KCkgPT4gZW50cnkuZGVmZXIoKS5leHBhbmQob3B0aW9ucy5jb2x1bW5zLCBpdGVtQ2FjaGUpLFxuXHRcdFx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KS50aGVuKFxuXHRcdFx0XHRcdCgpID0+IGVudHJ5Ll9yZXNvbHZlKCksXG5cdFx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHQpO1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuTE9DQUw6XG5cdFx0XHRcdHJldHVybiB0aGlzLnJlc29sdmVMb2NhbChlbnRyeSwgaXRlbUNhY2hlKTtcblx0XHRcdGRlZmF1bHQ6IC8vIGNhc2UgRU5UUllfU1RBVFVTLlJFU09MVkU6XG5cdFx0XHRcdHJldHVybiB0aGlzLnJlc29sdmVSZW1vdGUoZW50cnksIGl0ZW1DYWNoZSk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0Q2FjaGVkRW50cnlTdGF0dXMgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LCBvcHRpb25zKTogRU5UUllfU1RBVFVTIHtcblx0XHRpZiAoIWNvbGxlY3Rpb25FbnRyeS5jb2x1bW5zLmlzU3VwZXJzZXRPZihvcHRpb25zLmNvbHVtbnMpKSB7XG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LmlzRGVmZXJyZWQoKSlcblx0XHRcdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkQ7XG5cblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5kZWZlcigpO1xuXG5cdFx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLkVYUEFORDtcblx0XHR9XG5cblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LmlzRGVmZXJyZWQoKSlcblx0XHRcdHJldHVybiBFTlRSWV9TVEFUVVMuUFJPTUlTRUQ7XG5cblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LnJlbG9hZFF1ZXVlZCkge1xuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LnJlbG9hZFF1ZXVlZCA9IGZhbHNlO1xuXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LmlzTG9jYWwoKSlcblx0XHRcdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5DQUNIRUQ7XG5cblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5kZWZlcigpO1xuXG5cdFx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLlJFU09MVkU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5DQUNIRUQ7XG5cdH1cblxuXHRnZXREZWZlcnJlZEVudHJ5U3RhdHVzIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0b3B0aW9ucyxcblx0XHRxdWVyeSxcblx0XHRkZWZlcnJlZEVudHJpZXM6IENvbGxlY3Rpb25DYWNoZVxuXHQpOiB7ZW50cnk6IENvbGxlY3Rpb25FbnRyeSwgaXNEZWZlcnJlZDogYm9vbGVhbn0ge1xuXHRcdGxldCBjb2xsZWN0aW9uRW50cnk7XG5cblx0XHRpZiAoIW9wdGlvbnMuZGVmZXJSZXF1ZXN0KSB7XG5cdFx0XHRjb2xsZWN0aW9uRW50cnkgPSB0aGlzLmNvbGxlY3Rpb25FbnRyeUZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCBvcHRpb25zKTtcblxuXHRcdFx0cmV0dXJuIHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBpc0RlZmVycmVkOiBmYWxzZX07XG5cdFx0fVxuXG5cdFx0Y29sbGVjdGlvbkVudHJ5ID0gZGVmZXJyZWRFbnRyaWVzLmdldEJ5UXVlcnkoaXRlbVR5cGUsIHF1ZXJ5KTtcblxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkgIT09IG51bGwpIHtcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5leHBhbmRSZXF1ZXN0Q29sdW1ucyhvcHRpb25zLmNvbHVtbnMpO1xuXG5cdFx0XHRyZXR1cm4ge2VudHJ5OiBjb2xsZWN0aW9uRW50cnksIGlzRGVmZXJyZWQ6IGZhbHNlfTtcblx0XHR9XG5cblx0XHRjb2xsZWN0aW9uRW50cnkgPSB0aGlzLmNvbGxlY3Rpb25FbnRyeUZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCBvcHRpb25zKTtcblxuXHRcdHJldHVybiB7ZW50cnk6IGRlZmVycmVkRW50cmllcy5hZGQoY29sbGVjdGlvbkVudHJ5KSwgaXNEZWZlcnJlZDogdHJ1ZX07XG5cdH1cblxuXHRnZXRFbnRyeVN0YXR1cyAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnMsXG5cdFx0bG9jYWxFbnRyaWVzOiBDb2xsZWN0aW9uQ2FjaGUsXG5cdFx0ZGVmZXJyZWRFbnRyaWVzOiBDb2xsZWN0aW9uQ2FjaGVcblx0KTogRW50cnlTdGF0dXM8Q29sbGVjdGlvbkVudHJ5PiB7XG5cdFx0Y29uc3QgcXVlcnkgPSB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuY3JlYXRlUXVlcnkob3B0aW9ucyk7XG5cdFx0bGV0IGNvbGxlY3Rpb25FbnRyeTtcblx0XHRsZXQgaXNEZWZlcnJlZDtcblxuXHRcdGlmICh0aGlzLmlzTG9jYWwob3B0aW9ucykpIHtcblx0XHRcdGNvbGxlY3Rpb25FbnRyeSA9IGxvY2FsRW50cmllcy5nZXRCeVF1ZXJ5KGl0ZW1UeXBlLCBxdWVyeSk7XG5cblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkgIT09IG51bGwpXG5cdFx0XHRcdHJldHVybiB7ZW50cnk6IGNvbGxlY3Rpb25FbnRyeSwgc3RhdHVzOiB0aGlzLmdldENhY2hlZEVudHJ5U3RhdHVzKGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucyl9O1xuXG5cdFx0XHQoe2VudHJ5OiBjb2xsZWN0aW9uRW50cnksIGlzRGVmZXJyZWR9ID0gdGhpcy5nZXREZWZlcnJlZEVudHJ5U3RhdHVzKFxuXHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0b3B0aW9ucyxcblx0XHRcdFx0cXVlcnksXG5cdFx0XHRcdGRlZmVycmVkRW50cmllc1xuXHRcdFx0KSk7XG5cblx0XHRcdGlmIChpc0RlZmVycmVkKVxuXHRcdFx0XHRyZXR1cm4ge2VudHJ5OiBjb2xsZWN0aW9uRW50cnksIHN0YXR1czogRU5UUllfU1RBVFVTLlBST01JU0VEfTtcblxuXHRcdFx0Ly8gbmV3IGxvY2FsIGVudHJ5IGNyZWF0ZWQsIHNob3VsZCBiZSBhZGRlZCB0byBsb2NhbCBjYWNoZSBvbmx5XG5cdFx0XHRyZXR1cm4ge2VudHJ5OiBsb2NhbEVudHJpZXMuYWRkKGNvbGxlY3Rpb25FbnRyeSksIHN0YXR1czogRU5UUllfU1RBVFVTLkxPQ0FMfTtcblx0XHR9XG5cblx0XHRjb2xsZWN0aW9uRW50cnkgPSB0aGlzLmVudHJpZXMuZ2V0QnlRdWVyeShpdGVtVHlwZSwgcXVlcnkpO1xuXG5cdFx0Ly8gZW50cnkgYWxyZWFkeSBleGlzdHMgaW4gZ2xvYmFsIGNhY2hlLCBhZGQgdG8gbG9jYWwgY2FjaGVcblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ICE9PSBudWxsKVxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0ZW50cnk6IGxvY2FsRW50cmllcy5hZGQoY29sbGVjdGlvbkVudHJ5KSxcblx0XHRcdFx0c3RhdHVzOiB0aGlzLmdldENhY2hlZEVudHJ5U3RhdHVzKGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucylcblx0XHRcdH07XG5cblx0XHQoe2VudHJ5OiBjb2xsZWN0aW9uRW50cnksIGlzRGVmZXJyZWR9ID0gdGhpcy5nZXREZWZlcnJlZEVudHJ5U3RhdHVzKGl0ZW1UeXBlLCBvcHRpb25zLCBxdWVyeSwgZGVmZXJyZWRFbnRyaWVzKSk7XG5cblx0XHRpZiAoaXNEZWZlcnJlZClcblx0XHRcdHJldHVybiB7ZW50cnk6IGNvbGxlY3Rpb25FbnRyeSwgc3RhdHVzOiBFTlRSWV9TVEFUVVMuUFJPTUlTRUR9O1xuXG5cdFx0Ly8gbmV3IGdsb2JhbCBlbnRyeSBjcmVhdGVkLCBhZGQgdG8gYm90aCBsb2NhbCBhbmQgZ2xvYmFsIGNhY2hlXG5cdFx0bG9jYWxFbnRyaWVzLmFkZChjb2xsZWN0aW9uRW50cnkpO1xuXHRcdHRoaXMuZW50cmllcy5hZGQoY29sbGVjdGlvbkVudHJ5KTtcblxuXHRcdHJldHVybiB7ZW50cnk6IGNvbGxlY3Rpb25FbnRyeSwgc3RhdHVzOiBFTlRSWV9TVEFUVVMuUkVTT0xWRX07XG5cdH1cblxuXHRyZXNvbHZlTG9jYWwgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LCBpdGVtQ2FjaGU6IEl0ZW1DYWNoZSk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvbkVudHJ5PiB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGU7XG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSBjb2xsZWN0aW9uRW50cnkub3B0aW9ucy5jb2x1bW5zO1xuXG5cdFx0cmV0dXJuIHRoaXMuY29sdW1uSGFuZGxlci5mZXRjaChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMpLnRoZW4oXG5cdFx0XHRyZXNwb25zZUNvbHVtbnMgPT4ge1xuXHRcdFx0XHRjb25zdCBjb2x1bW5TZXQgPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zLCBmYWxzZSk7XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhwYW5kTG9jYWxJdGVtRW50cmllcyhcblx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRpdGVtQ2FjaGUuZ2V0TG9jYWxCeVF1ZXJ5KGl0ZW1UeXBlLCBjb2xsZWN0aW9uRW50cnkucXVlcnkpLFxuXHRcdFx0XHRcdGNvbHVtblNldCxcblx0XHRcdFx0XHRpdGVtQ2FjaGVcblx0XHRcdFx0KS50aGVuKFxuXHRcdFx0XHRcdGxvY2FsRW50cmllcyA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gY29sbGVjdGlvbkVudHJ5LnJlc29sdmUoe2luaXRpYWw6IGxvY2FsRW50cmllcywgY29sdW1uczogY29sdW1uU2V0fSk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cmVzb2x2ZVJlbW90ZSAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIGl0ZW1DYWNoZTogSXRlbUNhY2hlKTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uRW50cnk+IHtcblx0XHRjb25zdCBlcnJvckhhbmRsZXIgPSB0aGlzLmVycm9ySGFuZGxlcjtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZTtcblxuXHRcdGxldCBjb2x1bW5TZXQ7XG5cblx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdEl0ZW1zKGNvbGxlY3Rpb25FbnRyeSkudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0Y29sdW1uU2V0ID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cnkub3B0aW9ucy5jb2x1bW5zLFxuXHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NSZXNwb25zZShcblx0XHRcdFx0XHRyZXNwb25zZSxcblx0XHRcdFx0XHRyZXNwb25zZS5saW5rc1tpdGVtVHlwZV0sXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LnBhcmVudCxcblx0XHRcdFx0XHRjb2x1bW5TZXRcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0cmVtb3RlRW50cmllcyA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmV4cGFuZExvY2FsSXRlbUVudHJpZXMoXG5cdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0aXRlbUNhY2hlLmdldExvY2FsQnlRdWVyeShpdGVtVHlwZSwgY29sbGVjdGlvbkVudHJ5LnF1ZXJ5KSxcblx0XHRcdFx0XHRjb2x1bW5TZXQsXG5cdFx0XHRcdFx0aXRlbUNhY2hlXG5cdFx0XHRcdCkudGhlbihcblx0XHRcdFx0XHRsb2NhbEVudHJpZXMgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25FbnRyeS5yZXNvbHZlKFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0aW5pdGlhbDogcmVtb3RlRW50cmllcyxcblx0XHRcdFx0XHRcdFx0XHRtb2RpZmllZDogcmVtb3RlRW50cmllcy5jb25jYXQobG9jYWxFbnRyaWVzKSxcblx0XHRcdFx0XHRcdFx0XHRjb2x1bW5zOiBjb2x1bW5TZXRcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGlzTG9jYWwgKG9wdGlvbnMpIHtcblx0XHRjb25zdCBwYXJlbnQgPSBvcHRpb25zLnBhcmVudDtcblxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRyZXR1cm4gdGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZChwYXJlbnQuaXRlbUlkKTtcblx0fVxuXG5cdHByaXZhdGUgZXhwYW5kTG9jYWxJdGVtRW50cmllcyAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcblx0XHRjb2x1bW5TZXQ6IENvbHVtblNldCxcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8SXRlbUVudHJ5W10+IHtcblx0XHRyZXR1cm4gdGhpcy5pdGVtSGFuZGxlci5leHBhbmRMb2NhbEVudHJpZXMoXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdGl0ZW1FbnRyaWVzLFxuXHRcdFx0Y29sdW1uU2V0LnJlcXVlc3QsXG5cdFx0XHRjb2x1bW5TZXQucmVzcG9uc2UsXG5cdFx0XHRsb2NhbEl0ZW1DYWNoZVxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IGlkZW50aXR5LCBJdGVtSWQgfSBmcm9tICcuLi8nO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBRdWVyeU1hdGNoZXJGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzLyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSwgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xuXG5leHBvcnQgdHlwZSBDb2xsZWN0aW9uTWF0Y2hlck1hdGNoZXMgPSB7XG5cdFtpdGVtSWQ6IG51bWJlcl06IHtcblx0XHRpdGVtOiBJdGVtRW50cnksXG5cdFx0aXNNYXRjaDogYm9vbGVhbiB8ICdtYXliZSdcblx0fVxufTtcblxuZXhwb3J0IHR5cGUgR3JvdXBlZENvbGxlY3Rpb25NYXRjaGVyUmVzdWx0ID0ge1xuXHRmaXR0aW5nOiBJdGVtRW50cnlbXSxcblx0bm90Rml0dGluZzogSXRlbUlkW10sXG5cdG1heWJlOiBJdGVtRW50cnlbXVxufTtcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25NYXRjaGVyIHtcblx0bWFwOiB7XG5cdFx0W2NvbGxlY3Rpb25FbnRyeUlkOiBudW1iZXJdOiB7XG5cdFx0XHRjb2xsZWN0aW9uOiBDb2xsZWN0aW9uRW50cnlcblx0XHRcdG1hdGNoZXM6IENvbGxlY3Rpb25NYXRjaGVyTWF0Y2hlc1xuXHRcdH1cblx0fSA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVzOiBDb2xsZWN0aW9uQ2FjaGVbXSxcblx0XHRwcml2YXRlIHVwZGF0ZUluaXRpYWw6IGJvb2xlYW4sXG5cdFx0cHJpdmF0ZSBjYWxsT25BY3RpdmF0ZTogYm9vbGVhblxuXHQpIHtcblxuXHR9XG5cblx0ZXhwYW5kIChpdGVtRW50cnk6IEl0ZW1FbnRyeSk6IHRoaXMge1xuXHRcdGNvbnN0IHF1ZXJ5TWF0Y2hlciA9IHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRpdGVtRW50cnkuaXRlbVR5cGUsXG5cdFx0XHRpdGVtRW50cnkuZ2V0RmllbGRzKCksXG5cdFx0XHRpdGVtRW50cnkucGFyZW50XG5cdFx0KTtcblxuXHRcdHJldHVybiB0aGlzLl9leHBhbmQoXG5cdFx0XHRpdGVtRW50cnksXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkgPT4gcXVlcnlNYXRjaGVyLm1hdGNoUXVlcnkoY29sbGVjdGlvbkVudHJ5LnF1ZXJ5Lm9iamVjdClcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBfZXhwYW5kIChcblx0XHRpdGVtRW50cnk6IEl0ZW1FbnRyeSxcblx0XHRtYXRjaEZ1bmN0aW9uOiAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpID0+IGJvb2xlYW4gfCAnbWF5YmUnXG5cdCk6IHRoaXMge1xuXHRcdGNvbnN0IG1hcCA9IHRoaXMubWFwO1xuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25DYWNoZSBvZiB0aGlzLmNvbGxlY3Rpb25DYWNoZXMpIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyaWVzID0gY29sbGVjdGlvbkNhY2hlLmdldEJ5SXRlbVR5cGUoaXRlbUVudHJ5Lml0ZW1UeXBlKTtcblxuXHRcdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgY29sbGVjdGlvbkVudHJpZXMpIHtcblx0XHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5SWQgPSBjb2xsZWN0aW9uRW50cnkuaWQ7XG5cdFx0XHRcdGxldCBtYXRjaGVzO1xuXG5cdFx0XHRcdGlmIChtYXBbY29sbGVjdGlvbkVudHJ5SWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0bWFwW2NvbGxlY3Rpb25FbnRyeUlkXSA9IHtjb2xsZWN0aW9uOiBjb2xsZWN0aW9uRW50cnksIG1hdGNoZXM6IHt9fTtcblxuXHRcdFx0XHRtYXRjaGVzID0gbWFwW2NvbGxlY3Rpb25FbnRyeUlkXS5tYXRjaGVzO1xuXG5cdFx0XHRcdGlmIChtYXRjaGVzW2l0ZW1JZF0gIT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRtYXRjaGVzW2l0ZW1JZF0gPSB7aXRlbTogaXRlbUVudHJ5LCBpc01hdGNoOiBtYXRjaEZ1bmN0aW9uKGNvbGxlY3Rpb25FbnRyeSl9O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Z2V0Q29sbGVjdGlvbnNXaXRoRml0dGluZ0l0ZW1zICgpOiBDb2xsZWN0aW9uRW50cnlbXSB7XG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uRW50cnlbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gdGhpcy5tYXApIHtcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gdGhpcy5tYXBbY29sbGVjdGlvbklkXTtcblxuXHRcdFx0aWYgKHRoaXMuaGFzRml0dGluZ0l0ZW1zKG1hcEVudHJ5Lm1hdGNoZXMpKVxuXHRcdFx0XHRyZXN1bHQucHVzaChtYXBFbnRyeS5jb2xsZWN0aW9uKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0YWRkVG9Db2xsZWN0aW9uczxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPiAocmVzdWx0UmVzb3VyY2U6IFUpOiBVWydpdGVtcyddO1xuXHRhZGRUb0NvbGxlY3Rpb25zIChyZXN1bHRSZXNvdXJjZT86IG51bGwpOiBudWxsO1xuXHRhZGRUb0NvbGxlY3Rpb25zPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U+IChyZXN1bHRSZXNvdXJjZT86IENvbGxlY3Rpb25SZXNvdXJjZSB8IG51bGwpOiBVWydpdGVtcyddIHwgbnVsbDtcblx0YWRkVG9Db2xsZWN0aW9uczxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPiAocmVzdWx0UmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSB8IG51bGwgPSBudWxsKTogVVsnaXRlbXMnXSB8IG51bGwge1xuXHRcdGxldCByZXN1bHQ6IGFueSA9IG51bGw7XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiB0aGlzLm1hcCkge1xuXHRcdFx0Y29uc3QgbWFwRW50cnkgPSB0aGlzLm1hcFtjb2xsZWN0aW9uSWRdO1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gbWFwRW50cnkuY29sbGVjdGlvbjtcblx0XHRcdGNvbnN0IGdyb3VwZWRJdGVtRW50cmllcyA9IHRoaXMuZ3JvdXBJdGVtRW50cmllcyhtYXBFbnRyeS5tYXRjaGVzKTtcblx0XHRcdGNvbnN0IGZpdHRpbmdJdGVtRW50cmllcyA9IGdyb3VwZWRJdGVtRW50cmllcy5maXR0aW5nO1xuXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LmlzRGVmZXJyZWQoKSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGlmIChyZXN1bHRSZXNvdXJjZSAhPT0gbnVsbCAmJiBjb2xsZWN0aW9uRW50cnkgPT09IHJlc3VsdFJlc291cmNlLmVudHJ5KSB7XG5cdFx0XHRcdHJlc3VsdCA9IGNvbGxlY3Rpb25FbnRyeS5hZGRJdGVtcyhcblx0XHRcdFx0XHRmaXR0aW5nSXRlbUVudHJpZXMsXG5cdFx0XHRcdFx0cmVzdWx0UmVzb3VyY2UsXG5cdFx0XHRcdFx0dGhpcy51cGRhdGVJbml0aWFsLFxuXHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0dGhpcy5jYWxsT25BY3RpdmF0ZVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LmFkZEl0ZW1zKFxuXHRcdFx0XHRcdGZpdHRpbmdJdGVtRW50cmllcyxcblx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdHRoaXMudXBkYXRlSW5pdGlhbCxcblx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdHRoaXMuY2FsbE9uQWN0aXZhdGVcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMudXBkYXRlSW5pdGlhbCAmJiBncm91cGVkSXRlbUVudHJpZXMubWF5YmUubGVuZ3RoID4gMClcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LmV4dGVuZChpZGVudGl0eSwgbnVsbCwgdHJ1ZSwgdGhpcy51cGRhdGVJbml0aWFsKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cmVtb3ZlRnJvbUNvbGxlY3Rpb25zPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U+IChyZXN1bHRSZXNvdXJjZTogVSk6IFVbJ2l0ZW1zJ107XG5cdHJlbW92ZUZyb21Db2xsZWN0aW9ucyAocmVzdWx0UmVzb3VyY2U/OiBudWxsKTogbnVsbDtcblx0cmVtb3ZlRnJvbUNvbGxlY3Rpb25zPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U+IChyZXN1bHRSZXNvdXJjZT86IENvbGxlY3Rpb25SZXNvdXJjZSB8IG51bGwpOiBVWydpdGVtcyddIHwgbnVsbDtcblx0cmVtb3ZlRnJvbUNvbGxlY3Rpb25zPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U+IChyZXN1bHRSZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlIHwgbnVsbCA9IG51bGwpOiBVWydpdGVtcyddIHwgbnVsbCB7XG5cdFx0bGV0IHJlc3VsdDogSXRlbVJlc291cmNlW10gfCBudWxsID0gbnVsbDtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIHRoaXMubWFwKSB7XG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IHRoaXMubWFwW2NvbGxlY3Rpb25JZF07XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBtYXBFbnRyeS5jb2xsZWN0aW9uO1xuXHRcdFx0Y29uc3QgZml0dGluZ0l0ZW1JZHMgPSB0aGlzLmdyb3VwSXRlbUlkcyhtYXBFbnRyeS5tYXRjaGVzKS5maXR0aW5nO1xuXG5cdFx0XHRpZiAocmVzdWx0UmVzb3VyY2UgPT09IG51bGwgfHwgY29sbGVjdGlvbkVudHJ5ICE9PSByZXN1bHRSZXNvdXJjZS5lbnRyeSlcblx0XHRcdFx0cmVzdWx0ID0gY29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGZpdHRpbmdJdGVtSWRzLCByZXN1bHRSZXNvdXJjZSwgdGhpcy51cGRhdGVJbml0aWFsKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGZpdHRpbmdJdGVtSWRzLCBudWxsLCB0aGlzLnVwZGF0ZUluaXRpYWwpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRyZW1vdmVGcm9tQW5kQWRkVG9Db2xsZWN0aW9ucyAoKTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gdGhpcy5tYXApIHtcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gdGhpcy5tYXBbY29sbGVjdGlvbklkXTtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IG1hcEVudHJ5LmNvbGxlY3Rpb247XG5cdFx0XHRjb25zdCBncm91cGVkSXRlbUVudHJpZXMgPSB0aGlzLmdyb3VwSXRlbUVudHJpZXMobWFwRW50cnkubWF0Y2hlcyk7XG5cblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5yZW1vdmVJdGVtcyhncm91cGVkSXRlbUVudHJpZXMubm90Rml0dGluZywgbnVsbCwgdGhpcy51cGRhdGVJbml0aWFsKTtcblxuXHRcdFx0Ly8gZG9lc24ndCBkbyBhbnl0aGluZyB3aXRoIGluaXRpYWxcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5hZGRJdGVtcyhncm91cGVkSXRlbUVudHJpZXMuZml0dGluZywgbnVsbCwgdGhpcy51cGRhdGVJbml0aWFsKTtcblxuXHRcdFx0aWYgKGdyb3VwZWRJdGVtRW50cmllcy5tYXliZS5sZW5ndGggPiAwKVxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuZXh0ZW5kKGlkZW50aXR5LCBudWxsLCB0cnVlLCB0aGlzLnVwZGF0ZUluaXRpYWwpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZ3JvdXBJdGVtRW50cmllcyAobWF0Y2hlczogQ29sbGVjdGlvbk1hdGNoZXJNYXRjaGVzKTogR3JvdXBlZENvbGxlY3Rpb25NYXRjaGVyUmVzdWx0IHtcblx0XHRjb25zdCBmaXR0aW5nOiBJdGVtRW50cnlbXSA9IFtdO1xuXHRcdGNvbnN0IG5vdEZpdHRpbmc6IEl0ZW1JZFtdID0gW107XG5cdFx0Y29uc3QgbWF5YmU6IEl0ZW1FbnRyeVtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBtYXRjaGVzKSB7XG5cdFx0XHRjb25zdCBtYXRjaCA9IG1hdGNoZXNbaXRlbUlkXTtcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IG1hdGNoLml0ZW07XG5cdFx0XHRjb25zdCBpc01hdGNoID0gbWF0Y2guaXNNYXRjaDtcblxuXHRcdFx0aWYgKGlzTWF0Y2ggPT09IHRydWUpXG5cdFx0XHRcdGZpdHRpbmcucHVzaChpdGVtRW50cnkpO1xuXHRcdFx0ZWxzZSBpZiAoaXNNYXRjaCA9PT0gZmFsc2UpXG5cdFx0XHRcdG5vdEZpdHRpbmcucHVzaChpdGVtRW50cnkuaXRlbUlkKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0bWF5YmUucHVzaChpdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7Zml0dGluZzogZml0dGluZywgbm90Rml0dGluZzogbm90Rml0dGluZywgbWF5YmU6IG1heWJlfTtcblx0fVxuXG5cdHByaXZhdGUgZ3JvdXBJdGVtSWRzIChtYXRjaGVzOiBDb2xsZWN0aW9uTWF0Y2hlck1hdGNoZXMpIHtcblx0XHQvLyBhbHNvIGluY2x1ZGVzICdtYXliZSc7XG5cdFx0Y29uc3QgZml0dGluZzogSXRlbUlkW10gPSBbXTtcblx0XHRjb25zdCBub3RGaXR0aW5nOiBJdGVtSWRbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gbWF0Y2hlcykge1xuXHRcdFx0Y29uc3QgbWF0Y2ggPSBtYXRjaGVzW2l0ZW1JZF07XG5cblx0XHRcdChtYXRjaC5pc01hdGNoID09PSBmYWxzZSA/IG5vdEZpdHRpbmcgOiBmaXR0aW5nKS5wdXNoKG1hdGNoLml0ZW0uaXRlbUlkKTtcblx0XHR9XG5cblx0XHRyZXR1cm4ge2ZpdHRpbmc6IGZpdHRpbmcsIG5vdEZpdHRpbmc6IG5vdEZpdHRpbmd9O1xuXHR9XG5cblx0cHJpdmF0ZSBoYXNGaXR0aW5nSXRlbXMgKG1hdGNoZXM6IENvbGxlY3Rpb25NYXRjaGVyTWF0Y2hlcykge1xuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIG1hdGNoZXMpIHtcblx0XHRcdGlmIChtYXRjaGVzW2l0ZW1JZF0uaXNNYXRjaCA9PT0gdHJ1ZSlcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zLCBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlLCBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgSXRlbUlkIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvblJlc291cmNlU2VydmljZSB7XG5cdHByb2Nlc3NPcHRpb25zIChvcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlKTogQ29sbGVjdGlvblJlc291cmNlT3B0aW9ucyB7XG5cdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zKG9wdGlvbnMpO1xuXHR9XG5cblx0Z2V0SWRBcnJheSAoaXRlbVJlc291cmNlczogSXRlbVJlc291cmNlW10pOiBJdGVtSWRbXSB7XG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtSWRbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcylcblx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1SZXNvdXJjZS5lbnRyeS5pdGVtSWQpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sdW1uVXRpbCB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdENvbHVtbiwgQXBpUmVxdWVzdENvbHVtbnMsIEl0ZW1UeXBlLCBSZXNwb25zZUNvbHVtbiwgUmVzcG9uc2VDb2x1bW5NYXAgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5DYWNoZSB7XG5cdGNhY2hlOiBSZXNwb25zZUNvbHVtbk1hcCA9IHt9O1xuXHRhbGxDb2x1bW5zOiB7W2l0ZW1UeXBlOiBzdHJpbmddOiBib29sZWFufSA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWxcblx0KSB7XG5cdH1cblxuXHRzZXRDb2x1bW4gKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcmVzcG9uc2VDb2x1bW46IFJlc3BvbnNlQ29sdW1uKTogUmVzcG9uc2VDb2x1bW4ge1xuXHRcdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblxuXHRcdGlmIChjYWNoZVtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdGNhY2hlW2l0ZW1UeXBlXSA9IHt9O1xuXG5cdFx0Y29uc3QgZW50cnkgPSBjYWNoZVtpdGVtVHlwZV07XG5cdFx0Y29uc3QgY29sdW1uSWQgPSByZXNwb25zZUNvbHVtbi5pZDtcblxuXHRcdGlmIChlbnRyeVtjb2x1bW5JZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdGVudHJ5W2NvbHVtbklkXSA9IHJlc3BvbnNlQ29sdW1uO1xuXG5cdFx0cmV0dXJuIGVudHJ5W2NvbHVtbklkXTtcblx0fVxuXG5cdHNldENvbHVtbnMgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMsXG5cdFx0cmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcFxuXHQpOiBSZXNwb25zZUNvbHVtbk1hcCB7XG5cdFx0Y29uc3QgcmVzdWx0OiBSZXNwb25zZUNvbHVtbk1hcCAgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgcmVzcG9uc2VUeXBlIGluIHJlc3BvbnNlQ29sdW1ucykge1xuXHRcdFx0Y29uc3QgY29sdW1ucyA9IHJlc3BvbnNlQ29sdW1uc1tyZXNwb25zZVR5cGVdO1xuXG5cdFx0XHRyZXN1bHRbcmVzcG9uc2VUeXBlXSA9IHt9O1xuXG5cdFx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIGNvbHVtbnMpXG5cdFx0XHRcdHJlc3VsdFtyZXNwb25zZVR5cGVdW2NvbHVtbklkXSA9IHRoaXMuc2V0Q29sdW1uKHJlc3BvbnNlVHlwZSwgY29sdW1uc1tjb2x1bW5JZF0pO1xuXHRcdH1cblxuXHRcdGlmIChyZXF1ZXN0Q29sdW1ucyA9PT0gdHJ1ZSlcblx0XHRcdHRoaXMuYWxsQ29sdW1uc1tpdGVtVHlwZV0gPSB0cnVlO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHJldHJpZXZlIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zXG5cdCk6IHtjYWNoZWQ6IFJlc3BvbnNlQ29sdW1uTWFwLCBtaXNzaW5nOiBBcGlSZXF1ZXN0Q29sdW1uc30ge1xuXHRcdGlmIChyZXF1ZXN0Q29sdW1ucyA9PT0gdHJ1ZSkge1xuXHRcdFx0aWYgKHRoaXMuY29udGFpbnNBbGwoaXRlbVR5cGUpKVxuXHRcdFx0XHRyZXR1cm4ge2NhY2hlZDogdGhpcy5nZXRDb2x1bW5zKGl0ZW1UeXBlKSwgbWlzc2luZzogW119O1xuXG5cdFx0XHRyZXR1cm4ge2NhY2hlZDoge30sIG1pc3Npbmc6IHRydWV9O1xuXHRcdH1cblxuXHRcdGNvbnN0IHJlc3BvbnNlQWNjdW11bGF0b3IgPSB7fTtcblx0XHRjb25zdCByZXF1ZXN0QWNjdW11bGF0b3I6IFJlc3BvbnNlQ29sdW1uW10gPSBbXTtcblxuXHRcdHRoaXMucmV0cmlldmVDb2x1bW5zKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVxdWVzdEFjY3VtdWxhdG9yLCByZXNwb25zZUFjY3VtdWxhdG9yKTtcblxuXHRcdHJldHVybiB7Y2FjaGVkOiByZXNwb25zZUFjY3VtdWxhdG9yLCBtaXNzaW5nOiByZXF1ZXN0QWNjdW11bGF0b3J9O1xuXHR9XG5cblx0Y29udGFpbnNBbGwgKGl0ZW1UeXBlOiBJdGVtVHlwZSk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmFsbENvbHVtbnNbaXRlbVR5cGVdID09PSB0cnVlO1xuXHR9XG5cblx0Z2V0Q29sdW1ucyAoaXRlbVR5cGU6IEl0ZW1UeXBlKTogUmVzcG9uc2VDb2x1bW5NYXAge1xuXHRcdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblxuXHRcdHJldHVybiB7W2l0ZW1UeXBlXTogY2FjaGVbaXRlbVR5cGVdID09PSB1bmRlZmluZWQgPyBbXSA6IGNhY2hlW2l0ZW1UeXBlXX07XG5cdH1cblxuXHRwcml2YXRlIHJldHJpZXZlQ29sdW1ucyAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1uW10sXG5cdFx0cmVxdWVzdEFjY3VtdWxhdG9yOiBBcGlSZXF1ZXN0Q29sdW1uW10sXG5cdFx0cmVzcG9uc2VBY2N1bXVsYXRvcjogUmVzcG9uc2VDb2x1bW5NYXBcblx0KTogdm9pZCB7XG5cdFx0Ly8gYWx3YXlzIHJldHJpZXZlIHRoZSBpZCBjb2x1bW5cblx0XHR0aGlzLnJldHJpZXZlQ29sdW1uKGl0ZW1UeXBlLCAnaWQnLCByZXF1ZXN0QWNjdW11bGF0b3IsIHJlc3BvbnNlQWNjdW11bGF0b3IpO1xuXG5cdFx0Zm9yIChjb25zdCByZXF1ZXN0Q29sdW1uIG9mIHJlcXVlc3RDb2x1bW5zKVxuXHRcdFx0dGhpcy5yZXRyaWV2ZUNvbHVtbihpdGVtVHlwZSwgcmVxdWVzdENvbHVtbiwgcmVxdWVzdEFjY3VtdWxhdG9yLCByZXNwb25zZUFjY3VtdWxhdG9yKTtcblx0fVxuXG5cdHByaXZhdGUgcmV0cmlldmVDb2x1bW4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRyZXF1ZXN0Q29sdW1uOiBBcGlSZXF1ZXN0Q29sdW1uLFxuXHRcdHJlcXVlc3RBY2N1bXVsYXRvcjogUmVzcG9uc2VDb2x1bW5bXSxcblx0XHRyZXNwb25zZUFjY3VtdWxhdG9yOiBSZXNwb25zZUNvbHVtbk1hcFxuXHQpOiB2b2lkIHtcblx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtblV0aWwucGFyc2VSZXF1ZXN0Q29sdW1uKHJlcXVlc3RDb2x1bW4pO1xuXHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1uID0gdGhpcy5nZXRDb2x1bW4oaXRlbVR5cGUsIGNvbHVtbi5pZCk7XG5cblx0XHRpZiAocmVzcG9uc2VDb2x1bW4gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmVxdWVzdEFjY3VtdWxhdG9yLnB1c2gocmVxdWVzdENvbHVtbik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKHJlc3BvbnNlQWNjdW11bGF0b3JbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXNwb25zZUFjY3VtdWxhdG9yW2l0ZW1UeXBlXSA9IHt9O1xuXG5cdFx0cmVzcG9uc2VBY2N1bXVsYXRvcltpdGVtVHlwZV1bY29sdW1uLmlkXSA9IHJlc3BvbnNlQ29sdW1uO1xuXG5cdFx0aWYgKGNvbHVtbi5jaGlsZHJlbi5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm47XG5cblx0XHRjb25zdCBtaXNzaW5nRGVyaXZlZDogUmVzcG9uc2VDb2x1bW5bXSA9IFtdO1xuXG5cdFx0dGhpcy5yZXRyaWV2ZUNvbHVtbnMocmVzcG9uc2VDb2x1bW4uaXRlbVR5cGUsIGNvbHVtbi5jaGlsZHJlbiwgbWlzc2luZ0Rlcml2ZWQsIHJlc3BvbnNlQWNjdW11bGF0b3IpO1xuXG5cdFx0aWYgKG1pc3NpbmdEZXJpdmVkLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybjtcblxuXHRcdHJlcXVlc3RBY2N1bXVsYXRvci5wdXNoKHtbY29sdW1uLmlkXTogbWlzc2luZ0Rlcml2ZWR9KTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0Q29sdW1uIChpdGVtVHlwZTogSXRlbVR5cGUsIGNvbHVtbklkOiBzdHJpbmcpOiBSZXNwb25zZUNvbHVtbiB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlW2l0ZW1UeXBlXTtcblxuXHRcdGlmIChjYWNoZSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0cmV0dXJuIGNhY2hlW2NvbHVtbklkXTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sdW1uSW5mbywgQ29sdW1uU2V0IH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDb2x1bW5JbmZvRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQge1xuXHRBcGlSZXF1ZXN0Q29sdW1uLFxuXHRBcGlSZXF1ZXN0Q29sdW1ucyxcblx0Q29sdW1uRXhwYW5zaW9uUmVzdWx0LFxuXHRJdGVtVHlwZSxcblx0UmVzcG9uc2VDb2x1bW5NYXAsXG5cdFJvb3RDb2x1bW5NYXBcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBnZXRGaXJzdFByb3BlcnR5IH0gZnJvbSAnLi9VdGlsJztcblxuZXhwb3J0IGNsYXNzIENvbHVtbkV4cGFuc2lvbiB7XG5cdGV4cGFuc2lvbk1hcDoge1tjb2x1bW5TZXRJZDogc3RyaW5nXTogQ29sdW1uRXhwYW5zaW9uUmVzdWx0IHwgbnVsbH0gPSB7fTtcblx0ZXhwYW5zaW9uTWFwU2l6ZTogbnVtYmVyID0gMDtcblx0cmVxdWVzdENvbHVtbnNUcnVlOiBib29sZWFuO1xuXHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbltdO1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbHVtbkluZm9GYWN0b3J5OiBDb2x1bW5JbmZvRmFjdG9yeSxcblx0XHRwdWJsaWMgaXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyxcblx0XHRwdWJsaWMgcmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcFxuXHQpIHtcblx0XHRpZiAocmVxdWVzdENvbHVtbnMgPT09IHRydWUpIHtcblx0XHRcdC8vIHJlcXVlc3RDb2x1bW5zIHNob3VsZCBhbHdheXMgYmUgYW4gYXJyYXksIHdoZW4gaXQgaXMgdHJ1ZSBkZXJpdmVkIGNvbHVtbiBpbmZvcm1hdGlvbiB3aWxsIGJlIGxvc3Rcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbnNUcnVlID0gdHJ1ZTtcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbnMgPSBbXTtcblxuXHRcdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiByZXNwb25zZUNvbHVtbnNbaXRlbVR5cGVdKVxuXHRcdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zLnB1c2goY29sdW1uSWQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSA9IGZhbHNlO1xuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1ucyA9IHJlcXVlc3RDb2x1bW5zO1xuXHRcdH1cblx0fVxuXG5cdHJ1biAoY29sdW1uU2V0OiBDb2x1bW5TZXQpOiBDb2x1bW5FeHBhbnNpb25SZXN1bHQgfCBudWxsIHtcblx0XHRjb25zdCBleHBhbnNpb25NYXAgPSB0aGlzLmV4cGFuc2lvbk1hcDtcblx0XHRjb25zdCBjb2x1bW5TZXRJZCA9IGNvbHVtblNldC5pZDtcblxuXHRcdGlmIChleHBhbnNpb25NYXBbY29sdW1uU2V0SWRdICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gZXhwYW5zaW9uTWFwW2NvbHVtblNldElkXTtcblxuXHRcdHRoaXMuZXhwYW5zaW9uTWFwU2l6ZSsrO1xuXG5cdFx0cmV0dXJuIGV4cGFuc2lvbk1hcFtjb2x1bW5TZXRJZF0gPSBjb2x1bW5TZXQuaXNTdXBlcnNldE9mKHRoaXMucmVxdWVzdENvbHVtbnMpID9cblx0XHRcdG51bGwgOlxuXHRcdFx0Y29sdW1uU2V0LmV4cGFuZCh0aGlzLnJlcXVlc3RDb2x1bW5zLCB0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSwgdGhpcy5yZXNwb25zZUNvbHVtbnMpO1xuXHR9XG5cblx0YWdncmVnYXRlUm9vdENvbHVtbnMgKCk6IENvbHVtbkluZm9bXSB7XG5cdFx0Y29uc3QgZXhwYW5zaW9uTWFwID0gdGhpcy5leHBhbnNpb25NYXA7XG5cblx0XHRpZiAodGhpcy5leHBhbnNpb25NYXBTaXplID09PSAxKSB7XG5cdFx0XHRjb25zdCBleHBhbnNpb25SZXN1bHQgPSBleHBhbnNpb25NYXBbZ2V0Rmlyc3RQcm9wZXJ0eShleHBhbnNpb25NYXApIGFzIHN0cmluZ107XG5cblx0XHRcdHJldHVybiBleHBhbnNpb25SZXN1bHQgIT09IG51bGwgPyBleHBhbnNpb25SZXN1bHQuZGlmZmVyZW5jZS5yb290IDogW107XG5cdFx0fVxuXG5cdFx0Y29uc3Qgcm9vdENvbHVtbk1hcDogUm9vdENvbHVtbk1hcCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5TZXRJZCBpbiBleHBhbnNpb25NYXApIHtcblx0XHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IGV4cGFuc2lvbk1hcFtjb2x1bW5TZXRJZF07XG5cblx0XHRcdGlmIChjb2x1bW5FeHBhbnNpb24gPT09IG51bGwpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHR0aGlzLmV4cGFuZFJvb3RDb2x1bW5NYXAoY29sdW1uRXhwYW5zaW9uLmRpZmZlcmVuY2Uucm9vdCwgcm9vdENvbHVtbk1hcCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jvb3RDb2x1bW5NYXAocm9vdENvbHVtbk1hcCwgbnVsbCk7XG5cdH1cblxuXHRwcml2YXRlIGV4cGFuZFJvb3RDb2x1bW5NYXAgKGNvbHVtbnM6IENvbHVtbkluZm9bXSwgZGVzdGluYXRpb246IFJvb3RDb2x1bW5NYXApIHtcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcblxuXHRcdFx0aWYgKGRlc3RpbmF0aW9uW2NvbHVtbklkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5JZF0gPSB7YXBpQ29sdW1uOiBjb2x1bW4uYXBpQ29sdW1uLCBjaGlsZHJlbjoge319O1xuXG5cdFx0XHR0aGlzLmV4cGFuZFJvb3RDb2x1bW5NYXAoY29sdW1uLmNoaWxkcmVuLCBkZXN0aW5hdGlvbltjb2x1bW5JZF0uY2hpbGRyZW4pO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgcHJvY2Vzc1Jvb3RDb2x1bW5NYXAgKHJvb3RDb2x1bW5NYXA6IFJvb3RDb2x1bW5NYXAsIHBhcmVudDogQ29sdW1uSW5mbyB8IG51bGwpOiBDb2x1bW5JbmZvW10ge1xuXHRcdGNvbnN0IHJlc3VsdDogQ29sdW1uSW5mb1tdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHJvb3RDb2x1bW5NYXApIHtcblx0XHRcdGNvbnN0IGNvbHVtbk1hcEVudHJ5ID0gcm9vdENvbHVtbk1hcFtjb2x1bW5JZF07XG5cdFx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5jb2x1bW5JbmZvRmFjdG9yeS5jb25zdHJ1Y3QoY29sdW1uTWFwRW50cnkuYXBpQ29sdW1uLCBwYXJlbnQpO1xuXHRcdFx0Y29uc3QgY2hpbGRDb2x1bW5zID0gdGhpcy5wcm9jZXNzUm9vdENvbHVtbk1hcChjb2x1bW5NYXBFbnRyeS5jaGlsZHJlbiwgY29sdW1uSW5mbyk7XG5cblx0XHRcdGlmIChjaGlsZENvbHVtbnMubGVuZ3RoID4gMClcblx0XHRcdFx0Y29sdW1uSW5mby5zZXRDaGlsZHJlbihjb2x1bW5JbmZvLmFwaUNvbHVtbi5pdGVtVHlwZSwgY2hpbGRDb2x1bW5zKTtcblxuXHRcdFx0cmVzdWx0LnB1c2goY29sdW1uSW5mbyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sdW1uQ2FjaGUsIENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQge1xuXHRBcGlSZXF1ZXN0Q29sdW1ucyxcblx0SXRlbVR5cGUsXG5cdFByb21pc2VJbnRlcmZhY2UsXG5cdFJlc3BvbnNlQ29sdW1uLFxuXHRSZXNwb25zZUNvbHVtbk1hcFxufSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5IYW5kbGVyIHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBjYWNoZTogQ29sdW1uQ2FjaGUsXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXG5cdCkge1xuXHR9XG5cblx0c2V0Q29sdW1uIChpdGVtVHlwZTogSXRlbVR5cGUsIHJlc3BvbnNlQ29sdW1uOiBSZXNwb25zZUNvbHVtbik6IFJlc3BvbnNlQ29sdW1uIHtcblx0XHRyZXR1cm4gdGhpcy5jYWNoZS5zZXRDb2x1bW4oaXRlbVR5cGUsIHJlc3BvbnNlQ29sdW1uKTtcblx0fVxuXG5cdHNldENvbHVtbnMgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMsXG5cdFx0cmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcFxuXHQpOiBSZXNwb25zZUNvbHVtbk1hcCB7XG5cdFx0cmV0dXJuIHRoaXMuY2FjaGUuc2V0Q29sdW1ucyhpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucyk7XG5cdH1cblxuXHRmZXRjaEl0ZW1UeXBlVHJhbnNsYXRpb25zIChpdGVtVHlwZXM6IEl0ZW1UeXBlW10pOiBQcm9taXNlSW50ZXJmYWNlPHtbaXRlbVR5cGU6IHN0cmluZ106IHN0cmluZ30+IHtcblx0XHRjb25zdCBwcm9taXNlczoge1tpdGVtVHlwZTogc3RyaW5nXTogUHJvbWlzZUludGVyZmFjZTxSZXNwb25zZUNvbHVtbk1hcD59ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIG9mIGl0ZW1UeXBlcylcblx0XHRcdHByb21pc2VzW2l0ZW1UeXBlXSA9IHRoaXMuZmV0Y2goaXRlbVR5cGUsIFsnaWQnXSk7XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocHJvbWlzZXMpXG5cdFx0XHQudGhlbihcblx0XHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHJlc3VsdDoge1tpdGVtVHlwZTogc3RyaW5nXTogc3RyaW5nfSA9IHt9O1xuXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiByZXNwb25zZSlcblx0XHRcdFx0XHRcdHJlc3VsdFtpdGVtVHlwZV0gPSByZXNwb25zZVtpdGVtVHlwZV1baXRlbVR5cGVdLmlkLm5hbWU7XG5cblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdCk7XG5cdH1cblxuXHRyZXF1ZXN0IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0Y29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMsXG5cdFx0cGFyYW1zID0ge2ZpbHRlcjogZmFsc2V9XG5cdCk6IFByb21pc2VJbnRlcmZhY2U8UmVzcG9uc2VDb2x1bW5NYXA+IHtcblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5jb2x1bW5zKGl0ZW1UeXBlLCB7W2l0ZW1UeXBlXTogY29sdW1uc30sIHBhcmFtcykudGhlbihcblx0XHRcdGNvbHVtblJlc291cmNlID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY2FjaGUuc2V0Q29sdW1ucyhcblx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRjb2x1bW5zLFxuXHRcdFx0XHRcdGNvbHVtblJlc291cmNlLmZldGNoQ29sdW1uc09iamVjdCgpXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGZldGNoIChpdGVtVHlwZTogSXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucywgcGFyYW1zPzogYW55KTogUHJvbWlzZUludGVyZmFjZTxSZXNwb25zZUNvbHVtbk1hcD4ge1xuXHRcdGNvbnN0IGNvbHVtblJlc291cmNlID0gdGhpcy5jYWNoZS5yZXRyaWV2ZShpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMpO1xuXG5cdFx0aWYgKGNvbHVtblJlc291cmNlLm1pc3NpbmcgIT09IHRydWUgJiYgY29sdW1uUmVzb3VyY2UubWlzc2luZy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGNvbHVtblJlc291cmNlLmNhY2hlZCk7XG5cblx0XHRyZXR1cm4gdGhpcy5yZXF1ZXN0KGl0ZW1UeXBlLCBjb2x1bW5SZXNvdXJjZS5taXNzaW5nLCBwYXJhbXMpLnRoZW4oXG5cdFx0XHRyZXNwb25zZUNvbHVtbnMgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb2x1bW5VdGlsLm1lcmdlUmVzcG9uc2VDb2x1bW5zKFxuXHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1ucyxcblx0XHRcdFx0XHRjb2x1bW5SZXNvdXJjZS5jYWNoZWRcblx0XHRcdFx0KS5tZXJnZWQ7XG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdGZldGNoQWxsIChpdGVtVHlwZTogSXRlbVR5cGUpOiBQcm9taXNlSW50ZXJmYWNlPFJlc3BvbnNlQ29sdW1uTWFwPiB7XG5cdFx0aWYgKHRoaXMuY2FjaGUuY29udGFpbnNBbGwoaXRlbVR5cGUpKVxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbih0aGlzLmNhY2hlLmdldENvbHVtbnMoaXRlbVR5cGUpKTtcblxuXHRcdHJldHVybiB0aGlzLnJlcXVlc3QoaXRlbVR5cGUsIHRydWUpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDT0xVTU5fU0VQRVJBVE9SIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IEl0ZW1UeXBlLCBSZXNwb25zZUNvbHVtbiB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIENvbHVtbkluZm8ge1xuXHRpZDogc3RyaW5nO1xuXHRsZXZlbDogbnVtYmVyO1xuXHRwYXRoOiBzdHJpbmc7XG5cdHRhaWxQYXRoOiBzdHJpbmc7XG5cdGl0ZW1UeXBlOiBJdGVtVHlwZSB8IG51bGwgPSBudWxsO1xuXHRjaGlsZHJlbjogQ29sdW1uSW5mb1tdID0gW107XG5cdGlzTGVhZjogYm9vbGVhbiA9IHRydWU7XG5cblx0Y29uc3RydWN0b3IgKHJlYWRvbmx5IGFwaUNvbHVtbjogUmVzcG9uc2VDb2x1bW4sIHJlYWRvbmx5IHBhcmVudDogQ29sdW1uSW5mbyB8IG51bGwgPSBudWxsKSB7XG5cdFx0Y29uc3QgY29sdW1uSWQgPSBhcGlDb2x1bW4uaWQ7XG5cblx0XHR0aGlzLmlkID0gY29sdW1uSWQ7XG5cblx0XHRpZiAocGFyZW50ID09PSBudWxsKSB7XG5cdFx0XHR0aGlzLmxldmVsID0gMDtcblx0XHRcdHRoaXMucGF0aCA9IGNvbHVtbklkO1xuXHRcdFx0dGhpcy50YWlsUGF0aCA9ICcnO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmxldmVsID0gcGFyZW50LmxldmVsICsgMTtcblx0XHRcdHRoaXMucGF0aCA9IHBhcmVudC5wYXRoICsgQ09MVU1OX1NFUEVSQVRPUiArIGNvbHVtbklkO1xuXHRcdFx0dGhpcy50YWlsUGF0aCA9IHBhcmVudC5sZXZlbCA9PT0gMCA/XG5cdFx0XHRcdGNvbHVtbklkIDpcblx0XHRcdFx0cGFyZW50LnRhaWxQYXRoICsgQ09MVU1OX1NFUEVSQVRPUiArIGNvbHVtbklkO1xuXHRcdH1cblx0fVxuXG5cdHNldENoaWxkcmVuIChpdGVtVHlwZTogSXRlbVR5cGUsIGNoaWxkcmVuOiBDb2x1bW5JbmZvW10pOiB0aGlzIHtcblx0XHR0aGlzLml0ZW1UeXBlID0gaXRlbVR5cGU7XG5cdFx0dGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuXHRcdHRoaXMuaXNMZWFmID0gZmFsc2U7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sdW1uSGFuZGxlciwgQ29sdW1uSW5mbywgQ29sdW1uVXRpbCB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQ29sdW1uSW5mb0ZhY3RvcnksIENvbHVtblNldEZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHtcblx0QXBpUmVxdWVzdENvbHVtbixcblx0QXBpUmVxdWVzdENvbHVtbnMsXG5cdENvbHVtbkV4cGFuc2lvblJlc3VsdCxcblx0Q29sdW1uU2V0RXhwYW5zaW9uLFxuXHRJdGVtVHlwZSxcblx0UmVzcG9uc2VDb2x1bW5NYXBcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5jb25zdCBlbXB0eU9iamVjdCA9IHt9O1xubGV0IGN1cnJlbnRJZCA9IDA7XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5TZXQge1xuXHRpZCA9ICsrY3VycmVudElkO1xuXG5cdHJlcXVlc3RDb2x1bW5zVHJ1ZTogYm9vbGVhbjtcblx0cmVzcG9uc2U6IFJlc3BvbnNlQ29sdW1uTWFwID0gZW1wdHlPYmplY3Q7XG5cblx0bGluazogQ29sdW1uSW5mbyB8IG51bGwgPSBudWxsO1xuXHRtYWluOiBDb2x1bW5JbmZvW10gPSBbXTtcblx0ZGVyaXZlZDogQ29sdW1uSW5mb1tdID0gW107XG5cdHJvb3Q6IENvbHVtbkluZm9bXSA9IFtdO1xuXHRsZWFmOiBDb2x1bW5JbmZvW10gPSBbXTtcblx0Zm9ybWF0dGVkOiB7bWFpbjogQ29sdW1uSW5mb1tdLCBkZXJpdmVkOiBDb2x1bW5JbmZvW119ID0ge21haW46IFtdLCBkZXJpdmVkOiBbXX07XG5cdGZpbHRlcmVkOiBDb2x1bW5JbmZvW10gPSBbXTtcblx0Y3VzdG9tOiBDb2x1bW5JbmZvW10gPSBbXTtcblx0c2VhcmNoYWJsZTogQ29sdW1uSW5mb1tdID0gW107XG5cdGl0ZW06IENvbHVtbkluZm9bXSA9IFtdO1xuXHRub3RJdGVtOiBDb2x1bW5JbmZvW10gPSBbXTtcblxuXHRlbmFibGVDYWNoaW5nOiBib29sZWFuO1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsLFxuXHRcdHByaXZhdGUgY29sdW1uSW5mb0ZhY3Rvcnk6IENvbHVtbkluZm9GYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcblx0XHRwdWJsaWMgaXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHB1YmxpYyByZXF1ZXN0OiBBcGlSZXF1ZXN0Q29sdW1ucyxcblx0KSB7XG5cdFx0dGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUgPSB0aGlzLnJlcXVlc3RDb2x1bW5zSXNUcnVlKHRoaXMucmVxdWVzdCk7XG5cdH1cblxuXHR0b0pTT04gKCkge1xuXHRcdGNvbnN0IHBhcnNlQ29sdW1ucyA9IChjb2x1bW5zOiBDb2x1bW5JbmZvW10pID0+IGNvbHVtbnMubWFwKGMgPT4gYy5pZCk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0bWFpbjogcGFyc2VDb2x1bW5zKHRoaXMubWFpbiksXG5cdFx0XHRkZXJpdmVkOiBwYXJzZUNvbHVtbnModGhpcy5kZXJpdmVkKVxuXHRcdH07XG5cdH1cblxuXHRyZXNvbHZlIChyZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwLCBlbmFibGVDYWNoaW5nID0gdHJ1ZSwgaW5jbHVkZUlkQ29sdW1uID0gdHJ1ZSk6IHRoaXMge1xuXHRcdHRoaXMuZW5hYmxlQ2FjaGluZyA9IGVuYWJsZUNhY2hpbmc7XG5cblx0XHRpZiAodGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUpXG5cdFx0XHR0aGlzLnByb2Nlc3NSZXNwb25zZUNvbHVtbnMocmVzcG9uc2VDb2x1bW5zKTtcblx0XHRlbHNlXG5cdFx0XHR0aGlzLnByb2Nlc3NSZXF1ZXN0Q29sdW1ucyhyZXNwb25zZUNvbHVtbnMsIGluY2x1ZGVJZENvbHVtbik7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGV4cGFuZFJlcXVlc3RDb2x1bW5zIChjb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyk6IHZvaWQge1xuXHRcdGNvbnN0IG1lcmdlZFJlcXVlc3RDb2x1bW5zID0gdGhpcy5jb2x1bW5VdGlsLm1lcmdlUmVxdWVzdENvbHVtbnModGhpcy5yZXF1ZXN0LCBjb2x1bW5zKS5tZXJnZWQ7XG5cblx0XHR0aGlzLnJlcXVlc3QgPSBtZXJnZWRSZXF1ZXN0Q29sdW1ucztcblx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSA9IG1lcmdlZFJlcXVlc3RDb2x1bW5zID09PSB0cnVlO1xuXHR9XG5cblx0aXNTdXBlcnNldE9mIChjb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyk6IGJvb2xlYW4ge1xuXHRcdGlmIChjb2x1bW5zID09PSB0cnVlKVxuXHRcdFx0cmV0dXJuIHRoaXMucmVxdWVzdENvbHVtbnNUcnVlO1xuXG5cdFx0Y29uc3QgY29sdW1uVXRpbCA9IHRoaXMuY29sdW1uVXRpbDtcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IHRoaXMucmVxdWVzdDtcblxuXHRcdGlmIChyZXF1ZXN0Q29sdW1ucyA9PT0gdHJ1ZSlcblx0XHRcdHJldHVybiAhY29sdW1uVXRpbC5jb250YWluc0Rlcml2ZWRDb2x1bW5zKGNvbHVtbnMpO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0aWYgKCFjb2x1bW5VdGlsLmNvbnRhaW5zQ29sdW1uKGNvbHVtbiwgcmVxdWVzdENvbHVtbnMpKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRwcml2YXRlIHByb2Nlc3NSZXNwb25zZUNvbHVtbnMgKHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXApIHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IHRoaXMuaXRlbVR5cGU7XG5cblx0XHR0aGlzLnJlcXVlc3QgPSBbXTtcblx0XHR0aGlzLnJlc3BvbnNlID0gdGhpcy5lbmFibGVDYWNoaW5nID9cblx0XHRcdHRoaXMuY29sdW1uSGFuZGxlci5zZXRDb2x1bW5zKHRoaXMuaXRlbVR5cGUsIHRydWUsIHJlc3BvbnNlQ29sdW1ucykgOlxuXHRcdFx0cmVzcG9uc2VDb2x1bW5zO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiByZXNwb25zZUNvbHVtbnNbaXRlbVR5cGVdKSB7XG5cdFx0XHR0aGlzLm1haW4ucHVzaCh0aGlzLmdldENvbHVtbkluZm8oY29sdW1uSWQsIGl0ZW1UeXBlLCBbXSwgbnVsbCwgcmVzcG9uc2VDb2x1bW5zKSk7XG5cdFx0XHR0aGlzLnJlcXVlc3QucHVzaChjb2x1bW5JZCk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSByZXF1ZXN0Q29sdW1uc0lzVHJ1ZSAocmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zKTogcmVxdWVzdENvbHVtbnMgaXMgdHJ1ZSB7XG5cdFx0cmV0dXJuIHJlcXVlc3RDb2x1bW5zID09PSB0cnVlO1xuXHR9XG5cblx0cHJpdmF0ZSBwcm9jZXNzUmVxdWVzdENvbHVtbnMgKHJlc3BvbnNlQ29sdW1uczogYW55LCBpbmNsdWRlSWRDb2x1bW4/OiBib29sZWFuKSB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSB0aGlzLml0ZW1UeXBlO1xuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0gdGhpcy5yZXF1ZXN0OyAvLyB3ZSBjYW4gYXNzdW1lIHJlcXVlc3RDb2x1bW5zIGlzIGFuIGFycmF5IGhlcmVcblxuXHRcdHRoaXMucmVzcG9uc2UgPSB7fTtcblxuXHRcdGlmICh0aGlzLnJlcXVlc3RDb2x1bW5zSXNUcnVlKHJlcXVlc3RDb2x1bW5zKSB8fCByZXF1ZXN0Q29sdW1ucy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm47XG5cblx0XHRmb3IgKGNvbnN0IHJlcXVlc3RDb2x1bW4gb2YgcmVxdWVzdENvbHVtbnMpIHtcblx0XHRcdGNvbnN0IGNvbHVtbkluZm8gPSB0aGlzLmdldFJlcXVlc3RDb2x1bW5JbmZvKHJlcXVlc3RDb2x1bW4sIGl0ZW1UeXBlLCBudWxsLCByZXNwb25zZUNvbHVtbnMpO1xuXG5cdFx0XHRpZiAoY29sdW1uSW5mbyA9PT0gbnVsbClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdHRoaXMubWFpbi5wdXNoKGNvbHVtbkluZm8pO1xuXG5cdFx0XHRpZiAoIWNvbHVtbkluZm8uaXNMZWFmKVxuXHRcdFx0XHR0aGlzLnJvb3QucHVzaChjb2x1bW5JbmZvKTtcblx0XHR9XG5cblx0XHRpZiAoaW5jbHVkZUlkQ29sdW1uICYmIHRoaXMucmVzcG9uc2VbaXRlbVR5cGVdLmlkID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IGNvbHVtbkluZm8gPSB0aGlzLmdldFJlcXVlc3RDb2x1bW5JbmZvKCdpZCcsIGl0ZW1UeXBlLCBudWxsLCByZXNwb25zZUNvbHVtbnMpO1xuXG5cdFx0XHRpZiAoY29sdW1uSW5mbyAhPT0gbnVsbClcblx0XHRcdFx0dGhpcy5tYWluLnB1c2goY29sdW1uSW5mbyk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBnZXRSZXF1ZXN0Q29sdW1uSW5mbyAocmVxdWVzdENvbHVtbjogQXBpUmVxdWVzdENvbHVtbiwgaXRlbVR5cGU6IEl0ZW1UeXBlLCBwYXJlbnQ6IENvbHVtbkluZm8gfCBudWxsLCByZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwKSB7XG5cdFx0Y29uc3QgcGFyc2VkQ29sdW1uID0gdGhpcy5jb2x1bW5VdGlsLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcblx0XHRjb25zdCBjb2x1bW5JZCA9IHBhcnNlZENvbHVtbi5pZDtcblxuXHRcdGxldCByZXNwb25zZUNvbHVtbjtcblxuXHRcdGlmIChyZXNwb25zZUNvbHVtbnNbaXRlbVR5cGVdICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXNwb25zZUNvbHVtbiA9IHJlc3BvbnNlQ29sdW1uc1tpdGVtVHlwZV1bY29sdW1uSWRdO1xuXG5cdFx0aWYgKHJlc3BvbnNlQ29sdW1uID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnNvbGUud2FybignTm8gYXBpIGNvbHVtbiBmb3IgcmVxdWVzdCBjb2x1bW4nLCBjb2x1bW5JZCwgJ2ZvciBpdGVtVHlwZScsIGl0ZW1UeXBlKTtcblxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuZW5hYmxlQ2FjaGluZylcblx0XHRcdHJlc3BvbnNlQ29sdW1uID0gdGhpcy5jb2x1bW5IYW5kbGVyLnNldENvbHVtbihpdGVtVHlwZSwgcmVzcG9uc2VDb2x1bW4pO1xuXG5cdFx0Y29uc3QgcmVzdWx0UmVzcG9uc2UgPSB0aGlzLnJlc3BvbnNlO1xuXG5cdFx0aWYgKHJlc3VsdFJlc3BvbnNlW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmVzdWx0UmVzcG9uc2VbaXRlbVR5cGVdID0ge307XG5cblx0XHRpZiAocmVzdWx0UmVzcG9uc2VbaXRlbVR5cGVdW2NvbHVtbklkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmVzdWx0UmVzcG9uc2VbaXRlbVR5cGVdW2NvbHVtbklkXSA9IHJlc3BvbnNlQ29sdW1uO1xuXG5cdFx0cmV0dXJuIHRoaXMuZ2V0Q29sdW1uSW5mbyhjb2x1bW5JZCwgaXRlbVR5cGUsIHBhcnNlZENvbHVtbi5jaGlsZHJlbiwgcGFyZW50LCByZXNwb25zZUNvbHVtbnMpO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRDb2x1bW5JbmZvIChcblx0XHRjb2x1bW5JZDogc3RyaW5nLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRjaGlsZHJlbjogQXBpUmVxdWVzdENvbHVtbltdLFxuXHRcdHBhcmVudDogQ29sdW1uSW5mbyB8IG51bGwsXG5cdFx0cmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcFxuXHQpOiBDb2x1bW5JbmZvIHtcblx0XHRjb25zdCBjb2x1bW5VdGlsID0gdGhpcy5jb2x1bW5VdGlsO1xuXHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1uID0gcmVzcG9uc2VDb2x1bW5zW2l0ZW1UeXBlXVtjb2x1bW5JZF07XG5cdFx0Y29uc3QgY29sdW1uSW5mbyA9IHRoaXMuY29sdW1uSW5mb0ZhY3RvcnkuY29uc3RydWN0KHJlc3BvbnNlQ29sdW1uLCBwYXJlbnQpO1xuXHRcdGNvbnN0IGlzRGVyaXZlZCA9IHBhcmVudCAhPT0gbnVsbDtcblxuXHRcdGlmIChpc0Rlcml2ZWQpXG5cdFx0XHR0aGlzLmRlcml2ZWQucHVzaChjb2x1bW5JbmZvKTtcblx0XHRlbHNlIC8vIHdlIGNvdWxkIHBvc3NpYmx5IGFkZCBkZXJpdmVkIGNvbHVtbnMgdG8gJ25vdEl0ZW0nXG5cdFx0XHR0aGlzW2NvbHVtblV0aWwuaXNJdGVtQ29sdW1uKHJlc3BvbnNlQ29sdW1uKSA/ICdpdGVtJyA6ICdub3RJdGVtJ10ucHVzaChjb2x1bW5JbmZvKTtcblxuXHRcdGlmIChjb2x1bW5VdGlsLmlzRm9ybWF0dGVkQ29sdW1uKHJlc3BvbnNlQ29sdW1uKSlcblx0XHRcdHRoaXMuZm9ybWF0dGVkW2lzRGVyaXZlZCA/ICdkZXJpdmVkJyA6ICdtYWluJ10ucHVzaChjb2x1bW5JbmZvKTtcblxuXHRcdGlmIChjb2x1bW5VdGlsLmlzRmlsdGVyZWRDb2x1bW4ocmVzcG9uc2VDb2x1bW4pKVxuXHRcdFx0dGhpcy5maWx0ZXJlZC5wdXNoKGNvbHVtbkluZm8pO1xuXG5cdFx0aWYgKGNvbHVtblV0aWwuaXNTZWFyY2hhYmxlQ29sdW1uKHJlc3BvbnNlQ29sdW1uKSlcblx0XHRcdHRoaXMuc2VhcmNoYWJsZS5wdXNoKGNvbHVtbkluZm8pO1xuXG5cdFx0aWYgKGNvbHVtblV0aWwuaXNDdXN0b21Db2x1bW4ocmVzcG9uc2VDb2x1bW4pKVxuXHRcdFx0dGhpcy5jdXN0b20ucHVzaChjb2x1bW5JbmZvKTtcblxuXHRcdGlmIChyZXNwb25zZUNvbHVtbi50eXBlID09PSAnbGluaycpXG5cdFx0XHR0aGlzLmxpbmsgPSBjb2x1bW5JbmZvO1xuXG5cdFx0aWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0dGhpcy5sZWFmLnB1c2goY29sdW1uSW5mbyk7XG5cblx0XHRcdHJldHVybiBjb2x1bW5JbmZvO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNoaWxkQ29sdW1uczogQ29sdW1uSW5mb1tdID0gW107XG5cblx0XHQvLyBjb2x1bW5zIGlzICpub3QqIHRydWVcblx0XHRmb3IgKGNvbnN0IGNoaWxkQ29sdW1uSWQgb2YgY2hpbGRyZW4pIHtcblx0XHRcdGNvbnN0IGNoaWxkQ29sdW1uID0gdGhpcy5nZXRSZXF1ZXN0Q29sdW1uSW5mbyhcblx0XHRcdFx0Y2hpbGRDb2x1bW5JZCxcblx0XHRcdFx0cmVzcG9uc2VDb2x1bW4uaXRlbVR5cGUsXG5cdFx0XHRcdGNvbHVtbkluZm8sXG5cdFx0XHRcdHJlc3BvbnNlQ29sdW1uc1xuXHRcdFx0KTtcblxuXHRcdFx0aWYgKGNoaWxkQ29sdW1uID09PSBudWxsKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0Y2hpbGRDb2x1bW5zLnB1c2goY2hpbGRDb2x1bW4pO1xuXHRcdH1cblxuXHRcdHJldHVybiBjb2x1bW5JbmZvLnNldENoaWxkcmVuKHJlc3BvbnNlQ29sdW1uLml0ZW1UeXBlLCBjaGlsZENvbHVtbnMpO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRDb2x1bW5TZXRFeHBhbnNpb24gKFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyxcblx0XHRyZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwXG5cdCk6IENvbHVtblNldEV4cGFuc2lvbiB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHJlcXVlc3Q6IHRoaXMuY29sdW1uVXRpbC5tZXJnZVJlcXVlc3RDb2x1bW5zKHRoaXMucmVxdWVzdCwgcmVxdWVzdENvbHVtbnMpLFxuXHRcdFx0cmVzcG9uc2U6IHRoaXMuY29sdW1uVXRpbC5tZXJnZVJlc3BvbnNlQ29sdW1ucyh0aGlzLnJlc3BvbnNlLCByZXNwb25zZUNvbHVtbnMpLm1lcmdlZFxuXHRcdH07XG5cdH1cblxuXHRwcml2YXRlIGdldE1lcmdlZENvbHVtblNldCAoY29sdW1uU2V0RXhwYW5zaW9uOiBDb2x1bW5TZXRFeHBhbnNpb24sIHJlcXVlc3RDb2x1bW5zVHJ1ZTogYm9vbGVhbik6IENvbHVtblNldCB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdHRoaXMuaXRlbVR5cGUsXG5cdFx0XHRjb2x1bW5TZXRFeHBhbnNpb24ucmVxdWVzdC5tZXJnZWQsXG5cdFx0XHRjb2x1bW5TZXRFeHBhbnNpb24ucmVzcG9uc2Vcblx0XHQpO1xuXG5cdFx0cmVzdWx0LnJlcXVlc3RDb2x1bW5zVHJ1ZSA9IHRoaXMucmVxdWVzdENvbHVtbnNUcnVlIHx8IHJlcXVlc3RDb2x1bW5zVHJ1ZTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRtZXJnZSAoY29sdW1uU2V0OiBDb2x1bW5TZXQpOiBDb2x1bW5TZXQge1xuXHRcdHJldHVybiB0aGlzLmdldE1lcmdlZENvbHVtblNldChcblx0XHRcdHRoaXMuZ2V0Q29sdW1uU2V0RXhwYW5zaW9uKGNvbHVtblNldC5yZXF1ZXN0LCBjb2x1bW5TZXQucmVzcG9uc2UpLFxuXHRcdFx0Y29sdW1uU2V0LnJlcXVlc3RDb2x1bW5zVHJ1ZVxuXHRcdCk7XG5cdH1cblxuXHRleHBhbmQgKFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyxcblx0XHRyZXF1ZXN0Q29sdW1uc1RydWU6IGJvb2xlYW4sXG5cdFx0cmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcFxuXHQpOiBDb2x1bW5FeHBhbnNpb25SZXN1bHQge1xuXHRcdGNvbnN0IGNvbHVtblNldEV4cGFuc2lvbiA9IHRoaXMuZ2V0Q29sdW1uU2V0RXhwYW5zaW9uKHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdG1lcmdlZDogdGhpcy5nZXRNZXJnZWRDb2x1bW5TZXQoY29sdW1uU2V0RXhwYW5zaW9uLCByZXF1ZXN0Q29sdW1uc1RydWUpLFxuXHRcdFx0ZGlmZmVyZW5jZTogdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdFx0dGhpcy5pdGVtVHlwZSxcblx0XHRcdFx0Y29sdW1uU2V0RXhwYW5zaW9uLnJlcXVlc3QuZGlmZmVyZW5jZSxcblx0XHRcdFx0Y29sdW1uU2V0RXhwYW5zaW9uLnJlc3BvbnNlLCAvLyB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gbG9vayB1cCB0aGUgcGFyZW50IG9mIGRlcml2ZWQgY29sdW1uc1xuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0ZmFsc2Vcblx0XHRcdClcblx0XHR9O1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5TZXQgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEFwaVJlcXVlc3RDb2x1bW5zIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uU3Vic2V0Q2FjaGUge1xuXHRwcml2YXRlIGNhY2hlOiB7W2NvbHVtblNldElkOiBudW1iZXJdOiBib29sZWFufSA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwdWJsaWMgcmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zXG5cdCkge1xuXG5cdH1cblxuXHRydW4gKGNvbHVtblNldDogQ29sdW1uU2V0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlO1xuXHRcdGNvbnN0IGNvbHVtblNldElkID0gY29sdW1uU2V0LmlkO1xuXG5cdFx0aWYgKGNhY2hlW2NvbHVtblNldElkXSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIGNhY2hlW2NvbHVtblNldElkXTtcblxuXHRcdHJldHVybiBjYWNoZVtjb2x1bW5TZXRJZF0gPSBjb2x1bW5TZXQuaXNTdXBlcnNldE9mKHRoaXMucmVxdWVzdENvbHVtbnMpO1xuXHR9XG59XG4iLCJpbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcblxuaW1wb3J0IHsgQ09MVU1OX1NFUEVSQVRPUiwgUkVOREVSX0FTX1NFUEVSQVRPUiB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0Q29sdW1uLCBBcGlSZXF1ZXN0Q29sdW1ucywgSXRlbVR5cGUsIFJlc3BvbnNlQ29sdW1uLCBSZXNwb25zZUNvbHVtbk1hcCB9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgZXh0ZW5kLCBpc0RlZmluZWQgfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uVXRpbCB7XG5cdGNvbnN0cnVjdG9yICgpIHtcblx0fVxuXG5cdGdldENvbHVtblBhdGggKGNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uW10sIHJlbmRlckFzOiBudWxsIHwgc3RyaW5nKSB7XG5cdFx0bGV0IHNlcGFyYXRvciA9ICcnO1xuXHRcdGxldCByZXN1bHQgPSAnJztcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdHJlc3VsdCArPSBzZXBhcmF0b3IgKyBjb2x1bW4uaWQ7XG5cdFx0XHRzZXBhcmF0b3IgPSBDT0xVTU5fU0VQRVJBVE9SO1xuXHRcdH1cblxuXHRcdGlmIChyZW5kZXJBcyAhPT0gbnVsbClcblx0XHRcdHJlc3VsdCArPSBSRU5ERVJfQVNfU0VQRVJBVE9SICsgcmVuZGVyQXM7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0RGF0ZUZvcm1hdE9wdGlvbnMgKGNvbHVtblR5cGU/OiAnZGF0ZXRpbWUnKSB7XG5cdFx0Y29uc3Qgbm93ID0gbW9tZW50KCk7XG5cblx0XHRjb25zdCBmb3JtYXRzID0ge1xuXHRcdFx0J0otTS1ZJzogbm93LmZvcm1hdCgnREQtTU0tWVlZWScpLFxuXHRcdFx0J0otTSc6IG5vdy5mb3JtYXQoJ0RELU1NJyksXG5cdFx0XHQnaitGK1knOiBub3cuZm9ybWF0KCdEIE1NTSBZWVlZJyksXG5cdFx0XHQnRCtqK0YrWSc6IG5vdy5mb3JtYXQoJ2RkZGQgRCBNTU0gWVlZWScpLFxuXHRcdFx0J0YnOiBub3cuZm9ybWF0KCdNTU0nKSxcblx0XHRcdCdmJzogbm93LmZvcm1hdCgnTU1NTScpLFxuXHRcdFx0J0QnOiBub3cuZm9ybWF0KCdkZGRkJyksXG5cdFx0XHQnZCc6IG5vdy5mb3JtYXQoJ2RkZCcpXG5cdFx0fTtcblxuXHRcdGlmIChjb2x1bW5UeXBlID09PSAnZGF0ZXRpbWUnKVxuXHRcdFx0ZXh0ZW5kKGZvcm1hdHMsIHtcblx0XHRcdFx0J0otTS1ZK0g6aSc6IG5vdy5mb3JtYXQoJ0RELU1NLVlZWVkgSEg6bW0nKSxcblx0XHRcdFx0J0otTStIOmknOiBub3cuZm9ybWF0KCdERC1NTSBISDptbScpLFxuXHRcdFx0XHQnaitGK1krSDppJzogbm93LmZvcm1hdCgnREQgTU1NTSBZIEhIOm1tJyksXG5cdFx0XHRcdCdEK2orRitZK0g6aSc6IG5vdy5mb3JtYXQoJ2RkZGQgREQgTU1NIFkgSEg6bW0nKSxcblx0XHRcdFx0J0g6aSc6IG5vdy5mb3JtYXQoJ0hIOm1tJylcblx0XHRcdH0pO1xuXG5cdFx0cmV0dXJuIGZvcm1hdHM7XG5cdH1cblxuXHRpc1N0cmluZ0NvbHVtbiAoY29sdW1uOiBSZXNwb25zZUNvbHVtbik6IGJvb2xlYW4ge1xuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2VtYWlsJzpcblx0XHRcdGNhc2UgJ3Bob25lJzpcblx0XHRcdGNhc2UgJ3VybCc6XG5cdFx0XHRjYXNlICd0ZXh0Jzpcblx0XHRcdGNhc2UgJ2xvbmd0ZXh0Jzpcblx0XHRcdGNhc2UgJ3RleHRyZXBsYWNlJzpcblx0XHRcdFx0Ly8gY2FzZSAnaHRtbCc6IC8vIFRPRE86IHNvcnQgb24gZmlsdGVyZWQgdmFsdWVcblx0XHRcdFx0Ly8gY2FzZSAnZW51bSc6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlzRmxvYXRDb2x1bW4gKGNvbHVtbjogUmVzcG9uc2VDb2x1bW4pOiBib29sZWFuIHtcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG5cdFx0XHRjYXNlICdkb3VibGUnOiAvLyBmbG9hdGluZyBwb2ludCB0eXBlc1xuXHRcdFx0Y2FzZSAndm9sdW1lJzpcblx0XHRcdGNhc2UgJ3dlaWdodCc6XG5cdFx0XHRjYXNlICdkaXN0YW5jZSc6XG5cdFx0XHRjYXNlICdkaW1lbnNpb24nOlxuXHRcdFx0Y2FzZSAncG93ZXInOlxuXHRcdFx0Y2FzZSAnY3VycmVudCc6XG5cdFx0XHRjYXNlICdwcmljZSc6XG5cdFx0XHRjYXNlICdwZXJjZW50YWdlJzpcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aXNJbnRDb2x1bW4gKGNvbHVtbjogUmVzcG9uc2VDb2x1bW4pOiBib29sZWFuIHtcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG5cdFx0XHRjYXNlICdpbnQnOiAvLyBpbnRlZ2VyIHR5cGVzXG5cdFx0XHRjYXNlICdudW1iZXInOlxuXHRcdFx0Y2FzZSAncXVhbnRpdHknOlxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpc051bWJlckNvbHVtbiAoY29sdW1uOiBSZXNwb25zZUNvbHVtbik6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmlzRmxvYXRDb2x1bW4oY29sdW1uKSB8fCB0aGlzLmlzSW50Q29sdW1uKGNvbHVtbik7XG5cdH1cblxuXHRpc0N1c3RvbUNvbHVtbiAoY29sdW1uOiBSZXNwb25zZUNvbHVtbik6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBjb2x1bW4uZmllbGR0eXBlID09PSAnY3VzdG9tZmllbGQnO1xuXHR9XG5cblx0aXNJdGVtQ29sdW1uIChjb2x1bW46IFJlc3BvbnNlQ29sdW1uLCBpbmNsdWRlSWQgPSB0cnVlKTogYm9vbGVhbiB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnaWQnOlxuXHRcdFx0XHRyZXR1cm4gaW5jbHVkZUlkO1xuXHRcdFx0Y2FzZSAnaXRlbSc6XG5cdFx0XHRjYXNlICdjaGlsZCc6XG5cdFx0XHRjYXNlICdzaWJsaW5nJzpcblx0XHRcdGNhc2UgJ2xpbmsnOlxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpc0RhdGVDb2x1bW4gKGNvbHVtbjogUmVzcG9uc2VDb2x1bW4pOiBib29sZWFuIHtcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aXNSZW5kZXJlZENvbHVtbiAoY29sdW1uOiBSZXNwb25zZUNvbHVtbik6IGJvb2xlYW4ge1xuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpc0ZpbHRlcmVkQ29sdW1uIChjb2x1bW46IFJlc3BvbnNlQ29sdW1uKTogYm9vbGVhbiB7XG5cdFx0Ly8gdWdseSBoYWNrIDotKFxuXHRcdGlmIChjb2x1bW4uaWQgPT09ICdzdGFmZmVsJylcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0aWYgKGNvbHVtbi5nZW5lcmF0b3IgIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAncHJpY2UnOlxuXHRcdFx0Y2FzZSAnYm9vbCc6XG5cdFx0XHRjYXNlICdlbnVtJzpcblx0XHRcdGNhc2UgJ2NvdW50cnknOlxuXHRcdFx0Y2FzZSAndm9sdW1lJzpcblx0XHRcdGNhc2UgJ3dlaWdodCc6XG5cdFx0XHRjYXNlICdkaXN0YW5jZSc6XG5cdFx0XHRjYXNlICdkaW1lbnNpb24nOlxuXHRcdFx0Y2FzZSAncXVhbnRpdHknOlxuXHRcdFx0Y2FzZSAnZW1haWwnOlxuXHRcdFx0Y2FzZSAndXJsJzpcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0Y2FzZSAndGltZSc6XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRjYXNlICdodG1sJzpcblx0XHRcdGNhc2UgJ3RleHRyZXBsYWNlJzpcblx0XHRcdGNhc2UgJ2xvbmd0ZXh0Jzpcblx0XHRcdGNhc2UgJ3BlcmNlbnRhZ2UnOlxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpc0Zvcm1hdHRlZENvbHVtbiAoY29sdW1uOiBSZXNwb25zZUNvbHVtbik6IGJvb2xlYW4ge1xuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0Y2FzZSAndGltZSc6XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRjYXNlICdjb2xvcic6XG5cdFx0XHRjYXNlICdqc29uJzpcblx0XHRcdGNhc2UgJ251bWJlcic6XG5cdFx0XHRjYXNlICdmaWxlc2l6ZSc6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlzU2VsZWN0YWJsZUNvbHVtbiAoY29sdW1uOiBSZXNwb25zZUNvbHVtbik6IGJvb2xlYW4ge1xuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2Jsb2InOlxuXHRcdFx0Y2FzZSAnY29vcmRpbmF0ZSc6XG5cdFx0XHRjYXNlICdmb3JjZXVwZGF0ZSc6XG5cdFx0XHRjYXNlICdpZCc6XG5cdFx0XHRjYXNlICdqc29uJzpcblx0XHRcdGNhc2UgJ29yZGVyJzpcblx0XHRcdGNhc2UgJ3BhcmVudGlkJzpcblx0XHRcdGNhc2UgJ3BhcmVudHR5cGUnOlxuXHRcdFx0Y2FzZSAncGFzc3dvcmQnOlxuXHRcdFx0Y2FzZSAndG9rZW4nOlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRoYXNMb2NhdGlvblByb3BlcnR5IChjb2x1bW46IFJlc3BvbnNlQ29sdW1uLCBsb2NhdGlvbjogbnVtYmVyKTogYm9vbGVhbiB7XG5cdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2Vcblx0XHRyZXR1cm4gKGxvY2F0aW9uICYgY29sdW1uLmxvY2F0aW9uKSAhPT0gMDtcblx0fVxuXG5cdGlzRWRpdGFibGVDb2x1bW4gKGNvbHVtbjogUmVzcG9uc2VDb2x1bW4pOiBib29sZWFuIHtcblx0XHRpZiAoY29sdW1uLnJlYWRPbmx5KVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGlzU2VhcmNoYWJsZUNvbHVtbiAoY29sdW1uOiBSZXNwb25zZUNvbHVtbik6IGJvb2xlYW4ge1xuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2VtYWlsJzpcblx0XHRcdGNhc2UgJ3Bob25lJzpcblx0XHRcdGNhc2UgJ3RleHQnOlxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxuXHRcdFx0Y2FzZSAnaHRtbCc6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGdldERlZmF1bHRXZWlnaHQgKGNvbHVtbjogUmVzcG9uc2VDb2x1bW4pOiBudW1iZXIge1xuXHRcdC8vIFx0XHRcdGNvbnNvbGUubG9nKCdnZXREZWZhdWx0V2VpZ2h0JywgY29sdW1uKTtcblxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2RvdWJsZSc6XG5cdFx0XHRjYXNlICdwcmljZSc6XG5cdFx0XHRjYXNlICdib29sJzpcblx0XHRcdGNhc2UgJ2ludCc6XG5cdFx0XHRjYXNlICdwZXJjZW50YWdlJzpcblx0XHRcdGNhc2UgJ2NvbG9yJzpcblx0XHRcdGNhc2UgJ251bWJlcic6XG5cdFx0XHRjYXNlICdwb3dlcic6XG5cdFx0XHRjYXNlICdjdXJyZW50Jzpcblx0XHRcdFx0cmV0dXJuIDAuNTtcblxuXHRcdFx0Y2FzZSAndXJsJzpcblx0XHRcdGNhc2UgJ2VudW0nOlxuXHRcdFx0Y2FzZSAnZW1haWwnOlxuXHRcdFx0Y2FzZSAndGV4dCc6XG5cdFx0XHRjYXNlICdpdGVtJzpcblx0XHRcdGNhc2UgJ2xpbmsnOlxuXHRcdFx0XHRyZXR1cm4gMS41O1xuXG5cdFx0XHRjYXNlICdsb25ndGV4dCc6XG5cdFx0XHRjYXNlICdodG1sJzpcblx0XHRcdGNhc2UgJ3RleHRyZXBsYWNlJzpcblx0XHRcdFx0cmV0dXJuIDI7XG5cblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0Y2FzZSAndGltZSc6XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0fVxuXHR9XG5cblx0Z2V0Q29tcGFyYXRvcnMgKGNvbHVtbjogUmVzcG9uc2VDb2x1bW4gJiB7dHlwZTogJ2RpbWVuc2lvbicgfCAnd2VpZ2h0JyB8ICdwcmljZSd9KTogWyc9JywgJz4nLCAnPCddO1xuXHRnZXRDb21wYXJhdG9ycyAoY29sdW1uOiBSZXNwb25zZUNvbHVtbiAmIHt0eXBlOiAnZGF0ZScgfCAnZGF0ZXRpbWUnIHwgJ3RpbWUnIHwgJ2R1cmF0aW9uJ30pOiBbJz4nLCAnPCddO1xuXHRnZXRDb21wYXJhdG9ycyAoY29sdW1uOiBSZXNwb25zZUNvbHVtbik6IFsnPScsICchPSddO1xuXHRnZXRDb21wYXJhdG9ycyAoY29sdW1uOiBSZXNwb25zZUNvbHVtbikge1xuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2RpbWVuc2lvbic6XG5cdFx0XHRjYXNlICd3ZWlnaHQnOlxuXHRcdFx0Y2FzZSAncHJpY2UnOlxuXHRcdFx0XHRyZXR1cm4gWyc9JywgJz4nLCAnPCddO1xuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRjYXNlICd0aW1lJzpcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdFx0cmV0dXJuIFsnPicsICc8J107XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gWyc9JywgJyE9J107XG5cdFx0fVxuXHR9XG5cblx0Y29udGFpbnNDb2x1bW4gKHJlcXVlc3RDb2x1bW46IEFwaVJlcXVlc3RDb2x1bW4sIGRlc3RpbmF0aW9uOiBBcGlSZXF1ZXN0Q29sdW1uW10pOiBib29sZWFuIHtcblx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcblx0XHRjb25zdCBjb2x1bW5JbmRleCA9IHRoaXMuZmluZFJlcXVlc3RDb2x1bW4oY29sdW1uLmlkLCBkZXN0aW5hdGlvbik7XG5cblx0XHRpZiAoY29sdW1uSW5kZXggPT09IC0xKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0aWYgKGNvbHVtbi5jaGlsZHJlbi5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRcdGlmICh0eXBlb2YgZGVzdGluYXRpb25bY29sdW1uSW5kZXhdID09PSAnc3RyaW5nJylcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdGZvciAoY29uc3QgY2hpbGRDb2x1bW4gb2YgY29sdW1uLmNoaWxkcmVuKSB7XG5cdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRpZiAoIXRoaXMuY29udGFpbnNDb2x1bW4oY2hpbGRDb2x1bW4sIGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XVtjb2x1bW4uaWRdKSlcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Y29udGFpbnNEZXJpdmVkQ29sdW1ucyAocmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5bXSk6IGJvb2xlYW4ge1xuXHRcdGZvciAoY29uc3QgY29sdW1uIGluIHJlcXVlc3RDb2x1bW5zKSB7XG5cdFx0XHRpZiAodGhpcy5wYXJzZVJlcXVlc3RDb2x1bW4oY29sdW1uKS5jaGlsZHJlbi5sZW5ndGggPiAwKVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXNwb25zZUNvbHVtbnNBdmFpbGFibGUgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbltdLFxuXHRcdHJlc3BvbnNlQ29sdW1uTWFwOiBSZXNwb25zZUNvbHVtbk1hcFxuXHQpOiBib29sZWFuIHtcblx0XHRmb3IgKGNvbnN0IHJlcXVlc3RDb2x1bW4gb2YgcmVxdWVzdENvbHVtbnMpIHtcblx0XHRcdGNvbnN0IHBhcnNlZENvbHVtbiA9IHRoaXMucGFyc2VSZXF1ZXN0Q29sdW1uKHJlcXVlc3RDb2x1bW4pO1xuXHRcdFx0Y29uc3QgY2hpbGRyZW4gPSBwYXJzZWRDb2x1bW4uY2hpbGRyZW47XG5cdFx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSByZXNwb25zZUNvbHVtbk1hcFtpdGVtVHlwZV07XG5cdFx0XHRsZXQgcmVzcG9uc2VDb2x1bW47XG5cblx0XHRcdGlmIChyZXNwb25zZUNvbHVtbnMgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0XHRyZXNwb25zZUNvbHVtbiA9IHJlc3BvbnNlQ29sdW1uc1twYXJzZWRDb2x1bW4uaWRdO1xuXG5cdFx0XHRpZiAocmVzcG9uc2VDb2x1bW4gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdGNoaWxkcmVuLmxlbmd0aCA+IDAgJiZcblx0XHRcdFx0IXRoaXMucmVzcG9uc2VDb2x1bW5zQXZhaWxhYmxlKHJlc3BvbnNlQ29sdW1uLml0ZW1UeXBlLCBjaGlsZHJlbiwgcmVzcG9uc2VDb2x1bW5NYXApXG5cdFx0XHQpXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGNvcHlSZXF1ZXN0Q29sdW1ucyAoY29sdW1uczogdHJ1ZSk6IHRydWU7XG5cdGNvcHlSZXF1ZXN0Q29sdW1ucyAoY29sdW1uczogQXBpUmVxdWVzdENvbHVtbltdKTogQXBpUmVxdWVzdENvbHVtbltdO1xuXHRjb3B5UmVxdWVzdENvbHVtbnMgKGNvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zKTogQXBpUmVxdWVzdENvbHVtbnMge1xuXHRcdGlmIChjb2x1bW5zID09PSB0cnVlKVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cblx0XHRjb25zdCByZXN1bHQ6IEFwaVJlcXVlc3RDb2x1bW5bXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucylcblx0XHRcdHJlc3VsdC5wdXNoKHRoaXMuY29weVJlcXVlc3RDb2x1bW4oY29sdW1uKSk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Y29weVJlcXVlc3RDb2x1bW4gKHJlcXVlc3RDb2x1bW46IEFwaVJlcXVlc3RDb2x1bW4pOiBBcGlSZXF1ZXN0Q29sdW1uIHtcblx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcblxuXHRcdGlmIChjb2x1bW4uY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIGNvbHVtbi5pZDtcblxuXHRcdGNvbnN0IGNoaWxkcmVuOiBBcGlSZXF1ZXN0Q29sdW1uW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgY2hpbGRDb2x1bW4gb2YgY29sdW1uLmNoaWxkcmVuKVxuXHRcdFx0Y2hpbGRyZW4ucHVzaCh0aGlzLmNvcHlSZXF1ZXN0Q29sdW1uKGNoaWxkQ29sdW1uKSk7XG5cblx0XHRyZXR1cm4ge1tjb2x1bW4uaWRdOiBjaGlsZHJlbn07XG5cdH1cblxuXHQvKipcblx0ICogRGlmZmVyZW5jZTogY29sdW1ucyB0aGF0IGFyZSBpbiBzZWNvbmQsIGJ1dCBub3QgaW4gZmlyc3Rcblx0ICogQHBhcmFtIHtBcnJheX0gZmlyc3Rcblx0ICogQHBhcmFtIHtBcnJheX0gc2Vjb25kXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nICdtZXJnZWQnIGFuZCAnZGlmZmVyZW5jZScgcHJvcGVydGllc1xuXHQgKi9cblx0bWVyZ2VSZXF1ZXN0Q29sdW1ucyAoXG5cdFx0Zmlyc3Q6IHRydWUsXG5cdFx0c2Vjb25kOiBBcGlSZXF1ZXN0Q29sdW1uc1xuXHQpOiB7bWVyZ2VkOiB0cnVlLCBkaWZmZXJlbmNlOiBbXX07XG5cdG1lcmdlUmVxdWVzdENvbHVtbnMgKFxuXHRcdGZpcnN0OiBBcGlSZXF1ZXN0Q29sdW1uW10sXG5cdFx0c2Vjb25kOiB0cnVlXG5cdCk6IHttZXJnZWQ6IHRydWUsIGRpZmZlcmVuY2U6IHRydWV9O1xuXHRtZXJnZVJlcXVlc3RDb2x1bW5zIChcblx0XHRmaXJzdDogQXBpUmVxdWVzdENvbHVtbltdLFxuXHRcdHNlY29uZDogQXBpUmVxdWVzdENvbHVtbltdXG5cdCk6IHttZXJnZWQ6IEFwaVJlcXVlc3RDb2x1bW5bXSwgZGlmZmVyZW5jZTogQXBpUmVxdWVzdENvbHVtbltdfTtcblx0bWVyZ2VSZXF1ZXN0Q29sdW1ucyAoXG5cdFx0Zmlyc3Q6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRcdHNlY29uZDogQXBpUmVxdWVzdENvbHVtbnNcblx0KToge21lcmdlZDogQXBpUmVxdWVzdENvbHVtbnMsIGRpZmZlcmVuY2U6IEFwaVJlcXVlc3RDb2x1bW5zfTtcblx0bWVyZ2VSZXF1ZXN0Q29sdW1ucyAoXG5cdFx0Zmlyc3Q6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRcdHNlY29uZDogQXBpUmVxdWVzdENvbHVtbnNcblx0KToge21lcmdlZDogQXBpUmVxdWVzdENvbHVtbnMsIGRpZmZlcmVuY2U6IEFwaVJlcXVlc3RDb2x1bW5zfSB7XG5cdFx0aWYgKGZpcnN0ID09PSB0cnVlKSAvLyA9PT0gb3BlcmF0b3IgbmVlZGVkIGhlcmVcblx0XHRcdHJldHVybiB7bWVyZ2VkOiB0cnVlLCBkaWZmZXJlbmNlOiBbXX07XG5cblx0XHRpZiAoc2Vjb25kID09PSB0cnVlKVxuXHRcdFx0cmV0dXJuIHttZXJnZWQ6IHRydWUsIGRpZmZlcmVuY2U6IHRydWV9O1xuXG5cdFx0Y29uc3QgbWVyZ2VkID0gdGhpcy5jb3B5UmVxdWVzdENvbHVtbnMoZmlyc3QpO1xuXHRcdGNvbnN0IGRpZmZlcmVuY2U6IEFwaVJlcXVlc3RDb2x1bW5bXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2Ygc2Vjb25kKSB7XG5cdFx0XHRjb25zdCBhZGRlZENvbHVtbiA9IHRoaXMubWVyZ2VSZXF1ZXN0Q29sdW1uKGNvbHVtbiwgbWVyZ2VkKTtcblxuXHRcdFx0aWYgKGFkZGVkQ29sdW1uICE9PSBudWxsKVxuXHRcdFx0XHRkaWZmZXJlbmNlLnB1c2goYWRkZWRDb2x1bW4pO1xuXHRcdH1cblxuXHRcdHJldHVybiB7bWVyZ2VkOiBtZXJnZWQsIGRpZmZlcmVuY2U6IGRpZmZlcmVuY2V9O1xuXHR9XG5cblx0bWVyZ2VSZXF1ZXN0Q29sdW1uIChyZXF1ZXN0Q29sdW1uOiBBcGlSZXF1ZXN0Q29sdW1uLCBkZXN0aW5hdGlvbjogQXBpUmVxdWVzdENvbHVtbltdKSB7XG5cdFx0Y29uc3QgY29sdW1uID0gdGhpcy5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XG5cdFx0Y29uc3QgY29sdW1uSW5kZXggPSB0aGlzLmZpbmRSZXF1ZXN0Q29sdW1uKGNvbHVtbi5pZCwgZGVzdGluYXRpb24pO1xuXG5cdFx0aWYgKGNvbHVtbkluZGV4ID09PSAtMSkge1xuXHRcdFx0ZGVzdGluYXRpb24ucHVzaChyZXF1ZXN0Q29sdW1uKTtcblx0XHRcdHJldHVybiByZXF1ZXN0Q29sdW1uO1xuXHRcdH1cblxuXHRcdGlmIChjb2x1bW4uY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHRpZiAodHlwZW9mIGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XSA9PT0gJ3N0cmluZycpIHtcblx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XSA9IHtcblx0XHRcdFx0W2NvbHVtbi5pZF06IFtdXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGNvbnN0IGFkZGVkQ29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMgPSBbXTtcblxuXHRcdGZvciAoY29uc3QgY2hpbGRDb2x1bW4gb2YgY29sdW1uLmNoaWxkcmVuKSB7XG5cdFx0XHRjb25zdCBhZGRlZENvbHVtbiA9IHRoaXMubWVyZ2VSZXF1ZXN0Q29sdW1uKFxuXHRcdFx0XHRjaGlsZENvbHVtbixcblx0XHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5JbmRleF1bY29sdW1uLmlkXVxuXHRcdFx0KTtcblxuXHRcdFx0aWYgKGFkZGVkQ29sdW1uICE9PSBudWxsKVxuXHRcdFx0XHRhZGRlZENvbHVtbnMucHVzaChhZGRlZENvbHVtbik7XG5cdFx0fVxuXG5cdFx0aWYgKGFkZGVkQ29sdW1ucy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdHJldHVybiB7W2NvbHVtbi5pZF06IGFkZGVkQ29sdW1uc307XG5cdH1cblxuXHRnZXRSZXF1ZXN0Q29sdW1uSWQgKHJlcXVlc3RDb2x1bW46IEFwaVJlcXVlc3RDb2x1bW4pOiBzdHJpbmcge1xuXHRcdGlmICh0eXBlb2YgcmVxdWVzdENvbHVtbiA9PT0gJ3N0cmluZycpXG5cdFx0XHRyZXR1cm4gcmVxdWVzdENvbHVtbjtcblxuXHRcdGxldCBjb2x1bW5JZDtcblxuXHRcdGZvciAoY29sdW1uSWQgaW4gcmVxdWVzdENvbHVtbikge31cblxuXHRcdHJldHVybiBjb2x1bW5JZCBhcyBzdHJpbmc7XG5cdH1cblxuXHRwYXJzZVJlcXVlc3RDb2x1bW4gKHJlcXVlc3RDb2x1bW46IEFwaVJlcXVlc3RDb2x1bW4pOiB7aWQ6IHN0cmluZywgY2hpbGRyZW46IEFwaVJlcXVlc3RDb2x1bW5bXX0ge1xuXHRcdGlmICh0eXBlb2YgcmVxdWVzdENvbHVtbiA9PT0gJ3N0cmluZycpXG5cdFx0XHRyZXR1cm4ge2lkOiByZXF1ZXN0Q29sdW1uLCBjaGlsZHJlbjogW119O1xuXG5cdFx0bGV0IGNvbHVtbklkO1xuXG5cdFx0Zm9yIChjb2x1bW5JZCBpbiByZXF1ZXN0Q29sdW1uKSB7fVxuXG5cdFx0cmV0dXJuIHtpZDogY29sdW1uSWQgYXMgc3RyaW5nLCBjaGlsZHJlbjogcmVxdWVzdENvbHVtbltjb2x1bW5JZCBhcyBzdHJpbmddfTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXJnZXMgdHdvIHNldHMgb2YgcmVzcG9uc2UgY29sdW1ucy5cblx0ICogQHBhcmFtIHtvYmplY3R9IGZpcnN0XG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBzZWNvbmRcblx0ICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgYSAnbWVyZ2VkJyBhbmQgYSAnZGlmZmVyZW5jZScgcHJvcGVydHkuXG5cdCAqL1xuXHRtZXJnZVJlc3BvbnNlQ29sdW1ucyAoXG5cdFx0Zmlyc3Q6IFJlc3BvbnNlQ29sdW1uTWFwLFxuXHRcdHNlY29uZDogUmVzcG9uc2VDb2x1bW5NYXBcblx0KToge21lcmdlZDogUmVzcG9uc2VDb2x1bW5NYXAsIGRpZmZlcmVuY2U6IFJlc3BvbnNlQ29sdW1uTWFwfSB7XG5cdFx0Y29uc3QgbWVyZ2VkOiBSZXNwb25zZUNvbHVtbk1hcCA9IHt9O1xuXHRcdGNvbnN0IGRpZmZlcmVuY2U6IFJlc3BvbnNlQ29sdW1uTWFwID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGZpcnN0KSB7XG5cdFx0XHRpZiAoc2Vjb25kW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdG1lcmdlZFtpdGVtVHlwZV0gPSBmaXJzdFtpdGVtVHlwZV07XG5cblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IG1lcmdlUmVzdWx0ID0gdGhpcy5tZXJnZVJlc3BvbnNlQ29sdW1uTWFwKFxuXHRcdFx0XHRmaXJzdFtpdGVtVHlwZV0sXG5cdFx0XHRcdHNlY29uZFtpdGVtVHlwZV1cblx0XHRcdCk7XG5cblx0XHRcdG1lcmdlZFtpdGVtVHlwZV0gPSBtZXJnZVJlc3VsdC5tZXJnZWQ7XG5cdFx0XHRkaWZmZXJlbmNlW2l0ZW1UeXBlXSA9IG1lcmdlUmVzdWx0LmRpZmZlcmVuY2U7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBzZWNvbmQpIHtcblx0XHRcdGlmIChmaXJzdFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRtZXJnZWRbaXRlbVR5cGVdID0gc2Vjb25kW2l0ZW1UeXBlXTtcblx0XHRcdFx0ZGlmZmVyZW5jZVtpdGVtVHlwZV0gPSBzZWNvbmRbaXRlbVR5cGVdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB7bWVyZ2VkOiBtZXJnZWQsIGRpZmZlcmVuY2U6IGRpZmZlcmVuY2V9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7YXJyYXl9IGZpcnN0XG5cdCAqIEBwYXJhbSB7YXJyYXl9IHNlY29uZFxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBkaWZmZXJlbmNlOiB0aGUgY29sdW1ucyB0aGF0IGFyZSBpbiBzZWNvbmQsIGJ1dCBub3QgaW4gZmlyc3QuXG5cdCAqL1xuXHRtZXJnZVJlc3BvbnNlQ29sdW1uTWFwIChmaXJzdDogUmVzcG9uc2VDb2x1bW5NYXAsIHNlY29uZDogUmVzcG9uc2VDb2x1bW5NYXApOiB7bWVyZ2VkOiBSZXNwb25zZUNvbHVtbk1hcCwgZGlmZmVyZW5jZTogUmVzcG9uc2VDb2x1bW5NYXB9IHtcblx0XHRjb25zdCBtZXJnZWQ6IFJlc3BvbnNlQ29sdW1uTWFwID0ge307XG5cdFx0Y29uc3QgZGlmZmVyZW5jZTogUmVzcG9uc2VDb2x1bW5NYXAgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gZmlyc3QpXG5cdFx0XHRtZXJnZWRbY29sdW1uSWRdID0gZmlyc3RbY29sdW1uSWRdO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiBzZWNvbmQpIHtcblx0XHRcdGlmIChpc0RlZmluZWQoZmlyc3RbY29sdW1uSWRdKSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdG1lcmdlZFtjb2x1bW5JZF0gPSBzZWNvbmRbY29sdW1uSWRdO1xuXHRcdFx0ZGlmZmVyZW5jZVtjb2x1bW5JZF0gPSBzZWNvbmRbY29sdW1uSWRdO1xuXHRcdH1cblxuXHRcdHJldHVybiB7bWVyZ2VkOiBtZXJnZWQsIGRpZmZlcmVuY2U6IGRpZmZlcmVuY2V9O1xuXHR9XG5cblx0aXNMb2NhbENvbHVtbklkIChjb2x1bW5JZDogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIGNvbHVtbklkLnN1YnN0cmluZygwLCAyKSA9PT0gJ19fJztcblx0fVxuXG5cdHByb2Nlc3NDb25maWdDb2x1bW5zIChjb25maWdDb2x1bW5zOiBzdHJpbmdbXSk6IEFwaVJlcXVlc3RDb2x1bW5bXSB7XG5cdFx0Y29uc3QgcmVxdWVzdDogQXBpUmVxdWVzdENvbHVtbltdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb25maWdDb2x1bW5zKSB7XG5cdFx0XHRpZiAodGhpcy5pc0xvY2FsQ29sdW1uSWQoY29sdW1uKSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdHRoaXMucHJvY2Vzc0NvbmZpZ0NvbHVtbih0aGlzLnBhcnNlQ29uZmlnQ29sdW1uKGNvbHVtbiksIHJlcXVlc3QpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXF1ZXN0O1xuXHR9XG5cblx0cGFyc2VDb25maWdDb2x1bW4gKGNvbmZpZ0NvbHVtbjogc3RyaW5nKTogc3RyaW5nW10ge1xuXHRcdHJldHVybiBjb25maWdDb2x1bW4uc3BsaXQoUkVOREVSX0FTX1NFUEVSQVRPUilbMF0uc3BsaXQoQ09MVU1OX1NFUEVSQVRPUik7XG5cdH1cblxuXHRwcm9jZXNzQ29uZmlnQ29sdW1uIChwYXJzZWRDb25maWdDb2x1bW46IHN0cmluZ1tdLCBkZXN0aW5hdGlvbjogQXBpUmVxdWVzdENvbHVtbltdKSB7XG5cdFx0Y29uc3QgY29sdW1uSWQgPSBwYXJzZWRDb25maWdDb2x1bW5bMF07XG5cdFx0Y29uc3QgaXNMZWFmID0gcGFyc2VkQ29uZmlnQ29sdW1uLmxlbmd0aCA9PT0gMTtcblx0XHRsZXQgY29sdW1uSW5kZXggPSB0aGlzLmZpbmRSZXF1ZXN0Q29sdW1uKGNvbHVtbklkLCBkZXN0aW5hdGlvbik7XG5cblx0XHRpZiAoaXNMZWFmKSB7XG5cdFx0XHRpZiAoY29sdW1uSW5kZXggPT09IC0xKVxuXHRcdFx0XHRkZXN0aW5hdGlvbi5wdXNoKGNvbHVtbklkKTtcblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChjb2x1bW5JbmRleCA9PT0gLTEpXG5cdFx0XHRjb2x1bW5JbmRleCA9IGRlc3RpbmF0aW9uLnB1c2goe1tjb2x1bW5JZF06IFtdfSkgLSAxO1xuXHRcdGVsc2UgaWYgKHR5cGVvZiBkZXN0aW5hdGlvbltjb2x1bW5JbmRleF0gPT09ICdzdHJpbmcnKVxuXHRcdFx0ZGVzdGluYXRpb25bY29sdW1uSW5kZXhdID0ge1tjb2x1bW5JZF06IFtdfTtcblxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHR0aGlzLnByb2Nlc3NDb25maWdDb2x1bW4ocGFyc2VkQ29uZmlnQ29sdW1uLnNsaWNlKDEpLCBkZXN0aW5hdGlvbltjb2x1bW5JbmRleF1bY29sdW1uSWRdKTtcblx0fVxuXG5cdGZpbmRSZXF1ZXN0Q29sdW1uIChjb2x1bW5JZDogc3RyaW5nLCByZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbltdKTogbnVtYmVyIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RDb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBjb2x1bW4gPSByZXF1ZXN0Q29sdW1uc1tpXTtcblxuXHRcdFx0aWYgKHRoaXMuZ2V0UmVxdWVzdENvbHVtbklkKGNvbHVtbikgPT09IGNvbHVtbklkKVxuXHRcdFx0XHRyZXR1cm4gaTtcblx0XHR9XG5cblx0XHRyZXR1cm4gLTE7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSwgQ29sbGVjdGlvbkhhbmRsZXIsIENyZWF0ZUNvbXBpbGF0aW9uLCBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksIFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IENyZWF0ZVJlcXVlc3RFbnRyeSwgQ3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCwgSXRlbUVudHJ5TWFwLCBJdGVtSWQsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBnZXRQYXRoIH0gZnJvbSAnLi9VdGlsJztcblxuZXhwb3J0IGNsYXNzIENyZWF0ZVJlcXVlc3Qge1xuXHRyZXF1ZXN0czogQ3JlYXRlUmVxdWVzdEVudHJ5W10gPSBbXTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnk6IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSByZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb21waWxhdGlvbjogQ3JlYXRlQ29tcGlsYXRpb24sXG5cdFx0cHJpdmF0ZSBsb2NhbENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlLFxuXHRcdHByaXZhdGUgcGFyYW1ldGVyTWFwOiBDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwLFxuXHRcdHByaXZhdGUgYnJlYWt1cEJ5UGFyZW50ID0gZmFsc2Vcblx0KSB7XG5cdH1cblxuXHRmaW5hbGl6ZVJlcXVlc3QgKHJlcXVlc3RSZXNvdXJjZTogQ3JlYXRlUmVxdWVzdEVudHJ5KSB7XG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJpZXMgPSByZXF1ZXN0UmVzb3VyY2UuY29sbGVjdGlvbnMuZ2V0Q29sbGVjdGlvbnNXaXRoRml0dGluZ0l0ZW1zKCk7XG5cdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gcmVxdWVzdFJlc291cmNlLmNvbHVtbnM7XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiBjb2xsZWN0aW9uRW50cmllcylcblx0XHRcdGNvbHVtbkV4cGFuc2lvbi5leHBhbmQoY29sbGVjdGlvbkVudHJ5LmNvbHVtbnMpO1xuXG5cdFx0cmVxdWVzdFJlc291cmNlLnJlcXVlc3QuY29sdW1ucyA9IGNvbHVtbkV4cGFuc2lvbi5nZXQoKTtcblxuXHRcdHJldHVybiByZXF1ZXN0UmVzb3VyY2U7XG5cdH1cblxuXHRzZXRSZXF1ZXN0UGFyZW50IChwYXJlbnRUeXBlOiBJdGVtVHlwZSwgcmVxdWVzdEVudHJ5OiBDcmVhdGVSZXF1ZXN0RW50cnkpIHtcblx0XHRjb25zdCByZXF1ZXN0ID0gcmVxdWVzdEVudHJ5LnJlcXVlc3Q7XG5cblx0XHRpZiAocGFyZW50VHlwZSA9PT0gJ1ZvaWQnKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0cmVxdWVzdC5wYXJlbnRUeXBlID0gcGFyZW50VHlwZTtcblx0XHRyZXF1ZXN0LnBhcmVudElkID0ge307XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHJ1biAoKSB7XG5cdFx0Y29uc3QgY29tcGlsYXRpb24gPSB0aGlzLmNvbXBpbGF0aW9uO1xuXG5cdFx0aWYgKHRoaXMuYnJlYWt1cEJ5UGFyZW50KSB7XG5cdFx0XHRmb3IgKGNvbnN0IHBhcmVudFR5cGUgaW4gY29tcGlsYXRpb24pIHtcblx0XHRcdFx0Y29uc3QgcGFyZW50TWFwID0gY29tcGlsYXRpb25bcGFyZW50VHlwZV07XG5cblx0XHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBwYXJlbnRNYXApIHtcblx0XHRcdFx0XHRpZiAodGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZChwYXJlbnRJZCkpXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRcdGNvbnN0IHJlcXVlc3RSZXNvdXJjZSA9IHRoaXMuaW5pdGlhbGl6ZVJlcXVlc3QoKTtcblxuXHRcdFx0XHRcdHRoaXMuZXh0ZW5kUmVxdWVzdChcblx0XHRcdFx0XHRcdHBhcmVudE1hcFtwYXJlbnRJZF0sXG5cdFx0XHRcdFx0XHR0aGlzLnNldFJlcXVlc3RQYXJlbnQocGFyZW50VHlwZSwgcmVxdWVzdFJlc291cmNlKSA/ICtwYXJlbnRJZCA6IG51bGwsXG5cdFx0XHRcdFx0XHRyZXF1ZXN0UmVzb3VyY2Vcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0dGhpcy5yZXF1ZXN0cy5wdXNoKHRoaXMuZmluYWxpemVSZXF1ZXN0KHJlcXVlc3RSZXNvdXJjZSkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoY29uc3QgcGFyZW50VHlwZSBpbiBjb21waWxhdGlvbikge1xuXHRcdFx0XHRjb25zdCBwYXJlbnRNYXAgPSBjb21waWxhdGlvbltwYXJlbnRUeXBlXTtcblx0XHRcdFx0Y29uc3QgcmVxdWVzdFJlc291cmNlID0gdGhpcy5pbml0aWFsaXplUmVxdWVzdCgpO1xuXHRcdFx0XHRjb25zdCBoYXNQYXJlbnQgPSB0aGlzLnNldFJlcXVlc3RQYXJlbnQocGFyZW50VHlwZSwgcmVxdWVzdFJlc291cmNlKTtcblxuXHRcdFx0XHRsZXQgdmFsaWRSZXF1ZXN0ID0gZmFsc2U7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBwYXJlbnRNYXApIHtcblx0XHRcdFx0XHRpZiAodGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZChwYXJlbnRJZCkpXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRcdHRoaXMuZXh0ZW5kUmVxdWVzdChcblx0XHRcdFx0XHRcdHBhcmVudE1hcFtwYXJlbnRJZF0sXG5cdFx0XHRcdFx0XHRoYXNQYXJlbnQgPyArcGFyZW50SWQgOiBudWxsLFxuXHRcdFx0XHRcdFx0cmVxdWVzdFJlc291cmNlXG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdHZhbGlkUmVxdWVzdCA9IHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodmFsaWRSZXF1ZXN0KVxuXHRcdFx0XHRcdHRoaXMucmVxdWVzdHMucHVzaCh0aGlzLmZpbmFsaXplUmVxdWVzdChyZXF1ZXN0UmVzb3VyY2UpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5yZXF1ZXN0cztcblx0fVxuXG5cdGluaXRpYWxpemVSZXF1ZXN0ICgpOiBDcmVhdGVSZXF1ZXN0RW50cnkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRyZXF1ZXN0OiB7XG5cdFx0XHRcdHJlcXVlc3RUeXBlOiAnY3JlYXRlJyxcblx0XHRcdFx0aXRlbXM6IHt9LFxuXHRcdFx0XHRjb2x1bW5zOiB7fVxuXHRcdFx0fSxcblx0XHRcdGNvbHVtbnM6IHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KCksXG5cdFx0XHRpdGVtczoge30sXG5cdFx0XHRjb2xsZWN0aW9uczogdGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRbdGhpcy5sb2NhbENvbGxlY3Rpb25DYWNoZSwgdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5lbnRyaWVzXSxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0ZmFsc2Vcblx0XHRcdClcblx0XHR9O1xuXHR9XG5cblx0cHJpdmF0ZSBleHRlbmRSZXF1ZXN0IChpdGVtRW50cmllczogSXRlbUVudHJ5TWFwLCByZXF1ZXN0UGFyZW50SWQ6IEl0ZW1JZCB8IG51bGwsIGRlc3RpbmF0aW9uOiBDcmVhdGVSZXF1ZXN0RW50cnkpIHtcblx0XHRjb25zdCByZXF1ZXN0ID0gZGVzdGluYXRpb24ucmVxdWVzdDtcblx0XHRjb25zdCBpdGVtRW50cnlNYXAgPSBkZXN0aW5hdGlvbi5pdGVtcztcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gaXRlbUVudHJpZXMpIHtcblx0XHRcdGlmIChyZXF1ZXN0Lml0ZW1UeXBlID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdHJlcXVlc3QuaXRlbVR5cGUgPSBpdGVtVHlwZTtcblxuXHRcdFx0aWYgKGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpdGVtRW50cnlNYXBbaXRlbVR5cGVdID0ge307XG5cdFx0XHRcdHJlcXVlc3QuaXRlbXNbaXRlbVR5cGVdID0ge307XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGl0ZW1FbnRyaWVzW2l0ZW1UeXBlXSkge1xuXHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSBpdGVtRW50cmllc1tpdGVtVHlwZV1baXRlbUlkXTtcblx0XHRcdFx0Y29uc3QgY2hpbGRFbnRyaWVzID0gZ2V0UGF0aCh0aGlzLmNvbXBpbGF0aW9uLCBbaXRlbVR5cGUsIGl0ZW1JZF0pO1xuXHRcdFx0XHRjb25zdCBpdGVtUmVxdWVzdDogYW55ID0gcmVxdWVzdC5pdGVtc1tpdGVtVHlwZV1baXRlbUlkXSA9IHt9O1xuXHRcdFx0XHRjb25zdCBwYXJhbWV0ZXJzID0gZ2V0UGF0aCh0aGlzLnBhcmFtZXRlck1hcCwgW2l0ZW1UeXBlLCBpdGVtSWRdKTtcblxuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmVudElkICE9PSBudWxsKVxuXHRcdFx0XHRcdCg8e1tpdGVtSWQ6IHN0cmluZ106IEl0ZW1JZH0+IHJlcXVlc3QucGFyZW50SWQpW2l0ZW1JZF0gPSByZXF1ZXN0UGFyZW50SWQ7XG5cblx0XHRcdFx0ZGVzdGluYXRpb24uY29sdW1ucy5leHBhbmQoaXRlbUVudHJ5LmNvbHVtbnMpO1xuXHRcdFx0XHRkZXN0aW5hdGlvbi5jb2xsZWN0aW9ucy5leHBhbmQoaXRlbUVudHJ5KTtcblxuXHRcdFx0XHRpdGVtRW50cnlNYXBbaXRlbVR5cGVdW2l0ZW1JZF0gPSBpdGVtRW50cnk7XG5cblx0XHRcdFx0aXRlbVJlcXVlc3QudmFsdWVzID0gaXRlbUVudHJ5LmZvcm1hdFJlcXVlc3QoKTtcblx0XHRcdFx0aXRlbVJlcXVlc3QucGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7XG5cblx0XHRcdFx0aWYgKGNoaWxkRW50cmllcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdGNvbnN0IGxpbmtzOiB7W2l0ZW1UeXBlOiBzdHJpbmddOiBJdGVtSWRbXX0gPSBpdGVtUmVxdWVzdC5saW5rcyA9IHt9O1xuXG5cdFx0XHRcdGZvciAoY29uc3QgY2hpbGRUeXBlIGluIGNoaWxkRW50cmllcykge1xuXHRcdFx0XHRcdGxpbmtzW2NoaWxkVHlwZV0gPSBbXTtcblxuXHRcdFx0XHRcdGZvciAoY29uc3QgY2hpbGRJZCBpbiBjaGlsZEVudHJpZXNbY2hpbGRUeXBlXSlcblx0XHRcdFx0XHRcdGxpbmtzW2NoaWxkVHlwZV0ucHVzaChwYXJzZUludChjaGlsZElkLCAxMCkpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5leHRlbmRSZXF1ZXN0KGNoaWxkRW50cmllcywgbnVsbCwgZGVzdGluYXRpb24pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuIiwiaW1wb3J0IHtcblx0Q29sbGVjdGlvbkNhY2hlLFxuXHRDb2xsZWN0aW9uSGFuZGxlcixcblx0Q29sbGVjdGlvbk1hdGNoZXIsXG5cdENvbHVtblNldCxcblx0SXRlbUNhY2hlLFxuXHRJdGVtSGFuZGxlcixcblx0SXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRLZXlTZXJ2aWNlLFxuXHRMb2NhbENhY2hlLFxuXHRRdWVyeVNlcnZpY2Vcbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQge1xuXHRDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksXG5cdENvbHVtblNldEZhY3RvcnksXG5cdExvY2FsQ2FjaGVGYWN0b3J5LFxuXHRNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5XG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQge1xuXHRBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0QXV0aEludGVyZmFjZSxcblx0RXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRMb2NhbENhY2hlTWFuYWdlckludGVyZmFjZSxcblx0UHJvbWlzZUxpYnJhcnlJbnRlcmZhY2Vcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQge1xuXHRDb2xsZWN0aW9uRWRpdFJlc291cmNlLFxuXHRDb2xsZWN0aW9uRW50cnksXG5cdENvbGxlY3Rpb25FbnRyeU9wdGlvbnMsXG5cdENvbGxlY3Rpb25SZXNvdXJjZSxcblx0Q29sbGVjdGlvblJlc291cmNlT3B0aW9ucyxcblx0Q29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZSwgQ29sbGVjdGlvblZpZXdSZXNvdXJjZSxcblx0RWRpdFJlc291cmNlLFxuXHRJdGVtRW50cnksXG5cdEl0ZW1FbnRyeU9wdGlvbnMsXG5cdEl0ZW1SZXNvdXJjZSwgSXRlbVJlc291cmNlT3B0aW9uc0ludGVyZmFjZSwgVmlld1Jlc291cmNlXG59IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge1xuXHRBcGlRdWVyeSxcblx0Q29sbGVjdGlvbkRlZmluaXRpb24sXG5cdENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwLFxuXHRDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZSxcblx0Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXAsIENvbnZlcnNpb25NYXAsXG5cdENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAsXG5cdEl0ZW1JZCxcblx0SXRlbUlkQ29udmVyc2lvbk1hcCxcblx0SXRlbU9wdGlvbnNJbnRlcmZhY2UsXG5cdEl0ZW1SZXNvdXJjZXNJdGVtVHlwZU1hcCxcblx0SXRlbVR5cGUsIExpbmtDb2xsZWN0aW9uRGVmaW5pdGlvbixcblx0TGlua2VkSXRlbUVudHJ5TWFwLFxuXHRMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24sXG5cdE9uU2F2ZUNhbGxiYWNrLFxuXHRQcm9taXNlSW50ZXJmYWNlLFxuXHRTdGF0ZUtleVR5cGUsXG5cdFRlbXBsYXRlSXRlbUVudHJ5TWFwLFxuXHRUZW1wbGF0ZUl0ZW1SZXNvdXJjZU1hcFxufSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IGNyZWF0ZVBhdGggfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgY2xhc3MgSXRlbUFkbWluaXN0cmF0b3Ige1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBhdXRoSW50ZXJmYWNlOiBBdXRoSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5OiBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBpdGVtUmVxdWVzdFNlcnZpY2U6IEl0ZW1SZXF1ZXN0U2VydmljZSxcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBsb2NhbENhY2hlRmFjdG9yeTogTG9jYWxDYWNoZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBsb2NhbENhY2hlTWFuYWdlcjogTG9jYWxDYWNoZU1hbmFnZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBtb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5OiBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgcHJvbWlzZUludGVyZmFjZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZVxuXHQpIHtcblxuXHR9XG5cblx0aW52YWxpZGF0ZUNhY2hlICgpOiB2b2lkIHtcblx0XHQvLyB0aGUgaXRlbUhhbmRsZXIgY2FjaGUgb25seSBjb250YWlucyByZW1vdGUgZW50cmllc1xuXHRcdHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5mb3JFYWNoKFxuXHRcdFx0aXRlbUVudHJ5ID0+IGl0ZW1FbnRyeS5xdWV1ZVJlbG9hZCgpXG5cdFx0KTtcblxuXHRcdC8vIHF1ZXVlUmVsb2FkIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkIGZvciBlYWNoIGluZGl2aWR1YWwgaXRlbVxuXHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZW50cmllcy5mb3JFYWNoKFxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5ID0+IGNvbGxlY3Rpb25FbnRyeS5xdWV1ZVJlbG9hZCgpXG5cdFx0KTtcblx0fVxuXG5cdGdldENvbGxlY3Rpb25NYXRjaGVyIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGFkZFRvVGFiOiBib29sZWFuID0gdHJ1ZSk6IENvbGxlY3Rpb25NYXRjaGVyIHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cdFx0Y29uc3QgY29sbGVjdGlvbk1hdGNoZXIgPSB0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QoW2xvY2FsQ2FjaGUuY29sbGVjdGlvbnNdLCBmYWxzZSwgdHJ1ZSk7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0Ly8gdGhpcyBpcyBvbmx5IHJlbGV2YW50IGlmIHRoZXJlIGFyZSBubyBjb2xsZWN0aW9ucyB0byBhZGQgdGhlIGl0ZW0gdG8sIGJ1dCB3ZSBzdGlsbCB3YW50IHRvIHNhdmUgdGhlIGl0ZW1cblx0XHRcdGlmIChhZGRUb1RhYilcblx0XHRcdFx0bG9jYWxDYWNoZS5pdGVtcy5hZGQoaXRlbUVudHJ5KTtcblxuXHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIuZXhwYW5kKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbGxlY3Rpb25NYXRjaGVyO1xuXHR9XG5cblx0ZmV0Y2hUaXRsZSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCwgZGVmZXJSZXF1ZXN0PzogYm9vbGVhbik6IFByb21pc2VJbnRlcmZhY2U8c3RyaW5nPiB7XG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZmV0Y2hUaXRsZShpdGVtVHlwZSwgaXRlbUlkLCBkZWZlclJlcXVlc3QsIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLml0ZW1zKTtcblx0fVxuXG5cdGdldEl0ZW1CeUlkIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUlkOiBJdGVtSWQsXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgPSB7fSxcblx0XHRpc1Jvb3Q/OiBib29sZWFuXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8SXRlbVJlc291cmNlPiB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZmV0Y2hJdGVtKFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRpdGVtSWQsXG5cdFx0XHRuZXcgSXRlbUVudHJ5T3B0aW9ucyhvcHRpb25zKSxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXNcblx0XHQpLnRoZW4oXG5cdFx0XHQoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlSXRlbVJlc291cmNlKGl0ZW1FbnRyeSwgb3B0aW9ucywgaXNSb290KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0SXRlbXNCeUlkIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUlkczogSXRlbUlkW10sXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgPSB7fVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1SZXNvdXJjZVtdPiB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZmV0Y2hJdGVtcyhcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkcyxcblx0XHRcdG5ldyBJdGVtRW50cnlPcHRpb25zKG9wdGlvbnMpLFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtc1xuXHRcdCkudGhlbihcblx0XHRcdChpdGVtRW50cmllczogSXRlbUVudHJ5W10pID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlSXRlbVJlc291cmNlcyhpdGVtRW50cmllcywgb3B0aW9ucyk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldEl0ZW1zQnlRdWVyeSAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHF1ZXJ5OiBBcGlRdWVyeSxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0OiB0cnVlfVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEVkaXRSZXNvdXJjZVtdPjtcblx0Z2V0SXRlbXNCeVF1ZXJ5IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cXVlcnk6IEFwaVF1ZXJ5LFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Vmlld1Jlc291cmNlW10+O1xuXHRnZXRJdGVtc0J5UXVlcnkgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcXVlcnk6IEFwaVF1ZXJ5LCBvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSA9IHt9KSB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXHRcdGNvbnN0IGVudHJ5T3B0aW9ucyA9IG5ldyBJdGVtRW50cnlPcHRpb25zKG9wdGlvbnMpO1xuXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLmFkZFBhcmVudENvbmRpdGlvbihxdWVyeSwgZW50cnlPcHRpb25zLnBhcmVudCksXG5cdFx0XHR7W2l0ZW1UeXBlXTogZW50cnlPcHRpb25zLmNvbHVtbnN9XG5cdFx0KS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc1Jlc3BvbnNlKFxuXHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHRcdHJlc3BvbnNlLmxpbmtzW2l0ZW1UeXBlXSxcblx0XHRcdFx0XHRlbnRyeU9wdGlvbnMucGFyZW50LFxuXHRcdFx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIGVudHJ5T3B0aW9ucy5jb2x1bW5zLCByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKSlcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHQoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdKSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUl0ZW1SZXNvdXJjZXMoaXRlbUVudHJpZXMsIG9wdGlvbnMpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXROZXdSZXNvdXJjZSAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlLFxuXHRcdHJldHVybkxpbmtzOiB0cnVlLFxuXHRcdGlzUm9vdD86IGJvb2xlYW5cblx0KTogUHJvbWlzZUludGVyZmFjZTx7bWFpbjogRWRpdFJlc291cmNlLCBsaW5rZWQ6IEl0ZW1SZXNvdXJjZXNJdGVtVHlwZU1hcH0+O1xuXG5cdGdldE5ld1Jlc291cmNlIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UsXG5cdFx0cmV0dXJuTGlua3M/OiBib29sZWFuLFxuXHRcdGlzUm9vdD86IGJvb2xlYW5cblx0KTogUHJvbWlzZUludGVyZmFjZTxFZGl0UmVzb3VyY2U+O1xuXG5cdGdldE5ld1Jlc291cmNlIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgPSB7fSxcblx0XHRyZXR1cm5MaW5rczogYm9vbGVhbiA9IGZhbHNlLFxuXHRcdGlzUm9vdD86IGJvb2xlYW5cblx0KSB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXG5cdFx0b3B0aW9ucy5lZGl0ID0gdHJ1ZTtcblxuXHRcdHJldHVybiB0aGlzLml0ZW1IYW5kbGVyLmZldGNoTmV3SXRlbShcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0bmV3IEl0ZW1FbnRyeU9wdGlvbnMob3B0aW9ucyksXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zXG5cdFx0KS50aGVuKFxuXHRcdFx0KGl0ZW1FbnRyeVJlc291cmNlOiBUZW1wbGF0ZUl0ZW1FbnRyeU1hcCkgPT4ge1xuXHRcdFx0XHRjb25zdCBtYWluID0gbG9jYWxDYWNoZS5jcmVhdGVJdGVtUmVzb3VyY2UoaXRlbUVudHJ5UmVzb3VyY2UubWFpbiwgb3B0aW9ucywgaXNSb290LCB0cnVlKTtcblx0XHRcdFx0Y29uc3QgbGlua2VkID0gdGhpcy5wcm9jZXNzTGlua2VkSXRlbXMoaXRlbUVudHJ5UmVzb3VyY2UubGlua2VkLCBvcHRpb25zLCB0cnVlKTsgLy8gZG8gdGhpcyBiZWZvcmVoYW5kXG5cblx0XHRcdFx0aWYgKCFyZXR1cm5MaW5rcylcblx0XHRcdFx0XHRyZXR1cm4gbWFpbjtcblxuXHRcdFx0XHRyZXR1cm4ge21haW46IG1haW4sIGxpbmtlZDogbGlua2VkfTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0RHVwbGljYXRlQnlJZCAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGR1cGxpY2F0ZUlkOiBJdGVtSWQsXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgPSB7fSxcblx0XHRyZXR1cm5MaW5rcz86IGJvb2xlYW4sXG5cdFx0aXNSb290PzogYm9vbGVhblxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1SZXNvdXJjZSB8IFRlbXBsYXRlSXRlbVJlc291cmNlTWFwPiB7XG5cdFx0b3B0aW9ucy5pc0R1cGxpY2F0ZSA9IHRydWU7XG5cblx0XHRpZiAob3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMgPT09IHVuZGVmaW5lZClcblx0XHRcdG9wdGlvbnMudGVtcGxhdGVPcHRpb25zID0ge307XG5cblx0XHRpZiAob3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMuaXRlbSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0b3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMuaXRlbSA9IGR1cGxpY2F0ZUlkO1xuXG5cdFx0cmV0dXJuIHRoaXMuZ2V0TmV3UmVzb3VyY2UoaXRlbVR5cGUsIG9wdGlvbnMsIHJldHVybkxpbmtzLCBpc1Jvb3QpO1xuXHR9XG5cblx0Ly8gc3RhdGVLZXkgY2FuIGJlIGEga2V5d29yZCBvciBhIGxvY2FsIGlkIChpbiBjYXNlIG9mIGEgcmVmcmVzaClcblx0Z2V0SXRlbUJ5U3RhdGUgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRzdGF0ZUtleTogSXRlbUlkIHwgc3RyaW5nLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlID0ge30sXG5cdFx0aXNSb290PzogYm9vbGVhblxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1SZXNvdXJjZT4ge1xuXHRcdGNvbnN0IHBhcnNlZFN0YXRlS2V5ID0gdGhpcy5rZXlTZXJ2aWNlLnBhcnNlU3RhdGVLZXkoc3RhdGVLZXkgYXMgc3RyaW5nKTtcblxuXHRcdGlmIChwYXJzZWRTdGF0ZUtleSA9PT0gbnVsbCkge1xuXHRcdFx0Y29uc3QgaXRlbUlkID0gc3RhdGVLZXkgYXMgSXRlbUlkO1xuXG5cdFx0XHRpZiAoIXRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQoaXRlbUlkKSB8fCB0aGlzLmdldExvY2FsQ2FjaGUoKS5pdGVtcy5jb250YWlucyhpdGVtVHlwZSwgaXRlbUlkKSlcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0SXRlbUJ5SWQoaXRlbVR5cGUsIGl0ZW1JZCwgb3B0aW9ucywgaXNSb290KTtcblx0XHR9IGVsc2UgaWYgKHBhcnNlZFN0YXRlS2V5LnR5cGUgPT09IFN0YXRlS2V5VHlwZS5EdXBsaWNhdGUpIHtcblx0XHRcdHJldHVybiB0aGlzLmdldER1cGxpY2F0ZUJ5SWQoXG5cdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRwYXJzZWRTdGF0ZUtleS5pdGVtSWQgYXMgSXRlbUlkLFxuXHRcdFx0XHRvcHRpb25zLFxuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0aXNSb290XG5cdFx0XHQpIGFzIFByb21pc2VJbnRlcmZhY2U8SXRlbVJlc291cmNlPjtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5nZXROZXdSZXNvdXJjZShpdGVtVHlwZSwgb3B0aW9ucywgZmFsc2UsIGlzUm9vdCkgYXMgUHJvbWlzZUludGVyZmFjZTxJdGVtUmVzb3VyY2U+O1xuXHR9XG5cblx0Z2V0Q29sbGVjdGlvbkRlZiAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZSk6IENvbGxlY3Rpb25EZWZpbml0aW9uIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0aXRlbVR5cGU6IGl0ZW1UeXBlLFxuXHRcdFx0b3B0aW9uczoge1xuXHRcdFx0XHRlbnRyeTogbmV3IENvbGxlY3Rpb25FbnRyeU9wdGlvbnMob3B0aW9ucyksIC8vIHdlIG5lZWQgdGhlIGRlZmF1bHQgY29sdW1uIHZhbHVlXG5cdFx0XHRcdHJlc291cmNlOiBuZXcgQ29sbGVjdGlvblJlc291cmNlT3B0aW9ucyhvcHRpb25zKVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHRnZXRMaW5rQ29sbGVjdGlvbnNEZWYgKFxuXHRcdGxpbmtUeXBlOiBJdGVtVHlwZSxcblx0XHRsaW5rSWRBcnJheTogSXRlbUlkW10gfCAoKCkgPT4gSXRlbUlkW10pLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRsaW5rRmllbGQ6IHN0cmluZyxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZVxuXHQpOiBMaW5rQ29sbGVjdGlvbkRlZmluaXRpb24ge1xuXHRcdHJldHVybiB7XG5cdFx0XHRpdGVtVHlwZTogaXRlbVR5cGUsXG5cdFx0XHRsaW5rVHlwZTogbGlua1R5cGUsXG5cdFx0XHRsaW5rSWRBcnJheTogbGlua0lkQXJyYXksXG5cdFx0XHRsaW5rRmllbGQ6IGxpbmtGaWVsZCxcblx0XHRcdG9wdGlvbnM6IHtcblx0XHRcdFx0ZW50cnk6IG5ldyBDb2xsZWN0aW9uRW50cnlPcHRpb25zKG9wdGlvbnMpLCAvLyB3ZSBuZWVkIHRoZSBkZWZhdWx0IGNvbHVtbiB2YWx1ZVxuXHRcdFx0XHRyZXNvdXJjZTogbmV3IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnMob3B0aW9ucylcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0Z2V0Q29sbGVjdGlvbiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlICYge2VkaXRDb2xsZWN0aW9uOiB0cnVlLCBlZGl0SXRlbXM6IHRydWV9XG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvbkVkaXRSZXNvdXJjZTxFZGl0UmVzb3VyY2U+PjtcblxuXHRnZXRDb2xsZWN0aW9uIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdEl0ZW1zOiB0cnVlfVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8RWRpdFJlc291cmNlPj47XG5cblx0Z2V0Q29sbGVjdGlvbiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlICYge2VkaXRDb2xsZWN0aW9uOiB0cnVlfVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25FZGl0UmVzb3VyY2U+O1xuXG5cdGdldENvbGxlY3Rpb24gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25WaWV3UmVzb3VyY2U+O1xuXG5cdGdldENvbGxlY3Rpb24gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZVxuXHQpIHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5mZXRjaChcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0bmV3IENvbGxlY3Rpb25FbnRyeU9wdGlvbnMob3B0aW9ucyksXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxuXHRcdFx0bG9jYWxDYWNoZS5jb2xsZWN0aW9ucyxcblx0XHRcdGxvY2FsQ2FjaGUuZGVmZXJyZWRDb2xsZWN0aW9uc1xuXHRcdCkudGhlbihcblx0XHRcdGVudHJ5ID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlKGVudHJ5LCBuZXcgQ29sbGVjdGlvblJlc291cmNlT3B0aW9ucyhvcHRpb25zKSk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldENvbGxlY3Rpb25Gcm9tRGVmIChkZWZpbml0aW9uOiBDb2xsZWN0aW9uRGVmaW5pdGlvbik6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvblJlc291cmNlPiB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZmV0Y2goXG5cdFx0XHRkZWZpbml0aW9uLml0ZW1UeXBlLFxuXHRcdFx0ZGVmaW5pdGlvbi5vcHRpb25zLmVudHJ5LFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtcyxcblx0XHRcdGxvY2FsQ2FjaGUuY29sbGVjdGlvbnMsXG5cdFx0XHRsb2NhbENhY2hlLmRlZmVycmVkQ29sbGVjdGlvbnNcblx0XHQpLnRoZW4oXG5cdFx0XHRlbnRyeSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZShlbnRyeSwgZGVmaW5pdGlvbi5vcHRpb25zLnJlc291cmNlKTtcblxuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQGRlcHJlY2F0ZWQsIHVzZSBgcGFyZW50YCBpbiBvcHRpb25zXG5cdCAqL1xuXHRnZXRMaW5rQ29sbGVjdGlvbiAoXG5cdFx0bGlua1R5cGU6IEl0ZW1UeXBlLFxuXHRcdGxpbmtJZDogSXRlbUlkLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZSA9IHt9XG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvblJlc291cmNlPiB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXG5cdFx0b3B0aW9ucy5wYXJlbnQgPSB7aXRlbVR5cGU6IGxpbmtUeXBlLCBpdGVtSWQ6IGxpbmtJZH07XG5cblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5mZXRjaChcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0bmV3IENvbGxlY3Rpb25FbnRyeU9wdGlvbnMob3B0aW9ucyksXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxuXHRcdFx0bG9jYWxDYWNoZS5jb2xsZWN0aW9ucyxcblx0XHRcdGxvY2FsQ2FjaGUuZGVmZXJyZWRDb2xsZWN0aW9uc1xuXHRcdCkudGhlbihcblx0XHRcdChlbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZShlbnRyeSwgb3B0aW9ucyk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldExpbmtDb2xsZWN0aW9ucyAoXG5cdFx0bGlua1R5cGU6IEl0ZW1UeXBlLFxuXHRcdGxpbmtJZEFycmF5OiBJdGVtSWRbXSxcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2Vcblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcD4ge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmJhdGNoRmV0Y2goXG5cdFx0XHRsaW5rVHlwZSxcblx0XHRcdGxpbmtJZEFycmF5LFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRuZXcgQ29sbGVjdGlvbkVudHJ5T3B0aW9ucyhvcHRpb25zKSxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMsXG5cdFx0XHRsb2NhbENhY2hlLmNvbGxlY3Rpb25zLFxuXHRcdFx0bG9jYWxDYWNoZS5kZWZlcnJlZENvbGxlY3Rpb25zXG5cdFx0KS50aGVuKFxuXHRcdFx0KGNvbGxlY3Rpb25FbnRyaWVzOiBDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2VzKGNvbGxlY3Rpb25FbnRyaWVzLCBvcHRpb25zKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0TGlua0NvbGxlY3Rpb25zRnJvbURlZiAoZGVmaW5pdGlvbjogYW55KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcD4ge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmJhdGNoRmV0Y2goXG5cdFx0XHRkZWZpbml0aW9uLmxpbmtUeXBlLFxuXHRcdFx0ZGVmaW5pdGlvbi5saW5rSWRBcnJheSxcblx0XHRcdGRlZmluaXRpb24uaXRlbVR5cGUsXG5cdFx0XHRkZWZpbml0aW9uLm9wdGlvbnMuZW50cnksXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxuXHRcdFx0bG9jYWxDYWNoZS5jb2xsZWN0aW9ucyxcblx0XHRcdGxvY2FsQ2FjaGUuZGVmZXJyZWRDb2xsZWN0aW9uc1xuXHRcdCkudGhlbihcblx0XHRcdChjb2xsZWN0aW9uRW50cmllczogQ29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXApID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlcyhcblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cmllcyxcblx0XHRcdFx0XHRkZWZpbml0aW9uLm9wdGlvbnMucmVzb3VyY2Vcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0QWxsTGlua0NvbGxlY3Rpb25zIChcblx0XHRsaW5rVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA+IHtcblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShsaW5rVHlwZSwge30sIHt9KVxuXHRcdFx0LnRoZW4oXG5cdFx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRMaW5rQ29sbGVjdGlvbnMoXG5cdFx0XHRcdFx0XHRsaW5rVHlwZSxcblx0XHRcdFx0XHRcdHJlc3BvbnNlLmxpbmtzW2xpbmtUeXBlXSxcblx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdFx0b3B0aW9uc1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0KTtcblx0fVxuXG5cdGNsb25lSXRlbSAoXG5cdFx0aXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UsXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdDogdHJ1ZX1cblx0KTogRWRpdFJlc291cmNlO1xuXG5cdGNsb25lSXRlbSAoXG5cdFx0aXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UsXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2Vcblx0KTogVmlld1Jlc291cmNlO1xuXG5cdGNsb25lSXRlbSAoXG5cdFx0aXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UsXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2Vcblx0KSB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkU2luZ2xlSXRlbShpdGVtUmVzb3VyY2UuZW50cnkuY2xvbmUoKSwgb3B0aW9ucywgZmFsc2UpO1xuXHR9XG5cblx0Y2xvbmVDb2xsZWN0aW9uIChcblx0XHRjb2xsZWN0aW9uUmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZSxcblx0XHRjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwXG5cdCkge1xuXHRcdGxldCBwYXJlbnQgPSBvcHRpb25zLnBhcmVudDtcblxuXHRcdGlmIChwYXJlbnQgPT09IHVuZGVmaW5lZClcblx0XHRcdHBhcmVudCA9IG51bGw7XG5cblx0XHRyZXR1cm4gdGhpcy5hZGRDb2xsZWN0aW9uKFxuXHRcdFx0Y29sbGVjdGlvblJlc291cmNlLmVudHJ5LmNsb25lKHBhcmVudCwgY29udmVyc2lvbk1hcCksXG5cdFx0XHRvcHRpb25zXG5cdFx0KTtcblx0fVxuXG5cdHNhdmVDdXJyZW50TG9jYWxDYWNoZSAoXG5cdFx0Y2xvc2VUYWI/OiBib29sZWFuLFxuXHRcdHBhcmFtZXRlcnM/OiBDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwLFxuXHRcdGJyZWFrdXBCeVBhcmVudD86IGJvb2xlYW4sXG5cdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrPzogKGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApID0+IHZvaWRcblx0KSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLnNhdmUoY2xvc2VUYWIsIHBhcmFtZXRlcnMsIGJyZWFrdXBCeVBhcmVudCwgb25BZnRlckNyZWF0ZUNhbGxiYWNrKTtcblx0fVxuXG5cdGdldEN1cnJlbnRDb2xsZWN0aW9ucyAoKTogQ29sbGVjdGlvbkNhY2hlIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbENhY2hlKCkuY29sbGVjdGlvbnM7XG5cdH1cblxuXHRnZXRDdXJyZW50SXRlbXMgKCk6IEl0ZW1DYWNoZSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLml0ZW1zO1xuXHR9XG5cblx0Z2V0TW9kdWxlQ2hhbmdlcyAobG9jYWxDYWNoZTogTG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpKSB7XG5cdFx0aWYgKGxvY2FsQ2FjaGUucm9vdEl0ZW0gPT09IHVuZGVmaW5lZClcblx0XHRcdHRocm93IG5ldyBFcnJvcignaXRlbUFkbWluaXN0cmF0b3I6IE5vIHJvb3QgaXRlbSBmb3IgbG9jYWwgY2FjaGUgJyArIGxvY2FsQ2FjaGUuaWQpO1xuXG5cdFx0cmV0dXJuIHRoaXMubW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRsb2NhbENhY2hlLnJvb3RJdGVtLFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtcyxcblx0XHRcdGxvY2FsQ2FjaGUuY29sbGVjdGlvbnNcblx0XHQpLnByb2Nlc3MoKTtcblx0fVxuXG5cdGFkZFNpbmdsZUl0ZW0gKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5LFxuXHRcdG9wdGlvbnM6IEl0ZW1SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdDogdHJ1ZX0sXG5cdFx0aXNSb290PzogYm9vbGVhbixcblx0XHRsb2NhbENhY2hlPzogTG9jYWxDYWNoZVxuXHQpOiBFZGl0UmVzb3VyY2U7XG5cblx0YWRkU2luZ2xlSXRlbSAoXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnksXG5cdFx0b3B0aW9uczogSXRlbVJlc291cmNlT3B0aW9uc0ludGVyZmFjZSxcblx0XHRpc1Jvb3Q/OiBib29sZWFuLFxuXHRcdGxvY2FsQ2FjaGU/OiBMb2NhbENhY2hlXG5cdCk6IFZpZXdSZXNvdXJjZTtcblxuXHRhZGRTaW5nbGVJdGVtIChcblx0XHRpdGVtRW50cnk6IEl0ZW1FbnRyeSxcblx0XHRvcHRpb25zOiBJdGVtUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlID0ge30sXG5cdFx0aXNSb290PzogYm9vbGVhbixcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKClcblx0KSB7XG5cdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlSXRlbVJlc291cmNlKGxvY2FsQ2FjaGUuaXRlbXMuYWRkKGl0ZW1FbnRyeSksIG9wdGlvbnMsIGlzUm9vdCk7XG5cdH1cblxuXHRhZGRTaW5nbGVJdGVtcyAoXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRcdG9wdGlvbnM6IEl0ZW1SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdDogdHJ1ZX1cblx0KTogRWRpdFJlc291cmNlW107XG5cblx0YWRkU2luZ2xlSXRlbXMgKFxuXHRcdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcblx0XHRvcHRpb25zOiBJdGVtUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlXG5cdCk6IFZpZXdSZXNvdXJjZVtdO1xuXG5cdGFkZFNpbmdsZUl0ZW1zIChcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXG5cdFx0b3B0aW9uczogSXRlbVJlc291cmNlT3B0aW9uc0ludGVyZmFjZVxuXHQpIHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXG5cdFx0XHRyZXN1bHQucHVzaCh0aGlzLmFkZFNpbmdsZUl0ZW0oaXRlbUVudHJ5LCBvcHRpb25zLCBmYWxzZSwgbG9jYWxDYWNoZSkpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGFkZENvbGxlY3Rpb24gKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdENvbGxlY3Rpb246IHRydWUsIGVkaXRJdGVtczogdHJ1ZX1cblx0KTogQ29sbGVjdGlvbkVkaXRSZXNvdXJjZTxFZGl0UmVzb3VyY2U+O1xuXG5cdGFkZENvbGxlY3Rpb24gKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdEl0ZW1zOiB0cnVlfVxuXHQpOiBDb2xsZWN0aW9uVmlld1Jlc291cmNlPEVkaXRSZXNvdXJjZT47XG5cblx0YWRkQ29sbGVjdGlvbiAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0Q29sbGVjdGlvbjogdHJ1ZX1cblx0KTogQ29sbGVjdGlvbkVkaXRSZXNvdXJjZTxWaWV3UmVzb3VyY2U+O1xuXG5cdGFkZENvbGxlY3Rpb24gKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2Vcblx0KTogQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxWaWV3UmVzb3VyY2U+O1xuXG5cdGFkZENvbGxlY3Rpb24gKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2Vcblx0KSB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXG5cdFx0bG9jYWxDYWNoZS5jb2xsZWN0aW9ucy5hZGQoY29sbGVjdGlvbkVudHJ5KTtcblxuXHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZShjb2xsZWN0aW9uRW50cnksIG9wdGlvbnMpO1xuXHR9XG5cblx0cHJpdmF0ZSBjcmVhdGVJdGVtUmVzb3VyY2VzIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRcdG9wdGlvbnM6IEl0ZW1SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdDogdHJ1ZX0sXG5cdFx0bG9jYWxDYWNoZTogTG9jYWxDYWNoZVxuXHQpOiBFZGl0UmVzb3VyY2VbXTtcblxuXHRwcml2YXRlIGNyZWF0ZUl0ZW1SZXNvdXJjZXMgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXG5cdFx0b3B0aW9uczogSXRlbVJlc291cmNlT3B0aW9uc0ludGVyZmFjZSxcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlXG5cdCk6IFZpZXdSZXNvdXJjZVtdO1xuXG5cdHByaXZhdGUgY3JlYXRlSXRlbVJlc291cmNlcyAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcblx0XHRvcHRpb25zOiBJdGVtUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlLFxuXHRcdGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGVcblx0KSB7XG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdHJlc3VsdC5wdXNoKGxvY2FsQ2FjaGUuY3JlYXRlSXRlbVJlc291cmNlKGl0ZW1FbnRyeSwgb3B0aW9ucykpO1xuXG5cdFx0XHRpZiAoaXRlbVR5cGUgPT09ICdQcm9qZWN0bm90aXRpZScpIHtcblx0XHRcdFx0Y3JlYXRlUGF0aChcblx0XHRcdFx0XHRsb2NhbENhY2hlLnRhYlJlcXVlc3RQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFtpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWRdLFxuXHRcdFx0XHRcdFt7fSwge25vX25vdGlmaWNhdGlvbjogdHJ1ZX1dXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHByb2Nlc3NMaW5rZWRJdGVtcyAoXG5cdFx0bGlua2VkRW50cmllczogTGlua2VkSXRlbUVudHJ5TWFwW10sXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UsXG5cdFx0YWRkVG9Db2xsZWN0aW9uczogYm9vbGVhbiA9IHRydWVcblx0KTogSXRlbVJlc291cmNlc0l0ZW1UeXBlTWFwIHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtUmVzb3VyY2VzSXRlbVR5cGVNYXAgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgZW50cnkgb2YgbGlua2VkRW50cmllcykge1xuXHRcdFx0Y29uc3QgaXRlbVR5cGUgPSBlbnRyeS5pdGVtVHlwZTtcblxuXHRcdFx0cmVzdWx0W2l0ZW1UeXBlXSA9IHRoaXMuY3JlYXRlSXRlbVJlc291cmNlcyhlbnRyeS5pdGVtVHlwZSwgZW50cnkuaXRlbUVudHJpZXMsIG9wdGlvbnMsIGxvY2FsQ2FjaGUpO1xuXHRcdH1cblxuXHRcdGlmICghYWRkVG9Db2xsZWN0aW9ucylcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cblx0XHQvLyB0aGUgaXRlbUVudHJpZXMgYXJlIGluIHRvcC1kb3duIG9yZGVyLCBzbyBjYWxsIGZvciBlYWNoIGl0ZW0gdHlwZSBzZXBhcmF0ZWx5XG5cdFx0Zm9yIChjb25zdCBlbnRyeSBvZiBsaW5rZWRFbnRyaWVzKVxuXHRcdFx0dGhpcy5nZXRDb2xsZWN0aW9uTWF0Y2hlcihlbnRyeS5pdGVtRW50cmllcywgZmFsc2UpLmFkZFRvQ29sbGVjdGlvbnMoKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRleHBhbmRQcm9jZXNzTGlua2VkSXRlbXMgKFxuXHRcdGxpbmtlZEVudHJpZXM6IExpbmtlZEl0ZW1FbnRyeU1hcFtdLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8SXRlbVJlc291cmNlc0l0ZW1UeXBlTWFwPiB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXHRcdGxldCBwcm9taXNlQ2hhaW4gPSB0aGlzLnByb21pc2VJbnRlcmZhY2Uud2hlbih7fSk7XG5cblx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIGxpbmtlZEVudHJpZXMpIHtcblx0XHRcdC8vIHRoZSBpdGVtRW50cmllcyBhcmUgaW4gdG9wLWRvd24gb3JkZXIsIHNvIGNhbGwgZm9yIGVhY2ggaXRlbSB0eXBlIHNlcGFyYXRlbHlcblx0XHRcdHByb21pc2VDaGFpbiA9IHByb21pc2VDaGFpbi50aGVuKFxuXHRcdFx0XHR0aGlzLmNvbnN0cnVjdE9uSXRlbXNFeHBhbmRlZChlbnRyeS5pdGVtVHlwZSwgZW50cnkuaXRlbUVudHJpZXMsIG9wdGlvbnMsIGxvY2FsQ2FjaGUpLFxuXHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHByb21pc2VDaGFpbjtcblx0fVxuXG5cdHByaXZhdGUgY29uc3RydWN0T25JdGVtc0V4cGFuZGVkIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRcdGl0ZW1PcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSxcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlXG5cdCk6IChkZXN0aW5hdGlvbjogSXRlbVJlc291cmNlc0l0ZW1UeXBlTWFwKSA9PiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1SZXNvdXJjZXNJdGVtVHlwZU1hcD4ge1xuXHRcdHJldHVybiBkZXN0aW5hdGlvbiA9PiB7XG5cdFx0XHRyZXR1cm4gdGhpcy5leHBhbmRBZGRUb0NvbGxlY3Rpb25zKGl0ZW1UeXBlLCBpdGVtRW50cmllcywgbnVsbCwgbG9jYWxDYWNoZSkudGhlbihcblx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdGRlc3RpbmF0aW9uW2l0ZW1UeXBlXSA9IHRoaXMuY3JlYXRlSXRlbVJlc291cmNlcyhpdGVtVHlwZSwgaXRlbUVudHJpZXMsIGl0ZW1PcHRpb25zLCBsb2NhbENhY2hlKTtcblxuXHRcdFx0XHRcdHJldHVybiBkZXN0aW5hdGlvbjtcblx0XHRcdFx0fSxcblx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHQpO1xuXHRcdH07XG5cdH1cblxuXHRwcml2YXRlIGV4cGFuZEFkZFRvQ29sbGVjdGlvbnM8VCBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZSA9IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U+IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRcdHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZTogVCB8IG51bGwgPSBudWxsLFxuXHRcdGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPFRbJ2l0ZW1zJ10gfCBudWxsPiB7XG5cdFx0Y29uc3QgY29sbGVjdGlvbk1hdGNoZXIgPSB0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRbbG9jYWxDYWNoZS5jb2xsZWN0aW9uc10sXG5cdFx0XHRmYWxzZSxcblx0XHRcdGZhbHNlXG5cdFx0KTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxuXHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIuZXhwYW5kKGl0ZW1FbnRyeSk7XG5cblx0XHRjb25zdCBjb2x1bW5TdXBlcnNldCA9IHRoaXMuZ2V0Q29sdW1uU3VwZXJzZXQoY29sbGVjdGlvbk1hdGNoZXIuZ2V0Q29sbGVjdGlvbnNXaXRoRml0dGluZ0l0ZW1zKCkpO1xuXG5cdFx0aWYgKGNvbHVtblN1cGVyc2V0ID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZUludGVyZmFjZS53aGVuKENvbGxlY3Rpb25SZXNvdXJjZSA9PT0gbnVsbCA/IG51bGwgOiBbXSk7XG5cblx0XHRyZXR1cm4gdGhpcy5pdGVtSGFuZGxlci5leHBhbmRMb2NhbEVudHJpZXMoXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdGl0ZW1FbnRyaWVzLFxuXHRcdFx0Y29sdW1uU3VwZXJzZXQucmVxdWVzdCxcblx0XHRcdGNvbHVtblN1cGVyc2V0LnJlc3BvbnNlLFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtc1xuXHRcdCkudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25NYXRjaGVyLmFkZFRvQ29sbGVjdGlvbnMocmVzdWx0Q29sbGVjdGlvblJlc291cmNlKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Ly8gd2UgY291bGQgbW92ZSB0aGlzIHRvIHRoZSBDb2xsZWN0aW9uTWF0Y2hlciBpZiB3ZSBlbmZvcmNlIGEgc2luZ2xlIGl0ZW0gdHlwZVxuXHRwcml2YXRlIGdldENvbHVtblN1cGVyc2V0IChjb2xsZWN0aW9uRW50cmllczogQ29sbGVjdGlvbkVudHJ5W10pOiBDb2x1bW5TZXQgfCBudWxsIHtcblx0XHRjb25zdCBjb2x1bW5TZXRJZE1hcDoge1tjb2x1bW5TZXRJZDogbnVtYmVyXTogYm9vbGVhbn0gPSB7fTtcblxuXHRcdGlmIChjb2xsZWN0aW9uRW50cmllcy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdGxldCByZXN1bHQgPSBjb2xsZWN0aW9uRW50cmllc1swXS5jb2x1bW5zO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDE7IGkgPCBjb2xsZWN0aW9uRW50cmllcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gY29sbGVjdGlvbkVudHJpZXNbaV07XG5cdFx0XHRjb25zdCBjb2x1bW5TZXQgPSBjb2xsZWN0aW9uRW50cnkuY29sdW1ucztcblxuXHRcdFx0aWYgKGNvbHVtblNldElkTWFwW2NvbHVtblNldC5pZF0gPT09IHRydWUpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRjb2x1bW5TZXRJZE1hcFtjb2x1bW5TZXQuaWRdID0gdHJ1ZTtcblxuXHRcdFx0cmVzdWx0ID0gcmVzdWx0Lm1lcmdlKGNvbHVtblNldCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldExvY2FsQ2FjaGUgKCk6IExvY2FsQ2FjaGUge1xuXHRcdHJldHVybiB0aGlzLmxvY2FsQ2FjaGVNYW5hZ2VyLmdldEN1cnJlbnRMb2NhbENhY2hlKHRoaXMuYXV0aEludGVyZmFjZS5nZXRVbmlxdWVVc2VySWQoKSk7XG5cdH1cblxuXHRyZXNldExvY2FsQ2FjaGUgKCkge1xuXHRcdGNvbnN0IG9sZExvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5sb2NhbENhY2hlRmFjdG9yeS5jb25zdHJ1Y3QoKTtcblxuXHRcdG9sZExvY2FsQ2FjaGUuY2xlYXJSZXNvdXJjZXMoKTtcblxuXHRcdHRoaXMubG9jYWxDYWNoZU1hbmFnZXIuc2V0Q3VycmVudExvY2FsQ2FjaGUodGhpcy5hdXRoSW50ZXJmYWNlLmdldFVuaXF1ZVVzZXJJZCgpLCBsb2NhbENhY2hlKTtcblx0fVxuXG5cdGFkZFRvQ29sbGVjdGlvbnMgKFxuXHRcdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcblx0XHRyZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZTxFZGl0UmVzb3VyY2U+XG5cdCk6IEVkaXRSZXNvdXJjZVtdO1xuXHRhZGRUb0NvbGxlY3Rpb25zIChcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXG5cdFx0cmVzdWx0Q29sbGVjdGlvblJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2U8Vmlld1Jlc291cmNlPlxuXHQpOiBWaWV3UmVzb3VyY2VbXTtcblx0YWRkVG9Db2xsZWN0aW9ucyAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCByZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2U/OiBudWxsKTogbnVsbDtcblx0YWRkVG9Db2xsZWN0aW9ucyAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCByZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2U/OiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0Q29sbGVjdGlvbk1hdGNoZXIoaXRlbUVudHJpZXMpLmFkZFRvQ29sbGVjdGlvbnMocmVzdWx0Q29sbGVjdGlvblJlc291cmNlKTtcblx0fVxuXG5cdHJlbW92ZUZyb21Db2xsZWN0aW9uczxUIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlID0gQ29sbGVjdGlvblZpZXdSZXNvdXJjZT4gKFxuXHRcdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcblx0XHRyZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2U6IFRcblx0KTogVFsnaXRlbXMnXTtcblxuXHRyZW1vdmVGcm9tQ29sbGVjdGlvbnMgKFxuXHRcdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcblx0XHRyZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2U/OiBudWxsXG5cdCk6IG51bGw7XG5cblx0cmVtb3ZlRnJvbUNvbGxlY3Rpb25zPFQgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2UgPSBDb2xsZWN0aW9uVmlld1Jlc291cmNlPiAoXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRcdHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZT86IFQgfCBudWxsXG5cdCkge1xuXHRcdHJldHVybiB0aGlzLmdldENvbGxlY3Rpb25NYXRjaGVyKGl0ZW1FbnRyaWVzLCBmYWxzZSkucmVtb3ZlRnJvbUNvbGxlY3Rpb25zKHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZSk7XG5cdH1cblxuXHRzYXZlTG9jYWwgKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlKSB7XG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gaXRlbVJlc291cmNlLmVudHJ5O1xuXG5cdFx0aXRlbUVudHJ5LnNldERpc3BsYXlOYW1lKCk7XG5cdFx0dGhpcy5hZGRUb0NvbGxlY3Rpb25zKFtpdGVtRW50cnldKTtcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VJbnRlcmZhY2Uud2hlbihpdGVtUmVzb3VyY2UpO1xuXHR9XG5cblx0dXBkYXRlSXRlbUlkTWFwIChjb2xsZWN0aW9uTWFwOiBhbnksIGNvbnZlcnNpb25NYXA6IENvbnZlcnNpb25NYXApOiB2b2lkIHtcblx0XHRpZiAoY29udmVyc2lvbk1hcCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0Zm9yIChjb25zdCBvbGRJZCBpbiBjb252ZXJzaW9uTWFwKSB7XG5cdFx0XHRjb25zdCBuZXdJZCA9IGNvbnZlcnNpb25NYXBbb2xkSWRdO1xuXG5cdFx0XHRpZiAoY29sbGVjdGlvbk1hcFtvbGRJZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGNvbGxlY3Rpb25NYXBbbmV3SWRdID0gY29sbGVjdGlvbk1hcFtvbGRJZF07XG5cdFx0XHRkZWxldGUgY29sbGVjdGlvbk1hcFtvbGRJZF07XG5cdFx0fVxuXHR9XG5cblx0Y3JlYXRlQ29sbGVjdGlvblJlc291cmNlIChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRyZXNvdXJjZU9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdEl0ZW1zOiB0cnVlLCBlZGl0Q29sbGVjdGlvbjogdHJ1ZX1cblx0KTogQ29sbGVjdGlvbkVkaXRSZXNvdXJjZTxFZGl0UmVzb3VyY2U+O1xuXG5cdGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZSAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksXG5cdFx0cmVzb3VyY2VPcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlICYge2VkaXRJdGVtczogdHJ1ZX1cblx0KTogQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxFZGl0UmVzb3VyY2U+O1xuXG5cdGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZSAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksXG5cdFx0cmVzb3VyY2VPcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlICYge2VkaXRDb2xsZWN0aW9uOiB0cnVlfVxuXHQpOiBDb2xsZWN0aW9uRWRpdFJlc291cmNlPFZpZXdSZXNvdXJjZT47XG5cblx0Y3JlYXRlQ29sbGVjdGlvblJlc291cmNlIChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRyZXNvdXJjZU9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2Vcblx0KTogQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxWaWV3UmVzb3VyY2U+O1xuXG5cdGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZSAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksXG5cdFx0cmVzb3VyY2VPcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlXG5cdCk6IENvbGxlY3Rpb25SZXNvdXJjZTxJdGVtUmVzb3VyY2U+IHtcblx0XHRyZXR1cm4gdGhpcy5hZGRDb2xsZWN0aW9uKGNvbGxlY3Rpb25FbnRyeSwgcmVzb3VyY2VPcHRpb25zKTtcblx0fVxuXG5cdGNyZWF0ZUl0ZW1SZXNvdXJjZSAoXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnksXG5cdFx0b3B0aW9uczogSXRlbVJlc291cmNlT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0OiB0cnVlfSxcblx0XHRpc1Jvb3Q6IGJvb2xlYW5cblx0KTogRWRpdFJlc291cmNlO1xuXHRjcmVhdGVJdGVtUmVzb3VyY2UgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBvcHRpb25zOiBJdGVtUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlLCBpc1Jvb3Q6IGJvb2xlYW4pOiBWaWV3UmVzb3VyY2U7XG5cdGNyZWF0ZUl0ZW1SZXNvdXJjZSAoaXRlbUVudHJ5OiBJdGVtRW50cnksIG9wdGlvbnM6IEl0ZW1SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UsIGlzUm9vdDogYm9vbGVhbik6IEl0ZW1SZXNvdXJjZSB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkU2luZ2xlSXRlbShpdGVtRW50cnksIG9wdGlvbnMsIGlzUm9vdCk7XG5cdH1cblxuXHRvbkJlZm9yZVNhdmUgKGtleTogc3RyaW5nLCBjYWxsYmFjazogKGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUpID0+IGFueSwgY29uZGl0aW9uPzogTG9jYWxDYWNoZUNhbGxiYWNrQ29uZGl0aW9uKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLm9uQmVmb3JlU2F2ZShrZXksIGNhbGxiYWNrLCBjb25kaXRpb24pO1xuXHR9XG5cblx0b25TYXZlU3VjY2VzcyAoa2V5OiBzdHJpbmcsIGNhbGxiYWNrOiBPblNhdmVDYWxsYmFjaywgY29uZGl0aW9uPzogTG9jYWxDYWNoZUNhbGxiYWNrQ29uZGl0aW9uKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLm9uU2F2ZVN1Y2Nlc3Moa2V5LCBjYWxsYmFjaywgY29uZGl0aW9uKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvblF1ZXJ5LCBJdGVtRW50cnlNYXAsIEl0ZW1FbnRyeVBhcmVudElkTWFwLCBJdGVtSWQsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgSXRlbUNhY2hlIHtcblx0cHJpdmF0ZSBlbnRyaWVzOiBJdGVtRW50cnlNYXAgPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5XG5cdCkge1xuXHR9XG5cblx0c29tZSAoY2FsbGJhY2s6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gYm9vbGVhbikge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGVudHJpZXMpIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGVudHJpZXNbaXRlbVR5cGVdKSB7XG5cdFx0XHRcdGlmIChjYWxsYmFjayhlbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdKSlcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRnZXRCeUl0ZW1UeXBlIChpdGVtVHlwZTogSXRlbVR5cGUpIHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVtdID0gW107XG5cblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGVudHJpZXMpXG5cdFx0XHRyZXN1bHQucHVzaChlbnRyaWVzW2l0ZW1JZF0pO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldEJ5UXVlcnkgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcXVlcnk6IENvbGxlY3Rpb25RdWVyeSkge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5W10gPSBbXTtcblxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllcykge1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gZW50cmllc1tpdGVtSWRdO1xuXG5cdFx0XHRpZiAoaXRlbUVudHJ5LmlzRGVmZXJyZWQoKSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGlmICh0aGlzLm1hdGNoUXVlcnkoaXRlbUVudHJ5LCBxdWVyeSkpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldExvY2FsQnlRdWVyeSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBxdWVyeTogQ29sbGVjdGlvblF1ZXJ5KSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xuXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBlbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSBlbnRyaWVzW2l0ZW1JZF07XG5cblx0XHRcdGlmICghaXRlbUVudHJ5LmlzTG9jYWwoKSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGlmICh0aGlzLm1hdGNoUXVlcnkoaXRlbUVudHJ5LCBxdWVyeSkpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldEJ5UGFyZW50IChwYXJlbnRUeXBlOiBJdGVtVHlwZSwgcGFyZW50SWQ6IEl0ZW1JZCwgaXRlbVR5cGU6IEl0ZW1UeXBlKSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xuXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBlbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSBlbnRyaWVzW2l0ZW1JZF07XG5cdFx0XHRjb25zdCBwYXJlbnQgPSBpdGVtRW50cnkucGFyZW50O1xuXG5cdFx0XHRpZiAocGFyZW50ID09PSBudWxsKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcblx0XHRcdGlmIChwYXJlbnQuaXRlbVR5cGUgPT09IHBhcmVudFR5cGUgJiYgcGFyZW50Lml0ZW1JZCA9PSBwYXJlbnRJZClcblx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0YmF0Y2hHZXRMb2NhbEJ5UGFyZW50IChcblx0XHRwYXJlbnRUeXBlOiBJdGVtVHlwZSxcblx0XHRwYXJlbnRJZHM6IEl0ZW1JZFtdLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRhZGRpdGlvbmFsUXVlcnk6IGFueVxuXHQpOiBJdGVtRW50cnlQYXJlbnRJZE1hcCB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlQYXJlbnRJZE1hcCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBvZiBwYXJlbnRJZHMpXG5cdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gW107XG5cblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGVudHJpZXNbaXRlbUlkXTtcblx0XHRcdGNvbnN0IHBhcmVudCA9IGl0ZW1FbnRyeS5wYXJlbnQ7XG5cblx0XHRcdGlmIChwYXJlbnQgPT09IG51bGwpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAocGFyZW50Lml0ZW1UeXBlICE9PSBwYXJlbnRUeXBlIHx8IHJlc3VsdFtwYXJlbnQuaXRlbUlkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0aWYgKCFpdGVtRW50cnkuaXNMb2NhbCgpKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0aWYgKGFkZGl0aW9uYWxRdWVyeSA9PT0gbnVsbCB8fCB0aGlzLm1hdGNoUXVlcnkoaXRlbUVudHJ5LCBhZGRpdGlvbmFsUXVlcnkpKVxuXHRcdFx0XHRyZXN1bHRbcGFyZW50Lml0ZW1JZF0ucHVzaChpdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmb3JFYWNoIChjYWxsYmFjazogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiB2b2lkKSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gZW50cmllcykge1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllc1tpdGVtVHlwZV0pXG5cdFx0XHRcdGNhbGxiYWNrKGVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF0pO1xuXHRcdH1cblx0fVxuXG5cdHRvQXJyYXkgKCkge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBlbnRyaWVzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBlbnRyaWVzW2l0ZW1UeXBlXSlcblx0XHRcdFx0cmVzdWx0LnB1c2goZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGFkZCAoaXRlbUVudHJ5OiBJdGVtRW50cnkpOiBJdGVtRW50cnkge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cblx0XHRpZiAoZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdGVudHJpZXNbaXRlbVR5cGVdID0ge307XG5cblx0XHRyZXR1cm4gZW50cmllc1tpdGVtVHlwZV1baXRlbUVudHJ5Lml0ZW1JZF0gPSBpdGVtRW50cnk7XG5cdH1cblxuXHRnZXQgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBzdHJpbmcgfCBJdGVtSWQpOiB1bmRlZmluZWQgfCBJdGVtRW50cnkge1xuXHRcdHJldHVybiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF07XG5cdH1cblxuXHQvLyBzaG91bGQgYmUgZmFzdFxuXHRjb250YWlucyAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IHN0cmluZyB8IEl0ZW1JZCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdICE9PSB1bmRlZmluZWQgJiYgdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdICE9PSB1bmRlZmluZWQ7XG5cdH1cblxuXHR1cGRhdGVJdGVtSWQgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBvbGRJdGVtSWQ6IHN0cmluZyB8IEl0ZW1JZCk6IEl0ZW1FbnRyeSB7XG5cdFx0Y29uc3QgZW50cnlNYXAgPSB0aGlzLmVudHJpZXNbaXRlbUVudHJ5Lml0ZW1UeXBlXTtcblxuXHRcdGRlbGV0ZSBlbnRyeU1hcFtvbGRJdGVtSWRdO1xuXHRcdHJldHVybiBlbnRyeU1hcFtpdGVtRW50cnkuaXRlbUlkXSA9IGl0ZW1FbnRyeTtcblx0fVxuXG5cdGNsZWFyIChpdGVtRW50cnk6IEl0ZW1FbnRyeSk6IGJvb2xlYW4ge1xuXHRcdGlmIChpdGVtRW50cnkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5lbnRyaWVzID0ge307XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5jbGVhckJ5SXRlbUlkKGl0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZCk7XG5cdH1cblxuXHRjbGVhckJ5SXRlbUlkIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XG5cblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0cmV0dXJuIGRlbGV0ZSBlbnRyaWVzW2l0ZW1JZF07XG5cdH1cblxuXHRtYXRjaFF1ZXJ5IChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgcXVlcnk6IENvbGxlY3Rpb25RdWVyeSk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0aXRlbUVudHJ5Lml0ZW1UeXBlLFxuXHRcdFx0aXRlbUVudHJ5LmdldEZpZWxkcygpLFxuXHRcdFx0aXRlbUVudHJ5LnBhcmVudFxuXHRcdCkubWF0Y2hRdWVyeShxdWVyeS5vYmplY3QpID09PSB0cnVlOyAvLyBUT0RPOiBtYXliZT9cblx0fVxufVxuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XG5cbmltcG9ydCB7IEtleVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEFMTF9QRVJNSVNTSU9OUyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBdXRoSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJdGVtRW50cnksIEl0ZW1FbnRyeU9wdGlvbnMgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtcblx0QXBpUmVzcG9uc2UsXG5cdEZpZWxkTWFwLFxuXHRJdGVtRXJyb3IsXG5cdEl0ZW1JZCxcblx0SXRlbUlkQ29udmVyc2lvbk1hcCxcblx0SXRlbU9wdGlvbnNJbnRlcmZhY2UsXG5cdEl0ZW1UeXBlXG59IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIEl0ZW1FbnRyeVNlcnZpY2Uge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBhdXRoSW50ZXJmYWNlOiBBdXRoSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZVxuXHQpIHtcblxuXHR9XG5cblx0cHJvY2Vzc09wdGlvbnMgKG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlKTogSXRlbUVudHJ5T3B0aW9ucyB7XG5cdFx0cmV0dXJuIG5ldyBJdGVtRW50cnlPcHRpb25zKG9wdGlvbnMpO1xuXHR9XG5cblx0Ly8gdG9kbzogdHJhbnNsYXRlXG5cdGNyZWF0ZVVuZm91bmRSZW1vdGVJdGVtRXJyb3IgKCk6IEl0ZW1FcnJvciB7XG5cdFx0cmV0dXJuIHttZXNzYWdlOiAnVGhlIHJlcXVlc3RlZCBpdGVtIGNvdWxkIG5vdCBiZSBmb3VuZCAvIHlvdXIgY3VycmVudCBwZXJtaXNzaW9ucyBhcmUgbm90IHN1ZmZpY2llbnQnfTtcblx0fVxuXG5cdGNyZWF0ZVVuZm91bmRMb2NhbEl0ZW1FcnJvciAoaXRlbVR5cGU6IEl0ZW1UeXBlKSB7XG5cdFx0cmV0dXJuIHttZXNzYWdlOiAnQSBsb2NhbCBpdGVtIG9mIHR5cGUgJyArIGl0ZW1UeXBlICsgJyBjb3VsZCBub3QgYmUgZm91bmQnfTtcblx0fVxuXG5cdGNyZWF0ZUxvY2FsQ29udmVyc2lvbk1hcCAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1JZDogSXRlbUlkLFxuXHRcdGRvRXh0ZW5kOiBib29sZWFuID0gZmFsc2UsXG5cdFx0YXBpUmVzcG9uc2U6IEFwaVJlc3BvbnNlXG5cdCk6IEl0ZW1JZENvbnZlcnNpb25NYXAge1xuXHRcdGNvbnN0IGFwaUl0ZW1JZCA9IGFwaVJlc3BvbnNlLmxpbmtzW2l0ZW1UeXBlXVswXTtcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1JZENvbnZlcnNpb25NYXAgPSB7fTtcblxuXHRcdHJlc3VsdFtpdGVtVHlwZV0gPSB7fTtcblx0XHRyZXN1bHRbaXRlbVR5cGVdW2FwaUl0ZW1JZF0gPSBpdGVtSWQ7XG5cblx0XHRpZiAoZG9FeHRlbmQpXG5cdFx0XHR0aGlzLmV4cGFuZExvY2FsQ29udmVyc2lvbk1hcChpdGVtVHlwZSwgYXBpSXRlbUlkLCBhcGlSZXNwb25zZSwgcmVzdWx0KTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRleHBhbmRMb2NhbENvbnZlcnNpb25NYXAgKFxuXHRcdHBhcmVudFR5cGU6IEl0ZW1UeXBlLFxuXHRcdHBhcmVudElkOiBJdGVtSWQsXG5cdFx0YXBpUmVzcG9uc2U6IEFwaVJlc3BvbnNlLFxuXHRcdGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXBcblx0KTogdm9pZCB7XG5cdFx0Y29uc3QgbGlua3MgPSBhcGlSZXNwb25zZS5pdGVtc1twYXJlbnRUeXBlXVtwYXJlbnRJZF0ubGlua3M7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGxpbmtzKSB7XG5cdFx0XHRjb25zdCBpZEFycmF5ID0gbGlua3NbaXRlbVR5cGVdO1xuXG5cdFx0XHRpZiAoY29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0Y29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPSB7fTtcblxuXHRcdFx0Zm9yIChjb25zdCBhcGlJdGVtSWQgb2YgaWRBcnJheSkge1xuXHRcdFx0XHRjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXVthcGlJdGVtSWRdID0gdGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKTtcblxuXHRcdFx0XHR0aGlzLmV4cGFuZExvY2FsQ29udmVyc2lvbk1hcChpdGVtVHlwZSwgYXBpSXRlbUlkLCBhcGlSZXNwb25zZSwgY29udmVyc2lvbk1hcCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0ZXhwYW5kQ29udmVyc2lvbk1hcCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAsIG5ld0l0ZW1JZD86IEl0ZW1JZCk6IEl0ZW1JZCB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcblxuXHRcdGxldCBjb252ZXJzaW9uTWFwRW50cnk7XG5cblx0XHRpZiAoY29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID0ge307XG5cblx0XHRjb252ZXJzaW9uTWFwRW50cnkgPSBjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXTtcblxuXHRcdGlmIChjb252ZXJzaW9uTWFwRW50cnlbaXRlbUlkXSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIGNvbnZlcnNpb25NYXBFbnRyeVtpdGVtSWRdO1xuXG5cdFx0aWYgKG5ld0l0ZW1JZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0bmV3SXRlbUlkID0gdGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKTtcblxuXHRcdHJldHVybiBjb252ZXJzaW9uTWFwRW50cnlbaXRlbUlkXSA9IG5ld0l0ZW1JZDtcblx0fVxuXG5cdGJhdGNoRXhwYW5kQ29udmVyc2lvbk1hcCAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCBjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwKTogSXRlbUlkQ29udmVyc2lvbk1hcCB7XG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXG5cdFx0XHR0aGlzLmV4cGFuZENvbnZlcnNpb25NYXAoaXRlbUVudHJ5LCBjb252ZXJzaW9uTWFwKTtcblxuXHRcdHJldHVybiBjb252ZXJzaW9uTWFwO1xuXHR9XG5cblx0Z2V0Q29udmVyc2lvblZhbHVlIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkLCBtYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApOiBJdGVtSWQgfCB1bmRlZmluZWQge1xuXHRcdGlmIChtYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0cmV0dXJuIG1hcFtpdGVtVHlwZV1baXRlbUlkXTtcblx0fVxuXG5cdGJhdGNoQ2xvbmUgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCA9IHt9KTogSXRlbUVudHJ5W10ge1xuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5W10gPSBbXTtcblxuXHRcdC8vIHRoZSB0aGUgaXRlbXMgbWlnaHQgcmVmZXJlbmNlIGVhY2ggb3RoZXIsIHNvIHVwZGF0ZSB0aGUgY29udmVyc2lvbiBtYXAgZmlyc3Rcblx0XHR0aGlzLmJhdGNoRXhwYW5kQ29udmVyc2lvbk1hcChpdGVtRW50cmllcywgY29udmVyc2lvbk1hcCk7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1FbnRyeS5jbG9uZShjb252ZXJzaW9uTWFwKSk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0RnVsbE5hbWUgKGZpcnN0TmFtZTogc3RyaW5nLCBpbmZpeDogc3RyaW5nLCBsYXN0TmFtZTogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gZmlyc3ROYW1lLnRyaW0oKVxuXHRcdFx0LmNvbmNhdCgnICcsIGluZml4KS50cmltKCkgLy8gaW5maXggY2FuIGJlIGFuIGVtcHR5IHN0cmluZ1xuXHRcdFx0LmNvbmNhdCgnICcsIGxhc3ROYW1lKTtcblx0fVxuXG5cdGdldFRpdGxlRmllbGQgKGl0ZW1UeXBlOiBJdGVtVHlwZSk6IHN0cmluZyB7XG5cdFx0c3dpdGNoIChpdGVtVHlwZSkge1xuXHRcdFx0Y2FzZSAnRXhlbXBsYWFyJzpcblx0XHRcdFx0cmV0dXJuICdzZXJpZW51bW1lcic7XG5cdFx0XHRjYXNlICdGYWN0dXVyJzpcblx0XHRcdFx0cmV0dXJuICdudW1tZXInO1xuXHRcdFx0Y2FzZSAnRmlsZXMnOlxuXHRcdFx0XHRyZXR1cm4gJ2ZyaWVuZGx5bmFtZSc7XG5cdFx0XHRjYXNlICdGdW5jdGllJzpcblx0XHRcdGNhc2UgJ1N0YW5kYWFyZGZ1bmN0aWUnOlxuXHRcdFx0XHRyZXR1cm4gJ25hYW1pbnRlcm4nO1xuXHRcdFx0Y2FzZSAnVm9vcnJhYWRtdXRhdGllJzpcblx0XHRcdFx0cmV0dXJuICdvbXNjaHJpanZpbmcnO1xuXHRcdFx0Y2FzZSAnQmFyY29kZSc6XG5cdFx0XHRcdHJldHVybiAnY29kZSc7XG5cdFx0XHRjYXNlICdCZXRhYWxtaWRkZWwnOlxuXHRcdFx0Y2FzZSAnQmV0YWxpbmdzY29uZGl0aWUnOlxuXHRcdFx0Y2FzZSAnQnJpZWZwYXBpZXInOlxuXHRcdFx0Y2FzZSAnVGF4Q2xhc3MnOlxuXHRcdFx0Y2FzZSAnVGF4U2NoZW1hJzpcblx0XHRcdGNhc2UgJ0NvbmRpdGlvbic6XG5cdFx0XHRjYXNlICdGYWN0dXVybW9tZW50Jzpcblx0XHRcdGNhc2UgJ0Z1bmN0aWVncm9lcCc6XG5cdFx0XHRjYXNlICdHcm9vdGJvZWsnOlxuXHRcdFx0Y2FzZSAnSW5odXVyJzpcblx0XHRcdGNhc2UgJ0luaHV1cmdyb2VwJzpcblx0XHRcdGNhc2UgJ0luaHV1cm1hdGVyaWFhbCc6XG5cdFx0XHRjYXNlICdNYXRlcmlhYWwnOlxuXHRcdFx0Y2FzZSAnTWF0ZXJpYWFsQ2F0Jzpcblx0XHRcdGNhc2UgJ01lZGV3ZXJrZXJ0YXJpZWYnOlxuXHRcdFx0Y2FzZSAnTm90aXRpZSc6XG5cdFx0XHRjYXNlICdQbGFubmluZ21hdGVyaWFhbCc6XG5cdFx0XHRjYXNlICdQcm9qZWN0Jzpcblx0XHRcdGNhc2UgJ1N0YWZmZWxncm9lcCc6XG5cdFx0XHRjYXNlICdTdWJwcm9qZWN0Jzpcblx0XHRcdGNhc2UgJ1RhYWsnOlxuXHRcdFx0Y2FzZSAnVGFnJzpcblx0XHRcdGNhc2UgJ1RlbXBsYXRlJzpcblx0XHRcdGNhc2UgJ1RpamQnOlxuXHRcdFx0Y2FzZSAnVGl0ZWwnOlxuXHRcdFx0Y2FzZSAnVHlwZSc6XG5cdFx0XHRjYXNlICdWb2VydHVpZyc6XG5cdFx0XHRcdHJldHVybiAnbmFhbSc7XG5cdFx0XHQvLyBjYXNlICdDb250YWN0Jzpcblx0XHRcdC8vIGNhc2UgJ01lZGV3ZXJrZXInOlxuXHRcdFx0Ly8gY2FzZSAnUGVyc29uJzpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdC8vIG9ubHkgdXNlIGRpc3BsYXluYW1lIGZvciBpdGVtcyB0aGF0IGRvbnQndCBoYXZlIGEgc2ltcGxlLCB3cml0YWJsZSBuYW1lIGZpZWxkXG5cdFx0XHRcdC8vIHRoaXMgZnVuY3Rpb24gaXMgYWxzbyB1c2VkIGZvciB0ZW1wbGF0ZWQgaXRlbXNcblx0XHRcdFx0cmV0dXJuICdkaXNwbGF5bmFtZSc7XG5cdFx0fVxuXHR9XG5cblx0Ly8gVE9ETzogd2UgY2FuIHJlbW92ZSB0aGVzZSBvbmNlIGFsbCBjb2x1bW5zIGFyZSByZXNwZWN0ZWQgZm9yIGxvY2FsIGl0ZW1zIFtSTTQtMTAzNzhdXG5cdGdldExvY2FsRGVmYXVsdFZhbHVlcyAoKTogRmllbGRNYXAge1xuXHRcdHJldHVybiB7cGVybWlzc2lvbnM6IEFMTF9QRVJNSVNTSU9OUywgY3JlYXRvcjogdGhpcy5hdXRoSW50ZXJmYWNlLmdldFVzZXJJZCgpLCBjcmVhdGVkOiBtb21lbnQoKX07XG5cdH1cblxuXHRoYXNMb2NhbERlZmF1bHRWYWx1ZSAoY29sdW1uSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHN3aXRjaCAoY29sdW1uSWQpIHtcblx0XHRcdGNhc2UgJ3Blcm1pc3Npb25zJzpcblx0XHRcdGNhc2UgJ2NyZWF0b3InOlxuXHRcdFx0Y2FzZSAnY3JlYXRlZCc6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxufVxuIiwiaW1wb3J0IHtcblx0QXBpRm9ybWF0dGVyLFxuXHRBcGlSZXNwb25zZVByb2Nlc3Nvcixcblx0QmF0Y2hTdGF0dXMsXG5cdENvbHVtbkV4cGFuc2lvbixcblx0Q29sdW1uSGFuZGxlcixcblx0Q29sdW1uSW5mbyxcblx0Q29sdW1uU2V0LFxuXHRDb2x1bW5TdWJzZXRDYWNoZSxcblx0Q29sdW1uVXRpbCxcblx0SXRlbUNhY2hlLFxuXHRJdGVtRW50cnlTZXJ2aWNlLFxuXHRLZXlTZXJ2aWNlXG59IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgRU5UUllfU1RBVFVTIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7XG5cdEJhdGNoU3RhdHVzRmFjdG9yeSxcblx0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0Q29sdW1uU2V0RmFjdG9yeSxcblx0Q29sdW1uU3Vic2V0Q2FjaGVGYWN0b3J5LFxuXHRJdGVtQ2FjaGVGYWN0b3J5LFxuXHRJdGVtRW50cnlGYWN0b3J5LFxuXHRUZW1wbGF0ZUZhY3Rvcnlcbn0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJdGVtRW50cnksIEl0ZW1FbnRyeU9wdGlvbnMsIFRlbXBsYXRlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7XG5cdEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRBcGlSZXNwb25zZSwgRW50cnlQYXJlbnROdWxsLFxuXHRFbnRyeVN0YXR1cyxcblx0RmllbGRNYXAsXG5cdEl0ZW1JZCxcblx0SXRlbUlkQ29udmVyc2lvbk1hcCxcblx0SXRlbVR5cGUsXG5cdExpbmtlZEl0ZW1FbnRyeU1hcCxcblx0UHJvbWlzZUludGVyZmFjZSwgUmVzcG9uc2VDb2x1bW5NYXAsXG5cdFRlbXBsYXRlSXRlbUVudHJ5TWFwXG59IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgZ2V0Rmlyc3RQcm9wZXJ0eSwgaGFzUHJvcGVydGllcyB9IGZyb20gJy4vVXRpbCc7XG5cbi8vIHRvZG8gbWFrZSBjbGFzc1xuXG5leHBvcnQgY2xhc3MgSXRlbUhhbmRsZXIge1xuXHRlbnRyaWVzOiBJdGVtQ2FjaGU7XG5cdHRlbXBsYXRlczoge1tpdGVtVHlwZTogc3RyaW5nXTogVGVtcGxhdGV9ID0ge307XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBiYXRjaFN0YXR1c0ZhY3Rvcnk6IEJhdGNoU3RhdHVzRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbHVtblN1YnNldENhY2hlRmFjdG9yeTogQ29sdW1uU3Vic2V0Q2FjaGVGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbCxcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgaXRlbUNhY2hlRmFjdG9yeTogSXRlbUNhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIGl0ZW1FbnRyeUZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZSxcblx0XHRwcml2YXRlIHRlbXBsYXRlRmFjdG9yeTogVGVtcGxhdGVGYWN0b3J5XG5cdCkge1xuXHRcdHRoaXMuZW50cmllcyA9IHRoaXMuaXRlbUNhY2hlRmFjdG9yeS5jb25zdHJ1Y3QoKTtcblx0fVxuXG5cdGZldGNoSXRlbSAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1JZDogSXRlbUlkLFxuXHRcdG9wdGlvbnM6IEl0ZW1FbnRyeU9wdGlvbnMsXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1FbnRyeT4ge1xuXHRcdGNvbnN0IGVudHJ5U3RhdHVzID0gdGhpcy5nZXRFbnRyeVN0YXR1cyhcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkLFxuXHRcdFx0b3B0aW9ucy5wYXJlbnQsXG5cdFx0XHRvcHRpb25zLmRlZmVyUmVxdWVzdCxcblx0XHRcdGxvY2FsSXRlbUNhY2hlLFxuXHRcdFx0dHJ1ZSxcblx0XHRcdHRoaXMuY29sdW1uU3Vic2V0Q2FjaGVGYWN0b3J5LmNvbnN0cnVjdChvcHRpb25zLmNvbHVtbnMpXG5cdFx0KTtcblxuXHRcdGlmIChlbnRyeVN0YXR1cyA9PT0gbnVsbClcblx0XHRcdHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5yZWplY3QodGhpcy5pdGVtRW50cnlTZXJ2aWNlLmNyZWF0ZVVuZm91bmRMb2NhbEl0ZW1FcnJvcihpdGVtVHlwZSkpO1xuXG5cdFx0cmV0dXJuIHRoaXMucmVzb2x2ZUNhY2hlZChlbnRyeVN0YXR1cy5lbnRyeSwgZW50cnlTdGF0dXMuc3RhdHVzLCBvcHRpb25zLCBsb2NhbEl0ZW1DYWNoZSk7XG5cdH1cblxuXHRmZXRjaE5ld0l0ZW0gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zOiBJdGVtRW50cnlPcHRpb25zLFxuXHRcdGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGVcblx0KTogUHJvbWlzZUludGVyZmFjZTxUZW1wbGF0ZUl0ZW1FbnRyeU1hcD4ge1xuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGxvY2FsSXRlbUNhY2hlLmFkZChcblx0XHRcdHRoaXMuaXRlbUVudHJ5RmFjdG9yeS5jb25zdHJ1Y3REZWZlcnJlZChcblx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdG9wdGlvbnMuaXNEdXBsaWNhdGUgPyB0aGlzLmtleVNlcnZpY2UuZ2V0TG9jYWxEdXBsaWNhdGVJZCgpIDogdGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKSxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0ZmFsc2Vcblx0XHRcdClcblx0XHQpO1xuXG5cdFx0cmV0dXJuIHRoaXMuZmV0Y2hUZW1wbGF0ZShpdGVtVHlwZSwgb3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMsIG9wdGlvbnMudGVtcGxhdGVDb2x1bW5zKS50aGVuKFxuXHRcdFx0dGVtcGxhdGUgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlTG9jYWwoaXRlbUVudHJ5LCBvcHRpb25zLnBhcmVudCwgdGVtcGxhdGUsIGxvY2FsSXRlbUNhY2hlKTtcblx0XHRcdH0sXG5cdFx0XHRlcnJvciA9PiB7XG5cdFx0XHRcdGl0ZW1FbnRyeS5yZWplY3QoZXJyb3IpO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5yZWplY3QoZXJyb3IpO1xuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxuXHRjcmVhdGVCYXRjaFN0YXR1cyAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1JZHM6IEl0ZW1JZFtdLFxuXHRcdHBhcmVudDogRW50cnlQYXJlbnROdWxsLFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyxcblx0XHRkZWZlclJlcXVlc3Q6IGJvb2xlYW4sXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZSxcblx0XHRhZGRUb0xvY2FsQ2FjaGU6IGJvb2xlYW5cblx0KToge2JhdGNoU3RhdHVzOiBCYXRjaFN0YXR1czxJdGVtRW50cnk+LCBzdWNjZXNzOiBib29sZWFufSB7XG5cdFx0Y29uc3QgY29sdW1uU3Vic2V0Q2FjaGU6IENvbHVtblN1YnNldENhY2hlID0gdGhpcy5jb2x1bW5TdWJzZXRDYWNoZUZhY3RvcnkuY29uc3RydWN0KHJlcXVlc3RDb2x1bW5zKTtcblx0XHRjb25zdCBiYXRjaFN0YXR1cyA9IHRoaXMuYmF0Y2hTdGF0dXNGYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0KGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBpdGVtRW50cnkuaXRlbUlkLFxuXHRcdFx0KGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBpdGVtRW50cnkuZ2V0UHJvbWlzZSgpXG5cdFx0KTtcblx0XHRsZXQgc3VjY2VzcyA9IHRydWU7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBvZiBpdGVtSWRzKSB7XG5cdFx0XHRjb25zdCBlbnRyeVN0YXR1cyA9IHRoaXMuZ2V0RW50cnlTdGF0dXMoXG5cdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRpdGVtSWQsXG5cdFx0XHRcdHBhcmVudCxcblx0XHRcdFx0ZGVmZXJSZXF1ZXN0LFxuXHRcdFx0XHRsb2NhbEl0ZW1DYWNoZSxcblx0XHRcdFx0YWRkVG9Mb2NhbENhY2hlLFxuXHRcdFx0XHRjb2x1bW5TdWJzZXRDYWNoZVxuXHRcdFx0KTtcblxuXHRcdFx0aWYgKGVudHJ5U3RhdHVzID09PSBudWxsKSB7XG5cdFx0XHRcdHN1Y2Nlc3MgPSBmYWxzZTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGJhdGNoU3RhdHVzLmFkZChlbnRyeVN0YXR1cyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtiYXRjaFN0YXR1czogYmF0Y2hTdGF0dXMsIHN1Y2Nlc3M6IHN1Y2Nlc3N9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEZvciBldmVyeSBpdGVtIElEIGZpbmQgdGhlIHN0YXR1cyBvZiB0aGUgSXRlbUVudHJ5IGFuZCByZXNvbHZlIHRoZSBwcm9taXNlcyBzbyB0aGUgcmVzdWx0IGlzXG5cdCAqIGEgdXNhYmxlIEl0ZW1FbnRyeVxuXHQgKi9cblx0ZmV0Y2hJdGVtcyAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1JZHM6IEl0ZW1JZFtdLFxuXHRcdG9wdGlvbnM6IEl0ZW1FbnRyeU9wdGlvbnMsXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1FbnRyeVtdPiB7XG5cdFx0Y29uc3QgZXJyb3JIYW5kbGVyID0gdGhpcy5lcnJvckhhbmRsZXI7XG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSBvcHRpb25zLmNvbHVtbnM7XG5cblx0XHRjb25zdCB7YmF0Y2hTdGF0dXMsIHN1Y2Nlc3N9ID0gdGhpcy5jcmVhdGVCYXRjaFN0YXR1cyhcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkcyxcblx0XHRcdG9wdGlvbnMucGFyZW50LFxuXHRcdFx0cmVxdWVzdENvbHVtbnMsXG5cdFx0XHRvcHRpb25zLmRlZmVyUmVxdWVzdCxcblx0XHRcdGxvY2FsSXRlbUNhY2hlLFxuXHRcdFx0dHJ1ZVxuXHRcdCk7XG5cblx0XHRsZXQgcmVzcG9uc2VQcm9taXNlO1xuXHRcdGxldCBjb2x1bW5zUHJvbWlzZTtcblxuXHRcdGlmIChiYXRjaFN0YXR1cy5oYXNSZXF1ZXN0cygpKSB7XG5cdFx0XHRyZXNwb25zZVByb21pc2UgPSB0aGlzLnJlcXVlc3RJdGVtcyhpdGVtVHlwZSwgYmF0Y2hTdGF0dXMuZ2V0UmVxdWVzdElkcygpLCByZXF1ZXN0Q29sdW1ucyk7XG5cdFx0XHRjb2x1bW5zUHJvbWlzZSA9IHJlc3BvbnNlUHJvbWlzZS50aGVuKFxuXHRcdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRlcnJvciA9PiB7XG5cdFx0XHRcdFx0Ly8gbm8gaXRlbXMgd2lsbCBiZSByZXR1cm5lZCwgc28gY2xlYXJpbmcgaXMgc3VmZmljaWVudCBoZXJlXG5cdFx0XHRcdFx0YmF0Y2hTdGF0dXMuZm9yRWFjaEVudHJ5KFxuXHRcdFx0XHRcdFx0W0VOVFJZX1NUQVRVUy5SRVNPTFZFXSxcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeSA9PiB0aGlzLmNsZWFySXRlbShpdGVtRW50cnksIGxvY2FsSXRlbUNhY2hlKVxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRyZXR1cm4gZXJyb3JIYW5kbGVyLnJlamVjdChlcnJvcik7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0fSBlbHNlIGlmIChiYXRjaFN0YXR1cy5oYXNFbnRyaWVzKGJhdGNoU3RhdHVzLmxvY2FsRXhwYW5kU3RhdHVzKSkge1xuXHRcdFx0cmVzcG9uc2VQcm9taXNlID0gbnVsbDtcblx0XHRcdGNvbHVtbnNQcm9taXNlID0gdGhpcy5jb2x1bW5IYW5kbGVyLmZldGNoKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlc3BvbnNlUHJvbWlzZSA9IG51bGw7XG5cdFx0XHRjb2x1bW5zUHJvbWlzZSA9IG51bGw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKFxuXHRcdFx0e1xuXHRcdFx0XHRlbnRyaWVzOiBiYXRjaFN0YXR1cy5nZXRQcm9taXNlcygpLFxuXHRcdFx0XHRyZXNwb25zZTogcmVzcG9uc2VQcm9taXNlLFxuXHRcdFx0XHRjb2x1bW5zOiBjb2x1bW5zUHJvbWlzZVxuXHRcdFx0fVxuXHRcdCkudGhlbihcblx0XHRcdChcblx0XHRcdFx0cmVzb2x2ZWQ6IHtcblx0XHRcdFx0XHRlbnRyaWVzOiBJdGVtRW50cnlbXSxcblx0XHRcdFx0XHRyZXNwb25zZTogQXBpUmVzcG9uc2VQcm9jZXNzb3IgfCBudWxsLFxuXHRcdFx0XHRcdGNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwIHwgbnVsbFxuXHRcdFx0XHR9XG5cdFx0XHQpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlQmF0Y2hSZXNwb25zZShcblx0XHRcdFx0XHRiYXRjaFN0YXR1cyxcblx0XHRcdFx0XHRsb2NhbEl0ZW1DYWNoZSxcblx0XHRcdFx0XHRyZXF1ZXN0Q29sdW1ucyxcblx0XHRcdFx0XHRyZXNvbHZlZC5yZXNwb25zZSxcblx0XHRcdFx0XHRyZXNvbHZlZC5jb2x1bW5zXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihcblx0XHRcdChyZXNvbHZlZDogYm9vbGVhbikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gcmVzb2x2ZWQgJiYgc3VjY2VzcyA/IGJhdGNoU3RhdHVzLmdldEFycmF5KCkgOiBlcnJvckhhbmRsZXIucmVqZWN0KCk7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRoYW5kbGVCYXRjaFJlc3BvbnNlIChcblx0XHRiYXRjaFN0YXR1czogQmF0Y2hTdGF0dXM8SXRlbUVudHJ5Pixcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlLFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyxcblx0XHRyZXNwb25zZTogQXBpUmVzcG9uc2VQcm9jZXNzb3IgfCBudWxsLFxuXHRcdHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXAgfCBudWxsLFxuXHRcdGNvbHVtbkV4cGFuc2lvbj86IENvbHVtbkV4cGFuc2lvblxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPGJvb2xlYW4+IHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGJhdGNoU3RhdHVzLml0ZW1UeXBlO1xuXHRcdGNvbnN0IHJlc29sdmVTdGF0dXMgPSBbRU5UUllfU1RBVFVTLlJFU09MVkVdO1xuXG5cdFx0bGV0IHN1Y2Nlc3MgPSB0cnVlO1xuXG5cdFx0aWYgKGJhdGNoU3RhdHVzLmhhc0VudHJpZXMocmVzb2x2ZVN0YXR1cykpIHtcblx0XHRcdGNvbnN0IGNvbHVtbkluZm8gPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0cmVxdWVzdENvbHVtbnMsXG5cdFx0XHRcdDxSZXNwb25zZUNvbHVtbk1hcD4gcmVzcG9uc2VDb2x1bW5zXG5cdFx0XHQpO1xuXG5cdFx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXG5cdFx0XHRcdHJlc29sdmVTdGF0dXMsXG5cdFx0XHRcdGl0ZW1FbnRyeSA9PiB7XG5cdFx0XHRcdFx0aWYgKCF0aGlzLnJlc29sdmVSZW1vdGUoaXRlbUVudHJ5LCBjb2x1bW5JbmZvLCA8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHJlc3BvbnNlLCBsb2NhbEl0ZW1DYWNoZSkpXG5cdFx0XHRcdFx0XHRzdWNjZXNzID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0YmF0Y2hTdGF0dXMuZm9yRWFjaEVudHJ5KFxuXHRcdFx0W0VOVFJZX1NUQVRVUy5SRVNPTFZFX1ZBTFVFU10sXG5cdFx0XHRpdGVtRW50cnkgPT4ge1xuXHRcdFx0XHRpZiAoIXRoaXMucmVzb2x2ZVJlbW90ZVZhbHVlcyhpdGVtRW50cnksIDxBcGlSZXNwb25zZVByb2Nlc3Nvcj4gcmVzcG9uc2UpKVxuXHRcdFx0XHRcdHN1Y2Nlc3MgPSBmYWxzZTtcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0aWYgKGJhdGNoU3RhdHVzLmhhc0VudHJpZXMoYmF0Y2hTdGF0dXMucmVtb3RlRXhwYW5kU3RhdHVzKSkge1xuXHRcdFx0aWYgKGNvbHVtbkV4cGFuc2lvbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0cmVxdWVzdENvbHVtbnMsXG5cdFx0XHRcdFx0PFJlc3BvbnNlQ29sdW1uTWFwPiByZXNwb25zZUNvbHVtbnNcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0YmF0Y2hTdGF0dXMuZm9yRWFjaEVudHJ5KFxuXHRcdFx0XHRiYXRjaFN0YXR1cy5yZW1vdGVFeHBhbmRTdGF0dXMsXG5cdFx0XHRcdGl0ZW1FbnRyeSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb2x2ZUV4cGFuc2lvbihcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0XHRcdDxDb2x1bW5FeHBhbnNpb24+IGNvbHVtbkV4cGFuc2lvbixcblx0XHRcdFx0XHRcdDxBcGlSZXNwb25zZVByb2Nlc3Nvcj4gcmVzcG9uc2Vcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGlmIChiYXRjaFN0YXR1cy5oYXNFbnRyaWVzKGJhdGNoU3RhdHVzLmxvY2FsRXhwYW5kU3RhdHVzKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZXhwYW5kTG9jYWxFbnRyaWVzKFxuXHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0YmF0Y2hTdGF0dXMuZ2V0QXJyYXkoYmF0Y2hTdGF0dXMubG9jYWxFeHBhbmRTdGF0dXMpLFxuXHRcdFx0XHRyZXF1ZXN0Q29sdW1ucyxcblx0XHRcdFx0PFJlc3BvbnNlQ29sdW1uTWFwPiByZXNwb25zZUNvbHVtbnMsXG5cdFx0XHRcdGxvY2FsSXRlbUNhY2hlXG5cdFx0XHQpLnRoZW4oXG5cdFx0XHRcdGl0ZW1FbnRyaWVzID0+IHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5yZXNvbHZlKCk7XG5cblx0XHRcdFx0XHRyZXR1cm4gc3VjY2Vzcztcblx0XHRcdFx0fSxcblx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oc3VjY2Vzcyk7XG5cdH1cblxuXHRyZXNvbHZlQ2FjaGVkIChcblx0XHRpdGVtRW50cnk6IEl0ZW1FbnRyeSxcblx0XHRzdGF0dXM6IEVOVFJZX1NUQVRVUyxcblx0XHRvcHRpb25zOiBJdGVtRW50cnlPcHRpb25zLFxuXHRcdGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGVcblx0KTogUHJvbWlzZUludGVyZmFjZTxJdGVtRW50cnk+IHtcblx0XHRjb25zdCByZWplY3RJdGVtRW50cnkgPSAoZXJyb3I6IGFueSkgPT4geyBpdGVtRW50cnkucmVqZWN0KGVycm9yKTsgfTtcblx0XHRsZXQgY29sdW1uRGlmZmVyZW5jZTogQXBpUmVxdWVzdENvbHVtbnM7XG5cblx0XHRzd2l0Y2ggKHN0YXR1cykge1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuTE9DQUw6IC8vIGhlcmUgZm9yIGNvbXBsZXRpb25cblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLkNBQ0hFRDpcblx0XHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihpdGVtRW50cnkpO1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuUFJPTUlTRUQ6XG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnkuZ2V0UHJvbWlzZSgpO1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuRVhQQU5EOlxuXHRcdFx0XHRjb2x1bW5EaWZmZXJlbmNlID0gdGhpcy5nZXRDb2x1bW5EaWZmZXJlbmNlKGl0ZW1FbnRyeSwgb3B0aW9ucy5jb2x1bW5zKTtcblxuXHRcdFx0XHR0aGlzLnJlcXVlc3RJdGVtKGl0ZW1FbnRyeSwgY29sdW1uRGlmZmVyZW5jZSkudGhlbihcblx0XHRcdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnJlc29sdmVFeHBhbnNpb24oXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0XHRcdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdFx0XHRcdFx0XHRpdGVtRW50cnkuaXRlbVR5cGUsXG5cdFx0XHRcdFx0XHRcdFx0Y29sdW1uRGlmZmVyZW5jZSxcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKVxuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRyZXNwb25zZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHJlamVjdEl0ZW1FbnRyeVxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnkuZ2V0UHJvbWlzZSgpO1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuRVhQQU5EX0xPQ0FMOlxuXHRcdFx0XHRjb2x1bW5EaWZmZXJlbmNlID0gdGhpcy5nZXRDb2x1bW5EaWZmZXJlbmNlKGl0ZW1FbnRyeSwgb3B0aW9ucy5jb2x1bW5zKTtcblxuXHRcdFx0XHR0aGlzLmNvbHVtbkhhbmRsZXIuZmV0Y2goaXRlbUVudHJ5Lml0ZW1UeXBlLCBjb2x1bW5EaWZmZXJlbmNlKS50aGVuKFxuXHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1ucyA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5leHBhbmRMb2NhbEVudHJpZXMoXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5pdGVtVHlwZSxcblx0XHRcdFx0XHRcdFx0W2l0ZW1FbnRyeV0sXG5cdFx0XHRcdFx0XHRcdGNvbHVtbkRpZmZlcmVuY2UsXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1ucyxcblx0XHRcdFx0XHRcdFx0bG9jYWxJdGVtQ2FjaGVcblx0XHRcdFx0XHRcdCkudGhlbihcblx0XHRcdFx0XHRcdFx0KCkgPT4gaXRlbUVudHJ5LnJlc29sdmUoKSxcblx0XHRcdFx0XHRcdFx0cmVqZWN0SXRlbUVudHJ5XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0cmVqZWN0SXRlbUVudHJ5XG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5nZXRQcm9taXNlKCk7XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkQ6XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkRfTE9DQUw6XG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnkuZ2V0UHJvbWlzZSgpLnRoZW4oXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb2x2ZUNhY2hlZChcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRcdFx0XHR0aGlzLmdldENhY2hlZEVudHJ5U3RhdHVzKFxuXHRcdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmNvbHVtblN1YnNldENhY2hlRmFjdG9yeS5jb25zdHJ1Y3Qob3B0aW9ucy5jb2x1bW5zKVxuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRvcHRpb25zLFxuXHRcdFx0XHRcdFx0XHRsb2NhbEl0ZW1DYWNoZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHQpO1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuUkVTT0xWRV9WQUxVRVM6XG5cdFx0XHRcdHRoaXMucmVxdWVzdEl0ZW0oaXRlbUVudHJ5KS50aGVuKFxuXHRcdFx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0XHRcdHRoaXMucmVzb2x2ZVJlbW90ZVZhbHVlcyhpdGVtRW50cnksIHJlc3BvbnNlKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGVycm9yID0+IHtcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5yZWplY3QoZXJyb3IpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0KTtcblxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmdldFByb21pc2UoKTtcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLlJFU09MVkU6XG5cdFx0XHRcdHRoaXMucmVxdWVzdEl0ZW0oaXRlbUVudHJ5KS50aGVuKFxuXHRcdFx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0XHRcdHRoaXMucmVzb2x2ZVJlbW90ZShcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnkuY29sdW1ucy5yZXNvbHZlKHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpKSxcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0XHRcdGxvY2FsSXRlbUNhY2hlXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZXJyb3IgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5jbGVhckl0ZW0oaXRlbUVudHJ5LCBsb2NhbEl0ZW1DYWNoZSk7XG5cdFx0XHRcdFx0XHRpdGVtRW50cnkucmVqZWN0KGVycm9yKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5nZXRQcm9taXNlKCk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBnZXRDb2x1bW5EaWZmZXJlbmNlIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgcmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zKTogQXBpUmVxdWVzdENvbHVtbnMge1xuXHRcdHJldHVybiB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXF1ZXN0Q29sdW1ucyhpdGVtRW50cnkuY29sdW1ucy5yZXF1ZXN0LCByZXF1ZXN0Q29sdW1ucykuZGlmZmVyZW5jZTtcblx0fVxuXG5cdHJlc29sdmVMb2NhbCAoXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnksXG5cdFx0cGFyZW50OiBFbnRyeVBhcmVudE51bGwsXG5cdFx0dGVtcGxhdGU6IFRlbXBsYXRlLFxuXHRcdGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGVcblx0KTogVGVtcGxhdGVJdGVtRW50cnlNYXAge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XG5cdFx0Y29uc3QgaXRlbUlkQ29udmVyc2lvbiA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5jcmVhdGVMb2NhbENvbnZlcnNpb25NYXAoaXRlbVR5cGUsIGl0ZW1JZCwgdHJ1ZSwgdGVtcGxhdGUucmVzcG9uc2UpO1xuXG5cdFx0aXRlbUVudHJ5LmNvbHVtbnMgPSB0ZW1wbGF0ZS5jb2x1bW5zO1xuXG5cdFx0aWYgKHBhcmVudCAhPT0gbnVsbClcblx0XHRcdGl0ZW1FbnRyeS5zZXRQYXJlbnQocGFyZW50Lml0ZW1UeXBlLCBwYXJlbnQuaXRlbUlkKTsgLy8gY3JlYXRlIG5ldyBvYmplY3RcblxuXHRcdGl0ZW1FbnRyeS5zZXRMb2NhbEZpZWxkcyh0ZW1wbGF0ZS5maWVsZHMsIGl0ZW1JZENvbnZlcnNpb24pLnJlc29sdmUoKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRtYWluOiBpdGVtRW50cnksXG5cdFx0XHRsaW5rZWQ6IHRoaXMuY3JlYXRlTG9jYWxFbnRyaWVzKGl0ZW1UeXBlLCBpdGVtSWQsIHRlbXBsYXRlLCBpdGVtSWRDb252ZXJzaW9uLCBsb2NhbEl0ZW1DYWNoZSlcblx0XHR9O1xuXHR9XG5cblx0cmVzb2x2ZUV4cGFuc2lvbiAoaXRlbUVudHJ5OiBJdGVtRW50cnksIGNvbHVtbkV4cGFuc2lvbjogQ29sdW1uRXhwYW5zaW9uLCByZXNwb25zZTogQXBpUmVzcG9uc2UpOiBJdGVtRW50cnkge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XG5cdFx0Y29uc3QgZXhwYW5zaW9uUmVzdWx0ID0gY29sdW1uRXhwYW5zaW9uLnJ1bihpdGVtRW50cnkuY29sdW1ucyk7XG5cblx0XHQvLyBBbm90aGVyIHJlcXVlc3QgYWxyZWFkeSByZXF1ZXN0ZWQgdGhlIGNvbHVtbnMgd2UgbmVlZCBoZXJlLCBubyBuZWVkIHRvIGV4cGFuZCB0aGUgaXRlbSBhbmQgcmVzb2x2ZSBpdCAoYWxyZWFkeSBkb25lIGJ5IG90aGVyIHJlcXVlc3QpXG5cdFx0aWYgKGV4cGFuc2lvblJlc3VsdCA9PT0gbnVsbClcblx0XHRcdHJldHVybiBpdGVtRW50cnk7XG5cblx0XHRpdGVtRW50cnkuZXhwYW5kKFxuXHRcdFx0cmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCksXG5cdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgZXhwYW5zaW9uUmVzdWx0LmRpZmZlcmVuY2Uucm9vdCksXG5cdFx0XHRleHBhbnNpb25SZXN1bHRcblx0XHQpO1xuXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeS5yZXNvbHZlKCk7XG5cdH1cblxuXHRwcml2YXRlIGNsZWFySXRlbSAoaXRlbUVudHJ5OiBJdGVtRW50cnksIGxvY2FsQ2FjaGU6IEl0ZW1DYWNoZSk6IHZvaWQge1xuXHRcdHRoaXMuZW50cmllcy5jbGVhcihpdGVtRW50cnkpO1xuXHRcdGxvY2FsQ2FjaGUuY2xlYXIoaXRlbUVudHJ5KTtcblx0fVxuXG5cdHByaXZhdGUgcmVzb2x2ZVJlbW90ZSAoXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnksXG5cdFx0Y29sdW1uU2V0OiBDb2x1bW5TZXQsXG5cdFx0cmVzcG9uc2U6IEFwaVJlc3BvbnNlLFxuXHRcdGxvY2FsQ2FjaGU6IEl0ZW1DYWNoZVxuXHQpOiBib29sZWFuIHtcblx0XHRjb25zdCByZXNwb25zZUZpZWxkcyA9IHRoaXMuZ2V0UmVzcG9uc2VGaWVsZHMoaXRlbUVudHJ5LCBjb2x1bW5TZXQsIHJlc3BvbnNlKTtcblxuXHRcdGlmIChyZXNwb25zZUZpZWxkcyA9PT0gbnVsbCkge1xuXHRcdFx0dGhpcy5jbGVhckl0ZW0oaXRlbUVudHJ5LCBsb2NhbENhY2hlKTtcblx0XHRcdGl0ZW1FbnRyeS5yZWplY3QoKTtcblxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGl0ZW1FbnRyeS5yZXNvbHZlRGVmZXJyZWQocmVzcG9uc2VGaWVsZHMuaW5pdGlhbCwgcmVzcG9uc2VGaWVsZHMuZGVyaXZlZCwgY29sdW1uU2V0KTtcblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cHJpdmF0ZSByZXNvbHZlUmVtb3RlVmFsdWVzIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgcmVzcG9uc2U6IEFwaVJlc3BvbnNlKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgcmVzcG9uc2VGaWVsZHMgPSB0aGlzLmdldFJlc3BvbnNlRmllbGRzKGl0ZW1FbnRyeSwgaXRlbUVudHJ5LmNvbHVtbnMsIHJlc3BvbnNlKTtcblxuXHRcdGlmIChyZXNwb25zZUZpZWxkcyA9PT0gbnVsbCkge1xuXHRcdFx0aXRlbUVudHJ5LnJlamVjdCgpO1xuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0aXRlbUVudHJ5LnVwZGF0ZUZpZWxkcyhyZXNwb25zZUZpZWxkcy5pbml0aWFsLCByZXNwb25zZUZpZWxkcy5kZXJpdmVkLCBmYWxzZSkucmVzb2x2ZSgpO1xuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRwcml2YXRlIGdldFJlc3BvbnNlRmllbGRzIChcblx0XHRpdGVtRW50cnk6IEl0ZW1FbnRyeSxcblx0XHRjb2x1bW5TZXQ6IENvbHVtblNldCxcblx0XHRyZXNwb25zZTogQXBpUmVzcG9uc2Vcblx0KToge2luaXRpYWw6IEZpZWxkTWFwLCBkZXJpdmVkOiBGaWVsZE1hcH0gfCBudWxsIHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xuXHRcdGNvbnN0IGluaXRpYWwgPSByZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKTtcblxuXHRcdGlmIChpbml0aWFsID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRpbml0aWFsOiBpbml0aWFsLFxuXHRcdFx0ZGVyaXZlZDogcmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtblNldC5yb290KVxuXHRcdH07XG5cdH1cblxuXHRmZXRjaFRlbXBsYXRlIChpdGVtVHlwZTogSXRlbVR5cGUsIHRlbXBsYXRlT3B0aW9uczogYW55ID0ge30sIHRlbXBsYXRlQ29sdW1uczogYW55ID0ge30pOiBQcm9taXNlSW50ZXJmYWNlPFRlbXBsYXRlPiB7XG5cdFx0Y29uc3QgaGFzVGVtcGxhdGVPcHRpb25zID0gaGFzUHJvcGVydGllcyh0ZW1wbGF0ZU9wdGlvbnMpO1xuXHRcdGNvbnN0IGNvbHVtbkl0ZW1UeXBlID0gZ2V0Rmlyc3RQcm9wZXJ0eSh0ZW1wbGF0ZUNvbHVtbnMpOyAvLyBpdCdzIHBvc3NpYmxlIHRvIGFkZCBjb2x1bW5zIHRvIGxpbmtlZCBpdGVtc1xuXG5cdFx0aWYgKCFoYXNUZW1wbGF0ZU9wdGlvbnMpIHtcblx0XHRcdGNvbnN0IGNhY2hlZFRlbXBsYXRlID0gdGhpcy50ZW1wbGF0ZXNbaXRlbVR5cGVdO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdGNhY2hlZFRlbXBsYXRlICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdFx0KFxuXHRcdFx0XHRcdGNvbHVtbkl0ZW1UeXBlID09PSBudWxsIHx8XG5cdFx0XHRcdFx0dGhpcy5jb2x1bW5VdGlsLnJlc3BvbnNlQ29sdW1uc0F2YWlsYWJsZShcblx0XHRcdFx0XHRcdGNvbHVtbkl0ZW1UeXBlLFxuXHRcdFx0XHRcdFx0dGVtcGxhdGVDb2x1bW5zW2NvbHVtbkl0ZW1UeXBlXSxcblx0XHRcdFx0XHRcdGNhY2hlZFRlbXBsYXRlLnJlc3BvbnNlQ29sdW1uc1xuXHRcdFx0XHRcdClcblx0XHRcdFx0KVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oY2FjaGVkVGVtcGxhdGUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChcblx0XHRcdHtcblx0XHRcdFx0dGVtcGxhdGU6IHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UudGVtcGxhdGUoaXRlbVR5cGUsIHRlbXBsYXRlT3B0aW9ucyksXG5cdFx0XHRcdGFkZGl0aW9uYWxDb2x1bW5zOiBjb2x1bW5JdGVtVHlwZSA9PT0gbnVsbCA/XG5cdFx0XHRcdFx0e30gOlxuXHRcdFx0XHRcdHRoaXMuY29sdW1uSGFuZGxlci5mZXRjaChjb2x1bW5JdGVtVHlwZSwgdGVtcGxhdGVDb2x1bW5zW2NvbHVtbkl0ZW1UeXBlXSlcblx0XHRcdH1cblx0XHQpLnRoZW4oXG5cdFx0XHRyZXNvbHZlZCA9PiB7XG5cdFx0XHRcdGNvbnN0IHRlbXBsYXRlUmVzcG9uc2UgPSByZXNvbHZlZC50ZW1wbGF0ZTtcblxuXHRcdFx0XHRjb25zdCB0ZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGVGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgdGVtcGxhdGVSZXNwb25zZSwgcmVzb2x2ZWQuYWRkaXRpb25hbENvbHVtbnMpO1xuXG5cdFx0XHRcdGlmICghaGFzVGVtcGxhdGVPcHRpb25zICYmIHRlbXBsYXRlUmVzcG9uc2UuY2FjaGVhYmxlKVxuXHRcdFx0XHRcdHRoaXMudGVtcGxhdGVzW2l0ZW1UeXBlXSA9IHRlbXBsYXRlO1xuXG5cdFx0XHRcdHJldHVybiB0ZW1wbGF0ZTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0RW50cnlTdGF0dXMgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtSWQ6IEl0ZW1JZCxcblx0XHRwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCxcblx0XHRkZWZlclJlcXVlc3Q6IGJvb2xlYW4sXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZSxcblx0XHRhZGRUb0xvY2FsQ2FjaGU6IGJvb2xlYW4sXG5cdFx0Y29sdW1uU3Vic2V0Q2FjaGU6IENvbHVtblN1YnNldENhY2hlXG5cdCk6IEVudHJ5U3RhdHVzPEl0ZW1FbnRyeT4gfCBudWxsIHtcblx0XHRsZXQgaXRlbUVudHJ5O1xuXG5cdFx0aWYgKHRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQoaXRlbUlkKSkge1xuXHRcdFx0aXRlbUVudHJ5ID0gbG9jYWxJdGVtQ2FjaGUuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXG5cdFx0XHRpZiAoaXRlbUVudHJ5ICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdHJldHVybiB7ZW50cnk6IGl0ZW1FbnRyeSwgc3RhdHVzOiB0aGlzLmdldENhY2hlZEVudHJ5U3RhdHVzKGl0ZW1FbnRyeSwgY29sdW1uU3Vic2V0Q2FjaGUpfTtcblxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0aXRlbUVudHJ5ID0gdGhpcy5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkKTtcblxuXHRcdGlmIChpdGVtRW50cnkgIT09IHVuZGVmaW5lZCkgeyAvLyB3ZSdyZSBkZWFsaW5nIHdpdGggYSByZW1vdGUgaXRlbSB0aGF0IGFscmVhZHkgZXhpc3RzIGluIHRoZSBnbG9iYWwgY2FjaGVcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGVudHJ5OiBhZGRUb0xvY2FsQ2FjaGUgPyBsb2NhbEl0ZW1DYWNoZS5hZGQoaXRlbUVudHJ5KSA6IGl0ZW1FbnRyeSxcblx0XHRcdFx0c3RhdHVzOiB0aGlzLmdldENhY2hlZEVudHJ5U3RhdHVzKGl0ZW1FbnRyeSwgY29sdW1uU3Vic2V0Q2FjaGUpXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGl0ZW1FbnRyeSA9IHRoaXMuaXRlbUVudHJ5RmFjdG9yeS5jb25zdHJ1Y3REZWZlcnJlZCggLy8gY3JlYXRlIGEgbmV3IHJlbW90ZSBpdGVtXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdGl0ZW1JZCxcblx0XHRcdGNvbHVtblN1YnNldENhY2hlLnJlcXVlc3RDb2x1bW5zLFxuXHRcdFx0ZGVmZXJSZXF1ZXN0XG5cdFx0KTtcblxuXHRcdGlmIChwYXJlbnQgIT09IG51bGwpXG5cdFx0XHRpdGVtRW50cnkuc2V0UGFyZW50KHBhcmVudC5pdGVtVHlwZSwgcGFyZW50Lml0ZW1JZCk7XG5cblx0XHRpZiAoYWRkVG9Mb2NhbENhY2hlKVxuXHRcdFx0bG9jYWxJdGVtQ2FjaGUuYWRkKGl0ZW1FbnRyeSk7XG5cblx0XHR0aGlzLmVudHJpZXMuYWRkKGl0ZW1FbnRyeSk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0ZW50cnk6IGl0ZW1FbnRyeSxcblx0XHRcdHN0YXR1czogZGVmZXJSZXF1ZXN0ID8gRU5UUllfU1RBVFVTLlBST01JU0VEIDogRU5UUllfU1RBVFVTLlJFU09MVkVcblx0XHR9O1xuXHR9XG5cblx0Z2V0Q2FjaGVkRW50cnlTdGF0dXMgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBjb2x1bW5TdWJzZXRDYWNoZTogQ29sdW1uU3Vic2V0Q2FjaGUpOiBFTlRSWV9TVEFUVVMge1xuXHRcdGNvbnN0IGNvbHVtblNldCA9IGl0ZW1FbnRyeS5jb2x1bW5zO1xuXG5cdFx0aWYgKGl0ZW1FbnRyeS5pc0RlZmVycmVkKCkpIHtcblx0XHRcdGlmIChpdGVtRW50cnkuZGVmZXJSZXF1ZXN0KSB7XG5cdFx0XHRcdGNvbHVtblNldC5leHBhbmRSZXF1ZXN0Q29sdW1ucyhjb2x1bW5TdWJzZXRDYWNoZS5yZXF1ZXN0Q29sdW1ucyk7XG5cblx0XHRcdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5SRVNPTFZFO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoY29sdW1uU3Vic2V0Q2FjaGUucnVuKGNvbHVtblNldCkpXG5cdFx0XHRcdHJldHVybiBFTlRSWV9TVEFUVVMuUFJPTUlTRUQ7XG5cblx0XHRcdHJldHVybiBpdGVtRW50cnkuaXNMb2NhbCgpID8gRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORF9MT0NBTCA6IEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkQ7XG5cdFx0fVxuXG5cdFx0aWYgKCFjb2x1bW5TdWJzZXRDYWNoZS5ydW4oY29sdW1uU2V0KSkge1xuXHRcdFx0aXRlbUVudHJ5LmRlZmVyKCk7XG5cblx0XHRcdHJldHVybiBpdGVtRW50cnkuaXNMb2NhbCgpID8gRU5UUllfU1RBVFVTLkVYUEFORF9MT0NBTCA6IEVOVFJZX1NUQVRVUy5FWFBBTkQ7XG5cdFx0fVxuXG5cdFx0aWYgKGl0ZW1FbnRyeS5yZWxvYWRRdWV1ZWQpIHtcblx0XHRcdGl0ZW1FbnRyeS5yZWxvYWRRdWV1ZWQgPSBmYWxzZTtcblxuXHRcdFx0aWYgKGl0ZW1FbnRyeS5pc0xvY2FsKCkpXG5cdFx0XHRcdHJldHVybiBFTlRSWV9TVEFUVVMuQ0FDSEVEO1xuXG5cdFx0XHRpdGVtRW50cnkuZGVmZXIoKTtcblxuXHRcdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5SRVNPTFZFX1ZBTFVFUztcblx0XHR9XG5cblx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLkNBQ0hFRDtcblx0fVxuXG5cdGZldGNoVGl0bGUgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtSWQ6IEl0ZW1JZCxcblx0XHRkZWZlclJlcXVlc3Q6IGJvb2xlYW4gPSB0cnVlLFxuXHRcdGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGVcblx0KTogUHJvbWlzZUludGVyZmFjZTxzdHJpbmc+IHtcblx0XHRjb25zdCB0aXRsZUZpZWxkID0gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLmdldFRpdGxlRmllbGQoaXRlbVR5cGUpO1xuXG5cdFx0cmV0dXJuIHRoaXMuZmV0Y2hJdGVtKFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRpdGVtSWQsXG5cdFx0XHRuZXcgSXRlbUVudHJ5T3B0aW9ucyh7Y29sdW1uczogW3RpdGxlRmllbGRdLCBkZWZlclJlcXVlc3Q6IGRlZmVyUmVxdWVzdH0pLFxuXHRcdFx0bG9jYWxJdGVtQ2FjaGVcblx0XHQpLnRoZW4oXG5cdFx0XHRpdGVtRW50cnkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmdldEZpZWxkcygpW3RpdGxlRmllbGRdO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRjcmVhdGVMb2NhbEVudHJpZXMgKFxuXHRcdHBhcmVudFR5cGU6IEl0ZW1UeXBlLFxuXHRcdGxvY2FsUGFyZW50SWQ6IEl0ZW1JZCxcblx0XHR0ZW1wbGF0ZTogVGVtcGxhdGUsXG5cdFx0aXRlbUlkQ29udmVyc2lvbjogSXRlbUlkQ29udmVyc2lvbk1hcCxcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlLFxuXHRcdGZpbHRlckl0ZW1FbnRyeTogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBib29sZWFuID0gKCkgPT4gdHJ1ZSAvLyByZXR1cm4gdHJ1ZSB0byBpbmNsdWRlIGl0ZW1cblx0KTogTGlua2VkSXRlbUVudHJ5TWFwW10ge1xuXHRcdGNvbnN0IGFwaVJlc3BvbnNlID0gdGVtcGxhdGUucmVzcG9uc2U7XG5cdFx0Y29uc3QgaXRlbUVudHJ5TWFwOiB7W2l0ZW1UeXBlOiBzdHJpbmddOiBJdGVtRW50cnlbXX0gPSB7fTtcblx0XHRjb25zdCBjb2x1bW5TZXRNYXA6IHtbaXRlbVR5cGU6IHN0cmluZ106IENvbHVtblNldH0gPSB7fTtcblx0XHRjb25zdCByZXN1bHQ6IExpbmtlZEl0ZW1FbnRyeU1hcFtdID0gW107XG5cblx0XHRjb25zdCBjcmVhdGVFbnRyaWVzID0gKF9wYXJlbnRUeXBlOiBJdGVtVHlwZSwgX2xvY2FsUGFyZW50SWQ6IEl0ZW1JZCwgYXBpUGFyZW50SWQ6IEl0ZW1JZCkgPT4ge1xuXHRcdFx0Y29uc3QgcGFyZW50ID0ge2l0ZW1UeXBlOiBfcGFyZW50VHlwZSwgaXRlbUlkOiBfbG9jYWxQYXJlbnRJZH07XG5cdFx0XHRjb25zdCBsaW5rcyA9IGFwaVJlc3BvbnNlLml0ZW1zW19wYXJlbnRUeXBlXVthcGlQYXJlbnRJZF0ubGlua3M7XG5cblx0XHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gbGlua3MpIHtcblx0XHRcdFx0aWYgKCFsaW5rcy5oYXNPd25Qcm9wZXJ0eShpdGVtVHlwZSkpXG5cdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0Ly8gdGhlIGl0ZW0gZW50cmllcyBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIHJlc3VsdCBpbiB0b3AtZG93biBvcmRlclxuXHRcdFx0XHRpZiAoaXRlbUVudHJ5TWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0cmVzdWx0LnB1c2goXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGl0ZW1UeXBlOiBpdGVtVHlwZSxcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJpZXM6IGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV0gPSBbXSxcblx0XHRcdFx0XHRcdFx0Y29sdW1uU2V0OiBjb2x1bW5TZXRNYXBbaXRlbVR5cGVdID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdFx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdHRlbXBsYXRlLnJlc3BvbnNlQ29sdW1uc1xuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGZvciAoY29uc3QgYXBpSXRlbUlkIG9mIGxpbmtzW2l0ZW1UeXBlXSkge1xuXHRcdFx0XHRcdGNvbnN0IGxvY2FsSXRlbUlkID0gaXRlbUlkQ29udmVyc2lvbltpdGVtVHlwZV1bYXBpSXRlbUlkXTtcblxuXHRcdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuaXRlbUVudHJ5RmFjdG9yeS5jb25zdHJ1Y3RMb2NhbExpbmtlZChcblx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdFx0bG9jYWxJdGVtSWQsXG5cdFx0XHRcdFx0XHRhcGlSZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgYXBpSXRlbUlkKSxcblx0XHRcdFx0XHRcdHBhcmVudCxcblx0XHRcdFx0XHRcdGNvbHVtblNldE1hcFtpdGVtVHlwZV0sXG5cdFx0XHRcdFx0XHRpdGVtSWRDb252ZXJzaW9uXG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdGlmICghZmlsdGVySXRlbUVudHJ5KGl0ZW1FbnRyeSkpXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRcdGxvY2FsSXRlbUNhY2hlLmFkZChpdGVtRW50cnkpO1xuXHRcdFx0XHRcdGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV0ucHVzaChpdGVtRW50cnkpO1xuXG5cdFx0XHRcdFx0Y3JlYXRlRW50cmllcyhpdGVtVHlwZSwgbG9jYWxJdGVtSWQsIGFwaUl0ZW1JZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Y3JlYXRlRW50cmllcyhwYXJlbnRUeXBlLCBsb2NhbFBhcmVudElkLCBhcGlSZXNwb25zZS5saW5rc1twYXJlbnRUeXBlXVswXSk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0ZXhwYW5kTG9jYWxFbnRyaWVzIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyxcblx0XHRyZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwLFxuXHRcdGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGVcblx0KTogUHJvbWlzZUludGVyZmFjZTxJdGVtRW50cnlbXT4ge1xuXHRcdGlmIChpdGVtRW50cmllcy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGl0ZW1FbnRyaWVzKTtcblxuXHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGV4cGFuc2lvblJlc3VsdCA9IGNvbHVtbkV4cGFuc2lvbi5ydW4oaXRlbUVudHJ5LmNvbHVtbnMpO1xuXG5cdFx0XHRpZiAoZXhwYW5zaW9uUmVzdWx0ICE9PSBudWxsKVxuXHRcdFx0XHRpdGVtRW50cnkuZXhwYW5kTG9jYWwoZXhwYW5zaW9uUmVzdWx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlRGVyaXZlZFZhbHVlcyhpdGVtRW50cmllcywgY29sdW1uRXhwYW5zaW9uLmFnZ3JlZ2F0ZVJvb3RDb2x1bW5zKCksIGxvY2FsSXRlbUNhY2hlKTtcblx0fVxuXG5cdHJlc29sdmVEZXJpdmVkVmFsdWVzIChcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXG5cdFx0Y29sdW1uczogQ29sdW1uSW5mb1tdLFxuXHRcdGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGVcblx0KTogUHJvbWlzZUludGVyZmFjZTxJdGVtRW50cnlbXT4ge1xuXHRcdGNvbnN0IHByb21pc2VzOiBBcnJheTxQcm9taXNlSW50ZXJmYWNlPGFueT4+ID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKVxuXHRcdFx0cHJvbWlzZXMucHVzaCh0aGlzLmZldGNoRGVyaXZlZFZhbHVlc0J5Q29sdW1uKGl0ZW1FbnRyaWVzLCBjb2x1bW4sIGxvY2FsSXRlbUNhY2hlKSk7XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocHJvbWlzZXMpLnRoZW4oXG5cdFx0XHQoKSA9PiBpdGVtRW50cmllcyxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIHNldERlZmF1bHRWYWx1ZXNCeUNvbHVtbiAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCByb290Q29sdW1uOiBDb2x1bW5JbmZvKTogdm9pZCB7XG5cdFx0Y29uc3QgY2hpbGRDb2x1bW5zID0gcm9vdENvbHVtbi5jaGlsZHJlbjtcblxuXHRcdGlmIChjaGlsZENvbHVtbnMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0Ly8gbm8gbmVlZCB0byBkbyBhIHJlY3Vyc2l2ZSBjYWxsIGhlcmUsIGZ1bmN0aW9uIHdpbGwgZ2V0IGNhbGxlZCBtdWx0aXBsZSB0aW1lc1xuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNoaWxkQ29sdW1ucykge1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXG5cdFx0XHRcdGl0ZW1FbnRyeS5kZXJpdmVkW2NvbHVtbi5wYXRoXSA9IHRoaXMuYXBpRm9ybWF0dGVyLmdldERlZmF1bHRWYWx1ZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZ2V0SXRlbUlkQnlDb2x1bW4gKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBjb2x1bW46IENvbHVtbkluZm8pOiBJdGVtSWQge1xuXHRcdGlmIChjb2x1bW4ubGV2ZWwgPT09IDApIHtcblx0XHRcdGlmIChjb2x1bW4uYXBpQ29sdW1uLnR5cGUgPT09ICdsaW5rJyAmJiBpdGVtRW50cnkucGFyZW50ICE9PSBudWxsKVxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5LnBhcmVudC5pdGVtSWQ7XG5cblx0XHRcdHJldHVybiBpdGVtRW50cnkuZ2V0RmllbGRzKClbY29sdW1uLnBhdGhdO1xuXHRcdH1cblxuXHRcdHJldHVybiBpdGVtRW50cnkuZGVyaXZlZFtjb2x1bW4ucGF0aF07XG5cdH1cblxuXHRwcml2YXRlIGZldGNoRGVyaXZlZFZhbHVlc0J5Q29sdW1uIChcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXG5cdFx0cm9vdENvbHVtbjogQ29sdW1uSW5mbyxcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8dm9pZCB8IEl0ZW1FbnRyeVtdPiB7XG5cdFx0Y29uc3QgY2hpbGRDb2x1bW5zID0gcm9vdENvbHVtbi5jaGlsZHJlbjtcblxuXHRcdGlmIChjaGlsZENvbHVtbnMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xuXG5cdFx0Y29uc3QgZmlyc3RDaGlsZCA9IGNoaWxkQ29sdW1uc1swXTtcblxuXHRcdGlmIChjaGlsZENvbHVtbnMubGVuZ3RoID09PSAxICYmIGZpcnN0Q2hpbGQuYXBpQ29sdW1uLnR5cGUgPT09ICdpZCcpIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxuXHRcdFx0XHRpdGVtRW50cnkuZGVyaXZlZFtmaXJzdENoaWxkLnBhdGhdID0gdGhpcy5nZXRJdGVtSWRCeUNvbHVtbihpdGVtRW50cnksIHJvb3RDb2x1bW4pO1xuXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaXRlbUlkTWFwOiB7W2l0ZW1JZDogc3RyaW5nXTogSXRlbUVudHJ5W119ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0Y29uc3QgaXRlbUlkID0gdGhpcy5nZXRJdGVtSWRCeUNvbHVtbihpdGVtRW50cnksIHJvb3RDb2x1bW4pO1xuXG5cdFx0XHRpZiAoaXRlbUlkTWFwW2l0ZW1JZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0aXRlbUlkTWFwW2l0ZW1JZF0gPSBbXTtcblxuXHRcdFx0aXRlbUlkTWFwW2l0ZW1JZF0ucHVzaChpdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdGlmIChpdGVtSWRNYXAubnVsbCAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0dGhpcy5zZXREZWZhdWx0VmFsdWVzQnlDb2x1bW4oaXRlbUlkTWFwLm51bGwsIHJvb3RDb2x1bW4pO1xuXG5cdFx0Y29uc3QgaXRlbUlkczogSXRlbUlkW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGl0ZW1JZE1hcCkge1xuXHRcdFx0aWYgKGl0ZW1JZCA9PT0gJ251bGwnKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0aXRlbUlkcy5wdXNoKCtpdGVtSWQpO1xuXHRcdH1cblxuXHRcdGlmIChpdGVtSWRzLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcblxuXHRcdGNvbnN0IGNvbHVtbklkczogc3RyaW5nW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNoaWxkQ29sdW1ucylcblx0XHRcdGNvbHVtbklkcy5wdXNoKGNvbHVtbi5pZCk7XG5cblx0XHRyZXR1cm4gdGhpcy5mZXRjaEl0ZW1zKFxuXHRcdFx0PEl0ZW1UeXBlPiByb290Q29sdW1uLml0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkcyxcblx0XHRcdG5ldyBJdGVtRW50cnlPcHRpb25zKHtjb2x1bW5zOiBjb2x1bW5JZHN9KSxcblx0XHRcdGxvY2FsSXRlbUNhY2hlXG5cdFx0KS50aGVuKFxuXHRcdFx0c291cmNlSXRlbUVudHJpZXMgPT4ge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBzb3VyY2VJdGVtRW50cmllcykge1xuXHRcdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeUZpZWxkcyA9IGl0ZW1FbnRyeS5nZXRGaWVsZHMoKTtcblx0XHRcdFx0XHRjb25zdCBkZXN0aW5hdGlvbkl0ZW1FbnRyaWVzID0gaXRlbUlkTWFwW2l0ZW1FbnRyeS5pdGVtSWRdO1xuXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBkZXN0aW5hdGlvbkl0ZW1FbnRyeSBvZiBkZXN0aW5hdGlvbkl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjaGlsZENvbHVtbnMpXG5cdFx0XHRcdFx0XHRcdGRlc3RpbmF0aW9uSXRlbUVudHJ5LmRlcml2ZWRbY29sdW1uLnBhdGhdID0gaXRlbUVudHJ5RmllbGRzW2NvbHVtbi5pZF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb2x2ZURlcml2ZWRWYWx1ZXMoaXRlbUVudHJpZXMsIGNoaWxkQ29sdW1ucywgbG9jYWxJdGVtQ2FjaGUpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRyZXF1ZXN0SXRlbSAoaXRlbUVudHJ5OiBJdGVtRW50cnksIHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyA9IGl0ZW1FbnRyeS5jb2x1bW5zLnJlcXVlc3QpIHtcblx0XHRyZXR1cm4gdGhpcy5yZXF1ZXN0SXRlbXMoaXRlbUVudHJ5Lml0ZW1UeXBlLCBbaXRlbUVudHJ5Lml0ZW1JZF0sIHJlcXVlc3RDb2x1bW5zKTtcblx0fVxuXG5cdHJlcXVlc3RJdGVtcyAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWRzOiBJdGVtSWRbXSwgY29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMpOiBQcm9taXNlSW50ZXJmYWNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoaXRlbVR5cGUsIHtpZDogaXRlbUlkc30sIHtbaXRlbVR5cGVdOiBjb2x1bW5zfSk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEFwaVJlc3BvbnNlUHJvY2Vzc29yLCBDb2x1bW5FeHBhbnNpb24sIENvbHVtblNldCwgSXRlbUhhbmRsZXIsIFF1ZXJ5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSwgQ29sdW1uU2V0RmFjdG9yeSwgSXRlbUVudHJ5RmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSwgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlTGlicmFyeUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtcblx0QXBpUXVlcnksXG5cdEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRBcGlSZXNwb25zZSxcblx0RW50cnlQYXJlbnROdWxsLFxuXHRJdGVtSWQsXG5cdEl0ZW1UeXBlLFxuXHRQcm9taXNlSW50ZXJmYWNlXG59IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgcGF0aEV4aXN0cyB9IGZyb20gJy4vVXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBJdGVtUmVxdWVzdFNlcnZpY2Uge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5RmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeSxcblx0XHRwcml2YXRlIHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlXG5cdCkge1xuXHR9XG5cblx0cmVxdWVzdEl0ZW0gKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQsIGNvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zKTogUHJvbWlzZUludGVyZmFjZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0ge1xuXHRcdFx0W2l0ZW1UeXBlXTogY29sdW1uc1xuXHRcdH07XG5cblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0e2lkOiBpdGVtSWR9LFxuXHRcdFx0cmVxdWVzdENvbHVtbnNcblx0XHQpO1xuXHR9XG5cblx0cmVxdWVzdEl0ZW1zIChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRxdWVyeTogQXBpUXVlcnkgPSBjb2xsZWN0aW9uRW50cnkucXVlcnkub2JqZWN0LFxuXHRcdGNvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zID0gY29sbGVjdGlvbkVudHJ5Lm9wdGlvbnMuY29sdW1uc1xuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGU7XG5cblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5yZXF1ZXN0U2tlbGV0b24oXG5cdFx0XHR7XG5cdFx0XHRcdHJlcXVlc3RUeXBlOiAncXVlcnknLFxuXHRcdFx0XHRpdGVtVHlwZTogaXRlbVR5cGUsXG5cdFx0XHRcdGNvbHVtbnM6IHtbaXRlbVR5cGVdOiBjb2x1bW5zfSxcblx0XHRcdFx0cXVlcnk6IHF1ZXJ5LFxuXHRcdFx0XHRsaW1pdDogY29sbGVjdGlvbkVudHJ5Lm9wdGlvbnMubGltaXRcblx0XHRcdH1cblx0XHQpO1xuXHR9XG5cblx0cmVxdWVzdExpbmtJdGVtcyAoXG5cdFx0cGFyZW50VHlwZTogSXRlbVR5cGUsXG5cdFx0cGFyZW50SWRBcnJheTogSXRlbUlkW10sXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHF1ZXJ5OiBBcGlRdWVyeSxcblx0XHRjb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1uc1xuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSB7XG5cdFx0XHRbaXRlbVR5cGVdOiBjb2x1bW5zXG5cdFx0fTtcblxuXHRcdHJldHVybiBxdWVyeSA9PT0gbnVsbCA/XG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KFxuXHRcdFx0XHRwYXJlbnRUeXBlLFxuXHRcdFx0XHR7aWQ6IHBhcmVudElkQXJyYXl9LFxuXHRcdFx0XHRyZXF1ZXN0Q29sdW1uc1xuXHRcdFx0KSA6XG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KFxuXHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UuYWRkQW5kQ29uZGl0aW9uKFxuXHRcdFx0XHRcdHF1ZXJ5LFxuXHRcdFx0XHRcdHtsaW5rZWRUbzogcGFyZW50VHlwZSwgcXVlcnk6IHtpZDogcGFyZW50SWRBcnJheX19XG5cdFx0XHRcdCksXG5cdFx0XHRcdHJlcXVlc3RDb2x1bW5zIC8vIHNob3VsZCBjb250YWluIGEgZGVyaXZlZCBjb2x1bW4gdGhhdCByZWZlcnMgdG8gdGhlIHBhcmVudFxuXHRcdFx0KTtcblx0fVxuXG5cdHByb2Nlc3NFeHBhbnNpb24gKFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyxcblx0XHRyZXNwb25zZTogQXBpUmVzcG9uc2UsXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXVxuXHQpIHtcblx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRyZXF1ZXN0Q29sdW1ucyxcblx0XHRcdHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpXG5cdFx0KTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRpZiAoaXRlbUVudHJ5LmlzTG9jYWwoKSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdHRoaXMuaGFuZGxlQ2FjaGVkSXRlbShpdGVtRW50cnksIHJlc3BvbnNlLCBjb2x1bW5FeHBhbnNpb24pO1xuXHRcdH1cblxuXHRcdHJldHVybiBjb2x1bW5FeHBhbnNpb247XG5cdH1cblxuXHRwcm9jZXNzUmVzcG9uc2UgKFxuXHRcdHJlc3BvbnNlOiBBcGlSZXNwb25zZSxcblx0XHRpZEFycmF5OiBJdGVtSWRbXSxcblx0XHRwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCxcblx0XHRjb2x1bW5TZXQ6IENvbHVtblNldCxcblx0XHRjb2x1bW5FeHBhbnNpb246IENvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRjb2x1bW5TZXQuaXRlbVR5cGUsXG5cdFx0XHRjb2x1bW5TZXQucmVxdWVzdENvbHVtbnNUcnVlID8gdHJ1ZSA6IGNvbHVtblNldC5yZXF1ZXN0LFxuXHRcdFx0Y29sdW1uU2V0LnJlc3BvbnNlXG5cdFx0KVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1FbnRyeVtdPiB7XG5cdFx0Y29uc3QgaXRlbUhhbmRsZXIgPSB0aGlzLml0ZW1IYW5kbGVyO1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sdW1uU2V0Lml0ZW1UeXBlO1xuXHRcdGNvbnN0IHJvb3RDb2x1bW5zID0gY29sdW1uU2V0LnJvb3Q7XG5cdFx0Y29uc3QgaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XG5cdFx0Y29uc3QgZGVmZXJyZWRFbnRyaWVzOiBBcnJheTxQcm9taXNlSW50ZXJmYWNlPEl0ZW1FbnRyeT4+ID0gW107XG5cblx0XHQvLyBzaG91bGQgYmUgZmFzdC4uLlxuXHRcdGZvciAoY29uc3QgaXRlbUlkIG9mIGlkQXJyYXkpIHtcblx0XHRcdGxldCBpdGVtRW50cnkgPSBpdGVtSGFuZGxlci5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkKTtcblxuXHRcdFx0aWYgKGl0ZW1FbnRyeSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGl0ZW1FbnRyeSA9IHRoaXMuaXRlbUVudHJ5RmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRcdFx0aXRlbUlkLFxuXHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQpLFxuXHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCByb290Q29sdW1ucyksXG5cdFx0XHRcdFx0Y29sdW1uU2V0XG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0aXRlbUhhbmRsZXIuZW50cmllcy5hZGQoaXRlbUVudHJ5KTtcblx0XHRcdFx0aXRlbUVudHJpZXMucHVzaChpdGVtRW50cnkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKGl0ZW1FbnRyeS5pc0RlZmVycmVkKCkpIHtcblx0XHRcdFx0XHRpZiAoaXRlbUVudHJ5LmRlZmVyUmVxdWVzdCkge1xuXHRcdFx0XHRcdFx0aXRlbUVudHJpZXMucHVzaChcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LnJlc29sdmVEZWZlcnJlZChcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKSxcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgcm9vdENvbHVtbnMpLFxuXHRcdFx0XHRcdFx0XHRcdGNvbHVtblNldFxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0gZWxzZVxuXHRcdFx0XHRcdFx0ZGVmZXJyZWRFbnRyaWVzLnB1c2goaXRlbUVudHJ5LmdldFByb21pc2UoKSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoaXRlbUVudHJ5LnJlbG9hZFF1ZXVlZCkge1xuXHRcdFx0XHRcdGl0ZW1FbnRyeS5yZWxvYWRRdWV1ZWQgPSBmYWxzZTtcblx0XHRcdFx0XHRpdGVtRW50cnkudXBkYXRlRmllbGRzKFxuXHRcdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCksXG5cdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgcm9vdENvbHVtbnMpLFxuXHRcdFx0XHRcdFx0ZmFsc2Vcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGl0ZW1FbnRyaWVzLnB1c2goaXRlbUVudHJ5KTtcblx0XHRcdFx0fSBlbHNlXG5cdFx0XHRcdFx0aXRlbUVudHJpZXMucHVzaCh0aGlzLmhhbmRsZUNhY2hlZEl0ZW0oaXRlbUVudHJ5LCByZXNwb25zZSwgY29sdW1uRXhwYW5zaW9uKSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChwYXJlbnQgIT09IG51bGwpXG5cdFx0XHRcdGl0ZW1FbnRyeS5wYXJlbnQgPSBwYXJlbnQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKGRlZmVycmVkRW50cmllcykudGhlbihcblx0XHRcdHJlc29sdmVkRW50cmllcyA9PiB7XG5cdFx0XHRcdGZvciAoY29uc3QgcmVzb2x2ZWRFbnRyeSBvZiByZXNvbHZlZEVudHJpZXMpIHtcblx0XHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKFxuXHRcdFx0XHRcdFx0dGhpcy5oYW5kbGVDYWNoZWRJdGVtKFxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlZEVudHJ5LFxuXHRcdFx0XHRcdFx0XHRyZXNwb25zZSxcblx0XHRcdFx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBpdGVtRW50cmllcztcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0aGFuZGxlQ2FjaGVkSXRlbSAoaXRlbUVudHJ5OiBJdGVtRW50cnksIHJlc3BvbnNlOiBBcGlSZXNwb25zZSwgY29sdW1uRXhwYW5zaW9uOiBDb2x1bW5FeHBhbnNpb24pIHtcblx0XHRjb25zdCBleHBhbnNpb25SZXN1bHQgPSBjb2x1bW5FeHBhbnNpb24ucnVuKGl0ZW1FbnRyeS5jb2x1bW5zKTtcblxuXHRcdHJldHVybiBleHBhbnNpb25SZXN1bHQgPT09IG51bGwgP1xuXHRcdFx0aXRlbUVudHJ5IDpcblx0XHRcdGl0ZW1FbnRyeS5leHBhbmQoXG5cdFx0XHRcdHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZCksXG5cdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChcblx0XHRcdFx0XHRpdGVtRW50cnkuaXRlbVR5cGUsXG5cdFx0XHRcdFx0aXRlbUVudHJ5Lml0ZW1JZCxcblx0XHRcdFx0XHRleHBhbnNpb25SZXN1bHQuZGlmZmVyZW5jZS5yb290XG5cdFx0XHRcdCksXG5cdFx0XHRcdGV4cGFuc2lvblJlc3VsdFxuXHRcdFx0KTtcblx0fVxuXG5cdHByb2Nlc3NMaW5rUmVzcG9uc2UgKFxuXHRcdHJlc3BvbnNlOiBBcGlSZXNwb25zZSxcblx0XHRwYXJlbnRUeXBlOiBJdGVtVHlwZSxcblx0XHRwYXJlbnRJZEFycmF5OiBJdGVtSWRbXSxcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0b3B0aW9uczogYW55XG5cdCkge1xuXHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1ucyA9IHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpO1xuXHRcdGNvbnN0IGNvbHVtblNldCA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIG9wdGlvbnMuY29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKTtcblx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCBvcHRpb25zLmNvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucyk7XG5cdFx0Y29uc3QgcGFyZW50SXRlbXMgPSByZXNwb25zZS5pdGVtc1twYXJlbnRUeXBlXTtcblx0XHRjb25zdCBwcm9taXNlczogYW55ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIG9mIHBhcmVudElkQXJyYXkpIHtcblx0XHRcdHByb21pc2VzW3BhcmVudElkXSA9IHBhdGhFeGlzdHMocGFyZW50SXRlbXMsIFtwYXJlbnRJZCwgJ2xpbmtzJywgaXRlbVR5cGVdKSA/XG5cdFx0XHRcdHRoaXMucHJvY2Vzc1Jlc3BvbnNlKFxuXHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHRcdHBhcmVudEl0ZW1zW3BhcmVudElkXS5saW5rc1tpdGVtVHlwZV0sXG5cdFx0XHRcdFx0e2l0ZW1UeXBlOiBwYXJlbnRUeXBlLCBpdGVtSWQ6IHBhcmVudElkfSxcblx0XHRcdFx0XHRjb2x1bW5TZXQsXG5cdFx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uXG5cdFx0XHRcdCkgOlxuXHRcdFx0XHRbXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocHJvbWlzZXMpLnRoZW4oXG5cdFx0XHRyZXNvbHZlZCA9PiB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0aXRlbXM6IHJlc29sdmVkLFxuXHRcdFx0XHRcdGNvbHVtbnM6IGNvbHVtblNldCxcblx0XHRcdFx0XHRjb2x1bW5FeHBhbnNpb246IGNvbHVtbkV4cGFuc2lvblxuXHRcdFx0XHR9O1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IERVUExJQ0FURV9LRVlXT1JELCBEVVBMSUNBVEVfUFJFRklYLCBORVdfS0VZV09SRCwgTkVXX1BSRUZJWCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBJdGVtSWQsIFN0YXRlS2V5LCBTdGF0ZUtleVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBLZXlTZXJ2aWNlIHtcblx0c2VwYXJhdG9yOiBzdHJpbmcgPSAnOic7XG5cblx0Y29uc3RydWN0b3IgKCkge31cblxuXHRnZXRTaW5nbGVLZXkgKGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZDogbnVtYmVyIHwgc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gaXRlbVR5cGUgKyB0aGlzLnNlcGFyYXRvciArIGl0ZW1JZDtcblx0fVxuXG5cdGdldENzc0tleSAoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbChhcmd1bWVudHMsICdfJyk7XG5cdH1cblxuXHRwYXJzZVN0YXRlS2V5IChzdGF0ZUtleTogc3RyaW5nKTogU3RhdGVLZXkgfCBudWxsIHtcblx0XHRzdGF0ZUtleSA9IHN0YXRlS2V5LnRvU3RyaW5nKCk7XG5cblx0XHRpZiAoc3RhdGVLZXkuc3Vic3RyaW5nKDAsIE5FV19LRVlXT1JELmxlbmd0aCkgPT09IE5FV19LRVlXT1JEKVxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dHlwZTogU3RhdGVLZXlUeXBlLk5ldyxcblx0XHRcdFx0dGVtcGxhdGU6IHN0YXRlS2V5LnN1YnN0cmluZyhORVdfS0VZV09SRC5sZW5ndGgpIC8vIFRPRE86IHRoaXMgaXMgY3VycmVudGx5IG5vdCBiZWluZyB1c2VkLCByZWV2YWx1YXRlXG5cdFx0XHR9O1xuXG5cdFx0aWYgKHN0YXRlS2V5LnN1YnN0cmluZygwLCBEVVBMSUNBVEVfS0VZV09SRC5sZW5ndGgpID09PSBEVVBMSUNBVEVfS0VZV09SRClcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHR5cGU6IFN0YXRlS2V5VHlwZS5EdXBsaWNhdGUsXG5cdFx0XHRcdGl0ZW1JZDogK3N0YXRlS2V5LnN1YnN0cmluZyhEVVBMSUNBVEVfS0VZV09SRC5sZW5ndGgpXG5cdFx0XHR9O1xuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRnZXREdXBsaWNhdGVTdGF0ZUtleSAoaXRlbUlkOiBzdHJpbmcgfCBudW1iZXIpOiBzdHJpbmcge1xuXHRcdHJldHVybiBEVVBMSUNBVEVfS0VZV09SRCArIGl0ZW1JZDtcblx0fVxuXG5cdGdldE5ld1N0YXRlS2V5ICh0ZW1wbGF0ZVR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIE5FV19LRVlXT1JEICsgdGVtcGxhdGVUeXBlO1xuXHR9XG5cblx0Z2V0TG9jYWxJZCAoKTogSXRlbUlkIHtcblx0XHRyZXR1cm4gKyhORVdfUFJFRklYICsgdGhpcy5nZXRSYW5kb21TdHJpbmcoKSk7XG5cdH1cblxuXHRnZXRMb2NhbER1cGxpY2F0ZUlkICgpOiBJdGVtSWQge1xuXHRcdHJldHVybiArKERVUExJQ0FURV9QUkVGSVggKyB0aGlzLmdldFJhbmRvbVN0cmluZygpKTtcblx0fVxuXG5cdGdldFJhbmRvbVN0cmluZyAoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gKCcnICsgTWF0aC5yYW5kb20oKSkuc3BsaXQoJy4nKVsxXS5zdWJzdHIoMCwgOCk7XG5cdH1cblxuXHQvLyBub3RlOiB0aGUgY2hhbmdlcyBjb21waWxlciB1c2VzIHRoaXNcblx0Ly8gbWlnaHQgYmUgY2FsbGVkIHdpdGggdW5kZWZpbmVkIChpdGVtSGFuZGxlci5jcmVhdGVSZXF1ZXN0KVxuXHRpc0xvY2FsSWQgKGl0ZW1JZDogSXRlbUlkIHwgc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIGl0ZW1JZCAhPT0gdW5kZWZpbmVkICYmICh0aGlzLmlzTmV3SWQoaXRlbUlkKSB8fCB0aGlzLmlzRHVwbGljYXRlSWQoaXRlbUlkKSk7XG5cdH1cblxuXHRpc05ld0lkIChpdGVtSWQ6IEl0ZW1JZCB8IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBpdGVtSWQgPT09IE5FV19LRVlXT1JEIHx8ICgnJyArIGl0ZW1JZCkuc3Vic3RyaW5nKDAsIE5FV19QUkVGSVgubGVuZ3RoKSA9PT0gTkVXX1BSRUZJWDtcblx0fVxuXG5cdGlzRHVwbGljYXRlSWQgKGl0ZW1JZDogSXRlbUlkIHwgc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIGl0ZW1JZCA9PT0gRFVQTElDQVRFX0tFWVdPUkQgfHwgKCcnICsgaXRlbUlkKS5zdWJzdHJpbmcoMCwgRFVQTElDQVRFX1BSRUZJWC5sZW5ndGgpID09PSBEVVBMSUNBVEVfUFJFRklYO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBBcGlSZXNwb25zZVByb2Nlc3NvciwgQ29sbGVjdGlvbk1hdGNoZXIsIENvbHVtblNldCwgTG9jYWxDYWNoZSwgUmVxdWVzdENvbHVtbkV4cGFuc2lvbiB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgRU5UUllfU1RBVFVTIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7XG5cdENvbGxlY3Rpb25FbnRyeSxcblx0Q29sbGVjdGlvbkVudHJ5T3B0aW9ucyxcblx0Q29sbGVjdGlvbkVudHJ5T3B0aW9uc0ludGVyZmFjZSxcblx0Q29sbGVjdGlvblJlc291cmNlLFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zLFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlLCBFZGl0UmVzb3VyY2UsXG5cdEl0ZW1FbnRyeSxcblx0SXRlbUVudHJ5T3B0aW9uc0ludGVyZmFjZSxcblx0SXRlbVJlc291cmNlLFxuXHRJdGVtUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlLCBWaWV3UmVzb3VyY2Vcbn0gZnJvbSAnLi4vbW9kZWxzJztcblxuZXhwb3J0IHR5cGUgRW50cnlQYXJlbnQgPSB7aXRlbVR5cGU6IHN0cmluZywgaXRlbUlkOiBudW1iZXJ9O1xuXG5leHBvcnQgdHlwZSBFbnRyeVBhcmVudE51bGwgPSBFbnRyeVBhcmVudCB8IG51bGw7XG5cbmV4cG9ydCB0eXBlIEZpZWxkTWFwID0ge1xuXHRba2V5OiBzdHJpbmddOiBhbnlcbn07XG5cbmV4cG9ydCB0eXBlIEl0ZW1PcHRpb25zSW50ZXJmYWNlID0gSXRlbUVudHJ5T3B0aW9uc0ludGVyZmFjZSAmIEl0ZW1SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2U7XG5cbmV4cG9ydCB0eXBlIENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlID0gQ29sbGVjdGlvbkVudHJ5T3B0aW9uc0ludGVyZmFjZSAmIENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2U7XG5cbmV4cG9ydCB0eXBlIENvbGxlY3Rpb25EZWZpbml0aW9uID0ge1xuXHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdG9wdGlvbnM6IHtlbnRyeTogQ29sbGVjdGlvbkVudHJ5T3B0aW9ucywgcmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnN9XG59O1xuXG5leHBvcnQgdHlwZSBMaW5rQ29sbGVjdGlvbkRlZmluaXRpb24gPSB7XG5cdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0bGlua1R5cGU6IEl0ZW1UeXBlLFxuXHRsaW5rSWRBcnJheTogSXRlbUlkW10gfCAoKCkgPT4gSXRlbUlkW10pLFxuXHRsaW5rRmllbGQ6IHN0cmluZyxcblx0b3B0aW9uczoge2VudHJ5OiBDb2xsZWN0aW9uRW50cnlPcHRpb25zLCByZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc31cbn07XG5cbmV4cG9ydCB0eXBlIE9uQ2hhbmdlRnVuY3Rpb24gPSAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UsIHByZXZpb3VzPzogRmllbGRNYXApID0+IHZvaWQ7XG5cbmV4cG9ydCBjb25zdCBlbnVtIFN0YXRlS2V5VHlwZSB7XG5cdE5ldyA9ICduZXcnLFxuXHREdXBsaWNhdGUgPSAnZHVwbGljYXRlJ1xufVxuXG5leHBvcnQgdHlwZSBTdGF0ZUtleSA9IHt0eXBlOiBTdGF0ZUtleVR5cGUsIHRlbXBsYXRlPzogc3RyaW5nLCBpdGVtSWQ/OiBudW1iZXJ9O1xuXG5leHBvcnQgdHlwZSBPblNhdmVDYWxsYmFjayA9IChsb2NhbENhY2hlOiBMb2NhbENhY2hlLCBjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwKSA9PiBhbnk7XG5cbmV4cG9ydCBlbnVtIExvY2FsQ2FjaGVDYWxsYmFja0NvbmRpdGlvbiB7XG5cdEFsd2F5cyA9ICdhbHdheXMnLFxuXHRPbkNsb3NlID0gJ29uQ2xvc2UnLFxuXHRTa2lwT25DbG9zZSA9ICdza2lwT25DbG9zZSdcbn1cblxuZXhwb3J0IHR5cGUgTG9jYWxDYWNoZUNhbGxiYWNrczxUPiA9IHtcblx0YWx3YXlzOiB7W2tleTogc3RyaW5nXTogVH0sXG5cdG9uQ2xvc2U6IHtba2V5OiBzdHJpbmddOiBUfSxcblx0c2tpcE9uQ2xvc2U6IHtba2V5OiBzdHJpbmddOiBUfVxufTtcblxuZXhwb3J0IHR5cGUgU29ja2V0TWVzc2FnZVR5cGUgPSAnZXZlbnQnIHwgJ25vdGlmaWNhdGlvbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU29ja2V0TWVzc2FnZSB7XG5cdGhlYWRlcjoge1xuXHRcdGRvbWFpbjogc3RyaW5nLFxuXHRcdGFjY291bnQ6IHN0cmluZyxcblx0XHRzZW5kZXI6IHtcblx0XHRcdGRpc3BsYXluYW1lOiBzdHJpbmcsXG5cdFx0XHRpdGVtVHlwZTogJ01lZGV3ZXJrZXInLFxuXHRcdFx0aXRlbUlkOiBJdGVtSWQsXG5cdFx0XHRhdXRob3JpemVkOiBib29sZWFuLFxuXHRcdFx0c2Vzc2lvbjogc3RyaW5nXG5cdFx0fSxcblx0XHRtZXNzYWdlSWQ6IHtcblx0XHRcdElkOiBzdHJpbmcsXG5cdFx0XHRzZXF1ZW5jZTogbnVtYmVyLFxuXHRcdFx0YmF0Y2g6IG51bWJlcixcblx0XHRcdHJlcXVlc3Q6IG51bWJlclxuXHRcdH0sXG5cdFx0c2VudDogc3RyaW5nLFxuXHRcdGZvcmNlRXZhbHVhdGU6IGJvb2xlYW5cblx0fTtcblx0Ym9keTogYW55O1xuXHRtZXNzYWdlVHlwZTogU29ja2V0TWVzc2FnZVR5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZVNvY2tldE1lc3NhZ2UgZXh0ZW5kcyBTb2NrZXRNZXNzYWdlIHtcblx0Ym9keToge1xuXHRcdGl0ZW1UeXBlOiAnRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZScsXG5cdFx0W2tleTogc3RyaW5nXTogYW55XG5cdH07XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEl0ZW0gcmVzb3VyY2VcblxuZXhwb3J0IHR5cGUgSXRlbVJlc291cmNlSXRlbUlkTWFwIDxUIGV4dGVuZHMgVmlld1Jlc291cmNlIHwgRWRpdFJlc291cmNlID0gVmlld1Jlc291cmNlPiA9IHtcblx0W2l0ZW1JZDogbnVtYmVyXTogVFxufTtcblxuZXhwb3J0IHR5cGUgSXRlbVJlc291cmNlc0l0ZW1UeXBlTWFwIDxUIGV4dGVuZHMgVmlld1Jlc291cmNlIHwgRWRpdFJlc291cmNlID0gVmlld1Jlc291cmNlPiA9IHtcblx0W2l0ZW1UeXBlOiBzdHJpbmddOiBUW11cbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEl0ZW0gRW50cnlcblxuZXhwb3J0IHR5cGUgSXRlbUlkID0gbnVtYmVyO1xuXG5leHBvcnQgdHlwZSBJdGVtVHlwZSA9IHN0cmluZztcblxuZXhwb3J0IHR5cGUgSXRlbU1hcDxUPiA9IHtcblx0W2l0ZW1UeXBlOiBzdHJpbmddOiB7XG5cdFx0W2l0ZW1JZDogc3RyaW5nXTogVFxuXHR9XG59O1xuXG5leHBvcnQgdHlwZSBJdGVtRW50cnlNYXAgPSBJdGVtTWFwPEl0ZW1FbnRyeT47XG5cbmV4cG9ydCB0eXBlIExpbmtlZEl0ZW1FbnRyeU1hcCA9IHtcblx0aXRlbVR5cGU6IHN0cmluZyxcblx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRjb2x1bW5TZXQ6IENvbHVtblNldFxufTtcblxuZXhwb3J0IHR5cGUgRW50cnlTdGF0dXNNYXA8VD4gPSB7XG5cdFtlbnRyeVN0YXR1czogc3RyaW5nXTogVFtdO1xufTtcblxuZXhwb3J0IHR5cGUgSXRlbUVudHJ5UGFyZW50SWRNYXAgPSB7XG5cdFtwYXJlbnRJZDogbnVtYmVyXTogSXRlbUVudHJ5W107XG59O1xuXG5leHBvcnQgdHlwZSBDb252ZXJzaW9uTWFwID0ge1xuXHRbaXRlbUlkOiBudW1iZXJdOiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBJdGVtSWRDb252ZXJzaW9uTWFwID0ge1xuXHRbaXRlbVR5cGU6IHN0cmluZ106IENvbnZlcnNpb25NYXBcbn07XG5cbmV4cG9ydCB0eXBlIENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAgPSBJdGVtTWFwPGFueT47XG5cbmV4cG9ydCB0eXBlIEl0ZW1FcnJvciA9IHttZXNzYWdlOiBzdHJpbmd9O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBDb2xsZWN0aW9uIEVudHJ5XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5UGFyYW1zID0gYW55OyAvLyBUT0RPXG5cbmV4cG9ydCB0eXBlIENvbGxlY3Rpb25RdWVyeSA9IHtvYmplY3Q6IG9iamVjdCwgc3RyaW5nOiBzdHJpbmd9O1xuXG5leHBvcnQgdHlwZSBRdWVyeUNhbGxiYWNrID0gKHF1ZXJ5UGFyYW1zOiBRdWVyeVBhcmFtcykgPT4gUXVlcnlQYXJhbXM7XG5cbmV4cG9ydCB0eXBlIENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwID0ge1xuXHRbcGFyZW50SWQ6IG51bWJlcl06IENvbGxlY3Rpb25FbnRyeVxufTtcblxuZXhwb3J0IHR5cGUgQ29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXAgPSB7XG5cdFtwYXJlbnRJZDogbnVtYmVyXTogQ29sbGVjdGlvblJlc291cmNlXG59O1xuXG5leHBvcnQgdHlwZSBDb2xsZWN0aW9uTWF0Y2hSZXN1bHQgPSB7XG5cdGZpdHRpbmc6IENvbGxlY3Rpb25FbnRyeVtdLFxuXHRub3RmaXR0aW5nOiBDb2xsZWN0aW9uRW50cnlbXSxcblx0bWF5YmU6IENvbGxlY3Rpb25FbnRyeVtdXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4dGVuZGVkQ29sbGVjdGlvbk1hdGNoUmVzdWx0IGV4dGVuZHMgQ29sbGVjdGlvbk1hdGNoUmVzdWx0IHtcblx0Y29sbGVjdGlvbjogQ29sbGVjdGlvblJlc291cmNlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwZWRFeHRlbmRlZENvbGxlY3Rpb25NYXRjaFJlc3VsdCB7XG5cdFtjb2xsZWN0aW9uSWQ6IG51bWJlcl06IEV4dGVuZGVkQ29sbGVjdGlvbk1hdGNoUmVzdWx0O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBDb2x1bW5zXG5cbmV4cG9ydCB0eXBlIFJlc3BvbnNlQ29sdW1uID0gYW55OyAvLyBUT0RPXG5cbmV4cG9ydCB0eXBlIFJlc3BvbnNlQ29sdW1uTWFwID0ge1xuXHRbaXRlbVR5cGU6IHN0cmluZ106IHtcblx0XHRbY29sdW1uSWQ6IHN0cmluZ106IFJlc3BvbnNlQ29sdW1uXG5cdH1cbn07XG5cbmV4cG9ydCB0eXBlIENvbHVtbkV4cGFuc2lvblJlc3VsdCA9IHtcblx0bWVyZ2VkOiBDb2x1bW5TZXQsXG5cdGRpZmZlcmVuY2U6IENvbHVtblNldFxufTtcblxuZXhwb3J0IHR5cGUgQ29sdW1uU2V0RXhwYW5zaW9uID0ge1xuXHRyZXF1ZXN0OiB7bWVyZ2VkOiBBcGlSZXF1ZXN0Q29sdW1ucywgZGlmZmVyZW5jZTogQXBpUmVxdWVzdENvbHVtbnN9LFxuXHRyZXNwb25zZTogUmVzcG9uc2VDb2x1bW5NYXBcbn07XG5cbmV4cG9ydCB0eXBlIFJvb3RDb2x1bW5NYXAgPSB7W2NvbHVtbklkOiBzdHJpbmddOiB7YXBpQ29sdW1uOiBSZXNwb25zZUNvbHVtbiwgY2hpbGRyZW46IFJvb3RDb2x1bW5NYXB9fTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gQXBpIHJlZmVyZW5jZVxuXG5leHBvcnQgdHlwZSBBcGlSZXNwb25zZSA9IEFwaVJlc3BvbnNlUHJvY2Vzc29yOyAvLyBUT0RPXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEFwaSB0ZW1wbGF0ZSByZXNwb25zZVxuZXhwb3J0IHR5cGUgVGVtcGxhdGVJdGVtUmVzb3VyY2VNYXAgPSB7XG5cdG1haW46IEl0ZW1SZXNvdXJjZTtcblx0bGlua2VkOiBJdGVtUmVzb3VyY2VzSXRlbVR5cGVNYXBcbn07XG5cbmV4cG9ydCB0eXBlIFRlbXBsYXRlSXRlbUVudHJ5TWFwID0ge1xuXHRtYWluOiBJdGVtRW50cnk7XG5cdGxpbmtlZDogTGlua2VkSXRlbUVudHJ5TWFwW107XG59O1xuXG5leHBvcnQgdHlwZSBJdGVtVHlwZU1hcCA9IHtcblx0W2l0ZW1UeXBlOiBzdHJpbmddOiBhbnk7XG59O1xuXG5leHBvcnQgdHlwZSBFbnRyeVN0YXR1czxUPiA9IHtcblx0ZW50cnk6IFQ7XG5cdHN0YXR1czogRU5UUllfU1RBVFVTO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gQXBpIHJlcXVlc3RcblxuZXhwb3J0IHR5cGUgQXBpUXVlcnkgPSBhbnk7IC8vIFRPRE9cblxuZXhwb3J0IHR5cGUgQXBpUmVxdWVzdEl0ZW1WYWx1ZXMgPSB7XG5cdHZhbHVlcz86IGFueSxcblx0bGlua3M/OiB7XG5cdFx0W2l0ZW1UeXBlOiBzdHJpbmddOiBJdGVtSWRbXVxuXHR9XG59O1xuXG5leHBvcnQgdHlwZSBBcGlSZXF1ZXN0SXRlbU1hcCA9IHtcblx0W2l0ZW1UeXBlOiBzdHJpbmddOiB7XG5cdFx0W2l0ZW1JZDogbnVtYmVyXTogQXBpUmVxdWVzdEl0ZW1WYWx1ZXNcblx0fTtcbn07XG5cbmV4cG9ydCB0eXBlIEFwaVJlcXVlc3RDb2x1bW4gPSBzdHJpbmcgfCB7W2NvbHVtbklkOiBzdHJpbmddOiBBcGlSZXF1ZXN0Q29sdW1uW119O1xuXG5leHBvcnQgdHlwZSBBcGlSZXF1ZXN0Q29sdW1ucyA9IEFwaVJlcXVlc3RDb2x1bW5bXSB8IHRydWU7XG5cbmV4cG9ydCB0eXBlIEFwaVJlcXVlc3RDb2x1bW5NYXAgPSB7XG5cdFtpdGVtVHlwZTogc3RyaW5nXTogQXBpUmVxdWVzdENvbHVtbnNcbn07XG5cbmV4cG9ydCB0eXBlIEFwaVJlcXVlc3RMaW1pdCA9IHtcblx0ZmllbGQ6IHN0cmluZyxcblx0bGltaXQ6IG51bWJlcixcblx0b2Zmc2V0PzogbnVtYmVyLFxuXHRvcmRlcj86ICdkZXNjJyB8ICdhc2MnXG59O1xuXG5leHBvcnQgdHlwZSBBcGlSZXF1ZXN0TW92ZUl0ZW1zID0ge1xuXHRbaXRlbVR5cGU6IHN0cmluZ106IEl0ZW1JZFtdXG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBDcmVhdGUgcmVxdWVzdFxuXG5leHBvcnQgdHlwZSBDcmVhdGVSZXF1ZXN0RW50cnkgPSB7XG5cdHJlcXVlc3Q6IHtcblx0XHRyZXF1ZXN0VHlwZTogJ2NyZWF0ZScsXG5cdFx0aXRlbVR5cGU/OiBJdGVtVHlwZSxcblx0XHRwYXJlbnRUeXBlPzogSXRlbVR5cGUsXG5cdFx0cGFyZW50SWQ/OiB7W2l0ZW1JZDogc3RyaW5nXTogSXRlbUlkfSxcblx0XHRpdGVtczogQXBpUmVxdWVzdEl0ZW1NYXAsXG5cdFx0Y29sdW1uczogQXBpUmVxdWVzdENvbHVtbk1hcFxuXHR9LFxuXHRjb2x1bW5zOiBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uLFxuXHRpdGVtczogSXRlbUVudHJ5TWFwLFxuXHRjb2xsZWN0aW9uczogQ29sbGVjdGlvbk1hdGNoZXJcbn07XG4iLCJleHBvcnQgKiBmcm9tICcuL0l0ZW1UeXBlc0NvbGxlY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9Qcm9taXNlSW50ZXJmYWNlJztcbiIsImltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSwgSXRlbUNhY2hlLCBMb2NrU2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHtcblx0Q2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXG5cdENvbGxlY3Rpb25DYWNoZUZhY3RvcnksXG5cdENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdEl0ZW1DYWNoZUZhY3RvcnksXG5cdEl0ZW1SZXNvdXJjZUZhY3Rvcnlcbn0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7XG5cdENvbGxlY3Rpb25FZGl0UmVzb3VyY2UsXG5cdENvbGxlY3Rpb25FbnRyeSxcblx0Q29sbGVjdGlvblJlc291cmNlLFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlLCBDb2xsZWN0aW9uVmlld1Jlc291cmNlLCBFZGl0UmVzb3VyY2UsXG5cdEl0ZW1FbnRyeSxcblx0SXRlbVJlc291cmNlLCBWaWV3UmVzb3VyY2Vcbn0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7XG5cdENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwLFxuXHRDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwLFxuXHRJdGVtSWRDb252ZXJzaW9uTWFwLFxuXHRJdGVtT3B0aW9uc0ludGVyZmFjZSxcblx0TG9jYWxDYWNoZUNhbGxiYWNrQ29uZGl0aW9uLFxuXHRMb2NhbENhY2hlQ2FsbGJhY2tzLFxuXHRPblNhdmVDYWxsYmFjayxcblx0UHJvbWlzZUludGVyZmFjZVxufSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gJy4vVXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBMb2NhbENhY2hlIHtcblx0aXRlbXM6IEl0ZW1DYWNoZTtcblx0cm9vdEl0ZW06IEl0ZW1FbnRyeSB8IHVuZGVmaW5lZDtcblx0Y29sbGVjdGlvbnM6IENvbGxlY3Rpb25DYWNoZTtcblx0ZGVmZXJyZWRDb2xsZWN0aW9uczogQ29sbGVjdGlvbkNhY2hlO1xuXHR0YWJSZXF1ZXN0UGFyYW1ldGVycyA9IHt9O1xuXG5cdGlzU2F2aW5nOiBib29sZWFuID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBjYWxsYmFja3M6IHtcblx0XHRvbkJlZm9yZVNhdmU6IExvY2FsQ2FjaGVDYWxsYmFja3M8KGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUpID0+IGFueT4sXG5cdFx0b25TYXZlU3VjY2VzczogTG9jYWxDYWNoZUNhbGxiYWNrczxPblNhdmVDYWxsYmFjaz4sXG5cdH0gPSB7XG5cdFx0b25CZWZvcmVTYXZlOiB7YWx3YXlzOiB7fSwgb25DbG9zZToge30sIHNraXBPbkNsb3NlOiB7fX0sXG5cdFx0b25TYXZlU3VjY2Vzczoge2Fsd2F5czoge30sIG9uQ2xvc2U6IHt9LCBza2lwT25DbG9zZToge319XG5cdH07XG5cblx0cHJpdmF0ZSBjaGFuZ2VzSW50ZXJ2YWw6IG51bGwgfCBudW1iZXIgPSBudWxsO1xuXHRoYXNDaGFuZ2VzID0gZmFsc2U7XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBsb2NrU2VydmljZTogTG9ja1NlcnZpY2UsXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlRmFjdG9yeTogQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIGNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5OiBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcblx0XHRwcml2YXRlIGl0ZW1DYWNoZUZhY3Rvcnk6IEl0ZW1DYWNoZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5OiBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxuXHRcdHB1YmxpYyBpZDogc3RyaW5nID0gJydcblx0KSB7XG5cdFx0dGhpcy5pdGVtcyA9IHRoaXMuaXRlbUNhY2hlRmFjdG9yeS5jb25zdHJ1Y3QoKTtcblx0XHR0aGlzLmNvbGxlY3Rpb25zID0gdGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xuXHRcdHRoaXMuZGVmZXJyZWRDb2xsZWN0aW9ucyA9IHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeS5jb25zdHJ1Y3QoKTtcblx0fVxuXG5cdGNyZWF0ZUl0ZW1SZXNvdXJjZSAoXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnksXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdDogdHJ1ZX0sXG5cdFx0aXNSb290PzogYm9vbGVhbixcblx0XHRpc05ldz86IGJvb2xlYW5cblx0KTogRWRpdFJlc291cmNlO1xuXHRjcmVhdGVJdGVtUmVzb3VyY2UgKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5LFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlLFxuXHRcdGlzUm9vdD86IGJvb2xlYW4sXG5cdFx0aXNOZXc/OiBib29sZWFuXG5cdCk6IFZpZXdSZXNvdXJjZTtcblx0Y3JlYXRlSXRlbVJlc291cmNlIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgb3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UsIGlzUm9vdDogYm9vbGVhbiA9IGZhbHNlLCBpc05ldz86IGJvb2xlYW4pIHtcblx0XHRpZiAoaXNSb290KVxuXHRcdFx0dGhpcy5yb290SXRlbSA9IGl0ZW1FbnRyeTtcblxuXHRcdG9wdGlvbnMub25EZWFjdGl2YXRlID0gKF9pdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gdGhpcy5vbkRlYWN0aXZhdGVJdGVtKF9pdGVtRW50cnkpO1xuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbUVudHJ5LCBvcHRpb25zLCBpc05ldyk7XG5cdH1cblxuXHRjcmVhdGVJdGVtUmVzb3VyY2VzIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlICYge2VkaXQ6IHRydWV9KTogRWRpdFJlc291cmNlW107XG5cdGNyZWF0ZUl0ZW1SZXNvdXJjZXMgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgb3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UpOiBWaWV3UmVzb3VyY2VbXTtcblx0Y3JlYXRlSXRlbVJlc291cmNlcyAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCBvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSkge1xuXHRcdG9wdGlvbnMub25EZWFjdGl2YXRlID0gKF9pdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gdGhpcy5vbkRlYWN0aXZhdGVJdGVtKF9pdGVtRW50cnkpO1xuXG5cdFx0Y29uc3QgY29uc3RydWN0b3IgPSB0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnkuZ2V0Q29uc3RydWN0b3Iob3B0aW9ucyk7XG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXG5cdFx0XHRyZXN1bHQucHVzaChjb25zdHJ1Y3RvcihpdGVtRW50cnkpKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UgKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdHJlc291cmNlT3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0SXRlbXM6IHRydWUsIGVkaXRDb2xsZWN0aW9uOiB0cnVlfVxuXHQpOiBDb2xsZWN0aW9uRWRpdFJlc291cmNlPEVkaXRSZXNvdXJjZT47XG5cblx0Y3JlYXRlQ29sbGVjdGlvblJlc291cmNlIChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRyZXNvdXJjZU9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdENvbGxlY3Rpb246IHRydWV9XG5cdCk6IENvbGxlY3Rpb25FZGl0UmVzb3VyY2U8Vmlld1Jlc291cmNlPjtcblxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UgKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdHJlc291cmNlT3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0SXRlbXM6IHRydWV9XG5cdCk6IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8RWRpdFJlc291cmNlPjtcblxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UgKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdHJlc291cmNlT3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZVxuXHQpOiBDb2xsZWN0aW9uVmlld1Jlc291cmNlPFZpZXdSZXNvdXJjZT47XG5cblx0Y3JlYXRlQ29sbGVjdGlvblJlc291cmNlIChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRyZXNvdXJjZU9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2Vcblx0KTogQ29sbGVjdGlvblJlc291cmNlPEl0ZW1SZXNvdXJjZT4ge1xuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkuY29uc3RydWN0KGNvbGxlY3Rpb25FbnRyeSwgcmVzb3VyY2VPcHRpb25zLCB0aGlzKTtcblx0fVxuXG5cdGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZXMgKFxuXHRcdGNvbGxlY3Rpb25FbnRyaWVzOiBDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCxcblx0XHRyZXNvdXJjZU9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2Vcblx0KToge1twYXJlbnRJZDogc3RyaW5nXTogQ29sbGVjdGlvblJlc291cmNlfSB7XG5cdFx0Y29uc3QgcmVzdWx0OiB7W3BhcmVudElkOiBzdHJpbmddOiBDb2xsZWN0aW9uUmVzb3VyY2V9ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGNvbGxlY3Rpb25FbnRyaWVzKVxuXHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IHRoaXMuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlKGNvbGxlY3Rpb25FbnRyaWVzW3BhcmVudElkXSwgcmVzb3VyY2VPcHRpb25zKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRjbGVhckl0ZW0gKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlKTogdm9pZCB7XG5cdFx0dGhpcy5jbGVhckl0ZW1FbnRyeShpdGVtUmVzb3VyY2UuZW50cnkpO1xuXHR9XG5cblx0Y2xlYXJJdGVtRW50cnkgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KTogdm9pZCB7XG5cdFx0dGhpcy5pdGVtcy5jbGVhcihpdGVtRW50cnkpO1xuXHRcdGl0ZW1FbnRyeS5jbGVhclJlc291cmNlcygpO1xuXHR9XG5cblx0Y2xlYXJDb2xsZWN0aW9uIChjb2xsZWN0aW9uUmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSk6IHZvaWQge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGNvbGxlY3Rpb25SZXNvdXJjZS5lbnRyeTtcblxuXHRcdHRoaXMuY29sbGVjdGlvbnMuY2xlYXIoY29sbGVjdGlvbkVudHJ5KTtcblx0XHRjb2xsZWN0aW9uRW50cnkuY2xlYXJSZXNvdXJjZXMoKTtcblx0fVxuXG5cdGNsZWFyUmVzb3VyY2VzIChpc1N1YlRhYkNoYW5nZTogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG5cdFx0dGhpcy5pdGVtcy5mb3JFYWNoKFxuXHRcdFx0KGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBpdGVtRW50cnkuY2xlYXJSZXNvdXJjZXMoKVxuXHRcdCk7XG5cblx0XHR0aGlzLmNvbGxlY3Rpb25zLmZvckVhY2goXG5cdFx0XHQoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpID0+IGNvbGxlY3Rpb25FbnRyeS5jbGVhclJlc291cmNlcyhpc1N1YlRhYkNoYW5nZSlcblx0XHQpO1xuXG5cdFx0dGhpcy5kZWZlcnJlZENvbGxlY3Rpb25zLmNsZWFyKCk7XG5cdH1cblxuXHR1cGRhdGVTaW5nbGVJdGVtcyAoY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCk6IHZvaWQge1xuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gY29udmVyc2lvbk1hcCkge1xuXHRcdFx0Zm9yIChjb25zdCBvbGRJdGVtSWQgaW4gY29udmVyc2lvbk1hcFtpdGVtVHlwZV0pIHtcblx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5pdGVtcy5nZXQoaXRlbVR5cGUsIHBhcnNlSW50KG9sZEl0ZW1JZCwgMTApKTtcblxuXHRcdFx0XHRpZiAoaXRlbUVudHJ5ID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0dGhpcy5pdGVtcy51cGRhdGVJdGVtSWQoaXRlbUVudHJ5LCBwYXJzZUludChvbGRJdGVtSWQsIDEwKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gcmVzb3VyY2VzIHdpbGwgYmUgY2xlYXJlZCBsYXRlciAoY2xlYXIgZnVuY3Rpb24pXG5cdHJldmVydENoYW5nZXMgKCk6IFByb21pc2VJbnRlcmZhY2U8dm9pZD4ge1xuXHRcdHRoaXMuaXRlbXMuZm9yRWFjaChcblx0XHRcdChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gaXRlbUVudHJ5LnJlc2V0TW9kaWZpZWQoKVxuXHRcdCk7XG5cblx0XHR0aGlzLmNvbGxlY3Rpb25zLmZvckVhY2goXG5cdFx0XHQoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpID0+IHRoaXMucmVzZXRDb2xsZWN0aW9uKGNvbGxlY3Rpb25FbnRyeSlcblx0XHQpO1xuXG5cdFx0dGhpcy5oYXNDaGFuZ2VzID0gZmFsc2U7XG5cblx0XHRyZXR1cm4gdGhpcy5pc0xvY2thYmxlKCkgP1xuXHRcdFx0dGhpcy5sb2NrU2VydmljZS5kZWxldGVMb2NrKHRoaXMucm9vdEl0ZW0hKSA6XG5cdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcblx0fVxuXG5cdHJlc2V0Q29sbGVjdGlvbiAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpOiB2b2lkIHtcblx0XHQvLyByZXZlcnQgY2hhbmdlcyBmb3IgKmFsbCogY29sbGVjdGlvbnMsIGl0ZW1zIG1pZ2h0IGhhdmUgYmVlbiBhZGRlZCBvbiByZXNvbHZlXG5cdFx0Y29sbGVjdGlvbkVudHJ5Lml0ZW1zID0gY29sbGVjdGlvbkVudHJ5LmluaXRpYWwuc2xpY2UoKTtcblxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaGFzSXRlbUVkaXRSZXNvdXJjZXMpIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGNvbGxlY3Rpb25FbnRyeS5pdGVtcylcblx0XHRcdFx0aXRlbUVudHJ5LnJlc2V0TW9kaWZpZWQoKTtcblx0XHR9XG5cdH1cblxuXHRkZXRlY3RDaGFuZ2VzICgpOiBib29sZWFuIHtcblx0XHRpZiAodGhpcy5oYXNDaGFuZ2VzKVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cblx0XHRpZiAodGhpcy5pdGVtcy5zb21lKChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gaXRlbUVudHJ5Lmhhc0NoYW5nZXMoKSkpXG5cdFx0XHRyZXR1cm4gdGhpcy5oYXNDaGFuZ2VzID0gdHJ1ZTtcblxuXHRcdHJldHVybiB0aGlzLmhhc0NoYW5nZXMgPSB0aGlzLmNvbGxlY3Rpb25zLnNvbWUoKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiB0aGlzLmNvbGxlY3Rpb25IYXNDaGFuZ2VzKGNvbGxlY3Rpb25FbnRyeSkpO1xuXHR9XG5cblx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFzQ2hhbmdlcyAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpOiBib29sZWFuIHtcblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5Lmhhc0VkaXRSZXNvdXJjZXMgJiYgKGNvbGxlY3Rpb25FbnRyeS5oYXNBZGRlZEl0ZW1zKCkgfHwgY29sbGVjdGlvbkVudHJ5Lmhhc1JlbW92ZWRJdGVtcygpKSlcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0cmV0dXJuIGNvbGxlY3Rpb25FbnRyeS5oYXNJdGVtRWRpdFJlc291cmNlcyAmJiBjb2xsZWN0aW9uRW50cnkuaGFzVXBkYXRlZEl0ZW1zKCk7XG5cdH1cblxuXHRpc0xvY2thYmxlICgpOiBib29sZWFuIHtcblx0XHRpZiAodGhpcy5yb290SXRlbSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0cmV0dXJuIHRoaXMucm9vdEl0ZW0uaXNMb2NrYWJsZSgpO1xuXHR9XG5cblx0c2F2ZSAoXG5cdFx0Y2xvc2VUYWIgPSBmYWxzZSxcblx0XHRwYXJhbWV0ZXJzOiBDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwID0ge30sXG5cdFx0YnJlYWtVcEJ5UGFyZW50PzogYm9vbGVhbixcblx0XHRvbkFmdGVyQ3JlYXRlQ2FsbGJhY2s/OiAoY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCkgPT4gdm9pZFxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1JZENvbnZlcnNpb25NYXA+IHtcblx0XHRpZiAodGhpcy5pc1NhdmluZylcblx0XHRcdHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5yZWplY3QoKTtcblxuXHRcdHRoaXMuaXNTYXZpbmcgPSB0cnVlO1xuXG5cdFx0dGhpcy5kZXRlY3RDaGFuZ2VzKCk7XG5cdFx0dGhpcy5kaXNhYmxlQ2hhbmdlc1dhdGNoZXIoKTtcblxuXHRcdHJldHVybiAodGhpcy5pc0xvY2thYmxlKCkgPyB0aGlzLmxvY2tTZXJ2aWNlLmZldGNoTG9jayh0aGlzLnJvb3RJdGVtIGFzIEl0ZW1FbnRyeSkgOiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKSkudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZUNhbGxiYWNrRXZlbnQodGhpcy5jYWxsYmFja3Mub25CZWZvcmVTYXZlLCBjYWxsYmFjayA9PiBjYWxsYmFjayh0aGlzKSwgY2xvc2VUYWIpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0Y29uc3QgcmVxdWVzdFBhcmFtZXRlcnMgPSBleHRlbmQoe30sIHRoaXMudGFiUmVxdWVzdFBhcmFtZXRlcnMsIHBhcmFtZXRlcnMpO1xuXG5cdFx0XHRcdHRoaXMudGFiUmVxdWVzdFBhcmFtZXRlcnMgPSB7fTtcblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeS5jb25zdHJ1Y3QoKS5leGVjdXRlKFxuXHRcdFx0XHRcdHRoaXMuaXRlbXMudG9BcnJheSgpLFxuXHRcdFx0XHRcdHRoaXMuY29sbGVjdGlvbnMudG9BcnJheSgpLFxuXHRcdFx0XHRcdHJlcXVlc3RQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdGJyZWFrVXBCeVBhcmVudCxcblx0XHRcdFx0XHRvbkFmdGVyQ3JlYXRlQ2FsbGJhY2tcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHQoY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5pc0xvY2thYmxlKCkpXG5cdFx0XHRcdFx0dGhpcy5sb2NrU2VydmljZS5jbGVhckxvY2sodGhpcy5yb290SXRlbSBhcyBJdGVtRW50cnkpO1xuXG5cdFx0XHRcdHRoaXMuaGFzQ2hhbmdlcyA9IGZhbHNlO1xuXG5cdFx0XHRcdGlmICghY2xvc2VUYWIpXG5cdFx0XHRcdFx0dGhpcy51cGRhdGVTaW5nbGVJdGVtcyhjb252ZXJzaW9uTWFwKTtcblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5leGVjdXRlQ2FsbGJhY2tFdmVudChcblx0XHRcdFx0XHR0aGlzLmNhbGxiYWNrcy5vblNhdmVTdWNjZXNzLFxuXHRcdFx0XHRcdGNhbGxiYWNrID0+IGNhbGxiYWNrKHRoaXMsIGNvbnZlcnNpb25NYXApLFxuXHRcdFx0XHRcdGNsb3NlVGFiXG5cdFx0XHRcdCkudGhlbihcblx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoIWNsb3NlVGFiKVxuXHRcdFx0XHRcdFx0XHR0aGlzLmVuYWJsZUNoYW5nZXNXYXRjaGVyKCk7XG5cblx0XHRcdFx0XHRcdHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcblxuXHRcdFx0XHRcdFx0cmV0dXJuIGNvbnZlcnNpb25NYXA7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLmNhdGNoKChlcnJvcjogYW55KSA9PiB7XG5cdFx0XHR0aGlzLmlzU2F2aW5nID0gZmFsc2U7XG5cblx0XHRcdHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5yZWplY3QoZXJyb3IpO1xuXHRcdH0pO1xuXHR9XG5cblx0b25CZWZvcmVTYXZlIChcblx0XHRrZXk6IHN0cmluZyxcblx0XHRjYWxsYmFjazogKGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUpID0+IGFueSxcblx0XHRjb25kaXRpb246IExvY2FsQ2FjaGVDYWxsYmFja0NvbmRpdGlvbiA9IExvY2FsQ2FjaGVDYWxsYmFja0NvbmRpdGlvbi5BbHdheXNcblx0KTogKCkgPT4gdm9pZCB7XG5cdFx0Y29uc3QgY2FsbGJhY2tzID0gdGhpcy5jYWxsYmFja3Mub25CZWZvcmVTYXZlW2NvbmRpdGlvbl07XG5cblx0XHRjYWxsYmFja3Nba2V5XSA9IGNhbGxiYWNrO1xuXG5cdFx0cmV0dXJuICgpID0+IGRlbGV0ZSBjYWxsYmFja3Nba2V5XTtcblx0fVxuXG5cdG9uU2F2ZVN1Y2Nlc3MgKFxuXHRcdGtleTogc3RyaW5nLFxuXHRcdGNhbGxiYWNrOiBPblNhdmVDYWxsYmFjayxcblx0XHRjb25kaXRpb246IExvY2FsQ2FjaGVDYWxsYmFja0NvbmRpdGlvbiA9IExvY2FsQ2FjaGVDYWxsYmFja0NvbmRpdGlvbi5BbHdheXNcblx0KTogKCkgPT4gdm9pZCB7XG5cdFx0Y29uc3QgY2FsbGJhY2tzID0gdGhpcy5jYWxsYmFja3Mub25TYXZlU3VjY2Vzc1tjb25kaXRpb25dO1xuXG5cdFx0Y2FsbGJhY2tzW2tleV0gPSBjYWxsYmFjaztcblxuXHRcdHJldHVybiAoKSA9PiBkZWxldGUgY2FsbGJhY2tzW2tleV07XG5cdH1cblxuXHRwcml2YXRlIGV4ZWN1dGVDYWxsYmFja0V2ZW50PFQ+IChcblx0XHRjYWxsYmFja3M6IExvY2FsQ2FjaGVDYWxsYmFja3M8VD4sXG5cdFx0ZXhlY3V0ZTogKGNhbGxiYWNrOiBUKSA9PiBhbnksXG5cdFx0Y2xvc2VUYWI6IGJvb2xlYW5cblx0KTogUHJvbWlzZUludGVyZmFjZTxhbnk+IHtcblx0XHRyZXR1cm4gdGhpcy5leGVjdXRlQ2FsbGJhY2tzKGNhbGxiYWNrc1tMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24uQWx3YXlzXSwgZXhlY3V0ZSkudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZUNhbGxiYWNrcyhcblx0XHRcdFx0XHRjYWxsYmFja3NbY2xvc2VUYWIgPyBMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24uT25DbG9zZSA6IExvY2FsQ2FjaGVDYWxsYmFja0NvbmRpdGlvbi5Ta2lwT25DbG9zZV0sXG5cdFx0XHRcdFx0ZXhlY3V0ZVxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIGV4ZWN1dGVDYWxsYmFja3M8VD4gKGNhbGxiYWNrczoge1trZXk6IHN0cmluZ106IFR9LCBleGVjdXRlOiAoY2FsbGJhY2s6IFQpID0+IGFueSkge1xuXHRcdGNvbnN0IHJlc3VsdDoge1trZXk6IHN0cmluZ106IGFueX0gPSB7fTtcblxuXHRcdGZvciAoY29uc3Qga2V5IGluIGNhbGxiYWNrcylcblx0XHRcdHJlc3VsdFtrZXldID0gZXhlY3V0ZShjYWxsYmFja3Nba2V5XSk7XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocmVzdWx0KTtcblx0fVxuXG5cdGVuYWJsZUNoYW5nZXNXYXRjaGVyICgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5jaGFuZ2VzSW50ZXJ2YWwgIT09IG51bGwpIHtcblx0XHRcdGNvbnNvbGUud2FybignQ2hhbmdlcyB3YXRjaGVyIGFscmVhZHkgcnVubmluZyEnLCB0aGlzKTtcblx0XHRcdHRoaXMuZGlzYWJsZUNoYW5nZXNXYXRjaGVyKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5jaGFuZ2VzSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0aWYgKCF0aGlzLmRldGVjdENoYW5nZXMoKSlcblx0XHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdFx0dGhpcy5kaXNhYmxlQ2hhbmdlc1dhdGNoZXIoKTtcblxuXHRcdFx0XHRpZiAodGhpcy5pc0xvY2thYmxlKCkpXG5cdFx0XHRcdFx0dGhpcy5sb2NrU2VydmljZS5mZXRjaExvY2sodGhpcy5yb290SXRlbSBhcyBJdGVtRW50cnkpO1xuXHRcdFx0fSxcblx0XHRcdDMwMDBcblx0XHQpO1xuXHR9XG5cblx0ZGlzYWJsZUNoYW5nZXNXYXRjaGVyICgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5jaGFuZ2VzSW50ZXJ2YWwgPT09IG51bGwpXG5cdFx0XHRyZXR1cm47XG5cblx0XHRjbGVhckludGVydmFsKHRoaXMuY2hhbmdlc0ludGVydmFsKTtcblx0XHR0aGlzLmNoYW5nZXNJbnRlcnZhbCA9IG51bGw7XG5cdH1cblxuXHRvbkRlYWN0aXZhdGVJdGVtIChpdGVtRW50cnk6IEl0ZW1FbnRyeSk6IHZvaWQge1xuXHRcdHRoaXMuY2xlYXJJdGVtRW50cnkoaXRlbUVudHJ5KTtcblx0XHQvLyB0aGlzLmhhc0NoYW5nZXMgPSB0cnVlO1xuXHR9XG5cblx0b25BY3RpdmF0ZUl0ZW0gKGl0ZW1FbnRyeTogSXRlbUVudHJ5KTogdm9pZCB7XG5cdFx0dGhpcy5pdGVtcy5hZGQoaXRlbUVudHJ5KTtcblx0XHQvLyB0aGlzLmhhc0NoYW5nZXMgPSB0cnVlO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSwgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlTGlicmFyeUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IEl0ZW1JZCwgSXRlbU1hcCwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgY3JlYXRlUGF0aCB9IGZyb20gJy4vVXRpbCc7XG5cbmV4cG9ydCB0eXBlIExvY2tUb2tlbiA9IHtpc0ZvcmVpZ246IGZhbHNlLCBpZDogbnVtYmVyLCB0b2tlbjogc3RyaW5nfSB8IHtpc0ZvcmVpZ246IHRydWUsIG1lc3NhZ2U6IHN0cmluZ307XG5cbmV4cG9ydCBjbGFzcyBMb2NrU2VydmljZSB7XG5cdGxvY2tJdGVtczogSXRlbU1hcDxMb2NrVG9rZW4+ID0ge307XG5cblx0cHJvbWlzZXM6IEl0ZW1NYXA8UHJvbWlzZUludGVyZmFjZTxMb2NrVG9rZW4+PiA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZVxuXHQpIHtcblxuXHR9XG5cblx0cHJpdmF0ZSBnZXRWYWx1ZTxUPiAoaXRlbUVudHJ5OiBJdGVtRW50cnksIG1hcDogSXRlbU1hcDxUPik6IHVuZGVmaW5lZCB8IFQge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xuXG5cdFx0aWYgKG1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRyZXR1cm4gbWFwW2l0ZW1UeXBlXVtpdGVtRW50cnkuaXRlbUlkXTtcblx0fVxuXG5cdHByaXZhdGUgc2V0VmFsdWU8VD4gKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCB2YWx1ZTogVCwgbWFwOiBJdGVtTWFwPFQ+KTogVCB7XG5cdFx0cmV0dXJuIGNyZWF0ZVBhdGgoXG5cdFx0XHRtYXAsXG5cdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcblx0XHRcdFt7fSwgdmFsdWVdXG5cdFx0KTtcblx0fVxuXG5cdGdldExvY2tzICgpOiB0aGlzWydsb2NrSXRlbXMnXSB7XG5cdFx0cmV0dXJuIHRoaXMubG9ja0l0ZW1zO1xuXHR9XG5cblx0aGFzTG9jayAobG9ja1Rva2VuSWQ6IEl0ZW1JZCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGxvY2tJdGVtcyA9IHRoaXMubG9ja0l0ZW1zO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBsb2NrSXRlbXMpIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGxvY2tJdGVtc1tpdGVtVHlwZV0pIHtcblx0XHRcdFx0Y29uc3QgbG9ja0l0ZW0gPSBsb2NrSXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF07XG5cblx0XHRcdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcblx0XHRcdFx0aWYgKCFsb2NrSXRlbS5pc0ZvcmVpZ24gJiYgbG9ja0l0ZW0uaWQgPT0gbG9ja1Rva2VuSWQpXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Ly8gc2hvdWxkIGJlIGZhc3QgKHdhdGNoZWQpXG5cdGlzTG9ja2VkIChpdGVtRW50cnk6IEl0ZW1FbnRyeSk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGxvY2tJdGVtID0gdGhpcy5nZXRWYWx1ZShpdGVtRW50cnksIHRoaXMubG9ja0l0ZW1zKTtcblxuXHRcdGlmIChsb2NrSXRlbSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0cmV0dXJuIGxvY2tJdGVtLmlzRm9yZWlnbjtcblx0fVxuXG5cdGdldE1lc3NhZ2UgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KTogdW5kZWZpbmVkIHwgc3RyaW5nIHtcblx0XHRjb25zdCBsb2NrSXRlbSA9IHRoaXMuZ2V0VmFsdWUoaXRlbUVudHJ5LCB0aGlzLmxvY2tJdGVtcyk7XG5cblx0XHRpZiAobG9ja0l0ZW0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRpZiAoIWxvY2tJdGVtLmlzRm9yZWlnbilcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRyZXR1cm4gbG9ja0l0ZW0ubWVzc2FnZTtcblx0fVxuXG5cdC8vIGRvZXMgbm90IHJlamVjdCB3aGVuIGEgZm9yZWlnbiBsb2NrIGlzIGVuY291bnRlcmVkXG5cdC8vIGlzIGFsc28gdXNlZCBieSBkZWxldGVMb2NrXG5cdGZldGNoQ2FjaGVkTG9jayAoaXRlbUVudHJ5OiBJdGVtRW50cnkpOiBQcm9taXNlSW50ZXJmYWNlPHVuZGVmaW5lZCB8IExvY2tUb2tlbj4ge1xuXHRcdGNvbnN0IGxvY2sgPSB0aGlzLmdldFZhbHVlKGl0ZW1FbnRyeSwgdGhpcy5sb2NrSXRlbXMpO1xuXG5cdFx0aWYgKGxvY2sgIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4obG9jayk7XG5cblx0XHRjb25zdCBwcm9taXNlID0gdGhpcy5nZXRWYWx1ZShpdGVtRW50cnksIHRoaXMucHJvbWlzZXMpO1xuXG5cdFx0aWYgKHByb21pc2UgIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBwcm9taXNlO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xuXHR9XG5cblx0ZmV0Y2hMb2NrIChpdGVtRW50cnk6IEl0ZW1FbnRyeSk6IFByb21pc2VJbnRlcmZhY2U8c3RyaW5nPiB7XG5cdFx0Y29uc3QgZXJyb3JIYW5kbGVyID0gdGhpcy5lcnJvckhhbmRsZXI7XG5cblx0XHRyZXR1cm4gdGhpcy5mZXRjaENhY2hlZExvY2soaXRlbUVudHJ5KS50aGVuKFxuXHRcdFx0bG9ja0l0ZW0gPT4ge1xuXHRcdFx0XHRpZiAobG9ja0l0ZW0gIT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRyZXR1cm4gbG9ja0l0ZW07XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMucmVxdWVzdExvY2soaXRlbUVudHJ5KTtcblx0XHRcdH0sXG5cdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0bG9ja0l0ZW0gPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9ja0l0ZW0uaXNGb3JlaWduID9cblx0XHRcdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0KGxvY2tJdGVtLm1lc3NhZ2UpIDpcblx0XHRcdFx0XHRsb2NrSXRlbS50b2tlbjtcblx0XHRcdH0sXG5cdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHJlcXVlc3RMb2NrIChpdGVtRW50cnk6IEl0ZW1FbnRyeSk6IFByb21pc2VJbnRlcmZhY2U8TG9ja1Rva2VuPiB7XG5cdFx0Y29uc3Qge2l0ZW1UeXBlLCBpdGVtSWR9ID0gaXRlbUVudHJ5O1xuXG5cdFx0Y29uc3QgcHJvbWlzZSA9IHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UuY3JlYXRlKFxuXHRcdFx0J0xvY2t0b2tlbicsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UuZ2V0TG9jYWxJZCgpLFxuXHRcdFx0e2l0ZW10eXBlOiBpdGVtVHlwZSwgaXRlbTogaXRlbUlkfVxuXHRcdCkudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0ZGVsZXRlIHRoaXMucHJvbWlzZXNbaXRlbVR5cGVdW2l0ZW1JZF07XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuc2V0VmFsdWUoXG5cdFx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoT2JqZWN0KFxuXHRcdFx0XHRcdFx0J0xvY2t0b2tlbicsXG5cdFx0XHRcdFx0XHRyZXNwb25zZS5saW5rcy5Mb2NrdG9rZW5bMF1cblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdHRoaXMubG9ja0l0ZW1zXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3IgPT4ge1xuXHRcdFx0XHRkZWxldGUgdGhpcy5wcm9taXNlc1tpdGVtVHlwZV1baXRlbUlkXTtcblxuXHRcdFx0XHRpZiAoZXJyb3IuY29kZSA9PT0gMzAxKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2V0VmFsdWUoXG5cdFx0XHRcdFx0XHRpdGVtRW50cnksXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGlzRm9yZWlnbjogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0bWVzc2FnZTogZXJyb3IubWVzc2FnZVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHRoaXMubG9ja0l0ZW1zXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5yZWplY3QoZXJyb3IpO1xuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRyZXR1cm4gdGhpcy5zZXRWYWx1ZShpdGVtRW50cnksIHByb21pc2UsIHRoaXMucHJvbWlzZXMpO1xuXHR9XG5cblx0ZGVsZXRlTG9jayAoaXRlbUVudHJ5OiBJdGVtRW50cnkpOiBQcm9taXNlSW50ZXJmYWNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5mZXRjaENhY2hlZExvY2soaXRlbUVudHJ5KS50aGVuKFxuXHRcdFx0Y2FjaGVkTG9jayA9PiB7XG5cdFx0XHRcdGlmIChjYWNoZWRMb2NrID09PSB1bmRlZmluZWQpIC8vIHVuZGVmaW5lZDogbm90IHJlcXVlc3RlZCB5ZXRcblx0XHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdFx0aWYgKGNhY2hlZExvY2suaXNGb3JlaWduKSB7XG5cdFx0XHRcdFx0dGhpcy5jbGVhckxvY2soaXRlbUVudHJ5KTtcblxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLmRlbGV0ZSgnTG9ja3Rva2VuJywgW2NhY2hlZExvY2suaWRdKS50aGVuKFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMuY2xlYXJMb2NrKGl0ZW1FbnRyeSk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Y2xlYXJMb2NrIChpdGVtRW50cnk6IEl0ZW1FbnRyeSk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGxvY2tJdGVtcyA9IHRoaXMubG9ja0l0ZW1zW2l0ZW1FbnRyeS5pdGVtVHlwZV07XG5cblx0XHRpZiAobG9ja0l0ZW1zID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRyZXR1cm4gZGVsZXRlIGxvY2tJdGVtc1tpdGVtRW50cnkuaXRlbUlkXTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlLCBJdGVtQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0SXRlbU1hcCwgRmllbGRNYXAsIEl0ZW1JZCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IGhhc1Byb3BlcnRpZXMgfSBmcm9tICcuL1V0aWwnO1xuXG5jb25zdCBFTVBUWV9FTlRSWSA9IHt9O1xuXG5leHBvcnQgdHlwZSBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25SZXN1bHQgPSB7XG5cdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0aXRlbUlkOiBJdGVtSWQsXG5cdGl0ZW1zOiBBcGlSZXF1ZXN0SXRlbU1hcFxufTtcblxuZXhwb3J0IGNsYXNzIE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbiB7XG5cdHBhcmVudE1hcDogYW55ID0ge307XG5cdGRlc3RpbmF0aW9uOiBBcGlSZXF1ZXN0SXRlbU1hcCA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIHJvb3RJdGVtRW50cnk6IEl0ZW1FbnRyeSxcblx0XHRwcml2YXRlIHNpbmdsZUl0ZW1DYWNoZTogSXRlbUNhY2hlLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGVcblx0KSB7XG5cdH1cblxuXHRwcm9jZXNzICgpOiBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25SZXN1bHQge1xuXHRcdHRoaXMucGFyZW50TWFwID0gdGhpcy5jcmVhdGVQYXJlbnRNYXAodGhpcy5zaW5nbGVJdGVtQ2FjaGUpO1xuXHRcdHRoaXMucHJvY2Vzc0l0ZW1zKHRoaXMucm9vdEl0ZW1FbnRyeS5pdGVtVHlwZSwgW3RoaXMucm9vdEl0ZW1FbnRyeV0sIHt9KTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRpdGVtVHlwZTogdGhpcy5yb290SXRlbUVudHJ5Lml0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkOiB0aGlzLnJvb3RJdGVtRW50cnkuaXRlbUlkLFxuXHRcdFx0aXRlbXM6IHRoaXMuZGVzdGluYXRpb25cblx0XHR9O1xuXHR9XG5cblx0cHJpdmF0ZSBjcmVhdGVQYXJlbnRNYXAgKGl0ZW1DYWNoZTogSXRlbUNhY2hlKSB7XG5cdFx0Y29uc3QgcmVzdWx0OiB7XG5cdFx0XHRbcGFyZW50VHlwZTogc3RyaW5nXToge1xuXHRcdFx0XHRbcGFyZW50SWQ6IG51bWJlcl06IHtcblx0XHRcdFx0XHRbaXRlbVR5cGU6IHN0cmluZ106IEl0ZW1FbnRyeVtdXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9ID0ge307XG5cblx0XHRpdGVtQ2FjaGUuZm9yRWFjaChcblx0XHRcdGl0ZW1FbnRyeSA9PiB7XG5cdFx0XHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xuXHRcdFx0XHRjb25zdCBwYXJlbnQgPSBpdGVtRW50cnkucGFyZW50O1xuXG5cdFx0XHRcdGlmIChwYXJlbnQgPT09IG51bGwpIC8vIHdlIGRvbid0IGNhcmUgZm9yIGl0ZW1zIHRoYXQgYXJlIG5vdCBsaW5rZWQgdG8gdGhlIHJvb3QgaXRlbVxuXHRcdFx0XHRcdHJldHVybjtcblxuXHRcdFx0XHRjb25zdCBwYXJlbnRUeXBlID0gcGFyZW50Lml0ZW1UeXBlO1xuXHRcdFx0XHRjb25zdCBwYXJlbnRJZCA9IHBhcmVudC5pdGVtSWQ7XG5cblx0XHRcdFx0aWYgKHJlc3VsdFtwYXJlbnRUeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdHJlc3VsdFtwYXJlbnRUeXBlXSA9IHt9O1xuXG5cdFx0XHRcdGlmIChyZXN1bHRbcGFyZW50VHlwZV1bcGFyZW50SWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0cmVzdWx0W3BhcmVudFR5cGVdW3BhcmVudElkXSA9IHt9O1xuXG5cdFx0XHRcdGlmIChyZXN1bHRbcGFyZW50VHlwZV1bcGFyZW50SWRdW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdHJlc3VsdFtwYXJlbnRUeXBlXVtwYXJlbnRJZF1baXRlbVR5cGVdID0gW107XG5cblx0XHRcdFx0cmVzdWx0W3BhcmVudFR5cGVdW3BhcmVudElkXVtpdGVtVHlwZV0ucHVzaChpdGVtRW50cnkpO1xuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cHJpdmF0ZSBwcm9jZXNzSXRlbXMgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCBsaW5rQWNjdW11bGF0b3I6IHtbaXRlbVR5cGU6IHN0cmluZ106IEl0ZW1JZFtdfSkge1xuXHRcdGlmICh0aGlzLmRlc3RpbmF0aW9uW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0dGhpcy5kZXN0aW5hdGlvbltpdGVtVHlwZV0gPSB7fTtcblxuXHRcdGlmIChsaW5rQWNjdW11bGF0b3JbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRsaW5rQWNjdW11bGF0b3JbaXRlbVR5cGVdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcblxuXHRcdFx0Ly8gZWFjaCBpdGVtIG9ubHkgaGFzIGEgc2luZ2xlIHBhcmVudCwgc28gd2UgY2FuIHNhZmVseSBkbyB0aGlzXG5cdFx0XHRpZiAodGhpcy5kZXN0aW5hdGlvbltpdGVtVHlwZV1baXRlbUlkXSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0bGlua0FjY3VtdWxhdG9yW2l0ZW1UeXBlXS5wdXNoKGl0ZW1JZCk7XG5cblx0XHRcdHRoaXMuZGVzdGluYXRpb25baXRlbVR5cGVdW2l0ZW1JZF0gPSB0aGlzLnByb2Nlc3NJdGVtKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBwcm9jZXNzSXRlbSAoaXRlbUVudHJ5OiBJdGVtRW50cnkpOiB7dmFsdWVzPzogRmllbGRNYXAsIGxpbmtzPzoge1tpdGVtVHlwZTogc3RyaW5nXTogSXRlbUlkW119fSB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcblx0XHRjb25zdCBjaGlsZEl0ZW1zID0gdGhpcy5nZXRJdGVtc0J5UGFyZW50KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXHRcdGNvbnN0IGNoaWxkQ29sbGVjdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25DYWNoZS5nZXRDb2xsZWN0aW9uc0J5UGFyZW50KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXHRcdGNvbnN0IHZhbHVlcyA9IGl0ZW1FbnRyeS5mb3JtYXRSZXF1ZXN0KCk7XG5cdFx0Y29uc3QgbGlua3MgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgY2hpbGRUeXBlIGluIGNoaWxkSXRlbXMpXG5cdFx0XHR0aGlzLnByb2Nlc3NJdGVtcyhjaGlsZFR5cGUsIGNoaWxkSXRlbXNbY2hpbGRUeXBlXSwgbGlua3MpO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgY2hpbGRDb2xsZWN0aW9ucykge1xuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zLnF1ZXJ5ICE9PSBudWxsKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0dGhpcy5wcm9jZXNzSXRlbXMoY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlLCBjb2xsZWN0aW9uRW50cnkuaXRlbXMsIGxpbmtzKTtcblx0XHR9XG5cblx0XHRjb25zdCBoYXNWYWx1ZXMgPSBoYXNQcm9wZXJ0aWVzKHZhbHVlcyk7XG5cdFx0Y29uc3QgaGFzTGlua3MgPSBoYXNQcm9wZXJ0aWVzKGxpbmtzKTtcblxuXHRcdGlmIChoYXNWYWx1ZXMgJiYgaGFzTGlua3MpXG5cdFx0XHRyZXR1cm4ge3ZhbHVlczogdmFsdWVzLCBsaW5rczogbGlua3N9O1xuXG5cdFx0aWYgKGhhc1ZhbHVlcylcblx0XHRcdHJldHVybiB7dmFsdWVzOiB2YWx1ZXN9O1xuXG5cdFx0aWYgKGhhc0xpbmtzKVxuXHRcdFx0cmV0dXJuIHtsaW5rczogbGlua3N9O1xuXG5cdFx0cmV0dXJuIEVNUFRZX0VOVFJZO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRJdGVtc0J5UGFyZW50IChwYXJlbnRUeXBlOiBJdGVtVHlwZSwgcGFyZW50SWQ6IEl0ZW1JZCkge1xuXHRcdGNvbnN0IG1hcEVudHJ5ID0gdGhpcy5wYXJlbnRNYXBbcGFyZW50VHlwZV07XG5cblx0XHRpZiAobWFwRW50cnkgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB7fTtcblxuXHRcdGlmIChtYXBFbnRyeVtwYXJlbnRJZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB7fTtcblxuXHRcdHJldHVybiBtYXBFbnRyeVtwYXJlbnRJZF07XG5cdH1cbn1cbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG5pbXBvcnQgeyBBcGlGb3JtYXR0ZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEVudHJ5UGFyZW50TnVsbCwgRmllbGRNYXAsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBoYXNQcm9wZXJ0aWVzLCBpbkFycmF5IH0gZnJvbSAnLi9VdGlsJztcblxuY29uc3QgTUFZQkUgPSAnbWF5YmUnO1xuXG5leHBvcnQgY2xhc3MgUXVlcnlNYXRjaGVyIHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXG5cdFx0cHVibGljIGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRwdWJsaWMgZmllbGRzOiBGaWVsZE1hcCxcblx0XHRwdWJsaWMgcGFyZW50OiBFbnRyeVBhcmVudE51bGwgPSBudWxsXG5cdCkge1xuXG5cdH1cblxuXHRwcml2YXRlIGNvbXBhcmVWYWx1ZXMgKHZhbHVlOiBhbnksIHF1ZXJ5VmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuXHRcdGlmIChtb21lbnQuaXNNb21lbnQocXVlcnlWYWx1ZSkpXG5cdFx0XHRyZXR1cm4gdGhpcy5hcGlGb3JtYXR0ZXIuY29tcGFyZU1vbWVudE9iamVjdHMocXVlcnlWYWx1ZSwgdmFsdWUpO1xuXG5cdFx0aWYgKG1vbWVudC5pc0R1cmF0aW9uKHF1ZXJ5VmFsdWUpKVxuXHRcdFx0cmV0dXJuIHRoaXMuYXBpRm9ybWF0dGVyLmNvbXBhcmVEdXJhdGlvbnMocXVlcnlWYWx1ZSwgdmFsdWUpO1xuXG5cdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcblx0XHRyZXR1cm4gcXVlcnlWYWx1ZSA9PSB2YWx1ZTtcblx0fVxuXG5cdG1hdGNoUXVlcnkgKHF1ZXJ5OiBhbnkpOiBib29sZWFuIHwgJ21heWJlJyB7XG5cdFx0aWYgKHF1ZXJ5LnNlYXJjaCAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIE1BWUJFO1xuXG5cdFx0aWYgKHF1ZXJ5LmN1c3RvbSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIE1BWUJFO1xuXG5cdFx0aWYgKHF1ZXJ5LmxpbmtlZFRvICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5tYXRjaExpbmtlZFRvUXVlcnkocXVlcnkpO1xuXG5cdFx0aWYgKHF1ZXJ5LmNvbmRpdGlvbnMgIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLm1hdGNoQ29tcGxleFF1ZXJ5KHF1ZXJ5KTtcblxuXHRcdGlmIChxdWVyeS5rZXkgIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLm1hdGNoU2ltcGxlUXVlcnkodGhpcy5maWVsZHNbcXVlcnkua2V5XSwgcXVlcnkpO1xuXG5cdFx0aWYgKCFoYXNQcm9wZXJ0aWVzKHF1ZXJ5KSlcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0dGhyb3cgbmV3IEVycm9yKCdxdWVyeU1hdGNoZXI6IFVuc3VwcG9ydGVkIHF1ZXJ5ISBQYXJzZWQ/Jyk7XG5cdH1cblxuXHRwcml2YXRlIG1hdGNoTGlua2VkVG9RdWVyeSAocXVlcnk6IGFueSk6IGJvb2xlYW4gfCAnbWF5YmUnIHtcblx0XHRpZiAocXVlcnkucmV2ZXJzZSlcblx0XHRcdHJldHVybiBNQVlCRTtcblxuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xuXHRcdGxldCBtYXRjaDtcblxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXG5cdFx0XHRtYXRjaCA9IGZhbHNlO1xuXHRcdGVsc2UgaWYgKHF1ZXJ5LmxpbmtlZFRvICE9PSBwYXJlbnQuaXRlbVR5cGUpXG5cdFx0XHRtYXRjaCA9IGZhbHNlO1xuXHRcdGVsc2Vcblx0XHRcdG1hdGNoID0gdGhpcy5tYXRjaFNpbXBsZVF1ZXJ5KHBhcmVudC5pdGVtSWQsIHF1ZXJ5LnF1ZXJ5KTtcblxuXHRcdGlmIChtYXRjaCA9PT0gTUFZQkUpXG5cdFx0XHRyZXR1cm4gTUFZQkU7XG5cblx0XHRyZXR1cm4gcXVlcnkubm90ID8gIW1hdGNoIDogISFtYXRjaDtcblx0fVxuXG5cdHByaXZhdGUgbWF0Y2hDb21wbGV4UXVlcnkgKHF1ZXJ5OiBhbnkpOiBib29sZWFuIHwgJ21heWJlJyB7XG5cdFx0Y29uc3QgY29uZGl0aW9ucyA9IHF1ZXJ5LmNvbmRpdGlvbnM7XG5cblx0XHRsZXQgcmVzdWx0O1xuXHRcdGxldCB0ZXJtaW5hbDtcblxuXHRcdHN3aXRjaCAocXVlcnkub3BlcmF0b3IpIHtcblx0XHRcdGNhc2UgJ0FORCc6XG5cdFx0XHRcdHJlc3VsdCA9IHRydWU7XG5cdFx0XHRcdHRlcm1pbmFsID0gZmFsc2U7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnT1InOlxuXHRcdFx0XHRyZXN1bHQgPSBmYWxzZTtcblx0XHRcdFx0dGVybWluYWwgPSB0cnVlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcigncXVlcnlNYXRjaGVyOiBVbnN1cHBvcnRlZCBvcGVyYXRvcicpO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgY29uZGl0aW9uIG9mIGNvbmRpdGlvbnMpIHtcblx0XHRcdGNvbnN0IG1hdGNoID0gdGhpcy5tYXRjaFF1ZXJ5KGNvbmRpdGlvbik7XG5cblx0XHRcdGlmIChtYXRjaCA9PT0gdGVybWluYWwpXG5cdFx0XHRcdHJldHVybiB0ZXJtaW5hbDtcblxuXHRcdFx0aWYgKG1hdGNoID09PSBNQVlCRSlcblx0XHRcdFx0cmVzdWx0ID0gTUFZQkU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdCA9PT0gTUFZQkUgPyBNQVlCRSA6ICEhcmVzdWx0O1xuXHR9XG5cblx0cHJpdmF0ZSBtYXRjaFNpbXBsZVF1ZXJ5ICh2YWx1ZTogYW55LCBxdWVyeTogYW55KTogYm9vbGVhbiB8ICdtYXliZScge1xuXHRcdGNvbnN0IGtleSA9IHF1ZXJ5LmtleTtcblx0XHRsZXQgcXVlcnlWYWx1ZSA9IHF1ZXJ5LnZhbHVlO1xuXG5cdFx0aWYgKCFoYXNQcm9wZXJ0aWVzKHF1ZXJ5KSkgLy8gQ291bGQgYmUgbGlua2VkVG8gYW4gZW1wdHkgb2JqZWN0XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1JlcXVpcmVkIGZpZWxkJywga2V5LCAnbm90IGZvdW5kIGZvcicsIHRoaXMuaXRlbVR5cGUpO1xuXHRcdFx0cmV0dXJuIE1BWUJFO1xuXHRcdH1cblxuXHRcdGlmIChxdWVyeVZhbHVlID09PSAnTk9XJylcblx0XHRcdHF1ZXJ5VmFsdWUgPSBtb21lbnQoKTtcblxuXHRcdHN3aXRjaCAocXVlcnkuY29tcGFyYXRvcikge1xuXHRcdFx0Y2FzZSAnPSc6XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbXBhcmVWYWx1ZXModmFsdWUsIHF1ZXJ5VmFsdWUpO1xuXHRcdFx0Y2FzZSAnIT0nOlxuXHRcdFx0XHRyZXR1cm4gIXRoaXMuY29tcGFyZVZhbHVlcyh2YWx1ZSwgcXVlcnlWYWx1ZSk7XG5cdFx0XHRjYXNlICc8Jzpcblx0XHRcdFx0cmV0dXJuIHZhbHVlIDwgcXVlcnlWYWx1ZTtcblx0XHRcdGNhc2UgJzw9Jzpcblx0XHRcdFx0cmV0dXJuIHZhbHVlIDw9IHF1ZXJ5VmFsdWU7XG5cdFx0XHRjYXNlICc+Jzpcblx0XHRcdFx0cmV0dXJuIHZhbHVlID4gcXVlcnlWYWx1ZTtcblx0XHRcdGNhc2UgJz49Jzpcblx0XHRcdFx0cmV0dXJuIHZhbHVlID49IHF1ZXJ5VmFsdWU7XG5cdFx0XHRjYXNlICdJTic6XG5cdFx0XHRcdHJldHVybiBpbkFycmF5KHZhbHVlLCBxdWVyeVZhbHVlKTtcblx0XHRcdGNhc2UgJ05PVCBJTic6XG5cdFx0XHRcdHJldHVybiAhaW5BcnJheSh2YWx1ZSwgcXVlcnlWYWx1ZSk7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ3F1ZXJ5TWF0Y2hlcjogVW5zdXBwb3J0ZWQgY29tcGFyYXRvcjogJyArIHF1ZXJ5LmNvbXBhcmF0b3IgKyAnIGluIHF1ZXJ5ICcgKyBxdWVyeSk7XG5cdFx0fVxuXHR9XG59XG4iLCJpbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IGdldEZpcnN0UHJvcGVydHkgfSBmcm9tICcuL1V0aWwnO1xuaW1wb3J0IHsgQXBpUXVlcnkgfSBmcm9tICcuLi90eXBlcyc7XG5cbmVudW0gQ09OU1RBTlRTIHtcblx0T0JKID0gMCxcblx0U1RSID0gMSxcblx0U0VQID0gJzonXG59XG5cbmV4cG9ydCBjbGFzcyBRdWVyeVBhcnNlciB7XG5cdHF1ZXJ5OiBBcGlRdWVyeTtcblx0cGFyYW1ldGVyczogYW55O1xuXG5cdGNvbnN0cnVjdG9yIChxdWVyeTogQXBpUXVlcnksIHBhcmFtZXRlcnM/OiBvYmplY3QpIHtcblx0XHR0aGlzLnF1ZXJ5ID0gcXVlcnk7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcblx0fVxuXG5cdHByaXZhdGUgY29tcGFyZVBhcnNlZFF1ZXJpZXMgKGE6IFtvYmplY3QsIHN0cmluZ10sIGI6IFtvYmplY3QsIHN0cmluZ10pIHtcblx0XHRpZiAoYVtDT05TVEFOVFMuU1RSXSA9PT0gYltDT05TVEFOVFMuU1RSXSlcblx0XHRcdHJldHVybiAwO1xuXG5cdFx0cmV0dXJuIGFbQ09OU1RBTlRTLlNUUl0gPiBiW0NPTlNUQU5UUy5TVFJdID8gMSA6IC0xO1xuXHR9XG5cblx0cGFyc2UgKHF1ZXJ5OiBBcGlRdWVyeSA9IHRoaXMucXVlcnkpOiBbb2JqZWN0LCBzdHJpbmddIHtcblx0XHRpZiAocXVlcnkubGlua2VkVG8gIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlTGlua2VkVG9RdWVyeShcblx0XHRcdFx0cXVlcnkubGlua2VkVG8sXG5cdFx0XHRcdHF1ZXJ5LnF1ZXJ5LFxuXHRcdFx0XHRxdWVyeS5yZXZlcnNlLFxuXHRcdFx0XHRxdWVyeS5ub3Rcblx0XHRcdCk7XG5cblx0XHRpZiAocXVlcnkubm90ICE9PSB1bmRlZmluZWQpXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ3F1ZXJ5UGFyc2VyOiBcIk5vdFwiIG5vdCBzdXBwb3J0ZWQnKTtcblxuXHRcdGlmIChxdWVyeS5jdXN0b20gIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlQ3VzdG9tUXVlcnkoXG5cdFx0XHRcdHF1ZXJ5LmN1c3RvbSxcblx0XHRcdFx0cXVlcnkucGFyYW1ldGVyc1xuXHRcdFx0KTtcblxuXHRcdGlmIChxdWVyeS5zZWFyY2ggIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlU2VhcmNoUXVlcnkocXVlcnkuc2VhcmNoKTtcblxuXHRcdGlmIChxdWVyeS5jb25kaXRpb25zICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZUNvbXBsZXhRdWVyeShcblx0XHRcdFx0cXVlcnkuY29uZGl0aW9ucyxcblx0XHRcdFx0cXVlcnkub3BlcmF0b3Jcblx0XHRcdCk7XG5cblx0XHRpZiAocXVlcnkua2V5ICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZVNpbXBsZVF1ZXJ5KFxuXHRcdFx0XHRxdWVyeS5rZXksXG5cdFx0XHRcdHF1ZXJ5LnZhbHVlLFxuXHRcdFx0XHRxdWVyeS5jb21wYXJhdG9yXG5cdFx0XHQpO1xuXG5cdFx0Y29uc3Qga2V5ID0gZ2V0Rmlyc3RQcm9wZXJ0eShxdWVyeSk7XG5cblx0XHRpZiAoa2V5ID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIFt7fSwgJ3t9J107XG5cblx0XHRyZXR1cm4gdGhpcy5wYXJzZVNpbXBsZVF1ZXJ5KGtleSwgcXVlcnlba2V5XSk7XG5cdH1cblxuXHRwcml2YXRlIHBhcnNlU2VhcmNoUXVlcnkgKHZhbHVlOiBhbnkpOiBbb2JqZWN0LCBzdHJpbmddIHtcblx0XHR2YWx1ZSA9IHRoaXMuZm9ybWF0VmFsdWUodmFsdWUpO1xuXG5cdFx0cmV0dXJuIFtcblx0XHRcdHtzZWFyY2g6IHZhbHVlW0NPTlNUQU5UUy5PQkpdfSxcblx0XHRcdCdbJyArICdzZWFyY2gnICsgQ09OU1RBTlRTLlNFUCArIHZhbHVlW0NPTlNUQU5UUy5TVFJdICsgJ10nXG5cdFx0XTtcblx0fVxuXG5cdHByaXZhdGUgcGFyc2VDdXN0b21RdWVyeSAoY3VzdG9tOiBBcGlRdWVyeSwgcGFyYW1ldGVyczogYW55KTogW29iamVjdCwgc3RyaW5nXSB7XG5cdFx0aWYgKHBhcmFtZXRlcnMgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIFtcblx0XHRcdFx0e2N1c3RvbTogY3VzdG9tfSxcblx0XHRcdFx0J1snICsgY3VzdG9tICsgJ10nXG5cdFx0XHRdO1xuXHRcdH1cblxuXHRcdGNvbnN0IHBhcnNlZFBhcmFtZXRlcnMgPSB0aGlzLnBhcnNlQ3VzdG9tUGFyYW1ldGVycyhwYXJhbWV0ZXJzKTtcblxuXHRcdHJldHVybiBbXG5cdFx0XHR7Y3VzdG9tOiBjdXN0b20sIHBhcmFtZXRlcnM6IHBhcnNlZFBhcmFtZXRlcnNbQ09OU1RBTlRTLk9CSl19LFxuXHRcdFx0J1snICsgY3VzdG9tICsgQ09OU1RBTlRTLlNFUCArIHBhcnNlZFBhcmFtZXRlcnNbQ09OU1RBTlRTLlNUUl0gKyAnXSdcblx0XHRdO1xuXHR9XG5cblx0cHJpdmF0ZSBwYXJzZUN1c3RvbVBhcmFtZXRlcnMgKHBhcmFtZXRlcnM6IGFueSk6IFtvYmplY3QsIHN0cmluZ10ge1xuXHRcdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhwYXJhbWV0ZXJzKS5zb3J0KCk7XG5cblx0XHRjb25zdCBxdWVyeTogQXBpUXVlcnkgPSB7fTtcblx0XHRsZXQgc3RyaW5nID0gJyc7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGtleSA9IGtleXNbaV07XG5cdFx0XHRjb25zdCB2YWx1ZSA9IHRoaXMuZm9ybWF0VmFsdWUocGFyYW1ldGVyc1trZXldKTtcblxuXHRcdFx0cXVlcnlba2V5XSA9IHZhbHVlW0NPTlNUQU5UUy5PQkpdO1xuXG5cdFx0XHRpZiAoaSA+IDApXG5cdFx0XHRcdHN0cmluZyArPSBDT05TVEFOVFMuU0VQO1xuXG5cdFx0XHRzdHJpbmcgKz0gdmFsdWVbQ09OU1RBTlRTLlNUUl07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFtxdWVyeSwgc3RyaW5nXTtcblx0fVxuXG5cdHByaXZhdGUgcGFyc2VTaW1wbGVRdWVyeSAoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnksIGNvbXBhcmF0b3IgPSBBcnJheS5pc0FycmF5KHZhbHVlW0NPTlNUQU5UUy5PQkpdKSA/ICdJTicgOiAnPScpOiBbb2JqZWN0LCBzdHJpbmddIHtcblx0XHR2YWx1ZSA9IHRoaXMuZm9ybWF0VmFsdWUodmFsdWUpO1xuXG5cdFx0aWYgKGNvbXBhcmF0b3IgPT09IHVuZGVmaW5lZClcblx0XHRcdGNvbXBhcmF0b3IgPSBBcnJheS5pc0FycmF5KHZhbHVlW0NPTlNUQU5UUy5PQkpdKSA/ICdJTicgOiAnPSc7XG5cblx0XHRyZXR1cm4gW1xuXHRcdFx0e2tleToga2V5LCB2YWx1ZTogdmFsdWVbQ09OU1RBTlRTLk9CSl0sIGNvbXBhcmF0b3I6IGNvbXBhcmF0b3J9LFxuXHRcdFx0J1snICsgY29tcGFyYXRvciArIENPTlNUQU5UUy5TRVAgKyBrZXkgKyBDT05TVEFOVFMuU0VQICsgdmFsdWVbQ09OU1RBTlRTLlNUUl0gKyAnXSdcblx0XHRdO1xuXHR9XG5cblx0cHJpdmF0ZSBwYXJzZUxpbmtlZFRvUXVlcnkgKGxpbmtlZFRvOiBhbnksIHF1ZXJ5ID0ge30sIHJldmVyc2UgPSBmYWxzZSwgbm90ID0gZmFsc2UpOiBbb2JqZWN0LCBzdHJpbmddIHtcblx0XHRjb25zdCBwYXJzZWRRdWVyeSA9IHRoaXMucGFyc2UocXVlcnkpO1xuXG5cdFx0cmV0dXJuIFtcblx0XHRcdHtsaW5rZWRUbzogbGlua2VkVG8sIHF1ZXJ5OiBwYXJzZWRRdWVyeVtDT05TVEFOVFMuT0JKXSwgcmV2ZXJzZTogcmV2ZXJzZSwgbm90OiBub3R9LFxuXHRcdFx0J1snICsgJ2xpbmtlZFRvJyArIENPTlNUQU5UUy5TRVAgKyBsaW5rZWRUbyArIENPTlNUQU5UUy5TRVAgKyBwYXJzZWRRdWVyeVtDT05TVEFOVFMuU1RSXSArIENPTlNUQU5UUy5TRVAgKyByZXZlcnNlICsgQ09OU1RBTlRTLlNFUCArIG5vdCArICddJ1xuXHRcdF07XG5cdH1cblxuXHRwcml2YXRlIHBhcnNlQ29tcGxleFF1ZXJ5IChjb25kaXRpb25zOiBvYmplY3RbXSwgb3BlcmF0b3IgPSAnQU5EJyk6IFtvYmplY3QsIHN0cmluZ10ge1xuXHRcdG9wZXJhdG9yID0gb3BlcmF0b3IudG9VcHBlckNhc2UoKTtcblxuXHRcdGNvbnN0IHBhcnNlZENvbmRpdGlvbnMgPSB0aGlzLnBhcnNlQ29uZGl0aW9ucyhjb25kaXRpb25zKTtcblxuXHRcdHJldHVybiBbXG5cdFx0XHR7Y29uZGl0aW9uczogcGFyc2VkQ29uZGl0aW9uc1tDT05TVEFOVFMuT0JKXSwgb3BlcmF0b3I6IG9wZXJhdG9yfSxcblx0XHRcdCdbJyArIG9wZXJhdG9yICsgcGFyc2VkQ29uZGl0aW9uc1tDT05TVEFOVFMuU1RSXSArICddJ1xuXHRcdF07XG5cdH1cblxuXHRwcml2YXRlIHBhcnNlQ29uZGl0aW9ucyAoY29uZGl0aW9uczogb2JqZWN0W10pOiBbb2JqZWN0LCBzdHJpbmddIHtcblx0XHRsZXQgcGFyc2VkQ29uZGl0aW9uczogQXJyYXk8W29iamVjdCwgc3RyaW5nXT4gPSBbXTtcblx0XHRjb25zdCBxdWVyeTogb2JqZWN0W10gPSBbXTtcblx0XHRsZXQgc3RyaW5nID0gJyc7XG5cblx0XHRmb3IgKGNvbnN0IGNvbmRpdGlvbiBvZiBjb25kaXRpb25zKVxuXHRcdFx0cGFyc2VkQ29uZGl0aW9ucy5wdXNoKHRoaXMucGFyc2UoY29uZGl0aW9uKSk7XG5cblx0XHRwYXJzZWRDb25kaXRpb25zID0gcGFyc2VkQ29uZGl0aW9ucy5zb3J0KChhLCBiKSA9PiB0aGlzLmNvbXBhcmVQYXJzZWRRdWVyaWVzKGEsIGIpKTtcblxuXHRcdGZvciAoY29uc3QgcGFyc2VkQ29uZGl0aW9uIG9mIHBhcnNlZENvbmRpdGlvbnMpIHtcblx0XHRcdHF1ZXJ5LnB1c2gocGFyc2VkQ29uZGl0aW9uW0NPTlNUQU5UUy5PQkpdKTtcblx0XHRcdHN0cmluZyArPSBwYXJzZWRDb25kaXRpb25bQ09OU1RBTlRTLlNUUl07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFtxdWVyeSwgc3RyaW5nXTtcblx0fVxuXG5cdHByaXZhdGUgZm9ybWF0VmFsdWU8VD4gKHZhbHVlOiBUKTogW1QsIHN0cmluZ10ge1xuXHRcdGxldCBwcm9jZXNzZWRWYWx1ZTtcblxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmNoYXJBdCgwKSA9PT0gJyYnKSB7XG5cdFx0XHRjb25zdCBrZXkgPSB2YWx1ZS5zdWJzdHJpbmcoMSk7XG5cblx0XHRcdHZhbHVlID0gdGhpcy5wYXJhbWV0ZXJzW2tleV07XG5cblx0XHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ3F1ZXJ5UGFyc2VyOiBVbmRlZmluZWQgdGVtcGxhdGUgcGFyYW1ldGVyIFxcJycgKyBrZXkgKyAnXFwnJyk7XG5cblx0XHRcdHByb2Nlc3NlZFZhbHVlID0gdGhpcy5wcm9jZXNzVmFsdWUodmFsdWUpO1xuXG5cdFx0XHRyZXR1cm4gW3Byb2Nlc3NlZFZhbHVlLCBrZXkgKyAnPicgKyB2YWx1ZV07XG5cdFx0fVxuXG5cdFx0cHJvY2Vzc2VkVmFsdWUgPSB0aGlzLnByb2Nlc3NWYWx1ZSh2YWx1ZSk7XG5cblx0XHRyZXR1cm4gW3Byb2Nlc3NlZFZhbHVlLCAnJyArIHByb2Nlc3NlZFZhbHVlXTtcblx0fVxuXG5cdHByaXZhdGUgcHJvY2Vzc1ZhbHVlPFQ+ICh2YWx1ZTogVFtdKTogVFtdO1xuXHRwcml2YXRlIHByb2Nlc3NWYWx1ZSAodmFsdWU6IG1vbWVudC5Nb21lbnQpOiBtb21lbnQuTW9tZW50O1xuXHRwcml2YXRlIHByb2Nlc3NWYWx1ZSAodmFsdWU6IG1vbWVudC5EdXJhdGlvbik6IG1vbWVudC5EdXJhdGlvbjtcblx0cHJpdmF0ZSBwcm9jZXNzVmFsdWU8VD4gKHZhbHVlOiBUKTogVDtcblx0cHJpdmF0ZSBwcm9jZXNzVmFsdWU8VD4gKHZhbHVlOiBUIHwgVFtdIHwgbW9tZW50Lk1vbWVudCB8IG1vbWVudC5EdXJhdGlvbil7XG5cdFx0Ly8gYWxnb3JpdGhtIGlzIG5vdCBpbXBvcnRhbnQsIGFzIGxvbmcgYXMgYWxsIGFycmF5cyBhcmUgc29ydGVkIHRoZSBzYW1lIHdheVxuXHRcdGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSlcblx0XHRcdHJldHVybiB2YWx1ZS5zbGljZSgpLnNvcnQoKTtcblxuXHRcdGlmIChtb21lbnQuaXNNb21lbnQodmFsdWUpKVxuXHRcdFx0cmV0dXJuIG1vbWVudCh2YWx1ZSk7XG5cblx0XHRpZiAobW9tZW50LmlzRHVyYXRpb24odmFsdWUpKVxuXHRcdFx0cmV0dXJuIG1vbWVudC5kdXJhdGlvbih2YWx1ZSk7XG5cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cbn1cbiIsImltcG9ydCB7IEFwaVF1ZXJ5LCBFbnRyeVBhcmVudE51bGwsIEl0ZW1JZCB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIFF1ZXJ5U2VydmljZSB7XG5cdGNvbnN0cnVjdG9yICgpIHtcblx0fVxuXG5cdGFkZEFuZENvbmRpdGlvbiAocXVlcnk6IEFwaVF1ZXJ5LCBjb25kaXRpb246IEFwaVF1ZXJ5KTogQXBpUXVlcnkge1xuXHRcdGlmIChxdWVyeS5jb25kaXRpb25zID09PSB1bmRlZmluZWQgfHwgcXVlcnkub3BlcmF0b3IgPT09ICdvcicpXG5cdFx0XHRyZXR1cm4ge2NvbmRpdGlvbnM6IFtxdWVyeSwgY29uZGl0aW9uXX07XG5cblx0XHQvLyB3ZSBoYXZlIGFuICdhbmQnIGNvbmRpdGlvblxuXHRcdHJldHVybiB7Y29uZGl0aW9uczogcXVlcnkuY29uZGl0aW9ucy5jb25jYXQoY29uZGl0aW9uKX07XG5cdH1cblxuXHRhZGRPckNvbmRpdGlvbiAocXVlcnk6IEFwaVF1ZXJ5LCBjb25kaXRpb246IEFwaVF1ZXJ5KTogQXBpUXVlcnkge1xuXHRcdGlmIChxdWVyeS5vcGVyYXRvciA9PT0gJ29yJylcblx0XHRcdHJldHVybiB7Y29uZGl0aW9uczogcXVlcnkuY29uZGl0aW9ucy5jb25jYXQoY29uZGl0aW9uKX07XG5cblx0XHQvLyB3ZSBoYXZlIGFuICdhbmQnIGNvbmRpdGlvblxuXHRcdHJldHVybiB7Y29uZGl0aW9uczogW3F1ZXJ5LCBjb25kaXRpb25dLCBvcGVyYXRvcjogJ29yJ307XG5cdH1cblxuXHRhZGRQYXJlbnRDb25kaXRpb24gKHF1ZXJ5OiBBcGlRdWVyeSwgcGFyZW50OiBFbnRyeVBhcmVudE51bGwpOiBBcGlRdWVyeSB7XG5cdFx0bGV0IGxpbmtlZFRvUXVlcnk7XG5cblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIHF1ZXJ5O1xuXG5cdFx0bGlua2VkVG9RdWVyeSA9IHtsaW5rZWRUbzogcGFyZW50Lml0ZW1UeXBlLCBxdWVyeTogcGFyZW50Lml0ZW1JZH07XG5cblx0XHRyZXR1cm4gcXVlcnkgPT09IG51bGwgPyBsaW5rZWRUb1F1ZXJ5IDogdGhpcy5hZGRBbmRDb25kaXRpb24ocXVlcnksIGxpbmtlZFRvUXVlcnkpO1xuXHR9XG5cblx0Y3JlYXRlTm90SW4gKGlkQXJyYXk6IEl0ZW1JZFtdKTogQXBpUXVlcnkge1xuXHRcdHJldHVybiB7Y29tcGFyYXRvcjogJ05PVCBJTicsIGtleTogJ2lkJywgdmFsdWU6IGlkQXJyYXl9O1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5TZXQsIENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEFwaVJlcXVlc3RDb2x1bW5zIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG50eXBlIFJlcXVlc3RDb2x1bW5NYXAgPSB7W2l0ZW1UeXBlOiBzdHJpbmddOiBBcGlSZXF1ZXN0Q29sdW1uc307XG5cbmV4cG9ydCBjbGFzcyBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uIHtcblx0cHJpdmF0ZSBjb2x1bW5zOiBSZXF1ZXN0Q29sdW1uTWFwID0ge307XG5cdHByaXZhdGUgY29sdW1uU2V0SWRNYXA6IHtbY29sdW1uU2V0SWQ6IG51bWJlcl06IGJvb2xlYW59ID0ge307XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxuXHQpIHtcblx0fVxuXG5cdGV4cGFuZCAoY29sdW1uU2V0OiBDb2x1bW5TZXQpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5jb2x1bW5TZXRJZE1hcFtjb2x1bW5TZXQuaWRdKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0Y29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1ucztcblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbHVtblNldC5pdGVtVHlwZTtcblxuXHRcdGlmIChjb2x1bW5zW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0Y29sdW1uc1tpdGVtVHlwZV0gPSBbXTtcblxuXHRcdGNvbHVtbnNbaXRlbVR5cGVdID0gdGhpcy5jb2x1bW5VdGlsXG5cdFx0XHQubWVyZ2VSZXF1ZXN0Q29sdW1ucyhjb2x1bW5zW2l0ZW1UeXBlXSwgY29sdW1uU2V0LnJlcXVlc3QpXG5cdFx0XHQubWVyZ2VkO1xuXG5cdFx0dGhpcy5jb2x1bW5TZXRJZE1hcFtjb2x1bW5TZXQuaWRdID0gdHJ1ZTtcblx0fVxuXG5cdGdldCAoKTogUmVxdWVzdENvbHVtbk1hcCB7XG5cdFx0cmV0dXJuIHRoaXMuY29sdW1ucztcblx0fVxufVxuIiwiaW1wb3J0IHsgQXBpRm9ybWF0dGVyLCBDb2xsZWN0aW9uSGFuZGxlciwgSXRlbUhhbmRsZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7XG5cdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdENvbHVtblNldEZhY3RvcnksXG5cdEl0ZW1FbnRyeUZhY3RvcnksXG5cdFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQge1xuXHRBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0RXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRMb2NhbENhY2hlTWFuYWdlckludGVyZmFjZSxcblx0UHJvbWlzZUxpYnJhcnlJbnRlcmZhY2Vcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7XG5cdEFwaVJlcXVlc3RDb2x1bW5zLCBBcGlSZXNwb25zZSxcblx0Q29sbGVjdGlvbk1hdGNoUmVzdWx0LFxuXHRGaWVsZE1hcCwgRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZVNvY2tldE1lc3NhZ2UsXG5cdEdyb3VwZWRFeHRlbmRlZENvbGxlY3Rpb25NYXRjaFJlc3VsdCxcblx0SXRlbUlkLCBJdGVtVHlwZSxcblx0UHJvbWlzZUludGVyZmFjZSwgUmVzcG9uc2VDb2x1bW4sIFNvY2tldE1lc3NhZ2Vcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBTb2NrZXRDb2xsZWN0aW9uTWFwID0ge1tpdGVtSWQ6IG51bWJlcl06IENvbGxlY3Rpb25NYXRjaFJlc3VsdH07XG5cbmV4cG9ydCBjbGFzcyBTb2NrZXRNZXNzYWdlSGFuZGxlciB7XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5RmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeSxcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcblx0XHRwcml2YXRlIGxvY2FsQ2FjaGVNYW5hZ2VyOiBMb2NhbENhY2hlTWFuYWdlckludGVyZmFjZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZSxcblx0XHRwcml2YXRlIHJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxuXHQpIHtcblx0fVxuXG5cdG9uTWVzc2FnZVJlY2VpdmVkIChtZXNzYWdlOiBTb2NrZXRNZXNzYWdlKTogYW55IHtcblx0XHRzd2l0Y2ggKG1lc3NhZ2UuYm9keS5ldmVudFR5cGUpIHtcblx0XHRcdGNhc2UgJ3VwZGF0ZSc6XG5cdFx0XHRcdHJldHVybiB0aGlzLmhhbmRsZVVwZGF0ZShtZXNzYWdlKTtcblx0XHRcdGNhc2UgJ2NyZWF0ZSc6XG5cdFx0XHRcdHJldHVybiB0aGlzLmhhbmRsZUNyZWF0ZShtZXNzYWdlKTtcblx0XHRcdGNhc2UgJ2RlbGV0ZSc6XG5cdFx0XHRcdHJldHVybiB0aGlzLmhhbmRsZURlbGV0ZShtZXNzYWdlKTtcblx0XHRcdGNhc2UgJ2xpbmtUbyc6XG5cdFx0XHRcdHJldHVybiB0aGlzLmhhbmRsZUxpbmtNb3ZlKC8qIG1lc3NhZ2UgKi8pO1xuXHRcdH1cblx0fVxuXG5cdGZvcm1hdE1lc3NhZ2VWYWx1ZXMgKHZhbHVlczogYW55LCBjb2x1bW5zOiBSZXNwb25zZUNvbHVtbltdKTogRmllbGRNYXAge1xuXHRcdGNvbnN0IHJlc3VsdDogRmllbGRNYXAgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gY29sdW1ucylcblx0XHRcdHJlc3VsdFtjb2x1bW5JZF0gPSB0aGlzLmFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZVZhbHVlKGNvbHVtbnNbY29sdW1uSWRdLnR5cGUsIHZhbHVlc1tjb2x1bW5JZF0pO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGNyZWF0ZUNvbGxlY3Rpb25NYXAgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbXM6IHtbaXRlbUlkOiBudW1iZXJdOiBhbnl9LCBjb2x1bW5zOiBSZXNwb25zZUNvbHVtbltdKTogU29ja2V0Q29sbGVjdGlvbk1hcCB7XG5cdFx0Y29uc3QgcmVzdWx0OiBTb2NrZXRDb2xsZWN0aW9uTWFwID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtcykge1xuXHRcdFx0Y29uc3QgaXRlbSA9IGl0ZW1zW2l0ZW1JZF07XG5cdFx0XHRjb25zdCBwYXJlbnQgPSBpdGVtLnBhcmVudCAhPT0gbnVsbCA/IGl0ZW0ucGFyZW50IDoge307XG5cblx0XHRcdHJlc3VsdFtpdGVtSWRdID0gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5lbnRyaWVzLmdldEJ5Rml0dGluZ0l0ZW0oXG5cdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHR0aGlzLmZvcm1hdE1lc3NhZ2VWYWx1ZXMoaXRlbS52YWx1ZXMsIGNvbHVtbnMpLFxuXHRcdFx0XHRwYXJlbnRcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdyb3VwQnlDb2xsZWN0aW9uSWQgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgY29sbGVjdGlvbk1hcDogU29ja2V0Q29sbGVjdGlvbk1hcCk6IEdyb3VwZWRFeHRlbmRlZENvbGxlY3Rpb25NYXRjaFJlc3VsdCB7XG5cdFx0Y29uc3QgcmVzdWx0OiBHcm91cGVkRXh0ZW5kZWRDb2xsZWN0aW9uTWF0Y2hSZXN1bHQgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGNvbGxlY3Rpb25NYXApIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25zID0gY29sbGVjdGlvbk1hcFtpdGVtSWRdO1xuXG5cdFx0XHRmb3IgKGNvbnN0IHN0YXR1cyBpbiBjb2xsZWN0aW9ucykge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb24gb2YgY29sbGVjdGlvbnNbc3RhdHVzXSkge1xuXHRcdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25JZCA9IGNvbGxlY3Rpb24uaWQ7XG5cblx0XHRcdFx0XHRpZiAocmVzdWx0W2NvbGxlY3Rpb25JZF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0cmVzdWx0W2NvbGxlY3Rpb25JZF0gPSB7XG5cdFx0XHRcdFx0XHRcdGNvbGxlY3Rpb246IGNvbGxlY3Rpb24sXG5cdFx0XHRcdFx0XHRcdGZpdHRpbmc6IFtdLFxuXHRcdFx0XHRcdFx0XHRub3RmaXR0aW5nOiBbXSxcblx0XHRcdFx0XHRcdFx0bWF5YmU6IFtdXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJlc3VsdFtjb2xsZWN0aW9uSWRdW3N0YXR1c10ucHVzaChcblx0XHRcdFx0XHRcdHN0YXR1cyA9PT0gJ2ZpdHRpbmcnID8gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkKSA6IGl0ZW1JZFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0UmVxdWVzdENvbHVtbnMgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgY29sbGVjdGlvbk1hcDogU29ja2V0Q29sbGVjdGlvbk1hcCkge1xuXHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KCk7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9ucyA9IGNvbGxlY3Rpb25NYXBbaXRlbUlkXTtcblx0XHRcdGNvbnN0IGZpdHRpbmdDb2xsZWN0aW9ucyA9IGNvbGxlY3Rpb25zLmZpdHRpbmc7XG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGZpdHRpbmdDb2xsZWN0aW9uIG9mIGZpdHRpbmdDb2xsZWN0aW9ucylcblx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uLmV4cGFuZChmaXR0aW5nQ29sbGVjdGlvbi5jb2x1bW5zKTtcblxuXHRcdFx0aWYgKGl0ZW1FbnRyeSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRjb2x1bW5FeHBhbnNpb24uZXhwYW5kKGl0ZW1FbnRyeS5jb2x1bW5zKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29sdW1uRXhwYW5zaW9uLmdldCgpO1xuXHR9XG5cblx0ZGVmZXJFbnRyeSAoaXRlbUVudHJ5OiBJdGVtRW50cnkpOiBJdGVtRW50cnkgfCBQcm9taXNlSW50ZXJmYWNlPEl0ZW1FbnRyeT4ge1xuXHRcdGNvbnN0IGRlZmVycmVkID0gaXRlbUVudHJ5LmRlZmVycmVkO1xuXG5cdFx0aWYgKGRlZmVycmVkID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmRlZmVyKCk7XG5cblx0XHRyZXR1cm4gZGVmZXJyZWQucHJvbWlzZS50aGVuKFxuXHRcdFx0dGhpcy5kZWZlckVudHJ5LmJpbmQodGhpcyksXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cHJvY2Vzc01lc3NhZ2UgKGJvZHk6IGFueSk6IFByb21pc2VJbnRlcmZhY2U8R3JvdXBlZEV4dGVuZGVkQ29sbGVjdGlvbk1hdGNoUmVzdWx0PiB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBib2R5Lml0ZW1UeXBlO1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25NYXAgPSB0aGlzLmNyZWF0ZUNvbGxlY3Rpb25NYXAoaXRlbVR5cGUsIGJvZHkuaXRlbXNbaXRlbVR5cGVdLCBib2R5LmNvbHVtbnNbaXRlbVR5cGVdKTtcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IHRoaXMuZ2V0UmVxdWVzdENvbHVtbnMoaXRlbVR5cGUsIGNvbGxlY3Rpb25NYXApO1xuXHRcdGNvbnN0IGRlZmVycmVkRW50cmllczogQXJyYXk8SXRlbUVudHJ5IHwgUHJvbWlzZUludGVyZmFjZTxJdGVtRW50cnk+PiA9IFtdO1xuXHRcdGNvbnN0IHJlcXVlc3RJZHM6IEl0ZW1JZFtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZFN0cmluZyBpbiBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KGl0ZW1UeXBlLCBpdGVtSWRTdHJpbmcpO1xuXHRcdFx0Y29uc3QgaXRlbUlkID0gK2l0ZW1JZFN0cmluZztcblxuXHRcdFx0aWYgKGl0ZW1FbnRyeSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGRlZmVycmVkRW50cmllcy5wdXNoKHRoaXMuZGVmZXJFbnRyeShpdGVtRW50cnkpKTtcblx0XHRcdFx0cmVxdWVzdElkcy5wdXNoKGl0ZW1JZCk7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoY29sbGVjdGlvbk1hcFtpdGVtSWRdLmZpdHRpbmcubGVuZ3RoID09PSAwKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmFkZChcblx0XHRcdFx0dGhpcy5pdGVtRW50cnlGYWN0b3J5LmNvbnN0cnVjdERlZmVycmVkKGl0ZW1UeXBlLCBpdGVtSWQsIHJlcXVlc3RDb2x1bW5zW2l0ZW1UeXBlXSwgZmFsc2UpXG5cdFx0XHQpO1xuXG5cdFx0XHRyZXF1ZXN0SWRzLnB1c2goaXRlbUlkKTtcblx0XHR9XG5cblx0XHRpZiAocmVxdWVzdElkcy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKHRoaXMuZ3JvdXBCeUNvbGxlY3Rpb25JZChpdGVtVHlwZSwgY29sbGVjdGlvbk1hcCkpOyAvLyBjb2xsZWN0aW9uTWFwIG1pZ2h0IGNvbnRhaW4gJ21heWJlJyBtYXRjaGVzXG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwoZGVmZXJyZWRFbnRyaWVzKS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShpdGVtVHlwZSwge2lkOiByZXF1ZXN0SWRzfSwgcmVxdWVzdENvbHVtbnMpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlUmVzcG9uc2UoaXRlbVR5cGUsIHJlcXVlc3RJZHMsIHJlcXVlc3RDb2x1bW5zW2l0ZW1UeXBlXSwgcmVzcG9uc2UsIGNvbGxlY3Rpb25NYXApO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRwcm9jZXNzRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZSAoYm9keTogYW55KTogUHJvbWlzZUludGVyZmFjZTx2b2lkPiB7XG5cdFx0Y29uc3QgaXRlbXMgPSBib2R5Lml0ZW1zLkZ1bmN0aW9uQ2hhbmdlc1Jlc29sdmU7XG5cdFx0Y29uc3QgZGVmZXJyZWRFbnRyaWVzOiBBcnJheTxJdGVtRW50cnkgfCBQcm9taXNlSW50ZXJmYWNlPEl0ZW1FbnRyeT4+ID0gW107XG5cdFx0Y29uc3QgcmVxdWVzdElkczogSXRlbUlkW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGl0ZW1zKSB7XG5cdFx0XHRjb25zdCBmdW5jdGlvbklkID0gaXRlbXNbaXRlbUlkXS5wYXJlbnQuaXRlbUlkO1xuXHRcdFx0Y29uc3QgZnVuY3Rpb25FbnRyeSA9IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoJ0Z1bmN0aWUnLCBmdW5jdGlvbklkKTtcblxuXHRcdFx0aWYgKGZ1bmN0aW9uRW50cnkgPT09IHVuZGVmaW5lZCB8fCBmdW5jdGlvbkVudHJ5LmNvbHVtbnMucmVzcG9uc2UuRnVuY3RpZS5uZXdjaGFuZ2VzID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRkZWZlcnJlZEVudHJpZXMucHVzaCh0aGlzLmRlZmVyRW50cnkoZnVuY3Rpb25FbnRyeSkpO1xuXHRcdFx0cmVxdWVzdElkcy5wdXNoKGZ1bmN0aW9uSWQpO1xuXHRcdH1cblxuXHRcdGlmIChyZXF1ZXN0SWRzLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChkZWZlcnJlZEVudHJpZXMpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KCdGdW5jdGllJywge2lkOiByZXF1ZXN0SWRzfSwge0Z1bmN0aWU6IFsnbmV3Y2hhbmdlcyddfSk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRjb25zdCByZXNwb25zZUlkcyA9IHJlc3BvbnNlLmxpbmtzLkZ1bmN0aWU7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgcmVzcG9uc2VJZHMpIHtcblx0XHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSA8SXRlbUVudHJ5PiB0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KCdGdW5jdGllJywgaXRlbUlkKTtcblxuXHRcdFx0XHRcdGNvbnN0IHByZXZpb3VzID0gdGhpcy5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyhcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5nZXRGaWVsZHMoKSxcblx0XHRcdFx0XHRcdHt9LFxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LmNvbHVtbnMubWFpblxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0Y29uc3QgcmVzcG9uc2VWYWx1ZSA9IHJlc3BvbnNlLmZldGNoVmFsdWUoJ0Z1bmN0aWUnLCBpdGVtSWQsICduZXdjaGFuZ2VzJyk7XG5cblx0XHRcdFx0XHRpZiAocmVzcG9uc2VWYWx1ZSA9PT0gcHJldmlvdXMubmV3Y2hhbmdlcylcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdFx0aXRlbUVudHJ5XG5cdFx0XHRcdFx0XHQuc2V0SW5pdGlhbCh7bmV3Y2hhbmdlczogcmVzcG9uc2VWYWx1ZX0sIHRydWUpXG5cdFx0XHRcdFx0XHQuY2FsbE9uQ2hhbmdlKHByZXZpb3VzKVxuXHRcdFx0XHRcdFx0LnJlc29sdmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkuY2F0Y2godGhpcy5lcnJvckhhbmRsZXIubm90aWZ5RXJyb3IpO1xuXHR9XG5cblx0aGFuZGxlUmVzcG9uc2UgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRyZXF1ZXN0SWRzOiBJdGVtSWRbXSxcblx0XHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMsXG5cdFx0cmVzcG9uc2U6IEFwaVJlc3BvbnNlLFxuXHRcdGNvbGxlY3Rpb25NYXA6IFNvY2tldENvbGxlY3Rpb25NYXBcblx0KTogR3JvdXBlZEV4dGVuZGVkQ29sbGVjdGlvbk1hdGNoUmVzdWx0IHtcblx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKTtcblx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucyk7XG5cdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucyk7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBvZiByZXF1ZXN0SWRzKSB7XG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSA8SXRlbUVudHJ5PiB0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXHRcdFx0Y29uc3QgaXNOZXcgPSBpdGVtRW50cnkuaW5pdGlhbCA9PT0gdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgZmllbGRzID0gcmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCk7XG5cblx0XHRcdGlmIChmaWVsZHMgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpdGVtRW50cnkucmVqZWN0KCk7XG5cblx0XHRcdFx0aWYgKGlzTmV3KVxuXHRcdFx0XHRcdHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5jbGVhcihpdGVtRW50cnkpO1xuXG5cdFx0XHRcdGRlbGV0ZSBjb2xsZWN0aW9uTWFwW2l0ZW1JZF07XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBkZXJpdmVkID0gcmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtbkluZm8ucm9vdCk7XG5cblx0XHRcdGlmIChpc05ldylcblx0XHRcdFx0aXRlbUVudHJ5LnJlc29sdmVEZWZlcnJlZChmaWVsZHMsIGRlcml2ZWQsIGNvbHVtbkluZm8pO1xuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGV4cGFuc2lvblJlc3VsdCA9IGNvbHVtbkV4cGFuc2lvbi5ydW4oaXRlbUVudHJ5LmNvbHVtbnMpO1xuXHRcdFx0XHRjb25zdCBwcmV2aW91cyA9IHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoXG5cdFx0XHRcdFx0aXRlbUVudHJ5LmdldEZpZWxkcygpLFxuXHRcdFx0XHRcdHt9LFxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5jb2x1bW5zLm1haW5cblx0XHRcdFx0KTtcblxuXHRcdFx0XHRpZiAoZXhwYW5zaW9uUmVzdWx0ICE9PSBudWxsKVxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5leHBhbmQoZmllbGRzLCBkZXJpdmVkLCBleHBhbnNpb25SZXN1bHQpO1xuXG5cdFx0XHRcdGl0ZW1FbnRyeVxuXHRcdFx0XHRcdC51cGRhdGVGaWVsZHMoZmllbGRzLCBkZXJpdmVkLCBmYWxzZSlcblx0XHRcdFx0XHQuY2FsbE9uQ2hhbmdlKHByZXZpb3VzKVxuXHRcdFx0XHRcdC5yZXNvbHZlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZ3JvdXBCeUNvbGxlY3Rpb25JZChpdGVtVHlwZSwgY29sbGVjdGlvbk1hcCk7XG5cdH1cblxuXHRwcml2YXRlIGlzRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZU1lc3NhZ2UgKG1lc3NhZ2U6IFNvY2tldE1lc3NhZ2UpOiBtZXNzYWdlIGlzIEZ1bmN0aW9uQ2hhbmdlc1Jlc29sdmVTb2NrZXRNZXNzYWdlIHtcblx0XHRyZXR1cm4gbWVzc2FnZS5ib2R5Lml0ZW1UeXBlID09PSAnRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZSc7XG5cdH1cblxuXHRoYW5kbGVDcmVhdGUgKG1lc3NhZ2U6IEZ1bmN0aW9uQ2hhbmdlc1Jlc29sdmVTb2NrZXRNZXNzYWdlKTogUHJvbWlzZUludGVyZmFjZTx2b2lkPjtcblx0aGFuZGxlQ3JlYXRlIChtZXNzYWdlOiBTb2NrZXRNZXNzYWdlKTogUHJvbWlzZUludGVyZmFjZTxJdGVtUmVzb3VyY2VbXT47XG5cdGhhbmRsZUNyZWF0ZSAobWVzc2FnZTogU29ja2V0TWVzc2FnZSk6IGFueSB7XG5cdFx0Y29uc3QgYm9keSA9IG1lc3NhZ2UuYm9keTtcblxuXHRcdGlmICh0aGlzLmlzRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZU1lc3NhZ2UobWVzc2FnZSkpXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZShib2R5KTtcblxuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NNZXNzYWdlKGJvZHkpLnRoZW4oXG5cdFx0XHRjb2xsZWN0aW9uTWFwID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuYWRkVG9Db2xsZWN0aW9ucyhjb2xsZWN0aW9uTWFwLCB0cnVlKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLmNhdGNoKHRoaXMuZXJyb3JIYW5kbGVyLm5vdGlmeUVycm9yKTtcblx0fVxuXG5cdGhhbmRsZVVwZGF0ZSAobWVzc2FnZTogU29ja2V0TWVzc2FnZSk6IFByb21pc2VJbnRlcmZhY2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NNZXNzYWdlKG1lc3NhZ2UuYm9keSkudGhlbihcblx0XHRcdGNvbGxlY3Rpb25NYXAgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5yZW1vdmVGcm9tQW5kQWRkVG9Db2xsZWN0aW9ucyhjb2xsZWN0aW9uTWFwLCB0cnVlKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLmNhdGNoKHRoaXMuZXJyb3JIYW5kbGVyLm5vdGlmeUVycm9yKTtcblx0fVxuXG5cdGhhbmRsZURlbGV0ZSAobWVzc2FnZTogU29ja2V0TWVzc2FnZSk6IFByb21pc2VJbnRlcmZhY2U8dm9pZD4ge1xuXHRcdGNvbnN0IGJvZHkgPSBtZXNzYWdlLmJvZHk7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBib2R5Lml0ZW1UeXBlO1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGVzID0gdGhpcy5sb2NhbENhY2hlTWFuYWdlci5nZXRBbGxMb2NhbENhY2hlcygpO1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25NYXA6IHtbY29sbGVjdGlvbklkOiBudW1iZXJdOiB7Y29sbGVjdGlvbjogQ29sbGVjdGlvbkVudHJ5LCBpdGVtczogSXRlbUlkW119fSA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgYm9keS5pdGVtcykge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmVudHJpZXMuZ2V0QnlDb250YWluaW5nSXRlbShpdGVtVHlwZSwgaXRlbUlkKTtcblxuXHRcdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uIG9mIGNvbGxlY3Rpb25zKSB7XG5cdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25JZCA9IGNvbGxlY3Rpb24uaWQ7XG5cblx0XHRcdFx0aWYgKGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXSA9IHtjb2xsZWN0aW9uOiBjb2xsZWN0aW9uLCBpdGVtczogW119O1xuXG5cdFx0XHRcdGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXS5pdGVtcy5wdXNoKGl0ZW1JZCk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5jbGVhckJ5SXRlbUlkKGl0ZW1UeXBlLCBpdGVtSWQpO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGxvY2FsQ2FjaGUgb2YgbG9jYWxDYWNoZXMpXG5cdFx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMuY2xlYXJCeUl0ZW1JZChpdGVtVHlwZSwgaXRlbUlkKTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXTtcblx0XHRcdG1hcEVudHJ5LmNvbGxlY3Rpb24ucmVtb3ZlSXRlbXMobWFwRW50cnkuaXRlbXMsIG51bGwsIHRydWUpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcblx0fVxuXG5cdC8vIFRPRE8hXG5cdGhhbmRsZUxpbmtNb3ZlICgpOiBQcm9taXNlSW50ZXJmYWNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XG5cdH1cblxuXHQvKlx0aGFuZGxlTGlua01vdmUgKG1lc3NhZ2UpIHtcblx0XHRcdHByb2Nlc3NNZXNzYWdlKFxuXHRcdFx0XHRtZXNzYWdlLFxuXHRcdFx0XHRmdW5jdGlvbiAoY29sbGVjdGlvbiwgaXRlbUVudHJpZXMpIHtcblx0XHRcdFx0XHQvLyBmaXRzIGluIHRoaXMgY29sbGVjdGlvbiwgdG9kbzogZ2V0IHRoZSBvbGQgY29sbGVjdGlvbiBpdCBiZWxvbmdlZCB0b1xuXHRcdFx0XHRcdGNvbGxlY3Rpb24ubW92ZUl0ZW1zKGl0ZW1FbnRyaWVzLCBudWxsLCB0cnVlKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0ZnVuY3Rpb24gKGNvbGxlY3Rpb24sIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRcdFx0Ly8gbWF5YmUgZml0c1xuXHRcdFx0XHRcdC8vIHRvZG86IGFsc28gcmVtb3ZlIHRoZW0gZnJvbSB0aGUgb2xkIGNvbGxlY3Rpb25cblx0XHRcdFx0XHRjb2xsZWN0aW9uLmV4dGVuZChhbmd1bGFyLmlkZW50aXR5LCBmYWxzZSwgZmFsc2UpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRmdW5jdGlvbiAoY29sbGVjdGlvbiwgaWRzKSB7XG5cdFx0XHRcdFx0Ly8gbm90IGZpdHRpbmcgaW4gdGhpcyBjb2xsZWN0aW9uLCByZW1vdmUgaXQgP1xuXHRcdFx0XHRcdGNvbGxlY3Rpb24ucmVtb3ZlSXRlbXMoaWRzLCBudWxsLCBtZXNzYWdlKTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9XG5cdCovXG59XG4iLCJleHBvcnQgKiBmcm9tICcuL0FwaUZvcm1hdHRlcic7XG5leHBvcnQgKiBmcm9tICcuL0FwaVJlcXVlc3RTZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vQXBpUmVzcG9uc2VQcm9jZXNzb3InO1xuZXhwb3J0ICogZnJvbSAnLi9CYXRjaFN0YXR1cyc7XG5leHBvcnQgKiBmcm9tICcuL0NoYW5nZXNDb21waWxhdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL0NoYW5nZXNQcm9jZXNzb3InO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uQ2FjaGUnO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uRW50cnlTZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkhhbmRsZXInO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uTWF0Y2hlcic7XG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5DYWNoZSc7XG5leHBvcnQgKiBmcm9tICcuL0NvbHVtbkV4cGFuc2lvbic7XG5leHBvcnQgKiBmcm9tICcuL0NvbHVtbkhhbmRsZXInO1xuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5JbmZvJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uU2V0JztcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uU3Vic2V0Q2FjaGUnO1xuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5VdGlsJztcbmV4cG9ydCAqIGZyb20gJy4vQ3JlYXRlUmVxdWVzdCc7XG5leHBvcnQgKiBmcm9tICcuL0l0ZW1BZG1pbmlzdHJhdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vSXRlbUNhY2hlJztcbmV4cG9ydCAqIGZyb20gJy4vSXRlbUVudHJ5U2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL0l0ZW1IYW5kbGVyJztcbmV4cG9ydCAqIGZyb20gJy4vSXRlbVJlcXVlc3RTZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vS2V5U2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL0xvY2FsQ2FjaGUnO1xuZXhwb3J0ICogZnJvbSAnLi9Mb2NrU2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL01vZHVsZUNoYW5nZXNDb21waWxhdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL1F1ZXJ5TWF0Y2hlcic7XG5leHBvcnQgKiBmcm9tICcuL1F1ZXJ5UGFyc2VyJztcbmV4cG9ydCAqIGZyb20gJy4vUXVlcnlTZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vUmVxdWVzdENvbHVtbkV4cGFuc2lvbic7XG5leHBvcnQgKiBmcm9tICcuL1NvY2tldE1lc3NhZ2VIYW5kbGVyJztcbmV4cG9ydCAqIGZyb20gJy4vVXRpbCc7XG4iLCJpbXBvcnQgeyBBcGlGb3JtYXR0ZXIsIEFwaVJlc3BvbnNlUHJvY2Vzc29yIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5cbmV4cG9ydCBjbGFzcyBBcGlSZXNwb25zZVByb2Nlc3NvckZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAocHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcikge1xuXG5cdH1cblxuXHRjb25zdHJ1Y3QgKHJlc3BvbnNlOiBhbnkpOiBBcGlSZXNwb25zZVByb2Nlc3NvciB7XG5cdFx0cmV0dXJuIG5ldyBBcGlSZXNwb25zZVByb2Nlc3Nvcih0aGlzLmFwaUZvcm1hdHRlciwgcmVzcG9uc2UpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBCYXRjaFN0YXR1cyB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEl0ZW1JZCwgSXRlbVR5cGUsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBCYXRjaFN0YXR1c0ZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXG5cdCkge1xuXHR9XG5cblx0Y29uc3RydWN0PFQ+IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0Z2V0SXRlbUlkOiAoZW50cnk6IFQpID0+IEl0ZW1JZCxcblx0XHRnZXRQcm9taXNlOiAoZW50cnk6IFQpID0+IFByb21pc2VJbnRlcmZhY2U8VD5cblx0KTogQmF0Y2hTdGF0dXM8VD4ge1xuXHRcdHJldHVybiBuZXcgQmF0Y2hTdGF0dXMoXG5cdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlLFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRnZXRJdGVtSWQsXG5cdFx0XHRnZXRQcm9taXNlXG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ2hhbmdlc0NvbXBpbGF0aW9uLCBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XG5cbmltcG9ydCB7IENvbGxlY3Rpb25DYWNoZUZhY3RvcnkgfSBmcm9tICcuLyc7XG5cbmV4cG9ydCBjbGFzcyBDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlRmFjdG9yeTogQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2Vcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3QgKHNpbmdsZUl0ZW1zOiBJdGVtRW50cnlbXSwgY29sbGVjdGlvbnM6IENvbGxlY3Rpb25FbnRyeVtdKTogQ2hhbmdlc0NvbXBpbGF0aW9uIHtcblx0XHRyZXR1cm4gbmV3IENoYW5nZXNDb21waWxhdGlvbihcblx0XHRcdHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0XHRcdHRoaXMua2V5U2VydmljZSxcblx0XHRcdHNpbmdsZUl0ZW1zLFxuXHRcdFx0Y29sbGVjdGlvbnNcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQge1xuXHRBcGlGb3JtYXR0ZXIsXG5cdENoYW5nZXNQcm9jZXNzb3IsXG5cdENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdENvbGxlY3Rpb25IYW5kbGVyLFxuXHRJdGVtSGFuZGxlclxufSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7XG5cdENoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXG5cdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdENyZWF0ZVJlcXVlc3RGYWN0b3J5LFxuXHRSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxufSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNsYXNzIENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5OiBDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkVudHJ5U2VydmljZTogQ29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjcmVhdGVSZXF1ZXN0RmFjdG9yeTogQ3JlYXRlUmVxdWVzdEZhY3RvcnksXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZSxcblx0XHRwcml2YXRlIHJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxuXHQpIHtcblxuXHR9XG5cblx0Y29uc3RydWN0ICgpOiBDaGFuZ2VzUHJvY2Vzc29yIHtcblx0XHRyZXR1cm4gbmV3IENoYW5nZXNQcm9jZXNzb3IoXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHR0aGlzLmNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5jcmVhdGVSZXF1ZXN0RmFjdG9yeSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLFxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcblx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2UsXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XG5cdFx0KTtcblx0fVxuXG59XG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IFF1ZXJ5TWF0Y2hlckZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3Rvcnlcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3QgKCk6IENvbGxlY3Rpb25DYWNoZSB7XG5cdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uQ2FjaGUoXG5cdFx0XHR0aGlzLnF1ZXJ5TWF0Y2hlckZhY3Rvcnlcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQge1xuXHRDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRDb2x1bW5IYW5kbGVyLFxuXHRJdGVtRW50cnlTZXJ2aWNlLFxuXHRJdGVtSGFuZGxlcixcblx0SXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRLZXlTZXJ2aWNlLFxuXHRRdWVyeVNlcnZpY2Vcbn0gZnJvbSAnLi4vY2xhc3Nlcy8nO1xuaW1wb3J0IHsgQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSwgQ29sdW1uU2V0RmFjdG9yeSwgSXRlbUVudHJ5RmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcy8nO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlTGlicmFyeUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgQ29sbGVjdGlvbkVudHJ5T3B0aW9ucywgQ29sbGVjdGlvbkVudHJ5T3B0aW9uc0ludGVyZmFjZSB9IGZyb20gJy4uL21vZGVscy8nO1xuaW1wb3J0IHsgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcy8nO1xuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkVudHJ5RmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwdWJsaWMgY29sbGVjdGlvbkVudHJ5U2VydmljZTogQ29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0XHRwdWJsaWMgY29sdW1uSGFuZGxlcjogQ29sdW1uSGFuZGxlcixcblx0XHRwdWJsaWMgY29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRwdWJsaWMgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcblx0XHRwdWJsaWMgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHVibGljIGl0ZW1FbnRyeUZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3RvcnksXG5cdFx0cHVibGljIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0cHVibGljIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcblx0XHRwdWJsaWMgaXRlbVJlcXVlc3RTZXJ2aWNlOiBJdGVtUmVxdWVzdFNlcnZpY2UsXG5cdFx0cHVibGljIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXG5cdFx0cHVibGljIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZSxcblx0XHRwdWJsaWMgcXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2Vcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3QgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgb3B0aW9uczogQ29sbGVjdGlvbkVudHJ5T3B0aW9uc0ludGVyZmFjZSk6IENvbGxlY3Rpb25FbnRyeSB7XG5cdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uRW50cnkoXG5cdFx0XHR0aGlzLFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRuZXcgQ29sbGVjdGlvbkVudHJ5T3B0aW9ucyhvcHRpb25zKVxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSwgQ29sbGVjdGlvbk1hdGNoZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IFF1ZXJ5TWF0Y2hlckZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeVxuXHQpIHtcblx0fVxuXG5cdGNvbnN0cnVjdCAoY29sbGVjdGlvbkNhY2hlczogQ29sbGVjdGlvbkNhY2hlW10sIHVwZGF0ZUluaXRpYWw6IGJvb2xlYW4sIGNhbGxPbkFjdGl2YXRlOiBib29sZWFuKTogQ29sbGVjdGlvbk1hdGNoZXIge1xuXHRcdHJldHVybiBuZXcgQ29sbGVjdGlvbk1hdGNoZXIoXG5cdFx0XHR0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnksXG5cdFx0XHRjb2xsZWN0aW9uQ2FjaGVzLFxuXHRcdFx0dXBkYXRlSW5pdGlhbCxcblx0XHRcdGNhbGxPbkFjdGl2YXRlXG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgS2V5U2VydmljZSwgTG9jYWxDYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksIEl0ZW1SZXNvdXJjZUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlTGlicmFyeUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHtcblx0Q29sbGVjdGlvbkVkaXRSZXNvdXJjZSxcblx0Q29sbGVjdGlvbkVudHJ5LFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zLFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlLFxuXHRDb2xsZWN0aW9uVmlld1Jlc291cmNlLCBFZGl0UmVzb3VyY2UsIFZpZXdSZXNvdXJjZVxufSBmcm9tICcuLi9tb2RlbHMnO1xuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwdWJsaWMgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHVibGljIGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHVibGljIGNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5OiBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcblx0XHRwdWJsaWMga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwdWJsaWMgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlXG5cdCkge1xuXG5cdH1cblxuXHRjb25zdHJ1Y3QgKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdEl0ZW1zOiB0cnVlLCBlZGl0Q29sbGVjdGlvbjogdHJ1ZX0sXG5cdFx0bG9jYWxDYWNoZTogTG9jYWxDYWNoZVxuXHQpOiBDb2xsZWN0aW9uRWRpdFJlc291cmNlPEVkaXRSZXNvdXJjZT47XG5cblx0Y29uc3RydWN0IChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlICYge2VkaXRDb2xsZWN0aW9uOiB0cnVlfSxcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlXG5cdCk6IENvbGxlY3Rpb25FZGl0UmVzb3VyY2U8Vmlld1Jlc291cmNlPjtcblxuXHRjb25zdHJ1Y3QgKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdEl0ZW1zOiB0cnVlfSxcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlXG5cdCk6IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8RWRpdFJlc291cmNlPjtcblxuXHRjb25zdHJ1Y3QgKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UsXG5cdFx0bG9jYWxDYWNoZTogTG9jYWxDYWNoZVxuXHQpOiBDb2xsZWN0aW9uVmlld1Jlc291cmNlPFZpZXdSZXNvdXJjZT47XG5cblx0Y29uc3RydWN0IChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgb3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZSwgbG9jYWxDYWNoZTogTG9jYWxDYWNoZSkge1xuXHRcdGNvbnN0IG9wdGlvbnNJbnN0YW5jZSA9IG5ldyBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zKG9wdGlvbnMpO1xuXG5cdFx0aWYgKG9wdGlvbnNJbnN0YW5jZS5lZGl0SXRlbXMpXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuaGFzSXRlbUVkaXRSZXNvdXJjZXMgPSB0cnVlO1xuXG5cdFx0aWYgKG9wdGlvbnNJbnN0YW5jZS5lZGl0Q29sbGVjdGlvbikge1xuXHRcdFx0Y29sbGVjdGlvbkVudHJ5Lmhhc0VkaXRSZXNvdXJjZXMgPSB0cnVlO1xuXG5cdFx0XHRpZiAob3B0aW9uc0luc3RhbmNlLmVkaXRJdGVtcylcblx0XHRcdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uRWRpdFJlc291cmNlPEVkaXRSZXNvdXJjZT4odGhpcywgY29sbGVjdGlvbkVudHJ5LCBvcHRpb25zSW5zdGFuY2UsIGxvY2FsQ2FjaGUpO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRyZXR1cm4gbmV3IENvbGxlY3Rpb25FZGl0UmVzb3VyY2U8Vmlld1Jlc291cmNlPih0aGlzLCBjb2xsZWN0aW9uRW50cnksIG9wdGlvbnNJbnN0YW5jZSwgbG9jYWxDYWNoZSk7XG5cdFx0fVxuXG5cdFx0aWYgKG9wdGlvbnNJbnN0YW5jZS5lZGl0SXRlbXMpXG5cdFx0XHRyZXR1cm4gbmV3IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8RWRpdFJlc291cmNlPih0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnksIGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9uc0luc3RhbmNlLCBsb2NhbENhY2hlKTtcblxuXHRcdHJldHVybiBuZXcgQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxWaWV3UmVzb3VyY2U+KHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSwgY29sbGVjdGlvbkVudHJ5LCBvcHRpb25zSW5zdGFuY2UsIGxvY2FsQ2FjaGUpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5FeHBhbnNpb24gfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENvbHVtbkluZm9GYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEFwaVJlcXVlc3RDb2x1bW5zLCBJdGVtVHlwZSwgUmVzcG9uc2VDb2x1bW5NYXAgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5FeHBhbnNpb25GYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sdW1uSW5mb0ZhY3Rvcnk6IENvbHVtbkluZm9GYWN0b3J5XG5cdCkge1xuXG5cdH1cblxuXHRjb25zdHJ1Y3QgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwKTogQ29sdW1uRXhwYW5zaW9uIHtcblx0XHRyZXR1cm4gbmV3IENvbHVtbkV4cGFuc2lvbih0aGlzLmNvbHVtbkluZm9GYWN0b3J5LCBpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucyk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtbkluZm8gfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IFJlc3BvbnNlQ29sdW1uIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uSW5mb0ZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoKSB7fVxuXG5cdGNvbnN0cnVjdCAoYXBpQ29sdW1uOiBSZXNwb25zZUNvbHVtbiwgcGFyZW50OiBDb2x1bW5JbmZvIHwgbnVsbCk6IENvbHVtbkluZm8ge1xuXHRcdHJldHVybiBuZXcgQ29sdW1uSW5mbyhhcGlDb2x1bW4sIHBhcmVudCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtbkhhbmRsZXIsIENvbHVtblNldCwgQ29sdW1uVXRpbCB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQ29sdW1uSW5mb0ZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdENvbHVtbnMsIEl0ZW1UeXBlLCBSZXNwb25zZUNvbHVtbk1hcCB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIENvbHVtblNldEZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbCxcblx0XHRwcml2YXRlIGNvbHVtbkluZm9GYWN0b3J5OiBDb2x1bW5JbmZvRmFjdG9yeVxuXHQpIHtcblx0fVxuXG5cdGNvbnN0cnVjdFN0dWIgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zKSB7XG5cdFx0cmV0dXJuIG5ldyBDb2x1bW5TZXQoXG5cdFx0XHR0aGlzLmNvbHVtbkhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbHVtblV0aWwsXG5cdFx0XHR0aGlzLmNvbHVtbkluZm9GYWN0b3J5LFxuXHRcdFx0dGhpcyxcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0cmVxdWVzdENvbHVtbnNcblx0XHQpO1xuXHR9XG5cblx0Y29uc3RydWN0IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRcdHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXAsXG5cdFx0ZW5hYmxlQ2FjaGluZz86IGJvb2xlYW4sXG5cdFx0aW5jbHVkZUlkQ29sdW1uPzogYm9vbGVhblxuXHQpIHtcblx0XHRyZXR1cm4gdGhpcy5jb25zdHJ1Y3RTdHViKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucykucmVzb2x2ZShyZXNwb25zZUNvbHVtbnMsIGVuYWJsZUNhY2hpbmcsIGluY2x1ZGVJZENvbHVtbik7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtblN1YnNldENhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0Q29sdW1ucyB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIENvbHVtblN1YnNldENhY2hlRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yICgpIHt9XG5cblx0Y29uc3RydWN0IChyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMpOiBDb2x1bW5TdWJzZXRDYWNoZSB7XG5cdFx0cmV0dXJuIG5ldyBDb2x1bW5TdWJzZXRDYWNoZShyZXF1ZXN0Q29sdW1ucyk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSwgQ29sbGVjdGlvbkhhbmRsZXIsIENyZWF0ZUNvbXBpbGF0aW9uLCBDcmVhdGVSZXF1ZXN0LCBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksIFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVSZXF1ZXN0RmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeTogQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwcml2YXRlIHJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxuXHQpIHtcblxuXHR9XG5cblx0Y29uc3RydWN0IChcblx0XHRjb21waWxhdGlvbjogQ3JlYXRlQ29tcGlsYXRpb24sXG5cdFx0bG9jYWxDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZSxcblx0XHRwYXJhbWV0ZXJNYXA6IENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAsXG5cdFx0YnJlYWt1cEJ5UGFyZW50PzogYm9vbGVhblxuXHQpOiBDcmVhdGVSZXF1ZXN0IHtcblx0XHRyZXR1cm4gbmV3IENyZWF0ZVJlcXVlc3QoXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdFx0Y29tcGlsYXRpb24sXG5cdFx0XHRsb2NhbENvbGxlY3Rpb25DYWNoZSxcblx0XHRcdHBhcmFtZXRlck1hcCxcblx0XHRcdGJyZWFrdXBCeVBhcmVudFxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEl0ZW1DYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5cbmV4cG9ydCBjbGFzcyBJdGVtQ2FjaGVGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeVxuXHQpIHtcblx0fVxuXG5cdGNvbnN0cnVjdCAoKTogSXRlbUNhY2hlIHtcblx0XHRyZXR1cm4gbmV3IEl0ZW1DYWNoZSh0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBBcGlGb3JtYXR0ZXIsIENvbHVtblNldCwgSXRlbUVudHJ5U2VydmljZSwgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQ29sdW1uU2V0RmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBBdXRoSW50ZXJmYWNlLCBQcm9taXNlTGlicmFyeUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgSXRlbUVudHJ5LCBUZW1wbGF0ZSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0Q29sdW1ucywgRW50cnlQYXJlbnROdWxsLCBGaWVsZE1hcCwgSXRlbUlkLCBJdGVtSWRDb252ZXJzaW9uTWFwLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIEl0ZW1FbnRyeUZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHVibGljIGF1dGhJbnRlcmZhY2U6IEF1dGhJbnRlcmZhY2UsXG5cdFx0cHVibGljIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxuXHRcdHB1YmxpYyBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxuXHRcdHB1YmxpYyBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxuXHRcdHB1YmxpYyBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuXHRcdHB1YmxpYyBwcm9taXNlU2VydmljZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2Vcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3RTdHViIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkLCBjb2x1bW5TZXRTdHViOiBDb2x1bW5TZXQpOiBJdGVtRW50cnkge1xuXHRcdHJldHVybiBuZXcgSXRlbUVudHJ5KHRoaXMsIGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtblNldFN0dWIpO1xuXHR9XG5cblx0Y29uc3RydWN0TG9jYWxMaW5rZWQgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtSWQ6IEl0ZW1JZCxcblx0XHRpbml0aWFsOiBGaWVsZE1hcCxcblx0XHRwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCxcblx0XHRjb2x1bW5TZXQ6IENvbHVtblNldCxcblx0XHRjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwXG5cdCk6IEl0ZW1FbnRyeSB7XG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5jb25zdHJ1Y3RTdHViKGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtblNldCk7XG5cblx0XHRpdGVtRW50cnkucGFyZW50ID0gcGFyZW50O1xuXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeS5zZXRMb2NhbEZpZWxkcyhpbml0aWFsLCBjb252ZXJzaW9uTWFwKTtcblx0fVxuXG5cdGNvbnN0cnVjdExvY2FsIChcblx0XHRpdGVtSWQ6IEl0ZW1JZCxcblx0XHR0ZW1wbGF0ZTogVGVtcGxhdGUsXG5cdFx0bW9kaWZpZWQ6IEZpZWxkTWFwLFxuXHRcdGRlcml2ZWQ6IEZpZWxkTWFwLFxuXHRcdHBhcmVudDogRW50cnlQYXJlbnROdWxsID0gbnVsbCxcblx0XHRjb2x1bW5TZXQ6IENvbHVtblNldCA9IHRlbXBsYXRlLmNvbHVtbnMsXG5cdFx0Y29udmVyc2lvbk1hcD86IEl0ZW1JZENvbnZlcnNpb25NYXBcblx0KTogSXRlbUVudHJ5IHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IHRlbXBsYXRlLmNvbHVtbnMuaXRlbVR5cGU7XG5cblx0XHRpZiAoY29udmVyc2lvbk1hcCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0Y29udmVyc2lvbk1hcCA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5jcmVhdGVMb2NhbENvbnZlcnNpb25NYXAoaXRlbVR5cGUsIGl0ZW1JZCwgdHJ1ZSwgdGVtcGxhdGUucmVzcG9uc2UpO1xuXG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5jb25zdHJ1Y3RTdHViKGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtblNldCk7XG5cblx0XHRpdGVtRW50cnkucGFyZW50ID0gcGFyZW50O1xuXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeVxuXHRcdFx0LnNldExvY2FsRmllbGRzKHRlbXBsYXRlLmZpZWxkcywgY29udmVyc2lvbk1hcCwgdGVtcGxhdGUuY29sdW1ucylcblx0XHRcdC5zZXRNb2RpZmllZChtb2RpZmllZClcblx0XHRcdC5zZXREZXJpdmVkKGRlcml2ZWQpO1xuXHR9XG5cblx0Y29uc3RydWN0RGVmZXJyZWQgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtSWQ6IEl0ZW1JZCxcblx0XHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMsXG5cdFx0ZGVmZXJSZXF1ZXN0OiBib29sZWFuXG5cdCk6IEl0ZW1FbnRyeSB7XG5cdFx0Y29uc3QgaXRlbUVudHJ5U3R1YiA9IHRoaXMuY29uc3RydWN0U3R1Yihcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkLFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdFN0dWIoXG5cdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRyZXF1ZXN0Q29sdW1uc1xuXHRcdFx0KVxuXHRcdCk7XG5cblx0XHRpdGVtRW50cnlTdHViLmRlZmVyKGRlZmVyUmVxdWVzdCk7XG5cblx0XHRyZXR1cm4gaXRlbUVudHJ5U3R1Yjtcblx0fVxuXG5cdGNvbnN0cnVjdCAoXG5cdFx0aXRlbUlkOiBJdGVtSWQsXG5cdFx0aW5pdGlhbDogRmllbGRNYXAsXG5cdFx0ZGVyaXZlZDogRmllbGRNYXAsXG5cdFx0Y29sdW1uSW5mbzogQ29sdW1uU2V0XG5cdCk6IEl0ZW1FbnRyeSB7XG5cdFx0cmV0dXJuIHRoaXMuY29uc3RydWN0U3R1Yihcblx0XHRcdGNvbHVtbkluZm8uaXRlbVR5cGUsXG5cdFx0XHRpdGVtSWQsIC8vIGluaXRpYWwuaWQgKHdoZW4gaW5pdGlhbCBpcyBub3QgYSB0ZW1wbGF0ZSlcblx0XHRcdGNvbHVtbkluZm8sXG5cdFx0KS5zZXRGaWVsZHMoXG5cdFx0XHRpbml0aWFsLCAvLyBjYW4gYWxzbyBiZSBhIHRlbXBsYXRlXG5cdFx0XHRkZXJpdmVkLFxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEFwaUZvcm1hdHRlciwgQ2hhbmdlc1Byb2Nlc3NvciwgTG9ja1NlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEVkaXRSZXNvdXJjZSwgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2VPcHRpb25zLCBWaWV3UmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgSXRlbU9wdGlvbnNJbnRlcmZhY2UgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBJdGVtUmVzb3VyY2VGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHB1YmxpYyBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcblx0XHRwdWJsaWMgbG9ja1NlcnZpY2U6IExvY2tTZXJ2aWNlLFxuXHRcdHB1YmxpYyBjaGFuZ2VzUHJvY2Vzc29yOiBDaGFuZ2VzUHJvY2Vzc29yLFxuXHRcdHB1YmxpYyBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwdWJsaWMgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlXG5cdCkge1xuXHR9XG5cblx0Z2V0Q29uc3RydWN0b3IgKG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlICYge2VkaXQ6IHRydWV9KTogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBFZGl0UmVzb3VyY2U7XG5cdGdldENvbnN0cnVjdG9yIChvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSk6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gVmlld1Jlc291cmNlO1xuXHRnZXRDb25zdHJ1Y3RvciAob3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UpIHtcblx0XHRjb25zdCBvcHRpb25zSW5zdGFuY2UgPSBuZXcgSXRlbVJlc291cmNlT3B0aW9ucyhvcHRpb25zKTtcblxuXHRcdHJldHVybiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IHtcblx0XHRcdHJldHVybiBvcHRpb25zSW5zdGFuY2UuZWRpdCA/XG5cdFx0XHRcdG5ldyBFZGl0UmVzb3VyY2UodGhpcywgaXRlbUVudHJ5LCBvcHRpb25zSW5zdGFuY2UpIDpcblx0XHRcdFx0bmV3IFZpZXdSZXNvdXJjZShpdGVtRW50cnksIG9wdGlvbnNJbnN0YW5jZSk7XG5cdFx0fTtcblx0fVxuXG5cdGNvbnN0cnVjdCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlICYge2VkaXQ6IHRydWV9LCBpc05ldz86IGJvb2xlYW4pOiBFZGl0UmVzb3VyY2U7XG5cdGNvbnN0cnVjdCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlLCBpc05ldz86IGJvb2xlYW4pOiBWaWV3UmVzb3VyY2U7XG5cdGNvbnN0cnVjdCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlLCBpc05ldz86IGJvb2xlYW4pIHtcblx0XHRjb25zdCBvcHRpb25zSW5zdGFuY2UgPSBuZXcgSXRlbVJlc291cmNlT3B0aW9ucyhvcHRpb25zKTtcblxuXHRcdHJldHVybiBvcHRpb25zLmVkaXQgP1xuXHRcdFx0bmV3IEVkaXRSZXNvdXJjZSh0aGlzLCBpdGVtRW50cnksIG9wdGlvbnNJbnN0YW5jZSwgaXNOZXcpIDpcblx0XHRcdG5ldyBWaWV3UmVzb3VyY2UoaXRlbUVudHJ5LCBvcHRpb25zSW5zdGFuY2UsIGlzTmV3KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgTG9jYWxDYWNoZSwgTG9ja1NlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7XG5cdENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRJdGVtQ2FjaGVGYWN0b3J5LFxuXHRJdGVtUmVzb3VyY2VGYWN0b3J5XG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBjbGFzcyBMb2NhbENhY2hlRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgbG9ja1NlcnZpY2U6IExvY2tTZXJ2aWNlLFxuXHRcdHByaXZhdGUgaXRlbVJlc291cmNlRmFjdG9yeTogSXRlbVJlc291cmNlRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25DYWNoZUZhY3Rvcnk6IENvbGxlY3Rpb25DYWNoZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeTogQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBpdGVtQ2FjaGVGYWN0b3J5OiBJdGVtQ2FjaGVGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sbGVjdGlvblJlc291cmNlRmFjdG9yeTogQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZVxuXHQpIHtcblxuXHR9XG5cblx0Y29uc3RydWN0IChpZD86IHN0cmluZyk6IExvY2FsQ2FjaGUge1xuXHRcdHJldHVybiBuZXcgTG9jYWxDYWNoZShcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLFxuXHRcdFx0dGhpcy5sb2NrU2VydmljZSxcblx0XHRcdHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0XHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXG5cdFx0XHR0aGlzLml0ZW1DYWNoZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlLFxuXHRcdFx0aWRcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUsIEl0ZW1DYWNoZSwgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuXG5leHBvcnQgY2xhc3MgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSB7XG5cdGNvbnN0cnVjdCAocm9vdEl0ZW06IEl0ZW1FbnRyeSwgc2luZ2xlSXRlbUNhY2hlOiBJdGVtQ2FjaGUsIGNvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlKTogTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uIHtcblx0XHRyZXR1cm4gbmV3IE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbihyb290SXRlbSwgc2luZ2xlSXRlbUNhY2hlLCBjb2xsZWN0aW9uQ2FjaGUpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBBcGlGb3JtYXR0ZXIsIFF1ZXJ5TWF0Y2hlciB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgRW50cnlQYXJlbnROdWxsLCBGaWVsZE1hcCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBRdWVyeU1hdGNoZXJGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXJcblx0KSB7XG5cblx0fVxuXG5cdGNvbnN0cnVjdCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBmaWVsZHM6IEZpZWxkTWFwLCBwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCk6IFF1ZXJ5TWF0Y2hlciB7XG5cdFx0cmV0dXJuIG5ldyBRdWVyeU1hdGNoZXIoXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0ZmllbGRzLFxuXHRcdFx0cGFyZW50XG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgUXVlcnlQYXJzZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEFwaVF1ZXJ5IH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgUXVlcnlQYXJzZXJGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKCkge1xuXHR9XG5cblx0Y29uc3RydWN0IChxdWVyeTogQXBpUXVlcnksIHBhcmFtZXRlcnM/OiBhbnkpOiBRdWVyeVBhcnNlciB7XG5cdFx0cmV0dXJuIG5ldyBRdWVyeVBhcnNlcihxdWVyeSwgcGFyYW1ldGVycyk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtblV0aWwsIFJlcXVlc3RDb2x1bW5FeHBhbnNpb24gfSBmcm9tICcuLi9jbGFzc2VzJztcblxuZXhwb3J0IGNsYXNzIFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxuXHQpIHtcblx0fVxuXG5cdGNvbnN0cnVjdCAoKTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbiB7XG5cdFx0cmV0dXJuIG5ldyBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uKFxuXHRcdFx0dGhpcy5jb2x1bW5VdGlsXG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sdW1uVXRpbCB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQ29sdW1uU2V0RmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBBcGlSZXNwb25zZSwgSXRlbVR5cGUsIFJlc3BvbnNlQ29sdW1uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHB1YmxpYyBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxuXHRcdHB1YmxpYyBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXG5cdCkge31cblxuXHRjb25zdHJ1Y3QgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcmVzcG9uc2U6IEFwaVJlc3BvbnNlLCBhZGRpdGlvbmFsQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXApOiBUZW1wbGF0ZSB7XG5cdFx0cmV0dXJuIG5ldyBUZW1wbGF0ZSh0aGlzLCBpdGVtVHlwZSwgcmVzcG9uc2UsIGFkZGl0aW9uYWxDb2x1bW5zKTtcblx0fVxufVxuIiwiZXhwb3J0ICogZnJvbSAnLi9BcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9CYXRjaFN0YXR1c0ZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9DaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uQ2FjaGVGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkVudHJ5RmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5FeHBhbnNpb25GYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uSW5mb0ZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5TZXRGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uU3Vic2V0Q2FjaGVGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vQ3JlYXRlUmVxdWVzdEZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9JdGVtQ2FjaGVGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vSXRlbUVudHJ5RmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0l0ZW1SZXNvdXJjZUZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9Mb2NhbENhY2hlRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL01vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9RdWVyeU1hdGNoZXJGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vUXVlcnlQYXJzZXJGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9UZW1wbGF0ZUZhY3RvcnknO1xuIiwiaW1wb3J0IHtcblx0QXBpRm9ybWF0dGVyLFxuXHRBcGlSZXF1ZXN0U2VydmljZSxcblx0Q29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0Q29sbGVjdGlvbkhhbmRsZXIsXG5cdENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UsXG5cdENvbHVtbkNhY2hlLFxuXHRDb2x1bW5IYW5kbGVyLFxuXHRDb2x1bW5VdGlsLFxuXHRJdGVtQWRtaW5pc3RyYXRvcixcblx0SXRlbUVudHJ5U2VydmljZSxcblx0SXRlbUhhbmRsZXIsXG5cdEl0ZW1SZXF1ZXN0U2VydmljZSxcblx0S2V5U2VydmljZSxcblx0TG9ja1NlcnZpY2UsXG5cdFF1ZXJ5U2VydmljZSxcblx0U29ja2V0TWVzc2FnZUhhbmRsZXJcbn0gZnJvbSAnLi9jbGFzc2VzJztcbmltcG9ydCB7XG5cdEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSxcblx0QmF0Y2hTdGF0dXNGYWN0b3J5LFxuXHRDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxuXHRDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcblx0Q29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0Q29sbGVjdGlvbkVudHJ5RmFjdG9yeSxcblx0Q29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRDb2x1bW5JbmZvRmFjdG9yeSxcblx0Q29sdW1uU2V0RmFjdG9yeSxcblx0Q29sdW1uU3Vic2V0Q2FjaGVGYWN0b3J5LFxuXHRDcmVhdGVSZXF1ZXN0RmFjdG9yeSxcblx0SXRlbUNhY2hlRmFjdG9yeSxcblx0SXRlbUVudHJ5RmFjdG9yeSxcblx0SXRlbVJlc291cmNlRmFjdG9yeSxcblx0TG9jYWxDYWNoZUZhY3RvcnksXG5cdE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXG5cdFF1ZXJ5TWF0Y2hlckZhY3RvcnksXG5cdFF1ZXJ5UGFyc2VyRmFjdG9yeSxcblx0UmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksIFRlbXBsYXRlRmFjdG9yeVxufSBmcm9tICcuL2ZhY3Rvcmllcyc7XG5pbXBvcnQge1xuXHRBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0QXV0aEludGVyZmFjZSxcblx0RXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRMb2NhbENhY2hlTWFuYWdlckludGVyZmFjZSxcblx0UHJvbWlzZUxpYnJhcnlJbnRlcmZhY2Vcbn0gZnJvbSAnLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNsYXNzIFJtQ29yZSB7XG5cdHZlcnNpb246IHN0cmluZztcblx0bm9vcCA9IG5vb3A7XG5cblx0YXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXI7XG5cdGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZTtcblx0YXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5OiBBcGlSZXNwb25zZVByb2Nlc3NvckZhY3Rvcnk7XG5cdGJhdGNoU3RhdHVzRmFjdG9yeTogQmF0Y2hTdGF0dXNGYWN0b3J5O1xuXHRjaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5OiBDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5O1xuXHRjaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeTogQ2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnk7XG5cdGNvbGxlY3Rpb25DYWNoZUZhY3Rvcnk6IENvbGxlY3Rpb25DYWNoZUZhY3Rvcnk7XG5cdGNvbGxlY3Rpb25FbnRyeUZhY3Rvcnk6IENvbGxlY3Rpb25FbnRyeUZhY3Rvcnk7XG5cdGNvbGxlY3Rpb25FbnRyeVNlcnZpY2U6IENvbGxlY3Rpb25FbnRyeVNlcnZpY2U7XG5cdGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcjtcblx0Y29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5OiBDb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnk7XG5cdGNvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnk6IENvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnk7XG5cdGNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U6IENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U7XG5cdGNvbHVtbkNhY2hlOiBDb2x1bW5DYWNoZTtcblx0Y29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeTtcblx0Y29sdW1uSGFuZGxlcjogQ29sdW1uSGFuZGxlcjtcblx0Y29sdW1uSW5mb0ZhY3Rvcnk6IENvbHVtbkluZm9GYWN0b3J5O1xuXHRjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5O1xuXHRjb2x1bW5TdWJzZXRDYWNoZUZhY3Rvcnk6IENvbHVtblN1YnNldENhY2hlRmFjdG9yeTtcblx0Y29sdW1uVXRpbDogQ29sdW1uVXRpbDtcblx0Y3JlYXRlUmVxdWVzdEZhY3Rvcnk6IENyZWF0ZVJlcXVlc3RGYWN0b3J5O1xuXHRpdGVtQWRtaW5pc3RyYXRvcjogSXRlbUFkbWluaXN0cmF0b3I7XG5cdGl0ZW1DYWNoZUZhY3Rvcnk6IEl0ZW1DYWNoZUZhY3Rvcnk7XG5cdGl0ZW1FbnRyeUZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3Rvcnk7XG5cdGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2U7XG5cdGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcjtcblx0aXRlbVJlcXVlc3RTZXJ2aWNlOiBJdGVtUmVxdWVzdFNlcnZpY2U7XG5cdGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3Rvcnk7XG5cdGtleVNlcnZpY2U6IEtleVNlcnZpY2U7XG5cdGxvY2FsQ2FjaGVGYWN0b3J5OiBMb2NhbENhY2hlRmFjdG9yeTtcblx0bG9ja1NlcnZpY2U6IExvY2tTZXJ2aWNlO1xuXHRtb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5OiBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5O1xuXHRxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5O1xuXHRxdWVyeVBhcnNlckZhY3Rvcnk6IFF1ZXJ5UGFyc2VyRmFjdG9yeTtcblx0cXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2U7XG5cdHJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTtcblx0c29ja2V0TWVzc2FnZUhhbmRsZXI6IFNvY2tldE1lc3NhZ2VIYW5kbGVyO1xuXHR0ZW1wbGF0ZUZhY3Rvcnk6IFRlbXBsYXRlRmFjdG9yeTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0ZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0bG9jYWxDYWNoZU1hbmFnZXI6IExvY2FsQ2FjaGVNYW5hZ2VySW50ZXJmYWNlLFxuXHRcdGF1dGhJbnRlcmZhY2U6IEF1dGhJbnRlcmZhY2UsXG5cdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJvbWlzZUxpYnJhcnlJbnRlcmZhY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlXG5cdCkge1xuXHRcdHRoaXMudmVyc2lvbiA9ICcxLjUuNyc7XG5cblx0XHR0aGlzLmFwaUZvcm1hdHRlciA9IG5ldyBBcGlGb3JtYXR0ZXIoKTtcblx0XHR0aGlzLmtleVNlcnZpY2UgPSBuZXcgS2V5U2VydmljZSgpO1xuXHRcdHRoaXMucXVlcnlTZXJ2aWNlID0gbmV3IFF1ZXJ5U2VydmljZSgpO1xuXHRcdHRoaXMuY29sdW1uVXRpbCA9IG5ldyBDb2x1bW5VdGlsKCk7XG5cblx0XHR0aGlzLmFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSA9IG5ldyBBcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnkodGhpcy5hcGlGb3JtYXR0ZXIpO1xuXG5cdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZSA9IG5ldyBBcGlSZXF1ZXN0U2VydmljZShleHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLCB0aGlzLmFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSk7XG5cblx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UgPSBuZXcgSXRlbUVudHJ5U2VydmljZShhdXRoSW50ZXJmYWNlLCB0aGlzLmtleVNlcnZpY2UpO1xuXG5cdFx0dGhpcy5sb2NrU2VydmljZSA9IG5ldyBMb2NrU2VydmljZShcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHRwcm9taXNlTGlicmFyeUludGVyZmFjZVxuXHRcdCk7XG5cdFx0dGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5ID0gbmV3IFF1ZXJ5TWF0Y2hlckZhY3RvcnkodGhpcy5hcGlGb3JtYXR0ZXIpO1xuXHRcdHRoaXMuaXRlbUNhY2hlRmFjdG9yeSA9IG5ldyBJdGVtQ2FjaGVGYWN0b3J5KHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeSk7XG5cdFx0dGhpcy5iYXRjaFN0YXR1c0ZhY3RvcnkgPSBuZXcgQmF0Y2hTdGF0dXNGYWN0b3J5KHByb21pc2VMaWJyYXJ5SW50ZXJmYWNlKTtcblxuXHRcdHRoaXMuY29sdW1uQ2FjaGUgPSBuZXcgQ29sdW1uQ2FjaGUodGhpcy5jb2x1bW5VdGlsKTtcblx0XHR0aGlzLmNvbHVtbkhhbmRsZXIgPSBuZXcgQ29sdW1uSGFuZGxlcihcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHRwcm9taXNlTGlicmFyeUludGVyZmFjZSxcblx0XHRcdHRoaXMuY29sdW1uQ2FjaGUsXG5cdFx0XHR0aGlzLmNvbHVtblV0aWxcblx0XHQpO1xuXG5cdFx0dGhpcy5jb2x1bW5JbmZvRmFjdG9yeSA9IG5ldyBDb2x1bW5JbmZvRmFjdG9yeSgpO1xuXHRcdHRoaXMuY29sdW1uU3Vic2V0Q2FjaGVGYWN0b3J5ID0gbmV3IENvbHVtblN1YnNldENhY2hlRmFjdG9yeSgpO1xuXHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSA9IG5ldyBDb2x1bW5FeHBhbnNpb25GYWN0b3J5KHRoaXMuY29sdW1uSW5mb0ZhY3RvcnkpO1xuXHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSA9IG5ldyBDb2x1bW5TZXRGYWN0b3J5KHRoaXMuY29sdW1uSGFuZGxlciwgdGhpcy5jb2x1bW5VdGlsLCB0aGlzLmNvbHVtbkluZm9GYWN0b3J5KTtcblxuXHRcdHRoaXMudGVtcGxhdGVGYWN0b3J5ID0gbmV3IFRlbXBsYXRlRmFjdG9yeSh0aGlzLmNvbHVtblNldEZhY3RvcnksIHRoaXMuY29sdW1uVXRpbCk7XG5cblx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnkgPSBuZXcgSXRlbUVudHJ5RmFjdG9yeShcblx0XHRcdGF1dGhJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMua2V5U2VydmljZSxcblx0XHRcdHByb21pc2VMaWJyYXJ5SW50ZXJmYWNlXG5cdFx0KTtcblx0XHR0aGlzLml0ZW1IYW5kbGVyID0gbmV3IEl0ZW1IYW5kbGVyKFxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0dGhpcy5iYXRjaFN0YXR1c0ZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbHVtbkhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbHVtblN1YnNldENhY2hlRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sdW1uVXRpbCxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUNhY2hlRmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5RmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMua2V5U2VydmljZSxcblx0XHRcdHByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxuXHRcdFx0dGhpcy50ZW1wbGF0ZUZhY3Rvcnlcblx0XHQpO1xuXHRcdHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlID0gbmV3IEl0ZW1SZXF1ZXN0U2VydmljZSh0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcblx0XHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5RmFjdG9yeSxcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUxpYnJhcnlJbnRlcmZhY2Vcblx0XHQpO1xuXG5cdFx0dGhpcy5xdWVyeVBhcnNlckZhY3RvcnkgPSBuZXcgUXVlcnlQYXJzZXJGYWN0b3J5KCk7XG5cdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlID0gbmV3IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UodGhpcy5xdWVyeVBhcnNlckZhY3RvcnksIHRoaXMucXVlcnlTZXJ2aWNlKTtcblx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UgPSBuZXcgQ29sbGVjdGlvblJlc291cmNlU2VydmljZSgpO1xuXHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5RmFjdG9yeSA9IG5ldyBDb2xsZWN0aW9uRW50cnlGYWN0b3J5KFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5pdGVtRW50cnlGYWN0b3J5LFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcblx0XHRcdHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZVxuXHRcdCk7XG5cdFx0dGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5ID0gbmV3IENvbGxlY3Rpb25DYWNoZUZhY3RvcnkodGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5KTtcblx0XHR0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSA9IG5ldyBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnkodGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5KTtcblx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyID0gbmV3IENvbGxlY3Rpb25IYW5kbGVyKFxuXHRcdFx0dGhpcy5iYXRjaFN0YXR1c0ZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeUZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sdW1uSGFuZGxlcixcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXG5cdFx0XHR0aGlzLml0ZW1SZXF1ZXN0U2VydmljZSxcblx0XHRcdHRoaXMua2V5U2VydmljZSxcblx0XHRcdHByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5xdWVyeVBhcnNlckZhY3RvcnksXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZVxuXHRcdCk7XG5cblx0XHR0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5ID0gbmV3IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5KHRoaXMuY29sdW1uVXRpbCk7XG5cdFx0dGhpcy5jcmVhdGVSZXF1ZXN0RmFjdG9yeSA9IG5ldyBDcmVhdGVSZXF1ZXN0RmFjdG9yeShcblx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcblx0XHRcdHRoaXMua2V5U2VydmljZSxcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnlcblx0XHQpO1xuXHRcdHRoaXMuY2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSA9IG5ldyBDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5KHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSwgdGhpcy5rZXlTZXJ2aWNlKTtcblx0XHR0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5ID0gbmV3IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5KFxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0dGhpcy5jaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcblx0XHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRcdHRoaXMuY3JlYXRlUmVxdWVzdEZhY3RvcnksXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLFxuXHRcdFx0cHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XG5cdFx0KTtcblx0XHR0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnkgPSBuZXcgSXRlbVJlc291cmNlRmFjdG9yeShcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxuXHRcdFx0dGhpcy5sb2NrU2VydmljZSxcblx0XHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkuY29uc3RydWN0KCksXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHRwcm9taXNlTGlicmFyeUludGVyZmFjZVxuXHRcdCk7XG5cdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5ID0gbmV3IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkoXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUxpYnJhcnlJbnRlcmZhY2Vcblx0XHQpO1xuXG5cdFx0dGhpcy5sb2NhbENhY2hlRmFjdG9yeSA9IG5ldyBMb2NhbENhY2hlRmFjdG9yeShcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMubG9ja1NlcnZpY2UsXG5cdFx0XHR0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRcdFx0dGhpcy5pdGVtQ2FjaGVGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRcdFx0cHJvbWlzZUxpYnJhcnlJbnRlcmZhY2Vcblx0XHQpO1xuXHRcdHRoaXMubW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSA9IG5ldyBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5KCk7XG5cblx0XHR0aGlzLml0ZW1BZG1pbmlzdHJhdG9yID0gbmV3IEl0ZW1BZG1pbmlzdHJhdG9yKFxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcblx0XHRcdGF1dGhJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnksXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLFxuXHRcdFx0dGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHR0aGlzLmxvY2FsQ2FjaGVGYWN0b3J5LFxuXHRcdFx0bG9jYWxDYWNoZU1hbmFnZXIsXG5cdFx0XHR0aGlzLm1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXG5cdFx0XHRwcm9taXNlTGlicmFyeUludGVyZmFjZSxcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlXG5cdFx0KTtcblxuXHRcdHRoaXMuc29ja2V0TWVzc2FnZUhhbmRsZXIgPSBuZXcgU29ja2V0TWVzc2FnZUhhbmRsZXIoXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5pdGVtRW50cnlGYWN0b3J5LFxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcblx0XHRcdGxvY2FsQ2FjaGVNYW5hZ2VyLFxuXHRcdFx0cHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XG5cdFx0KTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9vcCAoKSB7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eSAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlO1xufVxuIiwiZXhwb3J0ICogZnJvbSAnLi9jb3JlJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RhbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzJztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJmYWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL2NsYXNzZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9mYWN0b3JpZXMnO1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XG4iXSwic291cmNlUm9vdCI6IiJ9
|