@rentman/rm-core 1.6.1-3 → 1.6.1
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 -12
- package/dist/rm-core.js +5 -7
- package/dist/rm-core.min.js +1 -1
- package/package.json +1 -1
package/dist/rm-core.js
CHANGED
|
@@ -6531,11 +6531,10 @@ var QueryMatcher_QueryMatcher = /** @class */ (function () {
|
|
|
6531
6531
|
return MAYBE;
|
|
6532
6532
|
if (query.custom !== undefined)
|
|
6533
6533
|
return MAYBE;
|
|
6534
|
-
// linkedTo also contains .query
|
|
6535
|
-
if (query.linkedTo !== undefined)
|
|
6536
|
-
return this.matchLinkedToQuery(query);
|
|
6537
6534
|
if (query.query !== undefined)
|
|
6538
6535
|
return MAYBE;
|
|
6536
|
+
if (query.linkedTo !== undefined)
|
|
6537
|
+
return this.matchLinkedToQuery(query);
|
|
6539
6538
|
if (query.conditions !== undefined)
|
|
6540
6539
|
return this.matchComplexQuery(query);
|
|
6541
6540
|
if (query.key !== undefined)
|
|
@@ -6666,8 +6665,7 @@ var QueryParser_QueryParser = /** @class */ (function () {
|
|
|
6666
6665
|
if (key === null)
|
|
6667
6666
|
return [{}, '{}'];
|
|
6668
6667
|
var value = query[key];
|
|
6669
|
-
|
|
6670
|
-
if (value !== null && typeof value === 'object' && value.constructor === Object)
|
|
6668
|
+
if (typeof value === 'object')
|
|
6671
6669
|
return this.parseSubQuery(key, value);
|
|
6672
6670
|
return this.parseSimpleQuery(key, value);
|
|
6673
6671
|
};
|
|
@@ -7555,7 +7553,7 @@ var TemplateFactory_TemplateFactory = /** @class */ (function () {
|
|
|
7555
7553
|
var core_RmCore = /** @class */ (function () {
|
|
7556
7554
|
function RmCore(apiRequestServiceInterface, authInterface, errorHandlerInterface, exceptionHandlerInterface, localCacheManager, promiseLibraryInterface) {
|
|
7557
7555
|
this.noop = noop;
|
|
7558
|
-
this.version = '1.6.1
|
|
7556
|
+
this.version = '1.6.1';
|
|
7559
7557
|
this.apiFormatter = new ApiFormatter_ApiFormatter();
|
|
7560
7558
|
this.keyService = new KeyService_KeyService();
|
|
7561
7559
|
this.queryService = new QueryService();
|
|
@@ -7724,4 +7722,4 @@ function identity(value) {
|
|
|
7724
7722
|
/***/ })
|
|
7725
7723
|
/******/ ]);
|
|
7726
7724
|
});
|
|
7727
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9SbUNvcmUvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL1JtQ29yZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9SbUNvcmUvZXh0ZXJuYWwgXCJtb21lbnRcIiIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9VdGlsLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0FwaUZvcm1hdHRlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9BcGlSZXF1ZXN0U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9BcGlSZXNwb25zZVByb2Nlc3Nvci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY29uc3RhbnRzLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0JhdGNoU3RhdHVzLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NoYW5nZXNDb21waWxhdGlvbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9DaGFuZ2VzUHJvY2Vzc29yLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25DYWNoZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL0l0ZW1FbnRyeU9wdGlvbnMudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9JdGVtUmVzb3VyY2VPcHRpb25zLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvSXRlbUVudHJ5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvSXRlbVJlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvVmlld1Jlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvRWRpdFJlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvbkVudHJ5T3B0aW9ucy50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL0NvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnMudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9Db2xsZWN0aW9uRW50cnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9Db2xsZWN0aW9uUmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9Db2xsZWN0aW9uVmlld1Jlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvbkVkaXRSZXNvdXJjZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL1RlbXBsYXRlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvUmVtb3RlVmlld1Jlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvTG9jYWxWaWV3UmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9pbmRleC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2xsZWN0aW9uRW50cnlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25IYW5kbGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25NYXRjaGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uRXhwYW5zaW9uLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbHVtbkhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uSW5mby50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2x1bW5TZXQudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uU3Vic2V0Q2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uVXRpbC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9DcmVhdGVSZXF1ZXN0LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1BZG1pbmlzdHJhdG9yLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1DYWNoZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtRW50cnlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1IYW5kbGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1SZXF1ZXN0U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9LZXlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy90eXBlcy9JdGVtVHlwZXNDb2xsZWN0aW9uLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy90eXBlcy9pbmRleC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Mb2NhbENhY2hlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0xvY2tTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL01vZHVsZUNoYW5nZXNDb21waWxhdGlvbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9RdWVyeU1hdGNoZXIudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvUXVlcnlQYXJzZXIudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvUXVlcnlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL1JlcXVlc3RDb2x1bW5FeHBhbnNpb24udHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvU29ja2V0TWVzc2FnZUhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9BcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9CYXRjaFN0YXR1c0ZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9DaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2xsZWN0aW9uQ2FjaGVGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sbGVjdGlvbkVudHJ5RmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2x1bW5FeHBhbnNpb25GYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sdW1uSW5mb0ZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2x1bW5TZXRGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sdW1uU3Vic2V0Q2FjaGVGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ3JlYXRlUmVxdWVzdEZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9JdGVtQ2FjaGVGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvSXRlbUVudHJ5RmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0l0ZW1SZXNvdXJjZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Mb2NhbENhY2hlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL01vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9RdWVyeU1hdGNoZXJGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvUXVlcnlQYXJzZXJGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9UZW1wbGF0ZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9pbmRleC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY29yZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87QUNWQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QixDQUNsQyxDQUFDO0lBQ0gsQ0FBQztJQUNGLGFBQUM7QUFBRCxDQUFDOztBQUVLLFNBQVUsSUFBSTtBQUNwQixDQUFDO0FBRUssU0FBVSxRQUFRLENBQUUsS0FBSztJQUM5QixPQUFPLEtBQUssQ0FBQztBQUNkLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzdTc0I7QUFDSztBQUNIO0FBRUM7QUFDRTtBQUNKIiwiZmlsZSI6InJtLWNvcmUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJtb21lbnRcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW1wibW9tZW50XCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIlJtQ29yZVwiXSA9IGZhY3RvcnkocmVxdWlyZShcIm1vbWVudFwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiUm1Db3JlXCJdID0gZmFjdG9yeShyb290W1wibW9tZW50XCJdKTtcbn0pKHdpbmRvdywgZnVuY3Rpb24oX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fMF9fKSB7XG5yZXR1cm4gIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDEpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX18wX187IiwiZXhwb3J0IGZ1bmN0aW9uIGluc3RhbnRpYXRlT3B0aW9ucyAob3B0aW9uczoge1trZXk6IHN0cmluZ106IGFueX0sIHZhbHVlczogb2JqZWN0KTogdm9pZCB7XG5cdGZvciAoY29uc3Qga2V5IGluIHZhbHVlcykge1xuXHRcdGlmICghKGtleSBpbiBvcHRpb25zKSlcblx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0aWYgKHZhbHVlc1trZXldID09PSB1bmRlZmluZWQpXG5cdFx0XHRjb250aW51ZTtcblxuXHRcdG9wdGlvbnNba2V5XSA9IHZhbHVlc1trZXldO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaGFsbG93TWVyZ2UgKG9iamVjdCwgZGVmYXVsdHMpIHtcblx0aWYgKG9iamVjdCA9PT0gdW5kZWZpbmVkKVxuXHRcdHJldHVybiBkZWZhdWx0cztcblxuXHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRmb3IgKGNvbnN0IGtleSBpbiBkZWZhdWx0cykge1xuXHRcdHJlc3VsdFtrZXldID0gb2JqZWN0W2tleV0gPT09IHVuZGVmaW5lZCA/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+IHZvaWRcblx0KTogUHJvbWlzZUludGVyZmFjZTxJdGVtSWRDb252ZXJzaW9uTWFwPiB7XG5cdFx0Y29uc3QgZXJyb3JIYW5kbGVyID0gdGhpcy5lcnJvckhhbmRsZXI7XG5cdFx0Y29uc3QgY2hhbmdlc0NvbXBpbGF0aW9uID0gdGhpcy5jaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LmNvbnN0cnVjdChzaW5nbGVJdGVtcywgY29sbGVjdGlvbnMpO1xuXHRcdGNvbnN0IGNvbXBpbGF0aW9uID0gY2hhbmdlc0NvbXBpbGF0aW9uLmNvbXBpbGF0aW9uO1xuXHRcdGNvbnN0IGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAgPSB7fTtcblxuXHRcdHJldHVybiB0aGlzLmV4ZWN1dGVDcmVhdGVSZXF1ZXN0cyhcblx0XHRcdGNoYW5nZXNDb21waWxhdGlvbixcblx0XHRcdHBhcmFtZXRlcnMsXG5cdFx0XHRjb252ZXJzaW9uTWFwLFxuXHRcdFx0YnJlYWt1cEJ5UGFyZW50LFxuXHRcdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrXG5cdFx0KS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHR0aGlzLm9uSXRlbXNDcmVhdGVkKGNvbnZlcnNpb25NYXAsIHNpbmdsZUl0ZW1zLCBjb2xsZWN0aW9ucyk7XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZU1vdmVSZXF1ZXN0cyhjb21waWxhdGlvbi5tb3ZlLCBjb252ZXJzaW9uTWFwKTtcblx0XHRcdH0sXG5cdFx0XHRlcnJvciA9PiB7XG5cdFx0XHRcdHRoaXMub25JdGVtc0NyZWF0ZWQoY29udmVyc2lvbk1hcCwgc2luZ2xlSXRlbXMsIGNvbGxlY3Rpb25zKTtcblxuXHRcdFx0XHRyZXR1cm4gZXJyb3JIYW5kbGVyLnJlamVjdChlcnJvcik7XG5cdFx0XHR9XG5cdFx0KS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5leGVjdXRlVXBkYXRlUmVxdWVzdHMoY29tcGlsYXRpb24udXBkYXRlLCBwYXJhbWV0ZXJzKTtcblx0XHRcdH0sXG5cdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5leGVjdXRlRGVsZXRlUmVxdWVzdHMoY29tcGlsYXRpb24uZGVsZXRlKTtcblx0XHRcdH0sXG5cdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gY29udmVyc2lvbk1hcDtcblx0XHRcdH0sXG5cdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uTWF0Y2hSZXN1bHQsIENvbGxlY3Rpb25RdWVyeSwgRW50cnlQYXJlbnROdWxsLCBGaWVsZE1hcCwgSXRlbUlkLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZW51bSBDT05TVEFOVFMge1xuXHRNQVlCRSA9ICdtYXliZSdcbn1cblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25DYWNoZSB7XG5cdGVudHJpZXM6IHtcblx0XHRbaXRlbVR5cGU6IHN0cmluZ106IHtcblx0XHRcdFtjb2xsZWN0aW9uRW50cnlJZDogbnVtYmVyXTogQ29sbGVjdGlvbkVudHJ5XG5cdFx0fVxuXHR9ID0ge307XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeVxuXHQpIHtcblxuXHR9XG5cblx0Y29udGFpbnMgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGVdO1xuXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJldHVybiBlbnRyaWVzW2NvbGxlY3Rpb25FbnRyeS5pZF0gIT09IHVuZGVmaW5lZDtcblx0fVxuXG5cdHNvbWUgKGNhbGxiYWNrOiAoZW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4gYm9vbGVhbik6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGVudHJpZXMpIHtcblx0XHRcdGZvciAoY29uc3QgZW50cnlJZCBpbiBlbnRyaWVzW2l0ZW1UeXBlXSkge1xuXHRcdFx0XHRpZiAoY2FsbGJhY2soZW50cmllc1tpdGVtVHlwZV1bZW50cnlJZF0pKVxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIFRPRE86IGNoZWNrIGlmIHRoaXMgaXMgc3RpbGwgaW4gdXNlXG5cdGZvckVhY2ggKGNhbGxiYWNrOiAoZW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4gdm9pZCk6IHZvaWQge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGVudHJpZXMpIHtcblx0XHRcdGZvciAoY29uc3QgZW50cnlJZCBpbiBlbnRyaWVzW2l0ZW1UeXBlXSlcblx0XHRcdFx0Y2FsbGJhY2soZW50cmllc1tpdGVtVHlwZV1bZW50cnlJZF0pO1xuXHRcdH1cblx0fVxuXG5cdHRvQXJyYXkgKCkge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uRW50cnlbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBlbnRyaWVzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllc1tpdGVtVHlwZV0pXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGVudHJpZXNbaXRlbVR5cGVdW2VudHJ5SWRdKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0YWRkIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSk6IENvbGxlY3Rpb25FbnRyeSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZTtcblxuXHRcdGlmIChlbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0ZW50cmllc1tpdGVtVHlwZV0gPSB7fTtcblxuXHRcdHJldHVybiBlbnRyaWVzW2l0ZW1UeXBlXVtjb2xsZWN0aW9uRW50cnkuaWRdID0gY29sbGVjdGlvbkVudHJ5O1xuXHR9XG5cblx0Y2xlYXIgKGNvbGxlY3Rpb25FbnRyeT86IENvbGxlY3Rpb25FbnRyeSk6IGJvb2xlYW4ge1xuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5lbnRyaWVzID0ge307XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICghdGhpcy5jb250YWlucyhjb2xsZWN0aW9uRW50cnkpKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0cmV0dXJuIGRlbGV0ZSB0aGlzLmVudHJpZXNbY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlXVtjb2xsZWN0aW9uRW50cnkuaWRdO1xuXHR9XG5cblx0Z2V0QnlJdGVtVHlwZSAoaXRlbVR5cGU6IHN0cmluZykge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xuXHRcdGNvbnN0IHJlc3VsdDogQ29sbGVjdGlvbkVudHJ5W10gPSBbXTtcblxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXMpXG5cdFx0XHRyZXN1bHQucHVzaChlbnRyaWVzW2VudHJ5SWRdKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRtYXRjaFBhcmVudCAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZDogSXRlbUlkKSB7XG5cdFx0Y29uc3QgcGFyZW50ID0gY29sbGVjdGlvbkVudHJ5LnBhcmVudDtcblxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHQvLyA9PSB0byBjb21wYXJlIGl0ZW1JZHNcblx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuXHRcdHJldHVybiBwYXJlbnQuaXRlbVR5cGUgPT09IGl0ZW1UeXBlICYmIHBhcmVudC5pdGVtSWQgPT0gaXRlbUlkO1xuXHR9XG5cblx0Ly8gVE9ETzogdGhpbmsgb2YgYmV0dGVyIG5hbWVcblx0Z2V0QnlQYXJlbnQgKHBhcmVudFR5cGU6IEl0ZW1UeXBlLCBwYXJlbnRJZDogSXRlbUlkLCBpdGVtVHlwZTogSXRlbVR5cGUpOiBDb2xsZWN0aW9uRW50cnkgfCBudWxsIHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcblxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdGZvciAoY29uc3QgZW50cnlJZCBpbiBlbnRyaWVzKSB7XG5cdFx0XHRpZiAodGhpcy5tYXRjaFBhcmVudChlbnRyaWVzW2VudHJ5SWRdLCBwYXJlbnRUeXBlLCBwYXJlbnRJZCkpXG5cdFx0XHRcdHJldHVybiBlbnRyaWVzW2VudHJ5SWRdO1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Z2V0UmVzb3VyY2VCeVBhcmVudCAocGFyZW50VHlwZTogSXRlbVR5cGUsIHBhcmVudElkOiBJdGVtSWQsIGl0ZW1UeXBlOiBJdGVtVHlwZSk6IENvbGxlY3Rpb25SZXNvdXJjZSB8IG51bGwge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuZ2V0QnlQYXJlbnQocGFyZW50VHlwZSwgcGFyZW50SWQsIGl0ZW1UeXBlKTtcblxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkgPT09IG51bGwpXG5cdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnkuZ2V0Q3VycmVudFJlc291cmNlKCk7XG5cdH1cblxuXHRnZXRDb2xsZWN0aW9uc0J5UGFyZW50IChwYXJlbnRUeXBlOiBJdGVtVHlwZSwgcGFyZW50SWQ6IEl0ZW1JZCkge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uRW50cnlbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBlbnRyaWVzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllc1tpdGVtVHlwZV0pIHtcblx0XHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gZW50cmllc1tpdGVtVHlwZV1bZW50cnlJZF07XG5cblx0XHRcdFx0aWYgKHRoaXMubWF0Y2hQYXJlbnQoY29sbGVjdGlvbkVudHJ5LCBwYXJlbnRUeXBlLCBwYXJlbnRJZCkpXG5cdFx0XHRcdFx0cmVzdWx0LnB1c2goY29sbGVjdGlvbkVudHJ5KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIE9ubHkgcmVzb3VyY2VzXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpdGVtVHlwZVxuXHQgKiBAcGFyYW0ge1N0cmluZ3xJbnRlZ2VyfSBpdGVtSWRcblx0ICogQHJldHVybnMge09iamVjdH0gQXJyYXkgb2YgY29sbGVjdGlvbnMuXG5cdCAqL1xuXHRnZXRCeUNvbnRhaW5pbmdJdGVtIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkKSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uRW50cnlbXSA9IFtdO1xuXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllcykge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gZW50cmllc1tlbnRyeUlkXTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5nZXRJdGVtQnlJZChpdGVtSWQpICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGNvbGxlY3Rpb25zIHRoZSBpdGVtICdiZWxvbmdzJyBpbi5cblx0ICovXG5cdGdldEJ5Rml0dGluZ0l0ZW0gKGl0ZW1UeXBlOiBJdGVtVHlwZSwgZmllbGRzOiBGaWVsZE1hcCwgcGFyZW50OiBFbnRyeVBhcmVudE51bGwpIHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcblx0XHRjb25zdCByZXN1bHQ6IENvbGxlY3Rpb25NYXRjaFJlc3VsdCA9IHtmaXR0aW5nOiBbXSwgbm90Zml0dGluZzogW10sIG1heWJlOiBbXX07XG5cblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblxuXHRcdC8vIGNvbnNvbGUudGltZSgnZ2V0QnlGaXR0aW5nSXRlbScpO1xuXG5cdFx0Y29uc3QgcXVlcnlNYXRjaGVyID0gdGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgZmllbGRzLCBwYXJlbnQpO1xuXG5cdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGVudHJpZXNbZW50cnlJZF07XG5cdFx0XHRjb25zdCBtYXRjaFJlc3VsdCA9IHF1ZXJ5TWF0Y2hlci5tYXRjaFF1ZXJ5KGNvbGxlY3Rpb25FbnRyeS5xdWVyeS5vYmplY3QpO1xuXG5cdFx0XHQvLyBUT0RPOiBtYXliZT9cblx0XHRcdGlmIChtYXRjaFJlc3VsdCA9PT0gdHJ1ZSkgLy8gbWlnaHQgYWxzbyByZXR1cm4gJ21heWJlJ1xuXHRcdFx0XHRyZXN1bHQuZml0dGluZy5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0XHRlbHNlIGlmIChtYXRjaFJlc3VsdCA9PT0gQ09OU1RBTlRTLk1BWUJFKVxuXHRcdFx0XHRyZXN1bHQubWF5YmUucHVzaChjb2xsZWN0aW9uRW50cnkpO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRyZXN1bHQubm90Zml0dGluZy5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0fVxuXG5cdFx0Ly8gY29uc29sZS50aW1lRW5kKCdnZXRCeUZpdHRpbmdJdGVtJyk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0QnlRdWVyeSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBxdWVyeTogQ29sbGVjdGlvblF1ZXJ5KTogQ29sbGVjdGlvbkVudHJ5IHwgbnVsbCB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XG5cblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllcykge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gZW50cmllc1tlbnRyeUlkXTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5xdWVyeS5zdHJpbmcgPT09IHF1ZXJ5LnN0cmluZylcblx0XHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25FbnRyeTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGdldEJ5S2V5IChpdGVtVHlwZTogSXRlbVR5cGUsIGVudHJ5S2V5OiBzdHJpbmcpOiBDb2xsZWN0aW9uRW50cnlbXSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uRW50cnlbXSA9IFtdO1xuXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllcykge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gZW50cmllc1tlbnRyeUlkXTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zLmVudHJ5S2V5ID09PSBlbnRyeUtleSlcblx0XHRcdFx0cmVzdWx0LnB1c2goY29sbGVjdGlvbkVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0UmVzb3VyY2VCeUtleSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCByZXNvdXJjZUtleTogc3RyaW5nKTogQ29sbGVjdGlvblJlc291cmNlW10ge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xuXHRcdGNvbnN0IHJlc3VsdDogQ29sbGVjdGlvblJlc291cmNlW10gPSBbXTtcblxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXMpIHtcblx0XHRcdGNvbnN0IHJlc291cmNlcyA9IGVudHJpZXNbZW50cnlJZF0ucmVzb3VyY2VzO1xuXG5cdFx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc291cmNlcykge1xuXHRcdFx0XHRpZiAocmVzb3VyY2Uub3B0aW9ucy5yZXNvdXJjZUtleSA9PT0gcmVzb3VyY2VLZXkpXG5cdFx0XHRcdFx0cmVzdWx0LnB1c2gocmVzb3VyY2UpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cbn1cbiIsImltcG9ydCB7IGluc3RhbnRpYXRlT3B0aW9ucyB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdENvbHVtbk1hcCwgQXBpUmVxdWVzdENvbHVtbnMsIEVudHJ5UGFyZW50TnVsbCB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgSXRlbUVudHJ5T3B0aW9uc0ludGVyZmFjZSA9IFBhcnRpYWw8SXRlbUVudHJ5T3B0aW9ucz47XG5cbmV4cG9ydCBjbGFzcyBJdGVtRW50cnlPcHRpb25zIHtcblx0Y29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMgPSB0cnVlO1xuXHRwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCA9IG51bGw7XG5cdHRlbXBsYXRlT3B0aW9uczogYW55ID0ge307IC8vIFRPRE9cblx0dGVtcGxhdGVDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1uTWFwID0ge307XG5cdGRlZmVyUmVxdWVzdDogYm9vbGVhbiA9IGZhbHNlO1xuXHRpc0R1cGxpY2F0ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG5cdGNvbnN0cnVjdG9yICh2YWx1ZXM6IEl0ZW1FbnRyeU9wdGlvbnNJbnRlcmZhY2UpIHtcblx0XHRpbnN0YW50aWF0ZU9wdGlvbnModGhpcywgdmFsdWVzKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgaW5zdGFudGlhdGVPcHRpb25zIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vY29yZSc7XG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgT25DaGFuZ2VGdW5jdGlvbiB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgSXRlbVJlc291cmNlT3B0aW9uc0ludGVyZmFjZSA9IFBhcnRpYWw8SXRlbVJlc291cmNlT3B0aW9ucz47XG5cbmV4cG9ydCBjbGFzcyBJdGVtUmVzb3VyY2VPcHRpb25zIHtcblx0ZWRpdDogYm9vbGVhbiA9IGZhbHNlO1xuXHRyZW1vdGU6IGJvb2xlYW4gPSBmYWxzZTtcblx0b25DaGFuZ2U6IE9uQ2hhbmdlRnVuY3Rpb24gPSBub29wO1xuXHRvbkRlYWN0aXZhdGU6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gdm9pZCA9IG5vb3A7XG5cblx0Y29uc3RydWN0b3IgKHZhbHVlczogSXRlbVJlc291cmNlT3B0aW9uc0ludGVyZmFjZSkge1xuXHRcdGluc3RhbnRpYXRlT3B0aW9ucyh0aGlzLCB2YWx1ZXMpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5JbmZvLCBDb2x1bW5TZXQgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEl0ZW1FbnRyeUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgSXRlbVJlc291cmNlLCBMb2NhbFZpZXdSZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge1xuXHRDb2x1bW5FeHBhbnNpb25SZXN1bHQsIEVudHJ5UGFyZW50TnVsbCwgRmllbGRNYXAsIEl0ZW1FcnJvciwgSXRlbUlkLCBJdGVtSWRDb252ZXJzaW9uTWFwLCBJdGVtVHlwZSwgUHJvbWlzZUludGVyZmFjZVxufSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBEZWZlcnJlZCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5sZXQgY3VycmVudElkID0gMDtcblxuZXhwb3J0IGNsYXNzIEl0ZW1FbnRyeSB7XG5cdGlkOiBudW1iZXIgPSArK2N1cnJlbnRJZDtcblxuXHRyZWxvYWRRdWV1ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblx0ZGVmZXJSZXF1ZXN0OiBib29sZWFuID0gZmFsc2U7XG5cdGRlZmVycmVkPzogRGVmZXJyZWQ8dGhpcz47XG5cdHBhcmVudDogRW50cnlQYXJlbnROdWxsID0gbnVsbDtcblxuXHRpbml0aWFsOiBGaWVsZE1hcDtcblx0bW9kaWZpZWQ6IEZpZWxkTWFwO1xuXHRkZXJpdmVkOiBGaWVsZE1hcDtcblxuXHRyZXNvdXJjZXM6IEl0ZW1SZXNvdXJjZVtdID0gW107XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgZmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeSxcblx0XHRwdWJsaWMgaXRlbVR5cGU6IHN0cmluZyxcblx0XHRwdWJsaWMgaXRlbUlkOiBJdGVtSWQsXG5cdFx0cHVibGljIGNvbHVtbnM6IENvbHVtblNldFxuXHQpIHtcblx0fVxuXG5cdHF1ZXVlUmVsb2FkICgpOiB0aGlzIHtcblx0XHR0aGlzLnJlbG9hZFF1ZXVlZCA9IHRydWU7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGRlZmVyIChkZWZlclJlcXVlc3Q6IGJvb2xlYW4gPSBmYWxzZSk6IHRoaXMge1xuXHRcdHRoaXMuZGVmZXJyZWQgPSB0aGlzLmZhY3RvcnkucHJvbWlzZVNlcnZpY2UuZGVmZXIoKTtcblx0XHR0aGlzLmRlZmVyUmVxdWVzdCA9IGRlZmVyUmVxdWVzdDtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Z2V0UHJvbWlzZSAoKTogUHJvbWlzZUludGVyZmFjZTx0aGlzPiB7XG5cdFx0Y29uc3QgZGVmZXJyZWQgPSB0aGlzLmRlZmVycmVkO1xuXG5cdFx0aWYgKGRlZmVycmVkID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5mYWN0b3J5LnByb21pc2VTZXJ2aWNlLndoZW4odGhpcyk7XG5cblx0XHRyZXR1cm4gZGVmZXJyZWQucHJvbWlzZTtcblx0fVxuXG5cdHJlc29sdmUgKCk6IHRoaXMge1xuXHRcdGNvbnN0IGRlZmVycmVkID0gdGhpcy5kZWZlcnJlZDtcblxuXHRcdGlmIChkZWZlcnJlZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHQvLyB0aGUgcmVzb2x2ZSBmdW5jdGlvbiBtaWdodCBkZWZlciB0aGUgaXRlbSBhZ2Fpbiwgc28gZGVsZXRlIHRoZSBwcm9wZXJ0aWVzIGZpcnN0XG5cdFx0ZGVsZXRlIHRoaXMuZGVmZXJyZWQ7XG5cdFx0ZGVsZXRlIHRoaXMuZGVmZXJSZXF1ZXN0O1xuXG5cdFx0ZGVmZXJyZWQucmVzb2x2ZSh0aGlzKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cmVzb2x2ZURlZmVycmVkIChpbml0aWFsOiBGaWVsZE1hcCwgZGVyaXZlZDogRmllbGRNYXAsIGNvbHVtbnM6IENvbHVtblNldCk6IHRoaXMge1xuXHRcdHRoaXMuY29sdW1ucyA9IGNvbHVtbnM7XG5cdFx0dGhpcy5zZXRGaWVsZHMoaW5pdGlhbCwgZGVyaXZlZCk7XG5cblx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlKCk7XG5cdH1cblxuXHRpc0RlZmVycmVkICgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5kZWZlcnJlZCAhPT0gdW5kZWZpbmVkO1xuXHR9XG5cblx0cmVqZWN0IChlcnJvcjogSXRlbUVycm9yID0gdGhpcy5mYWN0b3J5Lml0ZW1FbnRyeVNlcnZpY2UuY3JlYXRlVW5mb3VuZFJlbW90ZUl0ZW1FcnJvcigpKTogdGhpcyB7XG5cdFx0Y29uc3QgZGVmZXJyZWQgPSB0aGlzLmRlZmVycmVkO1xuXG5cdFx0aWYgKGRlZmVycmVkID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdGRlZmVycmVkLnJlamVjdChlcnJvcik7XG5cblx0XHRkZWxldGUgdGhpcy5kZWZlcnJlZDtcblx0XHRkZWxldGUgdGhpcy5kZWZlclJlcXVlc3Q7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldEZpZWxkcyAoaW5pdGlhbDogRmllbGRNYXAsIGRlcml2ZWQ6IEZpZWxkTWFwKTogdGhpcyB7XG5cdFx0Y29uc3QgYXBpRm9ybWF0dGVyID0gdGhpcy5mYWN0b3J5LmFwaUZvcm1hdHRlcjtcblx0XHRjb25zdCBmb3JtYXR0ZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZvcm1hdHRlZDtcblxuXHRcdHRoaXMuaW5pdGlhbCA9IGFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZShpbml0aWFsLCBmb3JtYXR0ZWRDb2x1bW5zLm1haW4pO1xuXHRcdHRoaXMuZGVyaXZlZCA9IGFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZShkZXJpdmVkLCBmb3JtYXR0ZWRDb2x1bW5zLmRlcml2ZWQpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvLyBXZSBzaG91bGQgY3JlYXRlIGEgY29weSBvZiBpbml0aWFsIGhlcmUsIGJlY2F1c2UgaW4gbW9zdCBpbnN0YW5jZXMgaXQgd2lsbCBiZSBhIHRlbXBsYXRlLlxuXHRzZXRMb2NhbEZpZWxkcyAoXG5cdFx0aW5pdGlhbFZhbHVlczogRmllbGRNYXAsXG5cdFx0Y29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCxcblx0XHRjb2x1bW5zOiBDb2x1bW5TZXQgPSB0aGlzLmNvbHVtbnNcblx0KTogdGhpcyB7XG5cdFx0Y29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTtcblx0XHRjb25zdCBpbml0aWFsID0gZmFjdG9yeS5pdGVtRW50cnlTZXJ2aWNlLmdldExvY2FsRGVmYXVsdFZhbHVlcygpO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucy5tYWluKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcblxuXHRcdFx0aW5pdGlhbFtjb2x1bW5JZF0gPSBpbml0aWFsVmFsdWVzW2NvbHVtbklkXTtcblx0XHR9XG5cblx0XHR0aGlzLmluaXRpYWwgPSBmYWN0b3J5LmFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZShpbml0aWFsLCBjb2x1bW5zLmZvcm1hdHRlZC5tYWluKTtcblx0XHR0aGlzLmRlcml2ZWQgPSB7J2NyZWF0b3I+ZGlzcGxheW5hbWUnOiBmYWN0b3J5LmF1dGhJbnRlcmZhY2UuZ2V0VXNlckRpc3BsYXluYW1lKCl9O1xuXG5cdFx0cmV0dXJuIHRoaXMudXBkYXRlSXRlbUZpZWxkcyhjb252ZXJzaW9uTWFwKTtcblx0fVxuXG5cdGNsb25lIChjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwID0ge30pOiBJdGVtRW50cnkge1xuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XG5cdFx0Y29uc3QgYXBpRm9ybWF0dGVyID0gZmFjdG9yeS5hcGlGb3JtYXR0ZXI7XG5cdFx0Y29uc3QgaXRlbUVudHJ5U2VydmljZSA9IGZhY3RvcnkuaXRlbUVudHJ5U2VydmljZTtcblx0XHRjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xuXHRcdGNvbnN0IG5ld0l0ZW1JZCA9IGl0ZW1FbnRyeVNlcnZpY2UuZXhwYW5kQ29udmVyc2lvbk1hcCh0aGlzLCBjb252ZXJzaW9uTWFwKTtcblxuXHRcdC8vIHdlJ2xsIGNvcHkgbW9kaWZpZWQgdG8gcmVzdWx0LmluaXRpYWwgKGluaXRpYWwgbWF5IGJlIGEgdGVtcGxhdGUpXG5cdFx0Y29uc3QgY2xvbmVkRW50cnkgPSBmYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdG5ld0l0ZW1JZCxcblx0XHRcdGFwaUZvcm1hdHRlci5jb3B5RmllbGRzKHRoaXMuZ2V0RmllbGRzKCksIHt9LCBjb2x1bW5zLm1haW4pLFxuXHRcdFx0YXBpRm9ybWF0dGVyLmNvcHlGaWVsZHModGhpcy5kZXJpdmVkLCB7fSwgY29sdW1ucy5kZXJpdmVkKSxcblx0XHRcdGNvbHVtbnNcblx0XHQpO1xuXG5cdFx0Y2xvbmVkRW50cnkudXBkYXRlSXRlbUZpZWxkcyhjb252ZXJzaW9uTWFwKTtcblxuXHRcdGNsb25lZEVudHJ5Lm1vZGlmaWVkID0gYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoY2xvbmVkRW50cnkuaW5pdGlhbCwge30sIGNvbHVtbnMubWFpbik7XG5cblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIGNsb25lZEVudHJ5O1xuXG5cdFx0Y29uc3QgcGFyZW50SWQgPSBpdGVtRW50cnlTZXJ2aWNlLmdldENvbnZlcnNpb25WYWx1ZShwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQsIGNvbnZlcnNpb25NYXApO1xuXG5cdFx0Y2xvbmVkRW50cnkuc2V0UGFyZW50KFxuXHRcdFx0cGFyZW50Lml0ZW1UeXBlLFxuXHRcdFx0cGFyZW50SWQgPT09IHVuZGVmaW5lZCA/IHBhcmVudC5pdGVtSWQgOiBwYXJlbnRJZFxuXHRcdCk7XG5cblx0XHRyZXR1cm4gY2xvbmVkRW50cnk7XG5cdH1cblxuXHRyZXNldERlcml2ZWQgKGNvbHVtbklkczogc3RyaW5nW10pOiB0aGlzIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRcdGNvbnN0IHJvb3RDb2x1bW5zID0gdGhpcy5jb2x1bW5zLnJvb3Q7XG5cdFx0Y29uc3QgZmlsdGVyZWRDb2x1bW5zOiBDb2x1bW5JbmZvW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIHJvb3RDb2x1bW5zKSB7XG5cdFx0XHRpZiAoY29sdW1uSWRzLmluZGV4T2YoY29sdW1uLmlkKSAhPT0gLTEpXG5cdFx0XHRcdGZpbHRlcmVkQ29sdW1ucy5wdXNoKGNvbHVtbik7XG5cdFx0fVxuXG5cdFx0cmVzZXREZXJpdmVkUmVjdXJzaXZlbHkoZmlsdGVyZWRDb2x1bW5zKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdFx0ZnVuY3Rpb24gcmVzZXREZXJpdmVkUmVjdXJzaXZlbHkgKGNvbHVtbnM6IENvbHVtbkluZm9bXSkge1xuXHRcdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0XHRpZiAoIWNvbHVtbi5pc0xlYWYpXG5cdFx0XHRcdFx0cmVzZXREZXJpdmVkUmVjdXJzaXZlbHkoY29sdW1uLmNoaWxkcmVuKTtcblxuXHRcdFx0XHRkZWxldGUgc2VsZi5kZXJpdmVkW2NvbHVtbi5wYXRoXTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRjbGVhclJlc291cmNlcyAoKTogdGhpcyB7XG5cdFx0dGhpcy5yZXNvdXJjZXMgPSBbXTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZGVhY3RpdmF0ZVJlc291cmNlcyAoKTogdGhpcyB7XG5cdFx0Y29uc3QgcmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7IC8vIG9uIG9mIHRoZSBkZWFjdGl2YXRlIGNhbGxiYWNrcyBtaWdodCBjYWxsIGNsZWFyUmVzb3VyY2VzXG5cblx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc291cmNlcylcblx0XHRcdHJlc291cmNlLmRlYWN0aXZhdGUoKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Z2V0RmllbGRzICgpOiBGaWVsZE1hcCB7XG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLm1vZGlmaWVkO1xuXG5cdFx0cmV0dXJuIHRoaXMuaW5pdGlhbDtcblx0fVxuXG5cdC8vIHNob3VsZCBiZSBmYXN0XG5cdGV4cGFuZCAobWFpbjogRmllbGRNYXAsIGRlcml2ZWQ6IEZpZWxkTWFwLCBjb2x1bW5FeHBhbnNpb25SZXN1bHQ6IENvbHVtbkV4cGFuc2lvblJlc3VsdCk6IHRoaXMge1xuXHRcdGNvbnN0IGFwaUZvcm1hdHRlciA9IHRoaXMuZmFjdG9yeS5hcGlGb3JtYXR0ZXI7XG5cdFx0Y29uc3QgZGlmZmVyZW5jZSA9IGNvbHVtbkV4cGFuc2lvblJlc3VsdC5kaWZmZXJlbmNlO1xuXG5cdFx0dGhpcy5jb2x1bW5zID0gY29sdW1uRXhwYW5zaW9uUmVzdWx0Lm1lcmdlZDtcblxuXHRcdGFwaUZvcm1hdHRlci5leHBhbmRSZXNwb25zZSh0aGlzLmluaXRpYWwsIG1haW4sIGRpZmZlcmVuY2UubWFpbik7XG5cdFx0YXBpRm9ybWF0dGVyLmV4cGFuZFJlc3BvbnNlKHRoaXMuZGVyaXZlZCwgZGVyaXZlZCwgZGlmZmVyZW5jZS5kZXJpdmVkKTtcblxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdGFwaUZvcm1hdHRlci5leHBhbmRSZXNwb25zZSh0aGlzLm1vZGlmaWVkLCBtYWluLCBkaWZmZXJlbmNlLm1haW4pO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRleHBhbmRMb2NhbCAoY29sdW1uRXhwYW5zaW9uUmVzdWx0OiBDb2x1bW5FeHBhbnNpb25SZXN1bHQpOiB0aGlzIHtcblx0XHRjb25zdCBtYWluQ29sdW1ucyA9IGNvbHVtbkV4cGFuc2lvblJlc3VsdC5kaWZmZXJlbmNlLm1haW47XG5cblx0XHR0aGlzLmNvbHVtbnMgPSBjb2x1bW5FeHBhbnNpb25SZXN1bHQubWVyZ2VkO1xuXG5cdFx0aWYgKG1haW5Db2x1bW5zLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0dGhpcy5zZXRMb2NhbFZhbHVlcyh0aGlzLmluaXRpYWwsIG1haW5Db2x1bW5zKTtcblxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdHRoaXMuc2V0TG9jYWxWYWx1ZXModGhpcy5tb2RpZmllZCwgbWFpbkNvbHVtbnMpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwcml2YXRlIHNldExvY2FsVmFsdWVzIChmaWVsZHM6IEZpZWxkTWFwLCBjb2x1bW5zOiBDb2x1bW5JbmZvW10pOiB2b2lkIHtcblx0XHRjb25zdCBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5O1xuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XG5cblx0XHRcdGlmIChmaWVsZHNbY29sdW1uSWRdICE9PSB1bmRlZmluZWQpIC8vIHBhcmVudCBjb2x1bW5zIG1pZ2h0IGFsc28gYmUgaW5jbHVkZWQgaW4gdGhlIGRpZmZlcmVuY2Vcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGNvbnN0IGNvbHVtblR5cGUgPSBjb2x1bW4uYXBpQ29sdW1uLnR5cGU7XG5cblx0XHRcdGZpZWxkc1tjb2x1bW5JZF0gPSBjb2x1bW5UeXBlID09PSAnbGluaycgJiYgcGFyZW50ICE9PSBudWxsID9cblx0XHRcdFx0cGFyZW50Lml0ZW1JZCA6XG5cdFx0XHRcdGZhY3RvcnkuYXBpRm9ybWF0dGVyLmdldERlZmF1bHRWYWx1ZShjb2x1bW5UeXBlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoZSBpbml0aWFsLCBtb2RpZmllZCwgZGVyaXZlZCBwcm9wZXJ0aWVzIGFyZSBhbHJlYWR5IHNldC4gSXQgd2lsbCB1cGRhdGUgdGhlIHZhbHVlc1xuXHQgKiB0aGVtc2VsdmVzIHRvIHByZXNlcnZlIHJlZmVyZW5jZXMgaW4gZXhpc3RpbmcgaXRlbSByZXNvdXJjZXMuXG5cdCAqL1xuXHR1cGRhdGVGaWVsZHMgKGZpZWxkczogRmllbGRNYXAsIGRlcml2ZWQ6IEZpZWxkTWFwIHwgbnVsbCA9IG51bGwsIG92ZXJ3cml0ZTogYm9vbGVhbiA9IHRydWUpOiB0aGlzIHtcblx0XHRjb25zdCBhcGlGb3JtYXR0ZXIgPSB0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyO1xuXHRcdGNvbnN0IG1haW5Db2x1bW5zID0gdGhpcy5jb2x1bW5zLm1haW47XG5cdFx0Y29uc3QgaW5pdGlhbCA9IHRoaXMuaW5pdGlhbDtcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMubW9kaWZpZWQ7XG5cblx0XHQvLyBmb3Igc29tZSB3ZWlyZCByZWFzb24gdGhpcyBmdW5jdGlvbiBpcyBub3QgYXRvbWljLCBzbyBvdmVyd3JpdGUgdGhlIHZhbHVlcyB3aXRoIHRoZWlyIGZvcm1hdHRlZCBjb3VudGVycGFydHNcblx0XHQvLyBpbW1lZGlhdGVseVxuXHRcdGlmIChtb2RpZmllZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBtYWluQ29sdW1ucykge1xuXHRcdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcblx0XHRcdFx0Y29uc3QgY29sdW1uVHlwZSA9IGNvbHVtbi5hcGlDb2x1bW4udHlwZTtcblxuXHRcdFx0XHRpZiAob3ZlcndyaXRlIHx8IGFwaUZvcm1hdHRlci5jb21wYXJlRmllbGRzKGNvbHVtblR5cGUsIGluaXRpYWxbY29sdW1uSWRdLCBtb2RpZmllZFtjb2x1bW5JZF0pKVxuXHRcdFx0XHRcdG1vZGlmaWVkW2NvbHVtbklkXSA9IGFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZVZhbHVlKGNvbHVtblR5cGUsIGZpZWxkc1tjb2x1bW5JZF0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIG1haW5Db2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcblxuXHRcdFx0aW5pdGlhbFtjb2x1bW5JZF0gPSBhcGlGb3JtYXR0ZXIuZm9ybWF0UmVzcG9uc2VWYWx1ZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUsIGZpZWxkc1tjb2x1bW5JZF0pO1xuXHRcdH1cblxuXHRcdGlmIChkZXJpdmVkICE9PSBudWxsKVxuXHRcdFx0dGhpcy5zZXREZXJpdmVkKGRlcml2ZWQpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwcml2YXRlIHVwZGF0ZUl0ZW1WYWx1ZXMgKGZpZWxkczogRmllbGRNYXAsIGl0ZW1Db2x1bW5zOiBDb2x1bW5JbmZvW10sIGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApOiB2b2lkIHtcblx0XHRjb25zdCBpdGVtRW50cnlTZXJ2aWNlID0gdGhpcy5mYWN0b3J5Lml0ZW1FbnRyeVNlcnZpY2U7XG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBpdGVtQ29sdW1ucykge1xuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XG5cdFx0XHRjb25zdCBhcGlDb2x1bW4gPSBjb2x1bW4uYXBpQ29sdW1uO1xuXG5cdFx0XHQvLyBUT0RPOiB3ZSBjYW4gcmVjb25zaWRlciB0aGlzIG9uY2UgYWxsIGNvbHVtbnMgYXJlIHJlc3BlY3RlZCBmb3IgbG9jYWwgaXRlbXMgW1JNNC0xMDM3OF1cblx0XHRcdGxldCBuZXdWYWx1ZTtcblxuXHRcdFx0aWYgKGFwaUNvbHVtbi50eXBlID09PSAnbGluaycgJiYgZmllbGRzW2NvbHVtbklkXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGlmIChwYXJlbnQgIT09IG51bGwpXG5cdFx0XHRcdFx0bmV3VmFsdWUgPSBwYXJlbnQuaXRlbUlkO1xuXHRcdFx0fSBlbHNlXG5cdFx0XHRcdG5ld1ZhbHVlID0gaXRlbUVudHJ5U2VydmljZS5nZXRDb252ZXJzaW9uVmFsdWUoYXBpQ29sdW1uLml0ZW1UeXBlLCBmaWVsZHNbY29sdW1uSWRdLCBjb252ZXJzaW9uTWFwKTtcblxuXHRcdFx0aWYgKG5ld1ZhbHVlICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdGZpZWxkc1tjb2x1bW5JZF0gPSBuZXdWYWx1ZTtcblx0XHR9XG5cdH1cblxuXHR1cGRhdGVJdGVtRmllbGRzIChjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwLCBjb2x1bW5zOiBDb2x1bW5TZXQgPSB0aGlzLmNvbHVtbnMpOiB0aGlzIHtcblx0XHRjb25zdCBpdGVtQ29sdW1ucyA9IGNvbHVtbnMuaXRlbTtcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMubW9kaWZpZWQ7XG5cblx0XHR0aGlzLnVwZGF0ZUl0ZW1WYWx1ZXModGhpcy5pbml0aWFsLCBpdGVtQ29sdW1ucywgY29udmVyc2lvbk1hcCk7XG5cblx0XHRpZiAobW9kaWZpZWQgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0dGhpcy51cGRhdGVJdGVtVmFsdWVzKG1vZGlmaWVkLCBpdGVtQ29sdW1ucywgY29udmVyc2lvbk1hcCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGZvcm1hdFJlcXVlc3QgKCk6IEZpZWxkTWFwIHtcblx0XHRjb25zdCBhcGlGb3JtYXR0ZXIgPSB0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyO1xuXHRcdGNvbnN0IG1haW5Db2x1bW5zID0gdGhpcy5jb2x1bW5zLm1haW47XG5cblx0XHRpZiAodGhpcy5pc0xvY2FsKCkpXG5cdFx0XHRyZXR1cm4gYXBpRm9ybWF0dGVyLmZvcm1hdFJlcXVlc3RMb2NhbCh0aGlzLmdldEZpZWxkcygpLCBtYWluQ29sdW1ucyk7XG5cblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHt9O1xuXG5cdFx0cmV0dXJuIGFwaUZvcm1hdHRlci5mb3JtYXRSZXF1ZXN0KHRoaXMuaW5pdGlhbCwgdGhpcy5tb2RpZmllZCwgbWFpbkNvbHVtbnMpO1xuXHR9XG5cblx0c2V0RGlzcGxheU5hbWUgKCk6IHRoaXMge1xuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdGNvbnN0IHJlc3VsdCA9IHRoaXMuZ2V0RGlzcGxheU5hbWUoKTtcblxuXHRcdGlmIChyZXN1bHQpXG5cdFx0XHR0aGlzLm1vZGlmaWVkLmRpc3BsYXluYW1lID0gcmVzdWx0O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRnZXREaXNwbGF5TmFtZSAoKTogc3RyaW5nIHtcblx0XHRjb25zdCBpdGVtRW50cnlTZXJ2aWNlID0gdGhpcy5mYWN0b3J5Lml0ZW1FbnRyeVNlcnZpY2U7XG5cdFx0Y29uc3QgZmllbGRzID0gdGhpcy5nZXRGaWVsZHMoKTtcblxuXHRcdHN3aXRjaCAodGhpcy5pdGVtVHlwZSkge1xuXHRcdFx0Y2FzZSAnQ29udGFjdCc6XG5cdFx0XHRcdHJldHVybiBmaWVsZHMudHlwZSA9PT0gJ2JlZHJpamYnID9cblx0XHRcdFx0XHRmaWVsZHMuYmVkcmlqZiA6IGl0ZW1FbnRyeVNlcnZpY2UuZ2V0RnVsbE5hbWUoXG5cdFx0XHRcdFx0XHRmaWVsZHMudm9vcm5hYW0sXG5cdFx0XHRcdFx0XHRmaWVsZHMudHVzc2Vudm9lZ3NlbCxcblx0XHRcdFx0XHRcdGZpZWxkcy5uYWFtXG5cdFx0XHRcdFx0KTtcblx0XHRcdGNhc2UgJ01lZGV3ZXJrZXInOlxuXHRcdFx0Y2FzZSAnUGVyc29uJzpcblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeVNlcnZpY2UuZ2V0RnVsbE5hbWUoXG5cdFx0XHRcdFx0ZmllbGRzLnZvb3JuYWFtLFxuXHRcdFx0XHRcdGZpZWxkcy50dXNzZW52b2Vnc2VsLFxuXHRcdFx0XHRcdGZpZWxkcy5hY2h0ZXJuYWFtXG5cdFx0XHRcdCk7XG5cdFx0XHRjYXNlICdSZXBhcmF0aWUnOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5kZXJpdmVkWydtYXRlcmlhYWw+bmFhbSddOyAvLyBUT0RPIVxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZpZWxkc1tpdGVtRW50cnlTZXJ2aWNlLmdldFRpdGxlRmllbGQodGhpcy5pdGVtVHlwZSldO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0Jvb2xlYW59IHJldHVybkFsbCBSZXR1cm5zIGFsbCBpbml0aWFsIHZhbHVlcyBpZiB0cnVlXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9XG5cdCAqL1xuXHRnZXRDaGFuZ2VzIChyZXR1cm5BbGw6IGJvb2xlYW4gPSBmYWxzZSkge1xuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQgJiYgIXJldHVybkFsbClcblx0XHRcdHJldHVybiBbXTtcblxuXHRcdHJldHVybiB0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyLmdldENoYW5nZXMoXG5cdFx0XHR0aGlzLmluaXRpYWwsXG5cdFx0XHRyZXR1cm5BbGwgPyB7fSA6IHRoaXMubW9kaWZpZWQsXG5cdFx0XHR0aGlzLmNvbHVtbnMubWFpblxuXHRcdCk7XG5cdH1cblxuXHRpc0xvY2FsICgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5mYWN0b3J5LmtleVNlcnZpY2UuaXNMb2NhbElkKHRoaXMuaXRlbUlkKTtcblx0fVxuXG5cdGlzTG9ja2FibGUgKCk6IGJvb2xlYW4ge1xuXHRcdGlmICh0aGlzLmlzTG9jYWwoKSlcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHN3aXRjaCAodGhpcy5pdGVtVHlwZSkge1xuXHRcdFx0Y2FzZSAnUHJvamVjdCc6XG5cdFx0XHRjYXNlICdNYXRlcmlhYWwnOlxuXHRcdFx0Y2FzZSAnQ29udGFjdCc6XG5cdFx0XHRjYXNlICdNZWRld2Vya2VyJzpcblx0XHRcdGNhc2UgJ1ZvZXJ0dWlnJzpcblx0XHRcdGNhc2UgJ1RlbXBsYXRlJzpcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aGFzQ2hhbmdlcyAoKTogYm9vbGVhbiB7XG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJldHVybiB0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyLmhhc0NoYW5nZXMoXG5cdFx0XHR0aGlzLmluaXRpYWwsXG5cdFx0XHR0aGlzLm1vZGlmaWVkLFxuXHRcdFx0dGhpcy5jb2x1bW5zLm1haW5cblx0XHQpO1xuXHR9XG5cblx0cmVzZXRNb2RpZmllZCAoKTogdGhpcyB7XG5cdFx0Y29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYWluO1xuXG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0dGhpcy5tb2RpZmllZFtjb2x1bW4uaWRdID0gdGhpcy5mYWN0b3J5LmFwaUZvcm1hdHRlci5jbG9uZShcblx0XHRcdFx0Y29sdW1uLmFwaUNvbHVtbi50eXBlLFxuXHRcdFx0XHR0aGlzLmluaXRpYWxbY29sdW1uLmlkXVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldEluaXRpYWwgKHZhbHVlczogRmllbGRNYXAsIGVuYWJsZUNhbGxiYWNrczogYm9vbGVhbiA9IGZhbHNlKTogdGhpcyB7XG5cdFx0Y29uc3QgYXBpRm9ybWF0dGVyID0gdGhpcy5mYWN0b3J5LmFwaUZvcm1hdHRlcjtcblx0XHRsZXQgcHJldmlvdXM7XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHZhbHVlcylcblx0XHRcdHRoaXMuaW5pdGlhbFtjb2x1bW5JZF0gPSB2YWx1ZXNbY29sdW1uSWRdO1xuXG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKGVuYWJsZUNhbGxiYWNrcylcblx0XHRcdFx0dGhpcy5jYWxsT25DaGFuZ2UoYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHModGhpcy5pbml0aWFsLCB7fSwgdGhpcy5jb2x1bW5zLm1haW4pKTtcblxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0cHJldmlvdXMgPSBhcGlGb3JtYXR0ZXIuY29weUZpZWxkcyh0aGlzLm1vZGlmaWVkLCB7fSwgdGhpcy5jb2x1bW5zLm1haW4pO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB2YWx1ZXMpXG5cdFx0XHR0aGlzLm1vZGlmaWVkW2NvbHVtbklkXSA9IHZhbHVlc1tjb2x1bW5JZF07XG5cblx0XHRpZiAoZW5hYmxlQ2FsbGJhY2tzKVxuXHRcdFx0dGhpcy5jYWxsT25DaGFuZ2UocHJldmlvdXMpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogRG9lcyBhIHNoYWxsb3cgY29weSBvZiB2YWx1ZXMhXG5cdCAqL1xuXHRzZXRNb2RpZmllZCAodmFsdWVzPzogRmllbGRNYXApOiB0aGlzIHtcblx0XHRjb25zdCBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5O1xuXHRcdGNvbnN0IGFwaUZvcm1hdHRlciA9IGZhY3RvcnkuYXBpRm9ybWF0dGVyO1xuXHRcdGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XG5cdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gY29sdW1ucy5yZXNwb25zZVt0aGlzLml0ZW1UeXBlXTtcblxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmluaXRpYWw7XG5cdFx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMubW9kaWZpZWQgPSB0aGlzLmlzTG9jYWwoKSA/IGZhY3RvcnkuaXRlbUVudHJ5U2VydmljZS5nZXRMb2NhbERlZmF1bHRWYWx1ZXMoKSA6IHt9O1xuXG5cdFx0XHRpZiAodmFsdWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGluaXRpYWwsIG1vZGlmaWVkLCBjb2x1bW5zLm1haW4pO1xuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdGFwaUZvcm1hdHRlci5zaGFsbG93Q29weUZpZWxkcyh2YWx1ZXMsIGluaXRpYWwsIG1vZGlmaWVkLCBjb2x1bW5zLm1haW4pO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gdmFsdWVzKSB7XG5cdFx0XHRcdFx0aWYgKHJlc3BvbnNlQ29sdW1uc1tjb2x1bW5JZF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0Ly8gdG9kbzogZGV2IG1vZGUgY29uc3RhbnRcblx0XHRcdFx0XHRcdC8vIGlmIChERVZfTU9ERSlcblx0XHRcdFx0XHRcdC8vIFx0Y29uc29sZS53YXJuKCdzZXRNb2RpZmllZDogbm8gY29sdW1uIGZvdW5kIGZvcicsIGNvbHVtbklkKTtcblxuXHRcdFx0XHRcdFx0bW9kaWZpZWRbY29sdW1uSWRdID0gdmFsdWVzW2NvbHVtbklkXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiB0aGlzLnJlc291cmNlcykge1xuXHRcdFx0XHRpZiAocmVzb3VyY2UgaW5zdGFuY2VvZiBMb2NhbFZpZXdSZXNvdXJjZSlcblx0XHRcdFx0XHRyZXNvdXJjZS5maWVsZHMgPSBtb2RpZmllZDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0aWYgKHZhbHVlcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHZhbHVlcylcblx0XHRcdHRoaXMubW9kaWZpZWRbY29sdW1uSWRdID0gdmFsdWVzW2NvbHVtbklkXTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0RGVyaXZlZCAodmFsdWVzOiBGaWVsZE1hcCk6IHRoaXMge1xuXHRcdGZvciAoY29uc3Qga2V5IGluIHZhbHVlcylcblx0XHRcdHRoaXMuZGVyaXZlZFtrZXldID0gdmFsdWVzW2tleV07XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldFBhcmVudCAocGFyZW50VHlwZTogSXRlbVR5cGUsIHBhcmVudElkOiBJdGVtSWQpOiB0aGlzIHtcblx0XHR0aGlzLnBhcmVudCA9IHtcblx0XHRcdGl0ZW1UeXBlOiBwYXJlbnRUeXBlLFxuXHRcdFx0aXRlbUlkOiBwYXJlbnRJZFxuXHRcdH07XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNhbGxPbkNoYW5nZSAocHJldmlvdXM/OiBGaWVsZE1hcCk6IHRoaXMge1xuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIHRoaXMucmVzb3VyY2VzKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpdGVtUmVzb3VyY2Uub3B0aW9ucy5vbkNoYW5nZShpdGVtUmVzb3VyY2UsIHByZXZpb3VzKTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdHRoaXMuZmFjdG9yeS5leGNlcHRpb25IYW5kbGVyKGVycm9yKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHRvSlNPTiAoKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGlkOiB0aGlzLmlkLFxuXHRcdFx0cGFyZW50OiB0aGlzLnBhcmVudCxcblx0XHRcdGluaXRpYWw6IHRoaXMuaW5pdGlhbCxcblx0XHRcdG1vZGlmaWVkOiB0aGlzLm1vZGlmaWVkLFxuXHRcdFx0ZGVyaXZlZDogdGhpcy5kZXJpdmVkLFxuXHRcdFx0Y29sdW1uczogdGhpcy5jb2x1bW5zXG5cdFx0fTtcblx0fVxufVxuIiwiaW1wb3J0IHsgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2VPcHRpb25zIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IEZpZWxkTWFwLCBSZXNwb25zZUNvbHVtbiB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEl0ZW1SZXNvdXJjZSB7XG5cdGNvbHVtbnM6IHsgW2NvbHVtbklkOiBzdHJpbmddOiBSZXNwb25zZUNvbHVtbiB9O1xuXHRmaWVsZHM6IEZpZWxkTWFwO1xuXHRkZXJpdmVkOiBGaWVsZE1hcDtcblxuXHRwcm90ZWN0ZWQgY29uc3RydWN0b3IgKFxuXHRcdHB1YmxpYyBlbnRyeTogSXRlbUVudHJ5LFxuXHRcdHB1YmxpYyBvcHRpb25zOiBJdGVtUmVzb3VyY2VPcHRpb25zLFxuXHRcdHByb3RlY3RlZCByZWFkb25seSBfaXNOZXc6IGJvb2xlYW4gPSBmYWxzZVxuXHQpIHtcblx0XHR0aGlzLmRlcml2ZWQgPSBlbnRyeS5kZXJpdmVkO1xuXHRcdHRoaXMuY29sdW1ucyA9IGVudHJ5LmNvbHVtbnMucmVzcG9uc2VbZW50cnkuY29sdW1ucy5pdGVtVHlwZV07XG5cblx0XHRlbnRyeS5yZXNvdXJjZXMucHVzaCh0aGlzKTtcblx0fVxuXG5cdGlzTmV3ICgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5faXNOZXc7XG5cdH1cblxuXHRpc0xvY2FsICgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5lbnRyeS5pc0xvY2FsKCk7XG5cdH1cblxuXHRjbGVhclJlc291cmNlICgpOiB2b2lkIHtcblx0XHRjb25zdCByZXNvdXJjZXMgPSB0aGlzLmVudHJ5LnJlc291cmNlcztcblx0XHRjb25zdCBpbmRleCA9IHJlc291cmNlcy5pbmRleE9mKHRoaXMpO1xuXG5cdFx0aWYgKGluZGV4ICE9PSAtMSlcblx0XHRcdHJlc291cmNlcy5zcGxpY2UoaW5kZXgsIDEpO1xuXHR9XG5cblx0ZGVhY3RpdmF0ZSAoKTogdm9pZCB7XG5cdFx0dGhpcy5vcHRpb25zLm9uRGVhY3RpdmF0ZSh0aGlzLmVudHJ5KTtcblx0fVxuXG5cdHRvSlNPTiAoKSB7XG5cdFx0Y29uc3QgY29sdW1uSWRzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB0aGlzLmNvbHVtbnMpXG5cdFx0XHRjb2x1bW5JZHMucHVzaChjb2x1bW5JZCk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0Y29sdW1uczogY29sdW1uSWRzLFxuXHRcdFx0ZmllbGRzOiB0aGlzLmZpZWxkcyxcblx0XHRcdGRlcml2ZWQ6IHRoaXMuZGVyaXZlZCxcblx0XHRcdGVudHJ5OiB0aGlzLmVudHJ5XG5cdFx0fTtcblx0fVxufVxuIiwiaW1wb3J0IHsgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UsIEl0ZW1SZXNvdXJjZU9wdGlvbnMgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgRmllbGRNYXAgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBWaWV3UmVzb3VyY2UgZXh0ZW5kcyBJdGVtUmVzb3VyY2Uge1xuXHRmaWVsZHM6IFJlYWRvbmx5PEZpZWxkTWFwPjtcblxuXHRwcm90ZWN0ZWQgY29uc3RydWN0b3IgKFxuXHRcdGVudHJ5OiBJdGVtRW50cnksXG5cdFx0b3B0aW9uczogSXRlbVJlc291cmNlT3B0aW9ucyxcblx0XHRpc05ldz86IGJvb2xlYW5cblx0KSB7XG5cdFx0c3VwZXIoZW50cnksIG9wdGlvbnMsIGlzTmV3KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgY3JlYXRlUGF0aCB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgSXRlbVJlc291cmNlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSwgSXRlbVJlc291cmNlT3B0aW9ucyB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBGaWVsZE1hcCwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIEVkaXRSZXNvdXJjZSBleHRlbmRzIEl0ZW1SZXNvdXJjZSB7XG5cdGxvY2FsQ29waWVzOiBGaWVsZE1hcFtdID0gW107XG5cdHRyYW5zYWN0aW9uczogbnVtYmVyID0gMDtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBmYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdGVudHJ5OiBJdGVtRW50cnksXG5cdFx0b3B0aW9uczogSXRlbVJlc291cmNlT3B0aW9ucyxcblx0XHRpc05ldz86IGJvb2xlYW5cblx0KSB7XG5cdFx0c3VwZXIoZW50cnksIG9wdGlvbnMsIGlzTmV3KTtcblxuXHRcdGVudHJ5LnNldE1vZGlmaWVkKCk7XG5cblx0XHR0aGlzLmZpZWxkcyA9IGVudHJ5Lm1vZGlmaWVkO1xuXHR9XG5cblx0aXNOZXcgKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLl9pc05ldyAmJiB0aGlzLnRyYW5zYWN0aW9ucyA9PT0gMDtcblx0fVxuXG5cdHN0YXJ0ICgpOiB0aGlzIHtcblx0XHRpZiAodGhpcy5sb2NhbENvcGllcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0dGhpcy5sb2NhbENvcGllcyA9IFtdO1xuXG5cdFx0dGhpcy5sb2NhbENvcGllcy5wdXNoKHRoaXMuY29weUZpZWxkcygpKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cm9sbGJhY2sgKCk6IHRoaXMge1xuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuZW50cnk7XG5cblx0XHR0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoPEZpZWxkTWFwPiB0aGlzLmxvY2FsQ29waWVzLnBvcCgpLCBpdGVtRW50cnkubW9kaWZpZWQsIGl0ZW1FbnRyeS5jb2x1bW5zLm1haW4pO1xuXG5cdFx0aWYgKHRoaXMuaXNOZXcoKSAmJiB0aGlzLmxvY2FsQ29waWVzLmxlbmd0aCA9PT0gMClcblx0XHRcdHRoaXMuZGVhY3RpdmF0ZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjb21taXQgKGNhbGxPbkNoYW5nZTogYm9vbGVhbiA9IHRydWUpOiB0aGlzIHtcblx0XHRjb25zdCBwcmV2aW91cyA9IDxGaWVsZE1hcD4gdGhpcy5sb2NhbENvcGllcy5wb3AoKTtcblxuXHRcdGlmIChjYWxsT25DaGFuZ2UpXG5cdFx0XHR0aGlzLmNhbGxPbkNoYW5nZShwcmV2aW91cyk7XG5cblx0XHR0aGlzLnRyYW5zYWN0aW9ucysrOyAvLyBjb21wbGV0ZWQgdHJhbnNhY3Rpb25zXG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGdldExvY2FsQ29weSAoKTogRmllbGRNYXAgfCBudWxsIHtcblx0XHRjb25zdCBsb2NhbENvcGllcyA9IHRoaXMubG9jYWxDb3BpZXM7XG5cblx0XHRpZiAobG9jYWxDb3BpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0aWYgKGxvY2FsQ29waWVzLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0cmV0dXJuIGxvY2FsQ29waWVzW2xvY2FsQ29waWVzLmxlbmd0aCAtIDFdO1xuXHR9XG5cblx0Y29weUZpZWxkcyAoZGVzdGluYXRpb246IEZpZWxkTWFwID0ge30pOiBGaWVsZE1hcCB7XG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyeTtcblxuXHRcdHJldHVybiB0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoaXRlbUVudHJ5Lm1vZGlmaWVkLCBkZXN0aW5hdGlvbiwgaXRlbUVudHJ5LmNvbHVtbnMubWFpbik7XG5cdH1cblxuXHRzZXRGaWVsZHMgKHZhbHVlczogRmllbGRNYXAsIGNhbGxPbkNoYW5nZTogYm9vbGVhbiA9IHRydWUpOiB0aGlzIHtcblx0XHRjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xuXHRcdGNvbnN0IGZpZWxkcyA9IHRoaXMuZmllbGRzO1xuXHRcdGxldCBoYXNDaGFuZ2VzID0gZmFsc2U7XG5cdFx0bGV0IHByZXZpb3VzO1xuXG5cdFx0aWYgKGNhbGxPbkNoYW5nZSlcblx0XHRcdHByZXZpb3VzID0gdGhpcy5jb3B5RmllbGRzKCk7XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHZhbHVlcykge1xuXHRcdFx0Y29uc3QgY29sdW1uID0gY29sdW1uc1tjb2x1bW5JZF07XG5cblx0XHRcdGlmIChjb2x1bW4gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25zb2xlLndhcm4oJ3NldEZpZWxkczogbm8gY29sdW1uIGZvdW5kIGZvcicsIGNvbHVtbklkKTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyLmNvbXBhcmVGaWVsZHMoY29sdW1uLnR5cGUsIGZpZWxkc1tjb2x1bW5JZF0sIHZhbHVlc1tjb2x1bW5JZF0pKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0ZmllbGRzW2NvbHVtbklkXSA9IHZhbHVlc1tjb2x1bW5JZF07XG5cdFx0XHRoYXNDaGFuZ2VzID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoY2FsbE9uQ2hhbmdlICYmIGhhc0NoYW5nZXMpXG5cdFx0XHR0aGlzLmNhbGxPbkNoYW5nZShwcmV2aW91cyk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNhbGxPbkNoYW5nZSAocHJldmlvdXM/OiBGaWVsZE1hcCk6IHRoaXMge1xuXHRcdHRoaXMuZW50cnkuY2FsbE9uQ2hhbmdlKHByZXZpb3VzKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2F2ZSAocGFyYW1ldGVycz86IGFueSk6IFByb21pc2VJbnRlcmZhY2U8dGhpcz4ge1xuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyeTtcblx0XHRjb25zdCBwYXJhbWV0ZXJNYXAgPSB7fTtcblxuXHRcdGlmIChwYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNyZWF0ZVBhdGgoXG5cdFx0XHRcdHBhcmFtZXRlck1hcCxcblx0XHRcdFx0W2l0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXG5cdFx0XHRcdFt7fSwgcGFyYW1ldGVyc11cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIChcblx0XHRcdGl0ZW1FbnRyeS5pc0xvY2thYmxlKCkgP1xuXHRcdFx0XHRmYWN0b3J5LmxvY2tTZXJ2aWNlLmZldGNoTG9jayhpdGVtRW50cnkpIDpcblx0XHRcdFx0ZmFjdG9yeS5wcm9taXNlU2VydmljZS53aGVuKClcblx0XHQpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdC8vIGFkZFRvQ29sbGVjdGlvbnMgaXMgY2FsbGVkIGluIGNoYW5nZXNQcm9jZXNzb3Jcblx0XHRcdFx0cmV0dXJuIGZhY3RvcnkuY2hhbmdlc1Byb2Nlc3Nvci5leGVjdXRlKFtpdGVtRW50cnldLCBbXSwgcGFyYW1ldGVyTWFwKTtcblx0XHRcdH0sXG5cdFx0XHRmYWN0b3J5LmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdGZhY3RvcnkuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IGluc3RhbnRpYXRlT3B0aW9ucyB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQXBpUXVlcnksIEFwaVJlcXVlc3RDb2x1bW5zLCBBcGlSZXF1ZXN0TGltaXQsIEVudHJ5UGFyZW50TnVsbCB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgQ29sbGVjdGlvbkVudHJ5T3B0aW9uc0ludGVyZmFjZSA9IFBhcnRpYWw8Q29sbGVjdGlvbkVudHJ5T3B0aW9ucz47XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRW50cnlPcHRpb25zIHtcblx0Y29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMgPSBbXTtcblx0cXVlcnk6IEFwaVF1ZXJ5IHwgbnVsbCA9IG51bGw7XG5cdHF1ZXJ5UGFyYW1zOiBhbnkgPSB7fTsgLy8gVE9ET1xuXHRwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCA9IG51bGw7XG5cdGRlZmVyUmVxdWVzdDogYm9vbGVhbiA9IGZhbHNlO1xuXHRsaW1pdDogQXBpUmVxdWVzdExpbWl0IHwgbnVsbCA9IG51bGw7XG5cdGVudHJ5S2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuXHRjb25zdHJ1Y3RvciAodmFsdWVzOiBDb2xsZWN0aW9uRW50cnlPcHRpb25zSW50ZXJmYWNlKSB7XG5cdFx0aW5zdGFudGlhdGVPcHRpb25zKHRoaXMsIHZhbHVlcyk7XG5cdH1cbn1cbiIsImltcG9ydCB7IGluc3RhbnRpYXRlT3B0aW9ucyB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4uL2NvcmUnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IENvbnZlcnNpb25NYXAsIE9uQ2hhbmdlRnVuY3Rpb24gfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCB0eXBlIENvbGxlY3Rpb25SZXNvdXJjZUNhbGxiYWNrID0gKFxuXHRpdGVtUmVzb3VyY2VzOiBJdGVtUmVzb3VyY2VbXSxcblx0Y29sbGVjdGlvblJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2VcbikgPT4gdm9pZDtcblxuZXhwb3J0IHR5cGUgQ29sbGVjdGlvblJlc291cmNlSW5pdGlhbENhbGxiYWNrID0gKFxuXHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXG5cdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5XG4pID0+IHZvaWQ7XG5cbmV4cG9ydCB0eXBlIE9uSXRlbXNDcmVhdGVkQ2FsbGJhY2sgPSAoY29udmVyc2lvbk1hcDogQ29udmVyc2lvbk1hcCkgPT4gdm9pZDtcblxuZXhwb3J0IHR5cGUgQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZSA9IFBhcnRpYWw8Q29sbGVjdGlvblJlc291cmNlT3B0aW9ucz47XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zIHtcblx0ZWRpdEl0ZW1zOiBib29sZWFuID0gZmFsc2U7XG5cdHJlbW90ZUl0ZW1zOiBib29sZWFuID0gZmFsc2U7XG5cdGVkaXRDb2xsZWN0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cdG1vZEluc3RhbnQ6IGJvb2xlYW4gPSBmYWxzZTtcblx0ZW5hYmxlU2F2ZTogYm9vbGVhbiA9IHRydWU7XG5cdG9uSXRlbXNDcmVhdGVkOiBPbkl0ZW1zQ3JlYXRlZENhbGxiYWNrID0gbm9vcDtcblx0b25DaGFuZ2U6IE9uQ2hhbmdlRnVuY3Rpb24gPSBub29wO1xuXHRvbkFkZDogQ29sbGVjdGlvblJlc291cmNlQ2FsbGJhY2sgPSBub29wO1xuXHRvblJlbW92ZTogQ29sbGVjdGlvblJlc291cmNlQ2FsbGJhY2sgPSBub29wO1xuXHRvbkFkZEluaXRpYWw6IENvbGxlY3Rpb25SZXNvdXJjZUluaXRpYWxDYWxsYmFjayA9IG5vb3A7XG5cdG9uUmVtb3ZlSW5pdGlhbDogQ29sbGVjdGlvblJlc291cmNlSW5pdGlhbENhbGxiYWNrID0gbm9vcDtcblx0cmVzb3VyY2VLZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXHRjbGVhck9uVGFiQ2hhbmdlOiBib29sZWFuID0gdHJ1ZTtcblx0Y2xlYXJPblN1YlRhYkNoYW5nZTogYm9vbGVhbiA9IHRydWU7XG5cdGN1c3RvbTogYW55ID0gbnVsbDtcblxuXHRjb25zdHJ1Y3RvciAodmFsdWVzOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlKSB7XG5cdFx0aW5zdGFudGlhdGVPcHRpb25zKHRoaXMsIHZhbHVlcyk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEJhdGNoU3RhdHVzLCBDb2x1bW5FeHBhbnNpb24sIENvbHVtbkluZm8sIENvbHVtblNldCwgaW5BcnJheSwgSXRlbUNhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBFTlRSWV9TVEFUVVMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5RmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnlPcHRpb25zLCBDb2xsZWN0aW9uUmVzb3VyY2UsIEl0ZW1FbnRyeSwgVGVtcGxhdGUgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtcblx0QXBpUmVxdWVzdENvbHVtbnMsXG5cdENvbGxlY3Rpb25RdWVyeSxcblx0Q29udmVyc2lvbk1hcCxcblx0RW50cnlQYXJlbnROdWxsLFxuXHRGaWVsZE1hcCxcblx0SXRlbUlkLFxuXHRJdGVtSWRDb252ZXJzaW9uTWFwLFxuXHRJdGVtVHlwZSxcblx0UHJvbWlzZUludGVyZmFjZSxcblx0UXVlcnlDYWxsYmFja1xufSBmcm9tICcuLi90eXBlcyc7XG5cbmxldCBjdXJyZW50SWQgPSAwO1xuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkVudHJ5IHtcblx0aWQ6IG51bWJlciA9IGN1cnJlbnRJZCsrO1xuXHRxdWVyeTogQ29sbGVjdGlvblF1ZXJ5O1xuXHRjb2x1bW5zOiBDb2x1bW5TZXQ7XG5cdHRlbXBsYXRlQ29sdW1uczogQ29sdW1uU2V0IHwgbnVsbCA9IG51bGw7XG5cblx0cGFyZW50OiBFbnRyeVBhcmVudE51bGwgPSBudWxsO1xuXG5cdGluaXRpYWw6IEl0ZW1FbnRyeVtdID0gW107XG5cdGl0ZW1zOiBJdGVtRW50cnlbXSA9IFtdO1xuXG5cdHJlc291cmNlczogQ29sbGVjdGlvblJlc291cmNlW10gPSBbXTtcblx0ZGVmZXJyZWQ6IGFueTtcblx0cHJvbWlzZTogUHJvbWlzZUludGVyZmFjZTx0aGlzPjtcblx0cmVsb2FkUXVldWVkOiBib29sZWFuID0gZmFsc2U7XG5cblx0aGFzRWRpdFJlc291cmNlcyA9IGZhbHNlO1xuXHRoYXNJdGVtRWRpdFJlc291cmNlcyA9IGZhbHNlO1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGZhY3Rvcnk6IENvbGxlY3Rpb25FbnRyeUZhY3RvcnksXG5cdFx0cHVibGljIGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRwdWJsaWMgb3B0aW9uczogQ29sbGVjdGlvbkVudHJ5T3B0aW9uc1xuXHQpIHtcblx0XHR0aGlzLnBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuXHRcdHRoaXMucXVlcnkgPSBmYWN0b3J5LmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuY3JlYXRlUXVlcnkob3B0aW9ucyk7XG5cdFx0dGhpcy5jb2x1bW5zID0gZmFjdG9yeS5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdFN0dWIoaXRlbVR5cGUsIG9wdGlvbnMuY29sdW1ucyk7XG5cblx0XHR0aGlzLmRlZmVyKCk7XG5cdH1cblxuXHRkZWZlciAoKTogdGhpcyB7XG5cdFx0aWYgKHRoaXMuaXNEZWZlcnJlZCgpKVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHR0aGlzLmRlZmVycmVkID0gdGhpcy5mYWN0b3J5LnByb21pc2VTZXJ2aWNlLmRlZmVyKCk7XG5cdFx0dGhpcy5wcm9taXNlID0gdGhpcy5kZWZlcnJlZC5wcm9taXNlO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRpc0RlZmVycmVkICgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlICE9PSB1bmRlZmluZWQ7XG5cdH1cblxuXHRfcmVzb2x2ZSAoKTogdGhpcyB7XG5cdFx0Y29uc3QgZGVmZXJyZWQgPSB0aGlzLmRlZmVycmVkO1xuXG5cdFx0ZGVsZXRlIHRoaXMuZGVmZXJyZWQ7XG5cdFx0ZGVsZXRlIHRoaXMucHJvbWlzZTtcblxuXHRcdGRlZmVycmVkLnJlc29sdmUodGhpcyk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHJlc29sdmUgKGl0ZW1FbnRyeUNvbXBvdW5kOiB7Y29sdW1uczogQ29sdW1uU2V0LCBpbml0aWFsOiBJdGVtRW50cnlbXSwgbW9kaWZpZWQ/OiBJdGVtRW50cnlbXX0pOiB0aGlzIHtcblx0XHRjb25zdCB7aW5pdGlhbCwgbW9kaWZpZWR9ID0gaXRlbUVudHJ5Q29tcG91bmQ7XG5cblx0XHR0aGlzLmNvbHVtbnMgPSBpdGVtRW50cnlDb21wb3VuZC5jb2x1bW5zO1xuXHRcdHRoaXMuaW5pdGlhbCA9IGluaXRpYWw7XG5cdFx0dGhpcy5pdGVtcyA9IG1vZGlmaWVkICE9PSB1bmRlZmluZWQgPyBtb2RpZmllZCA6IGluaXRpYWwuc2xpY2UoKTtcblxuXHRcdHJldHVybiB0aGlzLl9yZXNvbHZlKCk7XG5cdH1cblxuXHRpc0xvY2FsICgpOiBib29sZWFuIHtcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcblxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRyZXR1cm4gdGhpcy5mYWN0b3J5LmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudC5pdGVtSWQpO1xuXHR9XG5cblx0bWF0Y2hQYXJlbnQgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQpOiBib29sZWFuIHtcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcblxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHQvLyA9PSB0byBjb21wYXJlIGl0ZW1JZHNcblx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuXHRcdHJldHVybiBwYXJlbnQuaXRlbVR5cGUgPT09IGl0ZW1UeXBlICYmIHBhcmVudC5pdGVtSWQgPT0gaXRlbUlkO1xuXHR9XG5cblx0Zm9yRWFjaCAoY2FsbGJhY2s6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gdm9pZCk6IHZvaWQge1xuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcblxuXHRcdGZvciAoY29uc3QgbW9kIG9mIG1vZGlmaWVkKVxuXHRcdFx0Y2FsbGJhY2sobW9kKTtcblx0fVxuXG5cdGdldEl0ZW1CeUlkIChpdGVtSWQ6IEl0ZW1JZCk6IEl0ZW1FbnRyeSB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgbW9kaWZpZWQpIHtcblx0XHRcdGlmIChpdGVtRW50cnkuaXRlbUlkID09PSBpdGVtSWQpXG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdGdldElkQXJyYXkgKGFjY3VtdWxhdG9yOiBJdGVtSWRbXSA9IFtdKTogSXRlbUlkW10ge1xuXHRcdHJldHVybiB0aGlzLmZhY3RvcnkuY29sbGVjdGlvbkVudHJ5U2VydmljZS5nZXRJZEFycmF5KHRoaXMuaXRlbXMsIGFjY3VtdWxhdG9yKTtcblx0fVxuXG5cdC8vIHNob3VsZCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggcmVzb2x2ZURlcml2ZWRcblx0Y3JlYXRlSXRlbXMgKHZhbHVlc0FycmF5OiBGaWVsZE1hcFtdKTogUHJvbWlzZUludGVyZmFjZTxJdGVtRW50cnlbXT4ge1xuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XG5cdFx0Y29uc3QgY29sdW1uU2V0ID0gdGhpcy5jb2x1bW5zO1xuXHRcdGxldCB0ZW1wbGF0ZTogVGVtcGxhdGU7XG5cblx0XHRyZXR1cm4gZmFjdG9yeS5pdGVtSGFuZGxlci5mZXRjaFRlbXBsYXRlKHRoaXMuaXRlbVR5cGUpLnRoZW4oXG5cdFx0XHQodGVtcGxhdGVJbnN0YW5jZTogVGVtcGxhdGUpID0+IHtcblx0XHRcdFx0dGVtcGxhdGUgPSB0ZW1wbGF0ZUluc3RhbmNlO1xuXG5cdFx0XHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5W10gPSBbXTtcblxuXHRcdFx0XHRpZiAodGhpcy50ZW1wbGF0ZUNvbHVtbnMgPT09IG51bGwpIHtcblx0XHRcdFx0XHR0aGlzLnRlbXBsYXRlQ29sdW1ucyA9IHRlbXBsYXRlLmNvbHVtbnMubWVyZ2UoY29sdW1uU2V0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGZvciAoY29uc3QgdmFsdWVzIG9mIHZhbHVlc0FycmF5KSB7XG5cdFx0XHRcdFx0cmVzdWx0LnB1c2goXG5cdFx0XHRcdFx0XHRmYWN0b3J5Lml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0TG9jYWwoXG5cdFx0XHRcdFx0XHRcdGZhY3Rvcnkua2V5U2VydmljZS5nZXRMb2NhbElkKCksXG5cdFx0XHRcdFx0XHRcdHRlbXBsYXRlLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZXMsXG5cdFx0XHRcdFx0XHRcdHt9LFxuXHRcdFx0XHRcdFx0XHR0aGlzLnBhcmVudCxcblx0XHRcdFx0XHRcdFx0dGhpcy50ZW1wbGF0ZUNvbHVtbnNcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblxuXHRcdFx0fSxcblx0XHRcdGZhY3RvcnkuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRyZXNvbHZlRGVyaXZlZFZhbHVlcyAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCBsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlKTogUHJvbWlzZUludGVyZmFjZTxJdGVtRW50cnlbXT4ge1xuXHRcdHJldHVybiB0aGlzLmZhY3RvcnkuaXRlbUhhbmRsZXIucmVzb2x2ZURlcml2ZWRWYWx1ZXMoaXRlbUVudHJpZXMsIHRoaXMuY29sdW1ucy5yb290LCBsb2NhbEl0ZW1DYWNoZSk7XG5cdH1cblxuXHRhZGRJdGVtczxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPiAoXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRcdHJlc3VsdFJlc291cmNlOiBVLFxuXHRcdHVwZGF0ZUluaXRpYWw/OiBib29sZWFuLFxuXHRcdGNhbGxPbkFkZD86IGJvb2xlYW4sXG5cdFx0Y2FsbE9uQWN0aXZhdGU/OiBib29sZWFuXG5cdCk6IFVbJ2l0ZW1zJ107XG5cblx0YWRkSXRlbXMgKFxuXHRcdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcblx0XHRyZXN1bHRSZXNvdXJjZT86IG51bGwsXG5cdFx0dXBkYXRlSW5pdGlhbD86IGJvb2xlYW4sXG5cdFx0Y2FsbE9uQWRkPzogYm9vbGVhbixcblx0XHRjYWxsT25BY3RpdmF0ZT86IGJvb2xlYW5cblx0KTogbnVsbDtcblxuXHRhZGRJdGVtczxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPiAoXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRcdHJlc3VsdFJlc291cmNlPzogVSB8IG51bGwsXG5cdFx0dXBkYXRlSW5pdGlhbD86IGJvb2xlYW4sXG5cdFx0Y2FsbE9uQWRkPzogYm9vbGVhbixcblx0XHRjYWxsT25BY3RpdmF0ZT86IGJvb2xlYW5cblx0KTogVVsnaXRlbXMnXSB8IG51bGw7XG5cblx0YWRkSXRlbXM8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZT4gKFxuXHRcdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcblx0XHRyZXN1bHRSZXNvdXJjZT86IFUgfCBudWxsLFxuXHRcdHVwZGF0ZUluaXRpYWw6IGJvb2xlYW4gPSBmYWxzZSxcblx0XHRjYWxsT25BZGQ/OiBib29sZWFuLFxuXHRcdGNhbGxPbkFjdGl2YXRlPzogYm9vbGVhblxuXHQpOiBVWydpdGVtcyddIHwgbnVsbCB7XG5cdFx0Ly8gbG9jYWwgZW50cnkgbWlnaHQgYmUgYWRkZWQgbXVsdGlwbGUgdGltZXMgKGV4dGVuZD8pXG5cdFx0aWYgKGl0ZW1FbnRyaWVzLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiBbXTtcblxuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcblx0XHRjb25zdCBwYXJlbnRDb2x1bW4gPSB0aGlzLmNvbHVtbnMubGluaztcblx0XHRjb25zdCBlbnRyaWVzQWRkZWRUb0luaXRpYWw6IEl0ZW1FbnRyeVtdID0gW107XG5cdFx0Y29uc3QgZW50cmllc0FkZGVkVG9Nb2RpZmllZDogSXRlbUVudHJ5W10gPSBbXTtcblxuXHRcdGlmICh1cGRhdGVJbml0aWFsKSB7XG5cdFx0XHRjb25zdCBpbml0aWFsID0gdGhpcy5pbml0aWFsO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0XHQvLyB3aGVuIHNhdmluZywgaXRlbXMgdGhhdCBtaWdodCBhbHJlYWR5IGJlIGluIG1vZGlmaWVkIGFyZSBhZGRlZCB0byBpbml0aWFsXG5cdFx0XHRcdGlmIChpbml0aWFsLmluZGV4T2YoaXRlbUVudHJ5KSA9PT0gLTEpIHtcblx0XHRcdFx0XHRpbml0aWFsLnB1c2goaXRlbUVudHJ5KTtcblx0XHRcdFx0XHRlbnRyaWVzQWRkZWRUb0luaXRpYWwucHVzaChpdGVtRW50cnkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdGlmIChtb2RpZmllZC5pbmRleE9mKGl0ZW1FbnRyeSkgPT09IC0xKSB7XG5cdFx0XHRcdGlmIChwYXJlbnQgIT09IG51bGwpIHtcblx0XHRcdFx0XHRpdGVtRW50cnkucGFyZW50ID0gcGFyZW50O1xuXG5cdFx0XHRcdFx0aWYgKHBhcmVudENvbHVtbiAhPT0gbnVsbCAmJiBpdGVtRW50cnkubW9kaWZpZWQgIT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5tb2RpZmllZFtwYXJlbnRDb2x1bW4uaWRdID0gcGFyZW50Lml0ZW1JZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdG1vZGlmaWVkLnB1c2goaXRlbUVudHJ5KTtcblx0XHRcdFx0ZW50cmllc0FkZGVkVG9Nb2RpZmllZC5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuaGFuZGxlQWRkZWRJdGVtQ2FsbGJhY2tzKFxuXHRcdFx0ZW50cmllc0FkZGVkVG9Jbml0aWFsLFxuXHRcdFx0ZW50cmllc0FkZGVkVG9Nb2RpZmllZCxcblx0XHRcdHJlc3VsdFJlc291cmNlLFxuXHRcdFx0Y2FsbE9uQWRkLFxuXHRcdFx0Y2FsbE9uQWN0aXZhdGVcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBoYW5kbGVBZGRlZEl0ZW1DYWxsYmFja3M8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZT4gKFxuXHRcdGVudHJpZXNBZGRlZFRvSW5pdGlhbDogSXRlbUVudHJ5W10sXG5cdFx0ZW50cmllc0FkZGVkVG9Nb2RpZmllZDogSXRlbUVudHJ5W10sXG5cdFx0cmVzdWx0UmVzb3VyY2U6IFUsXG5cdFx0Y2FsbE9uQWRkPzogYm9vbGVhbixcblx0XHRjYWxsT25BY3RpdmF0ZT86IGJvb2xlYW5cblx0KTogVVsnaXRlbXMnXTtcblxuXHRwcml2YXRlIGhhbmRsZUFkZGVkSXRlbUNhbGxiYWNrcyAoXG5cdFx0ZW50cmllc0FkZGVkVG9Jbml0aWFsOiBJdGVtRW50cnlbXSxcblx0XHRlbnRyaWVzQWRkZWRUb01vZGlmaWVkOiBJdGVtRW50cnlbXSxcblx0XHRyZXN1bHRSZXNvdXJjZT86IG51bGwsXG5cdFx0Y2FsbE9uQWRkPzogYm9vbGVhbixcblx0XHRjYWxsT25BY3RpdmF0ZT86IGJvb2xlYW5cblx0KTogbnVsbDtcblxuXHRwcml2YXRlIGhhbmRsZUFkZGVkSXRlbUNhbGxiYWNrczxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPiAoXG5cdFx0ZW50cmllc0FkZGVkVG9Jbml0aWFsOiBJdGVtRW50cnlbXSxcblx0XHRlbnRyaWVzQWRkZWRUb01vZGlmaWVkOiBJdGVtRW50cnlbXSxcblx0XHRyZXN1bHRSZXNvdXJjZT86IFUgfCBudWxsLFxuXHRcdGNhbGxPbkFkZD86IGJvb2xlYW4sXG5cdFx0Y2FsbE9uQWN0aXZhdGU/OiBib29sZWFuXG5cdCk6IFVbJ2l0ZW1zJ10gfCBudWxsO1xuXG5cdHByaXZhdGUgaGFuZGxlQWRkZWRJdGVtQ2FsbGJhY2tzPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U+IChcblx0XHRlbnRyaWVzQWRkZWRUb0luaXRpYWw6IEl0ZW1FbnRyeVtdLFxuXHRcdGVudHJpZXNBZGRlZFRvTW9kaWZpZWQ6IEl0ZW1FbnRyeVtdLFxuXHRcdHJlc3VsdFJlc291cmNlOiBVIHwgbnVsbCA9IG51bGwsXG5cdFx0Y2FsbE9uQWRkOiBib29sZWFuID0gdHJ1ZSxcblx0XHRjYWxsT25BY3RpdmF0ZTogYm9vbGVhbiA9IHRydWVcblx0KTogVVsnaXRlbXMnXSB8IG51bGwge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcblxuXHRcdGlmIChlbnRyaWVzQWRkZWRUb0luaXRpYWwubGVuZ3RoID4gMClcblx0XHRcdHRoaXMub25BZGRJbml0aWFsKGVudHJpZXNBZGRlZFRvSW5pdGlhbCk7XG5cblx0XHRpZiAoZW50cmllc0FkZGVkVG9Nb2RpZmllZC5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gcmVzdWx0UmVzb3VyY2UgPT09IG51bGwgPyBudWxsIDogW107XG5cblx0XHRpZiAoY2FsbE9uQWN0aXZhdGUgJiYgY29sbGVjdGlvblJlc291cmNlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCBsb2NhbENhY2hlID0gY29sbGVjdGlvblJlc291cmNlc1swXS5sb2NhbENhY2hlO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGFkZGVkSXRlbUVudHJ5IG9mIGVudHJpZXNBZGRlZFRvTW9kaWZpZWQpXG5cdFx0XHRcdGxvY2FsQ2FjaGUub25BY3RpdmF0ZUl0ZW0oYWRkZWRJdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdGxldCByZXN1bHQ6IFVbJ2l0ZW1zJ10gfCBudWxsID0gbnVsbDtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvblJlc291cmNlIG9mIGNvbGxlY3Rpb25SZXNvdXJjZXMpIHtcblx0XHRcdGNvbnN0IGFkZGVkUmVzb3VyY2VzID0gY29sbGVjdGlvblJlc291cmNlLmFkZEl0ZW1SZXNvdXJjZXMoZW50cmllc0FkZGVkVG9Nb2RpZmllZCk7XG5cblx0XHRcdGlmIChjb2xsZWN0aW9uUmVzb3VyY2UgPT09IHJlc3VsdFJlc291cmNlKSB7XG5cdFx0XHRcdHJlc3VsdCA9IGFkZGVkUmVzb3VyY2VzO1xuXG5cdFx0XHRcdGlmIChjYWxsT25BZGQpIHtcblx0XHRcdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLmNhbGxPbkFkZChhZGRlZFJlc291cmNlcyk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZVxuXHRcdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2UuY2FsbE9uQWRkKGFkZGVkUmVzb3VyY2VzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cmVtb3ZlSXRlbXM8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZT4gKFxuXHRcdGlkQXJyYXk6IEl0ZW1JZFtdLFxuXHRcdHJlc3VsdFJlc291cmNlOiBVLFxuXHRcdHVwZGF0ZUluaXRpYWw/OiBib29sZWFuLFxuXHRcdGNhbGxPblJlbW92ZT86IGJvb2xlYW5cblx0KTogVVsnaXRlbXMnXTtcblxuXHRyZW1vdmVJdGVtcyAoXG5cdFx0aWRBcnJheTogSXRlbUlkW10sXG5cdFx0cmVzdWx0UmVzb3VyY2U/OiBudWxsLFxuXHRcdHVwZGF0ZUluaXRpYWw/OiBib29sZWFuLFxuXHRcdGNhbGxPblJlbW92ZT86IGJvb2xlYW5cblx0KTogbnVsbDtcblxuXHRyZW1vdmVJdGVtczxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPiAoXG5cdFx0aWRBcnJheTogSXRlbUlkW10sXG5cdFx0cmVzdWx0UmVzb3VyY2U/OiBVIHwgbnVsbCxcblx0XHR1cGRhdGVJbml0aWFsPzogYm9vbGVhbixcblx0XHRjYWxsT25SZW1vdmU/OiBib29sZWFuXG5cdCk6IFVbJ2l0ZW1zJ10gfCBudWxsO1xuXG5cdHJlbW92ZUl0ZW1zPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U+IChcblx0XHRpZEFycmF5OiBJdGVtSWRbXSxcblx0XHRyZXN1bHRSZXNvdXJjZT86IFUgfCBudWxsLFxuXHRcdHVwZGF0ZUluaXRpYWw/OiBib29sZWFuLFxuXHRcdGNhbGxPblJlbW92ZT86IGJvb2xlYW5cblx0KTogVVsnaXRlbXMnXSB8IG51bGwge1xuXHRcdGlmIChpZEFycmF5Lmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiBbXTtcblxuXHRcdHJldHVybiB0aGlzLmhhbmRsZVJlbW92ZWRJdGVtcyhcblx0XHRcdGl0ZW1FbnRyeSA9PiAhaW5BcnJheShpdGVtRW50cnkuaXRlbUlkLCBpZEFycmF5KSxcblx0XHRcdHJlc3VsdFJlc291cmNlLFxuXHRcdFx0dXBkYXRlSW5pdGlhbCxcblx0XHRcdGNhbGxPblJlbW92ZVxuXHRcdCk7XG5cdH1cblxuXHRjbGVhcjxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPiAoXG5cdFx0cmVzdWx0UmVzb3VyY2U6IFUsXG5cdFx0dXBkYXRlSW5pdGlhbD86IGJvb2xlYW4sXG5cdFx0Y2FsbE9uUmVtb3ZlPzogYm9vbGVhblxuXHQpOiBVWydpdGVtcyddO1xuXG5cdGNsZWFyIChcblx0XHRyZXN1bHRSZXNvdXJjZT86IG51bGwsXG5cdFx0dXBkYXRlSW5pdGlhbD86IGJvb2xlYW4sXG5cdFx0Y2FsbE9uUmVtb3ZlPzogYm9vbGVhblxuXHQpOiBudWxsO1xuXG5cdGNsZWFyPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U+IChcblx0XHRyZXN1bHRSZXNvdXJjZT86IFUgfCBudWxsLFxuXHRcdHVwZGF0ZUluaXRpYWw/OiBib29sZWFuLFxuXHRcdGNhbGxPblJlbW92ZT86IGJvb2xlYW5cblx0KSB7XG5cdFx0cmV0dXJuIHRoaXMuaGFuZGxlUmVtb3ZlZEl0ZW1zKFxuXHRcdFx0KCkgPT4gZmFsc2UsXG5cdFx0XHRyZXN1bHRSZXNvdXJjZSxcblx0XHRcdHVwZGF0ZUluaXRpYWwsXG5cdFx0XHRjYWxsT25SZW1vdmVcblx0XHQpO1xuXHR9XG5cblx0aGFuZGxlUmVtb3ZlZEl0ZW1zPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U+IChcblx0XHRmaWx0ZXJGdW5jdGlvbjogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBib29sZWFuLFxuXHRcdHJlc3VsdFJlc291cmNlOiBVLFxuXHRcdHVwZGF0ZUluaXRpYWw/OiBib29sZWFuLFxuXHRcdGNhbGxPblJlbW92ZT86IGJvb2xlYW5cblx0KTogVVsnaXRlbXMnXTtcblxuXHRoYW5kbGVSZW1vdmVkSXRlbXMgKFxuXHRcdGZpbHRlckZ1bmN0aW9uOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGJvb2xlYW4sXG5cdFx0cmVzdWx0UmVzb3VyY2U/OiBudWxsLFxuXHRcdHVwZGF0ZUluaXRpYWw/OiBib29sZWFuLFxuXHRcdGNhbGxPblJlbW92ZT86IGJvb2xlYW5cblx0KTogbnVsbDtcblxuXHRoYW5kbGVSZW1vdmVkSXRlbXM8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZT4gKFxuXHRcdGZpbHRlckZ1bmN0aW9uOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGJvb2xlYW4sXG5cdFx0cmVzdWx0UmVzb3VyY2U/OiBVIHwgbnVsbCxcblx0XHR1cGRhdGVJbml0aWFsPzogYm9vbGVhbixcblx0XHRjYWxsT25SZW1vdmU/OiBib29sZWFuXG5cdCk6IFVbJ2l0ZW1zJ10gfCBudWxsO1xuXG5cdGhhbmRsZVJlbW92ZWRJdGVtczxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPiAoXG5cdFx0ZmlsdGVyRnVuY3Rpb246IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gYm9vbGVhbixcblx0XHRyZXN1bHRSZXNvdXJjZT86IFUgfCBudWxsLFxuXHRcdHVwZGF0ZUluaXRpYWw6IGJvb2xlYW4gPSBmYWxzZSxcblx0XHRjYWxsT25SZW1vdmU/OiBib29sZWFuXG5cdCk6IFVbJ2l0ZW1zJ10gfCBudWxsIHtcblx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlID0gdGhpcy5mYWN0b3J5LmNvbGxlY3Rpb25FbnRyeVNlcnZpY2U7XG5cdFx0Y29uc3QgcmVtb3ZlZEZyb21Nb2RpZmllZCA9IGNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuZmlsdGVyQXJyYXkodGhpcy5pdGVtcywgZmlsdGVyRnVuY3Rpb24pO1xuXHRcdGxldCByZW1vdmVkRnJvbUluaXRpYWw6IEl0ZW1FbnRyeVtdO1xuXG5cdFx0aWYgKHVwZGF0ZUluaXRpYWwpXG5cdFx0XHRyZW1vdmVkRnJvbUluaXRpYWwgPSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmZpbHRlckFycmF5KHRoaXMuaW5pdGlhbCwgZmlsdGVyRnVuY3Rpb24pO1xuXHRcdGVsc2Uge1xuXHRcdFx0Ly8gcmVtb3ZlIGFsbCAqbG9jYWwqIGl0ZW1zIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSBtb2RpZmllZCBmcm9tIGluaXRpYWwsIHRvb1xuXHRcdFx0Y29uc3QgbG9jYWxSZW1vdmVkRnJvbU1vZGlmaWVkOiBJdGVtRW50cnlbXSA9IFtdO1xuXG5cdFx0XHRmb3IgKGNvbnN0IHJlbW92ZWRFbnRyeSBvZiByZW1vdmVkRnJvbU1vZGlmaWVkKSB7XG5cdFx0XHRcdGlmIChyZW1vdmVkRW50cnkuaXNMb2NhbCgpKVxuXHRcdFx0XHRcdGxvY2FsUmVtb3ZlZEZyb21Nb2RpZmllZC5wdXNoKHJlbW92ZWRFbnRyeSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChsb2NhbFJlbW92ZWRGcm9tTW9kaWZpZWQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRyZW1vdmVkRnJvbUluaXRpYWwgPSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmZpbHRlckFycmF5KFxuXHRcdFx0XHRcdHRoaXMuaW5pdGlhbCxcblx0XHRcdFx0XHRpdGVtRW50cnkgPT4gbG9jYWxSZW1vdmVkRnJvbU1vZGlmaWVkLmluZGV4T2YoaXRlbUVudHJ5KSA9PT0gLTFcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZVxuXHRcdFx0XHRyZW1vdmVkRnJvbUluaXRpYWwgPSBbXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5oYW5kbGVSZW1vdmVkSXRlbUNhbGxiYWNrcyhyZW1vdmVkRnJvbUluaXRpYWwsIHJlbW92ZWRGcm9tTW9kaWZpZWQsIHJlc3VsdFJlc291cmNlLCBjYWxsT25SZW1vdmUpO1xuXHR9XG5cblx0cHJpdmF0ZSBoYW5kbGVSZW1vdmVkSXRlbUNhbGxiYWNrczxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPiAoXG5cdFx0cmVtb3ZlZEZyb21Jbml0aWFsOiBJdGVtRW50cnlbXSxcblx0XHRyZW1vdmVkRnJvbU1vZGlmaWVkOiBJdGVtRW50cnlbXSxcblx0XHRyZXN1bHRSZXNvdXJjZTogVSxcblx0XHRjYWxsT25SZW1vdmU/OiBib29sZWFuXG5cdCk6IFVbJ2l0ZW1zJ107XG5cblx0cHJpdmF0ZSBoYW5kbGVSZW1vdmVkSXRlbUNhbGxiYWNrcyAoXG5cdFx0cmVtb3ZlZEZyb21Jbml0aWFsOiBJdGVtRW50cnlbXSxcblx0XHRyZW1vdmVkRnJvbU1vZGlmaWVkOiBJdGVtRW50cnlbXSxcblx0XHRyZXN1bHRSZXNvdXJjZT86IG51bGwsXG5cdFx0Y2FsbE9uUmVtb3ZlPzogYm9vbGVhblxuXHQpOiBudWxsO1xuXG5cdHByaXZhdGUgaGFuZGxlUmVtb3ZlZEl0ZW1DYWxsYmFja3M8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZT4gKFxuXHRcdHJlbW92ZWRGcm9tSW5pdGlhbDogSXRlbUVudHJ5W10sXG5cdFx0cmVtb3ZlZEZyb21Nb2RpZmllZDogSXRlbUVudHJ5W10sXG5cdFx0cmVzdWx0UmVzb3VyY2U/OiBVIHwgbnVsbCxcblx0XHRjYWxsT25SZW1vdmU/OiBib29sZWFuXG5cdCk6IFVbJ2l0ZW1zJ10gfCBudWxsO1xuXG5cdHByaXZhdGUgaGFuZGxlUmVtb3ZlZEl0ZW1DYWxsYmFja3M8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZT4gKFxuXHRcdHJlbW92ZWRGcm9tSW5pdGlhbDogSXRlbUVudHJ5W10sXG5cdFx0cmVtb3ZlZEZyb21Nb2RpZmllZDogSXRlbUVudHJ5W10sXG5cdFx0cmVzdWx0UmVzb3VyY2U/OiBVIHwgbnVsbCxcblx0XHRjYWxsT25SZW1vdmU6IGJvb2xlYW4gPSB0cnVlXG5cdCk6IFVbJ2l0ZW1zJ10gfCBudWxsIHtcblx0XHRjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7XG5cblx0XHRpZiAocmVtb3ZlZEZyb21Jbml0aWFsLmxlbmd0aCA+IDApXG5cdFx0XHR0aGlzLm9uUmVtb3ZlSW5pdGlhbChyZW1vdmVkRnJvbUluaXRpYWwpO1xuXG5cdFx0aWYgKHJlbW92ZWRGcm9tTW9kaWZpZWQubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIHJlc3VsdFJlc291cmNlID09PSBudWxsID8gbnVsbCA6IFtdO1xuXG5cdFx0bGV0IHJlc3VsdDogVVsnaXRlbXMnXSB8IG51bGwgPSBudWxsO1xuXG5cdFx0Zm9yIChjb25zdCByZW1vdmVkRW50cnkgb2YgcmVtb3ZlZEZyb21Nb2RpZmllZClcblx0XHRcdHJlbW92ZWRFbnRyeS5kZWFjdGl2YXRlUmVzb3VyY2VzKCk7XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZSBvZiBjb2xsZWN0aW9uUmVzb3VyY2VzKSB7XG5cdFx0XHRjb25zdCByZW1vdmVkUmVzb3VyY2VzID0gY29sbGVjdGlvblJlc291cmNlLnJlbW92ZUl0ZW1SZXNvdXJjZXMocmVtb3ZlZEZyb21Nb2RpZmllZCk7XG5cblx0XHRcdGlmIChjb2xsZWN0aW9uUmVzb3VyY2UgPT09IHJlc3VsdFJlc291cmNlKSB7XG5cdFx0XHRcdHJlc3VsdCA9IHJlbW92ZWRSZXNvdXJjZXM7XG5cblx0XHRcdFx0aWYgKGNhbGxPblJlbW92ZSlcblx0XHRcdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2UuY2FsbE9uUmVtb3ZlKHJlbW92ZWRSZXNvdXJjZXMpO1xuXHRcdFx0fSBlbHNlXG5cdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5jYWxsT25SZW1vdmUocmVtb3ZlZFJlc291cmNlcyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHByaXZhdGUgY3JlYXRlQmF0Y2hTdGF0dXMgKFxuXHRcdGl0ZW1JZHM6IEl0ZW1JZFtdLFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyxcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlXG5cdCk6IEJhdGNoU3RhdHVzPEl0ZW1FbnRyeT4ge1xuXHRcdHJldHVybiB0aGlzLmZhY3RvcnkuaXRlbUhhbmRsZXIuY3JlYXRlQmF0Y2hTdGF0dXMoXG5cdFx0XHR0aGlzLml0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkcyxcblx0XHRcdHRoaXMucGFyZW50LFxuXHRcdFx0cmVxdWVzdENvbHVtbnMsXG5cdFx0XHRmYWxzZSxcblx0XHRcdGxvY2FsSXRlbUNhY2hlLFxuXHRcdFx0ZmFsc2Vcblx0XHQpLmJhdGNoU3RhdHVzO1xuXHR9XG5cblx0cHJpdmF0ZSBleHBhbmRMb2NhbCAoXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRcdGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGVcblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2x1bW5FeHBhbnNpb24+IHtcblx0XHRjb25zdCBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5O1xuXHRcdGNvbnN0IGVycm9ySGFuZGxlciA9IGZhY3RvcnkuZXJyb3JIYW5kbGVyO1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gdGhpcy5pdGVtVHlwZTtcblxuXHRcdHJldHVybiBmYWN0b3J5LmNvbHVtbkhhbmRsZXIuZmV0Y2goaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zKS50aGVuKFxuXHRcdFx0cmVzcG9uc2VDb2x1bW5zID0+IHtcblx0XHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gZmFjdG9yeS5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRyZXF1ZXN0Q29sdW1ucyxcblx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnNcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRjb25zdCBiYXRjaFN0YXR1cyA9IHRoaXMuY3JlYXRlQmF0Y2hTdGF0dXModGhpcy5nZXRJZEFycmF5KCksIHJlcXVlc3RDb2x1bW5zLCBsb2NhbEl0ZW1DYWNoZSk7XG5cblx0XHRcdFx0cmV0dXJuIGJhdGNoU3RhdHVzLmdldFByb21pc2VzKCkudGhlbihcblx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFjdG9yeS5pdGVtSGFuZGxlci5oYW5kbGVCYXRjaFJlc3BvbnNlKFxuXHRcdFx0XHRcdFx0XHRiYXRjaFN0YXR1cyxcblx0XHRcdFx0XHRcdFx0bG9jYWxJdGVtQ2FjaGUsXG5cdFx0XHRcdFx0XHRcdHJlcXVlc3RDb2x1bW5zLFxuXHRcdFx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnMsXG5cdFx0XHRcdFx0XHRcdGNvbHVtbkV4cGFuc2lvblxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KS50aGVuKFxuXHRcdFx0XHRcdCgpID0+IGNvbHVtbkV4cGFuc2lvbixcblx0XHRcdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIGV4cGFuZFJlbW90ZSAoXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRcdGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGVcblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2x1bW5FeHBhbnNpb24+IHtcblx0XHRjb25zdCBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5O1xuXHRcdGNvbnN0IGVycm9ySGFuZGxlciA9IGZhY3RvcnkuZXJyb3JIYW5kbGVyO1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gdGhpcy5pdGVtVHlwZTtcblxuXHRcdHJldHVybiBmYWN0b3J5Lml0ZW1SZXF1ZXN0U2VydmljZS5yZXF1ZXN0SXRlbXModGhpcywgdW5kZWZpbmVkLCByZXF1ZXN0Q29sdW1ucykudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCk7XG5cdFx0XHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IGZhY3RvcnkuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0cmVxdWVzdENvbHVtbnMsXG5cdFx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0Y29uc3QgYmF0Y2hTdGF0dXMgPSB0aGlzLmNyZWF0ZUJhdGNoU3RhdHVzKHJlc3BvbnNlLmxpbmtzW2l0ZW1UeXBlXSwgcmVxdWVzdENvbHVtbnMsIGxvY2FsSXRlbUNhY2hlKTtcblxuXHRcdFx0XHRyZXR1cm4gYmF0Y2hTdGF0dXMuZ2V0UHJvbWlzZXMoKS50aGVuKFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBmYWN0b3J5Lml0ZW1IYW5kbGVyLmhhbmRsZUJhdGNoUmVzcG9uc2UoXG5cdFx0XHRcdFx0XHRcdGJhdGNoU3RhdHVzLFxuXHRcdFx0XHRcdFx0XHRsb2NhbEl0ZW1DYWNoZSxcblx0XHRcdFx0XHRcdFx0cmVxdWVzdENvbHVtbnMsXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnMsXG5cdFx0XHRcdFx0XHRcdGNvbHVtbkV4cGFuc2lvblxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KS50aGVuKFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHJlc3BvbnNlSXRlbXMgPSByZXNwb25zZS5pdGVtc1tpdGVtVHlwZV07XG5cblx0XHRcdFx0XHRcdHRoaXMuaGFuZGxlUmVtb3ZlZEl0ZW1zKFxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiByZXNwb25zZUl0ZW1zW2l0ZW1FbnRyeS5pdGVtSWRdICE9PSB1bmRlZmluZWQgfHwgaXRlbUVudHJ5LmlzTG9jYWwoKTtcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0dGhpcy5hZGRJdGVtcyhcblx0XHRcdFx0XHRcdFx0YmF0Y2hTdGF0dXMuZ2V0QXJyYXkoW0VOVFJZX1NUQVRVUy5SRVNPTFZFXSksXG5cdFx0XHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0XHRcdGZhbHNlXG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRyZXR1cm4gY29sdW1uRXhwYW5zaW9uO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0ZXhwYW5kIChuZXdDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucywgbG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZSk6IFByb21pc2VJbnRlcmZhY2U8dGhpcz4ge1xuXHRcdGNvbnN0IHttZXJnZWQsIGRpZmZlcmVuY2V9ID0gdGhpcy5jb2x1bW5zLm1lcmdlUmVxdWVzdENvbHVtbnMobmV3Q29sdW1ucyk7XG5cblx0XHRpZiAoZGlmZmVyZW5jZSAhPT0gdHJ1ZSAmJiBkaWZmZXJlbmNlLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiB0aGlzLmZhY3RvcnkucHJvbWlzZVNlcnZpY2Uud2hlbih0aGlzKTtcblxuXHRcdHJldHVybiAoXG5cdFx0XHR0aGlzLmlzTG9jYWwoKSA/XG5cdFx0XHRcdHRoaXMuZXhwYW5kTG9jYWwoZGlmZmVyZW5jZSwgbG9jYWxJdGVtQ2FjaGUpIDpcblx0XHRcdFx0dGhpcy5leHBhbmRSZW1vdGUobWVyZ2VkLCBsb2NhbEl0ZW1DYWNoZSlcblx0XHQpLnRoZW4oXG5cdFx0XHRjb2x1bW5FeHBhbnNpb24gPT4ge1xuXHRcdFx0XHR0aGlzLmV4cGFuZENvbHVtbnMoY29sdW1uRXhwYW5zaW9uKTtcblxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH1cblx0XHQpO1xuXHR9XG5cblx0ZXh0ZW5kUXVlcnkgKGNhbGxiYWNrPzogUXVlcnlDYWxsYmFjaykge1xuXHRcdGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cblx0XHRpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLnF1ZXJ5O1xuXG5cdFx0b3B0aW9ucy5xdWVyeVBhcmFtcyA9IGNhbGxiYWNrKG9wdGlvbnMucXVlcnlQYXJhbXMpO1xuXG5cdFx0cmV0dXJuIHRoaXMucXVlcnkgPSB0aGlzLmZhY3RvcnkuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jcmVhdGVRdWVyeShvcHRpb25zKTtcblx0fVxuXG5cdGV4dGVuZDxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPiAoXG5cdFx0cXVlcnlDYWxsYmFjazogUXVlcnlDYWxsYmFjayxcblx0XHRjb2xsZWN0aW9uUmVzb3VyY2U/OiBVLFxuXHRcdGNhbGxPbkFkZD86IGJvb2xlYW4sXG5cdFx0dXBkYXRlSW5pdGlhbD86IGJvb2xlYW5cblx0KTogUHJvbWlzZUludGVyZmFjZTxVWydpdGVtcyddPjtcblxuXHRleHRlbmQgKFxuXHRcdHF1ZXJ5Q2FsbGJhY2s6IFF1ZXJ5Q2FsbGJhY2ssXG5cdFx0Y29sbGVjdGlvblJlc291cmNlPzogbnVsbCxcblx0XHRjYWxsT25BZGQ/OiBib29sZWFuLFxuXHRcdHVwZGF0ZUluaXRpYWw/OiBib29sZWFuXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8bnVsbD47XG5cblx0ZXh0ZW5kPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U+IChcblx0XHRxdWVyeUNhbGxiYWNrOiBRdWVyeUNhbGxiYWNrLFxuXHRcdGNvbGxlY3Rpb25SZXNvdXJjZT86IFUgfCBudWxsLFxuXHRcdGNhbGxPbkFkZD86IGJvb2xlYW4sXG5cdFx0dXBkYXRlSW5pdGlhbD86IGJvb2xlYW5cblx0KSB7XG5cdFx0Y29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTtcblx0XHRjb25zdCBlcnJvckhhbmRsZXIgPSBmYWN0b3J5LmVycm9ySGFuZGxlcjtcblx0XHRjb25zdCBleHRlbmRlZFF1ZXJ5ID0gdGhpcy5leHRlbmRRdWVyeShxdWVyeUNhbGxiYWNrKS5vYmplY3Q7XG5cdFx0Y29uc3QgZnVsbFF1ZXJ5ID0gZmFjdG9yeS5xdWVyeVNlcnZpY2UuYWRkQW5kQ29uZGl0aW9uKFxuXHRcdFx0ZXh0ZW5kZWRRdWVyeSxcblx0XHRcdGZhY3RvcnkucXVlcnlTZXJ2aWNlLmNyZWF0ZU5vdEluKHRoaXMuZ2V0SWRBcnJheSgpKVxuXHRcdCk7XG5cblx0XHQvLyB0b2RvOiBhbHNvIGRvIHRoZSBsaW1pdCBjaGVjayBpbiBiYXRjaEV4dGVuZFxuXHRcdGNvbnN0IHByb21pc2UgPSBmYWN0b3J5Lml0ZW1SZXF1ZXN0U2VydmljZS5yZXF1ZXN0SXRlbXMoXG5cdFx0XHR0aGlzLFxuXHRcdFx0Ly8gV2hlbiB0aGVyZSdzIGEgbGltaXQgd2Ugd2FudCB0byBmZXRjaCBhbGwgaXRlbXMgYmVjYXVzZSB3ZSB3aWxsIGRvIHNvcnRpbmcgYW5kIHNwbGljaW5nIG9mIHRoZSBleGNlc3MgaXRlbXNcblx0XHRcdHRoaXMub3B0aW9ucy5saW1pdCAhPT0gbnVsbCA/IGV4dGVuZGVkUXVlcnkgOiBmdWxsUXVlcnlcblx0XHQpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdC8vIHJlbW92ZUFic2VudEl0ZW1zKHJlc3BvbnNlKTsgVE9ETzogd2UgY2FuIG9ubHkgZG8gdGhpcyB3aGVuIHdlIHJlcXVlc3QgKmFsbCogdGhlIGl0ZW1zXG5cdFx0XHRcdHJldHVybiBmYWN0b3J5Lml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzUmVzcG9uc2UoXG5cdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0cmVzcG9uc2UubGlua3NbdGhpcy5pdGVtVHlwZV0sXG5cdFx0XHRcdFx0dGhpcy5wYXJlbnQsXG5cdFx0XHRcdFx0dGhpcy5jb2x1bW5zXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihcblx0XHRcdGl0ZW1FbnRyaWVzID0+IHtcblx0XHRcdFx0ZGVsZXRlIHRoaXMucHJvbWlzZTtcblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5hZGRJdGVtcyhpdGVtRW50cmllcywgY29sbGVjdGlvblJlc291cmNlLCB1cGRhdGVJbml0aWFsLCBjYWxsT25BZGQsIGZhbHNlKTtcblx0XHRcdH0sXG5cdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblxuXHRcdHRoaXMucHJvbWlzZSA9IHByb21pc2UudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cblx0XHRyZXR1cm4gcHJvbWlzZTtcblx0fVxuXG5cdHF1ZXVlUmVsb2FkICgpOiB2b2lkIHtcblx0XHR0aGlzLnJlbG9hZFF1ZXVlZCA9IHRydWU7XG5cdH1cblxuXHRleHBhbmRDb2x1bW5zIChjb2x1bW5FeHBhbnNpb246IENvbHVtbkV4cGFuc2lvbik6IHZvaWQge1xuXHRcdGNvbnN0IGV4cGFuc2lvblJlc3VsdCA9IGNvbHVtbkV4cGFuc2lvbi5ydW4odGhpcy5jb2x1bW5zKTtcblxuXHRcdGlmIChleHBhbnNpb25SZXN1bHQgPT09IG51bGwpXG5cdFx0XHRyZXR1cm47XG5cblx0XHR0aGlzLmNvbHVtbnMgPSBleHBhbnNpb25SZXN1bHQubWVyZ2VkO1xuXHRcdHRoaXMudGVtcGxhdGVDb2x1bW5zID0gbnVsbDtcblx0XHR0aGlzLm9wdGlvbnMuY29sdW1ucyA9IHRoaXMuY29sdW1ucy5yZXF1ZXN0O1xuXHR9XG5cblx0ZXhwYW5kUmVxdWVzdENvbHVtbnMgKHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyk6IHZvaWQge1xuXHRcdHRoaXMuY29sdW1ucy5leHBhbmRSZXF1ZXN0Q29sdW1ucyhyZXF1ZXN0Q29sdW1ucyk7XG5cdFx0dGhpcy5vcHRpb25zLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMucmVxdWVzdDtcblx0fVxuXG5cdGdldEFkZGVkSXRlbXMgKHJldHVybkl0ZW1JZHM6IHRydWUpOiBJdGVtSWRbXTtcblx0Z2V0QWRkZWRJdGVtcyAocmV0dXJuSXRlbUlkcz86IGJvb2xlYW4pOiBJdGVtRW50cnlbXTtcblx0Z2V0QWRkZWRJdGVtcyAocmV0dXJuSXRlbUlkczogYm9vbGVhbiA9IGZhbHNlKSB7XG5cdFx0Y29uc3QgaW5pdGlhbCA9IHRoaXMuaW5pdGlhbDtcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgcmVzdWx0OiBBcnJheTxJdGVtRW50cnkgfCBJdGVtSWQ+ID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBtb2RpZmllZCkge1xuXHRcdFx0aWYgKGluaXRpYWwuaW5kZXhPZihpdGVtRW50cnkpID09PSAtMSlcblx0XHRcdFx0cmVzdWx0LnB1c2gocmV0dXJuSXRlbUlkcyA/IGl0ZW1FbnRyeS5pdGVtSWQgOiBpdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRnZXRSZW1vdmVkSXRlbXMgKHJldHVybkl0ZW1JZHM6IHRydWUpOiBJdGVtSWRbXTtcblx0Z2V0UmVtb3ZlZEl0ZW1zIChyZXR1cm5JdGVtSWRzPzogYm9vbGVhbik6IEl0ZW1FbnRyeVtdO1xuXHRnZXRSZW1vdmVkSXRlbXMgKHJldHVybkl0ZW1JZHM6IGJvb2xlYW4gPSBmYWxzZSkge1xuXHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmluaXRpYWw7XG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xuXHRcdGNvbnN0IHJlc3VsdDogQXJyYXk8SXRlbUVudHJ5IHwgSXRlbUlkPiA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaW5pdGlhbCkge1xuXHRcdFx0aWYgKG1vZGlmaWVkLmluZGV4T2YoaXRlbUVudHJ5KSA9PT0gLTEpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKHJldHVybkl0ZW1JZHMgPyBpdGVtRW50cnkuaXRlbUlkIDogaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0VXBkYXRlZEl0ZW1zICgpOiBJdGVtRW50cnlbXSB7XG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5W10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIG1vZGlmaWVkKSB7XG5cdFx0XHRpZiAoIWl0ZW1FbnRyeS5pc0xvY2FsKCkgJiYgaXRlbUVudHJ5Lmhhc0NoYW5nZXMoKSlcblx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0aGFzQWRkZWRJdGVtcyAoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuaXRlbXMubGVuZ3RoID4gdGhpcy5pbml0aWFsLmxlbmd0aDtcblx0fVxuXG5cdGhhc1JlbW92ZWRJdGVtcyAoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuaW5pdGlhbC5sZW5ndGggPiB0aGlzLml0ZW1zLmxlbmd0aDtcblx0fVxuXG5cdGhhc1VwZGF0ZWRJdGVtcyAoKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xuXG5cdFx0Zm9yIChjb25zdCBtb2RpZmllZEl0ZW1FbnRyeSBvZiBtb2RpZmllZCkge1xuXHRcdFx0aWYgKG1vZGlmaWVkSXRlbUVudHJ5Lmhhc0NoYW5nZXMoKSlcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Z2V0Q3VycmVudFJlc291cmNlPFQgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U+ICgpOiBUIHtcblx0XHRjb25zdCByZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcblxuXHRcdC8vIEB0cy1pZ25vcmUgcmV0dXJuIHR5cGUgaXMgYmVpbmcgd2VpcmQsIGJ1dCB5b3Ugc2hvdWxkIGp1c3QgYmUgYWJsZSB0byBwYXNzIGl0XG5cdFx0cmV0dXJuIHJlc291cmNlc1tyZXNvdXJjZXMubGVuZ3RoIC0gMV07XG5cdH1cblxuXHRjbGVhclJlc291cmNlcyAoaXNTdWJ0YWJDaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuXHRcdGNvbnN0IGl0ZW1FbnRyaWVzID0gdGhpcy5pdGVtczsgLy8gVE9ETzogaW5pdGlhbFxuXHRcdGNvbnN0IGN1cnJlbnRSZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcblx0XHRjb25zdCBuZXdSZXNvdXJjZXM6IENvbGxlY3Rpb25SZXNvdXJjZVtdID0gW107XG5cblx0XHQvLyB3ZSdsbCBhZGQgdGhlIGl0ZW0gcmVzb3VyY2VzIGJhY2sgaW4gbGF0ZXJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdGl0ZW1FbnRyeS5jbGVhclJlc291cmNlcygpO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2Ugb2YgY3VycmVudFJlc291cmNlcykge1xuXHRcdFx0aWYgKGNvbGxlY3Rpb25SZXNvdXJjZS5vcHRpb25zW2lzU3VidGFiQ2hhbmdlID8gJ2NsZWFyT25TdWJUYWJDaGFuZ2UnIDogJ2NsZWFyT25UYWJDaGFuZ2UnXSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdG5ld1Jlc291cmNlcy5wdXNoKGNvbGxlY3Rpb25SZXNvdXJjZSk7XG5cblx0XHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGNvbGxlY3Rpb25SZXNvdXJjZS5pdGVtcylcblx0XHRcdFx0aXRlbVJlc291cmNlLmVudHJ5LnJlc291cmNlcy5wdXNoKGl0ZW1SZXNvdXJjZSk7IC8vIHJlc291cmNlcyBzaG91bGQgYmUgZW1wdHkgYnkgbm93IDotKVxuXHRcdH1cblxuXHRcdHRoaXMucmVzb3VyY2VzID0gbmV3UmVzb3VyY2VzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBkZXNjcmlwdGlvblxuXHQgKiB0aGlzIGRvZXNuJ3QgcmV2ZXJ0IHVwZGF0ZXNcblx0ICovXG5cdHJldmVydENoYW5nZXMgKCk6IHZvaWQge1xuXHRcdC8vIHNhdmUgdGhlc2UgYmVmb3JlIHJlc2V0dGluZyB0aGUgaXRlbXMgcHJvcGVydHlcblx0XHRjb25zdCBhZGRlZEl0ZW1zID0gdGhpcy5nZXRBZGRlZEl0ZW1zKCk7XG5cdFx0Y29uc3QgcmVtb3ZlZEl0ZW1zID0gdGhpcy5nZXRSZW1vdmVkSXRlbXMoKTtcblxuXHRcdHRoaXMuaXRlbXMgPSB0aGlzLmluaXRpYWwuc2xpY2UoKTtcblxuXHRcdHRoaXMuaGFuZGxlQWRkZWRJdGVtQ2FsbGJhY2tzKFtdLCByZW1vdmVkSXRlbXMpO1xuXHRcdHRoaXMuaGFuZGxlUmVtb3ZlZEl0ZW1DYWxsYmFja3MoW10sIGFkZGVkSXRlbXMpO1xuXHR9XG5cblx0b25JdGVtc0NyZWF0ZWQgKGNvbnZlcnNpb25NYXA6IENvbnZlcnNpb25NYXApOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHRoaXMucmVzb3VyY2VzKSB7XG5cdFx0XHRyZXNvdXJjZS5yZWJ1aWxkTWFwKCk7XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJlc291cmNlLm9wdGlvbnMub25JdGVtc0NyZWF0ZWQoY29udmVyc2lvbk1hcCk7XG5cdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHR0aGlzLmZhY3RvcnkuZXhjZXB0aW9uSGFuZGxlcihlcnJvcik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBvbkFkZEluaXRpYWwgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSk6IHZvaWQge1xuXHRcdGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgdGhpcy5yZXNvdXJjZXMpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJlc291cmNlLm9wdGlvbnMub25BZGRJbml0aWFsKGl0ZW1FbnRyaWVzLCB0aGlzKTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdHRoaXMuZmFjdG9yeS5leGNlcHRpb25IYW5kbGVyKGVycm9yKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIG9uUmVtb3ZlSW5pdGlhbCAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdKTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiB0aGlzLnJlc291cmNlcykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmVzb3VyY2Uub3B0aW9ucy5vblJlbW92ZUluaXRpYWwoaXRlbUVudHJpZXMsIHRoaXMpO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0dGhpcy5mYWN0b3J5LmV4Y2VwdGlvbkhhbmRsZXIoZXJyb3IpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGdldFVwZGF0ZWRJdGVtQ29sdW1ucyAoY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCk6IHtbY29sdW1uSWQ6IHN0cmluZ106IENvbHVtbkluZm99IHtcblx0XHRjb25zdCBpdGVtQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5pdGVtO1xuXHRcdGNvbnN0IHJlc3VsdDoge1tjb2x1bW5JZDogc3RyaW5nXTogQ29sdW1uSW5mb30gPSB7fTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGl0ZW1Db2x1bW5zKSB7XG5cdFx0XHRpZiAoY29udmVyc2lvbk1hcFtjb2x1bW4uYXBpQ29sdW1uLml0ZW1UeXBlXSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRyZXN1bHRbY29sdW1uLmlkXSA9IGNvbHVtbjtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Y2xvbmUgKHBhcmVudDogRW50cnlQYXJlbnROdWxsLCBjb252ZXJzaW9uTWFwPzogSXRlbUlkQ29udmVyc2lvbk1hcCkge1xuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XG5cdFx0Y29uc3QgY2xvbmVkSXRlbUVudHJpZXMgPSBmYWN0b3J5Lml0ZW1FbnRyeVNlcnZpY2UuYmF0Y2hDbG9uZSh0aGlzLml0ZW1zLCBjb252ZXJzaW9uTWFwKTtcblxuXHRcdGZvciAoY29uc3QgY2xvbmVkSXRlbUVudHJ5IG9mIGNsb25lZEl0ZW1FbnRyaWVzKVxuXHRcdFx0Y2xvbmVkSXRlbUVudHJ5LnBhcmVudCA9IHBhcmVudDtcblxuXHRcdHJldHVybiBmYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdHRoaXMuaXRlbVR5cGUsXG5cdFx0XHRmYWN0b3J5LmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuY2xvbmVPcHRpb25zKHRoaXMub3B0aW9ucywgcGFyZW50KVxuXHRcdCkucmVzb2x2ZShcblx0XHRcdHtjb2x1bW5zOiB0aGlzLmNvbHVtbnMsIGluaXRpYWw6IGNsb25lZEl0ZW1FbnRyaWVzfVxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IGZpbHRlckFycmF5LCBMb2NhbENhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgQ29sbGVjdGlvblJlc291cmNlT3B0aW9ucywgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UsIExvY2FsVmlld1Jlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcCwgUHJvbWlzZUludGVyZmFjZSwgUXVlcnlDYWxsYmFjaywgUmVzcG9uc2VDb2x1bW5NYXAgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDb2xsZWN0aW9uUmVzb3VyY2U8VCBleHRlbmRzIEl0ZW1SZXNvdXJjZSA9IExvY2FsVmlld1Jlc291cmNlPiB7XG5cdGl0ZW1zOiBUW107XG5cdGl0ZW1JZE1hcDogSXRlbVJlc291cmNlSXRlbUlkTWFwPFQ+ID0ge307XG5cdGNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwO1xuXG5cdHByb3RlY3RlZCBjb25zdHJ1Y3RvciAoXG5cdFx0cHJvdGVjdGVkIGZhY3Rvcnk6IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHVibGljIGVudHJ5OiBDb2xsZWN0aW9uRW50cnksXG5cdFx0cHVibGljIG9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnMsXG5cdFx0cHVibGljIGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGVcblx0KSB7XG5cdFx0dGhpcy5jb2x1bW5zID0gZW50cnkuY29sdW1ucy5yZXNwb25zZTtcblx0XHR0aGlzLml0ZW1JZE1hcCA9IHt9O1xuXHRcdHRoaXMuaXRlbXMgPSBbXTtcblxuXHRcdGVudHJ5LnJlc291cmNlcy5wdXNoKHRoaXMpO1xuXG5cdFx0dGhpcy5hZGRJdGVtUmVzb3VyY2VzKGVudHJ5Lml0ZW1zKTtcblx0fVxuXG5cdGdldEl0ZW1CeUlkIChpdGVtSWQ6IG51bWJlcik6IFQge1xuXHRcdHJldHVybiB0aGlzLml0ZW1JZE1hcFtpdGVtSWRdO1xuXHR9XG5cblx0cmVidWlsZE1hcCAoKTogdm9pZCB7XG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgaXRlbUlkTWFwOiBJdGVtUmVzb3VyY2VJdGVtSWRNYXA8VD4gPSB7fTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpXG5cdFx0XHRpdGVtSWRNYXBbaXRlbVJlc291cmNlLmVudHJ5Lml0ZW1JZF0gPSBpdGVtUmVzb3VyY2U7XG5cblx0XHR0aGlzLml0ZW1JZE1hcCA9IGl0ZW1JZE1hcDtcblx0fVxuXG5cdGFkZEl0ZW1SZXNvdXJjZXMgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSk6IFRbXSB7IC8vIHNob3VsZCBiZSBmYXN0XG5cdFx0aWYgKGl0ZW1FbnRyaWVzLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiBbXTtcblxuXHRcdGNvbnN0IHJlc3VsdDogVFtdID0gW107XG5cdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblx0XHRjb25zdCBpdGVtcyA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgaXRlbUlkTWFwID0gdGhpcy5pdGVtSWRNYXA7XG5cdFx0Y29uc3QgY29uc3RydWN0b3IgPSB0aGlzLmZhY3RvcnkuaXRlbVJlc291cmNlRmFjdG9yeS5nZXRDb25zdHJ1Y3Rvcihcblx0XHRcdHtcblx0XHRcdFx0ZWRpdDogb3B0aW9ucy5lZGl0SXRlbXMsXG5cdFx0XHRcdG9uQ2hhbmdlOiBvcHRpb25zLm9uQ2hhbmdlLFxuXHRcdFx0XHRvbkRlYWN0aXZhdGU6IGl0ZW1FbnRyeSA9PiB0aGlzLmxvY2FsQ2FjaGUub25EZWFjdGl2YXRlSXRlbShpdGVtRW50cnkpXG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xuXG5cdFx0XHRsZXQgaXRlbVJlc291cmNlO1xuXG5cdFx0XHRpZiAoaXRlbUlkTWFwW2l0ZW1JZF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpdGVtUmVzb3VyY2UgPSBjb25zdHJ1Y3RvcihpdGVtRW50cnkpIGFzIFQ7XG5cdFx0XHRcdGl0ZW1zLnB1c2goaXRlbVJlc291cmNlKTtcblx0XHRcdFx0aXRlbUlkTWFwW2l0ZW1JZF0gPSBpdGVtUmVzb3VyY2U7XG5cdFx0XHR9IGVsc2Vcblx0XHRcdFx0aXRlbVJlc291cmNlID0gaXRlbUlkTWFwW2l0ZW1JZF07XG5cblx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1SZXNvdXJjZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gaXRlbUVudHJpZXNcblx0ICogQHJldHVybnMge0l0ZW1SZXNvdXJjZVtdfVxuXHQgKlxuXHQgKiBSZXR1cm5zIHRoZSBJdGVtcmVzb3VyY2VzIHRoYXQgd2hlcmUgcmVtb3ZlZCBDb2xsZWN0aW9uLlxuXHQgKiBGaWx0ZXJzIG9uIEl0ZW1SZXNvdXJjZS5lbnRyeSA9PT0gSXRlbUVudHJ5XG5cdCAqL1xuXHRyZW1vdmVJdGVtUmVzb3VyY2VzIChpdGVtRW50cmllczogSXRlbUVudHJ5W10pOiBUW10ge1xuXHRcdGNvbnN0IHJlc3VsdDogVFtdID0gW107XG5cblx0XHRmaWx0ZXJBcnJheShcblx0XHRcdHRoaXMuaXRlbXMsXG5cdFx0XHRpdGVtUmVzb3VyY2UgPT4ge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0XHRcdGlmIChpdGVtUmVzb3VyY2UuZW50cnkgPT09IGl0ZW1FbnRyeSkge1xuXHRcdFx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbVJlc291cmNlKTtcblx0XHRcdFx0XHRcdGRlbGV0ZSB0aGlzLml0ZW1JZE1hcFtpdGVtRW50cnkuaXRlbUlkXTtcblxuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Y2FsbE9uQWRkIChpdGVtUmVzb3VyY2VzOiBUW10pOiB2b2lkIHtcblx0XHR0cnkge1xuXHRcdFx0dGhpcy5vcHRpb25zLm9uQWRkKGl0ZW1SZXNvdXJjZXMsIHRoaXMpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHR0aGlzLmZhY3RvcnkuZXhjZXB0aW9uSGFuZGxlcihlcnJvcik7XG5cdFx0fVxuXHR9XG5cblx0Y2FsbE9uUmVtb3ZlIChpdGVtUmVzb3VyY2VzOiBUW10pOiB2b2lkIHtcblx0XHR0cnkge1xuXHRcdFx0dGhpcy5vcHRpb25zLm9uUmVtb3ZlKGl0ZW1SZXNvdXJjZXMsIHRoaXMpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHR0aGlzLmZhY3RvcnkuZXhjZXB0aW9uSGFuZGxlcihlcnJvcik7XG5cdFx0fVxuXHR9XG5cblx0Zm9yRWFjaCAoY2FsbGJhY2s6IChpdGVtUmVzb3VyY2U6IFQpID0+IHZvaWQpOiB2b2lkIHtcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcblxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpXG5cdFx0XHRjYWxsYmFjayhpdGVtUmVzb3VyY2UpO1xuXHR9XG5cblx0ZmlsdGVyIChjYWxsYmFjazogKGl0ZW1SZXNvdXJjZTogVCkgPT4gYm9vbGVhbik6IFRbXSB7XG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgcmVzdWx0OiBUW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpIHtcblx0XHRcdGlmIChjYWxsYmFjayhpdGVtUmVzb3VyY2UpKVxuXHRcdFx0XHRyZXN1bHQucHVzaChpdGVtUmVzb3VyY2UpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmaXJzdCAoY2FsbGJhY2s6IChpdGVtUmVzb3VyY2U6IFQpID0+IGJvb2xlYW4pOiBUIHwgbnVsbCB7XG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKSB7XG5cdFx0XHRpZiAoY2FsbGJhY2soaXRlbVJlc291cmNlKSlcblx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdHNvbWUgKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBUKSA9PiBib29sZWFuKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZmlyc3QoY2FsbGJhY2spICE9PSBudWxsO1xuXHR9XG5cblx0Z3JvdXBCeSAoYXJndW1lbnQ6IHN0cmluZyB8ICgoaXRlbVJlc291cmNlOiBUKSA9PiBzdHJpbmcgfCBudWxsKSk6IHtba2V5OiBzdHJpbmddOiBUW119IHtcblx0XHRjb25zdCBpdGVtc1Jlc291cmNlcyA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgcmVzdWx0OiB7W2tleTogc3RyaW5nXTogVFtdfSA9IHt9O1xuXG5cdFx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycpIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1zUmVzb3VyY2VzKSB7XG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gaXRlbVJlc291cmNlLmZpZWxkc1thcmd1bWVudF07XG5cblx0XHRcdFx0aWYgKHJlc3VsdFt2YWx1ZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRyZXN1bHRbdmFsdWVdID0gW107XG5cblx0XHRcdFx0cmVzdWx0W3ZhbHVlXS5wdXNoKGl0ZW1SZXNvdXJjZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbXNSZXNvdXJjZXMpIHtcblx0XHRcdFx0Y29uc3QgdmFsdWUgPSBhcmd1bWVudChpdGVtUmVzb3VyY2UpO1xuXG5cdFx0XHRcdGlmICh2YWx1ZSA9PT0gbnVsbClcblx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRpZiAocmVzdWx0W3ZhbHVlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdHJlc3VsdFt2YWx1ZV0gPSBbXTtcblxuXHRcdFx0XHRyZXN1bHRbdmFsdWVdLnB1c2goaXRlbVJlc291cmNlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0bWFwPFU+IChhcmd1bWVudDogc3RyaW5nIHwgKChpdGVtUmVzb3VyY2U6IFQpID0+IFUpKTogVVtdIHtcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcblx0XHRjb25zdCBsZW5ndGggPSBpdGVtUmVzb3VyY2VzLmxlbmd0aDtcblx0XHRjb25zdCByZXN1bHQgPSBuZXcgQXJyYXkobGVuZ3RoKTtcblxuXHRcdGlmICh0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuXHRcdFx0XHRyZXN1bHRbaV0gPSBpdGVtUmVzb3VyY2VzW2ldLmZpZWxkc1thcmd1bWVudF07XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcblx0XHRcdFx0cmVzdWx0W2ldID0gYXJndW1lbnQoaXRlbVJlc291cmNlc1tpXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHJlZHVjZTxVPiAoY2FsbGJhY2s6IChpdGVtUmVzb3VyY2U6IFQsIHZhbHVlOiBVKSA9PiBVLCB2YWx1ZTogVSk6IFUge1xuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcylcblx0XHRcdHZhbHVlID0gY2FsbGJhY2soaXRlbVJlc291cmNlLCB2YWx1ZSk7XG5cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblxuXHRleHRlbmQgKHF1ZXJ5Q2FsbGJhY2s6IFF1ZXJ5Q2FsbGJhY2ssIHJldHVybkFsbEl0ZW1zOiBib29sZWFuID0gZmFsc2UsIGNhbGxPbkFkZD86IGJvb2xlYW4pOiBQcm9taXNlSW50ZXJmYWNlPFRbXT4ge1xuXHRcdHJldHVybiB0aGlzLmVudHJ5LmV4dGVuZChxdWVyeUNhbGxiYWNrLCB0aGlzLCBjYWxsT25BZGQsIHRydWUpXG5cdFx0XHQudGhlbihcblx0XHRcdFx0aXRlbVJlc291cmNlcyA9PiByZXR1cm5BbGxJdGVtcyA/IHRoaXMuaXRlbXMgOiBpdGVtUmVzb3VyY2VzXG5cdFx0XHQpO1xuXHR9XG5cblx0ZGVhY3RpdmF0ZSAoKTogdm9pZCB7XG5cdFx0dGhpcy5sb2NhbENhY2hlLmNsZWFyQ29sbGVjdGlvbih0aGlzKTtcblx0fVxuXG5cdGNsZWFyUmVzb3VyY2UgKCk6IHZvaWQge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZXMgPSB0aGlzLmVudHJ5LnJlc291cmNlcztcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcblx0XHRjb25zdCBpbmRleCA9IGNvbGxlY3Rpb25SZXNvdXJjZXMuaW5kZXhPZih0aGlzKTtcblxuXHRcdGlmIChpbmRleCAhPT0gLTEpXG5cdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2VzLnNwbGljZShpbmRleCwgMSk7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKVxuXHRcdFx0aXRlbVJlc291cmNlLmNsZWFyUmVzb3VyY2UoKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgTG9jYWxDYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQge1xuXHRDb2xsZWN0aW9uRW50cnksXG5cdENvbGxlY3Rpb25SZXNvdXJjZSxcblx0Q29sbGVjdGlvblJlc291cmNlT3B0aW9ucyxcblx0SXRlbVJlc291cmNlLCBMb2NhbFZpZXdSZXNvdXJjZSxcbn0gZnJvbSAnLi4vbW9kZWxzJztcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8VCBleHRlbmRzIEl0ZW1SZXNvdXJjZSA9IExvY2FsVmlld1Jlc291cmNlPiBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZSA8VD4ge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0Y29sbGVjdGlvblJlc291cmNlRmFjdG9yeTogQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zLFxuXHRcdGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGVcblx0KSB7XG5cdFx0c3VwZXIoY29sbGVjdGlvblJlc291cmNlRmFjdG9yeSwgY29sbGVjdGlvbkVudHJ5LCBvcHRpb25zLCBsb2NhbENhY2hlKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgTG9jYWxDYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQge1xuXHRDb2xsZWN0aW9uRW50cnksXG5cdENvbGxlY3Rpb25SZXNvdXJjZSxcblx0Q29sbGVjdGlvblJlc291cmNlT3B0aW9ucyxcblx0SXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UsIExvY2FsVmlld1Jlc291cmNlXG59IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBGaWVsZE1hcCwgSXRlbUlkLCBJdGVtSWRDb252ZXJzaW9uTWFwLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkVkaXRSZXNvdXJjZSA8VCBleHRlbmRzIEl0ZW1SZXNvdXJjZSA9IExvY2FsVmlld1Jlc291cmNlPiBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZSA8VD4ge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0ZmFjdG9yeTogQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zLFxuXHRcdGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGVcblx0KSB7XG5cdFx0c3VwZXIoZmFjdG9yeSwgY29sbGVjdGlvbkVudHJ5LCBvcHRpb25zLCBsb2NhbENhY2hlKTtcblx0fVxuXG5cdHNhdmUgKCk6IFByb21pc2VJbnRlcmZhY2U8SXRlbUlkQ29udmVyc2lvbk1hcD4ge1xuXHRcdGlmICghdGhpcy5vcHRpb25zLmVuYWJsZVNhdmUpXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U6IFNhdmluZyBkaXNhYmxlZCcpO1xuXG5cdFx0Y29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTtcblx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSB0aGlzLmVudHJ5O1xuXHRcdGNvbnN0IHBhcmVudCA9IGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQ7XG5cblx0XHRpZiAocGFyZW50ICE9PSBudWxsICYmIGZhY3Rvcnkua2V5U2VydmljZS5pc0xvY2FsSWQocGFyZW50Lml0ZW1JZCkpXG5cdFx0XHRyZXR1cm4gZmFjdG9yeS5wcm9taXNlU2VydmljZS53aGVuKCk7XG5cblx0XHRyZXR1cm4gZmFjdG9yeS5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeS5jb25zdHJ1Y3QoKS5leGVjdXRlKFtdLCBbY29sbGVjdGlvbkVudHJ5XSk7XG5cdH1cblxuXHQvLyBUT0RPOiB1c2UgY2FsbGJhY2sgZnVuY3Rpb25cblx0bW92ZUl0ZW1zIChpZEFycmF5OiBJdGVtSWRbXSwgZGVzdGluYXRpb246IENvbGxlY3Rpb25SZXNvdXJjZSwgZW5hYmxlQ2FsbGJhY2tzPzogYm9vbGVhbik6IFRbXSB7XG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gdGhpcy5lbnRyeTtcblx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXG5cdFx0aWYgKG9wdGlvbnMuZW5hYmxlU2F2ZSB8fCBvcHRpb25zLm1vZEluc3RhbnQpXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U6IENhbm5vdCBtb3ZlIGl0ZW1zOiBzYXZpbmcgZW5hYmxlZCcpO1xuXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZSAhPT0gZGVzdGluYXRpb24uZW50cnkuaXRlbVR5cGUpXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U6IENhbm5vdCBtb3ZlIGl0ZW1zOiBpdGVtVHlwZSBtaXNtYXRjaCcpO1xuXG5cdFx0Y29uc3QgcmVtb3ZlZEl0ZW1SZXNvdXJjZXMgPSBjb2xsZWN0aW9uRW50cnkucmVtb3ZlSXRlbXMoaWRBcnJheSwgdGhpcywgZmFsc2UsIGVuYWJsZUNhbGxiYWNrcyk7XG5cdFx0Y29uc3QgaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XG5cblx0XHRpZiAocmVtb3ZlZEl0ZW1SZXNvdXJjZXMgIT09IG51bGwpIHtcblx0XHRcdGZvciAoY29uc3QgcmVtb3ZlZEl0ZW1SZXNvdXJjZSBvZiByZW1vdmVkSXRlbVJlc291cmNlcylcblx0XHRcdFx0aXRlbUVudHJpZXMucHVzaChyZW1vdmVkSXRlbVJlc291cmNlLmVudHJ5KTtcblxuXHRcdFx0ZGVzdGluYXRpb24uZW50cnkuYWRkSXRlbXMoaXRlbUVudHJpZXMsIGRlc3RpbmF0aW9uLCBmYWxzZSwgZW5hYmxlQ2FsbGJhY2tzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVtb3ZlZEl0ZW1SZXNvdXJjZXM7XG5cdH1cblxuXHRyZW1vdmVJdGVtcyAoaWRBcnJheTogSXRlbUlkW10sIGNhbGxPblJlbW92ZTogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlSW50ZXJmYWNlPFRbXT4ge1xuXHRcdC8vIGNhbGxPblJlbW92ZSBzaG91bGQgYmUgZmFsc2UgaGVyZSB0byBwcmV2ZW50IG9uUmVtb3ZlIGZyb20gYmVpbmcgY2FsbGVkIHR3aWNlXG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuZW50cnkucmVtb3ZlSXRlbXMoaWRBcnJheSwgdGhpcywgZmFsc2UsIGZhbHNlKTtcblxuXHRcdGlmIChpdGVtUmVzb3VyY2VzID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIHRoaXMuZmFjdG9yeS5wcm9taXNlU2VydmljZS53aGVuKFtdKTtcblxuXHRcdGlmICh0aGlzLm9wdGlvbnMubW9kSW5zdGFudClcblx0XHRcdHJldHVybiB0aGlzLnNhdmUoKS50aGVuKFxuXHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0aWYgKGNhbGxPblJlbW92ZSlcblx0XHRcdFx0XHRcdHRoaXMuY2FsbE9uUmVtb3ZlKGl0ZW1SZXNvdXJjZXMpO1xuXG5cdFx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXM7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cblx0XHRpZiAoY2FsbE9uUmVtb3ZlKVxuXHRcdFx0dGhpcy5jYWxsT25SZW1vdmUoaXRlbVJlc291cmNlcyk7XG5cblx0XHRyZXR1cm4gdGhpcy5mYWN0b3J5LnByb21pc2VTZXJ2aWNlLndoZW4oaXRlbVJlc291cmNlcyk7XG5cdH1cblxuXHRyZW1vdmVJdGVtIChpdGVtSWQ6IEl0ZW1JZCwgY2FsbE9uUmVtb3ZlPzogYm9vbGVhbik6IFByb21pc2VJbnRlcmZhY2U8VD4ge1xuXHRcdHJldHVybiB0aGlzLnJlbW92ZUl0ZW1zKFtpdGVtSWRdLCBjYWxsT25SZW1vdmUpLnRoZW4oXG5cdFx0XHRpdGVtUmVzb3VyY2VzID0+IHtcblx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXNbMF07XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5mYWN0b3J5LmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0YWRkSXRlbXMgKHZhbHVlc0FycmF5OiBGaWVsZE1hcFtdLCBjYWxsT25BZGQ6IGJvb2xlYW4gPSB0cnVlLCBjYWxsT25BY3RpdmF0ZT86IGJvb2xlYW4pOiBQcm9taXNlSW50ZXJmYWNlPFRbXT4ge1xuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XG5cdFx0Y29uc3QgbW9kSW5zdGFudCA9IHRoaXMub3B0aW9ucy5tb2RJbnN0YW50O1xuXG5cdFx0cmV0dXJuIHRoaXMuZW50cnkuY3JlYXRlSXRlbXModmFsdWVzQXJyYXkpLnRoZW4oXG5cdFx0XHRpdGVtRW50cmllcyA9PiB7XG5cdFx0XHRcdGlmIChtb2RJbnN0YW50KVxuXHRcdFx0XHRcdHJldHVybiBpdGVtRW50cmllcztcblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5lbnRyeS5yZXNvbHZlRGVyaXZlZFZhbHVlcyhpdGVtRW50cmllcywgdGhpcy5sb2NhbENhY2hlLml0ZW1zKTtcblx0XHRcdH1cblx0XHQpLnRoZW4oXG5cdFx0XHRpdGVtRW50cmllcyA9PiB7XG5cdFx0XHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLmVudHJ5LmFkZEl0ZW1zKFxuXHRcdFx0XHRcdGl0ZW1FbnRyaWVzLFxuXHRcdFx0XHRcdHRoaXMsXG5cdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0Y2FsbE9uQWN0aXZhdGVcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRpZiAoaXRlbVJlc291cmNlcyA9PT0gbnVsbClcblx0XHRcdFx0XHRyZXR1cm4gW107XG5cblx0XHRcdFx0aWYgKG1vZEluc3RhbnQpIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5zYXZlKCkudGhlbihcblx0XHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKGNhbGxPbkFkZClcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmNhbGxPbkFkZChpdGVtUmVzb3VyY2VzKTtcblxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gaXRlbVJlc291cmNlcztcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRmYWN0b3J5LmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGNhbGxPbkFkZClcblx0XHRcdFx0XHR0aGlzLmNhbGxPbkFkZChpdGVtUmVzb3VyY2VzKTtcblxuXHRcdFx0XHRyZXR1cm4gaXRlbVJlc291cmNlcztcblx0XHRcdH0sXG5cdFx0XHRmYWN0b3J5LmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0YWRkSXRlbSAodmFsdWVzOiBGaWVsZE1hcCwgY2FsbE9uQWRkPzogYm9vbGVhbiwgY2FsbE9uQWN0aXZhdGU/OiBib29sZWFuKTogUHJvbWlzZUludGVyZmFjZTxUPiB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkSXRlbXMoW3ZhbHVlc10sIGNhbGxPbkFkZCwgY2FsbE9uQWN0aXZhdGUpLnRoZW4oXG5cdFx0XHRpdGVtUmVzb3VyY2VzID0+IHtcblx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXNbMF07XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5mYWN0b3J5LmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Y2xlYXIgKGVuYWJsZUNhbGxiYWNrczogYm9vbGVhbikge1xuXHRcdHJldHVybiB0aGlzLmVudHJ5LmNsZWFyKHRoaXMsIGZhbHNlLCBlbmFibGVDYWxsYmFja3MpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5TZXQgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IFRlbXBsYXRlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBBcGlSZXNwb25zZSwgRmllbGRNYXAsIEl0ZW1UeXBlLCBSZXNwb25zZUNvbHVtbk1hcCB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlIHtcblx0ZmllbGRzOiBGaWVsZE1hcDtcblx0cmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcDtcblx0Y29sdW1uczogQ29sdW1uU2V0OyAvLyBUT0RPOiByZW5hbWUgdG8gY29sdW1uU2V0XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdGZhY3Rvcnk6IFRlbXBsYXRlRmFjdG9yeSxcblx0XHRwdWJsaWMgaXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHB1YmxpYyByZXNwb25zZTogQXBpUmVzcG9uc2UsXG5cdFx0YWRkaXRpb25hbENvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwXG5cdCkge1xuXHRcdHRoaXMuZmllbGRzID0gcmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIHJlc3BvbnNlLmxpbmtzW2l0ZW1UeXBlXVswXSk7XG5cblx0XHR0aGlzLnJlc3BvbnNlQ29sdW1ucyA9IGZhY3RvcnkuY29sdW1uVXRpbC5tZXJnZVJlc3BvbnNlQ29sdW1ucyhyZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKSwgYWRkaXRpb25hbENvbHVtbnMpLm1lcmdlZDtcblxuXHRcdHRoaXMuY29sdW1ucyA9IGZhY3RvcnkuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHRydWUsIHRoaXMucmVzcG9uc2VDb2x1bW5zKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2VPcHRpb25zLCBWaWV3UmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xuXG5leHBvcnQgY2xhc3MgUmVtb3RlVmlld1Jlc291cmNlIGV4dGVuZHMgVmlld1Jlc291cmNlIHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdGVudHJ5OiBJdGVtRW50cnksXG5cdFx0b3B0aW9uczogSXRlbVJlc291cmNlT3B0aW9ucyxcblx0XHRpc05ldz86IGJvb2xlYW5cblx0KSB7XG5cdFx0c3VwZXIoZW50cnksIG9wdGlvbnMsIGlzTmV3KTtcblxuXHRcdHRoaXMuZmllbGRzID0gZW50cnkuaW5pdGlhbDtcblx0fVxufVxuIiwiaW1wb3J0IHsgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2VPcHRpb25zLCBWaWV3UmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xuXG5leHBvcnQgY2xhc3MgTG9jYWxWaWV3UmVzb3VyY2UgZXh0ZW5kcyBWaWV3UmVzb3VyY2Uge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0ZW50cnk6IEl0ZW1FbnRyeSxcblx0XHRvcHRpb25zOiBJdGVtUmVzb3VyY2VPcHRpb25zLFxuXHRcdGlzTmV3PzogYm9vbGVhblxuXHQpIHtcblx0XHRzdXBlcihlbnRyeSwgb3B0aW9ucywgaXNOZXcpO1xuXG5cdFx0dGhpcy5maWVsZHMgPSBlbnRyeS5tb2RpZmllZCA9PT0gdW5kZWZpbmVkID8gZW50cnkuaW5pdGlhbCA6IGVudHJ5Lm1vZGlmaWVkO1xuXHR9XG59XG4iLCIvLyBzaG91bGQgYmUgb3JkZXJlZCBieSBkZXBlbmRlbmN5IVxuZXhwb3J0ICogZnJvbSAnLi9JdGVtRW50cnlPcHRpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vSXRlbVJlc291cmNlT3B0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL0l0ZW1FbnRyeSc7XG5leHBvcnQgKiBmcm9tICcuL0l0ZW1SZXNvdXJjZSc7XG5leHBvcnQgKiBmcm9tICcuL1ZpZXdSZXNvdXJjZSc7XG5leHBvcnQgKiBmcm9tICcuL0VkaXRSZXNvdXJjZSc7XG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25FbnRyeU9wdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkVudHJ5JztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvblJlc291cmNlJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvblZpZXdSZXNvdXJjZSc7XG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25FZGl0UmVzb3VyY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9UZW1wbGF0ZSc7XG5leHBvcnQgKiBmcm9tICcuL1JlbW90ZVZpZXdSZXNvdXJjZSc7XG5leHBvcnQgKiBmcm9tICcuL0xvY2FsVmlld1Jlc291cmNlJztcbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG5pbXBvcnQgeyBRdWVyeVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IFF1ZXJ5UGFyc2VyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnlPcHRpb25zLCBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2UsIENvbGxlY3Rpb25RdWVyeSwgRW50cnlQYXJlbnROdWxsLCBJdGVtSWQgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlIHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcXVlcnlQYXJzZXJGYWN0b3J5OiBRdWVyeVBhcnNlckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZVxuXHQpIHtcblxuXHR9XG5cblx0Ly8gbm8gbmVlZCB0byB3b3JyeSBhYm91dCB0aGUgY29sdW1ucyBwcm9wZXJ0eSwgaXQgd2lsbCBiZSByZXBsYWNlZCBpbiB3aGVuIGNvbHVtbnMgYXJlIGV4cGFuZGVkXG5cdGNsb25lT3B0aW9ucyAob3B0aW9uczogQ29sbGVjdGlvbkVudHJ5T3B0aW9ucywgcGFyZW50OiBFbnRyeVBhcmVudE51bGwpIHtcblx0XHRjb25zdCByZXN1bHQgPSBuZXcgQ29sbGVjdGlvbkVudHJ5T3B0aW9ucyhvcHRpb25zKTsgLy8gZG9lcyBhIHNoYWxsb3cgY29weVxuXG5cdFx0cmVzdWx0LnF1ZXJ5UGFyYW1zID0gdGhpcy5jbG9uZVF1ZXJ5UGFyYW1zKG9wdGlvbnMucXVlcnlQYXJhbXMpO1xuXHRcdHJlc3VsdC5wYXJlbnQgPSBwYXJlbnQ7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cHJvY2Vzc09wdGlvbnMgKG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlKTogQ29sbGVjdGlvbkVudHJ5T3B0aW9ucyB7XG5cdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uRW50cnlPcHRpb25zKG9wdGlvbnMpO1xuXHR9XG5cblx0Y2xvbmVRdWVyeVBhcmFtczxUIGV4dGVuZHMgb2JqZWN0PiAocGFyYW1ldGVyczogVCk6IFQge1xuXHRcdGNvbnN0IHJlc3VsdDogYW55ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGtleSBpbiBwYXJhbWV0ZXJzKSB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IHBhcmFtZXRlcnNba2V5XTtcblx0XHRcdGxldCBjbG9uZTtcblxuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKVxuXHRcdFx0XHRjbG9uZSA9IHZhbHVlLnNsaWNlKCk7IC8vIHdlJ3JlIG9ubHkgdXNpbmcgcHJpbWl0aXZlIGFycmF5c1xuXHRcdFx0ZWxzZSBpZiAobW9tZW50LmlzTW9tZW50KHZhbHVlKSlcblx0XHRcdFx0Y2xvbmUgPSB2YWx1ZS5jbG9uZSgpO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRjbG9uZSA9IHZhbHVlO1xuXG5cdFx0XHRyZXN1bHRba2V5XSA9IGNsb25lO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRjcmVhdGVRdWVyeSAob3B0aW9uczogQ29sbGVjdGlvbkVudHJ5T3B0aW9ucyk6IENvbGxlY3Rpb25RdWVyeSB7XG5cdFx0Y29uc3QgcGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XG5cblx0XHRsZXQgcXVlcnk7XG5cblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxuXHRcdFx0cXVlcnkgPSBvcHRpb25zLnF1ZXJ5O1xuXHRcdGVsc2Uge1xuXHRcdFx0Y29uc3QgbGlua2VkVG9RdWVyeSA9IHtsaW5rZWRUbzogcGFyZW50Lml0ZW1UeXBlLCBxdWVyeToge2lkOiAnJnBhcmVudElkJ319O1xuXHRcdFx0b3B0aW9ucy5xdWVyeVBhcmFtcy5wYXJlbnRJZCA9IHBhcmVudC5pdGVtSWQ7XG5cblx0XHRcdHF1ZXJ5ID0gb3B0aW9ucy5xdWVyeSA9PT0gbnVsbCA/XG5cdFx0XHRcdGxpbmtlZFRvUXVlcnkgOlxuXHRcdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5hZGRBbmRDb25kaXRpb24ob3B0aW9ucy5xdWVyeSwgbGlua2VkVG9RdWVyeSk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcGFyc2VkUXVlcnkgPSB0aGlzLnF1ZXJ5UGFyc2VyRmFjdG9yeS5jb25zdHJ1Y3QocXVlcnksIG9wdGlvbnMucXVlcnlQYXJhbXMpLnBhcnNlKCk7XG5cblx0XHRyZXR1cm4ge29iamVjdDogcGFyc2VkUXVlcnlbMF0sIHN0cmluZzogcGFyc2VkUXVlcnlbMV19O1xuXHR9XG5cblx0Z2V0SWRBcnJheSAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCBhY2N1bXVsYXRvcjogSXRlbUlkW10gPSBbXSk6IEl0ZW1JZFtdIHtcblx0XHRpZiAoYWNjdW11bGF0b3IgPT09IHVuZGVmaW5lZClcblx0XHRcdGFjY3VtdWxhdG9yID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdGFjY3VtdWxhdG9yLnB1c2goaXRlbUVudHJ5Lml0ZW1JZCk7XG5cblx0XHRyZXR1cm4gYWNjdW11bGF0b3I7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtJdGVtRW50cnlbXX0gaXRlbUVudHJpZXNcblx0ICogQHBhcmFtIHsoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGJvb2xlYW59IGNhbGxiYWNrXG5cdCAqIEByZXR1cm5zIHtJdGVtRW50cnlbXX1cblx0ICpcblx0ICogZmlsdGVyIGFuIGFycmF5IGFjY29yZGluZyB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uIFJldHVybiB0aGUgZW50cmllcyB0aGF0IGZhaWxlZCB0aGUgY29uZGl0aW9uXG5cdCAqIFJlcGxhY2UgdGhlIGdpdmVuIGFycmF5IHdpdGggdGhlIGVudHJpZXMgdGhhdCBkaWRuJ3QgZmFpbCB0aGUgY29uZGl0aW9uLlxuXHQgKi9cblx0ZmlsdGVyQXJyYXkgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgY2FsbGJhY2s6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gYm9vbGVhbik6IEl0ZW1FbnRyeVtdIHtcblx0XHRjb25zdCBmaWx0ZXJlZEVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XG5cdFx0Y29uc3QgcmVtb3ZlZEVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdChjYWxsYmFjayhpdGVtRW50cnkpID8gZmlsdGVyZWRFbnRyaWVzIDogcmVtb3ZlZEVudHJpZXMpLnB1c2goaXRlbUVudHJ5KTtcblxuXHRcdGlmIChyZW1vdmVkRW50cmllcy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gcmVtb3ZlZEVudHJpZXM7XG5cblx0XHRpdGVtRW50cmllcy5sZW5ndGggPSBmaWx0ZXJlZEVudHJpZXMubGVuZ3RoO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtRW50cmllcy5sZW5ndGg7IGkrKylcblx0XHRcdGl0ZW1FbnRyaWVzW2ldID0gZmlsdGVyZWRFbnRyaWVzW2ldO1xuXG5cdFx0cmV0dXJuIHJlbW92ZWRFbnRyaWVzO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uRW50cnlPcHRpb25zLCBDb2xsZWN0aW9uVmlld1Jlc291cmNlLCBpZGVudGl0eSwgaXNGdW5jdGlvbiwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uLyc7XG5pbXBvcnQge1xuXHRCYXRjaFN0YXR1cyxcblx0Q29sbGVjdGlvbkNhY2hlLFxuXHRDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRDb2xsZWN0aW9uTWF0Y2hlcixcblx0Q29sdW1uRXhwYW5zaW9uLFxuXHRDb2x1bW5IYW5kbGVyLFxuXHRDb2x1bW5TZXQsXG5cdEl0ZW1DYWNoZSxcblx0SXRlbUhhbmRsZXIsXG5cdEl0ZW1SZXF1ZXN0U2VydmljZSxcblx0S2V5U2VydmljZSxcblx0UXVlcnlTZXJ2aWNlXG59IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgRU5UUllfU1RBVFVTIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7XG5cdEJhdGNoU3RhdHVzRmFjdG9yeSxcblx0Q29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0Q29sbGVjdGlvbkVudHJ5RmFjdG9yeSxcblx0Q29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxuXHRDb2x1bW5TZXRGYWN0b3J5LFxuXHRRdWVyeVBhcnNlckZhY3Rvcnlcbn0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgQ29sbGVjdGlvblJlc291cmNlLCBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtcblx0QXBpUmVxdWVzdENvbHVtbixcblx0Q29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXAsXG5cdENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwLFxuXHRFbnRyeVN0YXR1cyxcblx0SXRlbUVudHJ5UGFyZW50SWRNYXAsXG5cdEl0ZW1JZCxcblx0SXRlbVJlc291cmNlSXRlbUlkTWFwLFxuXHRJdGVtVHlwZSxcblx0UXVlcnlDYWxsYmFja1xufSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IGhhc1Byb3BlcnRpZXMgfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkhhbmRsZXIge1xuXHRlbnRyaWVzOiBDb2xsZWN0aW9uQ2FjaGU7XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYmF0Y2hTdGF0dXNGYWN0b3J5OiBCYXRjaFN0YXR1c0ZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkVudHJ5RmFjdG9yeTogQ29sbGVjdGlvbkVudHJ5RmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25FbnRyeVNlcnZpY2U6IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnk6IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBpdGVtUmVxdWVzdFNlcnZpY2U6IEl0ZW1SZXF1ZXN0U2VydmljZSxcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBxdWVyeVBhcnNlckZhY3Rvcnk6IFF1ZXJ5UGFyc2VyRmFjdG9yeSxcblx0XHRwcml2YXRlIHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlXG5cdCkge1xuXHRcdHRoaXMuZW50cmllcyA9IHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeS5jb25zdHJ1Y3QoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAZGVwcmVjYXRlZCwgdXNlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeVxuXHQgKi9cblx0cmVtb3ZlRnJvbUFuZEFkZFRvQ29sbGVjdGlvbnMgKGNvbGxlY3Rpb25NYXA6IGFueSwgdXBkYXRlSW5pdGlhbD86IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0XHRjb25zdCBlbnRyeSA9IGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXTtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb246IENvbGxlY3Rpb25FbnRyeSA9IGVudHJ5LmNvbGxlY3Rpb247XG5cblx0XHRcdGNvbGxlY3Rpb24ucmVtb3ZlSXRlbXMoZW50cnkubm90Zml0dGluZywgbnVsbCwgdHJ1ZSk7XG5cdFx0XHRjb2xsZWN0aW9uLmFkZEl0ZW1zKGVudHJ5LmZpdHRpbmcsIG51bGwsIHRydWUpOyAvLyBkb2Vzbid0IGRvIGFueXRoaW5nIHdpdGggaW5pdGlhbFxuXG5cdFx0XHRpZiAoZW50cnkubWF5YmUubGVuZ3RoID4gMClcblx0XHRcdFx0Y29sbGVjdGlvbi5leHRlbmQoaWRlbnRpdHksIG51bGwsIHRydWUsIHVwZGF0ZUluaXRpYWwpO1xuXHRcdH1cblx0fVxuXG5cdGdldENvbGxlY3Rpb25NYXRjaGVyICgpOiBDb2xsZWN0aW9uTWF0Y2hlciB7XG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdChbdGhpcy5lbnRyaWVzXSwgdHJ1ZSwgdHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogQGRlcHJlY2F0ZWQsIHVzZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnlcblx0ICovXG5cdHJlbW92ZUZyb21Db2xsZWN0aW9uczxUIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlID0gQ29sbGVjdGlvblZpZXdSZXNvdXJjZT4gKFxuXHRcdGNvbGxlY3Rpb25NYXAsXG5cdFx0dXBkYXRlSW5pdGlhbD86IGJvb2xlYW4sXG5cdFx0cmVzdWx0UmVzb3VyY2U6IFQgfCBudWxsID0gbnVsbFxuXHQpOiBUWydpdGVtcyddIHwgbnVsbCB7XG5cdFx0bGV0IHJlc3VsdDtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIGNvbGxlY3Rpb25NYXApIHtcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gY29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdO1xuXHRcdFx0Y29uc3QgZml0dGluZyA9IG1hcEVudHJ5LmZpdHRpbmc7XG5cdFx0XHRjb25zdCBtYXliZSA9IG1hcEVudHJ5Lm1heWJlO1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkgPSBtYXBFbnRyeS5jb2xsZWN0aW9uO1xuXHRcdFx0Y29uc3QgaWRBcnJheTogSXRlbUlkW10gPSBbXTtcblxuXHRcdFx0Zm9yIChjb25zdCBmaXR0aW5nSXRlbSBvZiBmaXR0aW5nKVxuXHRcdFx0XHRpZEFycmF5LnB1c2goZml0dGluZ0l0ZW0uaXRlbUlkKTtcblxuXHRcdFx0Zm9yIChjb25zdCBtYXliZUl0ZW0gb2YgbWF5YmUpXG5cdFx0XHRcdGlkQXJyYXkucHVzaChtYXliZUl0ZW0pO1xuXG5cdFx0XHRpZiAocmVzdWx0UmVzb3VyY2UgIT09IG51bGwgJiYgY29sbGVjdGlvbkVudHJ5ID09PSByZXN1bHRSZXNvdXJjZS5lbnRyeSlcblx0XHRcdFx0cmVzdWx0ID0gY29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGlkQXJyYXksIHJlc3VsdFJlc291cmNlLCB1cGRhdGVJbml0aWFsKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGlkQXJyYXksIG51bGwsIHVwZGF0ZUluaXRpYWwpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvLyBUT0RPOiBtYXliZSwgYm9vbGVhbiBpbnN0ZWFkIG9mIG1lc3NhZ2Vcblx0LyoqXG5cdCAqIEBkZXByZWNhdGVkLCB1c2UgY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5XG5cdCAqL1xuXHRhZGRUb0NvbGxlY3Rpb25zPFQgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2UgPSBDb2xsZWN0aW9uVmlld1Jlc291cmNlPiAoXG5cdFx0Y29sbGVjdGlvbk1hcCxcblx0XHR1cGRhdGVJbml0aWFsOiBib29sZWFuLFxuXHRcdHJlc3VsdFJlc291cmNlOiBUIHwgbnVsbCA9IG51bGxcblx0KTogVFsnaXRlbXMnXSB7XG5cdFx0bGV0IHJlc3VsdDtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIGNvbGxlY3Rpb25NYXApIHtcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gY29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdO1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gbWFwRW50cnkuY29sbGVjdGlvbjtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0RlZmVycmVkKCkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAocmVzdWx0UmVzb3VyY2UgIT09IG51bGwgJiYgY29sbGVjdGlvbkVudHJ5ID09PSByZXN1bHRSZXNvdXJjZS5lbnRyeSlcblx0XHRcdFx0cmVzdWx0ID0gY29sbGVjdGlvbkVudHJ5LmFkZEl0ZW1zKG1hcEVudHJ5LmZpdHRpbmcsIHJlc3VsdFJlc291cmNlLCB1cGRhdGVJbml0aWFsKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LmFkZEl0ZW1zKG1hcEVudHJ5LmZpdHRpbmcsIG51bGwsIHVwZGF0ZUluaXRpYWwpO1xuXG5cdFx0XHRpZiAodXBkYXRlSW5pdGlhbCAmJiBtYXBFbnRyeS5tYXliZS5sZW5ndGggPiAwKVxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuZXh0ZW5kKGlkZW50aXR5LCBudWxsLCB0cnVlLCB1cGRhdGVJbml0aWFsKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0YmF0Y2hFeHBhbmQgKFxuXHRcdHBhcmVudFR5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRjb2xsZWN0aW9uczogQ29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXAsXG5cdFx0bmV3Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbltdXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA+IHtcblx0XHRpZiAobmV3Q29sdW1ucy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGNvbGxlY3Rpb25zKTtcblxuXHRcdGNvbnN0IHBhcmVudElkQXJyYXk6IEl0ZW1JZFtdID0gW107XG5cdFx0bGV0IGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSA9IFtdO1xuXG5cdFx0Ly8gVE9ETzogZmlsdGVyIGxvY2FsIGl0ZW1zP1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBjb2xsZWN0aW9ucykge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gY29sbGVjdGlvbnNbcGFyZW50SWRdLmVudHJ5O1xuXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuZGVmZXIoKTtcblxuXHRcdFx0cGFyZW50SWRBcnJheS5wdXNoKGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQhLml0ZW1JZCk7XG5cdFx0XHRpdGVtRW50cmllcyA9IGl0ZW1FbnRyaWVzLmNvbmNhdChjb2xsZWN0aW9uRW50cnkuaXRlbXMpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5yZXF1ZXN0TGlua0l0ZW1zKFxuXHRcdFx0cGFyZW50VHlwZSxcblx0XHRcdHBhcmVudElkQXJyYXksXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdG51bGwsXG5cdFx0XHRuZXdDb2x1bW5zXG5cdFx0KS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzRXhwYW5zaW9uKFxuXHRcdFx0XHRcdG5ld0NvbHVtbnMsXG5cdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0aXRlbUVudHJpZXNcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIG9mIHBhcmVudElkQXJyYXkpIHtcblx0XHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBjb2xsZWN0aW9uc1twYXJlbnRJZF0uZW50cnk7XG5cblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuZXhwYW5kQ29sdW1ucyhjb2x1bW5FeHBhbnNpb24pO1xuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5fcmVzb2x2ZSgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25zO1xuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxuXHQvLyB0b2RvW1RTXSBob3cgZG8gd2UgdHlwZSB0aGlzID9cblx0YmF0Y2hFeHRlbmQgPFQgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcD4gKFxuXHRcdHBhcmVudFR5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uRW50cnlPcHRpb25zLFxuXHRcdHF1ZXJ5Q2FsbGJhY2s6IFF1ZXJ5Q2FsbGJhY2ssXG5cdFx0Y29sbGVjdGlvbnM6IFQsXG5cdFx0cmV0dXJuQWxsSXRlbXM6IGJvb2xlYW4gPSBmYWxzZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcD4ge1xuXHRcdGlmICghaGFzUHJvcGVydGllcyhjb2xsZWN0aW9ucykpXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKHt9KTtcblxuXHRcdGNvbnN0IHBhcmVudElkQXJyYXk6IEl0ZW1JZFtdID0gW107XG5cdFx0bGV0IGl0ZW1JZEFycmF5OiBJdGVtSWRbXSA9IFtdO1xuXG5cdFx0b3B0aW9ucy5xdWVyeVBhcmFtcyA9IHF1ZXJ5Q2FsbGJhY2sob3B0aW9ucy5xdWVyeVBhcmFtcyk7XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGNvbGxlY3Rpb25zKSB7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBjb2xsZWN0aW9uc1twYXJlbnRJZF0uZW50cnk7XG5cblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5leHRlbmRRdWVyeShxdWVyeUNhbGxiYWNrKTtcblx0XHRcdHBhcmVudElkQXJyYXkucHVzaChjb2xsZWN0aW9uRW50cnkucGFyZW50IS5pdGVtSWQpO1xuXG5cdFx0XHRpdGVtSWRBcnJheSA9IGl0ZW1JZEFycmF5LmNvbmNhdChjb2xsZWN0aW9uRW50cnkuZ2V0SWRBcnJheSgpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdExpbmtJdGVtcyhcblx0XHRcdHBhcmVudFR5cGUsXG5cdFx0XHRwYXJlbnRJZEFycmF5LFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5hZGRBbmRDb25kaXRpb24oXG5cdFx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jcmVhdGVRdWVyeShvcHRpb25zKS5vYmplY3QsXG5cdFx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLmNyZWF0ZU5vdEluKGl0ZW1JZEFycmF5KVxuXHRcdFx0KSxcblx0XHRcdG9wdGlvbnMuY29sdW1uc1xuXHRcdCkudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NMaW5rUmVzcG9uc2UoXG5cdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0cGFyZW50VHlwZSxcblx0XHRcdFx0XHRwYXJlbnRJZEFycmF5LFxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdG9wdGlvbnNcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHRpdGVtRW50cnlSZXNvdXJjZSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgb2YgcGFyZW50SWRBcnJheSkge1xuXHRcdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZSA9IGNvbGxlY3Rpb25zW3BhcmVudElkXTtcblx0XHRcdFx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gY29sbGVjdGlvblJlc291cmNlLmVudHJ5LmFkZEl0ZW1zKCAvLyBzaG91bGQgZ28gZmlyc3Rcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeVJlc291cmNlLml0ZW1zW3BhcmVudElkXSxcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZVxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gcmV0dXJuQWxsSXRlbXMgPyBjb2xsZWN0aW9uUmVzb3VyY2UuaXRlbXMgOiBpdGVtUmVzb3VyY2VzO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0YmF0Y2hGZXRjaCAoXG5cdFx0cGFyZW50VHlwZTogSXRlbVR5cGUsXG5cdFx0cGFyZW50SWRBcnJheTogSXRlbUlkW10gfCAoKCkgPT4gSXRlbUlkW10pLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uRW50cnlPcHRpb25zLFxuXHRcdGl0ZW1DYWNoZTogSXRlbUNhY2hlLFxuXHRcdGxvY2FsQ29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGUsXG5cdFx0ZGVmZXJyZWRDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwPiB7XG5cdFx0Y29uc3QgZXJyb3JIYW5kbGVyID0gdGhpcy5lcnJvckhhbmRsZXI7XG5cdFx0Y29uc3QgYmF0Y2hTdGF0dXM6IEJhdGNoU3RhdHVzPENvbGxlY3Rpb25FbnRyeT4gPSB0aGlzLmJhdGNoU3RhdHVzRmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdGNvbGxlY3Rpb25FbnRyeSA9PiAoY29sbGVjdGlvbkVudHJ5LnBhcmVudCEpLml0ZW1JZCxcblx0XHRcdGNvbGxlY3Rpb25FbnRyeSA9PiBjb2xsZWN0aW9uRW50cnkucHJvbWlzZVxuXHRcdCk7XG5cblx0XHRpZiAoaXNGdW5jdGlvbjwoKSA9PiBJdGVtSWRbXT4ocGFyZW50SWRBcnJheSkpXG5cdFx0XHRwYXJlbnRJZEFycmF5ID0gcGFyZW50SWRBcnJheSgpO1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBvZiBwYXJlbnRJZEFycmF5KSB7XG5cdFx0XHRiYXRjaFN0YXR1cy5hZGQoXG5cdFx0XHRcdHRoaXMuZ2V0RW50cnlTdGF0dXMoXG5cdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNsb25lT3B0aW9ucyhvcHRpb25zLCB7aXRlbVR5cGU6IHBhcmVudFR5cGUsIGl0ZW1JZDogcGFyZW50SWR9KSxcblx0XHRcdFx0XHRsb2NhbENvbGxlY3Rpb25DYWNoZSxcblx0XHRcdFx0XHRkZWZlcnJlZENvbGxlY3Rpb25DYWNoZVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChiYXRjaFN0YXR1cy5nZXRQcm9taXNlcygpKS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRjb25zdCByZXF1ZXN0SWRzID0gYmF0Y2hTdGF0dXMuZ2V0UmVxdWVzdElkcygpO1xuXHRcdFx0XHRsZXQgaXRlbUVudHJ5Q29tcG91bmRQcm9taXNlO1xuXHRcdFx0XHRsZXQgYWRkaXRpb25hbFF1ZXJ5O1xuXG5cdFx0XHRcdGlmIChvcHRpb25zLnF1ZXJ5ID09PSBudWxsKVxuXHRcdFx0XHRcdGFkZGl0aW9uYWxRdWVyeSA9IG51bGw7XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IHBhcnNlZFF1ZXJ5ID0gdGhpcy5xdWVyeVBhcnNlckZhY3RvcnkuY29uc3RydWN0KG9wdGlvbnMucXVlcnksIG9wdGlvbnMucXVlcnlQYXJhbXMpLnBhcnNlKCk7XG5cdFx0XHRcdFx0YWRkaXRpb25hbFF1ZXJ5ID0ge29iamVjdDogcGFyc2VkUXVlcnlbMF0sIHN0cmluZzogcGFyc2VkUXVlcnlbMV19O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHJlcXVlc3RJZHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdGl0ZW1FbnRyeUNvbXBvdW5kUHJvbWlzZSA9IHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RMaW5rSXRlbXMoXG5cdFx0XHRcdFx0XHRwYXJlbnRUeXBlLFxuXHRcdFx0XHRcdFx0cmVxdWVzdElkcyxcblx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdFx0YWRkaXRpb25hbFF1ZXJ5ID09PSBudWxsID8gbnVsbCA6IGFkZGl0aW9uYWxRdWVyeS5vYmplY3QsXG5cdFx0XHRcdFx0XHRvcHRpb25zLmNvbHVtbnNcblx0XHRcdFx0XHQpLnRoZW4oXG5cdFx0XHRcdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzTGlua1Jlc3BvbnNlKFxuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHRcdFx0XHRcdHBhcmVudFR5cGUsXG5cdFx0XHRcdFx0XHRcdFx0cmVxdWVzdElkcyxcblx0XHRcdFx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRcdFx0XHRvcHRpb25zXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYmF0Y2hTdGF0dXMuaGFzRW50cmllcyhbRU5UUllfU1RBVFVTLkxPQ0FMXSkpIHtcblx0XHRcdFx0XHRpdGVtRW50cnlDb21wb3VuZFByb21pc2UgPSB0aGlzLmNvbHVtbkhhbmRsZXIuZmV0Y2goaXRlbVR5cGUsIG9wdGlvbnMuY29sdW1ucykudGhlbihcblx0XHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1ucyA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0Y29sdW1uczogdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdFx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdFx0XHRcdFx0b3B0aW9ucy5jb2x1bW5zLFxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZmFsc2Vcblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gZWxzZVxuXHRcdFx0XHRcdHJldHVybiBiYXRjaFN0YXR1cy5nZXRNYXAoKTtcblxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5Q29tcG91bmRQcm9taXNlLnRoZW4oXG5cdFx0XHRcdFx0aXRlbUVudHJ5Q29tcG91bmQgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5TWFwID0gaXRlbUNhY2hlLmJhdGNoR2V0TG9jYWxCeVBhcmVudChcblx0XHRcdFx0XHRcdFx0cGFyZW50VHlwZSxcblx0XHRcdFx0XHRcdFx0cGFyZW50SWRBcnJheSBhcyBJdGVtSWRbXSxcblx0XHRcdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0XHRcdGFkZGl0aW9uYWxRdWVyeVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0bGV0IGl0ZW1FbnRyeUFycmF5OiBJdGVtRW50cnlbXSA9IFtdO1xuXG5cdFx0XHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGl0ZW1FbnRyeU1hcClcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5QXJyYXkgPSBpdGVtRW50cnlBcnJheS5jb25jYXQoaXRlbUVudHJ5TWFwW3BhcmVudElkXSk7XG5cblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLmV4cGFuZExvY2FsSXRlbUVudHJpZXMoXG5cdFx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnlBcnJheSxcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5Q29tcG91bmQuY29sdW1ucyxcblx0XHRcdFx0XHRcdFx0aXRlbUNhY2hlXG5cdFx0XHRcdFx0XHQpLnRoZW4oXG5cdFx0XHRcdFx0XHRcdCgpID0+IHRoaXMuaGFuZGxlQmF0Y2hSZXNwb25zZShiYXRjaFN0YXR1cywgaXRlbUVudHJ5Q29tcG91bmQsIGl0ZW1FbnRyeU1hcCksXG5cdFx0XHRcdFx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHQvLyBUT0RPOiBzb21lIHN0YXR1c2VzIGFyZSBub3QgdGFrZW4gaW50byBhY2NvdW50XG5cdGhhbmRsZUJhdGNoUmVzcG9uc2UgKFxuXHRcdGJhdGNoU3RhdHVzOiBCYXRjaFN0YXR1czxDb2xsZWN0aW9uRW50cnk+LFxuXHRcdGl0ZW1FbnRyeUNvbXBvdW5kOiB7XG5cdFx0XHRjb2x1bW5zOiBDb2x1bW5TZXQsXG5cdFx0XHRjb2x1bW5FeHBhbnNpb24/OiBDb2x1bW5FeHBhbnNpb24sXG5cdFx0XHRpdGVtcz86IEl0ZW1FbnRyeVBhcmVudElkTWFwXG5cdFx0fSxcblx0XHRsb2NhbEl0ZW1zOiBJdGVtRW50cnlQYXJlbnRJZE1hcFxuXHQpOiBDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCB7XG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXG5cdFx0XHRbRU5UUllfU1RBVFVTLkNBQ0hFRF0sXG5cdFx0XHQoY29sbGVjdGlvbkVudHJ5LCBwYXJlbnRJZCkgPT4ge1xuXHRcdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gY29sbGVjdGlvbkVudHJ5O1xuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXG5cdFx0XHRbRU5UUllfU1RBVFVTLlJFU09MVkVdLFxuXHRcdFx0KGNvbGxlY3Rpb25FbnRyeSwgcGFyZW50SWQpID0+IHtcblx0XHRcdFx0Y29uc3QgaXRlbUVudHJpZXMgPSAoaXRlbUVudHJ5Q29tcG91bmQuaXRlbXMhKVtwYXJlbnRJZF07XG5cblx0XHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IGNvbGxlY3Rpb25FbnRyeS5yZXNvbHZlKFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGluaXRpYWw6IGl0ZW1FbnRyaWVzLFxuXHRcdFx0XHRcdFx0bW9kaWZpZWQ6IGl0ZW1FbnRyaWVzLmNvbmNhdChsb2NhbEl0ZW1zW3BhcmVudElkXSksXG5cdFx0XHRcdFx0XHRjb2x1bW5zOiBpdGVtRW50cnlDb21wb3VuZC5jb2x1bW5zXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXG5cdFx0XHRiYXRjaFN0YXR1cy5yZW1vdGVFeHBhbmRTdGF0dXMsXG5cdFx0XHQoY29sbGVjdGlvbkVudHJ5LCBwYXJlbnRJZCkgPT4ge1xuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuZXhwYW5kQ29sdW1ucyhpdGVtRW50cnlDb21wb3VuZC5jb2x1bW5FeHBhbnNpb24hKTtcblx0XHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IGNvbGxlY3Rpb25FbnRyeS5fcmVzb2x2ZSgpO1xuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXG5cdFx0XHRbRU5UUllfU1RBVFVTLkxPQ0FMXSxcblx0XHRcdChjb2xsZWN0aW9uRW50cnksIHBhcmVudElkKSA9PiB7XG5cdFx0XHRcdHJlc3VsdFtwYXJlbnRJZF0gPSBjb2xsZWN0aW9uRW50cnkucmVzb2x2ZShcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRpbml0aWFsOiBsb2NhbEl0ZW1zW3BhcmVudElkXSxcblx0XHRcdFx0XHRcdGNvbHVtbnM6IGl0ZW1FbnRyeUNvbXBvdW5kLmNvbHVtbnNcblx0XHRcdFx0XHR9XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmZXRjaCAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25FbnRyeU9wdGlvbnMsXG5cdFx0aXRlbUNhY2hlOiBJdGVtQ2FjaGUsXG5cdFx0bG9jYWxDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZSxcblx0XHRkZWZlcnJlZENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvbkVudHJ5PiB7XG5cdFx0Y29uc3QgZXJyb3JIYW5kbGVyID0gdGhpcy5lcnJvckhhbmRsZXI7XG5cdFx0Y29uc3Qgc3RhdHVzUmVzb3VyY2UgPSB0aGlzLmdldEVudHJ5U3RhdHVzKGl0ZW1UeXBlLCBvcHRpb25zLCBsb2NhbENvbGxlY3Rpb25DYWNoZSwgZGVmZXJyZWRDb2xsZWN0aW9uQ2FjaGUpO1xuXHRcdGNvbnN0IGVudHJ5ID0gc3RhdHVzUmVzb3VyY2UuZW50cnk7XG5cblx0XHRzd2l0Y2ggKHN0YXR1c1Jlc291cmNlLnN0YXR1cykge1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuQ0FDSEVEOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGVudHJ5KTtcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLlBST01JU0VEOlxuXHRcdFx0XHRyZXR1cm4gZW50cnkucHJvbWlzZTtcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLkVYUEFORDpcblx0XHRcdFx0cmV0dXJuIGVudHJ5LmV4cGFuZChvcHRpb25zLmNvbHVtbnMsIGl0ZW1DYWNoZSkudGhlbihcblx0XHRcdFx0XHQoKSA9PiBlbnRyeS5fcmVzb2x2ZSgpLFxuXHRcdFx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KTtcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORDpcblx0XHRcdFx0cmV0dXJuIGVudHJ5LnByb21pc2UudGhlbihcblx0XHRcdFx0XHQoKSA9PiBlbnRyeS5kZWZlcigpLmV4cGFuZChvcHRpb25zLmNvbHVtbnMsIGl0ZW1DYWNoZSksXG5cdFx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHQpLnRoZW4oXG5cdFx0XHRcdFx0KCkgPT4gZW50cnkuX3Jlc29sdmUoKSxcblx0XHRcdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdCk7XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5MT0NBTDpcblx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb2x2ZUxvY2FsKGVudHJ5LCBpdGVtQ2FjaGUpO1xuXHRcdFx0ZGVmYXVsdDogLy8gY2FzZSBFTlRSWV9TVEFUVVMuUkVTT0xWRTpcblx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb2x2ZVJlbW90ZShlbnRyeSwgaXRlbUNhY2hlKTtcblx0XHR9XG5cdH1cblxuXHRnZXRDYWNoZWRFbnRyeVN0YXR1cyAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIG9wdGlvbnMpOiBFTlRSWV9TVEFUVVMge1xuXHRcdGlmICghY29sbGVjdGlvbkVudHJ5LmNvbHVtbnMuaXNTdXBlcnNldE9mKG9wdGlvbnMuY29sdW1ucykpIHtcblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXNEZWZlcnJlZCgpKVxuXHRcdFx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORDtcblxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LmRlZmVyKCk7XG5cblx0XHRcdHJldHVybiBFTlRSWV9TVEFUVVMuRVhQQU5EO1xuXHRcdH1cblxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXNEZWZlcnJlZCgpKVxuXHRcdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5QUk9NSVNFRDtcblxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkucmVsb2FkUXVldWVkKSB7XG5cdFx0XHRjb2xsZWN0aW9uRW50cnkucmVsb2FkUXVldWVkID0gZmFsc2U7XG5cblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXNMb2NhbCgpKVxuXHRcdFx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLkNBQ0hFRDtcblxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LmRlZmVyKCk7XG5cblx0XHRcdHJldHVybiBFTlRSWV9TVEFUVVMuUkVTT0xWRTtcblx0XHR9XG5cblx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLkNBQ0hFRDtcblx0fVxuXG5cdGdldERlZmVycmVkRW50cnlTdGF0dXMgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zLFxuXHRcdHF1ZXJ5LFxuXHRcdGRlZmVycmVkRW50cmllczogQ29sbGVjdGlvbkNhY2hlXG5cdCk6IHtlbnRyeTogQ29sbGVjdGlvbkVudHJ5LCBpc0RlZmVycmVkOiBib29sZWFufSB7XG5cdFx0bGV0IGNvbGxlY3Rpb25FbnRyeTtcblxuXHRcdGlmICghb3B0aW9ucy5kZWZlclJlcXVlc3QpIHtcblx0XHRcdGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuY29sbGVjdGlvbkVudHJ5RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIG9wdGlvbnMpO1xuXG5cdFx0XHRyZXR1cm4ge2VudHJ5OiBjb2xsZWN0aW9uRW50cnksIGlzRGVmZXJyZWQ6IGZhbHNlfTtcblx0XHR9XG5cblx0XHRjb2xsZWN0aW9uRW50cnkgPSBkZWZlcnJlZEVudHJpZXMuZ2V0QnlRdWVyeShpdGVtVHlwZSwgcXVlcnkpO1xuXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeSAhPT0gbnVsbCkge1xuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LmV4cGFuZFJlcXVlc3RDb2x1bW5zKG9wdGlvbnMuY29sdW1ucyk7XG5cblx0XHRcdHJldHVybiB7ZW50cnk6IGNvbGxlY3Rpb25FbnRyeSwgaXNEZWZlcnJlZDogZmFsc2V9O1xuXHRcdH1cblxuXHRcdGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuY29sbGVjdGlvbkVudHJ5RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIG9wdGlvbnMpO1xuXG5cdFx0cmV0dXJuIHtlbnRyeTogZGVmZXJyZWRFbnRyaWVzLmFkZChjb2xsZWN0aW9uRW50cnkpLCBpc0RlZmVycmVkOiB0cnVlfTtcblx0fVxuXG5cdGdldEVudHJ5U3RhdHVzIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0b3B0aW9ucyxcblx0XHRsb2NhbEVudHJpZXM6IENvbGxlY3Rpb25DYWNoZSxcblx0XHRkZWZlcnJlZEVudHJpZXM6IENvbGxlY3Rpb25DYWNoZVxuXHQpOiBFbnRyeVN0YXR1czxDb2xsZWN0aW9uRW50cnk+IHtcblx0XHRjb25zdCBxdWVyeSA9IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jcmVhdGVRdWVyeShvcHRpb25zKTtcblx0XHRsZXQgY29sbGVjdGlvbkVudHJ5O1xuXHRcdGxldCBpc0RlZmVycmVkO1xuXG5cdFx0aWYgKHRoaXMuaXNMb2NhbChvcHRpb25zKSkge1xuXHRcdFx0Y29sbGVjdGlvbkVudHJ5ID0gbG9jYWxFbnRyaWVzLmdldEJ5UXVlcnkoaXRlbVR5cGUsIHF1ZXJ5KTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeSAhPT0gbnVsbClcblx0XHRcdFx0cmV0dXJuIHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBzdGF0dXM6IHRoaXMuZ2V0Q2FjaGVkRW50cnlTdGF0dXMoY29sbGVjdGlvbkVudHJ5LCBvcHRpb25zKX07XG5cblx0XHRcdCh7ZW50cnk6IGNvbGxlY3Rpb25FbnRyeSwgaXNEZWZlcnJlZH0gPSB0aGlzLmdldERlZmVycmVkRW50cnlTdGF0dXMoXG5cdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRvcHRpb25zLFxuXHRcdFx0XHRxdWVyeSxcblx0XHRcdFx0ZGVmZXJyZWRFbnRyaWVzXG5cdFx0XHQpKTtcblxuXHRcdFx0aWYgKGlzRGVmZXJyZWQpXG5cdFx0XHRcdHJldHVybiB7ZW50cnk6IGNvbGxlY3Rpb25FbnRyeSwgc3RhdHVzOiBFTlRSWV9TVEFUVVMuUFJPTUlTRUR9O1xuXG5cdFx0XHQvLyBuZXcgbG9jYWwgZW50cnkgY3JlYXRlZCwgc2hvdWxkIGJlIGFkZGVkIHRvIGxvY2FsIGNhY2hlIG9ubHlcblx0XHRcdHJldHVybiB7ZW50cnk6IGxvY2FsRW50cmllcy5hZGQoY29sbGVjdGlvbkVudHJ5KSwgc3RhdHVzOiBFTlRSWV9TVEFUVVMuTE9DQUx9O1xuXHRcdH1cblxuXHRcdGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuZW50cmllcy5nZXRCeVF1ZXJ5KGl0ZW1UeXBlLCBxdWVyeSk7XG5cblx0XHQvLyBlbnRyeSBhbHJlYWR5IGV4aXN0cyBpbiBnbG9iYWwgY2FjaGUsIGFkZCB0byBsb2NhbCBjYWNoZVxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkgIT09IG51bGwpXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRlbnRyeTogbG9jYWxFbnRyaWVzLmFkZChjb2xsZWN0aW9uRW50cnkpLFxuXHRcdFx0XHRzdGF0dXM6IHRoaXMuZ2V0Q2FjaGVkRW50cnlTdGF0dXMoY29sbGVjdGlvbkVudHJ5LCBvcHRpb25zKVxuXHRcdFx0fTtcblxuXHRcdCh7ZW50cnk6IGNvbGxlY3Rpb25FbnRyeSwgaXNEZWZlcnJlZH0gPSB0aGlzLmdldERlZmVycmVkRW50cnlTdGF0dXMoaXRlbVR5cGUsIG9wdGlvbnMsIHF1ZXJ5LCBkZWZlcnJlZEVudHJpZXMpKTtcblxuXHRcdGlmIChpc0RlZmVycmVkKVxuXHRcdFx0cmV0dXJuIHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBzdGF0dXM6IEVOVFJZX1NUQVRVUy5QUk9NSVNFRH07XG5cblx0XHQvLyBuZXcgZ2xvYmFsIGVudHJ5IGNyZWF0ZWQsIGFkZCB0byBib3RoIGxvY2FsIGFuZCBnbG9iYWwgY2FjaGVcblx0XHRsb2NhbEVudHJpZXMuYWRkKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0dGhpcy5lbnRyaWVzLmFkZChjb2xsZWN0aW9uRW50cnkpO1xuXG5cdFx0cmV0dXJuIHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBzdGF0dXM6IEVOVFJZX1NUQVRVUy5SRVNPTFZFfTtcblx0fVxuXG5cdHJlc29sdmVMb2NhbCAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIGl0ZW1DYWNoZTogSXRlbUNhY2hlKTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uRW50cnk+IHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZTtcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zLmNvbHVtbnM7XG5cblx0XHRyZXR1cm4gdGhpcy5jb2x1bW5IYW5kbGVyLmZldGNoKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucykudGhlbihcblx0XHRcdHJlc3BvbnNlQ29sdW1ucyA9PiB7XG5cdFx0XHRcdGNvbnN0IGNvbHVtblNldCA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMsIGZhbHNlKTtcblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5leHBhbmRMb2NhbEl0ZW1FbnRyaWVzKFxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdGl0ZW1DYWNoZS5nZXRMb2NhbEJ5UXVlcnkoaXRlbVR5cGUsIGNvbGxlY3Rpb25FbnRyeS5xdWVyeSksXG5cdFx0XHRcdFx0Y29sdW1uU2V0LFxuXHRcdFx0XHRcdGl0ZW1DYWNoZVxuXHRcdFx0XHQpLnRoZW4oXG5cdFx0XHRcdFx0bG9jYWxFbnRyaWVzID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnkucmVzb2x2ZSh7aW5pdGlhbDogbG9jYWxFbnRyaWVzLCBjb2x1bW5zOiBjb2x1bW5TZXR9KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRyZXNvbHZlUmVtb3RlIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgaXRlbUNhY2hlOiBJdGVtQ2FjaGUpOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25FbnRyeT4ge1xuXHRcdGNvbnN0IGVycm9ySGFuZGxlciA9IHRoaXMuZXJyb3JIYW5kbGVyO1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlO1xuXG5cdFx0bGV0IGNvbHVtblNldDtcblxuXHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5yZXF1ZXN0SXRlbXMoY29sbGVjdGlvbkVudHJ5KS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRjb2x1bW5TZXQgPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zLmNvbHVtbnMsXG5cdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KClcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc1Jlc3BvbnNlKFxuXHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHRcdHJlc3BvbnNlLmxpbmtzW2l0ZW1UeXBlXSxcblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cnkucGFyZW50LFxuXHRcdFx0XHRcdGNvbHVtblNldFxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHRyZW1vdGVFbnRyaWVzID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhwYW5kTG9jYWxJdGVtRW50cmllcyhcblx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRpdGVtQ2FjaGUuZ2V0TG9jYWxCeVF1ZXJ5KGl0ZW1UeXBlLCBjb2xsZWN0aW9uRW50cnkucXVlcnkpLFxuXHRcdFx0XHRcdGNvbHVtblNldCxcblx0XHRcdFx0XHRpdGVtQ2FjaGVcblx0XHRcdFx0KS50aGVuKFxuXHRcdFx0XHRcdGxvY2FsRW50cmllcyA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gY29sbGVjdGlvbkVudHJ5LnJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRpbml0aWFsOiByZW1vdGVFbnRyaWVzLFxuXHRcdFx0XHRcdFx0XHRcdG1vZGlmaWVkOiByZW1vdGVFbnRyaWVzLmNvbmNhdChsb2NhbEVudHJpZXMpLFxuXHRcdFx0XHRcdFx0XHRcdGNvbHVtbnM6IGNvbHVtblNldFxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0aXNMb2NhbCAob3B0aW9ucykge1xuXHRcdGNvbnN0IHBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJldHVybiB0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudC5pdGVtSWQpO1xuXHR9XG5cblx0cHJpdmF0ZSBleHBhbmRMb2NhbEl0ZW1FbnRyaWVzIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRcdGNvbHVtblNldDogQ29sdW1uU2V0LFxuXHRcdGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGVcblx0KTogUHJvbWlzZUludGVyZmFjZTxJdGVtRW50cnlbXT4ge1xuXHRcdHJldHVybiB0aGlzLml0ZW1IYW5kbGVyLmV4cGFuZExvY2FsRW50cmllcyhcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0aXRlbUVudHJpZXMsXG5cdFx0XHRjb2x1bW5TZXQucmVxdWVzdCxcblx0XHRcdGNvbHVtblNldC5yZXNwb25zZSxcblx0XHRcdGxvY2FsSXRlbUNhY2hlXG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgaWRlbnRpdHksIEl0ZW1JZCB9IGZyb20gJy4uLyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IFF1ZXJ5TWF0Y2hlckZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMvJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgQ29sbGVjdGlvblJlc291cmNlLCBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XG5cbmV4cG9ydCB0eXBlIENvbGxlY3Rpb25NYXRjaGVyTWF0Y2hlcyA9IHtcblx0W2l0ZW1JZDogbnVtYmVyXToge1xuXHRcdGl0ZW06IEl0ZW1FbnRyeSxcblx0XHRpc01hdGNoOiBib29sZWFuIHwgJ21heWJlJ1xuXHR9XG59O1xuXG5leHBvcnQgdHlwZSBHcm91cGVkQ29sbGVjdGlvbk1hdGNoZXJSZXN1bHQgPSB7XG5cdGZpdHRpbmc6IEl0ZW1FbnRyeVtdLFxuXHRub3RGaXR0aW5nOiBJdGVtSWRbXSxcblx0bWF5YmU6IEl0ZW1FbnRyeVtdXG59O1xuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbk1hdGNoZXIge1xuXHRtYXA6IHtcblx0XHRbY29sbGVjdGlvbkVudHJ5SWQ6IG51bWJlcl06IHtcblx0XHRcdGNvbGxlY3Rpb246IENvbGxlY3Rpb25FbnRyeVxuXHRcdFx0bWF0Y2hlczogQ29sbGVjdGlvbk1hdGNoZXJNYXRjaGVzXG5cdFx0fVxuXHR9ID0ge307XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25DYWNoZXM6IENvbGxlY3Rpb25DYWNoZVtdLFxuXHRcdHByaXZhdGUgdXBkYXRlSW5pdGlhbDogYm9vbGVhbixcblx0XHRwcml2YXRlIGNhbGxPbkFjdGl2YXRlOiBib29sZWFuXG5cdCkge1xuXG5cdH1cblxuXHRleHBhbmQgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KTogdGhpcyB7XG5cdFx0Y29uc3QgcXVlcnlNYXRjaGVyID0gdGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdGl0ZW1FbnRyeS5pdGVtVHlwZSxcblx0XHRcdGl0ZW1FbnRyeS5nZXRGaWVsZHMoKSxcblx0XHRcdGl0ZW1FbnRyeS5wYXJlbnRcblx0XHQpO1xuXG5cdFx0cmV0dXJuIHRoaXMuX2V4cGFuZChcblx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdGNvbGxlY3Rpb25FbnRyeSA9PiBxdWVyeU1hdGNoZXIubWF0Y2hRdWVyeShjb2xsZWN0aW9uRW50cnkucXVlcnkub2JqZWN0KVxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIF9leHBhbmQgKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5LFxuXHRcdG1hdGNoRnVuY3Rpb246IChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4gYm9vbGVhbiB8ICdtYXliZSdcblx0KTogdGhpcyB7XG5cdFx0Y29uc3QgbWFwID0gdGhpcy5tYXA7XG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkNhY2hlIG9mIHRoaXMuY29sbGVjdGlvbkNhY2hlcykge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJpZXMgPSBjb2xsZWN0aW9uQ2FjaGUuZ2V0QnlJdGVtVHlwZShpdGVtRW50cnkuaXRlbVR5cGUpO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiBjb2xsZWN0aW9uRW50cmllcykge1xuXHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnlJZCA9IGNvbGxlY3Rpb25FbnRyeS5pZDtcblx0XHRcdFx0bGV0IG1hdGNoZXM7XG5cblx0XHRcdFx0aWYgKG1hcFtjb2xsZWN0aW9uRW50cnlJZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRtYXBbY29sbGVjdGlvbkVudHJ5SWRdID0ge2NvbGxlY3Rpb246IGNvbGxlY3Rpb25FbnRyeSwgbWF0Y2hlczoge319O1xuXG5cdFx0XHRcdG1hdGNoZXMgPSBtYXBbY29sbGVjdGlvbkVudHJ5SWRdLm1hdGNoZXM7XG5cblx0XHRcdFx0aWYgKG1hdGNoZXNbaXRlbUlkXSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdG1hdGNoZXNbaXRlbUlkXSA9IHtpdGVtOiBpdGVtRW50cnksIGlzTWF0Y2g6IG1hdGNoRnVuY3Rpb24oY29sbGVjdGlvbkVudHJ5KX07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRnZXRDb2xsZWN0aW9uc1dpdGhGaXR0aW5nSXRlbXMgKCk6IENvbGxlY3Rpb25FbnRyeVtdIHtcblx0XHRjb25zdCByZXN1bHQ6IENvbGxlY3Rpb25FbnRyeVtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiB0aGlzLm1hcCkge1xuXHRcdFx0Y29uc3QgbWFwRW50cnkgPSB0aGlzLm1hcFtjb2xsZWN0aW9uSWRdO1xuXG5cdFx0XHRpZiAodGhpcy5oYXNGaXR0aW5nSXRlbXMobWFwRW50cnkubWF0Y2hlcykpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKG1hcEVudHJ5LmNvbGxlY3Rpb24pO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRhZGRUb0NvbGxlY3Rpb25zPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U+IChyZXN1bHRSZXNvdXJjZTogVSk6IFVbJ2l0ZW1zJ107XG5cdGFkZFRvQ29sbGVjdGlvbnMgKHJlc3VsdFJlc291cmNlPzogbnVsbCk6IG51bGw7XG5cdGFkZFRvQ29sbGVjdGlvbnM8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZT4gKHJlc3VsdFJlc291cmNlPzogQ29sbGVjdGlvblJlc291cmNlIHwgbnVsbCk6IFVbJ2l0ZW1zJ10gfCBudWxsO1xuXHRhZGRUb0NvbGxlY3Rpb25zPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U+IChyZXN1bHRSZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlIHwgbnVsbCA9IG51bGwpOiBVWydpdGVtcyddIHwgbnVsbCB7XG5cdFx0bGV0IHJlc3VsdDogYW55ID0gbnVsbDtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIHRoaXMubWFwKSB7XG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IHRoaXMubWFwW2NvbGxlY3Rpb25JZF07XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBtYXBFbnRyeS5jb2xsZWN0aW9uO1xuXHRcdFx0Y29uc3QgZ3JvdXBlZEl0ZW1FbnRyaWVzID0gdGhpcy5ncm91cEl0ZW1FbnRyaWVzKG1hcEVudHJ5Lm1hdGNoZXMpO1xuXHRcdFx0Y29uc3QgZml0dGluZ0l0ZW1FbnRyaWVzID0gZ3JvdXBlZEl0ZW1FbnRyaWVzLmZpdHRpbmc7XG5cblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXNEZWZlcnJlZCgpKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0aWYgKHJlc3VsdFJlc291cmNlICE9PSBudWxsICYmIGNvbGxlY3Rpb25FbnRyeSA9PT0gcmVzdWx0UmVzb3VyY2UuZW50cnkpIHtcblx0XHRcdFx0cmVzdWx0ID0gY29sbGVjdGlvbkVudHJ5LmFkZEl0ZW1zKFxuXHRcdFx0XHRcdGZpdHRpbmdJdGVtRW50cmllcyxcblx0XHRcdFx0XHRyZXN1bHRSZXNvdXJjZSxcblx0XHRcdFx0XHR0aGlzLnVwZGF0ZUluaXRpYWwsXG5cdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHR0aGlzLmNhbGxPbkFjdGl2YXRlXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuYWRkSXRlbXMoXG5cdFx0XHRcdFx0Zml0dGluZ0l0ZW1FbnRyaWVzLFxuXHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0dGhpcy51cGRhdGVJbml0aWFsLFxuXHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0dGhpcy5jYWxsT25BY3RpdmF0ZVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy51cGRhdGVJbml0aWFsICYmIGdyb3VwZWRJdGVtRW50cmllcy5tYXliZS5sZW5ndGggPiAwKVxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuZXh0ZW5kKGlkZW50aXR5LCBudWxsLCB0cnVlLCB0aGlzLnVwZGF0ZUluaXRpYWwpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRyZW1vdmVGcm9tQ29sbGVjdGlvbnM8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZT4gKHJlc3VsdFJlc291cmNlOiBVKTogVVsnaXRlbXMnXTtcblx0cmVtb3ZlRnJvbUNvbGxlY3Rpb25zIChyZXN1bHRSZXNvdXJjZT86IG51bGwpOiBudWxsO1xuXHRyZW1vdmVGcm9tQ29sbGVjdGlvbnM8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZT4gKHJlc3VsdFJlc291cmNlPzogQ29sbGVjdGlvblJlc291cmNlIHwgbnVsbCk6IFVbJ2l0ZW1zJ10gfCBudWxsO1xuXHRyZW1vdmVGcm9tQ29sbGVjdGlvbnM8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZT4gKHJlc3VsdFJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsID0gbnVsbCk6IFVbJ2l0ZW1zJ10gfCBudWxsIHtcblx0XHRsZXQgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSB8IG51bGwgPSBudWxsO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gdGhpcy5tYXApIHtcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gdGhpcy5tYXBbY29sbGVjdGlvbklkXTtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IG1hcEVudHJ5LmNvbGxlY3Rpb247XG5cdFx0XHRjb25zdCBmaXR0aW5nSXRlbUlkcyA9IHRoaXMuZ3JvdXBJdGVtSWRzKG1hcEVudHJ5Lm1hdGNoZXMpLmZpdHRpbmc7XG5cblx0XHRcdGlmIChyZXN1bHRSZXNvdXJjZSA9PT0gbnVsbCB8fCBjb2xsZWN0aW9uRW50cnkgIT09IHJlc3VsdFJlc291cmNlLmVudHJ5KVxuXHRcdFx0XHRyZXN1bHQgPSBjb2xsZWN0aW9uRW50cnkucmVtb3ZlSXRlbXMoZml0dGluZ0l0ZW1JZHMsIHJlc3VsdFJlc291cmNlLCB0aGlzLnVwZGF0ZUluaXRpYWwpO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkucmVtb3ZlSXRlbXMoZml0dGluZ0l0ZW1JZHMsIG51bGwsIHRoaXMudXBkYXRlSW5pdGlhbCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHJlbW92ZUZyb21BbmRBZGRUb0NvbGxlY3Rpb25zICgpOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiB0aGlzLm1hcCkge1xuXHRcdFx0Y29uc3QgbWFwRW50cnkgPSB0aGlzLm1hcFtjb2xsZWN0aW9uSWRdO1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gbWFwRW50cnkuY29sbGVjdGlvbjtcblx0XHRcdGNvbnN0IGdyb3VwZWRJdGVtRW50cmllcyA9IHRoaXMuZ3JvdXBJdGVtRW50cmllcyhtYXBFbnRyeS5tYXRjaGVzKTtcblxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGdyb3VwZWRJdGVtRW50cmllcy5ub3RGaXR0aW5nLCBudWxsLCB0aGlzLnVwZGF0ZUluaXRpYWwpO1xuXG5cdFx0XHQvLyBkb2Vzbid0IGRvIGFueXRoaW5nIHdpdGggaW5pdGlhbFxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LmFkZEl0ZW1zKGdyb3VwZWRJdGVtRW50cmllcy5maXR0aW5nLCBudWxsLCB0aGlzLnVwZGF0ZUluaXRpYWwpO1xuXG5cdFx0XHRpZiAoZ3JvdXBlZEl0ZW1FbnRyaWVzLm1heWJlLmxlbmd0aCA+IDApXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5leHRlbmQoaWRlbnRpdHksIG51bGwsIHRydWUsIHRoaXMudXBkYXRlSW5pdGlhbCk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBncm91cEl0ZW1FbnRyaWVzIChtYXRjaGVzOiBDb2xsZWN0aW9uTWF0Y2hlck1hdGNoZXMpOiBHcm91cGVkQ29sbGVjdGlvbk1hdGNoZXJSZXN1bHQge1xuXHRcdGNvbnN0IGZpdHRpbmc6IEl0ZW1FbnRyeVtdID0gW107XG5cdFx0Y29uc3Qgbm90Rml0dGluZzogSXRlbUlkW10gPSBbXTtcblx0XHRjb25zdCBtYXliZTogSXRlbUVudHJ5W10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIG1hdGNoZXMpIHtcblx0XHRcdGNvbnN0IG1hdGNoID0gbWF0Y2hlc1tpdGVtSWRdO1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gbWF0Y2guaXRlbTtcblx0XHRcdGNvbnN0IGlzTWF0Y2ggPSBtYXRjaC5pc01hdGNoO1xuXG5cdFx0XHRpZiAoaXNNYXRjaCA9PT0gdHJ1ZSlcblx0XHRcdFx0Zml0dGluZy5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0XHRlbHNlIGlmIChpc01hdGNoID09PSBmYWxzZSlcblx0XHRcdFx0bm90Rml0dGluZy5wdXNoKGl0ZW1FbnRyeS5pdGVtSWQpO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRtYXliZS5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtmaXR0aW5nOiBmaXR0aW5nLCBub3RGaXR0aW5nOiBub3RGaXR0aW5nLCBtYXliZTogbWF5YmV9O1xuXHR9XG5cblx0cHJpdmF0ZSBncm91cEl0ZW1JZHMgKG1hdGNoZXM6IENvbGxlY3Rpb25NYXRjaGVyTWF0Y2hlcykge1xuXHRcdC8vIGFsc28gaW5jbHVkZXMgJ21heWJlJztcblx0XHRjb25zdCBmaXR0aW5nOiBJdGVtSWRbXSA9IFtdO1xuXHRcdGNvbnN0IG5vdEZpdHRpbmc6IEl0ZW1JZFtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBtYXRjaGVzKSB7XG5cdFx0XHRjb25zdCBtYXRjaCA9IG1hdGNoZXNbaXRlbUlkXTtcblxuXHRcdFx0KG1hdGNoLmlzTWF0Y2ggPT09IGZhbHNlID8gbm90Rml0dGluZyA6IGZpdHRpbmcpLnB1c2gobWF0Y2guaXRlbS5pdGVtSWQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7Zml0dGluZzogZml0dGluZywgbm90Rml0dGluZzogbm90Rml0dGluZ307XG5cdH1cblxuXHRwcml2YXRlIGhhc0ZpdHRpbmdJdGVtcyAobWF0Y2hlczogQ29sbGVjdGlvbk1hdGNoZXJNYXRjaGVzKSB7XG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gbWF0Y2hlcykge1xuXHRcdFx0aWYgKG1hdGNoZXNbaXRlbUlkXS5pc01hdGNoID09PSB0cnVlKVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnMsIENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UsIEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBJdGVtSWQgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlIHtcblx0cHJvY2Vzc09wdGlvbnMgKG9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UpOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zIHtcblx0XHRyZXR1cm4gbmV3IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnMob3B0aW9ucyk7XG5cdH1cblxuXHRnZXRJZEFycmF5IChpdGVtUmVzb3VyY2VzOiBJdGVtUmVzb3VyY2VbXSk6IEl0ZW1JZFtdIHtcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1JZFtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKVxuXHRcdFx0cmVzdWx0LnB1c2goaXRlbVJlc291cmNlLmVudHJ5Lml0ZW1JZCk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5VdGlsIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0Q29sdW1uLCBBcGlSZXF1ZXN0Q29sdW1ucywgSXRlbVR5cGUsIFJlc3BvbnNlQ29sdW1uLCBSZXNwb25zZUNvbHVtbk1hcCB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIENvbHVtbkNhY2hlIHtcblx0Y2FjaGU6IFJlc3BvbnNlQ29sdW1uTWFwID0ge307XG5cdGFsbENvbHVtbnM6IHtbaXRlbVR5cGU6IHN0cmluZ106IGJvb2xlYW59ID0ge307XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxuXHQpIHtcblx0fVxuXG5cdHNldENvbHVtbiAoaXRlbVR5cGU6IEl0ZW1UeXBlLCByZXNwb25zZUNvbHVtbjogUmVzcG9uc2VDb2x1bW4pOiBSZXNwb25zZUNvbHVtbiB7XG5cdFx0Y29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlO1xuXG5cdFx0aWYgKGNhY2hlW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0Y2FjaGVbaXRlbVR5cGVdID0ge307XG5cblx0XHRjb25zdCBlbnRyeSA9IGNhY2hlW2l0ZW1UeXBlXTtcblx0XHRjb25zdCBjb2x1bW5JZCA9IHJlc3BvbnNlQ29sdW1uLmlkO1xuXG5cdFx0aWYgKGVudHJ5W2NvbHVtbklkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0ZW50cnlbY29sdW1uSWRdID0gcmVzcG9uc2VDb2x1bW47XG5cblx0XHRyZXR1cm4gZW50cnlbY29sdW1uSWRdO1xuXHR9XG5cblx0c2V0Q29sdW1ucyAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyxcblx0XHRyZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwXG5cdCk6IFJlc3BvbnNlQ29sdW1uTWFwIHtcblx0XHRjb25zdCByZXN1bHQ6IFJlc3BvbnNlQ29sdW1uTWFwICA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCByZXNwb25zZVR5cGUgaW4gcmVzcG9uc2VDb2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5zID0gcmVzcG9uc2VDb2x1bW5zW3Jlc3BvbnNlVHlwZV07XG5cblx0XHRcdHJlc3VsdFtyZXNwb25zZVR5cGVdID0ge307XG5cblx0XHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gY29sdW1ucylcblx0XHRcdFx0cmVzdWx0W3Jlc3BvbnNlVHlwZV1bY29sdW1uSWRdID0gdGhpcy5zZXRDb2x1bW4ocmVzcG9uc2VUeXBlLCBjb2x1bW5zW2NvbHVtbklkXSk7XG5cdFx0fVxuXG5cdFx0aWYgKHJlcXVlc3RDb2x1bW5zID09PSB0cnVlKVxuXHRcdFx0dGhpcy5hbGxDb2x1bW5zW2l0ZW1UeXBlXSA9IHRydWU7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cmV0cmlldmUgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnNcblx0KToge2NhY2hlZDogUmVzcG9uc2VDb2x1bW5NYXAsIG1pc3Npbmc6IEFwaVJlcXVlc3RDb2x1bW5zfSB7XG5cdFx0aWYgKHJlcXVlc3RDb2x1bW5zID09PSB0cnVlKSB7XG5cdFx0XHRpZiAodGhpcy5jb250YWluc0FsbChpdGVtVHlwZSkpXG5cdFx0XHRcdHJldHVybiB7Y2FjaGVkOiB0aGlzLmdldENvbHVtbnMoaXRlbVR5cGUpLCBtaXNzaW5nOiBbXX07XG5cblx0XHRcdHJldHVybiB7Y2FjaGVkOiB7fSwgbWlzc2luZzogdHJ1ZX07XG5cdFx0fVxuXG5cdFx0Y29uc3QgcmVzcG9uc2VBY2N1bXVsYXRvciA9IHt9O1xuXHRcdGNvbnN0IHJlcXVlc3RBY2N1bXVsYXRvcjogUmVzcG9uc2VDb2x1bW5bXSA9IFtdO1xuXG5cdFx0dGhpcy5yZXRyaWV2ZUNvbHVtbnMoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXF1ZXN0QWNjdW11bGF0b3IsIHJlc3BvbnNlQWNjdW11bGF0b3IpO1xuXG5cdFx0cmV0dXJuIHtjYWNoZWQ6IHJlc3BvbnNlQWNjdW11bGF0b3IsIG1pc3Npbmc6IHJlcXVlc3RBY2N1bXVsYXRvcn07XG5cdH1cblxuXHRjb250YWluc0FsbCAoaXRlbVR5cGU6IEl0ZW1UeXBlKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuYWxsQ29sdW1uc1tpdGVtVHlwZV0gPT09IHRydWU7XG5cdH1cblxuXHRnZXRDb2x1bW5zIChpdGVtVHlwZTogSXRlbVR5cGUpOiBSZXNwb25zZUNvbHVtbk1hcCB7XG5cdFx0Y29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlO1xuXG5cdFx0cmV0dXJuIHtbaXRlbVR5cGVdOiBjYWNoZVtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCA/IFtdIDogY2FjaGVbaXRlbVR5cGVdfTtcblx0fVxuXG5cdHByaXZhdGUgcmV0cmlldmVDb2x1bW5zIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5bXSxcblx0XHRyZXF1ZXN0QWNjdW11bGF0b3I6IEFwaVJlcXVlc3RDb2x1bW5bXSxcblx0XHRyZXNwb25zZUFjY3VtdWxhdG9yOiBSZXNwb25zZUNvbHVtbk1hcFxuXHQpOiB2b2lkIHtcblx0XHQvLyBhbHdheXMgcmV0cmlldmUgdGhlIGlkIGNvbHVtblxuXHRcdHRoaXMucmV0cmlldmVDb2x1bW4oaXRlbVR5cGUsICdpZCcsIHJlcXVlc3RBY2N1bXVsYXRvciwgcmVzcG9uc2VBY2N1bXVsYXRvcik7XG5cblx0XHRmb3IgKGNvbnN0IHJlcXVlc3RDb2x1bW4gb2YgcmVxdWVzdENvbHVtbnMpXG5cdFx0XHR0aGlzLnJldHJpZXZlQ29sdW1uKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1uLCByZXF1ZXN0QWNjdW11bGF0b3IsIHJlc3BvbnNlQWNjdW11bGF0b3IpO1xuXHR9XG5cblx0cHJpdmF0ZSByZXRyaWV2ZUNvbHVtbiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHJlcXVlc3RDb2x1bW46IEFwaVJlcXVlc3RDb2x1bW4sXG5cdFx0cmVxdWVzdEFjY3VtdWxhdG9yOiBSZXNwb25zZUNvbHVtbltdLFxuXHRcdHJlc3BvbnNlQWNjdW11bGF0b3I6IFJlc3BvbnNlQ29sdW1uTWFwXG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1uVXRpbC5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XG5cdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW4gPSB0aGlzLmdldENvbHVtbihpdGVtVHlwZSwgY29sdW1uLmlkKTtcblxuXHRcdGlmIChyZXNwb25zZUNvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXF1ZXN0QWNjdW11bGF0b3IucHVzaChyZXF1ZXN0Q29sdW1uKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAocmVzcG9uc2VBY2N1bXVsYXRvcltpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJlc3BvbnNlQWNjdW11bGF0b3JbaXRlbVR5cGVdID0ge307XG5cblx0XHRyZXNwb25zZUFjY3VtdWxhdG9yW2l0ZW1UeXBlXVtjb2x1bW4uaWRdID0gcmVzcG9uc2VDb2x1bW47XG5cblx0XHRpZiAoY29sdW1uLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybjtcblxuXHRcdGNvbnN0IG1pc3NpbmdEZXJpdmVkOiBSZXNwb25zZUNvbHVtbltdID0gW107XG5cblx0XHR0aGlzLnJldHJpZXZlQ29sdW1ucyhyZXNwb25zZUNvbHVtbi5pdGVtVHlwZSwgY29sdW1uLmNoaWxkcmVuLCBtaXNzaW5nRGVyaXZlZCwgcmVzcG9uc2VBY2N1bXVsYXRvcik7XG5cblx0XHRpZiAobWlzc2luZ0Rlcml2ZWQubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0cmVxdWVzdEFjY3VtdWxhdG9yLnB1c2goe1tjb2x1bW4uaWRdOiBtaXNzaW5nRGVyaXZlZH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRDb2x1bW4gKGl0ZW1UeXBlOiBJdGVtVHlwZSwgY29sdW1uSWQ6IHN0cmluZyk6IFJlc3BvbnNlQ29sdW1uIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGVbaXRlbVR5cGVdO1xuXG5cdFx0aWYgKGNhY2hlID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm47XG5cblx0XHRyZXR1cm4gY2FjaGVbY29sdW1uSWRdO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5JbmZvLCBDb2x1bW5TZXQgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENvbHVtbkluZm9GYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7XG5cdEFwaVJlcXVlc3RDb2x1bW4sXG5cdEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRDb2x1bW5FeHBhbnNpb25SZXN1bHQsXG5cdEl0ZW1UeXBlLFxuXHRSZXNwb25zZUNvbHVtbk1hcCxcblx0Um9vdENvbHVtbk1hcFxufSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IGdldEZpcnN0UHJvcGVydHkgfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uRXhwYW5zaW9uIHtcblx0ZXhwYW5zaW9uTWFwOiB7W2NvbHVtblNldElkOiBzdHJpbmddOiBDb2x1bW5FeHBhbnNpb25SZXN1bHQgfCBudWxsfSA9IHt9O1xuXHRleHBhbnNpb25NYXBTaXplOiBudW1iZXIgPSAwO1xuXHRyZXF1ZXN0Q29sdW1uc1RydWU6IGJvb2xlYW47XG5cdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1uW107XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sdW1uSW5mb0ZhY3Rvcnk6IENvbHVtbkluZm9GYWN0b3J5LFxuXHRcdHB1YmxpYyBpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRcdHB1YmxpYyByZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwXG5cdCkge1xuXHRcdGlmIChyZXF1ZXN0Q29sdW1ucyA9PT0gdHJ1ZSkge1xuXHRcdFx0Ly8gcmVxdWVzdENvbHVtbnMgc2hvdWxkIGFsd2F5cyBiZSBhbiBhcnJheSwgd2hlbiBpdCBpcyB0cnVlIGRlcml2ZWQgY29sdW1uIGluZm9ybWF0aW9uIHdpbGwgYmUgbG9zdFxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUgPSB0cnVlO1xuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1ucyA9IFtdO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHJlc3BvbnNlQ29sdW1uc1tpdGVtVHlwZV0pXG5cdFx0XHRcdHRoaXMucmVxdWVzdENvbHVtbnMucHVzaChjb2x1bW5JZCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbnNUcnVlID0gZmFsc2U7XG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zID0gcmVxdWVzdENvbHVtbnM7XG5cdFx0fVxuXHR9XG5cblx0cnVuIChjb2x1bW5TZXQ6IENvbHVtblNldCk6IENvbHVtbkV4cGFuc2lvblJlc3VsdCB8IG51bGwge1xuXHRcdGNvbnN0IGV4cGFuc2lvbk1hcCA9IHRoaXMuZXhwYW5zaW9uTWFwO1xuXHRcdGNvbnN0IGNvbHVtblNldElkID0gY29sdW1uU2V0LmlkO1xuXG5cdFx0aWYgKGV4cGFuc2lvbk1hcFtjb2x1bW5TZXRJZF0gIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBleHBhbnNpb25NYXBbY29sdW1uU2V0SWRdO1xuXG5cdFx0dGhpcy5leHBhbnNpb25NYXBTaXplKys7XG5cblx0XHRyZXR1cm4gZXhwYW5zaW9uTWFwW2NvbHVtblNldElkXSA9IGNvbHVtblNldC5pc1N1cGVyc2V0T2YodGhpcy5yZXF1ZXN0Q29sdW1ucykgP1xuXHRcdFx0bnVsbCA6XG5cdFx0XHRjb2x1bW5TZXQuZXhwYW5kKHRoaXMucmVxdWVzdENvbHVtbnMsIHRoaXMucmVxdWVzdENvbHVtbnNUcnVlLCB0aGlzLnJlc3BvbnNlQ29sdW1ucyk7XG5cdH1cblxuXHRhZ2dyZWdhdGVSb290Q29sdW1ucyAoKTogQ29sdW1uSW5mb1tdIHtcblx0XHRjb25zdCBleHBhbnNpb25NYXAgPSB0aGlzLmV4cGFuc2lvbk1hcDtcblxuXHRcdGlmICh0aGlzLmV4cGFuc2lvbk1hcFNpemUgPT09IDEpIHtcblx0XHRcdGNvbnN0IGV4cGFuc2lvblJlc3VsdCA9IGV4cGFuc2lvbk1hcFtnZXRGaXJzdFByb3BlcnR5KGV4cGFuc2lvbk1hcCkgYXMgc3RyaW5nXTtcblxuXHRcdFx0cmV0dXJuIGV4cGFuc2lvblJlc3VsdCAhPT0gbnVsbCA/IGV4cGFuc2lvblJlc3VsdC5kaWZmZXJlbmNlLnJvb3QgOiBbXTtcblx0XHR9XG5cblx0XHRjb25zdCByb290Q29sdW1uTWFwOiBSb290Q29sdW1uTWFwID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtblNldElkIGluIGV4cGFuc2lvbk1hcCkge1xuXHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gZXhwYW5zaW9uTWFwW2NvbHVtblNldElkXTtcblxuXHRcdFx0aWYgKGNvbHVtbkV4cGFuc2lvbiA9PT0gbnVsbClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdHRoaXMuZXhwYW5kUm9vdENvbHVtbk1hcChjb2x1bW5FeHBhbnNpb24uZGlmZmVyZW5jZS5yb290LCByb290Q29sdW1uTWFwKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5jb2x1bW5JbmZvRmFjdG9yeS5jb25zdHJ1Y3RGcm9tUm9vdE1hcChyb290Q29sdW1uTWFwKTtcblx0fVxuXG5cdHByaXZhdGUgZXhwYW5kUm9vdENvbHVtbk1hcCAoY29sdW1uczogQ29sdW1uSW5mb1tdLCBkZXN0aW5hdGlvbjogUm9vdENvbHVtbk1hcCkge1xuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uLmlkO1xuXG5cdFx0XHRpZiAoZGVzdGluYXRpb25bY29sdW1uSWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtbklkXSA9IHthcGlDb2x1bW46IGNvbHVtbi5hcGlDb2x1bW4sIGNoaWxkcmVuOiB7fX07XG5cblx0XHRcdHRoaXMuZXhwYW5kUm9vdENvbHVtbk1hcChjb2x1bW4uY2hpbGRyZW4sIGRlc3RpbmF0aW9uW2NvbHVtbklkXS5jaGlsZHJlbik7XG5cdFx0fVxuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5DYWNoZSwgQ29sdW1uVXRpbCB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7XG5cdEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRJdGVtVHlwZSxcblx0UHJvbWlzZUludGVyZmFjZSxcblx0UmVzcG9uc2VDb2x1bW4sXG5cdFJlc3BvbnNlQ29sdW1uTWFwXG59IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIENvbHVtbkhhbmRsZXIge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZSxcblx0XHRwcml2YXRlIGNhY2hlOiBDb2x1bW5DYWNoZSxcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWxcblx0KSB7XG5cdH1cblxuXHRzZXRDb2x1bW4gKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcmVzcG9uc2VDb2x1bW46IFJlc3BvbnNlQ29sdW1uKTogUmVzcG9uc2VDb2x1bW4ge1xuXHRcdHJldHVybiB0aGlzLmNhY2hlLnNldENvbHVtbihpdGVtVHlwZSwgcmVzcG9uc2VDb2x1bW4pO1xuXHR9XG5cblx0c2V0Q29sdW1ucyAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyxcblx0XHRyZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwXG5cdCk6IFJlc3BvbnNlQ29sdW1uTWFwIHtcblx0XHRyZXR1cm4gdGhpcy5jYWNoZS5zZXRDb2x1bW5zKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKTtcblx0fVxuXG5cdGZldGNoSXRlbVR5cGVUcmFuc2xhdGlvbnMgKGl0ZW1UeXBlczogSXRlbVR5cGVbXSk6IFByb21pc2VJbnRlcmZhY2U8e1tpdGVtVHlwZTogc3RyaW5nXTogc3RyaW5nfT4ge1xuXHRcdGNvbnN0IHByb21pc2VzOiB7W2l0ZW1UeXBlOiBzdHJpbmddOiBQcm9taXNlSW50ZXJmYWNlPFJlc3BvbnNlQ29sdW1uTWFwPn0gPSB7fTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgb2YgaXRlbVR5cGVzKVxuXHRcdFx0cHJvbWlzZXNbaXRlbVR5cGVdID0gdGhpcy5mZXRjaChpdGVtVHlwZSwgWydpZCddKTtcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChwcm9taXNlcylcblx0XHRcdC50aGVuKFxuXHRcdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgcmVzdWx0OiB7W2l0ZW1UeXBlOiBzdHJpbmddOiBzdHJpbmd9ID0ge307XG5cblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHJlc3BvbnNlKVxuXHRcdFx0XHRcdFx0cmVzdWx0W2l0ZW1UeXBlXSA9IHJlc3BvbnNlW2l0ZW1UeXBlXVtpdGVtVHlwZV0uaWQubmFtZTtcblxuXHRcdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0KTtcblx0fVxuXG5cdHJlcXVlc3QgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRjb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyxcblx0XHRwYXJhbXMgPSB7ZmlsdGVyOiBmYWxzZX1cblx0KTogUHJvbWlzZUludGVyZmFjZTxSZXNwb25zZUNvbHVtbk1hcD4ge1xuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLmNvbHVtbnMoaXRlbVR5cGUsIHtbaXRlbVR5cGVdOiBjb2x1bW5zfSwgcGFyYW1zKS50aGVuKFxuXHRcdFx0Y29sdW1uUmVzb3VyY2UgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5jYWNoZS5zZXRDb2x1bW5zKFxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdGNvbHVtbnMsXG5cdFx0XHRcdFx0Y29sdW1uUmVzb3VyY2UuZmV0Y2hDb2x1bW5zT2JqZWN0KClcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0ZmV0Y2ggKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLCBwYXJhbXM/OiBhbnkpOiBQcm9taXNlSW50ZXJmYWNlPFJlc3BvbnNlQ29sdW1uTWFwPiB7XG5cdFx0Y29uc3QgY29sdW1uUmVzb3VyY2UgPSB0aGlzLmNhY2hlLnJldHJpZXZlKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucyk7XG5cblx0XHRpZiAoY29sdW1uUmVzb3VyY2UubWlzc2luZyAhPT0gdHJ1ZSAmJiBjb2x1bW5SZXNvdXJjZS5taXNzaW5nLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oY29sdW1uUmVzb3VyY2UuY2FjaGVkKTtcblxuXHRcdHJldHVybiB0aGlzLnJlcXVlc3QoaXRlbVR5cGUsIGNvbHVtblJlc291cmNlLm1pc3NpbmcsIHBhcmFtcykudGhlbihcblx0XHRcdHJlc3BvbnNlQ29sdW1ucyA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXNwb25zZUNvbHVtbnMoXG5cdFx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zLFxuXHRcdFx0XHRcdGNvbHVtblJlc291cmNlLmNhY2hlZFxuXHRcdFx0XHQpLm1lcmdlZDtcblx0XHRcdH1cblx0XHQpO1xuXHR9XG5cblx0ZmV0Y2hBbGwgKGl0ZW1UeXBlOiBJdGVtVHlwZSk6IFByb21pc2VJbnRlcmZhY2U8UmVzcG9uc2VDb2x1bW5NYXA+IHtcblx0XHRpZiAodGhpcy5jYWNoZS5jb250YWluc0FsbChpdGVtVHlwZSkpXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKHRoaXMuY2FjaGUuZ2V0Q29sdW1ucyhpdGVtVHlwZSkpO1xuXG5cdFx0cmV0dXJuIHRoaXMucmVxdWVzdChpdGVtVHlwZSwgdHJ1ZSk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENPTFVNTl9TRVBFUkFUT1IgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgSXRlbVR5cGUsIFJlc3BvbnNlQ29sdW1uIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uSW5mbyB7XG5cdGlkOiBzdHJpbmc7XG5cdGxldmVsOiBudW1iZXI7XG5cdHBhdGg6IHN0cmluZztcblx0dGFpbFBhdGg6IHN0cmluZztcblx0aXRlbVR5cGU6IEl0ZW1UeXBlIHwgbnVsbCA9IG51bGw7XG5cdGNoaWxkcmVuOiBDb2x1bW5JbmZvW10gPSBbXTtcblx0aXNMZWFmOiBib29sZWFuID0gdHJ1ZTtcblxuXHRjb25zdHJ1Y3RvciAocmVhZG9ubHkgYXBpQ29sdW1uOiBSZXNwb25zZUNvbHVtbiwgcmVhZG9ubHkgcGFyZW50OiBDb2x1bW5JbmZvIHwgbnVsbCA9IG51bGwpIHtcblx0XHRjb25zdCBjb2x1bW5JZCA9IGFwaUNvbHVtbi5pZDtcblxuXHRcdHRoaXMuaWQgPSBjb2x1bW5JZDtcblxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpIHtcblx0XHRcdHRoaXMubGV2ZWwgPSAwO1xuXHRcdFx0dGhpcy5wYXRoID0gY29sdW1uSWQ7XG5cdFx0XHR0aGlzLnRhaWxQYXRoID0gJyc7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMubGV2ZWwgPSBwYXJlbnQubGV2ZWwgKyAxO1xuXHRcdFx0dGhpcy5wYXRoID0gcGFyZW50LnBhdGggKyBDT0xVTU5fU0VQRVJBVE9SICsgY29sdW1uSWQ7XG5cdFx0XHR0aGlzLnRhaWxQYXRoID0gcGFyZW50LmxldmVsID09PSAwID9cblx0XHRcdFx0Y29sdW1uSWQgOlxuXHRcdFx0XHRwYXJlbnQudGFpbFBhdGggKyBDT0xVTU5fU0VQRVJBVE9SICsgY29sdW1uSWQ7XG5cdFx0fVxuXHR9XG5cblx0c2V0Q2hpbGRyZW4gKGl0ZW1UeXBlOiBJdGVtVHlwZSwgY2hpbGRyZW46IENvbHVtbkluZm9bXSk6IHRoaXMge1xuXHRcdHRoaXMuaXRlbVR5cGUgPSBpdGVtVHlwZTtcblx0XHR0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47XG5cdFx0dGhpcy5pc0xlYWYgPSBmYWxzZTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5IYW5kbGVyLCBDb2x1bW5JbmZvLCBDb2x1bW5VdGlsLCBSZXF1ZXN0Q29sdW1uTWVyZ2VSZXN1bHQgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENvbHVtbkluZm9GYWN0b3J5LCBDb2x1bW5TZXRGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7XG5cdEFwaVJlcXVlc3RDb2x1bW4sXG5cdEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRDb2x1bW5FeHBhbnNpb25SZXN1bHQsXG5cdEl0ZW1UeXBlLFxuXHRSZXNwb25zZUNvbHVtbk1hcCwgUm9vdENvbHVtbk1hcFxufSBmcm9tICcuLi90eXBlcyc7XG5cbmNvbnN0IGVtcHR5T2JqZWN0ID0ge307XG5sZXQgY3VycmVudElkID0gMDtcblxuZXhwb3J0IGNsYXNzIENvbHVtblNldCB7XG5cdGlkID0gKytjdXJyZW50SWQ7XG5cblx0cmVxdWVzdENvbHVtbnNUcnVlOiBib29sZWFuO1xuXHRyZXNwb25zZTogUmVzcG9uc2VDb2x1bW5NYXAgPSBlbXB0eU9iamVjdDtcblxuXHRsaW5rOiBDb2x1bW5JbmZvIHwgbnVsbCA9IG51bGw7XG5cdG1haW46IENvbHVtbkluZm9bXSA9IFtdO1xuXHRkZXJpdmVkOiBDb2x1bW5JbmZvW10gPSBbXTtcblx0cm9vdDogQ29sdW1uSW5mb1tdID0gW107XG5cdGxlYWY6IENvbHVtbkluZm9bXSA9IFtdO1xuXHRmb3JtYXR0ZWQ6IHttYWluOiBDb2x1bW5JbmZvW10sIGRlcml2ZWQ6IENvbHVtbkluZm9bXX0gPSB7bWFpbjogW10sIGRlcml2ZWQ6IFtdfTtcblx0ZmlsdGVyZWQ6IENvbHVtbkluZm9bXSA9IFtdO1xuXHRjdXN0b206IENvbHVtbkluZm9bXSA9IFtdO1xuXHRzZWFyY2hhYmxlOiBDb2x1bW5JbmZvW10gPSBbXTtcblx0aXRlbTogQ29sdW1uSW5mb1tdID0gW107XG5cdG5vdEl0ZW06IENvbHVtbkluZm9bXSA9IFtdO1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsLFxuXHRcdHByaXZhdGUgY29sdW1uSW5mb0ZhY3Rvcnk6IENvbHVtbkluZm9GYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcblx0XHRwdWJsaWMgaXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHB1YmxpYyByZXF1ZXN0OiBBcGlSZXF1ZXN0Q29sdW1ucyxcblx0KSB7XG5cdFx0dGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUgPSB0aGlzLnJlcXVlc3QgPT09IHRydWU7XG5cdH1cblxuXHR0b0pTT04gKCkge1xuXHRcdGNvbnN0IHBhcnNlQ29sdW1ucyA9IChjb2x1bW5zOiBDb2x1bW5JbmZvW10pID0+IGNvbHVtbnMubWFwKGMgPT4gYy5pZCk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0bWFpbjogcGFyc2VDb2x1bW5zKHRoaXMubWFpbiksXG5cdFx0XHRkZXJpdmVkOiBwYXJzZUNvbHVtbnModGhpcy5kZXJpdmVkKVxuXHRcdH07XG5cdH1cblxuXHRyZXNvbHZlIChyZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwLCBlbmFibGVDYWNoaW5nID0gdHJ1ZSwgaW5jbHVkZUlkQ29sdW1uID0gdHJ1ZSk6IHRoaXMge1xuXHRcdGlmICh0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSlcblx0XHRcdHRoaXMucHJvY2Vzc1Jlc3BvbnNlQ29sdW1ucyhyZXNwb25zZUNvbHVtbnMsIGVuYWJsZUNhY2hpbmcpO1xuXHRcdGVsc2Vcblx0XHRcdHRoaXMucHJvY2Vzc1JlcXVlc3RDb2x1bW5zKHJlc3BvbnNlQ29sdW1ucywgZW5hYmxlQ2FjaGluZywgaW5jbHVkZUlkQ29sdW1uKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZXhwYW5kUmVxdWVzdENvbHVtbnMgKGNvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zKTogdm9pZCB7XG5cdFx0Y29uc3QgbWVyZ2VkUmVxdWVzdENvbHVtbnMgPSB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXF1ZXN0Q29sdW1ucyh0aGlzLnJlcXVlc3QsIGNvbHVtbnMpLm1lcmdlZDtcblxuXHRcdHRoaXMucmVxdWVzdCA9IG1lcmdlZFJlcXVlc3RDb2x1bW5zO1xuXHRcdHRoaXMucmVxdWVzdENvbHVtbnNUcnVlID0gbWVyZ2VkUmVxdWVzdENvbHVtbnMgPT09IHRydWU7XG5cdH1cblxuXHRpc1N1cGVyc2V0T2YgKGNvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zKTogYm9vbGVhbiB7XG5cdFx0aWYgKGNvbHVtbnMgPT09IHRydWUpXG5cdFx0XHRyZXR1cm4gdGhpcy5yZXF1ZXN0Q29sdW1uc1RydWU7XG5cblx0XHRjb25zdCBjb2x1bW5VdGlsID0gdGhpcy5jb2x1bW5VdGlsO1xuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0gdGhpcy5yZXF1ZXN0O1xuXG5cdFx0aWYgKHJlcXVlc3RDb2x1bW5zID09PSB0cnVlKVxuXHRcdFx0cmV0dXJuICFjb2x1bW5VdGlsLmNvbnRhaW5zRGVyaXZlZENvbHVtbnMoY29sdW1ucyk7XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cdFx0XHRpZiAoIWNvbHVtblV0aWwuY29udGFpbnNDb2x1bW4oY29sdW1uLCByZXF1ZXN0Q29sdW1ucykpXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8vIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIHJlcXVlc3RDb2x1bW5zIGVxdWFscyAndHJ1ZSdcblx0cHJpdmF0ZSBwcm9jZXNzUmVzcG9uc2VDb2x1bW5zIChyZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwLCBlbmFibGVDYWNoaW5nOiBib29sZWFuKTogdm9pZCB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSB0aGlzLml0ZW1UeXBlO1xuXG5cdFx0dGhpcy5yZXF1ZXN0ID0gW107XG5cdFx0dGhpcy5yZXNwb25zZSA9IGVuYWJsZUNhY2hpbmcgP1xuXHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLnNldENvbHVtbnModGhpcy5pdGVtVHlwZSwgdHJ1ZSwgcmVzcG9uc2VDb2x1bW5zKSA6XG5cdFx0XHRyZXNwb25zZUNvbHVtbnM7XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHJlc3BvbnNlQ29sdW1uc1tpdGVtVHlwZV0pIHtcblx0XHRcdHRoaXMuZ3JvdXBDb2x1bW5JbmZvKHRoaXMuY29sdW1uSW5mb0ZhY3RvcnkuY29uc3RydWN0KHJlc3BvbnNlQ29sdW1uc1tpdGVtVHlwZV1bY29sdW1uSWRdLCBudWxsKSk7XG5cdFx0XHR0aGlzLnJlcXVlc3QucHVzaChjb2x1bW5JZCk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgcmVxdWVzdGNvbHVtbnMgZG9lcyAqbm90KiBlcXVhbCAndHJ1ZSdcblx0cHJpdmF0ZSBwcm9jZXNzUmVxdWVzdENvbHVtbnMgKFxuXHRcdHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXAsXG5cdFx0ZW5hYmxlQ2FjaGluZzogYm9vbGVhbixcblx0XHRpbmNsdWRlSWRDb2x1bW46IGJvb2xlYW5cblx0KTogdm9pZCB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSB0aGlzLml0ZW1UeXBlO1xuXHRcdGNvbnN0IHJvb3RDb2x1bW5NYXA6IFJvb3RDb2x1bW5NYXAgPSB7fTtcblxuXHRcdHRoaXMuY3JlYXRlUm9vdENvbHVtbk1hcChcblx0XHRcdHRoaXMucmVxdWVzdCBhcyBBcGlSZXF1ZXN0Q29sdW1uW10sIC8vIHdlIGNhbiBhc3N1bWUgcmVxdWVzdENvbHVtbnMgaXMgYW4gYXJyYXkgaGVyZVxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRyZXNwb25zZUNvbHVtbnMsXG5cdFx0XHRyb290Q29sdW1uTWFwLFxuXHRcdFx0ZW5hYmxlQ2FjaGluZ1xuXHRcdCk7XG5cblx0XHRpZiAoaW5jbHVkZUlkQ29sdW1uKVxuXHRcdFx0dGhpcy5jcmVhdGVSb290Q29sdW1uTWFwKFsnaWQnXSwgaXRlbVR5cGUsIHJlc3BvbnNlQ29sdW1ucywgcm9vdENvbHVtbk1hcCwgZW5hYmxlQ2FjaGluZyk7XG5cblx0XHR0aGlzLnJlc3BvbnNlID0ge307XG5cblx0XHR0aGlzLnByb2Nlc3NDb2x1bW5JbmZvKHRoaXMuY29sdW1uSW5mb0ZhY3RvcnkuY29uc3RydWN0RnJvbVJvb3RNYXAocm9vdENvbHVtbk1hcCksIGl0ZW1UeXBlKTtcblx0fVxuXG5cdHByaXZhdGUgcHJvY2Vzc0NvbHVtbkluZm8gKGNvbHVtbkluZm9PYmplY3RzOiBDb2x1bW5JbmZvW10sIGl0ZW1UeXBlOiBJdGVtVHlwZSk6IHZvaWQge1xuXHRcdGNvbnN0IHJlc3BvbnNlID0gdGhpcy5yZXNwb25zZTtcblxuXHRcdGlmIChyZXNwb25zZVtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJlc3BvbnNlW2l0ZW1UeXBlXSA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JbmZvIG9mIGNvbHVtbkluZm9PYmplY3RzKSB7XG5cdFx0XHRyZXNwb25zZVtpdGVtVHlwZV1bY29sdW1uSW5mby5pZF0gPSBjb2x1bW5JbmZvLmFwaUNvbHVtbjtcblx0XHRcdHRoaXMuZ3JvdXBDb2x1bW5JbmZvKGNvbHVtbkluZm8pO1xuXG5cdFx0XHRpZiAoIWNvbHVtbkluZm8uaXNMZWFmKVxuXHRcdFx0XHR0aGlzLnByb2Nlc3NDb2x1bW5JbmZvKGNvbHVtbkluZm8uY2hpbGRyZW4sIGNvbHVtbkluZm8uaXRlbVR5cGUhKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGNyZWF0ZVJvb3RDb2x1bW5NYXAgKFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1uW10sXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXAsXG5cdFx0cm9vdENvbHVtbk1hcDogUm9vdENvbHVtbk1hcCxcblx0XHRlbmFibGVDYWNoaW5nOiBib29sZWFuXG5cdCk6IHZvaWQge1xuXHRcdGZvciAoY29uc3QgcmVxdWVzdENvbHVtbiBvZiByZXF1ZXN0Q29sdW1ucykge1xuXHRcdFx0Y29uc3Qge2lkOiBjb2x1bW5JZCwgY2hpbGRyZW59ID0gdGhpcy5jb2x1bW5VdGlsLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcblxuXHRcdFx0bGV0IHJlc3BvbnNlQ29sdW1uO1xuXG5cdFx0XHRpZiAocmVzcG9uc2VDb2x1bW5zW2l0ZW1UeXBlXSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRyZXNwb25zZUNvbHVtbiA9IHJlc3BvbnNlQ29sdW1uc1tpdGVtVHlwZV1bY29sdW1uSWRdO1xuXG5cdFx0XHRpZiAocmVzcG9uc2VDb2x1bW4gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25zb2xlLndhcm4oJ05vIGFwaSBjb2x1bW4gZm9yIHJlcXVlc3QgY29sdW1uJywgY29sdW1uSWQsICdmb3IgaXRlbVR5cGUnLCBpdGVtVHlwZSk7XG5cblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChlbmFibGVDYWNoaW5nKVxuXHRcdFx0XHRyZXNwb25zZUNvbHVtbiA9IHRoaXMuY29sdW1uSGFuZGxlci5zZXRDb2x1bW4oaXRlbVR5cGUsIHJlc3BvbnNlQ29sdW1uKTtcblxuXHRcdFx0aWYgKHJvb3RDb2x1bW5NYXBbY29sdW1uSWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdHJvb3RDb2x1bW5NYXBbY29sdW1uSWRdID0ge2FwaUNvbHVtbjogcmVzcG9uc2VDb2x1bW4sIGNoaWxkcmVuOiB7fX07XG5cblx0XHRcdGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDApXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHR0aGlzLmNyZWF0ZVJvb3RDb2x1bW5NYXAoXG5cdFx0XHRcdGNoaWxkcmVuLFxuXHRcdFx0XHRyZXNwb25zZUNvbHVtbi5pdGVtVHlwZSxcblx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zLFxuXHRcdFx0XHRyb290Q29sdW1uTWFwW2NvbHVtbklkXS5jaGlsZHJlbixcblx0XHRcdFx0ZW5hYmxlQ2FjaGluZ1xuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGdyb3VwQ29sdW1uSW5mbyAoY29sdW1uSW5mbzogQ29sdW1uSW5mbyk6IHZvaWQge1xuXHRcdGNvbnN0IGNvbHVtblV0aWwgPSB0aGlzLmNvbHVtblV0aWw7XG5cdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW4gPSBjb2x1bW5JbmZvLmFwaUNvbHVtbjtcblx0XHRjb25zdCBpc0Rlcml2ZWQgPSBjb2x1bW5JbmZvLnBhcmVudCAhPT0gbnVsbDtcblxuXHRcdGlmIChpc0Rlcml2ZWQpXG5cdFx0XHR0aGlzLmRlcml2ZWQucHVzaChjb2x1bW5JbmZvKTtcblx0XHRlbHNlIHtcblx0XHRcdHRoaXMubWFpbi5wdXNoKGNvbHVtbkluZm8pO1xuXHRcdFx0Ly8gd2UgY291bGQgcG9zc2libHkgYWRkIGRlcml2ZWQgY29sdW1ucyB0byAnbm90SXRlbSdcblx0XHRcdHRoaXNbY29sdW1uVXRpbC5pc0l0ZW1Db2x1bW4ocmVzcG9uc2VDb2x1bW4pID8gJ2l0ZW0nIDogJ25vdEl0ZW0nXS5wdXNoKGNvbHVtbkluZm8pO1xuXG5cdFx0XHRpZiAoIWNvbHVtbkluZm8uaXNMZWFmKVxuXHRcdFx0XHR0aGlzLnJvb3QucHVzaChjb2x1bW5JbmZvKTtcblx0XHR9XG5cblx0XHRpZiAoY29sdW1uVXRpbC5pc0Zvcm1hdHRlZENvbHVtbihyZXNwb25zZUNvbHVtbikpXG5cdFx0XHR0aGlzLmZvcm1hdHRlZFtpc0Rlcml2ZWQgPyAnZGVyaXZlZCcgOiAnbWFpbiddLnB1c2goY29sdW1uSW5mbyk7XG5cblx0XHRpZiAoY29sdW1uVXRpbC5pc0ZpbHRlcmVkQ29sdW1uKHJlc3BvbnNlQ29sdW1uKSlcblx0XHRcdHRoaXMuZmlsdGVyZWQucHVzaChjb2x1bW5JbmZvKTtcblxuXHRcdGlmIChjb2x1bW5VdGlsLmlzU2VhcmNoYWJsZUNvbHVtbihyZXNwb25zZUNvbHVtbikpXG5cdFx0XHR0aGlzLnNlYXJjaGFibGUucHVzaChjb2x1bW5JbmZvKTtcblxuXHRcdGlmIChjb2x1bW5VdGlsLmlzQ3VzdG9tQ29sdW1uKHJlc3BvbnNlQ29sdW1uKSlcblx0XHRcdHRoaXMuY3VzdG9tLnB1c2goY29sdW1uSW5mbyk7XG5cblx0XHRpZiAocmVzcG9uc2VDb2x1bW4udHlwZSA9PT0gJ2xpbmsnKVxuXHRcdFx0dGhpcy5saW5rID0gY29sdW1uSW5mbztcblxuXHRcdGlmIChjb2x1bW5JbmZvLmlzTGVhZilcblx0XHRcdHRoaXMubGVhZi5wdXNoKGNvbHVtbkluZm8pO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRNZXJnZWRDb2x1bW5TZXQgKFxuXHRcdG1lcmdlZFJlcXVlc3RDb2x1bW5zOiBSZXF1ZXN0Q29sdW1uTWVyZ2VSZXN1bHQsXG5cdFx0bWVyZ2VkUmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcCxcblx0XHRyZXF1ZXN0Q29sdW1uc1RydWU6IGJvb2xlYW5cblx0KTogQ29sdW1uU2V0IHtcblx0XHRjb25zdCByZXN1bHQgPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0dGhpcy5pdGVtVHlwZSxcblx0XHRcdG1lcmdlZFJlcXVlc3RDb2x1bW5zLm1lcmdlZCxcblx0XHRcdG1lcmdlZFJlc3BvbnNlQ29sdW1uc1xuXHRcdCk7XG5cblx0XHRyZXN1bHQucmVxdWVzdENvbHVtbnNUcnVlID0gdGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUgfHwgcmVxdWVzdENvbHVtbnNUcnVlO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdG1lcmdlUmVxdWVzdENvbHVtbnMgKHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyk6IFJlcXVlc3RDb2x1bW5NZXJnZVJlc3VsdCB7XG5cdFx0cmV0dXJuIHRoaXMuY29sdW1uVXRpbC5tZXJnZVJlcXVlc3RDb2x1bW5zKHRoaXMucmVxdWVzdCwgcmVxdWVzdENvbHVtbnMpO1xuXHR9XG5cblx0bWVyZ2VSZXNwb25zZUNvbHVtbnMgKHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXApOiBSZXNwb25zZUNvbHVtbk1hcCB7XG5cdFx0cmV0dXJuIHRoaXMuY29sdW1uVXRpbC5tZXJnZVJlc3BvbnNlQ29sdW1ucyh0aGlzLnJlc3BvbnNlLCByZXNwb25zZUNvbHVtbnMpLm1lcmdlZDtcblx0fVxuXG5cdG1lcmdlIChjb2x1bW5TZXQ6IENvbHVtblNldCk6IENvbHVtblNldCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TWVyZ2VkQ29sdW1uU2V0KFxuXHRcdFx0dGhpcy5tZXJnZVJlcXVlc3RDb2x1bW5zKGNvbHVtblNldC5yZXF1ZXN0KSxcblx0XHRcdHRoaXMubWVyZ2VSZXNwb25zZUNvbHVtbnMoY29sdW1uU2V0LnJlc3BvbnNlKSxcblx0XHRcdGNvbHVtblNldC5yZXF1ZXN0Q29sdW1uc1RydWVcblx0XHQpO1xuXHR9XG5cblx0ZXhwYW5kIChcblx0XHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMsXG5cdFx0cmVxdWVzdENvbHVtbnNUcnVlOiBib29sZWFuLFxuXHRcdHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXBcblx0KTogQ29sdW1uRXhwYW5zaW9uUmVzdWx0IHtcblx0XHRjb25zdCBtZXJnZWRSZXF1ZXN0Q29sdW1ucyA9IHRoaXMubWVyZ2VSZXF1ZXN0Q29sdW1ucyhyZXF1ZXN0Q29sdW1ucyk7XG5cdFx0Y29uc3QgbWVyZ2VkUmVzcG9uc2VDb2x1bW5zID0gdGhpcy5tZXJnZVJlc3BvbnNlQ29sdW1ucyhyZXNwb25zZUNvbHVtbnMpO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdG1lcmdlZDogdGhpcy5nZXRNZXJnZWRDb2x1bW5TZXQobWVyZ2VkUmVxdWVzdENvbHVtbnMsIG1lcmdlZFJlc3BvbnNlQ29sdW1ucywgcmVxdWVzdENvbHVtbnNUcnVlKSxcblx0XHRcdGRpZmZlcmVuY2U6IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRcdHRoaXMuaXRlbVR5cGUsXG5cdFx0XHRcdG1lcmdlZFJlcXVlc3RDb2x1bW5zLmRpZmZlcmVuY2UsXG5cdFx0XHRcdG1lcmdlZFJlc3BvbnNlQ29sdW1ucywgLy8gd2UgbmVlZCB0byBiZSBhYmxlIHRvIGxvb2sgdXAgdGhlIHBhcmVudCBvZiBkZXJpdmVkIGNvbHVtbnNcblx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdGZhbHNlXG5cdFx0XHQpXG5cdFx0fTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sdW1uU2V0IH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0Q29sdW1ucyB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIENvbHVtblN1YnNldENhY2hlIHtcblx0cHJpdmF0ZSBjYWNoZToge1tjb2x1bW5TZXRJZDogbnVtYmVyXTogYm9vbGVhbn0gPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHVibGljIHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1uc1xuXHQpIHtcblxuXHR9XG5cblx0cnVuIChjb2x1bW5TZXQ6IENvbHVtblNldCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblx0XHRjb25zdCBjb2x1bW5TZXRJZCA9IGNvbHVtblNldC5pZDtcblxuXHRcdGlmIChjYWNoZVtjb2x1bW5TZXRJZF0gIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBjYWNoZVtjb2x1bW5TZXRJZF07XG5cblx0XHRyZXR1cm4gY2FjaGVbY29sdW1uU2V0SWRdID0gY29sdW1uU2V0LmlzU3VwZXJzZXRPZih0aGlzLnJlcXVlc3RDb2x1bW5zKTtcblx0fVxufVxuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XG5cbmltcG9ydCB7IENPTFVNTl9TRVBFUkFUT1IsIFJFTkRFUl9BU19TRVBFUkFUT1IgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdENvbHVtbiwgQXBpUmVxdWVzdENvbHVtbnMsIEl0ZW1UeXBlLCBSZXNwb25zZUNvbHVtbiwgUmVzcG9uc2VDb2x1bW5NYXAgfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IGV4dGVuZCwgaXNEZWZpbmVkIH0gZnJvbSAnLi9VdGlsJztcblxuZXhwb3J0IHR5cGUgUmVxdWVzdENvbHVtbk1lcmdlUmVzdWx0PFxuXHRUIGV4dGVuZHMgQXBpUmVxdWVzdENvbHVtbnMgPSBBcGlSZXF1ZXN0Q29sdW1ucyxcblx0VSBleHRlbmRzIEFwaVJlcXVlc3RDb2x1bW5zID0gQXBpUmVxdWVzdENvbHVtbnNcbj4gPSB7bWVyZ2VkOiBULCBkaWZmZXJlbmNlOiBVfTtcblxuZXhwb3J0IGNsYXNzIENvbHVtblV0aWwge1xuXHRjb25zdHJ1Y3RvciAoKSB7XG5cdH1cblxuXHRnZXRDb2x1bW5QYXRoIChjb2x1bW5zOiBSZXNwb25zZUNvbHVtbltdLCByZW5kZXJBczogbnVsbCB8IHN0cmluZykge1xuXHRcdGxldCBzZXBhcmF0b3IgPSAnJztcblx0XHRsZXQgcmVzdWx0ID0gJyc7XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cdFx0XHRyZXN1bHQgKz0gc2VwYXJhdG9yICsgY29sdW1uLmlkO1xuXHRcdFx0c2VwYXJhdG9yID0gQ09MVU1OX1NFUEVSQVRPUjtcblx0XHR9XG5cblx0XHRpZiAocmVuZGVyQXMgIT09IG51bGwpXG5cdFx0XHRyZXN1bHQgKz0gUkVOREVSX0FTX1NFUEVSQVRPUiArIHJlbmRlckFzO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldERhdGVGb3JtYXRPcHRpb25zIChjb2x1bW5UeXBlPzogJ2RhdGV0aW1lJykge1xuXHRcdGNvbnN0IG5vdyA9IG1vbWVudCgpO1xuXG5cdFx0Y29uc3QgZm9ybWF0cyA9IHtcblx0XHRcdCdKLU0tWSc6IG5vdy5mb3JtYXQoJ0RELU1NLVlZWVknKSxcblx0XHRcdCdKLU0nOiBub3cuZm9ybWF0KCdERC1NTScpLFxuXHRcdFx0J2orRitZJzogbm93LmZvcm1hdCgnRCBNTU0gWVlZWScpLFxuXHRcdFx0J0QraitGK1knOiBub3cuZm9ybWF0KCdkZGRkIEQgTU1NIFlZWVknKSxcblx0XHRcdCdGJzogbm93LmZvcm1hdCgnTU1NJyksXG5cdFx0XHQnZic6IG5vdy5mb3JtYXQoJ01NTU0nKSxcblx0XHRcdCdEJzogbm93LmZvcm1hdCgnZGRkZCcpLFxuXHRcdFx0J2QnOiBub3cuZm9ybWF0KCdkZGQnKVxuXHRcdH07XG5cblx0XHRpZiAoY29sdW1uVHlwZSA9PT0gJ2RhdGV0aW1lJylcblx0XHRcdGV4dGVuZChmb3JtYXRzLCB7XG5cdFx0XHRcdCdKLU0tWStIOmknOiBub3cuZm9ybWF0KCdERC1NTS1ZWVlZIEhIOm1tJyksXG5cdFx0XHRcdCdKLU0rSDppJzogbm93LmZvcm1hdCgnREQtTU0gSEg6bW0nKSxcblx0XHRcdFx0J2orRitZK0g6aSc6IG5vdy5mb3JtYXQoJ0REIE1NTU0gWSBISDptbScpLFxuXHRcdFx0XHQnRCtqK0YrWStIOmknOiBub3cuZm9ybWF0KCdkZGRkIEREIE1NTSBZIEhIOm1tJyksXG5cdFx0XHRcdCdIOmknOiBub3cuZm9ybWF0KCdISDptbScpXG5cdFx0XHR9KTtcblxuXHRcdHJldHVybiBmb3JtYXRzO1xuXHR9XG5cblx0aXNTdHJpbmdDb2x1bW4gKGNvbHVtbjogUmVzcG9uc2VDb2x1bW4pOiBib29sZWFuIHtcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG5cdFx0XHRjYXNlICdlbWFpbCc6XG5cdFx0XHRjYXNlICdwaG9uZSc6XG5cdFx0XHRjYXNlICd1cmwnOlxuXHRcdFx0Y2FzZSAndGV4dCc6XG5cdFx0XHRjYXNlICdsb25ndGV4dCc6XG5cdFx0XHRjYXNlICd0ZXh0cmVwbGFjZSc6XG5cdFx0XHRcdC8vIGNhc2UgJ2h0bWwnOiAvLyBUT0RPOiBzb3J0IG9uIGZpbHRlcmVkIHZhbHVlXG5cdFx0XHRcdC8vIGNhc2UgJ2VudW0nOlxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpc0Zsb2F0Q29sdW1uIChjb2x1bW46IFJlc3BvbnNlQ29sdW1uKTogYm9vbGVhbiB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnZG91YmxlJzogLy8gZmxvYXRpbmcgcG9pbnQgdHlwZXNcblx0XHRcdGNhc2UgJ3ZvbHVtZSc6XG5cdFx0XHRjYXNlICd3ZWlnaHQnOlxuXHRcdFx0Y2FzZSAnZGlzdGFuY2UnOlxuXHRcdFx0Y2FzZSAnZGltZW5zaW9uJzpcblx0XHRcdGNhc2UgJ3Bvd2VyJzpcblx0XHRcdGNhc2UgJ2N1cnJlbnQnOlxuXHRcdFx0Y2FzZSAncHJpY2UnOlxuXHRcdFx0Y2FzZSAncGVyY2VudGFnZSc6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlzSW50Q29sdW1uIChjb2x1bW46IFJlc3BvbnNlQ29sdW1uKTogYm9vbGVhbiB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnaW50JzogLy8gaW50ZWdlciB0eXBlc1xuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcblx0XHRcdGNhc2UgJ3F1YW50aXR5Jzpcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aXNOdW1iZXJDb2x1bW4gKGNvbHVtbjogUmVzcG9uc2VDb2x1bW4pOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5pc0Zsb2F0Q29sdW1uKGNvbHVtbikgfHwgdGhpcy5pc0ludENvbHVtbihjb2x1bW4pO1xuXHR9XG5cblx0aXNDdXN0b21Db2x1bW4gKGNvbHVtbjogUmVzcG9uc2VDb2x1bW4pOiBib29sZWFuIHtcblx0XHRyZXR1cm4gY29sdW1uLmZpZWxkdHlwZSA9PT0gJ2N1c3RvbWZpZWxkJztcblx0fVxuXG5cdGlzSXRlbUNvbHVtbiAoY29sdW1uOiBSZXNwb25zZUNvbHVtbiwgaW5jbHVkZUlkID0gdHJ1ZSk6IGJvb2xlYW4ge1xuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2lkJzpcblx0XHRcdFx0cmV0dXJuIGluY2x1ZGVJZDtcblx0XHRcdGNhc2UgJ2l0ZW0nOlxuXHRcdFx0Y2FzZSAnY2hpbGQnOlxuXHRcdFx0Y2FzZSAnc2libGluZyc6XG5cdFx0XHRjYXNlICdsaW5rJzpcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aXNEYXRlQ29sdW1uIChjb2x1bW46IFJlc3BvbnNlQ29sdW1uKTogYm9vbGVhbiB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlzUmVuZGVyZWRDb2x1bW4gKGNvbHVtbjogUmVzcG9uc2VDb2x1bW4pOiBib29sZWFuIHtcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aXNGaWx0ZXJlZENvbHVtbiAoY29sdW1uOiBSZXNwb25zZUNvbHVtbik6IGJvb2xlYW4ge1xuXHRcdC8vIHVnbHkgaGFjayA6LShcblx0XHRpZiAoY29sdW1uLmlkID09PSAnc3RhZmZlbCcpXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRcdGlmIChjb2x1bW4uZ2VuZXJhdG9yICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ3ByaWNlJzpcblx0XHRcdGNhc2UgJ2Jvb2wnOlxuXHRcdFx0Y2FzZSAnZW51bSc6XG5cdFx0XHRjYXNlICdjb3VudHJ5Jzpcblx0XHRcdGNhc2UgJ3ZvbHVtZSc6XG5cdFx0XHRjYXNlICd3ZWlnaHQnOlxuXHRcdFx0Y2FzZSAnZGlzdGFuY2UnOlxuXHRcdFx0Y2FzZSAnZGltZW5zaW9uJzpcblx0XHRcdGNhc2UgJ3F1YW50aXR5Jzpcblx0XHRcdGNhc2UgJ2VtYWlsJzpcblx0XHRcdGNhc2UgJ3VybCc6XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdGNhc2UgJ3RpbWUnOlxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxuXHRcdFx0Y2FzZSAnaHRtbCc6XG5cdFx0XHRjYXNlICd0ZXh0cmVwbGFjZSc6XG5cdFx0XHRjYXNlICdsb25ndGV4dCc6XG5cdFx0XHRjYXNlICdwZXJjZW50YWdlJzpcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aXNGb3JtYXR0ZWRDb2x1bW4gKGNvbHVtbjogUmVzcG9uc2VDb2x1bW4pOiBib29sZWFuIHtcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdGNhc2UgJ3RpbWUnOlxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxuXHRcdFx0Y2FzZSAnY29sb3InOlxuXHRcdFx0Y2FzZSAnanNvbic6XG5cdFx0XHRjYXNlICdudW1iZXInOlxuXHRcdFx0Y2FzZSAnZmlsZXNpemUnOlxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpc1NlbGVjdGFibGVDb2x1bW4gKGNvbHVtbjogUmVzcG9uc2VDb2x1bW4pOiBib29sZWFuIHtcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG5cdFx0XHRjYXNlICdibG9iJzpcblx0XHRcdGNhc2UgJ2Nvb3JkaW5hdGUnOlxuXHRcdFx0Y2FzZSAnZm9yY2V1cGRhdGUnOlxuXHRcdFx0Y2FzZSAnaWQnOlxuXHRcdFx0Y2FzZSAnanNvbic6XG5cdFx0XHRjYXNlICdvcmRlcic6XG5cdFx0XHRjYXNlICdwYXJlbnRpZCc6XG5cdFx0XHRjYXNlICdwYXJlbnR0eXBlJzpcblx0XHRcdGNhc2UgJ3Bhc3N3b3JkJzpcblx0XHRcdGNhc2UgJ3Rva2VuJzpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0aGFzTG9jYXRpb25Qcm9wZXJ0eSAoY29sdW1uOiBSZXNwb25zZUNvbHVtbiwgbG9jYXRpb246IG51bWJlcik6IGJvb2xlYW4ge1xuXHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1iaXR3aXNlXG5cdFx0cmV0dXJuIChsb2NhdGlvbiAmIGNvbHVtbi5sb2NhdGlvbikgIT09IDA7XG5cdH1cblxuXHRpc0VkaXRhYmxlQ29sdW1uIChjb2x1bW46IFJlc3BvbnNlQ29sdW1uKTogYm9vbGVhbiB7XG5cdFx0aWYgKGNvbHVtbi5yZWFkT25seSlcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRpc1NlYXJjaGFibGVDb2x1bW4gKGNvbHVtbjogUmVzcG9uc2VDb2x1bW4pOiBib29sZWFuIHtcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG5cdFx0XHRjYXNlICdlbWFpbCc6XG5cdFx0XHRjYXNlICdwaG9uZSc6XG5cdFx0XHRjYXNlICd0ZXh0Jzpcblx0XHRcdGNhc2UgJ2xvbmd0ZXh0Jzpcblx0XHRcdGNhc2UgJ2h0bWwnOlxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRnZXREZWZhdWx0V2VpZ2h0IChjb2x1bW46IFJlc3BvbnNlQ29sdW1uKTogbnVtYmVyIHtcblx0XHQvLyBcdFx0XHRjb25zb2xlLmxvZygnZ2V0RGVmYXVsdFdlaWdodCcsIGNvbHVtbik7XG5cblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG5cdFx0XHRjYXNlICdkb3VibGUnOlxuXHRcdFx0Y2FzZSAncHJpY2UnOlxuXHRcdFx0Y2FzZSAnYm9vbCc6XG5cdFx0XHRjYXNlICdpbnQnOlxuXHRcdFx0Y2FzZSAncGVyY2VudGFnZSc6XG5cdFx0XHRjYXNlICdjb2xvcic6XG5cdFx0XHRjYXNlICdudW1iZXInOlxuXHRcdFx0Y2FzZSAncG93ZXInOlxuXHRcdFx0Y2FzZSAnY3VycmVudCc6XG5cdFx0XHRcdHJldHVybiAwLjU7XG5cblx0XHRcdGNhc2UgJ3VybCc6XG5cdFx0XHRjYXNlICdlbnVtJzpcblx0XHRcdGNhc2UgJ2VtYWlsJzpcblx0XHRcdGNhc2UgJ3RleHQnOlxuXHRcdFx0Y2FzZSAnaXRlbSc6XG5cdFx0XHRjYXNlICdsaW5rJzpcblx0XHRcdFx0cmV0dXJuIDEuNTtcblxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxuXHRcdFx0Y2FzZSAnaHRtbCc6XG5cdFx0XHRjYXNlICd0ZXh0cmVwbGFjZSc6XG5cdFx0XHRcdHJldHVybiAyO1xuXG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdGNhc2UgJ3RpbWUnOlxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxuXHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiAxO1xuXHRcdH1cblx0fVxuXG5cdGdldENvbXBhcmF0b3JzIChjb2x1bW46IFJlc3BvbnNlQ29sdW1uICYge3R5cGU6ICdkaW1lbnNpb24nIHwgJ3dlaWdodCcgfCAncHJpY2UnfSk6IFsnPScsICc+JywgJzwnXTtcblx0Z2V0Q29tcGFyYXRvcnMgKGNvbHVtbjogUmVzcG9uc2VDb2x1bW4gJiB7dHlwZTogJ2RhdGUnIHwgJ2RhdGV0aW1lJyB8ICd0aW1lJyB8ICdkdXJhdGlvbid9KTogWyc+JywgJzwnXTtcblx0Z2V0Q29tcGFyYXRvcnMgKGNvbHVtbjogUmVzcG9uc2VDb2x1bW4pOiBbJz0nLCAnIT0nXTtcblx0Z2V0Q29tcGFyYXRvcnMgKGNvbHVtbjogUmVzcG9uc2VDb2x1bW4pIHtcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG5cdFx0XHRjYXNlICdkaW1lbnNpb24nOlxuXHRcdFx0Y2FzZSAnd2VpZ2h0Jzpcblx0XHRcdGNhc2UgJ3ByaWNlJzpcblx0XHRcdFx0cmV0dXJuIFsnPScsICc+JywgJzwnXTtcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0Y2FzZSAndGltZSc6XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRcdHJldHVybiBbJz4nLCAnPCddO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIFsnPScsICchPSddO1xuXHRcdH1cblx0fVxuXG5cdGNvbnRhaW5zQ29sdW1uIChyZXF1ZXN0Q29sdW1uOiBBcGlSZXF1ZXN0Q29sdW1uLCBkZXN0aW5hdGlvbjogQXBpUmVxdWVzdENvbHVtbltdKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgY29sdW1uID0gdGhpcy5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XG5cdFx0Y29uc3QgY29sdW1uSW5kZXggPSB0aGlzLmZpbmRSZXF1ZXN0Q29sdW1uKGNvbHVtbi5pZCwgZGVzdGluYXRpb24pO1xuXG5cdFx0aWYgKGNvbHVtbkluZGV4ID09PSAtMSlcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdGlmIChjb2x1bW4uY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cblx0XHRpZiAodHlwZW9mIGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XSA9PT0gJ3N0cmluZycpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRmb3IgKGNvbnN0IGNoaWxkQ29sdW1uIG9mIGNvbHVtbi5jaGlsZHJlbikge1xuXHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0aWYgKCF0aGlzLmNvbnRhaW5zQ29sdW1uKGNoaWxkQ29sdW1uLCBkZXN0aW5hdGlvbltjb2x1bW5JbmRleF1bY29sdW1uLmlkXSkpXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGNvbnRhaW5zRGVyaXZlZENvbHVtbnMgKHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1uW10pOiBib29sZWFuIHtcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiByZXF1ZXN0Q29sdW1ucykge1xuXHRcdFx0aWYgKHRoaXMucGFyc2VSZXF1ZXN0Q29sdW1uKGNvbHVtbikuY2hpbGRyZW4ubGVuZ3RoID4gMClcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cmVzcG9uc2VDb2x1bW5zQXZhaWxhYmxlIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5bXSxcblx0XHRyZXNwb25zZUNvbHVtbk1hcDogUmVzcG9uc2VDb2x1bW5NYXBcblx0KTogYm9vbGVhbiB7XG5cdFx0Zm9yIChjb25zdCByZXF1ZXN0Q29sdW1uIG9mIHJlcXVlc3RDb2x1bW5zKSB7XG5cdFx0XHRjb25zdCBwYXJzZWRDb2x1bW4gPSB0aGlzLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcblx0XHRcdGNvbnN0IGNoaWxkcmVuID0gcGFyc2VkQ29sdW1uLmNoaWxkcmVuO1xuXHRcdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gcmVzcG9uc2VDb2x1bW5NYXBbaXRlbVR5cGVdO1xuXHRcdFx0bGV0IHJlc3BvbnNlQ29sdW1uO1xuXG5cdFx0XHRpZiAocmVzcG9uc2VDb2x1bW5zID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdFx0cmVzcG9uc2VDb2x1bW4gPSByZXNwb25zZUNvbHVtbnNbcGFyc2VkQ29sdW1uLmlkXTtcblxuXHRcdFx0aWYgKHJlc3BvbnNlQ29sdW1uID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdFx0aWYgKFxuXHRcdFx0XHRjaGlsZHJlbi5sZW5ndGggPiAwICYmXG5cdFx0XHRcdCF0aGlzLnJlc3BvbnNlQ29sdW1uc0F2YWlsYWJsZShyZXNwb25zZUNvbHVtbi5pdGVtVHlwZSwgY2hpbGRyZW4sIHJlc3BvbnNlQ29sdW1uTWFwKVxuXHRcdFx0KVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRjb3B5UmVxdWVzdENvbHVtbnMgKGNvbHVtbnM6IHRydWUpOiB0cnVlO1xuXHRjb3B5UmVxdWVzdENvbHVtbnMgKGNvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5bXSk6IEFwaVJlcXVlc3RDb2x1bW5bXTtcblx0Y29weVJlcXVlc3RDb2x1bW5zIChjb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyk6IEFwaVJlcXVlc3RDb2x1bW5zIHtcblx0XHRpZiAoY29sdW1ucyA9PT0gdHJ1ZSlcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0Y29uc3QgcmVzdWx0OiBBcGlSZXF1ZXN0Q29sdW1uW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpXG5cdFx0XHRyZXN1bHQucHVzaCh0aGlzLmNvcHlSZXF1ZXN0Q29sdW1uKGNvbHVtbikpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGNvcHlSZXF1ZXN0Q29sdW1uIChyZXF1ZXN0Q29sdW1uOiBBcGlSZXF1ZXN0Q29sdW1uKTogQXBpUmVxdWVzdENvbHVtbiB7XG5cdFx0Y29uc3QgY29sdW1uID0gdGhpcy5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XG5cblx0XHRpZiAoY29sdW1uLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiBjb2x1bW4uaWQ7XG5cblx0XHRjb25zdCBjaGlsZHJlbjogQXBpUmVxdWVzdENvbHVtbltdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGNoaWxkQ29sdW1uIG9mIGNvbHVtbi5jaGlsZHJlbilcblx0XHRcdGNoaWxkcmVuLnB1c2godGhpcy5jb3B5UmVxdWVzdENvbHVtbihjaGlsZENvbHVtbikpO1xuXG5cdFx0cmV0dXJuIHtbY29sdW1uLmlkXTogY2hpbGRyZW59O1xuXHR9XG5cblx0LyoqXG5cdCAqIERpZmZlcmVuY2U6IGNvbHVtbnMgdGhhdCBhcmUgaW4gc2Vjb25kLCBidXQgbm90IGluIGZpcnN0XG5cdCAqIEBwYXJhbSB7QXJyYXl9IGZpcnN0XG5cdCAqIEBwYXJhbSB7QXJyYXl9IHNlY29uZFxuXHQgKiBAcmV0dXJucyB7T2JqZWN0fSBBbiBvYmplY3QgY29udGFpbmluZyAnbWVyZ2VkJyBhbmQgJ2RpZmZlcmVuY2UnIHByb3BlcnRpZXNcblx0ICovXG5cdG1lcmdlUmVxdWVzdENvbHVtbnMgKGZpcnN0OiB0cnVlLCBzZWNvbmQ6IEFwaVJlcXVlc3RDb2x1bW5zKTogUmVxdWVzdENvbHVtbk1lcmdlUmVzdWx0PHRydWUsIFtdPjtcblx0bWVyZ2VSZXF1ZXN0Q29sdW1ucyAoZmlyc3Q6IEFwaVJlcXVlc3RDb2x1bW5bXSwgc2Vjb25kOiB0cnVlKTogUmVxdWVzdENvbHVtbk1lcmdlUmVzdWx0PHRydWUsIHRydWU+O1xuXHRtZXJnZVJlcXVlc3RDb2x1bW5zIChmaXJzdDogQXBpUmVxdWVzdENvbHVtbltdLCBzZWNvbmQ6IEFwaVJlcXVlc3RDb2x1bW5bXSk6XG5cdFx0UmVxdWVzdENvbHVtbk1lcmdlUmVzdWx0PEFwaVJlcXVlc3RDb2x1bW5bXSwgQXBpUmVxdWVzdENvbHVtbltdPjtcblx0bWVyZ2VSZXF1ZXN0Q29sdW1ucyAoZmlyc3Q6IEFwaVJlcXVlc3RDb2x1bW5zLCBzZWNvbmQ6IEFwaVJlcXVlc3RDb2x1bW5zKTogUmVxdWVzdENvbHVtbk1lcmdlUmVzdWx0O1xuXHRtZXJnZVJlcXVlc3RDb2x1bW5zIChmaXJzdDogQXBpUmVxdWVzdENvbHVtbnMsIHNlY29uZDogQXBpUmVxdWVzdENvbHVtbnMpOiBSZXF1ZXN0Q29sdW1uTWVyZ2VSZXN1bHQge1xuXHRcdGlmIChmaXJzdCA9PT0gdHJ1ZSkgLy8gPT09IG9wZXJhdG9yIG5lZWRlZCBoZXJlXG5cdFx0XHRyZXR1cm4ge21lcmdlZDogdHJ1ZSwgZGlmZmVyZW5jZTogW119O1xuXG5cdFx0aWYgKHNlY29uZCA9PT0gdHJ1ZSlcblx0XHRcdHJldHVybiB7bWVyZ2VkOiB0cnVlLCBkaWZmZXJlbmNlOiB0cnVlfTtcblxuXHRcdGNvbnN0IG1lcmdlZCA9IHRoaXMuY29weVJlcXVlc3RDb2x1bW5zKGZpcnN0KTtcblx0XHRjb25zdCBkaWZmZXJlbmNlOiBBcGlSZXF1ZXN0Q29sdW1uW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIHNlY29uZCkge1xuXHRcdFx0Y29uc3QgYWRkZWRDb2x1bW4gPSB0aGlzLm1lcmdlUmVxdWVzdENvbHVtbihjb2x1bW4sIG1lcmdlZCk7XG5cblx0XHRcdGlmIChhZGRlZENvbHVtbiAhPT0gbnVsbClcblx0XHRcdFx0ZGlmZmVyZW5jZS5wdXNoKGFkZGVkQ29sdW1uKTtcblx0XHR9XG5cblx0XHRyZXR1cm4ge21lcmdlZDogbWVyZ2VkLCBkaWZmZXJlbmNlOiBkaWZmZXJlbmNlfTtcblx0fVxuXG5cdG1lcmdlUmVxdWVzdENvbHVtbiAocmVxdWVzdENvbHVtbjogQXBpUmVxdWVzdENvbHVtbiwgZGVzdGluYXRpb246IEFwaVJlcXVlc3RDb2x1bW5bXSkge1xuXHRcdGNvbnN0IGNvbHVtbiA9IHRoaXMucGFyc2VSZXF1ZXN0Q29sdW1uKHJlcXVlc3RDb2x1bW4pO1xuXHRcdGNvbnN0IGNvbHVtbkluZGV4ID0gdGhpcy5maW5kUmVxdWVzdENvbHVtbihjb2x1bW4uaWQsIGRlc3RpbmF0aW9uKTtcblxuXHRcdGlmIChjb2x1bW5JbmRleCA9PT0gLTEpIHtcblx0XHRcdGRlc3RpbmF0aW9uLnB1c2gocmVxdWVzdENvbHVtbik7XG5cdFx0XHRyZXR1cm4gcmVxdWVzdENvbHVtbjtcblx0XHR9XG5cblx0XHRpZiAoY29sdW1uLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0aWYgKHR5cGVvZiBkZXN0aW5hdGlvbltjb2x1bW5JbmRleF0gPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5JbmRleF0gPSB7XG5cdFx0XHRcdFtjb2x1bW4uaWRdOiBbXVxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRjb25zdCBhZGRlZENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGNoaWxkQ29sdW1uIG9mIGNvbHVtbi5jaGlsZHJlbikge1xuXHRcdFx0Y29uc3QgYWRkZWRDb2x1bW4gPSB0aGlzLm1lcmdlUmVxdWVzdENvbHVtbihcblx0XHRcdFx0Y2hpbGRDb2x1bW4sXG5cdFx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdFx0ZGVzdGluYXRpb25bY29sdW1uSW5kZXhdW2NvbHVtbi5pZF1cblx0XHRcdCk7XG5cblx0XHRcdGlmIChhZGRlZENvbHVtbiAhPT0gbnVsbClcblx0XHRcdFx0YWRkZWRDb2x1bW5zLnB1c2goYWRkZWRDb2x1bW4pO1xuXHRcdH1cblxuXHRcdGlmIChhZGRlZENvbHVtbnMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHRyZXR1cm4ge1tjb2x1bW4uaWRdOiBhZGRlZENvbHVtbnN9O1xuXHR9XG5cblx0Z2V0UmVxdWVzdENvbHVtbklkIChyZXF1ZXN0Q29sdW1uOiBBcGlSZXF1ZXN0Q29sdW1uKTogc3RyaW5nIHtcblx0XHRpZiAodHlwZW9mIHJlcXVlc3RDb2x1bW4gPT09ICdzdHJpbmcnKVxuXHRcdFx0cmV0dXJuIHJlcXVlc3RDb2x1bW47XG5cblx0XHRsZXQgY29sdW1uSWQ7XG5cblx0XHRmb3IgKGNvbHVtbklkIGluIHJlcXVlc3RDb2x1bW4pIHt9XG5cblx0XHRyZXR1cm4gY29sdW1uSWQgYXMgc3RyaW5nO1xuXHR9XG5cblx0cGFyc2VSZXF1ZXN0Q29sdW1uIChyZXF1ZXN0Q29sdW1uOiBBcGlSZXF1ZXN0Q29sdW1uKToge2lkOiBzdHJpbmcsIGNoaWxkcmVuOiBBcGlSZXF1ZXN0Q29sdW1uW119IHtcblx0XHRpZiAodHlwZW9mIHJlcXVlc3RDb2x1bW4gPT09ICdzdHJpbmcnKVxuXHRcdFx0cmV0dXJuIHtpZDogcmVxdWVzdENvbHVtbiwgY2hpbGRyZW46IFtdfTtcblxuXHRcdGxldCBjb2x1bW5JZDtcblxuXHRcdGZvciAoY29sdW1uSWQgaW4gcmVxdWVzdENvbHVtbikge31cblxuXHRcdHJldHVybiB7aWQ6IGNvbHVtbklkIGFzIHN0cmluZywgY2hpbGRyZW46IHJlcXVlc3RDb2x1bW5bY29sdW1uSWQgYXMgc3RyaW5nXX07XG5cdH1cblxuXHQvKipcblx0ICogTWVyZ2VzIHR3byBzZXRzIG9mIHJlc3BvbnNlIGNvbHVtbnMuXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBmaXJzdFxuXHQgKiBAcGFyYW0ge29iamVjdH0gc2Vjb25kXG5cdCAqIEByZXR1cm5zIHtvYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIGEgJ21lcmdlZCcgYW5kIGEgJ2RpZmZlcmVuY2UnIHByb3BlcnR5LlxuXHQgKi9cblx0bWVyZ2VSZXNwb25zZUNvbHVtbnMgKFxuXHRcdGZpcnN0OiBSZXNwb25zZUNvbHVtbk1hcCxcblx0XHRzZWNvbmQ6IFJlc3BvbnNlQ29sdW1uTWFwXG5cdCk6IHttZXJnZWQ6IFJlc3BvbnNlQ29sdW1uTWFwLCBkaWZmZXJlbmNlOiBSZXNwb25zZUNvbHVtbk1hcH0ge1xuXHRcdGNvbnN0IG1lcmdlZDogUmVzcG9uc2VDb2x1bW5NYXAgPSB7fTtcblx0XHRjb25zdCBkaWZmZXJlbmNlOiBSZXNwb25zZUNvbHVtbk1hcCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBmaXJzdCkge1xuXHRcdFx0aWYgKHNlY29uZFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRtZXJnZWRbaXRlbVR5cGVdID0gZmlyc3RbaXRlbVR5cGVdO1xuXG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBtZXJnZVJlc3VsdCA9IHRoaXMubWVyZ2VSZXNwb25zZUNvbHVtbk1hcChcblx0XHRcdFx0Zmlyc3RbaXRlbVR5cGVdLFxuXHRcdFx0XHRzZWNvbmRbaXRlbVR5cGVdXG5cdFx0XHQpO1xuXG5cdFx0XHRtZXJnZWRbaXRlbVR5cGVdID0gbWVyZ2VSZXN1bHQubWVyZ2VkO1xuXHRcdFx0ZGlmZmVyZW5jZVtpdGVtVHlwZV0gPSBtZXJnZVJlc3VsdC5kaWZmZXJlbmNlO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gc2Vjb25kKSB7XG5cdFx0XHRpZiAoZmlyc3RbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0bWVyZ2VkW2l0ZW1UeXBlXSA9IHNlY29uZFtpdGVtVHlwZV07XG5cdFx0XHRcdGRpZmZlcmVuY2VbaXRlbVR5cGVdID0gc2Vjb25kW2l0ZW1UeXBlXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4ge21lcmdlZDogbWVyZ2VkLCBkaWZmZXJlbmNlOiBkaWZmZXJlbmNlfTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge2FycmF5fSBmaXJzdFxuXHQgKiBAcGFyYW0ge2FycmF5fSBzZWNvbmRcblx0ICogQHJldHVybnMge29iamVjdH0gZGlmZmVyZW5jZTogdGhlIGNvbHVtbnMgdGhhdCBhcmUgaW4gc2Vjb25kLCBidXQgbm90IGluIGZpcnN0LlxuXHQgKi9cblx0bWVyZ2VSZXNwb25zZUNvbHVtbk1hcCAoZmlyc3Q6IFJlc3BvbnNlQ29sdW1uTWFwLCBzZWNvbmQ6IFJlc3BvbnNlQ29sdW1uTWFwKToge21lcmdlZDogUmVzcG9uc2VDb2x1bW5NYXAsIGRpZmZlcmVuY2U6IFJlc3BvbnNlQ29sdW1uTWFwfSB7XG5cdFx0Y29uc3QgbWVyZ2VkOiBSZXNwb25zZUNvbHVtbk1hcCA9IHt9O1xuXHRcdGNvbnN0IGRpZmZlcmVuY2U6IFJlc3BvbnNlQ29sdW1uTWFwID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIGZpcnN0KVxuXHRcdFx0bWVyZ2VkW2NvbHVtbklkXSA9IGZpcnN0W2NvbHVtbklkXTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gc2Vjb25kKSB7XG5cdFx0XHRpZiAoaXNEZWZpbmVkKGZpcnN0W2NvbHVtbklkXSkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRtZXJnZWRbY29sdW1uSWRdID0gc2Vjb25kW2NvbHVtbklkXTtcblx0XHRcdGRpZmZlcmVuY2VbY29sdW1uSWRdID0gc2Vjb25kW2NvbHVtbklkXTtcblx0XHR9XG5cblx0XHRyZXR1cm4ge21lcmdlZDogbWVyZ2VkLCBkaWZmZXJlbmNlOiBkaWZmZXJlbmNlfTtcblx0fVxuXG5cdGlzTG9jYWxDb2x1bW5JZCAoY29sdW1uSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBjb2x1bW5JZC5zdWJzdHJpbmcoMCwgMikgPT09ICdfXyc7XG5cdH1cblxuXHRwcm9jZXNzQ29uZmlnQ29sdW1ucyAoY29uZmlnQ29sdW1uczogc3RyaW5nW10pOiBBcGlSZXF1ZXN0Q29sdW1uW10ge1xuXHRcdGNvbnN0IHJlcXVlc3Q6IEFwaVJlcXVlc3RDb2x1bW5bXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29uZmlnQ29sdW1ucykge1xuXHRcdFx0aWYgKHRoaXMuaXNMb2NhbENvbHVtbklkKGNvbHVtbikpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHR0aGlzLnByb2Nlc3NDb25maWdDb2x1bW4odGhpcy5wYXJzZUNvbmZpZ0NvbHVtbihjb2x1bW4pLCByZXF1ZXN0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVxdWVzdDtcblx0fVxuXG5cdHBhcnNlQ29uZmlnQ29sdW1uIChjb25maWdDb2x1bW46IHN0cmluZyk6IHN0cmluZ1tdIHtcblx0XHRyZXR1cm4gY29uZmlnQ29sdW1uLnNwbGl0KFJFTkRFUl9BU19TRVBFUkFUT1IpWzBdLnNwbGl0KENPTFVNTl9TRVBFUkFUT1IpO1xuXHR9XG5cblx0cHJvY2Vzc0NvbmZpZ0NvbHVtbiAocGFyc2VkQ29uZmlnQ29sdW1uOiBzdHJpbmdbXSwgZGVzdGluYXRpb246IEFwaVJlcXVlc3RDb2x1bW5bXSkge1xuXHRcdGNvbnN0IGNvbHVtbklkID0gcGFyc2VkQ29uZmlnQ29sdW1uWzBdO1xuXHRcdGNvbnN0IGlzTGVhZiA9IHBhcnNlZENvbmZpZ0NvbHVtbi5sZW5ndGggPT09IDE7XG5cdFx0bGV0IGNvbHVtbkluZGV4ID0gdGhpcy5maW5kUmVxdWVzdENvbHVtbihjb2x1bW5JZCwgZGVzdGluYXRpb24pO1xuXG5cdFx0aWYgKGlzTGVhZikge1xuXHRcdFx0aWYgKGNvbHVtbkluZGV4ID09PSAtMSlcblx0XHRcdFx0ZGVzdGluYXRpb24ucHVzaChjb2x1bW5JZCk7XG5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoY29sdW1uSW5kZXggPT09IC0xKVxuXHRcdFx0Y29sdW1uSW5kZXggPSBkZXN0aW5hdGlvbi5wdXNoKHtbY29sdW1uSWRdOiBbXX0pIC0gMTtcblx0XHRlbHNlIGlmICh0eXBlb2YgZGVzdGluYXRpb25bY29sdW1uSW5kZXhdID09PSAnc3RyaW5nJylcblx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XSA9IHtbY29sdW1uSWRdOiBbXX07XG5cblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0dGhpcy5wcm9jZXNzQ29uZmlnQ29sdW1uKHBhcnNlZENvbmZpZ0NvbHVtbi5zbGljZSgxKSwgZGVzdGluYXRpb25bY29sdW1uSW5kZXhdW2NvbHVtbklkXSk7XG5cdH1cblxuXHRmaW5kUmVxdWVzdENvbHVtbiAoY29sdW1uSWQ6IHN0cmluZywgcmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5bXSk6IG51bWJlciB7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCByZXF1ZXN0Q29sdW1ucy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3QgY29sdW1uID0gcmVxdWVzdENvbHVtbnNbaV07XG5cblx0XHRcdGlmICh0aGlzLmdldFJlcXVlc3RDb2x1bW5JZChjb2x1bW4pID09PSBjb2x1bW5JZClcblx0XHRcdFx0cmV0dXJuIGk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIC0xO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUsIENvbGxlY3Rpb25IYW5kbGVyLCBDcmVhdGVDb21waWxhdGlvbiwgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LCBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBDcmVhdGVSZXF1ZXN0RW50cnksIENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAsIEl0ZW1FbnRyeU1hcCwgSXRlbUlkLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgZ2V0UGF0aCB9IGZyb20gJy4vVXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVSZXF1ZXN0IHtcblx0cmVxdWVzdHM6IENyZWF0ZVJlcXVlc3RFbnRyeVtdID0gW107XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5OiBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgY29tcGlsYXRpb246IENyZWF0ZUNvbXBpbGF0aW9uLFxuXHRcdHByaXZhdGUgbG9jYWxDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZSxcblx0XHRwcml2YXRlIHBhcmFtZXRlck1hcDogQ3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCxcblx0XHRwcml2YXRlIGJyZWFrdXBCeVBhcmVudCA9IGZhbHNlXG5cdCkge1xuXHR9XG5cblx0ZmluYWxpemVSZXF1ZXN0IChyZXF1ZXN0UmVzb3VyY2U6IENyZWF0ZVJlcXVlc3RFbnRyeSkge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyaWVzID0gcmVxdWVzdFJlc291cmNlLmNvbGxlY3Rpb25zLmdldENvbGxlY3Rpb25zV2l0aEZpdHRpbmdJdGVtcygpO1xuXHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHJlcXVlc3RSZXNvdXJjZS5jb2x1bW5zO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgY29sbGVjdGlvbkVudHJpZXMpXG5cdFx0XHRjb2x1bW5FeHBhbnNpb24uZXhwYW5kKGNvbGxlY3Rpb25FbnRyeS5jb2x1bW5zKTtcblxuXHRcdHJlcXVlc3RSZXNvdXJjZS5yZXF1ZXN0LmNvbHVtbnMgPSBjb2x1bW5FeHBhbnNpb24uZ2V0KCk7XG5cblx0XHRyZXR1cm4gcmVxdWVzdFJlc291cmNlO1xuXHR9XG5cblx0c2V0UmVxdWVzdFBhcmVudCAocGFyZW50VHlwZTogSXRlbVR5cGUsIHJlcXVlc3RFbnRyeTogQ3JlYXRlUmVxdWVzdEVudHJ5KSB7XG5cdFx0Y29uc3QgcmVxdWVzdCA9IHJlcXVlc3RFbnRyeS5yZXF1ZXN0O1xuXG5cdFx0aWYgKHBhcmVudFR5cGUgPT09ICdWb2lkJylcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJlcXVlc3QucGFyZW50VHlwZSA9IHBhcmVudFR5cGU7XG5cdFx0cmVxdWVzdC5wYXJlbnRJZCA9IHt9O1xuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRydW4gKCkge1xuXHRcdGNvbnN0IGNvbXBpbGF0aW9uID0gdGhpcy5jb21waWxhdGlvbjtcblxuXHRcdGlmICh0aGlzLmJyZWFrdXBCeVBhcmVudCkge1xuXHRcdFx0Zm9yIChjb25zdCBwYXJlbnRUeXBlIGluIGNvbXBpbGF0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IHBhcmVudE1hcCA9IGNvbXBpbGF0aW9uW3BhcmVudFR5cGVdO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gcGFyZW50TWFwKSB7XG5cdFx0XHRcdFx0aWYgKHRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQocGFyZW50SWQpKVxuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0XHRjb25zdCByZXF1ZXN0UmVzb3VyY2UgPSB0aGlzLmluaXRpYWxpemVSZXF1ZXN0KCk7XG5cblx0XHRcdFx0XHR0aGlzLmV4dGVuZFJlcXVlc3QoXG5cdFx0XHRcdFx0XHRwYXJlbnRNYXBbcGFyZW50SWRdLFxuXHRcdFx0XHRcdFx0dGhpcy5zZXRSZXF1ZXN0UGFyZW50KHBhcmVudFR5cGUsIHJlcXVlc3RSZXNvdXJjZSkgPyArcGFyZW50SWQgOiBudWxsLFxuXHRcdFx0XHRcdFx0cmVxdWVzdFJlc291cmNlXG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdHRoaXMucmVxdWVzdHMucHVzaCh0aGlzLmZpbmFsaXplUmVxdWVzdChyZXF1ZXN0UmVzb3VyY2UpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKGNvbnN0IHBhcmVudFR5cGUgaW4gY29tcGlsYXRpb24pIHtcblx0XHRcdFx0Y29uc3QgcGFyZW50TWFwID0gY29tcGlsYXRpb25bcGFyZW50VHlwZV07XG5cdFx0XHRcdGNvbnN0IHJlcXVlc3RSZXNvdXJjZSA9IHRoaXMuaW5pdGlhbGl6ZVJlcXVlc3QoKTtcblx0XHRcdFx0Y29uc3QgaGFzUGFyZW50ID0gdGhpcy5zZXRSZXF1ZXN0UGFyZW50KHBhcmVudFR5cGUsIHJlcXVlc3RSZXNvdXJjZSk7XG5cblx0XHRcdFx0bGV0IHZhbGlkUmVxdWVzdCA9IGZhbHNlO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gcGFyZW50TWFwKSB7XG5cdFx0XHRcdFx0aWYgKHRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQocGFyZW50SWQpKVxuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0XHR0aGlzLmV4dGVuZFJlcXVlc3QoXG5cdFx0XHRcdFx0XHRwYXJlbnRNYXBbcGFyZW50SWRdLFxuXHRcdFx0XHRcdFx0aGFzUGFyZW50ID8gK3BhcmVudElkIDogbnVsbCxcblx0XHRcdFx0XHRcdHJlcXVlc3RSZXNvdXJjZVxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHR2YWxpZFJlcXVlc3QgPSB0cnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHZhbGlkUmVxdWVzdClcblx0XHRcdFx0XHR0aGlzLnJlcXVlc3RzLnB1c2godGhpcy5maW5hbGl6ZVJlcXVlc3QocmVxdWVzdFJlc291cmNlKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucmVxdWVzdHM7XG5cdH1cblxuXHRpbml0aWFsaXplUmVxdWVzdCAoKTogQ3JlYXRlUmVxdWVzdEVudHJ5IHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0cmVxdWVzdDoge1xuXHRcdFx0XHRyZXF1ZXN0VHlwZTogJ2NyZWF0ZScsXG5cdFx0XHRcdGl0ZW1zOiB7fSxcblx0XHRcdFx0Y29sdW1uczoge31cblx0XHRcdH0sXG5cdFx0XHRjb2x1bW5zOiB0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdCgpLFxuXHRcdFx0aXRlbXM6IHt9LFxuXHRcdFx0Y29sbGVjdGlvbnM6IHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdFx0W3RoaXMubG9jYWxDb2xsZWN0aW9uQ2FjaGUsIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZW50cmllc10sXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdGZhbHNlXG5cdFx0XHQpXG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgZXh0ZW5kUmVxdWVzdCAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeU1hcCwgcmVxdWVzdFBhcmVudElkOiBJdGVtSWQgfCBudWxsLCBkZXN0aW5hdGlvbjogQ3JlYXRlUmVxdWVzdEVudHJ5KSB7XG5cdFx0Y29uc3QgcmVxdWVzdCA9IGRlc3RpbmF0aW9uLnJlcXVlc3Q7XG5cdFx0Y29uc3QgaXRlbUVudHJ5TWFwID0gZGVzdGluYXRpb24uaXRlbXM7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRpZiAocmVxdWVzdC5pdGVtVHlwZSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRyZXF1ZXN0Lml0ZW1UeXBlID0gaXRlbVR5cGU7XG5cblx0XHRcdGlmIChpdGVtRW50cnlNYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0aXRlbUVudHJ5TWFwW2l0ZW1UeXBlXSA9IHt9O1xuXHRcdFx0XHRyZXF1ZXN0Lml0ZW1zW2l0ZW1UeXBlXSA9IHt9O1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtRW50cmllc1tpdGVtVHlwZV0pIHtcblx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gaXRlbUVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF07XG5cdFx0XHRcdGNvbnN0IGNoaWxkRW50cmllcyA9IGdldFBhdGgodGhpcy5jb21waWxhdGlvbiwgW2l0ZW1UeXBlLCBpdGVtSWRdKTtcblx0XHRcdFx0Y29uc3QgaXRlbVJlcXVlc3Q6IGFueSA9IHJlcXVlc3QuaXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF0gPSB7fTtcblx0XHRcdFx0Y29uc3QgcGFyYW1ldGVycyA9IGdldFBhdGgodGhpcy5wYXJhbWV0ZXJNYXAsIFtpdGVtVHlwZSwgaXRlbUlkXSk7XG5cblx0XHRcdFx0aWYgKHJlcXVlc3RQYXJlbnRJZCAhPT0gbnVsbClcblx0XHRcdFx0XHQoPHtbaXRlbUlkOiBzdHJpbmddOiBJdGVtSWR9PiByZXF1ZXN0LnBhcmVudElkKVtpdGVtSWRdID0gcmVxdWVzdFBhcmVudElkO1xuXG5cdFx0XHRcdGRlc3RpbmF0aW9uLmNvbHVtbnMuZXhwYW5kKGl0ZW1FbnRyeS5jb2x1bW5zKTtcblx0XHRcdFx0ZGVzdGluYXRpb24uY29sbGVjdGlvbnMuZXhwYW5kKGl0ZW1FbnRyeSk7XG5cblx0XHRcdFx0aXRlbUVudHJ5TWFwW2l0ZW1UeXBlXVtpdGVtSWRdID0gaXRlbUVudHJ5O1xuXG5cdFx0XHRcdGl0ZW1SZXF1ZXN0LnZhbHVlcyA9IGl0ZW1FbnRyeS5mb3JtYXRSZXF1ZXN0KCk7XG5cdFx0XHRcdGl0ZW1SZXF1ZXN0LnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzO1xuXG5cdFx0XHRcdGlmIChjaGlsZEVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRjb25zdCBsaW5rczoge1tpdGVtVHlwZTogc3RyaW5nXTogSXRlbUlkW119ID0gaXRlbVJlcXVlc3QubGlua3MgPSB7fTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGNoaWxkVHlwZSBpbiBjaGlsZEVudHJpZXMpIHtcblx0XHRcdFx0XHRsaW5rc1tjaGlsZFR5cGVdID0gW107XG5cblx0XHRcdFx0XHRmb3IgKGNvbnN0IGNoaWxkSWQgaW4gY2hpbGRFbnRyaWVzW2NoaWxkVHlwZV0pXG5cdFx0XHRcdFx0XHRsaW5rc1tjaGlsZFR5cGVdLnB1c2gocGFyc2VJbnQoY2hpbGRJZCwgMTApKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuZXh0ZW5kUmVxdWVzdChjaGlsZEVudHJpZXMsIG51bGwsIGRlc3RpbmF0aW9uKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cbiIsImltcG9ydCB7XG5cdENvbGxlY3Rpb25DYWNoZSxcblx0Q29sbGVjdGlvbkhhbmRsZXIsXG5cdENvbGxlY3Rpb25NYXRjaGVyLFxuXHRDb2x1bW5TZXQsXG5cdEl0ZW1DYWNoZSxcblx0SXRlbUhhbmRsZXIsXG5cdEl0ZW1SZXF1ZXN0U2VydmljZSxcblx0S2V5U2VydmljZSxcblx0TG9jYWxDYWNoZSwgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uUmVzdWx0LFxuXHRRdWVyeVNlcnZpY2Vcbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQge1xuXHRDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksXG5cdENvbHVtblNldEZhY3RvcnksXG5cdExvY2FsQ2FjaGVGYWN0b3J5LFxuXHRNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5XG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQge1xuXHRBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0QXV0aEludGVyZmFjZSxcblx0RXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRMb2NhbENhY2hlTWFuYWdlckludGVyZmFjZSxcblx0UHJvbWlzZUxpYnJhcnlJbnRlcmZhY2Vcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQge1xuXHRDb2xsZWN0aW9uRWRpdFJlc291cmNlLFxuXHRDb2xsZWN0aW9uRW50cnksXG5cdENvbGxlY3Rpb25FbnRyeU9wdGlvbnMsXG5cdENvbGxlY3Rpb25SZXNvdXJjZSxcblx0Q29sbGVjdGlvblJlc291cmNlT3B0aW9ucyxcblx0Q29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZSwgQ29sbGVjdGlvblZpZXdSZXNvdXJjZSxcblx0RWRpdFJlc291cmNlLFxuXHRJdGVtRW50cnksXG5cdEl0ZW1FbnRyeU9wdGlvbnMsXG5cdEl0ZW1SZXNvdXJjZSwgSXRlbVJlc291cmNlT3B0aW9uc0ludGVyZmFjZSwgTG9jYWxWaWV3UmVzb3VyY2UsIFJlbW90ZVZpZXdSZXNvdXJjZVxufSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtcblx0QXBpUXVlcnksXG5cdENvbGxlY3Rpb25EZWZpbml0aW9uLFxuXHRDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCxcblx0Q29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2UsXG5cdENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwLCBDb252ZXJzaW9uTWFwLFxuXHRDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwLFxuXHRJdGVtSWQsXG5cdEl0ZW1JZENvbnZlcnNpb25NYXAsXG5cdEl0ZW1PcHRpb25zSW50ZXJmYWNlLFxuXHRJdGVtUmVzb3VyY2VzSXRlbVR5cGVNYXAsXG5cdEl0ZW1UeXBlLCBMaW5rQ29sbGVjdGlvbkRlZmluaXRpb24sXG5cdExpbmtlZEl0ZW1FbnRyeU1hcCxcblx0TG9jYWxDYWNoZUNhbGxiYWNrQ29uZGl0aW9uLFxuXHRPblNhdmVDYWxsYmFjayxcblx0UHJvbWlzZUludGVyZmFjZSxcblx0U3RhdGVLZXlUeXBlLFxuXHRUZW1wbGF0ZUl0ZW1FbnRyeU1hcFxufSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IGNyZWF0ZVBhdGggfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgY2xhc3MgSXRlbUFkbWluaXN0cmF0b3Ige1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBhdXRoSW50ZXJmYWNlOiBBdXRoSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5OiBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBpdGVtUmVxdWVzdFNlcnZpY2U6IEl0ZW1SZXF1ZXN0U2VydmljZSxcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBsb2NhbENhY2hlRmFjdG9yeTogTG9jYWxDYWNoZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBsb2NhbENhY2hlTWFuYWdlcjogTG9jYWxDYWNoZU1hbmFnZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBtb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5OiBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgcHJvbWlzZUludGVyZmFjZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZVxuXHQpIHtcblxuXHR9XG5cblx0aW52YWxpZGF0ZUNhY2hlICgpOiB2b2lkIHtcblx0XHQvLyB0aGUgaXRlbUhhbmRsZXIgY2FjaGUgb25seSBjb250YWlucyByZW1vdGUgZW50cmllc1xuXHRcdHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5mb3JFYWNoKFxuXHRcdFx0aXRlbUVudHJ5ID0+IGl0ZW1FbnRyeS5xdWV1ZVJlbG9hZCgpXG5cdFx0KTtcblxuXHRcdC8vIHF1ZXVlUmVsb2FkIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkIGZvciBlYWNoIGluZGl2aWR1YWwgaXRlbVxuXHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZW50cmllcy5mb3JFYWNoKFxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5ID0+IGNvbGxlY3Rpb25FbnRyeS5xdWV1ZVJlbG9hZCgpXG5cdFx0KTtcblx0fVxuXG5cdGdldENvbGxlY3Rpb25NYXRjaGVyIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGFkZFRvVGFiOiBib29sZWFuID0gdHJ1ZSk6IENvbGxlY3Rpb25NYXRjaGVyIHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cdFx0Y29uc3QgY29sbGVjdGlvbk1hdGNoZXIgPSB0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QoW2xvY2FsQ2FjaGUuY29sbGVjdGlvbnNdLCBmYWxzZSwgdHJ1ZSk7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0Ly8gdGhpcyBpcyBvbmx5IHJlbGV2YW50IGlmIHRoZXJlIGFyZSBubyBjb2xsZWN0aW9ucyB0byBhZGQgdGhlIGl0ZW0gdG8sIGJ1dCB3ZSBzdGlsbCB3YW50IHRvIHNhdmUgdGhlIGl0ZW1cblx0XHRcdGlmIChhZGRUb1RhYilcblx0XHRcdFx0bG9jYWxDYWNoZS5pdGVtcy5hZGQoaXRlbUVudHJ5KTtcblxuXHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIuZXhwYW5kKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbGxlY3Rpb25NYXRjaGVyO1xuXHR9XG5cblx0ZmV0Y2hUaXRsZSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCwgZGVmZXJSZXF1ZXN0PzogYm9vbGVhbik6IFByb21pc2VJbnRlcmZhY2U8c3RyaW5nPiB7XG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZmV0Y2hUaXRsZShpdGVtVHlwZSwgaXRlbUlkLCBkZWZlclJlcXVlc3QsIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLml0ZW1zKTtcblx0fVxuXG5cdGdldEl0ZW1CeUlkIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUlkOiBJdGVtSWQsXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdDogdHJ1ZX0sXG5cdFx0aXNSb290PzogYm9vbGVhblxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEVkaXRSZXNvdXJjZT47XG5cblx0Z2V0SXRlbUJ5SWQgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtSWQ6IEl0ZW1JZCxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSAmIHtyZW1vdGU6IHRydWV9LFxuXHRcdGlzUm9vdD86IGJvb2xlYW5cblx0KTogUHJvbWlzZUludGVyZmFjZTxSZW1vdGVWaWV3UmVzb3VyY2U+O1xuXG5cdGdldEl0ZW1CeUlkIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUlkOiBJdGVtSWQsXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UsXG5cdFx0aXNSb290PzogYm9vbGVhblxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPExvY2FsVmlld1Jlc291cmNlPjtcblxuXHRnZXRJdGVtQnlJZCAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1JZDogSXRlbUlkLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlID0ge30sXG5cdFx0aXNSb290PzogYm9vbGVhblxuXHQpIHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5pdGVtSGFuZGxlci5mZXRjaEl0ZW0oXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdGl0ZW1JZCxcblx0XHRcdG5ldyBJdGVtRW50cnlPcHRpb25zKG9wdGlvbnMpLFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtc1xuXHRcdCkudGhlbihcblx0XHRcdChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVJdGVtUmVzb3VyY2UoaXRlbUVudHJ5LCBvcHRpb25zLCBpc1Jvb3QpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXRJdGVtc0J5SWQgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtSWRzOiBJdGVtSWRbXSxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0OiB0cnVlfVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEVkaXRSZXNvdXJjZVtdPlxuXG5cdGdldEl0ZW1zQnlJZCAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1JZHM6IEl0ZW1JZFtdLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlICYge3JlbW90ZTogdHJ1ZX1cblx0KTogUHJvbWlzZUludGVyZmFjZTxSZW1vdGVWaWV3UmVzb3VyY2VbXT47XG5cblx0Z2V0SXRlbXNCeUlkIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUlkczogSXRlbUlkW10sXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2Vcblx0KTogUHJvbWlzZUludGVyZmFjZTxMb2NhbFZpZXdSZXNvdXJjZVtdPjtcblxuXHRnZXRJdGVtc0J5SWQgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtSWRzOiBJdGVtSWRbXSxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSA9IHt9XG5cdCkge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblxuXHRcdHJldHVybiB0aGlzLml0ZW1IYW5kbGVyLmZldGNoSXRlbXMoXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdGl0ZW1JZHMsXG5cdFx0XHRuZXcgSXRlbUVudHJ5T3B0aW9ucyhvcHRpb25zKSxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXNcblx0XHQpLnRoZW4oXG5cdFx0XHQoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdKSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUl0ZW1SZXNvdXJjZXMoaXRlbUVudHJpZXMsIG9wdGlvbnMpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXRJdGVtc0J5UXVlcnkgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRxdWVyeTogQXBpUXVlcnksXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdDogdHJ1ZX1cblx0KTogUHJvbWlzZUludGVyZmFjZTxFZGl0UmVzb3VyY2VbXT47XG5cblx0Z2V0SXRlbXNCeVF1ZXJ5IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cXVlcnk6IEFwaVF1ZXJ5LFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlICYge3JlbW90ZTogdHJ1ZX1cblx0KTogUHJvbWlzZUludGVyZmFjZTxSZW1vdGVWaWV3UmVzb3VyY2VbXT47XG5cblx0Z2V0SXRlbXNCeVF1ZXJ5IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cXVlcnk6IEFwaVF1ZXJ5LFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8TG9jYWxWaWV3UmVzb3VyY2VbXT47XG5cblx0Z2V0SXRlbXNCeVF1ZXJ5IChpdGVtVHlwZTogSXRlbVR5cGUsIHF1ZXJ5OiBBcGlRdWVyeSwgb3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgPSB7fSkge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblx0XHRjb25zdCBlbnRyeU9wdGlvbnMgPSBuZXcgSXRlbUVudHJ5T3B0aW9ucyhvcHRpb25zKTtcblxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5hZGRQYXJlbnRDb25kaXRpb24ocXVlcnksIGVudHJ5T3B0aW9ucy5wYXJlbnQpLFxuXHRcdFx0e1tpdGVtVHlwZV06IGVudHJ5T3B0aW9ucy5jb2x1bW5zfVxuXHRcdCkudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NSZXNwb25zZShcblx0XHRcdFx0XHRyZXNwb25zZSxcblx0XHRcdFx0XHRyZXNwb25zZS5saW5rc1tpdGVtVHlwZV0sXG5cdFx0XHRcdFx0ZW50cnlPcHRpb25zLnBhcmVudCxcblx0XHRcdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCBlbnRyeU9wdGlvbnMuY29sdW1ucywgcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCkpXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0KGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVJdGVtUmVzb3VyY2VzKGl0ZW1FbnRyaWVzLCBvcHRpb25zKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0TmV3UmVzb3VyY2UgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSxcblx0XHRyZXR1cm5MaW5rczogdHJ1ZSxcblx0XHRpc1Jvb3Q/OiBib29sZWFuXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8e21haW46IEVkaXRSZXNvdXJjZSwgbGlua2VkOiBJdGVtUmVzb3VyY2VzSXRlbVR5cGVNYXB9PjtcblxuXHRnZXROZXdSZXNvdXJjZSAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlLFxuXHRcdHJldHVybkxpbmtzPzogYm9vbGVhbixcblx0XHRpc1Jvb3Q/OiBib29sZWFuXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8RWRpdFJlc291cmNlPjtcblxuXHRnZXROZXdSZXNvdXJjZSAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlID0ge30sXG5cdFx0cmV0dXJuTGlua3M6IGJvb2xlYW4gPSBmYWxzZSxcblx0XHRpc1Jvb3Q/OiBib29sZWFuXG5cdCkge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblxuXHRcdG9wdGlvbnMuZWRpdCA9IHRydWU7XG5cblx0XHRyZXR1cm4gdGhpcy5pdGVtSGFuZGxlci5mZXRjaE5ld0l0ZW0oXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdG5ldyBJdGVtRW50cnlPcHRpb25zKG9wdGlvbnMpLFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtc1xuXHRcdCkudGhlbihcblx0XHRcdChpdGVtRW50cnlSZXNvdXJjZTogVGVtcGxhdGVJdGVtRW50cnlNYXApID0+IHtcblx0XHRcdFx0Y29uc3QgbWFpbiA9IGxvY2FsQ2FjaGUuY3JlYXRlSXRlbVJlc291cmNlKGl0ZW1FbnRyeVJlc291cmNlLm1haW4sIG9wdGlvbnMsIGlzUm9vdCwgdHJ1ZSk7XG5cdFx0XHRcdGNvbnN0IGxpbmtlZCA9IHRoaXMucHJvY2Vzc0xpbmtlZEl0ZW1zKGl0ZW1FbnRyeVJlc291cmNlLmxpbmtlZCwgb3B0aW9ucywgdHJ1ZSk7IC8vIGRvIHRoaXMgYmVmb3JlaGFuZFxuXG5cdFx0XHRcdGlmICghcmV0dXJuTGlua3MpXG5cdFx0XHRcdFx0cmV0dXJuIG1haW47XG5cblx0XHRcdFx0cmV0dXJuIHttYWluOiBtYWluLCBsaW5rZWQ6IGxpbmtlZH07XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldER1cGxpY2F0ZUJ5SWQgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRkdXBsaWNhdGVJZDogSXRlbUlkLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlICYge2VkaXQ6IHRydWV9LFxuXHRcdHJldHVybkxpbmtzPzogYm9vbGVhbixcblx0XHRpc1Jvb3Q/OiBib29sZWFuXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8RWRpdFJlc291cmNlPjtcblxuXHRnZXREdXBsaWNhdGVCeUlkIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0ZHVwbGljYXRlSWQ6IEl0ZW1JZCxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSAmIHtyZW1vdGU6IHRydWV9LFxuXHRcdHJldHVybkxpbmtzPzogYm9vbGVhbixcblx0XHRpc1Jvb3Q/OiBib29sZWFuXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8UmVtb3RlVmlld1Jlc291cmNlPjtcblxuXHRnZXREdXBsaWNhdGVCeUlkIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0ZHVwbGljYXRlSWQ6IEl0ZW1JZCxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSxcblx0XHRyZXR1cm5MaW5rcz86IGJvb2xlYW4sXG5cdFx0aXNSb290PzogYm9vbGVhblxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPExvY2FsVmlld1Jlc291cmNlPjtcblxuXHRnZXREdXBsaWNhdGVCeUlkIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0ZHVwbGljYXRlSWQ6IEl0ZW1JZCxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSA9IHt9LFxuXHRcdHJldHVybkxpbmtzPzogYm9vbGVhbixcblx0XHRpc1Jvb3Q/OiBib29sZWFuXG5cdCkge1xuXHRcdG9wdGlvbnMuaXNEdXBsaWNhdGUgPSB0cnVlO1xuXG5cdFx0aWYgKG9wdGlvbnMudGVtcGxhdGVPcHRpb25zID09PSB1bmRlZmluZWQpXG5cdFx0XHRvcHRpb25zLnRlbXBsYXRlT3B0aW9ucyA9IHt9O1xuXG5cdFx0aWYgKG9wdGlvbnMudGVtcGxhdGVPcHRpb25zLml0ZW0gPT09IHVuZGVmaW5lZClcblx0XHRcdG9wdGlvbnMudGVtcGxhdGVPcHRpb25zLml0ZW0gPSBkdXBsaWNhdGVJZDtcblxuXHRcdHJldHVybiB0aGlzLmdldE5ld1Jlc291cmNlKGl0ZW1UeXBlLCBvcHRpb25zLCByZXR1cm5MaW5rcywgaXNSb290KTtcblx0fVxuXG5cdGdldEl0ZW1CeVN0YXRlIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0c3RhdGVLZXk6IEl0ZW1JZCB8IHN0cmluZyxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0OiB0cnVlfSxcblx0XHRpc1Jvb3Q/OiBib29sZWFuXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8RWRpdFJlc291cmNlPjtcblxuXHRnZXRJdGVtQnlTdGF0ZSAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHN0YXRlS2V5OiBJdGVtSWQgfCBzdHJpbmcsXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgJiB7cmVtb3RlOiB0cnVlfSxcblx0XHRpc1Jvb3Q/OiBib29sZWFuXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8UmVtb3RlVmlld1Jlc291cmNlPjtcblxuXHRnZXRJdGVtQnlTdGF0ZSAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHN0YXRlS2V5OiBJdGVtSWQgfCBzdHJpbmcsXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UsXG5cdFx0aXNSb290PzogYm9vbGVhblxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPExvY2FsVmlld1Jlc291cmNlPjtcblxuXHQvLyBzdGF0ZUtleSBjYW4gYmUgYSBrZXl3b3JkIG9yIGEgbG9jYWwgaWQgKGluIGNhc2Ugb2YgYSByZWZyZXNoKVxuXHRnZXRJdGVtQnlTdGF0ZSAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHN0YXRlS2V5OiBJdGVtSWQgfCBzdHJpbmcsXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgPSB7fSxcblx0XHRpc1Jvb3Q/OiBib29sZWFuXG5cdCkge1xuXHRcdGNvbnN0IHBhcnNlZFN0YXRlS2V5ID0gdGhpcy5rZXlTZXJ2aWNlLnBhcnNlU3RhdGVLZXkoc3RhdGVLZXkgYXMgc3RyaW5nKTtcblxuXHRcdGlmIChwYXJzZWRTdGF0ZUtleSA9PT0gbnVsbCkge1xuXHRcdFx0Y29uc3QgaXRlbUlkID0gc3RhdGVLZXkgYXMgSXRlbUlkO1xuXG5cdFx0XHRpZiAoIXRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQoaXRlbUlkKSB8fCB0aGlzLmdldExvY2FsQ2FjaGUoKS5pdGVtcy5jb250YWlucyhpdGVtVHlwZSwgaXRlbUlkKSlcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0SXRlbUJ5SWQoaXRlbVR5cGUsIGl0ZW1JZCwgb3B0aW9ucywgaXNSb290KTtcblx0XHR9IGVsc2UgaWYgKHBhcnNlZFN0YXRlS2V5LnR5cGUgPT09IFN0YXRlS2V5VHlwZS5EdXBsaWNhdGUpIHtcblx0XHRcdHJldHVybiB0aGlzLmdldER1cGxpY2F0ZUJ5SWQoXG5cdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRwYXJzZWRTdGF0ZUtleS5pdGVtSWQgYXMgSXRlbUlkLFxuXHRcdFx0XHRvcHRpb25zLFxuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0aXNSb290XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmdldE5ld1Jlc291cmNlKGl0ZW1UeXBlLCBvcHRpb25zLCBmYWxzZSwgaXNSb290KTtcblx0fVxuXG5cdGdldENvbGxlY3Rpb25EZWYgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgb3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2UpOiBDb2xsZWN0aW9uRGVmaW5pdGlvbiB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGl0ZW1UeXBlOiBpdGVtVHlwZSxcblx0XHRcdG9wdGlvbnM6IHtcblx0XHRcdFx0ZW50cnk6IG5ldyBDb2xsZWN0aW9uRW50cnlPcHRpb25zKG9wdGlvbnMpLCAvLyB3ZSBuZWVkIHRoZSBkZWZhdWx0IGNvbHVtbiB2YWx1ZVxuXHRcdFx0XHRyZXNvdXJjZTogbmV3IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnMob3B0aW9ucylcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0Z2V0TGlua0NvbGxlY3Rpb25zRGVmIChcblx0XHRsaW5rVHlwZTogSXRlbVR5cGUsXG5cdFx0bGlua0lkQXJyYXk6IEl0ZW1JZFtdIHwgKCgpID0+IEl0ZW1JZFtdKSxcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0bGlua0ZpZWxkOiBzdHJpbmcsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2Vcblx0KTogTGlua0NvbGxlY3Rpb25EZWZpbml0aW9uIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0aXRlbVR5cGU6IGl0ZW1UeXBlLFxuXHRcdFx0bGlua1R5cGU6IGxpbmtUeXBlLFxuXHRcdFx0bGlua0lkQXJyYXk6IGxpbmtJZEFycmF5LFxuXHRcdFx0bGlua0ZpZWxkOiBsaW5rRmllbGQsXG5cdFx0XHRvcHRpb25zOiB7XG5cdFx0XHRcdGVudHJ5OiBuZXcgQ29sbGVjdGlvbkVudHJ5T3B0aW9ucyhvcHRpb25zKSwgLy8gd2UgbmVlZCB0aGUgZGVmYXVsdCBjb2x1bW4gdmFsdWVcblx0XHRcdFx0cmVzb3VyY2U6IG5ldyBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zKG9wdGlvbnMpXG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdGdldENvbGxlY3Rpb24gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0Q29sbGVjdGlvbjogdHJ1ZSwgZWRpdEl0ZW1zOiB0cnVlfVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25FZGl0UmVzb3VyY2U8RWRpdFJlc291cmNlPj47XG5cblx0Z2V0Q29sbGVjdGlvbiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlICYge2VkaXRJdGVtczogdHJ1ZX1cblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uVmlld1Jlc291cmNlPEVkaXRSZXNvdXJjZT4+O1xuXG5cdGdldENvbGxlY3Rpb24gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0Q29sbGVjdGlvbjogdHJ1ZSwgcmVtb3RlSXRlbXM6IHRydWV9XG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvbkVkaXRSZXNvdXJjZTxSZW1vdGVWaWV3UmVzb3VyY2U+PjtcblxuXHRnZXRDb2xsZWN0aW9uIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2UgJiB7cmVtb3RlSXRlbXM6IHRydWV9XG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvblZpZXdSZXNvdXJjZTxSZW1vdGVWaWV3UmVzb3VyY2U+PjtcblxuXHRnZXRDb2xsZWN0aW9uIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdENvbGxlY3Rpb246IHRydWV9XG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvbkVkaXRSZXNvdXJjZTxMb2NhbFZpZXdSZXNvdXJjZT4+O1xuXG5cdGdldENvbGxlY3Rpb24gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8TG9jYWxWaWV3UmVzb3VyY2U+PjtcblxuXHRnZXRDb2xsZWN0aW9uIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2Vcblx0KSB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZmV0Y2goXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdG5ldyBDb2xsZWN0aW9uRW50cnlPcHRpb25zKG9wdGlvbnMpLFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtcyxcblx0XHRcdGxvY2FsQ2FjaGUuY29sbGVjdGlvbnMsXG5cdFx0XHRsb2NhbENhY2hlLmRlZmVycmVkQ29sbGVjdGlvbnNcblx0XHQpLnRoZW4oXG5cdFx0XHRlbnRyeSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZShlbnRyeSwgbmV3IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnMob3B0aW9ucykpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXRDb2xsZWN0aW9uRnJvbURlZiAoZGVmaW5pdGlvbjogQ29sbGVjdGlvbkRlZmluaXRpb24pOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25SZXNvdXJjZT4ge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmZldGNoKFxuXHRcdFx0ZGVmaW5pdGlvbi5pdGVtVHlwZSxcblx0XHRcdGRlZmluaXRpb24ub3B0aW9ucy5lbnRyeSxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMsXG5cdFx0XHRsb2NhbENhY2hlLmNvbGxlY3Rpb25zLFxuXHRcdFx0bG9jYWxDYWNoZS5kZWZlcnJlZENvbGxlY3Rpb25zXG5cdFx0KS50aGVuKFxuXHRcdFx0ZW50cnkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UoZW50cnksIGRlZmluaXRpb24ub3B0aW9ucy5yZXNvdXJjZSk7XG5cblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBkZXByZWNhdGVkLCB1c2UgYHBhcmVudGAgaW4gb3B0aW9uc1xuXHQgKi9cblx0Z2V0TGlua0NvbGxlY3Rpb24gKFxuXHRcdGxpbmtUeXBlOiBJdGVtVHlwZSxcblx0XHRsaW5rSWQ6IEl0ZW1JZCxcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2UgPSB7fVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25SZXNvdXJjZT4ge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblxuXHRcdG9wdGlvbnMucGFyZW50ID0ge2l0ZW1UeXBlOiBsaW5rVHlwZSwgaXRlbUlkOiBsaW5rSWR9O1xuXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZmV0Y2goXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdG5ldyBDb2xsZWN0aW9uRW50cnlPcHRpb25zKG9wdGlvbnMpLFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtcyxcblx0XHRcdGxvY2FsQ2FjaGUuY29sbGVjdGlvbnMsXG5cdFx0XHRsb2NhbENhY2hlLmRlZmVycmVkQ29sbGVjdGlvbnNcblx0XHQpLnRoZW4oXG5cdFx0XHQoZW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UoZW50cnksIG9wdGlvbnMpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXRMaW5rQ29sbGVjdGlvbnMgKFxuXHRcdGxpbmtUeXBlOiBJdGVtVHlwZSxcblx0XHRsaW5rSWRBcnJheTogSXRlbUlkW10sXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlICYge2VkaXRJdGVtczogdHJ1ZSwgZWRpdENvbGxlY3Rpb246IHRydWV9XG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA8Q29sbGVjdGlvbkVkaXRSZXNvdXJjZTxFZGl0UmVzb3VyY2U+Pj47XG5cblx0Z2V0TGlua0NvbGxlY3Rpb25zIChcblx0XHRsaW5rVHlwZTogSXRlbVR5cGUsXG5cdFx0bGlua0lkQXJyYXk6IEl0ZW1JZFtdLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZSAmIHtyZW1vdGVJdGVtczogdHJ1ZSwgZWRpdENvbGxlY3Rpb246IHRydWV9XG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA8Q29sbGVjdGlvbkVkaXRSZXNvdXJjZTxSZW1vdGVWaWV3UmVzb3VyY2U+Pj47XG5cblx0Z2V0TGlua0NvbGxlY3Rpb25zIChcblx0XHRsaW5rVHlwZTogSXRlbVR5cGUsXG5cdFx0bGlua0lkQXJyYXk6IEl0ZW1JZFtdLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0Q29sbGVjdGlvbjogdHJ1ZX1cblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcDxDb2xsZWN0aW9uRWRpdFJlc291cmNlPExvY2FsVmlld1Jlc291cmNlPj4+O1xuXG5cdGdldExpbmtDb2xsZWN0aW9ucyAoXG5cdFx0bGlua1R5cGU6IEl0ZW1UeXBlLFxuXHRcdGxpbmtJZEFycmF5OiBJdGVtSWRbXSxcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdEl0ZW1zOiB0cnVlfVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwPENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8RWRpdFJlc291cmNlPj4+O1xuXG5cdGdldExpbmtDb2xsZWN0aW9ucyAoXG5cdFx0bGlua1R5cGU6IEl0ZW1UeXBlLFxuXHRcdGxpbmtJZEFycmF5OiBJdGVtSWRbXSxcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2UgJiB7cmVtb3RlSXRlbXM6IHRydWV9XG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA8Q29sbGVjdGlvblZpZXdSZXNvdXJjZTxSZW1vdGVWaWV3UmVzb3VyY2U+Pj47XG5cblx0Z2V0TGlua0NvbGxlY3Rpb25zIChcblx0XHRsaW5rVHlwZTogSXRlbVR5cGUsXG5cdFx0bGlua0lkQXJyYXk6IEl0ZW1JZFtdLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwPENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8TG9jYWxWaWV3UmVzb3VyY2U+Pj47XG5cblx0Z2V0TGlua0NvbGxlY3Rpb25zIChcblx0XHRsaW5rVHlwZTogSXRlbVR5cGUsXG5cdFx0bGlua0lkQXJyYXk6IEl0ZW1JZFtdLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZVxuXHQpIHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5iYXRjaEZldGNoKFxuXHRcdFx0bGlua1R5cGUsXG5cdFx0XHRsaW5rSWRBcnJheSxcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0bmV3IENvbGxlY3Rpb25FbnRyeU9wdGlvbnMob3B0aW9ucyksXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxuXHRcdFx0bG9jYWxDYWNoZS5jb2xsZWN0aW9ucyxcblx0XHRcdGxvY2FsQ2FjaGUuZGVmZXJyZWRDb2xsZWN0aW9uc1xuXHRcdCkudGhlbihcblx0XHRcdChjb2xsZWN0aW9uRW50cmllczogQ29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXApID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlcyhjb2xsZWN0aW9uRW50cmllcywgb3B0aW9ucyk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldExpbmtDb2xsZWN0aW9uc0Zyb21EZWYgKGRlZmluaXRpb246IExpbmtDb2xsZWN0aW9uRGVmaW5pdGlvbik6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA+IHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5iYXRjaEZldGNoKFxuXHRcdFx0ZGVmaW5pdGlvbi5saW5rVHlwZSxcblx0XHRcdGRlZmluaXRpb24ubGlua0lkQXJyYXksXG5cdFx0XHRkZWZpbml0aW9uLml0ZW1UeXBlLFxuXHRcdFx0ZGVmaW5pdGlvbi5vcHRpb25zLmVudHJ5LFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtcyxcblx0XHRcdGxvY2FsQ2FjaGUuY29sbGVjdGlvbnMsXG5cdFx0XHRsb2NhbENhY2hlLmRlZmVycmVkQ29sbGVjdGlvbnNcblx0XHQpLnRoZW4oXG5cdFx0XHQoY29sbGVjdGlvbkVudHJpZXM6IENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwKSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZXMoXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJpZXMsXG5cdFx0XHRcdFx0ZGVmaW5pdGlvbi5vcHRpb25zLnJlc291cmNlXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldEFsbExpbmtDb2xsZWN0aW9ucyAoXG5cdFx0bGlua1R5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0SXRlbXM6IHRydWUsIGVkaXRDb2xsZWN0aW9uOiB0cnVlfVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwPENvbGxlY3Rpb25FZGl0UmVzb3VyY2U8RWRpdFJlc291cmNlPj4+O1xuXG5cdGdldEFsbExpbmtDb2xsZWN0aW9ucyAoXG5cdFx0bGlua1R5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZSAmIHtyZW1vdGVJdGVtczogdHJ1ZSwgZWRpdENvbGxlY3Rpb246IHRydWV9XG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA8Q29sbGVjdGlvbkVkaXRSZXNvdXJjZTxSZW1vdGVWaWV3UmVzb3VyY2U+Pj47XG5cblx0Z2V0QWxsTGlua0NvbGxlY3Rpb25zIChcblx0XHRsaW5rVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlICYge2VkaXRDb2xsZWN0aW9uOiB0cnVlfVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwPENvbGxlY3Rpb25FZGl0UmVzb3VyY2U8TG9jYWxWaWV3UmVzb3VyY2U+Pj47XG5cblx0Z2V0QWxsTGlua0NvbGxlY3Rpb25zIChcblx0XHRsaW5rVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlICYge2VkaXRJdGVtczogdHJ1ZX1cblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcDxDb2xsZWN0aW9uVmlld1Jlc291cmNlPEVkaXRSZXNvdXJjZT4+PjtcblxuXHRnZXRBbGxMaW5rQ29sbGVjdGlvbnMgKFxuXHRcdGxpbmtUeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2UgJiB7cmVtb3RlSXRlbXM6IHRydWV9XG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA8Q29sbGVjdGlvblZpZXdSZXNvdXJjZTxSZW1vdGVWaWV3UmVzb3VyY2U+Pj47XG5cblx0Z2V0QWxsTGlua0NvbGxlY3Rpb25zIChcblx0XHRsaW5rVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA8Q29sbGVjdGlvblZpZXdSZXNvdXJjZTxMb2NhbFZpZXdSZXNvdXJjZT4+PjtcblxuXHRnZXRBbGxMaW5rQ29sbGVjdGlvbnMgKFxuXHRcdGxpbmtUeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2Vcblx0KSB7XG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkobGlua1R5cGUsIHt9LCB7fSlcblx0XHRcdC50aGVuKFxuXHRcdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0TGlua0NvbGxlY3Rpb25zKFxuXHRcdFx0XHRcdFx0bGlua1R5cGUsXG5cdFx0XHRcdFx0XHRyZXNwb25zZS5saW5rc1tsaW5rVHlwZV0sXG5cdFx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRcdG9wdGlvbnNcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdCk7XG5cdH1cblxuXHRjbG9uZUl0ZW0gKFxuXHRcdGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlICYge2VkaXQ6IHRydWV9XG5cdCk6IEVkaXRSZXNvdXJjZTtcblxuXHRjbG9uZUl0ZW0gKFxuXHRcdGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlICYge3JlbW90ZTogdHJ1ZX1cblx0KTogUmVtb3RlVmlld1Jlc291cmNlO1xuXG5cdGNsb25lSXRlbSAoXG5cdFx0aXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UsXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2Vcblx0KTogTG9jYWxWaWV3UmVzb3VyY2U7XG5cblx0Y2xvbmVJdGVtIChcblx0XHRpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZVxuXHQpIHtcblx0XHRyZXR1cm4gdGhpcy5hZGRTaW5nbGVJdGVtKGl0ZW1SZXNvdXJjZS5lbnRyeS5jbG9uZSgpLCBvcHRpb25zLCBmYWxzZSk7XG5cdH1cblxuXHRjbG9uZUNvbGxlY3Rpb24gKFxuXHRcdGNvbGxlY3Rpb25SZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlICYge2VkaXRJdGVtczogdHJ1ZSwgZWRpdENvbGxlY3Rpb246IHRydWV9LFxuXHRcdGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXBcblx0KTogQ29sbGVjdGlvbkVkaXRSZXNvdXJjZTxFZGl0UmVzb3VyY2U+O1xuXG5cdGNsb25lQ29sbGVjdGlvbiAoXG5cdFx0Y29sbGVjdGlvblJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2UgJiB7cmVtb3RlSXRlbXM6IHRydWUsIGVkaXRDb2xsZWN0aW9uOiB0cnVlfSxcblx0XHRjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwXG5cdCk6IENvbGxlY3Rpb25FZGl0UmVzb3VyY2U8UmVtb3RlVmlld1Jlc291cmNlPjtcblxuXHRjbG9uZUNvbGxlY3Rpb24gKFxuXHRcdGNvbGxlY3Rpb25SZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlICYge2VkaXRJdGVtczogdHJ1ZX0sXG5cdFx0Y29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcFxuXHQpOiBDb2xsZWN0aW9uVmlld1Jlc291cmNlPEVkaXRSZXNvdXJjZT47XG5cblx0Y2xvbmVDb2xsZWN0aW9uIChcblx0XHRjb2xsZWN0aW9uUmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZSAmIHtyZW1vdGVJdGVtczogdHJ1ZX0sXG5cdFx0Y29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcFxuXHQpOiBDb2xsZWN0aW9uVmlld1Jlc291cmNlPFJlbW90ZVZpZXdSZXNvdXJjZT47XG5cblx0Y2xvbmVDb2xsZWN0aW9uIChcblx0XHRjb2xsZWN0aW9uUmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0Q29sbGVjdGlvbjogdHJ1ZX0sXG5cdFx0Y29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcFxuXHQpOiBDb2xsZWN0aW9uRWRpdFJlc291cmNlPExvY2FsVmlld1Jlc291cmNlPjtcblxuXHRjbG9uZUNvbGxlY3Rpb24gKFxuXHRcdGNvbGxlY3Rpb25SZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlLFxuXHRcdGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXBcblx0KTogQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxMb2NhbFZpZXdSZXNvdXJjZT47XG5cblx0Y2xvbmVDb2xsZWN0aW9uIChcblx0XHRjb2xsZWN0aW9uUmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZSxcblx0XHRjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwXG5cdCkge1xuXHRcdGxldCBwYXJlbnQgPSBvcHRpb25zLnBhcmVudDtcblxuXHRcdGlmIChwYXJlbnQgPT09IHVuZGVmaW5lZClcblx0XHRcdHBhcmVudCA9IG51bGw7XG5cblx0XHRyZXR1cm4gdGhpcy5hZGRDb2xsZWN0aW9uKFxuXHRcdFx0Y29sbGVjdGlvblJlc291cmNlLmVudHJ5LmNsb25lKHBhcmVudCwgY29udmVyc2lvbk1hcCksXG5cdFx0XHRvcHRpb25zXG5cdFx0KTtcblx0fVxuXG5cdHNhdmVDdXJyZW50TG9jYWxDYWNoZSAoXG5cdFx0Y2xvc2VUYWI/OiBib29sZWFuLFxuXHRcdHBhcmFtZXRlcnM/OiBDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwLFxuXHRcdGJyZWFrdXBCeVBhcmVudD86IGJvb2xlYW4sXG5cdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrPzogKGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApID0+IHZvaWRcblx0KSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLnNhdmUoY2xvc2VUYWIsIHBhcmFtZXRlcnMsIGJyZWFrdXBCeVBhcmVudCwgb25BZnRlckNyZWF0ZUNhbGxiYWNrKTtcblx0fVxuXG5cdGdldEN1cnJlbnRDb2xsZWN0aW9ucyAoKTogQ29sbGVjdGlvbkNhY2hlIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbENhY2hlKCkuY29sbGVjdGlvbnM7XG5cdH1cblxuXHRnZXRDdXJyZW50SXRlbXMgKCk6IEl0ZW1DYWNoZSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLml0ZW1zO1xuXHR9XG5cblx0Z2V0TW9kdWxlQ2hhbmdlcyAobG9jYWxDYWNoZTogTG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpKTogTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uUmVzdWx0IHtcblx0XHRpZiAobG9jYWxDYWNoZS5yb290SXRlbSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdpdGVtQWRtaW5pc3RyYXRvcjogTm8gcm9vdCBpdGVtIGZvciBsb2NhbCBjYWNoZSAnICsgbG9jYWxDYWNoZS5pZCk7XG5cblx0XHRyZXR1cm4gdGhpcy5tb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdGxvY2FsQ2FjaGUucm9vdEl0ZW0sXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxuXHRcdFx0bG9jYWxDYWNoZS5jb2xsZWN0aW9uc1xuXHRcdCkucHJvY2VzcygpO1xuXHR9XG5cblx0YWRkU2luZ2xlSXRlbSAoXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnksXG5cdFx0b3B0aW9uczogSXRlbVJlc291cmNlT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0OiB0cnVlfSxcblx0XHRpc1Jvb3Q/OiBib29sZWFuLFxuXHRcdGxvY2FsQ2FjaGU/OiBMb2NhbENhY2hlXG5cdCk6IEVkaXRSZXNvdXJjZTtcblxuXHRhZGRTaW5nbGVJdGVtIChcblx0XHRpdGVtRW50cnk6IEl0ZW1FbnRyeSxcblx0XHRvcHRpb25zOiBJdGVtUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlICYge3JlbW90ZTogdHJ1ZX0sXG5cdFx0aXNSb290PzogYm9vbGVhbixcblx0XHRsb2NhbENhY2hlPzogTG9jYWxDYWNoZVxuXHQpOiBSZW1vdGVWaWV3UmVzb3VyY2U7XG5cblx0YWRkU2luZ2xlSXRlbSAoXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnksXG5cdFx0b3B0aW9uczogSXRlbVJlc291cmNlT3B0aW9uc0ludGVyZmFjZSxcblx0XHRpc1Jvb3Q/OiBib29sZWFuLFxuXHRcdGxvY2FsQ2FjaGU/OiBMb2NhbENhY2hlXG5cdCk6IExvY2FsVmlld1Jlc291cmNlO1xuXG5cdGFkZFNpbmdsZUl0ZW0gKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5LFxuXHRcdG9wdGlvbnM6IEl0ZW1SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UgPSB7fSxcblx0XHRpc1Jvb3Q/OiBib29sZWFuLFxuXHRcdGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKVxuXHQpIHtcblx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVJdGVtUmVzb3VyY2UobG9jYWxDYWNoZS5pdGVtcy5hZGQoaXRlbUVudHJ5KSwgb3B0aW9ucywgaXNSb290KTtcblx0fVxuXG5cdGFkZFNpbmdsZUl0ZW1zIChcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXG5cdFx0b3B0aW9uczogSXRlbVJlc291cmNlT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0OiB0cnVlfVxuXHQpOiBFZGl0UmVzb3VyY2VbXTtcblxuXHRhZGRTaW5nbGVJdGVtcyAoXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRcdG9wdGlvbnM6IEl0ZW1SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UgJiB7cmVtb3RlOiB0cnVlfVxuXHQpOiBSZW1vdGVWaWV3UmVzb3VyY2VbXTtcblxuXHRhZGRTaW5nbGVJdGVtcyAoXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRcdG9wdGlvbnM6IEl0ZW1SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2Vcblx0KTogTG9jYWxWaWV3UmVzb3VyY2VbXTtcblxuXHRhZGRTaW5nbGVJdGVtcyAoXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRcdG9wdGlvbnM6IEl0ZW1SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2Vcblx0KSB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXHRcdGNvbnN0IHJlc3VsdDogSXRlbVJlc291cmNlW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxuXHRcdFx0cmVzdWx0LnB1c2godGhpcy5hZGRTaW5nbGVJdGVtKGl0ZW1FbnRyeSwgb3B0aW9ucywgZmFsc2UsIGxvY2FsQ2FjaGUpKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRhZGRDb2xsZWN0aW9uIChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlICYge2VkaXRDb2xsZWN0aW9uOiB0cnVlLCBlZGl0SXRlbXM6IHRydWV9XG5cdCk6IENvbGxlY3Rpb25FZGl0UmVzb3VyY2U8RWRpdFJlc291cmNlPjtcblxuXHRhZGRDb2xsZWN0aW9uIChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlICYge2VkaXRJdGVtczogdHJ1ZX1cblx0KTogQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxFZGl0UmVzb3VyY2U+O1xuXG5cdGFkZENvbGxlY3Rpb24gKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdENvbGxlY3Rpb246IHRydWUsIHJlbW90ZUl0ZW1zOiB0cnVlfVxuXHQpOiBDb2xsZWN0aW9uRWRpdFJlc291cmNlPFJlbW90ZVZpZXdSZXNvdXJjZT47XG5cblx0YWRkQ29sbGVjdGlvbiAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZSAmIHtyZW1vdGVJdGVtczogdHJ1ZX1cblx0KTogQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxSZW1vdGVWaWV3UmVzb3VyY2U+O1xuXG5cdGFkZENvbGxlY3Rpb24gKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdENvbGxlY3Rpb246IHRydWV9XG5cdCk6IENvbGxlY3Rpb25FZGl0UmVzb3VyY2U8TG9jYWxWaWV3UmVzb3VyY2U+O1xuXG5cdGFkZENvbGxlY3Rpb24gKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2Vcblx0KTogQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxMb2NhbFZpZXdSZXNvdXJjZT47XG5cblx0YWRkQ29sbGVjdGlvbiAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZVxuXHQpIHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cblx0XHRsb2NhbENhY2hlLmNvbGxlY3Rpb25zLmFkZChjb2xsZWN0aW9uRW50cnkpO1xuXG5cdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlKGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucyk7XG5cdH1cblxuXHRwcml2YXRlIGNyZWF0ZUl0ZW1SZXNvdXJjZXMgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXG5cdFx0b3B0aW9uczogSXRlbVJlc291cmNlT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0OiB0cnVlfSxcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlXG5cdCk6IEVkaXRSZXNvdXJjZVtdO1xuXG5cdHByaXZhdGUgY3JlYXRlSXRlbVJlc291cmNlcyAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcblx0XHRvcHRpb25zOiBJdGVtUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlICYge3JlbW90ZTogdHJ1ZX0sXG5cdFx0bG9jYWxDYWNoZTogTG9jYWxDYWNoZVxuXHQpOiBSZW1vdGVWaWV3UmVzb3VyY2VbXTtcblxuXHRwcml2YXRlIGNyZWF0ZUl0ZW1SZXNvdXJjZXMgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXG5cdFx0b3B0aW9uczogSXRlbVJlc291cmNlT3B0aW9uc0ludGVyZmFjZSxcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlXG5cdCk6IExvY2FsVmlld1Jlc291cmNlW107XG5cblx0cHJpdmF0ZSBjcmVhdGVJdGVtUmVzb3VyY2VzIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRcdG9wdGlvbnM6IEl0ZW1SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UsXG5cdFx0bG9jYWxDYWNoZTogTG9jYWxDYWNoZVxuXHQpIHtcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1SZXNvdXJjZVtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0cmVzdWx0LnB1c2gobG9jYWxDYWNoZS5jcmVhdGVJdGVtUmVzb3VyY2UoaXRlbUVudHJ5LCBvcHRpb25zKSk7XG5cblx0XHRcdGlmIChpdGVtVHlwZSA9PT0gJ1Byb2plY3Rub3RpdGllJykge1xuXHRcdFx0XHRjcmVhdGVQYXRoKFxuXHRcdFx0XHRcdGxvY2FsQ2FjaGUudGFiUmVxdWVzdFBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0W2l0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXG5cdFx0XHRcdFx0W3t9LCB7bm9fbm90aWZpY2F0aW9uOiB0cnVlfV1cblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cHJvY2Vzc0xpbmtlZEl0ZW1zIChcblx0XHRsaW5rZWRFbnRyaWVzOiBMaW5rZWRJdGVtRW50cnlNYXBbXSxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0OiB0cnVlfSxcblx0XHRhZGRUb0NvbGxlY3Rpb25zOiBib29sZWFuXG5cdCk6IEl0ZW1SZXNvdXJjZXNJdGVtVHlwZU1hcDxFZGl0UmVzb3VyY2U+O1xuXG5cdHByb2Nlc3NMaW5rZWRJdGVtcyAoXG5cdFx0bGlua2VkRW50cmllczogTGlua2VkSXRlbUVudHJ5TWFwW10sXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgJiB7cmVtb3RlOiB0cnVlfSxcblx0XHRhZGRUb0NvbGxlY3Rpb25zOiBib29sZWFuXG5cdCk6IEl0ZW1SZXNvdXJjZXNJdGVtVHlwZU1hcDxSZW1vdGVWaWV3UmVzb3VyY2U+O1xuXG5cdHByb2Nlc3NMaW5rZWRJdGVtcyAoXG5cdFx0bGlua2VkRW50cmllczogTGlua2VkSXRlbUVudHJ5TWFwW10sXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UsXG5cdFx0YWRkVG9Db2xsZWN0aW9uczogYm9vbGVhblxuXHQpOiBJdGVtUmVzb3VyY2VzSXRlbVR5cGVNYXA8TG9jYWxWaWV3UmVzb3VyY2U+O1xuXG5cdHByb2Nlc3NMaW5rZWRJdGVtcyAoXG5cdFx0bGlua2VkRW50cmllczogTGlua2VkSXRlbUVudHJ5TWFwW10sXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UsXG5cdFx0YWRkVG9Db2xsZWN0aW9uczogYm9vbGVhbiA9IHRydWVcblx0KSB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXHRcdGNvbnN0IHJlc3VsdDogSXRlbVJlc291cmNlc0l0ZW1UeXBlTWFwID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIGxpbmtlZEVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGl0ZW1UeXBlID0gZW50cnkuaXRlbVR5cGU7XG5cblx0XHRcdHJlc3VsdFtpdGVtVHlwZV0gPSB0aGlzLmNyZWF0ZUl0ZW1SZXNvdXJjZXMoZW50cnkuaXRlbVR5cGUsIGVudHJ5Lml0ZW1FbnRyaWVzLCBvcHRpb25zLCBsb2NhbENhY2hlKTtcblx0XHR9XG5cblx0XHRpZiAoIWFkZFRvQ29sbGVjdGlvbnMpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Ly8gdGhlIGl0ZW1FbnRyaWVzIGFyZSBpbiB0b3AtZG93biBvcmRlciwgc28gY2FsbCBmb3IgZWFjaCBpdGVtIHR5cGUgc2VwYXJhdGVseVxuXHRcdGZvciAoY29uc3QgZW50cnkgb2YgbGlua2VkRW50cmllcylcblx0XHRcdHRoaXMuZ2V0Q29sbGVjdGlvbk1hdGNoZXIoZW50cnkuaXRlbUVudHJpZXMsIGZhbHNlKS5hZGRUb0NvbGxlY3Rpb25zKCk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0ZXhwYW5kUHJvY2Vzc0xpbmtlZEl0ZW1zIChcblx0XHRsaW5rZWRFbnRyaWVzOiBMaW5rZWRJdGVtRW50cnlNYXBbXSxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0OiB0cnVlfVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1SZXNvdXJjZXNJdGVtVHlwZU1hcDxFZGl0UmVzb3VyY2U+PjtcblxuXHRleHBhbmRQcm9jZXNzTGlua2VkSXRlbXMgKFxuXHRcdGxpbmtlZEVudHJpZXM6IExpbmtlZEl0ZW1FbnRyeU1hcFtdLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlICYge3JlbW90ZTogdHJ1ZX1cblx0KTogUHJvbWlzZUludGVyZmFjZTxJdGVtUmVzb3VyY2VzSXRlbVR5cGVNYXA8UmVtb3RlVmlld1Jlc291cmNlPj47XG5cblx0ZXhwYW5kUHJvY2Vzc0xpbmtlZEl0ZW1zIChcblx0XHRsaW5rZWRFbnRyaWVzOiBMaW5rZWRJdGVtRW50cnlNYXBbXSxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1SZXNvdXJjZXNJdGVtVHlwZU1hcDxMb2NhbFZpZXdSZXNvdXJjZT4+O1xuXG5cdGV4cGFuZFByb2Nlc3NMaW5rZWRJdGVtcyAoXG5cdFx0bGlua2VkRW50cmllczogTGlua2VkSXRlbUVudHJ5TWFwW10sXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2Vcblx0KSB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXHRcdGxldCBwcm9taXNlQ2hhaW4gPSB0aGlzLnByb21pc2VJbnRlcmZhY2Uud2hlbih7fSk7XG5cblx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIGxpbmtlZEVudHJpZXMpIHtcblx0XHRcdC8vIHRoZSBpdGVtRW50cmllcyBhcmUgaW4gdG9wLWRvd24gb3JkZXIsIHNvIGNhbGwgZm9yIGVhY2ggaXRlbSB0eXBlIHNlcGFyYXRlbHlcblx0XHRcdHByb21pc2VDaGFpbiA9IHByb21pc2VDaGFpbi50aGVuKFxuXHRcdFx0XHR0aGlzLmNvbnN0cnVjdE9uSXRlbXNFeHBhbmRlZChlbnRyeS5pdGVtVHlwZSwgZW50cnkuaXRlbUVudHJpZXMsIG9wdGlvbnMsIGxvY2FsQ2FjaGUpLFxuXHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHByb21pc2VDaGFpbjtcblx0fVxuXG5cdHByaXZhdGUgY29uc3RydWN0T25JdGVtc0V4cGFuZGVkIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRcdGl0ZW1PcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0OiB0cnVlfSxcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlXG5cdCk6IChkZXN0aW5hdGlvbjogSXRlbVJlc291cmNlc0l0ZW1UeXBlTWFwKSA9PiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1SZXNvdXJjZXNJdGVtVHlwZU1hcDxFZGl0UmVzb3VyY2U+PjtcblxuXHRwcml2YXRlIGNvbnN0cnVjdE9uSXRlbXNFeHBhbmRlZCAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcblx0XHRpdGVtT3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgJiB7cmVtb3RlOiB0cnVlfSxcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlXG5cdCk6IChkZXN0aW5hdGlvbjogSXRlbVJlc291cmNlc0l0ZW1UeXBlTWFwKSA9PiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1SZXNvdXJjZXNJdGVtVHlwZU1hcDxSZW1vdGVWaWV3UmVzb3VyY2U+PjtcblxuXHRwcml2YXRlIGNvbnN0cnVjdE9uSXRlbXNFeHBhbmRlZCAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcblx0XHRpdGVtT3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UsXG5cdFx0bG9jYWxDYWNoZTogTG9jYWxDYWNoZVxuXHQpOiAoZGVzdGluYXRpb246IEl0ZW1SZXNvdXJjZXNJdGVtVHlwZU1hcCkgPT4gUHJvbWlzZUludGVyZmFjZTxJdGVtUmVzb3VyY2VzSXRlbVR5cGVNYXA8TG9jYWxWaWV3UmVzb3VyY2U+PjtcblxuXHRwcml2YXRlIGNvbnN0cnVjdE9uSXRlbXNFeHBhbmRlZCAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcblx0XHRpdGVtT3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UsXG5cdFx0bG9jYWxDYWNoZTogTG9jYWxDYWNoZVxuXHQpIHtcblx0XHRyZXR1cm4gZGVzdGluYXRpb24gPT4ge1xuXHRcdFx0cmV0dXJuIHRoaXMuZXhwYW5kQWRkVG9Db2xsZWN0aW9ucyhpdGVtVHlwZSwgaXRlbUVudHJpZXMsIG51bGwsIGxvY2FsQ2FjaGUpLnRoZW4oXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRkZXN0aW5hdGlvbltpdGVtVHlwZV0gPSB0aGlzLmNyZWF0ZUl0ZW1SZXNvdXJjZXMoaXRlbVR5cGUsIGl0ZW1FbnRyaWVzLCBpdGVtT3B0aW9ucywgbG9jYWxDYWNoZSk7XG5cblx0XHRcdFx0XHRyZXR1cm4gZGVzdGluYXRpb247XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0KTtcblx0XHR9O1xuXHR9XG5cblx0cHJpdmF0ZSBleHBhbmRBZGRUb0NvbGxlY3Rpb25zPFQgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2UgPSBDb2xsZWN0aW9uVmlld1Jlc291cmNlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcblx0XHRyZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2U6IFQsXG5cdFx0bG9jYWxDYWNoZT86IExvY2FsQ2FjaGVcblx0KTogUHJvbWlzZUludGVyZmFjZTxUWydpdGVtcyddPjtcblxuXHRwcml2YXRlIGV4cGFuZEFkZFRvQ29sbGVjdGlvbnMgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXG5cdFx0cmVzdWx0Q29sbGVjdGlvblJlc291cmNlPzogbnVsbCxcblx0XHRsb2NhbENhY2hlPzogTG9jYWxDYWNoZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPG51bGw+O1xuXG5cdHByaXZhdGUgZXhwYW5kQWRkVG9Db2xsZWN0aW9uczxUIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlID0gQ29sbGVjdGlvblZpZXdSZXNvdXJjZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXG5cdFx0cmVzdWx0Q29sbGVjdGlvblJlc291cmNlPzogVCB8IG51bGwsXG5cdFx0bG9jYWxDYWNoZT86IExvY2FsQ2FjaGVcblx0KTogUHJvbWlzZUludGVyZmFjZTxUWydpdGVtcyddIHwgbnVsbD47XG5cblx0cHJpdmF0ZSBleHBhbmRBZGRUb0NvbGxlY3Rpb25zPFQgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2UgPSBDb2xsZWN0aW9uVmlld1Jlc291cmNlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcblx0XHRyZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2U6IFQgfCBudWxsID0gbnVsbCxcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKClcblx0KTogUHJvbWlzZUludGVyZmFjZTxUWydpdGVtcyddIHwgbnVsbD4ge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25NYXRjaGVyID0gdGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0W2xvY2FsQ2FjaGUuY29sbGVjdGlvbnNdLFxuXHRcdFx0ZmFsc2UsXG5cdFx0XHRmYWxzZVxuXHRcdCk7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyLmV4cGFuZChpdGVtRW50cnkpO1xuXG5cdFx0Y29uc3QgY29sdW1uU3VwZXJzZXQgPSB0aGlzLmdldENvbHVtblN1cGVyc2V0KGNvbGxlY3Rpb25NYXRjaGVyLmdldENvbGxlY3Rpb25zV2l0aEZpdHRpbmdJdGVtcygpKTtcblxuXHRcdGlmIChjb2x1bW5TdXBlcnNldCA9PT0gbnVsbClcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VJbnRlcmZhY2Uud2hlbihDb2xsZWN0aW9uUmVzb3VyY2UgPT09IG51bGwgPyBudWxsIDogW10pO1xuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZXhwYW5kTG9jYWxFbnRyaWVzKFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRpdGVtRW50cmllcyxcblx0XHRcdGNvbHVtblN1cGVyc2V0LnJlcXVlc3QsXG5cdFx0XHRjb2x1bW5TdXBlcnNldC5yZXNwb25zZSxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXNcblx0XHQpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiBjb2xsZWN0aW9uTWF0Y2hlci5hZGRUb0NvbGxlY3Rpb25zKHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZSk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdC8vIHdlIGNvdWxkIG1vdmUgdGhpcyB0byB0aGUgQ29sbGVjdGlvbk1hdGNoZXIgaWYgd2UgZW5mb3JjZSBhIHNpbmdsZSBpdGVtIHR5cGVcblx0cHJpdmF0ZSBnZXRDb2x1bW5TdXBlcnNldCAoY29sbGVjdGlvbkVudHJpZXM6IENvbGxlY3Rpb25FbnRyeVtdKTogQ29sdW1uU2V0IHwgbnVsbCB7XG5cdFx0Y29uc3QgY29sdW1uU2V0SWRNYXA6IHtbY29sdW1uU2V0SWQ6IG51bWJlcl06IGJvb2xlYW59ID0ge307XG5cblx0XHRpZiAoY29sbGVjdGlvbkVudHJpZXMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHRsZXQgcmVzdWx0ID0gY29sbGVjdGlvbkVudHJpZXNbMF0uY29sdW1ucztcblxuXHRcdGZvciAobGV0IGkgPSAxOyBpIDwgY29sbGVjdGlvbkVudHJpZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGNvbGxlY3Rpb25FbnRyaWVzW2ldO1xuXHRcdFx0Y29uc3QgY29sdW1uU2V0ID0gY29sbGVjdGlvbkVudHJ5LmNvbHVtbnM7XG5cblx0XHRcdGlmIChjb2x1bW5TZXRJZE1hcFtjb2x1bW5TZXQuaWRdID09PSB0cnVlKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0Y29sdW1uU2V0SWRNYXBbY29sdW1uU2V0LmlkXSA9IHRydWU7XG5cblx0XHRcdHJlc3VsdCA9IHJlc3VsdC5tZXJnZShjb2x1bW5TZXQpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRnZXRMb2NhbENhY2hlICgpOiBMb2NhbENhY2hlIHtcblx0XHRyZXR1cm4gdGhpcy5sb2NhbENhY2hlTWFuYWdlci5nZXRDdXJyZW50TG9jYWxDYWNoZSh0aGlzLmF1dGhJbnRlcmZhY2UuZ2V0VW5pcXVlVXNlcklkKCkpO1xuXHR9XG5cblx0cmVzZXRMb2NhbENhY2hlICgpIHtcblx0XHRjb25zdCBvbGRMb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMubG9jYWxDYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XG5cblx0XHRvbGRMb2NhbENhY2hlLmNsZWFyUmVzb3VyY2VzKCk7XG5cblx0XHR0aGlzLmxvY2FsQ2FjaGVNYW5hZ2VyLnNldEN1cnJlbnRMb2NhbENhY2hlKHRoaXMuYXV0aEludGVyZmFjZS5nZXRVbmlxdWVVc2VySWQoKSwgbG9jYWxDYWNoZSk7XG5cdH1cblxuXHRhZGRUb0NvbGxlY3Rpb25zPFQgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2UgPSBDb2xsZWN0aW9uVmlld1Jlc291cmNlPiAoXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRcdHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZTogVFxuXHQpOiBUWydpdGVtcyddO1xuXG5cdGFkZFRvQ29sbGVjdGlvbnMgKFxuXHRcdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcblx0XHRyZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2U/OiBudWxsXG5cdCk6IG51bGw7XG5cblx0YWRkVG9Db2xsZWN0aW9uczxUIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlID0gQ29sbGVjdGlvblZpZXdSZXNvdXJjZT4gKFxuXHRcdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcblx0XHRyZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2U/OiBUIHwgbnVsbFxuXHQpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRDb2xsZWN0aW9uTWF0Y2hlcihpdGVtRW50cmllcykuYWRkVG9Db2xsZWN0aW9ucyhyZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2UpO1xuXHR9XG5cblx0cmVtb3ZlRnJvbUNvbGxlY3Rpb25zPFQgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2UgPSBDb2xsZWN0aW9uVmlld1Jlc291cmNlPiAoXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRcdHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZTogVFxuXHQpOiBUWydpdGVtcyddO1xuXG5cdHJlbW92ZUZyb21Db2xsZWN0aW9ucyAoXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRcdHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZT86IG51bGxcblx0KTogbnVsbDtcblxuXHRyZW1vdmVGcm9tQ29sbGVjdGlvbnM8VCBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZSA9IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U+IChcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXG5cdFx0cmVzdWx0Q29sbGVjdGlvblJlc291cmNlPzogVCB8IG51bGxcblx0KSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0Q29sbGVjdGlvbk1hdGNoZXIoaXRlbUVudHJpZXMsIGZhbHNlKS5yZW1vdmVGcm9tQ29sbGVjdGlvbnMocmVzdWx0Q29sbGVjdGlvblJlc291cmNlKTtcblx0fVxuXG5cdHNhdmVMb2NhbCAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpIHtcblx0XHRjb25zdCBpdGVtRW50cnkgPSBpdGVtUmVzb3VyY2UuZW50cnk7XG5cblx0XHRpdGVtRW50cnkuc2V0RGlzcGxheU5hbWUoKTtcblx0XHR0aGlzLmFkZFRvQ29sbGVjdGlvbnMoW2l0ZW1FbnRyeV0pO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZUludGVyZmFjZS53aGVuKGl0ZW1SZXNvdXJjZSk7XG5cdH1cblxuXHR1cGRhdGVJdGVtSWRNYXAgKGNvbGxlY3Rpb25NYXA6IGFueSwgY29udmVyc2lvbk1hcDogQ29udmVyc2lvbk1hcCk6IHZvaWQge1xuXHRcdGlmIChjb252ZXJzaW9uTWFwID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm47XG5cblx0XHRmb3IgKGNvbnN0IG9sZElkIGluIGNvbnZlcnNpb25NYXApIHtcblx0XHRcdGNvbnN0IG5ld0lkID0gY29udmVyc2lvbk1hcFtvbGRJZF07XG5cblx0XHRcdGlmIChjb2xsZWN0aW9uTWFwW29sZElkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0Y29sbGVjdGlvbk1hcFtuZXdJZF0gPSBjb2xsZWN0aW9uTWFwW29sZElkXTtcblx0XHRcdGRlbGV0ZSBjb2xsZWN0aW9uTWFwW29sZElkXTtcblx0XHR9XG5cdH1cblxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UgKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdHJlc291cmNlT3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0SXRlbXM6IHRydWUsIGVkaXRDb2xsZWN0aW9uOiB0cnVlfVxuXHQpOiBDb2xsZWN0aW9uRWRpdFJlc291cmNlPEVkaXRSZXNvdXJjZT47XG5cblx0Y3JlYXRlQ29sbGVjdGlvblJlc291cmNlIChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRyZXNvdXJjZU9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdEl0ZW1zOiB0cnVlfVxuXHQpOiBDb2xsZWN0aW9uVmlld1Jlc291cmNlPEVkaXRSZXNvdXJjZT47XG5cblx0Y3JlYXRlQ29sbGVjdGlvblJlc291cmNlIChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRyZXNvdXJjZU9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UgJiB7cmVtb3RlSXRlbXM6IHRydWUsIGVkaXRDb2xsZWN0aW9uOiB0cnVlfVxuXHQpOiBDb2xsZWN0aW9uRWRpdFJlc291cmNlPFJlbW90ZVZpZXdSZXNvdXJjZT47XG5cblx0Y3JlYXRlQ29sbGVjdGlvblJlc291cmNlIChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRyZXNvdXJjZU9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UgJiB7cmVtb3RlSXRlbXM6IHRydWV9XG5cdCk6IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8UmVtb3RlVmlld1Jlc291cmNlPjtcblxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UgKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdHJlc291cmNlT3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0Q29sbGVjdGlvbjogdHJ1ZX1cblx0KTogQ29sbGVjdGlvbkVkaXRSZXNvdXJjZTxMb2NhbFZpZXdSZXNvdXJjZT47XG5cblx0Y3JlYXRlQ29sbGVjdGlvblJlc291cmNlIChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRyZXNvdXJjZU9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2Vcblx0KTogQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxMb2NhbFZpZXdSZXNvdXJjZT47XG5cblx0Y3JlYXRlQ29sbGVjdGlvblJlc291cmNlIChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRyZXNvdXJjZU9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2Vcblx0KSB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkQ29sbGVjdGlvbihjb2xsZWN0aW9uRW50cnksIHJlc291cmNlT3B0aW9ucyk7XG5cdH1cblxuXHRjcmVhdGVJdGVtUmVzb3VyY2UgKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5LFxuXHRcdG9wdGlvbnM6IEl0ZW1SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdDogdHJ1ZX0sXG5cdFx0aXNSb290OiBib29sZWFuXG5cdCk6IEVkaXRSZXNvdXJjZTtcblxuXHRjcmVhdGVJdGVtUmVzb3VyY2UgKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5LFxuXHRcdG9wdGlvbnM6IEl0ZW1SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UgJiB7cmVtb3RlOiB0cnVlfSxcblx0XHRpc1Jvb3Q6IGJvb2xlYW5cblx0KTogUmVtb3RlVmlld1Jlc291cmNlO1xuXG5cdGNyZWF0ZUl0ZW1SZXNvdXJjZSAoXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnksXG5cdFx0b3B0aW9uczogSXRlbVJlc291cmNlT3B0aW9uc0ludGVyZmFjZSxcblx0XHRpc1Jvb3Q6IGJvb2xlYW5cblx0KTogTG9jYWxWaWV3UmVzb3VyY2U7XG5cblx0Y3JlYXRlSXRlbVJlc291cmNlIChcblx0XHRpdGVtRW50cnk6IEl0ZW1FbnRyeSxcblx0XHRvcHRpb25zOiBJdGVtUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlLFxuXHRcdGlzUm9vdDogYm9vbGVhblxuXHQpIHtcblx0XHRyZXR1cm4gdGhpcy5hZGRTaW5nbGVJdGVtKGl0ZW1FbnRyeSwgb3B0aW9ucywgaXNSb290KTtcblx0fVxuXG5cdG9uQmVmb3JlU2F2ZSAoa2V5OiBzdHJpbmcsIGNhbGxiYWNrOiAobG9jYWxDYWNoZTogTG9jYWxDYWNoZSkgPT4gYW55LCBjb25kaXRpb24/OiBMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24pIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbENhY2hlKCkub25CZWZvcmVTYXZlKGtleSwgY2FsbGJhY2ssIGNvbmRpdGlvbik7XG5cdH1cblxuXHRvblNhdmVTdWNjZXNzIChrZXk6IHN0cmluZywgY2FsbGJhY2s6IE9uU2F2ZUNhbGxiYWNrLCBjb25kaXRpb24/OiBMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24pIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbENhY2hlKCkub25TYXZlU3VjY2VzcyhrZXksIGNhbGxiYWNrLCBjb25kaXRpb24pO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBRdWVyeU1hdGNoZXJGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uUXVlcnksIEl0ZW1FbnRyeU1hcCwgSXRlbUVudHJ5UGFyZW50SWRNYXAsIEl0ZW1JZCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBJdGVtQ2FjaGUge1xuXHRwcml2YXRlIGVudHJpZXM6IEl0ZW1FbnRyeU1hcCA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3Rvcnlcblx0KSB7XG5cdH1cblxuXHRzb21lIChjYWxsYmFjazogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBib29sZWFuKSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gZW50cmllcykge1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllc1tpdGVtVHlwZV0pIHtcblx0XHRcdFx0aWYgKGNhbGxiYWNrKGVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF0pKVxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGdldEJ5SXRlbVR5cGUgKGl0ZW1UeXBlOiBJdGVtVHlwZSkge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5W10gPSBbXTtcblxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllcylcblx0XHRcdHJlc3VsdC5wdXNoKGVudHJpZXNbaXRlbUlkXSk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0QnlRdWVyeSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBxdWVyeTogQ29sbGVjdGlvblF1ZXJ5KSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xuXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBlbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSBlbnRyaWVzW2l0ZW1JZF07XG5cblx0XHRcdGlmIChpdGVtRW50cnkuaXNEZWZlcnJlZCgpKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0aWYgKHRoaXMubWF0Y2hRdWVyeShpdGVtRW50cnksIHF1ZXJ5KSlcblx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0TG9jYWxCeVF1ZXJ5IChpdGVtVHlwZTogSXRlbVR5cGUsIHF1ZXJ5OiBDb2xsZWN0aW9uUXVlcnkpIHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVtdID0gW107XG5cblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGVudHJpZXNbaXRlbUlkXTtcblxuXHRcdFx0aWYgKCFpdGVtRW50cnkuaXNMb2NhbCgpKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0aWYgKHRoaXMubWF0Y2hRdWVyeShpdGVtRW50cnksIHF1ZXJ5KSlcblx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0QnlQYXJlbnQgKHBhcmVudFR5cGU6IEl0ZW1UeXBlLCBwYXJlbnRJZDogSXRlbUlkLCBpdGVtVHlwZTogSXRlbVR5cGUpIHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVtdID0gW107XG5cblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGVudHJpZXNbaXRlbUlkXTtcblx0XHRcdGNvbnN0IHBhcmVudCA9IGl0ZW1FbnRyeS5wYXJlbnQ7XG5cblx0XHRcdGlmIChwYXJlbnQgPT09IG51bGwpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuXHRcdFx0aWYgKHBhcmVudC5pdGVtVHlwZSA9PT0gcGFyZW50VHlwZSAmJiBwYXJlbnQuaXRlbUlkID09IHBhcmVudElkKVxuXHRcdFx0XHRyZXN1bHQucHVzaChpdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRiYXRjaEdldExvY2FsQnlQYXJlbnQgKFxuXHRcdHBhcmVudFR5cGU6IEl0ZW1UeXBlLFxuXHRcdHBhcmVudElkczogSXRlbUlkW10sXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGFkZGl0aW9uYWxRdWVyeTogYW55XG5cdCk6IEl0ZW1FbnRyeVBhcmVudElkTWFwIHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVBhcmVudElkTWFwID0ge307XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIG9mIHBhcmVudElkcylcblx0XHRcdHJlc3VsdFtwYXJlbnRJZF0gPSBbXTtcblxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllcykge1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gZW50cmllc1tpdGVtSWRdO1xuXHRcdFx0Y29uc3QgcGFyZW50ID0gaXRlbUVudHJ5LnBhcmVudDtcblxuXHRcdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGlmIChwYXJlbnQuaXRlbVR5cGUgIT09IHBhcmVudFR5cGUgfHwgcmVzdWx0W3BhcmVudC5pdGVtSWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAoIWl0ZW1FbnRyeS5pc0xvY2FsKCkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAoYWRkaXRpb25hbFF1ZXJ5ID09PSBudWxsIHx8IHRoaXMubWF0Y2hRdWVyeShpdGVtRW50cnksIGFkZGl0aW9uYWxRdWVyeSkpXG5cdFx0XHRcdHJlc3VsdFtwYXJlbnQuaXRlbUlkXS5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGZvckVhY2ggKGNhbGxiYWNrOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IHZvaWQpIHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBlbnRyaWVzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBlbnRyaWVzW2l0ZW1UeXBlXSlcblx0XHRcdFx0Y2FsbGJhY2soZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXSk7XG5cdFx0fVxuXHR9XG5cblx0dG9BcnJheSAoKSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGVudHJpZXMpIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGVudHJpZXNbaXRlbVR5cGVdKVxuXHRcdFx0XHRyZXN1bHQucHVzaChlbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0YWRkIChpdGVtRW50cnk6IEl0ZW1FbnRyeSk6IEl0ZW1FbnRyeSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcblxuXHRcdGlmIChlbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0ZW50cmllc1tpdGVtVHlwZV0gPSB7fTtcblxuXHRcdHJldHVybiBlbnRyaWVzW2l0ZW1UeXBlXVtpdGVtRW50cnkuaXRlbUlkXSA9IGl0ZW1FbnRyeTtcblx0fVxuXG5cdGdldCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IHN0cmluZyB8IEl0ZW1JZCk6IHVuZGVmaW5lZCB8IEl0ZW1FbnRyeSB7XG5cdFx0cmV0dXJuIHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXTtcblx0fVxuXG5cdC8vIHNob3VsZCBiZSBmYXN0XG5cdGNvbnRhaW5zIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogc3RyaW5nIHwgSXRlbUlkKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZW50cmllc1tpdGVtVHlwZV0gIT09IHVuZGVmaW5lZCAmJiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF0gIT09IHVuZGVmaW5lZDtcblx0fVxuXG5cdHVwZGF0ZUl0ZW1JZCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIG9sZEl0ZW1JZDogc3RyaW5nIHwgSXRlbUlkKTogSXRlbUVudHJ5IHtcblx0XHRjb25zdCBlbnRyeU1hcCA9IHRoaXMuZW50cmllc1tpdGVtRW50cnkuaXRlbVR5cGVdO1xuXG5cdFx0ZGVsZXRlIGVudHJ5TWFwW29sZEl0ZW1JZF07XG5cdFx0cmV0dXJuIGVudHJ5TWFwW2l0ZW1FbnRyeS5pdGVtSWRdID0gaXRlbUVudHJ5O1xuXHR9XG5cblx0Y2xlYXIgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KTogYm9vbGVhbiB7XG5cdFx0aWYgKGl0ZW1FbnRyeSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLmVudHJpZXMgPSB7fTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmNsZWFyQnlJdGVtSWQoaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkKTtcblx0fVxuXG5cdGNsZWFyQnlJdGVtSWQgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQpOiBib29sZWFuIHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcblxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRyZXR1cm4gZGVsZXRlIGVudHJpZXNbaXRlbUlkXTtcblx0fVxuXG5cdG1hdGNoUXVlcnkgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBxdWVyeTogQ29sbGVjdGlvblF1ZXJ5KTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRpdGVtRW50cnkuaXRlbVR5cGUsXG5cdFx0XHRpdGVtRW50cnkuZ2V0RmllbGRzKCksXG5cdFx0XHRpdGVtRW50cnkucGFyZW50XG5cdFx0KS5tYXRjaFF1ZXJ5KHF1ZXJ5Lm9iamVjdCkgPT09IHRydWU7IC8vIFRPRE86IG1heWJlP1xuXHR9XG59XG4iLCJpbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcblxuaW1wb3J0IHsgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQUxMX1BFUk1JU1NJT05TIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IEF1dGhJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEl0ZW1FbnRyeSwgSXRlbUVudHJ5T3B0aW9ucyB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge1xuXHRBcGlSZXNwb25zZSxcblx0RmllbGRNYXAsXG5cdEl0ZW1FcnJvcixcblx0SXRlbUlkLFxuXHRJdGVtSWRDb252ZXJzaW9uTWFwLFxuXHRJdGVtT3B0aW9uc0ludGVyZmFjZSxcblx0SXRlbVR5cGVcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgSXRlbUVudHJ5U2VydmljZSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGF1dGhJbnRlcmZhY2U6IEF1dGhJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlXG5cdCkge1xuXG5cdH1cblxuXHRwcm9jZXNzT3B0aW9ucyAob3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UpOiBJdGVtRW50cnlPcHRpb25zIHtcblx0XHRyZXR1cm4gbmV3IEl0ZW1FbnRyeU9wdGlvbnMob3B0aW9ucyk7XG5cdH1cblxuXHQvLyB0b2RvOiB0cmFuc2xhdGVcblx0Y3JlYXRlVW5mb3VuZFJlbW90ZUl0ZW1FcnJvciAoKTogSXRlbUVycm9yIHtcblx0XHRyZXR1cm4ge21lc3NhZ2U6ICdUaGUgcmVxdWVzdGVkIGl0ZW0gY291bGQgbm90IGJlIGZvdW5kIC8geW91ciBjdXJyZW50IHBlcm1pc3Npb25zIGFyZSBub3Qgc3VmZmljaWVudCd9O1xuXHR9XG5cblx0Y3JlYXRlVW5mb3VuZExvY2FsSXRlbUVycm9yIChpdGVtVHlwZTogSXRlbVR5cGUpIHtcblx0XHRyZXR1cm4ge21lc3NhZ2U6ICdBIGxvY2FsIGl0ZW0gb2YgdHlwZSAnICsgaXRlbVR5cGUgKyAnIGNvdWxkIG5vdCBiZSBmb3VuZCd9O1xuXHR9XG5cblx0Y3JlYXRlTG9jYWxDb252ZXJzaW9uTWFwIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUlkOiBJdGVtSWQsXG5cdFx0ZG9FeHRlbmQ6IGJvb2xlYW4gPSBmYWxzZSxcblx0XHRhcGlSZXNwb25zZTogQXBpUmVzcG9uc2Vcblx0KTogSXRlbUlkQ29udmVyc2lvbk1hcCB7XG5cdFx0Y29uc3QgYXBpSXRlbUlkID0gYXBpUmVzcG9uc2UubGlua3NbaXRlbVR5cGVdWzBdO1xuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUlkQ29udmVyc2lvbk1hcCA9IHt9O1xuXG5cdFx0cmVzdWx0W2l0ZW1UeXBlXSA9IHt9O1xuXHRcdHJlc3VsdFtpdGVtVHlwZV1bYXBpSXRlbUlkXSA9IGl0ZW1JZDtcblxuXHRcdGlmIChkb0V4dGVuZClcblx0XHRcdHRoaXMuZXhwYW5kTG9jYWxDb252ZXJzaW9uTWFwKGl0ZW1UeXBlLCBhcGlJdGVtSWQsIGFwaVJlc3BvbnNlLCByZXN1bHQpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGV4cGFuZExvY2FsQ29udmVyc2lvbk1hcCAoXG5cdFx0cGFyZW50VHlwZTogSXRlbVR5cGUsXG5cdFx0cGFyZW50SWQ6IEl0ZW1JZCxcblx0XHRhcGlSZXNwb25zZTogQXBpUmVzcG9uc2UsXG5cdFx0Y29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcFxuXHQpOiB2b2lkIHtcblx0XHRjb25zdCBsaW5rcyA9IGFwaVJlc3BvbnNlLml0ZW1zW3BhcmVudFR5cGVdW3BhcmVudElkXS5saW5rcztcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gbGlua3MpIHtcblx0XHRcdGNvbnN0IGlkQXJyYXkgPSBsaW5rc1tpdGVtVHlwZV07XG5cblx0XHRcdGlmIChjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXSA9IHt9O1xuXG5cdFx0XHRmb3IgKGNvbnN0IGFwaUl0ZW1JZCBvZiBpZEFycmF5KSB7XG5cdFx0XHRcdGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdW2FwaUl0ZW1JZF0gPSB0aGlzLmtleVNlcnZpY2UuZ2V0TG9jYWxJZCgpO1xuXG5cdFx0XHRcdHRoaXMuZXhwYW5kTG9jYWxDb252ZXJzaW9uTWFwKGl0ZW1UeXBlLCBhcGlJdGVtSWQsIGFwaVJlc3BvbnNlLCBjb252ZXJzaW9uTWFwKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRleHBhbmRDb252ZXJzaW9uTWFwIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCwgbmV3SXRlbUlkPzogSXRlbUlkKTogSXRlbUlkIHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xuXG5cdFx0bGV0IGNvbnZlcnNpb25NYXBFbnRyeTtcblxuXHRcdGlmIChjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0Y29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPSB7fTtcblxuXHRcdGNvbnZlcnNpb25NYXBFbnRyeSA9IGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdO1xuXG5cdFx0aWYgKGNvbnZlcnNpb25NYXBFbnRyeVtpdGVtSWRdICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gY29udmVyc2lvbk1hcEVudHJ5W2l0ZW1JZF07XG5cblx0XHRpZiAobmV3SXRlbUlkID09PSB1bmRlZmluZWQpXG5cdFx0XHRuZXdJdGVtSWQgPSB0aGlzLmtleVNlcnZpY2UuZ2V0TG9jYWxJZCgpO1xuXG5cdFx0cmV0dXJuIGNvbnZlcnNpb25NYXBFbnRyeVtpdGVtSWRdID0gbmV3SXRlbUlkO1xuXHR9XG5cblx0YmF0Y2hFeHBhbmRDb252ZXJzaW9uTWFwIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApOiBJdGVtSWRDb252ZXJzaW9uTWFwIHtcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdHRoaXMuZXhwYW5kQ29udmVyc2lvbk1hcChpdGVtRW50cnksIGNvbnZlcnNpb25NYXApO1xuXG5cdFx0cmV0dXJuIGNvbnZlcnNpb25NYXA7XG5cdH1cblxuXHRnZXRDb252ZXJzaW9uVmFsdWUgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQsIG1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCk6IEl0ZW1JZCB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKG1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRyZXR1cm4gbWFwW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXHR9XG5cblx0YmF0Y2hDbG9uZSAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCBjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwID0ge30pOiBJdGVtRW50cnlbXSB7XG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xuXG5cdFx0Ly8gdGhlIHRoZSBpdGVtcyBtaWdodCByZWZlcmVuY2UgZWFjaCBvdGhlciwgc28gdXBkYXRlIHRoZSBjb252ZXJzaW9uIG1hcCBmaXJzdFxuXHRcdHRoaXMuYmF0Y2hFeHBhbmRDb252ZXJzaW9uTWFwKGl0ZW1FbnRyaWVzLCBjb252ZXJzaW9uTWFwKTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxuXHRcdFx0cmVzdWx0LnB1c2goaXRlbUVudHJ5LmNsb25lKGNvbnZlcnNpb25NYXApKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRnZXRGdWxsTmFtZSAoZmlyc3ROYW1lOiBzdHJpbmcsIGluZml4OiBzdHJpbmcsIGxhc3ROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdHJldHVybiBmaXJzdE5hbWUudHJpbSgpXG5cdFx0XHQuY29uY2F0KCcgJywgaW5maXgpLnRyaW0oKSAvLyBpbmZpeCBjYW4gYmUgYW4gZW1wdHkgc3RyaW5nXG5cdFx0XHQuY29uY2F0KCcgJywgbGFzdE5hbWUpO1xuXHR9XG5cblx0Z2V0VGl0bGVGaWVsZCAoaXRlbVR5cGU6IEl0ZW1UeXBlKTogc3RyaW5nIHtcblx0XHRzd2l0Y2ggKGl0ZW1UeXBlKSB7XG5cdFx0XHRjYXNlICdFeGVtcGxhYXInOlxuXHRcdFx0XHRyZXR1cm4gJ3NlcmllbnVtbWVyJztcblx0XHRcdGNhc2UgJ0ZhY3R1dXInOlxuXHRcdFx0XHRyZXR1cm4gJ251bW1lcic7XG5cdFx0XHRjYXNlICdGaWxlcyc6XG5cdFx0XHRcdHJldHVybiAnZnJpZW5kbHluYW1lJztcblx0XHRcdGNhc2UgJ0Z1bmN0aWUnOlxuXHRcdFx0Y2FzZSAnU3RhbmRhYXJkZnVuY3RpZSc6XG5cdFx0XHRcdHJldHVybiAnbmFhbWludGVybic7XG5cdFx0XHRjYXNlICdWb29ycmFhZG11dGF0aWUnOlxuXHRcdFx0XHRyZXR1cm4gJ29tc2NocmlqdmluZyc7XG5cdFx0XHRjYXNlICdCYXJjb2RlJzpcblx0XHRcdFx0cmV0dXJuICdjb2RlJztcblx0XHRcdGNhc2UgJ0JldGFhbG1pZGRlbCc6XG5cdFx0XHRjYXNlICdCZXRhbGluZ3Njb25kaXRpZSc6XG5cdFx0XHRjYXNlICdCcmllZnBhcGllcic6XG5cdFx0XHRjYXNlICdUYXhDbGFzcyc6XG5cdFx0XHRjYXNlICdUYXhTY2hlbWEnOlxuXHRcdFx0Y2FzZSAnQ29uZGl0aW9uJzpcblx0XHRcdGNhc2UgJ0ZhY3R1dXJtb21lbnQnOlxuXHRcdFx0Y2FzZSAnRnVuY3RpZWdyb2VwJzpcblx0XHRcdGNhc2UgJ0dyb290Ym9layc6XG5cdFx0XHRjYXNlICdJbmh1dXInOlxuXHRcdFx0Y2FzZSAnSW5odXVyZ3JvZXAnOlxuXHRcdFx0Y2FzZSAnSW5odXVybWF0ZXJpYWFsJzpcblx0XHRcdGNhc2UgJ01hdGVyaWFhbCc6XG5cdFx0XHRjYXNlICdNYXRlcmlhYWxDYXQnOlxuXHRcdFx0Y2FzZSAnTWVkZXdlcmtlcnRhcmllZic6XG5cdFx0XHRjYXNlICdOb3RpdGllJzpcblx0XHRcdGNhc2UgJ1BsYW5uaW5nbWF0ZXJpYWFsJzpcblx0XHRcdGNhc2UgJ1Byb2plY3QnOlxuXHRcdFx0Y2FzZSAnU3RhZmZlbGdyb2VwJzpcblx0XHRcdGNhc2UgJ1N1YnByb2plY3QnOlxuXHRcdFx0Y2FzZSAnVGFhayc6XG5cdFx0XHRjYXNlICdUYWcnOlxuXHRcdFx0Y2FzZSAnVGVtcGxhdGUnOlxuXHRcdFx0Y2FzZSAnVGlqZCc6XG5cdFx0XHRjYXNlICdUaXRlbCc6XG5cdFx0XHRjYXNlICdUeXBlJzpcblx0XHRcdGNhc2UgJ1ZvZXJ0dWlnJzpcblx0XHRcdFx0cmV0dXJuICduYWFtJztcblx0XHRcdC8vIGNhc2UgJ0NvbnRhY3QnOlxuXHRcdFx0Ly8gY2FzZSAnTWVkZXdlcmtlcic6XG5cdFx0XHQvLyBjYXNlICdQZXJzb24nOlxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0Ly8gb25seSB1c2UgZGlzcGxheW5hbWUgZm9yIGl0ZW1zIHRoYXQgZG9udCd0IGhhdmUgYSBzaW1wbGUsIHdyaXRhYmxlIG5hbWUgZmllbGRcblx0XHRcdFx0Ly8gdGhpcyBmdW5jdGlvbiBpcyBhbHNvIHVzZWQgZm9yIHRlbXBsYXRlZCBpdGVtc1xuXHRcdFx0XHRyZXR1cm4gJ2Rpc3BsYXluYW1lJztcblx0XHR9XG5cdH1cblxuXHQvLyBUT0RPOiB3ZSBjYW4gcmVtb3ZlIHRoZXNlIG9uY2UgYWxsIGNvbHVtbnMgYXJlIHJlc3BlY3RlZCBmb3IgbG9jYWwgaXRlbXMgW1JNNC0xMDM3OF1cblx0Z2V0TG9jYWxEZWZhdWx0VmFsdWVzICgpOiBGaWVsZE1hcCB7XG5cdFx0cmV0dXJuIHtwZXJtaXNzaW9uczogQUxMX1BFUk1JU1NJT05TLCBjcmVhdG9yOiB0aGlzLmF1dGhJbnRlcmZhY2UuZ2V0VXNlcklkKCksIGNyZWF0ZWQ6IG1vbWVudCgpfTtcblx0fVxuXG5cdGhhc0xvY2FsRGVmYXVsdFZhbHVlIChjb2x1bW5JZDogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0c3dpdGNoIChjb2x1bW5JZCkge1xuXHRcdFx0Y2FzZSAncGVybWlzc2lvbnMnOlxuXHRcdFx0Y2FzZSAnY3JlYXRvcic6XG5cdFx0XHRjYXNlICdjcmVhdGVkJzpcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG59XG4iLCJpbXBvcnQge1xuXHRBcGlGb3JtYXR0ZXIsXG5cdEFwaVJlc3BvbnNlUHJvY2Vzc29yLFxuXHRCYXRjaFN0YXR1cyxcblx0Q29sdW1uRXhwYW5zaW9uLFxuXHRDb2x1bW5IYW5kbGVyLFxuXHRDb2x1bW5JbmZvLFxuXHRDb2x1bW5TZXQsXG5cdENvbHVtblN1YnNldENhY2hlLFxuXHRDb2x1bW5VdGlsLFxuXHRJdGVtQ2FjaGUsXG5cdEl0ZW1FbnRyeVNlcnZpY2UsXG5cdEtleVNlcnZpY2Vcbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBFTlRSWV9TVEFUVVMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHtcblx0QmF0Y2hTdGF0dXNGYWN0b3J5LFxuXHRDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRDb2x1bW5TZXRGYWN0b3J5LFxuXHRDb2x1bW5TdWJzZXRDYWNoZUZhY3RvcnksXG5cdEl0ZW1DYWNoZUZhY3RvcnksXG5cdEl0ZW1FbnRyeUZhY3RvcnksXG5cdFRlbXBsYXRlRmFjdG9yeVxufSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEl0ZW1FbnRyeSwgSXRlbUVudHJ5T3B0aW9ucywgVGVtcGxhdGUgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtcblx0QXBpUmVxdWVzdENvbHVtbnMsXG5cdEFwaVJlc3BvbnNlLCBFbnRyeVBhcmVudE51bGwsXG5cdEVudHJ5U3RhdHVzLFxuXHRGaWVsZE1hcCxcblx0SXRlbUlkLFxuXHRJdGVtSWRDb252ZXJzaW9uTWFwLFxuXHRJdGVtVHlwZSxcblx0TGlua2VkSXRlbUVudHJ5TWFwLFxuXHRQcm9taXNlSW50ZXJmYWNlLCBSZXNwb25zZUNvbHVtbk1hcCxcblx0VGVtcGxhdGVJdGVtRW50cnlNYXBcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBnZXRGaXJzdFByb3BlcnR5LCBoYXNQcm9wZXJ0aWVzIH0gZnJvbSAnLi9VdGlsJztcblxuLy8gdG9kbyBtYWtlIGNsYXNzXG5cbmV4cG9ydCBjbGFzcyBJdGVtSGFuZGxlciB7XG5cdGVudHJpZXM6IEl0ZW1DYWNoZTtcblx0dGVtcGxhdGVzOiB7W2l0ZW1UeXBlOiBzdHJpbmddOiBUZW1wbGF0ZX0gPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGJhdGNoU3RhdHVzRmFjdG9yeTogQmF0Y2hTdGF0dXNGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sdW1uU3Vic2V0Q2FjaGVGYWN0b3J5OiBDb2x1bW5TdWJzZXRDYWNoZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsLFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBpdGVtQ2FjaGVGYWN0b3J5OiBJdGVtQ2FjaGVGYWN0b3J5LFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5RmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeSxcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgdGVtcGxhdGVGYWN0b3J5OiBUZW1wbGF0ZUZhY3Rvcnlcblx0KSB7XG5cdFx0dGhpcy5lbnRyaWVzID0gdGhpcy5pdGVtQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xuXHR9XG5cblx0ZmV0Y2hJdGVtIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUlkOiBJdGVtSWQsXG5cdFx0b3B0aW9uczogSXRlbUVudHJ5T3B0aW9ucyxcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8SXRlbUVudHJ5PiB7XG5cdFx0Y29uc3QgZW50cnlTdGF0dXMgPSB0aGlzLmdldEVudHJ5U3RhdHVzKFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRpdGVtSWQsXG5cdFx0XHRvcHRpb25zLnBhcmVudCxcblx0XHRcdG9wdGlvbnMuZGVmZXJSZXF1ZXN0LFxuXHRcdFx0bG9jYWxJdGVtQ2FjaGUsXG5cdFx0XHR0cnVlLFxuXHRcdFx0dGhpcy5jb2x1bW5TdWJzZXRDYWNoZUZhY3RvcnkuY29uc3RydWN0KG9wdGlvbnMuY29sdW1ucylcblx0XHQpO1xuXG5cdFx0aWYgKGVudHJ5U3RhdHVzID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdCh0aGlzLml0ZW1FbnRyeVNlcnZpY2UuY3JlYXRlVW5mb3VuZExvY2FsSXRlbUVycm9yKGl0ZW1UeXBlKSk7XG5cblx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlQ2FjaGVkKGVudHJ5U3RhdHVzLmVudHJ5LCBlbnRyeVN0YXR1cy5zdGF0dXMsIG9wdGlvbnMsIGxvY2FsSXRlbUNhY2hlKTtcblx0fVxuXG5cdGZldGNoTmV3SXRlbSAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnM6IEl0ZW1FbnRyeU9wdGlvbnMsXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPFRlbXBsYXRlSXRlbUVudHJ5TWFwPiB7XG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gbG9jYWxJdGVtQ2FjaGUuYWRkKFxuXHRcdFx0dGhpcy5pdGVtRW50cnlGYWN0b3J5LmNvbnN0cnVjdERlZmVycmVkKFxuXHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0b3B0aW9ucy5pc0R1cGxpY2F0ZSA/IHRoaXMua2V5U2VydmljZS5nZXRMb2NhbER1cGxpY2F0ZUlkKCkgOiB0aGlzLmtleVNlcnZpY2UuZ2V0TG9jYWxJZCgpLFxuXHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRmYWxzZVxuXHRcdFx0KVxuXHRcdCk7XG5cblx0XHRyZXR1cm4gdGhpcy5mZXRjaFRlbXBsYXRlKGl0ZW1UeXBlLCBvcHRpb25zLnRlbXBsYXRlT3B0aW9ucywgb3B0aW9ucy50ZW1wbGF0ZUNvbHVtbnMpLnRoZW4oXG5cdFx0XHR0ZW1wbGF0ZSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnJlc29sdmVMb2NhbChpdGVtRW50cnksIG9wdGlvbnMucGFyZW50LCB0ZW1wbGF0ZSwgbG9jYWxJdGVtQ2FjaGUpO1xuXHRcdFx0fSxcblx0XHRcdGVycm9yID0+IHtcblx0XHRcdFx0aXRlbUVudHJ5LnJlamVjdChlcnJvcik7XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdChlcnJvcik7XG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdGNyZWF0ZUJhdGNoU3RhdHVzIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUlkczogSXRlbUlkW10sXG5cdFx0cGFyZW50OiBFbnRyeVBhcmVudE51bGwsXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRcdGRlZmVyUmVxdWVzdDogYm9vbGVhbixcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlLFxuXHRcdGFkZFRvTG9jYWxDYWNoZTogYm9vbGVhblxuXHQpOiB7YmF0Y2hTdGF0dXM6IEJhdGNoU3RhdHVzPEl0ZW1FbnRyeT4sIHN1Y2Nlc3M6IGJvb2xlYW59IHtcblx0XHRjb25zdCBjb2x1bW5TdWJzZXRDYWNoZTogQ29sdW1uU3Vic2V0Q2FjaGUgPSB0aGlzLmNvbHVtblN1YnNldENhY2hlRmFjdG9yeS5jb25zdHJ1Y3QocmVxdWVzdENvbHVtbnMpO1xuXHRcdGNvbnN0IGJhdGNoU3RhdHVzID0gdGhpcy5iYXRjaFN0YXR1c0ZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHQoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGl0ZW1FbnRyeS5pdGVtSWQsXG5cdFx0XHQoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGl0ZW1FbnRyeS5nZXRQcm9taXNlKClcblx0XHQpO1xuXHRcdGxldCBzdWNjZXNzID0gdHJ1ZTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIG9mIGl0ZW1JZHMpIHtcblx0XHRcdGNvbnN0IGVudHJ5U3RhdHVzID0gdGhpcy5nZXRFbnRyeVN0YXR1cyhcblx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdGl0ZW1JZCxcblx0XHRcdFx0cGFyZW50LFxuXHRcdFx0XHRkZWZlclJlcXVlc3QsXG5cdFx0XHRcdGxvY2FsSXRlbUNhY2hlLFxuXHRcdFx0XHRhZGRUb0xvY2FsQ2FjaGUsXG5cdFx0XHRcdGNvbHVtblN1YnNldENhY2hlXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoZW50cnlTdGF0dXMgPT09IG51bGwpIHtcblx0XHRcdFx0c3VjY2VzcyA9IGZhbHNlO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0YmF0Y2hTdGF0dXMuYWRkKGVudHJ5U3RhdHVzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4ge2JhdGNoU3RhdHVzOiBiYXRjaFN0YXR1cywgc3VjY2Vzczogc3VjY2Vzc307XG5cdH1cblxuXHQvKipcblx0ICogRm9yIGV2ZXJ5IGl0ZW0gSUQgZmluZCB0aGUgc3RhdHVzIG9mIHRoZSBJdGVtRW50cnkgYW5kIHJlc29sdmUgdGhlIHByb21pc2VzIHNvIHRoZSByZXN1bHQgaXNcblx0ICogYSB1c2FibGUgSXRlbUVudHJ5XG5cdCAqL1xuXHRmZXRjaEl0ZW1zIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUlkczogSXRlbUlkW10sXG5cdFx0b3B0aW9uczogSXRlbUVudHJ5T3B0aW9ucyxcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8SXRlbUVudHJ5W10+IHtcblx0XHRjb25zdCBlcnJvckhhbmRsZXIgPSB0aGlzLmVycm9ySGFuZGxlcjtcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IG9wdGlvbnMuY29sdW1ucztcblxuXHRcdGNvbnN0IHtiYXRjaFN0YXR1cywgc3VjY2Vzc30gPSB0aGlzLmNyZWF0ZUJhdGNoU3RhdHVzKFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRpdGVtSWRzLFxuXHRcdFx0b3B0aW9ucy5wYXJlbnQsXG5cdFx0XHRyZXF1ZXN0Q29sdW1ucyxcblx0XHRcdG9wdGlvbnMuZGVmZXJSZXF1ZXN0LFxuXHRcdFx0bG9jYWxJdGVtQ2FjaGUsXG5cdFx0XHR0cnVlXG5cdFx0KTtcblxuXHRcdGxldCByZXNwb25zZVByb21pc2U6IFByb21pc2VJbnRlcmZhY2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHwgbnVsbDtcblx0XHRsZXQgY29sdW1uc1Byb21pc2U6IFByb21pc2VJbnRlcmZhY2U8UmVzcG9uc2VDb2x1bW5NYXA+IHwgbnVsbDtcblxuXHRcdGlmIChiYXRjaFN0YXR1cy5oYXNSZXF1ZXN0cygpKSB7XG5cdFx0XHRyZXNwb25zZVByb21pc2UgPSB0aGlzLnJlcXVlc3RJdGVtcyhpdGVtVHlwZSwgYmF0Y2hTdGF0dXMuZ2V0UmVxdWVzdElkcygpLCByZXF1ZXN0Q29sdW1ucyk7XG5cdFx0XHRjb2x1bW5zUHJvbWlzZSA9IHJlc3BvbnNlUHJvbWlzZS50aGVuKFxuXHRcdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRlcnJvciA9PiB7XG5cdFx0XHRcdFx0Ly8gbm8gaXRlbXMgd2lsbCBiZSByZXR1cm5lZCwgc28gY2xlYXJpbmcgaXMgc3VmZmljaWVudCBoZXJlXG5cdFx0XHRcdFx0YmF0Y2hTdGF0dXMuZm9yRWFjaEVudHJ5KFxuXHRcdFx0XHRcdFx0W0VOVFJZX1NUQVRVUy5SRVNPTFZFXSxcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeSA9PiB0aGlzLmNsZWFySXRlbShpdGVtRW50cnksIGxvY2FsSXRlbUNhY2hlKVxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRyZXR1cm4gZXJyb3JIYW5kbGVyLnJlamVjdChlcnJvcik7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0fSBlbHNlIGlmIChiYXRjaFN0YXR1cy5oYXNFbnRyaWVzKGJhdGNoU3RhdHVzLmxvY2FsRXhwYW5kU3RhdHVzKSkge1xuXHRcdFx0cmVzcG9uc2VQcm9taXNlID0gbnVsbDtcblx0XHRcdGNvbHVtbnNQcm9taXNlID0gdGhpcy5jb2x1bW5IYW5kbGVyLmZldGNoKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlc3BvbnNlUHJvbWlzZSA9IG51bGw7XG5cdFx0XHRjb2x1bW5zUHJvbWlzZSA9IG51bGw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKFxuXHRcdFx0e1xuXHRcdFx0XHRlbnRyaWVzOiBiYXRjaFN0YXR1cy5nZXRQcm9taXNlcygpLFxuXHRcdFx0XHRyZXNwb25zZTogcmVzcG9uc2VQcm9taXNlLFxuXHRcdFx0XHRjb2x1bW5zOiBjb2x1bW5zUHJvbWlzZVxuXHRcdFx0fVxuXHRcdCkudGhlbihcblx0XHRcdHJlc29sdmVkID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlQmF0Y2hSZXNwb25zZShcblx0XHRcdFx0XHRiYXRjaFN0YXR1cyxcblx0XHRcdFx0XHRsb2NhbEl0ZW1DYWNoZSxcblx0XHRcdFx0XHRyZXF1ZXN0Q29sdW1ucyxcblx0XHRcdFx0XHRyZXNvbHZlZC5yZXNwb25zZSxcblx0XHRcdFx0XHRyZXNvbHZlZC5jb2x1bW5zXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihcblx0XHRcdChyZXNvbHZlZDogYm9vbGVhbikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gcmVzb2x2ZWQgJiYgc3VjY2VzcyA/IGJhdGNoU3RhdHVzLmdldEFycmF5KCkgOiBlcnJvckhhbmRsZXIucmVqZWN0KCk7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRoYW5kbGVCYXRjaFJlc3BvbnNlIChcblx0XHRiYXRjaFN0YXR1czogQmF0Y2hTdGF0dXM8SXRlbUVudHJ5Pixcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlLFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyxcblx0XHRyZXNwb25zZTogQXBpUmVzcG9uc2VQcm9jZXNzb3IgfCBudWxsLFxuXHRcdHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXAgfCBudWxsLFxuXHRcdGNvbHVtbkV4cGFuc2lvbj86IENvbHVtbkV4cGFuc2lvblxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPGJvb2xlYW4+IHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGJhdGNoU3RhdHVzLml0ZW1UeXBlO1xuXG5cdFx0bGV0IHN1Y2Nlc3MgPSB0cnVlO1xuXG5cdFx0aWYgKGJhdGNoU3RhdHVzLmhhc0VudHJpZXMoW0VOVFJZX1NUQVRVUy5SRVNPTFZFXSkpIHtcblx0XHRcdGNvbnN0IGNvbHVtbkluZm8gPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zISk7XG5cblx0XHRcdGJhdGNoU3RhdHVzLmZvckVhY2hFbnRyeShcblx0XHRcdFx0W0VOVFJZX1NUQVRVUy5SRVNPTFZFXSxcblx0XHRcdFx0aXRlbUVudHJ5ID0+IHtcblx0XHRcdFx0XHRpZiAoIXRoaXMucmVzb2x2ZVJlbW90ZShpdGVtRW50cnksIGNvbHVtbkluZm8sIHJlc3BvbnNlISwgbG9jYWxJdGVtQ2FjaGUpKVxuXHRcdFx0XHRcdFx0c3VjY2VzcyA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGJhdGNoU3RhdHVzLmZvckVhY2hFbnRyeShcblx0XHRcdFtFTlRSWV9TVEFUVVMuUkVTT0xWRV9WQUxVRVNdLFxuXHRcdFx0aXRlbUVudHJ5ID0+IHtcblx0XHRcdFx0aWYgKCF0aGlzLnJlc29sdmVSZW1vdGVWYWx1ZXMoaXRlbUVudHJ5LCByZXNwb25zZSEpKVxuXHRcdFx0XHRcdHN1Y2Nlc3MgPSBmYWxzZTtcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0aWYgKGJhdGNoU3RhdHVzLmhhc0VudHJpZXMoYmF0Y2hTdGF0dXMucmVtb3RlRXhwYW5kU3RhdHVzKSkge1xuXHRcdFx0aWYgKGNvbHVtbkV4cGFuc2lvbiA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRjb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zISk7XG5cblx0XHRcdGJhdGNoU3RhdHVzLmZvckVhY2hFbnRyeShcblx0XHRcdFx0YmF0Y2hTdGF0dXMucmVtb3RlRXhwYW5kU3RhdHVzLFxuXHRcdFx0XHRpdGVtRW50cnkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLnJlc29sdmVFeHBhbnNpb24oaXRlbUVudHJ5LCBjb2x1bW5FeHBhbnNpb24hLCByZXNwb25zZSEpO1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGlmIChiYXRjaFN0YXR1cy5oYXNFbnRyaWVzKGJhdGNoU3RhdHVzLmxvY2FsRXhwYW5kU3RhdHVzKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZXhwYW5kTG9jYWxFbnRyaWVzKFxuXHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0YmF0Y2hTdGF0dXMuZ2V0QXJyYXkoYmF0Y2hTdGF0dXMubG9jYWxFeHBhbmRTdGF0dXMpLFxuXHRcdFx0XHRyZXF1ZXN0Q29sdW1ucyxcblx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zISxcblx0XHRcdFx0bG9jYWxJdGVtQ2FjaGVcblx0XHRcdCkudGhlbihcblx0XHRcdFx0aXRlbUVudHJpZXMgPT4ge1xuXHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LnJlc29sdmUoKTtcblxuXHRcdFx0XHRcdHJldHVybiBzdWNjZXNzO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihzdWNjZXNzKTtcblx0fVxuXG5cdHJlc29sdmVDYWNoZWQgKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5LFxuXHRcdHN0YXR1czogRU5UUllfU1RBVFVTLFxuXHRcdG9wdGlvbnM6IEl0ZW1FbnRyeU9wdGlvbnMsXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1FbnRyeT4ge1xuXHRcdGNvbnN0IGVycm9ySGFuZGxlciA9IHRoaXMuZXJyb3JIYW5kbGVyO1xuXHRcdGNvbnN0IHJlamVjdEl0ZW1FbnRyeSA9IChlcnJvcjogYW55KSA9PiB7IGl0ZW1FbnRyeS5yZWplY3QoZXJyb3IpOyB9O1xuXHRcdGxldCBjb2x1bW5EaWZmZXJlbmNlOiBBcGlSZXF1ZXN0Q29sdW1ucztcblxuXHRcdHN3aXRjaCAoc3RhdHVzKSB7XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5MT0NBTDogLy8gaGVyZSBmb3IgY29tcGxldGlvblxuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuQ0FDSEVEOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGl0ZW1FbnRyeSk7XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5QUk9NSVNFRDpcblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5nZXRQcm9taXNlKCk7XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5FWFBBTkQ6XG5cdFx0XHRcdGNvbHVtbkRpZmZlcmVuY2UgPSB0aGlzLmdldENvbHVtbkRpZmZlcmVuY2UoaXRlbUVudHJ5LCBvcHRpb25zLmNvbHVtbnMpO1xuXG5cdFx0XHRcdHRoaXMucmVxdWVzdEl0ZW0oaXRlbUVudHJ5LCBjb2x1bW5EaWZmZXJlbmNlKS50aGVuKFxuXHRcdFx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0XHRcdHRoaXMucmVzb2x2ZUV4cGFuc2lvbihcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRcdFx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5pdGVtVHlwZSxcblx0XHRcdFx0XHRcdFx0XHRjb2x1bW5EaWZmZXJlbmNlLFxuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHQpLmNhdGNoKCAvLyBvbmZ1bGZpbGxlZCBtaWdodCBwcm9kdWNlIGFuIGVycm9yXG5cdFx0XHRcdFx0cmVqZWN0SXRlbUVudHJ5XG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5nZXRQcm9taXNlKCk7XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5FWFBBTkRfTE9DQUw6XG5cdFx0XHRcdGNvbHVtbkRpZmZlcmVuY2UgPSB0aGlzLmdldENvbHVtbkRpZmZlcmVuY2UoaXRlbUVudHJ5LCBvcHRpb25zLmNvbHVtbnMpO1xuXG5cdFx0XHRcdHRoaXMuY29sdW1uSGFuZGxlci5mZXRjaChpdGVtRW50cnkuaXRlbVR5cGUsIGNvbHVtbkRpZmZlcmVuY2UpLnRoZW4oXG5cdFx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLmV4cGFuZExvY2FsRW50cmllcyhcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5Lml0ZW1UeXBlLFxuXHRcdFx0XHRcdFx0XHRbaXRlbUVudHJ5XSxcblx0XHRcdFx0XHRcdFx0Y29sdW1uRGlmZmVyZW5jZSxcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zLFxuXHRcdFx0XHRcdFx0XHRsb2NhbEl0ZW1DYWNoZVxuXHRcdFx0XHRcdFx0KS50aGVuKFxuXHRcdFx0XHRcdFx0XHQoKSA9PiBpdGVtRW50cnkucmVzb2x2ZSgpLFxuXHRcdFx0XHRcdFx0XHRyZWplY3RJdGVtRW50cnlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRyZWplY3RJdGVtRW50cnlcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmdldFByb21pc2UoKTtcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORDpcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORF9MT0NBTDpcblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5nZXRQcm9taXNlKCkudGhlbihcblx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlQ2FjaGVkKFxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnksXG5cdFx0XHRcdFx0XHRcdHRoaXMuZ2V0Q2FjaGVkRW50cnlTdGF0dXMoXG5cdFx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuY29sdW1uU3Vic2V0Q2FjaGVGYWN0b3J5LmNvbnN0cnVjdChvcHRpb25zLmNvbHVtbnMpXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdG9wdGlvbnMsXG5cdFx0XHRcdFx0XHRcdGxvY2FsSXRlbUNhY2hlXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHQpO1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuUkVTT0xWRV9WQUxVRVM6XG5cdFx0XHRcdHRoaXMucmVxdWVzdEl0ZW0oaXRlbUVudHJ5KS50aGVuKFxuXHRcdFx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0XHRcdHRoaXMucmVzb2x2ZVJlbW90ZVZhbHVlcyhpdGVtRW50cnksIHJlc3BvbnNlKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KS5jYXRjaCggLy8gb25mdWxmaWxsZWQgbWlnaHQgcHJvZHVjZSBhbiBlcnJvclxuXHRcdFx0XHRcdHJlamVjdEl0ZW1FbnRyeVxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnkuZ2V0UHJvbWlzZSgpO1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuUkVTT0xWRTpcblx0XHRcdFx0dGhpcy5yZXF1ZXN0SXRlbShpdGVtRW50cnkpLnRoZW4oXG5cdFx0XHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5yZXNvbHZlUmVtb3RlKFxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnksXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5jb2x1bW5zLnJlc29sdmUocmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCkpLFxuXHRcdFx0XHRcdFx0XHRyZXNwb25zZSxcblx0XHRcdFx0XHRcdFx0bG9jYWxJdGVtQ2FjaGVcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdCkuY2F0Y2goIC8vIG9uZnVsZmlsbGVkIG1pZ2h0IHByb2R1Y2UgYW4gZXJyb3Jcblx0XHRcdFx0XHRlcnJvciA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLmNsZWFySXRlbShpdGVtRW50cnksIGxvY2FsSXRlbUNhY2hlKTtcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5yZWplY3QoZXJyb3IpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0KTtcblxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmdldFByb21pc2UoKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGdldENvbHVtbkRpZmZlcmVuY2UgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCByZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMpOiBBcGlSZXF1ZXN0Q29sdW1ucyB7XG5cdFx0cmV0dXJuIHRoaXMuY29sdW1uVXRpbC5tZXJnZVJlcXVlc3RDb2x1bW5zKGl0ZW1FbnRyeS5jb2x1bW5zLnJlcXVlc3QsIHJlcXVlc3RDb2x1bW5zKS5kaWZmZXJlbmNlO1xuXHR9XG5cblx0cmVzb2x2ZUxvY2FsIChcblx0XHRpdGVtRW50cnk6IEl0ZW1FbnRyeSxcblx0XHRwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCxcblx0XHR0ZW1wbGF0ZTogVGVtcGxhdGUsXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZVxuXHQpOiBUZW1wbGF0ZUl0ZW1FbnRyeU1hcCB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcblx0XHRjb25zdCBpdGVtSWRDb252ZXJzaW9uID0gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLmNyZWF0ZUxvY2FsQ29udmVyc2lvbk1hcChpdGVtVHlwZSwgaXRlbUlkLCB0cnVlLCB0ZW1wbGF0ZS5yZXNwb25zZSk7XG5cblx0XHRpdGVtRW50cnkuY29sdW1ucyA9IHRlbXBsYXRlLmNvbHVtbnM7XG5cblx0XHRpZiAocGFyZW50ICE9PSBudWxsKVxuXHRcdFx0aXRlbUVudHJ5LnNldFBhcmVudChwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQpOyAvLyBjcmVhdGUgbmV3IG9iamVjdFxuXG5cdFx0aXRlbUVudHJ5LnNldExvY2FsRmllbGRzKHRlbXBsYXRlLmZpZWxkcywgaXRlbUlkQ29udmVyc2lvbikucmVzb2x2ZSgpO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdG1haW46IGl0ZW1FbnRyeSxcblx0XHRcdGxpbmtlZDogdGhpcy5jcmVhdGVMb2NhbEVudHJpZXMoaXRlbVR5cGUsIGl0ZW1JZCwgdGVtcGxhdGUsIGl0ZW1JZENvbnZlcnNpb24sIGxvY2FsSXRlbUNhY2hlKVxuXHRcdH07XG5cdH1cblxuXHRyZXNvbHZlRXhwYW5zaW9uIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgY29sdW1uRXhwYW5zaW9uOiBDb2x1bW5FeHBhbnNpb24sIHJlc3BvbnNlOiBBcGlSZXNwb25zZSk6IEl0ZW1FbnRyeSB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcblx0XHRjb25zdCBleHBhbnNpb25SZXN1bHQgPSBjb2x1bW5FeHBhbnNpb24ucnVuKGl0ZW1FbnRyeS5jb2x1bW5zKTtcblxuXHRcdC8vIEFub3RoZXIgcmVxdWVzdCBhbHJlYWR5IHJlcXVlc3RlZCB0aGUgY29sdW1ucyB3ZSBuZWVkIGhlcmUsIG5vIG5lZWQgdG8gZXhwYW5kIHRoZSBpdGVtIGFuZCByZXNvbHZlIGl0IChhbHJlYWR5IGRvbmUgYnkgb3RoZXIgcmVxdWVzdClcblx0XHRpZiAoZXhwYW5zaW9uUmVzdWx0ID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIGl0ZW1FbnRyeTtcblxuXHRcdGl0ZW1FbnRyeS5leHBhbmQoXG5cdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKSxcblx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBleHBhbnNpb25SZXN1bHQuZGlmZmVyZW5jZS5yb290KSxcblx0XHRcdGV4cGFuc2lvblJlc3VsdFxuXHRcdCk7XG5cblx0XHRyZXR1cm4gaXRlbUVudHJ5LnJlc29sdmUoKTtcblx0fVxuXG5cdHByaXZhdGUgY2xlYXJJdGVtIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgbG9jYWxDYWNoZTogSXRlbUNhY2hlKTogdm9pZCB7XG5cdFx0dGhpcy5lbnRyaWVzLmNsZWFyKGl0ZW1FbnRyeSk7XG5cdFx0bG9jYWxDYWNoZS5jbGVhcihpdGVtRW50cnkpO1xuXHR9XG5cblx0cHJpdmF0ZSByZXNvbHZlUmVtb3RlIChcblx0XHRpdGVtRW50cnk6IEl0ZW1FbnRyeSxcblx0XHRjb2x1bW5TZXQ6IENvbHVtblNldCxcblx0XHRyZXNwb25zZTogQXBpUmVzcG9uc2UsXG5cdFx0bG9jYWxDYWNoZTogSXRlbUNhY2hlXG5cdCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHJlc3BvbnNlRmllbGRzID0gdGhpcy5nZXRSZXNwb25zZUZpZWxkcyhpdGVtRW50cnksIGNvbHVtblNldCwgcmVzcG9uc2UpO1xuXG5cdFx0aWYgKHJlc3BvbnNlRmllbGRzID09PSBudWxsKSB7XG5cdFx0XHR0aGlzLmNsZWFySXRlbShpdGVtRW50cnksIGxvY2FsQ2FjaGUpO1xuXHRcdFx0aXRlbUVudHJ5LnJlamVjdCgpO1xuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0aXRlbUVudHJ5LnJlc29sdmVEZWZlcnJlZChyZXNwb25zZUZpZWxkcy5pbml0aWFsLCByZXNwb25zZUZpZWxkcy5kZXJpdmVkLCBjb2x1bW5TZXQpO1xuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRwcml2YXRlIHJlc29sdmVSZW1vdGVWYWx1ZXMgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCByZXNwb25zZTogQXBpUmVzcG9uc2UpOiBib29sZWFuIHtcblx0XHRjb25zdCByZXNwb25zZUZpZWxkcyA9IHRoaXMuZ2V0UmVzcG9uc2VGaWVsZHMoaXRlbUVudHJ5LCBpdGVtRW50cnkuY29sdW1ucywgcmVzcG9uc2UpO1xuXG5cdFx0aWYgKHJlc3BvbnNlRmllbGRzID09PSBudWxsKSB7XG5cdFx0XHRpdGVtRW50cnkucmVqZWN0KCk7XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRpdGVtRW50cnkudXBkYXRlRmllbGRzKHJlc3BvbnNlRmllbGRzLmluaXRpYWwsIHJlc3BvbnNlRmllbGRzLmRlcml2ZWQsIGZhbHNlKS5yZXNvbHZlKCk7XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0UmVzcG9uc2VGaWVsZHMgKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5LFxuXHRcdGNvbHVtblNldDogQ29sdW1uU2V0LFxuXHRcdHJlc3BvbnNlOiBBcGlSZXNwb25zZVxuXHQpOiB7aW5pdGlhbDogRmllbGRNYXAsIGRlcml2ZWQ6IEZpZWxkTWFwfSB8IG51bGwge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XG5cdFx0Y29uc3QgaW5pdGlhbCA9IHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXG5cdFx0aWYgKGluaXRpYWwgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGluaXRpYWw6IGluaXRpYWwsXG5cdFx0XHRkZXJpdmVkOiByZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgY29sdW1uU2V0LnJvb3QpXG5cdFx0fTtcblx0fVxuXG5cdGZldGNoVGVtcGxhdGUgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgdGVtcGxhdGVPcHRpb25zOiBhbnkgPSB7fSwgdGVtcGxhdGVDb2x1bW5zOiBhbnkgPSB7fSk6IFByb21pc2VJbnRlcmZhY2U8VGVtcGxhdGU+IHtcblx0XHRjb25zdCBoYXNUZW1wbGF0ZU9wdGlvbnMgPSBoYXNQcm9wZXJ0aWVzKHRlbXBsYXRlT3B0aW9ucyk7XG5cdFx0Y29uc3QgY29sdW1uSXRlbVR5cGUgPSBnZXRGaXJzdFByb3BlcnR5KHRlbXBsYXRlQ29sdW1ucyk7IC8vIGl0J3MgcG9zc2libGUgdG8gYWRkIGNvbHVtbnMgdG8gbGlua2VkIGl0ZW1zXG5cblx0XHRpZiAoIWhhc1RlbXBsYXRlT3B0aW9ucykge1xuXHRcdFx0Y29uc3QgY2FjaGVkVGVtcGxhdGUgPSB0aGlzLnRlbXBsYXRlc1tpdGVtVHlwZV07XG5cblx0XHRcdGlmIChcblx0XHRcdFx0Y2FjaGVkVGVtcGxhdGUgIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0XHQoXG5cdFx0XHRcdFx0Y29sdW1uSXRlbVR5cGUgPT09IG51bGwgfHxcblx0XHRcdFx0XHR0aGlzLmNvbHVtblV0aWwucmVzcG9uc2VDb2x1bW5zQXZhaWxhYmxlKFxuXHRcdFx0XHRcdFx0Y29sdW1uSXRlbVR5cGUsXG5cdFx0XHRcdFx0XHR0ZW1wbGF0ZUNvbHVtbnNbY29sdW1uSXRlbVR5cGVdLFxuXHRcdFx0XHRcdFx0Y2FjaGVkVGVtcGxhdGUucmVzcG9uc2VDb2x1bW5zXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihjYWNoZWRUZW1wbGF0ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKFxuXHRcdFx0e1xuXHRcdFx0XHR0ZW1wbGF0ZTogdGhpcy5hcGlSZXF1ZXN0U2VydmljZS50ZW1wbGF0ZShpdGVtVHlwZSwgdGVtcGxhdGVPcHRpb25zKSxcblx0XHRcdFx0YWRkaXRpb25hbENvbHVtbnM6IGNvbHVtbkl0ZW1UeXBlID09PSBudWxsID9cblx0XHRcdFx0XHR7fSA6XG5cdFx0XHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLmZldGNoKGNvbHVtbkl0ZW1UeXBlLCB0ZW1wbGF0ZUNvbHVtbnNbY29sdW1uSXRlbVR5cGVdKVxuXHRcdFx0fVxuXHRcdCkudGhlbihcblx0XHRcdHJlc29sdmVkID0+IHtcblx0XHRcdFx0Y29uc3QgdGVtcGxhdGVSZXNwb25zZSA9IHJlc29sdmVkLnRlbXBsYXRlO1xuXG5cdFx0XHRcdGNvbnN0IHRlbXBsYXRlID0gdGhpcy50ZW1wbGF0ZUZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCB0ZW1wbGF0ZVJlc3BvbnNlLCByZXNvbHZlZC5hZGRpdGlvbmFsQ29sdW1ucyk7XG5cblx0XHRcdFx0aWYgKCFoYXNUZW1wbGF0ZU9wdGlvbnMgJiYgdGVtcGxhdGVSZXNwb25zZS5jYWNoZWFibGUpXG5cdFx0XHRcdFx0dGhpcy50ZW1wbGF0ZXNbaXRlbVR5cGVdID0gdGVtcGxhdGU7XG5cblx0XHRcdFx0cmV0dXJuIHRlbXBsYXRlO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXRFbnRyeVN0YXR1cyAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1JZDogSXRlbUlkLFxuXHRcdHBhcmVudDogRW50cnlQYXJlbnROdWxsLFxuXHRcdGRlZmVyUmVxdWVzdDogYm9vbGVhbixcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlLFxuXHRcdGFkZFRvTG9jYWxDYWNoZTogYm9vbGVhbixcblx0XHRjb2x1bW5TdWJzZXRDYWNoZTogQ29sdW1uU3Vic2V0Q2FjaGVcblx0KTogRW50cnlTdGF0dXM8SXRlbUVudHJ5PiB8IG51bGwge1xuXHRcdGxldCBpdGVtRW50cnk7XG5cblx0XHRpZiAodGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZChpdGVtSWQpKSB7XG5cdFx0XHRpdGVtRW50cnkgPSBsb2NhbEl0ZW1DYWNoZS5nZXQoaXRlbVR5cGUsIGl0ZW1JZCk7XG5cblx0XHRcdGlmIChpdGVtRW50cnkgIT09IHVuZGVmaW5lZClcblx0XHRcdFx0cmV0dXJuIHtlbnRyeTogaXRlbUVudHJ5LCBzdGF0dXM6IHRoaXMuZ2V0Q2FjaGVkRW50cnlTdGF0dXMoaXRlbUVudHJ5LCBjb2x1bW5TdWJzZXRDYWNoZSl9O1xuXG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRpdGVtRW50cnkgPSB0aGlzLmVudHJpZXMuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXG5cdFx0aWYgKGl0ZW1FbnRyeSAhPT0gdW5kZWZpbmVkKSB7IC8vIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHJlbW90ZSBpdGVtIHRoYXQgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGdsb2JhbCBjYWNoZVxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0ZW50cnk6IGFkZFRvTG9jYWxDYWNoZSA/IGxvY2FsSXRlbUNhY2hlLmFkZChpdGVtRW50cnkpIDogaXRlbUVudHJ5LFxuXHRcdFx0XHRzdGF0dXM6IHRoaXMuZ2V0Q2FjaGVkRW50cnlTdGF0dXMoaXRlbUVudHJ5LCBjb2x1bW5TdWJzZXRDYWNoZSlcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0aXRlbUVudHJ5ID0gdGhpcy5pdGVtRW50cnlGYWN0b3J5LmNvbnN0cnVjdERlZmVycmVkKCAvLyBjcmVhdGUgYSBuZXcgcmVtb3RlIGl0ZW1cblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkLFxuXHRcdFx0Y29sdW1uU3Vic2V0Q2FjaGUucmVxdWVzdENvbHVtbnMsXG5cdFx0XHRkZWZlclJlcXVlc3Rcblx0XHQpO1xuXG5cdFx0aWYgKHBhcmVudCAhPT0gbnVsbClcblx0XHRcdGl0ZW1FbnRyeS5zZXRQYXJlbnQocGFyZW50Lml0ZW1UeXBlLCBwYXJlbnQuaXRlbUlkKTtcblxuXHRcdGlmIChhZGRUb0xvY2FsQ2FjaGUpXG5cdFx0XHRsb2NhbEl0ZW1DYWNoZS5hZGQoaXRlbUVudHJ5KTtcblxuXHRcdHRoaXMuZW50cmllcy5hZGQoaXRlbUVudHJ5KTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRlbnRyeTogaXRlbUVudHJ5LFxuXHRcdFx0c3RhdHVzOiBkZWZlclJlcXVlc3QgPyBFTlRSWV9TVEFUVVMuUFJPTUlTRUQgOiBFTlRSWV9TVEFUVVMuUkVTT0xWRVxuXHRcdH07XG5cdH1cblxuXHRnZXRDYWNoZWRFbnRyeVN0YXR1cyAoaXRlbUVudHJ5OiBJdGVtRW50cnksIGNvbHVtblN1YnNldENhY2hlOiBDb2x1bW5TdWJzZXRDYWNoZSk6IEVOVFJZX1NUQVRVUyB7XG5cdFx0Y29uc3QgY29sdW1uU2V0ID0gaXRlbUVudHJ5LmNvbHVtbnM7XG5cblx0XHRpZiAoaXRlbUVudHJ5LmlzRGVmZXJyZWQoKSkge1xuXHRcdFx0aWYgKGl0ZW1FbnRyeS5kZWZlclJlcXVlc3QpIHtcblx0XHRcdFx0Y29sdW1uU2V0LmV4cGFuZFJlcXVlc3RDb2x1bW5zKGNvbHVtblN1YnNldENhY2hlLnJlcXVlc3RDb2x1bW5zKTtcblxuXHRcdFx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLlJFU09MVkU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjb2x1bW5TdWJzZXRDYWNoZS5ydW4oY29sdW1uU2V0KSlcblx0XHRcdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5QUk9NSVNFRDtcblxuXHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5pc0xvY2FsKCkgPyBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EX0xPQ0FMIDogRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORDtcblx0XHR9XG5cblx0XHRpZiAoIWNvbHVtblN1YnNldENhY2hlLnJ1bihjb2x1bW5TZXQpKSB7XG5cdFx0XHRpdGVtRW50cnkuZGVmZXIoKTtcblxuXHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5pc0xvY2FsKCkgPyBFTlRSWV9TVEFUVVMuRVhQQU5EX0xPQ0FMIDogRU5UUllfU1RBVFVTLkVYUEFORDtcblx0XHR9XG5cblx0XHRpZiAoaXRlbUVudHJ5LnJlbG9hZFF1ZXVlZCkge1xuXHRcdFx0aXRlbUVudHJ5LnJlbG9hZFF1ZXVlZCA9IGZhbHNlO1xuXG5cdFx0XHRpZiAoaXRlbUVudHJ5LmlzTG9jYWwoKSlcblx0XHRcdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5DQUNIRUQ7XG5cblx0XHRcdGl0ZW1FbnRyeS5kZWZlcigpO1xuXG5cdFx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLlJFU09MVkVfVkFMVUVTO1xuXHRcdH1cblxuXHRcdHJldHVybiBFTlRSWV9TVEFUVVMuQ0FDSEVEO1xuXHR9XG5cblx0ZmV0Y2hUaXRsZSAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1JZDogSXRlbUlkLFxuXHRcdGRlZmVyUmVxdWVzdDogYm9vbGVhbiA9IHRydWUsXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPHN0cmluZz4ge1xuXHRcdGNvbnN0IHRpdGxlRmllbGQgPSB0aGlzLml0ZW1FbnRyeVNlcnZpY2UuZ2V0VGl0bGVGaWVsZChpdGVtVHlwZSk7XG5cblx0XHRyZXR1cm4gdGhpcy5mZXRjaEl0ZW0oXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdGl0ZW1JZCxcblx0XHRcdG5ldyBJdGVtRW50cnlPcHRpb25zKHtjb2x1bW5zOiBbdGl0bGVGaWVsZF0sIGRlZmVyUmVxdWVzdDogZGVmZXJSZXF1ZXN0fSksXG5cdFx0XHRsb2NhbEl0ZW1DYWNoZVxuXHRcdCkudGhlbihcblx0XHRcdGl0ZW1FbnRyeSA9PiB7XG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnkuZ2V0RmllbGRzKClbdGl0bGVGaWVsZF07XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGNyZWF0ZUxvY2FsRW50cmllcyAoXG5cdFx0cGFyZW50VHlwZTogSXRlbVR5cGUsXG5cdFx0bG9jYWxQYXJlbnRJZDogSXRlbUlkLFxuXHRcdHRlbXBsYXRlOiBUZW1wbGF0ZSxcblx0XHRpdGVtSWRDb252ZXJzaW9uOiBJdGVtSWRDb252ZXJzaW9uTWFwLFxuXHRcdGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGUsXG5cdFx0ZmlsdGVySXRlbUVudHJ5OiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGJvb2xlYW4gPSAoKSA9PiB0cnVlIC8vIHJldHVybiB0cnVlIHRvIGluY2x1ZGUgaXRlbVxuXHQpOiBMaW5rZWRJdGVtRW50cnlNYXBbXSB7XG5cdFx0Y29uc3QgYXBpUmVzcG9uc2UgPSB0ZW1wbGF0ZS5yZXNwb25zZTtcblx0XHRjb25zdCBpdGVtRW50cnlNYXA6IHtbaXRlbVR5cGU6IHN0cmluZ106IEl0ZW1FbnRyeVtdfSA9IHt9O1xuXHRcdGNvbnN0IGNvbHVtblNldE1hcDoge1tpdGVtVHlwZTogc3RyaW5nXTogQ29sdW1uU2V0fSA9IHt9O1xuXHRcdGNvbnN0IHJlc3VsdDogTGlua2VkSXRlbUVudHJ5TWFwW10gPSBbXTtcblxuXHRcdGNvbnN0IGNyZWF0ZUVudHJpZXMgPSAoX3BhcmVudFR5cGU6IEl0ZW1UeXBlLCBfbG9jYWxQYXJlbnRJZDogSXRlbUlkLCBhcGlQYXJlbnRJZDogSXRlbUlkKSA9PiB7XG5cdFx0XHRjb25zdCBwYXJlbnQgPSB7aXRlbVR5cGU6IF9wYXJlbnRUeXBlLCBpdGVtSWQ6IF9sb2NhbFBhcmVudElkfTtcblx0XHRcdGNvbnN0IGxpbmtzID0gYXBpUmVzcG9uc2UuaXRlbXNbX3BhcmVudFR5cGVdW2FwaVBhcmVudElkXS5saW5rcztcblxuXHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBsaW5rcykge1xuXHRcdFx0XHRpZiAoIWxpbmtzLmhhc093blByb3BlcnR5KGl0ZW1UeXBlKSlcblx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHQvLyB0aGUgaXRlbSBlbnRyaWVzIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgcmVzdWx0IGluIHRvcC1kb3duIG9yZGVyXG5cdFx0XHRcdGlmIChpdGVtRW50cnlNYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRyZXN1bHQucHVzaChcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0aXRlbVR5cGU6IGl0ZW1UeXBlLFxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cmllczogaXRlbUVudHJ5TWFwW2l0ZW1UeXBlXSA9IFtdLFxuXHRcdFx0XHRcdFx0XHRjb2x1bW5TZXQ6IGNvbHVtblNldE1hcFtpdGVtVHlwZV0gPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0dGVtcGxhdGUucmVzcG9uc2VDb2x1bW5zXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yIChjb25zdCBhcGlJdGVtSWQgb2YgbGlua3NbaXRlbVR5cGVdKSB7XG5cdFx0XHRcdFx0Y29uc3QgbG9jYWxJdGVtSWQgPSBpdGVtSWRDb252ZXJzaW9uW2l0ZW1UeXBlXVthcGlJdGVtSWRdO1xuXG5cdFx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5pdGVtRW50cnlGYWN0b3J5LmNvbnN0cnVjdExvY2FsTGlua2VkKFxuXHRcdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0XHRsb2NhbEl0ZW1JZCxcblx0XHRcdFx0XHRcdGFwaVJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBhcGlJdGVtSWQpLFxuXHRcdFx0XHRcdFx0cGFyZW50LFxuXHRcdFx0XHRcdFx0Y29sdW1uU2V0TWFwW2l0ZW1UeXBlXSxcblx0XHRcdFx0XHRcdGl0ZW1JZENvbnZlcnNpb25cblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0aWYgKCFmaWx0ZXJJdGVtRW50cnkoaXRlbUVudHJ5KSlcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdFx0bG9jYWxJdGVtQ2FjaGUuYWRkKGl0ZW1FbnRyeSk7XG5cdFx0XHRcdFx0aXRlbUVudHJ5TWFwW2l0ZW1UeXBlXS5wdXNoKGl0ZW1FbnRyeSk7XG5cblx0XHRcdFx0XHRjcmVhdGVFbnRyaWVzKGl0ZW1UeXBlLCBsb2NhbEl0ZW1JZCwgYXBpSXRlbUlkKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRjcmVhdGVFbnRyaWVzKHBhcmVudFR5cGUsIGxvY2FsUGFyZW50SWQsIGFwaVJlc3BvbnNlLmxpbmtzW3BhcmVudFR5cGVdWzBdKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRleHBhbmRMb2NhbEVudHJpZXMgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRcdHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXAsXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1FbnRyeVtdPiB7XG5cdFx0aWYgKGl0ZW1FbnRyaWVzLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oaXRlbUVudHJpZXMpO1xuXG5cdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucyk7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0Y29uc3QgZXhwYW5zaW9uUmVzdWx0ID0gY29sdW1uRXhwYW5zaW9uLnJ1bihpdGVtRW50cnkuY29sdW1ucyk7XG5cblx0XHRcdGlmIChleHBhbnNpb25SZXN1bHQgIT09IG51bGwpXG5cdFx0XHRcdGl0ZW1FbnRyeS5leHBhbmRMb2NhbChleHBhbnNpb25SZXN1bHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnJlc29sdmVEZXJpdmVkVmFsdWVzKGl0ZW1FbnRyaWVzLCBjb2x1bW5FeHBhbnNpb24uYWdncmVnYXRlUm9vdENvbHVtbnMoKSwgbG9jYWxJdGVtQ2FjaGUpO1xuXHR9XG5cblx0cmVzb2x2ZURlcml2ZWRWYWx1ZXMgKFxuXHRcdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcblx0XHRjb2x1bW5zOiBDb2x1bW5JbmZvW10sXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1FbnRyeVtdPiB7XG5cdFx0Y29uc3QgcHJvbWlzZXM6IEFycmF5PFByb21pc2VJbnRlcmZhY2U8YW55Pj4gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpXG5cdFx0XHRwcm9taXNlcy5wdXNoKHRoaXMuZmV0Y2hEZXJpdmVkVmFsdWVzQnlDb2x1bW4oaXRlbUVudHJpZXMsIGNvbHVtbiwgbG9jYWxJdGVtQ2FjaGUpKTtcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChwcm9taXNlcykudGhlbihcblx0XHRcdCgpID0+IGl0ZW1FbnRyaWVzLFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgc2V0RGVmYXVsdFZhbHVlc0J5Q29sdW1uIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIHJvb3RDb2x1bW46IENvbHVtbkluZm8pOiB2b2lkIHtcblx0XHRjb25zdCBjaGlsZENvbHVtbnMgPSByb290Q29sdW1uLmNoaWxkcmVuO1xuXG5cdFx0aWYgKGNoaWxkQ29sdW1ucy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm47XG5cblx0XHQvLyBubyBuZWVkIHRvIGRvIGEgcmVjdXJzaXZlIGNhbGwgaGVyZSwgZnVuY3Rpb24gd2lsbCBnZXQgY2FsbGVkIG11bHRpcGxlIHRpbWVzXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY2hpbGRDb2x1bW5zKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdFx0aXRlbUVudHJ5LmRlcml2ZWRbY29sdW1uLnBhdGhdID0gdGhpcy5hcGlGb3JtYXR0ZXIuZ2V0RGVmYXVsdFZhbHVlKGNvbHVtbi5hcGlDb2x1bW4udHlwZSk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBnZXRJdGVtSWRCeUNvbHVtbiAoaXRlbUVudHJ5OiBJdGVtRW50cnksIGNvbHVtbjogQ29sdW1uSW5mbyk6IEl0ZW1JZCB7XG5cdFx0aWYgKGNvbHVtbi5sZXZlbCA9PT0gMCkge1xuXHRcdFx0aWYgKGNvbHVtbi5hcGlDb2x1bW4udHlwZSA9PT0gJ2xpbmsnICYmIGl0ZW1FbnRyeS5wYXJlbnQgIT09IG51bGwpXG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnkucGFyZW50Lml0ZW1JZDtcblxuXHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5nZXRGaWVsZHMoKVtjb2x1bW4ucGF0aF07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeS5kZXJpdmVkW2NvbHVtbi5wYXRoXTtcblx0fVxuXG5cdHByaXZhdGUgZmV0Y2hEZXJpdmVkVmFsdWVzQnlDb2x1bW4gKFxuXHRcdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcblx0XHRyb290Q29sdW1uOiBDb2x1bW5JbmZvLFxuXHRcdGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGVcblx0KTogUHJvbWlzZUludGVyZmFjZTx2b2lkIHwgSXRlbUVudHJ5W10+IHtcblx0XHRjb25zdCBjaGlsZENvbHVtbnMgPSByb290Q29sdW1uLmNoaWxkcmVuO1xuXG5cdFx0aWYgKGNoaWxkQ29sdW1ucy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XG5cblx0XHRjb25zdCBmaXJzdENoaWxkID0gY2hpbGRDb2x1bW5zWzBdO1xuXG5cdFx0aWYgKGNoaWxkQ29sdW1ucy5sZW5ndGggPT09IDEgJiYgZmlyc3RDaGlsZC5hcGlDb2x1bW4udHlwZSA9PT0gJ2lkJykge1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXG5cdFx0XHRcdGl0ZW1FbnRyeS5kZXJpdmVkW2ZpcnN0Q2hpbGQucGF0aF0gPSB0aGlzLmdldEl0ZW1JZEJ5Q29sdW1uKGl0ZW1FbnRyeSwgcm9vdENvbHVtbik7XG5cblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcblx0XHR9XG5cblx0XHRjb25zdCBpdGVtSWRNYXA6IHtbaXRlbUlkOiBzdHJpbmddOiBJdGVtRW50cnlbXX0gPSB7fTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBpdGVtSWQgPSB0aGlzLmdldEl0ZW1JZEJ5Q29sdW1uKGl0ZW1FbnRyeSwgcm9vdENvbHVtbik7XG5cblx0XHRcdGlmIChpdGVtSWRNYXBbaXRlbUlkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRpdGVtSWRNYXBbaXRlbUlkXSA9IFtdO1xuXG5cdFx0XHRpdGVtSWRNYXBbaXRlbUlkXS5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0aWYgKGl0ZW1JZE1hcC5udWxsICE9PSB1bmRlZmluZWQpXG5cdFx0XHR0aGlzLnNldERlZmF1bHRWYWx1ZXNCeUNvbHVtbihpdGVtSWRNYXAubnVsbCwgcm9vdENvbHVtbik7XG5cblx0XHRjb25zdCBpdGVtSWRzOiBJdGVtSWRbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbUlkTWFwKSB7XG5cdFx0XHRpZiAoaXRlbUlkID09PSAnbnVsbCcpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpdGVtSWRzLnB1c2goK2l0ZW1JZCk7XG5cdFx0fVxuXG5cdFx0aWYgKGl0ZW1JZHMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xuXG5cdFx0Y29uc3QgY29sdW1uSWRzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY2hpbGRDb2x1bW5zKVxuXHRcdFx0Y29sdW1uSWRzLnB1c2goY29sdW1uLmlkKTtcblxuXHRcdHJldHVybiB0aGlzLmZldGNoSXRlbXMoXG5cdFx0XHQ8SXRlbVR5cGU+IHJvb3RDb2x1bW4uaXRlbVR5cGUsXG5cdFx0XHRpdGVtSWRzLFxuXHRcdFx0bmV3IEl0ZW1FbnRyeU9wdGlvbnMoe2NvbHVtbnM6IGNvbHVtbklkc30pLFxuXHRcdFx0bG9jYWxJdGVtQ2FjaGVcblx0XHQpLnRoZW4oXG5cdFx0XHRzb3VyY2VJdGVtRW50cmllcyA9PiB7XG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIHNvdXJjZUl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5RmllbGRzID0gaXRlbUVudHJ5LmdldEZpZWxkcygpO1xuXHRcdFx0XHRcdGNvbnN0IGRlc3RpbmF0aW9uSXRlbUVudHJpZXMgPSBpdGVtSWRNYXBbaXRlbUVudHJ5Lml0ZW1JZF07XG5cblx0XHRcdFx0XHRmb3IgKGNvbnN0IGRlc3RpbmF0aW9uSXRlbUVudHJ5IG9mIGRlc3RpbmF0aW9uSXRlbUVudHJpZXMpIHtcblx0XHRcdFx0XHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNoaWxkQ29sdW1ucylcblx0XHRcdFx0XHRcdFx0ZGVzdGluYXRpb25JdGVtRW50cnkuZGVyaXZlZFtjb2x1bW4ucGF0aF0gPSBpdGVtRW50cnlGaWVsZHNbY29sdW1uLmlkXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlRGVyaXZlZFZhbHVlcyhpdGVtRW50cmllcywgY2hpbGRDb2x1bW5zLCBsb2NhbEl0ZW1DYWNoZSk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHJlcXVlc3RJdGVtIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgcmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zID0gaXRlbUVudHJ5LmNvbHVtbnMucmVxdWVzdCkge1xuXHRcdHJldHVybiB0aGlzLnJlcXVlc3RJdGVtcyhpdGVtRW50cnkuaXRlbVR5cGUsIFtpdGVtRW50cnkuaXRlbUlkXSwgcmVxdWVzdENvbHVtbnMpO1xuXHR9XG5cblx0cmVxdWVzdEl0ZW1zIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZHM6IEl0ZW1JZFtdLCBjb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyk6IFByb21pc2VJbnRlcmZhY2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShpdGVtVHlwZSwge2lkOiBpdGVtSWRzfSwge1tpdGVtVHlwZV06IGNvbHVtbnN9KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQXBpUmVzcG9uc2VQcm9jZXNzb3IsIENvbHVtbkV4cGFuc2lvbiwgQ29sdW1uU2V0LCBJdGVtSGFuZGxlciwgUXVlcnlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LCBDb2x1bW5TZXRGYWN0b3J5LCBJdGVtRW50cnlGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge1xuXHRBcGlRdWVyeSxcblx0QXBpUmVxdWVzdENvbHVtbnMsXG5cdEFwaVJlc3BvbnNlLFxuXHRFbnRyeVBhcmVudE51bGwsXG5cdEl0ZW1JZCxcblx0SXRlbVR5cGUsXG5cdFByb21pc2VJbnRlcmZhY2Vcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBwYXRoRXhpc3RzIH0gZnJvbSAnLi9VdGlsJztcblxuZXhwb3J0IGNsYXNzIEl0ZW1SZXF1ZXN0U2VydmljZSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlGYWN0b3J5OiBJdGVtRW50cnlGYWN0b3J5LFxuXHRcdHByaXZhdGUgcXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2Vcblx0KSB7XG5cdH1cblxuXHRyZXF1ZXN0SXRlbSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCwgY29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMpOiBQcm9taXNlSW50ZXJmYWNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSB7XG5cdFx0XHRbaXRlbVR5cGVdOiBjb2x1bW5zXG5cdFx0fTtcblxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHR7aWQ6IGl0ZW1JZH0sXG5cdFx0XHRyZXF1ZXN0Q29sdW1uc1xuXHRcdCk7XG5cdH1cblxuXHRyZXF1ZXN0SXRlbXMgKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdHF1ZXJ5OiBBcGlRdWVyeSA9IGNvbGxlY3Rpb25FbnRyeS5xdWVyeS5vYmplY3QsXG5cdFx0Y29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMgPSBjb2xsZWN0aW9uRW50cnkub3B0aW9ucy5jb2x1bW5zXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZTtcblxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RTa2VsZXRvbihcblx0XHRcdHtcblx0XHRcdFx0cmVxdWVzdFR5cGU6ICdxdWVyeScsXG5cdFx0XHRcdGl0ZW1UeXBlOiBpdGVtVHlwZSxcblx0XHRcdFx0Y29sdW1uczoge1tpdGVtVHlwZV06IGNvbHVtbnN9LFxuXHRcdFx0XHRxdWVyeTogcXVlcnksXG5cdFx0XHRcdGxpbWl0OiBjb2xsZWN0aW9uRW50cnkub3B0aW9ucy5saW1pdFxuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxuXHRyZXF1ZXN0TGlua0l0ZW1zIChcblx0XHRwYXJlbnRUeXBlOiBJdGVtVHlwZSxcblx0XHRwYXJlbnRJZEFycmF5OiBJdGVtSWRbXSxcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cXVlcnk6IEFwaVF1ZXJ5LFxuXHRcdGNvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IHtcblx0XHRcdFtpdGVtVHlwZV06IGNvbHVtbnNcblx0XHR9O1xuXG5cdFx0cmV0dXJuIHF1ZXJ5ID09PSBudWxsID9cblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoXG5cdFx0XHRcdHBhcmVudFR5cGUsXG5cdFx0XHRcdHtpZDogcGFyZW50SWRBcnJheX0sXG5cdFx0XHRcdHJlcXVlc3RDb2x1bW5zXG5cdFx0XHQpIDpcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoXG5cdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5hZGRBbmRDb25kaXRpb24oXG5cdFx0XHRcdFx0cXVlcnksXG5cdFx0XHRcdFx0e2xpbmtlZFRvOiBwYXJlbnRUeXBlLCBxdWVyeToge2lkOiBwYXJlbnRJZEFycmF5fX1cblx0XHRcdFx0KSxcblx0XHRcdFx0cmVxdWVzdENvbHVtbnMgLy8gc2hvdWxkIGNvbnRhaW4gYSBkZXJpdmVkIGNvbHVtbiB0aGF0IHJlZmVycyB0byB0aGUgcGFyZW50XG5cdFx0XHQpO1xuXHR9XG5cblx0cHJvY2Vzc0V4cGFuc2lvbiAoXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRcdHJlc3BvbnNlOiBBcGlSZXNwb25zZSxcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdXG5cdCkge1xuXHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdHJlcXVlc3RDb2x1bW5zLFxuXHRcdFx0cmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KClcblx0XHQpO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdGlmIChpdGVtRW50cnkuaXNMb2NhbCgpKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0dGhpcy5oYW5kbGVDYWNoZWRJdGVtKGl0ZW1FbnRyeSwgcmVzcG9uc2UsIGNvbHVtbkV4cGFuc2lvbik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbHVtbkV4cGFuc2lvbjtcblx0fVxuXG5cdHByb2Nlc3NSZXNwb25zZSAoXG5cdFx0cmVzcG9uc2U6IEFwaVJlc3BvbnNlLFxuXHRcdGlkQXJyYXk6IEl0ZW1JZFtdLFxuXHRcdHBhcmVudDogRW50cnlQYXJlbnROdWxsLFxuXHRcdGNvbHVtblNldDogQ29sdW1uU2V0LFxuXHRcdGNvbHVtbkV4cGFuc2lvbjogQ29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdGNvbHVtblNldC5pdGVtVHlwZSxcblx0XHRcdGNvbHVtblNldC5yZXF1ZXN0Q29sdW1uc1RydWUgPyB0cnVlIDogY29sdW1uU2V0LnJlcXVlc3QsXG5cdFx0XHRjb2x1bW5TZXQucmVzcG9uc2Vcblx0XHQpXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8SXRlbUVudHJ5W10+IHtcblx0XHRjb25zdCBpdGVtSGFuZGxlciA9IHRoaXMuaXRlbUhhbmRsZXI7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBjb2x1bW5TZXQuaXRlbVR5cGU7XG5cdFx0Y29uc3Qgcm9vdENvbHVtbnMgPSBjb2x1bW5TZXQucm9vdDtcblx0XHRjb25zdCBpdGVtRW50cmllczogSXRlbUVudHJ5W10gPSBbXTtcblx0XHRjb25zdCBkZWZlcnJlZEVudHJpZXM6IEFycmF5PFByb21pc2VJbnRlcmZhY2U8SXRlbUVudHJ5Pj4gPSBbXTtcblxuXHRcdC8vIHNob3VsZCBiZSBmYXN0Li4uXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgaWRBcnJheSkge1xuXHRcdFx0bGV0IGl0ZW1FbnRyeSA9IGl0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXG5cdFx0XHRpZiAoaXRlbUVudHJ5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0aXRlbUVudHJ5ID0gdGhpcy5pdGVtRW50cnlGYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdFx0XHRpdGVtSWQsXG5cdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCksXG5cdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIHJvb3RDb2x1bW5zKSxcblx0XHRcdFx0XHRjb2x1bW5TZXRcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRpdGVtSGFuZGxlci5lbnRyaWVzLmFkZChpdGVtRW50cnkpO1xuXHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoaXRlbUVudHJ5LmlzRGVmZXJyZWQoKSkge1xuXHRcdFx0XHRcdGlmIChpdGVtRW50cnkuZGVmZXJSZXF1ZXN0KSB7XG5cdFx0XHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKFxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnkucmVzb2x2ZURlZmVycmVkKFxuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQpLFxuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCByb290Q29sdW1ucyksXG5cdFx0XHRcdFx0XHRcdFx0Y29sdW1uU2V0XG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSBlbHNlXG5cdFx0XHRcdFx0XHRkZWZlcnJlZEVudHJpZXMucHVzaChpdGVtRW50cnkuZ2V0UHJvbWlzZSgpKTtcblx0XHRcdFx0fSBlbHNlIGlmIChpdGVtRW50cnkucmVsb2FkUXVldWVkKSB7XG5cdFx0XHRcdFx0aXRlbUVudHJ5LnJlbG9hZFF1ZXVlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdGl0ZW1FbnRyeS51cGRhdGVGaWVsZHMoXG5cdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKSxcblx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCByb290Q29sdW1ucyksXG5cdFx0XHRcdFx0XHRmYWxzZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aXRlbUVudHJpZXMucHVzaChpdGVtRW50cnkpO1xuXHRcdFx0XHR9IGVsc2Vcblx0XHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKHRoaXMuaGFuZGxlQ2FjaGVkSXRlbShpdGVtRW50cnksIHJlc3BvbnNlLCBjb2x1bW5FeHBhbnNpb24pKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHBhcmVudCAhPT0gbnVsbClcblx0XHRcdFx0aXRlbUVudHJ5LnBhcmVudCA9IHBhcmVudDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwoZGVmZXJyZWRFbnRyaWVzKS50aGVuKFxuXHRcdFx0cmVzb2x2ZWRFbnRyaWVzID0+IHtcblx0XHRcdFx0Zm9yIChjb25zdCByZXNvbHZlZEVudHJ5IG9mIHJlc29sdmVkRW50cmllcykge1xuXHRcdFx0XHRcdGl0ZW1FbnRyaWVzLnB1c2goXG5cdFx0XHRcdFx0XHR0aGlzLmhhbmRsZUNhY2hlZEl0ZW0oXG5cdFx0XHRcdFx0XHRcdHJlc29sdmVkRW50cnksXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHRcdFx0XHRjb2x1bW5FeHBhbnNpb25cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyaWVzO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRoYW5kbGVDYWNoZWRJdGVtIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgcmVzcG9uc2U6IEFwaVJlc3BvbnNlLCBjb2x1bW5FeHBhbnNpb246IENvbHVtbkV4cGFuc2lvbikge1xuXHRcdGNvbnN0IGV4cGFuc2lvblJlc3VsdCA9IGNvbHVtbkV4cGFuc2lvbi5ydW4oaXRlbUVudHJ5LmNvbHVtbnMpO1xuXG5cdFx0cmV0dXJuIGV4cGFuc2lvblJlc3VsdCA9PT0gbnVsbCA/XG5cdFx0XHRpdGVtRW50cnkgOlxuXHRcdFx0aXRlbUVudHJ5LmV4cGFuZChcblx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkKSxcblx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KFxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5pdGVtVHlwZSxcblx0XHRcdFx0XHRpdGVtRW50cnkuaXRlbUlkLFxuXHRcdFx0XHRcdGV4cGFuc2lvblJlc3VsdC5kaWZmZXJlbmNlLnJvb3Rcblx0XHRcdFx0KSxcblx0XHRcdFx0ZXhwYW5zaW9uUmVzdWx0XG5cdFx0XHQpO1xuXHR9XG5cblx0cHJvY2Vzc0xpbmtSZXNwb25zZSAoXG5cdFx0cmVzcG9uc2U6IEFwaVJlc3BvbnNlLFxuXHRcdHBhcmVudFR5cGU6IEl0ZW1UeXBlLFxuXHRcdHBhcmVudElkQXJyYXk6IEl0ZW1JZFtdLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zOiBhbnlcblx0KSB7XG5cdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCk7XG5cdFx0Y29uc3QgY29sdW1uU2V0ID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucy5jb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xuXHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIG9wdGlvbnMuY29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKTtcblx0XHRjb25zdCBwYXJlbnRJdGVtcyA9IHJlc3BvbnNlLml0ZW1zW3BhcmVudFR5cGVdO1xuXHRcdGNvbnN0IHByb21pc2VzOiBhbnkgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgb2YgcGFyZW50SWRBcnJheSkge1xuXHRcdFx0cHJvbWlzZXNbcGFyZW50SWRdID0gcGF0aEV4aXN0cyhwYXJlbnRJdGVtcywgW3BhcmVudElkLCAnbGlua3MnLCBpdGVtVHlwZV0pID9cblx0XHRcdFx0dGhpcy5wcm9jZXNzUmVzcG9uc2UoXG5cdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0cGFyZW50SXRlbXNbcGFyZW50SWRdLmxpbmtzW2l0ZW1UeXBlXSxcblx0XHRcdFx0XHR7aXRlbVR5cGU6IHBhcmVudFR5cGUsIGl0ZW1JZDogcGFyZW50SWR9LFxuXHRcdFx0XHRcdGNvbHVtblNldCxcblx0XHRcdFx0XHRjb2x1bW5FeHBhbnNpb25cblx0XHRcdFx0KSA6XG5cdFx0XHRcdFtdO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChwcm9taXNlcykudGhlbihcblx0XHRcdHJlc29sdmVkID0+IHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRpdGVtczogcmVzb2x2ZWQsXG5cdFx0XHRcdFx0Y29sdW1uczogY29sdW1uU2V0LFxuXHRcdFx0XHRcdGNvbHVtbkV4cGFuc2lvbjogY29sdW1uRXhwYW5zaW9uXG5cdFx0XHRcdH07XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgRFVQTElDQVRFX0tFWVdPUkQsIERVUExJQ0FURV9QUkVGSVgsIE5FV19LRVlXT1JELCBORVdfUFJFRklYIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IEl0ZW1JZCwgU3RhdGVLZXksIFN0YXRlS2V5VHlwZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIEtleVNlcnZpY2Uge1xuXHRzZXBhcmF0b3I6IHN0cmluZyA9ICc6JztcblxuXHRjb25zdHJ1Y3RvciAoKSB7fVxuXG5cdGdldFNpbmdsZUtleSAoaXRlbVR5cGU6IHN0cmluZywgaXRlbUlkOiBudW1iZXIgfCBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdHJldHVybiBpdGVtVHlwZSArIHRoaXMuc2VwYXJhdG9yICsgaXRlbUlkO1xuXHR9XG5cblx0Z2V0Q3NzS2V5ICgpOiBzdHJpbmcge1xuXHRcdHJldHVybiBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKGFyZ3VtZW50cywgJ18nKTtcblx0fVxuXG5cdHBhcnNlU3RhdGVLZXkgKHN0YXRlS2V5OiBzdHJpbmcpOiBTdGF0ZUtleSB8IG51bGwge1xuXHRcdHN0YXRlS2V5ID0gc3RhdGVLZXkudG9TdHJpbmcoKTtcblxuXHRcdGlmIChzdGF0ZUtleS5zdWJzdHJpbmcoMCwgTkVXX0tFWVdPUkQubGVuZ3RoKSA9PT0gTkVXX0tFWVdPUkQpXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0eXBlOiBTdGF0ZUtleVR5cGUuTmV3LFxuXHRcdFx0XHR0ZW1wbGF0ZTogc3RhdGVLZXkuc3Vic3RyaW5nKE5FV19LRVlXT1JELmxlbmd0aCkgLy8gVE9ETzogdGhpcyBpcyBjdXJyZW50bHkgbm90IGJlaW5nIHVzZWQsIHJlZXZhbHVhdGVcblx0XHRcdH07XG5cblx0XHRpZiAoc3RhdGVLZXkuc3Vic3RyaW5nKDAsIERVUExJQ0FURV9LRVlXT1JELmxlbmd0aCkgPT09IERVUExJQ0FURV9LRVlXT1JEKVxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dHlwZTogU3RhdGVLZXlUeXBlLkR1cGxpY2F0ZSxcblx0XHRcdFx0aXRlbUlkOiArc3RhdGVLZXkuc3Vic3RyaW5nKERVUExJQ0FURV9LRVlXT1JELmxlbmd0aClcblx0XHRcdH07XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGdldER1cGxpY2F0ZVN0YXRlS2V5IChpdGVtSWQ6IHN0cmluZyB8IG51bWJlcik6IHN0cmluZyB7XG5cdFx0cmV0dXJuIERVUExJQ0FURV9LRVlXT1JEICsgaXRlbUlkO1xuXHR9XG5cblx0Z2V0TmV3U3RhdGVLZXkgKHRlbXBsYXRlVHlwZTogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gTkVXX0tFWVdPUkQgKyB0ZW1wbGF0ZVR5cGU7XG5cdH1cblxuXHRnZXRMb2NhbElkICgpOiBJdGVtSWQge1xuXHRcdHJldHVybiArKE5FV19QUkVGSVggKyB0aGlzLmdldFJhbmRvbVN0cmluZygpKTtcblx0fVxuXG5cdGdldExvY2FsRHVwbGljYXRlSWQgKCk6IEl0ZW1JZCB7XG5cdFx0cmV0dXJuICsoRFVQTElDQVRFX1BSRUZJWCArIHRoaXMuZ2V0UmFuZG9tU3RyaW5nKCkpO1xuXHR9XG5cblx0Z2V0UmFuZG9tU3RyaW5nICgpOiBzdHJpbmcge1xuXHRcdHJldHVybiAoJycgKyBNYXRoLnJhbmRvbSgpKS5zcGxpdCgnLicpWzFdLnN1YnN0cigwLCA4KTtcblx0fVxuXG5cdC8vIG5vdGU6IHRoZSBjaGFuZ2VzIGNvbXBpbGVyIHVzZXMgdGhpc1xuXHQvLyBtaWdodCBiZSBjYWxsZWQgd2l0aCB1bmRlZmluZWQgKGl0ZW1IYW5kbGVyLmNyZWF0ZVJlcXVlc3QpXG5cdGlzTG9jYWxJZCAoaXRlbUlkOiBJdGVtSWQgfCBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gaXRlbUlkICE9PSB1bmRlZmluZWQgJiYgKHRoaXMuaXNOZXdJZChpdGVtSWQpIHx8IHRoaXMuaXNEdXBsaWNhdGVJZChpdGVtSWQpKTtcblx0fVxuXG5cdGlzTmV3SWQgKGl0ZW1JZDogSXRlbUlkIHwgc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIGl0ZW1JZCA9PT0gTkVXX0tFWVdPUkQgfHwgKCcnICsgaXRlbUlkKS5zdWJzdHJpbmcoMCwgTkVXX1BSRUZJWC5sZW5ndGgpID09PSBORVdfUFJFRklYO1xuXHR9XG5cblx0aXNEdXBsaWNhdGVJZCAoaXRlbUlkOiBJdGVtSWQgfCBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gaXRlbUlkID09PSBEVVBMSUNBVEVfS0VZV09SRCB8fCAoJycgKyBpdGVtSWQpLnN1YnN0cmluZygwLCBEVVBMSUNBVEVfUFJFRklYLmxlbmd0aCkgPT09IERVUExJQ0FURV9QUkVGSVg7XG5cdH1cbn1cbiIsImltcG9ydCB7IEFwaVJlc3BvbnNlUHJvY2Vzc29yLCBDb2xsZWN0aW9uTWF0Y2hlciwgQ29sdW1uU2V0LCBMb2NhbENhY2hlLCBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBFTlRSWV9TVEFUVVMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHtcblx0Q29sbGVjdGlvbkVudHJ5LFxuXHRDb2xsZWN0aW9uRW50cnlPcHRpb25zLFxuXHRDb2xsZWN0aW9uRW50cnlPcHRpb25zSW50ZXJmYWNlLFxuXHRDb2xsZWN0aW9uUmVzb3VyY2UsXG5cdENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnMsXG5cdENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UsXG5cdEl0ZW1FbnRyeSxcblx0SXRlbUVudHJ5T3B0aW9uc0ludGVyZmFjZSxcblx0SXRlbVJlc291cmNlLFxuXHRJdGVtUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlXG59IGZyb20gJy4uL21vZGVscyc7XG5cbmV4cG9ydCB0eXBlIEVudHJ5UGFyZW50ID0ge2l0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZDogbnVtYmVyfTtcblxuZXhwb3J0IHR5cGUgRW50cnlQYXJlbnROdWxsID0gRW50cnlQYXJlbnQgfCBudWxsO1xuXG5leHBvcnQgdHlwZSBGaWVsZE1hcCA9IHtcblx0W2tleTogc3RyaW5nXTogYW55XG59O1xuXG5leHBvcnQgdHlwZSBJdGVtT3B0aW9uc0ludGVyZmFjZSA9IEl0ZW1FbnRyeU9wdGlvbnNJbnRlcmZhY2UgJiBJdGVtUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlO1xuXG5leHBvcnQgdHlwZSBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZSA9IENvbGxlY3Rpb25FbnRyeU9wdGlvbnNJbnRlcmZhY2UgJiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlO1xuXG5leHBvcnQgdHlwZSBDb2xsZWN0aW9uRGVmaW5pdGlvbiA9IHtcblx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRvcHRpb25zOiB7ZW50cnk6IENvbGxlY3Rpb25FbnRyeU9wdGlvbnMsIHJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zfVxufTtcblxuZXhwb3J0IHR5cGUgTGlua0NvbGxlY3Rpb25EZWZpbml0aW9uID0ge1xuXHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdGxpbmtUeXBlOiBJdGVtVHlwZSxcblx0bGlua0lkQXJyYXk6IEl0ZW1JZFtdIHwgKCgpID0+IEl0ZW1JZFtdKSxcblx0bGlua0ZpZWxkOiBzdHJpbmcsXG5cdG9wdGlvbnM6IHtlbnRyeTogQ29sbGVjdGlvbkVudHJ5T3B0aW9ucywgcmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnN9XG59O1xuXG5leHBvcnQgdHlwZSBPbkNoYW5nZUZ1bmN0aW9uID0gKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlLCBwcmV2aW91cz86IEZpZWxkTWFwKSA9PiB2b2lkO1xuXG5leHBvcnQgY29uc3QgZW51bSBTdGF0ZUtleVR5cGUge1xuXHROZXcgPSAnbmV3Jyxcblx0RHVwbGljYXRlID0gJ2R1cGxpY2F0ZSdcbn1cblxuZXhwb3J0IHR5cGUgU3RhdGVLZXkgPSB7dHlwZTogU3RhdGVLZXlUeXBlLCB0ZW1wbGF0ZT86IHN0cmluZywgaXRlbUlkPzogbnVtYmVyfTtcblxuZXhwb3J0IHR5cGUgT25TYXZlQ2FsbGJhY2sgPSAobG9jYWxDYWNoZTogTG9jYWxDYWNoZSwgY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCkgPT4gYW55O1xuXG5leHBvcnQgZW51bSBMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24ge1xuXHRBbHdheXMgPSAnYWx3YXlzJyxcblx0T25DbG9zZSA9ICdvbkNsb3NlJyxcblx0U2tpcE9uQ2xvc2UgPSAnc2tpcE9uQ2xvc2UnXG59XG5cbmV4cG9ydCB0eXBlIExvY2FsQ2FjaGVDYWxsYmFja3M8VD4gPSB7XG5cdGFsd2F5czoge1trZXk6IHN0cmluZ106IFR9LFxuXHRvbkNsb3NlOiB7W2tleTogc3RyaW5nXTogVH0sXG5cdHNraXBPbkNsb3NlOiB7W2tleTogc3RyaW5nXTogVH1cbn07XG5cbmV4cG9ydCB0eXBlIFNvY2tldE1lc3NhZ2VUeXBlID0gJ2V2ZW50JyB8ICdub3RpZmljYXRpb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNvY2tldE1lc3NhZ2Uge1xuXHRoZWFkZXI6IHtcblx0XHRkb21haW46IHN0cmluZyxcblx0XHRhY2NvdW50OiBzdHJpbmcsXG5cdFx0c2VuZGVyOiB7XG5cdFx0XHRkaXNwbGF5bmFtZTogc3RyaW5nLFxuXHRcdFx0aXRlbVR5cGU6ICdNZWRld2Vya2VyJyxcblx0XHRcdGl0ZW1JZDogSXRlbUlkLFxuXHRcdFx0YXV0aG9yaXplZDogYm9vbGVhbixcblx0XHRcdHNlc3Npb246IHN0cmluZ1xuXHRcdH0sXG5cdFx0bWVzc2FnZUlkOiB7XG5cdFx0XHRJZDogc3RyaW5nLFxuXHRcdFx0c2VxdWVuY2U6IG51bWJlcixcblx0XHRcdGJhdGNoOiBudW1iZXIsXG5cdFx0XHRyZXF1ZXN0OiBudW1iZXJcblx0XHR9LFxuXHRcdHNlbnQ6IHN0cmluZyxcblx0XHRmb3JjZUV2YWx1YXRlOiBib29sZWFuXG5cdH07XG5cdGJvZHk6IGFueTtcblx0bWVzc2FnZVR5cGU6IFNvY2tldE1lc3NhZ2VUeXBlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZ1bmN0aW9uQ2hhbmdlc1Jlc29sdmVTb2NrZXRNZXNzYWdlIGV4dGVuZHMgU29ja2V0TWVzc2FnZSB7XG5cdGJvZHk6IHtcblx0XHRpdGVtVHlwZTogJ0Z1bmN0aW9uQ2hhbmdlc1Jlc29sdmUnLFxuXHRcdFtrZXk6IHN0cmluZ106IGFueVxuXHR9O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBJdGVtIHJlc291cmNlXG5cbmV4cG9ydCB0eXBlIEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcCA8VCBleHRlbmRzIEl0ZW1SZXNvdXJjZSA9IEl0ZW1SZXNvdXJjZT4gPSB7XG5cdFtpdGVtSWQ6IG51bWJlcl06IFRcbn07XG5cbmV4cG9ydCB0eXBlIEl0ZW1SZXNvdXJjZXNJdGVtVHlwZU1hcCA8VCBleHRlbmRzIEl0ZW1SZXNvdXJjZSA9IEl0ZW1SZXNvdXJjZT4gPSB7XG5cdFtpdGVtVHlwZTogc3RyaW5nXTogVFtdXG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBJdGVtIEVudHJ5XG5cbmV4cG9ydCB0eXBlIEl0ZW1JZCA9IG51bWJlcjtcblxuZXhwb3J0IHR5cGUgSXRlbVR5cGUgPSBzdHJpbmc7XG5cbmV4cG9ydCB0eXBlIEl0ZW1NYXA8VD4gPSB7XG5cdFtpdGVtVHlwZTogc3RyaW5nXToge1xuXHRcdFtpdGVtSWQ6IHN0cmluZ106IFRcblx0fVxufTtcblxuZXhwb3J0IHR5cGUgSXRlbUVudHJ5TWFwID0gSXRlbU1hcDxJdGVtRW50cnk+O1xuXG5leHBvcnQgdHlwZSBMaW5rZWRJdGVtRW50cnlNYXAgPSB7XG5cdGl0ZW1UeXBlOiBzdHJpbmcsXG5cdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcblx0Y29sdW1uU2V0OiBDb2x1bW5TZXRcbn07XG5cbmV4cG9ydCB0eXBlIEVudHJ5U3RhdHVzTWFwPFQ+ID0ge1xuXHRbZW50cnlTdGF0dXM6IHN0cmluZ106IFRbXTtcbn07XG5cbmV4cG9ydCB0eXBlIEl0ZW1FbnRyeVBhcmVudElkTWFwID0ge1xuXHRbcGFyZW50SWQ6IG51bWJlcl06IEl0ZW1FbnRyeVtdO1xufTtcblxuZXhwb3J0IHR5cGUgQ29udmVyc2lvbk1hcCA9IHtcblx0W2l0ZW1JZDogbnVtYmVyXTogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgSXRlbUlkQ29udmVyc2lvbk1hcCA9IHtcblx0W2l0ZW1UeXBlOiBzdHJpbmddOiBDb252ZXJzaW9uTWFwXG59O1xuXG5leHBvcnQgdHlwZSBDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwID0gSXRlbU1hcDxhbnk+O1xuXG5leHBvcnQgdHlwZSBJdGVtRXJyb3IgPSB7bWVzc2FnZTogc3RyaW5nfTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gQ29sbGVjdGlvbiBFbnRyeVxuXG5leHBvcnQgdHlwZSBRdWVyeVBhcmFtcyA9IGFueTsgLy8gVE9ET1xuXG5leHBvcnQgdHlwZSBDb2xsZWN0aW9uUXVlcnkgPSB7b2JqZWN0OiBvYmplY3QsIHN0cmluZzogc3RyaW5nfTtcblxuZXhwb3J0IHR5cGUgUXVlcnlDYWxsYmFjayA9IChxdWVyeVBhcmFtczogUXVlcnlQYXJhbXMpID0+IFF1ZXJ5UGFyYW1zO1xuXG5leHBvcnQgdHlwZSBDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCA9IHtcblx0W3BhcmVudElkOiBudW1iZXJdOiBDb2xsZWN0aW9uRW50cnlcbn07XG5cbmV4cG9ydCB0eXBlIENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwPFQgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVJlc291cmNlPiA9IENvbGxlY3Rpb25SZXNvdXJjZTxJdGVtUmVzb3VyY2U+PiA9IHtcblx0W3BhcmVudElkOiBudW1iZXJdOiBUXG59O1xuXG5leHBvcnQgdHlwZSBDb2xsZWN0aW9uTWF0Y2hSZXN1bHQgPSB7XG5cdGZpdHRpbmc6IENvbGxlY3Rpb25FbnRyeVtdLFxuXHRub3RmaXR0aW5nOiBDb2xsZWN0aW9uRW50cnlbXSxcblx0bWF5YmU6IENvbGxlY3Rpb25FbnRyeVtdXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4dGVuZGVkQ29sbGVjdGlvbk1hdGNoUmVzdWx0IGV4dGVuZHMgQ29sbGVjdGlvbk1hdGNoUmVzdWx0IHtcblx0Y29sbGVjdGlvbjogQ29sbGVjdGlvbkVudHJ5O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwZWRFeHRlbmRlZENvbGxlY3Rpb25NYXRjaFJlc3VsdCB7XG5cdFtjb2xsZWN0aW9uSWQ6IG51bWJlcl06IEV4dGVuZGVkQ29sbGVjdGlvbk1hdGNoUmVzdWx0O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBDb2x1bW5zXG5cbmV4cG9ydCB0eXBlIFJlc3BvbnNlQ29sdW1uID0gYW55OyAvLyBUT0RPXG5cbmV4cG9ydCB0eXBlIFJlc3BvbnNlQ29sdW1uTWFwID0ge1xuXHRbaXRlbVR5cGU6IHN0cmluZ106IHtcblx0XHRbY29sdW1uSWQ6IHN0cmluZ106IFJlc3BvbnNlQ29sdW1uXG5cdH1cbn07XG5cbmV4cG9ydCB0eXBlIENvbHVtbkV4cGFuc2lvblJlc3VsdCA9IHtcblx0bWVyZ2VkOiBDb2x1bW5TZXQsXG5cdGRpZmZlcmVuY2U6IENvbHVtblNldFxufTtcblxuZXhwb3J0IHR5cGUgUm9vdENvbHVtbk1hcCA9IHtbY29sdW1uSWQ6IHN0cmluZ106IHthcGlDb2x1bW46IFJlc3BvbnNlQ29sdW1uLCBjaGlsZHJlbjogUm9vdENvbHVtbk1hcH19O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBBcGkgcmVmZXJlbmNlXG5cbmV4cG9ydCB0eXBlIEFwaVJlc3BvbnNlID0gQXBpUmVzcG9uc2VQcm9jZXNzb3I7IC8vIFRPRE9cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gQXBpIHRlbXBsYXRlIHJlc3BvbnNlXG5leHBvcnQgdHlwZSBUZW1wbGF0ZUl0ZW1SZXNvdXJjZU1hcCA8VCBleHRlbmRzIEl0ZW1SZXNvdXJjZT4gPSB7XG5cdG1haW46IFQ7XG5cdGxpbmtlZDogSXRlbVJlc291cmNlc0l0ZW1UeXBlTWFwXG59O1xuXG5leHBvcnQgdHlwZSBUZW1wbGF0ZUl0ZW1FbnRyeU1hcCA9IHtcblx0bWFpbjogSXRlbUVudHJ5O1xuXHRsaW5rZWQ6IExpbmtlZEl0ZW1FbnRyeU1hcFtdO1xufTtcblxuZXhwb3J0IHR5cGUgSXRlbVR5cGVNYXAgPSB7XG5cdFtpdGVtVHlwZTogc3RyaW5nXTogYW55O1xufTtcblxuZXhwb3J0IHR5cGUgRW50cnlTdGF0dXM8VD4gPSB7XG5cdGVudHJ5OiBUO1xuXHRzdGF0dXM6IEVOVFJZX1NUQVRVUztcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEFwaSByZXF1ZXN0XG5cbmV4cG9ydCB0eXBlIEFwaVF1ZXJ5ID0gYW55OyAvLyBUT0RPXG5cbmV4cG9ydCB0eXBlIEFwaVJlcXVlc3RJdGVtVmFsdWVzID0ge1xuXHR2YWx1ZXM/OiBhbnksXG5cdGxpbmtzPzoge1xuXHRcdFtpdGVtVHlwZTogc3RyaW5nXTogSXRlbUlkW11cblx0fVxufTtcblxuZXhwb3J0IHR5cGUgQXBpUmVxdWVzdEl0ZW1NYXAgPSB7XG5cdFtpdGVtVHlwZTogc3RyaW5nXToge1xuXHRcdFtpdGVtSWQ6IG51bWJlcl06IEFwaVJlcXVlc3RJdGVtVmFsdWVzXG5cdH07XG59O1xuXG5leHBvcnQgdHlwZSBBcGlSZXF1ZXN0Q29sdW1uID0gc3RyaW5nIHwge1tjb2x1bW5JZDogc3RyaW5nXTogQXBpUmVxdWVzdENvbHVtbltdfTtcblxuZXhwb3J0IHR5cGUgQXBpUmVxdWVzdENvbHVtbnMgPSBBcGlSZXF1ZXN0Q29sdW1uW10gfCB0cnVlO1xuXG5leHBvcnQgdHlwZSBBcGlSZXF1ZXN0Q29sdW1uTWFwID0ge1xuXHRbaXRlbVR5cGU6IHN0cmluZ106IEFwaVJlcXVlc3RDb2x1bW5zXG59O1xuXG5leHBvcnQgdHlwZSBBcGlSZXF1ZXN0TGltaXQgPSB7XG5cdGZpZWxkOiBzdHJpbmcsXG5cdGxpbWl0OiBudW1iZXIsXG5cdG9mZnNldD86IG51bWJlcixcblx0b3JkZXI/OiAnZGVzYycgfCAnYXNjJ1xufTtcblxuZXhwb3J0IHR5cGUgQXBpUmVxdWVzdE1vdmVJdGVtcyA9IHtcblx0W2l0ZW1UeXBlOiBzdHJpbmddOiBJdGVtSWRbXVxufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gQ3JlYXRlIHJlcXVlc3RcblxuZXhwb3J0IHR5cGUgQ3JlYXRlUmVxdWVzdEVudHJ5ID0ge1xuXHRyZXF1ZXN0OiB7XG5cdFx0cmVxdWVzdFR5cGU6ICdjcmVhdGUnLFxuXHRcdGl0ZW1UeXBlPzogSXRlbVR5cGUsXG5cdFx0cGFyZW50VHlwZT86IEl0ZW1UeXBlLFxuXHRcdHBhcmVudElkPzoge1tpdGVtSWQ6IHN0cmluZ106IEl0ZW1JZH0sXG5cdFx0aXRlbXM6IEFwaVJlcXVlc3RJdGVtTWFwLFxuXHRcdGNvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5NYXBcblx0fSxcblx0Y29sdW1uczogUmVxdWVzdENvbHVtbkV4cGFuc2lvbixcblx0aXRlbXM6IEl0ZW1FbnRyeU1hcCxcblx0Y29sbGVjdGlvbnM6IENvbGxlY3Rpb25NYXRjaGVyXG59O1xuIiwiZXhwb3J0ICogZnJvbSAnLi9JdGVtVHlwZXNDb2xsZWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vUHJvbWlzZUludGVyZmFjZSc7XG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUsIEl0ZW1DYWNoZSwgTG9ja1NlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7XG5cdENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRJdGVtQ2FjaGVGYWN0b3J5LFxuXHRJdGVtUmVzb3VyY2VGYWN0b3J5XG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIEV4Y2VwdGlvbkhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQge1xuXHRDb2xsZWN0aW9uRWRpdFJlc291cmNlLFxuXHRDb2xsZWN0aW9uRW50cnksXG5cdENvbGxlY3Rpb25SZXNvdXJjZSxcblx0Q29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZSwgQ29sbGVjdGlvblZpZXdSZXNvdXJjZSwgRWRpdFJlc291cmNlLFxuXHRJdGVtRW50cnksXG5cdEl0ZW1SZXNvdXJjZSwgTG9jYWxWaWV3UmVzb3VyY2UsIFJlbW90ZVZpZXdSZXNvdXJjZVxufSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtcblx0Q29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXAsIENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwLFxuXHRDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwLFxuXHRJdGVtSWRDb252ZXJzaW9uTWFwLFxuXHRJdGVtT3B0aW9uc0ludGVyZmFjZSxcblx0TG9jYWxDYWNoZUNhbGxiYWNrQ29uZGl0aW9uLFxuXHRMb2NhbENhY2hlQ2FsbGJhY2tzLFxuXHRPblNhdmVDYWxsYmFjayxcblx0UHJvbWlzZUludGVyZmFjZVxufSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gJy4vVXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBMb2NhbENhY2hlIHtcblx0aXRlbXM6IEl0ZW1DYWNoZTtcblx0cm9vdEl0ZW06IEl0ZW1FbnRyeSB8IHVuZGVmaW5lZDtcblx0Y29sbGVjdGlvbnM6IENvbGxlY3Rpb25DYWNoZTtcblx0ZGVmZXJyZWRDb2xsZWN0aW9uczogQ29sbGVjdGlvbkNhY2hlO1xuXHR0YWJSZXF1ZXN0UGFyYW1ldGVycyA9IHt9O1xuXG5cdGlzU2F2aW5nOiBib29sZWFuID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBjYWxsYmFja3M6IHtcblx0XHRvbkJlZm9yZVNhdmU6IExvY2FsQ2FjaGVDYWxsYmFja3M8KGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUpID0+IGFueT4sXG5cdFx0b25TYXZlU3VjY2VzczogTG9jYWxDYWNoZUNhbGxiYWNrczxPblNhdmVDYWxsYmFjaz4sXG5cdH0gPSB7XG5cdFx0b25CZWZvcmVTYXZlOiB7YWx3YXlzOiB7fSwgb25DbG9zZToge30sIHNraXBPbkNsb3NlOiB7fX0sXG5cdFx0b25TYXZlU3VjY2Vzczoge2Fsd2F5czoge30sIG9uQ2xvc2U6IHt9LCBza2lwT25DbG9zZToge319XG5cdH07XG5cblx0cHJpdmF0ZSBjaGFuZ2VzSW50ZXJ2YWw6IG51bGwgfCBudW1iZXIgPSBudWxsO1xuXHRoYXNDaGFuZ2VzID0gZmFsc2U7XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnk6IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlRmFjdG9yeTogQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnk6IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGV4Y2VwdGlvbkhhbmRsZXI6IEV4Y2VwdGlvbkhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBpdGVtQ2FjaGVGYWN0b3J5OiBJdGVtQ2FjaGVGYWN0b3J5LFxuXHRcdHByaXZhdGUgaXRlbVJlc291cmNlRmFjdG9yeTogSXRlbVJlc291cmNlRmFjdG9yeSxcblx0XHRwcml2YXRlIGxvY2tTZXJ2aWNlOiBMb2NrU2VydmljZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZSxcblx0XHRwdWJsaWMgaWQ6IHN0cmluZyA9ICcnXG5cdCkge1xuXHRcdHRoaXMuaXRlbXMgPSB0aGlzLml0ZW1DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XG5cdFx0dGhpcy5jb2xsZWN0aW9ucyA9IHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeS5jb25zdHJ1Y3QoKTtcblx0XHR0aGlzLmRlZmVycmVkQ29sbGVjdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XG5cdH1cblxuXHRjcmVhdGVJdGVtUmVzb3VyY2UgKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5LFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlICYge2VkaXQ6IHRydWV9LFxuXHRcdGlzUm9vdD86IGJvb2xlYW4sXG5cdFx0aXNOZXc/OiBib29sZWFuXG5cdCk6IEVkaXRSZXNvdXJjZTtcblxuXHRjcmVhdGVJdGVtUmVzb3VyY2UgKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5LFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlICYge3JlbW90ZTogdHJ1ZX0sXG5cdFx0aXNSb290PzogYm9vbGVhbixcblx0XHRpc05ldz86IGJvb2xlYW5cblx0KTogUmVtb3RlVmlld1Jlc291cmNlO1xuXG5cdGNyZWF0ZUl0ZW1SZXNvdXJjZSAoXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnksXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UsXG5cdFx0aXNSb290PzogYm9vbGVhbixcblx0XHRpc05ldz86IGJvb2xlYW5cblx0KTogTG9jYWxWaWV3UmVzb3VyY2U7XG5cblx0Y3JlYXRlSXRlbVJlc291cmNlIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgb3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UsIGlzUm9vdDogYm9vbGVhbiA9IGZhbHNlLCBpc05ldz86IGJvb2xlYW4pIHtcblx0XHRpZiAoaXNSb290KVxuXHRcdFx0dGhpcy5yb290SXRlbSA9IGl0ZW1FbnRyeTtcblxuXHRcdG9wdGlvbnMub25EZWFjdGl2YXRlID0gKF9pdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gdGhpcy5vbkRlYWN0aXZhdGVJdGVtKF9pdGVtRW50cnkpO1xuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbUVudHJ5LCBvcHRpb25zLCBpc05ldyk7XG5cdH1cblxuXHRjcmVhdGVJdGVtUmVzb3VyY2VzIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlICYge2VkaXQ6IHRydWV9KTogRWRpdFJlc291cmNlW107XG5cdGNyZWF0ZUl0ZW1SZXNvdXJjZXMgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgb3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgJiB7cmVtb3RlOiB0cnVlfSk6IFJlbW90ZVZpZXdSZXNvdXJjZVtdO1xuXHRjcmVhdGVJdGVtUmVzb3VyY2VzIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlKTogTG9jYWxWaWV3UmVzb3VyY2VbXTtcblx0Y3JlYXRlSXRlbVJlc291cmNlcyAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCBvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSkge1xuXHRcdG9wdGlvbnMub25EZWFjdGl2YXRlID0gKF9pdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gdGhpcy5vbkRlYWN0aXZhdGVJdGVtKF9pdGVtRW50cnkpO1xuXG5cdFx0Y29uc3QgY29uc3RydWN0b3IgPSB0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnkuZ2V0Q29uc3RydWN0b3Iob3B0aW9ucyk7XG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXG5cdFx0XHRyZXN1bHQucHVzaChjb25zdHJ1Y3RvcihpdGVtRW50cnkpKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UgKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdHJlc291cmNlT3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0SXRlbXM6IHRydWUsIGVkaXRDb2xsZWN0aW9uOiB0cnVlfVxuXHQpOiBDb2xsZWN0aW9uRWRpdFJlc291cmNlPEVkaXRSZXNvdXJjZT47XG5cblx0Y3JlYXRlQ29sbGVjdGlvblJlc291cmNlIChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRyZXNvdXJjZU9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UgJiB7cmVtb3RlSXRlbXM6IHRydWUsIGVkaXRDb2xsZWN0aW9uOiB0cnVlfVxuXHQpOiBDb2xsZWN0aW9uRWRpdFJlc291cmNlPFJlbW90ZVZpZXdSZXNvdXJjZT47XG5cblx0Y3JlYXRlQ29sbGVjdGlvblJlc291cmNlIChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRyZXNvdXJjZU9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdENvbGxlY3Rpb246IHRydWV9XG5cdCk6IENvbGxlY3Rpb25FZGl0UmVzb3VyY2U8TG9jYWxWaWV3UmVzb3VyY2U+O1xuXG5cdGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZSAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksXG5cdFx0cmVzb3VyY2VPcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlICYge2VkaXRJdGVtczogdHJ1ZX1cblx0KTogQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxFZGl0UmVzb3VyY2U+O1xuXG5cdGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZSAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksXG5cdFx0cmVzb3VyY2VPcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlICYge3JlbW90ZUl0ZW1zOiB0cnVlfVxuXHQpOiBDb2xsZWN0aW9uVmlld1Jlc291cmNlPFJlbW90ZVZpZXdSZXNvdXJjZT47XG5cblx0Y3JlYXRlQ29sbGVjdGlvblJlc291cmNlIChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRyZXNvdXJjZU9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2Vcblx0KTogQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxMb2NhbFZpZXdSZXNvdXJjZT47XG5cblx0Y3JlYXRlQ29sbGVjdGlvblJlc291cmNlIChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRyZXNvdXJjZU9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2Vcblx0KTogQ29sbGVjdGlvblJlc291cmNlPEl0ZW1SZXNvdXJjZT4ge1xuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkuY29uc3RydWN0KGNvbGxlY3Rpb25FbnRyeSwgcmVzb3VyY2VPcHRpb25zLCB0aGlzKTtcblx0fVxuXG5cdGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZXMgKFxuXHRcdGNvbGxlY3Rpb25FbnRyaWVzOiBDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCxcblx0XHRyZXNvdXJjZU9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdEl0ZW1zOiB0cnVlLCBlZGl0Q29sbGVjdGlvbjogdHJ1ZX1cblx0KTogQ29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA8Q29sbGVjdGlvbkVkaXRSZXNvdXJjZTxFZGl0UmVzb3VyY2U+PjtcblxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2VzIChcblx0XHRjb2xsZWN0aW9uRW50cmllczogQ29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXAsXG5cdFx0cmVzb3VyY2VPcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlICYge3JlbW90ZUl0ZW1zOiB0cnVlLCBlZGl0Q29sbGVjdGlvbjogdHJ1ZX1cblx0KTogQ29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA8Q29sbGVjdGlvbkVkaXRSZXNvdXJjZTxSZW1vdGVWaWV3UmVzb3VyY2U+PjtcblxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2VzIChcblx0XHRjb2xsZWN0aW9uRW50cmllczogQ29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXAsXG5cdFx0cmVzb3VyY2VPcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlICYge2VkaXRDb2xsZWN0aW9uOiB0cnVlfVxuXHQpOiBDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcDxDb2xsZWN0aW9uRWRpdFJlc291cmNlPExvY2FsVmlld1Jlc291cmNlPj47XG5cblx0Y3JlYXRlQ29sbGVjdGlvblJlc291cmNlcyAoXG5cdFx0Y29sbGVjdGlvbkVudHJpZXM6IENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwLFxuXHRcdHJlc291cmNlT3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0SXRlbXM6IHRydWV9XG5cdCk6IENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwPENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8RWRpdFJlc291cmNlPj47XG5cblx0Y3JlYXRlQ29sbGVjdGlvblJlc291cmNlcyAoXG5cdFx0Y29sbGVjdGlvbkVudHJpZXM6IENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwLFxuXHRcdHJlc291cmNlT3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZSAmIHtyZW1vdGVJdGVtczogdHJ1ZX1cblx0KTogQ29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA8Q29sbGVjdGlvblZpZXdSZXNvdXJjZTxSZW1vdGVWaWV3UmVzb3VyY2U+PjtcblxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2VzIChcblx0XHRjb2xsZWN0aW9uRW50cmllczogQ29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXAsXG5cdFx0cmVzb3VyY2VPcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlXG5cdCk6IENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwPENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8TG9jYWxWaWV3UmVzb3VyY2U+PjtcblxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2VzIChcblx0XHRjb2xsZWN0aW9uRW50cmllczogQ29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXAsXG5cdFx0cmVzb3VyY2VPcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlXG5cdCkge1xuXHRcdGNvbnN0IHJlc3VsdDoge1twYXJlbnRJZDogc3RyaW5nXTogQ29sbGVjdGlvblJlc291cmNlfSA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBjb2xsZWN0aW9uRW50cmllcylcblx0XHRcdHJlc3VsdFtwYXJlbnRJZF0gPSB0aGlzLmNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZShjb2xsZWN0aW9uRW50cmllc1twYXJlbnRJZF0sIHJlc291cmNlT3B0aW9ucyk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Y2xlYXJJdGVtIChpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSk6IHZvaWQge1xuXHRcdHRoaXMuY2xlYXJJdGVtRW50cnkoaXRlbVJlc291cmNlLmVudHJ5KTtcblx0fVxuXG5cdGNsZWFySXRlbUVudHJ5IChpdGVtRW50cnk6IEl0ZW1FbnRyeSk6IHZvaWQge1xuXHRcdHRoaXMuaXRlbXMuY2xlYXIoaXRlbUVudHJ5KTtcblx0XHRpdGVtRW50cnkuY2xlYXJSZXNvdXJjZXMoKTtcblx0fVxuXG5cdGNsZWFyQ29sbGVjdGlvbiAoY29sbGVjdGlvblJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UpOiB2b2lkIHtcblx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBjb2xsZWN0aW9uUmVzb3VyY2UuZW50cnk7XG5cblx0XHR0aGlzLmNvbGxlY3Rpb25zLmNsZWFyKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0Y29sbGVjdGlvbkVudHJ5LmNsZWFyUmVzb3VyY2VzKCk7XG5cdH1cblxuXHRjbGVhclJlc291cmNlcyAoaXNTdWJUYWJDaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuXHRcdHRoaXMuaXRlbXMuZm9yRWFjaChcblx0XHRcdChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gaXRlbUVudHJ5LmNsZWFyUmVzb3VyY2VzKClcblx0XHQpO1xuXG5cdFx0dGhpcy5jb2xsZWN0aW9ucy5mb3JFYWNoKFxuXHRcdFx0KGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiBjb2xsZWN0aW9uRW50cnkuY2xlYXJSZXNvdXJjZXMoaXNTdWJUYWJDaGFuZ2UpXG5cdFx0KTtcblxuXHRcdHRoaXMuZGVmZXJyZWRDb2xsZWN0aW9ucy5jbGVhcigpO1xuXHR9XG5cblx0dXBkYXRlU2luZ2xlSXRlbXMgKGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGNvbnZlcnNpb25NYXApIHtcblx0XHRcdGZvciAoY29uc3Qgb2xkSXRlbUlkIGluIGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdKSB7XG5cdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuaXRlbXMuZ2V0KGl0ZW1UeXBlLCBwYXJzZUludChvbGRJdGVtSWQsIDEwKSk7XG5cblx0XHRcdFx0aWYgKGl0ZW1FbnRyeSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdHRoaXMuaXRlbXMudXBkYXRlSXRlbUlkKGl0ZW1FbnRyeSwgcGFyc2VJbnQob2xkSXRlbUlkLCAxMCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIHJlc291cmNlcyB3aWxsIGJlIGNsZWFyZWQgbGF0ZXIgKGNsZWFyIGZ1bmN0aW9uKVxuXHRyZXZlcnRDaGFuZ2VzICgpOiBQcm9taXNlSW50ZXJmYWNlPHZvaWQ+IHtcblx0XHR0aGlzLml0ZW1zLmZvckVhY2goXG5cdFx0XHQoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGl0ZW1FbnRyeS5yZXNldE1vZGlmaWVkKClcblx0XHQpO1xuXG5cdFx0dGhpcy5jb2xsZWN0aW9ucy5mb3JFYWNoKFxuXHRcdFx0KGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiB0aGlzLnJlc2V0Q29sbGVjdGlvbihjb2xsZWN0aW9uRW50cnkpXG5cdFx0KTtcblxuXHRcdHRoaXMuaGFzQ2hhbmdlcyA9IGZhbHNlO1xuXG5cdFx0cmV0dXJuIHRoaXMuaXNMb2NrYWJsZSgpID9cblx0XHRcdHRoaXMubG9ja1NlcnZpY2UuZGVsZXRlTG9jayh0aGlzLnJvb3RJdGVtISkgOlxuXHRcdFx0dGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XG5cdH1cblxuXHRyZXNldENvbGxlY3Rpb24gKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KTogdm9pZCB7XG5cdFx0Ly8gcmV2ZXJ0IGNoYW5nZXMgZm9yICphbGwqIGNvbGxlY3Rpb25zLCBpdGVtcyBtaWdodCBoYXZlIGJlZW4gYWRkZWQgb24gcmVzb2x2ZVxuXHRcdGNvbGxlY3Rpb25FbnRyeS5pdGVtcyA9IGNvbGxlY3Rpb25FbnRyeS5pbml0aWFsLnNsaWNlKCk7XG5cblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5Lmhhc0l0ZW1FZGl0UmVzb3VyY2VzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBjb2xsZWN0aW9uRW50cnkuaXRlbXMpXG5cdFx0XHRcdGl0ZW1FbnRyeS5yZXNldE1vZGlmaWVkKCk7XG5cdFx0fVxuXHR9XG5cblx0ZGV0ZWN0Q2hhbmdlcyAoKTogYm9vbGVhbiB7XG5cdFx0aWYgKHRoaXMuaGFzQ2hhbmdlcylcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0aWYgKHRoaXMuaXRlbXMuc29tZSgoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGl0ZW1FbnRyeS5oYXNDaGFuZ2VzKCkpKVxuXHRcdFx0cmV0dXJuIHRoaXMuaGFzQ2hhbmdlcyA9IHRydWU7XG5cblx0XHRyZXR1cm4gdGhpcy5oYXNDaGFuZ2VzID0gdGhpcy5jb2xsZWN0aW9ucy5zb21lKChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4gdGhpcy5jb2xsZWN0aW9uSGFzQ2hhbmdlcyhjb2xsZWN0aW9uRW50cnkpKTtcblx0fVxuXG5cdHByaXZhdGUgY29sbGVjdGlvbkhhc0NoYW5nZXMgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KTogYm9vbGVhbiB7XG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5oYXNFZGl0UmVzb3VyY2VzICYmIChjb2xsZWN0aW9uRW50cnkuaGFzQWRkZWRJdGVtcygpIHx8IGNvbGxlY3Rpb25FbnRyeS5oYXNSZW1vdmVkSXRlbXMoKSkpXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnkuaGFzSXRlbUVkaXRSZXNvdXJjZXMgJiYgY29sbGVjdGlvbkVudHJ5Lmhhc1VwZGF0ZWRJdGVtcygpO1xuXHR9XG5cblx0aXNMb2NrYWJsZSAoKTogYm9vbGVhbiB7XG5cdFx0aWYgKHRoaXMucm9vdEl0ZW0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJldHVybiB0aGlzLnJvb3RJdGVtLmlzTG9ja2FibGUoKTtcblx0fVxuXG5cdHNhdmUgKFxuXHRcdGNsb3NlVGFiID0gZmFsc2UsXG5cdFx0cGFyYW1ldGVyczogQ3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCA9IHt9LFxuXHRcdGJyZWFrVXBCeVBhcmVudD86IGJvb2xlYW4sXG5cdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrPzogKGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApID0+IHZvaWRcblx0KTogUHJvbWlzZUludGVyZmFjZTxJdGVtSWRDb252ZXJzaW9uTWFwPiB7XG5cdFx0aWYgKHRoaXMuaXNTYXZpbmcpXG5cdFx0XHRyZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIucmVqZWN0KCk7XG5cblx0XHR0aGlzLmlzU2F2aW5nID0gdHJ1ZTtcblxuXHRcdHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xuXHRcdHRoaXMuZGlzYWJsZUNoYW5nZXNXYXRjaGVyKCk7XG5cblx0XHRyZXR1cm4gKHRoaXMuaXNMb2NrYWJsZSgpID8gdGhpcy5sb2NrU2VydmljZS5mZXRjaExvY2sodGhpcy5yb290SXRlbSBhcyBJdGVtRW50cnkpIDogdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCkpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmV4ZWN1dGVDYWxsYmFja0V2ZW50KHRoaXMuY2FsbGJhY2tzLm9uQmVmb3JlU2F2ZSwgY2FsbGJhY2sgPT4gY2FsbGJhY2sodGhpcyksIGNsb3NlVGFiKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlcXVlc3RQYXJhbWV0ZXJzID0gZXh0ZW5kKHt9LCB0aGlzLnRhYlJlcXVlc3RQYXJhbWV0ZXJzLCBwYXJhbWV0ZXJzKTtcblxuXHRcdFx0XHR0aGlzLnRhYlJlcXVlc3RQYXJhbWV0ZXJzID0ge307XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkuY29uc3RydWN0KCkuZXhlY3V0ZShcblx0XHRcdFx0XHR0aGlzLml0ZW1zLnRvQXJyYXkoKSxcblx0XHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25zLnRvQXJyYXkoKSxcblx0XHRcdFx0XHRyZXF1ZXN0UGFyYW1ldGVycyxcblx0XHRcdFx0XHRicmVha1VwQnlQYXJlbnQsXG5cdFx0XHRcdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0KGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuaXNMb2NrYWJsZSgpKVxuXHRcdFx0XHRcdHRoaXMubG9ja1NlcnZpY2UuY2xlYXJMb2NrKHRoaXMucm9vdEl0ZW0gYXMgSXRlbUVudHJ5KTtcblxuXHRcdFx0XHR0aGlzLmhhc0NoYW5nZXMgPSBmYWxzZTtcblxuXHRcdFx0XHRpZiAoIWNsb3NlVGFiKVxuXHRcdFx0XHRcdHRoaXMudXBkYXRlU2luZ2xlSXRlbXMoY29udmVyc2lvbk1hcCk7XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZUNhbGxiYWNrRXZlbnQoXG5cdFx0XHRcdFx0dGhpcy5jYWxsYmFja3Mub25TYXZlU3VjY2Vzcyxcblx0XHRcdFx0XHRjYWxsYmFjayA9PiBjYWxsYmFjayh0aGlzLCBjb252ZXJzaW9uTWFwKSxcblx0XHRcdFx0XHRjbG9zZVRhYlxuXHRcdFx0XHQpLnRoZW4oXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKCFjbG9zZVRhYilcblx0XHRcdFx0XHRcdFx0dGhpcy5lbmFibGVDaGFuZ2VzV2F0Y2hlcigpO1xuXG5cdFx0XHRcdFx0XHR0aGlzLmlzU2F2aW5nID0gZmFsc2U7XG5cblx0XHRcdFx0XHRcdHJldHVybiBjb252ZXJzaW9uTWFwO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS5jYXRjaCgoZXJyb3I6IGFueSkgPT4ge1xuXHRcdFx0dGhpcy5pc1NhdmluZyA9IGZhbHNlO1xuXG5cdFx0XHRyZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIucmVqZWN0KGVycm9yKTtcblx0XHR9KTtcblx0fVxuXG5cdG9uQmVmb3JlU2F2ZSAoXG5cdFx0a2V5OiBzdHJpbmcsXG5cdFx0Y2FsbGJhY2s6IChsb2NhbENhY2hlOiBMb2NhbENhY2hlKSA9PiBhbnksXG5cdFx0Y29uZGl0aW9uOiBMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24gPSBMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24uQWx3YXlzXG5cdCk6ICgpID0+IHZvaWQge1xuXHRcdGNvbnN0IGNhbGxiYWNrcyA9IHRoaXMuY2FsbGJhY2tzLm9uQmVmb3JlU2F2ZVtjb25kaXRpb25dO1xuXG5cdFx0Y2FsbGJhY2tzW2tleV0gPSBjYWxsYmFjaztcblxuXHRcdHJldHVybiAoKSA9PiBkZWxldGUgY2FsbGJhY2tzW2tleV07XG5cdH1cblxuXHRvblNhdmVTdWNjZXNzIChcblx0XHRrZXk6IHN0cmluZyxcblx0XHRjYWxsYmFjazogT25TYXZlQ2FsbGJhY2ssXG5cdFx0Y29uZGl0aW9uOiBMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24gPSBMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24uQWx3YXlzXG5cdCk6ICgpID0+IHZvaWQge1xuXHRcdGNvbnN0IGNhbGxiYWNrcyA9IHRoaXMuY2FsbGJhY2tzLm9uU2F2ZVN1Y2Nlc3NbY29uZGl0aW9uXTtcblxuXHRcdGNhbGxiYWNrc1trZXldID0gY2FsbGJhY2s7XG5cblx0XHRyZXR1cm4gKCkgPT4gZGVsZXRlIGNhbGxiYWNrc1trZXldO1xuXHR9XG5cblx0cHJpdmF0ZSBleGVjdXRlQ2FsbGJhY2tFdmVudDxUPiAoXG5cdFx0Y2FsbGJhY2tzOiBMb2NhbENhY2hlQ2FsbGJhY2tzPFQ+LFxuXHRcdGV4ZWN1dGU6IChjYWxsYmFjazogVCkgPT4gYW55LFxuXHRcdGNsb3NlVGFiOiBib29sZWFuXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8YW55PiB7XG5cdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZUNhbGxiYWNrcyhjYWxsYmFja3NbTG9jYWxDYWNoZUNhbGxiYWNrQ29uZGl0aW9uLkFsd2F5c10sIGV4ZWN1dGUpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmV4ZWN1dGVDYWxsYmFja3MoXG5cdFx0XHRcdFx0Y2FsbGJhY2tzW2Nsb3NlVGFiID8gTG9jYWxDYWNoZUNhbGxiYWNrQ29uZGl0aW9uLk9uQ2xvc2UgOiBMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24uU2tpcE9uQ2xvc2VdLFxuXHRcdFx0XHRcdGV4ZWN1dGVcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBleGVjdXRlQ2FsbGJhY2tzPFQ+IChjYWxsYmFja3M6IHtba2V5OiBzdHJpbmddOiBUfSwgZXhlY3V0ZTogKGNhbGxiYWNrOiBUKSA9PiBhbnkpIHtcblx0XHRjb25zdCByZXN1bHQ6IHtba2V5OiBzdHJpbmddOiBhbnl9ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGtleSBpbiBjYWxsYmFja3MpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJlc3VsdFtrZXldID0gZXhlY3V0ZShjYWxsYmFja3Nba2V5XSk7XG5cdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHR0aGlzLmV4Y2VwdGlvbkhhbmRsZXIoZXJyb3IpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChyZXN1bHQpO1xuXHR9XG5cblx0ZW5hYmxlQ2hhbmdlc1dhdGNoZXIgKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmNoYW5nZXNJbnRlcnZhbCAhPT0gbnVsbCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdDaGFuZ2VzIHdhdGNoZXIgYWxyZWFkeSBydW5uaW5nIScsIHRoaXMpO1xuXHRcdFx0dGhpcy5kaXNhYmxlQ2hhbmdlc1dhdGNoZXIoKTtcblx0XHR9XG5cblx0XHR0aGlzLmNoYW5nZXNJbnRlcnZhbCA9IHNldEludGVydmFsKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRpZiAoIXRoaXMuZGV0ZWN0Q2hhbmdlcygpKVxuXHRcdFx0XHRcdHJldHVybjtcblxuXHRcdFx0XHR0aGlzLmRpc2FibGVDaGFuZ2VzV2F0Y2hlcigpO1xuXG5cdFx0XHRcdGlmICh0aGlzLmlzTG9ja2FibGUoKSlcblx0XHRcdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLmZldGNoTG9jayh0aGlzLnJvb3RJdGVtIGFzIEl0ZW1FbnRyeSk7XG5cdFx0XHR9LFxuXHRcdFx0MzAwMFxuXHRcdCk7XG5cdH1cblxuXHRkaXNhYmxlQ2hhbmdlc1dhdGNoZXIgKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmNoYW5nZXNJbnRlcnZhbCA9PT0gbnVsbClcblx0XHRcdHJldHVybjtcblxuXHRcdGNsZWFySW50ZXJ2YWwodGhpcy5jaGFuZ2VzSW50ZXJ2YWwpO1xuXHRcdHRoaXMuY2hhbmdlc0ludGVydmFsID0gbnVsbDtcblx0fVxuXG5cdG9uRGVhY3RpdmF0ZUl0ZW0gKGl0ZW1FbnRyeTogSXRlbUVudHJ5KTogdm9pZCB7XG5cdFx0dGhpcy5jbGVhckl0ZW1FbnRyeShpdGVtRW50cnkpO1xuXHRcdC8vIHRoaXMuaGFzQ2hhbmdlcyA9IHRydWU7XG5cdH1cblxuXHRvbkFjdGl2YXRlSXRlbSAoaXRlbUVudHJ5OiBJdGVtRW50cnkpOiB2b2lkIHtcblx0XHR0aGlzLml0ZW1zLmFkZChpdGVtRW50cnkpO1xuXHRcdC8vIHRoaXMuaGFzQ2hhbmdlcyA9IHRydWU7XG5cdH1cbn1cbiIsImltcG9ydCB7IEtleVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgSXRlbUlkLCBJdGVtTWFwLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBjcmVhdGVQYXRoIH0gZnJvbSAnLi9VdGlsJztcblxuZXhwb3J0IHR5cGUgTG9ja1Rva2VuID0ge2lzRm9yZWlnbjogZmFsc2UsIGlkOiBudW1iZXIsIHRva2VuOiBzdHJpbmd9IHwge2lzRm9yZWlnbjogdHJ1ZSwgbWVzc2FnZTogc3RyaW5nfTtcblxuZXhwb3J0IGNsYXNzIExvY2tTZXJ2aWNlIHtcblx0bG9ja0l0ZW1zOiBJdGVtTWFwPExvY2tUb2tlbj4gPSB7fTtcblxuXHRwcm9taXNlczogSXRlbU1hcDxQcm9taXNlSW50ZXJmYWNlPExvY2tUb2tlbj4+ID0ge307XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlXG5cdCkge1xuXG5cdH1cblxuXHRwcml2YXRlIGdldFZhbHVlPFQ+IChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgbWFwOiBJdGVtTWFwPFQ+KTogdW5kZWZpbmVkIHwgVCB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cblx0XHRpZiAobWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdHJldHVybiBtYXBbaXRlbVR5cGVdW2l0ZW1FbnRyeS5pdGVtSWRdO1xuXHR9XG5cblx0cHJpdmF0ZSBzZXRWYWx1ZTxUPiAoaXRlbUVudHJ5OiBJdGVtRW50cnksIHZhbHVlOiBULCBtYXA6IEl0ZW1NYXA8VD4pOiBUIHtcblx0XHRyZXR1cm4gY3JlYXRlUGF0aChcblx0XHRcdG1hcCxcblx0XHRcdFtpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWRdLFxuXHRcdFx0W3t9LCB2YWx1ZV1cblx0XHQpO1xuXHR9XG5cblx0Z2V0TG9ja3MgKCk6IHRoaXNbJ2xvY2tJdGVtcyddIHtcblx0XHRyZXR1cm4gdGhpcy5sb2NrSXRlbXM7XG5cdH1cblxuXHRoYXNMb2NrIChsb2NrVG9rZW5JZDogSXRlbUlkKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgbG9ja0l0ZW1zID0gdGhpcy5sb2NrSXRlbXM7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGxvY2tJdGVtcykge1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gbG9ja0l0ZW1zW2l0ZW1UeXBlXSkge1xuXHRcdFx0XHRjb25zdCBsb2NrSXRlbSA9IGxvY2tJdGVtc1tpdGVtVHlwZV1baXRlbUlkXTtcblxuXHRcdFx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuXHRcdFx0XHRpZiAoIWxvY2tJdGVtLmlzRm9yZWlnbiAmJiBsb2NrSXRlbS5pZCA9PSBsb2NrVG9rZW5JZClcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvLyBzaG91bGQgYmUgZmFzdCAod2F0Y2hlZClcblx0aXNMb2NrZWQgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgbG9ja0l0ZW0gPSB0aGlzLmdldFZhbHVlKGl0ZW1FbnRyeSwgdGhpcy5sb2NrSXRlbXMpO1xuXG5cdFx0aWYgKGxvY2tJdGVtID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRyZXR1cm4gbG9ja0l0ZW0uaXNGb3JlaWduO1xuXHR9XG5cblx0Z2V0TWVzc2FnZSAoaXRlbUVudHJ5OiBJdGVtRW50cnkpOiB1bmRlZmluZWQgfCBzdHJpbmcge1xuXHRcdGNvbnN0IGxvY2tJdGVtID0gdGhpcy5nZXRWYWx1ZShpdGVtRW50cnksIHRoaXMubG9ja0l0ZW1zKTtcblxuXHRcdGlmIChsb2NrSXRlbSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdGlmICghbG9ja0l0ZW0uaXNGb3JlaWduKVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdHJldHVybiBsb2NrSXRlbS5tZXNzYWdlO1xuXHR9XG5cblx0Ly8gZG9lcyBub3QgcmVqZWN0IHdoZW4gYSBmb3JlaWduIGxvY2sgaXMgZW5jb3VudGVyZWRcblx0Ly8gaXMgYWxzbyB1c2VkIGJ5IGRlbGV0ZUxvY2tcblx0ZmV0Y2hDYWNoZWRMb2NrIChpdGVtRW50cnk6IEl0ZW1FbnRyeSk6IFByb21pc2VJbnRlcmZhY2U8dW5kZWZpbmVkIHwgTG9ja1Rva2VuPiB7XG5cdFx0Y29uc3QgbG9jayA9IHRoaXMuZ2V0VmFsdWUoaXRlbUVudHJ5LCB0aGlzLmxvY2tJdGVtcyk7XG5cblx0XHRpZiAobG9jayAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihsb2NrKTtcblxuXHRcdGNvbnN0IHByb21pc2UgPSB0aGlzLmdldFZhbHVlKGl0ZW1FbnRyeSwgdGhpcy5wcm9taXNlcyk7XG5cblx0XHRpZiAocHJvbWlzZSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHByb21pc2U7XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XG5cdH1cblxuXHRmZXRjaExvY2sgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KTogUHJvbWlzZUludGVyZmFjZTxzdHJpbmc+IHtcblx0XHRjb25zdCBlcnJvckhhbmRsZXIgPSB0aGlzLmVycm9ySGFuZGxlcjtcblxuXHRcdHJldHVybiB0aGlzLmZldGNoQ2FjaGVkTG9jayhpdGVtRW50cnkpLnRoZW4oXG5cdFx0XHRsb2NrSXRlbSA9PiB7XG5cdFx0XHRcdGlmIChsb2NrSXRlbSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdHJldHVybiBsb2NrSXRlbTtcblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZXF1ZXN0TG9jayhpdGVtRW50cnkpO1xuXHRcdFx0fSxcblx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHRsb2NrSXRlbSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NrSXRlbS5pc0ZvcmVpZ24gP1xuXHRcdFx0XHRcdGVycm9ySGFuZGxlci5yZWplY3QobG9ja0l0ZW0ubWVzc2FnZSkgOlxuXHRcdFx0XHRcdGxvY2tJdGVtLnRva2VuO1xuXHRcdFx0fSxcblx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cmVxdWVzdExvY2sgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KTogUHJvbWlzZUludGVyZmFjZTxMb2NrVG9rZW4+IHtcblx0XHRjb25zdCB7aXRlbVR5cGUsIGl0ZW1JZH0gPSBpdGVtRW50cnk7XG5cblx0XHRjb25zdCBwcm9taXNlID0gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5jcmVhdGUoXG5cdFx0XHQnTG9ja3Rva2VuJyxcblx0XHRcdHRoaXMua2V5U2VydmljZS5nZXRMb2NhbElkKCksXG5cdFx0XHR7aXRlbXR5cGU6IGl0ZW1UeXBlLCBpdGVtOiBpdGVtSWR9XG5cdFx0KS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRkZWxldGUgdGhpcy5wcm9taXNlc1tpdGVtVHlwZV1baXRlbUlkXTtcblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5zZXRWYWx1ZShcblx0XHRcdFx0XHRpdGVtRW50cnksXG5cdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hPYmplY3QoXG5cdFx0XHRcdFx0XHQnTG9ja3Rva2VuJyxcblx0XHRcdFx0XHRcdHJlc3BvbnNlLmxpbmtzLkxvY2t0b2tlblswXVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0dGhpcy5sb2NrSXRlbXNcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHRlcnJvciA9PiB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzLnByb21pc2VzW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXG5cdFx0XHRcdGlmIChlcnJvci5jb2RlID09PSAzMDEpIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5zZXRWYWx1ZShcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0aXNGb3JlaWduOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlOiBlcnJvci5tZXNzYWdlXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0dGhpcy5sb2NrSXRlbXNcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdChlcnJvcik7XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdHJldHVybiB0aGlzLnNldFZhbHVlKGl0ZW1FbnRyeSwgcHJvbWlzZSwgdGhpcy5wcm9taXNlcyk7XG5cdH1cblxuXHRkZWxldGVMb2NrIChpdGVtRW50cnk6IEl0ZW1FbnRyeSk6IFByb21pc2VJbnRlcmZhY2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLmZldGNoQ2FjaGVkTG9jayhpdGVtRW50cnkpLnRoZW4oXG5cdFx0XHRjYWNoZWRMb2NrID0+IHtcblx0XHRcdFx0aWYgKGNhY2hlZExvY2sgPT09IHVuZGVmaW5lZCkgLy8gdW5kZWZpbmVkOiBub3QgcmVxdWVzdGVkIHlldFxuXHRcdFx0XHRcdHJldHVybjtcblxuXHRcdFx0XHRpZiAoY2FjaGVkTG9jay5pc0ZvcmVpZ24pIHtcblx0XHRcdFx0XHR0aGlzLmNsZWFyTG9jayhpdGVtRW50cnkpO1xuXG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UuZGVsZXRlKCdMb2NrdG9rZW4nLCBbY2FjaGVkTG9jay5pZF0pLnRoZW4oXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5jbGVhckxvY2soaXRlbUVudHJ5KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRjbGVhckxvY2sgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgbG9ja0l0ZW1zID0gdGhpcy5sb2NrSXRlbXNbaXRlbUVudHJ5Lml0ZW1UeXBlXTtcblxuXHRcdGlmIChsb2NrSXRlbXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJldHVybiBkZWxldGUgbG9ja0l0ZW1zW2l0ZW1FbnRyeS5pdGVtSWRdO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUsIEl0ZW1DYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IEFwaVJlcXVlc3RJdGVtTWFwLCBGaWVsZE1hcCwgSXRlbUlkLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgaGFzUHJvcGVydGllcyB9IGZyb20gJy4vVXRpbCc7XG5cbmNvbnN0IEVNUFRZX0VOVFJZID0ge307XG5cbmV4cG9ydCB0eXBlIE1vZHVsZUNoYW5nZXNDb21waWxhdGlvblJlc3VsdCA9IHtcblx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRpdGVtSWQ6IEl0ZW1JZCxcblx0aXRlbXM6IEFwaVJlcXVlc3RJdGVtTWFwXG59O1xuXG5leHBvcnQgY2xhc3MgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uIHtcblx0cGFyZW50TWFwOiBhbnkgPSB7fTtcblx0ZGVzdGluYXRpb246IEFwaVJlcXVlc3RJdGVtTWFwID0ge307XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcm9vdEl0ZW1FbnRyeTogSXRlbUVudHJ5LFxuXHRcdHByaXZhdGUgc2luZ2xlSXRlbUNhY2hlOiBJdGVtQ2FjaGUsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZVxuXHQpIHtcblx0fVxuXG5cdHByb2Nlc3MgKCk6IE1vZHVsZUNoYW5nZXNDb21waWxhdGlvblJlc3VsdCB7XG5cdFx0dGhpcy5wYXJlbnRNYXAgPSB0aGlzLmNyZWF0ZVBhcmVudE1hcCh0aGlzLnNpbmdsZUl0ZW1DYWNoZSk7XG5cdFx0dGhpcy5wcm9jZXNzSXRlbXModGhpcy5yb290SXRlbUVudHJ5Lml0ZW1UeXBlLCBbdGhpcy5yb290SXRlbUVudHJ5XSwge30pO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGl0ZW1UeXBlOiB0aGlzLnJvb3RJdGVtRW50cnkuaXRlbVR5cGUsXG5cdFx0XHRpdGVtSWQ6IHRoaXMucm9vdEl0ZW1FbnRyeS5pdGVtSWQsXG5cdFx0XHRpdGVtczogdGhpcy5kZXN0aW5hdGlvblxuXHRcdH07XG5cdH1cblxuXHRwcml2YXRlIGNyZWF0ZVBhcmVudE1hcCAoaXRlbUNhY2hlOiBJdGVtQ2FjaGUpIHtcblx0XHRjb25zdCByZXN1bHQ6IHtcblx0XHRcdFtwYXJlbnRUeXBlOiBzdHJpbmddOiB7XG5cdFx0XHRcdFtwYXJlbnRJZDogbnVtYmVyXToge1xuXHRcdFx0XHRcdFtpdGVtVHlwZTogc3RyaW5nXTogSXRlbUVudHJ5W11cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gPSB7fTtcblxuXHRcdGl0ZW1DYWNoZS5mb3JFYWNoKFxuXHRcdFx0aXRlbUVudHJ5ID0+IHtcblx0XHRcdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cdFx0XHRcdGNvbnN0IHBhcmVudCA9IGl0ZW1FbnRyeS5wYXJlbnQ7XG5cblx0XHRcdFx0aWYgKHBhcmVudCA9PT0gbnVsbCkgLy8gd2UgZG9uJ3QgY2FyZSBmb3IgaXRlbXMgdGhhdCBhcmUgbm90IGxpbmtlZCB0byB0aGUgcm9vdCBpdGVtXG5cdFx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHRcdGNvbnN0IHBhcmVudFR5cGUgPSBwYXJlbnQuaXRlbVR5cGU7XG5cdFx0XHRcdGNvbnN0IHBhcmVudElkID0gcGFyZW50Lml0ZW1JZDtcblxuXHRcdFx0XHRpZiAocmVzdWx0W3BhcmVudFR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0cmVzdWx0W3BhcmVudFR5cGVdID0ge307XG5cblx0XHRcdFx0aWYgKHJlc3VsdFtwYXJlbnRUeXBlXVtwYXJlbnRJZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRyZXN1bHRbcGFyZW50VHlwZV1bcGFyZW50SWRdID0ge307XG5cblx0XHRcdFx0aWYgKHJlc3VsdFtwYXJlbnRUeXBlXVtwYXJlbnRJZF1baXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0cmVzdWx0W3BhcmVudFR5cGVdW3BhcmVudElkXVtpdGVtVHlwZV0gPSBbXTtcblxuXHRcdFx0XHRyZXN1bHRbcGFyZW50VHlwZV1bcGFyZW50SWRdW2l0ZW1UeXBlXS5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRwcml2YXRlIHByb2Nlc3NJdGVtcyAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGxpbmtBY2N1bXVsYXRvcjoge1tpdGVtVHlwZTogc3RyaW5nXTogSXRlbUlkW119KSB7XG5cdFx0aWYgKHRoaXMuZGVzdGluYXRpb25baXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHR0aGlzLmRlc3RpbmF0aW9uW2l0ZW1UeXBlXSA9IHt9O1xuXG5cdFx0aWYgKGxpbmtBY2N1bXVsYXRvcltpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdGxpbmtBY2N1bXVsYXRvcltpdGVtVHlwZV0gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xuXG5cdFx0XHQvLyBlYWNoIGl0ZW0gb25seSBoYXMgYSBzaW5nbGUgcGFyZW50LCBzbyB3ZSBjYW4gc2FmZWx5IGRvIHRoaXNcblx0XHRcdGlmICh0aGlzLmRlc3RpbmF0aW9uW2l0ZW1UeXBlXVtpdGVtSWRdICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRsaW5rQWNjdW11bGF0b3JbaXRlbVR5cGVdLnB1c2goaXRlbUlkKTtcblxuXHRcdFx0dGhpcy5kZXN0aW5hdGlvbltpdGVtVHlwZV1baXRlbUlkXSA9IHRoaXMucHJvY2Vzc0l0ZW0oaXRlbUVudHJ5KTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHByb2Nlc3NJdGVtIChpdGVtRW50cnk6IEl0ZW1FbnRyeSk6IHt2YWx1ZXM/OiBGaWVsZE1hcCwgbGlua3M/OiB7W2l0ZW1UeXBlOiBzdHJpbmddOiBJdGVtSWRbXX19IHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xuXHRcdGNvbnN0IGNoaWxkSXRlbXMgPSB0aGlzLmdldEl0ZW1zQnlQYXJlbnQoaXRlbVR5cGUsIGl0ZW1JZCk7XG5cdFx0Y29uc3QgY2hpbGRDb2xsZWN0aW9ucyA9IHRoaXMuY29sbGVjdGlvbkNhY2hlLmdldENvbGxlY3Rpb25zQnlQYXJlbnQoaXRlbVR5cGUsIGl0ZW1JZCk7XG5cdFx0Y29uc3QgdmFsdWVzID0gaXRlbUVudHJ5LmZvcm1hdFJlcXVlc3QoKTtcblx0XHRjb25zdCBsaW5rcyA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBjaGlsZFR5cGUgaW4gY2hpbGRJdGVtcylcblx0XHRcdHRoaXMucHJvY2Vzc0l0ZW1zKGNoaWxkVHlwZSwgY2hpbGRJdGVtc1tjaGlsZFR5cGVdLCBsaW5rcyk7XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiBjaGlsZENvbGxlY3Rpb25zKSB7XG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5Lm9wdGlvbnMucXVlcnkgIT09IG51bGwpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHR0aGlzLnByb2Nlc3NJdGVtcyhjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGUsIGNvbGxlY3Rpb25FbnRyeS5pdGVtcywgbGlua3MpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGhhc1ZhbHVlcyA9IGhhc1Byb3BlcnRpZXModmFsdWVzKTtcblx0XHRjb25zdCBoYXNMaW5rcyA9IGhhc1Byb3BlcnRpZXMobGlua3MpO1xuXG5cdFx0aWYgKGhhc1ZhbHVlcyAmJiBoYXNMaW5rcylcblx0XHRcdHJldHVybiB7dmFsdWVzOiB2YWx1ZXMsIGxpbmtzOiBsaW5rc307XG5cblx0XHRpZiAoaGFzVmFsdWVzKVxuXHRcdFx0cmV0dXJuIHt2YWx1ZXM6IHZhbHVlc307XG5cblx0XHRpZiAoaGFzTGlua3MpXG5cdFx0XHRyZXR1cm4ge2xpbmtzOiBsaW5rc307XG5cblx0XHRyZXR1cm4gRU1QVFlfRU5UUlk7XG5cdH1cblxuXHRwcml2YXRlIGdldEl0ZW1zQnlQYXJlbnQgKHBhcmVudFR5cGU6IEl0ZW1UeXBlLCBwYXJlbnRJZDogSXRlbUlkKSB7XG5cdFx0Y29uc3QgbWFwRW50cnkgPSB0aGlzLnBhcmVudE1hcFtwYXJlbnRUeXBlXTtcblxuXHRcdGlmIChtYXBFbnRyeSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHt9O1xuXG5cdFx0aWYgKG1hcEVudHJ5W3BhcmVudElkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHt9O1xuXG5cdFx0cmV0dXJuIG1hcEVudHJ5W3BhcmVudElkXTtcblx0fVxufVxuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XG5cbmltcG9ydCB7IEFwaUZvcm1hdHRlciB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgRW50cnlQYXJlbnROdWxsLCBGaWVsZE1hcCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IGhhc1Byb3BlcnRpZXMsIGluQXJyYXkgfSBmcm9tICcuL1V0aWwnO1xuXG5jb25zdCBNQVlCRSA9ICdtYXliZSc7XG5cbmV4cG9ydCBjbGFzcyBRdWVyeU1hdGNoZXIge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcblx0XHRwdWJsaWMgaXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHB1YmxpYyBmaWVsZHM6IEZpZWxkTWFwLFxuXHRcdHB1YmxpYyBwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCA9IG51bGxcblx0KSB7XG5cblx0fVxuXG5cdHByaXZhdGUgY29tcGFyZVZhbHVlcyAodmFsdWU6IGFueSwgcXVlcnlWYWx1ZTogYW55KTogYm9vbGVhbiB7XG5cdFx0aWYgKG1vbWVudC5pc01vbWVudChxdWVyeVZhbHVlKSlcblx0XHRcdHJldHVybiB0aGlzLmFwaUZvcm1hdHRlci5jb21wYXJlTW9tZW50T2JqZWN0cyhxdWVyeVZhbHVlLCB2YWx1ZSk7XG5cblx0XHRpZiAobW9tZW50LmlzRHVyYXRpb24ocXVlcnlWYWx1ZSkpXG5cdFx0XHRyZXR1cm4gdGhpcy5hcGlGb3JtYXR0ZXIuY29tcGFyZUR1cmF0aW9ucyhxdWVyeVZhbHVlLCB2YWx1ZSk7XG5cblx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuXHRcdHJldHVybiBxdWVyeVZhbHVlID09IHZhbHVlO1xuXHR9XG5cblx0bWF0Y2hRdWVyeSAocXVlcnk6IGFueSk6IGJvb2xlYW4gfCAnbWF5YmUnIHtcblx0XHRpZiAocXVlcnkuc2VhcmNoICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gTUFZQkU7XG5cblx0XHRpZiAocXVlcnkuY3VzdG9tICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gTUFZQkU7XG5cblx0XHQvLyBsaW5rZWRUbyBhbHNvIGNvbnRhaW5zIC5xdWVyeVxuXHRcdGlmIChxdWVyeS5saW5rZWRUbyAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXMubWF0Y2hMaW5rZWRUb1F1ZXJ5KHF1ZXJ5KTtcblxuXHRcdGlmIChxdWVyeS5xdWVyeSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIE1BWUJFO1xuXG5cdFx0aWYgKHF1ZXJ5LmNvbmRpdGlvbnMgIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLm1hdGNoQ29tcGxleFF1ZXJ5KHF1ZXJ5KTtcblxuXHRcdGlmIChxdWVyeS5rZXkgIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLm1hdGNoU2ltcGxlUXVlcnkodGhpcy5maWVsZHNbcXVlcnkua2V5XSwgcXVlcnkpO1xuXG5cdFx0aWYgKCFoYXNQcm9wZXJ0aWVzKHF1ZXJ5KSlcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0dGhyb3cgbmV3IEVycm9yKCdxdWVyeU1hdGNoZXI6IFVuc3VwcG9ydGVkIHF1ZXJ5ISBQYXJzZWQ/Jyk7XG5cdH1cblxuXHRwcml2YXRlIG1hdGNoTGlua2VkVG9RdWVyeSAocXVlcnk6IGFueSk6IGJvb2xlYW4gfCAnbWF5YmUnIHtcblx0XHRpZiAocXVlcnkucmV2ZXJzZSlcblx0XHRcdHJldHVybiBNQVlCRTtcblxuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xuXHRcdGxldCBtYXRjaDtcblxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXG5cdFx0XHRtYXRjaCA9IGZhbHNlO1xuXHRcdGVsc2UgaWYgKHF1ZXJ5LmxpbmtlZFRvICE9PSBwYXJlbnQuaXRlbVR5cGUpXG5cdFx0XHRtYXRjaCA9IGZhbHNlO1xuXHRcdGVsc2Vcblx0XHRcdG1hdGNoID0gdGhpcy5tYXRjaFNpbXBsZVF1ZXJ5KHBhcmVudC5pdGVtSWQsIHF1ZXJ5LnF1ZXJ5KTtcblxuXHRcdGlmIChtYXRjaCA9PT0gTUFZQkUpXG5cdFx0XHRyZXR1cm4gTUFZQkU7XG5cblx0XHRyZXR1cm4gcXVlcnkubm90ID8gIW1hdGNoIDogISFtYXRjaDtcblx0fVxuXG5cdHByaXZhdGUgbWF0Y2hDb21wbGV4UXVlcnkgKHF1ZXJ5OiBhbnkpOiBib29sZWFuIHwgJ21heWJlJyB7XG5cdFx0Y29uc3QgY29uZGl0aW9ucyA9IHF1ZXJ5LmNvbmRpdGlvbnM7XG5cblx0XHRsZXQgcmVzdWx0O1xuXHRcdGxldCB0ZXJtaW5hbDtcblxuXHRcdHN3aXRjaCAocXVlcnkub3BlcmF0b3IpIHtcblx0XHRcdGNhc2UgJ0FORCc6XG5cdFx0XHRcdHJlc3VsdCA9IHRydWU7XG5cdFx0XHRcdHRlcm1pbmFsID0gZmFsc2U7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnT1InOlxuXHRcdFx0XHRyZXN1bHQgPSBmYWxzZTtcblx0XHRcdFx0dGVybWluYWwgPSB0cnVlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcigncXVlcnlNYXRjaGVyOiBVbnN1cHBvcnRlZCBvcGVyYXRvcicpO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgY29uZGl0aW9uIG9mIGNvbmRpdGlvbnMpIHtcblx0XHRcdGNvbnN0IG1hdGNoID0gdGhpcy5tYXRjaFF1ZXJ5KGNvbmRpdGlvbik7XG5cblx0XHRcdGlmIChtYXRjaCA9PT0gdGVybWluYWwpXG5cdFx0XHRcdHJldHVybiB0ZXJtaW5hbDtcblxuXHRcdFx0aWYgKG1hdGNoID09PSBNQVlCRSlcblx0XHRcdFx0cmVzdWx0ID0gTUFZQkU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdCA9PT0gTUFZQkUgPyBNQVlCRSA6ICEhcmVzdWx0O1xuXHR9XG5cblx0cHJpdmF0ZSBtYXRjaFNpbXBsZVF1ZXJ5ICh2YWx1ZTogYW55LCBxdWVyeTogYW55KTogYm9vbGVhbiB8ICdtYXliZScge1xuXHRcdGNvbnN0IGtleSA9IHF1ZXJ5LmtleTtcblx0XHRsZXQgcXVlcnlWYWx1ZSA9IHF1ZXJ5LnZhbHVlO1xuXG5cdFx0aWYgKCFoYXNQcm9wZXJ0aWVzKHF1ZXJ5KSkgLy8gQ291bGQgYmUgbGlua2VkVG8gYW4gZW1wdHkgb2JqZWN0XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1JlcXVpcmVkIGZpZWxkJywga2V5LCAnbm90IGZvdW5kIGZvcicsIHRoaXMuaXRlbVR5cGUpO1xuXHRcdFx0cmV0dXJuIE1BWUJFO1xuXHRcdH1cblxuXHRcdGlmIChxdWVyeVZhbHVlID09PSAnTk9XJylcblx0XHRcdHF1ZXJ5VmFsdWUgPSBtb21lbnQoKTtcblxuXHRcdHN3aXRjaCAocXVlcnkuY29tcGFyYXRvcikge1xuXHRcdFx0Y2FzZSAnPSc6XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbXBhcmVWYWx1ZXModmFsdWUsIHF1ZXJ5VmFsdWUpO1xuXHRcdFx0Y2FzZSAnIT0nOlxuXHRcdFx0XHRyZXR1cm4gIXRoaXMuY29tcGFyZVZhbHVlcyh2YWx1ZSwgcXVlcnlWYWx1ZSk7XG5cdFx0XHRjYXNlICc8Jzpcblx0XHRcdFx0cmV0dXJuIHZhbHVlIDwgcXVlcnlWYWx1ZTtcblx0XHRcdGNhc2UgJzw9Jzpcblx0XHRcdFx0cmV0dXJuIHZhbHVlIDw9IHF1ZXJ5VmFsdWU7XG5cdFx0XHRjYXNlICc+Jzpcblx0XHRcdFx0cmV0dXJuIHZhbHVlID4gcXVlcnlWYWx1ZTtcblx0XHRcdGNhc2UgJz49Jzpcblx0XHRcdFx0cmV0dXJuIHZhbHVlID49IHF1ZXJ5VmFsdWU7XG5cdFx0XHRjYXNlICdJTic6XG5cdFx0XHRcdHJldHVybiBpbkFycmF5KHZhbHVlLCBxdWVyeVZhbHVlKTtcblx0XHRcdGNhc2UgJ05PVCBJTic6XG5cdFx0XHRcdHJldHVybiAhaW5BcnJheSh2YWx1ZSwgcXVlcnlWYWx1ZSk7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ3F1ZXJ5TWF0Y2hlcjogVW5zdXBwb3J0ZWQgY29tcGFyYXRvcjogJyArIHF1ZXJ5LmNvbXBhcmF0b3IgKyAnIGluIHF1ZXJ5ICcgKyBxdWVyeSk7XG5cdFx0fVxuXHR9XG59XG4iLCJpbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IGdldEZpcnN0UHJvcGVydHkgfSBmcm9tICcuL1V0aWwnO1xuaW1wb3J0IHsgQXBpUXVlcnksIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5lbnVtIENPTlNUQU5UUyB7XG5cdE9CSiA9IDAsXG5cdFNUUiA9IDEsXG5cdFNFUCA9ICc6J1xufVxuXG5leHBvcnQgY2xhc3MgUXVlcnlQYXJzZXIge1xuXHRxdWVyeTogQXBpUXVlcnk7XG5cdHBhcmFtZXRlcnM6IGFueTtcblxuXHRjb25zdHJ1Y3RvciAocXVlcnk6IEFwaVF1ZXJ5LCBwYXJhbWV0ZXJzPzogb2JqZWN0KSB7XG5cdFx0dGhpcy5xdWVyeSA9IHF1ZXJ5O1xuXHRcdHRoaXMucGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7XG5cdH1cblxuXHRwcml2YXRlIGNvbXBhcmVQYXJzZWRRdWVyaWVzIChhOiBbb2JqZWN0LCBzdHJpbmddLCBiOiBbb2JqZWN0LCBzdHJpbmddKSB7XG5cdFx0aWYgKGFbQ09OU1RBTlRTLlNUUl0gPT09IGJbQ09OU1RBTlRTLlNUUl0pXG5cdFx0XHRyZXR1cm4gMDtcblxuXHRcdHJldHVybiBhW0NPTlNUQU5UUy5TVFJdID4gYltDT05TVEFOVFMuU1RSXSA/IDEgOiAtMTtcblx0fVxuXG5cdHBhcnNlIChxdWVyeTogQXBpUXVlcnkgPSB0aGlzLnF1ZXJ5KTogW29iamVjdCwgc3RyaW5nXSB7XG5cdFx0aWYgKHF1ZXJ5LmxpbmtlZFRvICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlTGlua2VkVG9RdWVyeShcblx0XHRcdFx0cXVlcnkubGlua2VkVG8sXG5cdFx0XHRcdHF1ZXJ5LnF1ZXJ5LFxuXHRcdFx0XHRxdWVyeS5yZXZlcnNlLFxuXHRcdFx0XHRxdWVyeS5ub3Rcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0aWYgKHF1ZXJ5Lm5vdCAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdxdWVyeVBhcnNlcjogXCJOb3RcIiBub3Qgc3VwcG9ydGVkJyk7XG5cblx0XHRpZiAocXVlcnkuY3VzdG9tICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlQ3VzdG9tUXVlcnkoXG5cdFx0XHRcdHF1ZXJ5LmN1c3RvbSxcblx0XHRcdFx0cXVlcnkucGFyYW1ldGVyc1xuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRpZiAocXVlcnkuc2VhcmNoICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZVNlYXJjaFF1ZXJ5KHF1ZXJ5LnNlYXJjaCk7XG5cblx0XHRpZiAocXVlcnkuY29uZGl0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZUNvbXBsZXhRdWVyeShcblx0XHRcdFx0cXVlcnkuY29uZGl0aW9ucyxcblx0XHRcdFx0cXVlcnkub3BlcmF0b3Jcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0aWYgKHF1ZXJ5Lml0ZW1UeXBlICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZVN1YkZpZWxkUXVlcnkocXVlcnkua2V5LCBxdWVyeS5pdGVtVHlwZSwgcXVlcnkuZmllbGQsIHF1ZXJ5LnF1ZXJ5KTtcblxuXHRcdGlmIChxdWVyeS5rZXkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKHR5cGVvZiBxdWVyeS5xdWVyeSA9PT0gJ29iamVjdCcpXG5cdFx0XHRcdHJldHVybiB0aGlzLnBhcnNlU3ViUXVlcnkocXVlcnkua2V5LCBxdWVyeS5xdWVyeSk7XG5cblx0XHRcdHJldHVybiB0aGlzLnBhcnNlU2ltcGxlUXVlcnkoXG5cdFx0XHRcdHF1ZXJ5LmtleSxcblx0XHRcdFx0cXVlcnkudmFsdWUsXG5cdFx0XHRcdHF1ZXJ5LmNvbXBhcmF0b3Jcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Y29uc3Qga2V5ID0gZ2V0Rmlyc3RQcm9wZXJ0eShxdWVyeSk7XG5cblx0XHRpZiAoa2V5ID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIFt7fSwgJ3t9J107XG5cblx0XHRjb25zdCB2YWx1ZSA9IHF1ZXJ5W2tleV07XG5cblx0XHQvLyB0eXBlb2YgbnVsbCBpcyBhbiBvYmplY3QgOnRoaW5raW5nOlxuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlLmNvbnN0cnVjdG9yID09PSBPYmplY3QpXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZVN1YlF1ZXJ5KGtleSwgdmFsdWUpO1xuXG5cdFx0cmV0dXJuIHRoaXMucGFyc2VTaW1wbGVRdWVyeShrZXksIHZhbHVlKTtcblx0fVxuXG5cdHByaXZhdGUgcGFyc2VTdWJRdWVyeSAoa2V5OiBzdHJpbmcsIHN1YlF1ZXJ5OiBvYmplY3QpOiBbb2JqZWN0LCBzdHJpbmddIHtcblx0XHRjb25zdCBwYXJzZWRRdWVyeSA9IHRoaXMucGFyc2Uoc3ViUXVlcnkpO1xuXG5cdFx0cmV0dXJuIFtcblx0XHRcdHtrZXk6IGtleSwgcXVlcnk6IHBhcnNlZFF1ZXJ5W0NPTlNUQU5UUy5PQkpdfSxcblx0XHRcdCdbJyArICdzdWInICsgQ09OU1RBTlRTLlNFUCArIGtleSArIENPTlNUQU5UUy5TRVAgKyBwYXJzZWRRdWVyeVtDT05TVEFOVFMuU1RSXSArICddJ1xuXHRcdF07XG5cdH1cblxuXHRwcml2YXRlIHBhcnNlU3ViRmllbGRRdWVyeSAoa2V5OiBzdHJpbmcsIGl0ZW1UeXBlOiBJdGVtVHlwZSwgZmllbGQ6IHN0cmluZywgcXVlcnk6IEFwaVF1ZXJ5KTogW29iamVjdCwgc3RyaW5nXSB7XG5cdFx0Y29uc3QgcGFyc2VkUXVlcnkgPSB0aGlzLnBhcnNlKHF1ZXJ5KTtcblxuXHRcdHJldHVybiBbXG5cdFx0XHR7a2V5OiBrZXksIGl0ZW1UeXBlOiBpdGVtVHlwZSwgZmllbGQ6IGZpZWxkLCBxdWVyeTogcGFyc2VkUXVlcnlbQ09OU1RBTlRTLk9CSl19LFxuXHRcdFx0J1snICsgJ3N1YkZpZWxkJyArIENPTlNUQU5UUy5TRVAgKyBrZXkgKyBDT05TVEFOVFMuU0VQICsgaXRlbVR5cGUgKyBDT05TVEFOVFMuU0VQICsgZmllbGQgKyBDT05TVEFOVFMuU0VQICsgcGFyc2VkUXVlcnlbQ09OU1RBTlRTLlNUUl0gKyAnXSdcblx0XHRdO1xuXHR9XG5cblx0cHJpdmF0ZSBwYXJzZVNlYXJjaFF1ZXJ5ICh2YWx1ZTogYW55KTogW29iamVjdCwgc3RyaW5nXSB7XG5cdFx0dmFsdWUgPSB0aGlzLmZvcm1hdFZhbHVlKHZhbHVlKTtcblxuXHRcdHJldHVybiBbXG5cdFx0XHR7c2VhcmNoOiB2YWx1ZVtDT05TVEFOVFMuT0JKXX0sXG5cdFx0XHQnWycgKyAnc2VhcmNoJyArIENPTlNUQU5UUy5TRVAgKyB2YWx1ZVtDT05TVEFOVFMuU1RSXSArICddJ1xuXHRcdF07XG5cdH1cblxuXHRwcml2YXRlIHBhcnNlQ3VzdG9tUXVlcnkgKGN1c3RvbTogQXBpUXVlcnksIHBhcmFtZXRlcnM6IGFueSk6IFtvYmplY3QsIHN0cmluZ10ge1xuXHRcdGlmIChwYXJhbWV0ZXJzID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiBbXG5cdFx0XHRcdHtjdXN0b206IGN1c3RvbX0sXG5cdFx0XHRcdCdbJyArIGN1c3RvbSArICddJ1xuXHRcdFx0XTtcblx0XHR9XG5cblx0XHRjb25zdCBwYXJzZWRQYXJhbWV0ZXJzID0gdGhpcy5wYXJzZUN1c3RvbVBhcmFtZXRlcnMocGFyYW1ldGVycyk7XG5cblx0XHRyZXR1cm4gW1xuXHRcdFx0e2N1c3RvbTogY3VzdG9tLCBwYXJhbWV0ZXJzOiBwYXJzZWRQYXJhbWV0ZXJzW0NPTlNUQU5UUy5PQkpdfSxcblx0XHRcdCdbJyArIGN1c3RvbSArIENPTlNUQU5UUy5TRVAgKyBwYXJzZWRQYXJhbWV0ZXJzW0NPTlNUQU5UUy5TVFJdICsgJ10nXG5cdFx0XTtcblx0fVxuXG5cdHByaXZhdGUgcGFyc2VDdXN0b21QYXJhbWV0ZXJzIChwYXJhbWV0ZXJzOiBhbnkpOiBbb2JqZWN0LCBzdHJpbmddIHtcblx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocGFyYW1ldGVycykuc29ydCgpO1xuXG5cdFx0Y29uc3QgcXVlcnk6IEFwaVF1ZXJ5ID0ge307XG5cdFx0bGV0IHN0cmluZyA9ICcnO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBrZXkgPSBrZXlzW2ldO1xuXHRcdFx0Y29uc3QgdmFsdWUgPSB0aGlzLmZvcm1hdFZhbHVlKHBhcmFtZXRlcnNba2V5XSk7XG5cblx0XHRcdHF1ZXJ5W2tleV0gPSB2YWx1ZVtDT05TVEFOVFMuT0JKXTtcblxuXHRcdFx0aWYgKGkgPiAwKVxuXHRcdFx0XHRzdHJpbmcgKz0gQ09OU1RBTlRTLlNFUDtcblxuXHRcdFx0c3RyaW5nICs9IHZhbHVlW0NPTlNUQU5UUy5TVFJdO1xuXHRcdH1cblxuXHRcdHJldHVybiBbcXVlcnksIHN0cmluZ107XG5cdH1cblxuXHRwcml2YXRlIHBhcnNlU2ltcGxlUXVlcnkgKGtleTogc3RyaW5nLCB2YWx1ZTogYW55LCBjb21wYXJhdG9yPzogc3RyaW5nKTogW29iamVjdCwgc3RyaW5nXSB7XG5cdFx0dmFsdWUgPSB0aGlzLmZvcm1hdFZhbHVlKHZhbHVlKTtcblxuXHRcdGlmIChjb21wYXJhdG9yID09PSB1bmRlZmluZWQpXG5cdFx0XHRjb21wYXJhdG9yID0gQXJyYXkuaXNBcnJheSh2YWx1ZVtDT05TVEFOVFMuT0JKXSkgPyAnSU4nIDogJz0nO1xuXG5cdFx0cmV0dXJuIFtcblx0XHRcdHtrZXk6IGtleSwgdmFsdWU6IHZhbHVlW0NPTlNUQU5UUy5PQkpdLCBjb21wYXJhdG9yOiBjb21wYXJhdG9yfSxcblx0XHRcdCdbJyArIGNvbXBhcmF0b3IgKyBDT05TVEFOVFMuU0VQICsga2V5ICsgQ09OU1RBTlRTLlNFUCArIHZhbHVlW0NPTlNUQU5UUy5TVFJdICsgJ10nXG5cdFx0XTtcblx0fVxuXG5cdHByaXZhdGUgcGFyc2VMaW5rZWRUb1F1ZXJ5IChsaW5rZWRUbzogYW55LCBxdWVyeSA9IHt9LCByZXZlcnNlID0gZmFsc2UsIG5vdCA9IGZhbHNlKTogW29iamVjdCwgc3RyaW5nXSB7XG5cdFx0Y29uc3QgcGFyc2VkUXVlcnkgPSB0aGlzLnBhcnNlKHF1ZXJ5KTtcblxuXHRcdHJldHVybiBbXG5cdFx0XHR7bGlua2VkVG86IGxpbmtlZFRvLCBxdWVyeTogcGFyc2VkUXVlcnlbQ09OU1RBTlRTLk9CSl0sIHJldmVyc2U6IHJldmVyc2UsIG5vdDogbm90fSxcblx0XHRcdCdbJyArICdsaW5rZWRUbycgKyBDT05TVEFOVFMuU0VQICsgbGlua2VkVG8gKyBDT05TVEFOVFMuU0VQICsgcGFyc2VkUXVlcnlbQ09OU1RBTlRTLlNUUl0gKyBDT05TVEFOVFMuU0VQICsgcmV2ZXJzZSArIENPTlNUQU5UUy5TRVAgKyBub3QgKyAnXSdcblx0XHRdO1xuXHR9XG5cblx0cHJpdmF0ZSBwYXJzZUNvbXBsZXhRdWVyeSAoY29uZGl0aW9uczogb2JqZWN0W10sIG9wZXJhdG9yID0gJ0FORCcpOiBbb2JqZWN0LCBzdHJpbmddIHtcblx0XHRvcGVyYXRvciA9IG9wZXJhdG9yLnRvVXBwZXJDYXNlKCk7XG5cblx0XHRjb25zdCBwYXJzZWRDb25kaXRpb25zID0gdGhpcy5wYXJzZUNvbmRpdGlvbnMoY29uZGl0aW9ucyk7XG5cblx0XHRyZXR1cm4gW1xuXHRcdFx0e2NvbmRpdGlvbnM6IHBhcnNlZENvbmRpdGlvbnNbQ09OU1RBTlRTLk9CSl0sIG9wZXJhdG9yOiBvcGVyYXRvcn0sXG5cdFx0XHQnWycgKyBvcGVyYXRvciArIHBhcnNlZENvbmRpdGlvbnNbQ09OU1RBTlRTLlNUUl0gKyAnXSdcblx0XHRdO1xuXHR9XG5cblx0cHJpdmF0ZSBwYXJzZUNvbmRpdGlvbnMgKGNvbmRpdGlvbnM6IG9iamVjdFtdKTogW29iamVjdCwgc3RyaW5nXSB7XG5cdFx0bGV0IHBhcnNlZENvbmRpdGlvbnM6IEFycmF5PFtvYmplY3QsIHN0cmluZ10+ID0gW107XG5cdFx0Y29uc3QgcXVlcnk6IG9iamVjdFtdID0gW107XG5cdFx0bGV0IHN0cmluZyA9ICcnO1xuXG5cdFx0Zm9yIChjb25zdCBjb25kaXRpb24gb2YgY29uZGl0aW9ucylcblx0XHRcdHBhcnNlZENvbmRpdGlvbnMucHVzaCh0aGlzLnBhcnNlKGNvbmRpdGlvbikpO1xuXG5cdFx0cGFyc2VkQ29uZGl0aW9ucyA9IHBhcnNlZENvbmRpdGlvbnMuc29ydCgoYSwgYikgPT4gdGhpcy5jb21wYXJlUGFyc2VkUXVlcmllcyhhLCBiKSk7XG5cblx0XHRmb3IgKGNvbnN0IHBhcnNlZENvbmRpdGlvbiBvZiBwYXJzZWRDb25kaXRpb25zKSB7XG5cdFx0XHRxdWVyeS5wdXNoKHBhcnNlZENvbmRpdGlvbltDT05TVEFOVFMuT0JKXSk7XG5cdFx0XHRzdHJpbmcgKz0gcGFyc2VkQ29uZGl0aW9uW0NPTlNUQU5UUy5TVFJdO1xuXHRcdH1cblxuXHRcdHJldHVybiBbcXVlcnksIHN0cmluZ107XG5cdH1cblxuXHRwcml2YXRlIGZvcm1hdFZhbHVlPFQ+ICh2YWx1ZTogVCk6IFtULCBzdHJpbmddIHtcblx0XHRsZXQgcHJvY2Vzc2VkVmFsdWU7XG5cblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5jaGFyQXQoMCkgPT09ICcmJykge1xuXHRcdFx0Y29uc3Qga2V5ID0gdmFsdWUuc3Vic3RyaW5nKDEpO1xuXG5cdFx0XHR2YWx1ZSA9IHRoaXMucGFyYW1ldGVyc1trZXldO1xuXG5cdFx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdxdWVyeVBhcnNlcjogVW5kZWZpbmVkIHRlbXBsYXRlIHBhcmFtZXRlciBcXCcnICsga2V5ICsgJ1xcJycpO1xuXG5cdFx0XHRwcm9jZXNzZWRWYWx1ZSA9IHRoaXMucHJvY2Vzc1ZhbHVlKHZhbHVlKTtcblxuXHRcdFx0cmV0dXJuIFtwcm9jZXNzZWRWYWx1ZSwga2V5ICsgJz4nICsgdmFsdWVdO1xuXHRcdH1cblxuXHRcdHByb2Nlc3NlZFZhbHVlID0gdGhpcy5wcm9jZXNzVmFsdWUodmFsdWUpO1xuXG5cdFx0cmV0dXJuIFtwcm9jZXNzZWRWYWx1ZSwgJycgKyBwcm9jZXNzZWRWYWx1ZV07XG5cdH1cblxuXHRwcml2YXRlIHByb2Nlc3NWYWx1ZTxUPiAodmFsdWU6IFRbXSk6IFRbXTtcblx0cHJpdmF0ZSBwcm9jZXNzVmFsdWUgKHZhbHVlOiBtb21lbnQuTW9tZW50KTogbW9tZW50Lk1vbWVudDtcblx0cHJpdmF0ZSBwcm9jZXNzVmFsdWUgKHZhbHVlOiBtb21lbnQuRHVyYXRpb24pOiBtb21lbnQuRHVyYXRpb247XG5cdHByaXZhdGUgcHJvY2Vzc1ZhbHVlPFQ+ICh2YWx1ZTogVCk6IFQ7XG5cdHByaXZhdGUgcHJvY2Vzc1ZhbHVlPFQ+ICh2YWx1ZTogVCB8IFRbXSB8IG1vbWVudC5Nb21lbnQgfCBtb21lbnQuRHVyYXRpb24pIHtcblx0XHQvLyBhbGdvcml0aG0gaXMgbm90IGltcG9ydGFudCwgYXMgbG9uZyBhcyBhbGwgYXJyYXlzIGFyZSBzb3J0ZWQgdGhlIHNhbWUgd2F5XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKVxuXHRcdFx0cmV0dXJuIHZhbHVlLnNsaWNlKCkuc29ydCgpO1xuXG5cdFx0aWYgKG1vbWVudC5pc01vbWVudCh2YWx1ZSkpXG5cdFx0XHRyZXR1cm4gbW9tZW50KHZhbHVlKTtcblxuXHRcdGlmIChtb21lbnQuaXNEdXJhdGlvbih2YWx1ZSkpXG5cdFx0XHRyZXR1cm4gbW9tZW50LmR1cmF0aW9uKHZhbHVlKTtcblxuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQXBpUXVlcnksIEVudHJ5UGFyZW50TnVsbCwgSXRlbUlkIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgUXVlcnlTZXJ2aWNlIHtcblx0Y29uc3RydWN0b3IgKCkge1xuXHR9XG5cblx0YWRkQW5kQ29uZGl0aW9uIChxdWVyeTogQXBpUXVlcnksIGNvbmRpdGlvbjogQXBpUXVlcnkpOiBBcGlRdWVyeSB7XG5cdFx0aWYgKHF1ZXJ5LmNvbmRpdGlvbnMgPT09IHVuZGVmaW5lZCB8fCBxdWVyeS5vcGVyYXRvciA9PT0gJ29yJylcblx0XHRcdHJldHVybiB7Y29uZGl0aW9uczogW3F1ZXJ5LCBjb25kaXRpb25dfTtcblxuXHRcdC8vIHdlIGhhdmUgYW4gJ2FuZCcgY29uZGl0aW9uXG5cdFx0cmV0dXJuIHtjb25kaXRpb25zOiBxdWVyeS5jb25kaXRpb25zLmNvbmNhdChjb25kaXRpb24pfTtcblx0fVxuXG5cdGFkZE9yQ29uZGl0aW9uIChxdWVyeTogQXBpUXVlcnksIGNvbmRpdGlvbjogQXBpUXVlcnkpOiBBcGlRdWVyeSB7XG5cdFx0aWYgKHF1ZXJ5Lm9wZXJhdG9yID09PSAnb3InKVxuXHRcdFx0cmV0dXJuIHtjb25kaXRpb25zOiBxdWVyeS5jb25kaXRpb25zLmNvbmNhdChjb25kaXRpb24pfTtcblxuXHRcdC8vIHdlIGhhdmUgYW4gJ2FuZCcgY29uZGl0aW9uXG5cdFx0cmV0dXJuIHtjb25kaXRpb25zOiBbcXVlcnksIGNvbmRpdGlvbl0sIG9wZXJhdG9yOiAnb3InfTtcblx0fVxuXG5cdGFkZFBhcmVudENvbmRpdGlvbiAocXVlcnk6IEFwaVF1ZXJ5LCBwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCk6IEFwaVF1ZXJ5IHtcblx0XHRsZXQgbGlua2VkVG9RdWVyeTtcblxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXG5cdFx0XHRyZXR1cm4gcXVlcnk7XG5cblx0XHRsaW5rZWRUb1F1ZXJ5ID0ge2xpbmtlZFRvOiBwYXJlbnQuaXRlbVR5cGUsIHF1ZXJ5OiBwYXJlbnQuaXRlbUlkfTtcblxuXHRcdHJldHVybiBxdWVyeSA9PT0gbnVsbCA/IGxpbmtlZFRvUXVlcnkgOiB0aGlzLmFkZEFuZENvbmRpdGlvbihxdWVyeSwgbGlua2VkVG9RdWVyeSk7XG5cdH1cblxuXHRjcmVhdGVOb3RJbiAoaWRBcnJheTogSXRlbUlkW10pOiBBcGlRdWVyeSB7XG5cdFx0cmV0dXJuIHtjb21wYXJhdG9yOiAnTk9UIElOJywga2V5OiAnaWQnLCB2YWx1ZTogaWRBcnJheX07XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtblNldCwgQ29sdW1uVXRpbCB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdENvbHVtbnMgfSBmcm9tICcuLi90eXBlcyc7XG5cbnR5cGUgUmVxdWVzdENvbHVtbk1hcCA9IHtbaXRlbVR5cGU6IHN0cmluZ106IEFwaVJlcXVlc3RDb2x1bW5zfTtcblxuZXhwb3J0IGNsYXNzIFJlcXVlc3RDb2x1bW5FeHBhbnNpb24ge1xuXHRwcml2YXRlIGNvbHVtbnM6IFJlcXVlc3RDb2x1bW5NYXAgPSB7fTtcblx0cHJpdmF0ZSBjb2x1bW5TZXRJZE1hcDoge1tjb2x1bW5TZXRJZDogbnVtYmVyXTogYm9vbGVhbn0gPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXG5cdCkge1xuXHR9XG5cblx0ZXhwYW5kIChjb2x1bW5TZXQ6IENvbHVtblNldCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmNvbHVtblNldElkTWFwW2NvbHVtblNldC5pZF0pXG5cdFx0XHRyZXR1cm47XG5cblx0XHRjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sdW1uU2V0Lml0ZW1UeXBlO1xuXG5cdFx0aWYgKGNvbHVtbnNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRjb2x1bW5zW2l0ZW1UeXBlXSA9IFtdO1xuXG5cdFx0Y29sdW1uc1tpdGVtVHlwZV0gPSB0aGlzLmNvbHVtblV0aWxcblx0XHRcdC5tZXJnZVJlcXVlc3RDb2x1bW5zKGNvbHVtbnNbaXRlbVR5cGVdLCBjb2x1bW5TZXQucmVxdWVzdClcblx0XHRcdC5tZXJnZWQ7XG5cblx0XHR0aGlzLmNvbHVtblNldElkTWFwW2NvbHVtblNldC5pZF0gPSB0cnVlO1xuXHR9XG5cblx0Z2V0ICgpOiBSZXF1ZXN0Q29sdW1uTWFwIHtcblx0XHRyZXR1cm4gdGhpcy5jb2x1bW5zO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBBcGlGb3JtYXR0ZXIsIENvbGxlY3Rpb25IYW5kbGVyLCBJdGVtSGFuZGxlciB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHtcblx0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0Q29sdW1uU2V0RmFjdG9yeSxcblx0SXRlbUVudHJ5RmFjdG9yeSxcblx0UmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnlcbn0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7XG5cdEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdExvY2FsQ2FjaGVNYW5hZ2VySW50ZXJmYWNlLFxuXHRQcm9taXNlTGlicmFyeUludGVyZmFjZVxufSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7XG5cdEFwaVJlcXVlc3RDb2x1bW5zLCBBcGlSZXNwb25zZSxcblx0Q29sbGVjdGlvbk1hdGNoUmVzdWx0LFxuXHRGaWVsZE1hcCwgRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZVNvY2tldE1lc3NhZ2UsXG5cdEdyb3VwZWRFeHRlbmRlZENvbGxlY3Rpb25NYXRjaFJlc3VsdCxcblx0SXRlbUlkLCBJdGVtVHlwZSxcblx0UHJvbWlzZUludGVyZmFjZSwgUmVzcG9uc2VDb2x1bW4sIFNvY2tldE1lc3NhZ2Vcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBTb2NrZXRDb2xsZWN0aW9uTWFwID0ge1tpdGVtSWQ6IG51bWJlcl06IENvbGxlY3Rpb25NYXRjaFJlc3VsdH07XG5cbmV4cG9ydCBjbGFzcyBTb2NrZXRNZXNzYWdlSGFuZGxlciB7XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5RmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeSxcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcblx0XHRwcml2YXRlIGxvY2FsQ2FjaGVNYW5hZ2VyOiBMb2NhbENhY2hlTWFuYWdlckludGVyZmFjZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZSxcblx0XHRwcml2YXRlIHJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxuXHQpIHtcblx0fVxuXG5cdG9uTWVzc2FnZVJlY2VpdmVkIChtZXNzYWdlOiBTb2NrZXRNZXNzYWdlKTogYW55IHtcblx0XHRzd2l0Y2ggKG1lc3NhZ2UuYm9keS5ldmVudFR5cGUpIHtcblx0XHRcdGNhc2UgJ3VwZGF0ZSc6XG5cdFx0XHRcdHJldHVybiB0aGlzLmhhbmRsZVVwZGF0ZShtZXNzYWdlKTtcblx0XHRcdGNhc2UgJ2NyZWF0ZSc6XG5cdFx0XHRcdHJldHVybiB0aGlzLmhhbmRsZUNyZWF0ZShtZXNzYWdlKTtcblx0XHRcdGNhc2UgJ2RlbGV0ZSc6XG5cdFx0XHRcdHJldHVybiB0aGlzLmhhbmRsZURlbGV0ZShtZXNzYWdlKTtcblx0XHRcdGNhc2UgJ2xpbmtUbyc6XG5cdFx0XHRcdHJldHVybiB0aGlzLmhhbmRsZUxpbmtNb3ZlKC8qIG1lc3NhZ2UgKi8pO1xuXHRcdH1cblx0fVxuXG5cdGZvcm1hdE1lc3NhZ2VWYWx1ZXMgKHZhbHVlczogYW55LCBjb2x1bW5zOiBSZXNwb25zZUNvbHVtbltdKTogRmllbGRNYXAge1xuXHRcdGNvbnN0IHJlc3VsdDogRmllbGRNYXAgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gY29sdW1ucylcblx0XHRcdHJlc3VsdFtjb2x1bW5JZF0gPSB0aGlzLmFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZVZhbHVlKGNvbHVtbnNbY29sdW1uSWRdLnR5cGUsIHZhbHVlc1tjb2x1bW5JZF0pO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGNyZWF0ZUNvbGxlY3Rpb25NYXAgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbXM6IHtbaXRlbUlkOiBudW1iZXJdOiBhbnl9LCBjb2x1bW5zOiBSZXNwb25zZUNvbHVtbltdKTogU29ja2V0Q29sbGVjdGlvbk1hcCB7XG5cdFx0Y29uc3QgcmVzdWx0OiBTb2NrZXRDb2xsZWN0aW9uTWFwID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtcykge1xuXHRcdFx0Y29uc3QgaXRlbSA9IGl0ZW1zW2l0ZW1JZF07XG5cdFx0XHRjb25zdCBwYXJlbnQgPSBpdGVtLnBhcmVudCAhPT0gbnVsbCA/IGl0ZW0ucGFyZW50IDoge307XG5cblx0XHRcdHJlc3VsdFtpdGVtSWRdID0gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5lbnRyaWVzLmdldEJ5Rml0dGluZ0l0ZW0oXG5cdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHR0aGlzLmZvcm1hdE1lc3NhZ2VWYWx1ZXMoaXRlbS52YWx1ZXMsIGNvbHVtbnMpLFxuXHRcdFx0XHRwYXJlbnRcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdyb3VwQnlDb2xsZWN0aW9uSWQgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgY29sbGVjdGlvbk1hcDogU29ja2V0Q29sbGVjdGlvbk1hcCk6IEdyb3VwZWRFeHRlbmRlZENvbGxlY3Rpb25NYXRjaFJlc3VsdCB7XG5cdFx0Y29uc3QgcmVzdWx0OiBHcm91cGVkRXh0ZW5kZWRDb2xsZWN0aW9uTWF0Y2hSZXN1bHQgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGNvbGxlY3Rpb25NYXApIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25NYXRjaFJlc3VsdCA9IGNvbGxlY3Rpb25NYXBbaXRlbUlkXTtcblxuXHRcdFx0Zm9yIChjb25zdCBzdGF0dXMgaW4gY29sbGVjdGlvbk1hdGNoUmVzdWx0KSB7XG5cdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyaWVzID0gY29sbGVjdGlvbk1hdGNoUmVzdWx0W3N0YXR1cyBhcyBrZXlvZiBDb2xsZWN0aW9uTWF0Y2hSZXN1bHRdO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIGNvbGxlY3Rpb25FbnRyaWVzKSB7XG5cdFx0XHRcdFx0Y29uc3QgY29sbGVjdGlvbklkID0gY29sbGVjdGlvbkVudHJ5LmlkO1xuXG5cdFx0XHRcdFx0aWYgKHJlc3VsdFtjb2xsZWN0aW9uSWRdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdHJlc3VsdFtjb2xsZWN0aW9uSWRdID0ge1xuXHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uOiBjb2xsZWN0aW9uRW50cnksXG5cdFx0XHRcdFx0XHRcdGZpdHRpbmc6IFtdLFxuXHRcdFx0XHRcdFx0XHRub3RmaXR0aW5nOiBbXSxcblx0XHRcdFx0XHRcdFx0bWF5YmU6IFtdXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJlc3VsdFtjb2xsZWN0aW9uSWRdW3N0YXR1c10ucHVzaChcblx0XHRcdFx0XHRcdHN0YXR1cyA9PT0gJ2ZpdHRpbmcnID8gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkKSA6IGl0ZW1JZFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0UmVxdWVzdENvbHVtbnMgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgY29sbGVjdGlvbk1hcDogU29ja2V0Q29sbGVjdGlvbk1hcCkge1xuXHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KCk7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9ucyA9IGNvbGxlY3Rpb25NYXBbaXRlbUlkXTtcblx0XHRcdGNvbnN0IGZpdHRpbmdDb2xsZWN0aW9ucyA9IGNvbGxlY3Rpb25zLmZpdHRpbmc7XG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGZpdHRpbmdDb2xsZWN0aW9uIG9mIGZpdHRpbmdDb2xsZWN0aW9ucylcblx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uLmV4cGFuZChmaXR0aW5nQ29sbGVjdGlvbi5jb2x1bW5zKTtcblxuXHRcdFx0aWYgKGl0ZW1FbnRyeSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRjb2x1bW5FeHBhbnNpb24uZXhwYW5kKGl0ZW1FbnRyeS5jb2x1bW5zKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29sdW1uRXhwYW5zaW9uLmdldCgpO1xuXHR9XG5cblx0ZGVmZXJFbnRyeSAoaXRlbUVudHJ5OiBJdGVtRW50cnkpOiBJdGVtRW50cnkgfCBQcm9taXNlSW50ZXJmYWNlPEl0ZW1FbnRyeT4ge1xuXHRcdGNvbnN0IGRlZmVycmVkID0gaXRlbUVudHJ5LmRlZmVycmVkO1xuXG5cdFx0aWYgKGRlZmVycmVkID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmRlZmVyKCk7XG5cblx0XHRyZXR1cm4gZGVmZXJyZWQucHJvbWlzZS50aGVuKFxuXHRcdFx0dGhpcy5kZWZlckVudHJ5LmJpbmQodGhpcyksXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cHJvY2Vzc01lc3NhZ2UgKGJvZHk6IGFueSk6IFByb21pc2VJbnRlcmZhY2U8R3JvdXBlZEV4dGVuZGVkQ29sbGVjdGlvbk1hdGNoUmVzdWx0PiB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBib2R5Lml0ZW1UeXBlO1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25NYXAgPSB0aGlzLmNyZWF0ZUNvbGxlY3Rpb25NYXAoaXRlbVR5cGUsIGJvZHkuaXRlbXNbaXRlbVR5cGVdLCBib2R5LmNvbHVtbnNbaXRlbVR5cGVdKTtcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IHRoaXMuZ2V0UmVxdWVzdENvbHVtbnMoaXRlbVR5cGUsIGNvbGxlY3Rpb25NYXApO1xuXHRcdGNvbnN0IGRlZmVycmVkRW50cmllczogQXJyYXk8SXRlbUVudHJ5IHwgUHJvbWlzZUludGVyZmFjZTxJdGVtRW50cnk+PiA9IFtdO1xuXHRcdGNvbnN0IHJlcXVlc3RJZHM6IEl0ZW1JZFtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZFN0cmluZyBpbiBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KGl0ZW1UeXBlLCBpdGVtSWRTdHJpbmcpO1xuXHRcdFx0Y29uc3QgaXRlbUlkID0gK2l0ZW1JZFN0cmluZztcblxuXHRcdFx0aWYgKGl0ZW1FbnRyeSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGRlZmVycmVkRW50cmllcy5wdXNoKHRoaXMuZGVmZXJFbnRyeShpdGVtRW50cnkpKTtcblx0XHRcdFx0cmVxdWVzdElkcy5wdXNoKGl0ZW1JZCk7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoY29sbGVjdGlvbk1hcFtpdGVtSWRdLmZpdHRpbmcubGVuZ3RoID09PSAwKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmFkZChcblx0XHRcdFx0dGhpcy5pdGVtRW50cnlGYWN0b3J5LmNvbnN0cnVjdERlZmVycmVkKGl0ZW1UeXBlLCBpdGVtSWQsIHJlcXVlc3RDb2x1bW5zW2l0ZW1UeXBlXSwgZmFsc2UpXG5cdFx0XHQpO1xuXG5cdFx0XHRyZXF1ZXN0SWRzLnB1c2goaXRlbUlkKTtcblx0XHR9XG5cblx0XHRpZiAocmVxdWVzdElkcy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKHRoaXMuZ3JvdXBCeUNvbGxlY3Rpb25JZChpdGVtVHlwZSwgY29sbGVjdGlvbk1hcCkpOyAvLyBjb2xsZWN0aW9uTWFwIG1pZ2h0IGNvbnRhaW4gJ21heWJlJyBtYXRjaGVzXG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwoZGVmZXJyZWRFbnRyaWVzKS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShpdGVtVHlwZSwge2lkOiByZXF1ZXN0SWRzfSwgcmVxdWVzdENvbHVtbnMpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlUmVzcG9uc2UoaXRlbVR5cGUsIHJlcXVlc3RJZHMsIHJlcXVlc3RDb2x1bW5zW2l0ZW1UeXBlXSwgcmVzcG9uc2UsIGNvbGxlY3Rpb25NYXApO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRwcm9jZXNzRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZSAoYm9keTogYW55KTogUHJvbWlzZUludGVyZmFjZTx2b2lkPiB7XG5cdFx0Y29uc3QgaXRlbXMgPSBib2R5Lml0ZW1zLkZ1bmN0aW9uQ2hhbmdlc1Jlc29sdmU7XG5cdFx0Y29uc3QgZGVmZXJyZWRFbnRyaWVzOiBBcnJheTxJdGVtRW50cnkgfCBQcm9taXNlSW50ZXJmYWNlPEl0ZW1FbnRyeT4+ID0gW107XG5cdFx0Y29uc3QgcmVxdWVzdElkczogSXRlbUlkW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGl0ZW1zKSB7XG5cdFx0XHRjb25zdCBmdW5jdGlvbklkID0gaXRlbXNbaXRlbUlkXS5wYXJlbnQuaXRlbUlkO1xuXHRcdFx0Y29uc3QgZnVuY3Rpb25FbnRyeSA9IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoJ0Z1bmN0aWUnLCBmdW5jdGlvbklkKTtcblxuXHRcdFx0aWYgKGZ1bmN0aW9uRW50cnkgPT09IHVuZGVmaW5lZCB8fCBmdW5jdGlvbkVudHJ5LmNvbHVtbnMucmVzcG9uc2UuRnVuY3RpZS5uZXdjaGFuZ2VzID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRkZWZlcnJlZEVudHJpZXMucHVzaCh0aGlzLmRlZmVyRW50cnkoZnVuY3Rpb25FbnRyeSkpO1xuXHRcdFx0cmVxdWVzdElkcy5wdXNoKGZ1bmN0aW9uSWQpO1xuXHRcdH1cblxuXHRcdGlmIChyZXF1ZXN0SWRzLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChkZWZlcnJlZEVudHJpZXMpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KCdGdW5jdGllJywge2lkOiByZXF1ZXN0SWRzfSwge0Z1bmN0aWU6IFsnbmV3Y2hhbmdlcyddfSk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRjb25zdCByZXNwb25zZUlkcyA9IHJlc3BvbnNlLmxpbmtzLkZ1bmN0aWU7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgcmVzcG9uc2VJZHMpIHtcblx0XHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSA8SXRlbUVudHJ5PnRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoJ0Z1bmN0aWUnLCBpdGVtSWQpO1xuXG5cdFx0XHRcdFx0Y29uc3QgcHJldmlvdXMgPSB0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKFxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LmdldEZpZWxkcygpLFxuXHRcdFx0XHRcdFx0e30sXG5cdFx0XHRcdFx0XHRpdGVtRW50cnkuY29sdW1ucy5tYWluXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRjb25zdCByZXNwb25zZVZhbHVlID0gcmVzcG9uc2UuZmV0Y2hWYWx1ZSgnRnVuY3RpZScsIGl0ZW1JZCwgJ25ld2NoYW5nZXMnKTtcblxuXHRcdFx0XHRcdGlmIChyZXNwb25zZVZhbHVlID09PSBwcmV2aW91cy5uZXdjaGFuZ2VzKVxuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0XHRpdGVtRW50cnlcblx0XHRcdFx0XHRcdC5zZXRJbml0aWFsKHtuZXdjaGFuZ2VzOiByZXNwb25zZVZhbHVlfSwgdHJ1ZSlcblx0XHRcdFx0XHRcdC5jYWxsT25DaGFuZ2UocHJldmlvdXMpXG5cdFx0XHRcdFx0XHQucmVzb2x2ZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS5jYXRjaCh0aGlzLmVycm9ySGFuZGxlci5ub3RpZnlFcnJvcik7XG5cdH1cblxuXHRoYW5kbGVSZXNwb25zZSAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHJlcXVlc3RJZHM6IEl0ZW1JZFtdLFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyxcblx0XHRyZXNwb25zZTogQXBpUmVzcG9uc2UsXG5cdFx0Y29sbGVjdGlvbk1hcDogU29ja2V0Q29sbGVjdGlvbk1hcFxuXHQpOiBHcm91cGVkRXh0ZW5kZWRDb2xsZWN0aW9uTWF0Y2hSZXN1bHQge1xuXHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1ucyA9IHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpO1xuXHRcdGNvbnN0IGNvbHVtbkluZm8gPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKTtcblx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIG9mIHJlcXVlc3RJZHMpIHtcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IDxJdGVtRW50cnk+dGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkKTtcblx0XHRcdGNvbnN0IGlzTmV3ID0gaXRlbUVudHJ5LmluaXRpYWwgPT09IHVuZGVmaW5lZDtcblx0XHRcdGNvbnN0IGZpZWxkcyA9IHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXG5cdFx0XHRpZiAoZmllbGRzID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0aXRlbUVudHJ5LnJlamVjdCgpO1xuXG5cdFx0XHRcdGlmIChpc05ldylcblx0XHRcdFx0XHR0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuY2xlYXIoaXRlbUVudHJ5KTtcblxuXHRcdFx0XHRkZWxldGUgY29sbGVjdGlvbk1hcFtpdGVtSWRdO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgZGVyaXZlZCA9IHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBjb2x1bW5JbmZvLnJvb3QpO1xuXG5cdFx0XHRpZiAoaXNOZXcpXG5cdFx0XHRcdGl0ZW1FbnRyeS5yZXNvbHZlRGVmZXJyZWQoZmllbGRzLCBkZXJpdmVkLCBjb2x1bW5JbmZvKTtcblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRjb25zdCBleHBhbnNpb25SZXN1bHQgPSBjb2x1bW5FeHBhbnNpb24ucnVuKGl0ZW1FbnRyeS5jb2x1bW5zKTtcblx0XHRcdFx0Y29uc3QgcHJldmlvdXMgPSB0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKFxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5nZXRGaWVsZHMoKSxcblx0XHRcdFx0XHR7fSxcblx0XHRcdFx0XHRpdGVtRW50cnkuY29sdW1ucy5tYWluXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0aWYgKGV4cGFuc2lvblJlc3VsdCAhPT0gbnVsbClcblx0XHRcdFx0XHRpdGVtRW50cnkuZXhwYW5kKGZpZWxkcywgZGVyaXZlZCwgZXhwYW5zaW9uUmVzdWx0KTtcblxuXHRcdFx0XHRpdGVtRW50cnlcblx0XHRcdFx0XHQudXBkYXRlRmllbGRzKGZpZWxkcywgZGVyaXZlZCwgZmFsc2UpXG5cdFx0XHRcdFx0LmNhbGxPbkNoYW5nZShwcmV2aW91cylcblx0XHRcdFx0XHQucmVzb2x2ZSgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmdyb3VwQnlDb2xsZWN0aW9uSWQoaXRlbVR5cGUsIGNvbGxlY3Rpb25NYXApO1xuXHR9XG5cblx0cHJpdmF0ZSBpc0Z1bmN0aW9uQ2hhbmdlc1Jlc29sdmVNZXNzYWdlIChtZXNzYWdlOiBTb2NrZXRNZXNzYWdlKTogbWVzc2FnZSBpcyBGdW5jdGlvbkNoYW5nZXNSZXNvbHZlU29ja2V0TWVzc2FnZSB7XG5cdFx0cmV0dXJuIG1lc3NhZ2UuYm9keS5pdGVtVHlwZSA9PT0gJ0Z1bmN0aW9uQ2hhbmdlc1Jlc29sdmUnO1xuXHR9XG5cblx0aGFuZGxlQ3JlYXRlIChtZXNzYWdlOiBGdW5jdGlvbkNoYW5nZXNSZXNvbHZlU29ja2V0TWVzc2FnZSk6IFByb21pc2VJbnRlcmZhY2U8dm9pZD47XG5cdGhhbmRsZUNyZWF0ZSAobWVzc2FnZTogU29ja2V0TWVzc2FnZSk6IFByb21pc2VJbnRlcmZhY2U8bnVsbD47XG5cdGhhbmRsZUNyZWF0ZSAobWVzc2FnZTogU29ja2V0TWVzc2FnZSk6IGFueSB7XG5cdFx0Y29uc3QgYm9keSA9IG1lc3NhZ2UuYm9keTtcblxuXHRcdGlmICh0aGlzLmlzRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZU1lc3NhZ2UobWVzc2FnZSkpXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZShib2R5KTtcblxuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NNZXNzYWdlKGJvZHkpLnRoZW4oXG5cdFx0XHRjb2xsZWN0aW9uTWFwID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuYWRkVG9Db2xsZWN0aW9ucyhjb2xsZWN0aW9uTWFwLCB0cnVlKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLmNhdGNoKHRoaXMuZXJyb3JIYW5kbGVyLm5vdGlmeUVycm9yKTtcblx0fVxuXG5cdGhhbmRsZVVwZGF0ZSAobWVzc2FnZTogU29ja2V0TWVzc2FnZSk6IFByb21pc2VJbnRlcmZhY2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NNZXNzYWdlKG1lc3NhZ2UuYm9keSkudGhlbihcblx0XHRcdGNvbGxlY3Rpb25NYXAgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5yZW1vdmVGcm9tQW5kQWRkVG9Db2xsZWN0aW9ucyhjb2xsZWN0aW9uTWFwLCB0cnVlKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLmNhdGNoKHRoaXMuZXJyb3JIYW5kbGVyLm5vdGlmeUVycm9yKTtcblx0fVxuXG5cdGhhbmRsZURlbGV0ZSAobWVzc2FnZTogU29ja2V0TWVzc2FnZSk6IFByb21pc2VJbnRlcmZhY2U8dm9pZD4ge1xuXHRcdGNvbnN0IGJvZHkgPSBtZXNzYWdlLmJvZHk7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBib2R5Lml0ZW1UeXBlO1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGVzID0gdGhpcy5sb2NhbENhY2hlTWFuYWdlci5nZXRBbGxMb2NhbENhY2hlcygpO1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25NYXA6IHtbY29sbGVjdGlvbklkOiBudW1iZXJdOiB7Y29sbGVjdGlvbjogQ29sbGVjdGlvbkVudHJ5LCBpdGVtczogSXRlbUlkW119fSA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgYm9keS5pdGVtcykge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmVudHJpZXMuZ2V0QnlDb250YWluaW5nSXRlbShpdGVtVHlwZSwgaXRlbUlkKTtcblxuXHRcdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uIG9mIGNvbGxlY3Rpb25zKSB7XG5cdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25JZCA9IGNvbGxlY3Rpb24uaWQ7XG5cblx0XHRcdFx0aWYgKGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXSA9IHtjb2xsZWN0aW9uOiBjb2xsZWN0aW9uLCBpdGVtczogW119O1xuXG5cdFx0XHRcdGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXS5pdGVtcy5wdXNoKGl0ZW1JZCk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5jbGVhckJ5SXRlbUlkKGl0ZW1UeXBlLCBpdGVtSWQpO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGxvY2FsQ2FjaGUgb2YgbG9jYWxDYWNoZXMpXG5cdFx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMuY2xlYXJCeUl0ZW1JZChpdGVtVHlwZSwgaXRlbUlkKTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXTtcblx0XHRcdG1hcEVudHJ5LmNvbGxlY3Rpb24ucmVtb3ZlSXRlbXMobWFwRW50cnkuaXRlbXMsIG51bGwsIHRydWUpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcblx0fVxuXG5cdC8vIFRPRE8hXG5cdGhhbmRsZUxpbmtNb3ZlICgpOiBQcm9taXNlSW50ZXJmYWNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XG5cdH1cblxuXHQvKlx0aGFuZGxlTGlua01vdmUgKG1lc3NhZ2UpIHtcblx0XHRcdHByb2Nlc3NNZXNzYWdlKFxuXHRcdFx0XHRtZXNzYWdlLFxuXHRcdFx0XHRmdW5jdGlvbiAoY29sbGVjdGlvbiwgaXRlbUVudHJpZXMpIHtcblx0XHRcdFx0XHQvLyBmaXRzIGluIHRoaXMgY29sbGVjdGlvbiwgdG9kbzogZ2V0IHRoZSBvbGQgY29sbGVjdGlvbiBpdCBiZWxvbmdlZCB0b1xuXHRcdFx0XHRcdGNvbGxlY3Rpb24ubW92ZUl0ZW1zKGl0ZW1FbnRyaWVzLCBudWxsLCB0cnVlKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0ZnVuY3Rpb24gKGNvbGxlY3Rpb24sIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRcdFx0Ly8gbWF5YmUgZml0c1xuXHRcdFx0XHRcdC8vIHRvZG86IGFsc28gcmVtb3ZlIHRoZW0gZnJvbSB0aGUgb2xkIGNvbGxlY3Rpb25cblx0XHRcdFx0XHRjb2xsZWN0aW9uLmV4dGVuZChhbmd1bGFyLmlkZW50aXR5LCBmYWxzZSwgZmFsc2UpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRmdW5jdGlvbiAoY29sbGVjdGlvbiwgaWRzKSB7XG5cdFx0XHRcdFx0Ly8gbm90IGZpdHRpbmcgaW4gdGhpcyBjb2xsZWN0aW9uLCByZW1vdmUgaXQgP1xuXHRcdFx0XHRcdGNvbGxlY3Rpb24ucmVtb3ZlSXRlbXMoaWRzLCBudWxsLCBtZXNzYWdlKTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9XG5cdCovXG59XG4iLCJleHBvcnQgKiBmcm9tICcuL0FwaUZvcm1hdHRlcic7XG5leHBvcnQgKiBmcm9tICcuL0FwaVJlcXVlc3RTZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vQXBpUmVzcG9uc2VQcm9jZXNzb3InO1xuZXhwb3J0ICogZnJvbSAnLi9CYXRjaFN0YXR1cyc7XG5leHBvcnQgKiBmcm9tICcuL0NoYW5nZXNDb21waWxhdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL0NoYW5nZXNQcm9jZXNzb3InO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uQ2FjaGUnO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uRW50cnlTZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkhhbmRsZXInO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uTWF0Y2hlcic7XG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5DYWNoZSc7XG5leHBvcnQgKiBmcm9tICcuL0NvbHVtbkV4cGFuc2lvbic7XG5leHBvcnQgKiBmcm9tICcuL0NvbHVtbkhhbmRsZXInO1xuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5JbmZvJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uU2V0JztcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uU3Vic2V0Q2FjaGUnO1xuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5VdGlsJztcbmV4cG9ydCAqIGZyb20gJy4vQ3JlYXRlUmVxdWVzdCc7XG5leHBvcnQgKiBmcm9tICcuL0l0ZW1BZG1pbmlzdHJhdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vSXRlbUNhY2hlJztcbmV4cG9ydCAqIGZyb20gJy4vSXRlbUVudHJ5U2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL0l0ZW1IYW5kbGVyJztcbmV4cG9ydCAqIGZyb20gJy4vSXRlbVJlcXVlc3RTZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vS2V5U2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL0xvY2FsQ2FjaGUnO1xuZXhwb3J0ICogZnJvbSAnLi9Mb2NrU2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL01vZHVsZUNoYW5nZXNDb21waWxhdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL1F1ZXJ5TWF0Y2hlcic7XG5leHBvcnQgKiBmcm9tICcuL1F1ZXJ5UGFyc2VyJztcbmV4cG9ydCAqIGZyb20gJy4vUXVlcnlTZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vUmVxdWVzdENvbHVtbkV4cGFuc2lvbic7XG5leHBvcnQgKiBmcm9tICcuL1NvY2tldE1lc3NhZ2VIYW5kbGVyJztcbmV4cG9ydCAqIGZyb20gJy4vVXRpbCc7XG4iLCJpbXBvcnQgeyBBcGlGb3JtYXR0ZXIsIEFwaVJlc3BvbnNlUHJvY2Vzc29yIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5cbmV4cG9ydCBjbGFzcyBBcGlSZXNwb25zZVByb2Nlc3NvckZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAocHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcikge1xuXG5cdH1cblxuXHRjb25zdHJ1Y3QgKHJlc3BvbnNlOiBhbnkpOiBBcGlSZXNwb25zZVByb2Nlc3NvciB7XG5cdFx0cmV0dXJuIG5ldyBBcGlSZXNwb25zZVByb2Nlc3Nvcih0aGlzLmFwaUZvcm1hdHRlciwgcmVzcG9uc2UpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBCYXRjaFN0YXR1cyB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEl0ZW1JZCwgSXRlbVR5cGUsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBCYXRjaFN0YXR1c0ZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXG5cdCkge1xuXHR9XG5cblx0Y29uc3RydWN0PFQ+IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0Z2V0SXRlbUlkOiAoZW50cnk6IFQpID0+IEl0ZW1JZCxcblx0XHRnZXRQcm9taXNlOiAoZW50cnk6IFQpID0+IFByb21pc2VJbnRlcmZhY2U8VD5cblx0KTogQmF0Y2hTdGF0dXM8VD4ge1xuXHRcdHJldHVybiBuZXcgQmF0Y2hTdGF0dXMoXG5cdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlLFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRnZXRJdGVtSWQsXG5cdFx0XHRnZXRQcm9taXNlXG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ2hhbmdlc0NvbXBpbGF0aW9uLCBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XG5cbmltcG9ydCB7IENvbGxlY3Rpb25DYWNoZUZhY3RvcnkgfSBmcm9tICcuLyc7XG5cbmV4cG9ydCBjbGFzcyBDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlRmFjdG9yeTogQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2Vcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3QgKHNpbmdsZUl0ZW1zOiBJdGVtRW50cnlbXSwgY29sbGVjdGlvbnM6IENvbGxlY3Rpb25FbnRyeVtdKTogQ2hhbmdlc0NvbXBpbGF0aW9uIHtcblx0XHRyZXR1cm4gbmV3IENoYW5nZXNDb21waWxhdGlvbihcblx0XHRcdHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0XHRcdHRoaXMua2V5U2VydmljZSxcblx0XHRcdHNpbmdsZUl0ZW1zLFxuXHRcdFx0Y29sbGVjdGlvbnNcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQge1xuXHRBcGlGb3JtYXR0ZXIsXG5cdENoYW5nZXNQcm9jZXNzb3IsXG5cdENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdENvbGxlY3Rpb25IYW5kbGVyLFxuXHRJdGVtSGFuZGxlclxufSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7XG5cdENoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXG5cdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdENyZWF0ZVJlcXVlc3RGYWN0b3J5LFxuXHRSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxufSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNsYXNzIENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5OiBDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkVudHJ5U2VydmljZTogQ29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjcmVhdGVSZXF1ZXN0RmFjdG9yeTogQ3JlYXRlUmVxdWVzdEZhY3RvcnksXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZSxcblx0XHRwcml2YXRlIHJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxuXHQpIHtcblxuXHR9XG5cblx0Y29uc3RydWN0ICgpOiBDaGFuZ2VzUHJvY2Vzc29yIHtcblx0XHRyZXR1cm4gbmV3IENoYW5nZXNQcm9jZXNzb3IoXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHR0aGlzLmNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5jcmVhdGVSZXF1ZXN0RmFjdG9yeSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLFxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcblx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2UsXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XG5cdFx0KTtcblx0fVxuXG59XG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IFF1ZXJ5TWF0Y2hlckZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3Rvcnlcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3QgKCk6IENvbGxlY3Rpb25DYWNoZSB7XG5cdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uQ2FjaGUoXG5cdFx0XHR0aGlzLnF1ZXJ5TWF0Y2hlckZhY3Rvcnlcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQge1xuXHRDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRDb2x1bW5IYW5kbGVyLFxuXHRJdGVtRW50cnlTZXJ2aWNlLFxuXHRJdGVtSGFuZGxlcixcblx0SXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRLZXlTZXJ2aWNlLFxuXHRRdWVyeVNlcnZpY2Vcbn0gZnJvbSAnLi4vY2xhc3Nlcy8nO1xuaW1wb3J0IHsgQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSwgQ29sdW1uU2V0RmFjdG9yeSwgSXRlbUVudHJ5RmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcy8nO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBFeGNlcHRpb25IYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlTGlicmFyeUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgQ29sbGVjdGlvbkVudHJ5T3B0aW9ucywgQ29sbGVjdGlvbkVudHJ5T3B0aW9uc0ludGVyZmFjZSB9IGZyb20gJy4uL21vZGVscy8nO1xuaW1wb3J0IHsgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcy8nO1xuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkVudHJ5RmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwdWJsaWMgY29sbGVjdGlvbkVudHJ5U2VydmljZTogQ29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0XHRwdWJsaWMgY29sdW1uSGFuZGxlcjogQ29sdW1uSGFuZGxlcixcblx0XHRwdWJsaWMgY29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRwdWJsaWMgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcblx0XHRwdWJsaWMgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHVibGljIGV4Y2VwdGlvbkhhbmRsZXI6IEV4Y2VwdGlvbkhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHVibGljIGl0ZW1FbnRyeUZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3RvcnksXG5cdFx0cHVibGljIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0cHVibGljIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcblx0XHRwdWJsaWMgaXRlbVJlcXVlc3RTZXJ2aWNlOiBJdGVtUmVxdWVzdFNlcnZpY2UsXG5cdFx0cHVibGljIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXG5cdFx0cHVibGljIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZSxcblx0XHRwdWJsaWMgcXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2Vcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3QgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgb3B0aW9uczogQ29sbGVjdGlvbkVudHJ5T3B0aW9uc0ludGVyZmFjZSk6IENvbGxlY3Rpb25FbnRyeSB7XG5cdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uRW50cnkoXG5cdFx0XHR0aGlzLFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRuZXcgQ29sbGVjdGlvbkVudHJ5T3B0aW9ucyhvcHRpb25zKVxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSwgQ29sbGVjdGlvbk1hdGNoZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IFF1ZXJ5TWF0Y2hlckZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeVxuXHQpIHtcblx0fVxuXG5cdGNvbnN0cnVjdCAoY29sbGVjdGlvbkNhY2hlczogQ29sbGVjdGlvbkNhY2hlW10sIHVwZGF0ZUluaXRpYWw6IGJvb2xlYW4sIGNhbGxPbkFjdGl2YXRlOiBib29sZWFuKTogQ29sbGVjdGlvbk1hdGNoZXIge1xuXHRcdHJldHVybiBuZXcgQ29sbGVjdGlvbk1hdGNoZXIoXG5cdFx0XHR0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnksXG5cdFx0XHRjb2xsZWN0aW9uQ2FjaGVzLFxuXHRcdFx0dXBkYXRlSW5pdGlhbCxcblx0XHRcdGNhbGxPbkFjdGl2YXRlXG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgS2V5U2VydmljZSwgTG9jYWxDYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksIEl0ZW1SZXNvdXJjZUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBFeGNlcHRpb25IYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlTGlicmFyeUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHtcblx0Q29sbGVjdGlvbkVkaXRSZXNvdXJjZSxcblx0Q29sbGVjdGlvbkVudHJ5LFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zLFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlLFxuXHRDb2xsZWN0aW9uVmlld1Jlc291cmNlLCBFZGl0UmVzb3VyY2UsIExvY2FsVmlld1Jlc291cmNlLCBSZW1vdGVWaWV3UmVzb3VyY2Vcbn0gZnJvbSAnLi4vbW9kZWxzJztcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHVibGljIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHB1YmxpYyBleGNlcHRpb25IYW5kbGVyOiBFeGNlcHRpb25IYW5kbGVySW50ZXJmYWNlLFxuXHRcdHB1YmxpYyBpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdHB1YmxpYyBjaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeTogQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXG5cdFx0cHVibGljIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXG5cdFx0cHVibGljIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZVxuXHQpIHtcblxuXHR9XG5cblx0Y29uc3RydWN0IChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlICYge2VkaXRJdGVtczogdHJ1ZSwgZWRpdENvbGxlY3Rpb246IHRydWV9LFxuXHRcdGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGVcblx0KTogQ29sbGVjdGlvbkVkaXRSZXNvdXJjZTxFZGl0UmVzb3VyY2U+O1xuXG5cdGNvbnN0cnVjdCAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZSAmIHtyZW1vdGVJdGVtczogdHJ1ZSwgZWRpdENvbGxlY3Rpb246IHRydWV9LFxuXHRcdGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGVcblx0KTogQ29sbGVjdGlvbkVkaXRSZXNvdXJjZTxSZW1vdGVWaWV3UmVzb3VyY2U+O1xuXG5cdGNvbnN0cnVjdCAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0Q29sbGVjdGlvbjogdHJ1ZX0sXG5cdFx0bG9jYWxDYWNoZTogTG9jYWxDYWNoZVxuXHQpOiBDb2xsZWN0aW9uRWRpdFJlc291cmNlPExvY2FsVmlld1Jlc291cmNlPjtcblxuXHRjb25zdHJ1Y3QgKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdEl0ZW1zOiB0cnVlfSxcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlXG5cdCk6IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8RWRpdFJlc291cmNlPjtcblxuXHRjb25zdHJ1Y3QgKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UgJiB7cmVtb3RlSXRlbXM6IHRydWV9LFxuXHRcdGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGVcblx0KTogQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxSZW1vdGVWaWV3UmVzb3VyY2U+O1xuXG5cdGNvbnN0cnVjdCAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZSxcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlXG5cdCk6IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8TG9jYWxWaWV3UmVzb3VyY2U+O1xuXG5cdGNvbnN0cnVjdCAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIG9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UsIGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUpIHtcblx0XHRjb25zdCBvcHRpb25zSW5zdGFuY2UgPSBuZXcgQ29sbGVjdGlvblJlc291cmNlT3B0aW9ucyhvcHRpb25zKTtcblxuXHRcdGlmIChvcHRpb25zSW5zdGFuY2UuZWRpdEl0ZW1zKVxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5Lmhhc0l0ZW1FZGl0UmVzb3VyY2VzID0gdHJ1ZTtcblxuXHRcdGlmIChvcHRpb25zSW5zdGFuY2UuZWRpdENvbGxlY3Rpb24pIHtcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5oYXNFZGl0UmVzb3VyY2VzID0gdHJ1ZTtcblxuXHRcdFx0aWYgKG9wdGlvbnNJbnN0YW5jZS5lZGl0SXRlbXMpXG5cdFx0XHRcdHJldHVybiBuZXcgQ29sbGVjdGlvbkVkaXRSZXNvdXJjZTxFZGl0UmVzb3VyY2U+KHRoaXMsIGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9uc0luc3RhbmNlLCBsb2NhbENhY2hlKTtcblx0XHRcdGVsc2UgaWYgKG9wdGlvbnNJbnN0YW5jZS5yZW1vdGVJdGVtcylcblx0XHRcdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uRWRpdFJlc291cmNlPFJlbW90ZVZpZXdSZXNvdXJjZT4odGhpcywgY29sbGVjdGlvbkVudHJ5LCBvcHRpb25zSW5zdGFuY2UsIGxvY2FsQ2FjaGUpO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRyZXR1cm4gbmV3IENvbGxlY3Rpb25FZGl0UmVzb3VyY2U8TG9jYWxWaWV3UmVzb3VyY2U+KHRoaXMsIGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9uc0luc3RhbmNlLCBsb2NhbENhY2hlKTtcblx0XHR9XG5cblx0XHRpZiAob3B0aW9uc0luc3RhbmNlLmVkaXRJdGVtcylcblx0XHRcdHJldHVybiBuZXcgQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxFZGl0UmVzb3VyY2U+KHRoaXMsIGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9uc0luc3RhbmNlLCBsb2NhbENhY2hlKTtcblxuXHRcdGlmIChvcHRpb25zSW5zdGFuY2UucmVtb3RlSXRlbXMpXG5cdFx0XHRyZXR1cm4gbmV3IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8UmVtb3RlVmlld1Jlc291cmNlPih0aGlzLCBjb2xsZWN0aW9uRW50cnksIG9wdGlvbnNJbnN0YW5jZSwgbG9jYWxDYWNoZSk7XG5cblx0XHRyZXR1cm4gbmV3IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8TG9jYWxWaWV3UmVzb3VyY2U+KHRoaXMsIGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9uc0luc3RhbmNlLCBsb2NhbENhY2hlKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sdW1uRXhwYW5zaW9uIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDb2x1bW5JbmZvRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0Q29sdW1ucywgSXRlbVR5cGUsIFJlc3BvbnNlQ29sdW1uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbHVtbkluZm9GYWN0b3J5OiBDb2x1bW5JbmZvRmFjdG9yeVxuXHQpIHtcblxuXHR9XG5cblx0Y29uc3RydWN0IChpdGVtVHlwZTogSXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcCk6IENvbHVtbkV4cGFuc2lvbiB7XG5cdFx0cmV0dXJuIG5ldyBDb2x1bW5FeHBhbnNpb24odGhpcy5jb2x1bW5JbmZvRmFjdG9yeSwgaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5JbmZvIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBSZXNwb25zZUNvbHVtbiwgUm9vdENvbHVtbk1hcCB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIENvbHVtbkluZm9GYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKCkge31cblxuXHRjb25zdHJ1Y3QgKGFwaUNvbHVtbjogUmVzcG9uc2VDb2x1bW4sIHBhcmVudDogQ29sdW1uSW5mbyB8IG51bGwpOiBDb2x1bW5JbmZvIHtcblx0XHRyZXR1cm4gbmV3IENvbHVtbkluZm8oYXBpQ29sdW1uLCBwYXJlbnQpO1xuXHR9XG5cblx0Y29uc3RydWN0RnJvbVJvb3RNYXAgKHJvb3RDb2x1bW5NYXA6IFJvb3RDb2x1bW5NYXAsIHBhcmVudDogQ29sdW1uSW5mbyB8IG51bGwgPSBudWxsKSB7XG5cdFx0Y29uc3QgcmVzdWx0OiBDb2x1bW5JbmZvW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gcm9vdENvbHVtbk1hcCkge1xuXHRcdFx0Y29uc3QgY29sdW1uTWFwRW50cnkgPSByb290Q29sdW1uTWFwW2NvbHVtbklkXTtcblx0XHRcdGNvbnN0IGNvbHVtbkluZm8gPSB0aGlzLmNvbnN0cnVjdChjb2x1bW5NYXBFbnRyeS5hcGlDb2x1bW4sIHBhcmVudCk7XG5cdFx0XHRjb25zdCBjaGlsZENvbHVtbnMgPSB0aGlzLmNvbnN0cnVjdEZyb21Sb290TWFwKGNvbHVtbk1hcEVudHJ5LmNoaWxkcmVuLCBjb2x1bW5JbmZvKTtcblxuXHRcdFx0aWYgKGNoaWxkQ29sdW1ucy5sZW5ndGggPiAwKVxuXHRcdFx0XHRjb2x1bW5JbmZvLnNldENoaWxkcmVuKGNvbHVtbkluZm8uYXBpQ29sdW1uLml0ZW1UeXBlLCBjaGlsZENvbHVtbnMpO1xuXG5cdFx0XHRyZXN1bHQucHVzaChjb2x1bW5JbmZvKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5IYW5kbGVyLCBDb2x1bW5TZXQsIENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENvbHVtbkluZm9GYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEFwaVJlcXVlc3RDb2x1bW5zLCBJdGVtVHlwZSwgUmVzcG9uc2VDb2x1bW5NYXAgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5TZXRGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sdW1uSGFuZGxlcjogQ29sdW1uSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWwsXG5cdFx0cHJpdmF0ZSBjb2x1bW5JbmZvRmFjdG9yeTogQ29sdW1uSW5mb0ZhY3Rvcnlcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3RTdHViIChpdGVtVHlwZTogSXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucykge1xuXHRcdHJldHVybiBuZXcgQ29sdW1uU2V0KFxuXHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2x1bW5VdGlsLFxuXHRcdFx0dGhpcy5jb2x1bW5JbmZvRmFjdG9yeSxcblx0XHRcdHRoaXMsXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdHJlcXVlc3RDb2x1bW5zXG5cdFx0KTtcblx0fVxuXG5cdGNvbnN0cnVjdCAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyxcblx0XHRyZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwLFxuXHRcdGVuYWJsZUNhY2hpbmc/OiBib29sZWFuLFxuXHRcdGluY2x1ZGVJZENvbHVtbj86IGJvb2xlYW5cblx0KSB7XG5cdFx0cmV0dXJuIHRoaXMuY29uc3RydWN0U3R1YihpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMpLnJlc29sdmUocmVzcG9uc2VDb2x1bW5zLCBlbmFibGVDYWNoaW5nLCBpbmNsdWRlSWRDb2x1bW4pO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5TdWJzZXRDYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdENvbHVtbnMgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5TdWJzZXRDYWNoZUZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoKSB7fVxuXG5cdGNvbnN0cnVjdCAocmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zKTogQ29sdW1uU3Vic2V0Q2FjaGUge1xuXHRcdHJldHVybiBuZXcgQ29sdW1uU3Vic2V0Q2FjaGUocmVxdWVzdENvbHVtbnMpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUsIENvbGxlY3Rpb25IYW5kbGVyLCBDcmVhdGVDb21waWxhdGlvbiwgQ3JlYXRlUmVxdWVzdCwgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LCBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQ3JlYXRlUmVxdWVzdEZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnk6IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSByZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnlcblx0KSB7XG5cblx0fVxuXG5cdGNvbnN0cnVjdCAoXG5cdFx0Y29tcGlsYXRpb246IENyZWF0ZUNvbXBpbGF0aW9uLFxuXHRcdGxvY2FsQ29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGUsXG5cdFx0cGFyYW1ldGVyTWFwOiBDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwLFxuXHRcdGJyZWFrdXBCeVBhcmVudD86IGJvb2xlYW5cblx0KTogQ3JlYXRlUmVxdWVzdCB7XG5cdFx0cmV0dXJuIG5ldyBDcmVhdGVSZXF1ZXN0KFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcblx0XHRcdHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRcdGNvbXBpbGF0aW9uLFxuXHRcdFx0bG9jYWxDb2xsZWN0aW9uQ2FjaGUsXG5cdFx0XHRwYXJhbWV0ZXJNYXAsXG5cdFx0XHRicmVha3VwQnlQYXJlbnRcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBJdGVtQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IFF1ZXJ5TWF0Y2hlckZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuXG5leHBvcnQgY2xhc3MgSXRlbUNhY2hlRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3Rvcnlcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3QgKCk6IEl0ZW1DYWNoZSB7XG5cdFx0cmV0dXJuIG5ldyBJdGVtQ2FjaGUodGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQXBpRm9ybWF0dGVyLCBDb2x1bW5TZXQsIEl0ZW1FbnRyeVNlcnZpY2UsIEtleVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENvbHVtblNldEZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgRXhjZXB0aW9uSGFuZGxlckludGVyZmFjZSwgQXV0aEludGVyZmFjZSwgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEl0ZW1FbnRyeSwgVGVtcGxhdGUgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdENvbHVtbnMsIEVudHJ5UGFyZW50TnVsbCwgRmllbGRNYXAsIEl0ZW1JZCwgSXRlbUlkQ29udmVyc2lvbk1hcCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBJdGVtRW50cnlGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHB1YmxpYyBhdXRoSW50ZXJmYWNlOiBBdXRoSW50ZXJmYWNlLFxuXHRcdHB1YmxpYyBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcblx0XHRwdWJsaWMgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcblx0XHRwdWJsaWMgZXhjZXB0aW9uSGFuZGxlcjogRXhjZXB0aW9uSGFuZGxlckludGVyZmFjZSxcblx0XHRwdWJsaWMgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcblx0XHRwdWJsaWMga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwdWJsaWMgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlXG5cdCkge1xuXHR9XG5cblx0Y29uc3RydWN0U3R1YiAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCwgY29sdW1uU2V0U3R1YjogQ29sdW1uU2V0KTogSXRlbUVudHJ5IHtcblx0XHRyZXR1cm4gbmV3IEl0ZW1FbnRyeSh0aGlzLCBpdGVtVHlwZSwgaXRlbUlkLCBjb2x1bW5TZXRTdHViKTtcblx0fVxuXG5cdGNvbnN0cnVjdExvY2FsTGlua2VkIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUlkOiBJdGVtSWQsXG5cdFx0aW5pdGlhbDogRmllbGRNYXAsXG5cdFx0cGFyZW50OiBFbnRyeVBhcmVudE51bGwsXG5cdFx0Y29sdW1uU2V0OiBDb2x1bW5TZXQsXG5cdFx0Y29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcFxuXHQpOiBJdGVtRW50cnkge1xuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuY29uc3RydWN0U3R1YihpdGVtVHlwZSwgaXRlbUlkLCBjb2x1bW5TZXQpO1xuXG5cdFx0aXRlbUVudHJ5LnBhcmVudCA9IHBhcmVudDtcblxuXHRcdHJldHVybiBpdGVtRW50cnkuc2V0TG9jYWxGaWVsZHMoaW5pdGlhbCwgY29udmVyc2lvbk1hcCk7XG5cdH1cblxuXHRjb25zdHJ1Y3RMb2NhbCAoXG5cdFx0aXRlbUlkOiBJdGVtSWQsXG5cdFx0dGVtcGxhdGU6IFRlbXBsYXRlLFxuXHRcdG1vZGlmaWVkOiBGaWVsZE1hcCxcblx0XHRkZXJpdmVkOiBGaWVsZE1hcCxcblx0XHRwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCA9IG51bGwsXG5cdFx0Y29sdW1uU2V0OiBDb2x1bW5TZXQgPSB0ZW1wbGF0ZS5jb2x1bW5zLFxuXHRcdGNvbnZlcnNpb25NYXA/OiBJdGVtSWRDb252ZXJzaW9uTWFwXG5cdCk6IEl0ZW1FbnRyeSB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSB0ZW1wbGF0ZS5jb2x1bW5zLml0ZW1UeXBlO1xuXG5cdFx0aWYgKGNvbnZlcnNpb25NYXAgPT09IHVuZGVmaW5lZClcblx0XHRcdGNvbnZlcnNpb25NYXAgPSB0aGlzLml0ZW1FbnRyeVNlcnZpY2UuY3JlYXRlTG9jYWxDb252ZXJzaW9uTWFwKGl0ZW1UeXBlLCBpdGVtSWQsIHRydWUsIHRlbXBsYXRlLnJlc3BvbnNlKTtcblxuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuY29uc3RydWN0U3R1YihpdGVtVHlwZSwgaXRlbUlkLCBjb2x1bW5TZXQpO1xuXG5cdFx0aXRlbUVudHJ5LnBhcmVudCA9IHBhcmVudDtcblxuXHRcdHJldHVybiBpdGVtRW50cnlcblx0XHRcdC5zZXRMb2NhbEZpZWxkcyh0ZW1wbGF0ZS5maWVsZHMsIGNvbnZlcnNpb25NYXAsIHRlbXBsYXRlLmNvbHVtbnMpXG5cdFx0XHQuc2V0TW9kaWZpZWQobW9kaWZpZWQpXG5cdFx0XHQuc2V0RGVyaXZlZChkZXJpdmVkKTtcblx0fVxuXG5cdGNvbnN0cnVjdERlZmVycmVkIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUlkOiBJdGVtSWQsXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRcdGRlZmVyUmVxdWVzdDogYm9vbGVhblxuXHQpOiBJdGVtRW50cnkge1xuXHRcdGNvbnN0IGl0ZW1FbnRyeVN0dWIgPSB0aGlzLmNvbnN0cnVjdFN0dWIoXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdGl0ZW1JZCxcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3RTdHViKFxuXHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0cmVxdWVzdENvbHVtbnNcblx0XHRcdClcblx0XHQpO1xuXG5cdFx0aXRlbUVudHJ5U3R1Yi5kZWZlcihkZWZlclJlcXVlc3QpO1xuXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeVN0dWI7XG5cdH1cblxuXHRjb25zdHJ1Y3QgKFxuXHRcdGl0ZW1JZDogSXRlbUlkLFxuXHRcdGluaXRpYWw6IEZpZWxkTWFwLFxuXHRcdGRlcml2ZWQ6IEZpZWxkTWFwLFxuXHRcdGNvbHVtbkluZm86IENvbHVtblNldFxuXHQpOiBJdGVtRW50cnkge1xuXHRcdHJldHVybiB0aGlzLmNvbnN0cnVjdFN0dWIoXG5cdFx0XHRjb2x1bW5JbmZvLml0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkLCAvLyBpbml0aWFsLmlkICh3aGVuIGluaXRpYWwgaXMgbm90IGEgdGVtcGxhdGUpXG5cdFx0XHRjb2x1bW5JbmZvLFxuXHRcdCkuc2V0RmllbGRzKFxuXHRcdFx0aW5pdGlhbCwgLy8gY2FuIGFsc28gYmUgYSB0ZW1wbGF0ZVxuXHRcdFx0ZGVyaXZlZCxcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBBcGlGb3JtYXR0ZXIsIENoYW5nZXNQcm9jZXNzb3IsIExvY2tTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBFZGl0UmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlT3B0aW9ucywgTG9jYWxWaWV3UmVzb3VyY2UsIFJlbW90ZVZpZXdSZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBJdGVtT3B0aW9uc0ludGVyZmFjZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIEl0ZW1SZXNvdXJjZUZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHVibGljIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxuXHRcdHB1YmxpYyBsb2NrU2VydmljZTogTG9ja1NlcnZpY2UsXG5cdFx0cHVibGljIGNoYW5nZXNQcm9jZXNzb3I6IENoYW5nZXNQcm9jZXNzb3IsXG5cdFx0cHVibGljIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHB1YmxpYyBwcm9taXNlU2VydmljZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2Vcblx0KSB7XG5cdH1cblxuXHRnZXRDb25zdHJ1Y3RvciAob3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdDogdHJ1ZX0pOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IEVkaXRSZXNvdXJjZTtcblx0Z2V0Q29uc3RydWN0b3IgKG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlICYge3JlbW90ZTogdHJ1ZX0pOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IFJlbW90ZVZpZXdSZXNvdXJjZTtcblx0Z2V0Q29uc3RydWN0b3IgKG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlKTogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBMb2NhbFZpZXdSZXNvdXJjZTtcblx0Z2V0Q29uc3RydWN0b3IgKG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlKSB7XG5cdFx0Y29uc3Qgb3B0aW9uc0luc3RhbmNlID0gbmV3IEl0ZW1SZXNvdXJjZU9wdGlvbnMob3B0aW9ucyk7XG5cblx0XHRyZXR1cm4gKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiB7XG5cdFx0XHRpZiAob3B0aW9uc0luc3RhbmNlLmVkaXQpXG5cdFx0XHRcdHJldHVybiBuZXcgRWRpdFJlc291cmNlKHRoaXMsIGl0ZW1FbnRyeSwgb3B0aW9uc0luc3RhbmNlKTtcblxuXHRcdFx0cmV0dXJuIG9wdGlvbnNJbnN0YW5jZS5yZW1vdGUgP1xuXHRcdFx0XHRuZXcgUmVtb3RlVmlld1Jlc291cmNlKGl0ZW1FbnRyeSwgb3B0aW9uc0luc3RhbmNlKSA6XG5cdFx0XHRcdG5ldyBMb2NhbFZpZXdSZXNvdXJjZShpdGVtRW50cnksIG9wdGlvbnNJbnN0YW5jZSk7XG5cdFx0fTtcblx0fVxuXG5cdGNvbnN0cnVjdCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlICYge2VkaXQ6IHRydWV9LCBpc05ldz86IGJvb2xlYW4pOiBFZGl0UmVzb3VyY2U7XG5cdGNvbnN0cnVjdCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlICYge3JlbW90ZTogdHJ1ZX0sIGlzTmV3PzogYm9vbGVhbik6IExvY2FsVmlld1Jlc291cmNlO1xuXHRjb25zdHJ1Y3QgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSwgaXNOZXc/OiBib29sZWFuKTogUmVtb3RlVmlld1Jlc291cmNlO1xuXHRjb25zdHJ1Y3QgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSwgaXNOZXc/OiBib29sZWFuKSB7XG5cdFx0Y29uc3Qgb3B0aW9uc0luc3RhbmNlID0gbmV3IEl0ZW1SZXNvdXJjZU9wdGlvbnMob3B0aW9ucyk7XG5cblx0XHRpZiAob3B0aW9ucy5lZGl0KVxuXHRcdFx0cmV0dXJuIG5ldyBFZGl0UmVzb3VyY2UodGhpcywgaXRlbUVudHJ5LCBvcHRpb25zSW5zdGFuY2UsIGlzTmV3KTtcblxuXHRcdHJldHVybiBvcHRpb25zSW5zdGFuY2UucmVtb3RlID9cblx0XHRcdG5ldyBSZW1vdGVWaWV3UmVzb3VyY2UoaXRlbUVudHJ5LCBvcHRpb25zSW5zdGFuY2UsIGlzTmV3KSA6XG5cdFx0XHRuZXcgTG9jYWxWaWV3UmVzb3VyY2UoaXRlbUVudHJ5LCBvcHRpb25zSW5zdGFuY2UsIGlzTmV3KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgTG9jYWxDYWNoZSwgTG9ja1NlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7XG5cdENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRJdGVtQ2FjaGVGYWN0b3J5LFxuXHRJdGVtUmVzb3VyY2VGYWN0b3J5XG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBFeGNlcHRpb25IYW5kbGVySW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9FeGNlcHRpb25IYW5kbGVySW50ZXJmYWNlJztcblxuZXhwb3J0IGNsYXNzIExvY2FsQ2FjaGVGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnk6IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlRmFjdG9yeTogQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnk6IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGV4Y2VwdGlvbkhhbmRsZXI6IEV4Y2VwdGlvbkhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBpdGVtQ2FjaGVGYWN0b3J5OiBJdGVtQ2FjaGVGYWN0b3J5LFxuXHRcdHByaXZhdGUgaXRlbVJlc291cmNlRmFjdG9yeTogSXRlbVJlc291cmNlRmFjdG9yeSxcblx0XHRwcml2YXRlIGxvY2tTZXJ2aWNlOiBMb2NrU2VydmljZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZVxuXHQpIHtcblxuXHR9XG5cblx0Y29uc3RydWN0IChpZD86IHN0cmluZyk6IExvY2FsQ2FjaGUge1xuXHRcdHJldHVybiBuZXcgTG9jYWxDYWNoZShcblx0XHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlcixcblx0XHRcdHRoaXMuZXhjZXB0aW9uSGFuZGxlcixcblx0XHRcdHRoaXMuaXRlbUNhY2hlRmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSxcblx0XHRcdHRoaXMubG9ja1NlcnZpY2UsXG5cdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlLFxuXHRcdFx0aWRcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUsIEl0ZW1DYWNoZSwgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuXG5leHBvcnQgY2xhc3MgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSB7XG5cdGNvbnN0cnVjdCAocm9vdEl0ZW06IEl0ZW1FbnRyeSwgc2luZ2xlSXRlbUNhY2hlOiBJdGVtQ2FjaGUsIGNvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlKTogTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uIHtcblx0XHRyZXR1cm4gbmV3IE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbihyb290SXRlbSwgc2luZ2xlSXRlbUNhY2hlLCBjb2xsZWN0aW9uQ2FjaGUpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBBcGlGb3JtYXR0ZXIsIFF1ZXJ5TWF0Y2hlciB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgRW50cnlQYXJlbnROdWxsLCBGaWVsZE1hcCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBRdWVyeU1hdGNoZXJGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXJcblx0KSB7XG5cblx0fVxuXG5cdGNvbnN0cnVjdCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBmaWVsZHM6IEZpZWxkTWFwLCBwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCk6IFF1ZXJ5TWF0Y2hlciB7XG5cdFx0cmV0dXJuIG5ldyBRdWVyeU1hdGNoZXIoXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0ZmllbGRzLFxuXHRcdFx0cGFyZW50XG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgUXVlcnlQYXJzZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEFwaVF1ZXJ5IH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgUXVlcnlQYXJzZXJGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKCkge1xuXHR9XG5cblx0Y29uc3RydWN0IChxdWVyeTogQXBpUXVlcnksIHBhcmFtZXRlcnM/OiBhbnkpOiBRdWVyeVBhcnNlciB7XG5cdFx0cmV0dXJuIG5ldyBRdWVyeVBhcnNlcihxdWVyeSwgcGFyYW1ldGVycyk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtblV0aWwsIFJlcXVlc3RDb2x1bW5FeHBhbnNpb24gfSBmcm9tICcuLi9jbGFzc2VzJztcblxuZXhwb3J0IGNsYXNzIFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxuXHQpIHtcblx0fVxuXG5cdGNvbnN0cnVjdCAoKTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbiB7XG5cdFx0cmV0dXJuIG5ldyBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uKFxuXHRcdFx0dGhpcy5jb2x1bW5VdGlsXG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sdW1uVXRpbCB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQ29sdW1uU2V0RmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBBcGlSZXNwb25zZSwgSXRlbVR5cGUsIFJlc3BvbnNlQ29sdW1uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHB1YmxpYyBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxuXHRcdHB1YmxpYyBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXG5cdCkge31cblxuXHRjb25zdHJ1Y3QgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcmVzcG9uc2U6IEFwaVJlc3BvbnNlLCBhZGRpdGlvbmFsQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXApOiBUZW1wbGF0ZSB7XG5cdFx0cmV0dXJuIG5ldyBUZW1wbGF0ZSh0aGlzLCBpdGVtVHlwZSwgcmVzcG9uc2UsIGFkZGl0aW9uYWxDb2x1bW5zKTtcblx0fVxufVxuIiwiZXhwb3J0ICogZnJvbSAnLi9BcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9CYXRjaFN0YXR1c0ZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9DaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uQ2FjaGVGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkVudHJ5RmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5FeHBhbnNpb25GYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uSW5mb0ZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5TZXRGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uU3Vic2V0Q2FjaGVGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vQ3JlYXRlUmVxdWVzdEZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9JdGVtQ2FjaGVGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vSXRlbUVudHJ5RmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0l0ZW1SZXNvdXJjZUZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9Mb2NhbENhY2hlRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL01vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9RdWVyeU1hdGNoZXJGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vUXVlcnlQYXJzZXJGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9UZW1wbGF0ZUZhY3RvcnknO1xuIiwiaW1wb3J0IHtcblx0QXBpRm9ybWF0dGVyLFxuXHRBcGlSZXF1ZXN0U2VydmljZSxcblx0Q29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0Q29sbGVjdGlvbkhhbmRsZXIsXG5cdENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UsXG5cdENvbHVtbkNhY2hlLFxuXHRDb2x1bW5IYW5kbGVyLFxuXHRDb2x1bW5VdGlsLFxuXHRJdGVtQWRtaW5pc3RyYXRvcixcblx0SXRlbUVudHJ5U2VydmljZSxcblx0SXRlbUhhbmRsZXIsXG5cdEl0ZW1SZXF1ZXN0U2VydmljZSxcblx0S2V5U2VydmljZSxcblx0TG9ja1NlcnZpY2UsXG5cdFF1ZXJ5U2VydmljZSxcblx0U29ja2V0TWVzc2FnZUhhbmRsZXJcbn0gZnJvbSAnLi9jbGFzc2VzJztcbmltcG9ydCB7XG5cdEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSxcblx0QmF0Y2hTdGF0dXNGYWN0b3J5LFxuXHRDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxuXHRDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcblx0Q29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0Q29sbGVjdGlvbkVudHJ5RmFjdG9yeSxcblx0Q29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRDb2x1bW5JbmZvRmFjdG9yeSxcblx0Q29sdW1uU2V0RmFjdG9yeSxcblx0Q29sdW1uU3Vic2V0Q2FjaGVGYWN0b3J5LFxuXHRDcmVhdGVSZXF1ZXN0RmFjdG9yeSxcblx0SXRlbUNhY2hlRmFjdG9yeSxcblx0SXRlbUVudHJ5RmFjdG9yeSxcblx0SXRlbVJlc291cmNlRmFjdG9yeSxcblx0TG9jYWxDYWNoZUZhY3RvcnksXG5cdE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXG5cdFF1ZXJ5TWF0Y2hlckZhY3RvcnksXG5cdFF1ZXJ5UGFyc2VyRmFjdG9yeSxcblx0UmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksIFRlbXBsYXRlRmFjdG9yeVxufSBmcm9tICcuL2ZhY3Rvcmllcyc7XG5pbXBvcnQge1xuXHRBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0QXV0aEludGVyZmFjZSxcblx0RXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRFeGNlcHRpb25IYW5kbGVySW50ZXJmYWNlLFxuXHRMb2NhbENhY2hlTWFuYWdlckludGVyZmFjZSxcblx0UHJvbWlzZUxpYnJhcnlJbnRlcmZhY2Vcbn0gZnJvbSAnLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNsYXNzIFJtQ29yZSB7XG5cdHZlcnNpb246IHN0cmluZztcblx0bm9vcCA9IG5vb3A7XG5cblx0YXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXI7XG5cdGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZTtcblx0YXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5OiBBcGlSZXNwb25zZVByb2Nlc3NvckZhY3Rvcnk7XG5cdGJhdGNoU3RhdHVzRmFjdG9yeTogQmF0Y2hTdGF0dXNGYWN0b3J5O1xuXHRjaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5OiBDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5O1xuXHRjaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeTogQ2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnk7XG5cdGNvbGxlY3Rpb25DYWNoZUZhY3Rvcnk6IENvbGxlY3Rpb25DYWNoZUZhY3Rvcnk7XG5cdGNvbGxlY3Rpb25FbnRyeUZhY3Rvcnk6IENvbGxlY3Rpb25FbnRyeUZhY3Rvcnk7XG5cdGNvbGxlY3Rpb25FbnRyeVNlcnZpY2U6IENvbGxlY3Rpb25FbnRyeVNlcnZpY2U7XG5cdGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcjtcblx0Y29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5OiBDb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnk7XG5cdGNvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnk6IENvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnk7XG5cdGNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U6IENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U7XG5cdGNvbHVtbkNhY2hlOiBDb2x1bW5DYWNoZTtcblx0Y29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeTtcblx0Y29sdW1uSGFuZGxlcjogQ29sdW1uSGFuZGxlcjtcblx0Y29sdW1uSW5mb0ZhY3Rvcnk6IENvbHVtbkluZm9GYWN0b3J5O1xuXHRjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5O1xuXHRjb2x1bW5TdWJzZXRDYWNoZUZhY3Rvcnk6IENvbHVtblN1YnNldENhY2hlRmFjdG9yeTtcblx0Y29sdW1uVXRpbDogQ29sdW1uVXRpbDtcblx0Y3JlYXRlUmVxdWVzdEZhY3Rvcnk6IENyZWF0ZVJlcXVlc3RGYWN0b3J5O1xuXHRpdGVtQWRtaW5pc3RyYXRvcjogSXRlbUFkbWluaXN0cmF0b3I7XG5cdGl0ZW1DYWNoZUZhY3Rvcnk6IEl0ZW1DYWNoZUZhY3Rvcnk7XG5cdGl0ZW1FbnRyeUZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3Rvcnk7XG5cdGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2U7XG5cdGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcjtcblx0aXRlbVJlcXVlc3RTZXJ2aWNlOiBJdGVtUmVxdWVzdFNlcnZpY2U7XG5cdGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3Rvcnk7XG5cdGtleVNlcnZpY2U6IEtleVNlcnZpY2U7XG5cdGxvY2FsQ2FjaGVGYWN0b3J5OiBMb2NhbENhY2hlRmFjdG9yeTtcblx0bG9ja1NlcnZpY2U6IExvY2tTZXJ2aWNlO1xuXHRtb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5OiBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5O1xuXHRxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5O1xuXHRxdWVyeVBhcnNlckZhY3Rvcnk6IFF1ZXJ5UGFyc2VyRmFjdG9yeTtcblx0cXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2U7XG5cdHJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTtcblx0c29ja2V0TWVzc2FnZUhhbmRsZXI6IFNvY2tldE1lc3NhZ2VIYW5kbGVyO1xuXHR0ZW1wbGF0ZUZhY3Rvcnk6IFRlbXBsYXRlRmFjdG9yeTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0YXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdGF1dGhJbnRlcmZhY2U6IEF1dGhJbnRlcmZhY2UsXG5cdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0ZXhjZXB0aW9uSGFuZGxlckludGVyZmFjZTogRXhjZXB0aW9uSGFuZGxlckludGVyZmFjZSxcblx0XHRsb2NhbENhY2hlTWFuYWdlcjogTG9jYWxDYWNoZU1hbmFnZXJJbnRlcmZhY2UsXG5cdFx0cHJvbWlzZUxpYnJhcnlJbnRlcmZhY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlXG5cdCkge1xuXHRcdHRoaXMudmVyc2lvbiA9ICcxLjYuMS0zJztcblxuXHRcdHRoaXMuYXBpRm9ybWF0dGVyID0gbmV3IEFwaUZvcm1hdHRlcigpO1xuXHRcdHRoaXMua2V5U2VydmljZSA9IG5ldyBLZXlTZXJ2aWNlKCk7XG5cdFx0dGhpcy5xdWVyeVNlcnZpY2UgPSBuZXcgUXVlcnlTZXJ2aWNlKCk7XG5cdFx0dGhpcy5jb2x1bW5VdGlsID0gbmV3IENvbHVtblV0aWwoKTtcblxuXHRcdHRoaXMuYXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5ID0gbmV3IEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSh0aGlzLmFwaUZvcm1hdHRlcik7XG5cblx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlID0gbmV3IEFwaVJlcXVlc3RTZXJ2aWNlKGFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCB0aGlzLmFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSk7XG5cblx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UgPSBuZXcgSXRlbUVudHJ5U2VydmljZShhdXRoSW50ZXJmYWNlLCB0aGlzLmtleVNlcnZpY2UpO1xuXG5cdFx0dGhpcy5sb2NrU2VydmljZSA9IG5ldyBMb2NrU2VydmljZShcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHRwcm9taXNlTGlicmFyeUludGVyZmFjZVxuXHRcdCk7XG5cdFx0dGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5ID0gbmV3IFF1ZXJ5TWF0Y2hlckZhY3RvcnkodGhpcy5hcGlGb3JtYXR0ZXIpO1xuXHRcdHRoaXMuaXRlbUNhY2hlRmFjdG9yeSA9IG5ldyBJdGVtQ2FjaGVGYWN0b3J5KHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeSk7XG5cdFx0dGhpcy5iYXRjaFN0YXR1c0ZhY3RvcnkgPSBuZXcgQmF0Y2hTdGF0dXNGYWN0b3J5KHByb21pc2VMaWJyYXJ5SW50ZXJmYWNlKTtcblxuXHRcdHRoaXMuY29sdW1uQ2FjaGUgPSBuZXcgQ29sdW1uQ2FjaGUodGhpcy5jb2x1bW5VdGlsKTtcblx0XHR0aGlzLmNvbHVtbkhhbmRsZXIgPSBuZXcgQ29sdW1uSGFuZGxlcihcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHRwcm9taXNlTGlicmFyeUludGVyZmFjZSxcblx0XHRcdHRoaXMuY29sdW1uQ2FjaGUsXG5cdFx0XHR0aGlzLmNvbHVtblV0aWxcblx0XHQpO1xuXG5cdFx0dGhpcy5jb2x1bW5JbmZvRmFjdG9yeSA9IG5ldyBDb2x1bW5JbmZvRmFjdG9yeSgpO1xuXHRcdHRoaXMuY29sdW1uU3Vic2V0Q2FjaGVGYWN0b3J5ID0gbmV3IENvbHVtblN1YnNldENhY2hlRmFjdG9yeSgpO1xuXHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSA9IG5ldyBDb2x1bW5FeHBhbnNpb25GYWN0b3J5KHRoaXMuY29sdW1uSW5mb0ZhY3RvcnkpO1xuXHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSA9IG5ldyBDb2x1bW5TZXRGYWN0b3J5KHRoaXMuY29sdW1uSGFuZGxlciwgdGhpcy5jb2x1bW5VdGlsLCB0aGlzLmNvbHVtbkluZm9GYWN0b3J5KTtcblxuXHRcdHRoaXMudGVtcGxhdGVGYWN0b3J5ID0gbmV3IFRlbXBsYXRlRmFjdG9yeSh0aGlzLmNvbHVtblNldEZhY3RvcnksIHRoaXMuY29sdW1uVXRpbCk7XG5cblx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnkgPSBuZXcgSXRlbUVudHJ5RmFjdG9yeShcblx0XHRcdGF1dGhJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcblx0XHRcdGV4Y2VwdGlvbkhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHRwcm9taXNlTGlicmFyeUludGVyZmFjZVxuXHRcdCk7XG5cdFx0dGhpcy5pdGVtSGFuZGxlciA9IG5ldyBJdGVtSGFuZGxlcihcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcblx0XHRcdHRoaXMuYmF0Y2hTdGF0dXNGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5TdWJzZXRDYWNoZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbHVtblV0aWwsXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLml0ZW1DYWNoZUZhY3RvcnksXG5cdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnksXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHRwcm9taXNlTGlicmFyeUludGVyZmFjZSxcblx0XHRcdHRoaXMudGVtcGxhdGVGYWN0b3J5XG5cdFx0KTtcblx0XHR0aGlzLml0ZW1SZXF1ZXN0U2VydmljZSA9IG5ldyBJdGVtUmVxdWVzdFNlcnZpY2UodGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnksXG5cdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnksXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZSxcblx0XHRcdHByb21pc2VMaWJyYXJ5SW50ZXJmYWNlXG5cdFx0KTtcblxuXHRcdHRoaXMucXVlcnlQYXJzZXJGYWN0b3J5ID0gbmV3IFF1ZXJ5UGFyc2VyRmFjdG9yeSgpO1xuXHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSA9IG5ldyBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlKHRoaXMucXVlcnlQYXJzZXJGYWN0b3J5LCB0aGlzLnF1ZXJ5U2VydmljZSk7XG5cdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlID0gbmV3IENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UoKTtcblx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeUZhY3RvcnkgPSBuZXcgQ29sbGVjdGlvbkVudHJ5RmFjdG9yeShcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMuY29sdW1uSGFuZGxlcixcblx0XHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdGV4Y2VwdGlvbkhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnksXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLFxuXHRcdFx0dGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHRwcm9taXNlTGlicmFyeUludGVyZmFjZSxcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlXG5cdFx0KTtcblx0XHR0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkgPSBuZXcgQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSh0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkpO1xuXHRcdHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5ID0gbmV3IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSh0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkpO1xuXHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIgPSBuZXcgQ29sbGVjdGlvbkhhbmRsZXIoXG5cdFx0XHR0aGlzLmJhdGNoU3RhdHVzRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5RmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcblx0XHRcdHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLnF1ZXJ5UGFyc2VyRmFjdG9yeSxcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlXG5cdFx0KTtcblxuXHRcdHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkgPSBuZXcgUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkodGhpcy5jb2x1bW5VdGlsKTtcblx0XHR0aGlzLmNyZWF0ZVJlcXVlc3RGYWN0b3J5ID0gbmV3IENyZWF0ZVJlcXVlc3RGYWN0b3J5KFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcblx0XHRcdHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxuXHRcdCk7XG5cdFx0dGhpcy5jaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5ID0gbmV3IENoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkodGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LCB0aGlzLmtleVNlcnZpY2UpO1xuXHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkgPSBuZXcgQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkoXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHR0aGlzLmNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5jcmVhdGVSZXF1ZXN0RmFjdG9yeSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXG5cdFx0XHRwcm9taXNlTGlicmFyeUludGVyZmFjZSxcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnlcblx0XHQpO1xuXHRcdHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSA9IG5ldyBJdGVtUmVzb3VyY2VGYWN0b3J5KFxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXG5cdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLFxuXHRcdFx0dGhpcy5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeS5jb25zdHJ1Y3QoKSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHByb21pc2VMaWJyYXJ5SW50ZXJmYWNlXG5cdFx0KTtcblx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkgPSBuZXcgQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeShcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdGV4Y2VwdGlvbkhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUxpYnJhcnlJbnRlcmZhY2Vcblx0XHQpO1xuXG5cdFx0dGhpcy5sb2NhbENhY2hlRmFjdG9yeSA9IG5ldyBMb2NhbENhY2hlRmFjdG9yeShcblx0XHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHRleGNlcHRpb25IYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5pdGVtQ2FjaGVGYWN0b3J5LFxuXHRcdFx0dGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdFx0dGhpcy5sb2NrU2VydmljZSxcblx0XHRcdHByb21pc2VMaWJyYXJ5SW50ZXJmYWNlXG5cdFx0KTtcblx0XHR0aGlzLm1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkgPSBuZXcgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSgpO1xuXG5cdFx0dGhpcy5pdGVtQWRtaW5pc3RyYXRvciA9IG5ldyBJdGVtQWRtaW5pc3RyYXRvcihcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHRhdXRoSW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcblx0XHRcdHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcblx0XHRcdHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5sb2NhbENhY2hlRmFjdG9yeSxcblx0XHRcdGxvY2FsQ2FjaGVNYW5hZ2VyLFxuXHRcdFx0dGhpcy5tb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxuXHRcdFx0cHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZVxuXHRcdCk7XG5cblx0XHR0aGlzLnNvY2tldE1lc3NhZ2VIYW5kbGVyID0gbmV3IFNvY2tldE1lc3NhZ2VIYW5kbGVyKFxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcblx0XHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5RmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXG5cdFx0XHRsb2NhbENhY2hlTWFuYWdlcixcblx0XHRcdHByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxuXHRcdCk7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vb3AgKCkge1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHkgKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZTtcbn1cbiIsImV4cG9ydCAqIGZyb20gJy4vY29yZSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cyc7XG5leHBvcnQgKiBmcm9tICcuL21vZGVscyc7XG5leHBvcnQgKiBmcm9tICcuL2ludGVyZmFjZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9jbGFzc2VzJztcbmV4cG9ydCAqIGZyb20gJy4vZmFjdG9yaWVzJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==
|
|
7725
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9SbUNvcmUvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL1JtQ29yZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9SbUNvcmUvZXh0ZXJuYWwgXCJtb21lbnRcIiIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9VdGlsLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0FwaUZvcm1hdHRlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9BcGlSZXF1ZXN0U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9BcGlSZXNwb25zZVByb2Nlc3Nvci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY29uc3RhbnRzLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0JhdGNoU3RhdHVzLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NoYW5nZXNDb21waWxhdGlvbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9DaGFuZ2VzUHJvY2Vzc29yLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25DYWNoZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL0l0ZW1FbnRyeU9wdGlvbnMudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9JdGVtUmVzb3VyY2VPcHRpb25zLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvSXRlbUVudHJ5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvSXRlbVJlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvVmlld1Jlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvRWRpdFJlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvbkVudHJ5T3B0aW9ucy50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL0NvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnMudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9Db2xsZWN0aW9uRW50cnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9Db2xsZWN0aW9uUmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9Db2xsZWN0aW9uVmlld1Jlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvbkVkaXRSZXNvdXJjZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL1RlbXBsYXRlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvUmVtb3RlVmlld1Jlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvTG9jYWxWaWV3UmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9pbmRleC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2xsZWN0aW9uRW50cnlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25IYW5kbGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25NYXRjaGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uRXhwYW5zaW9uLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbHVtbkhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uSW5mby50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2x1bW5TZXQudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uU3Vic2V0Q2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uVXRpbC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9DcmVhdGVSZXF1ZXN0LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1BZG1pbmlzdHJhdG9yLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1DYWNoZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtRW50cnlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1IYW5kbGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1SZXF1ZXN0U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9LZXlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy90eXBlcy9JdGVtVHlwZXNDb2xsZWN0aW9uLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy90eXBlcy9pbmRleC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Mb2NhbENhY2hlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0xvY2tTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL01vZHVsZUNoYW5nZXNDb21waWxhdGlvbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9RdWVyeU1hdGNoZXIudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvUXVlcnlQYXJzZXIudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvUXVlcnlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL1JlcXVlc3RDb2x1bW5FeHBhbnNpb24udHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvU29ja2V0TWVzc2FnZUhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9BcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9CYXRjaFN0YXR1c0ZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9DaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2xsZWN0aW9uQ2FjaGVGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sbGVjdGlvbkVudHJ5RmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2x1bW5FeHBhbnNpb25GYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sdW1uSW5mb0ZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2x1bW5TZXRGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sdW1uU3Vic2V0Q2FjaGVGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ3JlYXRlUmVxdWVzdEZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9JdGVtQ2FjaGVGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvSXRlbUVudHJ5RmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0l0ZW1SZXNvdXJjZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Mb2NhbENhY2hlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL01vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9RdWVyeU1hdGNoZXJGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvUXVlcnlQYXJzZXJGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9UZW1wbGF0ZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9pbmRleC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY29yZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87QUNWQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QUFVLFFBQVEsQ0FBRSxLQUFLO0lBQzlCLE9BQU8sS0FBSyxDQUFDO0FBQ2QsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDN1NzQjtBQUNLO0FBQ0g7QUFFQztBQUNFO0FBQ0oiLCJmaWxlIjoicm0tY29yZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIm1vbWVudFwiKSk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXCJtb21lbnRcIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiUm1Db3JlXCJdID0gZmFjdG9yeShyZXF1aXJlKFwibW9tZW50XCIpKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJSbUNvcmVcIl0gPSBmYWN0b3J5KHJvb3RbXCJtb21lbnRcIl0pO1xufSkod2luZG93LCBmdW5jdGlvbihfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX18wX18pIHtcbnJldHVybiAiLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzBfXzsiLCJleHBvcnQgZnVuY3Rpb24gaW5zdGFudGlhdGVPcHRpb25zIChvcHRpb25zOiB7W2tleTogc3RyaW5nXTogYW55fSwgdmFsdWVzOiBvYmplY3QpOiB2b2lkIHtcblx0Zm9yIChjb25zdCBrZXkgaW4gdmFsdWVzKSB7XG5cdFx0aWYgKCEoa2V5IGluIG9wdGlvbnMpKVxuXHRcdFx0Y29udGludWU7XG5cblx0XHRpZiAodmFsdWVzW2tleV0gPT09IHVuZGVmaW5lZClcblx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0b3B0aW9uc1trZXldID0gdmFsdWVzW2tleV07XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNoYWxsb3dNZXJnZSAob2JqZWN0LCBkZWZhdWx0cykge1xuXHRpZiAob2JqZWN0ID09PSB1bmRlZmluZWQpXG5cdFx0cmV0dXJuIGRlZmF1bHRzO1xuXG5cdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdGZvciAoY29uc3Qga2V5IGluIGRlZmF1bHRzKSB7XG5cdFx0cmVzdWx0W2tleV0gPSBvYmplY3Rba2V5XSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdGRlZmF1bHRzW2tleV0gOiBvYmplY3Rba2V5XTtcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNQcm9wZXJ0aWVzIChvYmplY3QpIHtcblx0Ly8gQHRzLWlnbm9yZVxuXHRmb3IgKGNvbnN0IGtleSBpbiBvYmplY3QpXG5cdFx0cmV0dXJuIHRydWU7XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rmlyc3RQcm9wZXJ0eSAob2JqZWN0KSB7XG5cdGlmICh0eXBlb2Ygb2JqZWN0ICE9PSAnb2JqZWN0Jylcblx0XHRyZXR1cm4gbnVsbDtcblxuXHRmb3IgKGNvbnN0IGtleSBpbiBvYmplY3QpXG5cdFx0cmV0dXJuIGtleTtcblxuXHRyZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluQXJyYXkgKG5lZWRsZSwgaGF5c3RhY2spIHtcblx0Zm9yIChjb25zdCBoYXkgb2YgaGF5c3RhY2spIHtcblx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuXHRcdGlmIChuZWVkbGUgPT0gaGF5KVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJBcnJheTxUPiAoc291cmNlOiBUW10sIGNhbGxiYWNrOiAoVCkgPT4gYm9vbGVhbik6IGJvb2xlYW4ge1xuXHRjb25zdCBmaWx0ZXJlZDogVFtdID0gW107XG5cblx0Zm9yIChjb25zdCBzcmMgb2Ygc291cmNlKSB7XG5cdFx0aWYgKGNhbGxiYWNrKHNyYykpXG5cdFx0XHRmaWx0ZXJlZC5wdXNoKHNyYyk7XG5cdH1cblxuXHRpZiAoZmlsdGVyZWQubGVuZ3RoID09PSBzb3VyY2UubGVuZ3RoKVxuXHRcdHJldHVybiBmYWxzZTtcblxuXHRlbXB0eUFycmF5KHNvdXJjZSk7XG5cblx0Zm9yIChjb25zdCBmaWx0ZXIgb2YgZmlsdGVyZWQpXG5cdFx0c291cmNlLnB1c2goZmlsdGVyKTtcblxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVtcHR5QXJyYXkgKGFycmF5KTogdm9pZCB7XG5cdGFycmF5LnNwbGljZSgwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhFeGlzdHMgKHNvdXJjZSwgcGF0aCkge1xuXHRpZiAodHlwZW9mIHNvdXJjZSA9PT0gJ3VuZGVmaW5lZCcpXG5cdFx0cmV0dXJuIGZhbHNlO1xuXG5cdGZvciAoY29uc3QgcCBvZiBwYXRoKSB7XG5cdFx0aWYgKHR5cGVvZiBzb3VyY2VbcF0gPT09ICd1bmRlZmluZWQnKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0c291cmNlID0gc291cmNlW3BdO1xuXHR9XG5cblx0cmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQYXRoIDxUPiAob2JqZWN0OiBhbnksIHBhdGg6IEFycmF5PG51bWJlciB8IHN0cmluZz4sIGRlZmF1bHRzOiBhbnlbXSk6IFQge1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCB2YWx1ZSA9IHBhdGhbaV07XG5cblx0XHRpZiAob2JqZWN0W3ZhbHVlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0b2JqZWN0W3ZhbHVlXSA9IGRlZmF1bHRzW2ldO1xuXG5cdFx0b2JqZWN0ID0gb2JqZWN0W3ZhbHVlXTtcblx0fVxuXG5cdHJldHVybiBvYmplY3Q7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXRoIChvYmplY3Q6IHt9LCBwYXRoOiBBcnJheTxudW1iZXIgfCBzdHJpbmc+LCBjcmVhdGU6IGJvb2xlYW4gPSBmYWxzZSk6IGFueSB7XG5cdGlmIChvYmplY3QgPT09IHVuZGVmaW5lZClcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdGZvciAoY29uc3QgcCBvZiBwYXRoKSB7XG5cdFx0b2JqZWN0ID0gb2JqZWN0W3BdOyAvLyB3b24ndCBhbHRlciB0aGUgY2FsbGVyJ3MgdmFyXG5cblx0XHRpZiAob2JqZWN0ID09PSB1bmRlZmluZWQgJiYgIWNyZWF0ZSlcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRyZXR1cm4gb2JqZWN0O1xufVxuXG4vLyBUYWtlbiBmcm9tIEFuZ3VsYXJKUywgYWRkZWQgY29tbWVudHMgdG8gaWdub3JlIFR5cGVTY3JpcHQgZXJyb3JzXG5mdW5jdGlvbiBiYXNlRXh0ZW5kIChkc3QsIG9ianMsIGRlZXApIHtcblx0Zm9yIChsZXQgaSA9IDAsIGlpID0gb2Jqcy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG5cdFx0Y29uc3Qgb2JqID0gb2Jqc1tpXTtcblxuXHRcdGlmICghaXNPYmplY3Qob2JqKSAmJiAhaXNGdW5jdGlvbihvYmopKVxuXHRcdFx0Y29udGludWU7XG5cblx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcblxuXHRcdGZvciAobGV0IGogPSAwLCBqaiA9IGtleXMubGVuZ3RoOyBqIDwgamo7IGorKykge1xuXHRcdFx0Y29uc3Qga2V5ID0ga2V5c1tqXTtcblx0XHRcdGNvbnN0IHNyYyA9IG9ialtrZXldO1xuXG5cdFx0XHRpZiAoZGVlcCAmJiBpc09iamVjdChzcmMpKSB7XG5cdFx0XHRcdGlmIChpc0RhdGUoc3JjKSkge1xuXHRcdFx0XHRcdGRzdFtrZXldID0gbmV3IERhdGUoc3JjLnZhbHVlT2YoKSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoaXNSZWdFeHAoc3JjKSkge1xuXHRcdFx0XHRcdGRzdFtrZXldID0gbmV3IFJlZ0V4cChzcmMpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHNyYy5ub2RlTmFtZSkge1xuXHRcdFx0XHRcdGRzdFtrZXldID0gc3JjLmNsb25lTm9kZSh0cnVlKTtcblx0XHRcdFx0fSBlbHNlIGlmIChpc0VsZW1lbnQoc3JjKSkge1xuXHRcdFx0XHRcdGRzdFtrZXldID0gc3JjLmNsb25lKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWYgKCFpc09iamVjdChkc3Rba2V5XSkpXG5cdFx0XHRcdFx0XHRkc3Rba2V5XSA9IGlzQXJyYXkoc3JjKSA/IFtdIDoge307XG5cblx0XHRcdFx0XHRiYXNlRXh0ZW5kKGRzdFtrZXldLCBbc3JjXSwgdHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRzdFtrZXldID0gc3JjO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBkc3Q7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRlbmQgKGRzdCwgLi4uYXJncykge1xuXHRyZXR1cm4gYmFzZUV4dGVuZChkc3QsIGFyZ3MsIGZhbHNlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlIChkc3QsIC4uLmFyZ3MpIHtcblx0cmV0dXJuIGJhc2VFeHRlbmQoZHN0LCBhcmdzLCB0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0ICh2YWx1ZSkge1xuXHQvLyBodHRwOi8vanNwZXJmLmNvbS9pc29iamVjdDRcblx0cmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0JsYW5rT2JqZWN0ICh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nICh2YWx1ZSkge1xuXHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVtYmVyICh2YWx1ZSkge1xuXHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0ZSAodmFsdWUpIHtcblx0cmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBEYXRlXSc7XG59XG5cbmV4cG9ydCBjb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRnVuY3Rpb248VD4gKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBUIHtcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVnRXhwICh2YWx1ZSkge1xuXHRyZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNCb29sZWFuICh2YWx1ZSkge1xuXHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VsZW1lbnQgKG5vZGUpIHtcblx0cmV0dXJuICEhKG5vZGUgJiZcblx0XHQoXG5cdFx0XHRub2RlLm5vZGVOYW1lICAvLyBXZSBhcmUgYSBkaXJlY3QgZWxlbWVudC5cblx0XHRcdHx8IChub2RlLnByb3AgJiYgbm9kZS5hdHRyICYmIG5vZGUuZmluZClcblx0XHQpXG5cdCk7ICAvLyBXZSBoYXZlIGFuIG9uIGFuZCBmaW5kIG1ldGhvZCBwYXJ0IG9mIGpRdWVyeSBBUEkuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1dpbmRvdyAob2JqKSB7XG5cdHJldHVybiBvYmogJiYgb2JqLndpbmRvdyA9PT0gb2JqO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEZWZpbmVkICh2YWx1ZSkge1xuXHRyZXR1cm4gdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFscyAobzEsIG8yKSB7XG5cdGlmIChvMSA9PT0gbzIpXG5cdFx0cmV0dXJuIHRydWU7XG5cblx0aWYgKG8xID09PSBudWxsIHx8IG8yID09PSBudWxsKVxuXHRcdHJldHVybiBmYWxzZTtcblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG5cdGlmIChvMSAhPT0gbzEgJiYgbzIgIT09IG8yKVxuXHRcdHJldHVybiB0cnVlOyAvLyBOYU4gPT09IE5hTlxuXG5cdGNvbnN0IHQxID0gdHlwZW9mIG8xO1xuXHRjb25zdCB0MiA9IHR5cGVvZiBvMjtcblxuXHRsZXQgbGVuZ3RoO1xuXHRsZXQga2V5O1xuXHRsZXQga2V5U2V0O1xuXG5cdGlmICh0MSA9PT0gdDIgJiYgdDEgPT09ICdvYmplY3QnKSB7XG5cdFx0aWYgKGlzQXJyYXkobzEpKSB7XG5cdFx0XHRpZiAoIWlzQXJyYXkobzIpKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRcdGxlbmd0aCA9IG8xLmxlbmd0aDtcblxuXHRcdFx0aWYgKG8xLmxlbmd0aCA9PT0gbzIubGVuZ3RoKSB7XG5cdFx0XHRcdGZvciAoa2V5ID0gMDsga2V5IDwgbGVuZ3RoOyBrZXkrKykge1xuXHRcdFx0XHRcdGlmICghZXF1YWxzKG8xW2tleV0sIG8yW2tleV0pKVxuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChpc0RhdGUobzEpKSB7XG5cdFx0XHRpZiAoIWlzRGF0ZShvMikpXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdFx0cmV0dXJuIHNpbXBsZUNvbXBhcmUobzEuZ2V0VGltZSgpLCBvMi5nZXRUaW1lKCkpO1xuXHRcdH0gZWxzZSBpZiAoaXNSZWdFeHAobzEpKSB7XG5cdFx0XHRpZiAoIWlzUmVnRXhwKG8yKSlcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0XHRyZXR1cm4gbzEudG9TdHJpbmcoKSA9PT0gbzIudG9TdHJpbmcoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKGlzV2luZG93KG8xKSB8fCBpc1dpbmRvdyhvMikgfHwgaXNBcnJheShvMikgfHwgaXNEYXRlKG8yKSB8fCBpc1JlZ0V4cChvMikpXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdFx0a2V5U2V0ID0gY3JlYXRlTWFwKCk7XG5cdFx0XHRmb3IgKGtleSBpbiBvMSkge1xuXHRcdFx0XHRpZiAoaXNGdW5jdGlvbihvMVtrZXldKSlcblx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRpZiAoIWVxdWFscyhvMVtrZXldLCBvMltrZXldKSlcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRcdFx0a2V5U2V0W2tleV0gPSB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGtleSBpbiBvMikge1xuXHRcdFx0XHRpZiAoIShrZXkgaW4ga2V5U2V0KSAmJiBpc0RlZmluZWQobzJba2V5XSkgJiYgIWlzRnVuY3Rpb24obzJba2V5XSkpXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU1hcCAoKSB7XG5cdHJldHVybiBPYmplY3QuY3JlYXRlKG51bGwpO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG5mdW5jdGlvbiBzaW1wbGVDb21wYXJlIChhLCBiKSB7XG5cdHJldHVybiBhID09PSBiIHx8IChhICE9PSBhICYmIGIgIT09IGIpO1xufVxuXG5mdW5jdGlvbiBpc1ZhbGlkT2JqZWN0TWF4RGVwdGggKG1heERlcHRoKSB7XG5cdHJldHVybiBpc051bWJlcihtYXhEZXB0aCkgJiYgbWF4RGVwdGggPiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29weSAoc291cmNlLCBkZXN0aW5hdGlvbj8sIG1heERlcHRoPykge1xuXHRjb25zdCBzdGFja1NvdXJjZSA9IFtdO1xuXHRjb25zdCBzdGFja0Rlc3QgPSBbXTtcblxuXHRtYXhEZXB0aCA9IGlzVmFsaWRPYmplY3RNYXhEZXB0aChtYXhEZXB0aCkgPyBtYXhEZXB0aCA6IE5hTjtcblxuXHRpZiAoZGVzdGluYXRpb24pIHtcblx0XHRpZiAoc291cmNlID09PSBkZXN0aW5hdGlvbikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IGNvcHkhIFNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlIGlkZW50aWNhbC4nKTtcblx0XHR9XG5cblx0XHQvLyBFbXB0eSB0aGUgZGVzdGluYXRpb24gb2JqZWN0XG5cdFx0aWYgKGlzQXJyYXkoZGVzdGluYXRpb24pKSB7XG5cdFx0XHRkZXN0aW5hdGlvbi5sZW5ndGggPSAwO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBkZXN0aW5hdGlvbilcblx0XHRcdFx0ZGVsZXRlIGRlc3RpbmF0aW9uW2tleV07XG5cdFx0fVxuXG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdHN0YWNrU291cmNlLnB1c2goc291cmNlKTtcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0c3RhY2tEZXN0LnB1c2goZGVzdGluYXRpb24pO1xuXG5cdFx0cmV0dXJuIGNvcHlSZWN1cnNlKHNvdXJjZSwgZGVzdGluYXRpb24sIG1heERlcHRoKTtcblx0fVxuXG5cdHJldHVybiBjb3B5RWxlbWVudChzb3VyY2UsIG1heERlcHRoKTtcblxuXHRmdW5jdGlvbiBjb3B5UmVjdXJzZSAoX3NvdXJjZSwgX2Rlc3RpbmF0aW9uLCBfbWF4RGVwdGgpIHtcblx0XHRfbWF4RGVwdGgtLTtcblxuXHRcdGlmIChfbWF4RGVwdGggPCAwKVxuXHRcdFx0cmV0dXJuICcuLi4nO1xuXG5cdFx0aWYgKGlzQXJyYXkoX3NvdXJjZSkpIHtcblx0XHRcdGZvciAobGV0IGkgPSAwLCBpaSA9IF9zb3VyY2UubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuXHRcdFx0XHRfZGVzdGluYXRpb24ucHVzaChjb3B5RWxlbWVudChfc291cmNlW2ldLCBfbWF4RGVwdGgpKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGlzQmxhbmtPYmplY3QoX3NvdXJjZSkpIHtcblx0XHRcdC8vIGNyZWF0ZU1hcCgpIGZhc3QgcGF0aCAtLS0gU2FmZSB0byBhdm9pZCBoYXNPd25Qcm9wZXJ0eSBjaGVjayBiZWNhdXNlIHByb3RvdHlwZSBjaGFpbiBpcyBlbXB0eVxuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gX3NvdXJjZSkge1xuXHRcdFx0XHRfZGVzdGluYXRpb25ba2V5XSA9IGNvcHlFbGVtZW50KF9zb3VyY2Vba2V5XSwgX21heERlcHRoKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKF9zb3VyY2UgJiYgdHlwZW9mIF9zb3VyY2UuaGFzT3duUHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdC8vIFNsb3cgcGF0aCwgd2hpY2ggbXVzdCByZWx5IG9uIGhhc093blByb3BlcnR5XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBfc291cmNlKSB7XG5cdFx0XHRcdGlmIChfc291cmNlLmhhc093blByb3BlcnR5KGtleSkpIHtcblx0XHRcdFx0XHRfZGVzdGluYXRpb25ba2V5XSA9IGNvcHlFbGVtZW50KF9zb3VyY2Vba2V5XSwgX21heERlcHRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBTbG93ZXN0IHBhdGggLS0tIGhhc093blByb3BlcnR5IGNhbid0IGJlIGNhbGxlZCBhcyBhIG1ldGhvZFxuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gX3NvdXJjZSkge1xuXHRcdFx0XHRpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9zb3VyY2UsIGtleSkpIHtcblx0XHRcdFx0XHRfZGVzdGluYXRpb25ba2V5XSA9IGNvcHlFbGVtZW50KF9zb3VyY2Vba2V5XSwgX21heERlcHRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBfZGVzdGluYXRpb247XG5cdH1cblxuXHRmdW5jdGlvbiBjb3B5RWxlbWVudCAoX3NvdXJjZSwgX21heERlcHRoID0gNSkge1xuXHRcdC8vIFNpbXBsZSB2YWx1ZXNcblx0XHRpZiAoIWlzT2JqZWN0KF9zb3VyY2UpKVxuXHRcdFx0cmV0dXJuIF9zb3VyY2U7XG5cblx0XHQvLyBBbHJlYWR5IGNvcGllZCB2YWx1ZXNcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0Y29uc3QgaW5kZXggPSBzdGFja1NvdXJjZS5pbmRleE9mKF9zb3VyY2UpO1xuXG5cdFx0aWYgKGluZGV4ICE9PSAtMSlcblx0XHRcdHJldHVybiBzdGFja0Rlc3RbaW5kZXhdO1xuXG5cdFx0aWYgKGlzV2luZG93KF9zb3VyY2UpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgY29weSEgTWFraW5nIGNvcGllcyBvZiBXaW5kb3cgaW5zdGFuY2VzIGlzIG5vdCBzdXBwb3J0ZWQuJyk7XG5cdFx0fVxuXG5cdFx0bGV0IG5lZWRzUmVjdXJzZSA9IGZhbHNlO1xuXHRcdGxldCBfZGVzdGluYXRpb24gPSBjb3B5VHlwZShfc291cmNlKTtcblxuXHRcdGlmIChfZGVzdGluYXRpb24gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0X2Rlc3RpbmF0aW9uID0gaXNBcnJheShfc291cmNlKSA/IFtdIDogT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YoX3NvdXJjZSkpO1xuXHRcdFx0bmVlZHNSZWN1cnNlID0gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0c3RhY2tTb3VyY2UucHVzaChfc291cmNlKTtcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0c3RhY2tEZXN0LnB1c2goX2Rlc3RpbmF0aW9uKTtcblxuXHRcdHJldHVybiBuZWVkc1JlY3Vyc2Vcblx0XHRcdD8gY29weVJlY3Vyc2UoX3NvdXJjZSwgX2Rlc3RpbmF0aW9uLCBfbWF4RGVwdGgpXG5cdFx0XHQ6IF9kZXN0aW5hdGlvbjtcblx0fVxuXG5cdGZ1bmN0aW9uIGNvcHlUeXBlIChfc291cmNlKSB7XG5cdFx0c3dpdGNoICh0b1N0cmluZy5jYWxsKF9zb3VyY2UpKSB7XG5cdFx0XHRjYXNlICdbb2JqZWN0IEludDhBcnJheV0nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBJbnQxNkFycmF5XSc6XG5cdFx0XHRjYXNlICdbb2JqZWN0IEludDMyQXJyYXldJzpcblx0XHRcdGNhc2UgJ1tvYmplY3QgRmxvYXQzMkFycmF5XSc6XG5cdFx0XHRjYXNlICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBVaW50OEFycmF5XSc6XG5cdFx0XHRjYXNlICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSc6XG5cdFx0XHRjYXNlICdbb2JqZWN0IFVpbnQxNkFycmF5XSc6XG5cdFx0XHRjYXNlICdbb2JqZWN0IFVpbnQzMkFycmF5XSc6XG5cdFx0XHRcdHJldHVybiBuZXcgX3NvdXJjZS5jb25zdHJ1Y3Rvcihjb3B5RWxlbWVudChfc291cmNlLmJ1ZmZlciksIF9zb3VyY2UuYnl0ZU9mZnNldCwgX3NvdXJjZS5sZW5ndGgpO1xuXG5cdFx0XHRjYXNlICdbb2JqZWN0IEFycmF5QnVmZmVyXSc6XG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFMTBcblx0XHRcdFx0aWYgKCFfc291cmNlLnNsaWNlKSB7XG5cdFx0XHRcdFx0Ly8gSWYgd2UncmUgaW4gdGhpcyBjYXNlIHdlIGtub3cgdGhlIGVudmlyb25tZW50IHN1cHBvcnRzIEFycmF5QnVmZmVyXG5cdFx0XHRcdFx0LyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYgKi9cblx0XHRcdFx0XHRjb25zdCBjb3BpZWQgPSBuZXcgQXJyYXlCdWZmZXIoX3NvdXJjZS5ieXRlTGVuZ3RoKTtcblx0XHRcdFx0XHRuZXcgVWludDhBcnJheShjb3BpZWQpLnNldChuZXcgVWludDhBcnJheShfc291cmNlKSk7XG5cdFx0XHRcdFx0LyogZXNsaW50LWVuYWJsZSAqL1xuXHRcdFx0XHRcdHJldHVybiBjb3BpZWQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIF9zb3VyY2Uuc2xpY2UoMCk7XG5cblx0XHRcdGNhc2UgJ1tvYmplY3QgQm9vbGVhbl0nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBOdW1iZXJdJzpcblx0XHRcdGNhc2UgJ1tvYmplY3QgU3RyaW5nXSc6XG5cdFx0XHRjYXNlICdbb2JqZWN0IERhdGVdJzpcblx0XHRcdFx0cmV0dXJuIG5ldyBfc291cmNlLmNvbnN0cnVjdG9yKF9zb3VyY2UudmFsdWVPZigpKTtcblxuXHRcdFx0Y2FzZSAnW29iamVjdCBSZWdFeHBdJzpcblx0XHRcdFx0Y29uc3QgcmUgPSBuZXcgUmVnRXhwKF9zb3VyY2UuX3NvdXJjZSwgX3NvdXJjZS50b1N0cmluZygpLm1hdGNoKC9bXi9dKiQvKVswXSk7XG5cblx0XHRcdFx0cmUubGFzdEluZGV4ID0gX3NvdXJjZS5sYXN0SW5kZXg7XG5cblx0XHRcdFx0cmV0dXJuIHJlO1xuXG5cdFx0XHRjYXNlICdbb2JqZWN0IEJsb2JdJzpcblx0XHRcdFx0cmV0dXJuIG5ldyBfc291cmNlLmNvbnN0cnVjdG9yKFtfc291cmNlXSwge3R5cGU6IF9zb3VyY2UudHlwZX0pO1xuXHRcdH1cblxuXHRcdGlmIChpc0Z1bmN0aW9uKF9zb3VyY2UuY2xvbmVOb2RlKSkge1xuXHRcdFx0cmV0dXJuIF9zb3VyY2UuY2xvbmVOb2RlKHRydWUpO1xuXHRcdH1cblx0fVxufVxuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XG5cbmltcG9ydCB7IENvbHVtbkluZm8gfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEZpZWxkTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBjb3B5LCBlcXVhbHMgfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgY2xhc3MgQXBpRm9ybWF0dGVyIHtcblx0TU9NRU5UX0lOVkFMSUQgPSAnSW52YWxpZCBkYXRlJztcblx0U0VSVkVSX0RBVEVUSU1FX0ZPUk1BVCA9ICdZWVlZLU1NLUREW1RdSEg6bW06c3NaJztcblx0U0VSVkVSX1RJTUVfRk9STUFUID0gJ0hIOm1tOnNzJztcblx0U0VSVkVSX0RBVEVfRk9STUFUID0gJ1lZWVktTU0tREQnO1xuXG5cdGNvbnN0cnVjdG9yICgpIHtcblxuXHR9XG5cblx0Zm9ybWF0UmVzcG9uc2UgKGZpZWxkczogRmllbGRNYXAsIGNvbHVtbnM6IENvbHVtbkluZm9bXSk6IEZpZWxkTWFwIHtcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKVxuXHRcdFx0ZmllbGRzW2NvbHVtbi5wYXRoXSA9IHRoaXMuZm9ybWF0UmVzcG9uc2VWYWx1ZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUsIGZpZWxkc1tjb2x1bW4ucGF0aF0pO1xuXG5cdFx0cmV0dXJuIGZpZWxkcztcblx0fVxuXG5cdGV4cGFuZFJlc3BvbnNlIChjdXJyZW50OiBGaWVsZE1hcCwgZXhwYW5kZWQ6IEZpZWxkTWFwLCBjb2x1bW5zOiBDb2x1bW5JbmZvW10pOiBGaWVsZE1hcCB7XG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucylcblx0XHRcdGN1cnJlbnRbY29sdW1uLnBhdGhdID0gdGhpcy5mb3JtYXRSZXNwb25zZVZhbHVlKGNvbHVtbi5hcGlDb2x1bW4udHlwZSwgZXhwYW5kZWRbY29sdW1uLnBhdGhdKTtcblxuXHRcdHJldHVybiBjdXJyZW50O1xuXHR9XG5cblx0Zm9ybWF0UmVxdWVzdCAoaW5pdGlhbDogRmllbGRNYXAsIG1vZGlmaWVkOiBGaWVsZE1hcCwgY29sdW1uczogQ29sdW1uSW5mb1tdKTogRmllbGRNYXAge1xuXHRcdGNvbnN0IHJlc3VsdDoge1tjb2x1bW5JZDogc3RyaW5nXTogYW55fSA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XG5cdFx0XHRjb25zdCBhcGlDb2x1bW4gPSBjb2x1bW4uYXBpQ29sdW1uO1xuXHRcdFx0Y29uc3QgY29sdW1uVHlwZSA9IGFwaUNvbHVtbi50eXBlO1xuXG5cdFx0XHRpZiAoYXBpQ29sdW1uLnJlYWRPbmx5KVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0aWYgKCF0aGlzLmNvbXBhcmVGaWVsZHMoY29sdW1uVHlwZSwgaW5pdGlhbFtjb2x1bW5JZF0sIG1vZGlmaWVkW2NvbHVtbklkXSkpXG5cdFx0XHRcdHJlc3VsdFtjb2x1bW5JZF0gPSB0aGlzLmZvcm1hdFJlcXVlc3RWYWx1ZShjb2x1bW5UeXBlLCBtb2RpZmllZFtjb2x1bW5JZF0pO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmb3JtYXRSZXF1ZXN0TG9jYWwgKGZpZWxkczogRmllbGRNYXAsIGNvbHVtbnM6IENvbHVtbkluZm9bXSk6IEZpZWxkTWFwIHtcblx0XHRjb25zdCByZXN1bHQ6IHtbY29sdW1uSWQ6IHN0cmluZ106IGFueX0gPSB7fTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uLmlkO1xuXHRcdFx0Y29uc3QgYXBpQ29sdW1uID0gY29sdW1uLmFwaUNvbHVtbjtcblxuXHRcdFx0aWYgKGFwaUNvbHVtbi5yZWFkT25seSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdHJlc3VsdFtjb2x1bW5JZF0gPSB0aGlzLmZvcm1hdFJlcXVlc3RWYWx1ZShhcGlDb2x1bW4udHlwZSwgZmllbGRzW2NvbHVtbklkXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGhhc0NoYW5nZXMgKGluaXRpYWw6IEZpZWxkTWFwLCBtb2RpZmllZDogRmllbGRNYXAsIGNvbHVtbnM6IENvbHVtbkluZm9bXSk6IGJvb2xlYW4ge1xuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uLmlkO1xuXHRcdFx0Y29uc3QgYXBpQ29sdW1uID0gY29sdW1uLmFwaUNvbHVtbjtcblxuXHRcdFx0aWYgKGFwaUNvbHVtbi5yZWFkT25seSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGlmICghdGhpcy5jb21wYXJlRmllbGRzKGFwaUNvbHVtbi50eXBlLCBpbml0aWFsW2NvbHVtbklkXSwgbW9kaWZpZWRbY29sdW1uSWRdKSlcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Z2V0Q2hhbmdlcyAoaW5pdGlhbDogRmllbGRNYXAsIG1vZGlmaWVkOiBGaWVsZE1hcCwgY29sdW1uczogQ29sdW1uSW5mb1tdKTogRmllbGRNYXAge1xuXHRcdGNvbnN0IHJlc3VsdDogb2JqZWN0W10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uLmlkO1xuXHRcdFx0Y29uc3QgYXBpQ29sdW1uID0gY29sdW1uLmFwaUNvbHVtbjtcblxuXHRcdFx0aWYgKGFwaUNvbHVtbi5yZWFkT25seSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGlmICghdGhpcy5jb21wYXJlRmllbGRzKGFwaUNvbHVtbi50eXBlLCBpbml0aWFsW2NvbHVtbklkXSwgbW9kaWZpZWRbY29sdW1uSWRdKSkge1xuXHRcdFx0XHRyZXN1bHQucHVzaChcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRvbGRWYWx1ZTogaW5pdGlhbFtjb2x1bW5JZF0sXG5cdFx0XHRcdFx0XHRuZXdWYWx1ZTogbW9kaWZpZWRbY29sdW1uSWRdLFxuXHRcdFx0XHRcdFx0Y29sdW1uOiBjb2x1bW4uYXBpQ29sdW1uXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRjb3B5RmllbGRzIChzb3VyY2U6IEZpZWxkTWFwLCBkZXN0aW5hdGlvbjogRmllbGRNYXAsIGNvbHVtbnM6IENvbHVtbkluZm9bXSk6IEZpZWxkTWFwIHtcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5QYXRoID0gY29sdW1uLnBhdGg7XG5cblx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtblBhdGhdID0gdGhpcy5jbG9uZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUsIHNvdXJjZVtjb2x1bW5QYXRoXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRlc3RpbmF0aW9uO1xuXHR9XG5cblx0c2hhbGxvd0NvcHlGaWVsZHMgKFxuXHRcdHNoYWxsb3dTb3VyY2U6IEZpZWxkTWFwLFxuXHRcdGRlZXBTb3VyY2U6IEZpZWxkTWFwLFxuXHRcdGRlc3RpbmF0aW9uOiBGaWVsZE1hcCxcblx0XHRjb2x1bW5zOiBDb2x1bW5JbmZvW11cblx0KTogRmllbGRNYXAge1xuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdGNvbnN0IGNvbHVtblBhdGggPSBjb2x1bW4ucGF0aDtcblxuXHRcdFx0ZGVzdGluYXRpb25bY29sdW1uUGF0aF0gPSBzaGFsbG93U291cmNlW2NvbHVtblBhdGhdICE9PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRzaGFsbG93U291cmNlW2NvbHVtblBhdGhdIDpcblx0XHRcdFx0dGhpcy5jbG9uZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUsIGRlZXBTb3VyY2VbY29sdW1uUGF0aF0pO1xuXHRcdH1cblxuXHRcdHJldHVybiBkZXN0aW5hdGlvbjtcblx0fVxuXG5cdHNldERlZmF1bHRWYWx1ZXMgKGRlc3RpbmF0aW9uOiBGaWVsZE1hcCwgY29sdW1uczogQ29sdW1uSW5mb1tdKTogRmllbGRNYXAge1xuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpXG5cdFx0XHRkZXN0aW5hdGlvbltjb2x1bW4uaWRdID0gdGhpcy5nZXREZWZhdWx0VmFsdWUoY29sdW1uLmFwaUNvbHVtbi50eXBlKTtcblxuXHRcdHJldHVybiBkZXN0aW5hdGlvbjtcblx0fVxuXG5cdGNvbXBhcmVGaWVsZHMgKGNvbHVtblR5cGU6IHN0cmluZywgZmlyc3Q/OiBhbnksIHNlY29uZD86IGFueSk6IGJvb2xlYW4ge1xuXHRcdGlmIChmaXJzdCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHNlY29uZCA9PT0gdW5kZWZpbmVkO1xuXG5cdFx0aWYgKHNlY29uZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0c3dpdGNoIChjb2x1bW5UeXBlKSB7XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdGNhc2UgJ3RpbWUnOlxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb21wYXJlTW9tZW50T2JqZWN0cyhmaXJzdCwgc2Vjb25kKTtcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29tcGFyZUR1cmF0aW9ucyhmaXJzdCwgc2Vjb25kKTtcblx0XHRcdGNhc2UgJ2lkJzogLy8gaWQgdHlwZXNcblx0XHRcdGNhc2UgJ2l0ZW0nOlxuXHRcdFx0Y2FzZSAnbGluayc6XG5cdFx0XHRjYXNlICdjaGlsZCc6XG5cdFx0XHRjYXNlICdzaWJsaW5nJzpcblx0XHRcdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcblx0XHRcdFx0cmV0dXJuIGZpcnN0ID09IHNlY29uZDsgLy8gdXNlIG5vbi1zdHJpY3QgY29tcGFyaXNvblxuXHRcdFx0Y2FzZSAnY3VycmVudCc6XG5cdFx0XHRjYXNlICdkaW1lbnNpb24nOlxuXHRcdFx0Y2FzZSAnZGlzdGFuY2UnOlxuXHRcdFx0Y2FzZSAnZG91YmxlJzogLy8gZmxvYXRpbmcgcG9pbnQgdHlwZXNcblx0XHRcdGNhc2UgJ2ZpbGVzaXplJzpcblx0XHRcdGNhc2UgJ251bWJlcic6XG5cdFx0XHRjYXNlICdwb3dlcic6XG5cdFx0XHRjYXNlICdxdWFudGl0eSc6XG5cdFx0XHRjYXNlICd2b2x1bWUnOlxuXHRcdFx0Y2FzZSAnd2VpZ2h0Jzpcblx0XHRcdGNhc2UgJ2Nvb3JkaW5hdGUnOlxuXHRcdFx0Y2FzZSAncHJpY2UnOlxuXHRcdFx0Y2FzZSAncGVyY2VudGFnZSc6XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbXBhcmVGbG9hdHMoZmlyc3QsIHNlY29uZCk7XG5cdFx0XHRjYXNlICdpbnQnOiAvLyBpbnRlZ2VyIHR5cGVzXG5cdFx0XHRjYXNlICdib29sJzogLy8gYm9vbGVhbiB0eXBlc1xuXHRcdFx0Y2FzZSAnZW51bSc6XG5cdFx0XHRjYXNlICdlbWFpbCc6IC8vIHN0cmluZyB0eXBlc1xuXHRcdFx0Y2FzZSAncGhvbmUnOlxuXHRcdFx0Y2FzZSAndXJsJzpcblx0XHRcdGNhc2UgJ3RleHQnOlxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxuXHRcdFx0Y2FzZSAnY29sb3InOlxuXHRcdFx0Y2FzZSAnb3JkZXInOlxuXHRcdFx0XHRyZXR1cm4gZmlyc3QgPT09IHNlY29uZDtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBlcXVhbHMoZmlyc3QsIHNlY29uZCk7XG5cdFx0fVxuXHR9XG5cblx0Y29tcGFyZUZsb2F0cyAoYTogbnVtYmVyLCBiOiBudW1iZXIpOiBib29sZWFuIHtcblx0XHRjb25zdCBhYnNBID0gTWF0aC5hYnMoYSk7XG5cdFx0Y29uc3QgYWJzQiA9IE1hdGguYWJzKGIpO1xuXHRcdGNvbnN0IGRpZmYgPSBNYXRoLmFicyhhIC0gYik7XG5cblx0XHRjb25zdCBFUFNJTE9OID0gMS4xOWUtMDc7XG5cblx0XHQvLyBzaG9ydGN1dCwgaGFuZGxlcyBpbmZpbml0aWVzXG5cdFx0aWYgKGEgPT09IGIpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gZWxzZSBpZiAoYSA9PT0gMCB8fCBiID09PSAwIHx8IGRpZmYgPCBOdW1iZXIuTUlOX1ZBTFVFKSB7XG5cdFx0XHQvLyBhIG9yIGIgaXMgemVybyBvciBib3RoIGFyZSBleHRyZW1lbHkgY2xvc2UgdG8gaXRcblx0XHRcdC8vIHJlbGF0aXZlIGVycm9yIGlzIGxlc3MgbWVhbmluZ2Z1bCBoZXJlXG5cdFx0XHRyZXR1cm4gZGlmZiA8IChFUFNJTE9OICogTnVtYmVyLk1JTl9WQUxVRSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIHVzZSByZWxhdGl2ZSBlcnJvclxuXHRcdFx0cmV0dXJuIGRpZmYgLyBNYXRoLm1pbigoYWJzQSArIGFic0IpLCBOdW1iZXIuTUFYX1ZBTFVFKSA8IEVQU0lMT047XG5cdFx0fVxuXHR9XG5cblx0Y29tcGFyZU1vbWVudE9iamVjdHMgKGZpcnN0OiBtb21lbnQuTW9tZW50LCBzZWNvbmQ6IG1vbWVudC5Nb21lbnQpOiBib29sZWFuIHtcblx0XHRpZiAoIWZpcnN0LmlzVmFsaWQoKSlcblx0XHRcdHJldHVybiAhc2Vjb25kLmlzVmFsaWQoKTtcblxuXHRcdGlmICghc2Vjb25kLmlzVmFsaWQoKSlcblx0XHRcdHJldHVybiBmYWxzZTsgLy8gZmlyc3QgSVMgdmFsaWRcblxuXHRcdHJldHVybiBmaXJzdC5pc1NhbWUoc2Vjb25kKTtcblx0fVxuXG5cdGNvbXBhcmVEdXJhdGlvbnMgKGZpcnN0OiBtb21lbnQuRHVyYXRpb24sIHNlY29uZDogbW9tZW50LkR1cmF0aW9uKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIGZpcnN0LmFzTWlsbGlzZWNvbmRzKCkgPT09IHNlY29uZC5hc01pbGxpc2Vjb25kcygpO1xuXHR9XG5cblx0Zm9ybWF0UmVzcG9uc2VWYWx1ZSAoY29sdW1uVHlwZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG5cdFx0c3dpdGNoIChjb2x1bW5UeXBlKSB7XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVzcG9uc2VEYXRlKHZhbHVlKTtcblx0XHRcdGNhc2UgJ2NvbG9yJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVzcG9uc2VDb2xvcih2YWx1ZSk7XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlc3BvbnNlRHVyYXRpb24odmFsdWUpO1xuXHRcdFx0Y2FzZSAnanNvbic6XG5cdFx0XHRcdHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlICE9PSAnJyA/IEpTT04ucGFyc2UodmFsdWUpIDogdmFsdWU7XG5cdFx0XHRjYXNlICdudW1iZXInOlxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IDAgPyBudWxsIDogdmFsdWU7XG5cdFx0XHRjYXNlICdmaWxlc2l6ZSc6XG5cdFx0XHRcdHJldHVybiB2YWx1ZSAvIDEwMDAwMDA7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXHR9XG5cblx0Zm9ybWF0UmVxdWVzdFZhbHVlIChjb2x1bW5UeXBlOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVxdWVzdERhdGVUaW1lKHZhbHVlKTtcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXF1ZXN0RGF0ZSh2YWx1ZSk7XG5cdFx0XHRjYXNlICdjb2xvcic6XG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlcXVlc3RDb2xvcih2YWx1ZSk7XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlcXVlc3REdXJhdGlvbih2YWx1ZSk7XG5cdFx0XHRjYXNlICdudW1iZXInOlxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IDAgPyBudWxsIDogdmFsdWU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXHR9XG5cblx0Zm9ybWF0UmVzcG9uc2VEYXRlICh2YWx1ZTogbnVsbCB8IGFueSk6IG1vbWVudC5Nb21lbnQge1xuXHRcdHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IG1vbWVudC5pbnZhbGlkKCkgOiBtb21lbnQodmFsdWUpO1xuXHR9XG5cblx0Zm9ybWF0UmVzcG9uc2VEdXJhdGlvbiAodmFsdWU6IG51bGwgfCBudW1iZXIpOiBtb21lbnQuRHVyYXRpb24ge1xuXHRcdHJldHVybiBtb21lbnQuZHVyYXRpb24odmFsdWUgPT09IG51bGwgPyAwIDogdmFsdWUsICdzZWNvbmRzJyk7XG5cdH1cblxuXHRmb3JtYXRSZXNwb25zZUNvbG9yICh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdmFsdWUuY2hhckF0KDApID09PSAnIycgPyB2YWx1ZSA6ICcjJyArIHZhbHVlO1xuXHR9XG5cblx0Zm9ybWF0UmVxdWVzdERhdGVUaW1lICh2YWx1ZTogbW9tZW50Lk1vbWVudCk6IHN0cmluZyB8IG51bGwge1xuXHRcdHJldHVybiB2YWx1ZS5pc1ZhbGlkKCkgPyB2YWx1ZS5mb3JtYXQodGhpcy5TRVJWRVJfREFURVRJTUVfRk9STUFUKSA6IG51bGw7XG5cdH1cblxuXHRmb3JtYXRSZXF1ZXN0RGF0ZSAodmFsdWU6IG1vbWVudC5Nb21lbnQpOiBzdHJpbmcgfCBudWxsIHtcblx0XHRyZXR1cm4gdmFsdWUuaXNWYWxpZCgpID8gdmFsdWUuZm9ybWF0KHRoaXMuU0VSVkVSX0RBVEVfRk9STUFUKSA6IG51bGw7XG5cdH1cblxuXHRmb3JtYXRSZXF1ZXN0RHVyYXRpb24gKHZhbHVlOiBtb21lbnQuRHVyYXRpb24pOiBudW1iZXIge1xuXHRcdHJldHVybiB2YWx1ZS5hc1NlY29uZHMoKTtcblx0fVxuXG5cdGZvcm1hdFJlcXVlc3RDb2xvciAodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHZhbHVlLmNoYXJBdCgwKSA9PT0gJyMnID8gdmFsdWUuc3Vic3RyaW5nKDEpIDogdmFsdWU7XG5cdH1cblxuXHRnZXREZWZhdWx0VmFsdWUgKGNvbHVtblR5cGU6IHN0cmluZyk6IGFueSB7XG5cdFx0c3dpdGNoIChjb2x1bW5UeXBlKSB7XG5cdFx0XHRjYXNlICdpbnQnOlxuXHRcdFx0Y2FzZSAnZG91YmxlJzpcblx0XHRcdGNhc2UgJ3BlcmNlbnRhZ2UnOlxuXHRcdFx0Y2FzZSAncHJpY2UnOlxuXHRcdFx0Y2FzZSAnb3JkZXInOlxuXHRcdFx0XHRyZXR1cm4gMDtcblx0XHRcdGNhc2UgJ2l0ZW0nOlxuXHRcdFx0Y2FzZSAnbGluayc6XG5cdFx0XHRjYXNlICdjaGlsZCc6XG5cdFx0XHRjYXNlICdzaWJsaW5nJzpcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHRjYXNlICdib29sJzpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0Y2FzZSAnZW51bSc6XG5cdFx0XHRcdHJldHVybiAnMCc7XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdGNhc2UgJ3RpbWUnOlxuXHRcdFx0XHRyZXR1cm4gbW9tZW50LmludmFsaWQoKTtcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdFx0cmV0dXJuIG1vbWVudC5kdXJhdGlvbigpO1xuXHRcdFx0Y2FzZSAndGV4dCc6XG5cdFx0XHRjYXNlICdsb25ndGV4dCc6XG5cdFx0XHRcdHJldHVybiAnJztcblx0XHRcdGNhc2UgJ2NvbG9yJzpcblx0XHRcdFx0cmV0dXJuICcjMDAwMDAwJztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiAnJztcblx0XHRcdC8vIFx0XHRcdFx0XHRlbWFpbFxuXHRcdFx0Ly8gXHRcdFx0XHRcdHVybFxuXHRcdFx0Ly8gXHRcdFx0XHRcdGh0bWxcblx0XHRcdC8vIFx0XHRcdFx0XHRqc29uXG5cdFx0XHQvLyBcdFx0XHRcdFx0ZGF0YVxuXHRcdH1cblx0fVxuXG5cdGlzRGVmYXVsdFZhbHVlIChjb2x1bW5UeXBlOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5jb21wYXJlRmllbGRzKGNvbHVtblR5cGUsIHZhbHVlLCB0aGlzLmdldERlZmF1bHRWYWx1ZShjb2x1bW5UeXBlKSk7XG5cdH1cblxuXHRjbG9uZSAoY29sdW1uVHlwZTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55IHtcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuY2xvbmVEdXJhdGlvbih2YWx1ZSk7XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdFx0cmV0dXJuIG1vbWVudCh2YWx1ZSk7XG5cdFx0XHRjYXNlICdqc29uJzpcblx0XHRcdFx0cmV0dXJuIGNvcHkodmFsdWUpO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblx0fVxuXG5cdGdldENsb25lRnVuY3Rpb24gKGNvbHVtblR5cGU6IHN0cmluZykge1xuXHRcdHN3aXRjaCAoY29sdW1uVHlwZSkge1xuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jbG9uZUR1cmF0aW9uO1xuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRcdHJldHVybiB0aGlzLmNsb25lRGF0ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiB0aGlzLmlkZW50aXR5O1xuXHRcdH1cblx0fVxuXG5cdGNsb25lRHVyYXRpb24gKGR1cmF0aW9uOiBtb21lbnQuRHVyYXRpb24pIHtcblx0XHRyZXR1cm4gbW9tZW50LmR1cmF0aW9uKGR1cmF0aW9uKTtcblx0fVxuXG5cdGNsb25lRGF0ZSAoZGF0ZTogbW9tZW50Lk1vbWVudCk6IG1vbWVudC5Nb21lbnQge1xuXHRcdHJldHVybiBkYXRlLmNsb25lKCk7XG5cdH1cblxuXHRpZGVudGl0eSA8VD4gKGlucHV0OiBUKTogVCB7XG5cdFx0cmV0dXJuIGlucHV0O1xuXHR9XG59XG4iLCJpbXBvcnQgeyBBcGlSZXNwb25zZVByb2Nlc3NvciB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQge1xuXHRBcGlSZXF1ZXN0Q29sdW1uTWFwLCBBcGlSZXF1ZXN0SXRlbU1hcCwgQXBpUmVxdWVzdExpbWl0LCBJdGVtSWQsIEl0ZW1UeXBlLCBQcm9taXNlSW50ZXJmYWNlXG59IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIEFwaVJlcXVlc3RTZXJ2aWNlIHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBhcGlSZXNwb25zZVByb2Nlc3NvckZhY3Rvcnk6IEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeVxuXHQpIHtcblxuXHR9XG5cblx0dGVtcGxhdGUgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcGFyYW1zOiBhbnkpOiBQcm9taXNlSW50ZXJmYWNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS50ZW1wbGF0ZShpdGVtVHlwZSwgcGFyYW1zKSk7XG5cdH1cblxuXHRjcmVhdGUgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQsIHZhbHVlczogYW55LCBwYXJlbnRUeXBlPzogSXRlbVR5cGUsIHBhcmVudElkPzogSXRlbUlkKTogUHJvbWlzZUludGVyZmFjZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UuY3JlYXRlKGl0ZW1UeXBlLCBpdGVtSWQsIHZhbHVlcywgcGFyZW50VHlwZSwgcGFyZW50SWQpKTtcblx0fVxuXG5cdGRlbGV0ZSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWRzOiBJdGVtSWRbXSk6IFByb21pc2VJbnRlcmZhY2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLmRlbGV0ZShpdGVtVHlwZSwgaXRlbUlkcykpO1xuXHR9XG5cblx0dXBkYXRlSXRlbXMgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbXM6IEFwaVJlcXVlc3RJdGVtTWFwLCBjb2x1bW5zOiBhbnkpOiBQcm9taXNlSW50ZXJmYWNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS51cGRhdGVJdGVtcyhpdGVtVHlwZSwgaXRlbXMsIGNvbHVtbnMpKTtcblx0fVxuXG5cdHJlcXVlc3RTa2VsZXRvbiAocGFyYW1zOiBhbnksIHJlcXVlc3RDYW5jZWxlcj86IFByb21pc2VJbnRlcmZhY2U8YW55Pik6IFByb21pc2VJbnRlcmZhY2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RTa2VsZXRvbihwYXJhbXMsIHJlcXVlc3RDYW5jZWxlcikpO1xuXHR9XG5cblx0bW92ZUl0ZW1zIChwYXJlbnRUeXBlOiBJdGVtVHlwZSwgcGFyZW50SWQ6IEl0ZW1JZCwgaXRlbXM6IHtbaXRlbVR5cGU6IHN0cmluZ106IEl0ZW1JZFtdfSk6IFByb21pc2VJbnRlcmZhY2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLm1vdmVJdGVtcyhwYXJlbnRUeXBlLCBwYXJlbnRJZCwgaXRlbXMpKTtcblx0fVxuXG5cdGNvbHVtbnMgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgY29sdW1uczogQXBpUmVxdWVzdENvbHVtbk1hcCwgcGFyYW1zPzogYW55KTogUHJvbWlzZUludGVyZmFjZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UuY29sdW1ucyhpdGVtVHlwZSwgY29sdW1ucywgcGFyYW1zKSk7XG5cdH1cblxuXHRxdWVyeSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBxdWVyeTogYW55LCBjb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1uTWFwLCBsaW1pdD86IEFwaVJlcXVlc3RMaW1pdCk6IFByb21pc2VJbnRlcmZhY2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KGl0ZW1UeXBlLCBxdWVyeSwgY29sdW1ucywgbGltaXQpKTtcblx0fVxuXG5cdHByb2Nlc3NSZXNwb25zZSAocmVxdWVzdDogYW55KTogUHJvbWlzZUludGVyZmFjZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdHJldHVybiByZXF1ZXN0LnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHRoaXMuYXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5LmNvbnN0cnVjdChyZXNwb25zZSkpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBBcGlGb3JtYXR0ZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEZpZWxkTWFwLCBJdGVtSWQsIEl0ZW1UeXBlLCBJdGVtVHlwZU1hcCwgUmVzcG9uc2VDb2x1bW4gfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBBcGlSZXNwb25zZVByb2Nlc3NvciB7XG5cdGNvbHVtbnM6IEl0ZW1UeXBlTWFwO1xuXHRpdGVtczoge1xuXHRcdFtpdGVtVHlwZTogc3RyaW5nXToge1xuXHRcdFx0W2l0ZW1JZDogbnVtYmVyXTogYW55XG5cdFx0fVxuXHR9O1xuXHRsaW5rczogSXRlbVR5cGVNYXA7XG5cdGNhY2hlYWJsZTogYm9vbGVhbjtcblx0bWFwOiBhbnk7XG5cblx0Y29sdW1uSW5kZXhNYXA6IGFueSA9IHt9O1xuXHRjb2x1bW5NYXA6IGFueSA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwdWJsaWMgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXG5cdFx0cHVibGljIHJlc3BvbnNlOiBhbnlcblx0KSB7XG5cdFx0dGhpcy5jb2x1bW5zID0gcmVzcG9uc2UuY29sdW1ucztcblx0XHR0aGlzLml0ZW1zID0gcmVzcG9uc2UuaXRlbXM7XG5cdFx0dGhpcy5saW5rcyA9IHJlc3BvbnNlLmxpbmtzO1xuXHRcdHRoaXMuY2FjaGVhYmxlID0gcmVzcG9uc2UuY2FjaGVhYmxlO1xuXHRcdHRoaXMubWFwID0gcmVzcG9uc2UubWFwO1xuXG5cdFx0dGhpcy5jcmVhdGVDb2x1bW5NYXBzKCk7XG5cdH1cblxuXHRjcmVhdGVDb2x1bW5NYXBzICgpIHtcblx0XHRmb3IgKGNvbnN0IGNvbHVtblR5cGUgaW4gdGhpcy5jb2x1bW5zKSB7XG5cdFx0XHR0aGlzLmNvbHVtbkluZGV4TWFwW2NvbHVtblR5cGVdID0ge307XG5cdFx0XHR0aGlzLmNvbHVtbk1hcFtjb2x1bW5UeXBlXSA9IHt9O1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29sdW1uc1tjb2x1bW5UeXBlXS5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnNbY29sdW1uVHlwZV1baV07XG5cdFx0XHRcdHRoaXMuY29sdW1uSW5kZXhNYXBbY29sdW1uVHlwZV1bY29sdW1uLmlkXSA9IGk7XG5cdFx0XHRcdHRoaXMuY29sdW1uTWFwW2NvbHVtblR5cGVdW2NvbHVtbi5pZF0gPSBjb2x1bW47XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0ZmV0Y2hWYWx1ZSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCwgY29sdW1uSWQ6IHN0cmluZykge1xuXHRcdGlmICh0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF0uZGF0YVt0aGlzLmNvbHVtbkluZGV4TWFwW2l0ZW1UeXBlXVtjb2x1bW5JZF1dO1xuXHR9XG5cblx0ZmV0Y2hEZXJpdmVkT2JqZWN0IChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkLCByb290Q29sdW1uczogUmVzcG9uc2VDb2x1bW5bXSkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2Ygcm9vdENvbHVtbnMpIHtcblx0XHRcdHRoaXMuZmV0Y2hEZXJpdmVkVmFsdWVzKFxuXHRcdFx0XHR0aGlzLmZldGNoVmFsdWUoaXRlbVR5cGUsIGl0ZW1JZCwgY29sdW1uLmlkKSxcblx0XHRcdFx0Y29sdW1uLFxuXHRcdFx0XHRyZXN1bHRcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGZldGNoRGVyaXZlZFZhbHVlcyAodmFsdWU6IGFueSwgY29sdW1uOiBSZXNwb25zZUNvbHVtbiwgZGVzdGluYXRpb246IGFueSk6IHZvaWQge1xuXHRcdGZvciAoY29uc3QgY2hpbGRDb2x1bW4gb2YgY29sdW1uLmNoaWxkcmVuKSB7XG5cdFx0XHRsZXQgY2hpbGRWYWx1ZTtcblxuXHRcdFx0aWYgKHZhbHVlID09PSBudWxsKSB7XG5cdFx0XHRcdGNoaWxkVmFsdWUgPSBudWxsO1xuXHRcdFx0XHRkZXN0aW5hdGlvbltjaGlsZENvbHVtbi5wYXRoXSA9IHRoaXMuYXBpRm9ybWF0dGVyLmdldERlZmF1bHRWYWx1ZShjaGlsZENvbHVtbi5hcGlDb2x1bW4udHlwZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjaGlsZFZhbHVlID0gdGhpcy5mZXRjaFZhbHVlKGNvbHVtbi5pdGVtVHlwZSwgdmFsdWUsIGNoaWxkQ29sdW1uLmlkKTtcblx0XHRcdFx0ZGVzdGluYXRpb25bY2hpbGRDb2x1bW4ucGF0aF0gPSBjaGlsZFZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoY2hpbGRDb2x1bW4uaXNMZWFmKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0dGhpcy5mZXRjaERlcml2ZWRWYWx1ZXMoY2hpbGRWYWx1ZSwgY2hpbGRDb2x1bW4sIGRlc3RpbmF0aW9uKTtcblx0XHR9XG5cdH1cblxuXHRmZXRjaE9iamVjdCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IHN0cmluZyB8IEl0ZW1JZCwgaW5jbHVkZUxpbmtzOiBib29sZWFuID0gZmFsc2UpOiBhbnkge1xuXHRcdGlmICh0aGlzLml0ZW1zW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXG5cdFx0aWYgKGl0ZW0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRjb25zdCBkYXRhID0gdGhpcy5pdGVtc1tpdGVtVHlwZV1baXRlbUlkXS5kYXRhO1xuXHRcdGNvbnN0IHJlc3VsdDogYW55ID0ge307XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcblx0XHRcdHJlc3VsdFt0aGlzLmNvbHVtbnNbaXRlbVR5cGVdW2ldLmlkXSA9IGRhdGFbaV07XG5cdFx0fVxuXG5cdFx0aWYgKGluY2x1ZGVMaW5rcykge1xuXHRcdFx0Y29uc3QgbGlua3MgPSB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdLmxpbmtzO1xuXHRcdFx0cmVzdWx0Ll9fbGlua3MgPSB7fTtcblxuXHRcdFx0Zm9yIChjb25zdCBsaW5rVHlwZSBpbiBsaW5rcylcblx0XHRcdFx0cmVzdWx0Ll9fbGlua3NbbGlua1R5cGVdID1cblx0XHRcdFx0XHR0aGlzLmZldGNoT2JqZWN0QXJyYXkobGlua1R5cGUsIGluY2x1ZGVMaW5rcywgbGlua3NbbGlua1R5cGVdKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0ZmV0Y2hPYmplY3RBcnJheSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpbmNsdWRlTGlua3M6IGJvb2xlYW4sIGlkQXJyYXk6IEl0ZW1JZFtdKTogYW55W10ge1xuXHRcdGNvbnN0IHJlc3VsdDogYW55W10gPSBbXTtcblxuXHRcdGlmIChpZEFycmF5ID09PSBudWxsKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSlcblx0XHRcdFx0cmVzdWx0LnB1c2godGhpcy5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBpbmNsdWRlTGlua3MpKTtcblxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cblx0XHRpZiAoaWRBcnJheSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0aWRBcnJheSA9IHRoaXMubGlua3NbaXRlbVR5cGVdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgaWRBcnJheSlcblx0XHRcdHJlc3VsdC5wdXNoKHRoaXMuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgaW5jbHVkZUxpbmtzKSk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0ZmV0Y2hPYmplY3RNYXAgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgY29sdW1uSWQ6IHN0cmluZywgaW5jbHVkZUxpbmtzPzogYm9vbGVhbiwgcmV0dXJuS2V5cz86IGJvb2xlYW4pIHtcblx0XHRjb25zdCBjb2x1bW5JbmRleCA9IHRoaXMuY29sdW1uSW5kZXhNYXBbaXRlbVR5cGVdW2NvbHVtbklkXTtcblx0XHRjb25zdCByZXN1bHQ6IHtba2V5OiBzdHJpbmddOiBhbnl9ID0ge307XG5cdFx0Y29uc3Qga2V5czogc3RyaW5nW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuaXRlbXNbaXRlbVR5cGVdKSB7XG5cdFx0XHRjb25zdCBrZXkgPSB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdLmRhdGFbY29sdW1uSW5kZXhdO1xuXHRcdFx0a2V5cy5wdXNoKGtleSk7XG5cdFx0XHRyZXN1bHRba2V5XSA9IHRoaXMuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgaW5jbHVkZUxpbmtzKTtcblx0XHR9XG5cblx0XHRpZiAocmV0dXJuS2V5cylcblx0XHRcdHJldHVybiB7cmVzdWx0OiByZXN1bHQsIGtleXM6IGtleXN9O1xuXHRcdGVsc2Vcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmZXRjaEZpZWxkTWFwIChpdGVtVHlwZTogSXRlbVR5cGUsIGNvbHVtbklkOiBzdHJpbmcpIHtcblx0XHRjb25zdCBpbmRleCA9IHRoaXMuY29sdW1uSW5kZXhNYXBbaXRlbVR5cGVdW2NvbHVtbklkXTtcblx0XHRjb25zdCByZXN1bHQ6IHtbaXRlbUlkOiBudW1iZXJdOiBGaWVsZE1hcH0gPSB7fTtcblxuXHRcdGZvciAoY29uc3QgaWQgaW4gdGhpcy5pdGVtc1tpdGVtVHlwZV0pXG5cdFx0XHRyZXN1bHRbaWRdID0gdGhpcy5pdGVtc1tpdGVtVHlwZV1baWRdLmRhdGFbaW5kZXhdO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGZldGNoQ29sdW1uQXJyYXkgKGl0ZW1UeXBlOiBJdGVtVHlwZSk6IFJlc3BvbnNlQ29sdW1uW10ge1xuXHRcdGNvbnN0IHJlc3VsdDogUmVzcG9uc2VDb2x1bW5bXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBhcGlDb2x1bW4gb2YgdGhpcy5jb2x1bW5zW2l0ZW1UeXBlXSlcblx0XHRcdHJlc3VsdC5wdXNoKGFwaUNvbHVtbik7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0ZmV0Y2hDb2x1bW5PYmplY3QgKGl0ZW1UeXBlOiBJdGVtVHlwZSk6IFJlc3BvbnNlQ29sdW1uIHtcblx0XHRyZXR1cm4gdGhpcy5jb2x1bW5NYXBbaXRlbVR5cGVdO1xuXHR9XG5cblx0ZmV0Y2hDb2x1bW5zT2JqZWN0ICgpOiB7W2l0ZW1UeXBlOiBzdHJpbmddOiBSZXNwb25zZUNvbHVtbn0ge1xuXHRcdHJldHVybiB0aGlzLmNvbHVtbk1hcDtcblx0fVxuXG5cdGNyZWF0ZVJlc291cmNlIChpdGVtVHlwZTogSXRlbVR5cGUsIGlkOiBJdGVtSWQpOiB7b2JqZWN0OiBGaWVsZE1hcCwgbGlua3M6IGFueX0ge1xuXHRcdHJldHVybiB7XG5cdFx0XHRvYmplY3Q6IHRoaXMuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGlkKSxcblx0XHRcdGxpbmtzOiB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpZF0ubGlua3Ncblx0XHR9O1xuXHR9XG5cblx0aGFzSXRlbXMgKGl0ZW1UeXBlOiBJdGVtVHlwZSk6IGJvb2xlYW4ge1xuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSlcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Z2V0SWRBcnJheSAoaXRlbVR5cGU6IEl0ZW1UeXBlKTogSXRlbUlkW10ge1xuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUlkW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuaXRlbXNbaXRlbVR5cGVdKSB7XG5cdFx0XHRyZXN1bHQucHVzaChwYXJzZUludChpdGVtSWQsIDEwKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxufVxuIiwiZXhwb3J0IGVudW0gRU5UUllfU1RBVFVTIHtcblx0Q0FDSEVEID0gJ2NhY2hlZCcsXG5cdExPQ0FMID0gJ2xvY2FsJyxcblx0UFJPTUlTRUQgPSAncHJvbWlzZWQnLFxuXHRFWFBBTkQgPSAnZXhwYW5kJyxcblx0UFJPTUlTRURfRVhQQU5EID0gJ3Byb21pc2VkLWV4cGFuZCcsXG5cdEVYUEFORF9MT0NBTCA9ICdleHBhbmQtbG9jYWwnLFxuXHRQUk9NSVNFRF9FWFBBTkRfTE9DQUwgPSAncHJvbWlzZWQtZXhwYW5kLWxvY2FsJyxcblx0UkVTT0xWRSA9ICdyZXNvbHZlJyxcblx0UkVTT0xWRV9WQUxVRVMgPSAncmVzb2x2ZS12YWx1ZXMnXG59XG5cbmV4cG9ydCBjb25zdCBBTExfUEVSTUlTU0lPTlMgPSAnNyc7XG5cbmV4cG9ydCBjb25zdCBDT0xVTU5fU0VQRVJBVE9SID0gJz4nO1xuZXhwb3J0IGNvbnN0IFJFTkRFUl9BU19TRVBFUkFUT1IgPSAnOic7XG5cbmV4cG9ydCBjb25zdCBORVdfUFJFRklYOiBzdHJpbmcgPSAnLTEnO1xuZXhwb3J0IGNvbnN0IERVUExJQ0FURV9QUkVGSVg6IHN0cmluZyA9ICctMic7XG5cbmV4cG9ydCBjb25zdCBORVdfS0VZV09SRDogc3RyaW5nID0gJ25ldy0nO1xuZXhwb3J0IGNvbnN0IERVUExJQ0FURV9LRVlXT1JEOiBzdHJpbmcgPSAnZHVwLSc7XG4iLCJpbXBvcnQgeyBFTlRSWV9TVEFUVVMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEVudHJ5U3RhdHVzLCBFbnRyeVN0YXR1c01hcCwgSXRlbUlkLCBJdGVtVHlwZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIEJhdGNoU3RhdHVzPFQ+IHtcblx0cmVhZG9ubHkgcmVxdWVzdFN0YXR1cyA9IFtcblx0XHRFTlRSWV9TVEFUVVMuUkVTT0xWRSxcblx0XHRFTlRSWV9TVEFUVVMuUkVTT0xWRV9WQUxVRVMsXG5cdFx0RU5UUllfU1RBVFVTLkVYUEFORCxcblx0XHRFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EXG5cdF07XG5cblx0cmVhZG9ubHkgcmVtb3RlRXhwYW5kU3RhdHVzID0gW0VOVFJZX1NUQVRVUy5FWFBBTkQsIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkRdO1xuXG5cdHJlYWRvbmx5IGxvY2FsRXhwYW5kU3RhdHVzID0gW0VOVFJZX1NUQVRVUy5FWFBBTkRfTE9DQUwsIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkRfTE9DQUxdO1xuXG5cdGVudHJpZXM6IEVudHJ5U3RhdHVzTWFwPFQ+ID0ge307XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxuXHRcdHB1YmxpYyBpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cHVibGljIGdldEl0ZW1JZDogKGl0ZW1FbnRyeTogVCkgPT4gSXRlbUlkLFxuXHRcdHB1YmxpYyBnZXRQcm9taXNlOiAoaXRlbUVudHJ5OiBUKSA9PiBQcm9taXNlSW50ZXJmYWNlPFQ+XG5cdCkge1xuXHRcdGZvciAoY29uc3Qgc3RhdHVzIGluIEVOVFJZX1NUQVRVUylcblx0XHRcdHRoaXMuZW50cmllc1tFTlRSWV9TVEFUVVNbc3RhdHVzXV0gPSBbXTtcblx0fVxuXG5cdGFkZCAoZW50cnlTdGF0dXM6IEVudHJ5U3RhdHVzPFQ+KTogdm9pZCB7XG5cdFx0dGhpcy5lbnRyaWVzW2VudHJ5U3RhdHVzLnN0YXR1c10ucHVzaChlbnRyeVN0YXR1cy5lbnRyeSk7XG5cdH1cblxuXHRoYXNFbnRyaWVzIChzdGF0dXNBcnJheTogRU5UUllfU1RBVFVTW10pOiBib29sZWFuIHtcblx0XHRmb3IgKGNvbnN0IHN0YXR1cyBvZiBzdGF0dXNBcnJheSkge1xuXHRcdFx0aWYgKHRoaXMuZW50cmllc1tzdGF0dXNdLmxlbmd0aCA+IDApXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGhhc1JlcXVlc3RzICgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5oYXNFbnRyaWVzKHRoaXMucmVxdWVzdFN0YXR1cyk7XG5cdH1cblxuXHRmb3JFYWNoRW50cnkgKHN0YXR1c0FycmF5OiBFTlRSWV9TVEFUVVNbXSwgY2FsbGJhY2s6IChlbnRyeTogVCwgaXRlbUlkOiBJdGVtSWQpID0+IHZvaWQpOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IHN0YXR1cyBvZiBzdGF0dXNBcnJheSkge1xuXHRcdFx0Y29uc3Qgc3RhdHVzRW50cmllcyA9IHRoaXMuZW50cmllc1tzdGF0dXNdO1xuXG5cdFx0XHRmb3IgKGNvbnN0IHN0YXR1c0VudHJ5IG9mIHN0YXR1c0VudHJpZXMpXG5cdFx0XHRcdGNhbGxiYWNrKHN0YXR1c0VudHJ5LCB0aGlzLmdldEl0ZW1JZChzdGF0dXNFbnRyeSkpO1xuXHRcdH1cblx0fVxuXG5cdHJlZHVjZUVudHJpZXM8VT4gKFxuXHRcdHN0YXR1c0FycmF5OiBFTlRSWV9TVEFUVVNbXSxcblx0XHRjYWxsYmFjazogKGVudHJ5OiBULCBpdGVtSWQ6IEl0ZW1JZCwgZGVzdGluYXRpb246IFUpID0+IHZvaWQsXG5cdFx0ZGVzdGluYXRpb246IFVcblx0KTogVSB7XG5cdFx0Zm9yIChjb25zdCBzdGF0dXMgb2Ygc3RhdHVzQXJyYXkpIHtcblx0XHRcdGNvbnN0IHN0YXR1c0VudHJpZXMgPSB0aGlzLmVudHJpZXNbc3RhdHVzXTtcblxuXHRcdFx0Zm9yIChjb25zdCBzdGF0dXNFbnRyeSBvZiBzdGF0dXNFbnRyaWVzKVxuXHRcdFx0XHRjYWxsYmFjayhzdGF0dXNFbnRyeSwgdGhpcy5nZXRJdGVtSWQoc3RhdHVzRW50cnkpLCBkZXN0aW5hdGlvbik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRlc3RpbmF0aW9uO1xuXHR9XG5cblx0cmVkdWNlQWxsRW50cmllczxVPiAoXG5cdFx0Y2FsbGJhY2s6IChlbnRyeTogVCwgaXRlbUlkOiBJdGVtSWQsIGRlc3RpbmF0aW9uOiBVKSA9PiB2b2lkLFxuXHRcdGRlc3RpbmF0aW9uOiBVXG5cdCk6IFUge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XG5cblx0XHRmb3IgKGNvbnN0IHN0YXR1cyBpbiBlbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBzdGF0dXNFbnRyaWVzID0gZW50cmllc1tzdGF0dXNdO1xuXG5cdFx0XHRmb3IgKGNvbnN0IHN0YXR1c0VudHJ5IG9mIHN0YXR1c0VudHJpZXMpXG5cdFx0XHRcdGNhbGxiYWNrKHN0YXR1c0VudHJ5LCB0aGlzLmdldEl0ZW1JZChzdGF0dXNFbnRyeSksIGRlc3RpbmF0aW9uKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGVzdGluYXRpb247XG5cdH1cblxuXHRnZXRQcm9taXNlcyAoKTogUHJvbWlzZUludGVyZmFjZTxUW10+IHtcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwoXG5cdFx0XHR0aGlzLnJlZHVjZUVudHJpZXMoXG5cdFx0XHRcdFtFTlRSWV9TVEFUVVMuUFJPTUlTRUQsIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkRdLFxuXHRcdFx0XHQoZW50cnk6IFQsIF9pdGVtSWQ6IEl0ZW1JZCwgZGVzdGluYXRpb24pID0+IHtcblx0XHRcdFx0XHRkZXN0aW5hdGlvbi5wdXNoKHRoaXMuZ2V0UHJvbWlzZShlbnRyeSkpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQ8QXJyYXk8UHJvbWlzZUludGVyZmFjZTxUPj4+IFtdXG5cdFx0XHQpXG5cdFx0KTtcblx0fVxuXG5cdGdldEl0ZW1JZHMgKHN0YXR1c0FycmF5OiBFTlRSWV9TVEFUVVNbXSk6IEl0ZW1JZFtdIHtcblx0XHRyZXR1cm4gdGhpcy5yZWR1Y2VFbnRyaWVzKFxuXHRcdFx0c3RhdHVzQXJyYXksXG5cdFx0XHQoXywgaXRlbUlkLCBkZXN0aW5hdGlvbikgPT4ge1xuXHRcdFx0XHRkZXN0aW5hdGlvbi5wdXNoKGl0ZW1JZCk7XG5cdFx0XHR9LFxuXHRcdFx0PEl0ZW1JZFtdPiBbXVxuXHRcdCk7XG5cdH1cblxuXHRnZXRSZXF1ZXN0SWRzICgpOiBJdGVtSWRbXSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0SXRlbUlkcyh0aGlzLnJlcXVlc3RTdGF0dXMpO1xuXHR9XG5cblx0Z2V0QXJyYXkgKHN0YXR1c0FycmF5PzogRU5UUllfU1RBVFVTW10pOiBUW10ge1xuXHRcdGNvbnN0IGNhbGxiYWNrID0gKGVudHJ5OiBULCBfaXRlbUlkOiBJdGVtSWQsIGRlc3RpbmF0aW9uOiBUW10pID0+IHtcblx0XHRcdGRlc3RpbmF0aW9uLnB1c2goZW50cnkpO1xuXHRcdH07XG5cblx0XHRpZiAoc3RhdHVzQXJyYXkgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLnJlZHVjZUFsbEVudHJpZXMoY2FsbGJhY2ssIDxUW10+IFtdKTtcblxuXHRcdHJldHVybiB0aGlzLnJlZHVjZUVudHJpZXMoc3RhdHVzQXJyYXksIGNhbGxiYWNrLCA8VFtdPiBbXSk7XG5cdH1cblxuXHRnZXRNYXAgKCk6IHtbaXRlbUlkOiBzdHJpbmddOiBUfSB7XG5cdFx0cmV0dXJuIHRoaXMucmVkdWNlQWxsRW50cmllcyhcblx0XHRcdChlbnRyeTogVCwgaXRlbUlkOiBJdGVtSWQsIGRlc3RpbmF0aW9uOiB7W2l0ZW1JZDogbnVtYmVyXTogVH0pID0+IHtcblx0XHRcdFx0ZGVzdGluYXRpb25baXRlbUlkXSA9IGVudHJ5O1xuXHRcdFx0fSxcblx0XHRcdHt9XG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlLCBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IEVudHJ5UGFyZW50LCBFbnRyeVBhcmVudE51bGwsIEl0ZW1FbnRyeU1hcCwgSXRlbUlkLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgY3JlYXRlUGF0aCwgZ2V0UGF0aCB9IGZyb20gJy4vVXRpbCc7XG5cbmV4cG9ydCB0eXBlIERlbGV0ZU1hcEVudHJ5ID0ge2l0ZW06IEl0ZW1FbnRyeSwgcGFyZW50OiBFbnRyeVBhcmVudE51bGx9O1xuXG5leHBvcnQgdHlwZSBNb3ZlTWFwRW50cnkgPSB7aXRlbTogSXRlbUVudHJ5LCBwYXJlbnQ6IEVudHJ5UGFyZW50fTtcblxuZXhwb3J0IHR5cGUgQ3JlYXRlQ29tcGlsYXRpb24gPSB7XG5cdFtwYXJlbnRUeXBlOiBzdHJpbmddOiB7XG5cdFx0W3BhcmVudElkOiBudW1iZXJdOiBJdGVtRW50cnlNYXBcblx0fVxufTtcblxuZXhwb3J0IHR5cGUgRGVsZXRlQ29tcGlsYXRpb24gPSB7XG5cdFtpdGVtVHlwZTogc3RyaW5nXTogSXRlbUVudHJ5W11cbn07XG5cbmV4cG9ydCB0eXBlIFVwZGF0ZUNvbXBpbGF0aW9uID0gSXRlbUVudHJ5TWFwO1xuXG5leHBvcnQgdHlwZSBNb3ZlQ29tcGlsYXRpb24gPSB7XG5cdFtwYXJlbnRUeXBlOiBzdHJpbmddOiB7XG5cdFx0W3BhcmVudElkOiBudW1iZXJdOiBNb3ZlTWFwRW50cnlbXVxuXHR9XG59O1xuXG5leHBvcnQgY2xhc3MgQ2hhbmdlc0NvbXBpbGF0aW9uIHtcblx0Y29tcGlsYXRpb246IHtcblx0XHRjcmVhdGU6IENyZWF0ZUNvbXBpbGF0aW9uLFxuXHRcdGRlbGV0ZTogRGVsZXRlQ29tcGlsYXRpb24sXG5cdFx0dXBkYXRlOiBVcGRhdGVDb21waWxhdGlvbixcblx0XHRtb3ZlOiBNb3ZlQ29tcGlsYXRpb25cblx0fSA9IHtcblx0XHRjcmVhdGU6IHt9LFxuXHRcdGRlbGV0ZToge30sXG5cdFx0dXBkYXRlOiB7fSxcblx0XHRtb3ZlOiB7fVxuXHR9O1xuXG5cdGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uQ2FjaGU7XG5cblx0cHJpdmF0ZSBtb3ZlQXJyYXk6IEl0ZW1FbnRyeVtdID0gW107XG5cblx0cHJpdmF0ZSBkZWxldGVNYXA6IHtcblx0XHRbaXRlbVR5cGU6IHN0cmluZ106IHtcblx0XHRcdFtpdGVtSWQ6IG51bWJlcl06IERlbGV0ZU1hcEVudHJ5XG5cdFx0fVxuXHR9ID0ge307XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlRmFjdG9yeTogQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXG5cdFx0cHVibGljIHNpbmdsZUl0ZW1zOiBJdGVtRW50cnlbXSxcblx0XHRjb2xsZWN0aW9uRW50cmllczogQ29sbGVjdGlvbkVudHJ5W11cblx0KSB7XG5cdFx0dGhpcy5jb2xsZWN0aW9ucyA9IHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeS5jb25zdHJ1Y3QoKTtcblxuXHRcdHRoaXMucHJvY2Vzc1NpbmdsZUl0ZW1zKCk7XG5cdFx0dGhpcy5wcm9jZXNzQ29sbGVjdGlvbnMoY29sbGVjdGlvbkVudHJpZXMpO1xuXHRcdHRoaXMucG9zdFByb2Nlc3MoKTtcblx0fVxuXG5cdGdldERlZmF1bHRQYXJlbnQgKCk6IEVudHJ5UGFyZW50IHtcblx0XHRyZXR1cm4ge2l0ZW1UeXBlOiAnVm9pZCcsIGl0ZW1JZDogMH07XG5cdH1cblxuXHRhZGRNb3ZlRW50cnkgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KTogdm9pZCB7XG5cdFx0dGhpcy5tb3ZlQXJyYXkucHVzaChpdGVtRW50cnkpO1xuXHR9XG5cblx0YWRkRGVsZXRlRW50cnkgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCk6IHZvaWQge1xuXHRcdGNyZWF0ZVBhdGgoXG5cdFx0XHR0aGlzLmRlbGV0ZU1hcCxcblx0XHRcdFtpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWRdLFxuXHRcdFx0W3t9LCB7aXRlbTogaXRlbUVudHJ5LCBwYXJlbnQ6IHBhcmVudH1dXG5cdFx0KTtcblx0fVxuXG5cdGFkZFVwZGF0ZUVudHJ5IChpdGVtRW50cnk6IEl0ZW1FbnRyeSk6IHZvaWQge1xuXHRcdGNyZWF0ZVBhdGgoXG5cdFx0XHR0aGlzLmNvbXBpbGF0aW9uLnVwZGF0ZSxcblx0XHRcdFtpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWRdLFxuXHRcdFx0W3t9LCBpdGVtRW50cnldXG5cdFx0KTtcblx0fVxuXG5cdGFkZENyZWF0ZUVudHJ5IChpdGVtRW50cnk6IEl0ZW1FbnRyeSk6IHZvaWQge1xuXHRcdGxldCBwYXJlbnQgPSBpdGVtRW50cnkucGFyZW50O1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdHBhcmVudCA9IHRoaXMuZ2V0RGVmYXVsdFBhcmVudCgpO1xuXG5cdFx0Y3JlYXRlUGF0aChcblx0XHRcdHRoaXMuY29tcGlsYXRpb24uY3JlYXRlLFxuXHRcdFx0W3BhcmVudC5pdGVtVHlwZSwgcGFyZW50Lml0ZW1JZCwgaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcblx0XHRcdFt7fSwge30sIHt9LCBpdGVtRW50cnldXG5cdFx0KTtcblx0fVxuXG5cdGNvbnRhaW5zQ3JlYXRlRW50cnkgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQpOiBib29sZWFuIHtcblx0XHRjb25zdCBjcmVhdGVDb21waWxhdGlvbiA9IHRoaXMuY29tcGlsYXRpb24uY3JlYXRlO1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRUeXBlIGluIGNyZWF0ZUNvbXBpbGF0aW9uKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGNyZWF0ZUNvbXBpbGF0aW9uW3BhcmVudFR5cGVdKSB7XG5cdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeU1hcCA9IGNyZWF0ZUNvbXBpbGF0aW9uW3BhcmVudFR5cGVdW3BhcmVudElkXVtpdGVtVHlwZV07XG5cblx0XHRcdFx0aWYgKGl0ZW1FbnRyeU1hcCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdGZvciAoY29uc3Qga2V5IGluIGl0ZW1FbnRyeU1hcCkge1xuXHRcdFx0XHRcdGlmIChpdGVtRW50cnlNYXBba2V5XS5pdGVtSWQgPT09IGl0ZW1JZClcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cHJpdmF0ZSBjcmVhdGVEZWxldGVDb21waWxhdGlvbiAoKTogdm9pZCB7XG5cdFx0Y29uc3QgZGVsZXRlTWFwID0gdGhpcy5kZWxldGVNYXA7XG5cdFx0Y29uc3QgZGVsZXRlQ29tcGlsYXRpb24gPSB0aGlzLmNvbXBpbGF0aW9uLmRlbGV0ZTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gZGVsZXRlTWFwKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBkZWxldGVNYXBbaXRlbVR5cGVdKSB7XG5cdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeTogSXRlbUVudHJ5ID0gZGVsZXRlTWFwW2l0ZW1UeXBlXVtpdGVtSWRdLml0ZW07XG5cblx0XHRcdFx0aWYgKGRlbGV0ZUNvbXBpbGF0aW9uW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdGRlbGV0ZUNvbXBpbGF0aW9uW2l0ZW1UeXBlXSA9IFtdO1xuXG5cdFx0XHRcdGRlbGV0ZUNvbXBpbGF0aW9uW2l0ZW1UeXBlXS5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cG9zdFByb2Nlc3MgKCk6IHZvaWQge1xuXHRcdGNvbnN0IGRlbGV0ZU1hcCA9IHRoaXMuZGVsZXRlTWFwO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgdGhpcy5tb3ZlQXJyYXkpIHtcblx0XHRcdGNvbnN0IGRlbGV0ZUVudHJ5OiBEZWxldGVNYXBFbnRyeSA9IGdldFBhdGgoZGVsZXRlTWFwLCBbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSk7XG5cblx0XHRcdGlmIChkZWxldGVFbnRyeSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0Ly8gYXNzdW1lIHRoZSBpdGVtRW50cnkgaGFzIGEgcGFyZW50IChvciBzb21ldGhpbmcgd2VudCBzZXJpb3VzbHkgd3JvbmcpXG5cdFx0XHRjb25zdCB7aXRlbVR5cGU6IHBhcmVudFR5cGUsIGl0ZW1JZDogcGFyZW50SWR9ID0gPEVudHJ5UGFyZW50PiBpdGVtRW50cnkucGFyZW50O1xuXG5cdFx0XHRpZiAodGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZChwYXJlbnRJZCkgJiYgIXRoaXMuY29udGFpbnNDcmVhdGVFbnRyeShwYXJlbnRUeXBlLCBwYXJlbnRJZCkpIHtcblx0XHRcdFx0aXRlbUVudHJ5LnBhcmVudCA9IGRlbGV0ZUVudHJ5LnBhcmVudDtcblxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Y3JlYXRlUGF0aDxEZWxldGVNYXBFbnRyeVtdPih0aGlzLmNvbXBpbGF0aW9uLm1vdmUsIFtwYXJlbnRUeXBlLCBwYXJlbnRJZF0sIFt7fSwgW11dKS5wdXNoKGRlbGV0ZUVudHJ5KTtcblxuXHRcdFx0ZGVsZXRlIGRlbGV0ZU1hcFtpdGVtRW50cnkuaXRlbVR5cGVdW2l0ZW1FbnRyeS5pdGVtSWRdO1xuXHRcdH1cblxuXHRcdHRoaXMuY3JlYXRlRGVsZXRlQ29tcGlsYXRpb24oKTtcblx0fVxuXG5cdHByaXZhdGUgcHJvY2Vzc1NpbmdsZUl0ZW1zICgpOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiB0aGlzLnNpbmdsZUl0ZW1zKSB7XG5cdFx0XHRpZiAoaXRlbUVudHJ5LmlzTG9jYWwoKSlcblx0XHRcdFx0dGhpcy5hZGRDcmVhdGVFbnRyeShpdGVtRW50cnkpO1xuXHRcdFx0ZWxzZSBpZiAoaXRlbUVudHJ5Lmhhc0NoYW5nZXMoKSlcblx0XHRcdFx0dGhpcy5hZGRVcGRhdGVFbnRyeShpdGVtRW50cnkpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgcHJvY2Vzc0NvbGxlY3Rpb25zIChjb2xsZWN0aW9uRW50cmllczogQ29sbGVjdGlvbkVudHJ5W10pOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiBjb2xsZWN0aW9uRW50cmllcykge1xuXHRcdFx0dGhpcy5jb2xsZWN0aW9ucy5hZGQoY29sbGVjdGlvbkVudHJ5KTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0RlZmVycmVkKCkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRsZXQgYWRkZWRJdGVtczogSXRlbUVudHJ5W107XG5cdFx0XHRsZXQgcmVtb3ZlZEl0ZW1zOiBJdGVtRW50cnlbXTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0xvY2FsKCkpIHtcblx0XHRcdFx0YWRkZWRJdGVtcyA9IGNvbGxlY3Rpb25FbnRyeS5pdGVtcztcblx0XHRcdFx0cmVtb3ZlZEl0ZW1zID0gW107XG5cdFx0XHR9IGVsc2UgaWYgKGNvbGxlY3Rpb25FbnRyeS5oYXNFZGl0UmVzb3VyY2VzKSB7XG5cdFx0XHRcdGFkZGVkSXRlbXMgPSBjb2xsZWN0aW9uRW50cnkuZ2V0QWRkZWRJdGVtcygpO1xuXHRcdFx0XHRyZW1vdmVkSXRlbXMgPSBjb2xsZWN0aW9uRW50cnkuZ2V0UmVtb3ZlZEl0ZW1zKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhZGRlZEl0ZW1zID0gW107XG5cdFx0XHRcdHJlbW92ZWRJdGVtcyA9IFtdO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGNvbnN0IGFkZGVkSXRlbSBvZiBhZGRlZEl0ZW1zKSB7IC8vIGl0IGlzIHBvc3NpYmxlIHRvIG1vdmUgYW4gZXhpc3RpbmcgaXRlbSB0byBhIG5ldyBjb2xsZWN0aW9uXG5cdFx0XHRcdGlmIChhZGRlZEl0ZW0uaXNMb2NhbCgpKVxuXHRcdFx0XHRcdHRoaXMuYWRkQ3JlYXRlRW50cnkoYWRkZWRJdGVtKTtcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdHRoaXMuYWRkTW92ZUVudHJ5KGFkZGVkSXRlbSk7XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoY29uc3QgcmVtb3ZlZEl0ZW0gb2YgcmVtb3ZlZEl0ZW1zKVxuXHRcdFx0XHR0aGlzLmFkZERlbGV0ZUVudHJ5KHJlbW92ZWRJdGVtLCBjb2xsZWN0aW9uRW50cnkucGFyZW50KTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5oYXNJdGVtRWRpdFJlc291cmNlcykge1xuXHRcdFx0XHRjb25zdCB1cGRhdGVkSXRlbXMgPSBjb2xsZWN0aW9uRW50cnkuZ2V0VXBkYXRlZEl0ZW1zKCk7XG5cblx0XHRcdFx0Zm9yIChjb25zdCB1cGRhdGVkSXRlbSBvZiB1cGRhdGVkSXRlbXMpXG5cdFx0XHRcdFx0dGhpcy5hZGRVcGRhdGVFbnRyeSh1cGRhdGVkSXRlbSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG4iLCJpbXBvcnQge1xuXHRBcGlGb3JtYXR0ZXIsXG5cdENoYW5nZXNDb21waWxhdGlvbixcblx0Q29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0Q29sbGVjdGlvbkhhbmRsZXIsXG5cdENvbHVtbkluZm8sXG5cdERlbGV0ZUNvbXBpbGF0aW9uLFxuXHRJdGVtSGFuZGxlcixcblx0TW92ZUNvbXBpbGF0aW9uLFxuXHRNb3ZlTWFwRW50cnksXG5cdFVwZGF0ZUNvbXBpbGF0aW9uXG59IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHtcblx0Q2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcblx0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0Q3JlYXRlUmVxdWVzdEZhY3RvcnksXG5cdFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSwgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlTGlicmFyeUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtcblx0QXBpUmVxdWVzdE1vdmVJdGVtcyxcblx0QXBpUmVzcG9uc2UsXG5cdENyZWF0ZVJlcXVlc3RFbnRyeSxcblx0Q3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCxcblx0RW50cnlQYXJlbnQsIEZpZWxkTWFwLFxuXHRJdGVtSWQsXG5cdEl0ZW1JZENvbnZlcnNpb25NYXAsXG5cdEl0ZW1UeXBlLFxuXHRQcm9taXNlSW50ZXJmYWNlXG59IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgY3JlYXRlUGF0aCwgZ2V0UGF0aCwgaGFzUHJvcGVydGllcywgaW5BcnJheSB9IGZyb20gJy4vVXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBDaGFuZ2VzUHJvY2Vzc29yIHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5OiBDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkVudHJ5U2VydmljZTogQ29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjcmVhdGVSZXF1ZXN0RmFjdG9yeTogQ3JlYXRlUmVxdWVzdEZhY3RvcnksXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZSxcblx0XHRwcml2YXRlIHJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxuXHQpIHtcblx0fVxuXG5cdGJ1aWxkTW92ZVJlcXVlc3QgKGNvbXBpbGF0aW9uRW50cmllczogTW92ZU1hcEVudHJ5W10pOiBBcGlSZXF1ZXN0TW92ZUl0ZW1zIHtcblx0XHRjb25zdCByZXN1bHQ6IEFwaVJlcXVlc3RNb3ZlSXRlbXMgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgY29tcGlsYXRpb25FbnRyeSBvZiBjb21waWxhdGlvbkVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGNvbXBpbGF0aW9uRW50cnkuaXRlbTtcblx0XHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xuXG5cdFx0XHRpZiAocmVzdWx0W2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRyZXN1bHRbaXRlbVR5cGVdID0gW107XG5cblx0XHRcdHJlc3VsdFtpdGVtVHlwZV0ucHVzaChpdGVtRW50cnkuaXRlbUlkKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0TWFwVmFsdWUgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQsIG1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCk6IEl0ZW1JZCB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKG1hcCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdGlmIChtYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0cmV0dXJuIG1hcFtpdGVtVHlwZV1baXRlbUlkXTtcblx0fVxuXG5cdHByaXZhdGUgZXhlY3V0ZUNyZWF0ZVJlcXVlc3RzIChcblx0XHRjaGFuZ2VzQ29tcGlsYXRpb246IENoYW5nZXNDb21waWxhdGlvbixcblx0XHRwYXJhbWV0ZXJzOiBDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwLFxuXHRcdGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAsXG5cdFx0YnJlYWt1cEJ5UGFyZW50PzogYm9vbGVhbixcblx0XHRvbkFmdGVyQ3JlYXRlQ2FsbGJhY2s/OiAoY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCkgPT4gdm9pZFxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1JZENvbnZlcnNpb25NYXA+IHtcblx0XHRjb25zdCByZXF1ZXN0cyA9IHRoaXMuY3JlYXRlUmVxdWVzdEZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0Y2hhbmdlc0NvbXBpbGF0aW9uLmNvbXBpbGF0aW9uLmNyZWF0ZSxcblx0XHRcdGNoYW5nZXNDb21waWxhdGlvbi5jb2xsZWN0aW9ucyxcblx0XHRcdHBhcmFtZXRlcnMsXG5cdFx0XHRicmVha3VwQnlQYXJlbnRcblx0XHQpLnJ1bigpO1xuXG5cdFx0Y29uc3QgcmVzcG9uc2VzOiBBcnJheTxQcm9taXNlSW50ZXJmYWNlPGFueT4+ID0gW107XG5cblx0XHRmb3IgKGNvbnN0IHJlcXVlc3Qgb2YgcmVxdWVzdHMpXG5cdFx0XHRyZXNwb25zZXMucHVzaCh0aGlzLmV4ZWN1dGVDcmVhdGVSZXF1ZXN0KHJlcXVlc3QsIGNvbnZlcnNpb25NYXApLnRoZW4obm90aWZ5KSk7XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocmVzcG9uc2VzKS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gY29udmVyc2lvbk1hcDtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXG5cdFx0ZnVuY3Rpb24gbm90aWZ5IChyZXN1bHQ6IGFueSkge1xuXHRcdFx0aWYgKG9uQWZ0ZXJDcmVhdGVDYWxsYmFjayAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRvbkFmdGVyQ3JlYXRlQ2FsbGJhY2soY29udmVyc2lvbk1hcCk7XG5cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBleGVjdXRlQ3JlYXRlUmVxdWVzdCAoXG5cdFx0cmVxdWVzdFJlc291cmNlOiBDcmVhdGVSZXF1ZXN0RW50cnksXG5cdFx0Y29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcFxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5yZXF1ZXN0U2tlbGV0b24ocmVxdWVzdFJlc291cmNlLnJlcXVlc3QpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlTWFwID0gcmVzcG9uc2UubWFwO1xuXHRcdFx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKTtcblx0XHRcdFx0Y29uc3QgaXRlbUVudHJpZXMgPSByZXF1ZXN0UmVzb3VyY2UuaXRlbXM7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBpdGVtRW50cmllcykge1xuXHRcdFx0XHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRcdHJlcXVlc3RSZXNvdXJjZS5yZXF1ZXN0LmNvbHVtbnNbaXRlbVR5cGVdLFxuXHRcdFx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zXG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGl0ZW1FbnRyaWVzW2l0ZW1UeXBlXSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5OiBJdGVtRW50cnkgPSBpdGVtRW50cmllc1tpdGVtVHlwZV1baXRlbUlkXTtcblx0XHRcdFx0XHRcdGNvbnN0IG5ld0l0ZW1JZCA9IHRoaXMuZ2V0TWFwVmFsdWUoaXRlbVR5cGUsIHBhcnNlSW50KGl0ZW1JZCwgMTApLCByZXNwb25zZU1hcCk7XG5cblx0XHRcdFx0XHRcdGlmIChuZXdJdGVtSWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oJ0NyZWF0ZSBmYWlsZWQhJywgaXRlbUVudHJ5KTtcblx0XHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNvbnN0IGZpZWxkcyA9IHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBuZXdJdGVtSWQpO1xuXHRcdFx0XHRcdFx0Y29uc3QgZXhwYW5kUmVzb3VyY2UgPSBjb2x1bW5FeHBhbnNpb24ucnVuKGl0ZW1FbnRyeS5jb2x1bW5zKTtcblxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5Lml0ZW1JZCA9IG5ld0l0ZW1JZDtcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS51cGRhdGVGaWVsZHMoXG5cdFx0XHRcdFx0XHRcdGZpZWxkcyxcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBuZXdJdGVtSWQsIGl0ZW1FbnRyeS5jb2x1bW5zLnJvb3QpLFxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0aWYgKGV4cGFuZFJlc291cmNlICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5leHBhbmQoXG5cdFx0XHRcdFx0XHRcdFx0ZmllbGRzLFxuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgbmV3SXRlbUlkLCBleHBhbmRSZXNvdXJjZS5kaWZmZXJlbmNlLnJvb3QpLFxuXHRcdFx0XHRcdFx0XHRcdGV4cGFuZFJlc291cmNlXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5hZGQoaXRlbUVudHJ5KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXF1ZXN0UmVzb3VyY2UuY29sbGVjdGlvbnMuYWRkVG9Db2xsZWN0aW9ucygpO1xuXG5cdFx0XHRcdC8vIGV4dGVuZCBjb252ZXJzaW9uIG1hcFxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHJlc3BvbnNlTWFwKSB7XG5cdFx0XHRcdFx0aWYgKGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0XHRjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXSA9IHt9O1xuXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gcmVzcG9uc2VNYXBbaXRlbVR5cGVdKVxuXHRcdFx0XHRcdFx0Y29udmVyc2lvbk1hcFtpdGVtVHlwZV1bcGFyc2VJbnQoaXRlbUlkLCAxMCldID0gcmVzcG9uc2VNYXBbaXRlbVR5cGVdW2l0ZW1JZF07XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBleGVjdXRlVXBkYXRlUmVxdWVzdHMgKGNvbXBpbGF0aW9uOiBVcGRhdGVDb21waWxhdGlvbiwgcGFyYW1ldGVyczogYW55KSB7XG5cdFx0Y29uc3QgcmVxdWVzdHM6IEFycmF5PFByb21pc2VJbnRlcmZhY2U8QXBpUmVzcG9uc2U+PiA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBjb21waWxhdGlvbilcblx0XHRcdHJlcXVlc3RzLnB1c2godGhpcy5leGVjdXRlVXBkYXRlUmVxdWVzdChpdGVtVHlwZSwgY29tcGlsYXRpb25baXRlbVR5cGVdLCBwYXJhbWV0ZXJzKSk7XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocmVxdWVzdHMpO1xuXHR9XG5cblx0cHJpdmF0ZSBleGVjdXRlVXBkYXRlUmVxdWVzdCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtRW50cmllczoge1tpdGVtSWQ6IG51bWJlcl06IEl0ZW1FbnRyeX0sIHBhcmFtZXRlck1hcDogYW55KSB7XG5cdFx0Y29uc3QgcmVxdWVzdDoge1tpdGVtVHlwZTogc3RyaW5nXToge1tpdGVtSWQ6IG51bWJlcl06IEZpZWxkTWFwfX0gPSB7fTtcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KCk7XG5cdFx0Y29uc3QgY29sbGVjdGlvbk1hdGNoZXIgPSB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmdldENvbGxlY3Rpb25NYXRjaGVyKCk7XG5cblx0XHRyZXF1ZXN0W2l0ZW1UeXBlXSA9IHt9O1xuXG5cdFx0Ly8gd2UgbmVlZCB0byBkbyB0aGUgZm9ybWF0UmVxdWVzdCBjYWxsIGhlcmUgKGZpZWxkcyBtaWdodCBoYXZlIGJlZW4gdXBkYXRlZClcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtRW50cmllcykge1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gaXRlbUVudHJpZXNbaXRlbUlkXTtcblx0XHRcdC8vIFJNQ29yZSB0b2RvOiB0eXBlXG5cdFx0XHRjb25zdCBpdGVtUmVxdWVzdDogYW55ID0gcmVxdWVzdFtpdGVtVHlwZV1baXRlbUlkXSA9IHt9O1xuXHRcdFx0Y29uc3QgcGFyYW1ldGVycyA9IGdldFBhdGgocGFyYW1ldGVyTWFwLCBbaXRlbVR5cGUsIGl0ZW1JZF0pO1xuXG5cdFx0XHRpdGVtUmVxdWVzdC52YWx1ZXMgPSBpdGVtRW50cnkuZm9ybWF0UmVxdWVzdCgpO1xuXG5cdFx0XHRpZiAocGFyYW1ldGVycyAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRpdGVtUmVxdWVzdC5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcblxuXHRcdFx0cmVxdWVzdENvbHVtbnMuZXhwYW5kKGl0ZW1FbnRyeS5jb2x1bW5zKTtcblx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyLmV4cGFuZChpdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNvbGxlY3Rpb25zV2l0aEZpdHRpbmdJdGVtcyA9IGNvbGxlY3Rpb25NYXRjaGVyLmdldENvbGxlY3Rpb25zV2l0aEZpdHRpbmdJdGVtcygpO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uIG9mIGNvbGxlY3Rpb25zV2l0aEZpdHRpbmdJdGVtcylcblx0XHRcdHJlcXVlc3RDb2x1bW5zLmV4cGFuZChjb2xsZWN0aW9uLmNvbHVtbnMpO1xuXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UudXBkYXRlSXRlbXMoaXRlbVR5cGUsIHJlcXVlc3QsIHJlcXVlc3RDb2x1bW5zLmdldCgpKS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdHJlcXVlc3RDb2x1bW5zLmdldCgpW2l0ZW1UeXBlXSxcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKVxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gaXRlbUVudHJpZXNbaXRlbUlkXTtcblx0XHRcdFx0XHRjb25zdCBmaWVsZHMgPSByZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKTtcblxuXHRcdFx0XHRcdGlmIChmaWVsZHMgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKCdVcGRhdGUgZmFpbGVkIScsIGl0ZW1FbnRyeSk7XG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjb25zdCBwcmV2aW91cyA9IHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoaXRlbUVudHJ5LmluaXRpYWwsIHt9LCBpdGVtRW50cnkuY29sdW1ucy5tYWluKTtcblxuXHRcdFx0XHRcdGl0ZW1FbnRyeVxuXHRcdFx0XHRcdFx0LnVwZGF0ZUZpZWxkcyhmaWVsZHMsIHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBpdGVtRW50cnkuY29sdW1ucy5yb290KSlcblx0XHRcdFx0XHRcdC5jYWxsT25DaGFuZ2UocHJldmlvdXMpO1xuXG5cdFx0XHRcdFx0Y29uc3QgZXhwYW5kUmVzb3VyY2UgPSBjb2x1bW5FeHBhbnNpb24ucnVuKGl0ZW1FbnRyeS5jb2x1bW5zKTtcblxuXHRcdFx0XHRcdGlmIChleHBhbmRSZXNvdXJjZSA9PT0gbnVsbClcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdFx0aXRlbUVudHJ5LmV4cGFuZChcblx0XHRcdFx0XHRcdGZpZWxkcyxcblx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBleHBhbmRSZXNvdXJjZS5kaWZmZXJlbmNlLnJvb3QpLFxuXHRcdFx0XHRcdFx0ZXhwYW5kUmVzb3VyY2Vcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIucmVtb3ZlRnJvbUFuZEFkZFRvQ29sbGVjdGlvbnMoKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBleGVjdXRlRGVsZXRlUmVxdWVzdHMgKGNvbXBpbGF0aW9uOiBEZWxldGVDb21waWxhdGlvbikge1xuXHRcdGNvbnN0IHJlcXVlc3RzOiBBcnJheTxQcm9taXNlSW50ZXJmYWNlPHZvaWQ+PiA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBjb21waWxhdGlvbikgLy8gY2xlYXJpbmcgbm90IG5lY2Vzc2FyeVxuXHRcdFx0cmVxdWVzdHMucHVzaCh0aGlzLmV4ZWN1dGVEZWxldGVSZXF1ZXN0KGl0ZW1UeXBlLCBjb21waWxhdGlvbltpdGVtVHlwZV0pKTtcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChyZXF1ZXN0cyk7XG5cdH1cblxuXHRwcml2YXRlIGV4ZWN1dGVEZWxldGVSZXF1ZXN0IChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSkge1xuXHRcdGNvbnN0IGlkQXJyYXk6IEl0ZW1JZFtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdGlkQXJyYXkucHVzaChpdGVtRW50cnkuaXRlbUlkKTtcblxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLmRlbGV0ZShpdGVtVHlwZSwgaWRBcnJheSkudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2VJZEFycmF5ID0gcmVzcG9uc2UuaXRlbXM7XG5cdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25NYXRjaGVyID0gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5nZXRDb2xsZWN0aW9uTWF0Y2hlcigpO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRcdFx0aWYgKCFpbkFycmF5KGl0ZW1FbnRyeS5pdGVtSWQsIHJlc3BvbnNlSWRBcnJheSkpXG5cdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oJ0RlbGV0ZSBmYWlsZWQhJywgaXRlbUVudHJ5KTtcblxuXHRcdFx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyLmV4cGFuZChpdGVtRW50cnkpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIucmVtb3ZlRnJvbUNvbGxlY3Rpb25zKCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgZXhlY3V0ZU1vdmVSZXF1ZXN0cyAoY29tcGlsYXRpb246IE1vdmVDb21waWxhdGlvbiwgY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRcdGNvbnN0IHJlcXVlc3RzOiBBcnJheTxQcm9taXNlSW50ZXJmYWNlPHZvaWQ+PiA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRUeXBlIGluIGNvbXBpbGF0aW9uKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGNvbXBpbGF0aW9uW3BhcmVudFR5cGVdKVxuXHRcdFx0XHRleGVjdXRlTW92ZVJlcXVlc3QocGFyZW50VHlwZSwgK3BhcmVudElkKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocmVxdWVzdHMpO1xuXG5cdFx0ZnVuY3Rpb24gZXhlY3V0ZU1vdmVSZXF1ZXN0IChwYXJlbnRUeXBlOiBJdGVtVHlwZSwgcGFyZW50SWQ6IEl0ZW1JZCkge1xuXHRcdFx0Ly8gb25seSB0aGUgcGFyZW50IGlkIGNvdWxkIGhhdmUgYmVlbiB1cGRhdGVkXG5cdFx0XHRjb25zdCBjb21waWxhdGlvbkVudHJpZXMgPSBjb21waWxhdGlvbltwYXJlbnRUeXBlXVtwYXJlbnRJZF07XG5cdFx0XHRjb25zdCBuZXdQYXJlbnRJZCA9IHNlbGYuZ2V0TWFwVmFsdWUocGFyZW50VHlwZSwgcGFyZW50SWQsIGNvbnZlcnNpb25NYXApO1xuXG5cdFx0XHRyZXF1ZXN0cy5wdXNoKFxuXHRcdFx0XHRzZWxmLmFwaVJlcXVlc3RTZXJ2aWNlLm1vdmVJdGVtcyhcblx0XHRcdFx0XHRwYXJlbnRUeXBlLFxuXHRcdFx0XHRcdG5ld1BhcmVudElkICE9PSB1bmRlZmluZWQgPyBuZXdQYXJlbnRJZCA6IHBhcmVudElkLFxuXHRcdFx0XHRcdHNlbGYuYnVpbGRNb3ZlUmVxdWVzdChjb21waWxhdGlvbkVudHJpZXMpXG5cdFx0XHRcdCkudGhlbihcblx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRzZWxmLnByb2Nlc3NNb3ZlUmVzcG9uc2UoLyogcmVzcG9uc2UsICovY29tcGlsYXRpb25FbnRyaWVzKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHNlbGYuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgcHJvY2Vzc01vdmVSZXNwb25zZSAoLyogcmVzcG9uc2UsICovY29tcGlsYXRpb25FbnRyaWVzOiBNb3ZlTWFwRW50cnlbXSkge1xuXHRcdC8vIFRPRE86IHByb2Nlc3MgcmVzcG9uc2VcblxuXHRcdGNvbnN0IGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSA9IFtdO1xuXHRcdGNvbnN0IHJlbW92ZUNvbGxlY3Rpb25NYXAgPSB7fTtcblx0XHRjb25zdCBhZGRDb2xsZWN0aW9uTWFwID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGNvbXBpbGF0aW9uRW50cnkgb2YgY29tcGlsYXRpb25FbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBpdGVtRW50cnk6IEl0ZW1FbnRyeSA9IGNvbXBpbGF0aW9uRW50cnkuaXRlbTtcblxuXHRcdFx0dGhpcy5hZGRDb2xsZWN0aW9uTWFwRW50cnkoXG5cdFx0XHRcdHJlbW92ZUNvbGxlY3Rpb25NYXAsXG5cdFx0XHRcdGNvbXBpbGF0aW9uRW50cnkucGFyZW50Lml0ZW1JZCxcblx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRpdGVtRW50cnkuaXRlbUlkXG5cdFx0XHQpO1xuXG5cdFx0XHR0aGlzLmFkZENvbGxlY3Rpb25NYXBFbnRyeShcblx0XHRcdFx0YWRkQ29sbGVjdGlvbk1hcCxcblx0XHRcdFx0KGl0ZW1FbnRyeS5wYXJlbnQgYXMgRW50cnlQYXJlbnQpLml0ZW1JZCxcblx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRpdGVtRW50cnlcblx0XHRcdCk7XG5cblx0XHRcdGl0ZW1FbnRyaWVzLnB1c2goaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHR0aGlzLmZvckVhY2hDb2xsZWN0aW9uKHJlbW92ZUNvbGxlY3Rpb25NYXAsICdyZW1vdmVJdGVtcycpO1xuXHRcdHRoaXMuZm9yRWFjaENvbGxlY3Rpb24oYWRkQ29sbGVjdGlvbk1hcCwgJ2FkZEl0ZW1zJyk7XG5cdH1cblxuXHRwcml2YXRlIGFkZENvbGxlY3Rpb25NYXBFbnRyeTxUPiAoY29sbGVjdGlvbk1hcDogYW55LCBwYXJlbnRJZDogSXRlbUlkLCBpdGVtRW50cnk6IEl0ZW1FbnRyeSwgdmFsdWU6IFQpOiB2b2lkIHtcblx0XHRjb25zdCBjb2xsZWN0aW9uTWFwRW50cnkgPSBjcmVhdGVQYXRoPFRbXT4oXG5cdFx0XHRjb2xsZWN0aW9uTWFwLFxuXHRcdFx0W2l0ZW1FbnRyeS5wYXJlbnQhLml0ZW1UeXBlLCBwYXJlbnRJZCwgaXRlbUVudHJ5Lml0ZW1UeXBlXSxcblx0XHRcdFt7fSwge30sIFtdXVxuXHRcdCk7XG5cblx0XHRjb2xsZWN0aW9uTWFwRW50cnkucHVzaCh2YWx1ZSk7XG5cdH1cblxuXHRwcml2YXRlIGZvckVhY2hDb2xsZWN0aW9uIChjb2xsZWN0aW9uTWFwOiBhbnksIG1ldGhvZDoga2V5b2YgQ29sbGVjdGlvbkVudHJ5KSB7XG5cdFx0Zm9yIChjb25zdCBwYXJlbnRUeXBlIGluIGNvbGxlY3Rpb25NYXApIHtcblx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gY29sbGVjdGlvbk1hcFtwYXJlbnRUeXBlXSkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGNvbGxlY3Rpb25NYXBbcGFyZW50VHlwZV1bcGFyZW50SWRdKSB7XG5cdFx0XHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5lbnRyaWVzLmdldEJ5UGFyZW50KHBhcmVudFR5cGUsIHBhcnNlSW50KHBhcmVudElkLCAxMCksIGl0ZW1UeXBlKTtcblxuXHRcdFx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkgPT09IG51bGwpXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyeVttZXRob2RdKFxuXHRcdFx0XHRcdFx0Y29sbGVjdGlvbk1hcFtwYXJlbnRUeXBlXVtwYXJlbnRJZF1baXRlbVR5cGVdLFxuXHRcdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gbm90ZTogd2l0aCB0aGUgbmV3IGl0ZW0gc3RydWN0dXJlLCAqYWxsKiBsb2NhbCBpdGVtcyBhcmUgaW4gdGhlIHNpbmdsZSBpdGVtIGNhY2hlXG5cdHByaXZhdGUgb25JdGVtc0NyZWF0ZWQgKFxuXHRcdGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAsXG5cdFx0c2luZ2xlSXRlbXM6IEl0ZW1FbnRyeVtdLFxuXHRcdGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uRW50cnlbXVxuXHQpIHtcblx0XHRpZiAoIWhhc1Byb3BlcnRpZXMoY29udmVyc2lvbk1hcCkpXG5cdFx0XHRyZXR1cm47XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiBjb2xsZWN0aW9ucykge1xuXHRcdFx0Y29uc3QgcGFyZW50ID0gY29sbGVjdGlvbkVudHJ5LnBhcmVudDtcblx0XHRcdGNvbnN0IHVwZGF0ZWRDb2x1bW5zOiB7W2NvbHVtbklkOiBzdHJpbmddOiBDb2x1bW5JbmZvfSA9XG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5nZXRVcGRhdGVkSXRlbUNvbHVtbnMoY29udmVyc2lvbk1hcCk7XG5cblx0XHRcdGlmIChwYXJlbnQgIT09IG51bGwpIHtcblx0XHRcdFx0Y29uc3QgbmV3UGFyZW50SWQgPSB0aGlzLmdldE1hcFZhbHVlKHBhcmVudC5pdGVtVHlwZSwgcGFyZW50Lml0ZW1JZCwgY29udmVyc2lvbk1hcCk7XG5cblx0XHRcdFx0aWYgKG5ld1BhcmVudElkICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRwYXJlbnQuaXRlbUlkID0gbmV3UGFyZW50SWQ7XG5cdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LnF1ZXJ5ID0gdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNyZWF0ZVF1ZXJ5KGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zKTtcblxuXHRcdFx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZW50cmllcy5hZGQoY29sbGVjdGlvbkVudHJ5KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWhhc1Byb3BlcnRpZXModXBkYXRlZENvbHVtbnMpKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0aWYgKHVwZGF0ZWRDb2x1bW5zLmlkICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5vbkl0ZW1zQ3JlYXRlZChjb252ZXJzaW9uTWFwW2NvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZV0pO1xuXG5cdFx0XHQvLyB3aGVuIHVwZGF0aW5nIGFuIGl0ZW0gdG8gcmVmZXIgdG8gYSBuZXdseSBjcmVhdGVkIGl0ZW0sIHRoZSB1cGRhdGVkIGl0ZW0gd2lsbCAqbm90KiBiZSBhZGRlZCB0b1xuXHRcdFx0Ly8gc2luZ2xlIGl0ZW1zIChlLmcuIG1vdmluZyBhIGZ1bmN0aW9uIHRvIGEgbmV3bHkgY3JlYXRlZCBmdW5jdGlvbiBncm91cClcblx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGNvbGxlY3Rpb25FbnRyeS5pdGVtcylcblx0XHRcdFx0aXRlbUVudHJ5LnVwZGF0ZUl0ZW1GaWVsZHMoY29udmVyc2lvbk1hcCk7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2Ygc2luZ2xlSXRlbXMpIHtcblx0XHRcdGNvbnN0IHBhcmVudCA9IGl0ZW1FbnRyeS5wYXJlbnQ7XG5cblx0XHRcdGl0ZW1FbnRyeS51cGRhdGVJdGVtRmllbGRzKGNvbnZlcnNpb25NYXApO1xuXG5cdFx0XHRpZiAocGFyZW50ICE9PSBudWxsKSB7XG5cdFx0XHRcdGNvbnN0IG5ld1BhcmVudElkID0gdGhpcy5nZXRNYXBWYWx1ZShwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQsIGNvbnZlcnNpb25NYXApO1xuXG5cdFx0XHRcdGlmIChuZXdQYXJlbnRJZCAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdHBhcmVudC5pdGVtSWQgPSBuZXdQYXJlbnRJZDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBwcm9wZXIgb3JkZXI6IGNyZWF0ZSAtIG1vdmUgLSBkZWxldGUgLSB1cGRhdGVcblx0ZXhlY3V0ZSAoXG5cdFx0c2luZ2xlSXRlbXM6IEl0ZW1FbnRyeVtdLFxuXHRcdGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uRW50cnlbXSxcblx0XHRwYXJhbWV0ZXJzOiBDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwID0ge30sXG5cdFx0YnJlYWt1cEJ5UGFyZW50PzogYm9vbGVhbixcblx0XHRvbkFmdGVyQ3JlYXRlQ2FsbGJhY2s/OiAoY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCkgPT4gdm9pZFxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1JZENvbnZlcnNpb25NYXA+IHtcblx0XHRjb25zdCBlcnJvckhhbmRsZXIgPSB0aGlzLmVycm9ySGFuZGxlcjtcblx0XHRjb25zdCBjaGFuZ2VzQ29tcGlsYXRpb24gPSB0aGlzLmNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkuY29uc3RydWN0KHNpbmdsZUl0ZW1zLCBjb2xsZWN0aW9ucyk7XG5cdFx0Y29uc3QgY29tcGlsYXRpb24gPSBjaGFuZ2VzQ29tcGlsYXRpb24uY29tcGlsYXRpb247XG5cdFx0Y29uc3QgY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCA9IHt9O1xuXG5cdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZUNyZWF0ZVJlcXVlc3RzKFxuXHRcdFx0Y2hhbmdlc0NvbXBpbGF0aW9uLFxuXHRcdFx0cGFyYW1ldGVycyxcblx0XHRcdGNvbnZlcnNpb25NYXAsXG5cdFx0XHRicmVha3VwQnlQYXJlbnQsXG5cdFx0XHRvbkFmdGVyQ3JlYXRlQ2FsbGJhY2tcblx0XHQpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHRoaXMub25JdGVtc0NyZWF0ZWQoY29udmVyc2lvbk1hcCwgc2luZ2xlSXRlbXMsIGNvbGxlY3Rpb25zKTtcblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5leGVjdXRlTW92ZVJlcXVlc3RzKGNvbXBpbGF0aW9uLm1vdmUsIGNvbnZlcnNpb25NYXApO1xuXHRcdFx0fSxcblx0XHRcdGVycm9yID0+IHtcblx0XHRcdFx0dGhpcy5vbkl0ZW1zQ3JlYXRlZChjb252ZXJzaW9uTWFwLCBzaW5nbGVJdGVtcywgY29sbGVjdGlvbnMpO1xuXG5cdFx0XHRcdHJldHVybiBlcnJvckhhbmRsZXIucmVqZWN0KGVycm9yKTtcblx0XHRcdH1cblx0XHQpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmV4ZWN1dGVVcGRhdGVSZXF1ZXN0cyhjb21waWxhdGlvbi51cGRhdGUsIHBhcmFtZXRlcnMpO1xuXHRcdFx0fSxcblx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmV4ZWN1dGVEZWxldGVSZXF1ZXN0cyhjb21waWxhdGlvbi5kZWxldGUpO1xuXHRcdFx0fSxcblx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiBjb252ZXJzaW9uTWFwO1xuXHRcdFx0fSxcblx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBRdWVyeU1hdGNoZXJGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgQ29sbGVjdGlvblJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IENvbGxlY3Rpb25NYXRjaFJlc3VsdCwgQ29sbGVjdGlvblF1ZXJ5LCBFbnRyeVBhcmVudE51bGwsIEZpZWxkTWFwLCBJdGVtSWQsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5lbnVtIENPTlNUQU5UUyB7XG5cdE1BWUJFID0gJ21heWJlJ1xufVxuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkNhY2hlIHtcblx0ZW50cmllczoge1xuXHRcdFtpdGVtVHlwZTogc3RyaW5nXToge1xuXHRcdFx0W2NvbGxlY3Rpb25FbnRyeUlkOiBudW1iZXJdOiBDb2xsZWN0aW9uRW50cnlcblx0XHR9XG5cdH0gPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5XG5cdCkge1xuXG5cdH1cblxuXHRjb250YWlucyAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpOiBib29sZWFuIHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2NvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZV07XG5cblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0cmV0dXJuIGVudHJpZXNbY29sbGVjdGlvbkVudHJ5LmlkXSAhPT0gdW5kZWZpbmVkO1xuXHR9XG5cblx0c29tZSAoY2FsbGJhY2s6IChlbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiBib29sZWFuKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gZW50cmllcykge1xuXHRcdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXNbaXRlbVR5cGVdKSB7XG5cdFx0XHRcdGlmIChjYWxsYmFjayhlbnRyaWVzW2l0ZW1UeXBlXVtlbnRyeUlkXSkpXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Ly8gVE9ETzogY2hlY2sgaWYgdGhpcyBpcyBzdGlsbCBpbiB1c2Vcblx0Zm9yRWFjaCAoY2FsbGJhY2s6IChlbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiB2b2lkKTogdm9pZCB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gZW50cmllcykge1xuXHRcdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXNbaXRlbVR5cGVdKVxuXHRcdFx0XHRjYWxsYmFjayhlbnRyaWVzW2l0ZW1UeXBlXVtlbnRyeUlkXSk7XG5cdFx0fVxuXHR9XG5cblx0dG9BcnJheSAoKSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcblx0XHRjb25zdCByZXN1bHQ6IENvbGxlY3Rpb25FbnRyeVtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGVudHJpZXMpIHtcblx0XHRcdGZvciAoY29uc3QgZW50cnlJZCBpbiBlbnRyaWVzW2l0ZW1UeXBlXSlcblx0XHRcdFx0cmVzdWx0LnB1c2goZW50cmllc1tpdGVtVHlwZV1bZW50cnlJZF0pO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRhZGQgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KTogQ29sbGVjdGlvbkVudHJ5IHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzO1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlO1xuXG5cdFx0aWYgKGVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRlbnRyaWVzW2l0ZW1UeXBlXSA9IHt9O1xuXG5cdFx0cmV0dXJuIGVudHJpZXNbaXRlbVR5cGVdW2NvbGxlY3Rpb25FbnRyeS5pZF0gPSBjb2xsZWN0aW9uRW50cnk7XG5cdH1cblxuXHRjbGVhciAoY29sbGVjdGlvbkVudHJ5PzogQ29sbGVjdGlvbkVudHJ5KTogYm9vbGVhbiB7XG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLmVudHJpZXMgPSB7fTtcblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKCF0aGlzLmNvbnRhaW5zKGNvbGxlY3Rpb25FbnRyeSkpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRyZXR1cm4gZGVsZXRlIHRoaXMuZW50cmllc1tjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGVdW2NvbGxlY3Rpb25FbnRyeS5pZF07XG5cdH1cblxuXHRnZXRCeUl0ZW1UeXBlIChpdGVtVHlwZTogc3RyaW5nKSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uRW50cnlbXSA9IFtdO1xuXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllcylcblx0XHRcdHJlc3VsdC5wdXNoKGVudHJpZXNbZW50cnlJZF0pO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdG1hdGNoUGFyZW50IChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgaXRlbVR5cGU6IHN0cmluZywgaXRlbUlkOiBJdGVtSWQpIHtcblx0XHRjb25zdCBwYXJlbnQgPSBjb2xsZWN0aW9uRW50cnkucGFyZW50O1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdC8vID09IHRvIGNvbXBhcmUgaXRlbUlkc1xuXHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXG5cdFx0cmV0dXJuIHBhcmVudC5pdGVtVHlwZSA9PT0gaXRlbVR5cGUgJiYgcGFyZW50Lml0ZW1JZCA9PSBpdGVtSWQ7XG5cdH1cblxuXHQvLyBUT0RPOiB0aGluayBvZiBiZXR0ZXIgbmFtZVxuXHRnZXRCeVBhcmVudCAocGFyZW50VHlwZTogSXRlbVR5cGUsIHBhcmVudElkOiBJdGVtSWQsIGl0ZW1UeXBlOiBJdGVtVHlwZSk6IENvbGxlY3Rpb25FbnRyeSB8IG51bGwge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xuXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXMpIHtcblx0XHRcdGlmICh0aGlzLm1hdGNoUGFyZW50KGVudHJpZXNbZW50cnlJZF0sIHBhcmVudFR5cGUsIHBhcmVudElkKSlcblx0XHRcdFx0cmV0dXJuIGVudHJpZXNbZW50cnlJZF07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRnZXRSZXNvdXJjZUJ5UGFyZW50IChwYXJlbnRUeXBlOiBJdGVtVHlwZSwgcGFyZW50SWQ6IEl0ZW1JZCwgaXRlbVR5cGU6IEl0ZW1UeXBlKTogQ29sbGVjdGlvblJlc291cmNlIHwgbnVsbCB7XG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gdGhpcy5nZXRCeVBhcmVudChwYXJlbnRUeXBlLCBwYXJlbnRJZCwgaXRlbVR5cGUpO1xuXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeSA9PT0gbnVsbClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0cmV0dXJuIGNvbGxlY3Rpb25FbnRyeS5nZXRDdXJyZW50UmVzb3VyY2UoKTtcblx0fVxuXG5cdGdldENvbGxlY3Rpb25zQnlQYXJlbnQgKHBhcmVudFR5cGU6IEl0ZW1UeXBlLCBwYXJlbnRJZDogSXRlbUlkKSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcblx0XHRjb25zdCByZXN1bHQ6IENvbGxlY3Rpb25FbnRyeVtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGVudHJpZXMpIHtcblx0XHRcdGZvciAoY29uc3QgZW50cnlJZCBpbiBlbnRyaWVzW2l0ZW1UeXBlXSkge1xuXHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBlbnRyaWVzW2l0ZW1UeXBlXVtlbnRyeUlkXTtcblxuXHRcdFx0XHRpZiAodGhpcy5tYXRjaFBhcmVudChjb2xsZWN0aW9uRW50cnksIHBhcmVudFR5cGUsIHBhcmVudElkKSlcblx0XHRcdFx0XHRyZXN1bHQucHVzaChjb2xsZWN0aW9uRW50cnkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogT25seSByZXNvdXJjZXNcblx0ICogQHBhcmFtIHtTdHJpbmd9IGl0ZW1UeXBlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfEludGVnZXJ9IGl0ZW1JZFxuXHQgKiBAcmV0dXJucyB7T2JqZWN0fSBBcnJheSBvZiBjb2xsZWN0aW9ucy5cblx0ICovXG5cdGdldEJ5Q29udGFpbmluZ0l0ZW0gKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQpIHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcblx0XHRjb25zdCByZXN1bHQ6IENvbGxlY3Rpb25FbnRyeVtdID0gW107XG5cblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblxuXHRcdGZvciAoY29uc3QgZW50cnlJZCBpbiBlbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBlbnRyaWVzW2VudHJ5SWRdO1xuXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LmdldEl0ZW1CeUlkKGl0ZW1JZCkgIT09IHVuZGVmaW5lZClcblx0XHRcdFx0cmVzdWx0LnB1c2goY29sbGVjdGlvbkVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYW4gYXJyYXkgb2YgY29sbGVjdGlvbnMgdGhlIGl0ZW0gJ2JlbG9uZ3MnIGluLlxuXHQgKi9cblx0Z2V0QnlGaXR0aW5nSXRlbSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBmaWVsZHM6IEZpZWxkTWFwLCBwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCkge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xuXHRcdGNvbnN0IHJlc3VsdDogQ29sbGVjdGlvbk1hdGNoUmVzdWx0ID0ge2ZpdHRpbmc6IFtdLCBub3RmaXR0aW5nOiBbXSwgbWF5YmU6IFtdfTtcblxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Ly8gY29uc29sZS50aW1lKCdnZXRCeUZpdHRpbmdJdGVtJyk7XG5cblx0XHRjb25zdCBxdWVyeU1hdGNoZXIgPSB0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCBmaWVsZHMsIHBhcmVudCk7XG5cblx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllcykge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gZW50cmllc1tlbnRyeUlkXTtcblx0XHRcdGNvbnN0IG1hdGNoUmVzdWx0ID0gcXVlcnlNYXRjaGVyLm1hdGNoUXVlcnkoY29sbGVjdGlvbkVudHJ5LnF1ZXJ5Lm9iamVjdCk7XG5cblx0XHRcdC8vIFRPRE86IG1heWJlP1xuXHRcdFx0aWYgKG1hdGNoUmVzdWx0ID09PSB0cnVlKSAvLyBtaWdodCBhbHNvIHJldHVybiAnbWF5YmUnXG5cdFx0XHRcdHJlc3VsdC5maXR0aW5nLnB1c2goY29sbGVjdGlvbkVudHJ5KTtcblx0XHRcdGVsc2UgaWYgKG1hdGNoUmVzdWx0ID09PSBDT05TVEFOVFMuTUFZQkUpXG5cdFx0XHRcdHJlc3VsdC5tYXliZS5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdHJlc3VsdC5ub3RmaXR0aW5nLnB1c2goY29sbGVjdGlvbkVudHJ5KTtcblx0XHR9XG5cblx0XHQvLyBjb25zb2xlLnRpbWVFbmQoJ2dldEJ5Rml0dGluZ0l0ZW0nKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRnZXRCeVF1ZXJ5IChpdGVtVHlwZTogSXRlbVR5cGUsIHF1ZXJ5OiBDb2xsZWN0aW9uUXVlcnkpOiBDb2xsZWN0aW9uRW50cnkgfCBudWxsIHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcblxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdGZvciAoY29uc3QgZW50cnlJZCBpbiBlbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBlbnRyaWVzW2VudHJ5SWRdO1xuXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LnF1ZXJ5LnN0cmluZyA9PT0gcXVlcnkuc3RyaW5nKVxuXHRcdFx0XHRyZXR1cm4gY29sbGVjdGlvbkVudHJ5O1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Z2V0QnlLZXkgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgZW50cnlLZXk6IHN0cmluZyk6IENvbGxlY3Rpb25FbnRyeVtdIHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcblx0XHRjb25zdCByZXN1bHQ6IENvbGxlY3Rpb25FbnRyeVtdID0gW107XG5cblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblxuXHRcdGZvciAoY29uc3QgZW50cnlJZCBpbiBlbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBlbnRyaWVzW2VudHJ5SWRdO1xuXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5Lm9wdGlvbnMuZW50cnlLZXkgPT09IGVudHJ5S2V5KVxuXHRcdFx0XHRyZXN1bHQucHVzaChjb2xsZWN0aW9uRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRnZXRSZXNvdXJjZUJ5S2V5IChpdGVtVHlwZTogSXRlbVR5cGUsIHJlc291cmNlS2V5OiBzdHJpbmcpOiBDb2xsZWN0aW9uUmVzb3VyY2VbXSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uUmVzb3VyY2VbXSA9IFtdO1xuXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllcykge1xuXHRcdFx0Y29uc3QgcmVzb3VyY2VzID0gZW50cmllc1tlbnRyeUlkXS5yZXNvdXJjZXM7XG5cblx0XHRcdGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgcmVzb3VyY2VzKSB7XG5cdFx0XHRcdGlmIChyZXNvdXJjZS5vcHRpb25zLnJlc291cmNlS2V5ID09PSByZXNvdXJjZUtleSlcblx0XHRcdFx0XHRyZXN1bHQucHVzaChyZXNvdXJjZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxufVxuIiwiaW1wb3J0IHsgaW5zdGFudGlhdGVPcHRpb25zIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0Q29sdW1uTWFwLCBBcGlSZXF1ZXN0Q29sdW1ucywgRW50cnlQYXJlbnROdWxsIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBJdGVtRW50cnlPcHRpb25zSW50ZXJmYWNlID0gUGFydGlhbDxJdGVtRW50cnlPcHRpb25zPjtcblxuZXhwb3J0IGNsYXNzIEl0ZW1FbnRyeU9wdGlvbnMge1xuXHRjb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyA9IHRydWU7XG5cdHBhcmVudDogRW50cnlQYXJlbnROdWxsID0gbnVsbDtcblx0dGVtcGxhdGVPcHRpb25zOiBhbnkgPSB7fTsgLy8gVE9ET1xuXHR0ZW1wbGF0ZUNvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5NYXAgPSB7fTtcblx0ZGVmZXJSZXF1ZXN0OiBib29sZWFuID0gZmFsc2U7XG5cdGlzRHVwbGljYXRlOiBib29sZWFuID0gZmFsc2U7XG5cblx0Y29uc3RydWN0b3IgKHZhbHVlczogSXRlbUVudHJ5T3B0aW9uc0ludGVyZmFjZSkge1xuXHRcdGluc3RhbnRpYXRlT3B0aW9ucyh0aGlzLCB2YWx1ZXMpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBpbnN0YW50aWF0ZU9wdGlvbnMgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IG5vb3AgfSBmcm9tICcuLi9jb3JlJztcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBPbkNoYW5nZUZ1bmN0aW9uIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBJdGVtUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlID0gUGFydGlhbDxJdGVtUmVzb3VyY2VPcHRpb25zPjtcblxuZXhwb3J0IGNsYXNzIEl0ZW1SZXNvdXJjZU9wdGlvbnMge1xuXHRlZGl0OiBib29sZWFuID0gZmFsc2U7XG5cdHJlbW90ZTogYm9vbGVhbiA9IGZhbHNlO1xuXHRvbkNoYW5nZTogT25DaGFuZ2VGdW5jdGlvbiA9IG5vb3A7XG5cdG9uRGVhY3RpdmF0ZTogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiB2b2lkID0gbm9vcDtcblxuXHRjb25zdHJ1Y3RvciAodmFsdWVzOiBJdGVtUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlKSB7XG5cdFx0aW5zdGFudGlhdGVPcHRpb25zKHRoaXMsIHZhbHVlcyk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtbkluZm8sIENvbHVtblNldCB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgSXRlbUVudHJ5RmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBJdGVtUmVzb3VyY2UsIExvY2FsVmlld1Jlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7XG5cdENvbHVtbkV4cGFuc2lvblJlc3VsdCwgRW50cnlQYXJlbnROdWxsLCBGaWVsZE1hcCwgSXRlbUVycm9yLCBJdGVtSWQsIEl0ZW1JZENvbnZlcnNpb25NYXAsIEl0ZW1UeXBlLCBQcm9taXNlSW50ZXJmYWNlXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IERlZmVycmVkIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbmxldCBjdXJyZW50SWQgPSAwO1xuXG5leHBvcnQgY2xhc3MgSXRlbUVudHJ5IHtcblx0aWQ6IG51bWJlciA9ICsrY3VycmVudElkO1xuXG5cdHJlbG9hZFF1ZXVlZDogYm9vbGVhbiA9IGZhbHNlO1xuXHRkZWZlclJlcXVlc3Q6IGJvb2xlYW4gPSBmYWxzZTtcblx0ZGVmZXJyZWQ/OiBEZWZlcnJlZDx0aGlzPjtcblx0cGFyZW50OiBFbnRyeVBhcmVudE51bGwgPSBudWxsO1xuXG5cdGluaXRpYWw6IEZpZWxkTWFwO1xuXHRtb2RpZmllZDogRmllbGRNYXA7XG5cdGRlcml2ZWQ6IEZpZWxkTWFwO1xuXG5cdHJlc291cmNlczogSXRlbVJlc291cmNlW10gPSBbXTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBmYWN0b3J5OiBJdGVtRW50cnlGYWN0b3J5LFxuXHRcdHB1YmxpYyBpdGVtVHlwZTogc3RyaW5nLFxuXHRcdHB1YmxpYyBpdGVtSWQ6IEl0ZW1JZCxcblx0XHRwdWJsaWMgY29sdW1uczogQ29sdW1uU2V0XG5cdCkge1xuXHR9XG5cblx0cXVldWVSZWxvYWQgKCk6IHRoaXMge1xuXHRcdHRoaXMucmVsb2FkUXVldWVkID0gdHJ1ZTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZGVmZXIgKGRlZmVyUmVxdWVzdDogYm9vbGVhbiA9IGZhbHNlKTogdGhpcyB7XG5cdFx0dGhpcy5kZWZlcnJlZCA9IHRoaXMuZmFjdG9yeS5wcm9taXNlU2VydmljZS5kZWZlcigpO1xuXHRcdHRoaXMuZGVmZXJSZXF1ZXN0ID0gZGVmZXJSZXF1ZXN0O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRnZXRQcm9taXNlICgpOiBQcm9taXNlSW50ZXJmYWNlPHRoaXM+IHtcblx0XHRjb25zdCBkZWZlcnJlZCA9IHRoaXMuZGVmZXJyZWQ7XG5cblx0XHRpZiAoZGVmZXJyZWQgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLmZhY3RvcnkucHJvbWlzZVNlcnZpY2Uud2hlbih0aGlzKTtcblxuXHRcdHJldHVybiBkZWZlcnJlZC5wcm9taXNlO1xuXHR9XG5cblx0cmVzb2x2ZSAoKTogdGhpcyB7XG5cdFx0Y29uc3QgZGVmZXJyZWQgPSB0aGlzLmRlZmVycmVkO1xuXG5cdFx0aWYgKGRlZmVycmVkID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdC8vIHRoZSByZXNvbHZlIGZ1bmN0aW9uIG1pZ2h0IGRlZmVyIHRoZSBpdGVtIGFnYWluLCBzbyBkZWxldGUgdGhlIHByb3BlcnRpZXMgZmlyc3Rcblx0XHRkZWxldGUgdGhpcy5kZWZlcnJlZDtcblx0XHRkZWxldGUgdGhpcy5kZWZlclJlcXVlc3Q7XG5cblx0XHRkZWZlcnJlZC5yZXNvbHZlKHRoaXMpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRyZXNvbHZlRGVmZXJyZWQgKGluaXRpYWw6IEZpZWxkTWFwLCBkZXJpdmVkOiBGaWVsZE1hcCwgY29sdW1uczogQ29sdW1uU2V0KTogdGhpcyB7XG5cdFx0dGhpcy5jb2x1bW5zID0gY29sdW1ucztcblx0XHR0aGlzLnNldEZpZWxkcyhpbml0aWFsLCBkZXJpdmVkKTtcblxuXHRcdHJldHVybiB0aGlzLnJlc29sdmUoKTtcblx0fVxuXG5cdGlzRGVmZXJyZWQgKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmRlZmVycmVkICE9PSB1bmRlZmluZWQ7XG5cdH1cblxuXHRyZWplY3QgKGVycm9yOiBJdGVtRXJyb3IgPSB0aGlzLmZhY3RvcnkuaXRlbUVudHJ5U2VydmljZS5jcmVhdGVVbmZvdW5kUmVtb3RlSXRlbUVycm9yKCkpOiB0aGlzIHtcblx0XHRjb25zdCBkZWZlcnJlZCA9IHRoaXMuZGVmZXJyZWQ7XG5cblx0XHRpZiAoZGVmZXJyZWQgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0ZGVmZXJyZWQucmVqZWN0KGVycm9yKTtcblxuXHRcdGRlbGV0ZSB0aGlzLmRlZmVycmVkO1xuXHRcdGRlbGV0ZSB0aGlzLmRlZmVyUmVxdWVzdDtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0RmllbGRzIChpbml0aWFsOiBGaWVsZE1hcCwgZGVyaXZlZDogRmllbGRNYXApOiB0aGlzIHtcblx0XHRjb25zdCBhcGlGb3JtYXR0ZXIgPSB0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyO1xuXHRcdGNvbnN0IGZvcm1hdHRlZENvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZm9ybWF0dGVkO1xuXG5cdFx0dGhpcy5pbml0aWFsID0gYXBpRm9ybWF0dGVyLmZvcm1hdFJlc3BvbnNlKGluaXRpYWwsIGZvcm1hdHRlZENvbHVtbnMubWFpbik7XG5cdFx0dGhpcy5kZXJpdmVkID0gYXBpRm9ybWF0dGVyLmZvcm1hdFJlc3BvbnNlKGRlcml2ZWQsIGZvcm1hdHRlZENvbHVtbnMuZGVyaXZlZCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8vIFdlIHNob3VsZCBjcmVhdGUgYSBjb3B5IG9mIGluaXRpYWwgaGVyZSwgYmVjYXVzZSBpbiBtb3N0IGluc3RhbmNlcyBpdCB3aWxsIGJlIGEgdGVtcGxhdGUuXG5cdHNldExvY2FsRmllbGRzIChcblx0XHRpbml0aWFsVmFsdWVzOiBGaWVsZE1hcCxcblx0XHRjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwLFxuXHRcdGNvbHVtbnM6IENvbHVtblNldCA9IHRoaXMuY29sdW1uc1xuXHQpOiB0aGlzIHtcblx0XHRjb25zdCBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5O1xuXHRcdGNvbnN0IGluaXRpYWwgPSBmYWN0b3J5Lml0ZW1FbnRyeVNlcnZpY2UuZ2V0TG9jYWxEZWZhdWx0VmFsdWVzKCk7XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zLm1haW4pIHtcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uLmlkO1xuXG5cdFx0XHRpbml0aWFsW2NvbHVtbklkXSA9IGluaXRpYWxWYWx1ZXNbY29sdW1uSWRdO1xuXHRcdH1cblxuXHRcdHRoaXMuaW5pdGlhbCA9IGZhY3RvcnkuYXBpRm9ybWF0dGVyLmZvcm1hdFJlc3BvbnNlKGluaXRpYWwsIGNvbHVtbnMuZm9ybWF0dGVkLm1haW4pO1xuXHRcdHRoaXMuZGVyaXZlZCA9IHsnY3JlYXRvcj5kaXNwbGF5bmFtZSc6IGZhY3RvcnkuYXV0aEludGVyZmFjZS5nZXRVc2VyRGlzcGxheW5hbWUoKX07XG5cblx0XHRyZXR1cm4gdGhpcy51cGRhdGVJdGVtRmllbGRzKGNvbnZlcnNpb25NYXApO1xuXHR9XG5cblx0Y2xvbmUgKGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAgPSB7fSk6IEl0ZW1FbnRyeSB7XG5cdFx0Y29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTtcblx0XHRjb25zdCBhcGlGb3JtYXR0ZXIgPSBmYWN0b3J5LmFwaUZvcm1hdHRlcjtcblx0XHRjb25zdCBpdGVtRW50cnlTZXJ2aWNlID0gZmFjdG9yeS5pdGVtRW50cnlTZXJ2aWNlO1xuXHRcdGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG5cdFx0Y29uc3QgbmV3SXRlbUlkID0gaXRlbUVudHJ5U2VydmljZS5leHBhbmRDb252ZXJzaW9uTWFwKHRoaXMsIGNvbnZlcnNpb25NYXApO1xuXG5cdFx0Ly8gd2UnbGwgY29weSBtb2RpZmllZCB0byByZXN1bHQuaW5pdGlhbCAoaW5pdGlhbCBtYXkgYmUgYSB0ZW1wbGF0ZSlcblx0XHRjb25zdCBjbG9uZWRFbnRyeSA9IGZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0bmV3SXRlbUlkLFxuXHRcdFx0YXBpRm9ybWF0dGVyLmNvcHlGaWVsZHModGhpcy5nZXRGaWVsZHMoKSwge30sIGNvbHVtbnMubWFpbiksXG5cdFx0XHRhcGlGb3JtYXR0ZXIuY29weUZpZWxkcyh0aGlzLmRlcml2ZWQsIHt9LCBjb2x1bW5zLmRlcml2ZWQpLFxuXHRcdFx0Y29sdW1uc1xuXHRcdCk7XG5cblx0XHRjbG9uZWRFbnRyeS51cGRhdGVJdGVtRmllbGRzKGNvbnZlcnNpb25NYXApO1xuXG5cdFx0Y2xvbmVkRW50cnkubW9kaWZpZWQgPSBhcGlGb3JtYXR0ZXIuY29weUZpZWxkcyhjbG9uZWRFbnRyeS5pbml0aWFsLCB7fSwgY29sdW1ucy5tYWluKTtcblxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXG5cdFx0XHRyZXR1cm4gY2xvbmVkRW50cnk7XG5cblx0XHRjb25zdCBwYXJlbnRJZCA9IGl0ZW1FbnRyeVNlcnZpY2UuZ2V0Q29udmVyc2lvblZhbHVlKHBhcmVudC5pdGVtVHlwZSwgcGFyZW50Lml0ZW1JZCwgY29udmVyc2lvbk1hcCk7XG5cblx0XHRjbG9uZWRFbnRyeS5zZXRQYXJlbnQoXG5cdFx0XHRwYXJlbnQuaXRlbVR5cGUsXG5cdFx0XHRwYXJlbnRJZCA9PT0gdW5kZWZpbmVkID8gcGFyZW50Lml0ZW1JZCA6IHBhcmVudElkXG5cdFx0KTtcblxuXHRcdHJldHVybiBjbG9uZWRFbnRyeTtcblx0fVxuXG5cdHJlc2V0RGVyaXZlZCAoY29sdW1uSWRzOiBzdHJpbmdbXSk6IHRoaXMge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdFx0Y29uc3Qgcm9vdENvbHVtbnMgPSB0aGlzLmNvbHVtbnMucm9vdDtcblx0XHRjb25zdCBmaWx0ZXJlZENvbHVtbnM6IENvbHVtbkluZm9bXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2Ygcm9vdENvbHVtbnMpIHtcblx0XHRcdGlmIChjb2x1bW5JZHMuaW5kZXhPZihjb2x1bW4uaWQpICE9PSAtMSlcblx0XHRcdFx0ZmlsdGVyZWRDb2x1bW5zLnB1c2goY29sdW1uKTtcblx0XHR9XG5cblx0XHRyZXNldERlcml2ZWRSZWN1cnNpdmVseShmaWx0ZXJlZENvbHVtbnMpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0XHRmdW5jdGlvbiByZXNldERlcml2ZWRSZWN1cnNpdmVseSAoY29sdW1uczogQ29sdW1uSW5mb1tdKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cdFx0XHRcdGlmICghY29sdW1uLmlzTGVhZilcblx0XHRcdFx0XHRyZXNldERlcml2ZWRSZWN1cnNpdmVseShjb2x1bW4uY2hpbGRyZW4pO1xuXG5cdFx0XHRcdGRlbGV0ZSBzZWxmLmRlcml2ZWRbY29sdW1uLnBhdGhdO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGNsZWFyUmVzb3VyY2VzICgpOiB0aGlzIHtcblx0XHR0aGlzLnJlc291cmNlcyA9IFtdO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRkZWFjdGl2YXRlUmVzb3VyY2VzICgpOiB0aGlzIHtcblx0XHRjb25zdCByZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlczsgLy8gb24gb2YgdGhlIGRlYWN0aXZhdGUgY2FsbGJhY2tzIG1pZ2h0IGNhbGwgY2xlYXJSZXNvdXJjZXNcblxuXHRcdGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgcmVzb3VyY2VzKVxuXHRcdFx0cmVzb3VyY2UuZGVhY3RpdmF0ZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRnZXRGaWVsZHMgKCk6IEZpZWxkTWFwIHtcblx0XHRpZiAodGhpcy5tb2RpZmllZCAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXMubW9kaWZpZWQ7XG5cblx0XHRyZXR1cm4gdGhpcy5pbml0aWFsO1xuXHR9XG5cblx0Ly8gc2hvdWxkIGJlIGZhc3Rcblx0ZXhwYW5kIChtYWluOiBGaWVsZE1hcCwgZGVyaXZlZDogRmllbGRNYXAsIGNvbHVtbkV4cGFuc2lvblJlc3VsdDogQ29sdW1uRXhwYW5zaW9uUmVzdWx0KTogdGhpcyB7XG5cdFx0Y29uc3QgYXBpRm9ybWF0dGVyID0gdGhpcy5mYWN0b3J5LmFwaUZvcm1hdHRlcjtcblx0XHRjb25zdCBkaWZmZXJlbmNlID0gY29sdW1uRXhwYW5zaW9uUmVzdWx0LmRpZmZlcmVuY2U7XG5cblx0XHR0aGlzLmNvbHVtbnMgPSBjb2x1bW5FeHBhbnNpb25SZXN1bHQubWVyZ2VkO1xuXG5cdFx0YXBpRm9ybWF0dGVyLmV4cGFuZFJlc3BvbnNlKHRoaXMuaW5pdGlhbCwgbWFpbiwgZGlmZmVyZW5jZS5tYWluKTtcblx0XHRhcGlGb3JtYXR0ZXIuZXhwYW5kUmVzcG9uc2UodGhpcy5kZXJpdmVkLCBkZXJpdmVkLCBkaWZmZXJlbmNlLmRlcml2ZWQpO1xuXG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0YXBpRm9ybWF0dGVyLmV4cGFuZFJlc3BvbnNlKHRoaXMubW9kaWZpZWQsIG1haW4sIGRpZmZlcmVuY2UubWFpbik7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGV4cGFuZExvY2FsIChjb2x1bW5FeHBhbnNpb25SZXN1bHQ6IENvbHVtbkV4cGFuc2lvblJlc3VsdCk6IHRoaXMge1xuXHRcdGNvbnN0IG1haW5Db2x1bW5zID0gY29sdW1uRXhwYW5zaW9uUmVzdWx0LmRpZmZlcmVuY2UubWFpbjtcblxuXHRcdHRoaXMuY29sdW1ucyA9IGNvbHVtbkV4cGFuc2lvblJlc3VsdC5tZXJnZWQ7XG5cblx0XHRpZiAobWFpbkNvbHVtbnMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHR0aGlzLnNldExvY2FsVmFsdWVzKHRoaXMuaW5pdGlhbCwgbWFpbkNvbHVtbnMpO1xuXG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0dGhpcy5zZXRMb2NhbFZhbHVlcyh0aGlzLm1vZGlmaWVkLCBtYWluQ29sdW1ucyk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHByaXZhdGUgc2V0TG9jYWxWYWx1ZXMgKGZpZWxkczogRmllbGRNYXAsIGNvbHVtbnM6IENvbHVtbkluZm9bXSk6IHZvaWQge1xuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcblxuXHRcdFx0aWYgKGZpZWxkc1tjb2x1bW5JZF0gIT09IHVuZGVmaW5lZCkgLy8gcGFyZW50IGNvbHVtbnMgbWlnaHQgYWxzbyBiZSBpbmNsdWRlZCBpbiB0aGUgZGlmZmVyZW5jZVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0Y29uc3QgY29sdW1uVHlwZSA9IGNvbHVtbi5hcGlDb2x1bW4udHlwZTtcblxuXHRcdFx0ZmllbGRzW2NvbHVtbklkXSA9IGNvbHVtblR5cGUgPT09ICdsaW5rJyAmJiBwYXJlbnQgIT09IG51bGwgP1xuXHRcdFx0XHRwYXJlbnQuaXRlbUlkIDpcblx0XHRcdFx0ZmFjdG9yeS5hcGlGb3JtYXR0ZXIuZ2V0RGVmYXVsdFZhbHVlKGNvbHVtblR5cGUpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhlIGluaXRpYWwsIG1vZGlmaWVkLCBkZXJpdmVkIHByb3BlcnRpZXMgYXJlIGFscmVhZHkgc2V0LiBJdCB3aWxsIHVwZGF0ZSB0aGUgdmFsdWVzXG5cdCAqIHRoZW1zZWx2ZXMgdG8gcHJlc2VydmUgcmVmZXJlbmNlcyBpbiBleGlzdGluZyBpdGVtIHJlc291cmNlcy5cblx0ICovXG5cdHVwZGF0ZUZpZWxkcyAoZmllbGRzOiBGaWVsZE1hcCwgZGVyaXZlZDogRmllbGRNYXAgfCBudWxsID0gbnVsbCwgb3ZlcndyaXRlOiBib29sZWFuID0gdHJ1ZSk6IHRoaXMge1xuXHRcdGNvbnN0IGFwaUZvcm1hdHRlciA9IHRoaXMuZmFjdG9yeS5hcGlGb3JtYXR0ZXI7XG5cdFx0Y29uc3QgbWFpbkNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFpbjtcblx0XHRjb25zdCBpbml0aWFsID0gdGhpcy5pbml0aWFsO1xuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5tb2RpZmllZDtcblxuXHRcdC8vIGZvciBzb21lIHdlaXJkIHJlYXNvbiB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBhdG9taWMsIHNvIG92ZXJ3cml0ZSB0aGUgdmFsdWVzIHdpdGggdGhlaXIgZm9ybWF0dGVkIGNvdW50ZXJwYXJ0c1xuXHRcdC8vIGltbWVkaWF0ZWx5XG5cdFx0aWYgKG1vZGlmaWVkICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGZvciAoY29uc3QgY29sdW1uIG9mIG1haW5Db2x1bW5zKSB7XG5cdFx0XHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uLmlkO1xuXHRcdFx0XHRjb25zdCBjb2x1bW5UeXBlID0gY29sdW1uLmFwaUNvbHVtbi50eXBlO1xuXG5cdFx0XHRcdGlmIChvdmVyd3JpdGUgfHwgYXBpRm9ybWF0dGVyLmNvbXBhcmVGaWVsZHMoY29sdW1uVHlwZSwgaW5pdGlhbFtjb2x1bW5JZF0sIG1vZGlmaWVkW2NvbHVtbklkXSkpXG5cdFx0XHRcdFx0bW9kaWZpZWRbY29sdW1uSWRdID0gYXBpRm9ybWF0dGVyLmZvcm1hdFJlc3BvbnNlVmFsdWUoY29sdW1uVHlwZSwgZmllbGRzW2NvbHVtbklkXSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgbWFpbkNvbHVtbnMpIHtcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uLmlkO1xuXG5cdFx0XHRpbml0aWFsW2NvbHVtbklkXSA9IGFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZVZhbHVlKGNvbHVtbi5hcGlDb2x1bW4udHlwZSwgZmllbGRzW2NvbHVtbklkXSk7XG5cdFx0fVxuXG5cdFx0aWYgKGRlcml2ZWQgIT09IG51bGwpXG5cdFx0XHR0aGlzLnNldERlcml2ZWQoZGVyaXZlZCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlSXRlbVZhbHVlcyAoZmllbGRzOiBGaWVsZE1hcCwgaXRlbUNvbHVtbnM6IENvbHVtbkluZm9bXSwgY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCk6IHZvaWQge1xuXHRcdGNvbnN0IGl0ZW1FbnRyeVNlcnZpY2UgPSB0aGlzLmZhY3RvcnkuaXRlbUVudHJ5U2VydmljZTtcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGl0ZW1Db2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcblx0XHRcdGNvbnN0IGFwaUNvbHVtbiA9IGNvbHVtbi5hcGlDb2x1bW47XG5cblx0XHRcdC8vIFRPRE86IHdlIGNhbiByZWNvbnNpZGVyIHRoaXMgb25jZSBhbGwgY29sdW1ucyBhcmUgcmVzcGVjdGVkIGZvciBsb2NhbCBpdGVtcyBbUk00LTEwMzc4XVxuXHRcdFx0bGV0IG5ld1ZhbHVlO1xuXG5cdFx0XHRpZiAoYXBpQ29sdW1uLnR5cGUgPT09ICdsaW5rJyAmJiBmaWVsZHNbY29sdW1uSWRdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0aWYgKHBhcmVudCAhPT0gbnVsbClcblx0XHRcdFx0XHRuZXdWYWx1ZSA9IHBhcmVudC5pdGVtSWQ7XG5cdFx0XHR9IGVsc2Vcblx0XHRcdFx0bmV3VmFsdWUgPSBpdGVtRW50cnlTZXJ2aWNlLmdldENvbnZlcnNpb25WYWx1ZShhcGlDb2x1bW4uaXRlbVR5cGUsIGZpZWxkc1tjb2x1bW5JZF0sIGNvbnZlcnNpb25NYXApO1xuXG5cdFx0XHRpZiAobmV3VmFsdWUgIT09IHVuZGVmaW5lZClcblx0XHRcdFx0ZmllbGRzW2NvbHVtbklkXSA9IG5ld1ZhbHVlO1xuXHRcdH1cblx0fVxuXG5cdHVwZGF0ZUl0ZW1GaWVsZHMgKGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAsIGNvbHVtbnM6IENvbHVtblNldCA9IHRoaXMuY29sdW1ucyk6IHRoaXMge1xuXHRcdGNvbnN0IGl0ZW1Db2x1bW5zID0gY29sdW1ucy5pdGVtO1xuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5tb2RpZmllZDtcblxuXHRcdHRoaXMudXBkYXRlSXRlbVZhbHVlcyh0aGlzLmluaXRpYWwsIGl0ZW1Db2x1bW5zLCBjb252ZXJzaW9uTWFwKTtcblxuXHRcdGlmIChtb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHR0aGlzLnVwZGF0ZUl0ZW1WYWx1ZXMobW9kaWZpZWQsIGl0ZW1Db2x1bW5zLCBjb252ZXJzaW9uTWFwKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Zm9ybWF0UmVxdWVzdCAoKTogRmllbGRNYXAge1xuXHRcdGNvbnN0IGFwaUZvcm1hdHRlciA9IHRoaXMuZmFjdG9yeS5hcGlGb3JtYXR0ZXI7XG5cdFx0Y29uc3QgbWFpbkNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFpbjtcblxuXHRcdGlmICh0aGlzLmlzTG9jYWwoKSlcblx0XHRcdHJldHVybiBhcGlGb3JtYXR0ZXIuZm9ybWF0UmVxdWVzdExvY2FsKHRoaXMuZ2V0RmllbGRzKCksIG1haW5Db2x1bW5zKTtcblxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4ge307XG5cblx0XHRyZXR1cm4gYXBpRm9ybWF0dGVyLmZvcm1hdFJlcXVlc3QodGhpcy5pbml0aWFsLCB0aGlzLm1vZGlmaWVkLCBtYWluQ29sdW1ucyk7XG5cdH1cblxuXHRzZXREaXNwbGF5TmFtZSAoKTogdGhpcyB7XG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0Y29uc3QgcmVzdWx0ID0gdGhpcy5nZXREaXNwbGF5TmFtZSgpO1xuXG5cdFx0aWYgKHJlc3VsdClcblx0XHRcdHRoaXMubW9kaWZpZWQuZGlzcGxheW5hbWUgPSByZXN1bHQ7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGdldERpc3BsYXlOYW1lICgpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGl0ZW1FbnRyeVNlcnZpY2UgPSB0aGlzLmZhY3RvcnkuaXRlbUVudHJ5U2VydmljZTtcblx0XHRjb25zdCBmaWVsZHMgPSB0aGlzLmdldEZpZWxkcygpO1xuXG5cdFx0c3dpdGNoICh0aGlzLml0ZW1UeXBlKSB7XG5cdFx0XHRjYXNlICdDb250YWN0Jzpcblx0XHRcdFx0cmV0dXJuIGZpZWxkcy50eXBlID09PSAnYmVkcmlqZicgP1xuXHRcdFx0XHRcdGZpZWxkcy5iZWRyaWpmIDogaXRlbUVudHJ5U2VydmljZS5nZXRGdWxsTmFtZShcblx0XHRcdFx0XHRcdGZpZWxkcy52b29ybmFhbSxcblx0XHRcdFx0XHRcdGZpZWxkcy50dXNzZW52b2Vnc2VsLFxuXHRcdFx0XHRcdFx0ZmllbGRzLm5hYW1cblx0XHRcdFx0XHQpO1xuXHRcdFx0Y2FzZSAnTWVkZXdlcmtlcic6XG5cdFx0XHRjYXNlICdQZXJzb24nOlxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5U2VydmljZS5nZXRGdWxsTmFtZShcblx0XHRcdFx0XHRmaWVsZHMudm9vcm5hYW0sXG5cdFx0XHRcdFx0ZmllbGRzLnR1c3NlbnZvZWdzZWwsXG5cdFx0XHRcdFx0ZmllbGRzLmFjaHRlcm5hYW1cblx0XHRcdFx0KTtcblx0XHRcdGNhc2UgJ1JlcGFyYXRpZSc6XG5cdFx0XHRcdHJldHVybiB0aGlzLmRlcml2ZWRbJ21hdGVyaWFhbD5uYWFtJ107IC8vIFRPRE8hXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmllbGRzW2l0ZW1FbnRyeVNlcnZpY2UuZ2V0VGl0bGVGaWVsZCh0aGlzLml0ZW1UeXBlKV07XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Qm9vbGVhbn0gcmV0dXJuQWxsIFJldHVybnMgYWxsIGluaXRpYWwgdmFsdWVzIGlmIHRydWVcblx0ICogQHJldHVybnMge09iamVjdH1cblx0ICovXG5cdGdldENoYW5nZXMgKHJldHVybkFsbDogYm9vbGVhbiA9IGZhbHNlKSB7XG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgPT09IHVuZGVmaW5lZCAmJiAhcmV0dXJuQWxsKVxuXHRcdFx0cmV0dXJuIFtdO1xuXG5cdFx0cmV0dXJuIHRoaXMuZmFjdG9yeS5hcGlGb3JtYXR0ZXIuZ2V0Q2hhbmdlcyhcblx0XHRcdHRoaXMuaW5pdGlhbCxcblx0XHRcdHJldHVybkFsbCA/IHt9IDogdGhpcy5tb2RpZmllZCxcblx0XHRcdHRoaXMuY29sdW1ucy5tYWluXG5cdFx0KTtcblx0fVxuXG5cdGlzTG9jYWwgKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmZhY3Rvcnkua2V5U2VydmljZS5pc0xvY2FsSWQodGhpcy5pdGVtSWQpO1xuXHR9XG5cblx0aXNMb2NrYWJsZSAoKTogYm9vbGVhbiB7XG5cdFx0aWYgKHRoaXMuaXNMb2NhbCgpKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0c3dpdGNoICh0aGlzLml0ZW1UeXBlKSB7XG5cdFx0XHRjYXNlICdQcm9qZWN0Jzpcblx0XHRcdGNhc2UgJ01hdGVyaWFhbCc6XG5cdFx0XHRjYXNlICdDb250YWN0Jzpcblx0XHRcdGNhc2UgJ01lZGV3ZXJrZXInOlxuXHRcdFx0Y2FzZSAnVm9lcnR1aWcnOlxuXHRcdFx0Y2FzZSAnVGVtcGxhdGUnOlxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRoYXNDaGFuZ2VzICgpOiBib29sZWFuIHtcblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0cmV0dXJuIHRoaXMuZmFjdG9yeS5hcGlGb3JtYXR0ZXIuaGFzQ2hhbmdlcyhcblx0XHRcdHRoaXMuaW5pdGlhbCxcblx0XHRcdHRoaXMubW9kaWZpZWQsXG5cdFx0XHR0aGlzLmNvbHVtbnMubWFpblxuXHRcdCk7XG5cdH1cblxuXHRyZXNldE1vZGlmaWVkICgpOiB0aGlzIHtcblx0XHRjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1haW47XG5cblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cdFx0XHR0aGlzLm1vZGlmaWVkW2NvbHVtbi5pZF0gPSB0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyLmNsb25lKFxuXHRcdFx0XHRjb2x1bW4uYXBpQ29sdW1uLnR5cGUsXG5cdFx0XHRcdHRoaXMuaW5pdGlhbFtjb2x1bW4uaWRdXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0SW5pdGlhbCAodmFsdWVzOiBGaWVsZE1hcCwgZW5hYmxlQ2FsbGJhY2tzOiBib29sZWFuID0gZmFsc2UpOiB0aGlzIHtcblx0XHRjb25zdCBhcGlGb3JtYXR0ZXIgPSB0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyO1xuXHRcdGxldCBwcmV2aW91cztcblxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gdmFsdWVzKVxuXHRcdFx0dGhpcy5pbml0aWFsW2NvbHVtbklkXSA9IHZhbHVlc1tjb2x1bW5JZF07XG5cblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAoZW5hYmxlQ2FsbGJhY2tzKVxuXHRcdFx0XHR0aGlzLmNhbGxPbkNoYW5nZShhcGlGb3JtYXR0ZXIuY29weUZpZWxkcyh0aGlzLmluaXRpYWwsIHt9LCB0aGlzLmNvbHVtbnMubWFpbikpO1xuXG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRwcmV2aW91cyA9IGFwaUZvcm1hdHRlci5jb3B5RmllbGRzKHRoaXMubW9kaWZpZWQsIHt9LCB0aGlzLmNvbHVtbnMubWFpbik7XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHZhbHVlcylcblx0XHRcdHRoaXMubW9kaWZpZWRbY29sdW1uSWRdID0gdmFsdWVzW2NvbHVtbklkXTtcblxuXHRcdGlmIChlbmFibGVDYWxsYmFja3MpXG5cdFx0XHR0aGlzLmNhbGxPbkNoYW5nZShwcmV2aW91cyk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBEb2VzIGEgc2hhbGxvdyBjb3B5IG9mIHZhbHVlcyFcblx0ICovXG5cdHNldE1vZGlmaWVkICh2YWx1ZXM/OiBGaWVsZE1hcCk6IHRoaXMge1xuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XG5cdFx0Y29uc3QgYXBpRm9ybWF0dGVyID0gZmFjdG9yeS5hcGlGb3JtYXR0ZXI7XG5cdFx0Y29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1ucztcblx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSBjb2x1bW5zLnJlc3BvbnNlW3RoaXMuaXRlbVR5cGVdO1xuXG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgaW5pdGlhbCA9IHRoaXMuaW5pdGlhbDtcblx0XHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5tb2RpZmllZCA9IHRoaXMuaXNMb2NhbCgpID8gZmFjdG9yeS5pdGVtRW50cnlTZXJ2aWNlLmdldExvY2FsRGVmYXVsdFZhbHVlcygpIDoge307XG5cblx0XHRcdGlmICh2YWx1ZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0YXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoaW5pdGlhbCwgbW9kaWZpZWQsIGNvbHVtbnMubWFpbik7XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0YXBpRm9ybWF0dGVyLnNoYWxsb3dDb3B5RmllbGRzKHZhbHVlcywgaW5pdGlhbCwgbW9kaWZpZWQsIGNvbHVtbnMubWFpbik7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB2YWx1ZXMpIHtcblx0XHRcdFx0XHRpZiAocmVzcG9uc2VDb2x1bW5zW2NvbHVtbklkXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHQvLyB0b2RvOiBkZXYgbW9kZSBjb25zdGFudFxuXHRcdFx0XHRcdFx0Ly8gaWYgKERFVl9NT0RFKVxuXHRcdFx0XHRcdFx0Ly8gXHRjb25zb2xlLndhcm4oJ3NldE1vZGlmaWVkOiBubyBjb2x1bW4gZm91bmQgZm9yJywgY29sdW1uSWQpO1xuXG5cdFx0XHRcdFx0XHRtb2RpZmllZFtjb2x1bW5JZF0gPSB2YWx1ZXNbY29sdW1uSWRdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHRoaXMucmVzb3VyY2VzKSB7XG5cdFx0XHRcdGlmIChyZXNvdXJjZSBpbnN0YW5jZW9mIExvY2FsVmlld1Jlc291cmNlKVxuXHRcdFx0XHRcdHJlc291cmNlLmZpZWxkcyA9IG1vZGlmaWVkO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRpZiAodmFsdWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gdmFsdWVzKVxuXHRcdFx0dGhpcy5tb2RpZmllZFtjb2x1bW5JZF0gPSB2YWx1ZXNbY29sdW1uSWRdO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXREZXJpdmVkICh2YWx1ZXM6IEZpZWxkTWFwKTogdGhpcyB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gdmFsdWVzKVxuXHRcdFx0dGhpcy5kZXJpdmVkW2tleV0gPSB2YWx1ZXNba2V5XTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0UGFyZW50IChwYXJlbnRUeXBlOiBJdGVtVHlwZSwgcGFyZW50SWQ6IEl0ZW1JZCk6IHRoaXMge1xuXHRcdHRoaXMucGFyZW50ID0ge1xuXHRcdFx0aXRlbVR5cGU6IHBhcmVudFR5cGUsXG5cdFx0XHRpdGVtSWQ6IHBhcmVudElkXG5cdFx0fTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y2FsbE9uQ2hhbmdlIChwcmV2aW91cz86IEZpZWxkTWFwKTogdGhpcyB7XG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgdGhpcy5yZXNvdXJjZXMpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGl0ZW1SZXNvdXJjZS5vcHRpb25zLm9uQ2hhbmdlKGl0ZW1SZXNvdXJjZSwgcHJldmlvdXMpO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0dGhpcy5mYWN0b3J5LmV4Y2VwdGlvbkhhbmRsZXIoZXJyb3IpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0dG9KU09OICgpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0aWQ6IHRoaXMuaWQsXG5cdFx0XHRwYXJlbnQ6IHRoaXMucGFyZW50LFxuXHRcdFx0aW5pdGlhbDogdGhpcy5pbml0aWFsLFxuXHRcdFx0bW9kaWZpZWQ6IHRoaXMubW9kaWZpZWQsXG5cdFx0XHRkZXJpdmVkOiB0aGlzLmRlcml2ZWQsXG5cdFx0XHRjb2x1bW5zOiB0aGlzLmNvbHVtbnNcblx0XHR9O1xuXHR9XG59XG4iLCJpbXBvcnQgeyBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZU9wdGlvbnMgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgRmllbGRNYXAsIFJlc3BvbnNlQ29sdW1uIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgSXRlbVJlc291cmNlIHtcblx0Y29sdW1uczogeyBbY29sdW1uSWQ6IHN0cmluZ106IFJlc3BvbnNlQ29sdW1uIH07XG5cdGZpZWxkczogRmllbGRNYXA7XG5cdGRlcml2ZWQ6IEZpZWxkTWFwO1xuXG5cdHByb3RlY3RlZCBjb25zdHJ1Y3RvciAoXG5cdFx0cHVibGljIGVudHJ5OiBJdGVtRW50cnksXG5cdFx0cHVibGljIG9wdGlvbnM6IEl0ZW1SZXNvdXJjZU9wdGlvbnMsXG5cdFx0cHJvdGVjdGVkIHJlYWRvbmx5IF9pc05ldzogYm9vbGVhbiA9IGZhbHNlXG5cdCkge1xuXHRcdHRoaXMuZGVyaXZlZCA9IGVudHJ5LmRlcml2ZWQ7XG5cdFx0dGhpcy5jb2x1bW5zID0gZW50cnkuY29sdW1ucy5yZXNwb25zZVtlbnRyeS5jb2x1bW5zLml0ZW1UeXBlXTtcblxuXHRcdGVudHJ5LnJlc291cmNlcy5wdXNoKHRoaXMpO1xuXHR9XG5cblx0aXNOZXcgKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLl9pc05ldztcblx0fVxuXG5cdGlzTG9jYWwgKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmVudHJ5LmlzTG9jYWwoKTtcblx0fVxuXG5cdGNsZWFyUmVzb3VyY2UgKCk6IHZvaWQge1xuXHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMuZW50cnkucmVzb3VyY2VzO1xuXHRcdGNvbnN0IGluZGV4ID0gcmVzb3VyY2VzLmluZGV4T2YodGhpcyk7XG5cblx0XHRpZiAoaW5kZXggIT09IC0xKVxuXHRcdFx0cmVzb3VyY2VzLnNwbGljZShpbmRleCwgMSk7XG5cdH1cblxuXHRkZWFjdGl2YXRlICgpOiB2b2lkIHtcblx0XHR0aGlzLm9wdGlvbnMub25EZWFjdGl2YXRlKHRoaXMuZW50cnkpO1xuXHR9XG5cblx0dG9KU09OICgpIHtcblx0XHRjb25zdCBjb2x1bW5JZHM6IHN0cmluZ1tdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHRoaXMuY29sdW1ucylcblx0XHRcdGNvbHVtbklkcy5wdXNoKGNvbHVtbklkKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRjb2x1bW5zOiBjb2x1bW5JZHMsXG5cdFx0XHRmaWVsZHM6IHRoaXMuZmllbGRzLFxuXHRcdFx0ZGVyaXZlZDogdGhpcy5kZXJpdmVkLFxuXHRcdFx0ZW50cnk6IHRoaXMuZW50cnlcblx0XHR9O1xuXHR9XG59XG4iLCJpbXBvcnQgeyBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSwgSXRlbVJlc291cmNlT3B0aW9ucyB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBGaWVsZE1hcCB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFZpZXdSZXNvdXJjZSBleHRlbmRzIEl0ZW1SZXNvdXJjZSB7XG5cdGZpZWxkczogUmVhZG9ubHk8RmllbGRNYXA+O1xuXG5cdHByb3RlY3RlZCBjb25zdHJ1Y3RvciAoXG5cdFx0ZW50cnk6IEl0ZW1FbnRyeSxcblx0XHRvcHRpb25zOiBJdGVtUmVzb3VyY2VPcHRpb25zLFxuXHRcdGlzTmV3PzogYm9vbGVhblxuXHQpIHtcblx0XHRzdXBlcihlbnRyeSwgb3B0aW9ucywgaXNOZXcpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBjcmVhdGVQYXRoIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBJdGVtUmVzb3VyY2VGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlLCBJdGVtUmVzb3VyY2VPcHRpb25zIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IEZpZWxkTWFwLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgRWRpdFJlc291cmNlIGV4dGVuZHMgSXRlbVJlc291cmNlIHtcblx0bG9jYWxDb3BpZXM6IEZpZWxkTWFwW10gPSBbXTtcblx0dHJhbnNhY3Rpb25zOiBudW1iZXIgPSAwO1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0ZW50cnk6IEl0ZW1FbnRyeSxcblx0XHRvcHRpb25zOiBJdGVtUmVzb3VyY2VPcHRpb25zLFxuXHRcdGlzTmV3PzogYm9vbGVhblxuXHQpIHtcblx0XHRzdXBlcihlbnRyeSwgb3B0aW9ucywgaXNOZXcpO1xuXG5cdFx0ZW50cnkuc2V0TW9kaWZpZWQoKTtcblxuXHRcdHRoaXMuZmllbGRzID0gZW50cnkubW9kaWZpZWQ7XG5cdH1cblxuXHRpc05ldyAoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuX2lzTmV3ICYmIHRoaXMudHJhbnNhY3Rpb25zID09PSAwO1xuXHR9XG5cblx0c3RhcnQgKCk6IHRoaXMge1xuXHRcdGlmICh0aGlzLmxvY2FsQ29waWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHR0aGlzLmxvY2FsQ29waWVzID0gW107XG5cblx0XHR0aGlzLmxvY2FsQ29waWVzLnB1c2godGhpcy5jb3B5RmllbGRzKCkpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRyb2xsYmFjayAoKTogdGhpcyB7XG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyeTtcblxuXHRcdHRoaXMuZmFjdG9yeS5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyg8RmllbGRNYXA+IHRoaXMubG9jYWxDb3BpZXMucG9wKCksIGl0ZW1FbnRyeS5tb2RpZmllZCwgaXRlbUVudHJ5LmNvbHVtbnMubWFpbik7XG5cblx0XHRpZiAodGhpcy5pc05ldygpICYmIHRoaXMubG9jYWxDb3BpZXMubGVuZ3RoID09PSAwKVxuXHRcdFx0dGhpcy5kZWFjdGl2YXRlKCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNvbW1pdCAoY2FsbE9uQ2hhbmdlOiBib29sZWFuID0gdHJ1ZSk6IHRoaXMge1xuXHRcdGNvbnN0IHByZXZpb3VzID0gPEZpZWxkTWFwPiB0aGlzLmxvY2FsQ29waWVzLnBvcCgpO1xuXG5cdFx0aWYgKGNhbGxPbkNoYW5nZSlcblx0XHRcdHRoaXMuY2FsbE9uQ2hhbmdlKHByZXZpb3VzKTtcblxuXHRcdHRoaXMudHJhbnNhY3Rpb25zKys7IC8vIGNvbXBsZXRlZCB0cmFuc2FjdGlvbnNcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Z2V0TG9jYWxDb3B5ICgpOiBGaWVsZE1hcCB8IG51bGwge1xuXHRcdGNvbnN0IGxvY2FsQ29waWVzID0gdGhpcy5sb2NhbENvcGllcztcblxuXHRcdGlmIChsb2NhbENvcGllcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHRpZiAobG9jYWxDb3BpZXMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHRyZXR1cm4gbG9jYWxDb3BpZXNbbG9jYWxDb3BpZXMubGVuZ3RoIC0gMV07XG5cdH1cblxuXHRjb3B5RmllbGRzIChkZXN0aW5hdGlvbjogRmllbGRNYXAgPSB7fSk6IEZpZWxkTWFwIHtcblx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLmVudHJ5O1xuXG5cdFx0cmV0dXJuIHRoaXMuZmFjdG9yeS5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyhpdGVtRW50cnkubW9kaWZpZWQsIGRlc3RpbmF0aW9uLCBpdGVtRW50cnkuY29sdW1ucy5tYWluKTtcblx0fVxuXG5cdHNldEZpZWxkcyAodmFsdWVzOiBGaWVsZE1hcCwgY2FsbE9uQ2hhbmdlOiBib29sZWFuID0gdHJ1ZSk6IHRoaXMge1xuXHRcdGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XG5cdFx0Y29uc3QgZmllbGRzID0gdGhpcy5maWVsZHM7XG5cdFx0bGV0IGhhc0NoYW5nZXMgPSBmYWxzZTtcblx0XHRsZXQgcHJldmlvdXM7XG5cblx0XHRpZiAoY2FsbE9uQ2hhbmdlKVxuXHRcdFx0cHJldmlvdXMgPSB0aGlzLmNvcHlGaWVsZHMoKTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gdmFsdWVzKSB7XG5cdFx0XHRjb25zdCBjb2x1bW4gPSBjb2x1bW5zW2NvbHVtbklkXTtcblxuXHRcdFx0aWYgKGNvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnNvbGUud2Fybignc2V0RmllbGRzOiBubyBjb2x1bW4gZm91bmQgZm9yJywgY29sdW1uSWQpO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuZmFjdG9yeS5hcGlGb3JtYXR0ZXIuY29tcGFyZUZpZWxkcyhjb2x1bW4udHlwZSwgZmllbGRzW2NvbHVtbklkXSwgdmFsdWVzW2NvbHVtbklkXSkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRmaWVsZHNbY29sdW1uSWRdID0gdmFsdWVzW2NvbHVtbklkXTtcblx0XHRcdGhhc0NoYW5nZXMgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChjYWxsT25DaGFuZ2UgJiYgaGFzQ2hhbmdlcylcblx0XHRcdHRoaXMuY2FsbE9uQ2hhbmdlKHByZXZpb3VzKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y2FsbE9uQ2hhbmdlIChwcmV2aW91cz86IEZpZWxkTWFwKTogdGhpcyB7XG5cdFx0dGhpcy5lbnRyeS5jYWxsT25DaGFuZ2UocHJldmlvdXMpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzYXZlIChwYXJhbWV0ZXJzPzogYW55KTogUHJvbWlzZUludGVyZmFjZTx0aGlzPiB7XG5cdFx0Y29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTtcblx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLmVudHJ5O1xuXHRcdGNvbnN0IHBhcmFtZXRlck1hcCA9IHt9O1xuXG5cdFx0aWYgKHBhcmFtZXRlcnMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y3JlYXRlUGF0aChcblx0XHRcdFx0cGFyYW1ldGVyTWFwLFxuXHRcdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcblx0XHRcdFx0W3t9LCBwYXJhbWV0ZXJzXVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0aXRlbUVudHJ5LmlzTG9ja2FibGUoKSA/XG5cdFx0XHRcdGZhY3RvcnkubG9ja1NlcnZpY2UuZmV0Y2hMb2NrKGl0ZW1FbnRyeSkgOlxuXHRcdFx0XHRmYWN0b3J5LnByb21pc2VTZXJ2aWNlLndoZW4oKVxuXHRcdCkudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0Ly8gYWRkVG9Db2xsZWN0aW9ucyBpcyBjYWxsZWQgaW4gY2hhbmdlc1Byb2Nlc3NvclxuXHRcdFx0XHRyZXR1cm4gZmFjdG9yeS5jaGFuZ2VzUHJvY2Vzc29yLmV4ZWN1dGUoW2l0ZW1FbnRyeV0sIFtdLCBwYXJhbWV0ZXJNYXApO1xuXHRcdFx0fSxcblx0XHRcdGZhY3RvcnkuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0ZmFjdG9yeS5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgaW5zdGFudGlhdGVPcHRpb25zIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBBcGlRdWVyeSwgQXBpUmVxdWVzdENvbHVtbnMsIEFwaVJlcXVlc3RMaW1pdCwgRW50cnlQYXJlbnROdWxsIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBDb2xsZWN0aW9uRW50cnlPcHRpb25zSW50ZXJmYWNlID0gUGFydGlhbDxDb2xsZWN0aW9uRW50cnlPcHRpb25zPjtcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25FbnRyeU9wdGlvbnMge1xuXHRjb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyA9IFtdO1xuXHRxdWVyeTogQXBpUXVlcnkgfCBudWxsID0gbnVsbDtcblx0cXVlcnlQYXJhbXM6IGFueSA9IHt9OyAvLyBUT0RPXG5cdHBhcmVudDogRW50cnlQYXJlbnROdWxsID0gbnVsbDtcblx0ZGVmZXJSZXF1ZXN0OiBib29sZWFuID0gZmFsc2U7XG5cdGxpbWl0OiBBcGlSZXF1ZXN0TGltaXQgfCBudWxsID0gbnVsbDtcblx0ZW50cnlLZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG5cdGNvbnN0cnVjdG9yICh2YWx1ZXM6IENvbGxlY3Rpb25FbnRyeU9wdGlvbnNJbnRlcmZhY2UpIHtcblx0XHRpbnN0YW50aWF0ZU9wdGlvbnModGhpcywgdmFsdWVzKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgaW5zdGFudGlhdGVPcHRpb25zIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vY29yZSc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSwgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgQ29udmVyc2lvbk1hcCwgT25DaGFuZ2VGdW5jdGlvbiB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgQ29sbGVjdGlvblJlc291cmNlQ2FsbGJhY2sgPSAoXG5cdGl0ZW1SZXNvdXJjZXM6IEl0ZW1SZXNvdXJjZVtdLFxuXHRjb2xsZWN0aW9uUmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZVxuKSA9PiB2b2lkO1xuXG5leHBvcnQgdHlwZSBDb2xsZWN0aW9uUmVzb3VyY2VJbml0aWFsQ2FsbGJhY2sgPSAoXG5cdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcblx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnlcbikgPT4gdm9pZDtcblxuZXhwb3J0IHR5cGUgT25JdGVtc0NyZWF0ZWRDYWxsYmFjayA9IChjb252ZXJzaW9uTWFwOiBDb252ZXJzaW9uTWFwKSA9PiB2b2lkO1xuXG5leHBvcnQgdHlwZSBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlID0gUGFydGlhbDxDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zPjtcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnMge1xuXHRlZGl0SXRlbXM6IGJvb2xlYW4gPSBmYWxzZTtcblx0cmVtb3RlSXRlbXM6IGJvb2xlYW4gPSBmYWxzZTtcblx0ZWRpdENvbGxlY3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcblx0bW9kSW5zdGFudDogYm9vbGVhbiA9IGZhbHNlO1xuXHRlbmFibGVTYXZlOiBib29sZWFuID0gdHJ1ZTtcblx0b25JdGVtc0NyZWF0ZWQ6IE9uSXRlbXNDcmVhdGVkQ2FsbGJhY2sgPSBub29wO1xuXHRvbkNoYW5nZTogT25DaGFuZ2VGdW5jdGlvbiA9IG5vb3A7XG5cdG9uQWRkOiBDb2xsZWN0aW9uUmVzb3VyY2VDYWxsYmFjayA9IG5vb3A7XG5cdG9uUmVtb3ZlOiBDb2xsZWN0aW9uUmVzb3VyY2VDYWxsYmFjayA9IG5vb3A7XG5cdG9uQWRkSW5pdGlhbDogQ29sbGVjdGlvblJlc291cmNlSW5pdGlhbENhbGxiYWNrID0gbm9vcDtcblx0b25SZW1vdmVJbml0aWFsOiBDb2xsZWN0aW9uUmVzb3VyY2VJbml0aWFsQ2FsbGJhY2sgPSBub29wO1xuXHRyZXNvdXJjZUtleTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cdGNsZWFyT25UYWJDaGFuZ2U6IGJvb2xlYW4gPSB0cnVlO1xuXHRjbGVhck9uU3ViVGFiQ2hhbmdlOiBib29sZWFuID0gdHJ1ZTtcblx0Y3VzdG9tOiBhbnkgPSBudWxsO1xuXG5cdGNvbnN0cnVjdG9yICh2YWx1ZXM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UpIHtcblx0XHRpbnN0YW50aWF0ZU9wdGlvbnModGhpcywgdmFsdWVzKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQmF0Y2hTdGF0dXMsIENvbHVtbkV4cGFuc2lvbiwgQ29sdW1uSW5mbywgQ29sdW1uU2V0LCBpbkFycmF5LCBJdGVtQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEVOVFJZX1NUQVRVUyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnlGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeU9wdGlvbnMsIENvbGxlY3Rpb25SZXNvdXJjZSwgSXRlbUVudHJ5LCBUZW1wbGF0ZSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge1xuXHRBcGlSZXF1ZXN0Q29sdW1ucyxcblx0Q29sbGVjdGlvblF1ZXJ5LFxuXHRDb252ZXJzaW9uTWFwLFxuXHRFbnRyeVBhcmVudE51bGwsXG5cdEZpZWxkTWFwLFxuXHRJdGVtSWQsXG5cdEl0ZW1JZENvbnZlcnNpb25NYXAsXG5cdEl0ZW1UeXBlLFxuXHRQcm9taXNlSW50ZXJmYWNlLFxuXHRRdWVyeUNhbGxiYWNrXG59IGZyb20gJy4uL3R5cGVzJztcblxubGV0IGN1cnJlbnRJZCA9IDA7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRW50cnkge1xuXHRpZDogbnVtYmVyID0gY3VycmVudElkKys7XG5cdHF1ZXJ5OiBDb2xsZWN0aW9uUXVlcnk7XG5cdGNvbHVtbnM6IENvbHVtblNldDtcblx0dGVtcGxhdGVDb2x1bW5zOiBDb2x1bW5TZXQgfCBudWxsID0gbnVsbDtcblxuXHRwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCA9IG51bGw7XG5cblx0aW5pdGlhbDogSXRlbUVudHJ5W10gPSBbXTtcblx0aXRlbXM6IEl0ZW1FbnRyeVtdID0gW107XG5cblx0cmVzb3VyY2VzOiBDb2xsZWN0aW9uUmVzb3VyY2VbXSA9IFtdO1xuXHRkZWZlcnJlZDogYW55O1xuXHRwcm9taXNlOiBQcm9taXNlSW50ZXJmYWNlPHRoaXM+O1xuXHRyZWxvYWRRdWV1ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuXHRoYXNFZGl0UmVzb3VyY2VzID0gZmFsc2U7XG5cdGhhc0l0ZW1FZGl0UmVzb3VyY2VzID0gZmFsc2U7XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgZmFjdG9yeTogQ29sbGVjdGlvbkVudHJ5RmFjdG9yeSxcblx0XHRwdWJsaWMgaXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHB1YmxpYyBvcHRpb25zOiBDb2xsZWN0aW9uRW50cnlPcHRpb25zXG5cdCkge1xuXHRcdHRoaXMucGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XG5cdFx0dGhpcy5xdWVyeSA9IGZhY3RvcnkuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jcmVhdGVRdWVyeShvcHRpb25zKTtcblx0XHR0aGlzLmNvbHVtbnMgPSBmYWN0b3J5LmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0U3R1YihpdGVtVHlwZSwgb3B0aW9ucy5jb2x1bW5zKTtcblxuXHRcdHRoaXMuZGVmZXIoKTtcblx0fVxuXG5cdGRlZmVyICgpOiB0aGlzIHtcblx0XHRpZiAodGhpcy5pc0RlZmVycmVkKCkpXG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdHRoaXMuZGVmZXJyZWQgPSB0aGlzLmZhY3RvcnkucHJvbWlzZVNlcnZpY2UuZGVmZXIoKTtcblx0XHR0aGlzLnByb21pc2UgPSB0aGlzLmRlZmVycmVkLnByb21pc2U7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGlzRGVmZXJyZWQgKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLnByb21pc2UgIT09IHVuZGVmaW5lZDtcblx0fVxuXG5cdF9yZXNvbHZlICgpOiB0aGlzIHtcblx0XHRjb25zdCBkZWZlcnJlZCA9IHRoaXMuZGVmZXJyZWQ7XG5cblx0XHRkZWxldGUgdGhpcy5kZWZlcnJlZDtcblx0XHRkZWxldGUgdGhpcy5wcm9taXNlO1xuXG5cdFx0ZGVmZXJyZWQucmVzb2x2ZSh0aGlzKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cmVzb2x2ZSAoaXRlbUVudHJ5Q29tcG91bmQ6IHtjb2x1bW5zOiBDb2x1bW5TZXQsIGluaXRpYWw6IEl0ZW1FbnRyeVtdLCBtb2RpZmllZD86IEl0ZW1FbnRyeVtdfSk6IHRoaXMge1xuXHRcdGNvbnN0IHtpbml0aWFsLCBtb2RpZmllZH0gPSBpdGVtRW50cnlDb21wb3VuZDtcblxuXHRcdHRoaXMuY29sdW1ucyA9IGl0ZW1FbnRyeUNvbXBvdW5kLmNvbHVtbnM7XG5cdFx0dGhpcy5pbml0aWFsID0gaW5pdGlhbDtcblx0XHR0aGlzLml0ZW1zID0gbW9kaWZpZWQgIT09IHVuZGVmaW5lZCA/IG1vZGlmaWVkIDogaW5pdGlhbC5zbGljZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXMuX3Jlc29sdmUoKTtcblx0fVxuXG5cdGlzTG9jYWwgKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJldHVybiB0aGlzLmZhY3Rvcnkua2V5U2VydmljZS5pc0xvY2FsSWQocGFyZW50Lml0ZW1JZCk7XG5cdH1cblxuXHRtYXRjaFBhcmVudCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdC8vID09IHRvIGNvbXBhcmUgaXRlbUlkc1xuXHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXG5cdFx0cmV0dXJuIHBhcmVudC5pdGVtVHlwZSA9PT0gaXRlbVR5cGUgJiYgcGFyZW50Lml0ZW1JZCA9PSBpdGVtSWQ7XG5cdH1cblxuXHRmb3JFYWNoIChjYWxsYmFjazogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiB2b2lkKTogdm9pZCB7XG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xuXG5cdFx0Zm9yIChjb25zdCBtb2Qgb2YgbW9kaWZpZWQpXG5cdFx0XHRjYWxsYmFjayhtb2QpO1xuXHR9XG5cblx0Z2V0SXRlbUJ5SWQgKGl0ZW1JZDogSXRlbUlkKTogSXRlbUVudHJ5IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBtb2RpZmllZCkge1xuXHRcdFx0aWYgKGl0ZW1FbnRyeS5pdGVtSWQgPT09IGl0ZW1JZClcblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Z2V0SWRBcnJheSAoYWNjdW11bGF0b3I6IEl0ZW1JZFtdID0gW10pOiBJdGVtSWRbXSB7XG5cdFx0cmV0dXJuIHRoaXMuZmFjdG9yeS5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmdldElkQXJyYXkodGhpcy5pdGVtcywgYWNjdW11bGF0b3IpO1xuXHR9XG5cblx0Ly8gc2hvdWxkIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCByZXNvbHZlRGVyaXZlZFxuXHRjcmVhdGVJdGVtcyAodmFsdWVzQXJyYXk6IEZpZWxkTWFwW10pOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1FbnRyeVtdPiB7XG5cdFx0Y29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTtcblx0XHRjb25zdCBjb2x1bW5TZXQgPSB0aGlzLmNvbHVtbnM7XG5cdFx0bGV0IHRlbXBsYXRlOiBUZW1wbGF0ZTtcblxuXHRcdHJldHVybiBmYWN0b3J5Lml0ZW1IYW5kbGVyLmZldGNoVGVtcGxhdGUodGhpcy5pdGVtVHlwZSkudGhlbihcblx0XHRcdCh0ZW1wbGF0ZUluc3RhbmNlOiBUZW1wbGF0ZSkgPT4ge1xuXHRcdFx0XHR0ZW1wbGF0ZSA9IHRlbXBsYXRlSW5zdGFuY2U7XG5cblx0XHRcdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xuXG5cdFx0XHRcdGlmICh0aGlzLnRlbXBsYXRlQ29sdW1ucyA9PT0gbnVsbCkge1xuXHRcdFx0XHRcdHRoaXMudGVtcGxhdGVDb2x1bW5zID0gdGVtcGxhdGUuY29sdW1ucy5tZXJnZShjb2x1bW5TZXQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yIChjb25zdCB2YWx1ZXMgb2YgdmFsdWVzQXJyYXkpIHtcblx0XHRcdFx0XHRyZXN1bHQucHVzaChcblx0XHRcdFx0XHRcdGZhY3RvcnkuaXRlbUVudHJ5RmFjdG9yeS5jb25zdHJ1Y3RMb2NhbChcblx0XHRcdFx0XHRcdFx0ZmFjdG9yeS5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKSxcblx0XHRcdFx0XHRcdFx0dGVtcGxhdGUsXG5cdFx0XHRcdFx0XHRcdHZhbHVlcyxcblx0XHRcdFx0XHRcdFx0e30sXG5cdFx0XHRcdFx0XHRcdHRoaXMucGFyZW50LFxuXHRcdFx0XHRcdFx0XHR0aGlzLnRlbXBsYXRlQ29sdW1uc1xuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0XHR9LFxuXHRcdFx0ZmFjdG9yeS5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHJlc29sdmVEZXJpdmVkVmFsdWVzIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGUpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1FbnRyeVtdPiB7XG5cdFx0cmV0dXJuIHRoaXMuZmFjdG9yeS5pdGVtSGFuZGxlci5yZXNvbHZlRGVyaXZlZFZhbHVlcyhpdGVtRW50cmllcywgdGhpcy5jb2x1bW5zLnJvb3QsIGxvY2FsSXRlbUNhY2hlKTtcblx0fVxuXG5cdGFkZEl0ZW1zPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U+IChcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXG5cdFx0cmVzdWx0UmVzb3VyY2U6IFUsXG5cdFx0dXBkYXRlSW5pdGlhbD86IGJvb2xlYW4sXG5cdFx0Y2FsbE9uQWRkPzogYm9vbGVhbixcblx0XHRjYWxsT25BY3RpdmF0ZT86IGJvb2xlYW5cblx0KTogVVsnaXRlbXMnXTtcblxuXHRhZGRJdGVtcyAoXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRcdHJlc3VsdFJlc291cmNlPzogbnVsbCxcblx0XHR1cGRhdGVJbml0aWFsPzogYm9vbGVhbixcblx0XHRjYWxsT25BZGQ/OiBib29sZWFuLFxuXHRcdGNhbGxPbkFjdGl2YXRlPzogYm9vbGVhblxuXHQpOiBudWxsO1xuXG5cdGFkZEl0ZW1zPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U+IChcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXG5cdFx0cmVzdWx0UmVzb3VyY2U/OiBVIHwgbnVsbCxcblx0XHR1cGRhdGVJbml0aWFsPzogYm9vbGVhbixcblx0XHRjYWxsT25BZGQ/OiBib29sZWFuLFxuXHRcdGNhbGxPbkFjdGl2YXRlPzogYm9vbGVhblxuXHQpOiBVWydpdGVtcyddIHwgbnVsbDtcblxuXHRhZGRJdGVtczxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPiAoXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRcdHJlc3VsdFJlc291cmNlPzogVSB8IG51bGwsXG5cdFx0dXBkYXRlSW5pdGlhbDogYm9vbGVhbiA9IGZhbHNlLFxuXHRcdGNhbGxPbkFkZD86IGJvb2xlYW4sXG5cdFx0Y2FsbE9uQWN0aXZhdGU/OiBib29sZWFuXG5cdCk6IFVbJ2l0ZW1zJ10gfCBudWxsIHtcblx0XHQvLyBsb2NhbCBlbnRyeSBtaWdodCBiZSBhZGRlZCBtdWx0aXBsZSB0aW1lcyAoZXh0ZW5kPylcblx0XHRpZiAoaXRlbUVudHJpZXMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIFtdO1xuXG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xuXHRcdGNvbnN0IHBhcmVudENvbHVtbiA9IHRoaXMuY29sdW1ucy5saW5rO1xuXHRcdGNvbnN0IGVudHJpZXNBZGRlZFRvSW5pdGlhbDogSXRlbUVudHJ5W10gPSBbXTtcblx0XHRjb25zdCBlbnRyaWVzQWRkZWRUb01vZGlmaWVkOiBJdGVtRW50cnlbXSA9IFtdO1xuXG5cdFx0aWYgKHVwZGF0ZUluaXRpYWwpIHtcblx0XHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmluaXRpYWw7XG5cblx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRcdC8vIHdoZW4gc2F2aW5nLCBpdGVtcyB0aGF0IG1pZ2h0IGFscmVhZHkgYmUgaW4gbW9kaWZpZWQgYXJlIGFkZGVkIHRvIGluaXRpYWxcblx0XHRcdFx0aWYgKGluaXRpYWwuaW5kZXhPZihpdGVtRW50cnkpID09PSAtMSkge1xuXHRcdFx0XHRcdGluaXRpYWwucHVzaChpdGVtRW50cnkpO1xuXHRcdFx0XHRcdGVudHJpZXNBZGRlZFRvSW5pdGlhbC5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0aWYgKG1vZGlmaWVkLmluZGV4T2YoaXRlbUVudHJ5KSA9PT0gLTEpIHtcblx0XHRcdFx0aWYgKHBhcmVudCAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdGl0ZW1FbnRyeS5wYXJlbnQgPSBwYXJlbnQ7XG5cblx0XHRcdFx0XHRpZiAocGFyZW50Q29sdW1uICE9PSBudWxsICYmIGl0ZW1FbnRyeS5tb2RpZmllZCAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5Lm1vZGlmaWVkW3BhcmVudENvbHVtbi5pZF0gPSBwYXJlbnQuaXRlbUlkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bW9kaWZpZWQucHVzaChpdGVtRW50cnkpO1xuXHRcdFx0XHRlbnRyaWVzQWRkZWRUb01vZGlmaWVkLnB1c2goaXRlbUVudHJ5KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5oYW5kbGVBZGRlZEl0ZW1DYWxsYmFja3MoXG5cdFx0XHRlbnRyaWVzQWRkZWRUb0luaXRpYWwsXG5cdFx0XHRlbnRyaWVzQWRkZWRUb01vZGlmaWVkLFxuXHRcdFx0cmVzdWx0UmVzb3VyY2UsXG5cdFx0XHRjYWxsT25BZGQsXG5cdFx0XHRjYWxsT25BY3RpdmF0ZVxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIGhhbmRsZUFkZGVkSXRlbUNhbGxiYWNrczxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPiAoXG5cdFx0ZW50cmllc0FkZGVkVG9Jbml0aWFsOiBJdGVtRW50cnlbXSxcblx0XHRlbnRyaWVzQWRkZWRUb01vZGlmaWVkOiBJdGVtRW50cnlbXSxcblx0XHRyZXN1bHRSZXNvdXJjZTogVSxcblx0XHRjYWxsT25BZGQ/OiBib29sZWFuLFxuXHRcdGNhbGxPbkFjdGl2YXRlPzogYm9vbGVhblxuXHQpOiBVWydpdGVtcyddO1xuXG5cdHByaXZhdGUgaGFuZGxlQWRkZWRJdGVtQ2FsbGJhY2tzIChcblx0XHRlbnRyaWVzQWRkZWRUb0luaXRpYWw6IEl0ZW1FbnRyeVtdLFxuXHRcdGVudHJpZXNBZGRlZFRvTW9kaWZpZWQ6IEl0ZW1FbnRyeVtdLFxuXHRcdHJlc3VsdFJlc291cmNlPzogbnVsbCxcblx0XHRjYWxsT25BZGQ/OiBib29sZWFuLFxuXHRcdGNhbGxPbkFjdGl2YXRlPzogYm9vbGVhblxuXHQpOiBudWxsO1xuXG5cdHByaXZhdGUgaGFuZGxlQWRkZWRJdGVtQ2FsbGJhY2tzPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U+IChcblx0XHRlbnRyaWVzQWRkZWRUb0luaXRpYWw6IEl0ZW1FbnRyeVtdLFxuXHRcdGVudHJpZXNBZGRlZFRvTW9kaWZpZWQ6IEl0ZW1FbnRyeVtdLFxuXHRcdHJlc3VsdFJlc291cmNlPzogVSB8IG51bGwsXG5cdFx0Y2FsbE9uQWRkPzogYm9vbGVhbixcblx0XHRjYWxsT25BY3RpdmF0ZT86IGJvb2xlYW5cblx0KTogVVsnaXRlbXMnXSB8IG51bGw7XG5cblx0cHJpdmF0ZSBoYW5kbGVBZGRlZEl0ZW1DYWxsYmFja3M8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZT4gKFxuXHRcdGVudHJpZXNBZGRlZFRvSW5pdGlhbDogSXRlbUVudHJ5W10sXG5cdFx0ZW50cmllc0FkZGVkVG9Nb2RpZmllZDogSXRlbUVudHJ5W10sXG5cdFx0cmVzdWx0UmVzb3VyY2U6IFUgfCBudWxsID0gbnVsbCxcblx0XHRjYWxsT25BZGQ6IGJvb2xlYW4gPSB0cnVlLFxuXHRcdGNhbGxPbkFjdGl2YXRlOiBib29sZWFuID0gdHJ1ZVxuXHQpOiBVWydpdGVtcyddIHwgbnVsbCB7XG5cdFx0Y29uc3QgY29sbGVjdGlvblJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xuXG5cdFx0aWYgKGVudHJpZXNBZGRlZFRvSW5pdGlhbC5sZW5ndGggPiAwKVxuXHRcdFx0dGhpcy5vbkFkZEluaXRpYWwoZW50cmllc0FkZGVkVG9Jbml0aWFsKTtcblxuXHRcdGlmIChlbnRyaWVzQWRkZWRUb01vZGlmaWVkLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiByZXN1bHRSZXNvdXJjZSA9PT0gbnVsbCA/IG51bGwgOiBbXTtcblxuXHRcdGlmIChjYWxsT25BY3RpdmF0ZSAmJiBjb2xsZWN0aW9uUmVzb3VyY2VzLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSBjb2xsZWN0aW9uUmVzb3VyY2VzWzBdLmxvY2FsQ2FjaGU7XG5cblx0XHRcdGZvciAoY29uc3QgYWRkZWRJdGVtRW50cnkgb2YgZW50cmllc0FkZGVkVG9Nb2RpZmllZClcblx0XHRcdFx0bG9jYWxDYWNoZS5vbkFjdGl2YXRlSXRlbShhZGRlZEl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0bGV0IHJlc3VsdDogVVsnaXRlbXMnXSB8IG51bGwgPSBudWxsO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2Ugb2YgY29sbGVjdGlvblJlc291cmNlcykge1xuXHRcdFx0Y29uc3QgYWRkZWRSZXNvdXJjZXMgPSBjb2xsZWN0aW9uUmVzb3VyY2UuYWRkSXRlbVJlc291cmNlcyhlbnRyaWVzQWRkZWRUb01vZGlmaWVkKTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25SZXNvdXJjZSA9PT0gcmVzdWx0UmVzb3VyY2UpIHtcblx0XHRcdFx0cmVzdWx0ID0gYWRkZWRSZXNvdXJjZXM7XG5cblx0XHRcdFx0aWYgKGNhbGxPbkFkZCkge1xuXHRcdFx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2UuY2FsbE9uQWRkKGFkZGVkUmVzb3VyY2VzKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlXG5cdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5jYWxsT25BZGQoYWRkZWRSZXNvdXJjZXMpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRyZW1vdmVJdGVtczxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPiAoXG5cdFx0aWRBcnJheTogSXRlbUlkW10sXG5cdFx0cmVzdWx0UmVzb3VyY2U6IFUsXG5cdFx0dXBkYXRlSW5pdGlhbD86IGJvb2xlYW4sXG5cdFx0Y2FsbE9uUmVtb3ZlPzogYm9vbGVhblxuXHQpOiBVWydpdGVtcyddO1xuXG5cdHJlbW92ZUl0ZW1zIChcblx0XHRpZEFycmF5OiBJdGVtSWRbXSxcblx0XHRyZXN1bHRSZXNvdXJjZT86IG51bGwsXG5cdFx0dXBkYXRlSW5pdGlhbD86IGJvb2xlYW4sXG5cdFx0Y2FsbE9uUmVtb3ZlPzogYm9vbGVhblxuXHQpOiBudWxsO1xuXG5cdHJlbW92ZUl0ZW1zPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U+IChcblx0XHRpZEFycmF5OiBJdGVtSWRbXSxcblx0XHRyZXN1bHRSZXNvdXJjZT86IFUgfCBudWxsLFxuXHRcdHVwZGF0ZUluaXRpYWw/OiBib29sZWFuLFxuXHRcdGNhbGxPblJlbW92ZT86IGJvb2xlYW5cblx0KTogVVsnaXRlbXMnXSB8IG51bGw7XG5cblx0cmVtb3ZlSXRlbXM8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZT4gKFxuXHRcdGlkQXJyYXk6IEl0ZW1JZFtdLFxuXHRcdHJlc3VsdFJlc291cmNlPzogVSB8IG51bGwsXG5cdFx0dXBkYXRlSW5pdGlhbD86IGJvb2xlYW4sXG5cdFx0Y2FsbE9uUmVtb3ZlPzogYm9vbGVhblxuXHQpOiBVWydpdGVtcyddIHwgbnVsbCB7XG5cdFx0aWYgKGlkQXJyYXkubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIFtdO1xuXG5cdFx0cmV0dXJuIHRoaXMuaGFuZGxlUmVtb3ZlZEl0ZW1zKFxuXHRcdFx0aXRlbUVudHJ5ID0+ICFpbkFycmF5KGl0ZW1FbnRyeS5pdGVtSWQsIGlkQXJyYXkpLFxuXHRcdFx0cmVzdWx0UmVzb3VyY2UsXG5cdFx0XHR1cGRhdGVJbml0aWFsLFxuXHRcdFx0Y2FsbE9uUmVtb3ZlXG5cdFx0KTtcblx0fVxuXG5cdGNsZWFyPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U+IChcblx0XHRyZXN1bHRSZXNvdXJjZTogVSxcblx0XHR1cGRhdGVJbml0aWFsPzogYm9vbGVhbixcblx0XHRjYWxsT25SZW1vdmU/OiBib29sZWFuXG5cdCk6IFVbJ2l0ZW1zJ107XG5cblx0Y2xlYXIgKFxuXHRcdHJlc3VsdFJlc291cmNlPzogbnVsbCxcblx0XHR1cGRhdGVJbml0aWFsPzogYm9vbGVhbixcblx0XHRjYWxsT25SZW1vdmU/OiBib29sZWFuXG5cdCk6IG51bGw7XG5cblx0Y2xlYXI8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZT4gKFxuXHRcdHJlc3VsdFJlc291cmNlPzogVSB8IG51bGwsXG5cdFx0dXBkYXRlSW5pdGlhbD86IGJvb2xlYW4sXG5cdFx0Y2FsbE9uUmVtb3ZlPzogYm9vbGVhblxuXHQpIHtcblx0XHRyZXR1cm4gdGhpcy5oYW5kbGVSZW1vdmVkSXRlbXMoXG5cdFx0XHQoKSA9PiBmYWxzZSxcblx0XHRcdHJlc3VsdFJlc291cmNlLFxuXHRcdFx0dXBkYXRlSW5pdGlhbCxcblx0XHRcdGNhbGxPblJlbW92ZVxuXHRcdCk7XG5cdH1cblxuXHRoYW5kbGVSZW1vdmVkSXRlbXM8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZT4gKFxuXHRcdGZpbHRlckZ1bmN0aW9uOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGJvb2xlYW4sXG5cdFx0cmVzdWx0UmVzb3VyY2U6IFUsXG5cdFx0dXBkYXRlSW5pdGlhbD86IGJvb2xlYW4sXG5cdFx0Y2FsbE9uUmVtb3ZlPzogYm9vbGVhblxuXHQpOiBVWydpdGVtcyddO1xuXG5cdGhhbmRsZVJlbW92ZWRJdGVtcyAoXG5cdFx0ZmlsdGVyRnVuY3Rpb246IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gYm9vbGVhbixcblx0XHRyZXN1bHRSZXNvdXJjZT86IG51bGwsXG5cdFx0dXBkYXRlSW5pdGlhbD86IGJvb2xlYW4sXG5cdFx0Y2FsbE9uUmVtb3ZlPzogYm9vbGVhblxuXHQpOiBudWxsO1xuXG5cdGhhbmRsZVJlbW92ZWRJdGVtczxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPiAoXG5cdFx0ZmlsdGVyRnVuY3Rpb246IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gYm9vbGVhbixcblx0XHRyZXN1bHRSZXNvdXJjZT86IFUgfCBudWxsLFxuXHRcdHVwZGF0ZUluaXRpYWw/OiBib29sZWFuLFxuXHRcdGNhbGxPblJlbW92ZT86IGJvb2xlYW5cblx0KTogVVsnaXRlbXMnXSB8IG51bGw7XG5cblx0aGFuZGxlUmVtb3ZlZEl0ZW1zPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U+IChcblx0XHRmaWx0ZXJGdW5jdGlvbjogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBib29sZWFuLFxuXHRcdHJlc3VsdFJlc291cmNlPzogVSB8IG51bGwsXG5cdFx0dXBkYXRlSW5pdGlhbDogYm9vbGVhbiA9IGZhbHNlLFxuXHRcdGNhbGxPblJlbW92ZT86IGJvb2xlYW5cblx0KTogVVsnaXRlbXMnXSB8IG51bGwge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeVNlcnZpY2UgPSB0aGlzLmZhY3RvcnkuY29sbGVjdGlvbkVudHJ5U2VydmljZTtcblx0XHRjb25zdCByZW1vdmVkRnJvbU1vZGlmaWVkID0gY29sbGVjdGlvbkVudHJ5U2VydmljZS5maWx0ZXJBcnJheSh0aGlzLml0ZW1zLCBmaWx0ZXJGdW5jdGlvbik7XG5cdFx0bGV0IHJlbW92ZWRGcm9tSW5pdGlhbDogSXRlbUVudHJ5W107XG5cblx0XHRpZiAodXBkYXRlSW5pdGlhbClcblx0XHRcdHJlbW92ZWRGcm9tSW5pdGlhbCA9IGNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuZmlsdGVyQXJyYXkodGhpcy5pbml0aWFsLCBmaWx0ZXJGdW5jdGlvbik7XG5cdFx0ZWxzZSB7XG5cdFx0XHQvLyByZW1vdmUgYWxsICpsb2NhbCogaXRlbXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIG1vZGlmaWVkIGZyb20gaW5pdGlhbCwgdG9vXG5cdFx0XHRjb25zdCBsb2NhbFJlbW92ZWRGcm9tTW9kaWZpZWQ6IEl0ZW1FbnRyeVtdID0gW107XG5cblx0XHRcdGZvciAoY29uc3QgcmVtb3ZlZEVudHJ5IG9mIHJlbW92ZWRGcm9tTW9kaWZpZWQpIHtcblx0XHRcdFx0aWYgKHJlbW92ZWRFbnRyeS5pc0xvY2FsKCkpXG5cdFx0XHRcdFx0bG9jYWxSZW1vdmVkRnJvbU1vZGlmaWVkLnB1c2gocmVtb3ZlZEVudHJ5KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGxvY2FsUmVtb3ZlZEZyb21Nb2RpZmllZC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHJlbW92ZWRGcm9tSW5pdGlhbCA9IGNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuZmlsdGVyQXJyYXkoXG5cdFx0XHRcdFx0dGhpcy5pbml0aWFsLFxuXHRcdFx0XHRcdGl0ZW1FbnRyeSA9PiBsb2NhbFJlbW92ZWRGcm9tTW9kaWZpZWQuaW5kZXhPZihpdGVtRW50cnkpID09PSAtMVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlXG5cdFx0XHRcdHJlbW92ZWRGcm9tSW5pdGlhbCA9IFtdO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmhhbmRsZVJlbW92ZWRJdGVtQ2FsbGJhY2tzKHJlbW92ZWRGcm9tSW5pdGlhbCwgcmVtb3ZlZEZyb21Nb2RpZmllZCwgcmVzdWx0UmVzb3VyY2UsIGNhbGxPblJlbW92ZSk7XG5cdH1cblxuXHRwcml2YXRlIGhhbmRsZVJlbW92ZWRJdGVtQ2FsbGJhY2tzPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U+IChcblx0XHRyZW1vdmVkRnJvbUluaXRpYWw6IEl0ZW1FbnRyeVtdLFxuXHRcdHJlbW92ZWRGcm9tTW9kaWZpZWQ6IEl0ZW1FbnRyeVtdLFxuXHRcdHJlc3VsdFJlc291cmNlOiBVLFxuXHRcdGNhbGxPblJlbW92ZT86IGJvb2xlYW5cblx0KTogVVsnaXRlbXMnXTtcblxuXHRwcml2YXRlIGhhbmRsZVJlbW92ZWRJdGVtQ2FsbGJhY2tzIChcblx0XHRyZW1vdmVkRnJvbUluaXRpYWw6IEl0ZW1FbnRyeVtdLFxuXHRcdHJlbW92ZWRGcm9tTW9kaWZpZWQ6IEl0ZW1FbnRyeVtdLFxuXHRcdHJlc3VsdFJlc291cmNlPzogbnVsbCxcblx0XHRjYWxsT25SZW1vdmU/OiBib29sZWFuXG5cdCk6IG51bGw7XG5cblx0cHJpdmF0ZSBoYW5kbGVSZW1vdmVkSXRlbUNhbGxiYWNrczxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPiAoXG5cdFx0cmVtb3ZlZEZyb21Jbml0aWFsOiBJdGVtRW50cnlbXSxcblx0XHRyZW1vdmVkRnJvbU1vZGlmaWVkOiBJdGVtRW50cnlbXSxcblx0XHRyZXN1bHRSZXNvdXJjZT86IFUgfCBudWxsLFxuXHRcdGNhbGxPblJlbW92ZT86IGJvb2xlYW5cblx0KTogVVsnaXRlbXMnXSB8IG51bGw7XG5cblx0cHJpdmF0ZSBoYW5kbGVSZW1vdmVkSXRlbUNhbGxiYWNrczxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPiAoXG5cdFx0cmVtb3ZlZEZyb21Jbml0aWFsOiBJdGVtRW50cnlbXSxcblx0XHRyZW1vdmVkRnJvbU1vZGlmaWVkOiBJdGVtRW50cnlbXSxcblx0XHRyZXN1bHRSZXNvdXJjZT86IFUgfCBudWxsLFxuXHRcdGNhbGxPblJlbW92ZTogYm9vbGVhbiA9IHRydWVcblx0KTogVVsnaXRlbXMnXSB8IG51bGwge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcblxuXHRcdGlmIChyZW1vdmVkRnJvbUluaXRpYWwubGVuZ3RoID4gMClcblx0XHRcdHRoaXMub25SZW1vdmVJbml0aWFsKHJlbW92ZWRGcm9tSW5pdGlhbCk7XG5cblx0XHRpZiAocmVtb3ZlZEZyb21Nb2RpZmllZC5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gcmVzdWx0UmVzb3VyY2UgPT09IG51bGwgPyBudWxsIDogW107XG5cblx0XHRsZXQgcmVzdWx0OiBVWydpdGVtcyddIHwgbnVsbCA9IG51bGw7XG5cblx0XHRmb3IgKGNvbnN0IHJlbW92ZWRFbnRyeSBvZiByZW1vdmVkRnJvbU1vZGlmaWVkKVxuXHRcdFx0cmVtb3ZlZEVudHJ5LmRlYWN0aXZhdGVSZXNvdXJjZXMoKTtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvblJlc291cmNlIG9mIGNvbGxlY3Rpb25SZXNvdXJjZXMpIHtcblx0XHRcdGNvbnN0IHJlbW92ZWRSZXNvdXJjZXMgPSBjb2xsZWN0aW9uUmVzb3VyY2UucmVtb3ZlSXRlbVJlc291cmNlcyhyZW1vdmVkRnJvbU1vZGlmaWVkKTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25SZXNvdXJjZSA9PT0gcmVzdWx0UmVzb3VyY2UpIHtcblx0XHRcdFx0cmVzdWx0ID0gcmVtb3ZlZFJlc291cmNlcztcblxuXHRcdFx0XHRpZiAoY2FsbE9uUmVtb3ZlKVxuXHRcdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5jYWxsT25SZW1vdmUocmVtb3ZlZFJlc291cmNlcyk7XG5cdFx0XHR9IGVsc2Vcblx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLmNhbGxPblJlbW92ZShyZW1vdmVkUmVzb3VyY2VzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cHJpdmF0ZSBjcmVhdGVCYXRjaFN0YXR1cyAoXG5cdFx0aXRlbUlkczogSXRlbUlkW10sXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRcdGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGVcblx0KTogQmF0Y2hTdGF0dXM8SXRlbUVudHJ5PiB7XG5cdFx0cmV0dXJuIHRoaXMuZmFjdG9yeS5pdGVtSGFuZGxlci5jcmVhdGVCYXRjaFN0YXR1cyhcblx0XHRcdHRoaXMuaXRlbVR5cGUsXG5cdFx0XHRpdGVtSWRzLFxuXHRcdFx0dGhpcy5wYXJlbnQsXG5cdFx0XHRyZXF1ZXN0Q29sdW1ucyxcblx0XHRcdGZhbHNlLFxuXHRcdFx0bG9jYWxJdGVtQ2FjaGUsXG5cdFx0XHRmYWxzZVxuXHRcdCkuYmF0Y2hTdGF0dXM7XG5cdH1cblxuXHRwcml2YXRlIGV4cGFuZExvY2FsIChcblx0XHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMsXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPENvbHVtbkV4cGFuc2lvbj4ge1xuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XG5cdFx0Y29uc3QgZXJyb3JIYW5kbGVyID0gZmFjdG9yeS5lcnJvckhhbmRsZXI7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSB0aGlzLml0ZW1UeXBlO1xuXG5cdFx0cmV0dXJuIGZhY3RvcnkuY29sdW1uSGFuZGxlci5mZXRjaChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMpLnRoZW4oXG5cdFx0XHRyZXNwb25zZUNvbHVtbnMgPT4ge1xuXHRcdFx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSBmYWN0b3J5LmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdHJlcXVlc3RDb2x1bW5zLFxuXHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1uc1xuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGNvbnN0IGJhdGNoU3RhdHVzID0gdGhpcy5jcmVhdGVCYXRjaFN0YXR1cyh0aGlzLmdldElkQXJyYXkoKSwgcmVxdWVzdENvbHVtbnMsIGxvY2FsSXRlbUNhY2hlKTtcblxuXHRcdFx0XHRyZXR1cm4gYmF0Y2hTdGF0dXMuZ2V0UHJvbWlzZXMoKS50aGVuKFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBmYWN0b3J5Lml0ZW1IYW5kbGVyLmhhbmRsZUJhdGNoUmVzcG9uc2UoXG5cdFx0XHRcdFx0XHRcdGJhdGNoU3RhdHVzLFxuXHRcdFx0XHRcdFx0XHRsb2NhbEl0ZW1DYWNoZSxcblx0XHRcdFx0XHRcdFx0cmVxdWVzdENvbHVtbnMsXG5cdFx0XHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1ucyxcblx0XHRcdFx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHQpLnRoZW4oXG5cdFx0XHRcdFx0KCkgPT4gY29sdW1uRXhwYW5zaW9uLFxuXHRcdFx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgZXhwYW5kUmVtb3RlIChcblx0XHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMsXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPENvbHVtbkV4cGFuc2lvbj4ge1xuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XG5cdFx0Y29uc3QgZXJyb3JIYW5kbGVyID0gZmFjdG9yeS5lcnJvckhhbmRsZXI7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSB0aGlzLml0ZW1UeXBlO1xuXG5cdFx0cmV0dXJuIGZhY3RvcnkuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RJdGVtcyh0aGlzLCB1bmRlZmluZWQsIHJlcXVlc3RDb2x1bW5zKS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKTtcblx0XHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gZmFjdG9yeS5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRyZXF1ZXN0Q29sdW1ucyxcblx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnNcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRjb25zdCBiYXRjaFN0YXR1cyA9IHRoaXMuY3JlYXRlQmF0Y2hTdGF0dXMocmVzcG9uc2UubGlua3NbaXRlbVR5cGVdLCByZXF1ZXN0Q29sdW1ucywgbG9jYWxJdGVtQ2FjaGUpO1xuXG5cdFx0XHRcdHJldHVybiBiYXRjaFN0YXR1cy5nZXRQcm9taXNlcygpLnRoZW4oXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhY3RvcnkuaXRlbUhhbmRsZXIuaGFuZGxlQmF0Y2hSZXNwb25zZShcblx0XHRcdFx0XHRcdFx0YmF0Y2hTdGF0dXMsXG5cdFx0XHRcdFx0XHRcdGxvY2FsSXRlbUNhY2hlLFxuXHRcdFx0XHRcdFx0XHRyZXF1ZXN0Q29sdW1ucyxcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1ucyxcblx0XHRcdFx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHQpLnRoZW4oXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgcmVzcG9uc2VJdGVtcyA9IHJlc3BvbnNlLml0ZW1zW2l0ZW1UeXBlXTtcblxuXHRcdFx0XHRcdFx0dGhpcy5oYW5kbGVSZW1vdmVkSXRlbXMoXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlSXRlbXNbaXRlbUVudHJ5Lml0ZW1JZF0gIT09IHVuZGVmaW5lZCB8fCBpdGVtRW50cnkuaXNMb2NhbCgpO1xuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHR0aGlzLmFkZEl0ZW1zKFxuXHRcdFx0XHRcdFx0XHRiYXRjaFN0YXR1cy5nZXRBcnJheShbRU5UUllfU1RBVFVTLlJFU09MVkVdKSxcblx0XHRcdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHRcdFx0ZmFsc2Vcblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdHJldHVybiBjb2x1bW5FeHBhbnNpb247XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRleHBhbmQgKG5ld0NvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLCBsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlKTogUHJvbWlzZUludGVyZmFjZTx0aGlzPiB7XG5cdFx0Y29uc3Qge21lcmdlZCwgZGlmZmVyZW5jZX0gPSB0aGlzLmNvbHVtbnMubWVyZ2VSZXF1ZXN0Q29sdW1ucyhuZXdDb2x1bW5zKTtcblxuXHRcdGlmIChkaWZmZXJlbmNlICE9PSB0cnVlICYmIGRpZmZlcmVuY2UubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIHRoaXMuZmFjdG9yeS5wcm9taXNlU2VydmljZS53aGVuKHRoaXMpO1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdHRoaXMuaXNMb2NhbCgpID9cblx0XHRcdFx0dGhpcy5leHBhbmRMb2NhbChkaWZmZXJlbmNlLCBsb2NhbEl0ZW1DYWNoZSkgOlxuXHRcdFx0XHR0aGlzLmV4cGFuZFJlbW90ZShtZXJnZWQsIGxvY2FsSXRlbUNhY2hlKVxuXHRcdCkudGhlbihcblx0XHRcdGNvbHVtbkV4cGFuc2lvbiA9PiB7XG5cdFx0XHRcdHRoaXMuZXhwYW5kQ29sdW1ucyhjb2x1bW5FeHBhbnNpb24pO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxuXHRleHRlbmRRdWVyeSAoY2FsbGJhY2s/OiBRdWVyeUNhbGxiYWNrKSB7XG5cdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuXHRcdGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXMucXVlcnk7XG5cblx0XHRvcHRpb25zLnF1ZXJ5UGFyYW1zID0gY2FsbGJhY2sob3B0aW9ucy5xdWVyeVBhcmFtcyk7XG5cblx0XHRyZXR1cm4gdGhpcy5xdWVyeSA9IHRoaXMuZmFjdG9yeS5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNyZWF0ZVF1ZXJ5KG9wdGlvbnMpO1xuXHR9XG5cblx0ZXh0ZW5kPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U+IChcblx0XHRxdWVyeUNhbGxiYWNrOiBRdWVyeUNhbGxiYWNrLFxuXHRcdGNvbGxlY3Rpb25SZXNvdXJjZT86IFUsXG5cdFx0Y2FsbE9uQWRkPzogYm9vbGVhbixcblx0XHR1cGRhdGVJbml0aWFsPzogYm9vbGVhblxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPFVbJ2l0ZW1zJ10+O1xuXG5cdGV4dGVuZCAoXG5cdFx0cXVlcnlDYWxsYmFjazogUXVlcnlDYWxsYmFjayxcblx0XHRjb2xsZWN0aW9uUmVzb3VyY2U/OiBudWxsLFxuXHRcdGNhbGxPbkFkZD86IGJvb2xlYW4sXG5cdFx0dXBkYXRlSW5pdGlhbD86IGJvb2xlYW5cblx0KTogUHJvbWlzZUludGVyZmFjZTxudWxsPjtcblxuXHRleHRlbmQ8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZT4gKFxuXHRcdHF1ZXJ5Q2FsbGJhY2s6IFF1ZXJ5Q2FsbGJhY2ssXG5cdFx0Y29sbGVjdGlvblJlc291cmNlPzogVSB8IG51bGwsXG5cdFx0Y2FsbE9uQWRkPzogYm9vbGVhbixcblx0XHR1cGRhdGVJbml0aWFsPzogYm9vbGVhblxuXHQpIHtcblx0XHRjb25zdCBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5O1xuXHRcdGNvbnN0IGVycm9ySGFuZGxlciA9IGZhY3RvcnkuZXJyb3JIYW5kbGVyO1xuXHRcdGNvbnN0IGV4dGVuZGVkUXVlcnkgPSB0aGlzLmV4dGVuZFF1ZXJ5KHF1ZXJ5Q2FsbGJhY2spLm9iamVjdDtcblx0XHRjb25zdCBmdWxsUXVlcnkgPSBmYWN0b3J5LnF1ZXJ5U2VydmljZS5hZGRBbmRDb25kaXRpb24oXG5cdFx0XHRleHRlbmRlZFF1ZXJ5LFxuXHRcdFx0ZmFjdG9yeS5xdWVyeVNlcnZpY2UuY3JlYXRlTm90SW4odGhpcy5nZXRJZEFycmF5KCkpXG5cdFx0KTtcblxuXHRcdC8vIHRvZG86IGFsc28gZG8gdGhlIGxpbWl0IGNoZWNrIGluIGJhdGNoRXh0ZW5kXG5cdFx0Y29uc3QgcHJvbWlzZSA9IGZhY3RvcnkuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RJdGVtcyhcblx0XHRcdHRoaXMsXG5cdFx0XHQvLyBXaGVuIHRoZXJlJ3MgYSBsaW1pdCB3ZSB3YW50IHRvIGZldGNoIGFsbCBpdGVtcyBiZWNhdXNlIHdlIHdpbGwgZG8gc29ydGluZyBhbmQgc3BsaWNpbmcgb2YgdGhlIGV4Y2VzcyBpdGVtc1xuXHRcdFx0dGhpcy5vcHRpb25zLmxpbWl0ICE9PSBudWxsID8gZXh0ZW5kZWRRdWVyeSA6IGZ1bGxRdWVyeVxuXHRcdCkudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0Ly8gcmVtb3ZlQWJzZW50SXRlbXMocmVzcG9uc2UpOyBUT0RPOiB3ZSBjYW4gb25seSBkbyB0aGlzIHdoZW4gd2UgcmVxdWVzdCAqYWxsKiB0aGUgaXRlbXNcblx0XHRcdFx0cmV0dXJuIGZhY3RvcnkuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NSZXNwb25zZShcblx0XHRcdFx0XHRyZXNwb25zZSxcblx0XHRcdFx0XHRyZXNwb25zZS5saW5rc1t0aGlzLml0ZW1UeXBlXSxcblx0XHRcdFx0XHR0aGlzLnBhcmVudCxcblx0XHRcdFx0XHR0aGlzLmNvbHVtbnNcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0aXRlbUVudHJpZXMgPT4ge1xuXHRcdFx0XHRkZWxldGUgdGhpcy5wcm9taXNlO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLmFkZEl0ZW1zKGl0ZW1FbnRyaWVzLCBjb2xsZWN0aW9uUmVzb3VyY2UsIHVwZGF0ZUluaXRpYWwsIGNhbGxPbkFkZCwgZmFsc2UpO1xuXHRcdFx0fSxcblx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXG5cdFx0dGhpcy5wcm9taXNlID0gcHJvbWlzZS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblxuXHRcdHJldHVybiBwcm9taXNlO1xuXHR9XG5cblx0cXVldWVSZWxvYWQgKCk6IHZvaWQge1xuXHRcdHRoaXMucmVsb2FkUXVldWVkID0gdHJ1ZTtcblx0fVxuXG5cdGV4cGFuZENvbHVtbnMgKGNvbHVtbkV4cGFuc2lvbjogQ29sdW1uRXhwYW5zaW9uKTogdm9pZCB7XG5cdFx0Y29uc3QgZXhwYW5zaW9uUmVzdWx0ID0gY29sdW1uRXhwYW5zaW9uLnJ1bih0aGlzLmNvbHVtbnMpO1xuXG5cdFx0aWYgKGV4cGFuc2lvblJlc3VsdCA9PT0gbnVsbClcblx0XHRcdHJldHVybjtcblxuXHRcdHRoaXMuY29sdW1ucyA9IGV4cGFuc2lvblJlc3VsdC5tZXJnZWQ7XG5cdFx0dGhpcy50ZW1wbGF0ZUNvbHVtbnMgPSBudWxsO1xuXHRcdHRoaXMub3B0aW9ucy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zLnJlcXVlc3Q7XG5cdH1cblxuXHRleHBhbmRSZXF1ZXN0Q29sdW1ucyAocmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zKTogdm9pZCB7XG5cdFx0dGhpcy5jb2x1bW5zLmV4cGFuZFJlcXVlc3RDb2x1bW5zKHJlcXVlc3RDb2x1bW5zKTtcblx0XHR0aGlzLm9wdGlvbnMuY29sdW1ucyA9IHRoaXMuY29sdW1ucy5yZXF1ZXN0O1xuXHR9XG5cblx0Z2V0QWRkZWRJdGVtcyAocmV0dXJuSXRlbUlkczogdHJ1ZSk6IEl0ZW1JZFtdO1xuXHRnZXRBZGRlZEl0ZW1zIChyZXR1cm5JdGVtSWRzPzogYm9vbGVhbik6IEl0ZW1FbnRyeVtdO1xuXHRnZXRBZGRlZEl0ZW1zIChyZXR1cm5JdGVtSWRzOiBib29sZWFuID0gZmFsc2UpIHtcblx0XHRjb25zdCBpbml0aWFsID0gdGhpcy5pbml0aWFsO1xuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcblx0XHRjb25zdCByZXN1bHQ6IEFycmF5PEl0ZW1FbnRyeSB8IEl0ZW1JZD4gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIG1vZGlmaWVkKSB7XG5cdFx0XHRpZiAoaW5pdGlhbC5pbmRleE9mKGl0ZW1FbnRyeSkgPT09IC0xKVxuXHRcdFx0XHRyZXN1bHQucHVzaChyZXR1cm5JdGVtSWRzID8gaXRlbUVudHJ5Lml0ZW1JZCA6IGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldFJlbW92ZWRJdGVtcyAocmV0dXJuSXRlbUlkczogdHJ1ZSk6IEl0ZW1JZFtdO1xuXHRnZXRSZW1vdmVkSXRlbXMgKHJldHVybkl0ZW1JZHM/OiBib29sZWFuKTogSXRlbUVudHJ5W107XG5cdGdldFJlbW92ZWRJdGVtcyAocmV0dXJuSXRlbUlkczogYm9vbGVhbiA9IGZhbHNlKSB7XG5cdFx0Y29uc3QgaW5pdGlhbCA9IHRoaXMuaW5pdGlhbDtcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgcmVzdWx0OiBBcnJheTxJdGVtRW50cnkgfCBJdGVtSWQ+ID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpbml0aWFsKSB7XG5cdFx0XHRpZiAobW9kaWZpZWQuaW5kZXhPZihpdGVtRW50cnkpID09PSAtMSlcblx0XHRcdFx0cmVzdWx0LnB1c2gocmV0dXJuSXRlbUlkcyA/IGl0ZW1FbnRyeS5pdGVtSWQgOiBpdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRnZXRVcGRhdGVkSXRlbXMgKCk6IEl0ZW1FbnRyeVtdIHtcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgbW9kaWZpZWQpIHtcblx0XHRcdGlmICghaXRlbUVudHJ5LmlzTG9jYWwoKSAmJiBpdGVtRW50cnkuaGFzQ2hhbmdlcygpKVxuXHRcdFx0XHRyZXN1bHQucHVzaChpdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRoYXNBZGRlZEl0ZW1zICgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5pdGVtcy5sZW5ndGggPiB0aGlzLmluaXRpYWwubGVuZ3RoO1xuXHR9XG5cblx0aGFzUmVtb3ZlZEl0ZW1zICgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5pbml0aWFsLmxlbmd0aCA+IHRoaXMuaXRlbXMubGVuZ3RoO1xuXHR9XG5cblx0aGFzVXBkYXRlZEl0ZW1zICgpOiBib29sZWFuIHtcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XG5cblx0XHRmb3IgKGNvbnN0IG1vZGlmaWVkSXRlbUVudHJ5IG9mIG1vZGlmaWVkKSB7XG5cdFx0XHRpZiAobW9kaWZpZWRJdGVtRW50cnkuaGFzQ2hhbmdlcygpKVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRnZXRDdXJyZW50UmVzb3VyY2U8VCBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZT4gKCk6IFQge1xuXHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xuXG5cdFx0Ly8gQHRzLWlnbm9yZSByZXR1cm4gdHlwZSBpcyBiZWluZyB3ZWlyZCwgYnV0IHlvdSBzaG91bGQganVzdCBiZSBhYmxlIHRvIHBhc3MgaXRcblx0XHRyZXR1cm4gcmVzb3VyY2VzW3Jlc291cmNlcy5sZW5ndGggLSAxXTtcblx0fVxuXG5cdGNsZWFyUmVzb3VyY2VzIChpc1N1YnRhYkNoYW5nZTogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG5cdFx0Y29uc3QgaXRlbUVudHJpZXMgPSB0aGlzLml0ZW1zOyAvLyBUT0RPOiBpbml0aWFsXG5cdFx0Y29uc3QgY3VycmVudFJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xuXHRcdGNvbnN0IG5ld1Jlc291cmNlczogQ29sbGVjdGlvblJlc291cmNlW10gPSBbXTtcblxuXHRcdC8vIHdlJ2xsIGFkZCB0aGUgaXRlbSByZXNvdXJjZXMgYmFjayBpbiBsYXRlclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxuXHRcdFx0aXRlbUVudHJ5LmNsZWFyUmVzb3VyY2VzKCk7XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZSBvZiBjdXJyZW50UmVzb3VyY2VzKSB7XG5cdFx0XHRpZiAoY29sbGVjdGlvblJlc291cmNlLm9wdGlvbnNbaXNTdWJ0YWJDaGFuZ2UgPyAnY2xlYXJPblN1YlRhYkNoYW5nZScgOiAnY2xlYXJPblRhYkNoYW5nZSddKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0bmV3UmVzb3VyY2VzLnB1c2goY29sbGVjdGlvblJlc291cmNlKTtcblxuXHRcdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgY29sbGVjdGlvblJlc291cmNlLml0ZW1zKVxuXHRcdFx0XHRpdGVtUmVzb3VyY2UuZW50cnkucmVzb3VyY2VzLnB1c2goaXRlbVJlc291cmNlKTsgLy8gcmVzb3VyY2VzIHNob3VsZCBiZSBlbXB0eSBieSBub3cgOi0pXG5cdFx0fVxuXG5cdFx0dGhpcy5yZXNvdXJjZXMgPSBuZXdSZXNvdXJjZXM7XG5cdH1cblxuXHQvKipcblx0ICogQGRlc2NyaXB0aW9uXG5cdCAqIHRoaXMgZG9lc24ndCByZXZlcnQgdXBkYXRlc1xuXHQgKi9cblx0cmV2ZXJ0Q2hhbmdlcyAoKTogdm9pZCB7XG5cdFx0Ly8gc2F2ZSB0aGVzZSBiZWZvcmUgcmVzZXR0aW5nIHRoZSBpdGVtcyBwcm9wZXJ0eVxuXHRcdGNvbnN0IGFkZGVkSXRlbXMgPSB0aGlzLmdldEFkZGVkSXRlbXMoKTtcblx0XHRjb25zdCByZW1vdmVkSXRlbXMgPSB0aGlzLmdldFJlbW92ZWRJdGVtcygpO1xuXG5cdFx0dGhpcy5pdGVtcyA9IHRoaXMuaW5pdGlhbC5zbGljZSgpO1xuXG5cdFx0dGhpcy5oYW5kbGVBZGRlZEl0ZW1DYWxsYmFja3MoW10sIHJlbW92ZWRJdGVtcyk7XG5cdFx0dGhpcy5oYW5kbGVSZW1vdmVkSXRlbUNhbGxiYWNrcyhbXSwgYWRkZWRJdGVtcyk7XG5cdH1cblxuXHRvbkl0ZW1zQ3JlYXRlZCAoY29udmVyc2lvbk1hcDogQ29udmVyc2lvbk1hcCk6IHZvaWQge1xuXHRcdGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgdGhpcy5yZXNvdXJjZXMpIHtcblx0XHRcdHJlc291cmNlLnJlYnVpbGRNYXAoKTtcblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmVzb3VyY2Uub3B0aW9ucy5vbkl0ZW1zQ3JlYXRlZChjb252ZXJzaW9uTWFwKTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdHRoaXMuZmFjdG9yeS5leGNlcHRpb25IYW5kbGVyKGVycm9yKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIG9uQWRkSW5pdGlhbCAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdKTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiB0aGlzLnJlc291cmNlcykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmVzb3VyY2Uub3B0aW9ucy5vbkFkZEluaXRpYWwoaXRlbUVudHJpZXMsIHRoaXMpO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0dGhpcy5mYWN0b3J5LmV4Y2VwdGlvbkhhbmRsZXIoZXJyb3IpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgb25SZW1vdmVJbml0aWFsIChpdGVtRW50cmllczogSXRlbUVudHJ5W10pOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHRoaXMucmVzb3VyY2VzKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXNvdXJjZS5vcHRpb25zLm9uUmVtb3ZlSW5pdGlhbChpdGVtRW50cmllcywgdGhpcyk7XG5cdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHR0aGlzLmZhY3RvcnkuZXhjZXB0aW9uSGFuZGxlcihlcnJvcik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Z2V0VXBkYXRlZEl0ZW1Db2x1bW5zIChjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwKToge1tjb2x1bW5JZDogc3RyaW5nXTogQ29sdW1uSW5mb30ge1xuXHRcdGNvbnN0IGl0ZW1Db2x1bW5zID0gdGhpcy5jb2x1bW5zLml0ZW07XG5cdFx0Y29uc3QgcmVzdWx0OiB7W2NvbHVtbklkOiBzdHJpbmddOiBDb2x1bW5JbmZvfSA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgaXRlbUNvbHVtbnMpIHtcblx0XHRcdGlmIChjb252ZXJzaW9uTWFwW2NvbHVtbi5hcGlDb2x1bW4uaXRlbVR5cGVdICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdHJlc3VsdFtjb2x1bW4uaWRdID0gY29sdW1uO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRjbG9uZSAocGFyZW50OiBFbnRyeVBhcmVudE51bGwsIGNvbnZlcnNpb25NYXA/OiBJdGVtSWRDb252ZXJzaW9uTWFwKSB7XG5cdFx0Y29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTtcblx0XHRjb25zdCBjbG9uZWRJdGVtRW50cmllcyA9IGZhY3RvcnkuaXRlbUVudHJ5U2VydmljZS5iYXRjaENsb25lKHRoaXMuaXRlbXMsIGNvbnZlcnNpb25NYXApO1xuXG5cdFx0Zm9yIChjb25zdCBjbG9uZWRJdGVtRW50cnkgb2YgY2xvbmVkSXRlbUVudHJpZXMpXG5cdFx0XHRjbG9uZWRJdGVtRW50cnkucGFyZW50ID0gcGFyZW50O1xuXG5cdFx0cmV0dXJuIGZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0dGhpcy5pdGVtVHlwZSxcblx0XHRcdGZhY3RvcnkuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jbG9uZU9wdGlvbnModGhpcy5vcHRpb25zLCBwYXJlbnQpXG5cdFx0KS5yZXNvbHZlKFxuXHRcdFx0e2NvbHVtbnM6IHRoaXMuY29sdW1ucywgaW5pdGlhbDogY2xvbmVkSXRlbUVudHJpZXN9XG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgZmlsdGVyQXJyYXksIExvY2FsQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zLCBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSwgTG9jYWxWaWV3UmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgSXRlbVJlc291cmNlSXRlbUlkTWFwLCBQcm9taXNlSW50ZXJmYWNlLCBRdWVyeUNhbGxiYWNrLCBSZXNwb25zZUNvbHVtbk1hcCB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvbGxlY3Rpb25SZXNvdXJjZTxUIGV4dGVuZHMgSXRlbVJlc291cmNlID0gTG9jYWxWaWV3UmVzb3VyY2U+IHtcblx0aXRlbXM6IFRbXTtcblx0aXRlbUlkTWFwOiBJdGVtUmVzb3VyY2VJdGVtSWRNYXA8VD4gPSB7fTtcblx0Y29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXA7XG5cblx0cHJvdGVjdGVkIGNvbnN0cnVjdG9yIChcblx0XHRwcm90ZWN0ZWQgZmFjdG9yeTogQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcblx0XHRwdWJsaWMgZW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRwdWJsaWMgb3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9ucyxcblx0XHRwdWJsaWMgbG9jYWxDYWNoZTogTG9jYWxDYWNoZVxuXHQpIHtcblx0XHR0aGlzLmNvbHVtbnMgPSBlbnRyeS5jb2x1bW5zLnJlc3BvbnNlO1xuXHRcdHRoaXMuaXRlbUlkTWFwID0ge307XG5cdFx0dGhpcy5pdGVtcyA9IFtdO1xuXG5cdFx0ZW50cnkucmVzb3VyY2VzLnB1c2godGhpcyk7XG5cblx0XHR0aGlzLmFkZEl0ZW1SZXNvdXJjZXMoZW50cnkuaXRlbXMpO1xuXHR9XG5cblx0Z2V0SXRlbUJ5SWQgKGl0ZW1JZDogbnVtYmVyKTogVCB7XG5cdFx0cmV0dXJuIHRoaXMuaXRlbUlkTWFwW2l0ZW1JZF07XG5cdH1cblxuXHRyZWJ1aWxkTWFwICgpOiB2b2lkIHtcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcblx0XHRjb25zdCBpdGVtSWRNYXA6IEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcDxUPiA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcylcblx0XHRcdGl0ZW1JZE1hcFtpdGVtUmVzb3VyY2UuZW50cnkuaXRlbUlkXSA9IGl0ZW1SZXNvdXJjZTtcblxuXHRcdHRoaXMuaXRlbUlkTWFwID0gaXRlbUlkTWFwO1xuXHR9XG5cblx0YWRkSXRlbVJlc291cmNlcyAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdKTogVFtdIHsgLy8gc2hvdWxkIGJlIGZhc3Rcblx0XHRpZiAoaXRlbUVudHJpZXMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIFtdO1xuXG5cdFx0Y29uc3QgcmVzdWx0OiBUW10gPSBbXTtcblx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXHRcdGNvbnN0IGl0ZW1zID0gdGhpcy5pdGVtcztcblx0XHRjb25zdCBpdGVtSWRNYXAgPSB0aGlzLml0ZW1JZE1hcDtcblx0XHRjb25zdCBjb25zdHJ1Y3RvciA9IHRoaXMuZmFjdG9yeS5pdGVtUmVzb3VyY2VGYWN0b3J5LmdldENvbnN0cnVjdG9yKFxuXHRcdFx0e1xuXHRcdFx0XHRlZGl0OiBvcHRpb25zLmVkaXRJdGVtcyxcblx0XHRcdFx0b25DaGFuZ2U6IG9wdGlvbnMub25DaGFuZ2UsXG5cdFx0XHRcdG9uRGVhY3RpdmF0ZTogaXRlbUVudHJ5ID0+IHRoaXMubG9jYWxDYWNoZS5vbkRlYWN0aXZhdGVJdGVtKGl0ZW1FbnRyeSlcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XG5cblx0XHRcdGxldCBpdGVtUmVzb3VyY2U7XG5cblx0XHRcdGlmIChpdGVtSWRNYXBbaXRlbUlkXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGl0ZW1SZXNvdXJjZSA9IGNvbnN0cnVjdG9yKGl0ZW1FbnRyeSkgYXMgVDtcblx0XHRcdFx0aXRlbXMucHVzaChpdGVtUmVzb3VyY2UpO1xuXHRcdFx0XHRpdGVtSWRNYXBbaXRlbUlkXSA9IGl0ZW1SZXNvdXJjZTtcblx0XHRcdH0gZWxzZVxuXHRcdFx0XHRpdGVtUmVzb3VyY2UgPSBpdGVtSWRNYXBbaXRlbUlkXTtcblxuXHRcdFx0cmVzdWx0LnB1c2goaXRlbVJlc291cmNlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSBpdGVtRW50cmllc1xuXHQgKiBAcmV0dXJucyB7SXRlbVJlc291cmNlW119XG5cdCAqXG5cdCAqIFJldHVybnMgdGhlIEl0ZW1yZXNvdXJjZXMgdGhhdCB3aGVyZSByZW1vdmVkIENvbGxlY3Rpb24uXG5cdCAqIEZpbHRlcnMgb24gSXRlbVJlc291cmNlLmVudHJ5ID09PSBJdGVtRW50cnlcblx0ICovXG5cdHJlbW92ZUl0ZW1SZXNvdXJjZXMgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSk6IFRbXSB7XG5cdFx0Y29uc3QgcmVzdWx0OiBUW10gPSBbXTtcblxuXHRcdGZpbHRlckFycmF5KFxuXHRcdFx0dGhpcy5pdGVtcyxcblx0XHRcdGl0ZW1SZXNvdXJjZSA9PiB7XG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRcdFx0aWYgKGl0ZW1SZXNvdXJjZS5lbnRyeSA9PT0gaXRlbUVudHJ5KSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQucHVzaChpdGVtUmVzb3VyY2UpO1xuXHRcdFx0XHRcdFx0ZGVsZXRlIHRoaXMuaXRlbUlkTWFwW2l0ZW1FbnRyeS5pdGVtSWRdO1xuXG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRjYWxsT25BZGQgKGl0ZW1SZXNvdXJjZXM6IFRbXSk6IHZvaWQge1xuXHRcdHRyeSB7XG5cdFx0XHR0aGlzLm9wdGlvbnMub25BZGQoaXRlbVJlc291cmNlcywgdGhpcyk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdHRoaXMuZmFjdG9yeS5leGNlcHRpb25IYW5kbGVyKGVycm9yKTtcblx0XHR9XG5cdH1cblxuXHRjYWxsT25SZW1vdmUgKGl0ZW1SZXNvdXJjZXM6IFRbXSk6IHZvaWQge1xuXHRcdHRyeSB7XG5cdFx0XHR0aGlzLm9wdGlvbnMub25SZW1vdmUoaXRlbVJlc291cmNlcywgdGhpcyk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdHRoaXMuZmFjdG9yeS5leGNlcHRpb25IYW5kbGVyKGVycm9yKTtcblx0XHR9XG5cdH1cblxuXHRmb3JFYWNoIChjYWxsYmFjazogKGl0ZW1SZXNvdXJjZTogVCkgPT4gdm9pZCk6IHZvaWQge1xuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcylcblx0XHRcdGNhbGxiYWNrKGl0ZW1SZXNvdXJjZSk7XG5cdH1cblxuXHRmaWx0ZXIgKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBUKSA9PiBib29sZWFuKTogVFtdIHtcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcblx0XHRjb25zdCByZXN1bHQ6IFRbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcykge1xuXHRcdFx0aWYgKGNhbGxiYWNrKGl0ZW1SZXNvdXJjZSkpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1SZXNvdXJjZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGZpcnN0IChjYWxsYmFjazogKGl0ZW1SZXNvdXJjZTogVCkgPT4gYm9vbGVhbik6IFQgfCBudWxsIHtcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcblxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpIHtcblx0XHRcdGlmIChjYWxsYmFjayhpdGVtUmVzb3VyY2UpKVxuXHRcdFx0XHRyZXR1cm4gaXRlbVJlc291cmNlO1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0c29tZSAoY2FsbGJhY2s6IChpdGVtUmVzb3VyY2U6IFQpID0+IGJvb2xlYW4pOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5maXJzdChjYWxsYmFjaykgIT09IG51bGw7XG5cdH1cblxuXHRncm91cEJ5IChhcmd1bWVudDogc3RyaW5nIHwgKChpdGVtUmVzb3VyY2U6IFQpID0+IHN0cmluZyB8IG51bGwpKToge1trZXk6IHN0cmluZ106IFRbXX0ge1xuXHRcdGNvbnN0IGl0ZW1zUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcblx0XHRjb25zdCByZXN1bHQ6IHtba2V5OiBzdHJpbmddOiBUW119ID0ge307XG5cblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnc3RyaW5nJykge1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbXNSZXNvdXJjZXMpIHtcblx0XHRcdFx0Y29uc3QgdmFsdWUgPSBpdGVtUmVzb3VyY2UuZmllbGRzW2FyZ3VtZW50XTtcblxuXHRcdFx0XHRpZiAocmVzdWx0W3ZhbHVlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdHJlc3VsdFt2YWx1ZV0gPSBbXTtcblxuXHRcdFx0XHRyZXN1bHRbdmFsdWVdLnB1c2goaXRlbVJlc291cmNlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtc1Jlc291cmNlcykge1xuXHRcdFx0XHRjb25zdCB2YWx1ZSA9IGFyZ3VtZW50KGl0ZW1SZXNvdXJjZSk7XG5cblx0XHRcdFx0aWYgKHZhbHVlID09PSBudWxsKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdGlmIChyZXN1bHRbdmFsdWVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0cmVzdWx0W3ZhbHVlXSA9IFtdO1xuXG5cdFx0XHRcdHJlc3VsdFt2YWx1ZV0ucHVzaChpdGVtUmVzb3VyY2UpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRtYXA8VT4gKGFyZ3VtZW50OiBzdHJpbmcgfCAoKGl0ZW1SZXNvdXJjZTogVCkgPT4gVSkpOiBVW10ge1xuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xuXHRcdGNvbnN0IGxlbmd0aCA9IGl0ZW1SZXNvdXJjZXMubGVuZ3RoO1xuXHRcdGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheShsZW5ndGgpO1xuXG5cdFx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycpIHtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG5cdFx0XHRcdHJlc3VsdFtpXSA9IGl0ZW1SZXNvdXJjZXNbaV0uZmllbGRzW2FyZ3VtZW50XTtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuXHRcdFx0XHRyZXN1bHRbaV0gPSBhcmd1bWVudChpdGVtUmVzb3VyY2VzW2ldKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cmVkdWNlPFU+IChjYWxsYmFjazogKGl0ZW1SZXNvdXJjZTogVCwgdmFsdWU6IFUpID0+IFUsIHZhbHVlOiBVKTogVSB7XG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKVxuXHRcdFx0dmFsdWUgPSBjYWxsYmFjayhpdGVtUmVzb3VyY2UsIHZhbHVlKTtcblxuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXG5cdGV4dGVuZCAocXVlcnlDYWxsYmFjazogUXVlcnlDYWxsYmFjaywgcmV0dXJuQWxsSXRlbXM6IGJvb2xlYW4gPSBmYWxzZSwgY2FsbE9uQWRkPzogYm9vbGVhbik6IFByb21pc2VJbnRlcmZhY2U8VFtdPiB7XG5cdFx0cmV0dXJuIHRoaXMuZW50cnkuZXh0ZW5kKHF1ZXJ5Q2FsbGJhY2ssIHRoaXMsIGNhbGxPbkFkZCwgdHJ1ZSlcblx0XHRcdC50aGVuKFxuXHRcdFx0XHRpdGVtUmVzb3VyY2VzID0+IHJldHVybkFsbEl0ZW1zID8gdGhpcy5pdGVtcyA6IGl0ZW1SZXNvdXJjZXNcblx0XHRcdCk7XG5cdH1cblxuXHRkZWFjdGl2YXRlICgpOiB2b2lkIHtcblx0XHR0aGlzLmxvY2FsQ2FjaGUuY2xlYXJDb2xsZWN0aW9uKHRoaXMpO1xuXHR9XG5cblx0Y2xlYXJSZXNvdXJjZSAoKTogdm9pZCB7XG5cdFx0Y29uc3QgY29sbGVjdGlvblJlc291cmNlcyA9IHRoaXMuZW50cnkucmVzb3VyY2VzO1xuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xuXHRcdGNvbnN0IGluZGV4ID0gY29sbGVjdGlvblJlc291cmNlcy5pbmRleE9mKHRoaXMpO1xuXG5cdFx0aWYgKGluZGV4ICE9PSAtMSlcblx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZXMuc3BsaWNlKGluZGV4LCAxKTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpXG5cdFx0XHRpdGVtUmVzb3VyY2UuY2xlYXJSZXNvdXJjZSgpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBMb2NhbENhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7XG5cdENvbGxlY3Rpb25FbnRyeSxcblx0Q29sbGVjdGlvblJlc291cmNlLFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zLFxuXHRJdGVtUmVzb3VyY2UsIExvY2FsVmlld1Jlc291cmNlLFxufSBmcm9tICcuLi9tb2RlbHMnO1xuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxUIGV4dGVuZHMgSXRlbVJlc291cmNlID0gTG9jYWxWaWV3UmVzb3VyY2U+IGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlIDxUPiB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRjb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5OiBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnMsXG5cdFx0bG9jYWxDYWNoZTogTG9jYWxDYWNoZVxuXHQpIHtcblx0XHRzdXBlcihjb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LCBjb2xsZWN0aW9uRW50cnksIG9wdGlvbnMsIGxvY2FsQ2FjaGUpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBMb2NhbENhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7XG5cdENvbGxlY3Rpb25FbnRyeSxcblx0Q29sbGVjdGlvblJlc291cmNlLFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zLFxuXHRJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSwgTG9jYWxWaWV3UmVzb3VyY2Vcbn0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IEZpZWxkTWFwLCBJdGVtSWQsIEl0ZW1JZENvbnZlcnNpb25NYXAsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRWRpdFJlc291cmNlIDxUIGV4dGVuZHMgSXRlbVJlc291cmNlID0gTG9jYWxWaWV3UmVzb3VyY2U+IGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlIDxUPiB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRmYWN0b3J5OiBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnMsXG5cdFx0bG9jYWxDYWNoZTogTG9jYWxDYWNoZVxuXHQpIHtcblx0XHRzdXBlcihmYWN0b3J5LCBjb2xsZWN0aW9uRW50cnksIG9wdGlvbnMsIGxvY2FsQ2FjaGUpO1xuXHR9XG5cblx0c2F2ZSAoKTogUHJvbWlzZUludGVyZmFjZTxJdGVtSWRDb252ZXJzaW9uTWFwPiB7XG5cdFx0aWYgKCF0aGlzLm9wdGlvbnMuZW5hYmxlU2F2ZSlcblx0XHRcdHRocm93IG5ldyBFcnJvcignY29sbGVjdGlvblJlc291cmNlU2VydmljZTogU2F2aW5nIGRpc2FibGVkJyk7XG5cblx0XHRjb25zdCBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5O1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuZW50cnk7XG5cdFx0Y29uc3QgcGFyZW50ID0gY29sbGVjdGlvbkVudHJ5LnBhcmVudDtcblxuXHRcdGlmIChwYXJlbnQgIT09IG51bGwgJiYgZmFjdG9yeS5rZXlTZXJ2aWNlLmlzTG9jYWxJZChwYXJlbnQuaXRlbUlkKSlcblx0XHRcdHJldHVybiBmYWN0b3J5LnByb21pc2VTZXJ2aWNlLndoZW4oKTtcblxuXHRcdHJldHVybiBmYWN0b3J5LmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LmNvbnN0cnVjdCgpLmV4ZWN1dGUoW10sIFtjb2xsZWN0aW9uRW50cnldKTtcblx0fVxuXG5cdC8vIFRPRE86IHVzZSBjYWxsYmFjayBmdW5jdGlvblxuXHRtb3ZlSXRlbXMgKGlkQXJyYXk6IEl0ZW1JZFtdLCBkZXN0aW5hdGlvbjogQ29sbGVjdGlvblJlc291cmNlLCBlbmFibGVDYWxsYmFja3M/OiBib29sZWFuKTogVFtdIHtcblx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSB0aGlzLmVudHJ5O1xuXHRcdGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cblx0XHRpZiAob3B0aW9ucy5lbmFibGVTYXZlIHx8IG9wdGlvbnMubW9kSW5zdGFudClcblx0XHRcdHRocm93IG5ldyBFcnJvcignY29sbGVjdGlvblJlc291cmNlU2VydmljZTogQ2Fubm90IG1vdmUgaXRlbXM6IHNhdmluZyBlbmFibGVkJyk7XG5cblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlICE9PSBkZXN0aW5hdGlvbi5lbnRyeS5pdGVtVHlwZSlcblx0XHRcdHRocm93IG5ldyBFcnJvcignY29sbGVjdGlvblJlc291cmNlU2VydmljZTogQ2Fubm90IG1vdmUgaXRlbXM6IGl0ZW1UeXBlIG1pc21hdGNoJyk7XG5cblx0XHRjb25zdCByZW1vdmVkSXRlbVJlc291cmNlcyA9IGNvbGxlY3Rpb25FbnRyeS5yZW1vdmVJdGVtcyhpZEFycmF5LCB0aGlzLCBmYWxzZSwgZW5hYmxlQ2FsbGJhY2tzKTtcblx0XHRjb25zdCBpdGVtRW50cmllczogSXRlbUVudHJ5W10gPSBbXTtcblxuXHRcdGlmIChyZW1vdmVkSXRlbVJlc291cmNlcyAhPT0gbnVsbCkge1xuXHRcdFx0Zm9yIChjb25zdCByZW1vdmVkSXRlbVJlc291cmNlIG9mIHJlbW92ZWRJdGVtUmVzb3VyY2VzKVxuXHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKHJlbW92ZWRJdGVtUmVzb3VyY2UuZW50cnkpO1xuXG5cdFx0XHRkZXN0aW5hdGlvbi5lbnRyeS5hZGRJdGVtcyhpdGVtRW50cmllcywgZGVzdGluYXRpb24sIGZhbHNlLCBlbmFibGVDYWxsYmFja3MpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZW1vdmVkSXRlbVJlc291cmNlcztcblx0fVxuXG5cdHJlbW92ZUl0ZW1zIChpZEFycmF5OiBJdGVtSWRbXSwgY2FsbE9uUmVtb3ZlOiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2VJbnRlcmZhY2U8VFtdPiB7XG5cdFx0Ly8gY2FsbE9uUmVtb3ZlIHNob3VsZCBiZSBmYWxzZSBoZXJlIHRvIHByZXZlbnQgb25SZW1vdmUgZnJvbSBiZWluZyBjYWxsZWQgdHdpY2Vcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5lbnRyeS5yZW1vdmVJdGVtcyhpZEFycmF5LCB0aGlzLCBmYWxzZSwgZmFsc2UpO1xuXG5cdFx0aWYgKGl0ZW1SZXNvdXJjZXMgPT09IG51bGwpXG5cdFx0XHRyZXR1cm4gdGhpcy5mYWN0b3J5LnByb21pc2VTZXJ2aWNlLndoZW4oW10pO1xuXG5cdFx0aWYgKHRoaXMub3B0aW9ucy5tb2RJbnN0YW50KVxuXHRcdFx0cmV0dXJuIHRoaXMuc2F2ZSgpLnRoZW4oXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRpZiAoY2FsbE9uUmVtb3ZlKVxuXHRcdFx0XHRcdFx0dGhpcy5jYWxsT25SZW1vdmUoaXRlbVJlc291cmNlcyk7XG5cblx0XHRcdFx0XHRyZXR1cm4gaXRlbVJlc291cmNlcztcblx0XHRcdFx0fVxuXHRcdFx0KTtcblxuXHRcdGlmIChjYWxsT25SZW1vdmUpXG5cdFx0XHR0aGlzLmNhbGxPblJlbW92ZShpdGVtUmVzb3VyY2VzKTtcblxuXHRcdHJldHVybiB0aGlzLmZhY3RvcnkucHJvbWlzZVNlcnZpY2Uud2hlbihpdGVtUmVzb3VyY2VzKTtcblx0fVxuXG5cdHJlbW92ZUl0ZW0gKGl0ZW1JZDogSXRlbUlkLCBjYWxsT25SZW1vdmU/OiBib29sZWFuKTogUHJvbWlzZUludGVyZmFjZTxUPiB7XG5cdFx0cmV0dXJuIHRoaXMucmVtb3ZlSXRlbXMoW2l0ZW1JZF0sIGNhbGxPblJlbW92ZSkudGhlbihcblx0XHRcdGl0ZW1SZXNvdXJjZXMgPT4ge1xuXHRcdFx0XHRyZXR1cm4gaXRlbVJlc291cmNlc1swXTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmZhY3RvcnkuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRhZGRJdGVtcyAodmFsdWVzQXJyYXk6IEZpZWxkTWFwW10sIGNhbGxPbkFkZDogYm9vbGVhbiA9IHRydWUsIGNhbGxPbkFjdGl2YXRlPzogYm9vbGVhbik6IFByb21pc2VJbnRlcmZhY2U8VFtdPiB7XG5cdFx0Y29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTtcblx0XHRjb25zdCBtb2RJbnN0YW50ID0gdGhpcy5vcHRpb25zLm1vZEluc3RhbnQ7XG5cblx0XHRyZXR1cm4gdGhpcy5lbnRyeS5jcmVhdGVJdGVtcyh2YWx1ZXNBcnJheSkudGhlbihcblx0XHRcdGl0ZW1FbnRyaWVzID0+IHtcblx0XHRcdFx0aWYgKG1vZEluc3RhbnQpXG5cdFx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyaWVzO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLmVudHJ5LnJlc29sdmVEZXJpdmVkVmFsdWVzKGl0ZW1FbnRyaWVzLCB0aGlzLmxvY2FsQ2FjaGUuaXRlbXMpO1xuXHRcdFx0fVxuXHRcdCkudGhlbihcblx0XHRcdGl0ZW1FbnRyaWVzID0+IHtcblx0XHRcdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuZW50cnkuYWRkSXRlbXMoXG5cdFx0XHRcdFx0aXRlbUVudHJpZXMsXG5cdFx0XHRcdFx0dGhpcyxcblx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRjYWxsT25BY3RpdmF0ZVxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGlmIChpdGVtUmVzb3VyY2VzID09PSBudWxsKVxuXHRcdFx0XHRcdHJldHVybiBbXTtcblxuXHRcdFx0XHRpZiAobW9kSW5zdGFudCkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLnNhdmUoKS50aGVuKFxuXHRcdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAoY2FsbE9uQWRkKVxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuY2FsbE9uQWRkKGl0ZW1SZXNvdXJjZXMpO1xuXG5cdFx0XHRcdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2VzO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGZhY3RvcnkuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY2FsbE9uQWRkKVxuXHRcdFx0XHRcdHRoaXMuY2FsbE9uQWRkKGl0ZW1SZXNvdXJjZXMpO1xuXG5cdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2VzO1xuXHRcdFx0fSxcblx0XHRcdGZhY3RvcnkuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRhZGRJdGVtICh2YWx1ZXM6IEZpZWxkTWFwLCBjYWxsT25BZGQ/OiBib29sZWFuLCBjYWxsT25BY3RpdmF0ZT86IGJvb2xlYW4pOiBQcm9taXNlSW50ZXJmYWNlPFQ+IHtcblx0XHRyZXR1cm4gdGhpcy5hZGRJdGVtcyhbdmFsdWVzXSwgY2FsbE9uQWRkLCBjYWxsT25BY3RpdmF0ZSkudGhlbihcblx0XHRcdGl0ZW1SZXNvdXJjZXMgPT4ge1xuXHRcdFx0XHRyZXR1cm4gaXRlbVJlc291cmNlc1swXTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmZhY3RvcnkuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRjbGVhciAoZW5hYmxlQ2FsbGJhY2tzOiBib29sZWFuKSB7XG5cdFx0cmV0dXJuIHRoaXMuZW50cnkuY2xlYXIodGhpcywgZmFsc2UsIGVuYWJsZUNhbGxiYWNrcyk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtblNldCB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgVGVtcGxhdGVGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEFwaVJlc3BvbnNlLCBGaWVsZE1hcCwgSXRlbVR5cGUsIFJlc3BvbnNlQ29sdW1uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGUge1xuXHRmaWVsZHM6IEZpZWxkTWFwO1xuXHRyZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwO1xuXHRjb2x1bW5zOiBDb2x1bW5TZXQ7IC8vIFRPRE86IHJlbmFtZSB0byBjb2x1bW5TZXRcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0ZmFjdG9yeTogVGVtcGxhdGVGYWN0b3J5LFxuXHRcdHB1YmxpYyBpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cHVibGljIHJlc3BvbnNlOiBBcGlSZXNwb25zZSxcblx0XHRhZGRpdGlvbmFsQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXBcblx0KSB7XG5cdFx0dGhpcy5maWVsZHMgPSByZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgcmVzcG9uc2UubGlua3NbaXRlbVR5cGVdWzBdKTtcblxuXHRcdHRoaXMucmVzcG9uc2VDb2x1bW5zID0gZmFjdG9yeS5jb2x1bW5VdGlsLm1lcmdlUmVzcG9uc2VDb2x1bW5zKHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpLCBhZGRpdGlvbmFsQ29sdW1ucykubWVyZ2VkO1xuXG5cdFx0dGhpcy5jb2x1bW5zID0gZmFjdG9yeS5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgdHJ1ZSwgdGhpcy5yZXNwb25zZUNvbHVtbnMpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZU9wdGlvbnMsIFZpZXdSZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XG5cbmV4cG9ydCBjbGFzcyBSZW1vdGVWaWV3UmVzb3VyY2UgZXh0ZW5kcyBWaWV3UmVzb3VyY2Uge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0ZW50cnk6IEl0ZW1FbnRyeSxcblx0XHRvcHRpb25zOiBJdGVtUmVzb3VyY2VPcHRpb25zLFxuXHRcdGlzTmV3PzogYm9vbGVhblxuXHQpIHtcblx0XHRzdXBlcihlbnRyeSwgb3B0aW9ucywgaXNOZXcpO1xuXG5cdFx0dGhpcy5maWVsZHMgPSBlbnRyeS5pbml0aWFsO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZU9wdGlvbnMsIFZpZXdSZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XG5cbmV4cG9ydCBjbGFzcyBMb2NhbFZpZXdSZXNvdXJjZSBleHRlbmRzIFZpZXdSZXNvdXJjZSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRlbnRyeTogSXRlbUVudHJ5LFxuXHRcdG9wdGlvbnM6IEl0ZW1SZXNvdXJjZU9wdGlvbnMsXG5cdFx0aXNOZXc/OiBib29sZWFuXG5cdCkge1xuXHRcdHN1cGVyKGVudHJ5LCBvcHRpb25zLCBpc05ldyk7XG5cblx0XHR0aGlzLmZpZWxkcyA9IGVudHJ5Lm1vZGlmaWVkID09PSB1bmRlZmluZWQgPyBlbnRyeS5pbml0aWFsIDogZW50cnkubW9kaWZpZWQ7XG5cdH1cbn1cbiIsIi8vIHNob3VsZCBiZSBvcmRlcmVkIGJ5IGRlcGVuZGVuY3khXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1FbnRyeU9wdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9JdGVtUmVzb3VyY2VPcHRpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vSXRlbUVudHJ5JztcbmV4cG9ydCAqIGZyb20gJy4vSXRlbVJlc291cmNlJztcbmV4cG9ydCAqIGZyb20gJy4vVmlld1Jlc291cmNlJztcbmV4cG9ydCAqIGZyb20gJy4vRWRpdFJlc291cmNlJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkVudHJ5T3B0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uRW50cnknO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uUmVzb3VyY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uVmlld1Jlc291cmNlJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkVkaXRSZXNvdXJjZSc7XG5leHBvcnQgKiBmcm9tICcuL1RlbXBsYXRlJztcbmV4cG9ydCAqIGZyb20gJy4vUmVtb3RlVmlld1Jlc291cmNlJztcbmV4cG9ydCAqIGZyb20gJy4vTG9jYWxWaWV3UmVzb3VyY2UnO1xuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XG5cbmltcG9ydCB7IFF1ZXJ5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgUXVlcnlQYXJzZXJGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeU9wdGlvbnMsIEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZSwgQ29sbGVjdGlvblF1ZXJ5LCBFbnRyeVBhcmVudE51bGwsIEl0ZW1JZCB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25FbnRyeVNlcnZpY2Uge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBxdWVyeVBhcnNlckZhY3Rvcnk6IFF1ZXJ5UGFyc2VyRmFjdG9yeSxcblx0XHRwcml2YXRlIHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlXG5cdCkge1xuXG5cdH1cblxuXHQvLyBubyBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoZSBjb2x1bW5zIHByb3BlcnR5LCBpdCB3aWxsIGJlIHJlcGxhY2VkIGluIHdoZW4gY29sdW1ucyBhcmUgZXhwYW5kZWRcblx0Y2xvbmVPcHRpb25zIChvcHRpb25zOiBDb2xsZWN0aW9uRW50cnlPcHRpb25zLCBwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IG5ldyBDb2xsZWN0aW9uRW50cnlPcHRpb25zKG9wdGlvbnMpOyAvLyBkb2VzIGEgc2hhbGxvdyBjb3B5XG5cblx0XHRyZXN1bHQucXVlcnlQYXJhbXMgPSB0aGlzLmNsb25lUXVlcnlQYXJhbXMob3B0aW9ucy5xdWVyeVBhcmFtcyk7XG5cdFx0cmVzdWx0LnBhcmVudCA9IHBhcmVudDtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRwcm9jZXNzT3B0aW9ucyAob3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2UpOiBDb2xsZWN0aW9uRW50cnlPcHRpb25zIHtcblx0XHRyZXR1cm4gbmV3IENvbGxlY3Rpb25FbnRyeU9wdGlvbnMob3B0aW9ucyk7XG5cdH1cblxuXHRjbG9uZVF1ZXJ5UGFyYW1zPFQgZXh0ZW5kcyBvYmplY3Q+IChwYXJhbWV0ZXJzOiBUKTogVCB7XG5cdFx0Y29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcblxuXHRcdGZvciAoY29uc3Qga2V5IGluIHBhcmFtZXRlcnMpIHtcblx0XHRcdGNvbnN0IHZhbHVlID0gcGFyYW1ldGVyc1trZXldO1xuXHRcdFx0bGV0IGNsb25lO1xuXG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpXG5cdFx0XHRcdGNsb25lID0gdmFsdWUuc2xpY2UoKTsgLy8gd2UncmUgb25seSB1c2luZyBwcmltaXRpdmUgYXJyYXlzXG5cdFx0XHRlbHNlIGlmIChtb21lbnQuaXNNb21lbnQodmFsdWUpKVxuXHRcdFx0XHRjbG9uZSA9IHZhbHVlLmNsb25lKCk7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdGNsb25lID0gdmFsdWU7XG5cblx0XHRcdHJlc3VsdFtrZXldID0gY2xvbmU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGNyZWF0ZVF1ZXJ5IChvcHRpb25zOiBDb2xsZWN0aW9uRW50cnlPcHRpb25zKTogQ29sbGVjdGlvblF1ZXJ5IHtcblx0XHRjb25zdCBwYXJlbnQgPSBvcHRpb25zLnBhcmVudDtcblxuXHRcdGxldCBxdWVyeTtcblxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXG5cdFx0XHRxdWVyeSA9IG9wdGlvbnMucXVlcnk7XG5cdFx0ZWxzZSB7XG5cdFx0XHRjb25zdCBsaW5rZWRUb1F1ZXJ5ID0ge2xpbmtlZFRvOiBwYXJlbnQuaXRlbVR5cGUsIHF1ZXJ5OiB7aWQ6ICcmcGFyZW50SWQnfX07XG5cdFx0XHRvcHRpb25zLnF1ZXJ5UGFyYW1zLnBhcmVudElkID0gcGFyZW50Lml0ZW1JZDtcblxuXHRcdFx0cXVlcnkgPSBvcHRpb25zLnF1ZXJ5ID09PSBudWxsID9cblx0XHRcdFx0bGlua2VkVG9RdWVyeSA6XG5cdFx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLmFkZEFuZENvbmRpdGlvbihvcHRpb25zLnF1ZXJ5LCBsaW5rZWRUb1F1ZXJ5KTtcblx0XHR9XG5cblx0XHRjb25zdCBwYXJzZWRRdWVyeSA9IHRoaXMucXVlcnlQYXJzZXJGYWN0b3J5LmNvbnN0cnVjdChxdWVyeSwgb3B0aW9ucy5xdWVyeVBhcmFtcykucGFyc2UoKTtcblxuXHRcdHJldHVybiB7b2JqZWN0OiBwYXJzZWRRdWVyeVswXSwgc3RyaW5nOiBwYXJzZWRRdWVyeVsxXX07XG5cdH1cblxuXHRnZXRJZEFycmF5IChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGFjY3VtdWxhdG9yOiBJdGVtSWRbXSA9IFtdKTogSXRlbUlkW10ge1xuXHRcdGlmIChhY2N1bXVsYXRvciA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0YWNjdW11bGF0b3IgPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxuXHRcdFx0YWNjdW11bGF0b3IucHVzaChpdGVtRW50cnkuaXRlbUlkKTtcblxuXHRcdHJldHVybiBhY2N1bXVsYXRvcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0l0ZW1FbnRyeVtdfSBpdGVtRW50cmllc1xuXHQgKiBAcGFyYW0geyhpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gYm9vbGVhbn0gY2FsbGJhY2tcblx0ICogQHJldHVybnMge0l0ZW1FbnRyeVtdfVxuXHQgKlxuXHQgKiBmaWx0ZXIgYW4gYXJyYXkgYWNjb3JkaW5nIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbi4gUmV0dXJuIHRoZSBlbnRyaWVzIHRoYXQgZmFpbGVkIHRoZSBjb25kaXRpb25cblx0ICogUmVwbGFjZSB0aGUgZ2l2ZW4gYXJyYXkgd2l0aCB0aGUgZW50cmllcyB0aGF0IGRpZG4ndCBmYWlsIHRoZSBjb25kaXRpb24uXG5cdCAqL1xuXHRmaWx0ZXJBcnJheSAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCBjYWxsYmFjazogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBib29sZWFuKTogSXRlbUVudHJ5W10ge1xuXHRcdGNvbnN0IGZpbHRlcmVkRW50cmllczogSXRlbUVudHJ5W10gPSBbXTtcblx0XHRjb25zdCByZW1vdmVkRW50cmllczogSXRlbUVudHJ5W10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxuXHRcdFx0KGNhbGxiYWNrKGl0ZW1FbnRyeSkgPyBmaWx0ZXJlZEVudHJpZXMgOiByZW1vdmVkRW50cmllcykucHVzaChpdGVtRW50cnkpO1xuXG5cdFx0aWYgKHJlbW92ZWRFbnRyaWVzLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiByZW1vdmVkRW50cmllcztcblxuXHRcdGl0ZW1FbnRyaWVzLmxlbmd0aCA9IGZpbHRlcmVkRW50cmllcy5sZW5ndGg7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1FbnRyaWVzLmxlbmd0aDsgaSsrKVxuXHRcdFx0aXRlbUVudHJpZXNbaV0gPSBmaWx0ZXJlZEVudHJpZXNbaV07XG5cblx0XHRyZXR1cm4gcmVtb3ZlZEVudHJpZXM7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbGxlY3Rpb25FbnRyeU9wdGlvbnMsIENvbGxlY3Rpb25WaWV3UmVzb3VyY2UsIGlkZW50aXR5LCBpc0Z1bmN0aW9uLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vJztcbmltcG9ydCB7XG5cdEJhdGNoU3RhdHVzLFxuXHRDb2xsZWN0aW9uQ2FjaGUsXG5cdENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdENvbGxlY3Rpb25NYXRjaGVyLFxuXHRDb2x1bW5FeHBhbnNpb24sXG5cdENvbHVtbkhhbmRsZXIsXG5cdENvbHVtblNldCxcblx0SXRlbUNhY2hlLFxuXHRJdGVtSGFuZGxlcixcblx0SXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRLZXlTZXJ2aWNlLFxuXHRRdWVyeVNlcnZpY2Vcbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBFTlRSWV9TVEFUVVMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHtcblx0QmF0Y2hTdGF0dXNGYWN0b3J5LFxuXHRDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRDb2xsZWN0aW9uRW50cnlGYWN0b3J5LFxuXHRDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksXG5cdENvbHVtblNldEZhY3RvcnksXG5cdFF1ZXJ5UGFyc2VyRmFjdG9yeVxufSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlTGlicmFyeUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UsIEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge1xuXHRBcGlSZXF1ZXN0Q29sdW1uLFxuXHRDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCxcblx0Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXAsXG5cdEVudHJ5U3RhdHVzLFxuXHRJdGVtRW50cnlQYXJlbnRJZE1hcCxcblx0SXRlbUlkLFxuXHRJdGVtUmVzb3VyY2VJdGVtSWRNYXAsXG5cdEl0ZW1UeXBlLFxuXHRRdWVyeUNhbGxiYWNrXG59IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgaGFzUHJvcGVydGllcyB9IGZyb20gJy4vVXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uSGFuZGxlciB7XG5cdGVudHJpZXM6IENvbGxlY3Rpb25DYWNoZTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBiYXRjaFN0YXR1c0ZhY3Rvcnk6IEJhdGNoU3RhdHVzRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25DYWNoZUZhY3Rvcnk6IENvbGxlY3Rpb25DYWNoZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlGYWN0b3J5OiBDb2xsZWN0aW9uRW50cnlGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkVudHJ5U2VydmljZTogQ29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeTogQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sdW1uSGFuZGxlcjogQ29sdW1uSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcblx0XHRwcml2YXRlIGl0ZW1SZXF1ZXN0U2VydmljZTogSXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZSxcblx0XHRwcml2YXRlIHF1ZXJ5UGFyc2VyRmFjdG9yeTogUXVlcnlQYXJzZXJGYWN0b3J5LFxuXHRcdHByaXZhdGUgcXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2Vcblx0KSB7XG5cdFx0dGhpcy5lbnRyaWVzID0gdGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBkZXByZWNhdGVkLCB1c2UgY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5XG5cdCAqL1xuXHRyZW1vdmVGcm9tQW5kQWRkVG9Db2xsZWN0aW9ucyAoY29sbGVjdGlvbk1hcDogYW55LCB1cGRhdGVJbml0aWFsPzogYm9vbGVhbik6IHZvaWQge1xuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIGNvbGxlY3Rpb25NYXApIHtcblx0XHRcdGNvbnN0IGVudHJ5ID0gY29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdO1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbjogQ29sbGVjdGlvbkVudHJ5ID0gZW50cnkuY29sbGVjdGlvbjtcblxuXHRcdFx0Y29sbGVjdGlvbi5yZW1vdmVJdGVtcyhlbnRyeS5ub3RmaXR0aW5nLCBudWxsLCB0cnVlKTtcblx0XHRcdGNvbGxlY3Rpb24uYWRkSXRlbXMoZW50cnkuZml0dGluZywgbnVsbCwgdHJ1ZSk7IC8vIGRvZXNuJ3QgZG8gYW55dGhpbmcgd2l0aCBpbml0aWFsXG5cblx0XHRcdGlmIChlbnRyeS5tYXliZS5sZW5ndGggPiAwKVxuXHRcdFx0XHRjb2xsZWN0aW9uLmV4dGVuZChpZGVudGl0eSwgbnVsbCwgdHJ1ZSwgdXBkYXRlSW5pdGlhbCk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0Q29sbGVjdGlvbk1hdGNoZXIgKCk6IENvbGxlY3Rpb25NYXRjaGVyIHtcblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnkuY29uc3RydWN0KFt0aGlzLmVudHJpZXNdLCB0cnVlLCB0cnVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAZGVwcmVjYXRlZCwgdXNlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeVxuXHQgKi9cblx0cmVtb3ZlRnJvbUNvbGxlY3Rpb25zPFQgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2UgPSBDb2xsZWN0aW9uVmlld1Jlc291cmNlPiAoXG5cdFx0Y29sbGVjdGlvbk1hcCxcblx0XHR1cGRhdGVJbml0aWFsPzogYm9vbGVhbixcblx0XHRyZXN1bHRSZXNvdXJjZTogVCB8IG51bGwgPSBudWxsXG5cdCk6IFRbJ2l0ZW1zJ10gfCBudWxsIHtcblx0XHRsZXQgcmVzdWx0O1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gY29sbGVjdGlvbk1hcCkge1xuXHRcdFx0Y29uc3QgbWFwRW50cnkgPSBjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF07XG5cdFx0XHRjb25zdCBmaXR0aW5nID0gbWFwRW50cnkuZml0dGluZztcblx0XHRcdGNvbnN0IG1heWJlID0gbWFwRW50cnkubWF5YmU7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSA9IG1hcEVudHJ5LmNvbGxlY3Rpb247XG5cdFx0XHRjb25zdCBpZEFycmF5OiBJdGVtSWRbXSA9IFtdO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGZpdHRpbmdJdGVtIG9mIGZpdHRpbmcpXG5cdFx0XHRcdGlkQXJyYXkucHVzaChmaXR0aW5nSXRlbS5pdGVtSWQpO1xuXG5cdFx0XHRmb3IgKGNvbnN0IG1heWJlSXRlbSBvZiBtYXliZSlcblx0XHRcdFx0aWRBcnJheS5wdXNoKG1heWJlSXRlbSk7XG5cblx0XHRcdGlmIChyZXN1bHRSZXNvdXJjZSAhPT0gbnVsbCAmJiBjb2xsZWN0aW9uRW50cnkgPT09IHJlc3VsdFJlc291cmNlLmVudHJ5KVxuXHRcdFx0XHRyZXN1bHQgPSBjb2xsZWN0aW9uRW50cnkucmVtb3ZlSXRlbXMoaWRBcnJheSwgcmVzdWx0UmVzb3VyY2UsIHVwZGF0ZUluaXRpYWwpO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkucmVtb3ZlSXRlbXMoaWRBcnJheSwgbnVsbCwgdXBkYXRlSW5pdGlhbCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8vIFRPRE86IG1heWJlLCBib29sZWFuIGluc3RlYWQgb2YgbWVzc2FnZVxuXHQvKipcblx0ICogQGRlcHJlY2F0ZWQsIHVzZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnlcblx0ICovXG5cdGFkZFRvQ29sbGVjdGlvbnM8VCBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZSA9IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U+IChcblx0XHRjb2xsZWN0aW9uTWFwLFxuXHRcdHVwZGF0ZUluaXRpYWw6IGJvb2xlYW4sXG5cdFx0cmVzdWx0UmVzb3VyY2U6IFQgfCBudWxsID0gbnVsbFxuXHQpOiBUWydpdGVtcyddIHtcblx0XHRsZXQgcmVzdWx0O1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gY29sbGVjdGlvbk1hcCkge1xuXHRcdFx0Y29uc3QgbWFwRW50cnkgPSBjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF07XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBtYXBFbnRyeS5jb2xsZWN0aW9uO1xuXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LmlzRGVmZXJyZWQoKSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGlmIChyZXN1bHRSZXNvdXJjZSAhPT0gbnVsbCAmJiBjb2xsZWN0aW9uRW50cnkgPT09IHJlc3VsdFJlc291cmNlLmVudHJ5KVxuXHRcdFx0XHRyZXN1bHQgPSBjb2xsZWN0aW9uRW50cnkuYWRkSXRlbXMobWFwRW50cnkuZml0dGluZywgcmVzdWx0UmVzb3VyY2UsIHVwZGF0ZUluaXRpYWwpO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuYWRkSXRlbXMobWFwRW50cnkuZml0dGluZywgbnVsbCwgdXBkYXRlSW5pdGlhbCk7XG5cblx0XHRcdGlmICh1cGRhdGVJbml0aWFsICYmIG1hcEVudHJ5Lm1heWJlLmxlbmd0aCA+IDApXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5leHRlbmQoaWRlbnRpdHksIG51bGwsIHRydWUsIHVwZGF0ZUluaXRpYWwpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRiYXRjaEV4cGFuZCAoXG5cdFx0cGFyZW50VHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcCxcblx0XHRuZXdDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1uW11cblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcD4ge1xuXHRcdGlmIChuZXdDb2x1bW5zLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oY29sbGVjdGlvbnMpO1xuXG5cdFx0Y29uc3QgcGFyZW50SWRBcnJheTogSXRlbUlkW10gPSBbXTtcblx0XHRsZXQgaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XG5cblx0XHQvLyBUT0RPOiBmaWx0ZXIgbG9jYWwgaXRlbXM/XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGNvbGxlY3Rpb25zKSB7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBjb2xsZWN0aW9uc1twYXJlbnRJZF0uZW50cnk7XG5cblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5kZWZlcigpO1xuXG5cdFx0XHRwYXJlbnRJZEFycmF5LnB1c2goY29sbGVjdGlvbkVudHJ5LnBhcmVudCEuaXRlbUlkKTtcblx0XHRcdGl0ZW1FbnRyaWVzID0gaXRlbUVudHJpZXMuY29uY2F0KGNvbGxlY3Rpb25FbnRyeS5pdGVtcyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RMaW5rSXRlbXMoXG5cdFx0XHRwYXJlbnRUeXBlLFxuXHRcdFx0cGFyZW50SWRBcnJheSxcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0bnVsbCxcblx0XHRcdG5ld0NvbHVtbnNcblx0XHQpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NFeHBhbnNpb24oXG5cdFx0XHRcdFx0bmV3Q29sdW1ucyxcblx0XHRcdFx0XHRyZXNwb25zZSxcblx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRpdGVtRW50cmllc1xuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgb2YgcGFyZW50SWRBcnJheSkge1xuXHRcdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGNvbGxlY3Rpb25zW3BhcmVudElkXS5lbnRyeTtcblxuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5leHBhbmRDb2x1bW5zKGNvbHVtbkV4cGFuc2lvbik7XG5cdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5Ll9yZXNvbHZlKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gY29sbGVjdGlvbnM7XG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdC8vIHRvZG9bVFNdIGhvdyBkbyB3ZSB0eXBlIHRoaXMgP1xuXHRiYXRjaEV4dGVuZCA8VCBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwPiAoXG5cdFx0cGFyZW50VHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25FbnRyeU9wdGlvbnMsXG5cdFx0cXVlcnlDYWxsYmFjazogUXVlcnlDYWxsYmFjayxcblx0XHRjb2xsZWN0aW9uczogVCxcblx0XHRyZXR1cm5BbGxJdGVtczogYm9vbGVhbiA9IGZhbHNlXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8SXRlbVJlc291cmNlSXRlbUlkTWFwPiB7XG5cdFx0aWYgKCFoYXNQcm9wZXJ0aWVzKGNvbGxlY3Rpb25zKSlcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oe30pO1xuXG5cdFx0Y29uc3QgcGFyZW50SWRBcnJheTogSXRlbUlkW10gPSBbXTtcblx0XHRsZXQgaXRlbUlkQXJyYXk6IEl0ZW1JZFtdID0gW107XG5cblx0XHRvcHRpb25zLnF1ZXJ5UGFyYW1zID0gcXVlcnlDYWxsYmFjayhvcHRpb25zLnF1ZXJ5UGFyYW1zKTtcblxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gY29sbGVjdGlvbnMpIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGNvbGxlY3Rpb25zW3BhcmVudElkXS5lbnRyeTtcblxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LmV4dGVuZFF1ZXJ5KHF1ZXJ5Q2FsbGJhY2spO1xuXHRcdFx0cGFyZW50SWRBcnJheS5wdXNoKGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQhLml0ZW1JZCk7XG5cblx0XHRcdGl0ZW1JZEFycmF5ID0gaXRlbUlkQXJyYXkuY29uY2F0KGNvbGxlY3Rpb25FbnRyeS5nZXRJZEFycmF5KCkpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5yZXF1ZXN0TGlua0l0ZW1zKFxuXHRcdFx0cGFyZW50VHlwZSxcblx0XHRcdHBhcmVudElkQXJyYXksXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLmFkZEFuZENvbmRpdGlvbihcblx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNyZWF0ZVF1ZXJ5KG9wdGlvbnMpLm9iamVjdCxcblx0XHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UuY3JlYXRlTm90SW4oaXRlbUlkQXJyYXkpXG5cdFx0XHQpLFxuXHRcdFx0b3B0aW9ucy5jb2x1bW5zXG5cdFx0KS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc0xpbmtSZXNwb25zZShcblx0XHRcdFx0XHRyZXNwb25zZSxcblx0XHRcdFx0XHRwYXJlbnRUeXBlLFxuXHRcdFx0XHRcdHBhcmVudElkQXJyYXksXG5cdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0b3B0aW9uc1xuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihcblx0XHRcdGl0ZW1FbnRyeVJlc291cmNlID0+IHtcblx0XHRcdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBvZiBwYXJlbnRJZEFycmF5KSB7XG5cdFx0XHRcdFx0Y29uc3QgY29sbGVjdGlvblJlc291cmNlID0gY29sbGVjdGlvbnNbcGFyZW50SWRdO1xuXHRcdFx0XHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSBjb2xsZWN0aW9uUmVzb3VyY2UuZW50cnkuYWRkSXRlbXMoIC8vIHNob3VsZCBnbyBmaXJzdFxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5UmVzb3VyY2UuaXRlbXNbcGFyZW50SWRdLFxuXHRcdFx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlXG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdHJlc3VsdFtwYXJlbnRJZF0gPSByZXR1cm5BbGxJdGVtcyA/IGNvbGxlY3Rpb25SZXNvdXJjZS5pdGVtcyA6IGl0ZW1SZXNvdXJjZXM7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRiYXRjaEZldGNoIChcblx0XHRwYXJlbnRUeXBlOiBJdGVtVHlwZSxcblx0XHRwYXJlbnRJZEFycmF5OiBJdGVtSWRbXSB8ICgoKSA9PiBJdGVtSWRbXSksXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25FbnRyeU9wdGlvbnMsXG5cdFx0aXRlbUNhY2hlOiBJdGVtQ2FjaGUsXG5cdFx0bG9jYWxDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZSxcblx0XHRkZWZlcnJlZENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXA+IHtcblx0XHRjb25zdCBlcnJvckhhbmRsZXIgPSB0aGlzLmVycm9ySGFuZGxlcjtcblx0XHRjb25zdCBiYXRjaFN0YXR1czogQmF0Y2hTdGF0dXM8Q29sbGVjdGlvbkVudHJ5PiA9IHRoaXMuYmF0Y2hTdGF0dXNGYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5ID0+IChjb2xsZWN0aW9uRW50cnkucGFyZW50ISkuaXRlbUlkLFxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5ID0+IGNvbGxlY3Rpb25FbnRyeS5wcm9taXNlXG5cdFx0KTtcblxuXHRcdGlmIChpc0Z1bmN0aW9uPCgpID0+IEl0ZW1JZFtdPihwYXJlbnRJZEFycmF5KSlcblx0XHRcdHBhcmVudElkQXJyYXkgPSBwYXJlbnRJZEFycmF5KCk7XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIG9mIHBhcmVudElkQXJyYXkpIHtcblx0XHRcdGJhdGNoU3RhdHVzLmFkZChcblx0XHRcdFx0dGhpcy5nZXRFbnRyeVN0YXR1cyhcblx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuY2xvbmVPcHRpb25zKG9wdGlvbnMsIHtpdGVtVHlwZTogcGFyZW50VHlwZSwgaXRlbUlkOiBwYXJlbnRJZH0pLFxuXHRcdFx0XHRcdGxvY2FsQ29sbGVjdGlvbkNhY2hlLFxuXHRcdFx0XHRcdGRlZmVycmVkQ29sbGVjdGlvbkNhY2hlXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKGJhdGNoU3RhdHVzLmdldFByb21pc2VzKCkpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlcXVlc3RJZHMgPSBiYXRjaFN0YXR1cy5nZXRSZXF1ZXN0SWRzKCk7XG5cdFx0XHRcdGxldCBpdGVtRW50cnlDb21wb3VuZFByb21pc2U7XG5cdFx0XHRcdGxldCBhZGRpdGlvbmFsUXVlcnk7XG5cblx0XHRcdFx0aWYgKG9wdGlvbnMucXVlcnkgPT09IG51bGwpXG5cdFx0XHRcdFx0YWRkaXRpb25hbFF1ZXJ5ID0gbnVsbDtcblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3QgcGFyc2VkUXVlcnkgPSB0aGlzLnF1ZXJ5UGFyc2VyRmFjdG9yeS5jb25zdHJ1Y3Qob3B0aW9ucy5xdWVyeSwgb3B0aW9ucy5xdWVyeVBhcmFtcykucGFyc2UoKTtcblx0XHRcdFx0XHRhZGRpdGlvbmFsUXVlcnkgPSB7b2JqZWN0OiBwYXJzZWRRdWVyeVswXSwgc3RyaW5nOiBwYXJzZWRRdWVyeVsxXX07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAocmVxdWVzdElkcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0aXRlbUVudHJ5Q29tcG91bmRQcm9taXNlID0gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdExpbmtJdGVtcyhcblx0XHRcdFx0XHRcdHBhcmVudFR5cGUsXG5cdFx0XHRcdFx0XHRyZXF1ZXN0SWRzLFxuXHRcdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0XHRhZGRpdGlvbmFsUXVlcnkgPT09IG51bGwgPyBudWxsIDogYWRkaXRpb25hbFF1ZXJ5Lm9iamVjdCxcblx0XHRcdFx0XHRcdG9wdGlvbnMuY29sdW1uc1xuXHRcdFx0XHRcdCkudGhlbihcblx0XHRcdFx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NMaW5rUmVzcG9uc2UoXG5cdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0XHRcdFx0cGFyZW50VHlwZSxcblx0XHRcdFx0XHRcdFx0XHRyZXF1ZXN0SWRzLFxuXHRcdFx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdFx0XHRcdG9wdGlvbnNcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSBlbHNlIGlmIChiYXRjaFN0YXR1cy5oYXNFbnRyaWVzKFtFTlRSWV9TVEFUVVMuTE9DQUxdKSkge1xuXHRcdFx0XHRcdGl0ZW1FbnRyeUNvbXBvdW5kUHJvbWlzZSA9IHRoaXMuY29sdW1uSGFuZGxlci5mZXRjaChpdGVtVHlwZSwgb3B0aW9ucy5jb2x1bW5zKS50aGVuKFxuXHRcdFx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRjb2x1bW5zOiB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRcdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0XHRcdFx0XHRvcHRpb25zLmNvbHVtbnMsXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnMsXG5cdFx0XHRcdFx0XHRcdFx0XHRmYWxzZVxuXHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSBlbHNlXG5cdFx0XHRcdFx0cmV0dXJuIGJhdGNoU3RhdHVzLmdldE1hcCgpO1xuXG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnlDb21wb3VuZFByb21pc2UudGhlbihcblx0XHRcdFx0XHRpdGVtRW50cnlDb21wb3VuZCA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBpdGVtRW50cnlNYXAgPSBpdGVtQ2FjaGUuYmF0Y2hHZXRMb2NhbEJ5UGFyZW50KFxuXHRcdFx0XHRcdFx0XHRwYXJlbnRUeXBlLFxuXHRcdFx0XHRcdFx0XHRwYXJlbnRJZEFycmF5IGFzIEl0ZW1JZFtdLFxuXHRcdFx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRcdFx0YWRkaXRpb25hbFF1ZXJ5XG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRsZXQgaXRlbUVudHJ5QXJyYXk6IEl0ZW1FbnRyeVtdID0gW107XG5cblx0XHRcdFx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gaXRlbUVudHJ5TWFwKVxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnlBcnJheSA9IGl0ZW1FbnRyeUFycmF5LmNvbmNhdChpdGVtRW50cnlNYXBbcGFyZW50SWRdKTtcblxuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuZXhwYW5kTG9jYWxJdGVtRW50cmllcyhcblx0XHRcdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeUFycmF5LFxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnlDb21wb3VuZC5jb2x1bW5zLFxuXHRcdFx0XHRcdFx0XHRpdGVtQ2FjaGVcblx0XHRcdFx0XHRcdCkudGhlbihcblx0XHRcdFx0XHRcdFx0KCkgPT4gdGhpcy5oYW5kbGVCYXRjaFJlc3BvbnNlKGJhdGNoU3RhdHVzLCBpdGVtRW50cnlDb21wb3VuZCwgaXRlbUVudHJ5TWFwKSxcblx0XHRcdFx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdC8vIFRPRE86IHNvbWUgc3RhdHVzZXMgYXJlIG5vdCB0YWtlbiBpbnRvIGFjY291bnRcblx0aGFuZGxlQmF0Y2hSZXNwb25zZSAoXG5cdFx0YmF0Y2hTdGF0dXM6IEJhdGNoU3RhdHVzPENvbGxlY3Rpb25FbnRyeT4sXG5cdFx0aXRlbUVudHJ5Q29tcG91bmQ6IHtcblx0XHRcdGNvbHVtbnM6IENvbHVtblNldCxcblx0XHRcdGNvbHVtbkV4cGFuc2lvbj86IENvbHVtbkV4cGFuc2lvbixcblx0XHRcdGl0ZW1zPzogSXRlbUVudHJ5UGFyZW50SWRNYXBcblx0XHR9LFxuXHRcdGxvY2FsSXRlbXM6IEl0ZW1FbnRyeVBhcmVudElkTWFwXG5cdCk6IENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwIHtcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRcdGJhdGNoU3RhdHVzLmZvckVhY2hFbnRyeShcblx0XHRcdFtFTlRSWV9TVEFUVVMuQ0FDSEVEXSxcblx0XHRcdChjb2xsZWN0aW9uRW50cnksIHBhcmVudElkKSA9PiB7XG5cdFx0XHRcdHJlc3VsdFtwYXJlbnRJZF0gPSBjb2xsZWN0aW9uRW50cnk7XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdGJhdGNoU3RhdHVzLmZvckVhY2hFbnRyeShcblx0XHRcdFtFTlRSWV9TVEFUVVMuUkVTT0xWRV0sXG5cdFx0XHQoY29sbGVjdGlvbkVudHJ5LCBwYXJlbnRJZCkgPT4ge1xuXHRcdFx0XHRjb25zdCBpdGVtRW50cmllcyA9IChpdGVtRW50cnlDb21wb3VuZC5pdGVtcyEpW3BhcmVudElkXTtcblxuXHRcdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gY29sbGVjdGlvbkVudHJ5LnJlc29sdmUoXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0aW5pdGlhbDogaXRlbUVudHJpZXMsXG5cdFx0XHRcdFx0XHRtb2RpZmllZDogaXRlbUVudHJpZXMuY29uY2F0KGxvY2FsSXRlbXNbcGFyZW50SWRdKSxcblx0XHRcdFx0XHRcdGNvbHVtbnM6IGl0ZW1FbnRyeUNvbXBvdW5kLmNvbHVtbnNcblx0XHRcdFx0XHR9XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdGJhdGNoU3RhdHVzLmZvckVhY2hFbnRyeShcblx0XHRcdGJhdGNoU3RhdHVzLnJlbW90ZUV4cGFuZFN0YXR1cyxcblx0XHRcdChjb2xsZWN0aW9uRW50cnksIHBhcmVudElkKSA9PiB7XG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5leHBhbmRDb2x1bW5zKGl0ZW1FbnRyeUNvbXBvdW5kLmNvbHVtbkV4cGFuc2lvbiEpO1xuXHRcdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gY29sbGVjdGlvbkVudHJ5Ll9yZXNvbHZlKCk7XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdGJhdGNoU3RhdHVzLmZvckVhY2hFbnRyeShcblx0XHRcdFtFTlRSWV9TVEFUVVMuTE9DQUxdLFxuXHRcdFx0KGNvbGxlY3Rpb25FbnRyeSwgcGFyZW50SWQpID0+IHtcblx0XHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IGNvbGxlY3Rpb25FbnRyeS5yZXNvbHZlKFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGluaXRpYWw6IGxvY2FsSXRlbXNbcGFyZW50SWRdLFxuXHRcdFx0XHRcdFx0Y29sdW1uczogaXRlbUVudHJ5Q29tcG91bmQuY29sdW1uc1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGZldGNoIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbkVudHJ5T3B0aW9ucyxcblx0XHRpdGVtQ2FjaGU6IEl0ZW1DYWNoZSxcblx0XHRsb2NhbENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlLFxuXHRcdGRlZmVycmVkQ29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGVcblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uRW50cnk+IHtcblx0XHRjb25zdCBlcnJvckhhbmRsZXIgPSB0aGlzLmVycm9ySGFuZGxlcjtcblx0XHRjb25zdCBzdGF0dXNSZXNvdXJjZSA9IHRoaXMuZ2V0RW50cnlTdGF0dXMoaXRlbVR5cGUsIG9wdGlvbnMsIGxvY2FsQ29sbGVjdGlvbkNhY2hlLCBkZWZlcnJlZENvbGxlY3Rpb25DYWNoZSk7XG5cdFx0Y29uc3QgZW50cnkgPSBzdGF0dXNSZXNvdXJjZS5lbnRyeTtcblxuXHRcdHN3aXRjaCAoc3RhdHVzUmVzb3VyY2Uuc3RhdHVzKSB7XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5DQUNIRUQ6XG5cdFx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oZW50cnkpO1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuUFJPTUlTRUQ6XG5cdFx0XHRcdHJldHVybiBlbnRyeS5wcm9taXNlO1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuRVhQQU5EOlxuXHRcdFx0XHRyZXR1cm4gZW50cnkuZXhwYW5kKG9wdGlvbnMuY29sdW1ucywgaXRlbUNhY2hlKS50aGVuKFxuXHRcdFx0XHRcdCgpID0+IGVudHJ5Ll9yZXNvbHZlKCksXG5cdFx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHQpO1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EOlxuXHRcdFx0XHRyZXR1cm4gZW50cnkucHJvbWlzZS50aGVuKFxuXHRcdFx0XHRcdCgpID0+IGVudHJ5LmRlZmVyKCkuZXhwYW5kKG9wdGlvbnMuY29sdW1ucywgaXRlbUNhY2hlKSxcblx0XHRcdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdCkudGhlbihcblx0XHRcdFx0XHQoKSA9PiBlbnRyeS5fcmVzb2x2ZSgpLFxuXHRcdFx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KTtcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLkxPQ0FMOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlTG9jYWwoZW50cnksIGl0ZW1DYWNoZSk7XG5cdFx0XHRkZWZhdWx0OiAvLyBjYXNlIEVOVFJZX1NUQVRVUy5SRVNPTFZFOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlUmVtb3RlKGVudHJ5LCBpdGVtQ2FjaGUpO1xuXHRcdH1cblx0fVxuXG5cdGdldENhY2hlZEVudHJ5U3RhdHVzIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucyk6IEVOVFJZX1NUQVRVUyB7XG5cdFx0aWYgKCFjb2xsZWN0aW9uRW50cnkuY29sdW1ucy5pc1N1cGVyc2V0T2Yob3B0aW9ucy5jb2x1bW5zKSkge1xuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0RlZmVycmVkKCkpXG5cdFx0XHRcdHJldHVybiBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EO1xuXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuZGVmZXIoKTtcblxuXHRcdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5FWFBBTkQ7XG5cdFx0fVxuXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0RlZmVycmVkKCkpXG5cdFx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLlBST01JU0VEO1xuXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5yZWxvYWRRdWV1ZWQpIHtcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5yZWxvYWRRdWV1ZWQgPSBmYWxzZTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0xvY2FsKCkpXG5cdFx0XHRcdHJldHVybiBFTlRSWV9TVEFUVVMuQ0FDSEVEO1xuXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuZGVmZXIoKTtcblxuXHRcdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5SRVNPTFZFO1xuXHRcdH1cblxuXHRcdHJldHVybiBFTlRSWV9TVEFUVVMuQ0FDSEVEO1xuXHR9XG5cblx0Z2V0RGVmZXJyZWRFbnRyeVN0YXR1cyAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnMsXG5cdFx0cXVlcnksXG5cdFx0ZGVmZXJyZWRFbnRyaWVzOiBDb2xsZWN0aW9uQ2FjaGVcblx0KToge2VudHJ5OiBDb2xsZWN0aW9uRW50cnksIGlzRGVmZXJyZWQ6IGJvb2xlYW59IHtcblx0XHRsZXQgY29sbGVjdGlvbkVudHJ5O1xuXG5cdFx0aWYgKCFvcHRpb25zLmRlZmVyUmVxdWVzdCkge1xuXHRcdFx0Y29sbGVjdGlvbkVudHJ5ID0gdGhpcy5jb2xsZWN0aW9uRW50cnlGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucyk7XG5cblx0XHRcdHJldHVybiB7ZW50cnk6IGNvbGxlY3Rpb25FbnRyeSwgaXNEZWZlcnJlZDogZmFsc2V9O1xuXHRcdH1cblxuXHRcdGNvbGxlY3Rpb25FbnRyeSA9IGRlZmVycmVkRW50cmllcy5nZXRCeVF1ZXJ5KGl0ZW1UeXBlLCBxdWVyeSk7XG5cblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ICE9PSBudWxsKSB7XG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuZXhwYW5kUmVxdWVzdENvbHVtbnMob3B0aW9ucy5jb2x1bW5zKTtcblxuXHRcdFx0cmV0dXJuIHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBpc0RlZmVycmVkOiBmYWxzZX07XG5cdFx0fVxuXG5cdFx0Y29sbGVjdGlvbkVudHJ5ID0gdGhpcy5jb2xsZWN0aW9uRW50cnlGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucyk7XG5cblx0XHRyZXR1cm4ge2VudHJ5OiBkZWZlcnJlZEVudHJpZXMuYWRkKGNvbGxlY3Rpb25FbnRyeSksIGlzRGVmZXJyZWQ6IHRydWV9O1xuXHR9XG5cblx0Z2V0RW50cnlTdGF0dXMgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zLFxuXHRcdGxvY2FsRW50cmllczogQ29sbGVjdGlvbkNhY2hlLFxuXHRcdGRlZmVycmVkRW50cmllczogQ29sbGVjdGlvbkNhY2hlXG5cdCk6IEVudHJ5U3RhdHVzPENvbGxlY3Rpb25FbnRyeT4ge1xuXHRcdGNvbnN0IHF1ZXJ5ID0gdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNyZWF0ZVF1ZXJ5KG9wdGlvbnMpO1xuXHRcdGxldCBjb2xsZWN0aW9uRW50cnk7XG5cdFx0bGV0IGlzRGVmZXJyZWQ7XG5cblx0XHRpZiAodGhpcy5pc0xvY2FsKG9wdGlvbnMpKSB7XG5cdFx0XHRjb2xsZWN0aW9uRW50cnkgPSBsb2NhbEVudHJpZXMuZ2V0QnlRdWVyeShpdGVtVHlwZSwgcXVlcnkpO1xuXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ICE9PSBudWxsKVxuXHRcdFx0XHRyZXR1cm4ge2VudHJ5OiBjb2xsZWN0aW9uRW50cnksIHN0YXR1czogdGhpcy5nZXRDYWNoZWRFbnRyeVN0YXR1cyhjb2xsZWN0aW9uRW50cnksIG9wdGlvbnMpfTtcblxuXHRcdFx0KHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBpc0RlZmVycmVkfSA9IHRoaXMuZ2V0RGVmZXJyZWRFbnRyeVN0YXR1cyhcblx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdG9wdGlvbnMsXG5cdFx0XHRcdHF1ZXJ5LFxuXHRcdFx0XHRkZWZlcnJlZEVudHJpZXNcblx0XHRcdCkpO1xuXG5cdFx0XHRpZiAoaXNEZWZlcnJlZClcblx0XHRcdFx0cmV0dXJuIHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBzdGF0dXM6IEVOVFJZX1NUQVRVUy5QUk9NSVNFRH07XG5cblx0XHRcdC8vIG5ldyBsb2NhbCBlbnRyeSBjcmVhdGVkLCBzaG91bGQgYmUgYWRkZWQgdG8gbG9jYWwgY2FjaGUgb25seVxuXHRcdFx0cmV0dXJuIHtlbnRyeTogbG9jYWxFbnRyaWVzLmFkZChjb2xsZWN0aW9uRW50cnkpLCBzdGF0dXM6IEVOVFJZX1NUQVRVUy5MT0NBTH07XG5cdFx0fVxuXG5cdFx0Y29sbGVjdGlvbkVudHJ5ID0gdGhpcy5lbnRyaWVzLmdldEJ5UXVlcnkoaXRlbVR5cGUsIHF1ZXJ5KTtcblxuXHRcdC8vIGVudHJ5IGFscmVhZHkgZXhpc3RzIGluIGdsb2JhbCBjYWNoZSwgYWRkIHRvIGxvY2FsIGNhY2hlXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeSAhPT0gbnVsbClcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGVudHJ5OiBsb2NhbEVudHJpZXMuYWRkKGNvbGxlY3Rpb25FbnRyeSksXG5cdFx0XHRcdHN0YXR1czogdGhpcy5nZXRDYWNoZWRFbnRyeVN0YXR1cyhjb2xsZWN0aW9uRW50cnksIG9wdGlvbnMpXG5cdFx0XHR9O1xuXG5cdFx0KHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBpc0RlZmVycmVkfSA9IHRoaXMuZ2V0RGVmZXJyZWRFbnRyeVN0YXR1cyhpdGVtVHlwZSwgb3B0aW9ucywgcXVlcnksIGRlZmVycmVkRW50cmllcykpO1xuXG5cdFx0aWYgKGlzRGVmZXJyZWQpXG5cdFx0XHRyZXR1cm4ge2VudHJ5OiBjb2xsZWN0aW9uRW50cnksIHN0YXR1czogRU5UUllfU1RBVFVTLlBST01JU0VEfTtcblxuXHRcdC8vIG5ldyBnbG9iYWwgZW50cnkgY3JlYXRlZCwgYWRkIHRvIGJvdGggbG9jYWwgYW5kIGdsb2JhbCBjYWNoZVxuXHRcdGxvY2FsRW50cmllcy5hZGQoY29sbGVjdGlvbkVudHJ5KTtcblx0XHR0aGlzLmVudHJpZXMuYWRkKGNvbGxlY3Rpb25FbnRyeSk7XG5cblx0XHRyZXR1cm4ge2VudHJ5OiBjb2xsZWN0aW9uRW50cnksIHN0YXR1czogRU5UUllfU1RBVFVTLlJFU09MVkV9O1xuXHR9XG5cblx0cmVzb2x2ZUxvY2FsIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgaXRlbUNhY2hlOiBJdGVtQ2FjaGUpOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25FbnRyeT4ge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlO1xuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0gY29sbGVjdGlvbkVudHJ5Lm9wdGlvbnMuY29sdW1ucztcblxuXHRcdHJldHVybiB0aGlzLmNvbHVtbkhhbmRsZXIuZmV0Y2goaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zKS50aGVuKFxuXHRcdFx0cmVzcG9uc2VDb2x1bW5zID0+IHtcblx0XHRcdFx0Y29uc3QgY29sdW1uU2V0ID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucywgZmFsc2UpO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLmV4cGFuZExvY2FsSXRlbUVudHJpZXMoXG5cdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0aXRlbUNhY2hlLmdldExvY2FsQnlRdWVyeShpdGVtVHlwZSwgY29sbGVjdGlvbkVudHJ5LnF1ZXJ5KSxcblx0XHRcdFx0XHRjb2x1bW5TZXQsXG5cdFx0XHRcdFx0aXRlbUNhY2hlXG5cdFx0XHRcdCkudGhlbihcblx0XHRcdFx0XHRsb2NhbEVudHJpZXMgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25FbnRyeS5yZXNvbHZlKHtpbml0aWFsOiBsb2NhbEVudHJpZXMsIGNvbHVtbnM6IGNvbHVtblNldH0pO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHJlc29sdmVSZW1vdGUgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LCBpdGVtQ2FjaGU6IEl0ZW1DYWNoZSk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvbkVudHJ5PiB7XG5cdFx0Y29uc3QgZXJyb3JIYW5kbGVyID0gdGhpcy5lcnJvckhhbmRsZXI7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGU7XG5cblx0XHRsZXQgY29sdW1uU2V0O1xuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RJdGVtcyhjb2xsZWN0aW9uRW50cnkpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdGNvbHVtblNldCA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5Lm9wdGlvbnMuY29sdW1ucyxcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKVxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzUmVzcG9uc2UoXG5cdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0cmVzcG9uc2UubGlua3NbaXRlbVR5cGVdLFxuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQsXG5cdFx0XHRcdFx0Y29sdW1uU2V0XG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihcblx0XHRcdHJlbW90ZUVudHJpZXMgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5leHBhbmRMb2NhbEl0ZW1FbnRyaWVzKFxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdGl0ZW1DYWNoZS5nZXRMb2NhbEJ5UXVlcnkoaXRlbVR5cGUsIGNvbGxlY3Rpb25FbnRyeS5xdWVyeSksXG5cdFx0XHRcdFx0Y29sdW1uU2V0LFxuXHRcdFx0XHRcdGl0ZW1DYWNoZVxuXHRcdFx0XHQpLnRoZW4oXG5cdFx0XHRcdFx0bG9jYWxFbnRyaWVzID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnkucmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGluaXRpYWw6IHJlbW90ZUVudHJpZXMsXG5cdFx0XHRcdFx0XHRcdFx0bW9kaWZpZWQ6IHJlbW90ZUVudHJpZXMuY29uY2F0KGxvY2FsRW50cmllcyksXG5cdFx0XHRcdFx0XHRcdFx0Y29sdW1uczogY29sdW1uU2V0XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRpc0xvY2FsIChvcHRpb25zKSB7XG5cdFx0Y29uc3QgcGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XG5cblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0cmV0dXJuIHRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQocGFyZW50Lml0ZW1JZCk7XG5cdH1cblxuXHRwcml2YXRlIGV4cGFuZExvY2FsSXRlbUVudHJpZXMgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXG5cdFx0Y29sdW1uU2V0OiBDb2x1bW5TZXQsXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1FbnRyeVtdPiB7XG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZXhwYW5kTG9jYWxFbnRyaWVzKFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRpdGVtRW50cmllcyxcblx0XHRcdGNvbHVtblNldC5yZXF1ZXN0LFxuXHRcdFx0Y29sdW1uU2V0LnJlc3BvbnNlLFxuXHRcdFx0bG9jYWxJdGVtQ2FjaGVcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBpZGVudGl0eSwgSXRlbUlkIH0gZnJvbSAnLi4vJztcbmltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcy8nO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcblxuZXhwb3J0IHR5cGUgQ29sbGVjdGlvbk1hdGNoZXJNYXRjaGVzID0ge1xuXHRbaXRlbUlkOiBudW1iZXJdOiB7XG5cdFx0aXRlbTogSXRlbUVudHJ5LFxuXHRcdGlzTWF0Y2g6IGJvb2xlYW4gfCAnbWF5YmUnXG5cdH1cbn07XG5cbmV4cG9ydCB0eXBlIEdyb3VwZWRDb2xsZWN0aW9uTWF0Y2hlclJlc3VsdCA9IHtcblx0Zml0dGluZzogSXRlbUVudHJ5W10sXG5cdG5vdEZpdHRpbmc6IEl0ZW1JZFtdLFxuXHRtYXliZTogSXRlbUVudHJ5W11cbn07XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uTWF0Y2hlciB7XG5cdG1hcDoge1xuXHRcdFtjb2xsZWN0aW9uRW50cnlJZDogbnVtYmVyXToge1xuXHRcdFx0Y29sbGVjdGlvbjogQ29sbGVjdGlvbkVudHJ5XG5cdFx0XHRtYXRjaGVzOiBDb2xsZWN0aW9uTWF0Y2hlck1hdGNoZXNcblx0XHR9XG5cdH0gPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlczogQ29sbGVjdGlvbkNhY2hlW10sXG5cdFx0cHJpdmF0ZSB1cGRhdGVJbml0aWFsOiBib29sZWFuLFxuXHRcdHByaXZhdGUgY2FsbE9uQWN0aXZhdGU6IGJvb2xlYW5cblx0KSB7XG5cblx0fVxuXG5cdGV4cGFuZCAoaXRlbUVudHJ5OiBJdGVtRW50cnkpOiB0aGlzIHtcblx0XHRjb25zdCBxdWVyeU1hdGNoZXIgPSB0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0aXRlbUVudHJ5Lml0ZW1UeXBlLFxuXHRcdFx0aXRlbUVudHJ5LmdldEZpZWxkcygpLFxuXHRcdFx0aXRlbUVudHJ5LnBhcmVudFxuXHRcdCk7XG5cblx0XHRyZXR1cm4gdGhpcy5fZXhwYW5kKFxuXHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5ID0+IHF1ZXJ5TWF0Y2hlci5tYXRjaFF1ZXJ5KGNvbGxlY3Rpb25FbnRyeS5xdWVyeS5vYmplY3QpXG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgX2V4cGFuZCAoXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnksXG5cdFx0bWF0Y2hGdW5jdGlvbjogKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiBib29sZWFuIHwgJ21heWJlJ1xuXHQpOiB0aGlzIHtcblx0XHRjb25zdCBtYXAgPSB0aGlzLm1hcDtcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uQ2FjaGUgb2YgdGhpcy5jb2xsZWN0aW9uQ2FjaGVzKSB7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cmllcyA9IGNvbGxlY3Rpb25DYWNoZS5nZXRCeUl0ZW1UeXBlKGl0ZW1FbnRyeS5pdGVtVHlwZSk7XG5cblx0XHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIGNvbGxlY3Rpb25FbnRyaWVzKSB7XG5cdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeUlkID0gY29sbGVjdGlvbkVudHJ5LmlkO1xuXHRcdFx0XHRsZXQgbWF0Y2hlcztcblxuXHRcdFx0XHRpZiAobWFwW2NvbGxlY3Rpb25FbnRyeUlkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdG1hcFtjb2xsZWN0aW9uRW50cnlJZF0gPSB7Y29sbGVjdGlvbjogY29sbGVjdGlvbkVudHJ5LCBtYXRjaGVzOiB7fX07XG5cblx0XHRcdFx0bWF0Y2hlcyA9IG1hcFtjb2xsZWN0aW9uRW50cnlJZF0ubWF0Y2hlcztcblxuXHRcdFx0XHRpZiAobWF0Y2hlc1tpdGVtSWRdICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0bWF0Y2hlc1tpdGVtSWRdID0ge2l0ZW06IGl0ZW1FbnRyeSwgaXNNYXRjaDogbWF0Y2hGdW5jdGlvbihjb2xsZWN0aW9uRW50cnkpfTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGdldENvbGxlY3Rpb25zV2l0aEZpdHRpbmdJdGVtcyAoKTogQ29sbGVjdGlvbkVudHJ5W10ge1xuXHRcdGNvbnN0IHJlc3VsdDogQ29sbGVjdGlvbkVudHJ5W10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIHRoaXMubWFwKSB7XG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IHRoaXMubWFwW2NvbGxlY3Rpb25JZF07XG5cblx0XHRcdGlmICh0aGlzLmhhc0ZpdHRpbmdJdGVtcyhtYXBFbnRyeS5tYXRjaGVzKSlcblx0XHRcdFx0cmVzdWx0LnB1c2gobWFwRW50cnkuY29sbGVjdGlvbik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGFkZFRvQ29sbGVjdGlvbnM8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZT4gKHJlc3VsdFJlc291cmNlOiBVKTogVVsnaXRlbXMnXTtcblx0YWRkVG9Db2xsZWN0aW9ucyAocmVzdWx0UmVzb3VyY2U/OiBudWxsKTogbnVsbDtcblx0YWRkVG9Db2xsZWN0aW9uczxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPiAocmVzdWx0UmVzb3VyY2U/OiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsKTogVVsnaXRlbXMnXSB8IG51bGw7XG5cdGFkZFRvQ29sbGVjdGlvbnM8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZT4gKHJlc3VsdFJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsID0gbnVsbCk6IFVbJ2l0ZW1zJ10gfCBudWxsIHtcblx0XHRsZXQgcmVzdWx0OiBhbnkgPSBudWxsO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gdGhpcy5tYXApIHtcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gdGhpcy5tYXBbY29sbGVjdGlvbklkXTtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IG1hcEVudHJ5LmNvbGxlY3Rpb247XG5cdFx0XHRjb25zdCBncm91cGVkSXRlbUVudHJpZXMgPSB0aGlzLmdyb3VwSXRlbUVudHJpZXMobWFwRW50cnkubWF0Y2hlcyk7XG5cdFx0XHRjb25zdCBmaXR0aW5nSXRlbUVudHJpZXMgPSBncm91cGVkSXRlbUVudHJpZXMuZml0dGluZztcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0RlZmVycmVkKCkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAocmVzdWx0UmVzb3VyY2UgIT09IG51bGwgJiYgY29sbGVjdGlvbkVudHJ5ID09PSByZXN1bHRSZXNvdXJjZS5lbnRyeSkge1xuXHRcdFx0XHRyZXN1bHQgPSBjb2xsZWN0aW9uRW50cnkuYWRkSXRlbXMoXG5cdFx0XHRcdFx0Zml0dGluZ0l0ZW1FbnRyaWVzLFxuXHRcdFx0XHRcdHJlc3VsdFJlc291cmNlLFxuXHRcdFx0XHRcdHRoaXMudXBkYXRlSW5pdGlhbCxcblx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdHRoaXMuY2FsbE9uQWN0aXZhdGVcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5hZGRJdGVtcyhcblx0XHRcdFx0XHRmaXR0aW5nSXRlbUVudHJpZXMsXG5cdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHR0aGlzLnVwZGF0ZUluaXRpYWwsXG5cdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHR0aGlzLmNhbGxPbkFjdGl2YXRlXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLnVwZGF0ZUluaXRpYWwgJiYgZ3JvdXBlZEl0ZW1FbnRyaWVzLm1heWJlLmxlbmd0aCA+IDApXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5leHRlbmQoaWRlbnRpdHksIG51bGwsIHRydWUsIHRoaXMudXBkYXRlSW5pdGlhbCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHJlbW92ZUZyb21Db2xsZWN0aW9uczxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPiAocmVzdWx0UmVzb3VyY2U6IFUpOiBVWydpdGVtcyddO1xuXHRyZW1vdmVGcm9tQ29sbGVjdGlvbnMgKHJlc3VsdFJlc291cmNlPzogbnVsbCk6IG51bGw7XG5cdHJlbW92ZUZyb21Db2xsZWN0aW9uczxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPiAocmVzdWx0UmVzb3VyY2U/OiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsKTogVVsnaXRlbXMnXSB8IG51bGw7XG5cdHJlbW92ZUZyb21Db2xsZWN0aW9uczxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPiAocmVzdWx0UmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSB8IG51bGwgPSBudWxsKTogVVsnaXRlbXMnXSB8IG51bGwge1xuXHRcdGxldCByZXN1bHQ6IEl0ZW1SZXNvdXJjZVtdIHwgbnVsbCA9IG51bGw7XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiB0aGlzLm1hcCkge1xuXHRcdFx0Y29uc3QgbWFwRW50cnkgPSB0aGlzLm1hcFtjb2xsZWN0aW9uSWRdO1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gbWFwRW50cnkuY29sbGVjdGlvbjtcblx0XHRcdGNvbnN0IGZpdHRpbmdJdGVtSWRzID0gdGhpcy5ncm91cEl0ZW1JZHMobWFwRW50cnkubWF0Y2hlcykuZml0dGluZztcblxuXHRcdFx0aWYgKHJlc3VsdFJlc291cmNlID09PSBudWxsIHx8IGNvbGxlY3Rpb25FbnRyeSAhPT0gcmVzdWx0UmVzb3VyY2UuZW50cnkpXG5cdFx0XHRcdHJlc3VsdCA9IGNvbGxlY3Rpb25FbnRyeS5yZW1vdmVJdGVtcyhmaXR0aW5nSXRlbUlkcywgcmVzdWx0UmVzb3VyY2UsIHRoaXMudXBkYXRlSW5pdGlhbCk7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5yZW1vdmVJdGVtcyhmaXR0aW5nSXRlbUlkcywgbnVsbCwgdGhpcy51cGRhdGVJbml0aWFsKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cmVtb3ZlRnJvbUFuZEFkZFRvQ29sbGVjdGlvbnMgKCk6IHZvaWQge1xuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIHRoaXMubWFwKSB7XG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IHRoaXMubWFwW2NvbGxlY3Rpb25JZF07XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBtYXBFbnRyeS5jb2xsZWN0aW9uO1xuXHRcdFx0Y29uc3QgZ3JvdXBlZEl0ZW1FbnRyaWVzID0gdGhpcy5ncm91cEl0ZW1FbnRyaWVzKG1hcEVudHJ5Lm1hdGNoZXMpO1xuXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkucmVtb3ZlSXRlbXMoZ3JvdXBlZEl0ZW1FbnRyaWVzLm5vdEZpdHRpbmcsIG51bGwsIHRoaXMudXBkYXRlSW5pdGlhbCk7XG5cblx0XHRcdC8vIGRvZXNuJ3QgZG8gYW55dGhpbmcgd2l0aCBpbml0aWFsXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuYWRkSXRlbXMoZ3JvdXBlZEl0ZW1FbnRyaWVzLmZpdHRpbmcsIG51bGwsIHRoaXMudXBkYXRlSW5pdGlhbCk7XG5cblx0XHRcdGlmIChncm91cGVkSXRlbUVudHJpZXMubWF5YmUubGVuZ3RoID4gMClcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LmV4dGVuZChpZGVudGl0eSwgbnVsbCwgdHJ1ZSwgdGhpcy51cGRhdGVJbml0aWFsKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGdyb3VwSXRlbUVudHJpZXMgKG1hdGNoZXM6IENvbGxlY3Rpb25NYXRjaGVyTWF0Y2hlcyk6IEdyb3VwZWRDb2xsZWN0aW9uTWF0Y2hlclJlc3VsdCB7XG5cdFx0Y29uc3QgZml0dGluZzogSXRlbUVudHJ5W10gPSBbXTtcblx0XHRjb25zdCBub3RGaXR0aW5nOiBJdGVtSWRbXSA9IFtdO1xuXHRcdGNvbnN0IG1heWJlOiBJdGVtRW50cnlbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gbWF0Y2hlcykge1xuXHRcdFx0Y29uc3QgbWF0Y2ggPSBtYXRjaGVzW2l0ZW1JZF07XG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSBtYXRjaC5pdGVtO1xuXHRcdFx0Y29uc3QgaXNNYXRjaCA9IG1hdGNoLmlzTWF0Y2g7XG5cblx0XHRcdGlmIChpc01hdGNoID09PSB0cnVlKVxuXHRcdFx0XHRmaXR0aW5nLnB1c2goaXRlbUVudHJ5KTtcblx0XHRcdGVsc2UgaWYgKGlzTWF0Y2ggPT09IGZhbHNlKVxuXHRcdFx0XHRub3RGaXR0aW5nLnB1c2goaXRlbUVudHJ5Lml0ZW1JZCk7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdG1heWJlLnB1c2goaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4ge2ZpdHRpbmc6IGZpdHRpbmcsIG5vdEZpdHRpbmc6IG5vdEZpdHRpbmcsIG1heWJlOiBtYXliZX07XG5cdH1cblxuXHRwcml2YXRlIGdyb3VwSXRlbUlkcyAobWF0Y2hlczogQ29sbGVjdGlvbk1hdGNoZXJNYXRjaGVzKSB7XG5cdFx0Ly8gYWxzbyBpbmNsdWRlcyAnbWF5YmUnO1xuXHRcdGNvbnN0IGZpdHRpbmc6IEl0ZW1JZFtdID0gW107XG5cdFx0Y29uc3Qgbm90Rml0dGluZzogSXRlbUlkW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIG1hdGNoZXMpIHtcblx0XHRcdGNvbnN0IG1hdGNoID0gbWF0Y2hlc1tpdGVtSWRdO1xuXG5cdFx0XHQobWF0Y2guaXNNYXRjaCA9PT0gZmFsc2UgPyBub3RGaXR0aW5nIDogZml0dGluZykucHVzaChtYXRjaC5pdGVtLml0ZW1JZCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtmaXR0aW5nOiBmaXR0aW5nLCBub3RGaXR0aW5nOiBub3RGaXR0aW5nfTtcblx0fVxuXG5cdHByaXZhdGUgaGFzRml0dGluZ0l0ZW1zIChtYXRjaGVzOiBDb2xsZWN0aW9uTWF0Y2hlck1hdGNoZXMpIHtcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBtYXRjaGVzKSB7XG5cdFx0XHRpZiAobWF0Y2hlc1tpdGVtSWRdLmlzTWF0Y2ggPT09IHRydWUpXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvblJlc291cmNlT3B0aW9ucywgQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IEl0ZW1JZCB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2Uge1xuXHRwcm9jZXNzT3B0aW9ucyAob3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZSk6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnMge1xuXHRcdHJldHVybiBuZXcgQ29sbGVjdGlvblJlc291cmNlT3B0aW9ucyhvcHRpb25zKTtcblx0fVxuXG5cdGdldElkQXJyYXkgKGl0ZW1SZXNvdXJjZXM6IEl0ZW1SZXNvdXJjZVtdKTogSXRlbUlkW10ge1xuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUlkW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpXG5cdFx0XHRyZXN1bHQucHVzaChpdGVtUmVzb3VyY2UuZW50cnkuaXRlbUlkKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEFwaVJlcXVlc3RDb2x1bW4sIEFwaVJlcXVlc3RDb2x1bW5zLCBJdGVtVHlwZSwgUmVzcG9uc2VDb2x1bW4sIFJlc3BvbnNlQ29sdW1uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uQ2FjaGUge1xuXHRjYWNoZTogUmVzcG9uc2VDb2x1bW5NYXAgPSB7fTtcblx0YWxsQ29sdW1uczoge1tpdGVtVHlwZTogc3RyaW5nXTogYm9vbGVhbn0gPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXG5cdCkge1xuXHR9XG5cblx0c2V0Q29sdW1uIChpdGVtVHlwZTogSXRlbVR5cGUsIHJlc3BvbnNlQ29sdW1uOiBSZXNwb25zZUNvbHVtbik6IFJlc3BvbnNlQ29sdW1uIHtcblx0XHRjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGU7XG5cblx0XHRpZiAoY2FjaGVbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRjYWNoZVtpdGVtVHlwZV0gPSB7fTtcblxuXHRcdGNvbnN0IGVudHJ5ID0gY2FjaGVbaXRlbVR5cGVdO1xuXHRcdGNvbnN0IGNvbHVtbklkID0gcmVzcG9uc2VDb2x1bW4uaWQ7XG5cblx0XHRpZiAoZW50cnlbY29sdW1uSWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRlbnRyeVtjb2x1bW5JZF0gPSByZXNwb25zZUNvbHVtbjtcblxuXHRcdHJldHVybiBlbnRyeVtjb2x1bW5JZF07XG5cdH1cblxuXHRzZXRDb2x1bW5zIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRcdHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXBcblx0KTogUmVzcG9uc2VDb2x1bW5NYXAge1xuXHRcdGNvbnN0IHJlc3VsdDogUmVzcG9uc2VDb2x1bW5NYXAgID0ge307XG5cblx0XHRmb3IgKGNvbnN0IHJlc3BvbnNlVHlwZSBpbiByZXNwb25zZUNvbHVtbnMpIHtcblx0XHRcdGNvbnN0IGNvbHVtbnMgPSByZXNwb25zZUNvbHVtbnNbcmVzcG9uc2VUeXBlXTtcblxuXHRcdFx0cmVzdWx0W3Jlc3BvbnNlVHlwZV0gPSB7fTtcblxuXHRcdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiBjb2x1bW5zKVxuXHRcdFx0XHRyZXN1bHRbcmVzcG9uc2VUeXBlXVtjb2x1bW5JZF0gPSB0aGlzLnNldENvbHVtbihyZXNwb25zZVR5cGUsIGNvbHVtbnNbY29sdW1uSWRdKTtcblx0XHR9XG5cblx0XHRpZiAocmVxdWVzdENvbHVtbnMgPT09IHRydWUpXG5cdFx0XHR0aGlzLmFsbENvbHVtbnNbaXRlbVR5cGVdID0gdHJ1ZTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRyZXRyaWV2ZSAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1uc1xuXHQpOiB7Y2FjaGVkOiBSZXNwb25zZUNvbHVtbk1hcCwgbWlzc2luZzogQXBpUmVxdWVzdENvbHVtbnN9IHtcblx0XHRpZiAocmVxdWVzdENvbHVtbnMgPT09IHRydWUpIHtcblx0XHRcdGlmICh0aGlzLmNvbnRhaW5zQWxsKGl0ZW1UeXBlKSlcblx0XHRcdFx0cmV0dXJuIHtjYWNoZWQ6IHRoaXMuZ2V0Q29sdW1ucyhpdGVtVHlwZSksIG1pc3Npbmc6IFtdfTtcblxuXHRcdFx0cmV0dXJuIHtjYWNoZWQ6IHt9LCBtaXNzaW5nOiB0cnVlfTtcblx0XHR9XG5cblx0XHRjb25zdCByZXNwb25zZUFjY3VtdWxhdG9yID0ge307XG5cdFx0Y29uc3QgcmVxdWVzdEFjY3VtdWxhdG9yOiBSZXNwb25zZUNvbHVtbltdID0gW107XG5cblx0XHR0aGlzLnJldHJpZXZlQ29sdW1ucyhpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlcXVlc3RBY2N1bXVsYXRvciwgcmVzcG9uc2VBY2N1bXVsYXRvcik7XG5cblx0XHRyZXR1cm4ge2NhY2hlZDogcmVzcG9uc2VBY2N1bXVsYXRvciwgbWlzc2luZzogcmVxdWVzdEFjY3VtdWxhdG9yfTtcblx0fVxuXG5cdGNvbnRhaW5zQWxsIChpdGVtVHlwZTogSXRlbVR5cGUpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5hbGxDb2x1bW5zW2l0ZW1UeXBlXSA9PT0gdHJ1ZTtcblx0fVxuXG5cdGdldENvbHVtbnMgKGl0ZW1UeXBlOiBJdGVtVHlwZSk6IFJlc3BvbnNlQ29sdW1uTWFwIHtcblx0XHRjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGU7XG5cblx0XHRyZXR1cm4ge1tpdGVtVHlwZV06IGNhY2hlW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkID8gW10gOiBjYWNoZVtpdGVtVHlwZV19O1xuXHR9XG5cblx0cHJpdmF0ZSByZXRyaWV2ZUNvbHVtbnMgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbltdLFxuXHRcdHJlcXVlc3RBY2N1bXVsYXRvcjogQXBpUmVxdWVzdENvbHVtbltdLFxuXHRcdHJlc3BvbnNlQWNjdW11bGF0b3I6IFJlc3BvbnNlQ29sdW1uTWFwXG5cdCk6IHZvaWQge1xuXHRcdC8vIGFsd2F5cyByZXRyaWV2ZSB0aGUgaWQgY29sdW1uXG5cdFx0dGhpcy5yZXRyaWV2ZUNvbHVtbihpdGVtVHlwZSwgJ2lkJywgcmVxdWVzdEFjY3VtdWxhdG9yLCByZXNwb25zZUFjY3VtdWxhdG9yKTtcblxuXHRcdGZvciAoY29uc3QgcmVxdWVzdENvbHVtbiBvZiByZXF1ZXN0Q29sdW1ucylcblx0XHRcdHRoaXMucmV0cmlldmVDb2x1bW4oaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW4sIHJlcXVlc3RBY2N1bXVsYXRvciwgcmVzcG9uc2VBY2N1bXVsYXRvcik7XG5cdH1cblxuXHRwcml2YXRlIHJldHJpZXZlQ29sdW1uIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cmVxdWVzdENvbHVtbjogQXBpUmVxdWVzdENvbHVtbixcblx0XHRyZXF1ZXN0QWNjdW11bGF0b3I6IFJlc3BvbnNlQ29sdW1uW10sXG5cdFx0cmVzcG9uc2VBY2N1bXVsYXRvcjogUmVzcG9uc2VDb2x1bW5NYXBcblx0KTogdm9pZCB7XG5cdFx0Y29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5VdGlsLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcblx0XHRjb25zdCByZXNwb25zZUNvbHVtbiA9IHRoaXMuZ2V0Q29sdW1uKGl0ZW1UeXBlLCBjb2x1bW4uaWQpO1xuXG5cdFx0aWYgKHJlc3BvbnNlQ29sdW1uID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJlcXVlc3RBY2N1bXVsYXRvci5wdXNoKHJlcXVlc3RDb2x1bW4pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChyZXNwb25zZUFjY3VtdWxhdG9yW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmVzcG9uc2VBY2N1bXVsYXRvcltpdGVtVHlwZV0gPSB7fTtcblxuXHRcdHJlc3BvbnNlQWNjdW11bGF0b3JbaXRlbVR5cGVdW2NvbHVtbi5pZF0gPSByZXNwb25zZUNvbHVtbjtcblxuXHRcdGlmIChjb2x1bW4uY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0Y29uc3QgbWlzc2luZ0Rlcml2ZWQ6IFJlc3BvbnNlQ29sdW1uW10gPSBbXTtcblxuXHRcdHRoaXMucmV0cmlldmVDb2x1bW5zKHJlc3BvbnNlQ29sdW1uLml0ZW1UeXBlLCBjb2x1bW4uY2hpbGRyZW4sIG1pc3NpbmdEZXJpdmVkLCByZXNwb25zZUFjY3VtdWxhdG9yKTtcblxuXHRcdGlmIChtaXNzaW5nRGVyaXZlZC5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm47XG5cblx0XHRyZXF1ZXN0QWNjdW11bGF0b3IucHVzaCh7W2NvbHVtbi5pZF06IG1pc3NpbmdEZXJpdmVkfSk7XG5cdH1cblxuXHRwcml2YXRlIGdldENvbHVtbiAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBjb2x1bW5JZDogc3RyaW5nKTogUmVzcG9uc2VDb2x1bW4gfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZVtpdGVtVHlwZV07XG5cblx0XHRpZiAoY2FjaGUgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybjtcblxuXHRcdHJldHVybiBjYWNoZVtjb2x1bW5JZF07XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtbkluZm8sIENvbHVtblNldCB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQ29sdW1uSW5mb0ZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHtcblx0QXBpUmVxdWVzdENvbHVtbixcblx0QXBpUmVxdWVzdENvbHVtbnMsXG5cdENvbHVtbkV4cGFuc2lvblJlc3VsdCxcblx0SXRlbVR5cGUsXG5cdFJlc3BvbnNlQ29sdW1uTWFwLFxuXHRSb290Q29sdW1uTWFwXG59IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgZ2V0Rmlyc3RQcm9wZXJ0eSB9IGZyb20gJy4vVXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5FeHBhbnNpb24ge1xuXHRleHBhbnNpb25NYXA6IHtbY29sdW1uU2V0SWQ6IHN0cmluZ106IENvbHVtbkV4cGFuc2lvblJlc3VsdCB8IG51bGx9ID0ge307XG5cdGV4cGFuc2lvbk1hcFNpemU6IG51bWJlciA9IDA7XG5cdHJlcXVlc3RDb2x1bW5zVHJ1ZTogYm9vbGVhbjtcblx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5bXTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2x1bW5JbmZvRmFjdG9yeTogQ29sdW1uSW5mb0ZhY3RvcnksXG5cdFx0cHVibGljIGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMsXG5cdFx0cHVibGljIHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXBcblx0KSB7XG5cdFx0aWYgKHJlcXVlc3RDb2x1bW5zID09PSB0cnVlKSB7XG5cdFx0XHQvLyByZXF1ZXN0Q29sdW1ucyBzaG91bGQgYWx3YXlzIGJlIGFuIGFycmF5LCB3aGVuIGl0IGlzIHRydWUgZGVyaXZlZCBjb2x1bW4gaW5mb3JtYXRpb24gd2lsbCBiZSBsb3N0XG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSA9IHRydWU7XG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zID0gW107XG5cblx0XHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gcmVzcG9uc2VDb2x1bW5zW2l0ZW1UeXBlXSlcblx0XHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1ucy5wdXNoKGNvbHVtbklkKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUgPSBmYWxzZTtcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbnMgPSByZXF1ZXN0Q29sdW1ucztcblx0XHR9XG5cdH1cblxuXHRydW4gKGNvbHVtblNldDogQ29sdW1uU2V0KTogQ29sdW1uRXhwYW5zaW9uUmVzdWx0IHwgbnVsbCB7XG5cdFx0Y29uc3QgZXhwYW5zaW9uTWFwID0gdGhpcy5leHBhbnNpb25NYXA7XG5cdFx0Y29uc3QgY29sdW1uU2V0SWQgPSBjb2x1bW5TZXQuaWQ7XG5cblx0XHRpZiAoZXhwYW5zaW9uTWFwW2NvbHVtblNldElkXSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIGV4cGFuc2lvbk1hcFtjb2x1bW5TZXRJZF07XG5cblx0XHR0aGlzLmV4cGFuc2lvbk1hcFNpemUrKztcblxuXHRcdHJldHVybiBleHBhbnNpb25NYXBbY29sdW1uU2V0SWRdID0gY29sdW1uU2V0LmlzU3VwZXJzZXRPZih0aGlzLnJlcXVlc3RDb2x1bW5zKSA/XG5cdFx0XHRudWxsIDpcblx0XHRcdGNvbHVtblNldC5leHBhbmQodGhpcy5yZXF1ZXN0Q29sdW1ucywgdGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUsIHRoaXMucmVzcG9uc2VDb2x1bW5zKTtcblx0fVxuXG5cdGFnZ3JlZ2F0ZVJvb3RDb2x1bW5zICgpOiBDb2x1bW5JbmZvW10ge1xuXHRcdGNvbnN0IGV4cGFuc2lvbk1hcCA9IHRoaXMuZXhwYW5zaW9uTWFwO1xuXG5cdFx0aWYgKHRoaXMuZXhwYW5zaW9uTWFwU2l6ZSA9PT0gMSkge1xuXHRcdFx0Y29uc3QgZXhwYW5zaW9uUmVzdWx0ID0gZXhwYW5zaW9uTWFwW2dldEZpcnN0UHJvcGVydHkoZXhwYW5zaW9uTWFwKSBhcyBzdHJpbmddO1xuXG5cdFx0XHRyZXR1cm4gZXhwYW5zaW9uUmVzdWx0ICE9PSBudWxsID8gZXhwYW5zaW9uUmVzdWx0LmRpZmZlcmVuY2Uucm9vdCA6IFtdO1xuXHRcdH1cblxuXHRcdGNvbnN0IHJvb3RDb2x1bW5NYXA6IFJvb3RDb2x1bW5NYXAgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uU2V0SWQgaW4gZXhwYW5zaW9uTWFwKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSBleHBhbnNpb25NYXBbY29sdW1uU2V0SWRdO1xuXG5cdFx0XHRpZiAoY29sdW1uRXhwYW5zaW9uID09PSBudWxsKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0dGhpcy5leHBhbmRSb290Q29sdW1uTWFwKGNvbHVtbkV4cGFuc2lvbi5kaWZmZXJlbmNlLnJvb3QsIHJvb3RDb2x1bW5NYXApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmNvbHVtbkluZm9GYWN0b3J5LmNvbnN0cnVjdEZyb21Sb290TWFwKHJvb3RDb2x1bW5NYXApO1xuXHR9XG5cblx0cHJpdmF0ZSBleHBhbmRSb290Q29sdW1uTWFwIChjb2x1bW5zOiBDb2x1bW5JbmZvW10sIGRlc3RpbmF0aW9uOiBSb290Q29sdW1uTWFwKSB7XG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XG5cblx0XHRcdGlmIChkZXN0aW5hdGlvbltjb2x1bW5JZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0ZGVzdGluYXRpb25bY29sdW1uSWRdID0ge2FwaUNvbHVtbjogY29sdW1uLmFwaUNvbHVtbiwgY2hpbGRyZW46IHt9fTtcblxuXHRcdFx0dGhpcy5leHBhbmRSb290Q29sdW1uTWFwKGNvbHVtbi5jaGlsZHJlbiwgZGVzdGluYXRpb25bY29sdW1uSWRdLmNoaWxkcmVuKTtcblx0XHR9XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtbkNhY2hlLCBDb2x1bW5VdGlsIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSwgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlTGlicmFyeUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHtcblx0QXBpUmVxdWVzdENvbHVtbnMsXG5cdEl0ZW1UeXBlLFxuXHRQcm9taXNlSW50ZXJmYWNlLFxuXHRSZXNwb25zZUNvbHVtbixcblx0UmVzcG9uc2VDb2x1bW5NYXBcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uSGFuZGxlciB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgY2FjaGU6IENvbHVtbkNhY2hlLFxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxuXHQpIHtcblx0fVxuXG5cdHNldENvbHVtbiAoaXRlbVR5cGU6IEl0ZW1UeXBlLCByZXNwb25zZUNvbHVtbjogUmVzcG9uc2VDb2x1bW4pOiBSZXNwb25zZUNvbHVtbiB7XG5cdFx0cmV0dXJuIHRoaXMuY2FjaGUuc2V0Q29sdW1uKGl0ZW1UeXBlLCByZXNwb25zZUNvbHVtbik7XG5cdH1cblxuXHRzZXRDb2x1bW5zIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRcdHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXBcblx0KTogUmVzcG9uc2VDb2x1bW5NYXAge1xuXHRcdHJldHVybiB0aGlzLmNhY2hlLnNldENvbHVtbnMoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xuXHR9XG5cblx0ZmV0Y2hJdGVtVHlwZVRyYW5zbGF0aW9ucyAoaXRlbVR5cGVzOiBJdGVtVHlwZVtdKTogUHJvbWlzZUludGVyZmFjZTx7W2l0ZW1UeXBlOiBzdHJpbmddOiBzdHJpbmd9PiB7XG5cdFx0Y29uc3QgcHJvbWlzZXM6IHtbaXRlbVR5cGU6IHN0cmluZ106IFByb21pc2VJbnRlcmZhY2U8UmVzcG9uc2VDb2x1bW5NYXA+fSA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBvZiBpdGVtVHlwZXMpXG5cdFx0XHRwcm9taXNlc1tpdGVtVHlwZV0gPSB0aGlzLmZldGNoKGl0ZW1UeXBlLCBbJ2lkJ10pO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHByb21pc2VzKVxuXHRcdFx0LnRoZW4oXG5cdFx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0XHRjb25zdCByZXN1bHQ6IHtbaXRlbVR5cGU6IHN0cmluZ106IHN0cmluZ30gPSB7fTtcblxuXHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gcmVzcG9uc2UpXG5cdFx0XHRcdFx0XHRyZXN1bHRbaXRlbVR5cGVdID0gcmVzcG9uc2VbaXRlbVR5cGVdW2l0ZW1UeXBlXS5pZC5uYW1lO1xuXG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdFx0fSxcblx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHQpO1xuXHR9XG5cblx0cmVxdWVzdCAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGNvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRcdHBhcmFtcyA9IHtmaWx0ZXI6IGZhbHNlfVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPFJlc3BvbnNlQ29sdW1uTWFwPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UuY29sdW1ucyhpdGVtVHlwZSwge1tpdGVtVHlwZV06IGNvbHVtbnN9LCBwYXJhbXMpLnRoZW4oXG5cdFx0XHRjb2x1bW5SZXNvdXJjZSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNhY2hlLnNldENvbHVtbnMoXG5cdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0Y29sdW1ucyxcblx0XHRcdFx0XHRjb2x1bW5SZXNvdXJjZS5mZXRjaENvbHVtbnNPYmplY3QoKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRmZXRjaCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMsIHBhcmFtcz86IGFueSk6IFByb21pc2VJbnRlcmZhY2U8UmVzcG9uc2VDb2x1bW5NYXA+IHtcblx0XHRjb25zdCBjb2x1bW5SZXNvdXJjZSA9IHRoaXMuY2FjaGUucmV0cmlldmUoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zKTtcblxuXHRcdGlmIChjb2x1bW5SZXNvdXJjZS5taXNzaW5nICE9PSB0cnVlICYmIGNvbHVtblJlc291cmNlLm1pc3NpbmcubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihjb2x1bW5SZXNvdXJjZS5jYWNoZWQpO1xuXG5cdFx0cmV0dXJuIHRoaXMucmVxdWVzdChpdGVtVHlwZSwgY29sdW1uUmVzb3VyY2UubWlzc2luZywgcGFyYW1zKS50aGVuKFxuXHRcdFx0cmVzcG9uc2VDb2x1bW5zID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29sdW1uVXRpbC5tZXJnZVJlc3BvbnNlQ29sdW1ucyhcblx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnMsXG5cdFx0XHRcdFx0Y29sdW1uUmVzb3VyY2UuY2FjaGVkXG5cdFx0XHRcdCkubWVyZ2VkO1xuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxuXHRmZXRjaEFsbCAoaXRlbVR5cGU6IEl0ZW1UeXBlKTogUHJvbWlzZUludGVyZmFjZTxSZXNwb25zZUNvbHVtbk1hcD4ge1xuXHRcdGlmICh0aGlzLmNhY2hlLmNvbnRhaW5zQWxsKGl0ZW1UeXBlKSlcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4odGhpcy5jYWNoZS5nZXRDb2x1bW5zKGl0ZW1UeXBlKSk7XG5cblx0XHRyZXR1cm4gdGhpcy5yZXF1ZXN0KGl0ZW1UeXBlLCB0cnVlKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ09MVU1OX1NFUEVSQVRPUiB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBJdGVtVHlwZSwgUmVzcG9uc2VDb2x1bW4gfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5JbmZvIHtcblx0aWQ6IHN0cmluZztcblx0bGV2ZWw6IG51bWJlcjtcblx0cGF0aDogc3RyaW5nO1xuXHR0YWlsUGF0aDogc3RyaW5nO1xuXHRpdGVtVHlwZTogSXRlbVR5cGUgfCBudWxsID0gbnVsbDtcblx0Y2hpbGRyZW46IENvbHVtbkluZm9bXSA9IFtdO1xuXHRpc0xlYWY6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdGNvbnN0cnVjdG9yIChyZWFkb25seSBhcGlDb2x1bW46IFJlc3BvbnNlQ29sdW1uLCByZWFkb25seSBwYXJlbnQ6IENvbHVtbkluZm8gfCBudWxsID0gbnVsbCkge1xuXHRcdGNvbnN0IGNvbHVtbklkID0gYXBpQ29sdW1uLmlkO1xuXG5cdFx0dGhpcy5pZCA9IGNvbHVtbklkO1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbCkge1xuXHRcdFx0dGhpcy5sZXZlbCA9IDA7XG5cdFx0XHR0aGlzLnBhdGggPSBjb2x1bW5JZDtcblx0XHRcdHRoaXMudGFpbFBhdGggPSAnJztcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5sZXZlbCA9IHBhcmVudC5sZXZlbCArIDE7XG5cdFx0XHR0aGlzLnBhdGggPSBwYXJlbnQucGF0aCArIENPTFVNTl9TRVBFUkFUT1IgKyBjb2x1bW5JZDtcblx0XHRcdHRoaXMudGFpbFBhdGggPSBwYXJlbnQubGV2ZWwgPT09IDAgP1xuXHRcdFx0XHRjb2x1bW5JZCA6XG5cdFx0XHRcdHBhcmVudC50YWlsUGF0aCArIENPTFVNTl9TRVBFUkFUT1IgKyBjb2x1bW5JZDtcblx0XHR9XG5cdH1cblxuXHRzZXRDaGlsZHJlbiAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBjaGlsZHJlbjogQ29sdW1uSW5mb1tdKTogdGhpcyB7XG5cdFx0dGhpcy5pdGVtVHlwZSA9IGl0ZW1UeXBlO1xuXHRcdHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcblx0XHR0aGlzLmlzTGVhZiA9IGZhbHNlO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtbkhhbmRsZXIsIENvbHVtbkluZm8sIENvbHVtblV0aWwsIFJlcXVlc3RDb2x1bW5NZXJnZVJlc3VsdCB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQ29sdW1uSW5mb0ZhY3RvcnksIENvbHVtblNldEZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHtcblx0QXBpUmVxdWVzdENvbHVtbixcblx0QXBpUmVxdWVzdENvbHVtbnMsXG5cdENvbHVtbkV4cGFuc2lvblJlc3VsdCxcblx0SXRlbVR5cGUsXG5cdFJlc3BvbnNlQ29sdW1uTWFwLCBSb290Q29sdW1uTWFwXG59IGZyb20gJy4uL3R5cGVzJztcblxuY29uc3QgZW1wdHlPYmplY3QgPSB7fTtcbmxldCBjdXJyZW50SWQgPSAwO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uU2V0IHtcblx0aWQgPSArK2N1cnJlbnRJZDtcblxuXHRyZXF1ZXN0Q29sdW1uc1RydWU6IGJvb2xlYW47XG5cdHJlc3BvbnNlOiBSZXNwb25zZUNvbHVtbk1hcCA9IGVtcHR5T2JqZWN0O1xuXG5cdGxpbms6IENvbHVtbkluZm8gfCBudWxsID0gbnVsbDtcblx0bWFpbjogQ29sdW1uSW5mb1tdID0gW107XG5cdGRlcml2ZWQ6IENvbHVtbkluZm9bXSA9IFtdO1xuXHRyb290OiBDb2x1bW5JbmZvW10gPSBbXTtcblx0bGVhZjogQ29sdW1uSW5mb1tdID0gW107XG5cdGZvcm1hdHRlZDoge21haW46IENvbHVtbkluZm9bXSwgZGVyaXZlZDogQ29sdW1uSW5mb1tdfSA9IHttYWluOiBbXSwgZGVyaXZlZDogW119O1xuXHRmaWx0ZXJlZDogQ29sdW1uSW5mb1tdID0gW107XG5cdGN1c3RvbTogQ29sdW1uSW5mb1tdID0gW107XG5cdHNlYXJjaGFibGU6IENvbHVtbkluZm9bXSA9IFtdO1xuXHRpdGVtOiBDb2x1bW5JbmZvW10gPSBbXTtcblx0bm90SXRlbTogQ29sdW1uSW5mb1tdID0gW107XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sdW1uSGFuZGxlcjogQ29sdW1uSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWwsXG5cdFx0cHJpdmF0ZSBjb2x1bW5JbmZvRmFjdG9yeTogQ29sdW1uSW5mb0ZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxuXHRcdHB1YmxpYyBpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cHVibGljIHJlcXVlc3Q6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHQpIHtcblx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSA9IHRoaXMucmVxdWVzdCA9PT0gdHJ1ZTtcblx0fVxuXG5cdHRvSlNPTiAoKSB7XG5cdFx0Y29uc3QgcGFyc2VDb2x1bW5zID0gKGNvbHVtbnM6IENvbHVtbkluZm9bXSkgPT4gY29sdW1ucy5tYXAoYyA9PiBjLmlkKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRtYWluOiBwYXJzZUNvbHVtbnModGhpcy5tYWluKSxcblx0XHRcdGRlcml2ZWQ6IHBhcnNlQ29sdW1ucyh0aGlzLmRlcml2ZWQpXG5cdFx0fTtcblx0fVxuXG5cdHJlc29sdmUgKHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXAsIGVuYWJsZUNhY2hpbmcgPSB0cnVlLCBpbmNsdWRlSWRDb2x1bW4gPSB0cnVlKTogdGhpcyB7XG5cdFx0aWYgKHRoaXMucmVxdWVzdENvbHVtbnNUcnVlKVxuXHRcdFx0dGhpcy5wcm9jZXNzUmVzcG9uc2VDb2x1bW5zKHJlc3BvbnNlQ29sdW1ucywgZW5hYmxlQ2FjaGluZyk7XG5cdFx0ZWxzZVxuXHRcdFx0dGhpcy5wcm9jZXNzUmVxdWVzdENvbHVtbnMocmVzcG9uc2VDb2x1bW5zLCBlbmFibGVDYWNoaW5nLCBpbmNsdWRlSWRDb2x1bW4pO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRleHBhbmRSZXF1ZXN0Q29sdW1ucyAoY29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMpOiB2b2lkIHtcblx0XHRjb25zdCBtZXJnZWRSZXF1ZXN0Q29sdW1ucyA9IHRoaXMuY29sdW1uVXRpbC5tZXJnZVJlcXVlc3RDb2x1bW5zKHRoaXMucmVxdWVzdCwgY29sdW1ucykubWVyZ2VkO1xuXG5cdFx0dGhpcy5yZXF1ZXN0ID0gbWVyZ2VkUmVxdWVzdENvbHVtbnM7XG5cdFx0dGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUgPSBtZXJnZWRSZXF1ZXN0Q29sdW1ucyA9PT0gdHJ1ZTtcblx0fVxuXG5cdGlzU3VwZXJzZXRPZiAoY29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMpOiBib29sZWFuIHtcblx0XHRpZiAoY29sdW1ucyA9PT0gdHJ1ZSlcblx0XHRcdHJldHVybiB0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZTtcblxuXHRcdGNvbnN0IGNvbHVtblV0aWwgPSB0aGlzLmNvbHVtblV0aWw7XG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSB0aGlzLnJlcXVlc3Q7XG5cblx0XHRpZiAocmVxdWVzdENvbHVtbnMgPT09IHRydWUpXG5cdFx0XHRyZXR1cm4gIWNvbHVtblV0aWwuY29udGFpbnNEZXJpdmVkQ29sdW1ucyhjb2x1bW5zKTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdGlmICghY29sdW1uVXRpbC5jb250YWluc0NvbHVtbihjb2x1bW4sIHJlcXVlc3RDb2x1bW5zKSlcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Ly8gd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgcmVxdWVzdENvbHVtbnMgZXF1YWxzICd0cnVlJ1xuXHRwcml2YXRlIHByb2Nlc3NSZXNwb25zZUNvbHVtbnMgKHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXAsIGVuYWJsZUNhY2hpbmc6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IHRoaXMuaXRlbVR5cGU7XG5cblx0XHR0aGlzLnJlcXVlc3QgPSBbXTtcblx0XHR0aGlzLnJlc3BvbnNlID0gZW5hYmxlQ2FjaGluZyA/XG5cdFx0XHR0aGlzLmNvbHVtbkhhbmRsZXIuc2V0Q29sdW1ucyh0aGlzLml0ZW1UeXBlLCB0cnVlLCByZXNwb25zZUNvbHVtbnMpIDpcblx0XHRcdHJlc3BvbnNlQ29sdW1ucztcblxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gcmVzcG9uc2VDb2x1bW5zW2l0ZW1UeXBlXSkge1xuXHRcdFx0dGhpcy5ncm91cENvbHVtbkluZm8odGhpcy5jb2x1bW5JbmZvRmFjdG9yeS5jb25zdHJ1Y3QocmVzcG9uc2VDb2x1bW5zW2l0ZW1UeXBlXVtjb2x1bW5JZF0sIG51bGwpKTtcblx0XHRcdHRoaXMucmVxdWVzdC5wdXNoKGNvbHVtbklkKTtcblx0XHR9XG5cdH1cblxuXHQvLyB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCByZXF1ZXN0Y29sdW1ucyBkb2VzICpub3QqIGVxdWFsICd0cnVlJ1xuXHRwcml2YXRlIHByb2Nlc3NSZXF1ZXN0Q29sdW1ucyAoXG5cdFx0cmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcCxcblx0XHRlbmFibGVDYWNoaW5nOiBib29sZWFuLFxuXHRcdGluY2x1ZGVJZENvbHVtbjogYm9vbGVhblxuXHQpOiB2b2lkIHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IHRoaXMuaXRlbVR5cGU7XG5cdFx0Y29uc3Qgcm9vdENvbHVtbk1hcDogUm9vdENvbHVtbk1hcCA9IHt9O1xuXG5cdFx0dGhpcy5jcmVhdGVSb290Q29sdW1uTWFwKFxuXHRcdFx0dGhpcy5yZXF1ZXN0IGFzIEFwaVJlcXVlc3RDb2x1bW5bXSwgLy8gd2UgY2FuIGFzc3VtZSByZXF1ZXN0Q29sdW1ucyBpcyBhbiBhcnJheSBoZXJlXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdHJlc3BvbnNlQ29sdW1ucyxcblx0XHRcdHJvb3RDb2x1bW5NYXAsXG5cdFx0XHRlbmFibGVDYWNoaW5nXG5cdFx0KTtcblxuXHRcdGlmIChpbmNsdWRlSWRDb2x1bW4pXG5cdFx0XHR0aGlzLmNyZWF0ZVJvb3RDb2x1bW5NYXAoWydpZCddLCBpdGVtVHlwZSwgcmVzcG9uc2VDb2x1bW5zLCByb290Q29sdW1uTWFwLCBlbmFibGVDYWNoaW5nKTtcblxuXHRcdHRoaXMucmVzcG9uc2UgPSB7fTtcblxuXHRcdHRoaXMucHJvY2Vzc0NvbHVtbkluZm8odGhpcy5jb2x1bW5JbmZvRmFjdG9yeS5jb25zdHJ1Y3RGcm9tUm9vdE1hcChyb290Q29sdW1uTWFwKSwgaXRlbVR5cGUpO1xuXHR9XG5cblx0cHJpdmF0ZSBwcm9jZXNzQ29sdW1uSW5mbyAoY29sdW1uSW5mb09iamVjdHM6IENvbHVtbkluZm9bXSwgaXRlbVR5cGU6IEl0ZW1UeXBlKTogdm9pZCB7XG5cdFx0Y29uc3QgcmVzcG9uc2UgPSB0aGlzLnJlc3BvbnNlO1xuXG5cdFx0aWYgKHJlc3BvbnNlW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmVzcG9uc2VbaXRlbVR5cGVdID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbkluZm8gb2YgY29sdW1uSW5mb09iamVjdHMpIHtcblx0XHRcdHJlc3BvbnNlW2l0ZW1UeXBlXVtjb2x1bW5JbmZvLmlkXSA9IGNvbHVtbkluZm8uYXBpQ29sdW1uO1xuXHRcdFx0dGhpcy5ncm91cENvbHVtbkluZm8oY29sdW1uSW5mbyk7XG5cblx0XHRcdGlmICghY29sdW1uSW5mby5pc0xlYWYpXG5cdFx0XHRcdHRoaXMucHJvY2Vzc0NvbHVtbkluZm8oY29sdW1uSW5mby5jaGlsZHJlbiwgY29sdW1uSW5mby5pdGVtVHlwZSEpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgY3JlYXRlUm9vdENvbHVtbk1hcCAoXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5bXSxcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcCxcblx0XHRyb290Q29sdW1uTWFwOiBSb290Q29sdW1uTWFwLFxuXHRcdGVuYWJsZUNhY2hpbmc6IGJvb2xlYW5cblx0KTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCByZXF1ZXN0Q29sdW1uIG9mIHJlcXVlc3RDb2x1bW5zKSB7XG5cdFx0XHRjb25zdCB7aWQ6IGNvbHVtbklkLCBjaGlsZHJlbn0gPSB0aGlzLmNvbHVtblV0aWwucGFyc2VSZXF1ZXN0Q29sdW1uKHJlcXVlc3RDb2x1bW4pO1xuXG5cdFx0XHRsZXQgcmVzcG9uc2VDb2x1bW47XG5cblx0XHRcdGlmIChyZXNwb25zZUNvbHVtbnNbaXRlbVR5cGVdICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdHJlc3BvbnNlQ29sdW1uID0gcmVzcG9uc2VDb2x1bW5zW2l0ZW1UeXBlXVtjb2x1bW5JZF07XG5cblx0XHRcdGlmIChyZXNwb25zZUNvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnNvbGUud2FybignTm8gYXBpIGNvbHVtbiBmb3IgcmVxdWVzdCBjb2x1bW4nLCBjb2x1bW5JZCwgJ2ZvciBpdGVtVHlwZScsIGl0ZW1UeXBlKTtcblxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGVuYWJsZUNhY2hpbmcpXG5cdFx0XHRcdHJlc3BvbnNlQ29sdW1uID0gdGhpcy5jb2x1bW5IYW5kbGVyLnNldENvbHVtbihpdGVtVHlwZSwgcmVzcG9uc2VDb2x1bW4pO1xuXG5cdFx0XHRpZiAocm9vdENvbHVtbk1hcFtjb2x1bW5JZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0cm9vdENvbHVtbk1hcFtjb2x1bW5JZF0gPSB7YXBpQ29sdW1uOiByZXNwb25zZUNvbHVtbiwgY2hpbGRyZW46IHt9fTtcblxuXHRcdFx0aWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdHRoaXMuY3JlYXRlUm9vdENvbHVtbk1hcChcblx0XHRcdFx0Y2hpbGRyZW4sXG5cdFx0XHRcdHJlc3BvbnNlQ29sdW1uLml0ZW1UeXBlLFxuXHRcdFx0XHRyZXNwb25zZUNvbHVtbnMsXG5cdFx0XHRcdHJvb3RDb2x1bW5NYXBbY29sdW1uSWRdLmNoaWxkcmVuLFxuXHRcdFx0XHRlbmFibGVDYWNoaW5nXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZ3JvdXBDb2x1bW5JbmZvIChjb2x1bW5JbmZvOiBDb2x1bW5JbmZvKTogdm9pZCB7XG5cdFx0Y29uc3QgY29sdW1uVXRpbCA9IHRoaXMuY29sdW1uVXRpbDtcblx0XHRjb25zdCByZXNwb25zZUNvbHVtbiA9IGNvbHVtbkluZm8uYXBpQ29sdW1uO1xuXHRcdGNvbnN0IGlzRGVyaXZlZCA9IGNvbHVtbkluZm8ucGFyZW50ICE9PSBudWxsO1xuXG5cdFx0aWYgKGlzRGVyaXZlZClcblx0XHRcdHRoaXMuZGVyaXZlZC5wdXNoKGNvbHVtbkluZm8pO1xuXHRcdGVsc2Uge1xuXHRcdFx0dGhpcy5tYWluLnB1c2goY29sdW1uSW5mbyk7XG5cdFx0XHQvLyB3ZSBjb3VsZCBwb3NzaWJseSBhZGQgZGVyaXZlZCBjb2x1bW5zIHRvICdub3RJdGVtJ1xuXHRcdFx0dGhpc1tjb2x1bW5VdGlsLmlzSXRlbUNvbHVtbihyZXNwb25zZUNvbHVtbikgPyAnaXRlbScgOiAnbm90SXRlbSddLnB1c2goY29sdW1uSW5mbyk7XG5cblx0XHRcdGlmICghY29sdW1uSW5mby5pc0xlYWYpXG5cdFx0XHRcdHRoaXMucm9vdC5wdXNoKGNvbHVtbkluZm8pO1xuXHRcdH1cblxuXHRcdGlmIChjb2x1bW5VdGlsLmlzRm9ybWF0dGVkQ29sdW1uKHJlc3BvbnNlQ29sdW1uKSlcblx0XHRcdHRoaXMuZm9ybWF0dGVkW2lzRGVyaXZlZCA/ICdkZXJpdmVkJyA6ICdtYWluJ10ucHVzaChjb2x1bW5JbmZvKTtcblxuXHRcdGlmIChjb2x1bW5VdGlsLmlzRmlsdGVyZWRDb2x1bW4ocmVzcG9uc2VDb2x1bW4pKVxuXHRcdFx0dGhpcy5maWx0ZXJlZC5wdXNoKGNvbHVtbkluZm8pO1xuXG5cdFx0aWYgKGNvbHVtblV0aWwuaXNTZWFyY2hhYmxlQ29sdW1uKHJlc3BvbnNlQ29sdW1uKSlcblx0XHRcdHRoaXMuc2VhcmNoYWJsZS5wdXNoKGNvbHVtbkluZm8pO1xuXG5cdFx0aWYgKGNvbHVtblV0aWwuaXNDdXN0b21Db2x1bW4ocmVzcG9uc2VDb2x1bW4pKVxuXHRcdFx0dGhpcy5jdXN0b20ucHVzaChjb2x1bW5JbmZvKTtcblxuXHRcdGlmIChyZXNwb25zZUNvbHVtbi50eXBlID09PSAnbGluaycpXG5cdFx0XHR0aGlzLmxpbmsgPSBjb2x1bW5JbmZvO1xuXG5cdFx0aWYgKGNvbHVtbkluZm8uaXNMZWFmKVxuXHRcdFx0dGhpcy5sZWFmLnB1c2goY29sdW1uSW5mbyk7XG5cdH1cblxuXHRwcml2YXRlIGdldE1lcmdlZENvbHVtblNldCAoXG5cdFx0bWVyZ2VkUmVxdWVzdENvbHVtbnM6IFJlcXVlc3RDb2x1bW5NZXJnZVJlc3VsdCxcblx0XHRtZXJnZWRSZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwLFxuXHRcdHJlcXVlc3RDb2x1bW5zVHJ1ZTogYm9vbGVhblxuXHQpOiBDb2x1bW5TZXQge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHR0aGlzLml0ZW1UeXBlLFxuXHRcdFx0bWVyZ2VkUmVxdWVzdENvbHVtbnMubWVyZ2VkLFxuXHRcdFx0bWVyZ2VkUmVzcG9uc2VDb2x1bW5zXG5cdFx0KTtcblxuXHRcdHJlc3VsdC5yZXF1ZXN0Q29sdW1uc1RydWUgPSB0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSB8fCByZXF1ZXN0Q29sdW1uc1RydWU7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0bWVyZ2VSZXF1ZXN0Q29sdW1ucyAocmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zKTogUmVxdWVzdENvbHVtbk1lcmdlUmVzdWx0IHtcblx0XHRyZXR1cm4gdGhpcy5jb2x1bW5VdGlsLm1lcmdlUmVxdWVzdENvbHVtbnModGhpcy5yZXF1ZXN0LCByZXF1ZXN0Q29sdW1ucyk7XG5cdH1cblxuXHRtZXJnZVJlc3BvbnNlQ29sdW1ucyAocmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcCk6IFJlc3BvbnNlQ29sdW1uTWFwIHtcblx0XHRyZXR1cm4gdGhpcy5jb2x1bW5VdGlsLm1lcmdlUmVzcG9uc2VDb2x1bW5zKHRoaXMucmVzcG9uc2UsIHJlc3BvbnNlQ29sdW1ucykubWVyZ2VkO1xuXHR9XG5cblx0bWVyZ2UgKGNvbHVtblNldDogQ29sdW1uU2V0KTogQ29sdW1uU2V0IHtcblx0XHRyZXR1cm4gdGhpcy5nZXRNZXJnZWRDb2x1bW5TZXQoXG5cdFx0XHR0aGlzLm1lcmdlUmVxdWVzdENvbHVtbnMoY29sdW1uU2V0LnJlcXVlc3QpLFxuXHRcdFx0dGhpcy5tZXJnZVJlc3BvbnNlQ29sdW1ucyhjb2x1bW5TZXQucmVzcG9uc2UpLFxuXHRcdFx0Y29sdW1uU2V0LnJlcXVlc3RDb2x1bW5zVHJ1ZVxuXHRcdCk7XG5cdH1cblxuXHRleHBhbmQgKFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyxcblx0XHRyZXF1ZXN0Q29sdW1uc1RydWU6IGJvb2xlYW4sXG5cdFx0cmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcFxuXHQpOiBDb2x1bW5FeHBhbnNpb25SZXN1bHQge1xuXHRcdGNvbnN0IG1lcmdlZFJlcXVlc3RDb2x1bW5zID0gdGhpcy5tZXJnZVJlcXVlc3RDb2x1bW5zKHJlcXVlc3RDb2x1bW5zKTtcblx0XHRjb25zdCBtZXJnZWRSZXNwb25zZUNvbHVtbnMgPSB0aGlzLm1lcmdlUmVzcG9uc2VDb2x1bW5zKHJlc3BvbnNlQ29sdW1ucyk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0bWVyZ2VkOiB0aGlzLmdldE1lcmdlZENvbHVtblNldChtZXJnZWRSZXF1ZXN0Q29sdW1ucywgbWVyZ2VkUmVzcG9uc2VDb2x1bW5zLCByZXF1ZXN0Q29sdW1uc1RydWUpLFxuXHRcdFx0ZGlmZmVyZW5jZTogdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdFx0dGhpcy5pdGVtVHlwZSxcblx0XHRcdFx0bWVyZ2VkUmVxdWVzdENvbHVtbnMuZGlmZmVyZW5jZSxcblx0XHRcdFx0bWVyZ2VkUmVzcG9uc2VDb2x1bW5zLCAvLyB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gbG9vayB1cCB0aGUgcGFyZW50IG9mIGRlcml2ZWQgY29sdW1uc1xuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0ZmFsc2Vcblx0XHRcdClcblx0XHR9O1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5TZXQgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEFwaVJlcXVlc3RDb2x1bW5zIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uU3Vic2V0Q2FjaGUge1xuXHRwcml2YXRlIGNhY2hlOiB7W2NvbHVtblNldElkOiBudW1iZXJdOiBib29sZWFufSA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwdWJsaWMgcmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zXG5cdCkge1xuXG5cdH1cblxuXHRydW4gKGNvbHVtblNldDogQ29sdW1uU2V0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlO1xuXHRcdGNvbnN0IGNvbHVtblNldElkID0gY29sdW1uU2V0LmlkO1xuXG5cdFx0aWYgKGNhY2hlW2NvbHVtblNldElkXSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIGNhY2hlW2NvbHVtblNldElkXTtcblxuXHRcdHJldHVybiBjYWNoZVtjb2x1bW5TZXRJZF0gPSBjb2x1bW5TZXQuaXNTdXBlcnNldE9mKHRoaXMucmVxdWVzdENvbHVtbnMpO1xuXHR9XG59XG4iLCJpbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcblxuaW1wb3J0IHsgQ09MVU1OX1NFUEVSQVRPUiwgUkVOREVSX0FTX1NFUEVSQVRPUiB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0Q29sdW1uLCBBcGlSZXF1ZXN0Q29sdW1ucywgSXRlbVR5cGUsIFJlc3BvbnNlQ29sdW1uLCBSZXNwb25zZUNvbHVtbk1hcCB9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgZXh0ZW5kLCBpc0RlZmluZWQgfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgdHlwZSBSZXF1ZXN0Q29sdW1uTWVyZ2VSZXN1bHQ8XG5cdFQgZXh0ZW5kcyBBcGlSZXF1ZXN0Q29sdW1ucyA9IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRVIGV4dGVuZHMgQXBpUmVxdWVzdENvbHVtbnMgPSBBcGlSZXF1ZXN0Q29sdW1uc1xuPiA9IHttZXJnZWQ6IFQsIGRpZmZlcmVuY2U6IFV9O1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uVXRpbCB7XG5cdGNvbnN0cnVjdG9yICgpIHtcblx0fVxuXG5cdGdldENvbHVtblBhdGggKGNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uW10sIHJlbmRlckFzOiBudWxsIHwgc3RyaW5nKSB7XG5cdFx0bGV0IHNlcGFyYXRvciA9ICcnO1xuXHRcdGxldCByZXN1bHQgPSAnJztcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdHJlc3VsdCArPSBzZXBhcmF0b3IgKyBjb2x1bW4uaWQ7XG5cdFx0XHRzZXBhcmF0b3IgPSBDT0xVTU5fU0VQRVJBVE9SO1xuXHRcdH1cblxuXHRcdGlmIChyZW5kZXJBcyAhPT0gbnVsbClcblx0XHRcdHJlc3VsdCArPSBSRU5ERVJfQVNfU0VQRVJBVE9SICsgcmVuZGVyQXM7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0RGF0ZUZvcm1hdE9wdGlvbnMgKGNvbHVtblR5cGU/OiAnZGF0ZXRpbWUnKSB7XG5cdFx0Y29uc3Qgbm93ID0gbW9tZW50KCk7XG5cblx0XHRjb25zdCBmb3JtYXRzID0ge1xuXHRcdFx0J0otTS1ZJzogbm93LmZvcm1hdCgnREQtTU0tWVlZWScpLFxuXHRcdFx0J0otTSc6IG5vdy5mb3JtYXQoJ0RELU1NJyksXG5cdFx0XHQnaitGK1knOiBub3cuZm9ybWF0KCdEIE1NTSBZWVlZJyksXG5cdFx0XHQnRCtqK0YrWSc6IG5vdy5mb3JtYXQoJ2RkZGQgRCBNTU0gWVlZWScpLFxuXHRcdFx0J0YnOiBub3cuZm9ybWF0KCdNTU0nKSxcblx0XHRcdCdmJzogbm93LmZvcm1hdCgnTU1NTScpLFxuXHRcdFx0J0QnOiBub3cuZm9ybWF0KCdkZGRkJyksXG5cdFx0XHQnZCc6IG5vdy5mb3JtYXQoJ2RkZCcpXG5cdFx0fTtcblxuXHRcdGlmIChjb2x1bW5UeXBlID09PSAnZGF0ZXRpbWUnKVxuXHRcdFx0ZXh0ZW5kKGZvcm1hdHMsIHtcblx0XHRcdFx0J0otTS1ZK0g6aSc6IG5vdy5mb3JtYXQoJ0RELU1NLVlZWVkgSEg6bW0nKSxcblx0XHRcdFx0J0otTStIOmknOiBub3cuZm9ybWF0KCdERC1NTSBISDptbScpLFxuXHRcdFx0XHQnaitGK1krSDppJzogbm93LmZvcm1hdCgnREQgTU1NTSBZIEhIOm1tJyksXG5cdFx0XHRcdCdEK2orRitZK0g6aSc6IG5vdy5mb3JtYXQoJ2RkZGQgREQgTU1NIFkgSEg6bW0nKSxcblx0XHRcdFx0J0g6aSc6IG5vdy5mb3JtYXQoJ0hIOm1tJylcblx0XHRcdH0pO1xuXG5cdFx0cmV0dXJuIGZvcm1hdHM7XG5cdH1cblxuXHRpc1N0cmluZ0NvbHVtbiAoY29sdW1uOiBSZXNwb25zZUNvbHVtbik6IGJvb2xlYW4ge1xuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2VtYWlsJzpcblx0XHRcdGNhc2UgJ3Bob25lJzpcblx0XHRcdGNhc2UgJ3VybCc6XG5cdFx0XHRjYXNlICd0ZXh0Jzpcblx0XHRcdGNhc2UgJ2xvbmd0ZXh0Jzpcblx0XHRcdGNhc2UgJ3RleHRyZXBsYWNlJzpcblx0XHRcdFx0Ly8gY2FzZSAnaHRtbCc6IC8vIFRPRE86IHNvcnQgb24gZmlsdGVyZWQgdmFsdWVcblx0XHRcdFx0Ly8gY2FzZSAnZW51bSc6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlzRmxvYXRDb2x1bW4gKGNvbHVtbjogUmVzcG9uc2VDb2x1bW4pOiBib29sZWFuIHtcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG5cdFx0XHRjYXNlICdkb3VibGUnOiAvLyBmbG9hdGluZyBwb2ludCB0eXBlc1xuXHRcdFx0Y2FzZSAndm9sdW1lJzpcblx0XHRcdGNhc2UgJ3dlaWdodCc6XG5cdFx0XHRjYXNlICdkaXN0YW5jZSc6XG5cdFx0XHRjYXNlICdkaW1lbnNpb24nOlxuXHRcdFx0Y2FzZSAncG93ZXInOlxuXHRcdFx0Y2FzZSAnY3VycmVudCc6XG5cdFx0XHRjYXNlICdwcmljZSc6XG5cdFx0XHRjYXNlICdwZXJjZW50YWdlJzpcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aXNJbnRDb2x1bW4gKGNvbHVtbjogUmVzcG9uc2VDb2x1bW4pOiBib29sZWFuIHtcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG5cdFx0XHRjYXNlICdpbnQnOiAvLyBpbnRlZ2VyIHR5cGVzXG5cdFx0XHRjYXNlICdudW1iZXInOlxuXHRcdFx0Y2FzZSAncXVhbnRpdHknOlxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpc051bWJlckNvbHVtbiAoY29sdW1uOiBSZXNwb25zZUNvbHVtbik6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmlzRmxvYXRDb2x1bW4oY29sdW1uKSB8fCB0aGlzLmlzSW50Q29sdW1uKGNvbHVtbik7XG5cdH1cblxuXHRpc0N1c3RvbUNvbHVtbiAoY29sdW1uOiBSZXNwb25zZUNvbHVtbik6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBjb2x1bW4uZmllbGR0eXBlID09PSAnY3VzdG9tZmllbGQnO1xuXHR9XG5cblx0aXNJdGVtQ29sdW1uIChjb2x1bW46IFJlc3BvbnNlQ29sdW1uLCBpbmNsdWRlSWQgPSB0cnVlKTogYm9vbGVhbiB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnaWQnOlxuXHRcdFx0XHRyZXR1cm4gaW5jbHVkZUlkO1xuXHRcdFx0Y2FzZSAnaXRlbSc6XG5cdFx0XHRjYXNlICdjaGlsZCc6XG5cdFx0XHRjYXNlICdzaWJsaW5nJzpcblx0XHRcdGNhc2UgJ2xpbmsnOlxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpc0RhdGVDb2x1bW4gKGNvbHVtbjogUmVzcG9uc2VDb2x1bW4pOiBib29sZWFuIHtcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aXNSZW5kZXJlZENvbHVtbiAoY29sdW1uOiBSZXNwb25zZUNvbHVtbik6IGJvb2xlYW4ge1xuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpc0ZpbHRlcmVkQ29sdW1uIChjb2x1bW46IFJlc3BvbnNlQ29sdW1uKTogYm9vbGVhbiB7XG5cdFx0Ly8gdWdseSBoYWNrIDotKFxuXHRcdGlmIChjb2x1bW4uaWQgPT09ICdzdGFmZmVsJylcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0aWYgKGNvbHVtbi5nZW5lcmF0b3IgIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAncHJpY2UnOlxuXHRcdFx0Y2FzZSAnYm9vbCc6XG5cdFx0XHRjYXNlICdlbnVtJzpcblx0XHRcdGNhc2UgJ2NvdW50cnknOlxuXHRcdFx0Y2FzZSAndm9sdW1lJzpcblx0XHRcdGNhc2UgJ3dlaWdodCc6XG5cdFx0XHRjYXNlICdkaXN0YW5jZSc6XG5cdFx0XHRjYXNlICdkaW1lbnNpb24nOlxuXHRcdFx0Y2FzZSAncXVhbnRpdHknOlxuXHRcdFx0Y2FzZSAnZW1haWwnOlxuXHRcdFx0Y2FzZSAndXJsJzpcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0Y2FzZSAndGltZSc6XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRjYXNlICdodG1sJzpcblx0XHRcdGNhc2UgJ3RleHRyZXBsYWNlJzpcblx0XHRcdGNhc2UgJ2xvbmd0ZXh0Jzpcblx0XHRcdGNhc2UgJ3BlcmNlbnRhZ2UnOlxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpc0Zvcm1hdHRlZENvbHVtbiAoY29sdW1uOiBSZXNwb25zZUNvbHVtbik6IGJvb2xlYW4ge1xuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0Y2FzZSAndGltZSc6XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRjYXNlICdjb2xvcic6XG5cdFx0XHRjYXNlICdqc29uJzpcblx0XHRcdGNhc2UgJ251bWJlcic6XG5cdFx0XHRjYXNlICdmaWxlc2l6ZSc6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlzU2VsZWN0YWJsZUNvbHVtbiAoY29sdW1uOiBSZXNwb25zZUNvbHVtbik6IGJvb2xlYW4ge1xuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2Jsb2InOlxuXHRcdFx0Y2FzZSAnY29vcmRpbmF0ZSc6XG5cdFx0XHRjYXNlICdmb3JjZXVwZGF0ZSc6XG5cdFx0XHRjYXNlICdpZCc6XG5cdFx0XHRjYXNlICdqc29uJzpcblx0XHRcdGNhc2UgJ29yZGVyJzpcblx0XHRcdGNhc2UgJ3BhcmVudGlkJzpcblx0XHRcdGNhc2UgJ3BhcmVudHR5cGUnOlxuXHRcdFx0Y2FzZSAncGFzc3dvcmQnOlxuXHRcdFx0Y2FzZSAndG9rZW4nOlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRoYXNMb2NhdGlvblByb3BlcnR5IChjb2x1bW46IFJlc3BvbnNlQ29sdW1uLCBsb2NhdGlvbjogbnVtYmVyKTogYm9vbGVhbiB7XG5cdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2Vcblx0XHRyZXR1cm4gKGxvY2F0aW9uICYgY29sdW1uLmxvY2F0aW9uKSAhPT0gMDtcblx0fVxuXG5cdGlzRWRpdGFibGVDb2x1bW4gKGNvbHVtbjogUmVzcG9uc2VDb2x1bW4pOiBib29sZWFuIHtcblx0XHRpZiAoY29sdW1uLnJlYWRPbmx5KVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGlzU2VhcmNoYWJsZUNvbHVtbiAoY29sdW1uOiBSZXNwb25zZUNvbHVtbik6IGJvb2xlYW4ge1xuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2VtYWlsJzpcblx0XHRcdGNhc2UgJ3Bob25lJzpcblx0XHRcdGNhc2UgJ3RleHQnOlxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxuXHRcdFx0Y2FzZSAnaHRtbCc6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGdldERlZmF1bHRXZWlnaHQgKGNvbHVtbjogUmVzcG9uc2VDb2x1bW4pOiBudW1iZXIge1xuXHRcdC8vIFx0XHRcdGNvbnNvbGUubG9nKCdnZXREZWZhdWx0V2VpZ2h0JywgY29sdW1uKTtcblxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2RvdWJsZSc6XG5cdFx0XHRjYXNlICdwcmljZSc6XG5cdFx0XHRjYXNlICdib29sJzpcblx0XHRcdGNhc2UgJ2ludCc6XG5cdFx0XHRjYXNlICdwZXJjZW50YWdlJzpcblx0XHRcdGNhc2UgJ2NvbG9yJzpcblx0XHRcdGNhc2UgJ251bWJlcic6XG5cdFx0XHRjYXNlICdwb3dlcic6XG5cdFx0XHRjYXNlICdjdXJyZW50Jzpcblx0XHRcdFx0cmV0dXJuIDAuNTtcblxuXHRcdFx0Y2FzZSAndXJsJzpcblx0XHRcdGNhc2UgJ2VudW0nOlxuXHRcdFx0Y2FzZSAnZW1haWwnOlxuXHRcdFx0Y2FzZSAndGV4dCc6XG5cdFx0XHRjYXNlICdpdGVtJzpcblx0XHRcdGNhc2UgJ2xpbmsnOlxuXHRcdFx0XHRyZXR1cm4gMS41O1xuXG5cdFx0XHRjYXNlICdsb25ndGV4dCc6XG5cdFx0XHRjYXNlICdodG1sJzpcblx0XHRcdGNhc2UgJ3RleHRyZXBsYWNlJzpcblx0XHRcdFx0cmV0dXJuIDI7XG5cblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0Y2FzZSAndGltZSc6XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0fVxuXHR9XG5cblx0Z2V0Q29tcGFyYXRvcnMgKGNvbHVtbjogUmVzcG9uc2VDb2x1bW4gJiB7dHlwZTogJ2RpbWVuc2lvbicgfCAnd2VpZ2h0JyB8ICdwcmljZSd9KTogWyc9JywgJz4nLCAnPCddO1xuXHRnZXRDb21wYXJhdG9ycyAoY29sdW1uOiBSZXNwb25zZUNvbHVtbiAmIHt0eXBlOiAnZGF0ZScgfCAnZGF0ZXRpbWUnIHwgJ3RpbWUnIHwgJ2R1cmF0aW9uJ30pOiBbJz4nLCAnPCddO1xuXHRnZXRDb21wYXJhdG9ycyAoY29sdW1uOiBSZXNwb25zZUNvbHVtbik6IFsnPScsICchPSddO1xuXHRnZXRDb21wYXJhdG9ycyAoY29sdW1uOiBSZXNwb25zZUNvbHVtbikge1xuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2RpbWVuc2lvbic6XG5cdFx0XHRjYXNlICd3ZWlnaHQnOlxuXHRcdFx0Y2FzZSAncHJpY2UnOlxuXHRcdFx0XHRyZXR1cm4gWyc9JywgJz4nLCAnPCddO1xuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRjYXNlICd0aW1lJzpcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdFx0cmV0dXJuIFsnPicsICc8J107XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gWyc9JywgJyE9J107XG5cdFx0fVxuXHR9XG5cblx0Y29udGFpbnNDb2x1bW4gKHJlcXVlc3RDb2x1bW46IEFwaVJlcXVlc3RDb2x1bW4sIGRlc3RpbmF0aW9uOiBBcGlSZXF1ZXN0Q29sdW1uW10pOiBib29sZWFuIHtcblx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcblx0XHRjb25zdCBjb2x1bW5JbmRleCA9IHRoaXMuZmluZFJlcXVlc3RDb2x1bW4oY29sdW1uLmlkLCBkZXN0aW5hdGlvbik7XG5cblx0XHRpZiAoY29sdW1uSW5kZXggPT09IC0xKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0aWYgKGNvbHVtbi5jaGlsZHJlbi5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRcdGlmICh0eXBlb2YgZGVzdGluYXRpb25bY29sdW1uSW5kZXhdID09PSAnc3RyaW5nJylcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdGZvciAoY29uc3QgY2hpbGRDb2x1bW4gb2YgY29sdW1uLmNoaWxkcmVuKSB7XG5cdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRpZiAoIXRoaXMuY29udGFpbnNDb2x1bW4oY2hpbGRDb2x1bW4sIGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XVtjb2x1bW4uaWRdKSlcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Y29udGFpbnNEZXJpdmVkQ29sdW1ucyAocmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5bXSk6IGJvb2xlYW4ge1xuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIHJlcXVlc3RDb2x1bW5zKSB7XG5cdFx0XHRpZiAodGhpcy5wYXJzZVJlcXVlc3RDb2x1bW4oY29sdW1uKS5jaGlsZHJlbi5sZW5ndGggPiAwKVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXNwb25zZUNvbHVtbnNBdmFpbGFibGUgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbltdLFxuXHRcdHJlc3BvbnNlQ29sdW1uTWFwOiBSZXNwb25zZUNvbHVtbk1hcFxuXHQpOiBib29sZWFuIHtcblx0XHRmb3IgKGNvbnN0IHJlcXVlc3RDb2x1bW4gb2YgcmVxdWVzdENvbHVtbnMpIHtcblx0XHRcdGNvbnN0IHBhcnNlZENvbHVtbiA9IHRoaXMucGFyc2VSZXF1ZXN0Q29sdW1uKHJlcXVlc3RDb2x1bW4pO1xuXHRcdFx0Y29uc3QgY2hpbGRyZW4gPSBwYXJzZWRDb2x1bW4uY2hpbGRyZW47XG5cdFx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSByZXNwb25zZUNvbHVtbk1hcFtpdGVtVHlwZV07XG5cdFx0XHRsZXQgcmVzcG9uc2VDb2x1bW47XG5cblx0XHRcdGlmIChyZXNwb25zZUNvbHVtbnMgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0XHRyZXNwb25zZUNvbHVtbiA9IHJlc3BvbnNlQ29sdW1uc1twYXJzZWRDb2x1bW4uaWRdO1xuXG5cdFx0XHRpZiAocmVzcG9uc2VDb2x1bW4gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdGNoaWxkcmVuLmxlbmd0aCA+IDAgJiZcblx0XHRcdFx0IXRoaXMucmVzcG9uc2VDb2x1bW5zQXZhaWxhYmxlKHJlc3BvbnNlQ29sdW1uLml0ZW1UeXBlLCBjaGlsZHJlbiwgcmVzcG9uc2VDb2x1bW5NYXApXG5cdFx0XHQpXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGNvcHlSZXF1ZXN0Q29sdW1ucyAoY29sdW1uczogdHJ1ZSk6IHRydWU7XG5cdGNvcHlSZXF1ZXN0Q29sdW1ucyAoY29sdW1uczogQXBpUmVxdWVzdENvbHVtbltdKTogQXBpUmVxdWVzdENvbHVtbltdO1xuXHRjb3B5UmVxdWVzdENvbHVtbnMgKGNvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zKTogQXBpUmVxdWVzdENvbHVtbnMge1xuXHRcdGlmIChjb2x1bW5zID09PSB0cnVlKVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cblx0XHRjb25zdCByZXN1bHQ6IEFwaVJlcXVlc3RDb2x1bW5bXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucylcblx0XHRcdHJlc3VsdC5wdXNoKHRoaXMuY29weVJlcXVlc3RDb2x1bW4oY29sdW1uKSk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Y29weVJlcXVlc3RDb2x1bW4gKHJlcXVlc3RDb2x1bW46IEFwaVJlcXVlc3RDb2x1bW4pOiBBcGlSZXF1ZXN0Q29sdW1uIHtcblx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcblxuXHRcdGlmIChjb2x1bW4uY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIGNvbHVtbi5pZDtcblxuXHRcdGNvbnN0IGNoaWxkcmVuOiBBcGlSZXF1ZXN0Q29sdW1uW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgY2hpbGRDb2x1bW4gb2YgY29sdW1uLmNoaWxkcmVuKVxuXHRcdFx0Y2hpbGRyZW4ucHVzaCh0aGlzLmNvcHlSZXF1ZXN0Q29sdW1uKGNoaWxkQ29sdW1uKSk7XG5cblx0XHRyZXR1cm4ge1tjb2x1bW4uaWRdOiBjaGlsZHJlbn07XG5cdH1cblxuXHQvKipcblx0ICogRGlmZmVyZW5jZTogY29sdW1ucyB0aGF0IGFyZSBpbiBzZWNvbmQsIGJ1dCBub3QgaW4gZmlyc3Rcblx0ICogQHBhcmFtIHtBcnJheX0gZmlyc3Rcblx0ICogQHBhcmFtIHtBcnJheX0gc2Vjb25kXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nICdtZXJnZWQnIGFuZCAnZGlmZmVyZW5jZScgcHJvcGVydGllc1xuXHQgKi9cblx0bWVyZ2VSZXF1ZXN0Q29sdW1ucyAoZmlyc3Q6IHRydWUsIHNlY29uZDogQXBpUmVxdWVzdENvbHVtbnMpOiBSZXF1ZXN0Q29sdW1uTWVyZ2VSZXN1bHQ8dHJ1ZSwgW10+O1xuXHRtZXJnZVJlcXVlc3RDb2x1bW5zIChmaXJzdDogQXBpUmVxdWVzdENvbHVtbltdLCBzZWNvbmQ6IHRydWUpOiBSZXF1ZXN0Q29sdW1uTWVyZ2VSZXN1bHQ8dHJ1ZSwgdHJ1ZT47XG5cdG1lcmdlUmVxdWVzdENvbHVtbnMgKGZpcnN0OiBBcGlSZXF1ZXN0Q29sdW1uW10sIHNlY29uZDogQXBpUmVxdWVzdENvbHVtbltdKTpcblx0XHRSZXF1ZXN0Q29sdW1uTWVyZ2VSZXN1bHQ8QXBpUmVxdWVzdENvbHVtbltdLCBBcGlSZXF1ZXN0Q29sdW1uW10+O1xuXHRtZXJnZVJlcXVlc3RDb2x1bW5zIChmaXJzdDogQXBpUmVxdWVzdENvbHVtbnMsIHNlY29uZDogQXBpUmVxdWVzdENvbHVtbnMpOiBSZXF1ZXN0Q29sdW1uTWVyZ2VSZXN1bHQ7XG5cdG1lcmdlUmVxdWVzdENvbHVtbnMgKGZpcnN0OiBBcGlSZXF1ZXN0Q29sdW1ucywgc2Vjb25kOiBBcGlSZXF1ZXN0Q29sdW1ucyk6IFJlcXVlc3RDb2x1bW5NZXJnZVJlc3VsdCB7XG5cdFx0aWYgKGZpcnN0ID09PSB0cnVlKSAvLyA9PT0gb3BlcmF0b3IgbmVlZGVkIGhlcmVcblx0XHRcdHJldHVybiB7bWVyZ2VkOiB0cnVlLCBkaWZmZXJlbmNlOiBbXX07XG5cblx0XHRpZiAoc2Vjb25kID09PSB0cnVlKVxuXHRcdFx0cmV0dXJuIHttZXJnZWQ6IHRydWUsIGRpZmZlcmVuY2U6IHRydWV9O1xuXG5cdFx0Y29uc3QgbWVyZ2VkID0gdGhpcy5jb3B5UmVxdWVzdENvbHVtbnMoZmlyc3QpO1xuXHRcdGNvbnN0IGRpZmZlcmVuY2U6IEFwaVJlcXVlc3RDb2x1bW5bXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2Ygc2Vjb25kKSB7XG5cdFx0XHRjb25zdCBhZGRlZENvbHVtbiA9IHRoaXMubWVyZ2VSZXF1ZXN0Q29sdW1uKGNvbHVtbiwgbWVyZ2VkKTtcblxuXHRcdFx0aWYgKGFkZGVkQ29sdW1uICE9PSBudWxsKVxuXHRcdFx0XHRkaWZmZXJlbmNlLnB1c2goYWRkZWRDb2x1bW4pO1xuXHRcdH1cblxuXHRcdHJldHVybiB7bWVyZ2VkOiBtZXJnZWQsIGRpZmZlcmVuY2U6IGRpZmZlcmVuY2V9O1xuXHR9XG5cblx0bWVyZ2VSZXF1ZXN0Q29sdW1uIChyZXF1ZXN0Q29sdW1uOiBBcGlSZXF1ZXN0Q29sdW1uLCBkZXN0aW5hdGlvbjogQXBpUmVxdWVzdENvbHVtbltdKSB7XG5cdFx0Y29uc3QgY29sdW1uID0gdGhpcy5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XG5cdFx0Y29uc3QgY29sdW1uSW5kZXggPSB0aGlzLmZpbmRSZXF1ZXN0Q29sdW1uKGNvbHVtbi5pZCwgZGVzdGluYXRpb24pO1xuXG5cdFx0aWYgKGNvbHVtbkluZGV4ID09PSAtMSkge1xuXHRcdFx0ZGVzdGluYXRpb24ucHVzaChyZXF1ZXN0Q29sdW1uKTtcblx0XHRcdHJldHVybiByZXF1ZXN0Q29sdW1uO1xuXHRcdH1cblxuXHRcdGlmIChjb2x1bW4uY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHRpZiAodHlwZW9mIGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XSA9PT0gJ3N0cmluZycpIHtcblx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XSA9IHtcblx0XHRcdFx0W2NvbHVtbi5pZF06IFtdXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGNvbnN0IGFkZGVkQ29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMgPSBbXTtcblxuXHRcdGZvciAoY29uc3QgY2hpbGRDb2x1bW4gb2YgY29sdW1uLmNoaWxkcmVuKSB7XG5cdFx0XHRjb25zdCBhZGRlZENvbHVtbiA9IHRoaXMubWVyZ2VSZXF1ZXN0Q29sdW1uKFxuXHRcdFx0XHRjaGlsZENvbHVtbixcblx0XHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5JbmRleF1bY29sdW1uLmlkXVxuXHRcdFx0KTtcblxuXHRcdFx0aWYgKGFkZGVkQ29sdW1uICE9PSBudWxsKVxuXHRcdFx0XHRhZGRlZENvbHVtbnMucHVzaChhZGRlZENvbHVtbik7XG5cdFx0fVxuXG5cdFx0aWYgKGFkZGVkQ29sdW1ucy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdHJldHVybiB7W2NvbHVtbi5pZF06IGFkZGVkQ29sdW1uc307XG5cdH1cblxuXHRnZXRSZXF1ZXN0Q29sdW1uSWQgKHJlcXVlc3RDb2x1bW46IEFwaVJlcXVlc3RDb2x1bW4pOiBzdHJpbmcge1xuXHRcdGlmICh0eXBlb2YgcmVxdWVzdENvbHVtbiA9PT0gJ3N0cmluZycpXG5cdFx0XHRyZXR1cm4gcmVxdWVzdENvbHVtbjtcblxuXHRcdGxldCBjb2x1bW5JZDtcblxuXHRcdGZvciAoY29sdW1uSWQgaW4gcmVxdWVzdENvbHVtbikge31cblxuXHRcdHJldHVybiBjb2x1bW5JZCBhcyBzdHJpbmc7XG5cdH1cblxuXHRwYXJzZVJlcXVlc3RDb2x1bW4gKHJlcXVlc3RDb2x1bW46IEFwaVJlcXVlc3RDb2x1bW4pOiB7aWQ6IHN0cmluZywgY2hpbGRyZW46IEFwaVJlcXVlc3RDb2x1bW5bXX0ge1xuXHRcdGlmICh0eXBlb2YgcmVxdWVzdENvbHVtbiA9PT0gJ3N0cmluZycpXG5cdFx0XHRyZXR1cm4ge2lkOiByZXF1ZXN0Q29sdW1uLCBjaGlsZHJlbjogW119O1xuXG5cdFx0bGV0IGNvbHVtbklkO1xuXG5cdFx0Zm9yIChjb2x1bW5JZCBpbiByZXF1ZXN0Q29sdW1uKSB7fVxuXG5cdFx0cmV0dXJuIHtpZDogY29sdW1uSWQgYXMgc3RyaW5nLCBjaGlsZHJlbjogcmVxdWVzdENvbHVtbltjb2x1bW5JZCBhcyBzdHJpbmddfTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXJnZXMgdHdvIHNldHMgb2YgcmVzcG9uc2UgY29sdW1ucy5cblx0ICogQHBhcmFtIHtvYmplY3R9IGZpcnN0XG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBzZWNvbmRcblx0ICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgYSAnbWVyZ2VkJyBhbmQgYSAnZGlmZmVyZW5jZScgcHJvcGVydHkuXG5cdCAqL1xuXHRtZXJnZVJlc3BvbnNlQ29sdW1ucyAoXG5cdFx0Zmlyc3Q6IFJlc3BvbnNlQ29sdW1uTWFwLFxuXHRcdHNlY29uZDogUmVzcG9uc2VDb2x1bW5NYXBcblx0KToge21lcmdlZDogUmVzcG9uc2VDb2x1bW5NYXAsIGRpZmZlcmVuY2U6IFJlc3BvbnNlQ29sdW1uTWFwfSB7XG5cdFx0Y29uc3QgbWVyZ2VkOiBSZXNwb25zZUNvbHVtbk1hcCA9IHt9O1xuXHRcdGNvbnN0IGRpZmZlcmVuY2U6IFJlc3BvbnNlQ29sdW1uTWFwID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGZpcnN0KSB7XG5cdFx0XHRpZiAoc2Vjb25kW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdG1lcmdlZFtpdGVtVHlwZV0gPSBmaXJzdFtpdGVtVHlwZV07XG5cblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IG1lcmdlUmVzdWx0ID0gdGhpcy5tZXJnZVJlc3BvbnNlQ29sdW1uTWFwKFxuXHRcdFx0XHRmaXJzdFtpdGVtVHlwZV0sXG5cdFx0XHRcdHNlY29uZFtpdGVtVHlwZV1cblx0XHRcdCk7XG5cblx0XHRcdG1lcmdlZFtpdGVtVHlwZV0gPSBtZXJnZVJlc3VsdC5tZXJnZWQ7XG5cdFx0XHRkaWZmZXJlbmNlW2l0ZW1UeXBlXSA9IG1lcmdlUmVzdWx0LmRpZmZlcmVuY2U7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBzZWNvbmQpIHtcblx0XHRcdGlmIChmaXJzdFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRtZXJnZWRbaXRlbVR5cGVdID0gc2Vjb25kW2l0ZW1UeXBlXTtcblx0XHRcdFx0ZGlmZmVyZW5jZVtpdGVtVHlwZV0gPSBzZWNvbmRbaXRlbVR5cGVdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB7bWVyZ2VkOiBtZXJnZWQsIGRpZmZlcmVuY2U6IGRpZmZlcmVuY2V9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7YXJyYXl9IGZpcnN0XG5cdCAqIEBwYXJhbSB7YXJyYXl9IHNlY29uZFxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBkaWZmZXJlbmNlOiB0aGUgY29sdW1ucyB0aGF0IGFyZSBpbiBzZWNvbmQsIGJ1dCBub3QgaW4gZmlyc3QuXG5cdCAqL1xuXHRtZXJnZVJlc3BvbnNlQ29sdW1uTWFwIChmaXJzdDogUmVzcG9uc2VDb2x1bW5NYXAsIHNlY29uZDogUmVzcG9uc2VDb2x1bW5NYXApOiB7bWVyZ2VkOiBSZXNwb25zZUNvbHVtbk1hcCwgZGlmZmVyZW5jZTogUmVzcG9uc2VDb2x1bW5NYXB9IHtcblx0XHRjb25zdCBtZXJnZWQ6IFJlc3BvbnNlQ29sdW1uTWFwID0ge307XG5cdFx0Y29uc3QgZGlmZmVyZW5jZTogUmVzcG9uc2VDb2x1bW5NYXAgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gZmlyc3QpXG5cdFx0XHRtZXJnZWRbY29sdW1uSWRdID0gZmlyc3RbY29sdW1uSWRdO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiBzZWNvbmQpIHtcblx0XHRcdGlmIChpc0RlZmluZWQoZmlyc3RbY29sdW1uSWRdKSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdG1lcmdlZFtjb2x1bW5JZF0gPSBzZWNvbmRbY29sdW1uSWRdO1xuXHRcdFx0ZGlmZmVyZW5jZVtjb2x1bW5JZF0gPSBzZWNvbmRbY29sdW1uSWRdO1xuXHRcdH1cblxuXHRcdHJldHVybiB7bWVyZ2VkOiBtZXJnZWQsIGRpZmZlcmVuY2U6IGRpZmZlcmVuY2V9O1xuXHR9XG5cblx0aXNMb2NhbENvbHVtbklkIChjb2x1bW5JZDogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIGNvbHVtbklkLnN1YnN0cmluZygwLCAyKSA9PT0gJ19fJztcblx0fVxuXG5cdHByb2Nlc3NDb25maWdDb2x1bW5zIChjb25maWdDb2x1bW5zOiBzdHJpbmdbXSk6IEFwaVJlcXVlc3RDb2x1bW5bXSB7XG5cdFx0Y29uc3QgcmVxdWVzdDogQXBpUmVxdWVzdENvbHVtbltdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb25maWdDb2x1bW5zKSB7XG5cdFx0XHRpZiAodGhpcy5pc0xvY2FsQ29sdW1uSWQoY29sdW1uKSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdHRoaXMucHJvY2Vzc0NvbmZpZ0NvbHVtbih0aGlzLnBhcnNlQ29uZmlnQ29sdW1uKGNvbHVtbiksIHJlcXVlc3QpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXF1ZXN0O1xuXHR9XG5cblx0cGFyc2VDb25maWdDb2x1bW4gKGNvbmZpZ0NvbHVtbjogc3RyaW5nKTogc3RyaW5nW10ge1xuXHRcdHJldHVybiBjb25maWdDb2x1bW4uc3BsaXQoUkVOREVSX0FTX1NFUEVSQVRPUilbMF0uc3BsaXQoQ09MVU1OX1NFUEVSQVRPUik7XG5cdH1cblxuXHRwcm9jZXNzQ29uZmlnQ29sdW1uIChwYXJzZWRDb25maWdDb2x1bW46IHN0cmluZ1tdLCBkZXN0aW5hdGlvbjogQXBpUmVxdWVzdENvbHVtbltdKSB7XG5cdFx0Y29uc3QgY29sdW1uSWQgPSBwYXJzZWRDb25maWdDb2x1bW5bMF07XG5cdFx0Y29uc3QgaXNMZWFmID0gcGFyc2VkQ29uZmlnQ29sdW1uLmxlbmd0aCA9PT0gMTtcblx0XHRsZXQgY29sdW1uSW5kZXggPSB0aGlzLmZpbmRSZXF1ZXN0Q29sdW1uKGNvbHVtbklkLCBkZXN0aW5hdGlvbik7XG5cblx0XHRpZiAoaXNMZWFmKSB7XG5cdFx0XHRpZiAoY29sdW1uSW5kZXggPT09IC0xKVxuXHRcdFx0XHRkZXN0aW5hdGlvbi5wdXNoKGNvbHVtbklkKTtcblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChjb2x1bW5JbmRleCA9PT0gLTEpXG5cdFx0XHRjb2x1bW5JbmRleCA9IGRlc3RpbmF0aW9uLnB1c2goe1tjb2x1bW5JZF06IFtdfSkgLSAxO1xuXHRcdGVsc2UgaWYgKHR5cGVvZiBkZXN0aW5hdGlvbltjb2x1bW5JbmRleF0gPT09ICdzdHJpbmcnKVxuXHRcdFx0ZGVzdGluYXRpb25bY29sdW1uSW5kZXhdID0ge1tjb2x1bW5JZF06IFtdfTtcblxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHR0aGlzLnByb2Nlc3NDb25maWdDb2x1bW4ocGFyc2VkQ29uZmlnQ29sdW1uLnNsaWNlKDEpLCBkZXN0aW5hdGlvbltjb2x1bW5JbmRleF1bY29sdW1uSWRdKTtcblx0fVxuXG5cdGZpbmRSZXF1ZXN0Q29sdW1uIChjb2x1bW5JZDogc3RyaW5nLCByZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbltdKTogbnVtYmVyIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RDb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBjb2x1bW4gPSByZXF1ZXN0Q29sdW1uc1tpXTtcblxuXHRcdFx0aWYgKHRoaXMuZ2V0UmVxdWVzdENvbHVtbklkKGNvbHVtbikgPT09IGNvbHVtbklkKVxuXHRcdFx0XHRyZXR1cm4gaTtcblx0XHR9XG5cblx0XHRyZXR1cm4gLTE7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSwgQ29sbGVjdGlvbkhhbmRsZXIsIENyZWF0ZUNvbXBpbGF0aW9uLCBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksIFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IENyZWF0ZVJlcXVlc3RFbnRyeSwgQ3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCwgSXRlbUVudHJ5TWFwLCBJdGVtSWQsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBnZXRQYXRoIH0gZnJvbSAnLi9VdGlsJztcblxuZXhwb3J0IGNsYXNzIENyZWF0ZVJlcXVlc3Qge1xuXHRyZXF1ZXN0czogQ3JlYXRlUmVxdWVzdEVudHJ5W10gPSBbXTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnk6IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSByZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb21waWxhdGlvbjogQ3JlYXRlQ29tcGlsYXRpb24sXG5cdFx0cHJpdmF0ZSBsb2NhbENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlLFxuXHRcdHByaXZhdGUgcGFyYW1ldGVyTWFwOiBDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwLFxuXHRcdHByaXZhdGUgYnJlYWt1cEJ5UGFyZW50ID0gZmFsc2Vcblx0KSB7XG5cdH1cblxuXHRmaW5hbGl6ZVJlcXVlc3QgKHJlcXVlc3RSZXNvdXJjZTogQ3JlYXRlUmVxdWVzdEVudHJ5KSB7XG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJpZXMgPSByZXF1ZXN0UmVzb3VyY2UuY29sbGVjdGlvbnMuZ2V0Q29sbGVjdGlvbnNXaXRoRml0dGluZ0l0ZW1zKCk7XG5cdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gcmVxdWVzdFJlc291cmNlLmNvbHVtbnM7XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiBjb2xsZWN0aW9uRW50cmllcylcblx0XHRcdGNvbHVtbkV4cGFuc2lvbi5leHBhbmQoY29sbGVjdGlvbkVudHJ5LmNvbHVtbnMpO1xuXG5cdFx0cmVxdWVzdFJlc291cmNlLnJlcXVlc3QuY29sdW1ucyA9IGNvbHVtbkV4cGFuc2lvbi5nZXQoKTtcblxuXHRcdHJldHVybiByZXF1ZXN0UmVzb3VyY2U7XG5cdH1cblxuXHRzZXRSZXF1ZXN0UGFyZW50IChwYXJlbnRUeXBlOiBJdGVtVHlwZSwgcmVxdWVzdEVudHJ5OiBDcmVhdGVSZXF1ZXN0RW50cnkpIHtcblx0XHRjb25zdCByZXF1ZXN0ID0gcmVxdWVzdEVudHJ5LnJlcXVlc3Q7XG5cblx0XHRpZiAocGFyZW50VHlwZSA9PT0gJ1ZvaWQnKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0cmVxdWVzdC5wYXJlbnRUeXBlID0gcGFyZW50VHlwZTtcblx0XHRyZXF1ZXN0LnBhcmVudElkID0ge307XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHJ1biAoKSB7XG5cdFx0Y29uc3QgY29tcGlsYXRpb24gPSB0aGlzLmNvbXBpbGF0aW9uO1xuXG5cdFx0aWYgKHRoaXMuYnJlYWt1cEJ5UGFyZW50KSB7XG5cdFx0XHRmb3IgKGNvbnN0IHBhcmVudFR5cGUgaW4gY29tcGlsYXRpb24pIHtcblx0XHRcdFx0Y29uc3QgcGFyZW50TWFwID0gY29tcGlsYXRpb25bcGFyZW50VHlwZV07XG5cblx0XHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBwYXJlbnRNYXApIHtcblx0XHRcdFx0XHRpZiAodGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZChwYXJlbnRJZCkpXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRcdGNvbnN0IHJlcXVlc3RSZXNvdXJjZSA9IHRoaXMuaW5pdGlhbGl6ZVJlcXVlc3QoKTtcblxuXHRcdFx0XHRcdHRoaXMuZXh0ZW5kUmVxdWVzdChcblx0XHRcdFx0XHRcdHBhcmVudE1hcFtwYXJlbnRJZF0sXG5cdFx0XHRcdFx0XHR0aGlzLnNldFJlcXVlc3RQYXJlbnQocGFyZW50VHlwZSwgcmVxdWVzdFJlc291cmNlKSA/ICtwYXJlbnRJZCA6IG51bGwsXG5cdFx0XHRcdFx0XHRyZXF1ZXN0UmVzb3VyY2Vcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0dGhpcy5yZXF1ZXN0cy5wdXNoKHRoaXMuZmluYWxpemVSZXF1ZXN0KHJlcXVlc3RSZXNvdXJjZSkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoY29uc3QgcGFyZW50VHlwZSBpbiBjb21waWxhdGlvbikge1xuXHRcdFx0XHRjb25zdCBwYXJlbnRNYXAgPSBjb21waWxhdGlvbltwYXJlbnRUeXBlXTtcblx0XHRcdFx0Y29uc3QgcmVxdWVzdFJlc291cmNlID0gdGhpcy5pbml0aWFsaXplUmVxdWVzdCgpO1xuXHRcdFx0XHRjb25zdCBoYXNQYXJlbnQgPSB0aGlzLnNldFJlcXVlc3RQYXJlbnQocGFyZW50VHlwZSwgcmVxdWVzdFJlc291cmNlKTtcblxuXHRcdFx0XHRsZXQgdmFsaWRSZXF1ZXN0ID0gZmFsc2U7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBwYXJlbnRNYXApIHtcblx0XHRcdFx0XHRpZiAodGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZChwYXJlbnRJZCkpXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRcdHRoaXMuZXh0ZW5kUmVxdWVzdChcblx0XHRcdFx0XHRcdHBhcmVudE1hcFtwYXJlbnRJZF0sXG5cdFx0XHRcdFx0XHRoYXNQYXJlbnQgPyArcGFyZW50SWQgOiBudWxsLFxuXHRcdFx0XHRcdFx0cmVxdWVzdFJlc291cmNlXG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdHZhbGlkUmVxdWVzdCA9IHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodmFsaWRSZXF1ZXN0KVxuXHRcdFx0XHRcdHRoaXMucmVxdWVzdHMucHVzaCh0aGlzLmZpbmFsaXplUmVxdWVzdChyZXF1ZXN0UmVzb3VyY2UpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5yZXF1ZXN0cztcblx0fVxuXG5cdGluaXRpYWxpemVSZXF1ZXN0ICgpOiBDcmVhdGVSZXF1ZXN0RW50cnkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRyZXF1ZXN0OiB7XG5cdFx0XHRcdHJlcXVlc3RUeXBlOiAnY3JlYXRlJyxcblx0XHRcdFx0aXRlbXM6IHt9LFxuXHRcdFx0XHRjb2x1bW5zOiB7fVxuXHRcdFx0fSxcblx0XHRcdGNvbHVtbnM6IHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KCksXG5cdFx0XHRpdGVtczoge30sXG5cdFx0XHRjb2xsZWN0aW9uczogdGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRbdGhpcy5sb2NhbENvbGxlY3Rpb25DYWNoZSwgdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5lbnRyaWVzXSxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0ZmFsc2Vcblx0XHRcdClcblx0XHR9O1xuXHR9XG5cblx0cHJpdmF0ZSBleHRlbmRSZXF1ZXN0IChpdGVtRW50cmllczogSXRlbUVudHJ5TWFwLCByZXF1ZXN0UGFyZW50SWQ6IEl0ZW1JZCB8IG51bGwsIGRlc3RpbmF0aW9uOiBDcmVhdGVSZXF1ZXN0RW50cnkpIHtcblx0XHRjb25zdCByZXF1ZXN0ID0gZGVzdGluYXRpb24ucmVxdWVzdDtcblx0XHRjb25zdCBpdGVtRW50cnlNYXAgPSBkZXN0aW5hdGlvbi5pdGVtcztcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gaXRlbUVudHJpZXMpIHtcblx0XHRcdGlmIChyZXF1ZXN0Lml0ZW1UeXBlID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdHJlcXVlc3QuaXRlbVR5cGUgPSBpdGVtVHlwZTtcblxuXHRcdFx0aWYgKGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpdGVtRW50cnlNYXBbaXRlbVR5cGVdID0ge307XG5cdFx0XHRcdHJlcXVlc3QuaXRlbXNbaXRlbVR5cGVdID0ge307XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGl0ZW1FbnRyaWVzW2l0ZW1UeXBlXSkge1xuXHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSBpdGVtRW50cmllc1tpdGVtVHlwZV1baXRlbUlkXTtcblx0XHRcdFx0Y29uc3QgY2hpbGRFbnRyaWVzID0gZ2V0UGF0aCh0aGlzLmNvbXBpbGF0aW9uLCBbaXRlbVR5cGUsIGl0ZW1JZF0pO1xuXHRcdFx0XHRjb25zdCBpdGVtUmVxdWVzdDogYW55ID0gcmVxdWVzdC5pdGVtc1tpdGVtVHlwZV1baXRlbUlkXSA9IHt9O1xuXHRcdFx0XHRjb25zdCBwYXJhbWV0ZXJzID0gZ2V0UGF0aCh0aGlzLnBhcmFtZXRlck1hcCwgW2l0ZW1UeXBlLCBpdGVtSWRdKTtcblxuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmVudElkICE9PSBudWxsKVxuXHRcdFx0XHRcdCg8e1tpdGVtSWQ6IHN0cmluZ106IEl0ZW1JZH0+IHJlcXVlc3QucGFyZW50SWQpW2l0ZW1JZF0gPSByZXF1ZXN0UGFyZW50SWQ7XG5cblx0XHRcdFx0ZGVzdGluYXRpb24uY29sdW1ucy5leHBhbmQoaXRlbUVudHJ5LmNvbHVtbnMpO1xuXHRcdFx0XHRkZXN0aW5hdGlvbi5jb2xsZWN0aW9ucy5leHBhbmQoaXRlbUVudHJ5KTtcblxuXHRcdFx0XHRpdGVtRW50cnlNYXBbaXRlbVR5cGVdW2l0ZW1JZF0gPSBpdGVtRW50cnk7XG5cblx0XHRcdFx0aXRlbVJlcXVlc3QudmFsdWVzID0gaXRlbUVudHJ5LmZvcm1hdFJlcXVlc3QoKTtcblx0XHRcdFx0aXRlbVJlcXVlc3QucGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7XG5cblx0XHRcdFx0aWYgKGNoaWxkRW50cmllcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdGNvbnN0IGxpbmtzOiB7W2l0ZW1UeXBlOiBzdHJpbmddOiBJdGVtSWRbXX0gPSBpdGVtUmVxdWVzdC5saW5rcyA9IHt9O1xuXG5cdFx0XHRcdGZvciAoY29uc3QgY2hpbGRUeXBlIGluIGNoaWxkRW50cmllcykge1xuXHRcdFx0XHRcdGxpbmtzW2NoaWxkVHlwZV0gPSBbXTtcblxuXHRcdFx0XHRcdGZvciAoY29uc3QgY2hpbGRJZCBpbiBjaGlsZEVudHJpZXNbY2hpbGRUeXBlXSlcblx0XHRcdFx0XHRcdGxpbmtzW2NoaWxkVHlwZV0ucHVzaChwYXJzZUludChjaGlsZElkLCAxMCkpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5leHRlbmRSZXF1ZXN0KGNoaWxkRW50cmllcywgbnVsbCwgZGVzdGluYXRpb24pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuIiwiaW1wb3J0IHtcblx0Q29sbGVjdGlvbkNhY2hlLFxuXHRDb2xsZWN0aW9uSGFuZGxlcixcblx0Q29sbGVjdGlvbk1hdGNoZXIsXG5cdENvbHVtblNldCxcblx0SXRlbUNhY2hlLFxuXHRJdGVtSGFuZGxlcixcblx0SXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRLZXlTZXJ2aWNlLFxuXHRMb2NhbENhY2hlLCBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25SZXN1bHQsXG5cdFF1ZXJ5U2VydmljZVxufSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7XG5cdENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcblx0Q29sdW1uU2V0RmFjdG9yeSxcblx0TG9jYWxDYWNoZUZhY3RvcnksXG5cdE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnlcbn0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7XG5cdEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRBdXRoSW50ZXJmYWNlLFxuXHRFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdExvY2FsQ2FjaGVNYW5hZ2VySW50ZXJmYWNlLFxuXHRQcm9taXNlTGlicmFyeUludGVyZmFjZVxufSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7XG5cdENvbGxlY3Rpb25FZGl0UmVzb3VyY2UsXG5cdENvbGxlY3Rpb25FbnRyeSxcblx0Q29sbGVjdGlvbkVudHJ5T3B0aW9ucyxcblx0Q29sbGVjdGlvblJlc291cmNlLFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zLFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlLCBDb2xsZWN0aW9uVmlld1Jlc291cmNlLFxuXHRFZGl0UmVzb3VyY2UsXG5cdEl0ZW1FbnRyeSxcblx0SXRlbUVudHJ5T3B0aW9ucyxcblx0SXRlbVJlc291cmNlLCBJdGVtUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlLCBMb2NhbFZpZXdSZXNvdXJjZSwgUmVtb3RlVmlld1Jlc291cmNlXG59IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge1xuXHRBcGlRdWVyeSxcblx0Q29sbGVjdGlvbkRlZmluaXRpb24sXG5cdENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwLFxuXHRDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZSxcblx0Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXAsIENvbnZlcnNpb25NYXAsXG5cdENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAsXG5cdEl0ZW1JZCxcblx0SXRlbUlkQ29udmVyc2lvbk1hcCxcblx0SXRlbU9wdGlvbnNJbnRlcmZhY2UsXG5cdEl0ZW1SZXNvdXJjZXNJdGVtVHlwZU1hcCxcblx0SXRlbVR5cGUsIExpbmtDb2xsZWN0aW9uRGVmaW5pdGlvbixcblx0TGlua2VkSXRlbUVudHJ5TWFwLFxuXHRMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24sXG5cdE9uU2F2ZUNhbGxiYWNrLFxuXHRQcm9taXNlSW50ZXJmYWNlLFxuXHRTdGF0ZUtleVR5cGUsXG5cdFRlbXBsYXRlSXRlbUVudHJ5TWFwXG59IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgY3JlYXRlUGF0aCB9IGZyb20gJy4vVXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBJdGVtQWRtaW5pc3RyYXRvciB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGF1dGhJbnRlcmZhY2U6IEF1dGhJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnk6IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcblx0XHRwcml2YXRlIGl0ZW1SZXF1ZXN0U2VydmljZTogSXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwcml2YXRlIGxvY2FsQ2FjaGVGYWN0b3J5OiBMb2NhbENhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIGxvY2FsQ2FjaGVNYW5hZ2VyOiBMb2NhbENhY2hlTWFuYWdlckludGVyZmFjZSxcblx0XHRwcml2YXRlIG1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnk6IE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXG5cdFx0cHJpdmF0ZSBwcm9taXNlSW50ZXJmYWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZSxcblx0XHRwcml2YXRlIHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlXG5cdCkge1xuXG5cdH1cblxuXHRpbnZhbGlkYXRlQ2FjaGUgKCk6IHZvaWQge1xuXHRcdC8vIHRoZSBpdGVtSGFuZGxlciBjYWNoZSBvbmx5IGNvbnRhaW5zIHJlbW90ZSBlbnRyaWVzXG5cdFx0dGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmZvckVhY2goXG5cdFx0XHRpdGVtRW50cnkgPT4gaXRlbUVudHJ5LnF1ZXVlUmVsb2FkKClcblx0XHQpO1xuXG5cdFx0Ly8gcXVldWVSZWxvYWQgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQgZm9yIGVhY2ggaW5kaXZpZHVhbCBpdGVtXG5cdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlci5lbnRyaWVzLmZvckVhY2goXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkgPT4gY29sbGVjdGlvbkVudHJ5LnF1ZXVlUmVsb2FkKClcblx0XHQpO1xuXHR9XG5cblx0Z2V0Q29sbGVjdGlvbk1hdGNoZXIgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgYWRkVG9UYWI6IGJvb2xlYW4gPSB0cnVlKTogQ29sbGVjdGlvbk1hdGNoZXIge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblx0XHRjb25zdCBjb2xsZWN0aW9uTWF0Y2hlciA9IHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdChbbG9jYWxDYWNoZS5jb2xsZWN0aW9uc10sIGZhbHNlLCB0cnVlKTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHQvLyB0aGlzIGlzIG9ubHkgcmVsZXZhbnQgaWYgdGhlcmUgYXJlIG5vIGNvbGxlY3Rpb25zIHRvIGFkZCB0aGUgaXRlbSB0bywgYnV0IHdlIHN0aWxsIHdhbnQgdG8gc2F2ZSB0aGUgaXRlbVxuXHRcdFx0aWYgKGFkZFRvVGFiKVxuXHRcdFx0XHRsb2NhbENhY2hlLml0ZW1zLmFkZChpdGVtRW50cnkpO1xuXG5cdFx0XHRjb2xsZWN0aW9uTWF0Y2hlci5leHBhbmQoaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29sbGVjdGlvbk1hdGNoZXI7XG5cdH1cblxuXHRmZXRjaFRpdGxlIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkLCBkZWZlclJlcXVlc3Q/OiBib29sZWFuKTogUHJvbWlzZUludGVyZmFjZTxzdHJpbmc+IHtcblx0XHRyZXR1cm4gdGhpcy5pdGVtSGFuZGxlci5mZXRjaFRpdGxlKGl0ZW1UeXBlLCBpdGVtSWQsIGRlZmVyUmVxdWVzdCwgdGhpcy5nZXRMb2NhbENhY2hlKCkuaXRlbXMpO1xuXHR9XG5cblx0Z2V0SXRlbUJ5SWQgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtSWQ6IEl0ZW1JZCxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0OiB0cnVlfSxcblx0XHRpc1Jvb3Q/OiBib29sZWFuXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8RWRpdFJlc291cmNlPjtcblxuXHRnZXRJdGVtQnlJZCAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1JZDogSXRlbUlkLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlICYge3JlbW90ZTogdHJ1ZX0sXG5cdFx0aXNSb290PzogYm9vbGVhblxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPFJlbW90ZVZpZXdSZXNvdXJjZT47XG5cblx0Z2V0SXRlbUJ5SWQgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtSWQ6IEl0ZW1JZCxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSxcblx0XHRpc1Jvb3Q/OiBib29sZWFuXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8TG9jYWxWaWV3UmVzb3VyY2U+O1xuXG5cdGdldEl0ZW1CeUlkIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUlkOiBJdGVtSWQsXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgPSB7fSxcblx0XHRpc1Jvb3Q/OiBib29sZWFuXG5cdCkge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblxuXHRcdHJldHVybiB0aGlzLml0ZW1IYW5kbGVyLmZldGNoSXRlbShcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkLFxuXHRcdFx0bmV3IEl0ZW1FbnRyeU9wdGlvbnMob3B0aW9ucyksXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zXG5cdFx0KS50aGVuKFxuXHRcdFx0KGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUl0ZW1SZXNvdXJjZShpdGVtRW50cnksIG9wdGlvbnMsIGlzUm9vdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldEl0ZW1zQnlJZCAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1JZHM6IEl0ZW1JZFtdLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlICYge2VkaXQ6IHRydWV9XG5cdCk6IFByb21pc2VJbnRlcmZhY2U8RWRpdFJlc291cmNlW10+XG5cblx0Z2V0SXRlbXNCeUlkIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUlkczogSXRlbUlkW10sXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgJiB7cmVtb3RlOiB0cnVlfVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPFJlbW90ZVZpZXdSZXNvdXJjZVtdPjtcblxuXHRnZXRJdGVtc0J5SWQgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtSWRzOiBJdGVtSWRbXSxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPExvY2FsVmlld1Jlc291cmNlW10+O1xuXG5cdGdldEl0ZW1zQnlJZCAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1JZHM6IEl0ZW1JZFtdLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlID0ge31cblx0KSB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZmV0Y2hJdGVtcyhcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkcyxcblx0XHRcdG5ldyBJdGVtRW50cnlPcHRpb25zKG9wdGlvbnMpLFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtc1xuXHRcdCkudGhlbihcblx0XHRcdChpdGVtRW50cmllczogSXRlbUVudHJ5W10pID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlSXRlbVJlc291cmNlcyhpdGVtRW50cmllcywgb3B0aW9ucyk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldEl0ZW1zQnlRdWVyeSAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHF1ZXJ5OiBBcGlRdWVyeSxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0OiB0cnVlfVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEVkaXRSZXNvdXJjZVtdPjtcblxuXHRnZXRJdGVtc0J5UXVlcnkgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRxdWVyeTogQXBpUXVlcnksXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgJiB7cmVtb3RlOiB0cnVlfVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPFJlbW90ZVZpZXdSZXNvdXJjZVtdPjtcblxuXHRnZXRJdGVtc0J5UXVlcnkgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRxdWVyeTogQXBpUXVlcnksXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2Vcblx0KTogUHJvbWlzZUludGVyZmFjZTxMb2NhbFZpZXdSZXNvdXJjZVtdPjtcblxuXHRnZXRJdGVtc0J5UXVlcnkgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcXVlcnk6IEFwaVF1ZXJ5LCBvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSA9IHt9KSB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXHRcdGNvbnN0IGVudHJ5T3B0aW9ucyA9IG5ldyBJdGVtRW50cnlPcHRpb25zKG9wdGlvbnMpO1xuXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLmFkZFBhcmVudENvbmRpdGlvbihxdWVyeSwgZW50cnlPcHRpb25zLnBhcmVudCksXG5cdFx0XHR7W2l0ZW1UeXBlXTogZW50cnlPcHRpb25zLmNvbHVtbnN9XG5cdFx0KS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc1Jlc3BvbnNlKFxuXHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHRcdHJlc3BvbnNlLmxpbmtzW2l0ZW1UeXBlXSxcblx0XHRcdFx0XHRlbnRyeU9wdGlvbnMucGFyZW50LFxuXHRcdFx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIGVudHJ5T3B0aW9ucy5jb2x1bW5zLCByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKSlcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHQoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdKSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUl0ZW1SZXNvdXJjZXMoaXRlbUVudHJpZXMsIG9wdGlvbnMpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXROZXdSZXNvdXJjZSAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlLFxuXHRcdHJldHVybkxpbmtzOiB0cnVlLFxuXHRcdGlzUm9vdD86IGJvb2xlYW5cblx0KTogUHJvbWlzZUludGVyZmFjZTx7bWFpbjogRWRpdFJlc291cmNlLCBsaW5rZWQ6IEl0ZW1SZXNvdXJjZXNJdGVtVHlwZU1hcH0+O1xuXG5cdGdldE5ld1Jlc291cmNlIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UsXG5cdFx0cmV0dXJuTGlua3M/OiBib29sZWFuLFxuXHRcdGlzUm9vdD86IGJvb2xlYW5cblx0KTogUHJvbWlzZUludGVyZmFjZTxFZGl0UmVzb3VyY2U+O1xuXG5cdGdldE5ld1Jlc291cmNlIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgPSB7fSxcblx0XHRyZXR1cm5MaW5rczogYm9vbGVhbiA9IGZhbHNlLFxuXHRcdGlzUm9vdD86IGJvb2xlYW5cblx0KSB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXG5cdFx0b3B0aW9ucy5lZGl0ID0gdHJ1ZTtcblxuXHRcdHJldHVybiB0aGlzLml0ZW1IYW5kbGVyLmZldGNoTmV3SXRlbShcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0bmV3IEl0ZW1FbnRyeU9wdGlvbnMob3B0aW9ucyksXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zXG5cdFx0KS50aGVuKFxuXHRcdFx0KGl0ZW1FbnRyeVJlc291cmNlOiBUZW1wbGF0ZUl0ZW1FbnRyeU1hcCkgPT4ge1xuXHRcdFx0XHRjb25zdCBtYWluID0gbG9jYWxDYWNoZS5jcmVhdGVJdGVtUmVzb3VyY2UoaXRlbUVudHJ5UmVzb3VyY2UubWFpbiwgb3B0aW9ucywgaXNSb290LCB0cnVlKTtcblx0XHRcdFx0Y29uc3QgbGlua2VkID0gdGhpcy5wcm9jZXNzTGlua2VkSXRlbXMoaXRlbUVudHJ5UmVzb3VyY2UubGlua2VkLCBvcHRpb25zLCB0cnVlKTsgLy8gZG8gdGhpcyBiZWZvcmVoYW5kXG5cblx0XHRcdFx0aWYgKCFyZXR1cm5MaW5rcylcblx0XHRcdFx0XHRyZXR1cm4gbWFpbjtcblxuXHRcdFx0XHRyZXR1cm4ge21haW46IG1haW4sIGxpbmtlZDogbGlua2VkfTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0RHVwbGljYXRlQnlJZCAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGR1cGxpY2F0ZUlkOiBJdGVtSWQsXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdDogdHJ1ZX0sXG5cdFx0cmV0dXJuTGlua3M/OiBib29sZWFuLFxuXHRcdGlzUm9vdD86IGJvb2xlYW5cblx0KTogUHJvbWlzZUludGVyZmFjZTxFZGl0UmVzb3VyY2U+O1xuXG5cdGdldER1cGxpY2F0ZUJ5SWQgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRkdXBsaWNhdGVJZDogSXRlbUlkLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlICYge3JlbW90ZTogdHJ1ZX0sXG5cdFx0cmV0dXJuTGlua3M/OiBib29sZWFuLFxuXHRcdGlzUm9vdD86IGJvb2xlYW5cblx0KTogUHJvbWlzZUludGVyZmFjZTxSZW1vdGVWaWV3UmVzb3VyY2U+O1xuXG5cdGdldER1cGxpY2F0ZUJ5SWQgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRkdXBsaWNhdGVJZDogSXRlbUlkLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlLFxuXHRcdHJldHVybkxpbmtzPzogYm9vbGVhbixcblx0XHRpc1Jvb3Q/OiBib29sZWFuXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8TG9jYWxWaWV3UmVzb3VyY2U+O1xuXG5cdGdldER1cGxpY2F0ZUJ5SWQgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRkdXBsaWNhdGVJZDogSXRlbUlkLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlID0ge30sXG5cdFx0cmV0dXJuTGlua3M/OiBib29sZWFuLFxuXHRcdGlzUm9vdD86IGJvb2xlYW5cblx0KSB7XG5cdFx0b3B0aW9ucy5pc0R1cGxpY2F0ZSA9IHRydWU7XG5cblx0XHRpZiAob3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMgPT09IHVuZGVmaW5lZClcblx0XHRcdG9wdGlvbnMudGVtcGxhdGVPcHRpb25zID0ge307XG5cblx0XHRpZiAob3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMuaXRlbSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0b3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMuaXRlbSA9IGR1cGxpY2F0ZUlkO1xuXG5cdFx0cmV0dXJuIHRoaXMuZ2V0TmV3UmVzb3VyY2UoaXRlbVR5cGUsIG9wdGlvbnMsIHJldHVybkxpbmtzLCBpc1Jvb3QpO1xuXHR9XG5cblx0Z2V0SXRlbUJ5U3RhdGUgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRzdGF0ZUtleTogSXRlbUlkIHwgc3RyaW5nLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlICYge2VkaXQ6IHRydWV9LFxuXHRcdGlzUm9vdD86IGJvb2xlYW5cblx0KTogUHJvbWlzZUludGVyZmFjZTxFZGl0UmVzb3VyY2U+O1xuXG5cdGdldEl0ZW1CeVN0YXRlIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0c3RhdGVLZXk6IEl0ZW1JZCB8IHN0cmluZyxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSAmIHtyZW1vdGU6IHRydWV9LFxuXHRcdGlzUm9vdD86IGJvb2xlYW5cblx0KTogUHJvbWlzZUludGVyZmFjZTxSZW1vdGVWaWV3UmVzb3VyY2U+O1xuXG5cdGdldEl0ZW1CeVN0YXRlIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0c3RhdGVLZXk6IEl0ZW1JZCB8IHN0cmluZyxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSxcblx0XHRpc1Jvb3Q/OiBib29sZWFuXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8TG9jYWxWaWV3UmVzb3VyY2U+O1xuXG5cdC8vIHN0YXRlS2V5IGNhbiBiZSBhIGtleXdvcmQgb3IgYSBsb2NhbCBpZCAoaW4gY2FzZSBvZiBhIHJlZnJlc2gpXG5cdGdldEl0ZW1CeVN0YXRlIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0c3RhdGVLZXk6IEl0ZW1JZCB8IHN0cmluZyxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSA9IHt9LFxuXHRcdGlzUm9vdD86IGJvb2xlYW5cblx0KSB7XG5cdFx0Y29uc3QgcGFyc2VkU3RhdGVLZXkgPSB0aGlzLmtleVNlcnZpY2UucGFyc2VTdGF0ZUtleShzdGF0ZUtleSBhcyBzdHJpbmcpO1xuXG5cdFx0aWYgKHBhcnNlZFN0YXRlS2V5ID09PSBudWxsKSB7XG5cdFx0XHRjb25zdCBpdGVtSWQgPSBzdGF0ZUtleSBhcyBJdGVtSWQ7XG5cblx0XHRcdGlmICghdGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZChpdGVtSWQpIHx8IHRoaXMuZ2V0TG9jYWxDYWNoZSgpLml0ZW1zLmNvbnRhaW5zKGl0ZW1UeXBlLCBpdGVtSWQpKVxuXHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRJdGVtQnlJZChpdGVtVHlwZSwgaXRlbUlkLCBvcHRpb25zLCBpc1Jvb3QpO1xuXHRcdH0gZWxzZSBpZiAocGFyc2VkU3RhdGVLZXkudHlwZSA9PT0gU3RhdGVLZXlUeXBlLkR1cGxpY2F0ZSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0RHVwbGljYXRlQnlJZChcblx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdHBhcnNlZFN0YXRlS2V5Lml0ZW1JZCBhcyBJdGVtSWQsXG5cdFx0XHRcdG9wdGlvbnMsXG5cdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRpc1Jvb3Rcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZ2V0TmV3UmVzb3VyY2UoaXRlbVR5cGUsIG9wdGlvbnMsIGZhbHNlLCBpc1Jvb3QpO1xuXHR9XG5cblx0Z2V0Q29sbGVjdGlvbkRlZiAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZSk6IENvbGxlY3Rpb25EZWZpbml0aW9uIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0aXRlbVR5cGU6IGl0ZW1UeXBlLFxuXHRcdFx0b3B0aW9uczoge1xuXHRcdFx0XHRlbnRyeTogbmV3IENvbGxlY3Rpb25FbnRyeU9wdGlvbnMob3B0aW9ucyksIC8vIHdlIG5lZWQgdGhlIGRlZmF1bHQgY29sdW1uIHZhbHVlXG5cdFx0XHRcdHJlc291cmNlOiBuZXcgQ29sbGVjdGlvblJlc291cmNlT3B0aW9ucyhvcHRpb25zKVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHRnZXRMaW5rQ29sbGVjdGlvbnNEZWYgKFxuXHRcdGxpbmtUeXBlOiBJdGVtVHlwZSxcblx0XHRsaW5rSWRBcnJheTogSXRlbUlkW10gfCAoKCkgPT4gSXRlbUlkW10pLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRsaW5rRmllbGQ6IHN0cmluZyxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZVxuXHQpOiBMaW5rQ29sbGVjdGlvbkRlZmluaXRpb24ge1xuXHRcdHJldHVybiB7XG5cdFx0XHRpdGVtVHlwZTogaXRlbVR5cGUsXG5cdFx0XHRsaW5rVHlwZTogbGlua1R5cGUsXG5cdFx0XHRsaW5rSWRBcnJheTogbGlua0lkQXJyYXksXG5cdFx0XHRsaW5rRmllbGQ6IGxpbmtGaWVsZCxcblx0XHRcdG9wdGlvbnM6IHtcblx0XHRcdFx0ZW50cnk6IG5ldyBDb2xsZWN0aW9uRW50cnlPcHRpb25zKG9wdGlvbnMpLCAvLyB3ZSBuZWVkIHRoZSBkZWZhdWx0IGNvbHVtbiB2YWx1ZVxuXHRcdFx0XHRyZXNvdXJjZTogbmV3IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnMob3B0aW9ucylcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0Z2V0Q29sbGVjdGlvbiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlICYge2VkaXRDb2xsZWN0aW9uOiB0cnVlLCBlZGl0SXRlbXM6IHRydWV9XG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvbkVkaXRSZXNvdXJjZTxFZGl0UmVzb3VyY2U+PjtcblxuXHRnZXRDb2xsZWN0aW9uIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdEl0ZW1zOiB0cnVlfVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8RWRpdFJlc291cmNlPj47XG5cblx0Z2V0Q29sbGVjdGlvbiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlICYge2VkaXRDb2xsZWN0aW9uOiB0cnVlLCByZW1vdGVJdGVtczogdHJ1ZX1cblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uRWRpdFJlc291cmNlPFJlbW90ZVZpZXdSZXNvdXJjZT4+O1xuXG5cdGdldENvbGxlY3Rpb24gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZSAmIHtyZW1vdGVJdGVtczogdHJ1ZX1cblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uVmlld1Jlc291cmNlPFJlbW90ZVZpZXdSZXNvdXJjZT4+O1xuXG5cdGdldENvbGxlY3Rpb24gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0Q29sbGVjdGlvbjogdHJ1ZX1cblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uRWRpdFJlc291cmNlPExvY2FsVmlld1Jlc291cmNlPj47XG5cblx0Z2V0Q29sbGVjdGlvbiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvblZpZXdSZXNvdXJjZTxMb2NhbFZpZXdSZXNvdXJjZT4+O1xuXG5cdGdldENvbGxlY3Rpb24gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZVxuXHQpIHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5mZXRjaChcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0bmV3IENvbGxlY3Rpb25FbnRyeU9wdGlvbnMob3B0aW9ucyksXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxuXHRcdFx0bG9jYWxDYWNoZS5jb2xsZWN0aW9ucyxcblx0XHRcdGxvY2FsQ2FjaGUuZGVmZXJyZWRDb2xsZWN0aW9uc1xuXHRcdCkudGhlbihcblx0XHRcdGVudHJ5ID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlKGVudHJ5LCBuZXcgQ29sbGVjdGlvblJlc291cmNlT3B0aW9ucyhvcHRpb25zKSk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldENvbGxlY3Rpb25Gcm9tRGVmIChkZWZpbml0aW9uOiBDb2xsZWN0aW9uRGVmaW5pdGlvbik6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvblJlc291cmNlPiB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZmV0Y2goXG5cdFx0XHRkZWZpbml0aW9uLml0ZW1UeXBlLFxuXHRcdFx0ZGVmaW5pdGlvbi5vcHRpb25zLmVudHJ5LFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtcyxcblx0XHRcdGxvY2FsQ2FjaGUuY29sbGVjdGlvbnMsXG5cdFx0XHRsb2NhbENhY2hlLmRlZmVycmVkQ29sbGVjdGlvbnNcblx0XHQpLnRoZW4oXG5cdFx0XHRlbnRyeSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZShlbnRyeSwgZGVmaW5pdGlvbi5vcHRpb25zLnJlc291cmNlKTtcblxuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQGRlcHJlY2F0ZWQsIHVzZSBgcGFyZW50YCBpbiBvcHRpb25zXG5cdCAqL1xuXHRnZXRMaW5rQ29sbGVjdGlvbiAoXG5cdFx0bGlua1R5cGU6IEl0ZW1UeXBlLFxuXHRcdGxpbmtJZDogSXRlbUlkLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZSA9IHt9XG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvblJlc291cmNlPiB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXG5cdFx0b3B0aW9ucy5wYXJlbnQgPSB7aXRlbVR5cGU6IGxpbmtUeXBlLCBpdGVtSWQ6IGxpbmtJZH07XG5cblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5mZXRjaChcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0bmV3IENvbGxlY3Rpb25FbnRyeU9wdGlvbnMob3B0aW9ucyksXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxuXHRcdFx0bG9jYWxDYWNoZS5jb2xsZWN0aW9ucyxcblx0XHRcdGxvY2FsQ2FjaGUuZGVmZXJyZWRDb2xsZWN0aW9uc1xuXHRcdCkudGhlbihcblx0XHRcdChlbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZShlbnRyeSwgb3B0aW9ucyk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldExpbmtDb2xsZWN0aW9ucyAoXG5cdFx0bGlua1R5cGU6IEl0ZW1UeXBlLFxuXHRcdGxpbmtJZEFycmF5OiBJdGVtSWRbXSxcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdEl0ZW1zOiB0cnVlLCBlZGl0Q29sbGVjdGlvbjogdHJ1ZX1cblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcDxDb2xsZWN0aW9uRWRpdFJlc291cmNlPEVkaXRSZXNvdXJjZT4+PjtcblxuXHRnZXRMaW5rQ29sbGVjdGlvbnMgKFxuXHRcdGxpbmtUeXBlOiBJdGVtVHlwZSxcblx0XHRsaW5rSWRBcnJheTogSXRlbUlkW10sXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlICYge3JlbW90ZUl0ZW1zOiB0cnVlLCBlZGl0Q29sbGVjdGlvbjogdHJ1ZX1cblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcDxDb2xsZWN0aW9uRWRpdFJlc291cmNlPFJlbW90ZVZpZXdSZXNvdXJjZT4+PjtcblxuXHRnZXRMaW5rQ29sbGVjdGlvbnMgKFxuXHRcdGxpbmtUeXBlOiBJdGVtVHlwZSxcblx0XHRsaW5rSWRBcnJheTogSXRlbUlkW10sXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlICYge2VkaXRDb2xsZWN0aW9uOiB0cnVlfVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwPENvbGxlY3Rpb25FZGl0UmVzb3VyY2U8TG9jYWxWaWV3UmVzb3VyY2U+Pj47XG5cblx0Z2V0TGlua0NvbGxlY3Rpb25zIChcblx0XHRsaW5rVHlwZTogSXRlbVR5cGUsXG5cdFx0bGlua0lkQXJyYXk6IEl0ZW1JZFtdLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0SXRlbXM6IHRydWV9XG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA8Q29sbGVjdGlvblZpZXdSZXNvdXJjZTxFZGl0UmVzb3VyY2U+Pj47XG5cblx0Z2V0TGlua0NvbGxlY3Rpb25zIChcblx0XHRsaW5rVHlwZTogSXRlbVR5cGUsXG5cdFx0bGlua0lkQXJyYXk6IEl0ZW1JZFtdLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZSAmIHtyZW1vdGVJdGVtczogdHJ1ZX1cblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcDxDb2xsZWN0aW9uVmlld1Jlc291cmNlPFJlbW90ZVZpZXdSZXNvdXJjZT4+PjtcblxuXHRnZXRMaW5rQ29sbGVjdGlvbnMgKFxuXHRcdGxpbmtUeXBlOiBJdGVtVHlwZSxcblx0XHRsaW5rSWRBcnJheTogSXRlbUlkW10sXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA8Q29sbGVjdGlvblZpZXdSZXNvdXJjZTxMb2NhbFZpZXdSZXNvdXJjZT4+PjtcblxuXHRnZXRMaW5rQ29sbGVjdGlvbnMgKFxuXHRcdGxpbmtUeXBlOiBJdGVtVHlwZSxcblx0XHRsaW5rSWRBcnJheTogSXRlbUlkW10sXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlXG5cdCkge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmJhdGNoRmV0Y2goXG5cdFx0XHRsaW5rVHlwZSxcblx0XHRcdGxpbmtJZEFycmF5LFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRuZXcgQ29sbGVjdGlvbkVudHJ5T3B0aW9ucyhvcHRpb25zKSxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMsXG5cdFx0XHRsb2NhbENhY2hlLmNvbGxlY3Rpb25zLFxuXHRcdFx0bG9jYWxDYWNoZS5kZWZlcnJlZENvbGxlY3Rpb25zXG5cdFx0KS50aGVuKFxuXHRcdFx0KGNvbGxlY3Rpb25FbnRyaWVzOiBDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2VzKGNvbGxlY3Rpb25FbnRyaWVzLCBvcHRpb25zKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0TGlua0NvbGxlY3Rpb25zRnJvbURlZiAoZGVmaW5pdGlvbjogTGlua0NvbGxlY3Rpb25EZWZpbml0aW9uKTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcD4ge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmJhdGNoRmV0Y2goXG5cdFx0XHRkZWZpbml0aW9uLmxpbmtUeXBlLFxuXHRcdFx0ZGVmaW5pdGlvbi5saW5rSWRBcnJheSxcblx0XHRcdGRlZmluaXRpb24uaXRlbVR5cGUsXG5cdFx0XHRkZWZpbml0aW9uLm9wdGlvbnMuZW50cnksXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxuXHRcdFx0bG9jYWxDYWNoZS5jb2xsZWN0aW9ucyxcblx0XHRcdGxvY2FsQ2FjaGUuZGVmZXJyZWRDb2xsZWN0aW9uc1xuXHRcdCkudGhlbihcblx0XHRcdChjb2xsZWN0aW9uRW50cmllczogQ29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXApID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlcyhcblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cmllcyxcblx0XHRcdFx0XHRkZWZpbml0aW9uLm9wdGlvbnMucmVzb3VyY2Vcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0QWxsTGlua0NvbGxlY3Rpb25zIChcblx0XHRsaW5rVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlICYge2VkaXRJdGVtczogdHJ1ZSwgZWRpdENvbGxlY3Rpb246IHRydWV9XG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA8Q29sbGVjdGlvbkVkaXRSZXNvdXJjZTxFZGl0UmVzb3VyY2U+Pj47XG5cblx0Z2V0QWxsTGlua0NvbGxlY3Rpb25zIChcblx0XHRsaW5rVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlICYge3JlbW90ZUl0ZW1zOiB0cnVlLCBlZGl0Q29sbGVjdGlvbjogdHJ1ZX1cblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcDxDb2xsZWN0aW9uRWRpdFJlc291cmNlPFJlbW90ZVZpZXdSZXNvdXJjZT4+PjtcblxuXHRnZXRBbGxMaW5rQ29sbGVjdGlvbnMgKFxuXHRcdGxpbmtUeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdENvbGxlY3Rpb246IHRydWV9XG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA8Q29sbGVjdGlvbkVkaXRSZXNvdXJjZTxMb2NhbFZpZXdSZXNvdXJjZT4+PjtcblxuXHRnZXRBbGxMaW5rQ29sbGVjdGlvbnMgKFxuXHRcdGxpbmtUeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdEl0ZW1zOiB0cnVlfVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwPENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8RWRpdFJlc291cmNlPj4+O1xuXG5cdGdldEFsbExpbmtDb2xsZWN0aW9ucyAoXG5cdFx0bGlua1R5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZSAmIHtyZW1vdGVJdGVtczogdHJ1ZX1cblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcDxDb2xsZWN0aW9uVmlld1Jlc291cmNlPFJlbW90ZVZpZXdSZXNvdXJjZT4+PjtcblxuXHRnZXRBbGxMaW5rQ29sbGVjdGlvbnMgKFxuXHRcdGxpbmtUeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2Vcblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcDxDb2xsZWN0aW9uVmlld1Jlc291cmNlPExvY2FsVmlld1Jlc291cmNlPj4+O1xuXG5cdGdldEFsbExpbmtDb2xsZWN0aW9ucyAoXG5cdFx0bGlua1R5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZVxuXHQpIHtcblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShsaW5rVHlwZSwge30sIHt9KVxuXHRcdFx0LnRoZW4oXG5cdFx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRMaW5rQ29sbGVjdGlvbnMoXG5cdFx0XHRcdFx0XHRsaW5rVHlwZSxcblx0XHRcdFx0XHRcdHJlc3BvbnNlLmxpbmtzW2xpbmtUeXBlXSxcblx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdFx0b3B0aW9uc1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0KTtcblx0fVxuXG5cdGNsb25lSXRlbSAoXG5cdFx0aXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UsXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdDogdHJ1ZX1cblx0KTogRWRpdFJlc291cmNlO1xuXG5cdGNsb25lSXRlbSAoXG5cdFx0aXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UsXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgJiB7cmVtb3RlOiB0cnVlfVxuXHQpOiBSZW1vdGVWaWV3UmVzb3VyY2U7XG5cblx0Y2xvbmVJdGVtIChcblx0XHRpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZVxuXHQpOiBMb2NhbFZpZXdSZXNvdXJjZTtcblxuXHRjbG9uZUl0ZW0gKFxuXHRcdGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlXG5cdCkge1xuXHRcdHJldHVybiB0aGlzLmFkZFNpbmdsZUl0ZW0oaXRlbVJlc291cmNlLmVudHJ5LmNsb25lKCksIG9wdGlvbnMsIGZhbHNlKTtcblx0fVxuXG5cdGNsb25lQ29sbGVjdGlvbiAoXG5cdFx0Y29sbGVjdGlvblJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdEl0ZW1zOiB0cnVlLCBlZGl0Q29sbGVjdGlvbjogdHJ1ZX0sXG5cdFx0Y29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcFxuXHQpOiBDb2xsZWN0aW9uRWRpdFJlc291cmNlPEVkaXRSZXNvdXJjZT47XG5cblx0Y2xvbmVDb2xsZWN0aW9uIChcblx0XHRjb2xsZWN0aW9uUmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZSAmIHtyZW1vdGVJdGVtczogdHJ1ZSwgZWRpdENvbGxlY3Rpb246IHRydWV9LFxuXHRcdGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXBcblx0KTogQ29sbGVjdGlvbkVkaXRSZXNvdXJjZTxSZW1vdGVWaWV3UmVzb3VyY2U+O1xuXG5cdGNsb25lQ29sbGVjdGlvbiAoXG5cdFx0Y29sbGVjdGlvblJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdEl0ZW1zOiB0cnVlfSxcblx0XHRjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwXG5cdCk6IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8RWRpdFJlc291cmNlPjtcblxuXHRjbG9uZUNvbGxlY3Rpb24gKFxuXHRcdGNvbGxlY3Rpb25SZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlICYge3JlbW90ZUl0ZW1zOiB0cnVlfSxcblx0XHRjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwXG5cdCk6IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8UmVtb3RlVmlld1Jlc291cmNlPjtcblxuXHRjbG9uZUNvbGxlY3Rpb24gKFxuXHRcdGNvbGxlY3Rpb25SZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlICYge2VkaXRDb2xsZWN0aW9uOiB0cnVlfSxcblx0XHRjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwXG5cdCk6IENvbGxlY3Rpb25FZGl0UmVzb3VyY2U8TG9jYWxWaWV3UmVzb3VyY2U+O1xuXG5cdGNsb25lQ29sbGVjdGlvbiAoXG5cdFx0Y29sbGVjdGlvblJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2UsXG5cdFx0Y29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcFxuXHQpOiBDb2xsZWN0aW9uVmlld1Jlc291cmNlPExvY2FsVmlld1Jlc291cmNlPjtcblxuXHRjbG9uZUNvbGxlY3Rpb24gKFxuXHRcdGNvbGxlY3Rpb25SZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlLFxuXHRcdGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXBcblx0KSB7XG5cdFx0bGV0IHBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cGFyZW50ID0gbnVsbDtcblxuXHRcdHJldHVybiB0aGlzLmFkZENvbGxlY3Rpb24oXG5cdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2UuZW50cnkuY2xvbmUocGFyZW50LCBjb252ZXJzaW9uTWFwKSxcblx0XHRcdG9wdGlvbnNcblx0XHQpO1xuXHR9XG5cblx0c2F2ZUN1cnJlbnRMb2NhbENhY2hlIChcblx0XHRjbG9zZVRhYj86IGJvb2xlYW4sXG5cdFx0cGFyYW1ldGVycz86IENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAsXG5cdFx0YnJlYWt1cEJ5UGFyZW50PzogYm9vbGVhbixcblx0XHRvbkFmdGVyQ3JlYXRlQ2FsbGJhY2s/OiAoY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCkgPT4gdm9pZFxuXHQpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbENhY2hlKCkuc2F2ZShjbG9zZVRhYiwgcGFyYW1ldGVycywgYnJlYWt1cEJ5UGFyZW50LCBvbkFmdGVyQ3JlYXRlQ2FsbGJhY2spO1xuXHR9XG5cblx0Z2V0Q3VycmVudENvbGxlY3Rpb25zICgpOiBDb2xsZWN0aW9uQ2FjaGUge1xuXHRcdHJldHVybiB0aGlzLmdldExvY2FsQ2FjaGUoKS5jb2xsZWN0aW9ucztcblx0fVxuXG5cdGdldEN1cnJlbnRJdGVtcyAoKTogSXRlbUNhY2hlIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbENhY2hlKCkuaXRlbXM7XG5cdH1cblxuXHRnZXRNb2R1bGVDaGFuZ2VzIChsb2NhbENhY2hlOiBMb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCkpOiBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25SZXN1bHQge1xuXHRcdGlmIChsb2NhbENhY2hlLnJvb3RJdGVtID09PSB1bmRlZmluZWQpXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2l0ZW1BZG1pbmlzdHJhdG9yOiBObyByb290IGl0ZW0gZm9yIGxvY2FsIGNhY2hlICcgKyBsb2NhbENhY2hlLmlkKTtcblxuXHRcdHJldHVybiB0aGlzLm1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0bG9jYWxDYWNoZS5yb290SXRlbSxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMsXG5cdFx0XHRsb2NhbENhY2hlLmNvbGxlY3Rpb25zXG5cdFx0KS5wcm9jZXNzKCk7XG5cdH1cblxuXHRhZGRTaW5nbGVJdGVtIChcblx0XHRpdGVtRW50cnk6IEl0ZW1FbnRyeSxcblx0XHRvcHRpb25zOiBJdGVtUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlICYge2VkaXQ6IHRydWV9LFxuXHRcdGlzUm9vdD86IGJvb2xlYW4sXG5cdFx0bG9jYWxDYWNoZT86IExvY2FsQ2FjaGVcblx0KTogRWRpdFJlc291cmNlO1xuXG5cdGFkZFNpbmdsZUl0ZW0gKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5LFxuXHRcdG9wdGlvbnM6IEl0ZW1SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UgJiB7cmVtb3RlOiB0cnVlfSxcblx0XHRpc1Jvb3Q/OiBib29sZWFuLFxuXHRcdGxvY2FsQ2FjaGU/OiBMb2NhbENhY2hlXG5cdCk6IFJlbW90ZVZpZXdSZXNvdXJjZTtcblxuXHRhZGRTaW5nbGVJdGVtIChcblx0XHRpdGVtRW50cnk6IEl0ZW1FbnRyeSxcblx0XHRvcHRpb25zOiBJdGVtUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlLFxuXHRcdGlzUm9vdD86IGJvb2xlYW4sXG5cdFx0bG9jYWxDYWNoZT86IExvY2FsQ2FjaGVcblx0KTogTG9jYWxWaWV3UmVzb3VyY2U7XG5cblx0YWRkU2luZ2xlSXRlbSAoXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnksXG5cdFx0b3B0aW9uczogSXRlbVJlc291cmNlT3B0aW9uc0ludGVyZmFjZSA9IHt9LFxuXHRcdGlzUm9vdD86IGJvb2xlYW4sXG5cdFx0bG9jYWxDYWNoZTogTG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpXG5cdCkge1xuXHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUl0ZW1SZXNvdXJjZShsb2NhbENhY2hlLml0ZW1zLmFkZChpdGVtRW50cnkpLCBvcHRpb25zLCBpc1Jvb3QpO1xuXHR9XG5cblx0YWRkU2luZ2xlSXRlbXMgKFxuXHRcdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcblx0XHRvcHRpb25zOiBJdGVtUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlICYge2VkaXQ6IHRydWV9XG5cdCk6IEVkaXRSZXNvdXJjZVtdO1xuXG5cdGFkZFNpbmdsZUl0ZW1zIChcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXG5cdFx0b3B0aW9uczogSXRlbVJlc291cmNlT3B0aW9uc0ludGVyZmFjZSAmIHtyZW1vdGU6IHRydWV9XG5cdCk6IFJlbW90ZVZpZXdSZXNvdXJjZVtdO1xuXG5cdGFkZFNpbmdsZUl0ZW1zIChcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXG5cdFx0b3B0aW9uczogSXRlbVJlc291cmNlT3B0aW9uc0ludGVyZmFjZVxuXHQpOiBMb2NhbFZpZXdSZXNvdXJjZVtdO1xuXG5cdGFkZFNpbmdsZUl0ZW1zIChcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXG5cdFx0b3B0aW9uczogSXRlbVJlc291cmNlT3B0aW9uc0ludGVyZmFjZVxuXHQpIHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXG5cdFx0XHRyZXN1bHQucHVzaCh0aGlzLmFkZFNpbmdsZUl0ZW0oaXRlbUVudHJ5LCBvcHRpb25zLCBmYWxzZSwgbG9jYWxDYWNoZSkpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGFkZENvbGxlY3Rpb24gKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdENvbGxlY3Rpb246IHRydWUsIGVkaXRJdGVtczogdHJ1ZX1cblx0KTogQ29sbGVjdGlvbkVkaXRSZXNvdXJjZTxFZGl0UmVzb3VyY2U+O1xuXG5cdGFkZENvbGxlY3Rpb24gKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdEl0ZW1zOiB0cnVlfVxuXHQpOiBDb2xsZWN0aW9uVmlld1Jlc291cmNlPEVkaXRSZXNvdXJjZT47XG5cblx0YWRkQ29sbGVjdGlvbiAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0Q29sbGVjdGlvbjogdHJ1ZSwgcmVtb3RlSXRlbXM6IHRydWV9XG5cdCk6IENvbGxlY3Rpb25FZGl0UmVzb3VyY2U8UmVtb3RlVmlld1Jlc291cmNlPjtcblxuXHRhZGRDb2xsZWN0aW9uIChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlICYge3JlbW90ZUl0ZW1zOiB0cnVlfVxuXHQpOiBDb2xsZWN0aW9uVmlld1Jlc291cmNlPFJlbW90ZVZpZXdSZXNvdXJjZT47XG5cblx0YWRkQ29sbGVjdGlvbiAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0Q29sbGVjdGlvbjogdHJ1ZX1cblx0KTogQ29sbGVjdGlvbkVkaXRSZXNvdXJjZTxMb2NhbFZpZXdSZXNvdXJjZT47XG5cblx0YWRkQ29sbGVjdGlvbiAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZVxuXHQpOiBDb2xsZWN0aW9uVmlld1Jlc291cmNlPExvY2FsVmlld1Jlc291cmNlPjtcblxuXHRhZGRDb2xsZWN0aW9uIChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlXG5cdCkge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblxuXHRcdGxvY2FsQ2FjaGUuY29sbGVjdGlvbnMuYWRkKGNvbGxlY3Rpb25FbnRyeSk7XG5cblx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UoY29sbGVjdGlvbkVudHJ5LCBvcHRpb25zKTtcblx0fVxuXG5cdHByaXZhdGUgY3JlYXRlSXRlbVJlc291cmNlcyAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcblx0XHRvcHRpb25zOiBJdGVtUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlICYge2VkaXQ6IHRydWV9LFxuXHRcdGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGVcblx0KTogRWRpdFJlc291cmNlW107XG5cblx0cHJpdmF0ZSBjcmVhdGVJdGVtUmVzb3VyY2VzIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRcdG9wdGlvbnM6IEl0ZW1SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UgJiB7cmVtb3RlOiB0cnVlfSxcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlXG5cdCk6IFJlbW90ZVZpZXdSZXNvdXJjZVtdO1xuXG5cdHByaXZhdGUgY3JlYXRlSXRlbVJlc291cmNlcyAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcblx0XHRvcHRpb25zOiBJdGVtUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlLFxuXHRcdGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGVcblx0KTogTG9jYWxWaWV3UmVzb3VyY2VbXTtcblxuXHRwcml2YXRlIGNyZWF0ZUl0ZW1SZXNvdXJjZXMgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXG5cdFx0b3B0aW9uczogSXRlbVJlc291cmNlT3B0aW9uc0ludGVyZmFjZSxcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlXG5cdCkge1xuXHRcdGNvbnN0IHJlc3VsdDogSXRlbVJlc291cmNlW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRyZXN1bHQucHVzaChsb2NhbENhY2hlLmNyZWF0ZUl0ZW1SZXNvdXJjZShpdGVtRW50cnksIG9wdGlvbnMpKTtcblxuXHRcdFx0aWYgKGl0ZW1UeXBlID09PSAnUHJvamVjdG5vdGl0aWUnKSB7XG5cdFx0XHRcdGNyZWF0ZVBhdGgoXG5cdFx0XHRcdFx0bG9jYWxDYWNoZS50YWJSZXF1ZXN0UGFyYW1ldGVycyxcblx0XHRcdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcblx0XHRcdFx0XHRbe30sIHtub19ub3RpZmljYXRpb246IHRydWV9XVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRwcm9jZXNzTGlua2VkSXRlbXMgKFxuXHRcdGxpbmtlZEVudHJpZXM6IExpbmtlZEl0ZW1FbnRyeU1hcFtdLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlICYge2VkaXQ6IHRydWV9LFxuXHRcdGFkZFRvQ29sbGVjdGlvbnM6IGJvb2xlYW5cblx0KTogSXRlbVJlc291cmNlc0l0ZW1UeXBlTWFwPEVkaXRSZXNvdXJjZT47XG5cblx0cHJvY2Vzc0xpbmtlZEl0ZW1zIChcblx0XHRsaW5rZWRFbnRyaWVzOiBMaW5rZWRJdGVtRW50cnlNYXBbXSxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSAmIHtyZW1vdGU6IHRydWV9LFxuXHRcdGFkZFRvQ29sbGVjdGlvbnM6IGJvb2xlYW5cblx0KTogSXRlbVJlc291cmNlc0l0ZW1UeXBlTWFwPFJlbW90ZVZpZXdSZXNvdXJjZT47XG5cblx0cHJvY2Vzc0xpbmtlZEl0ZW1zIChcblx0XHRsaW5rZWRFbnRyaWVzOiBMaW5rZWRJdGVtRW50cnlNYXBbXSxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSxcblx0XHRhZGRUb0NvbGxlY3Rpb25zOiBib29sZWFuXG5cdCk6IEl0ZW1SZXNvdXJjZXNJdGVtVHlwZU1hcDxMb2NhbFZpZXdSZXNvdXJjZT47XG5cblx0cHJvY2Vzc0xpbmtlZEl0ZW1zIChcblx0XHRsaW5rZWRFbnRyaWVzOiBMaW5rZWRJdGVtRW50cnlNYXBbXSxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSxcblx0XHRhZGRUb0NvbGxlY3Rpb25zOiBib29sZWFuID0gdHJ1ZVxuXHQpIHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtUmVzb3VyY2VzSXRlbVR5cGVNYXAgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgZW50cnkgb2YgbGlua2VkRW50cmllcykge1xuXHRcdFx0Y29uc3QgaXRlbVR5cGUgPSBlbnRyeS5pdGVtVHlwZTtcblxuXHRcdFx0cmVzdWx0W2l0ZW1UeXBlXSA9IHRoaXMuY3JlYXRlSXRlbVJlc291cmNlcyhlbnRyeS5pdGVtVHlwZSwgZW50cnkuaXRlbUVudHJpZXMsIG9wdGlvbnMsIGxvY2FsQ2FjaGUpO1xuXHRcdH1cblxuXHRcdGlmICghYWRkVG9Db2xsZWN0aW9ucylcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cblx0XHQvLyB0aGUgaXRlbUVudHJpZXMgYXJlIGluIHRvcC1kb3duIG9yZGVyLCBzbyBjYWxsIGZvciBlYWNoIGl0ZW0gdHlwZSBzZXBhcmF0ZWx5XG5cdFx0Zm9yIChjb25zdCBlbnRyeSBvZiBsaW5rZWRFbnRyaWVzKVxuXHRcdFx0dGhpcy5nZXRDb2xsZWN0aW9uTWF0Y2hlcihlbnRyeS5pdGVtRW50cmllcywgZmFsc2UpLmFkZFRvQ29sbGVjdGlvbnMoKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRleHBhbmRQcm9jZXNzTGlua2VkSXRlbXMgKFxuXHRcdGxpbmtlZEVudHJpZXM6IExpbmtlZEl0ZW1FbnRyeU1hcFtdLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlICYge2VkaXQ6IHRydWV9XG5cdCk6IFByb21pc2VJbnRlcmZhY2U8SXRlbVJlc291cmNlc0l0ZW1UeXBlTWFwPEVkaXRSZXNvdXJjZT4+O1xuXG5cdGV4cGFuZFByb2Nlc3NMaW5rZWRJdGVtcyAoXG5cdFx0bGlua2VkRW50cmllczogTGlua2VkSXRlbUVudHJ5TWFwW10sXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgJiB7cmVtb3RlOiB0cnVlfVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1SZXNvdXJjZXNJdGVtVHlwZU1hcDxSZW1vdGVWaWV3UmVzb3VyY2U+PjtcblxuXHRleHBhbmRQcm9jZXNzTGlua2VkSXRlbXMgKFxuXHRcdGxpbmtlZEVudHJpZXM6IExpbmtlZEl0ZW1FbnRyeU1hcFtdLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8SXRlbVJlc291cmNlc0l0ZW1UeXBlTWFwPExvY2FsVmlld1Jlc291cmNlPj47XG5cblx0ZXhwYW5kUHJvY2Vzc0xpbmtlZEl0ZW1zIChcblx0XHRsaW5rZWRFbnRyaWVzOiBMaW5rZWRJdGVtRW50cnlNYXBbXSxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZVxuXHQpIHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cdFx0bGV0IHByb21pc2VDaGFpbiA9IHRoaXMucHJvbWlzZUludGVyZmFjZS53aGVuKHt9KTtcblxuXHRcdGZvciAoY29uc3QgZW50cnkgb2YgbGlua2VkRW50cmllcykge1xuXHRcdFx0Ly8gdGhlIGl0ZW1FbnRyaWVzIGFyZSBpbiB0b3AtZG93biBvcmRlciwgc28gY2FsbCBmb3IgZWFjaCBpdGVtIHR5cGUgc2VwYXJhdGVseVxuXHRcdFx0cHJvbWlzZUNoYWluID0gcHJvbWlzZUNoYWluLnRoZW4oXG5cdFx0XHRcdHRoaXMuY29uc3RydWN0T25JdGVtc0V4cGFuZGVkKGVudHJ5Lml0ZW1UeXBlLCBlbnRyeS5pdGVtRW50cmllcywgb3B0aW9ucywgbG9jYWxDYWNoZSksXG5cdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcHJvbWlzZUNoYWluO1xuXHR9XG5cblx0cHJpdmF0ZSBjb25zdHJ1Y3RPbkl0ZW1zRXhwYW5kZWQgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXG5cdFx0aXRlbU9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlICYge2VkaXQ6IHRydWV9LFxuXHRcdGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGVcblx0KTogKGRlc3RpbmF0aW9uOiBJdGVtUmVzb3VyY2VzSXRlbVR5cGVNYXApID0+IFByb21pc2VJbnRlcmZhY2U8SXRlbVJlc291cmNlc0l0ZW1UeXBlTWFwPEVkaXRSZXNvdXJjZT4+O1xuXG5cdHByaXZhdGUgY29uc3RydWN0T25JdGVtc0V4cGFuZGVkIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRcdGl0ZW1PcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSAmIHtyZW1vdGU6IHRydWV9LFxuXHRcdGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGVcblx0KTogKGRlc3RpbmF0aW9uOiBJdGVtUmVzb3VyY2VzSXRlbVR5cGVNYXApID0+IFByb21pc2VJbnRlcmZhY2U8SXRlbVJlc291cmNlc0l0ZW1UeXBlTWFwPFJlbW90ZVZpZXdSZXNvdXJjZT4+O1xuXG5cdHByaXZhdGUgY29uc3RydWN0T25JdGVtc0V4cGFuZGVkIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRcdGl0ZW1PcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSxcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlXG5cdCk6IChkZXN0aW5hdGlvbjogSXRlbVJlc291cmNlc0l0ZW1UeXBlTWFwKSA9PiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1SZXNvdXJjZXNJdGVtVHlwZU1hcDxMb2NhbFZpZXdSZXNvdXJjZT4+O1xuXG5cdHByaXZhdGUgY29uc3RydWN0T25JdGVtc0V4cGFuZGVkIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRcdGl0ZW1PcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSxcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlXG5cdCkge1xuXHRcdHJldHVybiBkZXN0aW5hdGlvbiA9PiB7XG5cdFx0XHRyZXR1cm4gdGhpcy5leHBhbmRBZGRUb0NvbGxlY3Rpb25zKGl0ZW1UeXBlLCBpdGVtRW50cmllcywgbnVsbCwgbG9jYWxDYWNoZSkudGhlbihcblx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdGRlc3RpbmF0aW9uW2l0ZW1UeXBlXSA9IHRoaXMuY3JlYXRlSXRlbVJlc291cmNlcyhpdGVtVHlwZSwgaXRlbUVudHJpZXMsIGl0ZW1PcHRpb25zLCBsb2NhbENhY2hlKTtcblxuXHRcdFx0XHRcdHJldHVybiBkZXN0aW5hdGlvbjtcblx0XHRcdFx0fSxcblx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHQpO1xuXHRcdH07XG5cdH1cblxuXHRwcml2YXRlIGV4cGFuZEFkZFRvQ29sbGVjdGlvbnM8VCBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZSA9IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U+IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRcdHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZTogVCxcblx0XHRsb2NhbENhY2hlPzogTG9jYWxDYWNoZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPFRbJ2l0ZW1zJ10+O1xuXG5cdHByaXZhdGUgZXhwYW5kQWRkVG9Db2xsZWN0aW9ucyAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcblx0XHRyZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2U/OiBudWxsLFxuXHRcdGxvY2FsQ2FjaGU/OiBMb2NhbENhY2hlXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8bnVsbD47XG5cblx0cHJpdmF0ZSBleHBhbmRBZGRUb0NvbGxlY3Rpb25zPFQgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2UgPSBDb2xsZWN0aW9uVmlld1Jlc291cmNlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcblx0XHRyZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2U/OiBUIHwgbnVsbCxcblx0XHRsb2NhbENhY2hlPzogTG9jYWxDYWNoZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPFRbJ2l0ZW1zJ10gfCBudWxsPjtcblxuXHRwcml2YXRlIGV4cGFuZEFkZFRvQ29sbGVjdGlvbnM8VCBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZSA9IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U+IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRcdHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZTogVCB8IG51bGwgPSBudWxsLFxuXHRcdGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPFRbJ2l0ZW1zJ10gfCBudWxsPiB7XG5cdFx0Y29uc3QgY29sbGVjdGlvbk1hdGNoZXIgPSB0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRbbG9jYWxDYWNoZS5jb2xsZWN0aW9uc10sXG5cdFx0XHRmYWxzZSxcblx0XHRcdGZhbHNlXG5cdFx0KTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxuXHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIuZXhwYW5kKGl0ZW1FbnRyeSk7XG5cblx0XHRjb25zdCBjb2x1bW5TdXBlcnNldCA9IHRoaXMuZ2V0Q29sdW1uU3VwZXJzZXQoY29sbGVjdGlvbk1hdGNoZXIuZ2V0Q29sbGVjdGlvbnNXaXRoRml0dGluZ0l0ZW1zKCkpO1xuXG5cdFx0aWYgKGNvbHVtblN1cGVyc2V0ID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZUludGVyZmFjZS53aGVuKENvbGxlY3Rpb25SZXNvdXJjZSA9PT0gbnVsbCA/IG51bGwgOiBbXSk7XG5cblx0XHRyZXR1cm4gdGhpcy5pdGVtSGFuZGxlci5leHBhbmRMb2NhbEVudHJpZXMoXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdGl0ZW1FbnRyaWVzLFxuXHRcdFx0Y29sdW1uU3VwZXJzZXQucmVxdWVzdCxcblx0XHRcdGNvbHVtblN1cGVyc2V0LnJlc3BvbnNlLFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtc1xuXHRcdCkudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25NYXRjaGVyLmFkZFRvQ29sbGVjdGlvbnMocmVzdWx0Q29sbGVjdGlvblJlc291cmNlKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Ly8gd2UgY291bGQgbW92ZSB0aGlzIHRvIHRoZSBDb2xsZWN0aW9uTWF0Y2hlciBpZiB3ZSBlbmZvcmNlIGEgc2luZ2xlIGl0ZW0gdHlwZVxuXHRwcml2YXRlIGdldENvbHVtblN1cGVyc2V0IChjb2xsZWN0aW9uRW50cmllczogQ29sbGVjdGlvbkVudHJ5W10pOiBDb2x1bW5TZXQgfCBudWxsIHtcblx0XHRjb25zdCBjb2x1bW5TZXRJZE1hcDoge1tjb2x1bW5TZXRJZDogbnVtYmVyXTogYm9vbGVhbn0gPSB7fTtcblxuXHRcdGlmIChjb2xsZWN0aW9uRW50cmllcy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdGxldCByZXN1bHQgPSBjb2xsZWN0aW9uRW50cmllc1swXS5jb2x1bW5zO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDE7IGkgPCBjb2xsZWN0aW9uRW50cmllcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gY29sbGVjdGlvbkVudHJpZXNbaV07XG5cdFx0XHRjb25zdCBjb2x1bW5TZXQgPSBjb2xsZWN0aW9uRW50cnkuY29sdW1ucztcblxuXHRcdFx0aWYgKGNvbHVtblNldElkTWFwW2NvbHVtblNldC5pZF0gPT09IHRydWUpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRjb2x1bW5TZXRJZE1hcFtjb2x1bW5TZXQuaWRdID0gdHJ1ZTtcblxuXHRcdFx0cmVzdWx0ID0gcmVzdWx0Lm1lcmdlKGNvbHVtblNldCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldExvY2FsQ2FjaGUgKCk6IExvY2FsQ2FjaGUge1xuXHRcdHJldHVybiB0aGlzLmxvY2FsQ2FjaGVNYW5hZ2VyLmdldEN1cnJlbnRMb2NhbENhY2hlKHRoaXMuYXV0aEludGVyZmFjZS5nZXRVbmlxdWVVc2VySWQoKSk7XG5cdH1cblxuXHRyZXNldExvY2FsQ2FjaGUgKCkge1xuXHRcdGNvbnN0IG9sZExvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5sb2NhbENhY2hlRmFjdG9yeS5jb25zdHJ1Y3QoKTtcblxuXHRcdG9sZExvY2FsQ2FjaGUuY2xlYXJSZXNvdXJjZXMoKTtcblxuXHRcdHRoaXMubG9jYWxDYWNoZU1hbmFnZXIuc2V0Q3VycmVudExvY2FsQ2FjaGUodGhpcy5hdXRoSW50ZXJmYWNlLmdldFVuaXF1ZVVzZXJJZCgpLCBsb2NhbENhY2hlKTtcblx0fVxuXG5cdGFkZFRvQ29sbGVjdGlvbnM8VCBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZSA9IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U+IChcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXG5cdFx0cmVzdWx0Q29sbGVjdGlvblJlc291cmNlOiBUXG5cdCk6IFRbJ2l0ZW1zJ107XG5cblx0YWRkVG9Db2xsZWN0aW9ucyAoXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRcdHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZT86IG51bGxcblx0KTogbnVsbDtcblxuXHRhZGRUb0NvbGxlY3Rpb25zPFQgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2UgPSBDb2xsZWN0aW9uVmlld1Jlc291cmNlPiAoXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRcdHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZT86IFQgfCBudWxsXG5cdCkge1xuXHRcdHJldHVybiB0aGlzLmdldENvbGxlY3Rpb25NYXRjaGVyKGl0ZW1FbnRyaWVzKS5hZGRUb0NvbGxlY3Rpb25zKHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZSk7XG5cdH1cblxuXHRyZW1vdmVGcm9tQ29sbGVjdGlvbnM8VCBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZSA9IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U+IChcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXG5cdFx0cmVzdWx0Q29sbGVjdGlvblJlc291cmNlOiBUXG5cdCk6IFRbJ2l0ZW1zJ107XG5cblx0cmVtb3ZlRnJvbUNvbGxlY3Rpb25zIChcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXG5cdFx0cmVzdWx0Q29sbGVjdGlvblJlc291cmNlPzogbnVsbFxuXHQpOiBudWxsO1xuXG5cdHJlbW92ZUZyb21Db2xsZWN0aW9uczxUIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlID0gQ29sbGVjdGlvblZpZXdSZXNvdXJjZT4gKFxuXHRcdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcblx0XHRyZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2U/OiBUIHwgbnVsbFxuXHQpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRDb2xsZWN0aW9uTWF0Y2hlcihpdGVtRW50cmllcywgZmFsc2UpLnJlbW92ZUZyb21Db2xsZWN0aW9ucyhyZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2UpO1xuXHR9XG5cblx0c2F2ZUxvY2FsIChpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSkge1xuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGl0ZW1SZXNvdXJjZS5lbnRyeTtcblxuXHRcdGl0ZW1FbnRyeS5zZXREaXNwbGF5TmFtZSgpO1xuXHRcdHRoaXMuYWRkVG9Db2xsZWN0aW9ucyhbaXRlbUVudHJ5XSk7XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlSW50ZXJmYWNlLndoZW4oaXRlbVJlc291cmNlKTtcblx0fVxuXG5cdHVwZGF0ZUl0ZW1JZE1hcCAoY29sbGVjdGlvbk1hcDogYW55LCBjb252ZXJzaW9uTWFwOiBDb252ZXJzaW9uTWFwKTogdm9pZCB7XG5cdFx0aWYgKGNvbnZlcnNpb25NYXAgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybjtcblxuXHRcdGZvciAoY29uc3Qgb2xkSWQgaW4gY29udmVyc2lvbk1hcCkge1xuXHRcdFx0Y29uc3QgbmV3SWQgPSBjb252ZXJzaW9uTWFwW29sZElkXTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25NYXBbb2xkSWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRjb2xsZWN0aW9uTWFwW25ld0lkXSA9IGNvbGxlY3Rpb25NYXBbb2xkSWRdO1xuXHRcdFx0ZGVsZXRlIGNvbGxlY3Rpb25NYXBbb2xkSWRdO1xuXHRcdH1cblx0fVxuXG5cdGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZSAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksXG5cdFx0cmVzb3VyY2VPcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlICYge2VkaXRJdGVtczogdHJ1ZSwgZWRpdENvbGxlY3Rpb246IHRydWV9XG5cdCk6IENvbGxlY3Rpb25FZGl0UmVzb3VyY2U8RWRpdFJlc291cmNlPjtcblxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UgKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdHJlc291cmNlT3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0SXRlbXM6IHRydWV9XG5cdCk6IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8RWRpdFJlc291cmNlPjtcblxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UgKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdHJlc291cmNlT3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZSAmIHtyZW1vdGVJdGVtczogdHJ1ZSwgZWRpdENvbGxlY3Rpb246IHRydWV9XG5cdCk6IENvbGxlY3Rpb25FZGl0UmVzb3VyY2U8UmVtb3RlVmlld1Jlc291cmNlPjtcblxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UgKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdHJlc291cmNlT3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZSAmIHtyZW1vdGVJdGVtczogdHJ1ZX1cblx0KTogQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxSZW1vdGVWaWV3UmVzb3VyY2U+O1xuXG5cdGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZSAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksXG5cdFx0cmVzb3VyY2VPcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlICYge2VkaXRDb2xsZWN0aW9uOiB0cnVlfVxuXHQpOiBDb2xsZWN0aW9uRWRpdFJlc291cmNlPExvY2FsVmlld1Jlc291cmNlPjtcblxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UgKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdHJlc291cmNlT3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZVxuXHQpOiBDb2xsZWN0aW9uVmlld1Jlc291cmNlPExvY2FsVmlld1Jlc291cmNlPjtcblxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UgKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdHJlc291cmNlT3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZVxuXHQpIHtcblx0XHRyZXR1cm4gdGhpcy5hZGRDb2xsZWN0aW9uKGNvbGxlY3Rpb25FbnRyeSwgcmVzb3VyY2VPcHRpb25zKTtcblx0fVxuXG5cdGNyZWF0ZUl0ZW1SZXNvdXJjZSAoXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnksXG5cdFx0b3B0aW9uczogSXRlbVJlc291cmNlT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0OiB0cnVlfSxcblx0XHRpc1Jvb3Q6IGJvb2xlYW5cblx0KTogRWRpdFJlc291cmNlO1xuXG5cdGNyZWF0ZUl0ZW1SZXNvdXJjZSAoXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnksXG5cdFx0b3B0aW9uczogSXRlbVJlc291cmNlT3B0aW9uc0ludGVyZmFjZSAmIHtyZW1vdGU6IHRydWV9LFxuXHRcdGlzUm9vdDogYm9vbGVhblxuXHQpOiBSZW1vdGVWaWV3UmVzb3VyY2U7XG5cblx0Y3JlYXRlSXRlbVJlc291cmNlIChcblx0XHRpdGVtRW50cnk6IEl0ZW1FbnRyeSxcblx0XHRvcHRpb25zOiBJdGVtUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlLFxuXHRcdGlzUm9vdDogYm9vbGVhblxuXHQpOiBMb2NhbFZpZXdSZXNvdXJjZTtcblxuXHRjcmVhdGVJdGVtUmVzb3VyY2UgKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5LFxuXHRcdG9wdGlvbnM6IEl0ZW1SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UsXG5cdFx0aXNSb290OiBib29sZWFuXG5cdCkge1xuXHRcdHJldHVybiB0aGlzLmFkZFNpbmdsZUl0ZW0oaXRlbUVudHJ5LCBvcHRpb25zLCBpc1Jvb3QpO1xuXHR9XG5cblx0b25CZWZvcmVTYXZlIChrZXk6IHN0cmluZywgY2FsbGJhY2s6IChsb2NhbENhY2hlOiBMb2NhbENhY2hlKSA9PiBhbnksIGNvbmRpdGlvbj86IExvY2FsQ2FjaGVDYWxsYmFja0NvbmRpdGlvbikge1xuXHRcdHJldHVybiB0aGlzLmdldExvY2FsQ2FjaGUoKS5vbkJlZm9yZVNhdmUoa2V5LCBjYWxsYmFjaywgY29uZGl0aW9uKTtcblx0fVxuXG5cdG9uU2F2ZVN1Y2Nlc3MgKGtleTogc3RyaW5nLCBjYWxsYmFjazogT25TYXZlQ2FsbGJhY2ssIGNvbmRpdGlvbj86IExvY2FsQ2FjaGVDYWxsYmFja0NvbmRpdGlvbikge1xuXHRcdHJldHVybiB0aGlzLmdldExvY2FsQ2FjaGUoKS5vblNhdmVTdWNjZXNzKGtleSwgY2FsbGJhY2ssIGNvbmRpdGlvbik7XG5cdH1cbn1cbiIsImltcG9ydCB7IFF1ZXJ5TWF0Y2hlckZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IENvbGxlY3Rpb25RdWVyeSwgSXRlbUVudHJ5TWFwLCBJdGVtRW50cnlQYXJlbnRJZE1hcCwgSXRlbUlkLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIEl0ZW1DYWNoZSB7XG5cdHByaXZhdGUgZW50cmllczogSXRlbUVudHJ5TWFwID0ge307XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeVxuXHQpIHtcblx0fVxuXG5cdHNvbWUgKGNhbGxiYWNrOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGJvb2xlYW4pIHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBlbnRyaWVzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBlbnRyaWVzW2l0ZW1UeXBlXSkge1xuXHRcdFx0XHRpZiAoY2FsbGJhY2soZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXSkpXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Z2V0QnlJdGVtVHlwZSAoaXRlbVR5cGU6IEl0ZW1UeXBlKSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xuXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBlbnRyaWVzKVxuXHRcdFx0cmVzdWx0LnB1c2goZW50cmllc1tpdGVtSWRdKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRnZXRCeVF1ZXJ5IChpdGVtVHlwZTogSXRlbVR5cGUsIHF1ZXJ5OiBDb2xsZWN0aW9uUXVlcnkpIHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVtdID0gW107XG5cblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGVudHJpZXNbaXRlbUlkXTtcblxuXHRcdFx0aWYgKGl0ZW1FbnRyeS5pc0RlZmVycmVkKCkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAodGhpcy5tYXRjaFF1ZXJ5KGl0ZW1FbnRyeSwgcXVlcnkpKVxuXHRcdFx0XHRyZXN1bHQucHVzaChpdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRnZXRMb2NhbEJ5UXVlcnkgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcXVlcnk6IENvbGxlY3Rpb25RdWVyeSkge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5W10gPSBbXTtcblxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllcykge1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gZW50cmllc1tpdGVtSWRdO1xuXG5cdFx0XHRpZiAoIWl0ZW1FbnRyeS5pc0xvY2FsKCkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAodGhpcy5tYXRjaFF1ZXJ5KGl0ZW1FbnRyeSwgcXVlcnkpKVxuXHRcdFx0XHRyZXN1bHQucHVzaChpdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRnZXRCeVBhcmVudCAocGFyZW50VHlwZTogSXRlbVR5cGUsIHBhcmVudElkOiBJdGVtSWQsIGl0ZW1UeXBlOiBJdGVtVHlwZSkge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5W10gPSBbXTtcblxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllcykge1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gZW50cmllc1tpdGVtSWRdO1xuXHRcdFx0Y29uc3QgcGFyZW50ID0gaXRlbUVudHJ5LnBhcmVudDtcblxuXHRcdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXG5cdFx0XHRpZiAocGFyZW50Lml0ZW1UeXBlID09PSBwYXJlbnRUeXBlICYmIHBhcmVudC5pdGVtSWQgPT0gcGFyZW50SWQpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGJhdGNoR2V0TG9jYWxCeVBhcmVudCAoXG5cdFx0cGFyZW50VHlwZTogSXRlbVR5cGUsXG5cdFx0cGFyZW50SWRzOiBJdGVtSWRbXSxcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0YWRkaXRpb25hbFF1ZXJ5OiBhbnlcblx0KTogSXRlbUVudHJ5UGFyZW50SWRNYXAge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5UGFyZW50SWRNYXAgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgb2YgcGFyZW50SWRzKVxuXHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IFtdO1xuXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBlbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSBlbnRyaWVzW2l0ZW1JZF07XG5cdFx0XHRjb25zdCBwYXJlbnQgPSBpdGVtRW50cnkucGFyZW50O1xuXG5cdFx0XHRpZiAocGFyZW50ID09PSBudWxsKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0aWYgKHBhcmVudC5pdGVtVHlwZSAhPT0gcGFyZW50VHlwZSB8fCByZXN1bHRbcGFyZW50Lml0ZW1JZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGlmICghaXRlbUVudHJ5LmlzTG9jYWwoKSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGlmIChhZGRpdGlvbmFsUXVlcnkgPT09IG51bGwgfHwgdGhpcy5tYXRjaFF1ZXJ5KGl0ZW1FbnRyeSwgYWRkaXRpb25hbFF1ZXJ5KSlcblx0XHRcdFx0cmVzdWx0W3BhcmVudC5pdGVtSWRdLnB1c2goaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Zm9yRWFjaCAoY2FsbGJhY2s6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gdm9pZCkge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGVudHJpZXMpIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGVudHJpZXNbaXRlbVR5cGVdKVxuXHRcdFx0XHRjYWxsYmFjayhlbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdKTtcblx0XHR9XG5cdH1cblxuXHR0b0FycmF5ICgpIHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzO1xuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5W10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gZW50cmllcykge1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllc1tpdGVtVHlwZV0pXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF0pO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRhZGQgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KTogSXRlbUVudHJ5IHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzO1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xuXG5cdFx0aWYgKGVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRlbnRyaWVzW2l0ZW1UeXBlXSA9IHt9O1xuXG5cdFx0cmV0dXJuIGVudHJpZXNbaXRlbVR5cGVdW2l0ZW1FbnRyeS5pdGVtSWRdID0gaXRlbUVudHJ5O1xuXHR9XG5cblx0Z2V0IChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogc3RyaW5nIHwgSXRlbUlkKTogdW5kZWZpbmVkIHwgSXRlbUVudHJ5IHtcblx0XHRyZXR1cm4gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXHR9XG5cblx0Ly8gc2hvdWxkIGJlIGZhc3Rcblx0Y29udGFpbnMgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBzdHJpbmcgfCBJdGVtSWQpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXSAhPT0gdW5kZWZpbmVkO1xuXHR9XG5cblx0dXBkYXRlSXRlbUlkIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgb2xkSXRlbUlkOiBzdHJpbmcgfCBJdGVtSWQpOiBJdGVtRW50cnkge1xuXHRcdGNvbnN0IGVudHJ5TWFwID0gdGhpcy5lbnRyaWVzW2l0ZW1FbnRyeS5pdGVtVHlwZV07XG5cblx0XHRkZWxldGUgZW50cnlNYXBbb2xkSXRlbUlkXTtcblx0XHRyZXR1cm4gZW50cnlNYXBbaXRlbUVudHJ5Lml0ZW1JZF0gPSBpdGVtRW50cnk7XG5cdH1cblxuXHRjbGVhciAoaXRlbUVudHJ5OiBJdGVtRW50cnkpOiBib29sZWFuIHtcblx0XHRpZiAoaXRlbUVudHJ5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMuZW50cmllcyA9IHt9O1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuY2xlYXJCeUl0ZW1JZChpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWQpO1xuXHR9XG5cblx0Y2xlYXJCeUl0ZW1JZCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xuXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJldHVybiBkZWxldGUgZW50cmllc1tpdGVtSWRdO1xuXHR9XG5cblx0bWF0Y2hRdWVyeSAoaXRlbUVudHJ5OiBJdGVtRW50cnksIHF1ZXJ5OiBDb2xsZWN0aW9uUXVlcnkpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdGl0ZW1FbnRyeS5pdGVtVHlwZSxcblx0XHRcdGl0ZW1FbnRyeS5nZXRGaWVsZHMoKSxcblx0XHRcdGl0ZW1FbnRyeS5wYXJlbnRcblx0XHQpLm1hdGNoUXVlcnkocXVlcnkub2JqZWN0KSA9PT0gdHJ1ZTsgLy8gVE9ETzogbWF5YmU/XG5cdH1cbn1cbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG5pbXBvcnQgeyBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBBTExfUEVSTUlTU0lPTlMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQXV0aEludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgSXRlbUVudHJ5LCBJdGVtRW50cnlPcHRpb25zIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7XG5cdEFwaVJlc3BvbnNlLFxuXHRGaWVsZE1hcCxcblx0SXRlbUVycm9yLFxuXHRJdGVtSWQsXG5cdEl0ZW1JZENvbnZlcnNpb25NYXAsXG5cdEl0ZW1PcHRpb25zSW50ZXJmYWNlLFxuXHRJdGVtVHlwZVxufSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBJdGVtRW50cnlTZXJ2aWNlIHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYXV0aEludGVyZmFjZTogQXV0aEludGVyZmFjZSxcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2Vcblx0KSB7XG5cblx0fVxuXG5cdHByb2Nlc3NPcHRpb25zIChvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSk6IEl0ZW1FbnRyeU9wdGlvbnMge1xuXHRcdHJldHVybiBuZXcgSXRlbUVudHJ5T3B0aW9ucyhvcHRpb25zKTtcblx0fVxuXG5cdC8vIHRvZG86IHRyYW5zbGF0ZVxuXHRjcmVhdGVVbmZvdW5kUmVtb3RlSXRlbUVycm9yICgpOiBJdGVtRXJyb3Ige1xuXHRcdHJldHVybiB7bWVzc2FnZTogJ1RoZSByZXF1ZXN0ZWQgaXRlbSBjb3VsZCBub3QgYmUgZm91bmQgLyB5b3VyIGN1cnJlbnQgcGVybWlzc2lvbnMgYXJlIG5vdCBzdWZmaWNpZW50J307XG5cdH1cblxuXHRjcmVhdGVVbmZvdW5kTG9jYWxJdGVtRXJyb3IgKGl0ZW1UeXBlOiBJdGVtVHlwZSkge1xuXHRcdHJldHVybiB7bWVzc2FnZTogJ0EgbG9jYWwgaXRlbSBvZiB0eXBlICcgKyBpdGVtVHlwZSArICcgY291bGQgbm90IGJlIGZvdW5kJ307XG5cdH1cblxuXHRjcmVhdGVMb2NhbENvbnZlcnNpb25NYXAgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtSWQ6IEl0ZW1JZCxcblx0XHRkb0V4dGVuZDogYm9vbGVhbiA9IGZhbHNlLFxuXHRcdGFwaVJlc3BvbnNlOiBBcGlSZXNwb25zZVxuXHQpOiBJdGVtSWRDb252ZXJzaW9uTWFwIHtcblx0XHRjb25zdCBhcGlJdGVtSWQgPSBhcGlSZXNwb25zZS5saW5rc1tpdGVtVHlwZV1bMF07XG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtSWRDb252ZXJzaW9uTWFwID0ge307XG5cblx0XHRyZXN1bHRbaXRlbVR5cGVdID0ge307XG5cdFx0cmVzdWx0W2l0ZW1UeXBlXVthcGlJdGVtSWRdID0gaXRlbUlkO1xuXG5cdFx0aWYgKGRvRXh0ZW5kKVxuXHRcdFx0dGhpcy5leHBhbmRMb2NhbENvbnZlcnNpb25NYXAoaXRlbVR5cGUsIGFwaUl0ZW1JZCwgYXBpUmVzcG9uc2UsIHJlc3VsdCk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0ZXhwYW5kTG9jYWxDb252ZXJzaW9uTWFwIChcblx0XHRwYXJlbnRUeXBlOiBJdGVtVHlwZSxcblx0XHRwYXJlbnRJZDogSXRlbUlkLFxuXHRcdGFwaVJlc3BvbnNlOiBBcGlSZXNwb25zZSxcblx0XHRjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwXG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IGxpbmtzID0gYXBpUmVzcG9uc2UuaXRlbXNbcGFyZW50VHlwZV1bcGFyZW50SWRdLmxpbmtzO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBsaW5rcykge1xuXHRcdFx0Y29uc3QgaWRBcnJheSA9IGxpbmtzW2l0ZW1UeXBlXTtcblxuXHRcdFx0aWYgKGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID0ge307XG5cblx0XHRcdGZvciAoY29uc3QgYXBpSXRlbUlkIG9mIGlkQXJyYXkpIHtcblx0XHRcdFx0Y29udmVyc2lvbk1hcFtpdGVtVHlwZV1bYXBpSXRlbUlkXSA9IHRoaXMua2V5U2VydmljZS5nZXRMb2NhbElkKCk7XG5cblx0XHRcdFx0dGhpcy5leHBhbmRMb2NhbENvbnZlcnNpb25NYXAoaXRlbVR5cGUsIGFwaUl0ZW1JZCwgYXBpUmVzcG9uc2UsIGNvbnZlcnNpb25NYXApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGV4cGFuZENvbnZlcnNpb25NYXAgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwLCBuZXdJdGVtSWQ/OiBJdGVtSWQpOiBJdGVtSWQge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XG5cblx0XHRsZXQgY29udmVyc2lvbk1hcEVudHJ5O1xuXG5cdFx0aWYgKGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXSA9IHt9O1xuXG5cdFx0Y29udmVyc2lvbk1hcEVudHJ5ID0gY29udmVyc2lvbk1hcFtpdGVtVHlwZV07XG5cblx0XHRpZiAoY29udmVyc2lvbk1hcEVudHJ5W2l0ZW1JZF0gIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBjb252ZXJzaW9uTWFwRW50cnlbaXRlbUlkXTtcblxuXHRcdGlmIChuZXdJdGVtSWQgPT09IHVuZGVmaW5lZClcblx0XHRcdG5ld0l0ZW1JZCA9IHRoaXMua2V5U2VydmljZS5nZXRMb2NhbElkKCk7XG5cblx0XHRyZXR1cm4gY29udmVyc2lvbk1hcEVudHJ5W2l0ZW1JZF0gPSBuZXdJdGVtSWQ7XG5cdH1cblxuXHRiYXRjaEV4cGFuZENvbnZlcnNpb25NYXAgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCk6IEl0ZW1JZENvbnZlcnNpb25NYXAge1xuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxuXHRcdFx0dGhpcy5leHBhbmRDb252ZXJzaW9uTWFwKGl0ZW1FbnRyeSwgY29udmVyc2lvbk1hcCk7XG5cblx0XHRyZXR1cm4gY29udmVyc2lvbk1hcDtcblx0fVxuXG5cdGdldENvbnZlcnNpb25WYWx1ZSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCwgbWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwKTogSXRlbUlkIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAobWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdHJldHVybiBtYXBbaXRlbVR5cGVdW2l0ZW1JZF07XG5cdH1cblxuXHRiYXRjaENsb25lIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAgPSB7fSk6IEl0ZW1FbnRyeVtdIHtcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVtdID0gW107XG5cblx0XHQvLyB0aGUgdGhlIGl0ZW1zIG1pZ2h0IHJlZmVyZW5jZSBlYWNoIG90aGVyLCBzbyB1cGRhdGUgdGhlIGNvbnZlcnNpb24gbWFwIGZpcnN0XG5cdFx0dGhpcy5iYXRjaEV4cGFuZENvbnZlcnNpb25NYXAoaXRlbUVudHJpZXMsIGNvbnZlcnNpb25NYXApO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXG5cdFx0XHRyZXN1bHQucHVzaChpdGVtRW50cnkuY2xvbmUoY29udmVyc2lvbk1hcCkpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldEZ1bGxOYW1lIChmaXJzdE5hbWU6IHN0cmluZywgaW5maXg6IHN0cmluZywgbGFzdE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGZpcnN0TmFtZS50cmltKClcblx0XHRcdC5jb25jYXQoJyAnLCBpbmZpeCkudHJpbSgpIC8vIGluZml4IGNhbiBiZSBhbiBlbXB0eSBzdHJpbmdcblx0XHRcdC5jb25jYXQoJyAnLCBsYXN0TmFtZSk7XG5cdH1cblxuXHRnZXRUaXRsZUZpZWxkIChpdGVtVHlwZTogSXRlbVR5cGUpOiBzdHJpbmcge1xuXHRcdHN3aXRjaCAoaXRlbVR5cGUpIHtcblx0XHRcdGNhc2UgJ0V4ZW1wbGFhcic6XG5cdFx0XHRcdHJldHVybiAnc2VyaWVudW1tZXInO1xuXHRcdFx0Y2FzZSAnRmFjdHV1cic6XG5cdFx0XHRcdHJldHVybiAnbnVtbWVyJztcblx0XHRcdGNhc2UgJ0ZpbGVzJzpcblx0XHRcdFx0cmV0dXJuICdmcmllbmRseW5hbWUnO1xuXHRcdFx0Y2FzZSAnRnVuY3RpZSc6XG5cdFx0XHRjYXNlICdTdGFuZGFhcmRmdW5jdGllJzpcblx0XHRcdFx0cmV0dXJuICduYWFtaW50ZXJuJztcblx0XHRcdGNhc2UgJ1Zvb3JyYWFkbXV0YXRpZSc6XG5cdFx0XHRcdHJldHVybiAnb21zY2hyaWp2aW5nJztcblx0XHRcdGNhc2UgJ0JhcmNvZGUnOlxuXHRcdFx0XHRyZXR1cm4gJ2NvZGUnO1xuXHRcdFx0Y2FzZSAnQmV0YWFsbWlkZGVsJzpcblx0XHRcdGNhc2UgJ0JldGFsaW5nc2NvbmRpdGllJzpcblx0XHRcdGNhc2UgJ0JyaWVmcGFwaWVyJzpcblx0XHRcdGNhc2UgJ1RheENsYXNzJzpcblx0XHRcdGNhc2UgJ1RheFNjaGVtYSc6XG5cdFx0XHRjYXNlICdDb25kaXRpb24nOlxuXHRcdFx0Y2FzZSAnRmFjdHV1cm1vbWVudCc6XG5cdFx0XHRjYXNlICdGdW5jdGllZ3JvZXAnOlxuXHRcdFx0Y2FzZSAnR3Jvb3Rib2VrJzpcblx0XHRcdGNhc2UgJ0luaHV1cic6XG5cdFx0XHRjYXNlICdJbmh1dXJncm9lcCc6XG5cdFx0XHRjYXNlICdJbmh1dXJtYXRlcmlhYWwnOlxuXHRcdFx0Y2FzZSAnTWF0ZXJpYWFsJzpcblx0XHRcdGNhc2UgJ01hdGVyaWFhbENhdCc6XG5cdFx0XHRjYXNlICdNZWRld2Vya2VydGFyaWVmJzpcblx0XHRcdGNhc2UgJ05vdGl0aWUnOlxuXHRcdFx0Y2FzZSAnUGxhbm5pbmdtYXRlcmlhYWwnOlxuXHRcdFx0Y2FzZSAnUHJvamVjdCc6XG5cdFx0XHRjYXNlICdTdGFmZmVsZ3JvZXAnOlxuXHRcdFx0Y2FzZSAnU3VicHJvamVjdCc6XG5cdFx0XHRjYXNlICdUYWFrJzpcblx0XHRcdGNhc2UgJ1RhZyc6XG5cdFx0XHRjYXNlICdUZW1wbGF0ZSc6XG5cdFx0XHRjYXNlICdUaWpkJzpcblx0XHRcdGNhc2UgJ1RpdGVsJzpcblx0XHRcdGNhc2UgJ1R5cGUnOlxuXHRcdFx0Y2FzZSAnVm9lcnR1aWcnOlxuXHRcdFx0XHRyZXR1cm4gJ25hYW0nO1xuXHRcdFx0Ly8gY2FzZSAnQ29udGFjdCc6XG5cdFx0XHQvLyBjYXNlICdNZWRld2Vya2VyJzpcblx0XHRcdC8vIGNhc2UgJ1BlcnNvbic6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHQvLyBvbmx5IHVzZSBkaXNwbGF5bmFtZSBmb3IgaXRlbXMgdGhhdCBkb250J3QgaGF2ZSBhIHNpbXBsZSwgd3JpdGFibGUgbmFtZSBmaWVsZFxuXHRcdFx0XHQvLyB0aGlzIGZ1bmN0aW9uIGlzIGFsc28gdXNlZCBmb3IgdGVtcGxhdGVkIGl0ZW1zXG5cdFx0XHRcdHJldHVybiAnZGlzcGxheW5hbWUnO1xuXHRcdH1cblx0fVxuXG5cdC8vIFRPRE86IHdlIGNhbiByZW1vdmUgdGhlc2Ugb25jZSBhbGwgY29sdW1ucyBhcmUgcmVzcGVjdGVkIGZvciBsb2NhbCBpdGVtcyBbUk00LTEwMzc4XVxuXHRnZXRMb2NhbERlZmF1bHRWYWx1ZXMgKCk6IEZpZWxkTWFwIHtcblx0XHRyZXR1cm4ge3Blcm1pc3Npb25zOiBBTExfUEVSTUlTU0lPTlMsIGNyZWF0b3I6IHRoaXMuYXV0aEludGVyZmFjZS5nZXRVc2VySWQoKSwgY3JlYXRlZDogbW9tZW50KCl9O1xuXHR9XG5cblx0aGFzTG9jYWxEZWZhdWx0VmFsdWUgKGNvbHVtbklkOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRzd2l0Y2ggKGNvbHVtbklkKSB7XG5cdFx0XHRjYXNlICdwZXJtaXNzaW9ucyc6XG5cdFx0XHRjYXNlICdjcmVhdG9yJzpcblx0XHRcdGNhc2UgJ2NyZWF0ZWQnOlxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cbn1cbiIsImltcG9ydCB7XG5cdEFwaUZvcm1hdHRlcixcblx0QXBpUmVzcG9uc2VQcm9jZXNzb3IsXG5cdEJhdGNoU3RhdHVzLFxuXHRDb2x1bW5FeHBhbnNpb24sXG5cdENvbHVtbkhhbmRsZXIsXG5cdENvbHVtbkluZm8sXG5cdENvbHVtblNldCxcblx0Q29sdW1uU3Vic2V0Q2FjaGUsXG5cdENvbHVtblV0aWwsXG5cdEl0ZW1DYWNoZSxcblx0SXRlbUVudHJ5U2VydmljZSxcblx0S2V5U2VydmljZVxufSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEVOVFJZX1NUQVRVUyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuXHRCYXRjaFN0YXR1c0ZhY3RvcnksXG5cdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdENvbHVtblNldEZhY3RvcnksXG5cdENvbHVtblN1YnNldENhY2hlRmFjdG9yeSxcblx0SXRlbUNhY2hlRmFjdG9yeSxcblx0SXRlbUVudHJ5RmFjdG9yeSxcblx0VGVtcGxhdGVGYWN0b3J5XG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSwgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlTGlicmFyeUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgSXRlbUVudHJ5LCBJdGVtRW50cnlPcHRpb25zLCBUZW1wbGF0ZSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge1xuXHRBcGlSZXF1ZXN0Q29sdW1ucyxcblx0QXBpUmVzcG9uc2UsIEVudHJ5UGFyZW50TnVsbCxcblx0RW50cnlTdGF0dXMsXG5cdEZpZWxkTWFwLFxuXHRJdGVtSWQsXG5cdEl0ZW1JZENvbnZlcnNpb25NYXAsXG5cdEl0ZW1UeXBlLFxuXHRMaW5rZWRJdGVtRW50cnlNYXAsXG5cdFByb21pc2VJbnRlcmZhY2UsIFJlc3BvbnNlQ29sdW1uTWFwLFxuXHRUZW1wbGF0ZUl0ZW1FbnRyeU1hcFxufSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IGdldEZpcnN0UHJvcGVydHksIGhhc1Byb3BlcnRpZXMgfSBmcm9tICcuL1V0aWwnO1xuXG4vLyB0b2RvIG1ha2UgY2xhc3NcblxuZXhwb3J0IGNsYXNzIEl0ZW1IYW5kbGVyIHtcblx0ZW50cmllczogSXRlbUNhY2hlO1xuXHR0ZW1wbGF0ZXM6IHtbaXRlbVR5cGU6IHN0cmluZ106IFRlbXBsYXRlfSA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgYmF0Y2hTdGF0dXNGYWN0b3J5OiBCYXRjaFN0YXR1c0ZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sdW1uSGFuZGxlcjogQ29sdW1uSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2x1bW5TdWJzZXRDYWNoZUZhY3Rvcnk6IENvbHVtblN1YnNldENhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWwsXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGl0ZW1DYWNoZUZhY3Rvcnk6IEl0ZW1DYWNoZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlGYWN0b3J5OiBJdGVtRW50cnlGYWN0b3J5LFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSB0ZW1wbGF0ZUZhY3Rvcnk6IFRlbXBsYXRlRmFjdG9yeVxuXHQpIHtcblx0XHR0aGlzLmVudHJpZXMgPSB0aGlzLml0ZW1DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XG5cdH1cblxuXHRmZXRjaEl0ZW0gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtSWQ6IEl0ZW1JZCxcblx0XHRvcHRpb25zOiBJdGVtRW50cnlPcHRpb25zLFxuXHRcdGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGVcblx0KTogUHJvbWlzZUludGVyZmFjZTxJdGVtRW50cnk+IHtcblx0XHRjb25zdCBlbnRyeVN0YXR1cyA9IHRoaXMuZ2V0RW50cnlTdGF0dXMoXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdGl0ZW1JZCxcblx0XHRcdG9wdGlvbnMucGFyZW50LFxuXHRcdFx0b3B0aW9ucy5kZWZlclJlcXVlc3QsXG5cdFx0XHRsb2NhbEl0ZW1DYWNoZSxcblx0XHRcdHRydWUsXG5cdFx0XHR0aGlzLmNvbHVtblN1YnNldENhY2hlRmFjdG9yeS5jb25zdHJ1Y3Qob3B0aW9ucy5jb2x1bW5zKVxuXHRcdCk7XG5cblx0XHRpZiAoZW50cnlTdGF0dXMgPT09IG51bGwpXG5cdFx0XHRyZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIucmVqZWN0KHRoaXMuaXRlbUVudHJ5U2VydmljZS5jcmVhdGVVbmZvdW5kTG9jYWxJdGVtRXJyb3IoaXRlbVR5cGUpKTtcblxuXHRcdHJldHVybiB0aGlzLnJlc29sdmVDYWNoZWQoZW50cnlTdGF0dXMuZW50cnksIGVudHJ5U3RhdHVzLnN0YXR1cywgb3B0aW9ucywgbG9jYWxJdGVtQ2FjaGUpO1xuXHR9XG5cblx0ZmV0Y2hOZXdJdGVtIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0b3B0aW9uczogSXRlbUVudHJ5T3B0aW9ucyxcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8VGVtcGxhdGVJdGVtRW50cnlNYXA+IHtcblx0XHRjb25zdCBpdGVtRW50cnkgPSBsb2NhbEl0ZW1DYWNoZS5hZGQoXG5cdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0RGVmZXJyZWQoXG5cdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRvcHRpb25zLmlzRHVwbGljYXRlID8gdGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsRHVwbGljYXRlSWQoKSA6IHRoaXMua2V5U2VydmljZS5nZXRMb2NhbElkKCksXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdGZhbHNlXG5cdFx0XHQpXG5cdFx0KTtcblxuXHRcdHJldHVybiB0aGlzLmZldGNoVGVtcGxhdGUoaXRlbVR5cGUsIG9wdGlvbnMudGVtcGxhdGVPcHRpb25zLCBvcHRpb25zLnRlbXBsYXRlQ29sdW1ucykudGhlbihcblx0XHRcdHRlbXBsYXRlID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb2x2ZUxvY2FsKGl0ZW1FbnRyeSwgb3B0aW9ucy5wYXJlbnQsIHRlbXBsYXRlLCBsb2NhbEl0ZW1DYWNoZSk7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3IgPT4ge1xuXHRcdFx0XHRpdGVtRW50cnkucmVqZWN0KGVycm9yKTtcblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIucmVqZWN0KGVycm9yKTtcblx0XHRcdH1cblx0XHQpO1xuXHR9XG5cblx0Y3JlYXRlQmF0Y2hTdGF0dXMgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtSWRzOiBJdGVtSWRbXSxcblx0XHRwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCxcblx0XHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMsXG5cdFx0ZGVmZXJSZXF1ZXN0OiBib29sZWFuLFxuXHRcdGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGUsXG5cdFx0YWRkVG9Mb2NhbENhY2hlOiBib29sZWFuXG5cdCk6IHtiYXRjaFN0YXR1czogQmF0Y2hTdGF0dXM8SXRlbUVudHJ5Piwgc3VjY2VzczogYm9vbGVhbn0ge1xuXHRcdGNvbnN0IGNvbHVtblN1YnNldENhY2hlOiBDb2x1bW5TdWJzZXRDYWNoZSA9IHRoaXMuY29sdW1uU3Vic2V0Q2FjaGVGYWN0b3J5LmNvbnN0cnVjdChyZXF1ZXN0Q29sdW1ucyk7XG5cdFx0Y29uc3QgYmF0Y2hTdGF0dXMgPSB0aGlzLmJhdGNoU3RhdHVzRmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gaXRlbUVudHJ5Lml0ZW1JZCxcblx0XHRcdChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gaXRlbUVudHJ5LmdldFByb21pc2UoKVxuXHRcdCk7XG5cdFx0bGV0IHN1Y2Nlc3MgPSB0cnVlO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgaXRlbUlkcykge1xuXHRcdFx0Y29uc3QgZW50cnlTdGF0dXMgPSB0aGlzLmdldEVudHJ5U3RhdHVzKFxuXHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0aXRlbUlkLFxuXHRcdFx0XHRwYXJlbnQsXG5cdFx0XHRcdGRlZmVyUmVxdWVzdCxcblx0XHRcdFx0bG9jYWxJdGVtQ2FjaGUsXG5cdFx0XHRcdGFkZFRvTG9jYWxDYWNoZSxcblx0XHRcdFx0Y29sdW1uU3Vic2V0Q2FjaGVcblx0XHRcdCk7XG5cblx0XHRcdGlmIChlbnRyeVN0YXR1cyA9PT0gbnVsbCkge1xuXHRcdFx0XHRzdWNjZXNzID0gZmFsc2U7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRiYXRjaFN0YXR1cy5hZGQoZW50cnlTdGF0dXMpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7YmF0Y2hTdGF0dXM6IGJhdGNoU3RhdHVzLCBzdWNjZXNzOiBzdWNjZXNzfTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGb3IgZXZlcnkgaXRlbSBJRCBmaW5kIHRoZSBzdGF0dXMgb2YgdGhlIEl0ZW1FbnRyeSBhbmQgcmVzb2x2ZSB0aGUgcHJvbWlzZXMgc28gdGhlIHJlc3VsdCBpc1xuXHQgKiBhIHVzYWJsZSBJdGVtRW50cnlcblx0ICovXG5cdGZldGNoSXRlbXMgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtSWRzOiBJdGVtSWRbXSxcblx0XHRvcHRpb25zOiBJdGVtRW50cnlPcHRpb25zLFxuXHRcdGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGVcblx0KTogUHJvbWlzZUludGVyZmFjZTxJdGVtRW50cnlbXT4ge1xuXHRcdGNvbnN0IGVycm9ySGFuZGxlciA9IHRoaXMuZXJyb3JIYW5kbGVyO1xuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0gb3B0aW9ucy5jb2x1bW5zO1xuXG5cdFx0Y29uc3Qge2JhdGNoU3RhdHVzLCBzdWNjZXNzfSA9IHRoaXMuY3JlYXRlQmF0Y2hTdGF0dXMoXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdGl0ZW1JZHMsXG5cdFx0XHRvcHRpb25zLnBhcmVudCxcblx0XHRcdHJlcXVlc3RDb2x1bW5zLFxuXHRcdFx0b3B0aW9ucy5kZWZlclJlcXVlc3QsXG5cdFx0XHRsb2NhbEl0ZW1DYWNoZSxcblx0XHRcdHRydWVcblx0XHQpO1xuXG5cdFx0bGV0IHJlc3BvbnNlUHJvbWlzZTogUHJvbWlzZUludGVyZmFjZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4gfCBudWxsO1xuXHRcdGxldCBjb2x1bW5zUHJvbWlzZTogUHJvbWlzZUludGVyZmFjZTxSZXNwb25zZUNvbHVtbk1hcD4gfCBudWxsO1xuXG5cdFx0aWYgKGJhdGNoU3RhdHVzLmhhc1JlcXVlc3RzKCkpIHtcblx0XHRcdHJlc3BvbnNlUHJvbWlzZSA9IHRoaXMucmVxdWVzdEl0ZW1zKGl0ZW1UeXBlLCBiYXRjaFN0YXR1cy5nZXRSZXF1ZXN0SWRzKCksIHJlcXVlc3RDb2x1bW5zKTtcblx0XHRcdGNvbHVtbnNQcm9taXNlID0gcmVzcG9uc2VQcm9taXNlLnRoZW4oXG5cdFx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGVycm9yID0+IHtcblx0XHRcdFx0XHQvLyBubyBpdGVtcyB3aWxsIGJlIHJldHVybmVkLCBzbyBjbGVhcmluZyBpcyBzdWZmaWNpZW50IGhlcmVcblx0XHRcdFx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXG5cdFx0XHRcdFx0XHRbRU5UUllfU1RBVFVTLlJFU09MVkVdLFxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5ID0+IHRoaXMuY2xlYXJJdGVtKGl0ZW1FbnRyeSwgbG9jYWxJdGVtQ2FjaGUpXG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdHJldHVybiBlcnJvckhhbmRsZXIucmVqZWN0KGVycm9yKTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9IGVsc2UgaWYgKGJhdGNoU3RhdHVzLmhhc0VudHJpZXMoYmF0Y2hTdGF0dXMubG9jYWxFeHBhbmRTdGF0dXMpKSB7XG5cdFx0XHRyZXNwb25zZVByb21pc2UgPSBudWxsO1xuXHRcdFx0Y29sdW1uc1Byb21pc2UgPSB0aGlzLmNvbHVtbkhhbmRsZXIuZmV0Y2goaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVzcG9uc2VQcm9taXNlID0gbnVsbDtcblx0XHRcdGNvbHVtbnNQcm9taXNlID0gbnVsbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwoXG5cdFx0XHR7XG5cdFx0XHRcdGVudHJpZXM6IGJhdGNoU3RhdHVzLmdldFByb21pc2VzKCksXG5cdFx0XHRcdHJlc3BvbnNlOiByZXNwb25zZVByb21pc2UsXG5cdFx0XHRcdGNvbHVtbnM6IGNvbHVtbnNQcm9taXNlXG5cdFx0XHR9XG5cdFx0KS50aGVuKFxuXHRcdFx0cmVzb2x2ZWQgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVCYXRjaFJlc3BvbnNlKFxuXHRcdFx0XHRcdGJhdGNoU3RhdHVzLFxuXHRcdFx0XHRcdGxvY2FsSXRlbUNhY2hlLFxuXHRcdFx0XHRcdHJlcXVlc3RDb2x1bW5zLFxuXHRcdFx0XHRcdHJlc29sdmVkLnJlc3BvbnNlLFxuXHRcdFx0XHRcdHJlc29sdmVkLmNvbHVtbnNcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0KHJlc29sdmVkOiBib29sZWFuKSA9PiB7XG5cdFx0XHRcdHJldHVybiByZXNvbHZlZCAmJiBzdWNjZXNzID8gYmF0Y2hTdGF0dXMuZ2V0QXJyYXkoKSA6IGVycm9ySGFuZGxlci5yZWplY3QoKTtcblx0XHRcdH0sXG5cdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGhhbmRsZUJhdGNoUmVzcG9uc2UgKFxuXHRcdGJhdGNoU3RhdHVzOiBCYXRjaFN0YXR1czxJdGVtRW50cnk+LFxuXHRcdGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGUsXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRcdHJlc3BvbnNlOiBBcGlSZXNwb25zZVByb2Nlc3NvciB8IG51bGwsXG5cdFx0cmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcCB8IG51bGwsXG5cdFx0Y29sdW1uRXhwYW5zaW9uPzogQ29sdW1uRXhwYW5zaW9uXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Ym9vbGVhbj4ge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gYmF0Y2hTdGF0dXMuaXRlbVR5cGU7XG5cblx0XHRsZXQgc3VjY2VzcyA9IHRydWU7XG5cblx0XHRpZiAoYmF0Y2hTdGF0dXMuaGFzRW50cmllcyhbRU5UUllfU1RBVFVTLlJFU09MVkVdKSkge1xuXHRcdFx0Y29uc3QgY29sdW1uSW5mbyA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMhKTtcblxuXHRcdFx0YmF0Y2hTdGF0dXMuZm9yRWFjaEVudHJ5KFxuXHRcdFx0XHRbRU5UUllfU1RBVFVTLlJFU09MVkVdLFxuXHRcdFx0XHRpdGVtRW50cnkgPT4ge1xuXHRcdFx0XHRcdGlmICghdGhpcy5yZXNvbHZlUmVtb3RlKGl0ZW1FbnRyeSwgY29sdW1uSW5mbywgcmVzcG9uc2UhLCBsb2NhbEl0ZW1DYWNoZSkpXG5cdFx0XHRcdFx0XHRzdWNjZXNzID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0YmF0Y2hTdGF0dXMuZm9yRWFjaEVudHJ5KFxuXHRcdFx0W0VOVFJZX1NUQVRVUy5SRVNPTFZFX1ZBTFVFU10sXG5cdFx0XHRpdGVtRW50cnkgPT4ge1xuXHRcdFx0XHRpZiAoIXRoaXMucmVzb2x2ZVJlbW90ZVZhbHVlcyhpdGVtRW50cnksIHJlc3BvbnNlISkpXG5cdFx0XHRcdFx0c3VjY2VzcyA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRpZiAoYmF0Y2hTdGF0dXMuaGFzRW50cmllcyhiYXRjaFN0YXR1cy5yZW1vdGVFeHBhbmRTdGF0dXMpKSB7XG5cdFx0XHRpZiAoY29sdW1uRXhwYW5zaW9uID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMhKTtcblxuXHRcdFx0YmF0Y2hTdGF0dXMuZm9yRWFjaEVudHJ5KFxuXHRcdFx0XHRiYXRjaFN0YXR1cy5yZW1vdGVFeHBhbmRTdGF0dXMsXG5cdFx0XHRcdGl0ZW1FbnRyeSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb2x2ZUV4cGFuc2lvbihpdGVtRW50cnksIGNvbHVtbkV4cGFuc2lvbiEsIHJlc3BvbnNlISk7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0aWYgKGJhdGNoU3RhdHVzLmhhc0VudHJpZXMoYmF0Y2hTdGF0dXMubG9jYWxFeHBhbmRTdGF0dXMpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5leHBhbmRMb2NhbEVudHJpZXMoXG5cdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRiYXRjaFN0YXR1cy5nZXRBcnJheShiYXRjaFN0YXR1cy5sb2NhbEV4cGFuZFN0YXR1cyksXG5cdFx0XHRcdHJlcXVlc3RDb2x1bW5zLFxuXHRcdFx0XHRyZXNwb25zZUNvbHVtbnMhLFxuXHRcdFx0XHRsb2NhbEl0ZW1DYWNoZVxuXHRcdFx0KS50aGVuKFxuXHRcdFx0XHRpdGVtRW50cmllcyA9PiB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXG5cdFx0XHRcdFx0XHRpdGVtRW50cnkucmVzb2x2ZSgpO1xuXG5cdFx0XHRcdFx0cmV0dXJuIHN1Y2Nlc3M7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKHN1Y2Nlc3MpO1xuXHR9XG5cblx0cmVzb2x2ZUNhY2hlZCAoXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnksXG5cdFx0c3RhdHVzOiBFTlRSWV9TVEFUVVMsXG5cdFx0b3B0aW9uczogSXRlbUVudHJ5T3B0aW9ucyxcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8SXRlbUVudHJ5PiB7XG5cdFx0Y29uc3QgZXJyb3JIYW5kbGVyID0gdGhpcy5lcnJvckhhbmRsZXI7XG5cdFx0Y29uc3QgcmVqZWN0SXRlbUVudHJ5ID0gKGVycm9yOiBhbnkpID0+IHsgaXRlbUVudHJ5LnJlamVjdChlcnJvcik7IH07XG5cdFx0bGV0IGNvbHVtbkRpZmZlcmVuY2U6IEFwaVJlcXVlc3RDb2x1bW5zO1xuXG5cdFx0c3dpdGNoIChzdGF0dXMpIHtcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLkxPQ0FMOiAvLyBoZXJlIGZvciBjb21wbGV0aW9uXG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5DQUNIRUQ6XG5cdFx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oaXRlbUVudHJ5KTtcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLlBST01JU0VEOlxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmdldFByb21pc2UoKTtcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLkVYUEFORDpcblx0XHRcdFx0Y29sdW1uRGlmZmVyZW5jZSA9IHRoaXMuZ2V0Q29sdW1uRGlmZmVyZW5jZShpdGVtRW50cnksIG9wdGlvbnMuY29sdW1ucyk7XG5cblx0XHRcdFx0dGhpcy5yZXF1ZXN0SXRlbShpdGVtRW50cnksIGNvbHVtbkRpZmZlcmVuY2UpLnRoZW4oXG5cdFx0XHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5yZXNvbHZlRXhwYW5zaW9uKFxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnksXG5cdFx0XHRcdFx0XHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5Lml0ZW1UeXBlLFxuXHRcdFx0XHRcdFx0XHRcdGNvbHVtbkRpZmZlcmVuY2UsXG5cdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KClcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2Vcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdCkuY2F0Y2goIC8vIG9uZnVsZmlsbGVkIG1pZ2h0IHByb2R1Y2UgYW4gZXJyb3Jcblx0XHRcdFx0XHRyZWplY3RJdGVtRW50cnlcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmdldFByb21pc2UoKTtcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLkVYUEFORF9MT0NBTDpcblx0XHRcdFx0Y29sdW1uRGlmZmVyZW5jZSA9IHRoaXMuZ2V0Q29sdW1uRGlmZmVyZW5jZShpdGVtRW50cnksIG9wdGlvbnMuY29sdW1ucyk7XG5cblx0XHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLmZldGNoKGl0ZW1FbnRyeS5pdGVtVHlwZSwgY29sdW1uRGlmZmVyZW5jZSkudGhlbihcblx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnMgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuZXhwYW5kTG9jYWxFbnRyaWVzKFxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnkuaXRlbVR5cGUsXG5cdFx0XHRcdFx0XHRcdFtpdGVtRW50cnldLFxuXHRcdFx0XHRcdFx0XHRjb2x1bW5EaWZmZXJlbmNlLFxuXHRcdFx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnMsXG5cdFx0XHRcdFx0XHRcdGxvY2FsSXRlbUNhY2hlXG5cdFx0XHRcdFx0XHQpLnRoZW4oXG5cdFx0XHRcdFx0XHRcdCgpID0+IGl0ZW1FbnRyeS5yZXNvbHZlKCksXG5cdFx0XHRcdFx0XHRcdHJlamVjdEl0ZW1FbnRyeVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHJlamVjdEl0ZW1FbnRyeVxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnkuZ2V0UHJvbWlzZSgpO1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EOlxuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EX0xPQ0FMOlxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmdldFByb21pc2UoKS50aGVuKFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLnJlc29sdmVDYWNoZWQoXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0XHRcdFx0dGhpcy5nZXRDYWNoZWRFbnRyeVN0YXR1cyhcblx0XHRcdFx0XHRcdFx0XHRpdGVtRW50cnksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5jb2x1bW5TdWJzZXRDYWNoZUZhY3RvcnkuY29uc3RydWN0KG9wdGlvbnMuY29sdW1ucylcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0b3B0aW9ucyxcblx0XHRcdFx0XHRcdFx0bG9jYWxJdGVtQ2FjaGVcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdCk7XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5SRVNPTFZFX1ZBTFVFUzpcblx0XHRcdFx0dGhpcy5yZXF1ZXN0SXRlbShpdGVtRW50cnkpLnRoZW4oXG5cdFx0XHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5yZXNvbHZlUmVtb3RlVmFsdWVzKGl0ZW1FbnRyeSwgcmVzcG9uc2UpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHQpLmNhdGNoKCAvLyBvbmZ1bGZpbGxlZCBtaWdodCBwcm9kdWNlIGFuIGVycm9yXG5cdFx0XHRcdFx0cmVqZWN0SXRlbUVudHJ5XG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5nZXRQcm9taXNlKCk7XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5SRVNPTFZFOlxuXHRcdFx0XHR0aGlzLnJlcXVlc3RJdGVtKGl0ZW1FbnRyeSkudGhlbihcblx0XHRcdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnJlc29sdmVSZW1vdGUoXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LmNvbHVtbnMucmVzb2x2ZShyZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKSksXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHRcdFx0XHRsb2NhbEl0ZW1DYWNoZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KS5jYXRjaCggLy8gb25mdWxmaWxsZWQgbWlnaHQgcHJvZHVjZSBhbiBlcnJvclxuXHRcdFx0XHRcdGVycm9yID0+IHtcblx0XHRcdFx0XHRcdHRoaXMuY2xlYXJJdGVtKGl0ZW1FbnRyeSwgbG9jYWxJdGVtQ2FjaGUpO1xuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LnJlamVjdChlcnJvcik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnkuZ2V0UHJvbWlzZSgpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZ2V0Q29sdW1uRGlmZmVyZW5jZSAoaXRlbUVudHJ5OiBJdGVtRW50cnksIHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyk6IEFwaVJlcXVlc3RDb2x1bW5zIHtcblx0XHRyZXR1cm4gdGhpcy5jb2x1bW5VdGlsLm1lcmdlUmVxdWVzdENvbHVtbnMoaXRlbUVudHJ5LmNvbHVtbnMucmVxdWVzdCwgcmVxdWVzdENvbHVtbnMpLmRpZmZlcmVuY2U7XG5cdH1cblxuXHRyZXNvbHZlTG9jYWwgKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5LFxuXHRcdHBhcmVudDogRW50cnlQYXJlbnROdWxsLFxuXHRcdHRlbXBsYXRlOiBUZW1wbGF0ZSxcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlXG5cdCk6IFRlbXBsYXRlSXRlbUVudHJ5TWFwIHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xuXHRcdGNvbnN0IGl0ZW1JZENvbnZlcnNpb24gPSB0aGlzLml0ZW1FbnRyeVNlcnZpY2UuY3JlYXRlTG9jYWxDb252ZXJzaW9uTWFwKGl0ZW1UeXBlLCBpdGVtSWQsIHRydWUsIHRlbXBsYXRlLnJlc3BvbnNlKTtcblxuXHRcdGl0ZW1FbnRyeS5jb2x1bW5zID0gdGVtcGxhdGUuY29sdW1ucztcblxuXHRcdGlmIChwYXJlbnQgIT09IG51bGwpXG5cdFx0XHRpdGVtRW50cnkuc2V0UGFyZW50KHBhcmVudC5pdGVtVHlwZSwgcGFyZW50Lml0ZW1JZCk7IC8vIGNyZWF0ZSBuZXcgb2JqZWN0XG5cblx0XHRpdGVtRW50cnkuc2V0TG9jYWxGaWVsZHModGVtcGxhdGUuZmllbGRzLCBpdGVtSWRDb252ZXJzaW9uKS5yZXNvbHZlKCk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0bWFpbjogaXRlbUVudHJ5LFxuXHRcdFx0bGlua2VkOiB0aGlzLmNyZWF0ZUxvY2FsRW50cmllcyhpdGVtVHlwZSwgaXRlbUlkLCB0ZW1wbGF0ZSwgaXRlbUlkQ29udmVyc2lvbiwgbG9jYWxJdGVtQ2FjaGUpXG5cdFx0fTtcblx0fVxuXG5cdHJlc29sdmVFeHBhbnNpb24gKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBjb2x1bW5FeHBhbnNpb246IENvbHVtbkV4cGFuc2lvbiwgcmVzcG9uc2U6IEFwaVJlc3BvbnNlKTogSXRlbUVudHJ5IHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xuXHRcdGNvbnN0IGV4cGFuc2lvblJlc3VsdCA9IGNvbHVtbkV4cGFuc2lvbi5ydW4oaXRlbUVudHJ5LmNvbHVtbnMpO1xuXG5cdFx0Ly8gQW5vdGhlciByZXF1ZXN0IGFscmVhZHkgcmVxdWVzdGVkIHRoZSBjb2x1bW5zIHdlIG5lZWQgaGVyZSwgbm8gbmVlZCB0byBleHBhbmQgdGhlIGl0ZW0gYW5kIHJlc29sdmUgaXQgKGFscmVhZHkgZG9uZSBieSBvdGhlciByZXF1ZXN0KVxuXHRcdGlmIChleHBhbnNpb25SZXN1bHQgPT09IG51bGwpXG5cdFx0XHRyZXR1cm4gaXRlbUVudHJ5O1xuXG5cdFx0aXRlbUVudHJ5LmV4cGFuZChcblx0XHRcdHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQpLFxuXHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGV4cGFuc2lvblJlc3VsdC5kaWZmZXJlbmNlLnJvb3QpLFxuXHRcdFx0ZXhwYW5zaW9uUmVzdWx0XG5cdFx0KTtcblxuXHRcdHJldHVybiBpdGVtRW50cnkucmVzb2x2ZSgpO1xuXHR9XG5cblx0cHJpdmF0ZSBjbGVhckl0ZW0gKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBsb2NhbENhY2hlOiBJdGVtQ2FjaGUpOiB2b2lkIHtcblx0XHR0aGlzLmVudHJpZXMuY2xlYXIoaXRlbUVudHJ5KTtcblx0XHRsb2NhbENhY2hlLmNsZWFyKGl0ZW1FbnRyeSk7XG5cdH1cblxuXHRwcml2YXRlIHJlc29sdmVSZW1vdGUgKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5LFxuXHRcdGNvbHVtblNldDogQ29sdW1uU2V0LFxuXHRcdHJlc3BvbnNlOiBBcGlSZXNwb25zZSxcblx0XHRsb2NhbENhY2hlOiBJdGVtQ2FjaGVcblx0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgcmVzcG9uc2VGaWVsZHMgPSB0aGlzLmdldFJlc3BvbnNlRmllbGRzKGl0ZW1FbnRyeSwgY29sdW1uU2V0LCByZXNwb25zZSk7XG5cblx0XHRpZiAocmVzcG9uc2VGaWVsZHMgPT09IG51bGwpIHtcblx0XHRcdHRoaXMuY2xlYXJJdGVtKGl0ZW1FbnRyeSwgbG9jYWxDYWNoZSk7XG5cdFx0XHRpdGVtRW50cnkucmVqZWN0KCk7XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRpdGVtRW50cnkucmVzb2x2ZURlZmVycmVkKHJlc3BvbnNlRmllbGRzLmluaXRpYWwsIHJlc3BvbnNlRmllbGRzLmRlcml2ZWQsIGNvbHVtblNldCk7XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHByaXZhdGUgcmVzb2x2ZVJlbW90ZVZhbHVlcyAoaXRlbUVudHJ5OiBJdGVtRW50cnksIHJlc3BvbnNlOiBBcGlSZXNwb25zZSk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHJlc3BvbnNlRmllbGRzID0gdGhpcy5nZXRSZXNwb25zZUZpZWxkcyhpdGVtRW50cnksIGl0ZW1FbnRyeS5jb2x1bW5zLCByZXNwb25zZSk7XG5cblx0XHRpZiAocmVzcG9uc2VGaWVsZHMgPT09IG51bGwpIHtcblx0XHRcdGl0ZW1FbnRyeS5yZWplY3QoKTtcblxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGl0ZW1FbnRyeS51cGRhdGVGaWVsZHMocmVzcG9uc2VGaWVsZHMuaW5pdGlhbCwgcmVzcG9uc2VGaWVsZHMuZGVyaXZlZCwgZmFsc2UpLnJlc29sdmUoKTtcblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRSZXNwb25zZUZpZWxkcyAoXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnksXG5cdFx0Y29sdW1uU2V0OiBDb2x1bW5TZXQsXG5cdFx0cmVzcG9uc2U6IEFwaVJlc3BvbnNlXG5cdCk6IHtpbml0aWFsOiBGaWVsZE1hcCwgZGVyaXZlZDogRmllbGRNYXB9IHwgbnVsbCB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcblx0XHRjb25zdCBpbml0aWFsID0gcmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCk7XG5cblx0XHRpZiAoaW5pdGlhbCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0aW5pdGlhbDogaW5pdGlhbCxcblx0XHRcdGRlcml2ZWQ6IHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBjb2x1bW5TZXQucm9vdClcblx0XHR9O1xuXHR9XG5cblx0ZmV0Y2hUZW1wbGF0ZSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCB0ZW1wbGF0ZU9wdGlvbnM6IGFueSA9IHt9LCB0ZW1wbGF0ZUNvbHVtbnM6IGFueSA9IHt9KTogUHJvbWlzZUludGVyZmFjZTxUZW1wbGF0ZT4ge1xuXHRcdGNvbnN0IGhhc1RlbXBsYXRlT3B0aW9ucyA9IGhhc1Byb3BlcnRpZXModGVtcGxhdGVPcHRpb25zKTtcblx0XHRjb25zdCBjb2x1bW5JdGVtVHlwZSA9IGdldEZpcnN0UHJvcGVydHkodGVtcGxhdGVDb2x1bW5zKTsgLy8gaXQncyBwb3NzaWJsZSB0byBhZGQgY29sdW1ucyB0byBsaW5rZWQgaXRlbXNcblxuXHRcdGlmICghaGFzVGVtcGxhdGVPcHRpb25zKSB7XG5cdFx0XHRjb25zdCBjYWNoZWRUZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGVzW2l0ZW1UeXBlXTtcblxuXHRcdFx0aWYgKFxuXHRcdFx0XHRjYWNoZWRUZW1wbGF0ZSAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHRcdChcblx0XHRcdFx0XHRjb2x1bW5JdGVtVHlwZSA9PT0gbnVsbCB8fFxuXHRcdFx0XHRcdHRoaXMuY29sdW1uVXRpbC5yZXNwb25zZUNvbHVtbnNBdmFpbGFibGUoXG5cdFx0XHRcdFx0XHRjb2x1bW5JdGVtVHlwZSxcblx0XHRcdFx0XHRcdHRlbXBsYXRlQ29sdW1uc1tjb2x1bW5JdGVtVHlwZV0sXG5cdFx0XHRcdFx0XHRjYWNoZWRUZW1wbGF0ZS5yZXNwb25zZUNvbHVtbnNcblx0XHRcdFx0XHQpXG5cdFx0XHRcdClcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGNhY2hlZFRlbXBsYXRlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwoXG5cdFx0XHR7XG5cdFx0XHRcdHRlbXBsYXRlOiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnRlbXBsYXRlKGl0ZW1UeXBlLCB0ZW1wbGF0ZU9wdGlvbnMpLFxuXHRcdFx0XHRhZGRpdGlvbmFsQ29sdW1uczogY29sdW1uSXRlbVR5cGUgPT09IG51bGwgP1xuXHRcdFx0XHRcdHt9IDpcblx0XHRcdFx0XHR0aGlzLmNvbHVtbkhhbmRsZXIuZmV0Y2goY29sdW1uSXRlbVR5cGUsIHRlbXBsYXRlQ29sdW1uc1tjb2x1bW5JdGVtVHlwZV0pXG5cdFx0XHR9XG5cdFx0KS50aGVuKFxuXHRcdFx0cmVzb2x2ZWQgPT4ge1xuXHRcdFx0XHRjb25zdCB0ZW1wbGF0ZVJlc3BvbnNlID0gcmVzb2x2ZWQudGVtcGxhdGU7XG5cblx0XHRcdFx0Y29uc3QgdGVtcGxhdGUgPSB0aGlzLnRlbXBsYXRlRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHRlbXBsYXRlUmVzcG9uc2UsIHJlc29sdmVkLmFkZGl0aW9uYWxDb2x1bW5zKTtcblxuXHRcdFx0XHRpZiAoIWhhc1RlbXBsYXRlT3B0aW9ucyAmJiB0ZW1wbGF0ZVJlc3BvbnNlLmNhY2hlYWJsZSlcblx0XHRcdFx0XHR0aGlzLnRlbXBsYXRlc1tpdGVtVHlwZV0gPSB0ZW1wbGF0ZTtcblxuXHRcdFx0XHRyZXR1cm4gdGVtcGxhdGU7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldEVudHJ5U3RhdHVzIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUlkOiBJdGVtSWQsXG5cdFx0cGFyZW50OiBFbnRyeVBhcmVudE51bGwsXG5cdFx0ZGVmZXJSZXF1ZXN0OiBib29sZWFuLFxuXHRcdGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGUsXG5cdFx0YWRkVG9Mb2NhbENhY2hlOiBib29sZWFuLFxuXHRcdGNvbHVtblN1YnNldENhY2hlOiBDb2x1bW5TdWJzZXRDYWNoZVxuXHQpOiBFbnRyeVN0YXR1czxJdGVtRW50cnk+IHwgbnVsbCB7XG5cdFx0bGV0IGl0ZW1FbnRyeTtcblxuXHRcdGlmICh0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKGl0ZW1JZCkpIHtcblx0XHRcdGl0ZW1FbnRyeSA9IGxvY2FsSXRlbUNhY2hlLmdldChpdGVtVHlwZSwgaXRlbUlkKTtcblxuXHRcdFx0aWYgKGl0ZW1FbnRyeSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRyZXR1cm4ge2VudHJ5OiBpdGVtRW50cnksIHN0YXR1czogdGhpcy5nZXRDYWNoZWRFbnRyeVN0YXR1cyhpdGVtRW50cnksIGNvbHVtblN1YnNldENhY2hlKX07XG5cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGl0ZW1FbnRyeSA9IHRoaXMuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZCk7XG5cblx0XHRpZiAoaXRlbUVudHJ5ICE9PSB1bmRlZmluZWQpIHsgLy8gd2UncmUgZGVhbGluZyB3aXRoIGEgcmVtb3RlIGl0ZW0gdGhhdCBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgZ2xvYmFsIGNhY2hlXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRlbnRyeTogYWRkVG9Mb2NhbENhY2hlID8gbG9jYWxJdGVtQ2FjaGUuYWRkKGl0ZW1FbnRyeSkgOiBpdGVtRW50cnksXG5cdFx0XHRcdHN0YXR1czogdGhpcy5nZXRDYWNoZWRFbnRyeVN0YXR1cyhpdGVtRW50cnksIGNvbHVtblN1YnNldENhY2hlKVxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRpdGVtRW50cnkgPSB0aGlzLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0RGVmZXJyZWQoIC8vIGNyZWF0ZSBhIG5ldyByZW1vdGUgaXRlbVxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRpdGVtSWQsXG5cdFx0XHRjb2x1bW5TdWJzZXRDYWNoZS5yZXF1ZXN0Q29sdW1ucyxcblx0XHRcdGRlZmVyUmVxdWVzdFxuXHRcdCk7XG5cblx0XHRpZiAocGFyZW50ICE9PSBudWxsKVxuXHRcdFx0aXRlbUVudHJ5LnNldFBhcmVudChwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQpO1xuXG5cdFx0aWYgKGFkZFRvTG9jYWxDYWNoZSlcblx0XHRcdGxvY2FsSXRlbUNhY2hlLmFkZChpdGVtRW50cnkpO1xuXG5cdFx0dGhpcy5lbnRyaWVzLmFkZChpdGVtRW50cnkpO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGVudHJ5OiBpdGVtRW50cnksXG5cdFx0XHRzdGF0dXM6IGRlZmVyUmVxdWVzdCA/IEVOVFJZX1NUQVRVUy5QUk9NSVNFRCA6IEVOVFJZX1NUQVRVUy5SRVNPTFZFXG5cdFx0fTtcblx0fVxuXG5cdGdldENhY2hlZEVudHJ5U3RhdHVzIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgY29sdW1uU3Vic2V0Q2FjaGU6IENvbHVtblN1YnNldENhY2hlKTogRU5UUllfU1RBVFVTIHtcblx0XHRjb25zdCBjb2x1bW5TZXQgPSBpdGVtRW50cnkuY29sdW1ucztcblxuXHRcdGlmIChpdGVtRW50cnkuaXNEZWZlcnJlZCgpKSB7XG5cdFx0XHRpZiAoaXRlbUVudHJ5LmRlZmVyUmVxdWVzdCkge1xuXHRcdFx0XHRjb2x1bW5TZXQuZXhwYW5kUmVxdWVzdENvbHVtbnMoY29sdW1uU3Vic2V0Q2FjaGUucmVxdWVzdENvbHVtbnMpO1xuXG5cdFx0XHRcdHJldHVybiBFTlRSWV9TVEFUVVMuUkVTT0xWRTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGNvbHVtblN1YnNldENhY2hlLnJ1bihjb2x1bW5TZXQpKVxuXHRcdFx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLlBST01JU0VEO1xuXG5cdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmlzTG9jYWwoKSA/IEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkRfTE9DQUwgOiBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EO1xuXHRcdH1cblxuXHRcdGlmICghY29sdW1uU3Vic2V0Q2FjaGUucnVuKGNvbHVtblNldCkpIHtcblx0XHRcdGl0ZW1FbnRyeS5kZWZlcigpO1xuXG5cdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmlzTG9jYWwoKSA/IEVOVFJZX1NUQVRVUy5FWFBBTkRfTE9DQUwgOiBFTlRSWV9TVEFUVVMuRVhQQU5EO1xuXHRcdH1cblxuXHRcdGlmIChpdGVtRW50cnkucmVsb2FkUXVldWVkKSB7XG5cdFx0XHRpdGVtRW50cnkucmVsb2FkUXVldWVkID0gZmFsc2U7XG5cblx0XHRcdGlmIChpdGVtRW50cnkuaXNMb2NhbCgpKVxuXHRcdFx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLkNBQ0hFRDtcblxuXHRcdFx0aXRlbUVudHJ5LmRlZmVyKCk7XG5cblx0XHRcdHJldHVybiBFTlRSWV9TVEFUVVMuUkVTT0xWRV9WQUxVRVM7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5DQUNIRUQ7XG5cdH1cblxuXHRmZXRjaFRpdGxlIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUlkOiBJdGVtSWQsXG5cdFx0ZGVmZXJSZXF1ZXN0OiBib29sZWFuID0gdHJ1ZSxcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8c3RyaW5nPiB7XG5cdFx0Y29uc3QgdGl0bGVGaWVsZCA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5nZXRUaXRsZUZpZWxkKGl0ZW1UeXBlKTtcblxuXHRcdHJldHVybiB0aGlzLmZldGNoSXRlbShcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkLFxuXHRcdFx0bmV3IEl0ZW1FbnRyeU9wdGlvbnMoe2NvbHVtbnM6IFt0aXRsZUZpZWxkXSwgZGVmZXJSZXF1ZXN0OiBkZWZlclJlcXVlc3R9KSxcblx0XHRcdGxvY2FsSXRlbUNhY2hlXG5cdFx0KS50aGVuKFxuXHRcdFx0aXRlbUVudHJ5ID0+IHtcblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5nZXRGaWVsZHMoKVt0aXRsZUZpZWxkXTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Y3JlYXRlTG9jYWxFbnRyaWVzIChcblx0XHRwYXJlbnRUeXBlOiBJdGVtVHlwZSxcblx0XHRsb2NhbFBhcmVudElkOiBJdGVtSWQsXG5cdFx0dGVtcGxhdGU6IFRlbXBsYXRlLFxuXHRcdGl0ZW1JZENvbnZlcnNpb246IEl0ZW1JZENvbnZlcnNpb25NYXAsXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZSxcblx0XHRmaWx0ZXJJdGVtRW50cnk6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gYm9vbGVhbiA9ICgpID0+IHRydWUgLy8gcmV0dXJuIHRydWUgdG8gaW5jbHVkZSBpdGVtXG5cdCk6IExpbmtlZEl0ZW1FbnRyeU1hcFtdIHtcblx0XHRjb25zdCBhcGlSZXNwb25zZSA9IHRlbXBsYXRlLnJlc3BvbnNlO1xuXHRcdGNvbnN0IGl0ZW1FbnRyeU1hcDoge1tpdGVtVHlwZTogc3RyaW5nXTogSXRlbUVudHJ5W119ID0ge307XG5cdFx0Y29uc3QgY29sdW1uU2V0TWFwOiB7W2l0ZW1UeXBlOiBzdHJpbmddOiBDb2x1bW5TZXR9ID0ge307XG5cdFx0Y29uc3QgcmVzdWx0OiBMaW5rZWRJdGVtRW50cnlNYXBbXSA9IFtdO1xuXG5cdFx0Y29uc3QgY3JlYXRlRW50cmllcyA9IChfcGFyZW50VHlwZTogSXRlbVR5cGUsIF9sb2NhbFBhcmVudElkOiBJdGVtSWQsIGFwaVBhcmVudElkOiBJdGVtSWQpID0+IHtcblx0XHRcdGNvbnN0IHBhcmVudCA9IHtpdGVtVHlwZTogX3BhcmVudFR5cGUsIGl0ZW1JZDogX2xvY2FsUGFyZW50SWR9O1xuXHRcdFx0Y29uc3QgbGlua3MgPSBhcGlSZXNwb25zZS5pdGVtc1tfcGFyZW50VHlwZV1bYXBpUGFyZW50SWRdLmxpbmtzO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGxpbmtzKSB7XG5cdFx0XHRcdGlmICghbGlua3MuaGFzT3duUHJvcGVydHkoaXRlbVR5cGUpKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdC8vIHRoZSBpdGVtIGVudHJpZXMgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSByZXN1bHQgaW4gdG9wLWRvd24gb3JkZXJcblx0XHRcdFx0aWYgKGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHJlc3VsdC5wdXNoKFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRpdGVtVHlwZTogaXRlbVR5cGUsXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyaWVzOiBpdGVtRW50cnlNYXBbaXRlbVR5cGVdID0gW10sXG5cdFx0XHRcdFx0XHRcdGNvbHVtblNldDogY29sdW1uU2V0TWFwW2l0ZW1UeXBlXSA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRcdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHR0ZW1wbGF0ZS5yZXNwb25zZUNvbHVtbnNcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKGNvbnN0IGFwaUl0ZW1JZCBvZiBsaW5rc1tpdGVtVHlwZV0pIHtcblx0XHRcdFx0XHRjb25zdCBsb2NhbEl0ZW1JZCA9IGl0ZW1JZENvbnZlcnNpb25baXRlbVR5cGVdW2FwaUl0ZW1JZF07XG5cblx0XHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0TG9jYWxMaW5rZWQoXG5cdFx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRcdGxvY2FsSXRlbUlkLFxuXHRcdFx0XHRcdFx0YXBpUmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGFwaUl0ZW1JZCksXG5cdFx0XHRcdFx0XHRwYXJlbnQsXG5cdFx0XHRcdFx0XHRjb2x1bW5TZXRNYXBbaXRlbVR5cGVdLFxuXHRcdFx0XHRcdFx0aXRlbUlkQ29udmVyc2lvblxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRpZiAoIWZpbHRlckl0ZW1FbnRyeShpdGVtRW50cnkpKVxuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0XHRsb2NhbEl0ZW1DYWNoZS5hZGQoaXRlbUVudHJ5KTtcblx0XHRcdFx0XHRpdGVtRW50cnlNYXBbaXRlbVR5cGVdLnB1c2goaXRlbUVudHJ5KTtcblxuXHRcdFx0XHRcdGNyZWF0ZUVudHJpZXMoaXRlbVR5cGUsIGxvY2FsSXRlbUlkLCBhcGlJdGVtSWQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGNyZWF0ZUVudHJpZXMocGFyZW50VHlwZSwgbG9jYWxQYXJlbnRJZCwgYXBpUmVzcG9uc2UubGlua3NbcGFyZW50VHlwZV1bMF0pO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGV4cGFuZExvY2FsRW50cmllcyAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcblx0XHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMsXG5cdFx0cmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcCxcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8SXRlbUVudHJ5W10+IHtcblx0XHRpZiAoaXRlbUVudHJpZXMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihpdGVtRW50cmllcyk7XG5cblx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBleHBhbnNpb25SZXN1bHQgPSBjb2x1bW5FeHBhbnNpb24ucnVuKGl0ZW1FbnRyeS5jb2x1bW5zKTtcblxuXHRcdFx0aWYgKGV4cGFuc2lvblJlc3VsdCAhPT0gbnVsbClcblx0XHRcdFx0aXRlbUVudHJ5LmV4cGFuZExvY2FsKGV4cGFuc2lvblJlc3VsdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucmVzb2x2ZURlcml2ZWRWYWx1ZXMoaXRlbUVudHJpZXMsIGNvbHVtbkV4cGFuc2lvbi5hZ2dyZWdhdGVSb290Q29sdW1ucygpLCBsb2NhbEl0ZW1DYWNoZSk7XG5cdH1cblxuXHRyZXNvbHZlRGVyaXZlZFZhbHVlcyAoXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRcdGNvbHVtbnM6IENvbHVtbkluZm9bXSxcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8SXRlbUVudHJ5W10+IHtcblx0XHRjb25zdCBwcm9taXNlczogQXJyYXk8UHJvbWlzZUludGVyZmFjZTxhbnk+PiA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucylcblx0XHRcdHByb21pc2VzLnB1c2godGhpcy5mZXRjaERlcml2ZWRWYWx1ZXNCeUNvbHVtbihpdGVtRW50cmllcywgY29sdW1uLCBsb2NhbEl0ZW1DYWNoZSkpO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHByb21pc2VzKS50aGVuKFxuXHRcdFx0KCkgPT4gaXRlbUVudHJpZXMsXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBzZXREZWZhdWx0VmFsdWVzQnlDb2x1bW4gKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgcm9vdENvbHVtbjogQ29sdW1uSW5mbyk6IHZvaWQge1xuXHRcdGNvbnN0IGNoaWxkQ29sdW1ucyA9IHJvb3RDb2x1bW4uY2hpbGRyZW47XG5cblx0XHRpZiAoY2hpbGRDb2x1bW5zLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybjtcblxuXHRcdC8vIG5vIG5lZWQgdG8gZG8gYSByZWN1cnNpdmUgY2FsbCBoZXJlLCBmdW5jdGlvbiB3aWxsIGdldCBjYWxsZWQgbXVsdGlwbGUgdGltZXNcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjaGlsZENvbHVtbnMpIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxuXHRcdFx0XHRpdGVtRW50cnkuZGVyaXZlZFtjb2x1bW4ucGF0aF0gPSB0aGlzLmFwaUZvcm1hdHRlci5nZXREZWZhdWx0VmFsdWUoY29sdW1uLmFwaUNvbHVtbi50eXBlKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGdldEl0ZW1JZEJ5Q29sdW1uIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgY29sdW1uOiBDb2x1bW5JbmZvKTogSXRlbUlkIHtcblx0XHRpZiAoY29sdW1uLmxldmVsID09PSAwKSB7XG5cdFx0XHRpZiAoY29sdW1uLmFwaUNvbHVtbi50eXBlID09PSAnbGluaycgJiYgaXRlbUVudHJ5LnBhcmVudCAhPT0gbnVsbClcblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5wYXJlbnQuaXRlbUlkO1xuXG5cdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmdldEZpZWxkcygpW2NvbHVtbi5wYXRoXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gaXRlbUVudHJ5LmRlcml2ZWRbY29sdW1uLnBhdGhdO1xuXHR9XG5cblx0cHJpdmF0ZSBmZXRjaERlcml2ZWRWYWx1ZXNCeUNvbHVtbiAoXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRcdHJvb3RDb2x1bW46IENvbHVtbkluZm8sXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPHZvaWQgfCBJdGVtRW50cnlbXT4ge1xuXHRcdGNvbnN0IGNoaWxkQ29sdW1ucyA9IHJvb3RDb2x1bW4uY2hpbGRyZW47XG5cblx0XHRpZiAoY2hpbGRDb2x1bW5zLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcblxuXHRcdGNvbnN0IGZpcnN0Q2hpbGQgPSBjaGlsZENvbHVtbnNbMF07XG5cblx0XHRpZiAoY2hpbGRDb2x1bW5zLmxlbmd0aCA9PT0gMSAmJiBmaXJzdENoaWxkLmFwaUNvbHVtbi50eXBlID09PSAnaWQnKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdFx0aXRlbUVudHJ5LmRlcml2ZWRbZmlyc3RDaGlsZC5wYXRoXSA9IHRoaXMuZ2V0SXRlbUlkQnlDb2x1bW4oaXRlbUVudHJ5LCByb290Q29sdW1uKTtcblxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGl0ZW1JZE1hcDoge1tpdGVtSWQ6IHN0cmluZ106IEl0ZW1FbnRyeVtdfSA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGl0ZW1JZCA9IHRoaXMuZ2V0SXRlbUlkQnlDb2x1bW4oaXRlbUVudHJ5LCByb290Q29sdW1uKTtcblxuXHRcdFx0aWYgKGl0ZW1JZE1hcFtpdGVtSWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGl0ZW1JZE1hcFtpdGVtSWRdID0gW107XG5cblx0XHRcdGl0ZW1JZE1hcFtpdGVtSWRdLnB1c2goaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRpZiAoaXRlbUlkTWFwLm51bGwgIT09IHVuZGVmaW5lZClcblx0XHRcdHRoaXMuc2V0RGVmYXVsdFZhbHVlc0J5Q29sdW1uKGl0ZW1JZE1hcC5udWxsLCByb290Q29sdW1uKTtcblxuXHRcdGNvbnN0IGl0ZW1JZHM6IEl0ZW1JZFtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtSWRNYXApIHtcblx0XHRcdGlmIChpdGVtSWQgPT09ICdudWxsJylcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGl0ZW1JZHMucHVzaCgraXRlbUlkKTtcblx0XHR9XG5cblx0XHRpZiAoaXRlbUlkcy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XG5cblx0XHRjb25zdCBjb2x1bW5JZHM6IHN0cmluZ1tdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjaGlsZENvbHVtbnMpXG5cdFx0XHRjb2x1bW5JZHMucHVzaChjb2x1bW4uaWQpO1xuXG5cdFx0cmV0dXJuIHRoaXMuZmV0Y2hJdGVtcyhcblx0XHRcdDxJdGVtVHlwZT4gcm9vdENvbHVtbi5pdGVtVHlwZSxcblx0XHRcdGl0ZW1JZHMsXG5cdFx0XHRuZXcgSXRlbUVudHJ5T3B0aW9ucyh7Y29sdW1uczogY29sdW1uSWRzfSksXG5cdFx0XHRsb2NhbEl0ZW1DYWNoZVxuXHRcdCkudGhlbihcblx0XHRcdHNvdXJjZUl0ZW1FbnRyaWVzID0+IHtcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2Ygc291cmNlSXRlbUVudHJpZXMpIHtcblx0XHRcdFx0XHRjb25zdCBpdGVtRW50cnlGaWVsZHMgPSBpdGVtRW50cnkuZ2V0RmllbGRzKCk7XG5cdFx0XHRcdFx0Y29uc3QgZGVzdGluYXRpb25JdGVtRW50cmllcyA9IGl0ZW1JZE1hcFtpdGVtRW50cnkuaXRlbUlkXTtcblxuXHRcdFx0XHRcdGZvciAoY29uc3QgZGVzdGluYXRpb25JdGVtRW50cnkgb2YgZGVzdGluYXRpb25JdGVtRW50cmllcykge1xuXHRcdFx0XHRcdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY2hpbGRDb2x1bW5zKVxuXHRcdFx0XHRcdFx0XHRkZXN0aW5hdGlvbkl0ZW1FbnRyeS5kZXJpdmVkW2NvbHVtbi5wYXRoXSA9IGl0ZW1FbnRyeUZpZWxkc1tjb2x1bW4uaWRdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0aGlzLnJlc29sdmVEZXJpdmVkVmFsdWVzKGl0ZW1FbnRyaWVzLCBjaGlsZENvbHVtbnMsIGxvY2FsSXRlbUNhY2hlKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cmVxdWVzdEl0ZW0gKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCByZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMgPSBpdGVtRW50cnkuY29sdW1ucy5yZXF1ZXN0KSB7XG5cdFx0cmV0dXJuIHRoaXMucmVxdWVzdEl0ZW1zKGl0ZW1FbnRyeS5pdGVtVHlwZSwgW2l0ZW1FbnRyeS5pdGVtSWRdLCByZXF1ZXN0Q29sdW1ucyk7XG5cdH1cblxuXHRyZXF1ZXN0SXRlbXMgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkczogSXRlbUlkW10sIGNvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zKTogUHJvbWlzZUludGVyZmFjZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KGl0ZW1UeXBlLCB7aWQ6IGl0ZW1JZHN9LCB7W2l0ZW1UeXBlXTogY29sdW1uc30pO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBBcGlSZXNwb25zZVByb2Nlc3NvciwgQ29sdW1uRXhwYW5zaW9uLCBDb2x1bW5TZXQsIEl0ZW1IYW5kbGVyLCBRdWVyeVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENvbHVtbkV4cGFuc2lvbkZhY3RvcnksIENvbHVtblNldEZhY3RvcnksIEl0ZW1FbnRyeUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7XG5cdEFwaVF1ZXJ5LFxuXHRBcGlSZXF1ZXN0Q29sdW1ucyxcblx0QXBpUmVzcG9uc2UsXG5cdEVudHJ5UGFyZW50TnVsbCxcblx0SXRlbUlkLFxuXHRJdGVtVHlwZSxcblx0UHJvbWlzZUludGVyZmFjZVxufSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IHBhdGhFeGlzdHMgfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgY2xhc3MgSXRlbVJlcXVlc3RTZXJ2aWNlIHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcblx0XHRwcml2YXRlIGl0ZW1FbnRyeUZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZVxuXHQpIHtcblx0fVxuXG5cdHJlcXVlc3RJdGVtIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkLCBjb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyk6IFByb21pc2VJbnRlcmZhY2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IHtcblx0XHRcdFtpdGVtVHlwZV06IGNvbHVtbnNcblx0XHR9O1xuXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdHtpZDogaXRlbUlkfSxcblx0XHRcdHJlcXVlc3RDb2x1bW5zXG5cdFx0KTtcblx0fVxuXG5cdHJlcXVlc3RJdGVtcyAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksXG5cdFx0cXVlcnk6IEFwaVF1ZXJ5ID0gY29sbGVjdGlvbkVudHJ5LnF1ZXJ5Lm9iamVjdCxcblx0XHRjb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyA9IGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zLmNvbHVtbnNcblx0KTogUHJvbWlzZUludGVyZmFjZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlO1xuXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucmVxdWVzdFNrZWxldG9uKFxuXHRcdFx0e1xuXHRcdFx0XHRyZXF1ZXN0VHlwZTogJ3F1ZXJ5Jyxcblx0XHRcdFx0aXRlbVR5cGU6IGl0ZW1UeXBlLFxuXHRcdFx0XHRjb2x1bW5zOiB7W2l0ZW1UeXBlXTogY29sdW1uc30sXG5cdFx0XHRcdHF1ZXJ5OiBxdWVyeSxcblx0XHRcdFx0bGltaXQ6IGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zLmxpbWl0XG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdHJlcXVlc3RMaW5rSXRlbXMgKFxuXHRcdHBhcmVudFR5cGU6IEl0ZW1UeXBlLFxuXHRcdHBhcmVudElkQXJyYXk6IEl0ZW1JZFtdLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRxdWVyeTogQXBpUXVlcnksXG5cdFx0Y29sdW1uczogQXBpUmVxdWVzdENvbHVtbnNcblx0KTogUHJvbWlzZUludGVyZmFjZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0ge1xuXHRcdFx0W2l0ZW1UeXBlXTogY29sdW1uc1xuXHRcdH07XG5cblx0XHRyZXR1cm4gcXVlcnkgPT09IG51bGwgP1xuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShcblx0XHRcdFx0cGFyZW50VHlwZSxcblx0XHRcdFx0e2lkOiBwYXJlbnRJZEFycmF5fSxcblx0XHRcdFx0cmVxdWVzdENvbHVtbnNcblx0XHRcdCkgOlxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShcblx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLmFkZEFuZENvbmRpdGlvbihcblx0XHRcdFx0XHRxdWVyeSxcblx0XHRcdFx0XHR7bGlua2VkVG86IHBhcmVudFR5cGUsIHF1ZXJ5OiB7aWQ6IHBhcmVudElkQXJyYXl9fVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRyZXF1ZXN0Q29sdW1ucyAvLyBzaG91bGQgY29udGFpbiBhIGRlcml2ZWQgY29sdW1uIHRoYXQgcmVmZXJzIHRvIHRoZSBwYXJlbnRcblx0XHRcdCk7XG5cdH1cblxuXHRwcm9jZXNzRXhwYW5zaW9uIChcblx0XHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMsXG5cdFx0cmVzcG9uc2U6IEFwaVJlc3BvbnNlLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W11cblx0KSB7XG5cdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0cmVxdWVzdENvbHVtbnMsXG5cdFx0XHRyZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKVxuXHRcdCk7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0aWYgKGl0ZW1FbnRyeS5pc0xvY2FsKCkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHR0aGlzLmhhbmRsZUNhY2hlZEl0ZW0oaXRlbUVudHJ5LCByZXNwb25zZSwgY29sdW1uRXhwYW5zaW9uKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29sdW1uRXhwYW5zaW9uO1xuXHR9XG5cblx0cHJvY2Vzc1Jlc3BvbnNlIChcblx0XHRyZXNwb25zZTogQXBpUmVzcG9uc2UsXG5cdFx0aWRBcnJheTogSXRlbUlkW10sXG5cdFx0cGFyZW50OiBFbnRyeVBhcmVudE51bGwsXG5cdFx0Y29sdW1uU2V0OiBDb2x1bW5TZXQsXG5cdFx0Y29sdW1uRXhwYW5zaW9uOiBDb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0Y29sdW1uU2V0Lml0ZW1UeXBlLFxuXHRcdFx0Y29sdW1uU2V0LnJlcXVlc3RDb2x1bW5zVHJ1ZSA/IHRydWUgOiBjb2x1bW5TZXQucmVxdWVzdCxcblx0XHRcdGNvbHVtblNldC5yZXNwb25zZVxuXHRcdClcblx0KTogUHJvbWlzZUludGVyZmFjZTxJdGVtRW50cnlbXT4ge1xuXHRcdGNvbnN0IGl0ZW1IYW5kbGVyID0gdGhpcy5pdGVtSGFuZGxlcjtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbHVtblNldC5pdGVtVHlwZTtcblx0XHRjb25zdCByb290Q29sdW1ucyA9IGNvbHVtblNldC5yb290O1xuXHRcdGNvbnN0IGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSA9IFtdO1xuXHRcdGNvbnN0IGRlZmVycmVkRW50cmllczogQXJyYXk8UHJvbWlzZUludGVyZmFjZTxJdGVtRW50cnk+PiA9IFtdO1xuXG5cdFx0Ly8gc2hvdWxkIGJlIGZhc3QuLi5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBvZiBpZEFycmF5KSB7XG5cdFx0XHRsZXQgaXRlbUVudHJ5ID0gaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZCk7XG5cblx0XHRcdGlmIChpdGVtRW50cnkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpdGVtRW50cnkgPSB0aGlzLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRcdGl0ZW1JZCxcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKSxcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgcm9vdENvbHVtbnMpLFxuXHRcdFx0XHRcdGNvbHVtblNldFxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGl0ZW1IYW5kbGVyLmVudHJpZXMuYWRkKGl0ZW1FbnRyeSk7XG5cdFx0XHRcdGl0ZW1FbnRyaWVzLnB1c2goaXRlbUVudHJ5KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmIChpdGVtRW50cnkuaXNEZWZlcnJlZCgpKSB7XG5cdFx0XHRcdFx0aWYgKGl0ZW1FbnRyeS5kZWZlclJlcXVlc3QpIHtcblx0XHRcdFx0XHRcdGl0ZW1FbnRyaWVzLnB1c2goXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5yZXNvbHZlRGVmZXJyZWQoXG5cdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCksXG5cdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIHJvb3RDb2x1bW5zKSxcblx0XHRcdFx0XHRcdFx0XHRjb2x1bW5TZXRcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGVsc2Vcblx0XHRcdFx0XHRcdGRlZmVycmVkRW50cmllcy5wdXNoKGl0ZW1FbnRyeS5nZXRQcm9taXNlKCkpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGl0ZW1FbnRyeS5yZWxvYWRRdWV1ZWQpIHtcblx0XHRcdFx0XHRpdGVtRW50cnkucmVsb2FkUXVldWVkID0gZmFsc2U7XG5cdFx0XHRcdFx0aXRlbUVudHJ5LnVwZGF0ZUZpZWxkcyhcblx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQpLFxuXHRcdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIHJvb3RDb2x1bW5zKSxcblx0XHRcdFx0XHRcdGZhbHNlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0XHRcdH0gZWxzZVxuXHRcdFx0XHRcdGl0ZW1FbnRyaWVzLnB1c2godGhpcy5oYW5kbGVDYWNoZWRJdGVtKGl0ZW1FbnRyeSwgcmVzcG9uc2UsIGNvbHVtbkV4cGFuc2lvbikpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocGFyZW50ICE9PSBudWxsKVxuXHRcdFx0XHRpdGVtRW50cnkucGFyZW50ID0gcGFyZW50O1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChkZWZlcnJlZEVudHJpZXMpLnRoZW4oXG5cdFx0XHRyZXNvbHZlZEVudHJpZXMgPT4ge1xuXHRcdFx0XHRmb3IgKGNvbnN0IHJlc29sdmVkRW50cnkgb2YgcmVzb2x2ZWRFbnRyaWVzKSB7XG5cdFx0XHRcdFx0aXRlbUVudHJpZXMucHVzaChcblx0XHRcdFx0XHRcdHRoaXMuaGFuZGxlQ2FjaGVkSXRlbShcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZWRFbnRyeSxcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0XHRcdGNvbHVtbkV4cGFuc2lvblxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJpZXM7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGhhbmRsZUNhY2hlZEl0ZW0gKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCByZXNwb25zZTogQXBpUmVzcG9uc2UsIGNvbHVtbkV4cGFuc2lvbjogQ29sdW1uRXhwYW5zaW9uKSB7XG5cdFx0Y29uc3QgZXhwYW5zaW9uUmVzdWx0ID0gY29sdW1uRXhwYW5zaW9uLnJ1bihpdGVtRW50cnkuY29sdW1ucyk7XG5cblx0XHRyZXR1cm4gZXhwYW5zaW9uUmVzdWx0ID09PSBudWxsID9cblx0XHRcdGl0ZW1FbnRyeSA6XG5cdFx0XHRpdGVtRW50cnkuZXhwYW5kKFxuXHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWQpLFxuXHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoXG5cdFx0XHRcdFx0aXRlbUVudHJ5Lml0ZW1UeXBlLFxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5pdGVtSWQsXG5cdFx0XHRcdFx0ZXhwYW5zaW9uUmVzdWx0LmRpZmZlcmVuY2Uucm9vdFxuXHRcdFx0XHQpLFxuXHRcdFx0XHRleHBhbnNpb25SZXN1bHRcblx0XHRcdCk7XG5cdH1cblxuXHRwcm9jZXNzTGlua1Jlc3BvbnNlIChcblx0XHRyZXNwb25zZTogQXBpUmVzcG9uc2UsXG5cdFx0cGFyZW50VHlwZTogSXRlbVR5cGUsXG5cdFx0cGFyZW50SWRBcnJheTogSXRlbUlkW10sXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnM6IGFueVxuXHQpIHtcblx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKTtcblx0XHRjb25zdCBjb2x1bW5TZXQgPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCBvcHRpb25zLmNvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucyk7XG5cdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucy5jb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xuXHRcdGNvbnN0IHBhcmVudEl0ZW1zID0gcmVzcG9uc2UuaXRlbXNbcGFyZW50VHlwZV07XG5cdFx0Y29uc3QgcHJvbWlzZXM6IGFueSA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBvZiBwYXJlbnRJZEFycmF5KSB7XG5cdFx0XHRwcm9taXNlc1twYXJlbnRJZF0gPSBwYXRoRXhpc3RzKHBhcmVudEl0ZW1zLCBbcGFyZW50SWQsICdsaW5rcycsIGl0ZW1UeXBlXSkgP1xuXHRcdFx0XHR0aGlzLnByb2Nlc3NSZXNwb25zZShcblx0XHRcdFx0XHRyZXNwb25zZSxcblx0XHRcdFx0XHRwYXJlbnRJdGVtc1twYXJlbnRJZF0ubGlua3NbaXRlbVR5cGVdLFxuXHRcdFx0XHRcdHtpdGVtVHlwZTogcGFyZW50VHlwZSwgaXRlbUlkOiBwYXJlbnRJZH0sXG5cdFx0XHRcdFx0Y29sdW1uU2V0LFxuXHRcdFx0XHRcdGNvbHVtbkV4cGFuc2lvblxuXHRcdFx0XHQpIDpcblx0XHRcdFx0W107XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHByb21pc2VzKS50aGVuKFxuXHRcdFx0cmVzb2x2ZWQgPT4ge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGl0ZW1zOiByZXNvbHZlZCxcblx0XHRcdFx0XHRjb2x1bW5zOiBjb2x1bW5TZXQsXG5cdFx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uOiBjb2x1bW5FeHBhbnNpb25cblx0XHRcdFx0fTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBEVVBMSUNBVEVfS0VZV09SRCwgRFVQTElDQVRFX1BSRUZJWCwgTkVXX0tFWVdPUkQsIE5FV19QUkVGSVggfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgSXRlbUlkLCBTdGF0ZUtleSwgU3RhdGVLZXlUeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgS2V5U2VydmljZSB7XG5cdHNlcGFyYXRvcjogc3RyaW5nID0gJzonO1xuXG5cdGNvbnN0cnVjdG9yICgpIHt9XG5cblx0Z2V0U2luZ2xlS2V5IChpdGVtVHlwZTogc3RyaW5nLCBpdGVtSWQ6IG51bWJlciB8IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGl0ZW1UeXBlICsgdGhpcy5zZXBhcmF0b3IgKyBpdGVtSWQ7XG5cdH1cblxuXHRnZXRDc3NLZXkgKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIEFycmF5LnByb3RvdHlwZS5qb2luLmNhbGwoYXJndW1lbnRzLCAnXycpO1xuXHR9XG5cblx0cGFyc2VTdGF0ZUtleSAoc3RhdGVLZXk6IHN0cmluZyk6IFN0YXRlS2V5IHwgbnVsbCB7XG5cdFx0c3RhdGVLZXkgPSBzdGF0ZUtleS50b1N0cmluZygpO1xuXG5cdFx0aWYgKHN0YXRlS2V5LnN1YnN0cmluZygwLCBORVdfS0VZV09SRC5sZW5ndGgpID09PSBORVdfS0VZV09SRClcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHR5cGU6IFN0YXRlS2V5VHlwZS5OZXcsXG5cdFx0XHRcdHRlbXBsYXRlOiBzdGF0ZUtleS5zdWJzdHJpbmcoTkVXX0tFWVdPUkQubGVuZ3RoKSAvLyBUT0RPOiB0aGlzIGlzIGN1cnJlbnRseSBub3QgYmVpbmcgdXNlZCwgcmVldmFsdWF0ZVxuXHRcdFx0fTtcblxuXHRcdGlmIChzdGF0ZUtleS5zdWJzdHJpbmcoMCwgRFVQTElDQVRFX0tFWVdPUkQubGVuZ3RoKSA9PT0gRFVQTElDQVRFX0tFWVdPUkQpXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0eXBlOiBTdGF0ZUtleVR5cGUuRHVwbGljYXRlLFxuXHRcdFx0XHRpdGVtSWQ6ICtzdGF0ZUtleS5zdWJzdHJpbmcoRFVQTElDQVRFX0tFWVdPUkQubGVuZ3RoKVxuXHRcdFx0fTtcblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Z2V0RHVwbGljYXRlU3RhdGVLZXkgKGl0ZW1JZDogc3RyaW5nIHwgbnVtYmVyKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gRFVQTElDQVRFX0tFWVdPUkQgKyBpdGVtSWQ7XG5cdH1cblxuXHRnZXROZXdTdGF0ZUtleSAodGVtcGxhdGVUeXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdHJldHVybiBORVdfS0VZV09SRCArIHRlbXBsYXRlVHlwZTtcblx0fVxuXG5cdGdldExvY2FsSWQgKCk6IEl0ZW1JZCB7XG5cdFx0cmV0dXJuICsoTkVXX1BSRUZJWCArIHRoaXMuZ2V0UmFuZG9tU3RyaW5nKCkpO1xuXHR9XG5cblx0Z2V0TG9jYWxEdXBsaWNhdGVJZCAoKTogSXRlbUlkIHtcblx0XHRyZXR1cm4gKyhEVVBMSUNBVEVfUFJFRklYICsgdGhpcy5nZXRSYW5kb21TdHJpbmcoKSk7XG5cdH1cblxuXHRnZXRSYW5kb21TdHJpbmcgKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuICgnJyArIE1hdGgucmFuZG9tKCkpLnNwbGl0KCcuJylbMV0uc3Vic3RyKDAsIDgpO1xuXHR9XG5cblx0Ly8gbm90ZTogdGhlIGNoYW5nZXMgY29tcGlsZXIgdXNlcyB0aGlzXG5cdC8vIG1pZ2h0IGJlIGNhbGxlZCB3aXRoIHVuZGVmaW5lZCAoaXRlbUhhbmRsZXIuY3JlYXRlUmVxdWVzdClcblx0aXNMb2NhbElkIChpdGVtSWQ6IEl0ZW1JZCB8IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBpdGVtSWQgIT09IHVuZGVmaW5lZCAmJiAodGhpcy5pc05ld0lkKGl0ZW1JZCkgfHwgdGhpcy5pc0R1cGxpY2F0ZUlkKGl0ZW1JZCkpO1xuXHR9XG5cblx0aXNOZXdJZCAoaXRlbUlkOiBJdGVtSWQgfCBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gaXRlbUlkID09PSBORVdfS0VZV09SRCB8fCAoJycgKyBpdGVtSWQpLnN1YnN0cmluZygwLCBORVdfUFJFRklYLmxlbmd0aCkgPT09IE5FV19QUkVGSVg7XG5cdH1cblxuXHRpc0R1cGxpY2F0ZUlkIChpdGVtSWQ6IEl0ZW1JZCB8IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBpdGVtSWQgPT09IERVUExJQ0FURV9LRVlXT1JEIHx8ICgnJyArIGl0ZW1JZCkuc3Vic3RyaW5nKDAsIERVUExJQ0FURV9QUkVGSVgubGVuZ3RoKSA9PT0gRFVQTElDQVRFX1BSRUZJWDtcblx0fVxufVxuIiwiaW1wb3J0IHsgQXBpUmVzcG9uc2VQcm9jZXNzb3IsIENvbGxlY3Rpb25NYXRjaGVyLCBDb2x1bW5TZXQsIExvY2FsQ2FjaGUsIFJlcXVlc3RDb2x1bW5FeHBhbnNpb24gfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEVOVFJZX1NUQVRVUyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuXHRDb2xsZWN0aW9uRW50cnksXG5cdENvbGxlY3Rpb25FbnRyeU9wdGlvbnMsXG5cdENvbGxlY3Rpb25FbnRyeU9wdGlvbnNJbnRlcmZhY2UsXG5cdENvbGxlY3Rpb25SZXNvdXJjZSxcblx0Q29sbGVjdGlvblJlc291cmNlT3B0aW9ucyxcblx0Q29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZSxcblx0SXRlbUVudHJ5LFxuXHRJdGVtRW50cnlPcHRpb25zSW50ZXJmYWNlLFxuXHRJdGVtUmVzb3VyY2UsXG5cdEl0ZW1SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2Vcbn0gZnJvbSAnLi4vbW9kZWxzJztcblxuZXhwb3J0IHR5cGUgRW50cnlQYXJlbnQgPSB7aXRlbVR5cGU6IHN0cmluZywgaXRlbUlkOiBudW1iZXJ9O1xuXG5leHBvcnQgdHlwZSBFbnRyeVBhcmVudE51bGwgPSBFbnRyeVBhcmVudCB8IG51bGw7XG5cbmV4cG9ydCB0eXBlIEZpZWxkTWFwID0ge1xuXHRba2V5OiBzdHJpbmddOiBhbnlcbn07XG5cbmV4cG9ydCB0eXBlIEl0ZW1PcHRpb25zSW50ZXJmYWNlID0gSXRlbUVudHJ5T3B0aW9uc0ludGVyZmFjZSAmIEl0ZW1SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2U7XG5cbmV4cG9ydCB0eXBlIENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlID0gQ29sbGVjdGlvbkVudHJ5T3B0aW9uc0ludGVyZmFjZSAmIENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2U7XG5cbmV4cG9ydCB0eXBlIENvbGxlY3Rpb25EZWZpbml0aW9uID0ge1xuXHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdG9wdGlvbnM6IHtlbnRyeTogQ29sbGVjdGlvbkVudHJ5T3B0aW9ucywgcmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnN9XG59O1xuXG5leHBvcnQgdHlwZSBMaW5rQ29sbGVjdGlvbkRlZmluaXRpb24gPSB7XG5cdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0bGlua1R5cGU6IEl0ZW1UeXBlLFxuXHRsaW5rSWRBcnJheTogSXRlbUlkW10gfCAoKCkgPT4gSXRlbUlkW10pLFxuXHRsaW5rRmllbGQ6IHN0cmluZyxcblx0b3B0aW9uczoge2VudHJ5OiBDb2xsZWN0aW9uRW50cnlPcHRpb25zLCByZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc31cbn07XG5cbmV4cG9ydCB0eXBlIE9uQ2hhbmdlRnVuY3Rpb24gPSAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UsIHByZXZpb3VzPzogRmllbGRNYXApID0+IHZvaWQ7XG5cbmV4cG9ydCBjb25zdCBlbnVtIFN0YXRlS2V5VHlwZSB7XG5cdE5ldyA9ICduZXcnLFxuXHREdXBsaWNhdGUgPSAnZHVwbGljYXRlJ1xufVxuXG5leHBvcnQgdHlwZSBTdGF0ZUtleSA9IHt0eXBlOiBTdGF0ZUtleVR5cGUsIHRlbXBsYXRlPzogc3RyaW5nLCBpdGVtSWQ/OiBudW1iZXJ9O1xuXG5leHBvcnQgdHlwZSBPblNhdmVDYWxsYmFjayA9IChsb2NhbENhY2hlOiBMb2NhbENhY2hlLCBjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwKSA9PiBhbnk7XG5cbmV4cG9ydCBlbnVtIExvY2FsQ2FjaGVDYWxsYmFja0NvbmRpdGlvbiB7XG5cdEFsd2F5cyA9ICdhbHdheXMnLFxuXHRPbkNsb3NlID0gJ29uQ2xvc2UnLFxuXHRTa2lwT25DbG9zZSA9ICdza2lwT25DbG9zZSdcbn1cblxuZXhwb3J0IHR5cGUgTG9jYWxDYWNoZUNhbGxiYWNrczxUPiA9IHtcblx0YWx3YXlzOiB7W2tleTogc3RyaW5nXTogVH0sXG5cdG9uQ2xvc2U6IHtba2V5OiBzdHJpbmddOiBUfSxcblx0c2tpcE9uQ2xvc2U6IHtba2V5OiBzdHJpbmddOiBUfVxufTtcblxuZXhwb3J0IHR5cGUgU29ja2V0TWVzc2FnZVR5cGUgPSAnZXZlbnQnIHwgJ25vdGlmaWNhdGlvbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU29ja2V0TWVzc2FnZSB7XG5cdGhlYWRlcjoge1xuXHRcdGRvbWFpbjogc3RyaW5nLFxuXHRcdGFjY291bnQ6IHN0cmluZyxcblx0XHRzZW5kZXI6IHtcblx0XHRcdGRpc3BsYXluYW1lOiBzdHJpbmcsXG5cdFx0XHRpdGVtVHlwZTogJ01lZGV3ZXJrZXInLFxuXHRcdFx0aXRlbUlkOiBJdGVtSWQsXG5cdFx0XHRhdXRob3JpemVkOiBib29sZWFuLFxuXHRcdFx0c2Vzc2lvbjogc3RyaW5nXG5cdFx0fSxcblx0XHRtZXNzYWdlSWQ6IHtcblx0XHRcdElkOiBzdHJpbmcsXG5cdFx0XHRzZXF1ZW5jZTogbnVtYmVyLFxuXHRcdFx0YmF0Y2g6IG51bWJlcixcblx0XHRcdHJlcXVlc3Q6IG51bWJlclxuXHRcdH0sXG5cdFx0c2VudDogc3RyaW5nLFxuXHRcdGZvcmNlRXZhbHVhdGU6IGJvb2xlYW5cblx0fTtcblx0Ym9keTogYW55O1xuXHRtZXNzYWdlVHlwZTogU29ja2V0TWVzc2FnZVR5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZVNvY2tldE1lc3NhZ2UgZXh0ZW5kcyBTb2NrZXRNZXNzYWdlIHtcblx0Ym9keToge1xuXHRcdGl0ZW1UeXBlOiAnRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZScsXG5cdFx0W2tleTogc3RyaW5nXTogYW55XG5cdH07XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEl0ZW0gcmVzb3VyY2VcblxuZXhwb3J0IHR5cGUgSXRlbVJlc291cmNlSXRlbUlkTWFwIDxUIGV4dGVuZHMgSXRlbVJlc291cmNlID0gSXRlbVJlc291cmNlPiA9IHtcblx0W2l0ZW1JZDogbnVtYmVyXTogVFxufTtcblxuZXhwb3J0IHR5cGUgSXRlbVJlc291cmNlc0l0ZW1UeXBlTWFwIDxUIGV4dGVuZHMgSXRlbVJlc291cmNlID0gSXRlbVJlc291cmNlPiA9IHtcblx0W2l0ZW1UeXBlOiBzdHJpbmddOiBUW11cbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEl0ZW0gRW50cnlcblxuZXhwb3J0IHR5cGUgSXRlbUlkID0gbnVtYmVyO1xuXG5leHBvcnQgdHlwZSBJdGVtVHlwZSA9IHN0cmluZztcblxuZXhwb3J0IHR5cGUgSXRlbU1hcDxUPiA9IHtcblx0W2l0ZW1UeXBlOiBzdHJpbmddOiB7XG5cdFx0W2l0ZW1JZDogc3RyaW5nXTogVFxuXHR9XG59O1xuXG5leHBvcnQgdHlwZSBJdGVtRW50cnlNYXAgPSBJdGVtTWFwPEl0ZW1FbnRyeT47XG5cbmV4cG9ydCB0eXBlIExpbmtlZEl0ZW1FbnRyeU1hcCA9IHtcblx0aXRlbVR5cGU6IHN0cmluZyxcblx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRjb2x1bW5TZXQ6IENvbHVtblNldFxufTtcblxuZXhwb3J0IHR5cGUgRW50cnlTdGF0dXNNYXA8VD4gPSB7XG5cdFtlbnRyeVN0YXR1czogc3RyaW5nXTogVFtdO1xufTtcblxuZXhwb3J0IHR5cGUgSXRlbUVudHJ5UGFyZW50SWRNYXAgPSB7XG5cdFtwYXJlbnRJZDogbnVtYmVyXTogSXRlbUVudHJ5W107XG59O1xuXG5leHBvcnQgdHlwZSBDb252ZXJzaW9uTWFwID0ge1xuXHRbaXRlbUlkOiBudW1iZXJdOiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBJdGVtSWRDb252ZXJzaW9uTWFwID0ge1xuXHRbaXRlbVR5cGU6IHN0cmluZ106IENvbnZlcnNpb25NYXBcbn07XG5cbmV4cG9ydCB0eXBlIENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAgPSBJdGVtTWFwPGFueT47XG5cbmV4cG9ydCB0eXBlIEl0ZW1FcnJvciA9IHttZXNzYWdlOiBzdHJpbmd9O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBDb2xsZWN0aW9uIEVudHJ5XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5UGFyYW1zID0gYW55OyAvLyBUT0RPXG5cbmV4cG9ydCB0eXBlIENvbGxlY3Rpb25RdWVyeSA9IHtvYmplY3Q6IG9iamVjdCwgc3RyaW5nOiBzdHJpbmd9O1xuXG5leHBvcnQgdHlwZSBRdWVyeUNhbGxiYWNrID0gKHF1ZXJ5UGFyYW1zOiBRdWVyeVBhcmFtcykgPT4gUXVlcnlQYXJhbXM7XG5cbmV4cG9ydCB0eXBlIENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwID0ge1xuXHRbcGFyZW50SWQ6IG51bWJlcl06IENvbGxlY3Rpb25FbnRyeVxufTtcblxuZXhwb3J0IHR5cGUgQ29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA8VCBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZTxJdGVtUmVzb3VyY2U+ID0gQ29sbGVjdGlvblJlc291cmNlPEl0ZW1SZXNvdXJjZT4+ID0ge1xuXHRbcGFyZW50SWQ6IG51bWJlcl06IFRcbn07XG5cbmV4cG9ydCB0eXBlIENvbGxlY3Rpb25NYXRjaFJlc3VsdCA9IHtcblx0Zml0dGluZzogQ29sbGVjdGlvbkVudHJ5W10sXG5cdG5vdGZpdHRpbmc6IENvbGxlY3Rpb25FbnRyeVtdLFxuXHRtYXliZTogQ29sbGVjdGlvbkVudHJ5W11cbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXh0ZW5kZWRDb2xsZWN0aW9uTWF0Y2hSZXN1bHQgZXh0ZW5kcyBDb2xsZWN0aW9uTWF0Y2hSZXN1bHQge1xuXHRjb2xsZWN0aW9uOiBDb2xsZWN0aW9uRW50cnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBlZEV4dGVuZGVkQ29sbGVjdGlvbk1hdGNoUmVzdWx0IHtcblx0W2NvbGxlY3Rpb25JZDogbnVtYmVyXTogRXh0ZW5kZWRDb2xsZWN0aW9uTWF0Y2hSZXN1bHQ7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IENvbHVtbnNcblxuZXhwb3J0IHR5cGUgUmVzcG9uc2VDb2x1bW4gPSBhbnk7IC8vIFRPRE9cblxuZXhwb3J0IHR5cGUgUmVzcG9uc2VDb2x1bW5NYXAgPSB7XG5cdFtpdGVtVHlwZTogc3RyaW5nXToge1xuXHRcdFtjb2x1bW5JZDogc3RyaW5nXTogUmVzcG9uc2VDb2x1bW5cblx0fVxufTtcblxuZXhwb3J0IHR5cGUgQ29sdW1uRXhwYW5zaW9uUmVzdWx0ID0ge1xuXHRtZXJnZWQ6IENvbHVtblNldCxcblx0ZGlmZmVyZW5jZTogQ29sdW1uU2V0XG59O1xuXG5leHBvcnQgdHlwZSBSb290Q29sdW1uTWFwID0ge1tjb2x1bW5JZDogc3RyaW5nXToge2FwaUNvbHVtbjogUmVzcG9uc2VDb2x1bW4sIGNoaWxkcmVuOiBSb290Q29sdW1uTWFwfX07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEFwaSByZWZlcmVuY2VcblxuZXhwb3J0IHR5cGUgQXBpUmVzcG9uc2UgPSBBcGlSZXNwb25zZVByb2Nlc3NvcjsgLy8gVE9ET1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBBcGkgdGVtcGxhdGUgcmVzcG9uc2VcbmV4cG9ydCB0eXBlIFRlbXBsYXRlSXRlbVJlc291cmNlTWFwIDxUIGV4dGVuZHMgSXRlbVJlc291cmNlPiA9IHtcblx0bWFpbjogVDtcblx0bGlua2VkOiBJdGVtUmVzb3VyY2VzSXRlbVR5cGVNYXBcbn07XG5cbmV4cG9ydCB0eXBlIFRlbXBsYXRlSXRlbUVudHJ5TWFwID0ge1xuXHRtYWluOiBJdGVtRW50cnk7XG5cdGxpbmtlZDogTGlua2VkSXRlbUVudHJ5TWFwW107XG59O1xuXG5leHBvcnQgdHlwZSBJdGVtVHlwZU1hcCA9IHtcblx0W2l0ZW1UeXBlOiBzdHJpbmddOiBhbnk7XG59O1xuXG5leHBvcnQgdHlwZSBFbnRyeVN0YXR1czxUPiA9IHtcblx0ZW50cnk6IFQ7XG5cdHN0YXR1czogRU5UUllfU1RBVFVTO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gQXBpIHJlcXVlc3RcblxuZXhwb3J0IHR5cGUgQXBpUXVlcnkgPSBhbnk7IC8vIFRPRE9cblxuZXhwb3J0IHR5cGUgQXBpUmVxdWVzdEl0ZW1WYWx1ZXMgPSB7XG5cdHZhbHVlcz86IGFueSxcblx0bGlua3M/OiB7XG5cdFx0W2l0ZW1UeXBlOiBzdHJpbmddOiBJdGVtSWRbXVxuXHR9XG59O1xuXG5leHBvcnQgdHlwZSBBcGlSZXF1ZXN0SXRlbU1hcCA9IHtcblx0W2l0ZW1UeXBlOiBzdHJpbmddOiB7XG5cdFx0W2l0ZW1JZDogbnVtYmVyXTogQXBpUmVxdWVzdEl0ZW1WYWx1ZXNcblx0fTtcbn07XG5cbmV4cG9ydCB0eXBlIEFwaVJlcXVlc3RDb2x1bW4gPSBzdHJpbmcgfCB7W2NvbHVtbklkOiBzdHJpbmddOiBBcGlSZXF1ZXN0Q29sdW1uW119O1xuXG5leHBvcnQgdHlwZSBBcGlSZXF1ZXN0Q29sdW1ucyA9IEFwaVJlcXVlc3RDb2x1bW5bXSB8IHRydWU7XG5cbmV4cG9ydCB0eXBlIEFwaVJlcXVlc3RDb2x1bW5NYXAgPSB7XG5cdFtpdGVtVHlwZTogc3RyaW5nXTogQXBpUmVxdWVzdENvbHVtbnNcbn07XG5cbmV4cG9ydCB0eXBlIEFwaVJlcXVlc3RMaW1pdCA9IHtcblx0ZmllbGQ6IHN0cmluZyxcblx0bGltaXQ6IG51bWJlcixcblx0b2Zmc2V0PzogbnVtYmVyLFxuXHRvcmRlcj86ICdkZXNjJyB8ICdhc2MnXG59O1xuXG5leHBvcnQgdHlwZSBBcGlSZXF1ZXN0TW92ZUl0ZW1zID0ge1xuXHRbaXRlbVR5cGU6IHN0cmluZ106IEl0ZW1JZFtdXG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBDcmVhdGUgcmVxdWVzdFxuXG5leHBvcnQgdHlwZSBDcmVhdGVSZXF1ZXN0RW50cnkgPSB7XG5cdHJlcXVlc3Q6IHtcblx0XHRyZXF1ZXN0VHlwZTogJ2NyZWF0ZScsXG5cdFx0aXRlbVR5cGU/OiBJdGVtVHlwZSxcblx0XHRwYXJlbnRUeXBlPzogSXRlbVR5cGUsXG5cdFx0cGFyZW50SWQ/OiB7W2l0ZW1JZDogc3RyaW5nXTogSXRlbUlkfSxcblx0XHRpdGVtczogQXBpUmVxdWVzdEl0ZW1NYXAsXG5cdFx0Y29sdW1uczogQXBpUmVxdWVzdENvbHVtbk1hcFxuXHR9LFxuXHRjb2x1bW5zOiBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uLFxuXHRpdGVtczogSXRlbUVudHJ5TWFwLFxuXHRjb2xsZWN0aW9uczogQ29sbGVjdGlvbk1hdGNoZXJcbn07XG4iLCJleHBvcnQgKiBmcm9tICcuL0l0ZW1UeXBlc0NvbGxlY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9Qcm9taXNlSW50ZXJmYWNlJztcbiIsImltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSwgSXRlbUNhY2hlLCBMb2NrU2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHtcblx0Q2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXG5cdENvbGxlY3Rpb25DYWNoZUZhY3RvcnksXG5cdENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdEl0ZW1DYWNoZUZhY3RvcnksXG5cdEl0ZW1SZXNvdXJjZUZhY3Rvcnlcbn0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgRXhjZXB0aW9uSGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7XG5cdENvbGxlY3Rpb25FZGl0UmVzb3VyY2UsXG5cdENvbGxlY3Rpb25FbnRyeSxcblx0Q29sbGVjdGlvblJlc291cmNlLFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlLCBDb2xsZWN0aW9uVmlld1Jlc291cmNlLCBFZGl0UmVzb3VyY2UsXG5cdEl0ZW1FbnRyeSxcblx0SXRlbVJlc291cmNlLCBMb2NhbFZpZXdSZXNvdXJjZSwgUmVtb3RlVmlld1Jlc291cmNlXG59IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge1xuXHRDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCwgQ29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXAsXG5cdENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAsXG5cdEl0ZW1JZENvbnZlcnNpb25NYXAsXG5cdEl0ZW1PcHRpb25zSW50ZXJmYWNlLFxuXHRMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24sXG5cdExvY2FsQ2FjaGVDYWxsYmFja3MsXG5cdE9uU2F2ZUNhbGxiYWNrLFxuXHRQcm9taXNlSW50ZXJmYWNlXG59IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSAnLi9VdGlsJztcblxuZXhwb3J0IGNsYXNzIExvY2FsQ2FjaGUge1xuXHRpdGVtczogSXRlbUNhY2hlO1xuXHRyb290SXRlbTogSXRlbUVudHJ5IHwgdW5kZWZpbmVkO1xuXHRjb2xsZWN0aW9uczogQ29sbGVjdGlvbkNhY2hlO1xuXHRkZWZlcnJlZENvbGxlY3Rpb25zOiBDb2xsZWN0aW9uQ2FjaGU7XG5cdHRhYlJlcXVlc3RQYXJhbWV0ZXJzID0ge307XG5cblx0aXNTYXZpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuXHRwcml2YXRlIGNhbGxiYWNrczoge1xuXHRcdG9uQmVmb3JlU2F2ZTogTG9jYWxDYWNoZUNhbGxiYWNrczwobG9jYWxDYWNoZTogTG9jYWxDYWNoZSkgPT4gYW55Pixcblx0XHRvblNhdmVTdWNjZXNzOiBMb2NhbENhY2hlQ2FsbGJhY2tzPE9uU2F2ZUNhbGxiYWNrPixcblx0fSA9IHtcblx0XHRvbkJlZm9yZVNhdmU6IHthbHdheXM6IHt9LCBvbkNsb3NlOiB7fSwgc2tpcE9uQ2xvc2U6IHt9fSxcblx0XHRvblNhdmVTdWNjZXNzOiB7YWx3YXlzOiB7fSwgb25DbG9zZToge30sIHNraXBPbkNsb3NlOiB7fX1cblx0fTtcblxuXHRwcml2YXRlIGNoYW5nZXNJbnRlcnZhbDogbnVsbCB8IG51bWJlciA9IG51bGw7XG5cdGhhc0NoYW5nZXMgPSBmYWxzZTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeTogQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sbGVjdGlvblJlc291cmNlRmFjdG9yeTogQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgZXhjZXB0aW9uSGFuZGxlcjogRXhjZXB0aW9uSGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGl0ZW1DYWNoZUZhY3Rvcnk6IEl0ZW1DYWNoZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdHByaXZhdGUgbG9ja1NlcnZpY2U6IExvY2tTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxuXHRcdHB1YmxpYyBpZDogc3RyaW5nID0gJydcblx0KSB7XG5cdFx0dGhpcy5pdGVtcyA9IHRoaXMuaXRlbUNhY2hlRmFjdG9yeS5jb25zdHJ1Y3QoKTtcblx0XHR0aGlzLmNvbGxlY3Rpb25zID0gdGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xuXHRcdHRoaXMuZGVmZXJyZWRDb2xsZWN0aW9ucyA9IHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeS5jb25zdHJ1Y3QoKTtcblx0fVxuXG5cdGNyZWF0ZUl0ZW1SZXNvdXJjZSAoXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnksXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdDogdHJ1ZX0sXG5cdFx0aXNSb290PzogYm9vbGVhbixcblx0XHRpc05ldz86IGJvb2xlYW5cblx0KTogRWRpdFJlc291cmNlO1xuXG5cdGNyZWF0ZUl0ZW1SZXNvdXJjZSAoXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnksXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgJiB7cmVtb3RlOiB0cnVlfSxcblx0XHRpc1Jvb3Q/OiBib29sZWFuLFxuXHRcdGlzTmV3PzogYm9vbGVhblxuXHQpOiBSZW1vdGVWaWV3UmVzb3VyY2U7XG5cblx0Y3JlYXRlSXRlbVJlc291cmNlIChcblx0XHRpdGVtRW50cnk6IEl0ZW1FbnRyeSxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSxcblx0XHRpc1Jvb3Q/OiBib29sZWFuLFxuXHRcdGlzTmV3PzogYm9vbGVhblxuXHQpOiBMb2NhbFZpZXdSZXNvdXJjZTtcblxuXHRjcmVhdGVJdGVtUmVzb3VyY2UgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSwgaXNSb290OiBib29sZWFuID0gZmFsc2UsIGlzTmV3PzogYm9vbGVhbikge1xuXHRcdGlmIChpc1Jvb3QpXG5cdFx0XHR0aGlzLnJvb3RJdGVtID0gaXRlbUVudHJ5O1xuXG5cdFx0b3B0aW9ucy5vbkRlYWN0aXZhdGUgPSAoX2l0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiB0aGlzLm9uRGVhY3RpdmF0ZUl0ZW0oX2l0ZW1FbnRyeSk7XG5cblx0XHRyZXR1cm4gdGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LmNvbnN0cnVjdChpdGVtRW50cnksIG9wdGlvbnMsIGlzTmV3KTtcblx0fVxuXG5cdGNyZWF0ZUl0ZW1SZXNvdXJjZXMgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgb3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdDogdHJ1ZX0pOiBFZGl0UmVzb3VyY2VbXTtcblx0Y3JlYXRlSXRlbVJlc291cmNlcyAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCBvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSAmIHtyZW1vdGU6IHRydWV9KTogUmVtb3RlVmlld1Jlc291cmNlW107XG5cdGNyZWF0ZUl0ZW1SZXNvdXJjZXMgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgb3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UpOiBMb2NhbFZpZXdSZXNvdXJjZVtdO1xuXHRjcmVhdGVJdGVtUmVzb3VyY2VzIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlKSB7XG5cdFx0b3B0aW9ucy5vbkRlYWN0aXZhdGUgPSAoX2l0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiB0aGlzLm9uRGVhY3RpdmF0ZUl0ZW0oX2l0ZW1FbnRyeSk7XG5cblx0XHRjb25zdCBjb25zdHJ1Y3RvciA9IHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeS5nZXRDb25zdHJ1Y3RvcihvcHRpb25zKTtcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1SZXNvdXJjZVtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdHJlc3VsdC5wdXNoKGNvbnN0cnVjdG9yKGl0ZW1FbnRyeSkpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZSAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksXG5cdFx0cmVzb3VyY2VPcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlICYge2VkaXRJdGVtczogdHJ1ZSwgZWRpdENvbGxlY3Rpb246IHRydWV9XG5cdCk6IENvbGxlY3Rpb25FZGl0UmVzb3VyY2U8RWRpdFJlc291cmNlPjtcblxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UgKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdHJlc291cmNlT3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZSAmIHtyZW1vdGVJdGVtczogdHJ1ZSwgZWRpdENvbGxlY3Rpb246IHRydWV9XG5cdCk6IENvbGxlY3Rpb25FZGl0UmVzb3VyY2U8UmVtb3RlVmlld1Jlc291cmNlPjtcblxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UgKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdHJlc291cmNlT3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0Q29sbGVjdGlvbjogdHJ1ZX1cblx0KTogQ29sbGVjdGlvbkVkaXRSZXNvdXJjZTxMb2NhbFZpZXdSZXNvdXJjZT47XG5cblx0Y3JlYXRlQ29sbGVjdGlvblJlc291cmNlIChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRyZXNvdXJjZU9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdEl0ZW1zOiB0cnVlfVxuXHQpOiBDb2xsZWN0aW9uVmlld1Jlc291cmNlPEVkaXRSZXNvdXJjZT47XG5cblx0Y3JlYXRlQ29sbGVjdGlvblJlc291cmNlIChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRyZXNvdXJjZU9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UgJiB7cmVtb3RlSXRlbXM6IHRydWV9XG5cdCk6IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8UmVtb3RlVmlld1Jlc291cmNlPjtcblxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UgKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdHJlc291cmNlT3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZVxuXHQpOiBDb2xsZWN0aW9uVmlld1Jlc291cmNlPExvY2FsVmlld1Jlc291cmNlPjtcblxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UgKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdHJlc291cmNlT3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZVxuXHQpOiBDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVJlc291cmNlPiB7XG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvblJlc291cmNlRmFjdG9yeS5jb25zdHJ1Y3QoY29sbGVjdGlvbkVudHJ5LCByZXNvdXJjZU9wdGlvbnMsIHRoaXMpO1xuXHR9XG5cblx0Y3JlYXRlQ29sbGVjdGlvblJlc291cmNlcyAoXG5cdFx0Y29sbGVjdGlvbkVudHJpZXM6IENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwLFxuXHRcdHJlc291cmNlT3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0SXRlbXM6IHRydWUsIGVkaXRDb2xsZWN0aW9uOiB0cnVlfVxuXHQpOiBDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcDxDb2xsZWN0aW9uRWRpdFJlc291cmNlPEVkaXRSZXNvdXJjZT4+O1xuXG5cdGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZXMgKFxuXHRcdGNvbGxlY3Rpb25FbnRyaWVzOiBDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCxcblx0XHRyZXNvdXJjZU9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UgJiB7cmVtb3RlSXRlbXM6IHRydWUsIGVkaXRDb2xsZWN0aW9uOiB0cnVlfVxuXHQpOiBDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcDxDb2xsZWN0aW9uRWRpdFJlc291cmNlPFJlbW90ZVZpZXdSZXNvdXJjZT4+O1xuXG5cdGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZXMgKFxuXHRcdGNvbGxlY3Rpb25FbnRyaWVzOiBDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCxcblx0XHRyZXNvdXJjZU9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdENvbGxlY3Rpb246IHRydWV9XG5cdCk6IENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwPENvbGxlY3Rpb25FZGl0UmVzb3VyY2U8TG9jYWxWaWV3UmVzb3VyY2U+PjtcblxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2VzIChcblx0XHRjb2xsZWN0aW9uRW50cmllczogQ29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXAsXG5cdFx0cmVzb3VyY2VPcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlICYge2VkaXRJdGVtczogdHJ1ZX1cblx0KTogQ29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA8Q29sbGVjdGlvblZpZXdSZXNvdXJjZTxFZGl0UmVzb3VyY2U+PjtcblxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2VzIChcblx0XHRjb2xsZWN0aW9uRW50cmllczogQ29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXAsXG5cdFx0cmVzb3VyY2VPcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlICYge3JlbW90ZUl0ZW1zOiB0cnVlfVxuXHQpOiBDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcDxDb2xsZWN0aW9uVmlld1Jlc291cmNlPFJlbW90ZVZpZXdSZXNvdXJjZT4+O1xuXG5cdGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZXMgKFxuXHRcdGNvbGxlY3Rpb25FbnRyaWVzOiBDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCxcblx0XHRyZXNvdXJjZU9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2Vcblx0KTogQ29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA8Q29sbGVjdGlvblZpZXdSZXNvdXJjZTxMb2NhbFZpZXdSZXNvdXJjZT4+O1xuXG5cdGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZXMgKFxuXHRcdGNvbGxlY3Rpb25FbnRyaWVzOiBDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCxcblx0XHRyZXNvdXJjZU9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2Vcblx0KSB7XG5cdFx0Y29uc3QgcmVzdWx0OiB7W3BhcmVudElkOiBzdHJpbmddOiBDb2xsZWN0aW9uUmVzb3VyY2V9ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGNvbGxlY3Rpb25FbnRyaWVzKVxuXHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IHRoaXMuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlKGNvbGxlY3Rpb25FbnRyaWVzW3BhcmVudElkXSwgcmVzb3VyY2VPcHRpb25zKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRjbGVhckl0ZW0gKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlKTogdm9pZCB7XG5cdFx0dGhpcy5jbGVhckl0ZW1FbnRyeShpdGVtUmVzb3VyY2UuZW50cnkpO1xuXHR9XG5cblx0Y2xlYXJJdGVtRW50cnkgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KTogdm9pZCB7XG5cdFx0dGhpcy5pdGVtcy5jbGVhcihpdGVtRW50cnkpO1xuXHRcdGl0ZW1FbnRyeS5jbGVhclJlc291cmNlcygpO1xuXHR9XG5cblx0Y2xlYXJDb2xsZWN0aW9uIChjb2xsZWN0aW9uUmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSk6IHZvaWQge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGNvbGxlY3Rpb25SZXNvdXJjZS5lbnRyeTtcblxuXHRcdHRoaXMuY29sbGVjdGlvbnMuY2xlYXIoY29sbGVjdGlvbkVudHJ5KTtcblx0XHRjb2xsZWN0aW9uRW50cnkuY2xlYXJSZXNvdXJjZXMoKTtcblx0fVxuXG5cdGNsZWFyUmVzb3VyY2VzIChpc1N1YlRhYkNoYW5nZTogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG5cdFx0dGhpcy5pdGVtcy5mb3JFYWNoKFxuXHRcdFx0KGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBpdGVtRW50cnkuY2xlYXJSZXNvdXJjZXMoKVxuXHRcdCk7XG5cblx0XHR0aGlzLmNvbGxlY3Rpb25zLmZvckVhY2goXG5cdFx0XHQoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpID0+IGNvbGxlY3Rpb25FbnRyeS5jbGVhclJlc291cmNlcyhpc1N1YlRhYkNoYW5nZSlcblx0XHQpO1xuXG5cdFx0dGhpcy5kZWZlcnJlZENvbGxlY3Rpb25zLmNsZWFyKCk7XG5cdH1cblxuXHR1cGRhdGVTaW5nbGVJdGVtcyAoY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCk6IHZvaWQge1xuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gY29udmVyc2lvbk1hcCkge1xuXHRcdFx0Zm9yIChjb25zdCBvbGRJdGVtSWQgaW4gY29udmVyc2lvbk1hcFtpdGVtVHlwZV0pIHtcblx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5pdGVtcy5nZXQoaXRlbVR5cGUsIHBhcnNlSW50KG9sZEl0ZW1JZCwgMTApKTtcblxuXHRcdFx0XHRpZiAoaXRlbUVudHJ5ID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0dGhpcy5pdGVtcy51cGRhdGVJdGVtSWQoaXRlbUVudHJ5LCBwYXJzZUludChvbGRJdGVtSWQsIDEwKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gcmVzb3VyY2VzIHdpbGwgYmUgY2xlYXJlZCBsYXRlciAoY2xlYXIgZnVuY3Rpb24pXG5cdHJldmVydENoYW5nZXMgKCk6IFByb21pc2VJbnRlcmZhY2U8dm9pZD4ge1xuXHRcdHRoaXMuaXRlbXMuZm9yRWFjaChcblx0XHRcdChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gaXRlbUVudHJ5LnJlc2V0TW9kaWZpZWQoKVxuXHRcdCk7XG5cblx0XHR0aGlzLmNvbGxlY3Rpb25zLmZvckVhY2goXG5cdFx0XHQoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpID0+IHRoaXMucmVzZXRDb2xsZWN0aW9uKGNvbGxlY3Rpb25FbnRyeSlcblx0XHQpO1xuXG5cdFx0dGhpcy5oYXNDaGFuZ2VzID0gZmFsc2U7XG5cblx0XHRyZXR1cm4gdGhpcy5pc0xvY2thYmxlKCkgP1xuXHRcdFx0dGhpcy5sb2NrU2VydmljZS5kZWxldGVMb2NrKHRoaXMucm9vdEl0ZW0hKSA6XG5cdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcblx0fVxuXG5cdHJlc2V0Q29sbGVjdGlvbiAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpOiB2b2lkIHtcblx0XHQvLyByZXZlcnQgY2hhbmdlcyBmb3IgKmFsbCogY29sbGVjdGlvbnMsIGl0ZW1zIG1pZ2h0IGhhdmUgYmVlbiBhZGRlZCBvbiByZXNvbHZlXG5cdFx0Y29sbGVjdGlvbkVudHJ5Lml0ZW1zID0gY29sbGVjdGlvbkVudHJ5LmluaXRpYWwuc2xpY2UoKTtcblxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaGFzSXRlbUVkaXRSZXNvdXJjZXMpIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGNvbGxlY3Rpb25FbnRyeS5pdGVtcylcblx0XHRcdFx0aXRlbUVudHJ5LnJlc2V0TW9kaWZpZWQoKTtcblx0XHR9XG5cdH1cblxuXHRkZXRlY3RDaGFuZ2VzICgpOiBib29sZWFuIHtcblx0XHRpZiAodGhpcy5oYXNDaGFuZ2VzKVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cblx0XHRpZiAodGhpcy5pdGVtcy5zb21lKChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gaXRlbUVudHJ5Lmhhc0NoYW5nZXMoKSkpXG5cdFx0XHRyZXR1cm4gdGhpcy5oYXNDaGFuZ2VzID0gdHJ1ZTtcblxuXHRcdHJldHVybiB0aGlzLmhhc0NoYW5nZXMgPSB0aGlzLmNvbGxlY3Rpb25zLnNvbWUoKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiB0aGlzLmNvbGxlY3Rpb25IYXNDaGFuZ2VzKGNvbGxlY3Rpb25FbnRyeSkpO1xuXHR9XG5cblx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFzQ2hhbmdlcyAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpOiBib29sZWFuIHtcblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5Lmhhc0VkaXRSZXNvdXJjZXMgJiYgKGNvbGxlY3Rpb25FbnRyeS5oYXNBZGRlZEl0ZW1zKCkgfHwgY29sbGVjdGlvbkVudHJ5Lmhhc1JlbW92ZWRJdGVtcygpKSlcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0cmV0dXJuIGNvbGxlY3Rpb25FbnRyeS5oYXNJdGVtRWRpdFJlc291cmNlcyAmJiBjb2xsZWN0aW9uRW50cnkuaGFzVXBkYXRlZEl0ZW1zKCk7XG5cdH1cblxuXHRpc0xvY2thYmxlICgpOiBib29sZWFuIHtcblx0XHRpZiAodGhpcy5yb290SXRlbSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0cmV0dXJuIHRoaXMucm9vdEl0ZW0uaXNMb2NrYWJsZSgpO1xuXHR9XG5cblx0c2F2ZSAoXG5cdFx0Y2xvc2VUYWIgPSBmYWxzZSxcblx0XHRwYXJhbWV0ZXJzOiBDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwID0ge30sXG5cdFx0YnJlYWtVcEJ5UGFyZW50PzogYm9vbGVhbixcblx0XHRvbkFmdGVyQ3JlYXRlQ2FsbGJhY2s/OiAoY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCkgPT4gdm9pZFxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1JZENvbnZlcnNpb25NYXA+IHtcblx0XHRpZiAodGhpcy5pc1NhdmluZylcblx0XHRcdHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5yZWplY3QoKTtcblxuXHRcdHRoaXMuaXNTYXZpbmcgPSB0cnVlO1xuXG5cdFx0dGhpcy5kZXRlY3RDaGFuZ2VzKCk7XG5cdFx0dGhpcy5kaXNhYmxlQ2hhbmdlc1dhdGNoZXIoKTtcblxuXHRcdHJldHVybiAodGhpcy5pc0xvY2thYmxlKCkgPyB0aGlzLmxvY2tTZXJ2aWNlLmZldGNoTG9jayh0aGlzLnJvb3RJdGVtIGFzIEl0ZW1FbnRyeSkgOiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKSkudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZUNhbGxiYWNrRXZlbnQodGhpcy5jYWxsYmFja3Mub25CZWZvcmVTYXZlLCBjYWxsYmFjayA9PiBjYWxsYmFjayh0aGlzKSwgY2xvc2VUYWIpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0Y29uc3QgcmVxdWVzdFBhcmFtZXRlcnMgPSBleHRlbmQoe30sIHRoaXMudGFiUmVxdWVzdFBhcmFtZXRlcnMsIHBhcmFtZXRlcnMpO1xuXG5cdFx0XHRcdHRoaXMudGFiUmVxdWVzdFBhcmFtZXRlcnMgPSB7fTtcblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeS5jb25zdHJ1Y3QoKS5leGVjdXRlKFxuXHRcdFx0XHRcdHRoaXMuaXRlbXMudG9BcnJheSgpLFxuXHRcdFx0XHRcdHRoaXMuY29sbGVjdGlvbnMudG9BcnJheSgpLFxuXHRcdFx0XHRcdHJlcXVlc3RQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdGJyZWFrVXBCeVBhcmVudCxcblx0XHRcdFx0XHRvbkFmdGVyQ3JlYXRlQ2FsbGJhY2tcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHQoY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5pc0xvY2thYmxlKCkpXG5cdFx0XHRcdFx0dGhpcy5sb2NrU2VydmljZS5jbGVhckxvY2sodGhpcy5yb290SXRlbSBhcyBJdGVtRW50cnkpO1xuXG5cdFx0XHRcdHRoaXMuaGFzQ2hhbmdlcyA9IGZhbHNlO1xuXG5cdFx0XHRcdGlmICghY2xvc2VUYWIpXG5cdFx0XHRcdFx0dGhpcy51cGRhdGVTaW5nbGVJdGVtcyhjb252ZXJzaW9uTWFwKTtcblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5leGVjdXRlQ2FsbGJhY2tFdmVudChcblx0XHRcdFx0XHR0aGlzLmNhbGxiYWNrcy5vblNhdmVTdWNjZXNzLFxuXHRcdFx0XHRcdGNhbGxiYWNrID0+IGNhbGxiYWNrKHRoaXMsIGNvbnZlcnNpb25NYXApLFxuXHRcdFx0XHRcdGNsb3NlVGFiXG5cdFx0XHRcdCkudGhlbihcblx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoIWNsb3NlVGFiKVxuXHRcdFx0XHRcdFx0XHR0aGlzLmVuYWJsZUNoYW5nZXNXYXRjaGVyKCk7XG5cblx0XHRcdFx0XHRcdHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcblxuXHRcdFx0XHRcdFx0cmV0dXJuIGNvbnZlcnNpb25NYXA7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLmNhdGNoKChlcnJvcjogYW55KSA9PiB7XG5cdFx0XHR0aGlzLmlzU2F2aW5nID0gZmFsc2U7XG5cblx0XHRcdHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5yZWplY3QoZXJyb3IpO1xuXHRcdH0pO1xuXHR9XG5cblx0b25CZWZvcmVTYXZlIChcblx0XHRrZXk6IHN0cmluZyxcblx0XHRjYWxsYmFjazogKGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUpID0+IGFueSxcblx0XHRjb25kaXRpb246IExvY2FsQ2FjaGVDYWxsYmFja0NvbmRpdGlvbiA9IExvY2FsQ2FjaGVDYWxsYmFja0NvbmRpdGlvbi5BbHdheXNcblx0KTogKCkgPT4gdm9pZCB7XG5cdFx0Y29uc3QgY2FsbGJhY2tzID0gdGhpcy5jYWxsYmFja3Mub25CZWZvcmVTYXZlW2NvbmRpdGlvbl07XG5cblx0XHRjYWxsYmFja3Nba2V5XSA9IGNhbGxiYWNrO1xuXG5cdFx0cmV0dXJuICgpID0+IGRlbGV0ZSBjYWxsYmFja3Nba2V5XTtcblx0fVxuXG5cdG9uU2F2ZVN1Y2Nlc3MgKFxuXHRcdGtleTogc3RyaW5nLFxuXHRcdGNhbGxiYWNrOiBPblNhdmVDYWxsYmFjayxcblx0XHRjb25kaXRpb246IExvY2FsQ2FjaGVDYWxsYmFja0NvbmRpdGlvbiA9IExvY2FsQ2FjaGVDYWxsYmFja0NvbmRpdGlvbi5BbHdheXNcblx0KTogKCkgPT4gdm9pZCB7XG5cdFx0Y29uc3QgY2FsbGJhY2tzID0gdGhpcy5jYWxsYmFja3Mub25TYXZlU3VjY2Vzc1tjb25kaXRpb25dO1xuXG5cdFx0Y2FsbGJhY2tzW2tleV0gPSBjYWxsYmFjaztcblxuXHRcdHJldHVybiAoKSA9PiBkZWxldGUgY2FsbGJhY2tzW2tleV07XG5cdH1cblxuXHRwcml2YXRlIGV4ZWN1dGVDYWxsYmFja0V2ZW50PFQ+IChcblx0XHRjYWxsYmFja3M6IExvY2FsQ2FjaGVDYWxsYmFja3M8VD4sXG5cdFx0ZXhlY3V0ZTogKGNhbGxiYWNrOiBUKSA9PiBhbnksXG5cdFx0Y2xvc2VUYWI6IGJvb2xlYW5cblx0KTogUHJvbWlzZUludGVyZmFjZTxhbnk+IHtcblx0XHRyZXR1cm4gdGhpcy5leGVjdXRlQ2FsbGJhY2tzKGNhbGxiYWNrc1tMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24uQWx3YXlzXSwgZXhlY3V0ZSkudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZUNhbGxiYWNrcyhcblx0XHRcdFx0XHRjYWxsYmFja3NbY2xvc2VUYWIgPyBMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24uT25DbG9zZSA6IExvY2FsQ2FjaGVDYWxsYmFja0NvbmRpdGlvbi5Ta2lwT25DbG9zZV0sXG5cdFx0XHRcdFx0ZXhlY3V0ZVxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIGV4ZWN1dGVDYWxsYmFja3M8VD4gKGNhbGxiYWNrczoge1trZXk6IHN0cmluZ106IFR9LCBleGVjdXRlOiAoY2FsbGJhY2s6IFQpID0+IGFueSkge1xuXHRcdGNvbnN0IHJlc3VsdDoge1trZXk6IHN0cmluZ106IGFueX0gPSB7fTtcblxuXHRcdGZvciAoY29uc3Qga2V5IGluIGNhbGxiYWNrcykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmVzdWx0W2tleV0gPSBleGVjdXRlKGNhbGxiYWNrc1trZXldKTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdHRoaXMuZXhjZXB0aW9uSGFuZGxlcihlcnJvcik7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHJlc3VsdCk7XG5cdH1cblxuXHRlbmFibGVDaGFuZ2VzV2F0Y2hlciAoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuY2hhbmdlc0ludGVydmFsICE9PSBudWxsKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ0NoYW5nZXMgd2F0Y2hlciBhbHJlYWR5IHJ1bm5pbmchJywgdGhpcyk7XG5cdFx0XHR0aGlzLmRpc2FibGVDaGFuZ2VzV2F0Y2hlcigpO1xuXHRcdH1cblxuXHRcdHRoaXMuY2hhbmdlc0ludGVydmFsID0gc2V0SW50ZXJ2YWwoXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdGlmICghdGhpcy5kZXRlY3RDaGFuZ2VzKCkpXG5cdFx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHRcdHRoaXMuZGlzYWJsZUNoYW5nZXNXYXRjaGVyKCk7XG5cblx0XHRcdFx0aWYgKHRoaXMuaXNMb2NrYWJsZSgpKVxuXHRcdFx0XHRcdHRoaXMubG9ja1NlcnZpY2UuZmV0Y2hMb2NrKHRoaXMucm9vdEl0ZW0gYXMgSXRlbUVudHJ5KTtcblx0XHRcdH0sXG5cdFx0XHQzMDAwXG5cdFx0KTtcblx0fVxuXG5cdGRpc2FibGVDaGFuZ2VzV2F0Y2hlciAoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuY2hhbmdlc0ludGVydmFsID09PSBudWxsKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0Y2xlYXJJbnRlcnZhbCh0aGlzLmNoYW5nZXNJbnRlcnZhbCk7XG5cdFx0dGhpcy5jaGFuZ2VzSW50ZXJ2YWwgPSBudWxsO1xuXHR9XG5cblx0b25EZWFjdGl2YXRlSXRlbSAoaXRlbUVudHJ5OiBJdGVtRW50cnkpOiB2b2lkIHtcblx0XHR0aGlzLmNsZWFySXRlbUVudHJ5KGl0ZW1FbnRyeSk7XG5cdFx0Ly8gdGhpcy5oYXNDaGFuZ2VzID0gdHJ1ZTtcblx0fVxuXG5cdG9uQWN0aXZhdGVJdGVtIChpdGVtRW50cnk6IEl0ZW1FbnRyeSk6IHZvaWQge1xuXHRcdHRoaXMuaXRlbXMuYWRkKGl0ZW1FbnRyeSk7XG5cdFx0Ly8gdGhpcy5oYXNDaGFuZ2VzID0gdHJ1ZTtcblx0fVxufVxuIiwiaW1wb3J0IHsgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBJdGVtSWQsIEl0ZW1NYXAsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IGNyZWF0ZVBhdGggfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgdHlwZSBMb2NrVG9rZW4gPSB7aXNGb3JlaWduOiBmYWxzZSwgaWQ6IG51bWJlciwgdG9rZW46IHN0cmluZ30gfCB7aXNGb3JlaWduOiB0cnVlLCBtZXNzYWdlOiBzdHJpbmd9O1xuXG5leHBvcnQgY2xhc3MgTG9ja1NlcnZpY2Uge1xuXHRsb2NrSXRlbXM6IEl0ZW1NYXA8TG9ja1Rva2VuPiA9IHt9O1xuXG5cdHByb21pc2VzOiBJdGVtTWFwPFByb21pc2VJbnRlcmZhY2U8TG9ja1Rva2VuPj4gPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2Vcblx0KSB7XG5cblx0fVxuXG5cdHByaXZhdGUgZ2V0VmFsdWU8VD4gKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBtYXA6IEl0ZW1NYXA8VD4pOiB1bmRlZmluZWQgfCBUIHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcblxuXHRcdGlmIChtYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0cmV0dXJuIG1hcFtpdGVtVHlwZV1baXRlbUVudHJ5Lml0ZW1JZF07XG5cdH1cblxuXHRwcml2YXRlIHNldFZhbHVlPFQ+IChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgdmFsdWU6IFQsIG1hcDogSXRlbU1hcDxUPik6IFQge1xuXHRcdHJldHVybiBjcmVhdGVQYXRoKFxuXHRcdFx0bWFwLFxuXHRcdFx0W2l0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXG5cdFx0XHRbe30sIHZhbHVlXVxuXHRcdCk7XG5cdH1cblxuXHRnZXRMb2NrcyAoKTogdGhpc1snbG9ja0l0ZW1zJ10ge1xuXHRcdHJldHVybiB0aGlzLmxvY2tJdGVtcztcblx0fVxuXG5cdGhhc0xvY2sgKGxvY2tUb2tlbklkOiBJdGVtSWQpOiBib29sZWFuIHtcblx0XHRjb25zdCBsb2NrSXRlbXMgPSB0aGlzLmxvY2tJdGVtcztcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gbG9ja0l0ZW1zKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBsb2NrSXRlbXNbaXRlbVR5cGVdKSB7XG5cdFx0XHRcdGNvbnN0IGxvY2tJdGVtID0gbG9ja0l0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXG5cdFx0XHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXG5cdFx0XHRcdGlmICghbG9ja0l0ZW0uaXNGb3JlaWduICYmIGxvY2tJdGVtLmlkID09IGxvY2tUb2tlbklkKVxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIHNob3VsZCBiZSBmYXN0ICh3YXRjaGVkKVxuXHRpc0xvY2tlZCAoaXRlbUVudHJ5OiBJdGVtRW50cnkpOiBib29sZWFuIHtcblx0XHRjb25zdCBsb2NrSXRlbSA9IHRoaXMuZ2V0VmFsdWUoaXRlbUVudHJ5LCB0aGlzLmxvY2tJdGVtcyk7XG5cblx0XHRpZiAobG9ja0l0ZW0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJldHVybiBsb2NrSXRlbS5pc0ZvcmVpZ247XG5cdH1cblxuXHRnZXRNZXNzYWdlIChpdGVtRW50cnk6IEl0ZW1FbnRyeSk6IHVuZGVmaW5lZCB8IHN0cmluZyB7XG5cdFx0Y29uc3QgbG9ja0l0ZW0gPSB0aGlzLmdldFZhbHVlKGl0ZW1FbnRyeSwgdGhpcy5sb2NrSXRlbXMpO1xuXG5cdFx0aWYgKGxvY2tJdGVtID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0aWYgKCFsb2NrSXRlbS5pc0ZvcmVpZ24pXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0cmV0dXJuIGxvY2tJdGVtLm1lc3NhZ2U7XG5cdH1cblxuXHQvLyBkb2VzIG5vdCByZWplY3Qgd2hlbiBhIGZvcmVpZ24gbG9jayBpcyBlbmNvdW50ZXJlZFxuXHQvLyBpcyBhbHNvIHVzZWQgYnkgZGVsZXRlTG9ja1xuXHRmZXRjaENhY2hlZExvY2sgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KTogUHJvbWlzZUludGVyZmFjZTx1bmRlZmluZWQgfCBMb2NrVG9rZW4+IHtcblx0XHRjb25zdCBsb2NrID0gdGhpcy5nZXRWYWx1ZShpdGVtRW50cnksIHRoaXMubG9ja0l0ZW1zKTtcblxuXHRcdGlmIChsb2NrICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGxvY2spO1xuXG5cdFx0Y29uc3QgcHJvbWlzZSA9IHRoaXMuZ2V0VmFsdWUoaXRlbUVudHJ5LCB0aGlzLnByb21pc2VzKTtcblxuXHRcdGlmIChwcm9taXNlICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcHJvbWlzZTtcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcblx0fVxuXG5cdGZldGNoTG9jayAoaXRlbUVudHJ5OiBJdGVtRW50cnkpOiBQcm9taXNlSW50ZXJmYWNlPHN0cmluZz4ge1xuXHRcdGNvbnN0IGVycm9ySGFuZGxlciA9IHRoaXMuZXJyb3JIYW5kbGVyO1xuXG5cdFx0cmV0dXJuIHRoaXMuZmV0Y2hDYWNoZWRMb2NrKGl0ZW1FbnRyeSkudGhlbihcblx0XHRcdGxvY2tJdGVtID0+IHtcblx0XHRcdFx0aWYgKGxvY2tJdGVtICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0cmV0dXJuIGxvY2tJdGVtO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLnJlcXVlc3RMb2NrKGl0ZW1FbnRyeSk7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihcblx0XHRcdGxvY2tJdGVtID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2tJdGVtLmlzRm9yZWlnbiA/XG5cdFx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdChsb2NrSXRlbS5tZXNzYWdlKSA6XG5cdFx0XHRcdFx0bG9ja0l0ZW0udG9rZW47XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRyZXF1ZXN0TG9jayAoaXRlbUVudHJ5OiBJdGVtRW50cnkpOiBQcm9taXNlSW50ZXJmYWNlPExvY2tUb2tlbj4ge1xuXHRcdGNvbnN0IHtpdGVtVHlwZSwgaXRlbUlkfSA9IGl0ZW1FbnRyeTtcblxuXHRcdGNvbnN0IHByb21pc2UgPSB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLmNyZWF0ZShcblx0XHRcdCdMb2NrdG9rZW4nLFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKSxcblx0XHRcdHtpdGVtdHlwZTogaXRlbVR5cGUsIGl0ZW06IGl0ZW1JZH1cblx0XHQpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzLnByb21pc2VzW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLnNldFZhbHVlKFxuXHRcdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChcblx0XHRcdFx0XHRcdCdMb2NrdG9rZW4nLFxuXHRcdFx0XHRcdFx0cmVzcG9uc2UubGlua3MuTG9ja3Rva2VuWzBdXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR0aGlzLmxvY2tJdGVtc1xuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdGVycm9yID0+IHtcblx0XHRcdFx0ZGVsZXRlIHRoaXMucHJvbWlzZXNbaXRlbVR5cGVdW2l0ZW1JZF07XG5cblx0XHRcdFx0aWYgKGVycm9yLmNvZGUgPT09IDMwMSkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLnNldFZhbHVlKFxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRpc0ZvcmVpZ246IHRydWUsXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2Vcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR0aGlzLmxvY2tJdGVtc1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIucmVqZWN0KGVycm9yKTtcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0cmV0dXJuIHRoaXMuc2V0VmFsdWUoaXRlbUVudHJ5LCBwcm9taXNlLCB0aGlzLnByb21pc2VzKTtcblx0fVxuXG5cdGRlbGV0ZUxvY2sgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KTogUHJvbWlzZUludGVyZmFjZTx2b2lkPiB7XG5cdFx0cmV0dXJuIHRoaXMuZmV0Y2hDYWNoZWRMb2NrKGl0ZW1FbnRyeSkudGhlbihcblx0XHRcdGNhY2hlZExvY2sgPT4ge1xuXHRcdFx0XHRpZiAoY2FjaGVkTG9jayA9PT0gdW5kZWZpbmVkKSAvLyB1bmRlZmluZWQ6IG5vdCByZXF1ZXN0ZWQgeWV0XG5cdFx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHRcdGlmIChjYWNoZWRMb2NrLmlzRm9yZWlnbikge1xuXHRcdFx0XHRcdHRoaXMuY2xlYXJMb2NrKGl0ZW1FbnRyeSk7XG5cblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5kZWxldGUoJ0xvY2t0b2tlbicsIFtjYWNoZWRMb2NrLmlkXSkudGhlbihcblx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLmNsZWFyTG9jayhpdGVtRW50cnkpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGNsZWFyTG9jayAoaXRlbUVudHJ5OiBJdGVtRW50cnkpOiBib29sZWFuIHtcblx0XHRjb25zdCBsb2NrSXRlbXMgPSB0aGlzLmxvY2tJdGVtc1tpdGVtRW50cnkuaXRlbVR5cGVdO1xuXG5cdFx0aWYgKGxvY2tJdGVtcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0cmV0dXJuIGRlbGV0ZSBsb2NrSXRlbXNbaXRlbUVudHJ5Lml0ZW1JZF07XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSwgSXRlbUNhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdEl0ZW1NYXAsIEZpZWxkTWFwLCBJdGVtSWQsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBoYXNQcm9wZXJ0aWVzIH0gZnJvbSAnLi9VdGlsJztcblxuY29uc3QgRU1QVFlfRU5UUlkgPSB7fTtcblxuZXhwb3J0IHR5cGUgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uUmVzdWx0ID0ge1xuXHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdGl0ZW1JZDogSXRlbUlkLFxuXHRpdGVtczogQXBpUmVxdWVzdEl0ZW1NYXBcbn07XG5cbmV4cG9ydCBjbGFzcyBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb24ge1xuXHRwYXJlbnRNYXA6IGFueSA9IHt9O1xuXHRkZXN0aW5hdGlvbjogQXBpUmVxdWVzdEl0ZW1NYXAgPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSByb290SXRlbUVudHJ5OiBJdGVtRW50cnksXG5cdFx0cHJpdmF0ZSBzaW5nbGVJdGVtQ2FjaGU6IEl0ZW1DYWNoZSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlXG5cdCkge1xuXHR9XG5cblx0cHJvY2VzcyAoKTogTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uUmVzdWx0IHtcblx0XHR0aGlzLnBhcmVudE1hcCA9IHRoaXMuY3JlYXRlUGFyZW50TWFwKHRoaXMuc2luZ2xlSXRlbUNhY2hlKTtcblx0XHR0aGlzLnByb2Nlc3NJdGVtcyh0aGlzLnJvb3RJdGVtRW50cnkuaXRlbVR5cGUsIFt0aGlzLnJvb3RJdGVtRW50cnldLCB7fSk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0aXRlbVR5cGU6IHRoaXMucm9vdEl0ZW1FbnRyeS5pdGVtVHlwZSxcblx0XHRcdGl0ZW1JZDogdGhpcy5yb290SXRlbUVudHJ5Lml0ZW1JZCxcblx0XHRcdGl0ZW1zOiB0aGlzLmRlc3RpbmF0aW9uXG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgY3JlYXRlUGFyZW50TWFwIChpdGVtQ2FjaGU6IEl0ZW1DYWNoZSkge1xuXHRcdGNvbnN0IHJlc3VsdDoge1xuXHRcdFx0W3BhcmVudFR5cGU6IHN0cmluZ106IHtcblx0XHRcdFx0W3BhcmVudElkOiBudW1iZXJdOiB7XG5cdFx0XHRcdFx0W2l0ZW1UeXBlOiBzdHJpbmddOiBJdGVtRW50cnlbXVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSA9IHt9O1xuXG5cdFx0aXRlbUNhY2hlLmZvckVhY2goXG5cdFx0XHRpdGVtRW50cnkgPT4ge1xuXHRcdFx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcblx0XHRcdFx0Y29uc3QgcGFyZW50ID0gaXRlbUVudHJ5LnBhcmVudDtcblxuXHRcdFx0XHRpZiAocGFyZW50ID09PSBudWxsKSAvLyB3ZSBkb24ndCBjYXJlIGZvciBpdGVtcyB0aGF0IGFyZSBub3QgbGlua2VkIHRvIHRoZSByb290IGl0ZW1cblx0XHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdFx0Y29uc3QgcGFyZW50VHlwZSA9IHBhcmVudC5pdGVtVHlwZTtcblx0XHRcdFx0Y29uc3QgcGFyZW50SWQgPSBwYXJlbnQuaXRlbUlkO1xuXG5cdFx0XHRcdGlmIChyZXN1bHRbcGFyZW50VHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRyZXN1bHRbcGFyZW50VHlwZV0gPSB7fTtcblxuXHRcdFx0XHRpZiAocmVzdWx0W3BhcmVudFR5cGVdW3BhcmVudElkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdHJlc3VsdFtwYXJlbnRUeXBlXVtwYXJlbnRJZF0gPSB7fTtcblxuXHRcdFx0XHRpZiAocmVzdWx0W3BhcmVudFR5cGVdW3BhcmVudElkXVtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRyZXN1bHRbcGFyZW50VHlwZV1bcGFyZW50SWRdW2l0ZW1UeXBlXSA9IFtdO1xuXG5cdFx0XHRcdHJlc3VsdFtwYXJlbnRUeXBlXVtwYXJlbnRJZF1baXRlbVR5cGVdLnB1c2goaXRlbUVudHJ5KTtcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHByaXZhdGUgcHJvY2Vzc0l0ZW1zIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgbGlua0FjY3VtdWxhdG9yOiB7W2l0ZW1UeXBlOiBzdHJpbmddOiBJdGVtSWRbXX0pIHtcblx0XHRpZiAodGhpcy5kZXN0aW5hdGlvbltpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHRoaXMuZGVzdGluYXRpb25baXRlbVR5cGVdID0ge307XG5cblx0XHRpZiAobGlua0FjY3VtdWxhdG9yW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0bGlua0FjY3VtdWxhdG9yW2l0ZW1UeXBlXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XG5cblx0XHRcdC8vIGVhY2ggaXRlbSBvbmx5IGhhcyBhIHNpbmdsZSBwYXJlbnQsIHNvIHdlIGNhbiBzYWZlbHkgZG8gdGhpc1xuXHRcdFx0aWYgKHRoaXMuZGVzdGluYXRpb25baXRlbVR5cGVdW2l0ZW1JZF0gIT09IHVuZGVmaW5lZClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGxpbmtBY2N1bXVsYXRvcltpdGVtVHlwZV0ucHVzaChpdGVtSWQpO1xuXG5cdFx0XHR0aGlzLmRlc3RpbmF0aW9uW2l0ZW1UeXBlXVtpdGVtSWRdID0gdGhpcy5wcm9jZXNzSXRlbShpdGVtRW50cnkpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgcHJvY2Vzc0l0ZW0gKGl0ZW1FbnRyeTogSXRlbUVudHJ5KToge3ZhbHVlcz86IEZpZWxkTWFwLCBsaW5rcz86IHtbaXRlbVR5cGU6IHN0cmluZ106IEl0ZW1JZFtdfX0ge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XG5cdFx0Y29uc3QgY2hpbGRJdGVtcyA9IHRoaXMuZ2V0SXRlbXNCeVBhcmVudChpdGVtVHlwZSwgaXRlbUlkKTtcblx0XHRjb25zdCBjaGlsZENvbGxlY3Rpb25zID0gdGhpcy5jb2xsZWN0aW9uQ2FjaGUuZ2V0Q29sbGVjdGlvbnNCeVBhcmVudChpdGVtVHlwZSwgaXRlbUlkKTtcblx0XHRjb25zdCB2YWx1ZXMgPSBpdGVtRW50cnkuZm9ybWF0UmVxdWVzdCgpO1xuXHRcdGNvbnN0IGxpbmtzID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGNoaWxkVHlwZSBpbiBjaGlsZEl0ZW1zKVxuXHRcdFx0dGhpcy5wcm9jZXNzSXRlbXMoY2hpbGRUeXBlLCBjaGlsZEl0ZW1zW2NoaWxkVHlwZV0sIGxpbmtzKTtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIGNoaWxkQ29sbGVjdGlvbnMpIHtcblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkub3B0aW9ucy5xdWVyeSAhPT0gbnVsbClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdHRoaXMucHJvY2Vzc0l0ZW1zKGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZSwgY29sbGVjdGlvbkVudHJ5Lml0ZW1zLCBsaW5rcyk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaGFzVmFsdWVzID0gaGFzUHJvcGVydGllcyh2YWx1ZXMpO1xuXHRcdGNvbnN0IGhhc0xpbmtzID0gaGFzUHJvcGVydGllcyhsaW5rcyk7XG5cblx0XHRpZiAoaGFzVmFsdWVzICYmIGhhc0xpbmtzKVxuXHRcdFx0cmV0dXJuIHt2YWx1ZXM6IHZhbHVlcywgbGlua3M6IGxpbmtzfTtcblxuXHRcdGlmIChoYXNWYWx1ZXMpXG5cdFx0XHRyZXR1cm4ge3ZhbHVlczogdmFsdWVzfTtcblxuXHRcdGlmIChoYXNMaW5rcylcblx0XHRcdHJldHVybiB7bGlua3M6IGxpbmtzfTtcblxuXHRcdHJldHVybiBFTVBUWV9FTlRSWTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0SXRlbXNCeVBhcmVudCAocGFyZW50VHlwZTogSXRlbVR5cGUsIHBhcmVudElkOiBJdGVtSWQpIHtcblx0XHRjb25zdCBtYXBFbnRyeSA9IHRoaXMucGFyZW50TWFwW3BhcmVudFR5cGVdO1xuXG5cdFx0aWYgKG1hcEVudHJ5ID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4ge307XG5cblx0XHRpZiAobWFwRW50cnlbcGFyZW50SWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4ge307XG5cblx0XHRyZXR1cm4gbWFwRW50cnlbcGFyZW50SWRdO1xuXHR9XG59XG4iLCJpbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcblxuaW1wb3J0IHsgQXBpRm9ybWF0dGVyIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBFbnRyeVBhcmVudE51bGwsIEZpZWxkTWFwLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgaGFzUHJvcGVydGllcywgaW5BcnJheSB9IGZyb20gJy4vVXRpbCc7XG5cbmNvbnN0IE1BWUJFID0gJ21heWJlJztcblxuZXhwb3J0IGNsYXNzIFF1ZXJ5TWF0Y2hlciB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxuXHRcdHB1YmxpYyBpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cHVibGljIGZpZWxkczogRmllbGRNYXAsXG5cdFx0cHVibGljIHBhcmVudDogRW50cnlQYXJlbnROdWxsID0gbnVsbFxuXHQpIHtcblxuXHR9XG5cblx0cHJpdmF0ZSBjb21wYXJlVmFsdWVzICh2YWx1ZTogYW55LCBxdWVyeVZhbHVlOiBhbnkpOiBib29sZWFuIHtcblx0XHRpZiAobW9tZW50LmlzTW9tZW50KHF1ZXJ5VmFsdWUpKVxuXHRcdFx0cmV0dXJuIHRoaXMuYXBpRm9ybWF0dGVyLmNvbXBhcmVNb21lbnRPYmplY3RzKHF1ZXJ5VmFsdWUsIHZhbHVlKTtcblxuXHRcdGlmIChtb21lbnQuaXNEdXJhdGlvbihxdWVyeVZhbHVlKSlcblx0XHRcdHJldHVybiB0aGlzLmFwaUZvcm1hdHRlci5jb21wYXJlRHVyYXRpb25zKHF1ZXJ5VmFsdWUsIHZhbHVlKTtcblxuXHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXG5cdFx0cmV0dXJuIHF1ZXJ5VmFsdWUgPT0gdmFsdWU7XG5cdH1cblxuXHRtYXRjaFF1ZXJ5IChxdWVyeTogYW55KTogYm9vbGVhbiB8ICdtYXliZScge1xuXHRcdGlmIChxdWVyeS5zZWFyY2ggIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBNQVlCRTtcblxuXHRcdGlmIChxdWVyeS5jdXN0b20gIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBNQVlCRTtcblxuXHRcdGlmIChxdWVyeS5xdWVyeSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIE1BWUJFO1xuXG5cdFx0aWYgKHF1ZXJ5LmxpbmtlZFRvICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5tYXRjaExpbmtlZFRvUXVlcnkocXVlcnkpO1xuXG5cdFx0aWYgKHF1ZXJ5LmNvbmRpdGlvbnMgIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLm1hdGNoQ29tcGxleFF1ZXJ5KHF1ZXJ5KTtcblxuXHRcdGlmIChxdWVyeS5rZXkgIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLm1hdGNoU2ltcGxlUXVlcnkodGhpcy5maWVsZHNbcXVlcnkua2V5XSwgcXVlcnkpO1xuXG5cdFx0aWYgKCFoYXNQcm9wZXJ0aWVzKHF1ZXJ5KSlcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0dGhyb3cgbmV3IEVycm9yKCdxdWVyeU1hdGNoZXI6IFVuc3VwcG9ydGVkIHF1ZXJ5ISBQYXJzZWQ/Jyk7XG5cdH1cblxuXHRwcml2YXRlIG1hdGNoTGlua2VkVG9RdWVyeSAocXVlcnk6IGFueSk6IGJvb2xlYW4gfCAnbWF5YmUnIHtcblx0XHRpZiAocXVlcnkucmV2ZXJzZSlcblx0XHRcdHJldHVybiBNQVlCRTtcblxuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xuXHRcdGxldCBtYXRjaDtcblxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXG5cdFx0XHRtYXRjaCA9IGZhbHNlO1xuXHRcdGVsc2UgaWYgKHF1ZXJ5LmxpbmtlZFRvICE9PSBwYXJlbnQuaXRlbVR5cGUpXG5cdFx0XHRtYXRjaCA9IGZhbHNlO1xuXHRcdGVsc2Vcblx0XHRcdG1hdGNoID0gdGhpcy5tYXRjaFNpbXBsZVF1ZXJ5KHBhcmVudC5pdGVtSWQsIHF1ZXJ5LnF1ZXJ5KTtcblxuXHRcdGlmIChtYXRjaCA9PT0gTUFZQkUpXG5cdFx0XHRyZXR1cm4gTUFZQkU7XG5cblx0XHRyZXR1cm4gcXVlcnkubm90ID8gIW1hdGNoIDogISFtYXRjaDtcblx0fVxuXG5cdHByaXZhdGUgbWF0Y2hDb21wbGV4UXVlcnkgKHF1ZXJ5OiBhbnkpOiBib29sZWFuIHwgJ21heWJlJyB7XG5cdFx0Y29uc3QgY29uZGl0aW9ucyA9IHF1ZXJ5LmNvbmRpdGlvbnM7XG5cblx0XHRsZXQgcmVzdWx0O1xuXHRcdGxldCB0ZXJtaW5hbDtcblxuXHRcdHN3aXRjaCAocXVlcnkub3BlcmF0b3IpIHtcblx0XHRcdGNhc2UgJ0FORCc6XG5cdFx0XHRcdHJlc3VsdCA9IHRydWU7XG5cdFx0XHRcdHRlcm1pbmFsID0gZmFsc2U7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnT1InOlxuXHRcdFx0XHRyZXN1bHQgPSBmYWxzZTtcblx0XHRcdFx0dGVybWluYWwgPSB0cnVlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcigncXVlcnlNYXRjaGVyOiBVbnN1cHBvcnRlZCBvcGVyYXRvcicpO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgY29uZGl0aW9uIG9mIGNvbmRpdGlvbnMpIHtcblx0XHRcdGNvbnN0IG1hdGNoID0gdGhpcy5tYXRjaFF1ZXJ5KGNvbmRpdGlvbik7XG5cblx0XHRcdGlmIChtYXRjaCA9PT0gdGVybWluYWwpXG5cdFx0XHRcdHJldHVybiB0ZXJtaW5hbDtcblxuXHRcdFx0aWYgKG1hdGNoID09PSBNQVlCRSlcblx0XHRcdFx0cmVzdWx0ID0gTUFZQkU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdCA9PT0gTUFZQkUgPyBNQVlCRSA6ICEhcmVzdWx0O1xuXHR9XG5cblx0cHJpdmF0ZSBtYXRjaFNpbXBsZVF1ZXJ5ICh2YWx1ZTogYW55LCBxdWVyeTogYW55KTogYm9vbGVhbiB8ICdtYXliZScge1xuXHRcdGNvbnN0IGtleSA9IHF1ZXJ5LmtleTtcblx0XHRsZXQgcXVlcnlWYWx1ZSA9IHF1ZXJ5LnZhbHVlO1xuXG5cdFx0aWYgKCFoYXNQcm9wZXJ0aWVzKHF1ZXJ5KSkgLy8gQ291bGQgYmUgbGlua2VkVG8gYW4gZW1wdHkgb2JqZWN0XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1JlcXVpcmVkIGZpZWxkJywga2V5LCAnbm90IGZvdW5kIGZvcicsIHRoaXMuaXRlbVR5cGUpO1xuXHRcdFx0cmV0dXJuIE1BWUJFO1xuXHRcdH1cblxuXHRcdGlmIChxdWVyeVZhbHVlID09PSAnTk9XJylcblx0XHRcdHF1ZXJ5VmFsdWUgPSBtb21lbnQoKTtcblxuXHRcdHN3aXRjaCAocXVlcnkuY29tcGFyYXRvcikge1xuXHRcdFx0Y2FzZSAnPSc6XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbXBhcmVWYWx1ZXModmFsdWUsIHF1ZXJ5VmFsdWUpO1xuXHRcdFx0Y2FzZSAnIT0nOlxuXHRcdFx0XHRyZXR1cm4gIXRoaXMuY29tcGFyZVZhbHVlcyh2YWx1ZSwgcXVlcnlWYWx1ZSk7XG5cdFx0XHRjYXNlICc8Jzpcblx0XHRcdFx0cmV0dXJuIHZhbHVlIDwgcXVlcnlWYWx1ZTtcblx0XHRcdGNhc2UgJzw9Jzpcblx0XHRcdFx0cmV0dXJuIHZhbHVlIDw9IHF1ZXJ5VmFsdWU7XG5cdFx0XHRjYXNlICc+Jzpcblx0XHRcdFx0cmV0dXJuIHZhbHVlID4gcXVlcnlWYWx1ZTtcblx0XHRcdGNhc2UgJz49Jzpcblx0XHRcdFx0cmV0dXJuIHZhbHVlID49IHF1ZXJ5VmFsdWU7XG5cdFx0XHRjYXNlICdJTic6XG5cdFx0XHRcdHJldHVybiBpbkFycmF5KHZhbHVlLCBxdWVyeVZhbHVlKTtcblx0XHRcdGNhc2UgJ05PVCBJTic6XG5cdFx0XHRcdHJldHVybiAhaW5BcnJheSh2YWx1ZSwgcXVlcnlWYWx1ZSk7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ3F1ZXJ5TWF0Y2hlcjogVW5zdXBwb3J0ZWQgY29tcGFyYXRvcjogJyArIHF1ZXJ5LmNvbXBhcmF0b3IgKyAnIGluIHF1ZXJ5ICcgKyBxdWVyeSk7XG5cdFx0fVxuXHR9XG59XG4iLCJpbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IGdldEZpcnN0UHJvcGVydHkgfSBmcm9tICcuL1V0aWwnO1xuaW1wb3J0IHsgQXBpUXVlcnksIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5lbnVtIENPTlNUQU5UUyB7XG5cdE9CSiA9IDAsXG5cdFNUUiA9IDEsXG5cdFNFUCA9ICc6J1xufVxuXG5leHBvcnQgY2xhc3MgUXVlcnlQYXJzZXIge1xuXHRxdWVyeTogQXBpUXVlcnk7XG5cdHBhcmFtZXRlcnM6IGFueTtcblxuXHRjb25zdHJ1Y3RvciAocXVlcnk6IEFwaVF1ZXJ5LCBwYXJhbWV0ZXJzPzogb2JqZWN0KSB7XG5cdFx0dGhpcy5xdWVyeSA9IHF1ZXJ5O1xuXHRcdHRoaXMucGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7XG5cdH1cblxuXHRwcml2YXRlIGNvbXBhcmVQYXJzZWRRdWVyaWVzIChhOiBbb2JqZWN0LCBzdHJpbmddLCBiOiBbb2JqZWN0LCBzdHJpbmddKSB7XG5cdFx0aWYgKGFbQ09OU1RBTlRTLlNUUl0gPT09IGJbQ09OU1RBTlRTLlNUUl0pXG5cdFx0XHRyZXR1cm4gMDtcblxuXHRcdHJldHVybiBhW0NPTlNUQU5UUy5TVFJdID4gYltDT05TVEFOVFMuU1RSXSA/IDEgOiAtMTtcblx0fVxuXG5cdHBhcnNlIChxdWVyeTogQXBpUXVlcnkgPSB0aGlzLnF1ZXJ5KTogW29iamVjdCwgc3RyaW5nXSB7XG5cdFx0aWYgKHF1ZXJ5LmxpbmtlZFRvICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlTGlua2VkVG9RdWVyeShcblx0XHRcdFx0cXVlcnkubGlua2VkVG8sXG5cdFx0XHRcdHF1ZXJ5LnF1ZXJ5LFxuXHRcdFx0XHRxdWVyeS5yZXZlcnNlLFxuXHRcdFx0XHRxdWVyeS5ub3Rcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0aWYgKHF1ZXJ5Lm5vdCAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdxdWVyeVBhcnNlcjogXCJOb3RcIiBub3Qgc3VwcG9ydGVkJyk7XG5cblx0XHRpZiAocXVlcnkuY3VzdG9tICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlQ3VzdG9tUXVlcnkoXG5cdFx0XHRcdHF1ZXJ5LmN1c3RvbSxcblx0XHRcdFx0cXVlcnkucGFyYW1ldGVyc1xuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRpZiAocXVlcnkuc2VhcmNoICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZVNlYXJjaFF1ZXJ5KHF1ZXJ5LnNlYXJjaCk7XG5cblx0XHRpZiAocXVlcnkuY29uZGl0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZUNvbXBsZXhRdWVyeShcblx0XHRcdFx0cXVlcnkuY29uZGl0aW9ucyxcblx0XHRcdFx0cXVlcnkub3BlcmF0b3Jcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0aWYgKHF1ZXJ5Lml0ZW1UeXBlICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZVN1YkZpZWxkUXVlcnkocXVlcnkua2V5LCBxdWVyeS5pdGVtVHlwZSwgcXVlcnkuZmllbGQsIHF1ZXJ5LnF1ZXJ5KTtcblxuXHRcdGlmIChxdWVyeS5rZXkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKHR5cGVvZiBxdWVyeS5xdWVyeSA9PT0gJ29iamVjdCcpXG5cdFx0XHRcdHJldHVybiB0aGlzLnBhcnNlU3ViUXVlcnkocXVlcnkua2V5LCBxdWVyeS5xdWVyeSk7XG5cblx0XHRcdHJldHVybiB0aGlzLnBhcnNlU2ltcGxlUXVlcnkoXG5cdFx0XHRcdHF1ZXJ5LmtleSxcblx0XHRcdFx0cXVlcnkudmFsdWUsXG5cdFx0XHRcdHF1ZXJ5LmNvbXBhcmF0b3Jcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Y29uc3Qga2V5ID0gZ2V0Rmlyc3RQcm9wZXJ0eShxdWVyeSk7XG5cblx0XHRpZiAoa2V5ID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIFt7fSwgJ3t9J107XG5cblx0XHRjb25zdCB2YWx1ZSA9IHF1ZXJ5W2tleV07XG5cblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jylcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlU3ViUXVlcnkoa2V5LCB2YWx1ZSk7XG5cblx0XHRyZXR1cm4gdGhpcy5wYXJzZVNpbXBsZVF1ZXJ5KGtleSwgdmFsdWUpO1xuXHR9XG5cblx0cHJpdmF0ZSBwYXJzZVN1YlF1ZXJ5IChrZXk6IHN0cmluZywgc3ViUXVlcnk6IG9iamVjdCk6IFtvYmplY3QsIHN0cmluZ10ge1xuXHRcdGNvbnN0IHBhcnNlZFF1ZXJ5ID0gdGhpcy5wYXJzZShzdWJRdWVyeSk7XG5cblx0XHRyZXR1cm4gW1xuXHRcdFx0e2tleToga2V5LCBxdWVyeTogcGFyc2VkUXVlcnlbQ09OU1RBTlRTLk9CSl19LFxuXHRcdFx0J1snICsgJ3N1YicgKyBDT05TVEFOVFMuU0VQICsga2V5ICsgQ09OU1RBTlRTLlNFUCArIHBhcnNlZFF1ZXJ5W0NPTlNUQU5UUy5TVFJdICsgJ10nXG5cdFx0XTtcblx0fVxuXG5cdHByaXZhdGUgcGFyc2VTdWJGaWVsZFF1ZXJ5IChrZXk6IHN0cmluZywgaXRlbVR5cGU6IEl0ZW1UeXBlLCBmaWVsZDogc3RyaW5nLCBxdWVyeTogQXBpUXVlcnkpOiBbb2JqZWN0LCBzdHJpbmddIHtcblx0XHRjb25zdCBwYXJzZWRRdWVyeSA9IHRoaXMucGFyc2UocXVlcnkpO1xuXG5cdFx0cmV0dXJuIFtcblx0XHRcdHtrZXk6IGtleSwgaXRlbVR5cGU6IGl0ZW1UeXBlLCBmaWVsZDogZmllbGQsIHF1ZXJ5OiBwYXJzZWRRdWVyeVtDT05TVEFOVFMuT0JKXX0sXG5cdFx0XHQnWycgKyAnc3ViRmllbGQnICsgQ09OU1RBTlRTLlNFUCArIGtleSArIENPTlNUQU5UUy5TRVAgKyBpdGVtVHlwZSArIENPTlNUQU5UUy5TRVAgKyBmaWVsZCArIENPTlNUQU5UUy5TRVAgKyBwYXJzZWRRdWVyeVtDT05TVEFOVFMuU1RSXSArICddJ1xuXHRcdF07XG5cdH1cblxuXHRwcml2YXRlIHBhcnNlU2VhcmNoUXVlcnkgKHZhbHVlOiBhbnkpOiBbb2JqZWN0LCBzdHJpbmddIHtcblx0XHR2YWx1ZSA9IHRoaXMuZm9ybWF0VmFsdWUodmFsdWUpO1xuXG5cdFx0cmV0dXJuIFtcblx0XHRcdHtzZWFyY2g6IHZhbHVlW0NPTlNUQU5UUy5PQkpdfSxcblx0XHRcdCdbJyArICdzZWFyY2gnICsgQ09OU1RBTlRTLlNFUCArIHZhbHVlW0NPTlNUQU5UUy5TVFJdICsgJ10nXG5cdFx0XTtcblx0fVxuXG5cdHByaXZhdGUgcGFyc2VDdXN0b21RdWVyeSAoY3VzdG9tOiBBcGlRdWVyeSwgcGFyYW1ldGVyczogYW55KTogW29iamVjdCwgc3RyaW5nXSB7XG5cdFx0aWYgKHBhcmFtZXRlcnMgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIFtcblx0XHRcdFx0e2N1c3RvbTogY3VzdG9tfSxcblx0XHRcdFx0J1snICsgY3VzdG9tICsgJ10nXG5cdFx0XHRdO1xuXHRcdH1cblxuXHRcdGNvbnN0IHBhcnNlZFBhcmFtZXRlcnMgPSB0aGlzLnBhcnNlQ3VzdG9tUGFyYW1ldGVycyhwYXJhbWV0ZXJzKTtcblxuXHRcdHJldHVybiBbXG5cdFx0XHR7Y3VzdG9tOiBjdXN0b20sIHBhcmFtZXRlcnM6IHBhcnNlZFBhcmFtZXRlcnNbQ09OU1RBTlRTLk9CSl19LFxuXHRcdFx0J1snICsgY3VzdG9tICsgQ09OU1RBTlRTLlNFUCArIHBhcnNlZFBhcmFtZXRlcnNbQ09OU1RBTlRTLlNUUl0gKyAnXSdcblx0XHRdO1xuXHR9XG5cblx0cHJpdmF0ZSBwYXJzZUN1c3RvbVBhcmFtZXRlcnMgKHBhcmFtZXRlcnM6IGFueSk6IFtvYmplY3QsIHN0cmluZ10ge1xuXHRcdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhwYXJhbWV0ZXJzKS5zb3J0KCk7XG5cblx0XHRjb25zdCBxdWVyeTogQXBpUXVlcnkgPSB7fTtcblx0XHRsZXQgc3RyaW5nID0gJyc7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGtleSA9IGtleXNbaV07XG5cdFx0XHRjb25zdCB2YWx1ZSA9IHRoaXMuZm9ybWF0VmFsdWUocGFyYW1ldGVyc1trZXldKTtcblxuXHRcdFx0cXVlcnlba2V5XSA9IHZhbHVlW0NPTlNUQU5UUy5PQkpdO1xuXG5cdFx0XHRpZiAoaSA+IDApXG5cdFx0XHRcdHN0cmluZyArPSBDT05TVEFOVFMuU0VQO1xuXG5cdFx0XHRzdHJpbmcgKz0gdmFsdWVbQ09OU1RBTlRTLlNUUl07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFtxdWVyeSwgc3RyaW5nXTtcblx0fVxuXG5cdHByaXZhdGUgcGFyc2VTaW1wbGVRdWVyeSAoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnksIGNvbXBhcmF0b3I/OiBzdHJpbmcpOiBbb2JqZWN0LCBzdHJpbmddIHtcblx0XHR2YWx1ZSA9IHRoaXMuZm9ybWF0VmFsdWUodmFsdWUpO1xuXG5cdFx0aWYgKGNvbXBhcmF0b3IgPT09IHVuZGVmaW5lZClcblx0XHRcdGNvbXBhcmF0b3IgPSBBcnJheS5pc0FycmF5KHZhbHVlW0NPTlNUQU5UUy5PQkpdKSA/ICdJTicgOiAnPSc7XG5cblx0XHRyZXR1cm4gW1xuXHRcdFx0e2tleToga2V5LCB2YWx1ZTogdmFsdWVbQ09OU1RBTlRTLk9CSl0sIGNvbXBhcmF0b3I6IGNvbXBhcmF0b3J9LFxuXHRcdFx0J1snICsgY29tcGFyYXRvciArIENPTlNUQU5UUy5TRVAgKyBrZXkgKyBDT05TVEFOVFMuU0VQICsgdmFsdWVbQ09OU1RBTlRTLlNUUl0gKyAnXSdcblx0XHRdO1xuXHR9XG5cblx0cHJpdmF0ZSBwYXJzZUxpbmtlZFRvUXVlcnkgKGxpbmtlZFRvOiBhbnksIHF1ZXJ5ID0ge30sIHJldmVyc2UgPSBmYWxzZSwgbm90ID0gZmFsc2UpOiBbb2JqZWN0LCBzdHJpbmddIHtcblx0XHRjb25zdCBwYXJzZWRRdWVyeSA9IHRoaXMucGFyc2UocXVlcnkpO1xuXG5cdFx0cmV0dXJuIFtcblx0XHRcdHtsaW5rZWRUbzogbGlua2VkVG8sIHF1ZXJ5OiBwYXJzZWRRdWVyeVtDT05TVEFOVFMuT0JKXSwgcmV2ZXJzZTogcmV2ZXJzZSwgbm90OiBub3R9LFxuXHRcdFx0J1snICsgJ2xpbmtlZFRvJyArIENPTlNUQU5UUy5TRVAgKyBsaW5rZWRUbyArIENPTlNUQU5UUy5TRVAgKyBwYXJzZWRRdWVyeVtDT05TVEFOVFMuU1RSXSArIENPTlNUQU5UUy5TRVAgKyByZXZlcnNlICsgQ09OU1RBTlRTLlNFUCArIG5vdCArICddJ1xuXHRcdF07XG5cdH1cblxuXHRwcml2YXRlIHBhcnNlQ29tcGxleFF1ZXJ5IChjb25kaXRpb25zOiBvYmplY3RbXSwgb3BlcmF0b3IgPSAnQU5EJyk6IFtvYmplY3QsIHN0cmluZ10ge1xuXHRcdG9wZXJhdG9yID0gb3BlcmF0b3IudG9VcHBlckNhc2UoKTtcblxuXHRcdGNvbnN0IHBhcnNlZENvbmRpdGlvbnMgPSB0aGlzLnBhcnNlQ29uZGl0aW9ucyhjb25kaXRpb25zKTtcblxuXHRcdHJldHVybiBbXG5cdFx0XHR7Y29uZGl0aW9uczogcGFyc2VkQ29uZGl0aW9uc1tDT05TVEFOVFMuT0JKXSwgb3BlcmF0b3I6IG9wZXJhdG9yfSxcblx0XHRcdCdbJyArIG9wZXJhdG9yICsgcGFyc2VkQ29uZGl0aW9uc1tDT05TVEFOVFMuU1RSXSArICddJ1xuXHRcdF07XG5cdH1cblxuXHRwcml2YXRlIHBhcnNlQ29uZGl0aW9ucyAoY29uZGl0aW9uczogb2JqZWN0W10pOiBbb2JqZWN0LCBzdHJpbmddIHtcblx0XHRsZXQgcGFyc2VkQ29uZGl0aW9uczogQXJyYXk8W29iamVjdCwgc3RyaW5nXT4gPSBbXTtcblx0XHRjb25zdCBxdWVyeTogb2JqZWN0W10gPSBbXTtcblx0XHRsZXQgc3RyaW5nID0gJyc7XG5cblx0XHRmb3IgKGNvbnN0IGNvbmRpdGlvbiBvZiBjb25kaXRpb25zKVxuXHRcdFx0cGFyc2VkQ29uZGl0aW9ucy5wdXNoKHRoaXMucGFyc2UoY29uZGl0aW9uKSk7XG5cblx0XHRwYXJzZWRDb25kaXRpb25zID0gcGFyc2VkQ29uZGl0aW9ucy5zb3J0KChhLCBiKSA9PiB0aGlzLmNvbXBhcmVQYXJzZWRRdWVyaWVzKGEsIGIpKTtcblxuXHRcdGZvciAoY29uc3QgcGFyc2VkQ29uZGl0aW9uIG9mIHBhcnNlZENvbmRpdGlvbnMpIHtcblx0XHRcdHF1ZXJ5LnB1c2gocGFyc2VkQ29uZGl0aW9uW0NPTlNUQU5UUy5PQkpdKTtcblx0XHRcdHN0cmluZyArPSBwYXJzZWRDb25kaXRpb25bQ09OU1RBTlRTLlNUUl07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFtxdWVyeSwgc3RyaW5nXTtcblx0fVxuXG5cdHByaXZhdGUgZm9ybWF0VmFsdWU8VD4gKHZhbHVlOiBUKTogW1QsIHN0cmluZ10ge1xuXHRcdGxldCBwcm9jZXNzZWRWYWx1ZTtcblxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmNoYXJBdCgwKSA9PT0gJyYnKSB7XG5cdFx0XHRjb25zdCBrZXkgPSB2YWx1ZS5zdWJzdHJpbmcoMSk7XG5cblx0XHRcdHZhbHVlID0gdGhpcy5wYXJhbWV0ZXJzW2tleV07XG5cblx0XHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ3F1ZXJ5UGFyc2VyOiBVbmRlZmluZWQgdGVtcGxhdGUgcGFyYW1ldGVyIFxcJycgKyBrZXkgKyAnXFwnJyk7XG5cblx0XHRcdHByb2Nlc3NlZFZhbHVlID0gdGhpcy5wcm9jZXNzVmFsdWUodmFsdWUpO1xuXG5cdFx0XHRyZXR1cm4gW3Byb2Nlc3NlZFZhbHVlLCBrZXkgKyAnPicgKyB2YWx1ZV07XG5cdFx0fVxuXG5cdFx0cHJvY2Vzc2VkVmFsdWUgPSB0aGlzLnByb2Nlc3NWYWx1ZSh2YWx1ZSk7XG5cblx0XHRyZXR1cm4gW3Byb2Nlc3NlZFZhbHVlLCAnJyArIHByb2Nlc3NlZFZhbHVlXTtcblx0fVxuXG5cdHByaXZhdGUgcHJvY2Vzc1ZhbHVlPFQ+ICh2YWx1ZTogVFtdKTogVFtdO1xuXHRwcml2YXRlIHByb2Nlc3NWYWx1ZSAodmFsdWU6IG1vbWVudC5Nb21lbnQpOiBtb21lbnQuTW9tZW50O1xuXHRwcml2YXRlIHByb2Nlc3NWYWx1ZSAodmFsdWU6IG1vbWVudC5EdXJhdGlvbik6IG1vbWVudC5EdXJhdGlvbjtcblx0cHJpdmF0ZSBwcm9jZXNzVmFsdWU8VD4gKHZhbHVlOiBUKTogVDtcblx0cHJpdmF0ZSBwcm9jZXNzVmFsdWU8VD4gKHZhbHVlOiBUIHwgVFtdIHwgbW9tZW50Lk1vbWVudCB8IG1vbWVudC5EdXJhdGlvbikge1xuXHRcdC8vIGFsZ29yaXRobSBpcyBub3QgaW1wb3J0YW50LCBhcyBsb25nIGFzIGFsbCBhcnJheXMgYXJlIHNvcnRlZCB0aGUgc2FtZSB3YXlcblx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpXG5cdFx0XHRyZXR1cm4gdmFsdWUuc2xpY2UoKS5zb3J0KCk7XG5cblx0XHRpZiAobW9tZW50LmlzTW9tZW50KHZhbHVlKSlcblx0XHRcdHJldHVybiBtb21lbnQodmFsdWUpO1xuXG5cdFx0aWYgKG1vbWVudC5pc0R1cmF0aW9uKHZhbHVlKSlcblx0XHRcdHJldHVybiBtb21lbnQuZHVyYXRpb24odmFsdWUpO1xuXG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBBcGlRdWVyeSwgRW50cnlQYXJlbnROdWxsLCBJdGVtSWQgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBRdWVyeVNlcnZpY2Uge1xuXHRjb25zdHJ1Y3RvciAoKSB7XG5cdH1cblxuXHRhZGRBbmRDb25kaXRpb24gKHF1ZXJ5OiBBcGlRdWVyeSwgY29uZGl0aW9uOiBBcGlRdWVyeSk6IEFwaVF1ZXJ5IHtcblx0XHRpZiAocXVlcnkuY29uZGl0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IHF1ZXJ5Lm9wZXJhdG9yID09PSAnb3InKVxuXHRcdFx0cmV0dXJuIHtjb25kaXRpb25zOiBbcXVlcnksIGNvbmRpdGlvbl19O1xuXG5cdFx0Ly8gd2UgaGF2ZSBhbiAnYW5kJyBjb25kaXRpb25cblx0XHRyZXR1cm4ge2NvbmRpdGlvbnM6IHF1ZXJ5LmNvbmRpdGlvbnMuY29uY2F0KGNvbmRpdGlvbil9O1xuXHR9XG5cblx0YWRkT3JDb25kaXRpb24gKHF1ZXJ5OiBBcGlRdWVyeSwgY29uZGl0aW9uOiBBcGlRdWVyeSk6IEFwaVF1ZXJ5IHtcblx0XHRpZiAocXVlcnkub3BlcmF0b3IgPT09ICdvcicpXG5cdFx0XHRyZXR1cm4ge2NvbmRpdGlvbnM6IHF1ZXJ5LmNvbmRpdGlvbnMuY29uY2F0KGNvbmRpdGlvbil9O1xuXG5cdFx0Ly8gd2UgaGF2ZSBhbiAnYW5kJyBjb25kaXRpb25cblx0XHRyZXR1cm4ge2NvbmRpdGlvbnM6IFtxdWVyeSwgY29uZGl0aW9uXSwgb3BlcmF0b3I6ICdvcid9O1xuXHR9XG5cblx0YWRkUGFyZW50Q29uZGl0aW9uIChxdWVyeTogQXBpUXVlcnksIHBhcmVudDogRW50cnlQYXJlbnROdWxsKTogQXBpUXVlcnkge1xuXHRcdGxldCBsaW5rZWRUb1F1ZXJ5O1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdHJldHVybiBxdWVyeTtcblxuXHRcdGxpbmtlZFRvUXVlcnkgPSB7bGlua2VkVG86IHBhcmVudC5pdGVtVHlwZSwgcXVlcnk6IHBhcmVudC5pdGVtSWR9O1xuXG5cdFx0cmV0dXJuIHF1ZXJ5ID09PSBudWxsID8gbGlua2VkVG9RdWVyeSA6IHRoaXMuYWRkQW5kQ29uZGl0aW9uKHF1ZXJ5LCBsaW5rZWRUb1F1ZXJ5KTtcblx0fVxuXG5cdGNyZWF0ZU5vdEluIChpZEFycmF5OiBJdGVtSWRbXSk6IEFwaVF1ZXJ5IHtcblx0XHRyZXR1cm4ge2NvbXBhcmF0b3I6ICdOT1QgSU4nLCBrZXk6ICdpZCcsIHZhbHVlOiBpZEFycmF5fTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sdW1uU2V0LCBDb2x1bW5VdGlsIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0Q29sdW1ucyB9IGZyb20gJy4uL3R5cGVzJztcblxudHlwZSBSZXF1ZXN0Q29sdW1uTWFwID0ge1tpdGVtVHlwZTogc3RyaW5nXTogQXBpUmVxdWVzdENvbHVtbnN9O1xuXG5leHBvcnQgY2xhc3MgUmVxdWVzdENvbHVtbkV4cGFuc2lvbiB7XG5cdHByaXZhdGUgY29sdW1uczogUmVxdWVzdENvbHVtbk1hcCA9IHt9O1xuXHRwcml2YXRlIGNvbHVtblNldElkTWFwOiB7W2NvbHVtblNldElkOiBudW1iZXJdOiBib29sZWFufSA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWxcblx0KSB7XG5cdH1cblxuXHRleHBhbmQgKGNvbHVtblNldDogQ29sdW1uU2V0KTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuY29sdW1uU2V0SWRNYXBbY29sdW1uU2V0LmlkXSlcblx0XHRcdHJldHVybjtcblxuXHRcdGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBjb2x1bW5TZXQuaXRlbVR5cGU7XG5cblx0XHRpZiAoY29sdW1uc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdGNvbHVtbnNbaXRlbVR5cGVdID0gW107XG5cblx0XHRjb2x1bW5zW2l0ZW1UeXBlXSA9IHRoaXMuY29sdW1uVXRpbFxuXHRcdFx0Lm1lcmdlUmVxdWVzdENvbHVtbnMoY29sdW1uc1tpdGVtVHlwZV0sIGNvbHVtblNldC5yZXF1ZXN0KVxuXHRcdFx0Lm1lcmdlZDtcblxuXHRcdHRoaXMuY29sdW1uU2V0SWRNYXBbY29sdW1uU2V0LmlkXSA9IHRydWU7XG5cdH1cblxuXHRnZXQgKCk6IFJlcXVlc3RDb2x1bW5NYXAge1xuXHRcdHJldHVybiB0aGlzLmNvbHVtbnM7XG5cdH1cbn1cbiIsImltcG9ydCB7IEFwaUZvcm1hdHRlciwgQ29sbGVjdGlvbkhhbmRsZXIsIEl0ZW1IYW5kbGVyIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQge1xuXHRDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRDb2x1bW5TZXRGYWN0b3J5LFxuXHRJdGVtRW50cnlGYWN0b3J5LFxuXHRSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxufSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHtcblx0QXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0TG9jYWxDYWNoZU1hbmFnZXJJbnRlcmZhY2UsXG5cdFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlXG59IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtcblx0QXBpUmVxdWVzdENvbHVtbnMsIEFwaVJlc3BvbnNlLFxuXHRDb2xsZWN0aW9uTWF0Y2hSZXN1bHQsXG5cdEZpZWxkTWFwLCBGdW5jdGlvbkNoYW5nZXNSZXNvbHZlU29ja2V0TWVzc2FnZSxcblx0R3JvdXBlZEV4dGVuZGVkQ29sbGVjdGlvbk1hdGNoUmVzdWx0LFxuXHRJdGVtSWQsIEl0ZW1UeXBlLFxuXHRQcm9taXNlSW50ZXJmYWNlLCBSZXNwb25zZUNvbHVtbiwgU29ja2V0TWVzc2FnZVxufSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCB0eXBlIFNvY2tldENvbGxlY3Rpb25NYXAgPSB7W2l0ZW1JZDogbnVtYmVyXTogQ29sbGVjdGlvbk1hdGNoUmVzdWx0fTtcblxuZXhwb3J0IGNsYXNzIFNvY2tldE1lc3NhZ2VIYW5kbGVyIHtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlGYWN0b3J5OiBJdGVtRW50cnlGYWN0b3J5LFxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxuXHRcdHByaXZhdGUgbG9jYWxDYWNoZU1hbmFnZXI6IExvY2FsQ2FjaGVNYW5hZ2VySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgcmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XG5cdCkge1xuXHR9XG5cblx0b25NZXNzYWdlUmVjZWl2ZWQgKG1lc3NhZ2U6IFNvY2tldE1lc3NhZ2UpOiBhbnkge1xuXHRcdHN3aXRjaCAobWVzc2FnZS5ib2R5LmV2ZW50VHlwZSkge1xuXHRcdFx0Y2FzZSAndXBkYXRlJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlVXBkYXRlKG1lc3NhZ2UpO1xuXHRcdFx0Y2FzZSAnY3JlYXRlJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlQ3JlYXRlKG1lc3NhZ2UpO1xuXHRcdFx0Y2FzZSAnZGVsZXRlJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlRGVsZXRlKG1lc3NhZ2UpO1xuXHRcdFx0Y2FzZSAnbGlua1RvJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlTGlua01vdmUoLyogbWVzc2FnZSAqLyk7XG5cdFx0fVxuXHR9XG5cblx0Zm9ybWF0TWVzc2FnZVZhbHVlcyAodmFsdWVzOiBhbnksIGNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uW10pOiBGaWVsZE1hcCB7XG5cdFx0Y29uc3QgcmVzdWx0OiBGaWVsZE1hcCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiBjb2x1bW5zKVxuXHRcdFx0cmVzdWx0W2NvbHVtbklkXSA9IHRoaXMuYXBpRm9ybWF0dGVyLmZvcm1hdFJlc3BvbnNlVmFsdWUoY29sdW1uc1tjb2x1bW5JZF0udHlwZSwgdmFsdWVzW2NvbHVtbklkXSk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Y3JlYXRlQ29sbGVjdGlvbk1hcCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtczoge1tpdGVtSWQ6IG51bWJlcl06IGFueX0sIGNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uW10pOiBTb2NrZXRDb2xsZWN0aW9uTWFwIHtcblx0XHRjb25zdCByZXN1bHQ6IFNvY2tldENvbGxlY3Rpb25NYXAgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGl0ZW1zKSB7XG5cdFx0XHRjb25zdCBpdGVtID0gaXRlbXNbaXRlbUlkXTtcblx0XHRcdGNvbnN0IHBhcmVudCA9IGl0ZW0ucGFyZW50ICE9PSBudWxsID8gaXRlbS5wYXJlbnQgOiB7fTtcblxuXHRcdFx0cmVzdWx0W2l0ZW1JZF0gPSB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmVudHJpZXMuZ2V0QnlGaXR0aW5nSXRlbShcblx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdHRoaXMuZm9ybWF0TWVzc2FnZVZhbHVlcyhpdGVtLnZhbHVlcywgY29sdW1ucyksXG5cdFx0XHRcdHBhcmVudFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z3JvdXBCeUNvbGxlY3Rpb25JZCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBjb2xsZWN0aW9uTWFwOiBTb2NrZXRDb2xsZWN0aW9uTWFwKTogR3JvdXBlZEV4dGVuZGVkQ29sbGVjdGlvbk1hdGNoUmVzdWx0IHtcblx0XHRjb25zdCByZXN1bHQ6IEdyb3VwZWRFeHRlbmRlZENvbGxlY3Rpb25NYXRjaFJlc3VsdCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gY29sbGVjdGlvbk1hcCkge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbk1hdGNoUmVzdWx0ID0gY29sbGVjdGlvbk1hcFtpdGVtSWRdO1xuXG5cdFx0XHRmb3IgKGNvbnN0IHN0YXR1cyBpbiBjb2xsZWN0aW9uTWF0Y2hSZXN1bHQpIHtcblx0XHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJpZXMgPSBjb2xsZWN0aW9uTWF0Y2hSZXN1bHRbc3RhdHVzIGFzIGtleW9mIENvbGxlY3Rpb25NYXRjaFJlc3VsdF07XG5cblx0XHRcdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgY29sbGVjdGlvbkVudHJpZXMpIHtcblx0XHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uSWQgPSBjb2xsZWN0aW9uRW50cnkuaWQ7XG5cblx0XHRcdFx0XHRpZiAocmVzdWx0W2NvbGxlY3Rpb25JZF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0cmVzdWx0W2NvbGxlY3Rpb25JZF0gPSB7XG5cdFx0XHRcdFx0XHRcdGNvbGxlY3Rpb246IGNvbGxlY3Rpb25FbnRyeSxcblx0XHRcdFx0XHRcdFx0Zml0dGluZzogW10sXG5cdFx0XHRcdFx0XHRcdG5vdGZpdHRpbmc6IFtdLFxuXHRcdFx0XHRcdFx0XHRtYXliZTogW11cblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmVzdWx0W2NvbGxlY3Rpb25JZF1bc3RhdHVzXS5wdXNoKFxuXHRcdFx0XHRcdFx0c3RhdHVzID09PSAnZml0dGluZycgPyB0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpIDogaXRlbUlkXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRnZXRSZXF1ZXN0Q29sdW1ucyAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBjb2xsZWN0aW9uTWFwOiBTb2NrZXRDb2xsZWN0aW9uTWFwKSB7XG5cdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoKTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGNvbGxlY3Rpb25NYXApIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25zID0gY29sbGVjdGlvbk1hcFtpdGVtSWRdO1xuXHRcdFx0Y29uc3QgZml0dGluZ0NvbGxlY3Rpb25zID0gY29sbGVjdGlvbnMuZml0dGluZztcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZCk7XG5cblx0XHRcdGZvciAoY29uc3QgZml0dGluZ0NvbGxlY3Rpb24gb2YgZml0dGluZ0NvbGxlY3Rpb25zKVxuXHRcdFx0XHRjb2x1bW5FeHBhbnNpb24uZXhwYW5kKGZpdHRpbmdDb2xsZWN0aW9uLmNvbHVtbnMpO1xuXG5cdFx0XHRpZiAoaXRlbUVudHJ5ICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdGNvbHVtbkV4cGFuc2lvbi5leHBhbmQoaXRlbUVudHJ5LmNvbHVtbnMpO1xuXHRcdH1cblxuXHRcdHJldHVybiBjb2x1bW5FeHBhbnNpb24uZ2V0KCk7XG5cdH1cblxuXHRkZWZlckVudHJ5IChpdGVtRW50cnk6IEl0ZW1FbnRyeSk6IEl0ZW1FbnRyeSB8IFByb21pc2VJbnRlcmZhY2U8SXRlbUVudHJ5PiB7XG5cdFx0Y29uc3QgZGVmZXJyZWQgPSBpdGVtRW50cnkuZGVmZXJyZWQ7XG5cblx0XHRpZiAoZGVmZXJyZWQgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBpdGVtRW50cnkuZGVmZXIoKTtcblxuXHRcdHJldHVybiBkZWZlcnJlZC5wcm9taXNlLnRoZW4oXG5cdFx0XHR0aGlzLmRlZmVyRW50cnkuYmluZCh0aGlzKSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRwcm9jZXNzTWVzc2FnZSAoYm9keTogYW55KTogUHJvbWlzZUludGVyZmFjZTxHcm91cGVkRXh0ZW5kZWRDb2xsZWN0aW9uTWF0Y2hSZXN1bHQ+IHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGJvZHkuaXRlbVR5cGU7XG5cdFx0Y29uc3QgY29sbGVjdGlvbk1hcCA9IHRoaXMuY3JlYXRlQ29sbGVjdGlvbk1hcChpdGVtVHlwZSwgYm9keS5pdGVtc1tpdGVtVHlwZV0sIGJvZHkuY29sdW1uc1tpdGVtVHlwZV0pO1xuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0gdGhpcy5nZXRSZXF1ZXN0Q29sdW1ucyhpdGVtVHlwZSwgY29sbGVjdGlvbk1hcCk7XG5cdFx0Y29uc3QgZGVmZXJyZWRFbnRyaWVzOiBBcnJheTxJdGVtRW50cnkgfCBQcm9taXNlSW50ZXJmYWNlPEl0ZW1FbnRyeT4+ID0gW107XG5cdFx0Y29uc3QgcmVxdWVzdElkczogSXRlbUlkW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkU3RyaW5nIGluIGNvbGxlY3Rpb25NYXApIHtcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZFN0cmluZyk7XG5cdFx0XHRjb25zdCBpdGVtSWQgPSAraXRlbUlkU3RyaW5nO1xuXG5cdFx0XHRpZiAoaXRlbUVudHJ5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0ZGVmZXJyZWRFbnRyaWVzLnB1c2godGhpcy5kZWZlckVudHJ5KGl0ZW1FbnRyeSkpO1xuXHRcdFx0XHRyZXF1ZXN0SWRzLnB1c2goaXRlbUlkKTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjb2xsZWN0aW9uTWFwW2l0ZW1JZF0uZml0dGluZy5sZW5ndGggPT09IDApXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuYWRkKFxuXHRcdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0RGVmZXJyZWQoaXRlbVR5cGUsIGl0ZW1JZCwgcmVxdWVzdENvbHVtbnNbaXRlbVR5cGVdLCBmYWxzZSlcblx0XHRcdCk7XG5cblx0XHRcdHJlcXVlc3RJZHMucHVzaChpdGVtSWQpO1xuXHRcdH1cblxuXHRcdGlmIChyZXF1ZXN0SWRzLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4odGhpcy5ncm91cEJ5Q29sbGVjdGlvbklkKGl0ZW1UeXBlLCBjb2xsZWN0aW9uTWFwKSk7IC8vIGNvbGxlY3Rpb25NYXAgbWlnaHQgY29udGFpbiAnbWF5YmUnIG1hdGNoZXNcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChkZWZlcnJlZEVudHJpZXMpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KGl0ZW1UeXBlLCB7aWQ6IHJlcXVlc3RJZHN9LCByZXF1ZXN0Q29sdW1ucyk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVSZXNwb25zZShpdGVtVHlwZSwgcmVxdWVzdElkcywgcmVxdWVzdENvbHVtbnNbaXRlbVR5cGVdLCByZXNwb25zZSwgY29sbGVjdGlvbk1hcCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHByb2Nlc3NGdW5jdGlvbkNoYW5nZXNSZXNvbHZlIChib2R5OiBhbnkpOiBQcm9taXNlSW50ZXJmYWNlPHZvaWQ+IHtcblx0XHRjb25zdCBpdGVtcyA9IGJvZHkuaXRlbXMuRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZTtcblx0XHRjb25zdCBkZWZlcnJlZEVudHJpZXM6IEFycmF5PEl0ZW1FbnRyeSB8IFByb21pc2VJbnRlcmZhY2U8SXRlbUVudHJ5Pj4gPSBbXTtcblx0XHRjb25zdCByZXF1ZXN0SWRzOiBJdGVtSWRbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbXMpIHtcblx0XHRcdGNvbnN0IGZ1bmN0aW9uSWQgPSBpdGVtc1tpdGVtSWRdLnBhcmVudC5pdGVtSWQ7XG5cdFx0XHRjb25zdCBmdW5jdGlvbkVudHJ5ID0gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldCgnRnVuY3RpZScsIGZ1bmN0aW9uSWQpO1xuXG5cdFx0XHRpZiAoZnVuY3Rpb25FbnRyeSA9PT0gdW5kZWZpbmVkIHx8IGZ1bmN0aW9uRW50cnkuY29sdW1ucy5yZXNwb25zZS5GdW5jdGllLm5ld2NoYW5nZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGRlZmVycmVkRW50cmllcy5wdXNoKHRoaXMuZGVmZXJFbnRyeShmdW5jdGlvbkVudHJ5KSk7XG5cdFx0XHRyZXF1ZXN0SWRzLnB1c2goZnVuY3Rpb25JZCk7XG5cdFx0fVxuXG5cdFx0aWYgKHJlcXVlc3RJZHMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKGRlZmVycmVkRW50cmllcykudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoJ0Z1bmN0aWUnLCB7aWQ6IHJlcXVlc3RJZHN9LCB7RnVuY3RpZTogWyduZXdjaGFuZ2VzJ119KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlSWRzID0gcmVzcG9uc2UubGlua3MuRnVuY3RpZTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBvZiByZXNwb25zZUlkcykge1xuXHRcdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IDxJdGVtRW50cnk+dGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldCgnRnVuY3RpZScsIGl0ZW1JZCk7XG5cblx0XHRcdFx0XHRjb25zdCBwcmV2aW91cyA9IHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoXG5cdFx0XHRcdFx0XHRpdGVtRW50cnkuZ2V0RmllbGRzKCksXG5cdFx0XHRcdFx0XHR7fSxcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5jb2x1bW5zLm1haW5cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGNvbnN0IHJlc3BvbnNlVmFsdWUgPSByZXNwb25zZS5mZXRjaFZhbHVlKCdGdW5jdGllJywgaXRlbUlkLCAnbmV3Y2hhbmdlcycpO1xuXG5cdFx0XHRcdFx0aWYgKHJlc3BvbnNlVmFsdWUgPT09IHByZXZpb3VzLm5ld2NoYW5nZXMpXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRcdGl0ZW1FbnRyeVxuXHRcdFx0XHRcdFx0LnNldEluaXRpYWwoe25ld2NoYW5nZXM6IHJlc3BvbnNlVmFsdWV9LCB0cnVlKVxuXHRcdFx0XHRcdFx0LmNhbGxPbkNoYW5nZShwcmV2aW91cylcblx0XHRcdFx0XHRcdC5yZXNvbHZlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLmNhdGNoKHRoaXMuZXJyb3JIYW5kbGVyLm5vdGlmeUVycm9yKTtcblx0fVxuXG5cdGhhbmRsZVJlc3BvbnNlIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cmVxdWVzdElkczogSXRlbUlkW10sXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRcdHJlc3BvbnNlOiBBcGlSZXNwb25zZSxcblx0XHRjb2xsZWN0aW9uTWFwOiBTb2NrZXRDb2xsZWN0aW9uTWFwXG5cdCk6IEdyb3VwZWRFeHRlbmRlZENvbGxlY3Rpb25NYXRjaFJlc3VsdCB7XG5cdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCk7XG5cdFx0Y29uc3QgY29sdW1uSW5mbyA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xuXHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgcmVxdWVzdElkcykge1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gPEl0ZW1FbnRyeT50aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXHRcdFx0Y29uc3QgaXNOZXcgPSBpdGVtRW50cnkuaW5pdGlhbCA9PT0gdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgZmllbGRzID0gcmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCk7XG5cblx0XHRcdGlmIChmaWVsZHMgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpdGVtRW50cnkucmVqZWN0KCk7XG5cblx0XHRcdFx0aWYgKGlzTmV3KVxuXHRcdFx0XHRcdHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5jbGVhcihpdGVtRW50cnkpO1xuXG5cdFx0XHRcdGRlbGV0ZSBjb2xsZWN0aW9uTWFwW2l0ZW1JZF07XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBkZXJpdmVkID0gcmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtbkluZm8ucm9vdCk7XG5cblx0XHRcdGlmIChpc05ldylcblx0XHRcdFx0aXRlbUVudHJ5LnJlc29sdmVEZWZlcnJlZChmaWVsZHMsIGRlcml2ZWQsIGNvbHVtbkluZm8pO1xuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGV4cGFuc2lvblJlc3VsdCA9IGNvbHVtbkV4cGFuc2lvbi5ydW4oaXRlbUVudHJ5LmNvbHVtbnMpO1xuXHRcdFx0XHRjb25zdCBwcmV2aW91cyA9IHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoXG5cdFx0XHRcdFx0aXRlbUVudHJ5LmdldEZpZWxkcygpLFxuXHRcdFx0XHRcdHt9LFxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5jb2x1bW5zLm1haW5cblx0XHRcdFx0KTtcblxuXHRcdFx0XHRpZiAoZXhwYW5zaW9uUmVzdWx0ICE9PSBudWxsKVxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5leHBhbmQoZmllbGRzLCBkZXJpdmVkLCBleHBhbnNpb25SZXN1bHQpO1xuXG5cdFx0XHRcdGl0ZW1FbnRyeVxuXHRcdFx0XHRcdC51cGRhdGVGaWVsZHMoZmllbGRzLCBkZXJpdmVkLCBmYWxzZSlcblx0XHRcdFx0XHQuY2FsbE9uQ2hhbmdlKHByZXZpb3VzKVxuXHRcdFx0XHRcdC5yZXNvbHZlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZ3JvdXBCeUNvbGxlY3Rpb25JZChpdGVtVHlwZSwgY29sbGVjdGlvbk1hcCk7XG5cdH1cblxuXHRwcml2YXRlIGlzRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZU1lc3NhZ2UgKG1lc3NhZ2U6IFNvY2tldE1lc3NhZ2UpOiBtZXNzYWdlIGlzIEZ1bmN0aW9uQ2hhbmdlc1Jlc29sdmVTb2NrZXRNZXNzYWdlIHtcblx0XHRyZXR1cm4gbWVzc2FnZS5ib2R5Lml0ZW1UeXBlID09PSAnRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZSc7XG5cdH1cblxuXHRoYW5kbGVDcmVhdGUgKG1lc3NhZ2U6IEZ1bmN0aW9uQ2hhbmdlc1Jlc29sdmVTb2NrZXRNZXNzYWdlKTogUHJvbWlzZUludGVyZmFjZTx2b2lkPjtcblx0aGFuZGxlQ3JlYXRlIChtZXNzYWdlOiBTb2NrZXRNZXNzYWdlKTogUHJvbWlzZUludGVyZmFjZTxudWxsPjtcblx0aGFuZGxlQ3JlYXRlIChtZXNzYWdlOiBTb2NrZXRNZXNzYWdlKTogYW55IHtcblx0XHRjb25zdCBib2R5ID0gbWVzc2FnZS5ib2R5O1xuXG5cdFx0aWYgKHRoaXMuaXNGdW5jdGlvbkNoYW5nZXNSZXNvbHZlTWVzc2FnZShtZXNzYWdlKSlcblx0XHRcdHJldHVybiB0aGlzLnByb2Nlc3NGdW5jdGlvbkNoYW5nZXNSZXNvbHZlKGJvZHkpO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc01lc3NhZ2UoYm9keSkudGhlbihcblx0XHRcdGNvbGxlY3Rpb25NYXAgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5hZGRUb0NvbGxlY3Rpb25zKGNvbGxlY3Rpb25NYXAsIHRydWUpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkuY2F0Y2godGhpcy5lcnJvckhhbmRsZXIubm90aWZ5RXJyb3IpO1xuXHR9XG5cblx0aGFuZGxlVXBkYXRlIChtZXNzYWdlOiBTb2NrZXRNZXNzYWdlKTogUHJvbWlzZUludGVyZmFjZTx2b2lkPiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc01lc3NhZ2UobWVzc2FnZS5ib2R5KS50aGVuKFxuXHRcdFx0Y29sbGVjdGlvbk1hcCA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLnJlbW92ZUZyb21BbmRBZGRUb0NvbGxlY3Rpb25zKGNvbGxlY3Rpb25NYXAsIHRydWUpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkuY2F0Y2godGhpcy5lcnJvckhhbmRsZXIubm90aWZ5RXJyb3IpO1xuXHR9XG5cblx0aGFuZGxlRGVsZXRlIChtZXNzYWdlOiBTb2NrZXRNZXNzYWdlKTogUHJvbWlzZUludGVyZmFjZTx2b2lkPiB7XG5cdFx0Y29uc3QgYm9keSA9IG1lc3NhZ2UuYm9keTtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGJvZHkuaXRlbVR5cGU7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZXMgPSB0aGlzLmxvY2FsQ2FjaGVNYW5hZ2VyLmdldEFsbExvY2FsQ2FjaGVzKCk7XG5cdFx0Y29uc3QgY29sbGVjdGlvbk1hcDoge1tjb2xsZWN0aW9uSWQ6IG51bWJlcl06IHtjb2xsZWN0aW9uOiBDb2xsZWN0aW9uRW50cnksIGl0ZW1zOiBJdGVtSWRbXX19ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBvZiBib2R5Lml0ZW1zKSB7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9ucyA9IHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZW50cmllcy5nZXRCeUNvbnRhaW5pbmdJdGVtKGl0ZW1UeXBlLCBpdGVtSWQpO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb24gb2YgY29sbGVjdGlvbnMpIHtcblx0XHRcdFx0Y29uc3QgY29sbGVjdGlvbklkID0gY29sbGVjdGlvbi5pZDtcblxuXHRcdFx0XHRpZiAoY29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0Y29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdID0ge2NvbGxlY3Rpb246IGNvbGxlY3Rpb24sIGl0ZW1zOiBbXX07XG5cblx0XHRcdFx0Y29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdLml0ZW1zLnB1c2goaXRlbUlkKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmNsZWFyQnlJdGVtSWQoaXRlbVR5cGUsIGl0ZW1JZCk7XG5cblx0XHRcdGZvciAoY29uc3QgbG9jYWxDYWNoZSBvZiBsb2NhbENhY2hlcylcblx0XHRcdFx0bG9jYWxDYWNoZS5pdGVtcy5jbGVhckJ5SXRlbUlkKGl0ZW1UeXBlLCBpdGVtSWQpO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIGNvbGxlY3Rpb25NYXApIHtcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gY29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdO1xuXHRcdFx0bWFwRW50cnkuY29sbGVjdGlvbi5yZW1vdmVJdGVtcyhtYXBFbnRyeS5pdGVtcywgbnVsbCwgdHJ1ZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xuXHR9XG5cblx0Ly8gVE9ETyFcblx0aGFuZGxlTGlua01vdmUgKCk6IFByb21pc2VJbnRlcmZhY2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcblx0fVxuXG5cdC8qXHRoYW5kbGVMaW5rTW92ZSAobWVzc2FnZSkge1xuXHRcdFx0cHJvY2Vzc01lc3NhZ2UoXG5cdFx0XHRcdG1lc3NhZ2UsXG5cdFx0XHRcdGZ1bmN0aW9uIChjb2xsZWN0aW9uLCBpdGVtRW50cmllcykge1xuXHRcdFx0XHRcdC8vIGZpdHMgaW4gdGhpcyBjb2xsZWN0aW9uLCB0b2RvOiBnZXQgdGhlIG9sZCBjb2xsZWN0aW9uIGl0IGJlbG9uZ2VkIHRvXG5cdFx0XHRcdFx0Y29sbGVjdGlvbi5tb3ZlSXRlbXMoaXRlbUVudHJpZXMsIG51bGwsIHRydWUpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRmdW5jdGlvbiAoY29sbGVjdGlvbiwgaXRlbUVudHJpZXMpIHtcblx0XHRcdFx0XHQvLyBtYXliZSBmaXRzXG5cdFx0XHRcdFx0Ly8gdG9kbzogYWxzbyByZW1vdmUgdGhlbSBmcm9tIHRoZSBvbGQgY29sbGVjdGlvblxuXHRcdFx0XHRcdGNvbGxlY3Rpb24uZXh0ZW5kKGFuZ3VsYXIuaWRlbnRpdHksIGZhbHNlLCBmYWxzZSk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGZ1bmN0aW9uIChjb2xsZWN0aW9uLCBpZHMpIHtcblx0XHRcdFx0XHQvLyBub3QgZml0dGluZyBpbiB0aGlzIGNvbGxlY3Rpb24sIHJlbW92ZSBpdCA/XG5cdFx0XHRcdFx0Y29sbGVjdGlvbi5yZW1vdmVJdGVtcyhpZHMsIG51bGwsIG1lc3NhZ2UpO1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHRcdH1cblx0Ki9cbn1cbiIsImV4cG9ydCAqIGZyb20gJy4vQXBpRm9ybWF0dGVyJztcbmV4cG9ydCAqIGZyb20gJy4vQXBpUmVxdWVzdFNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9BcGlSZXNwb25zZVByb2Nlc3Nvcic7XG5leHBvcnQgKiBmcm9tICcuL0JhdGNoU3RhdHVzJztcbmV4cG9ydCAqIGZyb20gJy4vQ2hhbmdlc0NvbXBpbGF0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vQ2hhbmdlc1Byb2Nlc3Nvcic7XG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25DYWNoZSc7XG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25FbnRyeVNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uSGFuZGxlcic7XG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25NYXRjaGVyJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvblJlc291cmNlU2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL0NvbHVtbkNhY2hlJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uRXhwYW5zaW9uJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uSGFuZGxlcic7XG5leHBvcnQgKiBmcm9tICcuL0NvbHVtbkluZm8nO1xuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5TZXQnO1xuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5TdWJzZXRDYWNoZSc7XG5leHBvcnQgKiBmcm9tICcuL0NvbHVtblV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9DcmVhdGVSZXF1ZXN0JztcbmV4cG9ydCAqIGZyb20gJy4vSXRlbUFkbWluaXN0cmF0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9JdGVtQ2FjaGUnO1xuZXhwb3J0ICogZnJvbSAnLi9JdGVtRW50cnlTZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vSXRlbUhhbmRsZXInO1xuZXhwb3J0ICogZnJvbSAnLi9JdGVtUmVxdWVzdFNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9LZXlTZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vTG9jYWxDYWNoZSc7XG5leHBvcnQgKiBmcm9tICcuL0xvY2tTZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vUXVlcnlNYXRjaGVyJztcbmV4cG9ydCAqIGZyb20gJy4vUXVlcnlQYXJzZXInO1xuZXhwb3J0ICogZnJvbSAnLi9RdWVyeVNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9SZXF1ZXN0Q29sdW1uRXhwYW5zaW9uJztcbmV4cG9ydCAqIGZyb20gJy4vU29ja2V0TWVzc2FnZUhhbmRsZXInO1xuZXhwb3J0ICogZnJvbSAnLi9VdGlsJztcbiIsImltcG9ydCB7IEFwaUZvcm1hdHRlciwgQXBpUmVzcG9uc2VQcm9jZXNzb3IgfSBmcm9tICcuLi9jbGFzc2VzJztcblxuZXhwb3J0IGNsYXNzIEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyKSB7XG5cblx0fVxuXG5cdGNvbnN0cnVjdCAocmVzcG9uc2U6IGFueSk6IEFwaVJlc3BvbnNlUHJvY2Vzc29yIHtcblx0XHRyZXR1cm4gbmV3IEFwaVJlc3BvbnNlUHJvY2Vzc29yKHRoaXMuYXBpRm9ybWF0dGVyLCByZXNwb25zZSk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEJhdGNoU3RhdHVzIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBQcm9taXNlTGlicmFyeUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgSXRlbUlkLCBJdGVtVHlwZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIEJhdGNoU3RhdHVzRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZSxcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3Q8VD4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRnZXRJdGVtSWQ6IChlbnRyeTogVCkgPT4gSXRlbUlkLFxuXHRcdGdldFByb21pc2U6IChlbnRyeTogVCkgPT4gUHJvbWlzZUludGVyZmFjZTxUPlxuXHQpOiBCYXRjaFN0YXR1czxUPiB7XG5cdFx0cmV0dXJuIG5ldyBCYXRjaFN0YXR1cyhcblx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2UsXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdGdldEl0ZW1JZCxcblx0XHRcdGdldFByb21pc2Vcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDaGFuZ2VzQ29tcGlsYXRpb24sIEtleVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcblxuaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSB9IGZyb20gJy4vJztcblxuZXhwb3J0IGNsYXNzIENoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZVxuXHQpIHtcblx0fVxuXG5cdGNvbnN0cnVjdCAoc2luZ2xlSXRlbXM6IEl0ZW1FbnRyeVtdLCBjb2xsZWN0aW9uczogQ29sbGVjdGlvbkVudHJ5W10pOiBDaGFuZ2VzQ29tcGlsYXRpb24ge1xuXHRcdHJldHVybiBuZXcgQ2hhbmdlc0NvbXBpbGF0aW9uKFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0c2luZ2xlSXRlbXMsXG5cdFx0XHRjb2xsZWN0aW9uc1xuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7XG5cdEFwaUZvcm1hdHRlcixcblx0Q2hhbmdlc1Byb2Nlc3Nvcixcblx0Q29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0Q29sbGVjdGlvbkhhbmRsZXIsXG5cdEl0ZW1IYW5kbGVyXG59IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHtcblx0Q2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcblx0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0Q3JlYXRlUmVxdWVzdEZhY3RvcnksXG5cdFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSwgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlTGlicmFyeUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5leHBvcnQgY2xhc3MgQ2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnk6IENoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRwcml2YXRlIGNyZWF0ZVJlcXVlc3RGYWN0b3J5OiBDcmVhdGVSZXF1ZXN0RmFjdG9yeSxcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgcmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XG5cdCkge1xuXG5cdH1cblxuXHRjb25zdHJ1Y3QgKCk6IENoYW5nZXNQcm9jZXNzb3Ige1xuXHRcdHJldHVybiBuZXcgQ2hhbmdlc1Byb2Nlc3Nvcihcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcblx0XHRcdHRoaXMuY2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0XHR0aGlzLmNyZWF0ZVJlcXVlc3RGYWN0b3J5LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIsXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLFxuXHRcdFx0dGhpcy5wcm9taXNlU2VydmljZSxcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnlcblx0XHQpO1xuXHR9XG5cbn1cbiIsImltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeVxuXHQpIHtcblx0fVxuXG5cdGNvbnN0cnVjdCAoKTogQ29sbGVjdGlvbkNhY2hlIHtcblx0XHRyZXR1cm4gbmV3IENvbGxlY3Rpb25DYWNoZShcblx0XHRcdHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeVxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7XG5cdENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdENvbHVtbkhhbmRsZXIsXG5cdEl0ZW1FbnRyeVNlcnZpY2UsXG5cdEl0ZW1IYW5kbGVyLFxuXHRJdGVtUmVxdWVzdFNlcnZpY2UsXG5cdEtleVNlcnZpY2UsXG5cdFF1ZXJ5U2VydmljZVxufSBmcm9tICcuLi9jbGFzc2VzLyc7XG5pbXBvcnQgeyBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LCBDb2x1bW5TZXRGYWN0b3J5LCBJdGVtRW50cnlGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzLyc7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIEV4Y2VwdGlvbkhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy8nO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uRW50cnlPcHRpb25zLCBDb2xsZWN0aW9uRW50cnlPcHRpb25zSW50ZXJmYWNlIH0gZnJvbSAnLi4vbW9kZWxzLyc7XG5pbXBvcnQgeyBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzLyc7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRW50cnlGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHB1YmxpYyBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdHB1YmxpYyBjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyLFxuXHRcdHB1YmxpYyBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHB1YmxpYyBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxuXHRcdHB1YmxpYyBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwdWJsaWMgZXhjZXB0aW9uSGFuZGxlcjogRXhjZXB0aW9uSGFuZGxlckludGVyZmFjZSxcblx0XHRwdWJsaWMgaXRlbUVudHJ5RmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeSxcblx0XHRwdWJsaWMgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcblx0XHRwdWJsaWMgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxuXHRcdHB1YmxpYyBpdGVtUmVxdWVzdFNlcnZpY2U6IEl0ZW1SZXF1ZXN0U2VydmljZSxcblx0XHRwdWJsaWMga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwdWJsaWMgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxuXHRcdHB1YmxpYyBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZVxuXHQpIHtcblx0fVxuXG5cdGNvbnN0cnVjdCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBvcHRpb25zOiBDb2xsZWN0aW9uRW50cnlPcHRpb25zSW50ZXJmYWNlKTogQ29sbGVjdGlvbkVudHJ5IHtcblx0XHRyZXR1cm4gbmV3IENvbGxlY3Rpb25FbnRyeShcblx0XHRcdHRoaXMsXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdG5ldyBDb2xsZWN0aW9uRW50cnlPcHRpb25zKG9wdGlvbnMpXG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlLCBDb2xsZWN0aW9uTWF0Y2hlciB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5XG5cdCkge1xuXHR9XG5cblx0Y29uc3RydWN0IChjb2xsZWN0aW9uQ2FjaGVzOiBDb2xsZWN0aW9uQ2FjaGVbXSwgdXBkYXRlSW5pdGlhbDogYm9vbGVhbiwgY2FsbE9uQWN0aXZhdGU6IGJvb2xlYW4pOiBDb2xsZWN0aW9uTWF0Y2hlciB7XG5cdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uTWF0Y2hlcihcblx0XHRcdHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeSxcblx0XHRcdGNvbGxlY3Rpb25DYWNoZXMsXG5cdFx0XHR1cGRhdGVJbml0aWFsLFxuXHRcdFx0Y2FsbE9uQWN0aXZhdGVcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBLZXlTZXJ2aWNlLCBMb2NhbENhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSwgSXRlbVJlc291cmNlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIEV4Y2VwdGlvbkhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQge1xuXHRDb2xsZWN0aW9uRWRpdFJlc291cmNlLFxuXHRDb2xsZWN0aW9uRW50cnksXG5cdENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnMsXG5cdENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UsXG5cdENvbGxlY3Rpb25WaWV3UmVzb3VyY2UsIEVkaXRSZXNvdXJjZSwgTG9jYWxWaWV3UmVzb3VyY2UsIFJlbW90ZVZpZXdSZXNvdXJjZVxufSBmcm9tICcuLi9tb2RlbHMnO1xuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwdWJsaWMgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHVibGljIGV4Y2VwdGlvbkhhbmRsZXI6IEV4Y2VwdGlvbkhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHVibGljIGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHVibGljIGNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5OiBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcblx0XHRwdWJsaWMga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwdWJsaWMgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlXG5cdCkge1xuXG5cdH1cblxuXHRjb25zdHJ1Y3QgKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdEl0ZW1zOiB0cnVlLCBlZGl0Q29sbGVjdGlvbjogdHJ1ZX0sXG5cdFx0bG9jYWxDYWNoZTogTG9jYWxDYWNoZVxuXHQpOiBDb2xsZWN0aW9uRWRpdFJlc291cmNlPEVkaXRSZXNvdXJjZT47XG5cblx0Y29uc3RydWN0IChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlICYge3JlbW90ZUl0ZW1zOiB0cnVlLCBlZGl0Q29sbGVjdGlvbjogdHJ1ZX0sXG5cdFx0bG9jYWxDYWNoZTogTG9jYWxDYWNoZVxuXHQpOiBDb2xsZWN0aW9uRWRpdFJlc291cmNlPFJlbW90ZVZpZXdSZXNvdXJjZT47XG5cblx0Y29uc3RydWN0IChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlICYge2VkaXRDb2xsZWN0aW9uOiB0cnVlfSxcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlXG5cdCk6IENvbGxlY3Rpb25FZGl0UmVzb3VyY2U8TG9jYWxWaWV3UmVzb3VyY2U+O1xuXG5cdGNvbnN0cnVjdCAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0SXRlbXM6IHRydWV9LFxuXHRcdGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGVcblx0KTogQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxFZGl0UmVzb3VyY2U+O1xuXG5cdGNvbnN0cnVjdCAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZSAmIHtyZW1vdGVJdGVtczogdHJ1ZX0sXG5cdFx0bG9jYWxDYWNoZTogTG9jYWxDYWNoZVxuXHQpOiBDb2xsZWN0aW9uVmlld1Jlc291cmNlPFJlbW90ZVZpZXdSZXNvdXJjZT47XG5cblx0Y29uc3RydWN0IChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlLFxuXHRcdGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGVcblx0KTogQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxMb2NhbFZpZXdSZXNvdXJjZT47XG5cblx0Y29uc3RydWN0IChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgb3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZSwgbG9jYWxDYWNoZTogTG9jYWxDYWNoZSkge1xuXHRcdGNvbnN0IG9wdGlvbnNJbnN0YW5jZSA9IG5ldyBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zKG9wdGlvbnMpO1xuXG5cdFx0aWYgKG9wdGlvbnNJbnN0YW5jZS5lZGl0SXRlbXMpXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuaGFzSXRlbUVkaXRSZXNvdXJjZXMgPSB0cnVlO1xuXG5cdFx0aWYgKG9wdGlvbnNJbnN0YW5jZS5lZGl0Q29sbGVjdGlvbikge1xuXHRcdFx0Y29sbGVjdGlvbkVudHJ5Lmhhc0VkaXRSZXNvdXJjZXMgPSB0cnVlO1xuXG5cdFx0XHRpZiAob3B0aW9uc0luc3RhbmNlLmVkaXRJdGVtcylcblx0XHRcdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uRWRpdFJlc291cmNlPEVkaXRSZXNvdXJjZT4odGhpcywgY29sbGVjdGlvbkVudHJ5LCBvcHRpb25zSW5zdGFuY2UsIGxvY2FsQ2FjaGUpO1xuXHRcdFx0ZWxzZSBpZiAob3B0aW9uc0luc3RhbmNlLnJlbW90ZUl0ZW1zKVxuXHRcdFx0XHRyZXR1cm4gbmV3IENvbGxlY3Rpb25FZGl0UmVzb3VyY2U8UmVtb3RlVmlld1Jlc291cmNlPih0aGlzLCBjb2xsZWN0aW9uRW50cnksIG9wdGlvbnNJbnN0YW5jZSwgbG9jYWxDYWNoZSk7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdHJldHVybiBuZXcgQ29sbGVjdGlvbkVkaXRSZXNvdXJjZTxMb2NhbFZpZXdSZXNvdXJjZT4odGhpcywgY29sbGVjdGlvbkVudHJ5LCBvcHRpb25zSW5zdGFuY2UsIGxvY2FsQ2FjaGUpO1xuXHRcdH1cblxuXHRcdGlmIChvcHRpb25zSW5zdGFuY2UuZWRpdEl0ZW1zKVxuXHRcdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uVmlld1Jlc291cmNlPEVkaXRSZXNvdXJjZT4odGhpcywgY29sbGVjdGlvbkVudHJ5LCBvcHRpb25zSW5zdGFuY2UsIGxvY2FsQ2FjaGUpO1xuXG5cdFx0aWYgKG9wdGlvbnNJbnN0YW5jZS5yZW1vdGVJdGVtcylcblx0XHRcdHJldHVybiBuZXcgQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxSZW1vdGVWaWV3UmVzb3VyY2U+KHRoaXMsIGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9uc0luc3RhbmNlLCBsb2NhbENhY2hlKTtcblxuXHRcdHJldHVybiBuZXcgQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxMb2NhbFZpZXdSZXNvdXJjZT4odGhpcywgY29sbGVjdGlvbkVudHJ5LCBvcHRpb25zSW5zdGFuY2UsIGxvY2FsQ2FjaGUpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5FeHBhbnNpb24gfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENvbHVtbkluZm9GYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEFwaVJlcXVlc3RDb2x1bW5zLCBJdGVtVHlwZSwgUmVzcG9uc2VDb2x1bW5NYXAgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5FeHBhbnNpb25GYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sdW1uSW5mb0ZhY3Rvcnk6IENvbHVtbkluZm9GYWN0b3J5XG5cdCkge1xuXG5cdH1cblxuXHRjb25zdHJ1Y3QgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwKTogQ29sdW1uRXhwYW5zaW9uIHtcblx0XHRyZXR1cm4gbmV3IENvbHVtbkV4cGFuc2lvbih0aGlzLmNvbHVtbkluZm9GYWN0b3J5LCBpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucyk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtbkluZm8gfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IFJlc3BvbnNlQ29sdW1uLCBSb290Q29sdW1uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uSW5mb0ZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoKSB7fVxuXG5cdGNvbnN0cnVjdCAoYXBpQ29sdW1uOiBSZXNwb25zZUNvbHVtbiwgcGFyZW50OiBDb2x1bW5JbmZvIHwgbnVsbCk6IENvbHVtbkluZm8ge1xuXHRcdHJldHVybiBuZXcgQ29sdW1uSW5mbyhhcGlDb2x1bW4sIHBhcmVudCk7XG5cdH1cblxuXHRjb25zdHJ1Y3RGcm9tUm9vdE1hcCAocm9vdENvbHVtbk1hcDogUm9vdENvbHVtbk1hcCwgcGFyZW50OiBDb2x1bW5JbmZvIHwgbnVsbCA9IG51bGwpIHtcblx0XHRjb25zdCByZXN1bHQ6IENvbHVtbkluZm9bXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiByb290Q29sdW1uTWFwKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5NYXBFbnRyeSA9IHJvb3RDb2x1bW5NYXBbY29sdW1uSWRdO1xuXHRcdFx0Y29uc3QgY29sdW1uSW5mbyA9IHRoaXMuY29uc3RydWN0KGNvbHVtbk1hcEVudHJ5LmFwaUNvbHVtbiwgcGFyZW50KTtcblx0XHRcdGNvbnN0IGNoaWxkQ29sdW1ucyA9IHRoaXMuY29uc3RydWN0RnJvbVJvb3RNYXAoY29sdW1uTWFwRW50cnkuY2hpbGRyZW4sIGNvbHVtbkluZm8pO1xuXG5cdFx0XHRpZiAoY2hpbGRDb2x1bW5zLmxlbmd0aCA+IDApXG5cdFx0XHRcdGNvbHVtbkluZm8uc2V0Q2hpbGRyZW4oY29sdW1uSW5mby5hcGlDb2x1bW4uaXRlbVR5cGUsIGNoaWxkQ29sdW1ucyk7XG5cblx0XHRcdHJlc3VsdC5wdXNoKGNvbHVtbkluZm8pO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtbkhhbmRsZXIsIENvbHVtblNldCwgQ29sdW1uVXRpbCB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQ29sdW1uSW5mb0ZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdENvbHVtbnMsIEl0ZW1UeXBlLCBSZXNwb25zZUNvbHVtbk1hcCB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIENvbHVtblNldEZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbCxcblx0XHRwcml2YXRlIGNvbHVtbkluZm9GYWN0b3J5OiBDb2x1bW5JbmZvRmFjdG9yeVxuXHQpIHtcblx0fVxuXG5cdGNvbnN0cnVjdFN0dWIgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zKSB7XG5cdFx0cmV0dXJuIG5ldyBDb2x1bW5TZXQoXG5cdFx0XHR0aGlzLmNvbHVtbkhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbHVtblV0aWwsXG5cdFx0XHR0aGlzLmNvbHVtbkluZm9GYWN0b3J5LFxuXHRcdFx0dGhpcyxcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0cmVxdWVzdENvbHVtbnNcblx0XHQpO1xuXHR9XG5cblx0Y29uc3RydWN0IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRcdHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXAsXG5cdFx0ZW5hYmxlQ2FjaGluZz86IGJvb2xlYW4sXG5cdFx0aW5jbHVkZUlkQ29sdW1uPzogYm9vbGVhblxuXHQpIHtcblx0XHRyZXR1cm4gdGhpcy5jb25zdHJ1Y3RTdHViKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucykucmVzb2x2ZShyZXNwb25zZUNvbHVtbnMsIGVuYWJsZUNhY2hpbmcsIGluY2x1ZGVJZENvbHVtbik7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtblN1YnNldENhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0Q29sdW1ucyB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIENvbHVtblN1YnNldENhY2hlRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yICgpIHt9XG5cblx0Y29uc3RydWN0IChyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMpOiBDb2x1bW5TdWJzZXRDYWNoZSB7XG5cdFx0cmV0dXJuIG5ldyBDb2x1bW5TdWJzZXRDYWNoZShyZXF1ZXN0Q29sdW1ucyk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSwgQ29sbGVjdGlvbkhhbmRsZXIsIENyZWF0ZUNvbXBpbGF0aW9uLCBDcmVhdGVSZXF1ZXN0LCBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksIFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVSZXF1ZXN0RmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeTogQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwcml2YXRlIHJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxuXHQpIHtcblxuXHR9XG5cblx0Y29uc3RydWN0IChcblx0XHRjb21waWxhdGlvbjogQ3JlYXRlQ29tcGlsYXRpb24sXG5cdFx0bG9jYWxDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZSxcblx0XHRwYXJhbWV0ZXJNYXA6IENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAsXG5cdFx0YnJlYWt1cEJ5UGFyZW50PzogYm9vbGVhblxuXHQpOiBDcmVhdGVSZXF1ZXN0IHtcblx0XHRyZXR1cm4gbmV3IENyZWF0ZVJlcXVlc3QoXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdFx0Y29tcGlsYXRpb24sXG5cdFx0XHRsb2NhbENvbGxlY3Rpb25DYWNoZSxcblx0XHRcdHBhcmFtZXRlck1hcCxcblx0XHRcdGJyZWFrdXBCeVBhcmVudFxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEl0ZW1DYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5cbmV4cG9ydCBjbGFzcyBJdGVtQ2FjaGVGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeVxuXHQpIHtcblx0fVxuXG5cdGNvbnN0cnVjdCAoKTogSXRlbUNhY2hlIHtcblx0XHRyZXR1cm4gbmV3IEl0ZW1DYWNoZSh0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBBcGlGb3JtYXR0ZXIsIENvbHVtblNldCwgSXRlbUVudHJ5U2VydmljZSwgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQ29sdW1uU2V0RmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBFeGNlcHRpb25IYW5kbGVySW50ZXJmYWNlLCBBdXRoSW50ZXJmYWNlLCBQcm9taXNlTGlicmFyeUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgSXRlbUVudHJ5LCBUZW1wbGF0ZSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0Q29sdW1ucywgRW50cnlQYXJlbnROdWxsLCBGaWVsZE1hcCwgSXRlbUlkLCBJdGVtSWRDb252ZXJzaW9uTWFwLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIEl0ZW1FbnRyeUZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHVibGljIGF1dGhJbnRlcmZhY2U6IEF1dGhJbnRlcmZhY2UsXG5cdFx0cHVibGljIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxuXHRcdHB1YmxpYyBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxuXHRcdHB1YmxpYyBleGNlcHRpb25IYW5kbGVyOiBFeGNlcHRpb25IYW5kbGVySW50ZXJmYWNlLFxuXHRcdHB1YmxpYyBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxuXHRcdHB1YmxpYyBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuXHRcdHB1YmxpYyBwcm9taXNlU2VydmljZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2Vcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3RTdHViIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkLCBjb2x1bW5TZXRTdHViOiBDb2x1bW5TZXQpOiBJdGVtRW50cnkge1xuXHRcdHJldHVybiBuZXcgSXRlbUVudHJ5KHRoaXMsIGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtblNldFN0dWIpO1xuXHR9XG5cblx0Y29uc3RydWN0TG9jYWxMaW5rZWQgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtSWQ6IEl0ZW1JZCxcblx0XHRpbml0aWFsOiBGaWVsZE1hcCxcblx0XHRwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCxcblx0XHRjb2x1bW5TZXQ6IENvbHVtblNldCxcblx0XHRjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwXG5cdCk6IEl0ZW1FbnRyeSB7XG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5jb25zdHJ1Y3RTdHViKGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtblNldCk7XG5cblx0XHRpdGVtRW50cnkucGFyZW50ID0gcGFyZW50O1xuXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeS5zZXRMb2NhbEZpZWxkcyhpbml0aWFsLCBjb252ZXJzaW9uTWFwKTtcblx0fVxuXG5cdGNvbnN0cnVjdExvY2FsIChcblx0XHRpdGVtSWQ6IEl0ZW1JZCxcblx0XHR0ZW1wbGF0ZTogVGVtcGxhdGUsXG5cdFx0bW9kaWZpZWQ6IEZpZWxkTWFwLFxuXHRcdGRlcml2ZWQ6IEZpZWxkTWFwLFxuXHRcdHBhcmVudDogRW50cnlQYXJlbnROdWxsID0gbnVsbCxcblx0XHRjb2x1bW5TZXQ6IENvbHVtblNldCA9IHRlbXBsYXRlLmNvbHVtbnMsXG5cdFx0Y29udmVyc2lvbk1hcD86IEl0ZW1JZENvbnZlcnNpb25NYXBcblx0KTogSXRlbUVudHJ5IHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IHRlbXBsYXRlLmNvbHVtbnMuaXRlbVR5cGU7XG5cblx0XHRpZiAoY29udmVyc2lvbk1hcCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0Y29udmVyc2lvbk1hcCA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5jcmVhdGVMb2NhbENvbnZlcnNpb25NYXAoaXRlbVR5cGUsIGl0ZW1JZCwgdHJ1ZSwgdGVtcGxhdGUucmVzcG9uc2UpO1xuXG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5jb25zdHJ1Y3RTdHViKGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtblNldCk7XG5cblx0XHRpdGVtRW50cnkucGFyZW50ID0gcGFyZW50O1xuXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeVxuXHRcdFx0LnNldExvY2FsRmllbGRzKHRlbXBsYXRlLmZpZWxkcywgY29udmVyc2lvbk1hcCwgdGVtcGxhdGUuY29sdW1ucylcblx0XHRcdC5zZXRNb2RpZmllZChtb2RpZmllZClcblx0XHRcdC5zZXREZXJpdmVkKGRlcml2ZWQpO1xuXHR9XG5cblx0Y29uc3RydWN0RGVmZXJyZWQgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtSWQ6IEl0ZW1JZCxcblx0XHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMsXG5cdFx0ZGVmZXJSZXF1ZXN0OiBib29sZWFuXG5cdCk6IEl0ZW1FbnRyeSB7XG5cdFx0Y29uc3QgaXRlbUVudHJ5U3R1YiA9IHRoaXMuY29uc3RydWN0U3R1Yihcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkLFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdFN0dWIoXG5cdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRyZXF1ZXN0Q29sdW1uc1xuXHRcdFx0KVxuXHRcdCk7XG5cblx0XHRpdGVtRW50cnlTdHViLmRlZmVyKGRlZmVyUmVxdWVzdCk7XG5cblx0XHRyZXR1cm4gaXRlbUVudHJ5U3R1Yjtcblx0fVxuXG5cdGNvbnN0cnVjdCAoXG5cdFx0aXRlbUlkOiBJdGVtSWQsXG5cdFx0aW5pdGlhbDogRmllbGRNYXAsXG5cdFx0ZGVyaXZlZDogRmllbGRNYXAsXG5cdFx0Y29sdW1uSW5mbzogQ29sdW1uU2V0XG5cdCk6IEl0ZW1FbnRyeSB7XG5cdFx0cmV0dXJuIHRoaXMuY29uc3RydWN0U3R1Yihcblx0XHRcdGNvbHVtbkluZm8uaXRlbVR5cGUsXG5cdFx0XHRpdGVtSWQsIC8vIGluaXRpYWwuaWQgKHdoZW4gaW5pdGlhbCBpcyBub3QgYSB0ZW1wbGF0ZSlcblx0XHRcdGNvbHVtbkluZm8sXG5cdFx0KS5zZXRGaWVsZHMoXG5cdFx0XHRpbml0aWFsLCAvLyBjYW4gYWxzbyBiZSBhIHRlbXBsYXRlXG5cdFx0XHRkZXJpdmVkLFxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEFwaUZvcm1hdHRlciwgQ2hhbmdlc1Byb2Nlc3NvciwgTG9ja1NlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEVkaXRSZXNvdXJjZSwgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2VPcHRpb25zLCBMb2NhbFZpZXdSZXNvdXJjZSwgUmVtb3RlVmlld1Jlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IEl0ZW1PcHRpb25zSW50ZXJmYWNlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgSXRlbVJlc291cmNlRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwdWJsaWMgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXG5cdFx0cHVibGljIGxvY2tTZXJ2aWNlOiBMb2NrU2VydmljZSxcblx0XHRwdWJsaWMgY2hhbmdlc1Byb2Nlc3NvcjogQ2hhbmdlc1Byb2Nlc3Nvcixcblx0XHRwdWJsaWMgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHVibGljIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZVxuXHQpIHtcblx0fVxuXG5cdGdldENvbnN0cnVjdG9yIChvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0OiB0cnVlfSk6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gRWRpdFJlc291cmNlO1xuXHRnZXRDb25zdHJ1Y3RvciAob3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgJiB7cmVtb3RlOiB0cnVlfSk6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gUmVtb3RlVmlld1Jlc291cmNlO1xuXHRnZXRDb25zdHJ1Y3RvciAob3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UpOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IExvY2FsVmlld1Jlc291cmNlO1xuXHRnZXRDb25zdHJ1Y3RvciAob3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UpIHtcblx0XHRjb25zdCBvcHRpb25zSW5zdGFuY2UgPSBuZXcgSXRlbVJlc291cmNlT3B0aW9ucyhvcHRpb25zKTtcblxuXHRcdHJldHVybiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IHtcblx0XHRcdGlmIChvcHRpb25zSW5zdGFuY2UuZWRpdClcblx0XHRcdFx0cmV0dXJuIG5ldyBFZGl0UmVzb3VyY2UodGhpcywgaXRlbUVudHJ5LCBvcHRpb25zSW5zdGFuY2UpO1xuXG5cdFx0XHRyZXR1cm4gb3B0aW9uc0luc3RhbmNlLnJlbW90ZSA/XG5cdFx0XHRcdG5ldyBSZW1vdGVWaWV3UmVzb3VyY2UoaXRlbUVudHJ5LCBvcHRpb25zSW5zdGFuY2UpIDpcblx0XHRcdFx0bmV3IExvY2FsVmlld1Jlc291cmNlKGl0ZW1FbnRyeSwgb3B0aW9uc0luc3RhbmNlKTtcblx0XHR9O1xuXHR9XG5cblx0Y29uc3RydWN0IChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgb3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdDogdHJ1ZX0sIGlzTmV3PzogYm9vbGVhbik6IEVkaXRSZXNvdXJjZTtcblx0Y29uc3RydWN0IChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgb3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgJiB7cmVtb3RlOiB0cnVlfSwgaXNOZXc/OiBib29sZWFuKTogTG9jYWxWaWV3UmVzb3VyY2U7XG5cdGNvbnN0cnVjdCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlLCBpc05ldz86IGJvb2xlYW4pOiBSZW1vdGVWaWV3UmVzb3VyY2U7XG5cdGNvbnN0cnVjdCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlLCBpc05ldz86IGJvb2xlYW4pIHtcblx0XHRjb25zdCBvcHRpb25zSW5zdGFuY2UgPSBuZXcgSXRlbVJlc291cmNlT3B0aW9ucyhvcHRpb25zKTtcblxuXHRcdGlmIChvcHRpb25zLmVkaXQpXG5cdFx0XHRyZXR1cm4gbmV3IEVkaXRSZXNvdXJjZSh0aGlzLCBpdGVtRW50cnksIG9wdGlvbnNJbnN0YW5jZSwgaXNOZXcpO1xuXG5cdFx0cmV0dXJuIG9wdGlvbnNJbnN0YW5jZS5yZW1vdGUgP1xuXHRcdFx0bmV3IFJlbW90ZVZpZXdSZXNvdXJjZShpdGVtRW50cnksIG9wdGlvbnNJbnN0YW5jZSwgaXNOZXcpIDpcblx0XHRcdG5ldyBMb2NhbFZpZXdSZXNvdXJjZShpdGVtRW50cnksIG9wdGlvbnNJbnN0YW5jZSwgaXNOZXcpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBMb2NhbENhY2hlLCBMb2NrU2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHtcblx0Q2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXG5cdENvbGxlY3Rpb25DYWNoZUZhY3RvcnksXG5cdENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdEl0ZW1DYWNoZUZhY3RvcnksXG5cdEl0ZW1SZXNvdXJjZUZhY3Rvcnlcbn0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEV4Y2VwdGlvbkhhbmRsZXJJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0V4Y2VwdGlvbkhhbmRsZXJJbnRlcmZhY2UnO1xuXG5leHBvcnQgY2xhc3MgTG9jYWxDYWNoZUZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeTogQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sbGVjdGlvblJlc291cmNlRmFjdG9yeTogQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgZXhjZXB0aW9uSGFuZGxlcjogRXhjZXB0aW9uSGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGl0ZW1DYWNoZUZhY3Rvcnk6IEl0ZW1DYWNoZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdHByaXZhdGUgbG9ja1NlcnZpY2U6IExvY2tTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlXG5cdCkge1xuXG5cdH1cblxuXHRjb25zdHJ1Y3QgKGlkPzogc3RyaW5nKTogTG9jYWxDYWNoZSB7XG5cdFx0cmV0dXJuIG5ldyBMb2NhbENhY2hlKFxuXHRcdFx0dGhpcy5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLFxuXHRcdFx0dGhpcy5leGNlcHRpb25IYW5kbGVyLFxuXHRcdFx0dGhpcy5pdGVtQ2FjaGVGYWN0b3J5LFxuXHRcdFx0dGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdFx0dGhpcy5sb2NrU2VydmljZSxcblx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2UsXG5cdFx0XHRpZFxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSwgSXRlbUNhY2hlLCBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb24gfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XG5cbmV4cG9ydCBjbGFzcyBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5IHtcblx0Y29uc3RydWN0IChyb290SXRlbTogSXRlbUVudHJ5LCBzaW5nbGVJdGVtQ2FjaGU6IEl0ZW1DYWNoZSwgY29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGUpOiBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb24ge1xuXHRcdHJldHVybiBuZXcgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uKHJvb3RJdGVtLCBzaW5nbGVJdGVtQ2FjaGUsIGNvbGxlY3Rpb25DYWNoZSk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEFwaUZvcm1hdHRlciwgUXVlcnlNYXRjaGVyIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBFbnRyeVBhcmVudE51bGwsIEZpZWxkTWFwLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIFF1ZXJ5TWF0Y2hlckZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlclxuXHQpIHtcblxuXHR9XG5cblx0Y29uc3RydWN0IChpdGVtVHlwZTogSXRlbVR5cGUsIGZpZWxkczogRmllbGRNYXAsIHBhcmVudDogRW50cnlQYXJlbnROdWxsKTogUXVlcnlNYXRjaGVyIHtcblx0XHRyZXR1cm4gbmV3IFF1ZXJ5TWF0Y2hlcihcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRmaWVsZHMsXG5cdFx0XHRwYXJlbnRcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBRdWVyeVBhcnNlciB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQXBpUXVlcnkgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBRdWVyeVBhcnNlckZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoKSB7XG5cdH1cblxuXHRjb25zdHJ1Y3QgKHF1ZXJ5OiBBcGlRdWVyeSwgcGFyYW1ldGVycz86IGFueSk6IFF1ZXJ5UGFyc2VyIHtcblx0XHRyZXR1cm4gbmV3IFF1ZXJ5UGFyc2VyKHF1ZXJ5LCBwYXJhbWV0ZXJzKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sdW1uVXRpbCwgUmVxdWVzdENvbHVtbkV4cGFuc2lvbiB9IGZyb20gJy4uL2NsYXNzZXMnO1xuXG5leHBvcnQgY2xhc3MgUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXG5cdCkge1xuXHR9XG5cblx0Y29uc3RydWN0ICgpOiBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uIHtcblx0XHRyZXR1cm4gbmV3IFJlcXVlc3RDb2x1bW5FeHBhbnNpb24oXG5cdFx0XHR0aGlzLmNvbHVtblV0aWxcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5VdGlsIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDb2x1bW5TZXRGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IEFwaVJlc3BvbnNlLCBJdGVtVHlwZSwgUmVzcG9uc2VDb2x1bW5NYXAgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZUZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHVibGljIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXG5cdFx0cHVibGljIGNvbHVtblV0aWw6IENvbHVtblV0aWxcblx0KSB7fVxuXG5cdGNvbnN0cnVjdCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCByZXNwb25zZTogQXBpUmVzcG9uc2UsIGFkZGl0aW9uYWxDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcCk6IFRlbXBsYXRlIHtcblx0XHRyZXR1cm4gbmV3IFRlbXBsYXRlKHRoaXMsIGl0ZW1UeXBlLCByZXNwb25zZSwgYWRkaXRpb25hbENvbHVtbnMpO1xuXHR9XG59XG4iLCJleHBvcnQgKiBmcm9tICcuL0FwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0JhdGNoU3RhdHVzRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0NoYW5nZXNDb21waWxhdGlvbkZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9DaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25DYWNoZUZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uRW50cnlGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0NvbHVtbkV4cGFuc2lvbkZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5JbmZvRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0NvbHVtblNldEZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5TdWJzZXRDYWNoZUZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9DcmVhdGVSZXF1ZXN0RmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0l0ZW1DYWNoZUZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9JdGVtRW50cnlGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vSXRlbVJlc291cmNlRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0xvY2FsQ2FjaGVGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL1F1ZXJ5TWF0Y2hlckZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9RdWVyeVBhcnNlckZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9SZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL1RlbXBsYXRlRmFjdG9yeSc7XG4iLCJpbXBvcnQge1xuXHRBcGlGb3JtYXR0ZXIsXG5cdEFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRDb2xsZWN0aW9uSGFuZGxlcixcblx0Q29sbGVjdGlvblJlc291cmNlU2VydmljZSxcblx0Q29sdW1uQ2FjaGUsXG5cdENvbHVtbkhhbmRsZXIsXG5cdENvbHVtblV0aWwsXG5cdEl0ZW1BZG1pbmlzdHJhdG9yLFxuXHRJdGVtRW50cnlTZXJ2aWNlLFxuXHRJdGVtSGFuZGxlcixcblx0SXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRLZXlTZXJ2aWNlLFxuXHRMb2NrU2VydmljZSxcblx0UXVlcnlTZXJ2aWNlLFxuXHRTb2NrZXRNZXNzYWdlSGFuZGxlclxufSBmcm9tICcuL2NsYXNzZXMnO1xuaW1wb3J0IHtcblx0QXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5LFxuXHRCYXRjaFN0YXR1c0ZhY3RvcnksXG5cdENoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXG5cdENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRDb2xsZWN0aW9uRW50cnlGYWN0b3J5LFxuXHRDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksXG5cdENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdENvbHVtbkluZm9GYWN0b3J5LFxuXHRDb2x1bW5TZXRGYWN0b3J5LFxuXHRDb2x1bW5TdWJzZXRDYWNoZUZhY3RvcnksXG5cdENyZWF0ZVJlcXVlc3RGYWN0b3J5LFxuXHRJdGVtQ2FjaGVGYWN0b3J5LFxuXHRJdGVtRW50cnlGYWN0b3J5LFxuXHRJdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRMb2NhbENhY2hlRmFjdG9yeSxcblx0TW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcblx0UXVlcnlNYXRjaGVyRmFjdG9yeSxcblx0UXVlcnlQYXJzZXJGYWN0b3J5LFxuXHRSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSwgVGVtcGxhdGVGYWN0b3J5XG59IGZyb20gJy4vZmFjdG9yaWVzJztcbmltcG9ydCB7XG5cdEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRBdXRoSW50ZXJmYWNlLFxuXHRFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdEV4Y2VwdGlvbkhhbmRsZXJJbnRlcmZhY2UsXG5cdExvY2FsQ2FjaGVNYW5hZ2VySW50ZXJmYWNlLFxuXHRQcm9taXNlTGlicmFyeUludGVyZmFjZVxufSBmcm9tICcuL2ludGVyZmFjZXMnO1xuXG5leHBvcnQgY2xhc3MgUm1Db3JlIHtcblx0dmVyc2lvbjogc3RyaW5nO1xuXHRub29wID0gbm9vcDtcblxuXHRhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcjtcblx0YXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlO1xuXHRhcGlSZXNwb25zZVByb2Nlc3NvckZhY3Rvcnk6IEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeTtcblx0YmF0Y2hTdGF0dXNGYWN0b3J5OiBCYXRjaFN0YXR1c0ZhY3Rvcnk7XG5cdGNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnk6IENoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnk7XG5cdGNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5OiBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeTtcblx0Y29sbGVjdGlvbkNhY2hlRmFjdG9yeTogQ29sbGVjdGlvbkNhY2hlRmFjdG9yeTtcblx0Y29sbGVjdGlvbkVudHJ5RmFjdG9yeTogQ29sbGVjdGlvbkVudHJ5RmFjdG9yeTtcblx0Y29sbGVjdGlvbkVudHJ5U2VydmljZTogQ29sbGVjdGlvbkVudHJ5U2VydmljZTtcblx0Y29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyO1xuXHRjb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnk6IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeTtcblx0Y29sbGVjdGlvblJlc291cmNlRmFjdG9yeTogQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeTtcblx0Y29sbGVjdGlvblJlc291cmNlU2VydmljZTogQ29sbGVjdGlvblJlc291cmNlU2VydmljZTtcblx0Y29sdW1uQ2FjaGU6IENvbHVtbkNhY2hlO1xuXHRjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5O1xuXHRjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyO1xuXHRjb2x1bW5JbmZvRmFjdG9yeTogQ29sdW1uSW5mb0ZhY3Rvcnk7XG5cdGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3Rvcnk7XG5cdGNvbHVtblN1YnNldENhY2hlRmFjdG9yeTogQ29sdW1uU3Vic2V0Q2FjaGVGYWN0b3J5O1xuXHRjb2x1bW5VdGlsOiBDb2x1bW5VdGlsO1xuXHRjcmVhdGVSZXF1ZXN0RmFjdG9yeTogQ3JlYXRlUmVxdWVzdEZhY3Rvcnk7XG5cdGl0ZW1BZG1pbmlzdHJhdG9yOiBJdGVtQWRtaW5pc3RyYXRvcjtcblx0aXRlbUNhY2hlRmFjdG9yeTogSXRlbUNhY2hlRmFjdG9yeTtcblx0aXRlbUVudHJ5RmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeTtcblx0aXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZTtcblx0aXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyO1xuXHRpdGVtUmVxdWVzdFNlcnZpY2U6IEl0ZW1SZXF1ZXN0U2VydmljZTtcblx0aXRlbVJlc291cmNlRmFjdG9yeTogSXRlbVJlc291cmNlRmFjdG9yeTtcblx0a2V5U2VydmljZTogS2V5U2VydmljZTtcblx0bG9jYWxDYWNoZUZhY3Rvcnk6IExvY2FsQ2FjaGVGYWN0b3J5O1xuXHRsb2NrU2VydmljZTogTG9ja1NlcnZpY2U7XG5cdG1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnk6IE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnk7XG5cdHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3Rvcnk7XG5cdHF1ZXJ5UGFyc2VyRmFjdG9yeTogUXVlcnlQYXJzZXJGYWN0b3J5O1xuXHRxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZTtcblx0cmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5O1xuXHRzb2NrZXRNZXNzYWdlSGFuZGxlcjogU29ja2V0TWVzc2FnZUhhbmRsZXI7XG5cdHRlbXBsYXRlRmFjdG9yeTogVGVtcGxhdGVGYWN0b3J5O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRhcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0YXV0aEludGVyZmFjZTogQXV0aEludGVyZmFjZSxcblx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2U6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRleGNlcHRpb25IYW5kbGVySW50ZXJmYWNlOiBFeGNlcHRpb25IYW5kbGVySW50ZXJmYWNlLFxuXHRcdGxvY2FsQ2FjaGVNYW5hZ2VyOiBMb2NhbENhY2hlTWFuYWdlckludGVyZmFjZSxcblx0XHRwcm9taXNlTGlicmFyeUludGVyZmFjZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2Vcblx0KSB7XG5cdFx0dGhpcy52ZXJzaW9uID0gJzEuNi4xJztcblxuXHRcdHRoaXMuYXBpRm9ybWF0dGVyID0gbmV3IEFwaUZvcm1hdHRlcigpO1xuXHRcdHRoaXMua2V5U2VydmljZSA9IG5ldyBLZXlTZXJ2aWNlKCk7XG5cdFx0dGhpcy5xdWVyeVNlcnZpY2UgPSBuZXcgUXVlcnlTZXJ2aWNlKCk7XG5cdFx0dGhpcy5jb2x1bW5VdGlsID0gbmV3IENvbHVtblV0aWwoKTtcblxuXHRcdHRoaXMuYXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5ID0gbmV3IEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSh0aGlzLmFwaUZvcm1hdHRlcik7XG5cblx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlID0gbmV3IEFwaVJlcXVlc3RTZXJ2aWNlKGFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCB0aGlzLmFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSk7XG5cblx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UgPSBuZXcgSXRlbUVudHJ5U2VydmljZShhdXRoSW50ZXJmYWNlLCB0aGlzLmtleVNlcnZpY2UpO1xuXG5cdFx0dGhpcy5sb2NrU2VydmljZSA9IG5ldyBMb2NrU2VydmljZShcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHRwcm9taXNlTGlicmFyeUludGVyZmFjZVxuXHRcdCk7XG5cdFx0dGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5ID0gbmV3IFF1ZXJ5TWF0Y2hlckZhY3RvcnkodGhpcy5hcGlGb3JtYXR0ZXIpO1xuXHRcdHRoaXMuaXRlbUNhY2hlRmFjdG9yeSA9IG5ldyBJdGVtQ2FjaGVGYWN0b3J5KHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeSk7XG5cdFx0dGhpcy5iYXRjaFN0YXR1c0ZhY3RvcnkgPSBuZXcgQmF0Y2hTdGF0dXNGYWN0b3J5KHByb21pc2VMaWJyYXJ5SW50ZXJmYWNlKTtcblxuXHRcdHRoaXMuY29sdW1uQ2FjaGUgPSBuZXcgQ29sdW1uQ2FjaGUodGhpcy5jb2x1bW5VdGlsKTtcblx0XHR0aGlzLmNvbHVtbkhhbmRsZXIgPSBuZXcgQ29sdW1uSGFuZGxlcihcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHRwcm9taXNlTGlicmFyeUludGVyZmFjZSxcblx0XHRcdHRoaXMuY29sdW1uQ2FjaGUsXG5cdFx0XHR0aGlzLmNvbHVtblV0aWxcblx0XHQpO1xuXG5cdFx0dGhpcy5jb2x1bW5JbmZvRmFjdG9yeSA9IG5ldyBDb2x1bW5JbmZvRmFjdG9yeSgpO1xuXHRcdHRoaXMuY29sdW1uU3Vic2V0Q2FjaGVGYWN0b3J5ID0gbmV3IENvbHVtblN1YnNldENhY2hlRmFjdG9yeSgpO1xuXHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSA9IG5ldyBDb2x1bW5FeHBhbnNpb25GYWN0b3J5KHRoaXMuY29sdW1uSW5mb0ZhY3RvcnkpO1xuXHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSA9IG5ldyBDb2x1bW5TZXRGYWN0b3J5KHRoaXMuY29sdW1uSGFuZGxlciwgdGhpcy5jb2x1bW5VdGlsLCB0aGlzLmNvbHVtbkluZm9GYWN0b3J5KTtcblxuXHRcdHRoaXMudGVtcGxhdGVGYWN0b3J5ID0gbmV3IFRlbXBsYXRlRmFjdG9yeSh0aGlzLmNvbHVtblNldEZhY3RvcnksIHRoaXMuY29sdW1uVXRpbCk7XG5cblx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnkgPSBuZXcgSXRlbUVudHJ5RmFjdG9yeShcblx0XHRcdGF1dGhJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcblx0XHRcdGV4Y2VwdGlvbkhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHRwcm9taXNlTGlicmFyeUludGVyZmFjZVxuXHRcdCk7XG5cdFx0dGhpcy5pdGVtSGFuZGxlciA9IG5ldyBJdGVtSGFuZGxlcihcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcblx0XHRcdHRoaXMuYmF0Y2hTdGF0dXNGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5TdWJzZXRDYWNoZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbHVtblV0aWwsXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLml0ZW1DYWNoZUZhY3RvcnksXG5cdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnksXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHRwcm9taXNlTGlicmFyeUludGVyZmFjZSxcblx0XHRcdHRoaXMudGVtcGxhdGVGYWN0b3J5XG5cdFx0KTtcblx0XHR0aGlzLml0ZW1SZXF1ZXN0U2VydmljZSA9IG5ldyBJdGVtUmVxdWVzdFNlcnZpY2UodGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnksXG5cdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnksXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZSxcblx0XHRcdHByb21pc2VMaWJyYXJ5SW50ZXJmYWNlXG5cdFx0KTtcblxuXHRcdHRoaXMucXVlcnlQYXJzZXJGYWN0b3J5ID0gbmV3IFF1ZXJ5UGFyc2VyRmFjdG9yeSgpO1xuXHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSA9IG5ldyBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlKHRoaXMucXVlcnlQYXJzZXJGYWN0b3J5LCB0aGlzLnF1ZXJ5U2VydmljZSk7XG5cdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlID0gbmV3IENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UoKTtcblx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeUZhY3RvcnkgPSBuZXcgQ29sbGVjdGlvbkVudHJ5RmFjdG9yeShcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMuY29sdW1uSGFuZGxlcixcblx0XHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdGV4Y2VwdGlvbkhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnksXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLFxuXHRcdFx0dGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHRwcm9taXNlTGlicmFyeUludGVyZmFjZSxcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlXG5cdFx0KTtcblx0XHR0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkgPSBuZXcgQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSh0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkpO1xuXHRcdHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5ID0gbmV3IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSh0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkpO1xuXHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIgPSBuZXcgQ29sbGVjdGlvbkhhbmRsZXIoXG5cdFx0XHR0aGlzLmJhdGNoU3RhdHVzRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5RmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcblx0XHRcdHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLnF1ZXJ5UGFyc2VyRmFjdG9yeSxcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlXG5cdFx0KTtcblxuXHRcdHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkgPSBuZXcgUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkodGhpcy5jb2x1bW5VdGlsKTtcblx0XHR0aGlzLmNyZWF0ZVJlcXVlc3RGYWN0b3J5ID0gbmV3IENyZWF0ZVJlcXVlc3RGYWN0b3J5KFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcblx0XHRcdHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxuXHRcdCk7XG5cdFx0dGhpcy5jaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5ID0gbmV3IENoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkodGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LCB0aGlzLmtleVNlcnZpY2UpO1xuXHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkgPSBuZXcgQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkoXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHR0aGlzLmNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5jcmVhdGVSZXF1ZXN0RmFjdG9yeSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXG5cdFx0XHRwcm9taXNlTGlicmFyeUludGVyZmFjZSxcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnlcblx0XHQpO1xuXHRcdHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSA9IG5ldyBJdGVtUmVzb3VyY2VGYWN0b3J5KFxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXG5cdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLFxuXHRcdFx0dGhpcy5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeS5jb25zdHJ1Y3QoKSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHByb21pc2VMaWJyYXJ5SW50ZXJmYWNlXG5cdFx0KTtcblx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkgPSBuZXcgQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeShcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdGV4Y2VwdGlvbkhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUxpYnJhcnlJbnRlcmZhY2Vcblx0XHQpO1xuXG5cdFx0dGhpcy5sb2NhbENhY2hlRmFjdG9yeSA9IG5ldyBMb2NhbENhY2hlRmFjdG9yeShcblx0XHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHRleGNlcHRpb25IYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5pdGVtQ2FjaGVGYWN0b3J5LFxuXHRcdFx0dGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdFx0dGhpcy5sb2NrU2VydmljZSxcblx0XHRcdHByb21pc2VMaWJyYXJ5SW50ZXJmYWNlXG5cdFx0KTtcblx0XHR0aGlzLm1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkgPSBuZXcgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSgpO1xuXG5cdFx0dGhpcy5pdGVtQWRtaW5pc3RyYXRvciA9IG5ldyBJdGVtQWRtaW5pc3RyYXRvcihcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHRhdXRoSW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcblx0XHRcdHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcblx0XHRcdHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5sb2NhbENhY2hlRmFjdG9yeSxcblx0XHRcdGxvY2FsQ2FjaGVNYW5hZ2VyLFxuXHRcdFx0dGhpcy5tb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxuXHRcdFx0cHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZVxuXHRcdCk7XG5cblx0XHR0aGlzLnNvY2tldE1lc3NhZ2VIYW5kbGVyID0gbmV3IFNvY2tldE1lc3NhZ2VIYW5kbGVyKFxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcblx0XHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5RmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXG5cdFx0XHRsb2NhbENhY2hlTWFuYWdlcixcblx0XHRcdHByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxuXHRcdCk7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vb3AgKCkge1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHkgKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZTtcbn1cbiIsImV4cG9ydCAqIGZyb20gJy4vY29yZSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cyc7XG5leHBvcnQgKiBmcm9tICcuL21vZGVscyc7XG5leHBvcnQgKiBmcm9tICcuL2ludGVyZmFjZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9jbGFzc2VzJztcbmV4cG9ydCAqIGZyb20gJy4vZmFjdG9yaWVzJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==
|