@rentman/rm-core 1.4.0-1 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/rm-core.js
CHANGED
|
@@ -1402,7 +1402,7 @@ var ChangesProcessor_ChangesProcessor = /** @class */ (function () {
|
|
|
1402
1402
|
for (var _i = 0, compilationEntries_2 = compilationEntries; _i < compilationEntries_2.length; _i++) {
|
|
1403
1403
|
var compilationEntry = compilationEntries_2[_i];
|
|
1404
1404
|
var itemEntry = compilationEntry.item;
|
|
1405
|
-
this.addCollectionMapEntry(removeCollectionMap, compilationEntry.
|
|
1405
|
+
this.addCollectionMapEntry(removeCollectionMap, compilationEntry.parentId, itemEntry, itemEntry.itemId);
|
|
1406
1406
|
this.addCollectionMapEntry(addCollectionMap, itemEntry.parent.itemId, itemEntry, itemEntry);
|
|
1407
1407
|
itemEntries.push(itemEntry);
|
|
1408
1408
|
}
|
|
@@ -7240,7 +7240,7 @@ var TemplateFactory_TemplateFactory = /** @class */ (function () {
|
|
|
7240
7240
|
var core_RmCore = /** @class */ (function () {
|
|
7241
7241
|
function RmCore(externalApiRequestService, localCacheManager, authInterface, errorHandlerInterface, promiseLibraryInterface) {
|
|
7242
7242
|
this.noop = noop;
|
|
7243
|
-
this.version = '1.4.0
|
|
7243
|
+
this.version = '1.4.0';
|
|
7244
7244
|
this.apiFormatter = new ApiFormatter_ApiFormatter();
|
|
7245
7245
|
this.keyService = new KeyService_KeyService();
|
|
7246
7246
|
this.queryService = new QueryService();
|
|
@@ -7401,4 +7401,4 @@ function identity(value) {
|
|
|
7401
7401
|
/***/ })
|
|
7402
7402
|
/******/ ]);
|
|
7403
7403
|
});
|
|
7404
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9SbUNvcmUvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL1JtQ29yZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9SbUNvcmUvZXh0ZXJuYWwgXCJtb21lbnRcIiIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9VdGlsLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0FwaUZvcm1hdHRlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9BcGlSZXF1ZXN0U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9BcGlSZXNwb25zZVByb2Nlc3Nvci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY29uc3RhbnRzLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0JhdGNoU3RhdHVzLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NoYW5nZXNDb21waWxhdGlvbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9DaGFuZ2VzUHJvY2Vzc29yLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25DYWNoZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2xsZWN0aW9uRW50cnlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25IYW5kbGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25NYXRjaGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uRXhwYW5zaW9uLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbHVtbkhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uSW5mby50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2x1bW5TZXQudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uVXRpbC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9DcmVhdGVSZXF1ZXN0LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvbkVudHJ5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvblJlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvblZpZXdSZXNvdXJjZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL0NvbGxlY3Rpb25FZGl0UmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9JdGVtRW50cnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9JdGVtUmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9WaWV3UmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9FZGl0UmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9UZW1wbGF0ZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL2luZGV4LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1BZG1pbmlzdHJhdG9yLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1DYWNoZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtRW50cnlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1IYW5kbGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1SZXF1ZXN0U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtUmVzb3VyY2VTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0tleVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL3R5cGVzL0l0ZW1UeXBlc0NvbGxlY3Rpb24udHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL3R5cGVzL2luZGV4LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0xvY2FsQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvTG9ja1NlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL1F1ZXJ5TWF0Y2hlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9RdWVyeVBhcnNlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9RdWVyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvUmVxdWVzdENvbHVtbkV4cGFuc2lvbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Tb2NrZXRNZXNzYWdlSGFuZGxlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9pbmRleC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0FwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0JhdGNoU3RhdHVzRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9DaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbGxlY3Rpb25DYWNoZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2xsZWN0aW9uRW50cnlGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbHVtbkV4cGFuc2lvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2x1bW5JbmZvRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbHVtblNldEZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9DcmVhdGVSZXF1ZXN0RmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0l0ZW1DYWNoZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9JdGVtRW50cnlGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvSXRlbVJlc291cmNlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0xvY2FsQ2FjaGVGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL1F1ZXJ5TWF0Y2hlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9RdWVyeVBhcnNlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9SZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL1RlbXBsYXRlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL2luZGV4LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jb3JlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTztBQ1ZBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0RBQTBDLGdDQUFnQztBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdFQUF3RCxrQkFBa0I7QUFDMUU7QUFDQSx5REFBaUQsY0FBYztBQUMvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQXlDLGlDQUFpQztBQUMxRSx3SEFBZ0gsbUJBQW1CLEVBQUU7QUFDckk7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBMkIsMEJBQTBCLEVBQUU7QUFDdkQseUNBQWlDLGVBQWU7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOERBQXNELCtEQUErRDs7QUFFckg7QUFDQTs7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QkFBK0IsRUFDcEMsdUJBQXVCLEVBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQ2pCLENBQUM7UUFFRixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQyx1QkFBdUIsRUFDM0UsSUFBSSxDQUFDLGlCQUFpQixFQUN0QixJQUFJLENBQUMsV0FBVyxFQUNoQixJQUFJLENBQUMsZ0JBQWdCLEVBQ3JCLElBQUksQ0FBQyxpQkFBaUIsRUFDdEIsSUFBSSxDQUFDLGdCQUFnQixFQUNyQixJQUFJLENBQUMsc0JBQXNCLEVBQzNCLElBQUksQ0FBQyw2QkFBNkIsRUFDbEMsSUFBSSxDQUFDLFlBQVksRUFDakIscUJBQXFCLENBQ3JCLENBQUM7SUFDSCxDQUFDO0lBQ0YsYUFBQztBQUFELENBQUM7O0FBRUs7QUFDTixDQUFDO0FBRUssa0JBQW9CLEtBQUs7SUFDOUIsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUNkLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN0U3NCO0FBQ0s7QUFDSDtBQUVDO0FBQ0U7QUFDSiIsImZpbGUiOiJybS1jb3JlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwibW9tZW50XCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtcIm1vbWVudFwiXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJSbUNvcmVcIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJtb21lbnRcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIlJtQ29yZVwiXSA9IGZhY3Rvcnkocm9vdFtcIm1vbWVudFwiXSk7XG59KSh3aW5kb3csIGZ1bmN0aW9uKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzBfXykge1xucmV0dXJuICIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fMF9fOyIsImV4cG9ydCBmdW5jdGlvbiBzaGFsbG93TWVyZ2UgKG9iamVjdCwgZGVmYXVsdHMpIHtcclxuXHRpZiAob2JqZWN0ID09PSB1bmRlZmluZWQpXHJcblx0XHRyZXR1cm4gZGVmYXVsdHM7XHJcblxyXG5cdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRmb3IgKGNvbnN0IGtleSBpbiBkZWZhdWx0cykge1xyXG5cdFx0cmVzdWx0W2tleV0gPSBvYmplY3Rba2V5XSA9PT0gdW5kZWZpbmVkID9cclxuXHRcdFx0ZGVmYXVsdHNba2V5XSA6IG9iamVjdFtrZXldO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGhhc1Byb3BlcnRpZXMgKG9iamVjdCkge1xyXG5cdC8vIEB0cy1pZ25vcmVcclxuXHRmb3IgKGNvbnN0IGtleSBpbiBvYmplY3QpXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHJcblx0cmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rmlyc3RQcm9wZXJ0eSAob2JqZWN0KSB7XHJcblx0aWYgKHR5cGVvZiBvYmplY3QgIT09ICdvYmplY3QnKVxyXG5cdFx0cmV0dXJuIG51bGw7XHJcblxyXG5cdGZvciAoY29uc3Qga2V5IGluIG9iamVjdClcclxuXHRcdHJldHVybiBrZXk7XHJcblxyXG5cdHJldHVybiBudWxsO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaW5BcnJheSAobmVlZGxlLCBoYXlzdGFjaykge1xyXG5cdGZvciAoY29uc3QgaGF5IG9mIGhheXN0YWNrKSB7XHJcblx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xyXG5cdFx0aWYgKG5lZWRsZSA9PSBoYXkpXHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyQXJyYXk8VD4gKHNvdXJjZTogVFtdLCBjYWxsYmFjazogKFQpID0+IGJvb2xlYW4pOiBib29sZWFuIHtcclxuXHRjb25zdCBmaWx0ZXJlZDogVFtdID0gW107XHJcblxyXG5cdGZvciAoY29uc3Qgc3JjIG9mIHNvdXJjZSkge1xyXG5cdFx0aWYgKGNhbGxiYWNrKHNyYykpXHJcblx0XHRcdGZpbHRlcmVkLnB1c2goc3JjKTtcclxuXHR9XHJcblxyXG5cdGlmIChmaWx0ZXJlZC5sZW5ndGggPT09IHNvdXJjZS5sZW5ndGgpXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdGVtcHR5QXJyYXkoc291cmNlKTtcclxuXHJcblx0Zm9yIChjb25zdCBmaWx0ZXIgb2YgZmlsdGVyZWQpXHJcblx0XHRzb3VyY2UucHVzaChmaWx0ZXIpO1xyXG5cclxuXHRyZXR1cm4gdHJ1ZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGVtcHR5QXJyYXkgKGFycmF5KTogdm9pZCB7XHJcblx0YXJyYXkuc3BsaWNlKDApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcGF0aEV4aXN0cyAoc291cmNlLCBwYXRoKSB7XHJcblx0aWYgKHR5cGVvZiBzb3VyY2UgPT09ICd1bmRlZmluZWQnKVxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRmb3IgKGNvbnN0IHAgb2YgcGF0aCkge1xyXG5cdFx0aWYgKHR5cGVvZiBzb3VyY2VbcF0gPT09ICd1bmRlZmluZWQnKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0c291cmNlID0gc291cmNlW3BdO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQYXRoIChvYmplY3Q6IHt9LCBwYXRoOiBBcnJheTxudW1iZXIgfCBzdHJpbmc+LCBkZWZhdWx0czogYW55W10pOiBhbnkge1xyXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xyXG5cdFx0Y29uc3QgdmFsdWUgPSBwYXRoW2ldO1xyXG5cclxuXHRcdGlmIChvYmplY3RbdmFsdWVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdG9iamVjdFt2YWx1ZV0gPSBkZWZhdWx0c1tpXTtcclxuXHJcblx0XHRvYmplY3QgPSBvYmplY3RbdmFsdWVdO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIG9iamVjdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhdGggKG9iamVjdDoge30sIHBhdGg6IEFycmF5PG51bWJlciB8IHN0cmluZz4sIGNyZWF0ZTogYm9vbGVhbiA9IGZhbHNlKTogYW55IHtcclxuXHRpZiAob2JqZWN0ID09PSB1bmRlZmluZWQpXHJcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRmb3IgKGNvbnN0IHAgb2YgcGF0aCkge1xyXG5cdFx0b2JqZWN0ID0gb2JqZWN0W3BdOyAvLyB3b24ndCBhbHRlciB0aGUgY2FsbGVyJ3MgdmFyXHJcblxyXG5cdFx0aWYgKG9iamVjdCA9PT0gdW5kZWZpbmVkICYmICFjcmVhdGUpXHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gb2JqZWN0O1xyXG59XHJcblxyXG4vLyBUYWtlbiBmcm9tIEFuZ3VsYXJKUywgYWRkZWQgY29tbWVudHMgdG8gaWdub3JlIFR5cGVTY3JpcHQgZXJyb3JzXHJcbmZ1bmN0aW9uIGJhc2VFeHRlbmQgKGRzdCwgb2JqcywgZGVlcCkge1xyXG5cdGZvciAobGV0IGkgPSAwLCBpaSA9IG9ianMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xyXG5cdFx0Y29uc3Qgb2JqID0gb2Jqc1tpXTtcclxuXHJcblx0XHRpZiAoIWlzT2JqZWN0KG9iaikgJiYgIWlzRnVuY3Rpb24ob2JqKSlcclxuXHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XHJcblxyXG5cdFx0Zm9yIChsZXQgaiA9IDAsIGpqID0ga2V5cy5sZW5ndGg7IGogPCBqajsgaisrKSB7XHJcblx0XHRcdGNvbnN0IGtleSA9IGtleXNbal07XHJcblx0XHRcdGNvbnN0IHNyYyA9IG9ialtrZXldO1xyXG5cclxuXHRcdFx0aWYgKGRlZXAgJiYgaXNPYmplY3Qoc3JjKSkge1xyXG5cdFx0XHRcdGlmIChpc0RhdGUoc3JjKSkge1xyXG5cdFx0XHRcdFx0ZHN0W2tleV0gPSBuZXcgRGF0ZShzcmMudmFsdWVPZigpKTtcclxuXHRcdFx0XHR9IGVsc2UgaWYgKGlzUmVnRXhwKHNyYykpIHtcclxuXHRcdFx0XHRcdGRzdFtrZXldID0gbmV3IFJlZ0V4cChzcmMpO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAoc3JjLm5vZGVOYW1lKSB7XHJcblx0XHRcdFx0XHRkc3Rba2V5XSA9IHNyYy5jbG9uZU5vZGUodHJ1ZSk7XHJcblx0XHRcdFx0fSBlbHNlIGlmIChpc0VsZW1lbnQoc3JjKSkge1xyXG5cdFx0XHRcdFx0ZHN0W2tleV0gPSBzcmMuY2xvbmUoKTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0aWYgKCFpc09iamVjdChkc3Rba2V5XSkpXHJcblx0XHRcdFx0XHRcdGRzdFtrZXldID0gaXNBcnJheShzcmMpID8gW10gOiB7fTtcclxuXHJcblx0XHRcdFx0XHRiYXNlRXh0ZW5kKGRzdFtrZXldLCBbc3JjXSwgdHJ1ZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGRzdFtrZXldID0gc3JjO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gZHN0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZXh0ZW5kIChkc3QsIC4uLmFyZ3MpIHtcclxuXHRyZXR1cm4gYmFzZUV4dGVuZChkc3QsIGFyZ3MsIGZhbHNlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlIChkc3QsIC4uLmFyZ3MpIHtcclxuXHRyZXR1cm4gYmFzZUV4dGVuZChkc3QsIGFyZ3MsIHRydWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNPYmplY3QgKHZhbHVlKSB7XHJcblx0Ly8gaHR0cDovL2pzcGVyZi5jb20vaXNvYmplY3Q0XHJcblx0cmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCc7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0JsYW5rT2JqZWN0ICh2YWx1ZSkge1xyXG5cdHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNTdHJpbmcgKHZhbHVlKSB7XHJcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlciAodmFsdWUpIHtcclxuXHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0ZSAodmFsdWUpIHtcclxuXHRyZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IERhdGVdJztcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRnVuY3Rpb24gKHZhbHVlKSB7XHJcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVnRXhwICh2YWx1ZSkge1xyXG5cdHJldHVybiB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0Jvb2xlYW4gKHZhbHVlKSB7XHJcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNFbGVtZW50IChub2RlKSB7XHJcblx0cmV0dXJuICEhKG5vZGUgJiZcclxuXHRcdChcclxuXHRcdFx0bm9kZS5ub2RlTmFtZSAgLy8gV2UgYXJlIGEgZGlyZWN0IGVsZW1lbnQuXHJcblx0XHRcdHx8IChub2RlLnByb3AgJiYgbm9kZS5hdHRyICYmIG5vZGUuZmluZClcclxuXHRcdClcclxuXHQpOyAgLy8gV2UgaGF2ZSBhbiBvbiBhbmQgZmluZCBtZXRob2QgcGFydCBvZiBqUXVlcnkgQVBJLlxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNXaW5kb3cgKG9iaikge1xyXG5cdHJldHVybiBvYmogJiYgb2JqLndpbmRvdyA9PT0gb2JqO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNEZWZpbmVkICh2YWx1ZSkge1xyXG5cdHJldHVybiB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxzIChvMSwgbzIpIHtcclxuXHRpZiAobzEgPT09IG8yKVxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblxyXG5cdGlmIChvMSA9PT0gbnVsbCB8fCBvMiA9PT0gbnVsbClcclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxyXG5cdGlmIChvMSAhPT0gbzEgJiYgbzIgIT09IG8yKVxyXG5cdFx0cmV0dXJuIHRydWU7IC8vIE5hTiA9PT0gTmFOXHJcblxyXG5cdGNvbnN0IHQxID0gdHlwZW9mIG8xO1xyXG5cdGNvbnN0IHQyID0gdHlwZW9mIG8yO1xyXG5cclxuXHRsZXQgbGVuZ3RoO1xyXG5cdGxldCBrZXk7XHJcblx0bGV0IGtleVNldDtcclxuXHJcblx0aWYgKHQxID09PSB0MiAmJiB0MSA9PT0gJ29iamVjdCcpIHtcclxuXHRcdGlmIChpc0FycmF5KG8xKSkge1xyXG5cdFx0XHRpZiAoIWlzQXJyYXkobzIpKVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRcdGxlbmd0aCA9IG8xLmxlbmd0aDtcclxuXHJcblx0XHRcdGlmIChvMS5sZW5ndGggPT09IG8yLmxlbmd0aCkge1xyXG5cdFx0XHRcdGZvciAoa2V5ID0gMDsga2V5IDwgbGVuZ3RoOyBrZXkrKykge1xyXG5cdFx0XHRcdFx0aWYgKCFlcXVhbHMobzFba2V5XSwgbzJba2V5XSkpXHJcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2UgaWYgKGlzRGF0ZShvMSkpIHtcclxuXHRcdFx0aWYgKCFpc0RhdGUobzIpKVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRcdHJldHVybiBzaW1wbGVDb21wYXJlKG8xLmdldFRpbWUoKSwgbzIuZ2V0VGltZSgpKTtcclxuXHRcdH0gZWxzZSBpZiAoaXNSZWdFeHAobzEpKSB7XHJcblx0XHRcdGlmICghaXNSZWdFeHAobzIpKVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRcdHJldHVybiBvMS50b1N0cmluZygpID09PSBvMi50b1N0cmluZygpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0aWYgKGlzV2luZG93KG8xKSB8fCBpc1dpbmRvdyhvMikgfHwgaXNBcnJheShvMikgfHwgaXNEYXRlKG8yKSB8fCBpc1JlZ0V4cChvMikpXHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdFx0a2V5U2V0ID0gY3JlYXRlTWFwKCk7XHJcblx0XHRcdGZvciAoa2V5IGluIG8xKSB7XHJcblx0XHRcdFx0aWYgKGlzRnVuY3Rpb24obzFba2V5XSkpXHJcblx0XHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdFx0aWYgKCFlcXVhbHMobzFba2V5XSwgbzJba2V5XSkpXHJcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0XHRcdGtleVNldFtrZXldID0gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Zm9yIChrZXkgaW4gbzIpIHtcclxuXHRcdFx0XHRpZiAoIShrZXkgaW4ga2V5U2V0KSAmJiBpc0RlZmluZWQobzJba2V5XSkgJiYgIWlzRnVuY3Rpb24obzJba2V5XSkpXHJcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVNYXAgKCkge1xyXG5cdHJldHVybiBPYmplY3QuY3JlYXRlKG51bGwpO1xyXG59XHJcblxyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXHJcbmZ1bmN0aW9uIHNpbXBsZUNvbXBhcmUgKGEsIGIpIHtcclxuXHRyZXR1cm4gYSA9PT0gYiB8fCAoYSAhPT0gYSAmJiBiICE9PSBiKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNWYWxpZE9iamVjdE1heERlcHRoIChtYXhEZXB0aCkge1xyXG5cdHJldHVybiBpc051bWJlcihtYXhEZXB0aCkgJiYgbWF4RGVwdGggPiAwO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY29weSAoc291cmNlLCBkZXN0aW5hdGlvbj8sIG1heERlcHRoPykge1xyXG5cdGNvbnN0IHN0YWNrU291cmNlID0gW107XHJcblx0Y29uc3Qgc3RhY2tEZXN0ID0gW107XHJcblxyXG5cdG1heERlcHRoID0gaXNWYWxpZE9iamVjdE1heERlcHRoKG1heERlcHRoKSA/IG1heERlcHRoIDogTmFOO1xyXG5cclxuXHRpZiAoZGVzdGluYXRpb24pIHtcclxuXHRcdGlmIChzb3VyY2UgPT09IGRlc3RpbmF0aW9uKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBjb3B5ISBTb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSBpZGVudGljYWwuJyk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRW1wdHkgdGhlIGRlc3RpbmF0aW9uIG9iamVjdFxyXG5cdFx0aWYgKGlzQXJyYXkoZGVzdGluYXRpb24pKSB7XHJcblx0XHRcdGRlc3RpbmF0aW9uLmxlbmd0aCA9IDA7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBkZXN0aW5hdGlvbilcclxuXHRcdFx0XHRkZWxldGUgZGVzdGluYXRpb25ba2V5XTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBAdHMtaWdub3JlXHJcblx0XHRzdGFja1NvdXJjZS5wdXNoKHNvdXJjZSk7XHJcblx0XHQvLyBAdHMtaWdub3JlXHJcblx0XHRzdGFja0Rlc3QucHVzaChkZXN0aW5hdGlvbik7XHJcblxyXG5cdFx0cmV0dXJuIGNvcHlSZWN1cnNlKHNvdXJjZSwgZGVzdGluYXRpb24sIG1heERlcHRoKTtcclxuXHR9XHJcblxyXG5cdHJldHVybiBjb3B5RWxlbWVudChzb3VyY2UsIG1heERlcHRoKTtcclxuXHJcblx0ZnVuY3Rpb24gY29weVJlY3Vyc2UgKF9zb3VyY2UsIF9kZXN0aW5hdGlvbiwgX21heERlcHRoKSB7XHJcblx0XHRfbWF4RGVwdGgtLTtcclxuXHJcblx0XHRpZiAoX21heERlcHRoIDwgMClcclxuXHRcdFx0cmV0dXJuICcuLi4nO1xyXG5cclxuXHRcdGlmIChpc0FycmF5KF9zb3VyY2UpKSB7XHJcblx0XHRcdGZvciAobGV0IGkgPSAwLCBpaSA9IF9zb3VyY2UubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xyXG5cdFx0XHRcdF9kZXN0aW5hdGlvbi5wdXNoKGNvcHlFbGVtZW50KF9zb3VyY2VbaV0sIF9tYXhEZXB0aCkpO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2UgaWYgKGlzQmxhbmtPYmplY3QoX3NvdXJjZSkpIHtcclxuXHRcdFx0Ly8gY3JlYXRlTWFwKCkgZmFzdCBwYXRoIC0tLSBTYWZlIHRvIGF2b2lkIGhhc093blByb3BlcnR5IGNoZWNrIGJlY2F1c2UgcHJvdG90eXBlIGNoYWluIGlzIGVtcHR5XHJcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIF9zb3VyY2UpIHtcclxuXHRcdFx0XHRfZGVzdGluYXRpb25ba2V5XSA9IGNvcHlFbGVtZW50KF9zb3VyY2Vba2V5XSwgX21heERlcHRoKTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIGlmIChfc291cmNlICYmIHR5cGVvZiBfc291cmNlLmhhc093blByb3BlcnR5ID09PSAnZnVuY3Rpb24nKSB7XHJcblx0XHRcdC8vIFNsb3cgcGF0aCwgd2hpY2ggbXVzdCByZWx5IG9uIGhhc093blByb3BlcnR5XHJcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIF9zb3VyY2UpIHtcclxuXHRcdFx0XHRpZiAoX3NvdXJjZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcblx0XHRcdFx0XHRfZGVzdGluYXRpb25ba2V5XSA9IGNvcHlFbGVtZW50KF9zb3VyY2Vba2V5XSwgX21heERlcHRoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdC8vIFNsb3dlc3QgcGF0aCAtLS0gaGFzT3duUHJvcGVydHkgY2FuJ3QgYmUgY2FsbGVkIGFzIGEgbWV0aG9kXHJcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIF9zb3VyY2UpIHtcclxuXHRcdFx0XHRpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9zb3VyY2UsIGtleSkpIHtcclxuXHRcdFx0XHRcdF9kZXN0aW5hdGlvbltrZXldID0gY29weUVsZW1lbnQoX3NvdXJjZVtrZXldLCBfbWF4RGVwdGgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBfZGVzdGluYXRpb247XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBjb3B5RWxlbWVudCAoX3NvdXJjZSwgX21heERlcHRoID0gNSkge1xyXG5cdFx0Ly8gU2ltcGxlIHZhbHVlc1xyXG5cdFx0aWYgKCFpc09iamVjdChfc291cmNlKSlcclxuXHRcdFx0cmV0dXJuIF9zb3VyY2U7XHJcblxyXG5cdFx0Ly8gQWxyZWFkeSBjb3BpZWQgdmFsdWVzXHJcblx0XHQvLyBAdHMtaWdub3JlXHJcblx0XHRjb25zdCBpbmRleCA9IHN0YWNrU291cmNlLmluZGV4T2YoX3NvdXJjZSk7XHJcblxyXG5cdFx0aWYgKGluZGV4ICE9PSAtMSlcclxuXHRcdFx0cmV0dXJuIHN0YWNrRGVzdFtpbmRleF07XHJcblxyXG5cdFx0aWYgKGlzV2luZG93KF9zb3VyY2UpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBjb3B5ISBNYWtpbmcgY29waWVzIG9mIFdpbmRvdyBpbnN0YW5jZXMgaXMgbm90IHN1cHBvcnRlZC4nKTtcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgbmVlZHNSZWN1cnNlID0gZmFsc2U7XHJcblx0XHRsZXQgX2Rlc3RpbmF0aW9uID0gY29weVR5cGUoX3NvdXJjZSk7XHJcblxyXG5cdFx0aWYgKF9kZXN0aW5hdGlvbiA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdF9kZXN0aW5hdGlvbiA9IGlzQXJyYXkoX3NvdXJjZSkgPyBbXSA6IE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKF9zb3VyY2UpKTtcclxuXHRcdFx0bmVlZHNSZWN1cnNlID0gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBAdHMtaWdub3JlXHJcblx0XHRzdGFja1NvdXJjZS5wdXNoKF9zb3VyY2UpO1xyXG5cdFx0Ly8gQHRzLWlnbm9yZVxyXG5cdFx0c3RhY2tEZXN0LnB1c2goX2Rlc3RpbmF0aW9uKTtcclxuXHJcblx0XHRyZXR1cm4gbmVlZHNSZWN1cnNlXHJcblx0XHRcdD8gY29weVJlY3Vyc2UoX3NvdXJjZSwgX2Rlc3RpbmF0aW9uLCBfbWF4RGVwdGgpXHJcblx0XHRcdDogX2Rlc3RpbmF0aW9uO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gY29weVR5cGUgKF9zb3VyY2UpIHtcclxuXHRcdHN3aXRjaCAodG9TdHJpbmcuY2FsbChfc291cmNlKSkge1xyXG5cdFx0XHRjYXNlICdbb2JqZWN0IEludDhBcnJheV0nOlxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IEludDE2QXJyYXldJzpcclxuXHRcdFx0Y2FzZSAnW29iamVjdCBJbnQzMkFycmF5XSc6XHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgRmxvYXQzMkFycmF5XSc6XHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgRmxvYXQ2NEFycmF5XSc6XHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgVWludDhBcnJheV0nOlxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSc6XHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgVWludDE2QXJyYXldJzpcclxuXHRcdFx0Y2FzZSAnW29iamVjdCBVaW50MzJBcnJheV0nOlxyXG5cdFx0XHRcdHJldHVybiBuZXcgX3NvdXJjZS5jb25zdHJ1Y3Rvcihjb3B5RWxlbWVudChfc291cmNlLmJ1ZmZlciksIF9zb3VyY2UuYnl0ZU9mZnNldCwgX3NvdXJjZS5sZW5ndGgpO1xyXG5cclxuXHRcdFx0Y2FzZSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nOlxyXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFMTBcclxuXHRcdFx0XHRpZiAoIV9zb3VyY2Uuc2xpY2UpIHtcclxuXHRcdFx0XHRcdC8vIElmIHdlJ3JlIGluIHRoaXMgY2FzZSB3ZSBrbm93IHRoZSBlbnZpcm9ubWVudCBzdXBwb3J0cyBBcnJheUJ1ZmZlclxyXG5cdFx0XHRcdFx0LyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYgKi9cclxuXHRcdFx0XHRcdGNvbnN0IGNvcGllZCA9IG5ldyBBcnJheUJ1ZmZlcihfc291cmNlLmJ5dGVMZW5ndGgpO1xyXG5cdFx0XHRcdFx0bmV3IFVpbnQ4QXJyYXkoY29waWVkKS5zZXQobmV3IFVpbnQ4QXJyYXkoX3NvdXJjZSkpO1xyXG5cdFx0XHRcdFx0LyogZXNsaW50LWVuYWJsZSAqL1xyXG5cdFx0XHRcdFx0cmV0dXJuIGNvcGllZDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIF9zb3VyY2Uuc2xpY2UoMCk7XHJcblxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IEJvb2xlYW5dJzpcclxuXHRcdFx0Y2FzZSAnW29iamVjdCBOdW1iZXJdJzpcclxuXHRcdFx0Y2FzZSAnW29iamVjdCBTdHJpbmddJzpcclxuXHRcdFx0Y2FzZSAnW29iamVjdCBEYXRlXSc6XHJcblx0XHRcdFx0cmV0dXJuIG5ldyBfc291cmNlLmNvbnN0cnVjdG9yKF9zb3VyY2UudmFsdWVPZigpKTtcclxuXHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgUmVnRXhwXSc6XHJcblx0XHRcdFx0Y29uc3QgcmUgPSBuZXcgUmVnRXhwKF9zb3VyY2UuX3NvdXJjZSwgX3NvdXJjZS50b1N0cmluZygpLm1hdGNoKC9bXi9dKiQvKVswXSk7XHJcblxyXG5cdFx0XHRcdHJlLmxhc3RJbmRleCA9IF9zb3VyY2UubGFzdEluZGV4O1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gcmU7XHJcblxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IEJsb2JdJzpcclxuXHRcdFx0XHRyZXR1cm4gbmV3IF9zb3VyY2UuY29uc3RydWN0b3IoW19zb3VyY2VdLCB7dHlwZTogX3NvdXJjZS50eXBlfSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGlzRnVuY3Rpb24oX3NvdXJjZS5jbG9uZU5vZGUpKSB7XHJcblx0XHRcdHJldHVybiBfc291cmNlLmNsb25lTm9kZSh0cnVlKTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcblxyXG5pbXBvcnQgeyBDb2x1bW5JbmZvIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEZpZWxkTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgY29weSwgZXF1YWxzIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBBcGlGb3JtYXR0ZXIge1xyXG5cdE1PTUVOVF9JTlZBTElEID0gJ0ludmFsaWQgZGF0ZSc7XHJcblx0U0VSVkVSX0RBVEVUSU1FX0ZPUk1BVCA9ICdZWVlZLU1NLUREW1RdSEg6bW06c3NaJztcclxuXHRTRVJWRVJfVElNRV9GT1JNQVQgPSAnSEg6bW06c3MnO1xyXG5cdFNFUlZFUl9EQVRFX0ZPUk1BVCA9ICdZWVlZLU1NLUREJztcclxuXHJcblx0Y29uc3RydWN0b3IgKCkge1xyXG5cclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlc3BvbnNlIChmaWVsZHM6IEZpZWxkTWFwLCBjb2x1bW5zOiBDb2x1bW5JbmZvW10pOiBGaWVsZE1hcCB7XHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKVxyXG5cdFx0XHRmaWVsZHNbY29sdW1uLnBhdGhdID0gdGhpcy5mb3JtYXRSZXNwb25zZVZhbHVlKGNvbHVtbi5hcGlDb2x1bW4udHlwZSwgZmllbGRzW2NvbHVtbi5wYXRoXSk7XHJcblxyXG5cdFx0cmV0dXJuIGZpZWxkcztcclxuXHR9XHJcblxyXG5cdGV4cGFuZFJlc3BvbnNlIChjdXJyZW50OiBGaWVsZE1hcCwgZXhwYW5kZWQ6IEZpZWxkTWFwLCBjb2x1bW5zOiBDb2x1bW5JbmZvW10pOiBGaWVsZE1hcCB7XHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKVxyXG5cdFx0XHRjdXJyZW50W2NvbHVtbi5wYXRoXSA9IHRoaXMuZm9ybWF0UmVzcG9uc2VWYWx1ZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUsIGV4cGFuZGVkW2NvbHVtbi5wYXRoXSk7XHJcblxyXG5cdFx0cmV0dXJuIGN1cnJlbnQ7XHJcblx0fVxyXG5cclxuXHRmb3JtYXRSZXF1ZXN0IChpbml0aWFsOiBGaWVsZE1hcCwgbW9kaWZpZWQ6IEZpZWxkTWFwLCBjb2x1bW5zOiBDb2x1bW5JbmZvW10pOiBGaWVsZE1hcCB7XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uLmlkO1xyXG5cdFx0XHRjb25zdCBhcGlDb2x1bW4gPSBjb2x1bW4uYXBpQ29sdW1uO1xyXG5cdFx0XHRjb25zdCBjb2x1bW5UeXBlID0gYXBpQ29sdW1uLnR5cGU7XHJcblxyXG5cdFx0XHRpZiAoYXBpQ29sdW1uLnJlYWRPbmx5KVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0aWYgKCF0aGlzLmNvbXBhcmVGaWVsZHMoY29sdW1uVHlwZSwgaW5pdGlhbFtjb2x1bW5JZF0sIG1vZGlmaWVkW2NvbHVtbklkXSkpXHJcblx0XHRcdFx0cmVzdWx0W2NvbHVtbklkXSA9IHRoaXMuZm9ybWF0UmVxdWVzdFZhbHVlKGNvbHVtblR5cGUsIG1vZGlmaWVkW2NvbHVtbklkXSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlcXVlc3RMb2NhbCAoZmllbGRzOiBGaWVsZE1hcCwgY29sdW1uczogQ29sdW1uSW5mb1tdKTogRmllbGRNYXAge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcclxuXHRcdFx0Y29uc3QgYXBpQ29sdW1uID0gY29sdW1uLmFwaUNvbHVtbjtcclxuXHJcblx0XHRcdGlmIChhcGlDb2x1bW4ucmVhZE9ubHkpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRyZXN1bHRbY29sdW1uSWRdID0gdGhpcy5mb3JtYXRSZXF1ZXN0VmFsdWUoYXBpQ29sdW1uLnR5cGUsIGZpZWxkc1tjb2x1bW5JZF0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRoYXNDaGFuZ2VzIChpbml0aWFsOiBGaWVsZE1hcCwgbW9kaWZpZWQ6IEZpZWxkTWFwLCBjb2x1bW5zOiBDb2x1bW5JbmZvW10pOiBib29sZWFuIHtcclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XHJcblx0XHRcdGNvbnN0IGFwaUNvbHVtbiA9IGNvbHVtbi5hcGlDb2x1bW47XHJcblxyXG5cdFx0XHRpZiAoYXBpQ29sdW1uLnJlYWRPbmx5KVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0aWYgKCF0aGlzLmNvbXBhcmVGaWVsZHMoYXBpQ29sdW1uLnR5cGUsIGluaXRpYWxbY29sdW1uSWRdLCBtb2RpZmllZFtjb2x1bW5JZF0pKVxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdGdldENoYW5nZXMgKGluaXRpYWw6IEZpZWxkTWFwLCBtb2RpZmllZDogRmllbGRNYXAsIGNvbHVtbnM6IENvbHVtbkluZm9bXSk6IEZpZWxkTWFwIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogb2JqZWN0W10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uLmlkO1xyXG5cdFx0XHRjb25zdCBhcGlDb2x1bW4gPSBjb2x1bW4uYXBpQ29sdW1uO1xyXG5cclxuXHRcdFx0aWYgKGFwaUNvbHVtbi5yZWFkT25seSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGlmICghdGhpcy5jb21wYXJlRmllbGRzKGFwaUNvbHVtbi50eXBlLCBpbml0aWFsW2NvbHVtbklkXSwgbW9kaWZpZWRbY29sdW1uSWRdKSkge1xyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKFxyXG5cdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRvbGRWYWx1ZTogaW5pdGlhbFtjb2x1bW5JZF0sXHJcblx0XHRcdFx0XHRcdG5ld1ZhbHVlOiBtb2RpZmllZFtjb2x1bW5JZF0sXHJcblx0XHRcdFx0XHRcdGNvbHVtbjogY29sdW1uLmFwaUNvbHVtblxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Y29weUZpZWxkcyAoc291cmNlOiBGaWVsZE1hcCwgZGVzdGluYXRpb246IEZpZWxkTWFwLCBjb2x1bW5zOiBDb2x1bW5JbmZvW10pOiBGaWVsZE1hcCB7XHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtblBhdGggPSBjb2x1bW4ucGF0aDtcclxuXHJcblx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtblBhdGhdID0gdGhpcy5jbG9uZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUsIHNvdXJjZVtjb2x1bW5QYXRoXSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGRlc3RpbmF0aW9uO1xyXG5cdH1cclxuXHJcblx0c2hhbGxvd0NvcHlGaWVsZHMgKFxyXG5cdFx0c2hhbGxvd1NvdXJjZTogRmllbGRNYXAsXHJcblx0XHRkZWVwU291cmNlOiBGaWVsZE1hcCxcclxuXHRcdGRlc3RpbmF0aW9uOiBGaWVsZE1hcCxcclxuXHRcdGNvbHVtbnM6IENvbHVtbkluZm9bXVxyXG5cdCk6IEZpZWxkTWFwIHtcclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uUGF0aCA9IGNvbHVtbi5wYXRoO1xyXG5cclxuXHRcdFx0ZGVzdGluYXRpb25bY29sdW1uUGF0aF0gPSBzaGFsbG93U291cmNlW2NvbHVtblBhdGhdICE9PSB1bmRlZmluZWQgP1xyXG5cdFx0XHRcdHNoYWxsb3dTb3VyY2VbY29sdW1uUGF0aF0gOlxyXG5cdFx0XHRcdHRoaXMuY2xvbmUoY29sdW1uLmFwaUNvbHVtbi50eXBlLCBkZWVwU291cmNlW2NvbHVtblBhdGhdKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZGVzdGluYXRpb247XHJcblx0fVxyXG5cclxuXHRzZXREZWZhdWx0VmFsdWVzIChkZXN0aW5hdGlvbjogRmllbGRNYXAsIGNvbHVtbnM6IENvbHVtbkluZm9bXSk6IEZpZWxkTWFwIHtcclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpXHJcblx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtbi5pZF0gPSB0aGlzLmdldERlZmF1bHRWYWx1ZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUpO1xyXG5cclxuXHRcdHJldHVybiBkZXN0aW5hdGlvbjtcclxuXHR9XHJcblxyXG5cdGNvbXBhcmVGaWVsZHM8VD4gKGNvbHVtblR5cGU6IHN0cmluZywgZmlyc3Q6IFQsIHNlY29uZDogVCk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKGZpcnN0ID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBzZWNvbmQgPT09IHVuZGVmaW5lZDtcclxuXHJcblx0XHRpZiAoc2Vjb25kID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdGNhc2UgJ3RpbWUnOlxyXG5cdFx0XHRjYXNlICdkYXRldGltZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29tcGFyZU1vbWVudE9iamVjdHMoZmlyc3QsIHNlY29uZCk7XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb21wYXJlRHVyYXRpb25zKGZpcnN0LCBzZWNvbmQpO1xyXG5cdFx0XHRjYXNlICdpZCc6IC8vIGlkIHR5cGVzXHJcblx0XHRcdGNhc2UgJ2l0ZW0nOlxyXG5cdFx0XHRjYXNlICdsaW5rJzpcclxuXHRcdFx0Y2FzZSAnY2hpbGQnOlxyXG5cdFx0XHRjYXNlICdzaWJsaW5nJzpcclxuXHRcdFx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xyXG5cdFx0XHRcdHJldHVybiBmaXJzdCA9PSBzZWNvbmQ7IC8vIHVzZSBub24tc3RyaWN0IGNvbXBhcmlzb25cclxuXHRcdFx0Y2FzZSAnY3VycmVudCc6XHJcblx0XHRcdGNhc2UgJ2RpbWVuc2lvbic6XHJcblx0XHRcdGNhc2UgJ2Rpc3RhbmNlJzpcclxuXHRcdFx0Y2FzZSAnZG91YmxlJzogLy8gZmxvYXRpbmcgcG9pbnQgdHlwZXNcclxuXHRcdFx0Y2FzZSAnZmlsZXNpemUnOlxyXG5cdFx0XHRjYXNlICdudW1iZXInOlxyXG5cdFx0XHRjYXNlICdwb3dlcic6XHJcblx0XHRcdGNhc2UgJ3F1YW50aXR5JzpcclxuXHRcdFx0Y2FzZSAndm9sdW1lJzpcclxuXHRcdFx0Y2FzZSAnd2VpZ2h0JzpcclxuXHRcdFx0Y2FzZSAnY29vcmRpbmF0ZSc6XHJcblx0XHRcdGNhc2UgJ3ByaWNlJzpcclxuXHRcdFx0Y2FzZSAncGVyY2VudGFnZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29tcGFyZUZsb2F0cyhmaXJzdCwgc2Vjb25kKTtcclxuXHRcdFx0Y2FzZSAnaW50JzogLy8gaW50ZWdlciB0eXBlc1xyXG5cdFx0XHRjYXNlICdib29sJzogLy8gYm9vbGVhbiB0eXBlc1xyXG5cdFx0XHRjYXNlICdlbnVtJzpcclxuXHRcdFx0Y2FzZSAnZW1haWwnOiAvLyBzdHJpbmcgdHlwZXNcclxuXHRcdFx0Y2FzZSAncGhvbmUnOlxyXG5cdFx0XHRjYXNlICd1cmwnOlxyXG5cdFx0XHRjYXNlICd0ZXh0JzpcclxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxyXG5cdFx0XHRjYXNlICdjb2xvcic6XHJcblx0XHRcdFx0cmV0dXJuIGZpcnN0ID09PSBzZWNvbmQ7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGVxdWFscyhmaXJzdCwgc2Vjb25kKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGNvbXBhcmVGbG9hdHMgKGEsIGIpIHtcclxuXHRcdGNvbnN0IGFic0EgPSBNYXRoLmFicyhhKTtcclxuXHRcdGNvbnN0IGFic0IgPSBNYXRoLmFicyhiKTtcclxuXHRcdGNvbnN0IGRpZmYgPSBNYXRoLmFicyhhIC0gYik7XHJcblxyXG5cdFx0Y29uc3QgRVBTSUxPTiA9IDEuMTllLTA3O1xyXG5cclxuXHRcdC8vIHNob3J0Y3V0LCBoYW5kbGVzIGluZmluaXRpZXNcclxuXHRcdGlmIChhID09PSBiKSB7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fSBlbHNlIGlmIChhID09PSAwIHx8IGIgPT09IDAgfHwgZGlmZiA8IE51bWJlci5NSU5fVkFMVUUpIHtcclxuXHRcdFx0Ly8gYSBvciBiIGlzIHplcm8gb3IgYm90aCBhcmUgZXh0cmVtZWx5IGNsb3NlIHRvIGl0XHJcblx0XHRcdC8vIHJlbGF0aXZlIGVycm9yIGlzIGxlc3MgbWVhbmluZ2Z1bCBoZXJlXHJcblx0XHRcdHJldHVybiBkaWZmIDwgKEVQU0lMT04gKiBOdW1iZXIuTUlOX1ZBTFVFKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdC8vIHVzZSByZWxhdGl2ZSBlcnJvclxyXG5cdFx0XHRyZXR1cm4gZGlmZiAvIE1hdGgubWluKChhYnNBICsgYWJzQiksIE51bWJlci5NQVhfVkFMVUUpIDwgRVBTSUxPTjtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGNvbXBhcmVNb21lbnRPYmplY3RzIChmaXJzdCwgc2Vjb25kKTogYm9vbGVhbiB7XHJcblx0XHRpZiAoIWZpcnN0LmlzVmFsaWQoKSlcclxuXHRcdFx0cmV0dXJuICFzZWNvbmQuaXNWYWxpZCgpO1xyXG5cclxuXHRcdGlmICghc2Vjb25kLmlzVmFsaWQoKSlcclxuXHRcdFx0cmV0dXJuIGZhbHNlOyAvLyBmaXJzdCBJUyB2YWxpZFxyXG5cclxuXHRcdHJldHVybiBmaXJzdC5pc1NhbWUoc2Vjb25kKTtcclxuXHR9XHJcblxyXG5cdGNvbXBhcmVEdXJhdGlvbnMgKGZpcnN0LCBzZWNvbmQpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiBmaXJzdC5hc01pbGxpc2Vjb25kcygpID09PSBzZWNvbmQuYXNNaWxsaXNlY29uZHMoKTtcclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlc3BvbnNlVmFsdWUgKGNvbHVtblR5cGUsIHZhbHVlKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXNwb25zZURhdGUodmFsdWUpO1xyXG5cdFx0XHRjYXNlICdjb2xvcic6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVzcG9uc2VDb2xvcih2YWx1ZSk7XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXNwb25zZUR1cmF0aW9uKHZhbHVlKTtcclxuXHRcdFx0Y2FzZSAnanNvbic6XHJcblx0XHRcdFx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUgIT09ICcnID8gSlNPTi5wYXJzZSh2YWx1ZSkgOiB2YWx1ZTtcclxuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcclxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IDAgPyBudWxsIDogdmFsdWU7XHJcblx0XHRcdGNhc2UgJ2ZpbGVzaXplJzpcclxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgLyAxMDAwMDAwO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlcXVlc3RWYWx1ZSAoY29sdW1uVHlwZSwgdmFsdWUpIHtcclxuXHRcdHN3aXRjaCAoY29sdW1uVHlwZSkge1xyXG5cdFx0XHRjYXNlICdkYXRldGltZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVxdWVzdERhdGVUaW1lKHZhbHVlKTtcclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVxdWVzdERhdGUodmFsdWUpO1xyXG5cdFx0XHRjYXNlICdjb2xvcic6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVxdWVzdENvbG9yKHZhbHVlKTtcclxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlcXVlc3REdXJhdGlvbih2YWx1ZSk7XHJcblx0XHRcdGNhc2UgJ251bWJlcic6XHJcblx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSAwID8gbnVsbCA6IHZhbHVlO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlc3BvbnNlRGF0ZSAodmFsdWUpIHtcclxuXHRcdHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IG1vbWVudC5pbnZhbGlkKCkgOiBtb21lbnQodmFsdWUpO1xyXG5cdH1cclxuXHJcblx0Zm9ybWF0UmVzcG9uc2VEdXJhdGlvbiAodmFsdWUpIHtcclxuXHRcdHJldHVybiBtb21lbnQuZHVyYXRpb24odmFsdWUgPT09IG51bGwgPyAwIDogdmFsdWUsICdzZWNvbmRzJyk7XHJcblx0fVxyXG5cclxuXHRmb3JtYXRSZXNwb25zZUNvbG9yICh2YWx1ZSkge1xyXG5cdFx0cmV0dXJuIHZhbHVlLmNoYXJBdCgwKSA9PT0gJyMnID8gdmFsdWUgOiAnIycgKyB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlcXVlc3REYXRlVGltZSAodmFsdWUpIHtcclxuXHRcdHJldHVybiB2YWx1ZS5pc1ZhbGlkKCkgPyB2YWx1ZS5mb3JtYXQodGhpcy5TRVJWRVJfREFURVRJTUVfRk9STUFUKSA6IG51bGw7XHJcblx0fVxyXG5cclxuXHRmb3JtYXRSZXF1ZXN0RGF0ZSAodmFsdWUpIHtcclxuXHRcdHJldHVybiB2YWx1ZS5pc1ZhbGlkKCkgPyB2YWx1ZS5mb3JtYXQodGhpcy5TRVJWRVJfREFURV9GT1JNQVQpIDogbnVsbDtcclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlcXVlc3REdXJhdGlvbiAodmFsdWUpIHtcclxuXHRcdHJldHVybiB2YWx1ZS5hc1NlY29uZHMoKTtcclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlcXVlc3RDb2xvciAodmFsdWUpIHtcclxuXHRcdHJldHVybiB2YWx1ZS5jaGFyQXQoMCkgPT09ICcjJyA/IHZhbHVlLnN1YnN0cmluZygxKSA6IHZhbHVlO1xyXG5cdH1cclxuXHJcblx0Z2V0RGVmYXVsdFZhbHVlIChjb2x1bW5UeXBlKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnaW50JzpcclxuXHRcdFx0Y2FzZSAnZG91YmxlJzpcclxuXHRcdFx0Y2FzZSAncGVyY2VudGFnZSc6XHJcblx0XHRcdGNhc2UgJ3ByaWNlJzpcclxuXHRcdFx0XHRyZXR1cm4gMDtcclxuXHRcdFx0Y2FzZSAnaXRlbSc6XHJcblx0XHRcdGNhc2UgJ2xpbmsnOlxyXG5cdFx0XHRjYXNlICdjaGlsZCc6XHJcblx0XHRcdGNhc2UgJ3NpYmxpbmcnOlxyXG5cdFx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0XHRjYXNlICdib29sJzpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdGNhc2UgJ2VudW0nOlxyXG5cdFx0XHRcdHJldHVybiAnMCc7XHJcblx0XHRcdGNhc2UgJ2RhdGUnOlxyXG5cdFx0XHRjYXNlICdkYXRldGltZSc6XHJcblx0XHRcdGNhc2UgJ3RpbWUnOlxyXG5cdFx0XHRcdHJldHVybiBtb21lbnQuaW52YWxpZCgpO1xyXG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XHJcblx0XHRcdFx0cmV0dXJuIG1vbWVudC5kdXJhdGlvbigpO1xyXG5cdFx0XHRjYXNlICd0ZXh0JzpcclxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxyXG5cdFx0XHRcdHJldHVybiAnJztcclxuXHRcdFx0Y2FzZSAnY29sb3InOlxyXG5cdFx0XHRcdHJldHVybiAnIzAwMDAwMCc7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuICcnO1xyXG5cdFx0XHQvLyBcdFx0XHRcdFx0ZW1haWxcclxuXHRcdFx0Ly8gXHRcdFx0XHRcdHVybFxyXG5cdFx0XHQvLyBcdFx0XHRcdFx0aHRtbFxyXG5cdFx0XHQvLyBcdFx0XHRcdFx0anNvblxyXG5cdFx0XHQvLyBcdFx0XHRcdFx0ZGF0YVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aXNEZWZhdWx0VmFsdWUgKGNvbHVtblR5cGUsIHZhbHVlKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5jb21wYXJlRmllbGRzKGNvbHVtblR5cGUsIHZhbHVlLCB0aGlzLmdldERlZmF1bHRWYWx1ZShjb2x1bW5UeXBlKSk7XHJcblx0fVxyXG5cclxuXHRjbG9uZSAoY29sdW1uVHlwZSwgdmFsdWUpIHtcclxuXHRcdHN3aXRjaCAoY29sdW1uVHlwZSkge1xyXG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY2xvbmVEdXJhdGlvbih2YWx1ZSk7XHJcblx0XHRcdGNhc2UgJ2RhdGUnOlxyXG5cdFx0XHRjYXNlICdkYXRldGltZSc6XHJcblx0XHRcdFx0cmV0dXJuIG1vbWVudCh2YWx1ZSk7XHJcblx0XHRcdGNhc2UgJ2pzb24nOlxyXG5cdFx0XHRcdHJldHVybiBjb3B5KHZhbHVlKTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRnZXRDbG9uZUZ1bmN0aW9uIChjb2x1bW5UeXBlKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNsb25lRHVyYXRpb247XHJcblx0XHRcdGNhc2UgJ2RhdGUnOlxyXG5cdFx0XHRjYXNlICdkYXRldGltZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY2xvbmVEYXRlO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmlkZW50aXR5O1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Y2xvbmVEdXJhdGlvbiAoZHVyYXRpb24pIHtcclxuXHRcdHJldHVybiBtb21lbnQuZHVyYXRpb24oZHVyYXRpb24pO1xyXG5cdH1cclxuXHJcblx0Y2xvbmVEYXRlIChkYXRlKSB7XHJcblx0XHRyZXR1cm4gZGF0ZS5jbG9uZSgpO1xyXG5cdH1cclxuXHJcblx0aWRlbnRpdHkgKGlucHV0KSB7XHJcblx0XHRyZXR1cm4gaW5wdXQ7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEFwaVJlc3BvbnNlUHJvY2Vzc29yIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7XHJcblx0QXBpUmVxdWVzdENvbHVtbk1hcCwgQXBpUmVxdWVzdEl0ZW1NYXAsIEFwaVJlcXVlc3RMaW1pdCwgSXRlbUlkLCBJdGVtVHlwZSwgUHJvbWlzZUludGVyZmFjZVxyXG59IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBBcGlSZXF1ZXN0U2VydmljZSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBleHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgYXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5OiBBcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnlcclxuXHQpIHtcclxuXHJcblx0fVxyXG5cclxuXHR0ZW1wbGF0ZSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBwYXJhbXM6IGFueSk6IFByb21pc2VJbnRlcmZhY2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcclxuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UudGVtcGxhdGUoaXRlbVR5cGUsIHBhcmFtcykpO1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkLCB2YWx1ZXM6IGFueSwgcGFyZW50VHlwZT86IEl0ZW1UeXBlLCBwYXJlbnRJZD86IEl0ZW1JZCk6IFByb21pc2VJbnRlcmZhY2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcclxuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UuY3JlYXRlKGl0ZW1UeXBlLCBpdGVtSWQsIHZhbHVlcywgcGFyZW50VHlwZSwgcGFyZW50SWQpKTtcclxuXHR9XHJcblxyXG5cdGRlbGV0ZSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWRzOiBJdGVtSWRbXSk6IFByb21pc2VJbnRlcmZhY2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcclxuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UuZGVsZXRlKGl0ZW1UeXBlLCBpdGVtSWRzKSk7XHJcblx0fVxyXG5cclxuXHR1cGRhdGVJdGVtcyAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtczogQXBpUmVxdWVzdEl0ZW1NYXAsIGNvbHVtbnM6IGFueSk6IFByb21pc2VJbnRlcmZhY2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcclxuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UudXBkYXRlSXRlbXMoaXRlbVR5cGUsIGl0ZW1zLCBjb2x1bW5zKSk7XHJcblx0fVxyXG5cclxuXHRyZXF1ZXN0U2tlbGV0b24gKHBhcmFtczogYW55LCByZXF1ZXN0Q2FuY2VsZXI/OiBQcm9taXNlSW50ZXJmYWNlPGFueT4pOiBQcm9taXNlSW50ZXJmYWNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RTa2VsZXRvbihwYXJhbXMsIHJlcXVlc3RDYW5jZWxlcikpO1xyXG5cdH1cclxuXHJcblx0bW92ZUl0ZW1zIChwYXJlbnRUeXBlOiBJdGVtVHlwZSwgcGFyZW50SWQ6IEl0ZW1JZCwgaXRlbXM6IHtbaXRlbVR5cGU6IHN0cmluZ106IEl0ZW1JZFtdfSk6IFByb21pc2VJbnRlcmZhY2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcclxuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UubW92ZUl0ZW1zKHBhcmVudFR5cGUsIHBhcmVudElkLCBpdGVtcykpO1xyXG5cdH1cclxuXHJcblx0Y29sdW1ucyAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBjb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1uTWFwLCBwYXJhbXM/OiBhbnkpOiBQcm9taXNlSW50ZXJmYWNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLmNvbHVtbnMoaXRlbVR5cGUsIGNvbHVtbnMsIHBhcmFtcykpO1xyXG5cdH1cclxuXHJcblx0cXVlcnkgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcXVlcnk6IGFueSwgY29sdW1uczogQXBpUmVxdWVzdENvbHVtbk1hcCwgbGltaXQ/OiBBcGlSZXF1ZXN0TGltaXQpOiBQcm9taXNlSW50ZXJmYWNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KGl0ZW1UeXBlLCBxdWVyeSwgY29sdW1ucywgbGltaXQpKTtcclxuXHR9XHJcblxyXG5cdHByb2Nlc3NSZXNwb25zZSAocmVxdWVzdCk6IFByb21pc2VJbnRlcmZhY2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcclxuXHRcdHJldHVybiByZXF1ZXN0LnRoZW4ocmVzcG9uc2UgPT4gdGhpcy5hcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnkuY29uc3RydWN0KHJlc3BvbnNlKSk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEFwaUZvcm1hdHRlciB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBJdGVtVHlwZU1hcCwgUmVzcG9uc2VDb2x1bW4gfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQXBpUmVzcG9uc2VQcm9jZXNzb3Ige1xyXG5cdGNvbHVtbnM6IEl0ZW1UeXBlTWFwO1xyXG5cdGl0ZW1zOiBJdGVtVHlwZU1hcDtcclxuXHRsaW5rczogSXRlbVR5cGVNYXA7XHJcblx0Y2FjaGVhYmxlOiBib29sZWFuO1xyXG5cdG1hcDogYW55O1xyXG5cclxuXHRjb2x1bW5JbmRleE1hcDogYW55ID0ge307XHJcblx0Y29sdW1uTWFwOiBhbnkgPSB7fTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHVibGljIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxyXG5cdFx0cHVibGljIHJlc3BvbnNlOiBhbnlcclxuXHQpIHtcclxuXHRcdHRoaXMuY29sdW1ucyA9IHJlc3BvbnNlLmNvbHVtbnM7XHJcblx0XHR0aGlzLml0ZW1zID0gcmVzcG9uc2UuaXRlbXM7XHJcblx0XHR0aGlzLmxpbmtzID0gcmVzcG9uc2UubGlua3M7XHJcblx0XHR0aGlzLmNhY2hlYWJsZSA9IHJlc3BvbnNlLmNhY2hlYWJsZTtcclxuXHRcdHRoaXMubWFwID0gcmVzcG9uc2UubWFwO1xyXG5cclxuXHRcdHRoaXMuY3JlYXRlQ29sdW1uTWFwcygpO1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlQ29sdW1uTWFwcyAoKSB7XHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtblR5cGUgaW4gdGhpcy5jb2x1bW5zKSB7XHJcblx0XHRcdHRoaXMuY29sdW1uSW5kZXhNYXBbY29sdW1uVHlwZV0gPSB7fTtcclxuXHRcdFx0dGhpcy5jb2x1bW5NYXBbY29sdW1uVHlwZV0gPSB7fTtcclxuXHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zW2NvbHVtblR5cGVdLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0Y29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zW2NvbHVtblR5cGVdW2ldO1xyXG5cdFx0XHRcdHRoaXMuY29sdW1uSW5kZXhNYXBbY29sdW1uVHlwZV1bY29sdW1uLmlkXSA9IGk7XHJcblx0XHRcdFx0dGhpcy5jb2x1bW5NYXBbY29sdW1uVHlwZV1bY29sdW1uLmlkXSA9IGNvbHVtbjtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZmV0Y2hWYWx1ZSAoaXRlbVR5cGUsIGl0ZW1JZCwgY29sdW1uSWQpIHtcclxuXHRcdGlmICh0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuaXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF0uZGF0YVt0aGlzLmNvbHVtbkluZGV4TWFwW2l0ZW1UeXBlXVtjb2x1bW5JZF1dO1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hEZXJpdmVkT2JqZWN0IChpdGVtVHlwZSwgaXRlbUlkLCByb290Q29sdW1ucykge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2Ygcm9vdENvbHVtbnMpIHtcclxuXHRcdFx0dGhpcy5mZXRjaERlcml2ZWRWYWx1ZXMoXHJcblx0XHRcdFx0dGhpcy5mZXRjaFZhbHVlKGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtbi5pZCksXHJcblx0XHRcdFx0Y29sdW1uLFxyXG5cdFx0XHRcdHJlc3VsdFxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRmZXRjaERlcml2ZWRWYWx1ZXMgKHZhbHVlLCBjb2x1bW4sIGRlc3RpbmF0aW9uKSB7XHJcblx0XHRmb3IgKGNvbnN0IGNoaWxkQ29sdW1uIG9mIGNvbHVtbi5jaGlsZHJlbikge1xyXG5cdFx0XHRsZXQgY2hpbGRWYWx1ZTtcclxuXHJcblx0XHRcdGlmICh2YWx1ZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdGNoaWxkVmFsdWUgPSBudWxsO1xyXG5cdFx0XHRcdGRlc3RpbmF0aW9uW2NoaWxkQ29sdW1uLnBhdGhdID0gdGhpcy5hcGlGb3JtYXR0ZXIuZ2V0RGVmYXVsdFZhbHVlKGNoaWxkQ29sdW1uLmFwaUNvbHVtbi50eXBlKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRjaGlsZFZhbHVlID0gdGhpcy5mZXRjaFZhbHVlKGNvbHVtbi5pdGVtVHlwZSwgdmFsdWUsIGNoaWxkQ29sdW1uLmlkKTtcclxuXHRcdFx0XHRkZXN0aW5hdGlvbltjaGlsZENvbHVtbi5wYXRoXSA9IGNoaWxkVmFsdWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChjaGlsZENvbHVtbi5pc0xlYWYpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHR0aGlzLmZldGNoRGVyaXZlZFZhbHVlcyhjaGlsZFZhbHVlLCBjaGlsZENvbHVtbiwgZGVzdGluYXRpb24pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZmV0Y2hPYmplY3QgKGl0ZW1UeXBlLCBpdGVtSWQsIGluY2x1ZGVMaW5rczogYm9vbGVhbiA9IGZhbHNlKTogYW55IHtcclxuXHRcdGlmICh0aGlzLml0ZW1zW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRcdGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdO1xyXG5cclxuXHRcdGlmIChpdGVtID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG5cdFx0Y29uc3QgZGF0YSA9IHRoaXMuaXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF0uZGF0YTtcclxuXHRcdGNvbnN0IHJlc3VsdDogYW55ID0ge307XHJcblxyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdHJlc3VsdFt0aGlzLmNvbHVtbnNbaXRlbVR5cGVdW2ldLmlkXSA9IGRhdGFbaV07XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGluY2x1ZGVMaW5rcykge1xyXG5cdFx0XHRjb25zdCBsaW5rcyA9IHRoaXMuaXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF0ubGlua3M7XHJcblx0XHRcdHJlc3VsdC5fX2xpbmtzID0ge307XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGxpbmtUeXBlIGluIGxpbmtzKVxyXG5cdFx0XHRcdHJlc3VsdC5fX2xpbmtzW2xpbmtUeXBlXSA9XHJcblx0XHRcdFx0XHR0aGlzLmZldGNoT2JqZWN0QXJyYXkobGlua1R5cGUsIGluY2x1ZGVMaW5rcywgbGlua3NbbGlua1R5cGVdKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hPYmplY3RBcnJheSAoaXRlbVR5cGUsIGluY2x1ZGVMaW5rcywgaWRBcnJheSkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBhbnkgPSBbXTtcclxuXHJcblx0XHRpZiAoaWRBcnJheSA9PT0gbnVsbCkge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSlcclxuXHRcdFx0XHRyZXN1bHQucHVzaCh0aGlzLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGluY2x1ZGVMaW5rcykpO1xyXG5cclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaWRBcnJheSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRpZEFycmF5ID0gdGhpcy5saW5rc1tpdGVtVHlwZV07XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgaWRBcnJheSlcclxuXHRcdFx0cmVzdWx0LnB1c2godGhpcy5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBpbmNsdWRlTGlua3MpKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hPYmplY3RNYXAgKGl0ZW1UeXBlLCBjb2x1bW5JZCwgaW5jbHVkZUxpbmtzLCByZXR1cm5LZXlzKSB7XHJcblx0XHRjb25zdCBjb2x1bW5JbmRleCA9IHRoaXMuY29sdW1uSW5kZXhNYXBbaXRlbVR5cGVdW2NvbHVtbklkXTtcclxuXHRcdGNvbnN0IHJlc3VsdDoge1trZXk6IHN0cmluZ106IGFueX0gPSB7fTtcclxuXHRcdGNvbnN0IGtleXM6IHN0cmluZ1tdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHRjb25zdCBrZXkgPSB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpZF0uZGF0YVtjb2x1bW5JbmRleF07XHJcblx0XHRcdGtleXMucHVzaChrZXkpO1xyXG5cdFx0XHRyZXN1bHRba2V5XSA9IHRoaXMuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGlkLCBpbmNsdWRlTGlua3MpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChyZXR1cm5LZXlzKVxyXG5cdFx0XHRyZXR1cm4ge3Jlc3VsdDogcmVzdWx0LCBrZXlzOiBrZXlzfTtcclxuXHRcdGVsc2VcclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGZldGNoRmllbGRNYXAgKGl0ZW1UeXBlLCBjb2x1bW5JZCkge1xyXG5cdFx0Y29uc3QgaW5kZXggPSB0aGlzLmNvbHVtbkluZGV4TWFwW2l0ZW1UeXBlXVtjb2x1bW5JZF07XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGlkIGluIHRoaXMuaXRlbXNbaXRlbVR5cGVdKVxyXG5cdFx0XHRyZXN1bHRbaWRdID0gdGhpcy5pdGVtc1tpdGVtVHlwZV1baWRdLmRhdGFbaW5kZXhdO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRmZXRjaENvbHVtbkFycmF5IChpdGVtVHlwZSkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBSZXNwb25zZUNvbHVtbltdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBhcGlDb2x1bW4gb2YgdGhpcy5jb2x1bW5zW2l0ZW1UeXBlXSlcclxuXHRcdFx0cmVzdWx0LnB1c2goYXBpQ29sdW1uKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hDb2x1bW5PYmplY3QgKGl0ZW1UeXBlKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5jb2x1bW5NYXBbaXRlbVR5cGVdO1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hDb2x1bW5zT2JqZWN0ICgpIHtcclxuXHRcdHJldHVybiB0aGlzLmNvbHVtbk1hcDtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZVJlc291cmNlIChpdGVtVHlwZSwgaWQpIHtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdG9iamVjdDogdGhpcy5mZXRjaE9iamVjdChpdGVtVHlwZSwgaWQpLFxyXG5cdFx0XHRsaW5rczogdGhpcy5pdGVtc1tpdGVtVHlwZV1baWRdLmxpbmtzXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0aGFzSXRlbXMgKGl0ZW1UeXBlKSB7XHJcblx0XHQvLyBAdHMtaWdub3JlXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSlcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Z2V0SWRBcnJheSAoaXRlbVR5cGUpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHRyZXN1bHQucHVzaChpdGVtSWQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG59XHJcbiIsImV4cG9ydCBlbnVtIEVOVFJZX1NUQVRVUyB7XHJcblx0Q0FDSEVEID0gJ2NhY2hlZCcsXHJcblx0UFJPTUlTRUQgPSAncHJvbWlzZWQnLFxyXG5cdEVYUEFORCA9ICdleHBhbmQnLFxyXG5cdFBST01JU0VEX0VYUEFORCA9ICdwcm9taXNlZC1leHBhbmQnLFxyXG5cdFJFU09MVkUgPSAncmVzb2x2ZScsXHJcblx0UkVTT0xWRV9WQUxVRVMgPSAncmVzb2x2ZS12YWx1ZXMnLFxyXG5cdExPQ0FMID0gJ2xvY2FsJ1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgQUxMX1BFUk1JU1NJT05TID0gJzcnO1xyXG5cclxuZXhwb3J0IGNvbnN0IENPTFVNTl9TRVBFUkFUT1IgPSAnPic7XHJcbmV4cG9ydCBjb25zdCBSRU5ERVJfQVNfU0VQRVJBVE9SID0gJzonO1xyXG5cclxuZXhwb3J0IGNvbnN0IE5FV19QUkVGSVg6IHN0cmluZyA9ICctMSc7XHJcbmV4cG9ydCBjb25zdCBEVVBMSUNBVEVfUFJFRklYOiBzdHJpbmcgPSAnLTInO1xyXG5cclxuZXhwb3J0IGNvbnN0IE5FV19LRVlXT1JEOiBzdHJpbmcgPSAnbmV3LSc7XHJcbmV4cG9ydCBjb25zdCBEVVBMSUNBVEVfS0VZV09SRDogc3RyaW5nID0gJ2R1cC0nO1xyXG4iLCJpbXBvcnQgeyBFTlRSWV9TVEFUVVMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBQcm9taXNlTGlicmFyeUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBFbnRyeVN0YXR1cywgRW50cnlTdGF0dXNNYXAsIEl0ZW1JZCwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBCYXRjaFN0YXR1czxUPiB7XHJcblx0cmVhZG9ubHkgcmVxdWVzdFN0YXR1cyA9IFtcclxuXHRcdEVOVFJZX1NUQVRVUy5SRVNPTFZFLFxyXG5cdFx0RU5UUllfU1RBVFVTLlJFU09MVkVfVkFMVUVTLFxyXG5cdFx0RU5UUllfU1RBVFVTLkVYUEFORCxcclxuXHRcdEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkRcclxuXHRdO1xyXG5cclxuXHRyZWFkb25seSByZW1vdGVFeHBhbmRTdGF0dXMgPSBbRU5UUllfU1RBVFVTLkVYUEFORCwgRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORF07XHJcblxyXG5cdGVudHJpZXM6IEVudHJ5U3RhdHVzTWFwPFQ+ID0ge307XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxyXG5cdFx0cHVibGljIGdldEl0ZW1JZDogKGl0ZW1FbnRyeTogVCkgPT4gSXRlbUlkLFxyXG5cdFx0cHVibGljIGdldFByb21pc2U6IChpdGVtRW50cnk6IFQpID0+IFByb21pc2VJbnRlcmZhY2U8VD5cclxuXHQpIHtcclxuXHRcdGZvciAoY29uc3Qgc3RhdHVzIGluIEVOVFJZX1NUQVRVUylcclxuXHRcdFx0dGhpcy5lbnRyaWVzW0VOVFJZX1NUQVRVU1tzdGF0dXNdXSA9IFtdO1xyXG5cdH1cclxuXHJcblx0YWRkIChlbnRyeVN0YXR1czogRW50cnlTdGF0dXM8VD4pOiB2b2lkIHtcclxuXHRcdHRoaXMuZW50cmllc1tlbnRyeVN0YXR1cy5zdGF0dXNdLnB1c2goZW50cnlTdGF0dXMuZW50cnkpO1xyXG5cdH1cclxuXHJcblx0aGFzRW50cmllcyAoc3RhdHVzQXJyYXk6IEVOVFJZX1NUQVRVU1tdKTogYm9vbGVhbiB7XHJcblx0XHRmb3IgKGNvbnN0IHN0YXR1cyBvZiBzdGF0dXNBcnJheSkge1xyXG5cdFx0XHRpZiAodGhpcy5lbnRyaWVzW3N0YXR1c10ubGVuZ3RoID4gMClcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRoYXNSZXF1ZXN0cyAoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5oYXNFbnRyaWVzKHRoaXMucmVxdWVzdFN0YXR1cyk7XHJcblx0fVxyXG5cclxuXHRmb3JFYWNoRW50cnkgKHN0YXR1c0FycmF5OiBFTlRSWV9TVEFUVVNbXSwgY2FsbGJhY2s6IChlbnRyeTogVCwgaXRlbUlkOiBJdGVtSWQpID0+IHZvaWQpOiB2b2lkIHtcclxuXHRcdGZvciAoY29uc3Qgc3RhdHVzIG9mIHN0YXR1c0FycmF5KSB7XHJcblx0XHRcdGNvbnN0IHN0YXR1c0VudHJpZXMgPSB0aGlzLmVudHJpZXNbc3RhdHVzXTtcclxuXHJcblx0XHRcdGZvciAoY29uc3Qgc3RhdHVzRW50cnkgb2Ygc3RhdHVzRW50cmllcylcclxuXHRcdFx0XHRjYWxsYmFjayhzdGF0dXNFbnRyeSwgdGhpcy5nZXRJdGVtSWQoc3RhdHVzRW50cnkpKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHJlZHVjZUVudHJpZXM8VT4gKFxyXG5cdFx0c3RhdHVzQXJyYXk6IEVOVFJZX1NUQVRVU1tdLFxyXG5cdFx0Y2FsbGJhY2s6IChlbnRyeTogVCwgaXRlbUlkOiBJdGVtSWQsIGRlc3RpbmF0aW9uOiBVKSA9PiB2b2lkLFxyXG5cdFx0ZGVzdGluYXRpb246IFVcclxuXHQpOiBVIHtcclxuXHRcdGZvciAoY29uc3Qgc3RhdHVzIG9mIHN0YXR1c0FycmF5KSB7XHJcblx0XHRcdGNvbnN0IHN0YXR1c0VudHJpZXMgPSB0aGlzLmVudHJpZXNbc3RhdHVzXTtcclxuXHJcblx0XHRcdGZvciAoY29uc3Qgc3RhdHVzRW50cnkgb2Ygc3RhdHVzRW50cmllcylcclxuXHRcdFx0XHRjYWxsYmFjayhzdGF0dXNFbnRyeSwgdGhpcy5nZXRJdGVtSWQoc3RhdHVzRW50cnkpLCBkZXN0aW5hdGlvbik7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGRlc3RpbmF0aW9uO1xyXG5cdH1cclxuXHJcblx0cmVkdWNlQWxsRW50cmllczxVPiAoXHJcblx0XHRjYWxsYmFjazogKGVudHJ5OiBULCBpdGVtSWQ6IEl0ZW1JZCwgZGVzdGluYXRpb246IFUpID0+IHZvaWQsXHJcblx0XHRkZXN0aW5hdGlvbjogVVxyXG5cdCk6IFUge1xyXG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcclxuXHJcblx0XHRmb3IgKGNvbnN0IHN0YXR1cyBpbiBlbnRyaWVzKSB7XHJcblx0XHRcdGNvbnN0IHN0YXR1c0VudHJpZXMgPSBlbnRyaWVzW3N0YXR1c107XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IHN0YXR1c0VudHJ5IG9mIHN0YXR1c0VudHJpZXMpXHJcblx0XHRcdFx0Y2FsbGJhY2soc3RhdHVzRW50cnksIHRoaXMuZ2V0SXRlbUlkKHN0YXR1c0VudHJ5KSwgZGVzdGluYXRpb24pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBkZXN0aW5hdGlvbjtcclxuXHR9XHJcblxyXG5cdGdldFByb21pc2VzICgpOiBQcm9taXNlSW50ZXJmYWNlPFRbXT4ge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKFxyXG5cdFx0XHR0aGlzLnJlZHVjZUVudHJpZXMoXHJcblx0XHRcdFx0W0VOVFJZX1NUQVRVUy5QUk9NSVNFRCwgRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORF0sXHJcblx0XHRcdFx0KGVudHJ5LCBfLCBkZXN0aW5hdGlvbikgPT4ge1xyXG5cdFx0XHRcdFx0ZGVzdGluYXRpb24ucHVzaCh0aGlzLmdldFByb21pc2UoZW50cnkpKTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdDxBcnJheTxQcm9taXNlSW50ZXJmYWNlPFQ+Pj4gW11cclxuXHRcdFx0KVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGdldEl0ZW1JZHMgKHN0YXR1c0FycmF5OiBFTlRSWV9TVEFUVVNbXSk6IEl0ZW1JZFtdIHtcclxuXHRcdHJldHVybiB0aGlzLnJlZHVjZUVudHJpZXMoXHJcblx0XHRcdHN0YXR1c0FycmF5LFxyXG5cdFx0XHQoXywgaXRlbUlkLCBkZXN0aW5hdGlvbikgPT4ge1xyXG5cdFx0XHRcdGRlc3RpbmF0aW9uLnB1c2goaXRlbUlkKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0PEl0ZW1JZFtdPiBbXVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGdldFJlcXVlc3RJZHMgKCk6IEl0ZW1JZFtdIHtcclxuXHRcdHJldHVybiB0aGlzLmdldEl0ZW1JZHModGhpcy5yZXF1ZXN0U3RhdHVzKTtcclxuXHR9XHJcblxyXG5cdGdldEFycmF5IChzdGF0dXNBcnJheT86IEVOVFJZX1NUQVRVU1tdKTogVFtdIHtcclxuXHRcdGNvbnN0IGNhbGxiYWNrID0gKGVudHJ5LCBfLCBkZXN0aW5hdGlvbikgPT4ge1xyXG5cdFx0XHRkZXN0aW5hdGlvbi5wdXNoKGVudHJ5KTtcclxuXHRcdH07XHJcblxyXG5cdFx0aWYgKHN0YXR1c0FycmF5ID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzLnJlZHVjZUFsbEVudHJpZXMoY2FsbGJhY2ssIDxUW10+IFtdKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5yZWR1Y2VFbnRyaWVzKHN0YXR1c0FycmF5LCBjYWxsYmFjaywgPFRbXT4gW10pO1xyXG5cdH1cclxuXHJcblx0Z2V0TWFwICgpOiB7W2l0ZW1JZDogc3RyaW5nXTogVH0ge1xyXG5cdFx0cmV0dXJuIHRoaXMucmVkdWNlQWxsRW50cmllcyhcclxuXHRcdFx0KGVudHJ5LCBpdGVtSWQsIGRlc3RpbmF0aW9uKSA9PiB7XHJcblx0XHRcdFx0ZGVzdGluYXRpb25baXRlbUlkXSA9IGVudHJ5O1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR7fVxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlLCBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25DYWNoZUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEVudHJ5UGFyZW50LCBFbnRyeVBhcmVudE51bGwsIEl0ZW1FbnRyeU1hcCwgSXRlbUlkLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IGNyZWF0ZVBhdGgsIGdldFBhdGggfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuZXhwb3J0IHR5cGUgRGVsZXRlTWFwRW50cnkgPSB7aXRlbTogSXRlbUVudHJ5LCBwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbH07XHJcblxyXG5leHBvcnQgdHlwZSBNb3ZlTWFwRW50cnkgPSB7aXRlbTogSXRlbUVudHJ5LCBwYXJlbnQ6IEVudHJ5UGFyZW50fTtcclxuXHJcbmV4cG9ydCB0eXBlIENyZWF0ZUNvbXBpbGF0aW9uID0ge1xyXG5cdFtwYXJlbnRUeXBlOiBzdHJpbmddOiB7XHJcblx0XHRbcGFyZW50SWQ6IG51bWJlcl06IEl0ZW1FbnRyeU1hcFxyXG5cdH1cclxufTtcclxuXHJcbmV4cG9ydCB0eXBlIERlbGV0ZUNvbXBpbGF0aW9uID0ge1xyXG5cdFtpdGVtVHlwZTogc3RyaW5nXTogSXRlbUVudHJ5W11cclxufTtcclxuXHJcbmV4cG9ydCB0eXBlIFVwZGF0ZUNvbXBpbGF0aW9uID0gSXRlbUVudHJ5TWFwO1xyXG5cclxuZXhwb3J0IHR5cGUgTW92ZUNvbXBpbGF0aW9uID0ge1xyXG5cdFtwYXJlbnRUeXBlOiBzdHJpbmddOiB7XHJcblx0XHRbcGFyZW50SWQ6IG51bWJlcl06IE1vdmVNYXBFbnRyeVtdXHJcblx0fVxyXG59O1xyXG5cclxuZXhwb3J0IGNsYXNzIENoYW5nZXNDb21waWxhdGlvbiB7XHJcblx0Y29tcGlsYXRpb246IHtcclxuXHRcdGNyZWF0ZTogQ3JlYXRlQ29tcGlsYXRpb24sXHJcblx0XHRkZWxldGU6IERlbGV0ZUNvbXBpbGF0aW9uLFxyXG5cdFx0dXBkYXRlOiBVcGRhdGVDb21waWxhdGlvbixcclxuXHRcdG1vdmU6IE1vdmVDb21waWxhdGlvblxyXG5cdH0gPSB7XHJcblx0XHRjcmVhdGU6IHt9LFxyXG5cdFx0ZGVsZXRlOiB7fSxcclxuXHRcdHVwZGF0ZToge30sXHJcblx0XHRtb3ZlOiB7fVxyXG5cdH07XHJcblxyXG5cdGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uQ2FjaGU7XHJcblxyXG5cdHByaXZhdGUgbW92ZUFycmF5OiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRwcml2YXRlIGRlbGV0ZU1hcDoge1xyXG5cdFx0W2l0ZW1UeXBlOiBzdHJpbmddOiB7XHJcblx0XHRcdFtpdGVtSWQ6IG51bWJlcl06IERlbGV0ZU1hcEVudHJ5XHJcblx0XHR9XHJcblx0fSA9IHt9O1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25DYWNoZUZhY3Rvcnk6IENvbGxlY3Rpb25DYWNoZUZhY3RvcnksXHJcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXHJcblx0XHRwdWJsaWMgc2luZ2xlSXRlbXM6IEl0ZW1FbnRyeVtdLFxyXG5cdFx0Y29sbGVjdGlvbkVudHJpZXM6IENvbGxlY3Rpb25FbnRyeVtdXHJcblx0KSB7XHJcblx0XHR0aGlzLmNvbGxlY3Rpb25zID0gdGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xyXG5cclxuXHRcdHRoaXMucHJvY2Vzc1NpbmdsZUl0ZW1zKCk7XHJcblx0XHR0aGlzLnByb2Nlc3NDb2xsZWN0aW9ucyhjb2xsZWN0aW9uRW50cmllcyk7XHJcblx0XHR0aGlzLnBvc3RQcm9jZXNzKCk7XHJcblx0fVxyXG5cclxuXHRnZXREZWZhdWx0UGFyZW50ICgpOiBFbnRyeVBhcmVudCB7XHJcblx0XHRyZXR1cm4ge2l0ZW1UeXBlOiAnVm9pZCcsIGl0ZW1JZDogMH07XHJcblx0fVxyXG5cclxuXHRhZGRNb3ZlRW50cnkgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KTogdm9pZCB7XHJcblx0XHR0aGlzLm1vdmVBcnJheS5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0fVxyXG5cclxuXHRhZGREZWxldGVFbnRyeSAoaXRlbUVudHJ5OiBJdGVtRW50cnksIHBhcmVudDogRW50cnlQYXJlbnROdWxsKTogdm9pZCB7XHJcblx0XHRjcmVhdGVQYXRoKFxyXG5cdFx0XHR0aGlzLmRlbGV0ZU1hcCxcclxuXHRcdFx0W2l0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXHJcblx0XHRcdFt7fSwge2l0ZW06IGl0ZW1FbnRyeSwgcGFyZW50OiBwYXJlbnR9XVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGFkZFVwZGF0ZUVudHJ5IChpdGVtRW50cnk6IEl0ZW1FbnRyeSk6IHZvaWQge1xyXG5cdFx0Y3JlYXRlUGF0aChcclxuXHRcdFx0dGhpcy5jb21waWxhdGlvbi51cGRhdGUsXHJcblx0XHRcdFtpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWRdLFxyXG5cdFx0XHRbe30sIGl0ZW1FbnRyeV1cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRhZGRDcmVhdGVFbnRyeSAoaXRlbUVudHJ5OiBJdGVtRW50cnkpOiB2b2lkIHtcclxuXHRcdGxldCBwYXJlbnQgPSBpdGVtRW50cnkucGFyZW50O1xyXG5cclxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXHJcblx0XHRcdHBhcmVudCA9IHRoaXMuZ2V0RGVmYXVsdFBhcmVudCgpO1xyXG5cclxuXHRcdGNyZWF0ZVBhdGgoXHJcblx0XHRcdHRoaXMuY29tcGlsYXRpb24uY3JlYXRlLFxyXG5cdFx0XHRbcGFyZW50Lml0ZW1UeXBlLCBwYXJlbnQuaXRlbUlkLCBpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWRdLFxyXG5cdFx0XHRbe30sIHt9LCB7fSwgaXRlbUVudHJ5XVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGNvbnRhaW5zQ3JlYXRlRW50cnkgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQpOiBib29sZWFuIHtcclxuXHRcdGNvbnN0IGNyZWF0ZUNvbXBpbGF0aW9uID0gdGhpcy5jb21waWxhdGlvbi5jcmVhdGU7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRUeXBlIGluIGNyZWF0ZUNvbXBpbGF0aW9uKSB7XHJcblx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gY3JlYXRlQ29tcGlsYXRpb25bcGFyZW50VHlwZV0pIHtcclxuXHRcdFx0XHRjb25zdCBpdGVtRW50cnlNYXAgPSBjcmVhdGVDb21waWxhdGlvbltwYXJlbnRUeXBlXVtwYXJlbnRJZF1baXRlbVR5cGVdO1xyXG5cclxuXHRcdFx0XHRpZiAoaXRlbUVudHJ5TWFwID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gaXRlbUVudHJ5TWFwKSB7XHJcblx0XHRcdFx0XHRpZiAoaXRlbUVudHJ5TWFwW2tleV0uaXRlbUlkID09PSBpdGVtSWQpXHJcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY3JlYXRlRGVsZXRlQ29tcGlsYXRpb24gKCk6IHZvaWQge1xyXG5cdFx0Y29uc3QgZGVsZXRlTWFwID0gdGhpcy5kZWxldGVNYXA7XHJcblx0XHRjb25zdCBkZWxldGVDb21waWxhdGlvbiA9IHRoaXMuY29tcGlsYXRpb24uZGVsZXRlO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gZGVsZXRlTWFwKSB7XHJcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGRlbGV0ZU1hcFtpdGVtVHlwZV0pIHtcclxuXHRcdFx0XHRjb25zdCBpdGVtRW50cnk6IEl0ZW1FbnRyeSA9IGRlbGV0ZU1hcFtpdGVtVHlwZV1baXRlbUlkXS5pdGVtO1xyXG5cclxuXHRcdFx0XHRpZiAoZGVsZXRlQ29tcGlsYXRpb25baXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRkZWxldGVDb21waWxhdGlvbltpdGVtVHlwZV0gPSBbXTtcclxuXHJcblx0XHRcdFx0ZGVsZXRlQ29tcGlsYXRpb25baXRlbVR5cGVdLnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cG9zdFByb2Nlc3MgKCk6IHZvaWQge1xyXG5cdFx0Y29uc3QgZGVsZXRlTWFwID0gdGhpcy5kZWxldGVNYXA7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgdGhpcy5tb3ZlQXJyYXkpIHtcclxuXHRcdFx0Y29uc3QgZGVsZXRlRW50cnk6IERlbGV0ZU1hcEVudHJ5ID0gZ2V0UGF0aChkZWxldGVNYXAsIFtpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWRdKTtcclxuXHJcblx0XHRcdGlmIChkZWxldGVFbnRyeSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0Ly8gYXNzdW1lIHRoZSBpdGVtRW50cnkgaGFzIGEgcGFyZW50IChvciBzb21ldGhpbmcgd2VudCBzZXJpb3VzbHkgd3JvbmcpXHJcblx0XHRcdGNvbnN0IHtpdGVtVHlwZTogcGFyZW50VHlwZSwgaXRlbUlkOiBwYXJlbnRJZH0gPSA8RW50cnlQYXJlbnQ+IGl0ZW1FbnRyeS5wYXJlbnQ7XHJcblxyXG5cdFx0XHRpZiAodGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZChwYXJlbnRJZCkgJiYgIXRoaXMuY29udGFpbnNDcmVhdGVFbnRyeShwYXJlbnRUeXBlLCBwYXJlbnRJZCkpIHtcclxuXHRcdFx0XHRpdGVtRW50cnkucGFyZW50ID0gZGVsZXRlRW50cnkucGFyZW50O1xyXG5cclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y3JlYXRlUGF0aCh0aGlzLmNvbXBpbGF0aW9uLm1vdmUsIFtwYXJlbnRUeXBlLCBwYXJlbnRJZF0sIFt7fSwgW11dKS5wdXNoKGRlbGV0ZUVudHJ5KTtcclxuXHJcblx0XHRcdGRlbGV0ZSBkZWxldGVNYXBbaXRlbUVudHJ5Lml0ZW1UeXBlXVtpdGVtRW50cnkuaXRlbUlkXTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLmNyZWF0ZURlbGV0ZUNvbXBpbGF0aW9uKCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHByb2Nlc3NTaW5nbGVJdGVtcyAoKTogdm9pZCB7XHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiB0aGlzLnNpbmdsZUl0ZW1zKSB7XHJcblx0XHRcdGlmIChpdGVtRW50cnkuaXNMb2NhbCgpKVxyXG5cdFx0XHRcdHRoaXMuYWRkQ3JlYXRlRW50cnkoaXRlbUVudHJ5KTtcclxuXHRcdFx0ZWxzZSBpZiAoaXRlbUVudHJ5Lmhhc0NoYW5nZXMoKSlcclxuXHRcdFx0XHR0aGlzLmFkZFVwZGF0ZUVudHJ5KGl0ZW1FbnRyeSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHByb2Nlc3NDb2xsZWN0aW9ucyAoY29sbGVjdGlvbkVudHJpZXM6IENvbGxlY3Rpb25FbnRyeVtdKTogdm9pZCB7XHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiBjb2xsZWN0aW9uRW50cmllcykge1xyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25zLmFkZChjb2xsZWN0aW9uRW50cnkpO1xyXG5cclxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0RlZmVycmVkKCkpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRsZXQgYWRkZWRJdGVtcztcclxuXHRcdFx0bGV0IHJlbW92ZWRJdGVtcztcclxuXHJcblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXNMb2NhbCgpKSB7XHJcblx0XHRcdFx0YWRkZWRJdGVtcyA9IGNvbGxlY3Rpb25FbnRyeS5pdGVtcztcclxuXHRcdFx0XHRyZW1vdmVkSXRlbXMgPSBbXTtcclxuXHRcdFx0fSBlbHNlIGlmIChjb2xsZWN0aW9uRW50cnkuaGFzRWRpdFJlc291cmNlcykge1xyXG5cdFx0XHRcdGFkZGVkSXRlbXMgPSBjb2xsZWN0aW9uRW50cnkuZ2V0QWRkZWRJdGVtcygpO1xyXG5cdFx0XHRcdHJlbW92ZWRJdGVtcyA9IGNvbGxlY3Rpb25FbnRyeS5nZXRSZW1vdmVkSXRlbXMoKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRhZGRlZEl0ZW1zID0gW107XHJcblx0XHRcdFx0cmVtb3ZlZEl0ZW1zID0gW107XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGZvciAoY29uc3QgYWRkZWRJdGVtIG9mIGFkZGVkSXRlbXMpIHsgLy8gaXQgaXMgcG9zc2libGUgdG8gbW92ZSBhbiBleGlzdGluZyBpdGVtIHRvIGEgbmV3IGNvbGxlY3Rpb25cclxuXHRcdFx0XHRpZiAoYWRkZWRJdGVtLmlzTG9jYWwoKSlcclxuXHRcdFx0XHRcdHRoaXMuYWRkQ3JlYXRlRW50cnkoYWRkZWRJdGVtKTtcclxuXHRcdFx0XHRlbHNlXHJcblx0XHRcdFx0XHR0aGlzLmFkZE1vdmVFbnRyeShhZGRlZEl0ZW0pO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IHJlbW92ZWRJdGVtIG9mIHJlbW92ZWRJdGVtcylcclxuXHRcdFx0XHR0aGlzLmFkZERlbGV0ZUVudHJ5KHJlbW92ZWRJdGVtLCBjb2xsZWN0aW9uRW50cnkucGFyZW50KTtcclxuXHJcblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaGFzSXRlbUVkaXRSZXNvdXJjZXMpIHtcclxuXHRcdFx0XHRjb25zdCB1cGRhdGVkSXRlbXMgPSBjb2xsZWN0aW9uRW50cnkuZ2V0VXBkYXRlZEl0ZW1zKCk7XHJcblxyXG5cdFx0XHRcdGZvciAoY29uc3QgdXBkYXRlZEl0ZW0gb2YgdXBkYXRlZEl0ZW1zKVxyXG5cdFx0XHRcdFx0dGhpcy5hZGRVcGRhdGVFbnRyeSh1cGRhdGVkSXRlbSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHtcclxuXHRBcGlGb3JtYXR0ZXIsXHJcblx0Q2hhbmdlc0NvbXBpbGF0aW9uLFxyXG5cdENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXHJcblx0Q29sbGVjdGlvbkhhbmRsZXIsXHJcblx0Q29sdW1uSW5mbyxcclxuXHREZWxldGVDb21waWxhdGlvbixcclxuXHRJdGVtSGFuZGxlcixcclxuXHRNb3ZlQ29tcGlsYXRpb24sXHJcblx0TW92ZU1hcEVudHJ5LFxyXG5cdFVwZGF0ZUNvbXBpbGF0aW9uXHJcbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7XHJcblx0Q2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcclxuXHRDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdENyZWF0ZVJlcXVlc3RGYWN0b3J5LFxyXG5cdFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XHJcbn0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQge1xyXG5cdEFwaVJlc3BvbnNlLFxyXG5cdENyZWF0ZVJlcXVlc3RFbnRyeSxcclxuXHRDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwLFxyXG5cdEVudHJ5UGFyZW50LFxyXG5cdEl0ZW1JZCxcclxuXHRJdGVtSWRDb252ZXJzaW9uTWFwLFxyXG5cdEl0ZW1UeXBlLFxyXG5cdFByb21pc2VJbnRlcmZhY2VcclxufSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5pbXBvcnQgeyBjcmVhdGVQYXRoLCBnZXRQYXRoLCBoYXNQcm9wZXJ0aWVzLCBpbkFycmF5IH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDaGFuZ2VzUHJvY2Vzc29yIHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxyXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnk6IENoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25FbnRyeVNlcnZpY2U6IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcclxuXHRcdHByaXZhdGUgY29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY3JlYXRlUmVxdWVzdEZhY3Rvcnk6IENyZWF0ZVJlcXVlc3RGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIHJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0YnVpbGRNb3ZlUmVxdWVzdCAoY29tcGlsYXRpb25FbnRyaWVzKSB7XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbXBpbGF0aW9uRW50cnkgb2YgY29tcGlsYXRpb25FbnRyaWVzKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGNvbXBpbGF0aW9uRW50cnkuaXRlbTtcclxuXHRcdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XHJcblxyXG5cdFx0XHRpZiAocmVzdWx0W2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdHJlc3VsdFtpdGVtVHlwZV0gPSBbXTtcclxuXHJcblx0XHRcdHJlc3VsdFtpdGVtVHlwZV0ucHVzaChpdGVtRW50cnkuaXRlbUlkKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0TWFwVmFsdWUgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBudW1iZXIgfCBzdHJpbmcsIG1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCk6IEl0ZW1JZCB8IHVuZGVmaW5lZCB7XHJcblx0XHRpZiAobWFwID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG5cdFx0aWYgKG1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcblx0XHRyZXR1cm4gbWFwW2l0ZW1UeXBlXVtpdGVtSWRdO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBleGVjdXRlQ3JlYXRlUmVxdWVzdHMgKFxyXG5cdFx0Y2hhbmdlc0NvbXBpbGF0aW9uOiBDaGFuZ2VzQ29tcGlsYXRpb24sXHJcblx0XHRwYXJhbWV0ZXJzOiBDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwLFxyXG5cdFx0Y29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCxcclxuXHRcdGJyZWFrdXBCeVBhcmVudD86IGJvb2xlYW4sXHJcblx0XHRvbkFmdGVyQ3JlYXRlQ2FsbGJhY2s/OiAoY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCkgPT4gdm9pZFxyXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8SXRlbUlkQ29udmVyc2lvbk1hcD4ge1xyXG5cdFx0Y29uc3QgcmVxdWVzdHMgPSB0aGlzLmNyZWF0ZVJlcXVlc3RGYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0Y2hhbmdlc0NvbXBpbGF0aW9uLmNvbXBpbGF0aW9uLmNyZWF0ZSxcclxuXHRcdFx0Y2hhbmdlc0NvbXBpbGF0aW9uLmNvbGxlY3Rpb25zLFxyXG5cdFx0XHRwYXJhbWV0ZXJzLFxyXG5cdFx0XHRicmVha3VwQnlQYXJlbnRcclxuXHRcdCkucnVuKCk7XHJcblx0XHRjb25zdCByZXNwb25zZXM6IEFycmF5PFByb21pc2VJbnRlcmZhY2U8YW55Pj4gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHJlcXVlc3Qgb2YgcmVxdWVzdHMpXHJcblx0XHRcdHJlc3BvbnNlcy5wdXNoKHRoaXMuZXhlY3V0ZUNyZWF0ZVJlcXVlc3QocmVxdWVzdCwgY29udmVyc2lvbk1hcCkudGhlbihub3RpZnkpKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocmVzcG9uc2VzKS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIGNvbnZlcnNpb25NYXA7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHJcblx0XHRmdW5jdGlvbiBub3RpZnkgKHJlc3VsdCkge1xyXG5cdFx0XHRpZiAob25BZnRlckNyZWF0ZUNhbGxiYWNrICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrKGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZXhlY3V0ZUNyZWF0ZVJlcXVlc3QgKFxyXG5cdFx0cmVxdWVzdFJlc291cmNlOiBDcmVhdGVSZXF1ZXN0RW50cnksXHJcblx0XHRjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwXHJcblx0KTogUHJvbWlzZUludGVyZmFjZTx2b2lkPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5yZXF1ZXN0U2tlbGV0b24ocmVxdWVzdFJlc291cmNlLnJlcXVlc3QpLnRoZW4oXHJcblx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRjb25zdCByZXNwb25zZU1hcCA9IHJlc3BvbnNlLm1hcDtcclxuXHRcdFx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKTtcclxuXHRcdFx0XHRjb25zdCBpdGVtRW50cmllcyA9IHJlcXVlc3RSZXNvdXJjZS5pdGVtcztcclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0XHRcdHJlcXVlc3RSZXNvdXJjZS5yZXF1ZXN0LmNvbHVtbnNbaXRlbVR5cGVdLFxyXG5cdFx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnNcclxuXHRcdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbUVudHJpZXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeTogSXRlbUVudHJ5ID0gaXRlbUVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF07XHJcblx0XHRcdFx0XHRcdGNvbnN0IG5ld0l0ZW1JZCA9IHRoaXMuZ2V0TWFwVmFsdWUoaXRlbVR5cGUsIGl0ZW1JZCwgcmVzcG9uc2VNYXApO1xyXG5cclxuXHRcdFx0XHRcdFx0aWYgKG5ld0l0ZW1JZCA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKCdDcmVhdGUgZmFpbGVkIScsIGl0ZW1FbnRyeSk7XHJcblx0XHRcdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGNvbnN0IGZpZWxkcyA9IHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBuZXdJdGVtSWQpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCBleHBhbmRSZXNvdXJjZSA9IGNvbHVtbkV4cGFuc2lvbi5ydW4oaXRlbUVudHJ5LmNvbHVtbnMpO1xyXG5cclxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5Lml0ZW1JZCA9IG5ld0l0ZW1JZDtcclxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LnVwZGF0ZUZpZWxkcyhcclxuXHRcdFx0XHRcdFx0XHRmaWVsZHMsXHJcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBuZXdJdGVtSWQsIGl0ZW1FbnRyeS5jb2x1bW5zLnJvb3QpLFxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRcdFx0aWYgKGV4cGFuZFJlc291cmNlICE9PSBudWxsKSB7XHJcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LmV4cGFuZChcclxuXHRcdFx0XHRcdFx0XHRcdGZpZWxkcyxcclxuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgbmV3SXRlbUlkLCBleHBhbmRSZXNvdXJjZS5kaWZmZXJlbmNlLnJvb3QpLFxyXG5cdFx0XHRcdFx0XHRcdFx0ZXhwYW5kUmVzb3VyY2VcclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHR0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuYWRkKGl0ZW1FbnRyeSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXF1ZXN0UmVzb3VyY2UuY29sbGVjdGlvbnMuYWRkVG9Db2xsZWN0aW9ucygpO1xyXG5cclxuXHRcdFx0XHQvLyBleHRlbmQgY29udmVyc2lvbiBtYXBcclxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHJlc3BvbnNlTWFwKSB7XHJcblx0XHRcdFx0XHRpZiAoY29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdFx0Y29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPSB7fTtcclxuXHJcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiByZXNwb25zZU1hcFtpdGVtVHlwZV0pXHJcblx0XHRcdFx0XHRcdGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdW2l0ZW1JZF0gPSByZXNwb25zZU1hcFtpdGVtVHlwZV1baXRlbUlkXTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZXhlY3V0ZVVwZGF0ZVJlcXVlc3RzIChjb21waWxhdGlvbjogVXBkYXRlQ29tcGlsYXRpb24sIHBhcmFtZXRlcnMpIHtcclxuXHRcdGNvbnN0IHJlcXVlc3RzOiBBcnJheTxQcm9taXNlPEFwaVJlc3BvbnNlPj4gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGNvbXBpbGF0aW9uKVxyXG5cdFx0XHRyZXF1ZXN0cy5wdXNoKHRoaXMuZXhlY3V0ZVVwZGF0ZVJlcXVlc3QoaXRlbVR5cGUsIGNvbXBpbGF0aW9uW2l0ZW1UeXBlXSwgcGFyYW1ldGVycykpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChyZXF1ZXN0cyk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGV4ZWN1dGVVcGRhdGVSZXF1ZXN0IChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1FbnRyaWVzOiB7W2l0ZW1JZDogbnVtYmVyXTogSXRlbUVudHJ5fSwgcGFyYW1ldGVyTWFwKSB7XHJcblx0XHRjb25zdCByZXF1ZXN0ID0ge307XHJcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KCk7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uTWF0Y2hlciA9IHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZ2V0Q29sbGVjdGlvbk1hdGNoZXIoKTtcclxuXHJcblx0XHRyZXF1ZXN0W2l0ZW1UeXBlXSA9IHt9O1xyXG5cclxuXHRcdC8vIHdlIG5lZWQgdG8gZG8gdGhlIGZvcm1hdFJlcXVlc3QgY2FsbCBoZXJlIChmaWVsZHMgbWlnaHQgaGF2ZSBiZWVuIHVwZGF0ZWQpXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSBpdGVtRW50cmllc1tpdGVtSWRdO1xyXG5cdFx0XHQvLyBSTUNvcmUgdG9kbzogdHlwZVxyXG5cdFx0XHRjb25zdCBpdGVtUmVxdWVzdDogYW55ID0gcmVxdWVzdFtpdGVtVHlwZV1baXRlbUlkXSA9IHt9O1xyXG5cdFx0XHRjb25zdCBwYXJhbWV0ZXJzID0gZ2V0UGF0aChwYXJhbWV0ZXJNYXAsIFtpdGVtVHlwZSwgaXRlbUlkXSk7XHJcblxyXG5cdFx0XHRpdGVtUmVxdWVzdC52YWx1ZXMgPSBpdGVtRW50cnkuZm9ybWF0UmVxdWVzdCgpO1xyXG5cclxuXHRcdFx0aWYgKHBhcmFtZXRlcnMgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRpdGVtUmVxdWVzdC5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcclxuXHJcblx0XHRcdHJlcXVlc3RDb2x1bW5zLmV4cGFuZChpdGVtRW50cnkuY29sdW1ucyk7XHJcblx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyLmV4cGFuZChpdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25zV2l0aEZpdHRpbmdJdGVtcyA9IGNvbGxlY3Rpb25NYXRjaGVyLmdldENvbGxlY3Rpb25zV2l0aEZpdHRpbmdJdGVtcygpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9uc1dpdGhGaXR0aW5nSXRlbXMpXHJcblx0XHRcdHJlcXVlc3RDb2x1bW5zLmV4cGFuZChjb2xsZWN0aW9uLmNvbHVtbnMpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnVwZGF0ZUl0ZW1zKGl0ZW1UeXBlLCByZXF1ZXN0LCByZXF1ZXN0Q29sdW1ucy5nZXQoKSkudGhlbihcclxuXHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHRcdHJlcXVlc3RDb2x1bW5zLmdldCgpW2l0ZW1UeXBlXSxcclxuXHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpXHJcblx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbUVudHJpZXMpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGl0ZW1FbnRyaWVzW2l0ZW1JZF07XHJcblx0XHRcdFx0XHRjb25zdCBmaWVsZHMgPSByZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKTtcclxuXHJcblx0XHRcdFx0XHRpZiAoZmllbGRzID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKCdVcGRhdGUgZmFpbGVkIScsIGl0ZW1FbnRyeSk7XHJcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGNvbnN0IHByZXZpb3VzID0gdGhpcy5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyhpdGVtRW50cnkuaW5pdGlhbCwge30sIGl0ZW1FbnRyeS5jb2x1bW5zLm1haW4pO1xyXG5cclxuXHRcdFx0XHRcdGl0ZW1FbnRyeVxyXG5cdFx0XHRcdFx0XHQudXBkYXRlRmllbGRzKGZpZWxkcywgcmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGl0ZW1FbnRyeS5jb2x1bW5zLnJvb3QpKVxyXG5cdFx0XHRcdFx0XHQuY2FsbE9uQ2hhbmdlKHByZXZpb3VzKTtcclxuXHJcblx0XHRcdFx0XHRjb25zdCBleHBhbmRSZXNvdXJjZSA9IGNvbHVtbkV4cGFuc2lvbi5ydW4oaXRlbUVudHJ5LmNvbHVtbnMpO1xyXG5cclxuXHRcdFx0XHRcdGlmIChleHBhbmRSZXNvdXJjZSA9PT0gbnVsbClcclxuXHRcdFx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRcdFx0aXRlbUVudHJ5LmV4cGFuZChcclxuXHRcdFx0XHRcdFx0ZmllbGRzLFxyXG5cdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgZXhwYW5kUmVzb3VyY2UuZGlmZmVyZW5jZS5yb290KSxcclxuXHRcdFx0XHRcdFx0ZXhwYW5kUmVzb3VyY2VcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRjb2xsZWN0aW9uTWF0Y2hlci5yZW1vdmVGcm9tQW5kQWRkVG9Db2xsZWN0aW9ucygpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGV4ZWN1dGVEZWxldGVSZXF1ZXN0cyAoY29tcGlsYXRpb246IERlbGV0ZUNvbXBpbGF0aW9uKSB7XHJcblx0XHRjb25zdCByZXF1ZXN0czogQXJyYXk8UHJvbWlzZUludGVyZmFjZTx2b2lkPj4gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGNvbXBpbGF0aW9uKSAvLyBjbGVhcmluZyBub3QgbmVjZXNzYXJ5XHJcblx0XHRcdHJlcXVlc3RzLnB1c2godGhpcy5leGVjdXRlRGVsZXRlUmVxdWVzdChpdGVtVHlwZSwgY29tcGlsYXRpb25baXRlbVR5cGVdKSk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHJlcXVlc3RzKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZXhlY3V0ZURlbGV0ZVJlcXVlc3QgKGl0ZW1UeXBlLCBpdGVtRW50cmllczogSXRlbUVudHJ5W10pIHtcclxuXHRcdGNvbnN0IGlkQXJyYXk6IEl0ZW1JZFtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXHJcblx0XHRcdGlkQXJyYXkucHVzaChpdGVtRW50cnkuaXRlbUlkKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5kZWxldGUoaXRlbVR5cGUsIGlkQXJyYXkpLnRoZW4oXHJcblx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRjb25zdCByZXNwb25zZUlkQXJyYXkgPSByZXNwb25zZS5pdGVtcztcclxuXHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uTWF0Y2hlciA9IHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZ2V0Q29sbGVjdGlvbk1hdGNoZXIoKTtcclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcclxuXHRcdFx0XHRcdGlmICghaW5BcnJheShpdGVtRW50cnkuaXRlbUlkLCByZXNwb25zZUlkQXJyYXkpKVxyXG5cdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oJ0RlbGV0ZSBmYWlsZWQhJywgaXRlbUVudHJ5KTtcclxuXHJcblx0XHRcdFx0XHRjb2xsZWN0aW9uTWF0Y2hlci5leHBhbmQoaXRlbUVudHJ5KTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyLnJlbW92ZUZyb21Db2xsZWN0aW9ucygpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGV4ZWN1dGVNb3ZlUmVxdWVzdHMgKGNvbXBpbGF0aW9uOiBNb3ZlQ29tcGlsYXRpb24sIGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApIHtcclxuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xyXG5cdFx0Y29uc3QgcmVxdWVzdHM6IEFycmF5PFByb21pc2VJbnRlcmZhY2U8dm9pZD4+ID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRUeXBlIGluIGNvbXBpbGF0aW9uKSB7XHJcblx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gY29tcGlsYXRpb25bcGFyZW50VHlwZV0pXHJcblx0XHRcdFx0ZXhlY3V0ZU1vdmVSZXF1ZXN0KHBhcmVudFR5cGUsICtwYXJlbnRJZCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHJlcXVlc3RzKTtcclxuXHJcblx0XHRmdW5jdGlvbiBleGVjdXRlTW92ZVJlcXVlc3QgKHBhcmVudFR5cGU6IEl0ZW1UeXBlLCBwYXJlbnRJZDogSXRlbUlkKSB7XHJcblx0XHRcdC8vIG9ubHkgdGhlIHBhcmVudCBpZCBjb3VsZCBoYXZlIGJlZW4gdXBkYXRlZFxyXG5cdFx0XHRjb25zdCBjb21waWxhdGlvbkVudHJpZXMgPSBjb21waWxhdGlvbltwYXJlbnRUeXBlXVtwYXJlbnRJZF07XHJcblx0XHRcdGNvbnN0IG5ld1BhcmVudElkID0gc2VsZi5nZXRNYXBWYWx1ZShwYXJlbnRUeXBlLCBwYXJlbnRJZCwgY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0XHRyZXF1ZXN0cy5wdXNoKFxyXG5cdFx0XHRcdHNlbGYuYXBpUmVxdWVzdFNlcnZpY2UubW92ZUl0ZW1zKFxyXG5cdFx0XHRcdFx0cGFyZW50VHlwZSxcclxuXHRcdFx0XHRcdG5ld1BhcmVudElkICE9PSB1bmRlZmluZWQgPyBuZXdQYXJlbnRJZCA6IHBhcmVudElkLFxyXG5cdFx0XHRcdFx0c2VsZi5idWlsZE1vdmVSZXF1ZXN0KGNvbXBpbGF0aW9uRW50cmllcylcclxuXHRcdFx0XHQpLnRoZW4oXHJcblx0XHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHRcdHNlbGYucHJvY2Vzc01vdmVSZXNwb25zZSgvKiByZXNwb25zZSwgKi9jb21waWxhdGlvbkVudHJpZXMpO1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdHNlbGYuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0XHRcdClcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcHJvY2Vzc01vdmVSZXNwb25zZSAoLyogcmVzcG9uc2UsICovY29tcGlsYXRpb25FbnRyaWVzOiBNb3ZlTWFwRW50cnlbXSkge1xyXG5cdFx0Ly8gVE9ETzogcHJvY2VzcyByZXNwb25zZVxyXG5cclxuXHRcdGNvbnN0IGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cdFx0Y29uc3QgcmVtb3ZlQ29sbGVjdGlvbk1hcCA9IHt9O1xyXG5cdFx0Y29uc3QgYWRkQ29sbGVjdGlvbk1hcCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29tcGlsYXRpb25FbnRyeSBvZiBjb21waWxhdGlvbkVudHJpZXMpIHtcclxuXHRcdFx0Y29uc3QgaXRlbUVudHJ5OiBJdGVtRW50cnkgPSBjb21waWxhdGlvbkVudHJ5Lml0ZW07XHJcblxyXG5cdFx0XHR0aGlzLmFkZENvbGxlY3Rpb25NYXBFbnRyeShcclxuXHRcdFx0XHRyZW1vdmVDb2xsZWN0aW9uTWFwLFxyXG5cdFx0XHRcdGNvbXBpbGF0aW9uRW50cnkucGFyZW50Lml0ZW1JZCxcclxuXHRcdFx0XHRpdGVtRW50cnksXHJcblx0XHRcdFx0aXRlbUVudHJ5Lml0ZW1JZFxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdFx0dGhpcy5hZGRDb2xsZWN0aW9uTWFwRW50cnkoXHJcblx0XHRcdFx0YWRkQ29sbGVjdGlvbk1hcCxcclxuXHRcdFx0XHQoPEVudHJ5UGFyZW50PiBpdGVtRW50cnkucGFyZW50KS5pdGVtSWQsXHJcblx0XHRcdFx0aXRlbUVudHJ5LFxyXG5cdFx0XHRcdGl0ZW1FbnRyeVxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdFx0aXRlbUVudHJpZXMucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuZm9yRWFjaENvbGxlY3Rpb24ocmVtb3ZlQ29sbGVjdGlvbk1hcCwgJ3JlbW92ZUl0ZW1zJyk7XHJcblx0XHR0aGlzLmZvckVhY2hDb2xsZWN0aW9uKGFkZENvbGxlY3Rpb25NYXAsICdhZGRJdGVtcycpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhZGRDb2xsZWN0aW9uTWFwRW50cnkgKGNvbGxlY3Rpb25NYXAsIHBhcmVudElkLCBpdGVtRW50cnksIHZhbHVlKSB7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uTWFwRW50cnkgPSBjcmVhdGVQYXRoKFxyXG5cdFx0XHRjb2xsZWN0aW9uTWFwLFxyXG5cdFx0XHRbaXRlbUVudHJ5LnBhcmVudC5pdGVtVHlwZSwgcGFyZW50SWQsIGl0ZW1FbnRyeS5pdGVtVHlwZV0sXHJcblx0XHRcdFt7fSwge30sIFtdXVxyXG5cdFx0KTtcclxuXHJcblx0XHRjb2xsZWN0aW9uTWFwRW50cnkucHVzaCh2YWx1ZSk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGZvckVhY2hDb2xsZWN0aW9uIChjb2xsZWN0aW9uTWFwLCBtZXRob2QpIHtcclxuXHRcdGZvciAoY29uc3QgcGFyZW50VHlwZSBpbiBjb2xsZWN0aW9uTWFwKSB7XHJcblx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gY29sbGVjdGlvbk1hcFtwYXJlbnRUeXBlXSkge1xyXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gY29sbGVjdGlvbk1hcFtwYXJlbnRUeXBlXVtwYXJlbnRJZF0pIHtcclxuXHRcdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZW50cmllcy5nZXRCeVBhcmVudChwYXJlbnRUeXBlLCBwYXJlbnRJZCwgaXRlbVR5cGUpO1xyXG5cclxuXHRcdFx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkgPT09IG51bGwpXHJcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyeVttZXRob2RdKFxyXG5cdFx0XHRcdFx0XHRjb2xsZWN0aW9uTWFwW3BhcmVudFR5cGVdW3BhcmVudElkXVtpdGVtVHlwZV0sXHJcblx0XHRcdFx0XHRcdG51bGwsXHJcblx0XHRcdFx0XHRcdHRydWVcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBub3RlOiB3aXRoIHRoZSBuZXcgaXRlbSBzdHJ1Y3R1cmUsICphbGwqIGxvY2FsIGl0ZW1zIGFyZSBpbiB0aGUgc2luZ2xlIGl0ZW0gY2FjaGVcclxuXHRwcml2YXRlIG9uSXRlbXNDcmVhdGVkIChcclxuXHRcdGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAsXHJcblx0XHRzaW5nbGVJdGVtczogSXRlbUVudHJ5W10sXHJcblx0XHRjb2xsZWN0aW9uczogQ29sbGVjdGlvbkVudHJ5W11cclxuXHQpIHtcclxuXHRcdGlmICghaGFzUHJvcGVydGllcyhjb252ZXJzaW9uTWFwKSlcclxuXHRcdFx0cmV0dXJuO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIGNvbGxlY3Rpb25zKSB7XHJcblx0XHRcdGNvbnN0IHBhcmVudCA9IGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQ7XHJcblx0XHRcdGNvbnN0IHVwZGF0ZWRDb2x1bW5zOiB7W2NvbHVtbklkOiBzdHJpbmddOiBDb2x1bW5JbmZvfSA9XHJcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LmdldFVwZGF0ZWRJdGVtQ29sdW1ucyhjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHRcdGlmIChwYXJlbnQgIT09IG51bGwpIHtcclxuXHRcdFx0XHRjb25zdCBuZXdQYXJlbnRJZCA9IHRoaXMuZ2V0TWFwVmFsdWUocGFyZW50Lml0ZW1UeXBlLCBwYXJlbnQuaXRlbUlkLCBjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHRcdFx0aWYgKG5ld1BhcmVudElkICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdHBhcmVudC5pdGVtSWQgPSBuZXdQYXJlbnRJZDtcclxuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5xdWVyeSA9IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jcmVhdGVRdWVyeShjb2xsZWN0aW9uRW50cnkub3B0aW9ucyk7XHJcblxyXG5cdFx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlci5lbnRyaWVzLmFkZChjb2xsZWN0aW9uRW50cnkpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCFoYXNQcm9wZXJ0aWVzKHVwZGF0ZWRDb2x1bW5zKSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGlmICh1cGRhdGVkQ29sdW1ucy5pZCAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5vbkl0ZW1zQ3JlYXRlZChjb252ZXJzaW9uTWFwW2NvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZV0pO1xyXG5cclxuXHRcdFx0Ly8gd2hlbiB1cGRhdGluZyBhbiBpdGVtIHRvIHJlZmVyIHRvIGEgbmV3bHkgY3JlYXRlZCBpdGVtLCB0aGUgdXBkYXRlZCBpdGVtIHdpbGwgKm5vdCogYmUgYWRkZWQgdG9cclxuXHRcdFx0Ly8gc2luZ2xlIGl0ZW1zIChlLmcuIG1vdmluZyBhIGZ1bmN0aW9uIHRvIGEgbmV3bHkgY3JlYXRlZCBmdW5jdGlvbiBncm91cClcclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgY29sbGVjdGlvbkVudHJ5Lml0ZW1zKVxyXG5cdFx0XHRcdGl0ZW1FbnRyeS51cGRhdGVJdGVtRmllbGRzKGNvbnZlcnNpb25NYXApO1xyXG5cdFx0fVxyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIHNpbmdsZUl0ZW1zKSB7XHJcblx0XHRcdGNvbnN0IHBhcmVudCA9IGl0ZW1FbnRyeS5wYXJlbnQ7XHJcblxyXG5cdFx0XHRpdGVtRW50cnkudXBkYXRlSXRlbUZpZWxkcyhjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHRcdGlmIChwYXJlbnQgIT09IG51bGwpIHtcclxuXHRcdFx0XHRjb25zdCBuZXdQYXJlbnRJZCA9IHRoaXMuZ2V0TWFwVmFsdWUocGFyZW50Lml0ZW1UeXBlLCBwYXJlbnQuaXRlbUlkLCBjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHRcdFx0aWYgKG5ld1BhcmVudElkICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRwYXJlbnQuaXRlbUlkID0gbmV3UGFyZW50SWQ7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIHByb3BlciBvcmRlcjogY3JlYXRlIC0gbW92ZSAtIGRlbGV0ZSAtIHVwZGF0ZVxyXG5cdGV4ZWN1dGUgKFxyXG5cdFx0c2luZ2xlSXRlbXM6IEl0ZW1FbnRyeVtdLFxyXG5cdFx0Y29sbGVjdGlvbnM6IENvbGxlY3Rpb25FbnRyeVtdLFxyXG5cdFx0cGFyYW1ldGVyczogQ3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCA9IHt9LFxyXG5cdFx0YnJlYWt1cEJ5UGFyZW50PzogYm9vbGVhbixcclxuXHRcdG9uQWZ0ZXJDcmVhdGVDYWxsYmFjaz86IChjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwKSA9PiB2b2lkXHJcblx0KTogUHJvbWlzZUludGVyZmFjZTxJdGVtSWRDb252ZXJzaW9uTWFwPiB7XHJcblx0XHRjb25zdCBlcnJvckhhbmRsZXIgPSB0aGlzLmVycm9ySGFuZGxlcjtcclxuXHRcdGNvbnN0IGNoYW5nZXNDb21waWxhdGlvbiA9IHRoaXMuY2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeS5jb25zdHJ1Y3Qoc2luZ2xlSXRlbXMsIGNvbGxlY3Rpb25zKTtcclxuXHRcdGNvbnN0IGNvbXBpbGF0aW9uID0gY2hhbmdlc0NvbXBpbGF0aW9uLmNvbXBpbGF0aW9uO1xyXG5cdFx0Y29uc3QgY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCA9IHt9O1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmV4ZWN1dGVDcmVhdGVSZXF1ZXN0cyhcclxuXHRcdFx0Y2hhbmdlc0NvbXBpbGF0aW9uLFxyXG5cdFx0XHRwYXJhbWV0ZXJzLFxyXG5cdFx0XHRjb252ZXJzaW9uTWFwLFxyXG5cdFx0XHRicmVha3VwQnlQYXJlbnQsXHJcblx0XHRcdG9uQWZ0ZXJDcmVhdGVDYWxsYmFja1xyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5vbkl0ZW1zQ3JlYXRlZChjb252ZXJzaW9uTWFwLCBzaW5nbGVJdGVtcywgY29sbGVjdGlvbnMpO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5leGVjdXRlTW92ZVJlcXVlc3RzKGNvbXBpbGF0aW9uLm1vdmUsIGNvbnZlcnNpb25NYXApO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRlcnJvciA9PiB7XHJcblx0XHRcdFx0dGhpcy5vbkl0ZW1zQ3JlYXRlZChjb252ZXJzaW9uTWFwLCBzaW5nbGVJdGVtcywgY29sbGVjdGlvbnMpO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gZXJyb3JIYW5kbGVyLnJlamVjdChlcnJvcik7XHJcblx0XHRcdH1cclxuXHRcdCkudGhlbihcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLmV4ZWN1dGVVcGRhdGVSZXF1ZXN0cyhjb21waWxhdGlvbi51cGRhdGUsIHBhcmFtZXRlcnMpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5leGVjdXRlRGVsZXRlUmVxdWVzdHMoY29tcGlsYXRpb24uZGVsZXRlKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIGNvbnZlcnNpb25NYXA7XHJcblx0XHRcdH0sXHJcblx0XHRcdGVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IFF1ZXJ5TWF0Y2hlckZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25NYXRjaFJlc3VsdCwgRW50cnlQYXJlbnROdWxsLCBGaWVsZE1hcCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5lbnVtIENPTlNUQU5UUyB7XHJcblx0TUFZQkUgPSAnbWF5YmUnXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uQ2FjaGUge1xyXG5cdGVudHJpZXM6IHtcclxuXHRcdFtpdGVtVHlwZTogc3RyaW5nXToge1xyXG5cdFx0XHRbY29sbGVjdGlvbkVudHJ5SWQ6IG51bWJlcl06IENvbGxlY3Rpb25FbnRyeVxyXG5cdFx0fVxyXG5cdH0gPSB7fTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5XHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0Y29udGFpbnMgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KTogYm9vbGVhbiB7XHJcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2NvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZV07XHJcblxyXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdHJldHVybiBlbnRyaWVzW2NvbGxlY3Rpb25FbnRyeS5pZF0gIT09IHVuZGVmaW5lZDtcclxuXHR9XHJcblxyXG5cdHNvbWUgKGNhbGxiYWNrOiAoZW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4gYm9vbGVhbik6IGJvb2xlYW4ge1xyXG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGVudHJpZXMpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdFx0aWYgKGNhbGxiYWNrKGVudHJpZXNbaXRlbVR5cGVdW2VudHJ5SWRdKSlcclxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Ly8gVE9ETzogY2hlY2sgaWYgdGhpcyBpcyBzdGlsbCBpbiB1c2VcclxuXHRmb3JFYWNoIChjYWxsYmFjazogKGVudHJ5OiBDb2xsZWN0aW9uRW50cnkpID0+IHZvaWQpOiB2b2lkIHtcclxuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBlbnRyaWVzKSB7XHJcblx0XHRcdGZvciAoY29uc3QgZW50cnlJZCBpbiBlbnRyaWVzW2l0ZW1UeXBlXSlcclxuXHRcdFx0XHRjYWxsYmFjayhlbnRyaWVzW2l0ZW1UeXBlXVtlbnRyeUlkXSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHR0b0FycmF5ICgpIHtcclxuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XHJcblx0XHRjb25zdCByZXN1bHQ6IENvbGxlY3Rpb25FbnRyeVtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBlbnRyaWVzKSB7XHJcblx0XHRcdGZvciAoY29uc3QgZW50cnlJZCBpbiBlbnRyaWVzW2l0ZW1UeXBlXSlcclxuXHRcdFx0XHRyZXN1bHQucHVzaChlbnRyaWVzW2l0ZW1UeXBlXVtlbnRyeUlkXSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGFkZCAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpOiBDb2xsZWN0aW9uRW50cnkge1xyXG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlO1xyXG5cclxuXHRcdGlmIChlbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRlbnRyaWVzW2l0ZW1UeXBlXSA9IHt9O1xyXG5cclxuXHRcdHJldHVybiBlbnRyaWVzW2l0ZW1UeXBlXVtjb2xsZWN0aW9uRW50cnkuaWRdID0gY29sbGVjdGlvbkVudHJ5O1xyXG5cdH1cclxuXHJcblx0Y2xlYXIgKGNvbGxlY3Rpb25FbnRyeT86IENvbGxlY3Rpb25FbnRyeSk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdHRoaXMuZW50cmllcyA9IHt9O1xyXG5cclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCF0aGlzLmNvbnRhaW5zKGNvbGxlY3Rpb25FbnRyeSkpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRyZXR1cm4gZGVsZXRlIHRoaXMuZW50cmllc1tjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGVdW2NvbGxlY3Rpb25FbnRyeS5pZF07XHJcblx0fVxyXG5cclxuXHRnZXRCeUl0ZW1UeXBlIChpdGVtVHlwZTogc3RyaW5nKSB7XHJcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcclxuXHRcdGNvbnN0IHJlc3VsdDogQ29sbGVjdGlvbkVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cclxuXHRcdGZvciAoY29uc3QgZW50cnlJZCBpbiBlbnRyaWVzKVxyXG5cdFx0XHRyZXN1bHQucHVzaChlbnRyaWVzW2VudHJ5SWRdKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0bWF0Y2hQYXJlbnQgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LCBpdGVtVHlwZTogc3RyaW5nLCBpdGVtSWQpIHtcclxuXHRcdGNvbnN0IHBhcmVudCA9IGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQ7XHJcblxyXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdC8vID09IHRvIGNvbXBhcmUgaXRlbUlkc1xyXG5cdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcclxuXHRcdHJldHVybiBwYXJlbnQuaXRlbVR5cGUgPT09IGl0ZW1UeXBlICYmIHBhcmVudC5pdGVtSWQgPT0gaXRlbUlkO1xyXG5cdH1cclxuXHJcblx0Ly8gVE9ETzogdGhpbmsgb2YgYmV0dGVyIG5hbWVcclxuXHRnZXRCeVBhcmVudCAocGFyZW50VHlwZSwgcGFyZW50SWQsIGl0ZW1UeXBlKTogQ29sbGVjdGlvbkVudHJ5IHwgbnVsbCB7XHJcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcclxuXHJcblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllcykge1xyXG5cdFx0XHRpZiAodGhpcy5tYXRjaFBhcmVudChlbnRyaWVzW2VudHJ5SWRdLCBwYXJlbnRUeXBlLCBwYXJlbnRJZCkpXHJcblx0XHRcdFx0cmV0dXJuIGVudHJpZXNbZW50cnlJZF07XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIG51bGw7XHJcblx0fVxyXG5cclxuXHRnZXRSZXNvdXJjZUJ5UGFyZW50IChwYXJlbnRUeXBlLCBwYXJlbnRJZCwgaXRlbVR5cGUpOiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsIHtcclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuZ2V0QnlQYXJlbnQocGFyZW50VHlwZSwgcGFyZW50SWQsIGl0ZW1UeXBlKTtcclxuXHJcblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ID09PSBudWxsKVxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHJcblx0XHRyZXR1cm4gY29sbGVjdGlvbkVudHJ5LmdldEN1cnJlbnRSZXNvdXJjZSgpO1xyXG5cdH1cclxuXHJcblx0Z2V0Q29sbGVjdGlvbnNCeVBhcmVudCAocGFyZW50VHlwZSwgcGFyZW50SWQpIHtcclxuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XHJcblx0XHRjb25zdCByZXN1bHQ6IENvbGxlY3Rpb25FbnRyeVtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBlbnRyaWVzKSB7XHJcblx0XHRcdGZvciAoY29uc3QgZW50cnlJZCBpbiBlbnRyaWVzW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGVudHJpZXNbaXRlbVR5cGVdW2VudHJ5SWRdO1xyXG5cclxuXHRcdFx0XHRpZiAodGhpcy5tYXRjaFBhcmVudChjb2xsZWN0aW9uRW50cnksIHBhcmVudFR5cGUsIHBhcmVudElkKSlcclxuXHRcdFx0XHRcdHJlc3VsdC5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogT25seSByZXNvdXJjZXNcclxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaXRlbVR5cGVcclxuXHQgKiBAcGFyYW0ge1N0cmluZ3xJbnRlZ2VyfSBpdGVtSWRcclxuXHQgKiBAcmV0dXJucyB7T2JqZWN0fSBBcnJheSBvZiBjb2xsZWN0aW9ucy5cclxuXHQgKi9cclxuXHRnZXRCeUNvbnRhaW5pbmdJdGVtIChpdGVtVHlwZSwgaXRlbUlkKSB7XHJcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcclxuXHRcdGNvbnN0IHJlc3VsdDogQ29sbGVjdGlvbkVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cclxuXHRcdGZvciAoY29uc3QgZW50cnlJZCBpbiBlbnRyaWVzKSB7XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGVudHJpZXNbZW50cnlJZF07XHJcblxyXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LmdldEl0ZW1CeUlkKGl0ZW1JZCkgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRyZXN1bHQucHVzaChjb2xsZWN0aW9uRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGNvbGxlY3Rpb25zIHRoZSBpdGVtICdiZWxvbmdzJyBpbi5cclxuXHQgKi9cclxuXHRnZXRCeUZpdHRpbmdJdGVtIChpdGVtVHlwZTogSXRlbVR5cGUsIGZpZWxkczogRmllbGRNYXAsIHBhcmVudDogRW50cnlQYXJlbnROdWxsKSB7XHJcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcclxuXHRcdGNvbnN0IHJlc3VsdDogQ29sbGVjdGlvbk1hdGNoUmVzdWx0ID0ge2ZpdHRpbmc6IFtdLCBub3RmaXR0aW5nOiBbXSwgbWF5YmU6IFtdfTtcclxuXHJcblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cclxuXHRcdC8vIGNvbnNvbGUudGltZSgnZ2V0QnlGaXR0aW5nSXRlbScpO1xyXG5cclxuXHRcdGNvbnN0IHF1ZXJ5TWF0Y2hlciA9IHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIGZpZWxkcywgcGFyZW50KTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllcykge1xyXG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBlbnRyaWVzW2VudHJ5SWRdO1xyXG5cdFx0XHRjb25zdCBtYXRjaFJlc3VsdCA9IHF1ZXJ5TWF0Y2hlci5tYXRjaFF1ZXJ5KGNvbGxlY3Rpb25FbnRyeS5xdWVyeS5vYmplY3QpO1xyXG5cclxuXHRcdFx0Ly8gVE9ETzogbWF5YmU/XHJcblx0XHRcdGlmIChtYXRjaFJlc3VsdCA9PT0gdHJ1ZSkgLy8gbWlnaHQgYWxzbyByZXR1cm4gJ21heWJlJ1xyXG5cdFx0XHRcdHJlc3VsdC5maXR0aW5nLnB1c2goY29sbGVjdGlvbkVudHJ5KTtcclxuXHRcdFx0ZWxzZSBpZiAobWF0Y2hSZXN1bHQgPT09IENPTlNUQU5UUy5NQVlCRSlcclxuXHRcdFx0XHRyZXN1bHQubWF5YmUucHVzaChjb2xsZWN0aW9uRW50cnkpO1xyXG5cdFx0XHRlbHNlXHJcblx0XHRcdFx0cmVzdWx0Lm5vdGZpdHRpbmcucHVzaChjb2xsZWN0aW9uRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIGNvbnNvbGUudGltZUVuZCgnZ2V0QnlGaXR0aW5nSXRlbScpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRnZXRCeVF1ZXJ5IChpdGVtVHlwZSwgcXVlcnkpOiBDb2xsZWN0aW9uRW50cnkgfCBudWxsIHtcclxuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xyXG5cclxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cclxuXHRcdGZvciAoY29uc3QgZW50cnlJZCBpbiBlbnRyaWVzKSB7XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGVudHJpZXNbZW50cnlJZF07XHJcblxyXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LnF1ZXJ5LnN0cmluZyA9PT0gcXVlcnkuc3RyaW5nKVxyXG5cdFx0XHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIG51bGw7XHJcblx0fVxyXG5cclxuXHRnZXRCeUtleSAoaXRlbVR5cGUsIGVudHJ5S2V5KSB7XHJcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcclxuXHRcdGNvbnN0IHJlc3VsdDogQ29sbGVjdGlvbkVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cclxuXHRcdGZvciAoY29uc3QgZW50cnlJZCBpbiBlbnRyaWVzKSB7XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGVudHJpZXNbZW50cnlJZF07XHJcblxyXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5Lm9wdGlvbnMuZW50cnlLZXkgPT09IGVudHJ5S2V5KVxyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdldFJlc291cmNlQnlLZXkgKGl0ZW1UeXBlLCByZXNvdXJjZUtleSkge1xyXG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XHJcblx0XHRjb25zdCByZXN1bHQ6IENvbGxlY3Rpb25SZXNvdXJjZVtdID0gW107XHJcblxyXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllcykge1xyXG5cdFx0XHRjb25zdCByZXNvdXJjZXMgPSBlbnRyaWVzW2VudHJ5SWRdLnJlc291cmNlcztcclxuXHJcblx0XHRcdGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgcmVzb3VyY2VzKSB7XHJcblx0XHRcdFx0aWYgKHJlc291cmNlLm9wdGlvbnMucmVzb3VyY2VLZXkgPT09IHJlc291cmNlS2V5KVxyXG5cdFx0XHRcdFx0cmVzdWx0LnB1c2gocmVzb3VyY2UpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcblxyXG5pbXBvcnQgeyBRdWVyeVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgUXVlcnlQYXJzZXJGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgSXRlbUlkIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgc2hhbGxvd01lcmdlIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlIHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIHF1ZXJ5UGFyc2VyRmFjdG9yeTogUXVlcnlQYXJzZXJGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZVxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdC8vIG5vIG5lZWQgdG8gd29ycnkgYWJvdXQgdGhlIGNvbHVtbnMgcHJvcGVydHksIGl0IHdpbGwgYmUgcmVwbGFjZWQgaW4gd2hlbiBjb2x1bW5zIGFyZSBleHBhbmRlZFxyXG5cdGNsb25lT3B0aW9ucyAob3B0aW9ucywgcGFyZW50KSB7XHJcblx0XHRjb25zdCByZXN1bHQgPSB0aGlzLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpOyAvLyBkb2VzIGEgc2hhbGxvdyBjb3B5XHJcblxyXG5cdFx0cmVzdWx0LnF1ZXJ5UGFyYW1zID0gdGhpcy5jbG9uZVF1ZXJ5UGFyYW1zKG9wdGlvbnMucXVlcnlQYXJhbXMpO1xyXG5cdFx0cmVzdWx0LnBhcmVudCA9IHBhcmVudDtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Y2xvbmVRdWVyeVBhcmFtcyAocGFyYW1ldGVycykge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gcGFyYW1ldGVycykge1xyXG5cdFx0XHRjb25zdCB2YWx1ZSA9IHBhcmFtZXRlcnNba2V5XTtcclxuXHRcdFx0bGV0IGNsb25lO1xyXG5cclxuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKVxyXG5cdFx0XHRcdGNsb25lID0gdmFsdWUuc2xpY2UoKTsgLy8gd2UncmUgb25seSB1c2luZyBwcmltaXRpdmUgYXJyYXlzXHJcblx0XHRcdGVsc2UgaWYgKG1vbWVudC5pc01vbWVudCh2YWx1ZSkpXHJcblx0XHRcdFx0Y2xvbmUgPSB2YWx1ZS5jbG9uZSgpO1xyXG5cdFx0XHRlbHNlXHJcblx0XHRcdFx0Y2xvbmUgPSB2YWx1ZTtcclxuXHJcblx0XHRcdHJlc3VsdFtrZXldID0gY2xvbmU7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHByb2Nlc3NPcHRpb25zIChvcHRpb25zKSB7XHJcblx0XHRyZXR1cm4gc2hhbGxvd01lcmdlKFxyXG5cdFx0XHRvcHRpb25zLFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0Y29sdW1uczogW10sXHJcblx0XHRcdFx0cXVlcnk6IG51bGwsXHJcblx0XHRcdFx0cXVlcnlJdGVtVHlwZTogbnVsbCxcclxuXHRcdFx0XHRxdWVyeVBhcmFtczoge30sXHJcblx0XHRcdFx0cGFyZW50OiBudWxsLFxyXG5cdFx0XHRcdGRlZmVyUmVxdWVzdDogZmFsc2UsXHJcblx0XHRcdFx0bGltaXQ6IG51bGwsXHJcblx0XHRcdFx0ZW50cnlLZXk6ICcnXHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRjcmVhdGVRdWVyeSAob3B0aW9ucykge1xyXG5cdFx0Y29uc3QgcGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XHJcblxyXG5cdFx0bGV0IHF1ZXJ5O1xyXG5cclxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXHJcblx0XHRcdHF1ZXJ5ID0gb3B0aW9ucy5xdWVyeTtcclxuXHRcdGVsc2Uge1xyXG5cdFx0XHRjb25zdCBsaW5rZWRUb1F1ZXJ5ID0ge2xpbmtlZFRvOiBwYXJlbnQuaXRlbVR5cGUsIHF1ZXJ5OiB7aWQ6ICcmcGFyZW50SWQnfX07XHJcblx0XHRcdG9wdGlvbnMucXVlcnlQYXJhbXMucGFyZW50SWQgPSBwYXJlbnQuaXRlbUlkO1xyXG5cclxuXHRcdFx0cXVlcnkgPSBvcHRpb25zLnF1ZXJ5ID09PSBudWxsID9cclxuXHRcdFx0XHRsaW5rZWRUb1F1ZXJ5IDpcclxuXHRcdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5hZGRBbmRDb25kaXRpb24ob3B0aW9ucy5xdWVyeSwgbGlua2VkVG9RdWVyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgcGFyc2VkUXVlcnkgPSB0aGlzLnF1ZXJ5UGFyc2VyRmFjdG9yeS5jb25zdHJ1Y3QocXVlcnksIG9wdGlvbnMucXVlcnlQYXJhbXMpLnBhcnNlKCk7XHJcblxyXG5cdFx0cmV0dXJuIHtvYmplY3Q6IHBhcnNlZFF1ZXJ5WzBdLCBzdHJpbmc6IHBhcnNlZFF1ZXJ5WzFdfTtcclxuXHR9XHJcblxyXG5cdGdldElkQXJyYXkgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgYWNjdW11bGF0b3IpOiBJdGVtSWRbXSB7XHJcblx0XHRpZiAoYWNjdW11bGF0b3IgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0YWNjdW11bGF0b3IgPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcclxuXHRcdFx0YWNjdW11bGF0b3IucHVzaChpdGVtRW50cnkuaXRlbUlkKTtcclxuXHJcblx0XHRyZXR1cm4gYWNjdW11bGF0b3I7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBAcGFyYW0ge0l0ZW1FbnRyeVtdfSBpdGVtRW50cmllc1xyXG5cdCAqIEBwYXJhbSB7KGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBib29sZWFufSBjYWxsYmFja1xyXG5cdCAqIEByZXR1cm5zIHtJdGVtRW50cnlbXX1cclxuXHQgKlxyXG5cdCAqIGZpbHRlciBhbiBhcnJheSBhY2NvcmRpbmcgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLiBSZXR1cm4gdGhlIGVudHJpZXMgdGhhdCBmYWlsZWQgdGhlIGNvbmRpdGlvblxyXG5cdCAqIFJlcGxhY2UgdGhlIGdpdmVuIGFycmF5IHdpdGggdGhlIGVudHJpZXMgdGhhdCBkaWRuJ3QgZmFpbCB0aGUgY29uZGl0aW9uLlxyXG5cdCAqL1xyXG5cdGZpbHRlckFycmF5IChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGNhbGxiYWNrOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGJvb2xlYW4pIHtcclxuXHRcdGNvbnN0IGZpbHRlcmVkRW50cmllczogSXRlbUVudHJ5W10gPSBbXTtcclxuXHRcdGNvbnN0IHJlbW92ZWRFbnRyaWVzOiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxyXG5cdFx0XHQoY2FsbGJhY2soaXRlbUVudHJ5KSA/IGZpbHRlcmVkRW50cmllcyA6IHJlbW92ZWRFbnRyaWVzKS5wdXNoKGl0ZW1FbnRyeSk7XHJcblxyXG5cdFx0aWYgKHJlbW92ZWRFbnRyaWVzLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuIHJlbW92ZWRFbnRyaWVzO1xyXG5cclxuXHRcdGl0ZW1FbnRyaWVzLmxlbmd0aCA9IGZpbHRlcmVkRW50cmllcy5sZW5ndGg7XHJcblxyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtRW50cmllcy5sZW5ndGg7IGkrKylcclxuXHRcdFx0aXRlbUVudHJpZXNbaV0gPSBmaWx0ZXJlZEVudHJpZXNbaV07XHJcblxyXG5cdFx0cmV0dXJuIHJlbW92ZWRFbnRyaWVzO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBpZGVudGl0eSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uLyc7XHJcbmltcG9ydCB7XHJcblx0QmF0Y2hTdGF0dXMsXHJcblx0Q29sbGVjdGlvbkNhY2hlLFxyXG5cdENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXHJcblx0Q29sbGVjdGlvbk1hdGNoZXIsXHJcblx0Q29sdW1uRXhwYW5zaW9uLFxyXG5cdENvbHVtbkhhbmRsZXIsXHJcblx0Q29sdW1uU2V0LFxyXG5cdEl0ZW1DYWNoZSxcclxuXHRJdGVtSGFuZGxlcixcclxuXHRJdGVtUmVxdWVzdFNlcnZpY2UsXHJcblx0S2V5U2VydmljZSxcclxuXHRRdWVyeVNlcnZpY2VcclxufSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgRU5UUllfU1RBVFVTIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcclxuaW1wb3J0IHtcclxuXHRCYXRjaFN0YXR1c0ZhY3RvcnksXHJcblx0Q29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcclxuXHRDb2xsZWN0aW9uRW50cnlGYWN0b3J5LFxyXG5cdENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcclxuXHRDb2x1bW5TZXRGYWN0b3J5LFxyXG5cdFF1ZXJ5UGFyc2VyRmFjdG9yeVxyXG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHtcclxuXHRBcGlSZXF1ZXN0Q29sdW1uLFxyXG5cdENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwLFxyXG5cdEVudHJ5UGFyZW50LFxyXG5cdEVudHJ5U3RhdHVzLFxyXG5cdEl0ZW1FbnRyeVBhcmVudElkTWFwLFxyXG5cdEl0ZW1JZCxcclxuXHRJdGVtUmVzb3VyY2VJdGVtSWRNYXAsXHJcblx0SXRlbVR5cGVcclxufSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5pbXBvcnQgeyBoYXNQcm9wZXJ0aWVzIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uSGFuZGxlciB7XHJcblx0ZW50cmllczogQ29sbGVjdGlvbkNhY2hlO1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGJhdGNoU3RhdHVzRmFjdG9yeTogQmF0Y2hTdGF0dXNGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlGYWN0b3J5OiBDb2xsZWN0aW9uRW50cnlGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnk6IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sdW1uSGFuZGxlcjogQ29sdW1uSGFuZGxlcixcclxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcclxuXHRcdHByaXZhdGUgaXRlbVJlcXVlc3RTZXJ2aWNlOiBJdGVtUmVxdWVzdFNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgcXVlcnlQYXJzZXJGYWN0b3J5OiBRdWVyeVBhcnNlckZhY3RvcnksXHJcblx0XHRwcml2YXRlIHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlXHJcblx0KSB7XHJcblx0XHR0aGlzLmVudHJpZXMgPSB0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBAZGVwcmVjYXRlZCwgdXNlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeVxyXG5cdCAqL1xyXG5cdHJlbW92ZUZyb21BbmRBZGRUb0NvbGxlY3Rpb25zIChjb2xsZWN0aW9uTWFwLCB1cGRhdGVJbml0aWFsPykge1xyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gY29sbGVjdGlvbk1hcCkge1xyXG5cdFx0XHRjb25zdCBlbnRyeSA9IGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXTtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbjogQ29sbGVjdGlvbkVudHJ5ID0gZW50cnkuY29sbGVjdGlvbjtcclxuXHJcblx0XHRcdGNvbGxlY3Rpb24ucmVtb3ZlSXRlbXMoZW50cnkubm90Zml0dGluZywgbnVsbCwgdHJ1ZSk7XHJcblx0XHRcdGNvbGxlY3Rpb24uYWRkSXRlbXMoZW50cnkuZml0dGluZywgbnVsbCwgdHJ1ZSk7IC8vIGRvZXNuJ3QgZG8gYW55dGhpbmcgd2l0aCBpbml0aWFsXHJcblxyXG5cdFx0XHRpZiAoZW50cnkubWF5YmUubGVuZ3RoID4gMClcclxuXHRcdFx0XHRjb2xsZWN0aW9uLmV4dGVuZChpZGVudGl0eSwgbnVsbCwgdHJ1ZSwgdXBkYXRlSW5pdGlhbCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRnZXRDb2xsZWN0aW9uTWF0Y2hlciAoKTogQ29sbGVjdGlvbk1hdGNoZXIge1xyXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdChbdGhpcy5lbnRyaWVzXSwgdHJ1ZSwgdHJ1ZSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBAZGVwcmVjYXRlZCwgdXNlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeVxyXG5cdCAqL1xyXG5cdHJlbW92ZUZyb21Db2xsZWN0aW9ucyAoY29sbGVjdGlvbk1hcCwgdXBkYXRlSW5pdGlhbD8sIHJlc3VsdFJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsID0gbnVsbCkge1xyXG5cdFx0bGV0IHJlc3VsdDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XHJcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gY29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdO1xyXG5cdFx0XHRjb25zdCBmaXR0aW5nID0gbWFwRW50cnkuZml0dGluZztcclxuXHRcdFx0Y29uc3QgbWF5YmUgPSBtYXBFbnRyeS5tYXliZTtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkgPSBtYXBFbnRyeS5jb2xsZWN0aW9uO1xyXG5cdFx0XHRjb25zdCBpZEFycmF5OiBJdGVtSWRbXSA9IFtdO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBmaXR0aW5nSXRlbSBvZiBmaXR0aW5nKVxyXG5cdFx0XHRcdGlkQXJyYXkucHVzaChmaXR0aW5nSXRlbS5pdGVtSWQpO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBtYXliZUl0ZW0gb2YgbWF5YmUpXHJcblx0XHRcdFx0aWRBcnJheS5wdXNoKG1heWJlSXRlbSk7XHJcblxyXG5cdFx0XHRpZiAocmVzdWx0UmVzb3VyY2UgIT09IG51bGwgJiYgY29sbGVjdGlvbkVudHJ5ID09PSByZXN1bHRSZXNvdXJjZS5lbnRyeSlcclxuXHRcdFx0XHRyZXN1bHQgPSBjb2xsZWN0aW9uRW50cnkucmVtb3ZlSXRlbXMoaWRBcnJheSwgcmVzdWx0UmVzb3VyY2UsIHVwZGF0ZUluaXRpYWwpO1xyXG5cdFx0XHRlbHNlXHJcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGlkQXJyYXksIG51bGwsIHVwZGF0ZUluaXRpYWwpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHQvLyBUT0RPOiBtYXliZSwgYm9vbGVhbiBpbnN0ZWFkIG9mIG1lc3NhZ2VcclxuXHQvKipcclxuXHQgKiBAZGVwcmVjYXRlZCwgdXNlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeVxyXG5cdCAqL1xyXG5cdGFkZFRvQ29sbGVjdGlvbnMgKGNvbGxlY3Rpb25NYXAsIHVwZGF0ZUluaXRpYWw6IGJvb2xlYW4sIHJlc3VsdFJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsID0gbnVsbCk6IEl0ZW1SZXNvdXJjZVtdIHtcclxuXHRcdGxldCByZXN1bHQ7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gY29sbGVjdGlvbk1hcCkge1xyXG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXTtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gbWFwRW50cnkuY29sbGVjdGlvbjtcclxuXHJcblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXNEZWZlcnJlZCgpKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0aWYgKHJlc3VsdFJlc291cmNlICE9PSBudWxsICYmIGNvbGxlY3Rpb25FbnRyeSA9PT0gcmVzdWx0UmVzb3VyY2UuZW50cnkpXHJcblx0XHRcdFx0cmVzdWx0ID0gY29sbGVjdGlvbkVudHJ5LmFkZEl0ZW1zKG1hcEVudHJ5LmZpdHRpbmcsIHJlc3VsdFJlc291cmNlLCB1cGRhdGVJbml0aWFsKTtcclxuXHRcdFx0ZWxzZVxyXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5hZGRJdGVtcyhtYXBFbnRyeS5maXR0aW5nLCBudWxsLCB1cGRhdGVJbml0aWFsKTtcclxuXHJcblx0XHRcdGlmICh1cGRhdGVJbml0aWFsICYmIG1hcEVudHJ5Lm1heWJlLmxlbmd0aCA+IDApXHJcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LmV4dGVuZChpZGVudGl0eSwgbnVsbCwgdHJ1ZSwgdXBkYXRlSW5pdGlhbCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGJhdGNoRXhwYW5kIChcclxuXHRcdHBhcmVudFR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0Y29sbGVjdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZVtdLFxyXG5cdFx0bmV3Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbltdXHJcblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uUmVzb3VyY2VbXT4ge1xyXG5cdFx0aWYgKG5ld0NvbHVtbnMubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGNvbGxlY3Rpb25zKTtcclxuXHJcblx0XHRjb25zdCBwYXJlbnRJZEFycmF5OiBJdGVtSWRbXSA9IFtdO1xyXG5cdFx0bGV0IGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdC8vIFRPRE86IGZpbHRlciBsb2NhbCBpdGVtcz9cclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGNvbGxlY3Rpb25zKSB7XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGNvbGxlY3Rpb25zW3BhcmVudElkXS5lbnRyeTtcclxuXHJcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5kZWZlcigpO1xyXG5cclxuXHRcdFx0cGFyZW50SWRBcnJheS5wdXNoKCg8RW50cnlQYXJlbnQ+IGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQpLml0ZW1JZCk7XHJcblx0XHRcdGl0ZW1FbnRyaWVzID0gaXRlbUVudHJpZXMuY29uY2F0KGNvbGxlY3Rpb25FbnRyeS5pdGVtcyk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RMaW5rSXRlbXMoXHJcblx0XHRcdHBhcmVudFR5cGUsXHJcblx0XHRcdHBhcmVudElkQXJyYXksXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRudWxsLFxyXG5cdFx0XHRuZXdDb2x1bW5zXHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzRXhwYW5zaW9uKFxyXG5cdFx0XHRcdFx0bmV3Q29sdW1ucyxcclxuXHRcdFx0XHRcdHJlc3BvbnNlLFxyXG5cdFx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0XHRpdGVtRW50cmllc1xyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgb2YgcGFyZW50SWRBcnJheSkge1xyXG5cdFx0XHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gY29sbGVjdGlvbnNbcGFyZW50SWRdLmVudHJ5O1xyXG5cclxuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5leHBhbmRDb2x1bW5zKGNvbHVtbkV4cGFuc2lvbik7XHJcblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuX3Jlc29sdmUoKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldHVybiBjb2xsZWN0aW9ucztcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGJhdGNoRXh0ZW5kIChcclxuXHRcdHBhcmVudFR5cGU6IHN0cmluZyxcclxuXHRcdGl0ZW1UeXBlOiBzdHJpbmcsXHJcblx0XHRvcHRpb25zLFxyXG5cdFx0cXVlcnlDYWxsYmFjayxcclxuXHRcdGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VbXSxcclxuXHRcdHJldHVybkFsbEl0ZW1zID0gZmFsc2VcclxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcD4ge1xyXG5cdFx0aWYgKCFoYXNQcm9wZXJ0aWVzKGNvbGxlY3Rpb25zKSlcclxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbih7fSk7XHJcblxyXG5cdFx0Y29uc3QgcGFyZW50SWRBcnJheTogSXRlbUlkW10gPSBbXTtcclxuXHRcdGxldCBpdGVtSWRBcnJheTogSXRlbUlkW10gPSBbXTtcclxuXHJcblx0XHRvcHRpb25zLnF1ZXJ5UGFyYW1zID0gcXVlcnlDYWxsYmFjayhvcHRpb25zLnF1ZXJ5UGFyYW1zKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGNvbGxlY3Rpb25zKSB7XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGNvbGxlY3Rpb25zW3BhcmVudElkXS5lbnRyeTtcclxuXHJcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5leHRlbmRRdWVyeShxdWVyeUNhbGxiYWNrKTtcclxuXHRcdFx0cGFyZW50SWRBcnJheS5wdXNoKCg8RW50cnlQYXJlbnQ+IGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQpLml0ZW1JZCk7XHJcblxyXG5cdFx0XHRpdGVtSWRBcnJheSA9IGl0ZW1JZEFycmF5LmNvbmNhdChjb2xsZWN0aW9uRW50cnkuZ2V0SWRBcnJheSgpKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdExpbmtJdGVtcyhcclxuXHRcdFx0cGFyZW50VHlwZSxcclxuXHRcdFx0cGFyZW50SWRBcnJheSxcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLmFkZEFuZENvbmRpdGlvbihcclxuXHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuY3JlYXRlUXVlcnkob3B0aW9ucykub2JqZWN0LFxyXG5cdFx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLmNyZWF0ZU5vdEluKGl0ZW1JZEFycmF5KVxyXG5cdFx0XHQpLFxyXG5cdFx0XHRvcHRpb25zLmNvbHVtbnNcclxuXHRcdCkudGhlbihcclxuXHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzTGlua1Jlc3BvbnNlKFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UsXHJcblx0XHRcdFx0XHRwYXJlbnRUeXBlLFxyXG5cdFx0XHRcdFx0cGFyZW50SWRBcnJheSxcclxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0b3B0aW9uc1xyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHRpdGVtRW50cnlSZXNvdXJjZSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgb2YgcGFyZW50SWRBcnJheSkge1xyXG5cdFx0XHRcdFx0Y29uc3QgY29sbGVjdGlvblJlc291cmNlID0gY29sbGVjdGlvbnNbcGFyZW50SWRdO1xyXG5cdFx0XHRcdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IGNvbGxlY3Rpb25SZXNvdXJjZS5lbnRyeS5hZGRJdGVtcyggLy8gc2hvdWxkIGdvIGZpcnN0XHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeVJlc291cmNlLml0ZW1zW3BhcmVudElkXSxcclxuXHRcdFx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlXHJcblx0XHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRcdHJlc3VsdFtwYXJlbnRJZF0gPSByZXR1cm5BbGxJdGVtcyA/IGNvbGxlY3Rpb25SZXNvdXJjZS5pdGVtcyA6IGl0ZW1SZXNvdXJjZXM7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRiYXRjaEZldGNoIChcclxuXHRcdHBhcmVudFR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0cGFyZW50SWRBcnJheTogSXRlbUlkW10sXHJcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXHJcblx0XHRvcHRpb25zLFxyXG5cdFx0aXRlbUNhY2hlOiBJdGVtQ2FjaGUsXHJcblx0XHRsb2NhbENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlLFxyXG5cdFx0ZGVmZXJyZWRDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZVxyXG5cdCk6IFByb21pc2U8Q29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXA+IHtcclxuXHRcdGNvbnN0IGVycm9ySGFuZGxlciA9IHRoaXMuZXJyb3JIYW5kbGVyO1xyXG5cdFx0Y29uc3QgYmF0Y2hTdGF0dXM6IEJhdGNoU3RhdHVzPENvbGxlY3Rpb25FbnRyeT4gPSB0aGlzLmJhdGNoU3RhdHVzRmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdGNvbGxlY3Rpb25FbnRyeSA9PiAoPEVudHJ5UGFyZW50PiBjb2xsZWN0aW9uRW50cnkucGFyZW50KS5pdGVtSWQsXHJcblx0XHRcdGNvbGxlY3Rpb25FbnRyeSA9PiBjb2xsZWN0aW9uRW50cnkucHJvbWlzZVxyXG5cdFx0KTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIG9mIHBhcmVudElkQXJyYXkpIHtcclxuXHRcdFx0YmF0Y2hTdGF0dXMuYWRkKFxyXG5cdFx0XHRcdHRoaXMuZ2V0RW50cnlTdGF0dXMoXHJcblx0XHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jbG9uZU9wdGlvbnMob3B0aW9ucywge2l0ZW1UeXBlOiBwYXJlbnRUeXBlLCBpdGVtSWQ6IHBhcmVudElkfSksXHJcblx0XHRcdFx0XHRsb2NhbENvbGxlY3Rpb25DYWNoZSxcclxuXHRcdFx0XHRcdGRlZmVycmVkQ29sbGVjdGlvbkNhY2hlXHJcblx0XHRcdFx0KVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChiYXRjaFN0YXR1cy5nZXRQcm9taXNlcygpKS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgcmVxdWVzdElkcyA9IGJhdGNoU3RhdHVzLmdldFJlcXVlc3RJZHMoKTtcclxuXHRcdFx0XHRsZXQgaXRlbUVudHJ5Q29tcG91bmRQcm9taXNlO1xyXG5cdFx0XHRcdGxldCBhZGRpdGlvbmFsUXVlcnk7XHJcblxyXG5cdFx0XHRcdGlmIChvcHRpb25zLnF1ZXJ5ID09PSBudWxsKVxyXG5cdFx0XHRcdFx0YWRkaXRpb25hbFF1ZXJ5ID0gbnVsbDtcclxuXHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdGNvbnN0IHBhcnNlZFF1ZXJ5ID0gdGhpcy5xdWVyeVBhcnNlckZhY3RvcnkuY29uc3RydWN0KG9wdGlvbnMucXVlcnksIG9wdGlvbnMucXVlcnlQYXJhbXMpLnBhcnNlKCk7XHJcblx0XHRcdFx0XHRhZGRpdGlvbmFsUXVlcnkgPSB7b2JqZWN0OiBwYXJzZWRRdWVyeVswXSwgc3RyaW5nOiBwYXJzZWRRdWVyeVsxXX07XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZiAocmVxdWVzdElkcy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0XHRpdGVtRW50cnlDb21wb3VuZFByb21pc2UgPSB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5yZXF1ZXN0TGlua0l0ZW1zKFxyXG5cdFx0XHRcdFx0XHRwYXJlbnRUeXBlLFxyXG5cdFx0XHRcdFx0XHRyZXF1ZXN0SWRzLFxyXG5cdFx0XHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHRcdFx0YWRkaXRpb25hbFF1ZXJ5ID09PSBudWxsID8gbnVsbCA6IGFkZGl0aW9uYWxRdWVyeS5vYmplY3QsXHJcblx0XHRcdFx0XHRcdG9wdGlvbnMuY29sdW1uc1xyXG5cdFx0XHRcdFx0KS50aGVuKFxyXG5cdFx0XHRcdFx0XHRyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NMaW5rUmVzcG9uc2UoXHJcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZSxcclxuXHRcdFx0XHRcdFx0XHRcdHBhcmVudFR5cGUsXHJcblx0XHRcdFx0XHRcdFx0XHRyZXF1ZXN0SWRzLFxyXG5cdFx0XHRcdFx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0XHRcdFx0XHRvcHRpb25zXHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9IGVsc2UgaWYgKGJhdGNoU3RhdHVzLmhhc0VudHJpZXMoW0VOVFJZX1NUQVRVUy5MT0NBTF0pKSB7XHJcblx0XHRcdFx0XHRpdGVtRW50cnlDb21wb3VuZFByb21pc2UgPSB0aGlzLmNvbHVtbkhhbmRsZXIuZmV0Y2goaXRlbVR5cGUsIG9wdGlvbnMuY29sdW1ucykudGhlbihcclxuXHRcdFx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zID0+IHtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0Y29sdW1uczogdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0XHRcdFx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdG9wdGlvbnMuY29sdW1ucyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmYWxzZVxyXG5cdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdGVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fSBlbHNlXHJcblx0XHRcdFx0XHRyZXR1cm4gYmF0Y2hTdGF0dXMuZ2V0TWFwKCk7XHJcblxyXG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnlDb21wb3VuZFByb21pc2UudGhlbihcclxuXHRcdFx0XHRcdGl0ZW1FbnRyeUNvbXBvdW5kID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5TWFwID0gaXRlbUNhY2hlLmJhdGNoR2V0TG9jYWxCeVBhcmVudChcclxuXHRcdFx0XHRcdFx0XHRwYXJlbnRUeXBlLFxyXG5cdFx0XHRcdFx0XHRcdHBhcmVudElkQXJyYXksXHJcblx0XHRcdFx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0XHRcdFx0YWRkaXRpb25hbFF1ZXJ5XHJcblx0XHRcdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdFx0XHRsZXQgaXRlbUVudHJ5QXJyYXk6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdFx0XHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGl0ZW1FbnRyeU1hcClcclxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnlBcnJheSA9IGl0ZW1FbnRyeUFycmF5LmNvbmNhdChpdGVtRW50cnlNYXBbcGFyZW50SWRdKTtcclxuXHJcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLml0ZW1IYW5kbGVyLmV4cGFuZExvY2FsRW50cmllcyhcclxuXHRcdFx0XHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnlBcnJheSxcclxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnlDb21wb3VuZC5jb2x1bW5zLFxyXG5cdFx0XHRcdFx0XHRcdGl0ZW1DYWNoZVxyXG5cdFx0XHRcdFx0XHQpLnRoZW4oXHJcblx0XHRcdFx0XHRcdFx0KCkgPT4gdGhpcy5oYW5kbGVCYXRjaFJlc3BvbnNlKGJhdGNoU3RhdHVzLCBpdGVtRW50cnlDb21wb3VuZCwgaXRlbUVudHJ5TWFwKSxcclxuXHRcdFx0XHRcdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdGVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHQvLyBUT0RPOiBzb21lIHN0YXR1c2VzIGFyZSBub3QgdGFrZW4gaW50byBhY2NvdW50XHJcblx0aGFuZGxlQmF0Y2hSZXNwb25zZSAoXHJcblx0XHRiYXRjaFN0YXR1czogQmF0Y2hTdGF0dXM8Q29sbGVjdGlvbkVudHJ5PixcclxuXHRcdGl0ZW1FbnRyeUNvbXBvdW5kOiB7XHJcblx0XHRcdGNvbHVtbnM6IENvbHVtblNldCxcclxuXHRcdFx0Y29sdW1uRXhwYW5zaW9uPzogQ29sdW1uRXhwYW5zaW9uLFxyXG5cdFx0XHRpdGVtcz86IEl0ZW1FbnRyeVBhcmVudElkTWFwXHJcblx0XHR9LFxyXG5cdFx0bG9jYWxJdGVtczogSXRlbUVudHJ5UGFyZW50SWRNYXBcclxuXHQpOiBDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCB7XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXHJcblx0XHRcdFtFTlRSWV9TVEFUVVMuQ0FDSEVEXSxcclxuXHRcdFx0KGNvbGxlY3Rpb25FbnRyeSwgcGFyZW50SWQpID0+IHtcclxuXHRcdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gY29sbGVjdGlvbkVudHJ5O1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cclxuXHRcdGJhdGNoU3RhdHVzLmZvckVhY2hFbnRyeShcclxuXHRcdFx0W0VOVFJZX1NUQVRVUy5SRVNPTFZFXSxcclxuXHRcdFx0KGNvbGxlY3Rpb25FbnRyeSwgcGFyZW50SWQpID0+IHtcclxuXHRcdFx0XHRjb25zdCBpdGVtRW50cmllcyA9ICg8SXRlbUVudHJ5UGFyZW50SWRNYXA+IGl0ZW1FbnRyeUNvbXBvdW5kLml0ZW1zKVtwYXJlbnRJZF07XHJcblxyXG5cdFx0XHRcdHJlc3VsdFtwYXJlbnRJZF0gPSBjb2xsZWN0aW9uRW50cnkucmVzb2x2ZShcclxuXHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0aW5pdGlhbDogaXRlbUVudHJpZXMsXHJcblx0XHRcdFx0XHRcdG1vZGlmaWVkOiBpdGVtRW50cmllcy5jb25jYXQobG9jYWxJdGVtc1twYXJlbnRJZF0pLFxyXG5cdFx0XHRcdFx0XHRjb2x1bW5zOiBpdGVtRW50cnlDb21wb3VuZC5jb2x1bW5zXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHJcblx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXHJcblx0XHRcdGJhdGNoU3RhdHVzLnJlbW90ZUV4cGFuZFN0YXR1cyxcclxuXHRcdFx0KGNvbGxlY3Rpb25FbnRyeSwgcGFyZW50SWQpID0+IHtcclxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuZXhwYW5kQ29sdW1ucyg8Q29sdW1uRXhwYW5zaW9uPiBpdGVtRW50cnlDb21wb3VuZC5jb2x1bW5FeHBhbnNpb24pO1xyXG5cdFx0XHRcdHJlc3VsdFtwYXJlbnRJZF0gPSBjb2xsZWN0aW9uRW50cnkuX3Jlc29sdmUoKTtcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHJcblx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXHJcblx0XHRcdFtFTlRSWV9TVEFUVVMuTE9DQUxdLFxyXG5cdFx0XHQoY29sbGVjdGlvbkVudHJ5LCBwYXJlbnRJZCkgPT4ge1xyXG5cdFx0XHRcdHJlc3VsdFtwYXJlbnRJZF0gPSBjb2xsZWN0aW9uRW50cnkucmVzb2x2ZShcclxuXHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0aW5pdGlhbDogbG9jYWxJdGVtc1twYXJlbnRJZF0sXHJcblx0XHRcdFx0XHRcdGNvbHVtbnM6IGl0ZW1FbnRyeUNvbXBvdW5kLmNvbHVtbnNcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRmZXRjaCAoXHJcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXHJcblx0XHRvcHRpb25zLFxyXG5cdFx0aXRlbUNhY2hlOiBJdGVtQ2FjaGUsXHJcblx0XHRsb2NhbENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlLFxyXG5cdFx0ZGVmZXJyZWRDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZVxyXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvbkVudHJ5PiB7XHJcblx0XHRjb25zdCBlcnJvckhhbmRsZXIgPSB0aGlzLmVycm9ySGFuZGxlcjtcclxuXHRcdGNvbnN0IHN0YXR1c1Jlc291cmNlID0gdGhpcy5nZXRFbnRyeVN0YXR1cyhpdGVtVHlwZSwgb3B0aW9ucywgbG9jYWxDb2xsZWN0aW9uQ2FjaGUsIGRlZmVycmVkQ29sbGVjdGlvbkNhY2hlKTtcclxuXHRcdGNvbnN0IGVudHJ5ID0gc3RhdHVzUmVzb3VyY2UuZW50cnk7XHJcblxyXG5cdFx0c3dpdGNoIChzdGF0dXNSZXNvdXJjZS5zdGF0dXMpIHtcclxuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuQ0FDSEVEOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oZW50cnkpO1xyXG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5QUk9NSVNFRDpcclxuXHRcdFx0XHRyZXR1cm4gZW50cnkucHJvbWlzZTtcclxuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuRVhQQU5EOlxyXG5cdFx0XHRcdHJldHVybiBlbnRyeS5leHBhbmQob3B0aW9ucy5jb2x1bW5zKS50aGVuKFxyXG5cdFx0XHRcdFx0KCkgPT4gZW50cnkuX3Jlc29sdmUoKSxcclxuXHRcdFx0XHRcdGVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkQ6XHJcblx0XHRcdFx0cmV0dXJuIGVudHJ5LnByb21pc2UudGhlbihcclxuXHRcdFx0XHRcdCgpID0+IGVudHJ5LmRlZmVyKCkuZXhwYW5kKG9wdGlvbnMuY29sdW1ucyksXHJcblx0XHRcdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdFx0KS50aGVuKFxyXG5cdFx0XHRcdFx0KCkgPT4gZW50cnkuX3Jlc29sdmUoKSxcclxuXHRcdFx0XHRcdGVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5MT0NBTDpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlTG9jYWwoZW50cnksIGl0ZW1DYWNoZSk7XHJcblx0XHRcdGRlZmF1bHQ6IC8vIGNhc2UgRU5UUllfU1RBVFVTLlJFU09MVkU6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb2x2ZVJlbW90ZShlbnRyeSwgaXRlbUNhY2hlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGdldENhY2hlZEVudHJ5U3RhdHVzIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucyk6IEVOVFJZX1NUQVRVUyB7XHJcblx0XHRpZiAoIWNvbGxlY3Rpb25FbnRyeS5jb2x1bW5zLmlzU3VwZXJzZXRPZihvcHRpb25zLmNvbHVtbnMpKSB7XHJcblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXNEZWZlcnJlZCgpKVxyXG5cdFx0XHRcdHJldHVybiBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EO1xyXG5cclxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LmRlZmVyKCk7XHJcblxyXG5cdFx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLkVYUEFORDtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LmlzRGVmZXJyZWQoKSlcclxuXHRcdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5QUk9NSVNFRDtcclxuXHJcblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LnJlbG9hZFF1ZXVlZCkge1xyXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkucmVsb2FkUXVldWVkID0gZmFsc2U7XHJcblxyXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LmlzTG9jYWwoKSlcclxuXHRcdFx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLkNBQ0hFRDtcclxuXHJcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5kZWZlcigpO1xyXG5cclxuXHRcdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5SRVNPTFZFO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBFTlRSWV9TVEFUVVMuQ0FDSEVEO1xyXG5cdH1cclxuXHJcblx0Z2V0RGVmZXJyZWRFbnRyeVN0YXR1cyAoXHJcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXHJcblx0XHRvcHRpb25zLFxyXG5cdFx0cXVlcnksXHJcblx0XHRkZWZlcnJlZEVudHJpZXM6IENvbGxlY3Rpb25DYWNoZVxyXG5cdCk6IHtlbnRyeTogQ29sbGVjdGlvbkVudHJ5LCBpc0RlZmVycmVkOiBib29sZWFufSB7XHJcblx0XHRsZXQgY29sbGVjdGlvbkVudHJ5O1xyXG5cclxuXHRcdGlmICghb3B0aW9ucy5kZWZlclJlcXVlc3QpIHtcclxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5ID0gdGhpcy5jb2xsZWN0aW9uRW50cnlGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucyk7XHJcblxyXG5cdFx0XHRyZXR1cm4ge2VudHJ5OiBjb2xsZWN0aW9uRW50cnksIGlzRGVmZXJyZWQ6IGZhbHNlfTtcclxuXHRcdH1cclxuXHJcblx0XHRjb2xsZWN0aW9uRW50cnkgPSBkZWZlcnJlZEVudHJpZXMuZ2V0QnlRdWVyeShpdGVtVHlwZSwgcXVlcnkpO1xyXG5cclxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkgIT09IG51bGwpIHtcclxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LmV4cGFuZFJlcXVlc3RDb2x1bW5zKG9wdGlvbnMuY29sdW1ucyk7XHJcblxyXG5cdFx0XHRyZXR1cm4ge2VudHJ5OiBjb2xsZWN0aW9uRW50cnksIGlzRGVmZXJyZWQ6IGZhbHNlfTtcclxuXHRcdH1cclxuXHJcblx0XHRjb2xsZWN0aW9uRW50cnkgPSB0aGlzLmNvbGxlY3Rpb25FbnRyeUZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCBvcHRpb25zKTtcclxuXHJcblx0XHRyZXR1cm4ge2VudHJ5OiBkZWZlcnJlZEVudHJpZXMuYWRkKGNvbGxlY3Rpb25FbnRyeSksIGlzRGVmZXJyZWQ6IHRydWV9O1xyXG5cdH1cclxuXHJcblx0Z2V0RW50cnlTdGF0dXMgKFxyXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0b3B0aW9ucyxcclxuXHRcdGxvY2FsRW50cmllczogQ29sbGVjdGlvbkNhY2hlLFxyXG5cdFx0ZGVmZXJyZWRFbnRyaWVzOiBDb2xsZWN0aW9uQ2FjaGVcclxuXHQpOiBFbnRyeVN0YXR1czxDb2xsZWN0aW9uRW50cnk+IHtcclxuXHRcdGNvbnN0IHF1ZXJ5ID0gdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNyZWF0ZVF1ZXJ5KG9wdGlvbnMpO1xyXG5cdFx0bGV0IGNvbGxlY3Rpb25FbnRyeTtcclxuXHRcdGxldCBpc0RlZmVycmVkO1xyXG5cclxuXHRcdGlmICh0aGlzLmlzTG9jYWwob3B0aW9ucykpIHtcclxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5ID0gbG9jYWxFbnRyaWVzLmdldEJ5UXVlcnkoaXRlbVR5cGUsIHF1ZXJ5KTtcclxuXHJcblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkgIT09IG51bGwpXHJcblx0XHRcdFx0cmV0dXJuIHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBzdGF0dXM6IHRoaXMuZ2V0Q2FjaGVkRW50cnlTdGF0dXMoY29sbGVjdGlvbkVudHJ5LCBvcHRpb25zKX07XHJcblxyXG5cdFx0XHQoe2VudHJ5OiBjb2xsZWN0aW9uRW50cnksIGlzRGVmZXJyZWR9ID0gdGhpcy5nZXREZWZlcnJlZEVudHJ5U3RhdHVzKFxyXG5cdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdG9wdGlvbnMsXHJcblx0XHRcdFx0cXVlcnksXHJcblx0XHRcdFx0ZGVmZXJyZWRFbnRyaWVzXHJcblx0XHRcdCkpO1xyXG5cclxuXHRcdFx0aWYgKGlzRGVmZXJyZWQpXHJcblx0XHRcdFx0cmV0dXJuIHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBzdGF0dXM6IEVOVFJZX1NUQVRVUy5QUk9NSVNFRH07XHJcblxyXG5cdFx0XHQvLyBuZXcgbG9jYWwgZW50cnkgY3JlYXRlZCwgc2hvdWxkIGJlIGFkZGVkIHRvIGxvY2FsIGNhY2hlIG9ubHlcclxuXHRcdFx0cmV0dXJuIHtlbnRyeTogbG9jYWxFbnRyaWVzLmFkZChjb2xsZWN0aW9uRW50cnkpLCBzdGF0dXM6IEVOVFJZX1NUQVRVUy5MT0NBTH07XHJcblx0XHR9XHJcblxyXG5cdFx0Y29sbGVjdGlvbkVudHJ5ID0gdGhpcy5lbnRyaWVzLmdldEJ5UXVlcnkoaXRlbVR5cGUsIHF1ZXJ5KTtcclxuXHJcblx0XHQvLyBlbnRyeSBhbHJlYWR5IGV4aXN0cyBpbiBnbG9iYWwgY2FjaGUsIGFkZCB0byBsb2NhbCBjYWNoZVxyXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeSAhPT0gbnVsbClcclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRlbnRyeTogbG9jYWxFbnRyaWVzLmFkZChjb2xsZWN0aW9uRW50cnkpLFxyXG5cdFx0XHRcdHN0YXR1czogdGhpcy5nZXRDYWNoZWRFbnRyeVN0YXR1cyhjb2xsZWN0aW9uRW50cnksIG9wdGlvbnMpXHJcblx0XHRcdH07XHJcblxyXG5cdFx0KHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBpc0RlZmVycmVkfSA9IHRoaXMuZ2V0RGVmZXJyZWRFbnRyeVN0YXR1cyhpdGVtVHlwZSwgb3B0aW9ucywgcXVlcnksIGRlZmVycmVkRW50cmllcykpO1xyXG5cclxuXHRcdGlmIChpc0RlZmVycmVkKVxyXG5cdFx0XHRyZXR1cm4ge2VudHJ5OiBjb2xsZWN0aW9uRW50cnksIHN0YXR1czogRU5UUllfU1RBVFVTLlBST01JU0VEfTtcclxuXHJcblx0XHQvLyBuZXcgZ2xvYmFsIGVudHJ5IGNyZWF0ZWQsIGFkZCB0byBib3RoIGxvY2FsIGFuZCBnbG9iYWwgY2FjaGVcclxuXHRcdGxvY2FsRW50cmllcy5hZGQoY29sbGVjdGlvbkVudHJ5KTtcclxuXHRcdHRoaXMuZW50cmllcy5hZGQoY29sbGVjdGlvbkVudHJ5KTtcclxuXHJcblx0XHRyZXR1cm4ge2VudHJ5OiBjb2xsZWN0aW9uRW50cnksIHN0YXR1czogRU5UUllfU1RBVFVTLlJFU09MVkV9O1xyXG5cdH1cclxuXHJcblx0cmVzb2x2ZUxvY2FsIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgaXRlbUNhY2hlOiBJdGVtQ2FjaGUpOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25FbnRyeT4ge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGU7XHJcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zLmNvbHVtbnM7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuY29sdW1uSGFuZGxlci5mZXRjaChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMpLnRoZW4oXHJcblx0XHRcdHJlc3BvbnNlQ29sdW1ucyA9PiB7XHJcblx0XHRcdFx0Y29uc3QgY29sdW1uU2V0ID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucywgZmFsc2UpO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5pdGVtSGFuZGxlci5leHBhbmRMb2NhbEVudHJpZXMoXHJcblx0XHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHRcdGl0ZW1DYWNoZS5nZXRMb2NhbEJ5UXVlcnkoaXRlbVR5cGUsIGNvbGxlY3Rpb25FbnRyeS5xdWVyeSksXHJcblx0XHRcdFx0XHRjb2x1bW5TZXQsXHJcblx0XHRcdFx0XHRpdGVtQ2FjaGVcclxuXHRcdFx0XHQpLnRoZW4oXHJcblx0XHRcdFx0XHRsb2NhbEVudHJpZXMgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gY29sbGVjdGlvbkVudHJ5LnJlc29sdmUoe2luaXRpYWw6IGxvY2FsRW50cmllcywgY29sdW1uczogY29sdW1uU2V0fSk7XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cmVzb2x2ZVJlbW90ZSAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIGl0ZW1DYWNoZTogSXRlbUNhY2hlKTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uRW50cnk+IHtcclxuXHRcdGNvbnN0IGVycm9ySGFuZGxlciA9IHRoaXMuZXJyb3JIYW5kbGVyO1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGU7XHJcblxyXG5cdFx0bGV0IGNvbHVtblNldDtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdEl0ZW1zKGNvbGxlY3Rpb25FbnRyeSkudGhlbihcclxuXHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdGNvbHVtblNldCA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zLmNvbHVtbnMsXHJcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKVxyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzUmVzcG9uc2UoXHJcblx0XHRcdFx0XHRyZXNwb25zZSxcclxuXHRcdFx0XHRcdHJlc3BvbnNlLmxpbmtzW2l0ZW1UeXBlXSxcclxuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQsXHJcblx0XHRcdFx0XHRjb2x1bW5TZXRcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdHJlbW90ZUVudHJpZXMgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLml0ZW1IYW5kbGVyLmV4cGFuZExvY2FsRW50cmllcyhcclxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0aXRlbUNhY2hlLmdldExvY2FsQnlRdWVyeShpdGVtVHlwZSwgY29sbGVjdGlvbkVudHJ5LnF1ZXJ5KSxcclxuXHRcdFx0XHRcdGNvbHVtblNldCxcclxuXHRcdFx0XHRcdGl0ZW1DYWNoZVxyXG5cdFx0XHRcdCkudGhlbihcclxuXHRcdFx0XHRcdGxvY2FsRW50cmllcyA9PiB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnkucmVzb2x2ZShcclxuXHRcdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0XHRpbml0aWFsOiByZW1vdGVFbnRyaWVzLFxyXG5cdFx0XHRcdFx0XHRcdFx0bW9kaWZpZWQ6IHJlbW90ZUVudHJpZXMuY29uY2F0KGxvY2FsRW50cmllcyksXHJcblx0XHRcdFx0XHRcdFx0XHRjb2x1bW5zOiBjb2x1bW5TZXRcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdGVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRpc0xvY2FsIChvcHRpb25zKSB7XHJcblx0XHRjb25zdCBwYXJlbnQgPSBvcHRpb25zLnBhcmVudDtcclxuXHJcblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQocGFyZW50Lml0ZW1JZCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IGlkZW50aXR5LCBJdGVtSWQgfSBmcm9tICcuLi8nO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcy8nO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSwgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25NYXRjaGVyIHtcclxuXHRtYXA6IHtcclxuXHRcdFtjb2xsZWN0aW9uRW50cnlJZDogbnVtYmVyXToge1xyXG5cdFx0XHRjb2xsZWN0aW9uOiBDb2xsZWN0aW9uRW50cnlcclxuXHRcdFx0bWF0Y2hlczoge1xyXG5cdFx0XHRcdFtpdGVtSWQ6IG51bWJlcl06IHtpdGVtOiBJdGVtRW50cnksIGlzTWF0Y2g6IGJvb2xlYW59XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9ID0ge307XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgcXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlczogQ29sbGVjdGlvbkNhY2hlW10sXHJcblx0XHRwcml2YXRlIHVwZGF0ZUluaXRpYWw6IGJvb2xlYW4sXHJcblx0XHRwcml2YXRlIGNhbGxPbkFjdGl2YXRlOiBib29sZWFuXHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0ZXhwYW5kIChpdGVtRW50cnk6IEl0ZW1FbnRyeSkge1xyXG5cdFx0Y29uc3QgcXVlcnlNYXRjaGVyID0gdGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0aXRlbUVudHJ5Lml0ZW1UeXBlLFxyXG5cdFx0XHRpdGVtRW50cnkuZ2V0RmllbGRzKCksXHJcblx0XHRcdGl0ZW1FbnRyeS5wYXJlbnRcclxuXHRcdCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuX2V4cGFuZChcclxuXHRcdFx0aXRlbUVudHJ5LFxyXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkgPT4gcXVlcnlNYXRjaGVyLm1hdGNoUXVlcnkoY29sbGVjdGlvbkVudHJ5LnF1ZXJ5Lm9iamVjdClcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIF9leHBhbmQgKFxyXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnksXHJcblx0XHRtYXRjaEZ1bmN0aW9uOiAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpID0+IGJvb2xlYW4gfCBzdHJpbmdcclxuXHQpOiB0aGlzIHtcclxuXHRcdGNvbnN0IG1hcCA9IHRoaXMubWFwO1xyXG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25DYWNoZSBvZiB0aGlzLmNvbGxlY3Rpb25DYWNoZXMpIHtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJpZXMgPSBjb2xsZWN0aW9uQ2FjaGUuZ2V0QnlJdGVtVHlwZShpdGVtRW50cnkuaXRlbVR5cGUpO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgY29sbGVjdGlvbkVudHJpZXMpIHtcclxuXHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnlJZCA9IGNvbGxlY3Rpb25FbnRyeS5pZDtcclxuXHRcdFx0XHRsZXQgbWF0Y2hlcztcclxuXHJcblx0XHRcdFx0aWYgKG1hcFtjb2xsZWN0aW9uRW50cnlJZF0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdG1hcFtjb2xsZWN0aW9uRW50cnlJZF0gPSB7Y29sbGVjdGlvbjogY29sbGVjdGlvbkVudHJ5LCBtYXRjaGVzOiB7fX07XHJcblxyXG5cdFx0XHRcdG1hdGNoZXMgPSBtYXBbY29sbGVjdGlvbkVudHJ5SWRdLm1hdGNoZXM7XHJcblxyXG5cdFx0XHRcdGlmIChtYXRjaGVzW2l0ZW1JZF0gIT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0XHRtYXRjaGVzW2l0ZW1JZF0gPSB7aXRlbTogaXRlbUVudHJ5LCBpc01hdGNoOiBtYXRjaEZ1bmN0aW9uKGNvbGxlY3Rpb25FbnRyeSl9O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRnZXRDb2xsZWN0aW9uc1dpdGhGaXR0aW5nSXRlbXMgKCkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIHRoaXMubWFwKSB7XHJcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gdGhpcy5tYXBbY29sbGVjdGlvbklkXTtcclxuXHJcblx0XHRcdGlmICh0aGlzLmhhc0ZpdHRpbmdJdGVtcyhtYXBFbnRyeS5tYXRjaGVzKSlcclxuXHRcdFx0XHRyZXN1bHQucHVzaChtYXBFbnRyeS5jb2xsZWN0aW9uKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0YWRkVG9Db2xsZWN0aW9ucyAocmVzdWx0UmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSB8IG51bGwgPSBudWxsKSB7XHJcblx0XHRsZXQgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIHRoaXMubWFwKSB7XHJcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gdGhpcy5tYXBbY29sbGVjdGlvbklkXTtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gbWFwRW50cnkuY29sbGVjdGlvbjtcclxuXHRcdFx0Y29uc3QgZ3JvdXBlZEl0ZW1FbnRyaWVzID0gdGhpcy5ncm91cEl0ZW1FbnRyaWVzKG1hcEVudHJ5Lm1hdGNoZXMpO1xyXG5cdFx0XHRjb25zdCBmaXR0aW5nSXRlbUVudHJpZXMgPSBncm91cGVkSXRlbUVudHJpZXMuZml0dGluZztcclxuXHJcblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXNEZWZlcnJlZCgpKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0aWYgKHJlc3VsdFJlc291cmNlICE9PSBudWxsICYmIGNvbGxlY3Rpb25FbnRyeSA9PT0gcmVzdWx0UmVzb3VyY2UuZW50cnkpIHtcclxuXHRcdFx0XHRyZXN1bHQgPSBjb2xsZWN0aW9uRW50cnkuYWRkSXRlbXMoXHJcblx0XHRcdFx0XHRmaXR0aW5nSXRlbUVudHJpZXMsXHJcblx0XHRcdFx0XHRyZXN1bHRSZXNvdXJjZSxcclxuXHRcdFx0XHRcdHRoaXMudXBkYXRlSW5pdGlhbCxcclxuXHRcdFx0XHRcdHRydWUsXHJcblx0XHRcdFx0XHR0aGlzLmNhbGxPbkFjdGl2YXRlXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuYWRkSXRlbXMoXHJcblx0XHRcdFx0XHRmaXR0aW5nSXRlbUVudHJpZXMsXHJcblx0XHRcdFx0XHRudWxsLFxyXG5cdFx0XHRcdFx0dGhpcy51cGRhdGVJbml0aWFsLFxyXG5cdFx0XHRcdFx0dHJ1ZSxcclxuXHRcdFx0XHRcdHRoaXMuY2FsbE9uQWN0aXZhdGVcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAodGhpcy51cGRhdGVJbml0aWFsICYmIGdyb3VwZWRJdGVtRW50cmllcy5tYXliZS5sZW5ndGggPiAwKVxyXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5leHRlbmQoaWRlbnRpdHksIG51bGwsIHRydWUsIHRoaXMudXBkYXRlSW5pdGlhbCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHJlbW92ZUZyb21Db2xsZWN0aW9ucyAocmVzdWx0UmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSB8IG51bGwgPSBudWxsKSB7XHJcblx0XHRsZXQgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIHRoaXMubWFwKSB7XHJcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gdGhpcy5tYXBbY29sbGVjdGlvbklkXTtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gbWFwRW50cnkuY29sbGVjdGlvbjtcclxuXHRcdFx0Y29uc3QgZml0dGluZ0l0ZW1JZHMgPSB0aGlzLmdyb3VwSXRlbUlkcyhtYXBFbnRyeS5tYXRjaGVzKS5maXR0aW5nO1xyXG5cclxuXHRcdFx0aWYgKHJlc3VsdFJlc291cmNlID09PSBudWxsIHx8IGNvbGxlY3Rpb25FbnRyeSAhPT0gcmVzdWx0UmVzb3VyY2UuZW50cnkpXHJcblx0XHRcdFx0cmVzdWx0ID0gY29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGZpdHRpbmdJdGVtSWRzLCByZXN1bHRSZXNvdXJjZSwgdGhpcy51cGRhdGVJbml0aWFsKTtcclxuXHRcdFx0ZWxzZVxyXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5yZW1vdmVJdGVtcyhmaXR0aW5nSXRlbUlkcywgbnVsbCwgdGhpcy51cGRhdGVJbml0aWFsKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0cmVtb3ZlRnJvbUFuZEFkZFRvQ29sbGVjdGlvbnMgKCkge1xyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gdGhpcy5tYXApIHtcclxuXHRcdFx0Y29uc3QgbWFwRW50cnkgPSB0aGlzLm1hcFtjb2xsZWN0aW9uSWRdO1xyXG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBtYXBFbnRyeS5jb2xsZWN0aW9uO1xyXG5cdFx0XHRjb25zdCBncm91cGVkSXRlbUVudHJpZXMgPSB0aGlzLmdyb3VwSXRlbUVudHJpZXMobWFwRW50cnkubWF0Y2hlcyk7XHJcblxyXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkucmVtb3ZlSXRlbXMoZ3JvdXBlZEl0ZW1FbnRyaWVzLm5vdEZpdHRpbmcsIG51bGwsIHRoaXMudXBkYXRlSW5pdGlhbCk7XHJcblxyXG5cdFx0XHQvLyBkb2Vzbid0IGRvIGFueXRoaW5nIHdpdGggaW5pdGlhbFxyXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuYWRkSXRlbXMoZ3JvdXBlZEl0ZW1FbnRyaWVzLmZpdHRpbmcsIG51bGwsIHRoaXMudXBkYXRlSW5pdGlhbCk7XHJcblxyXG5cdFx0XHRpZiAoZ3JvdXBlZEl0ZW1FbnRyaWVzLm1heWJlLmxlbmd0aCA+IDApXHJcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LmV4dGVuZChpZGVudGl0eSwgbnVsbCwgdHJ1ZSwgdGhpcy51cGRhdGVJbml0aWFsKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ3JvdXBJdGVtRW50cmllcyAobWF0Y2hlcykge1xyXG5cdFx0Y29uc3QgZml0dGluZzogSXRlbUVudHJ5W10gPSBbXTtcclxuXHRcdGNvbnN0IG5vdEZpdHRpbmc6IEl0ZW1JZFtdID0gW107XHJcblx0XHRjb25zdCBtYXliZTogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBtYXRjaGVzKSB7XHJcblx0XHRcdGNvbnN0IG1hdGNoID0gbWF0Y2hlc1tpdGVtSWRdO1xyXG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSBtYXRjaC5pdGVtO1xyXG5cdFx0XHRjb25zdCBpc01hdGNoID0gbWF0Y2guaXNNYXRjaDtcclxuXHJcblx0XHRcdGlmIChpc01hdGNoID09PSB0cnVlKVxyXG5cdFx0XHRcdGZpdHRpbmcucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0XHRlbHNlIGlmIChpc01hdGNoID09PSBmYWxzZSlcclxuXHRcdFx0XHRub3RGaXR0aW5nLnB1c2goaXRlbUVudHJ5Lml0ZW1JZCk7XHJcblx0XHRcdGVsc2VcclxuXHRcdFx0XHRtYXliZS5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHtmaXR0aW5nOiBmaXR0aW5nLCBub3RGaXR0aW5nOiBub3RGaXR0aW5nLCBtYXliZTogbWF5YmV9O1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBncm91cEl0ZW1JZHMgKG1hdGNoZXMpIHtcclxuXHRcdC8vIGFsc28gaW5jbHVkZXMgJ21heWJlJztcclxuXHRcdGNvbnN0IGZpdHRpbmc6IEl0ZW1JZFtdID0gW107XHJcblx0XHRjb25zdCBub3RGaXR0aW5nOiBJdGVtSWRbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIG1hdGNoZXMpIHtcclxuXHRcdFx0Y29uc3QgbWF0Y2ggPSBtYXRjaGVzW2l0ZW1JZF07XHJcblxyXG5cdFx0XHQobWF0Y2guaXNNYXRjaCA9PT0gZmFsc2UgPyBub3RGaXR0aW5nIDogZml0dGluZykucHVzaChtYXRjaC5pdGVtLml0ZW1JZCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHtmaXR0aW5nOiBmaXR0aW5nLCBub3RGaXR0aW5nOiBub3RGaXR0aW5nfTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgaGFzRml0dGluZ0l0ZW1zIChtYXRjaGVzKSB7XHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBtYXRjaGVzKSB7XHJcblx0XHRcdGlmIChtYXRjaGVzW2l0ZW1JZF0uaXNNYXRjaCA9PT0gdHJ1ZSlcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IG5vb3AgfSBmcm9tICcuLi8nO1xyXG5pbXBvcnQgeyBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBJdGVtSWQgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5pbXBvcnQgeyBzaGFsbG93TWVyZ2UgfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2Uge1xyXG5cdHByb2Nlc3NPcHRpb25zIChvcHRpb25zKSB7XHJcblx0XHRyZXR1cm4gc2hhbGxvd01lcmdlKFxyXG5cdFx0XHRvcHRpb25zLFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0ZWRpdEl0ZW1zOiBmYWxzZSxcclxuXHRcdFx0XHRlZGl0Q29sbGVjdGlvbjogZmFsc2UsXHJcblx0XHRcdFx0bW9kSW5zdGFudDogZmFsc2UsXHJcblx0XHRcdFx0ZW5hYmxlU2F2ZTogdHJ1ZSxcclxuXHRcdFx0XHRvbkl0ZW1zQ3JlYXRlZDogbm9vcCxcclxuXHRcdFx0XHRvbkNoYW5nZTogbm9vcCwgLy8gbmVlZGVkIGZvciBjb21wYXJpc29uXHJcblx0XHRcdFx0b25BZGQ6IG5vb3AsXHJcblx0XHRcdFx0b25SZW1vdmU6IG5vb3AsXHJcblx0XHRcdFx0b25BZGRJbml0aWFsOiBub29wLFxyXG5cdFx0XHRcdG9uUmVtb3ZlSW5pdGlhbDogbm9vcCxcclxuXHRcdFx0XHRyZXNvdXJjZUtleTogbnVsbCwgLy8gVE9ETzogcmVtb3ZlXHJcblx0XHRcdFx0Y2xlYXJPblRhYkNoYW5nZTogdHJ1ZSxcclxuXHRcdFx0XHRjbGVhck9uU3ViVGFiQ2hhbmdlOiB0cnVlLFxyXG5cdFx0XHRcdGN1c3RvbTogbnVsbFxyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Z2V0SWRBcnJheSAoaXRlbVJlc291cmNlczogSXRlbVJlc291cmNlW10pIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUlkW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKVxyXG5cdFx0XHRyZXN1bHQucHVzaChpdGVtUmVzb3VyY2UuZW50cnkuaXRlbUlkKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2x1bW5VdGlsIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEFwaVJlcXVlc3RDb2x1bW4sIEFwaVJlcXVlc3RDb2x1bW5zLCBJdGVtVHlwZSwgUmVzcG9uc2VDb2x1bW4sIFJlc3BvbnNlQ29sdW1uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbHVtbkNhY2hlIHtcclxuXHRjYWNoZTogUmVzcG9uc2VDb2x1bW5NYXAgPSB7fTtcclxuXHRhbGxDb2x1bW5zOiB7W2l0ZW1UeXBlOiBzdHJpbmddOiBib29sZWFufSA9IHt9O1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWxcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdHNldENvbHVtbiAoaXRlbVR5cGU6IEl0ZW1UeXBlLCByZXNwb25zZUNvbHVtbjogUmVzcG9uc2VDb2x1bW4pIHtcclxuXHRcdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcclxuXHJcblx0XHRpZiAoY2FjaGVbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdGNhY2hlW2l0ZW1UeXBlXSA9IHt9O1xyXG5cclxuXHRcdGNvbnN0IGVudHJ5ID0gY2FjaGVbaXRlbVR5cGVdO1xyXG5cdFx0Y29uc3QgY29sdW1uSWQgPSByZXNwb25zZUNvbHVtbi5pZDtcclxuXHJcblx0XHRpZiAoZW50cnlbY29sdW1uSWRdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdGVudHJ5W2NvbHVtbklkXSA9IHJlc3BvbnNlQ29sdW1uO1xyXG5cclxuXHRcdHJldHVybiBlbnRyeVtjb2x1bW5JZF07XHJcblx0fVxyXG5cclxuXHRzZXRDb2x1bW5zIChcclxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyxcclxuXHRcdHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXBcclxuXHQpOiBSZXNwb25zZUNvbHVtbk1hcCB7XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHJlc3BvbnNlVHlwZSBpbiByZXNwb25zZUNvbHVtbnMpIHtcclxuXHRcdFx0Y29uc3QgY29sdW1ucyA9IHJlc3BvbnNlQ29sdW1uc1tyZXNwb25zZVR5cGVdO1xyXG5cclxuXHRcdFx0cmVzdWx0W3Jlc3BvbnNlVHlwZV0gPSB7fTtcclxuXHJcblx0XHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gY29sdW1ucylcclxuXHRcdFx0XHRyZXN1bHRbcmVzcG9uc2VUeXBlXVtjb2x1bW5JZF0gPSB0aGlzLnNldENvbHVtbihyZXNwb25zZVR5cGUsIGNvbHVtbnNbY29sdW1uSWRdKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAocmVxdWVzdENvbHVtbnMgPT09IHRydWUpXHJcblx0XHRcdHRoaXMuYWxsQ29sdW1uc1tpdGVtVHlwZV0gPSB0cnVlO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRyZXRyaWV2ZSAoXHJcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXHJcblx0XHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnNcclxuXHQpOiB7Y2FjaGVkOiBSZXNwb25zZUNvbHVtbk1hcCwgbWlzc2luZzogQXBpUmVxdWVzdENvbHVtbnN9IHtcclxuXHRcdGlmIChyZXF1ZXN0Q29sdW1ucyA9PT0gdHJ1ZSkge1xyXG5cdFx0XHRpZiAodGhpcy5jb250YWluc0FsbChpdGVtVHlwZSkpXHJcblx0XHRcdFx0cmV0dXJuIHtjYWNoZWQ6IHRoaXMuZ2V0Q29sdW1ucyhpdGVtVHlwZSksIG1pc3Npbmc6IFtdfTtcclxuXHJcblx0XHRcdHJldHVybiB7Y2FjaGVkOiB7fSwgbWlzc2luZzogdHJ1ZX07XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgcmVzcG9uc2VBY2N1bXVsYXRvciA9IHt9O1xyXG5cdFx0Y29uc3QgcmVxdWVzdEFjY3VtdWxhdG9yID0gW107XHJcblxyXG5cdFx0dGhpcy5yZXRyaWV2ZUNvbHVtbnMoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXF1ZXN0QWNjdW11bGF0b3IsIHJlc3BvbnNlQWNjdW11bGF0b3IpO1xyXG5cclxuXHRcdHJldHVybiB7Y2FjaGVkOiByZXNwb25zZUFjY3VtdWxhdG9yLCBtaXNzaW5nOiByZXF1ZXN0QWNjdW11bGF0b3J9O1xyXG5cdH1cclxuXHJcblx0Y29udGFpbnNBbGwgKGl0ZW1UeXBlOiBJdGVtVHlwZSk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuYWxsQ29sdW1uc1tpdGVtVHlwZV0gPT09IHRydWU7XHJcblx0fVxyXG5cclxuXHRnZXRDb2x1bW5zIChpdGVtVHlwZTogSXRlbVR5cGUpOiBSZXNwb25zZUNvbHVtbk1hcCB7XHJcblx0XHRjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGU7XHJcblxyXG5cdFx0cmV0dXJuIHtbaXRlbVR5cGVdOiBjYWNoZVtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCA/IFtdIDogY2FjaGVbaXRlbVR5cGVdfTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcmV0cmlldmVDb2x1bW5zIChcclxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1uW10sXHJcblx0XHRyZXF1ZXN0QWNjdW11bGF0b3I6IEFwaVJlcXVlc3RDb2x1bW5bXSxcclxuXHRcdHJlc3BvbnNlQWNjdW11bGF0b3I6IFJlc3BvbnNlQ29sdW1uTWFwXHJcblx0KTogdm9pZCB7XHJcblx0XHQvLyBhbHdheXMgcmV0cmlldmUgdGhlIGlkIGNvbHVtblxyXG5cdFx0dGhpcy5yZXRyaWV2ZUNvbHVtbihpdGVtVHlwZSwgJ2lkJywgcmVxdWVzdEFjY3VtdWxhdG9yLCByZXNwb25zZUFjY3VtdWxhdG9yKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHJlcXVlc3RDb2x1bW4gb2YgcmVxdWVzdENvbHVtbnMpXHJcblx0XHRcdHRoaXMucmV0cmlldmVDb2x1bW4oaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW4sIHJlcXVlc3RBY2N1bXVsYXRvciwgcmVzcG9uc2VBY2N1bXVsYXRvcik7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHJldHJpZXZlQ29sdW1uIChcclxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdHJlcXVlc3RDb2x1bW46IEFwaVJlcXVlc3RDb2x1bW4sXHJcblx0XHRyZXF1ZXN0QWNjdW11bGF0b3I6IFJlc3BvbnNlQ29sdW1uW10sXHJcblx0XHRyZXNwb25zZUFjY3VtdWxhdG9yOiBSZXNwb25zZUNvbHVtbk1hcFxyXG5cdCk6IHZvaWQge1xyXG5cdFx0Y29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5VdGlsLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcclxuXHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1uID0gdGhpcy5nZXRDb2x1bW4oaXRlbVR5cGUsIGNvbHVtbi5pZCk7XHJcblxyXG5cdFx0aWYgKHJlc3BvbnNlQ29sdW1uID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0cmVxdWVzdEFjY3VtdWxhdG9yLnB1c2gocmVxdWVzdENvbHVtbik7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAocmVzcG9uc2VBY2N1bXVsYXRvcltpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmVzcG9uc2VBY2N1bXVsYXRvcltpdGVtVHlwZV0gPSB7fTtcclxuXHJcblx0XHRyZXNwb25zZUFjY3VtdWxhdG9yW2l0ZW1UeXBlXVtjb2x1bW4uaWRdID0gcmVzcG9uc2VDb2x1bW47XHJcblxyXG5cdFx0aWYgKGNvbHVtbi5jaGlsZHJlbi5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybjtcclxuXHJcblx0XHRjb25zdCBtaXNzaW5nRGVyaXZlZCA9IFtdO1xyXG5cclxuXHRcdHRoaXMucmV0cmlldmVDb2x1bW5zKHJlc3BvbnNlQ29sdW1uLml0ZW1UeXBlLCBjb2x1bW4uY2hpbGRyZW4sIG1pc3NpbmdEZXJpdmVkLCByZXNwb25zZUFjY3VtdWxhdG9yKTtcclxuXHJcblx0XHRpZiAobWlzc2luZ0Rlcml2ZWQubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0cmVxdWVzdEFjY3VtdWxhdG9yLnB1c2goe1tjb2x1bW4uaWRdOiBtaXNzaW5nRGVyaXZlZH0pO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRDb2x1bW4gKGl0ZW1UeXBlOiBJdGVtVHlwZSwgY29sdW1uSWQ6IHN0cmluZyk6IFJlc3BvbnNlQ29sdW1uIHwgdW5kZWZpbmVkIHtcclxuXHRcdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZVtpdGVtVHlwZV07XHJcblxyXG5cdFx0aWYgKGNhY2hlID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybjtcclxuXHJcblx0XHRyZXR1cm4gY2FjaGVbY29sdW1uSWRdO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2x1bW5JbmZvLCBDb2x1bW5TZXQsIENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHtcclxuXHRBcGlSZXF1ZXN0Q29sdW1uLFxyXG5cdEFwaVJlcXVlc3RDb2x1bW5zLFxyXG5cdENvbHVtbkV4cGFuc2lvblJlc3VsdCxcclxuXHRJdGVtVHlwZSxcclxuXHRSZXNwb25zZUNvbHVtbk1hcCxcclxuXHRSb290Q29sdW1uTWFwXHJcbn0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbHVtbkV4cGFuc2lvbiB7XHJcblx0ZXhwYW5zaW9uTWFwOiB7W2NvbHVtblNldElkOiBudW1iZXJdOiBDb2x1bW5FeHBhbnNpb25SZXN1bHQgfCBudWxsfSA9IHt9O1xyXG5cdHJlcXVlc3RDb2x1bW5zVHJ1ZTogYm9vbGVhbjtcclxuXHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbltdO1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGNvbHVtbkluZm9GYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsLFxyXG5cdFx0cHVibGljIGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyxcclxuXHRcdHB1YmxpYyByZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwXHJcblx0KSB7XHJcblx0XHRpZiAocmVxdWVzdENvbHVtbnMgPT09IHRydWUpIHtcclxuXHRcdFx0Ly8gcmVxdWVzdENvbHVtbnMgc2hvdWxkIGFsd2F5cyBiZSBhbiBhcnJheSwgd2hlbiBpdCBpcyB0cnVlIGRlcml2ZWQgY29sdW1uIGluZm9ybWF0aW9uIHdpbGwgYmUgbG9zdFxyXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSA9IHRydWU7XHJcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbnMgPSBbXTtcclxuXHJcblx0XHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gcmVzcG9uc2VDb2x1bW5zW2l0ZW1UeXBlXSlcclxuXHRcdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zLnB1c2goY29sdW1uSWQpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUgPSBmYWxzZTtcclxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1ucyA9IHJlcXVlc3RDb2x1bW5zO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cnVuIChjb2x1bW5TZXQ6IENvbHVtblNldCk6IENvbHVtbkV4cGFuc2lvblJlc3VsdCB8IG51bGwge1xyXG5cdFx0Y29uc3QgZXhwYW5zaW9uTWFwID0gdGhpcy5leHBhbnNpb25NYXA7XHJcblx0XHRjb25zdCBjb2x1bW5TZXRJZCA9IGNvbHVtblNldC5pZDtcclxuXHJcblx0XHRpZiAoZXhwYW5zaW9uTWFwW2NvbHVtblNldElkXSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gZXhwYW5zaW9uTWFwW2NvbHVtblNldElkXTtcclxuXHJcblx0XHRjb25zdCBpc0NvbHVtblN1YnNldCA9IHRoaXMuY29sdW1uVXRpbC5pc0NvbHVtblN1YnNldChcclxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1ucyxcclxuXHRcdFx0Y29sdW1uU2V0LnJlcXVlc3QsXHJcblx0XHRcdGNvbHVtblNldC5yZXF1ZXN0Q29sdW1uc1RydWVcclxuXHRcdCk7XHJcblxyXG5cdFx0cmV0dXJuIGV4cGFuc2lvbk1hcFtjb2x1bW5TZXRJZF0gPSBpc0NvbHVtblN1YnNldCA/XHJcblx0XHRcdG51bGwgOlxyXG5cdFx0XHRjb2x1bW5TZXQuZXhwYW5kKHRoaXMucmVxdWVzdENvbHVtbnMsIHRoaXMucmVxdWVzdENvbHVtbnNUcnVlLCB0aGlzLnJlc3BvbnNlQ29sdW1ucyk7XHJcblx0fVxyXG5cclxuXHRhZ2dyZWdhdGVSb290Q29sdW1ucyAoKTogQ29sdW1uSW5mb1tdIHtcclxuXHRcdGNvbnN0IGV4cGFuc2lvbk1hcCA9IHRoaXMuZXhwYW5zaW9uTWFwO1xyXG5cdFx0Y29uc3Qgcm9vdENvbHVtbk1hcDogUm9vdENvbHVtbk1hcCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uU2V0SWQgaW4gZXhwYW5zaW9uTWFwKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IGV4cGFuc2lvbk1hcFtjb2x1bW5TZXRJZF07XHJcblxyXG5cdFx0XHRpZiAoY29sdW1uRXhwYW5zaW9uID09PSBudWxsKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0dGhpcy5leHBhbmRSb290Q29sdW1uTWFwKGNvbHVtbkV4cGFuc2lvbi5kaWZmZXJlbmNlLnJvb3QsIHJvb3RDb2x1bW5NYXApO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSb290Q29sdW1uTWFwKHJvb3RDb2x1bW5NYXAsIG51bGwpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBleHBhbmRSb290Q29sdW1uTWFwIChjb2x1bW5zOiBDb2x1bW5JbmZvW10sIGRlc3RpbmF0aW9uOiBSb290Q29sdW1uTWFwKSB7XHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uLmlkO1xyXG5cclxuXHRcdFx0aWYgKGRlc3RpbmF0aW9uW2NvbHVtbklkXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtbklkXSA9IHthcGlDb2x1bW46IGNvbHVtbi5hcGlDb2x1bW4sIGNoaWxkcmVuOiB7fX07XHJcblxyXG5cdFx0XHR0aGlzLmV4cGFuZFJvb3RDb2x1bW5NYXAoY29sdW1uLmNoaWxkcmVuLCBkZXN0aW5hdGlvbltjb2x1bW5JZF0uY2hpbGRyZW4pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwcm9jZXNzUm9vdENvbHVtbk1hcCAocm9vdENvbHVtbk1hcDogUm9vdENvbHVtbk1hcCwgcGFyZW50OiBDb2x1bW5JbmZvIHwgbnVsbCk6IENvbHVtbkluZm9bXSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IENvbHVtbkluZm9bXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gcm9vdENvbHVtbk1hcCkge1xyXG5cdFx0XHRjb25zdCBjb2x1bW5NYXBFbnRyeSA9IHJvb3RDb2x1bW5NYXBbY29sdW1uSWRdO1xyXG5cdFx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5jb2x1bW5JbmZvRmFjdG9yeS5jb25zdHJ1Y3QoY29sdW1uTWFwRW50cnkuYXBpQ29sdW1uLCBwYXJlbnQpO1xyXG5cdFx0XHRjb25zdCBjaGlsZENvbHVtbnMgPSB0aGlzLnByb2Nlc3NSb290Q29sdW1uTWFwKGNvbHVtbk1hcEVudHJ5LmNoaWxkcmVuLCBjb2x1bW5JbmZvKTtcclxuXHJcblx0XHRcdGlmIChjaGlsZENvbHVtbnMubGVuZ3RoID4gMClcclxuXHRcdFx0XHRjb2x1bW5JbmZvLnNldENoaWxkcmVuKGNvbHVtbkluZm8uYXBpQ29sdW1uLml0ZW1UeXBlLCBjaGlsZENvbHVtbnMpO1xyXG5cclxuXHRcdFx0cmVzdWx0LnB1c2goY29sdW1uSW5mbyk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sdW1uQ2FjaGUsIENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHtcclxuXHRBcGlSZXF1ZXN0Q29sdW1ucyxcclxuXHRJdGVtVHlwZSxcclxuXHRQcm9taXNlSW50ZXJmYWNlLFxyXG5cdFJlc3BvbnNlQ29sdW1uLFxyXG5cdFJlc3BvbnNlQ29sdW1uTWFwXHJcbn0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbHVtbkhhbmRsZXIge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBjYWNoZTogQ29sdW1uQ2FjaGUsXHJcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWxcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdHNldENvbHVtbiAoaXRlbVR5cGU6IEl0ZW1UeXBlLCByZXNwb25zZUNvbHVtbjogUmVzcG9uc2VDb2x1bW4pOiBSZXNwb25zZUNvbHVtbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5jYWNoZS5zZXRDb2x1bW4oaXRlbVR5cGUsIHJlc3BvbnNlQ29sdW1uKTtcclxuXHR9XHJcblxyXG5cdHNldENvbHVtbnMgKFxyXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxyXG5cdFx0cmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcFxyXG5cdCk6IFJlc3BvbnNlQ29sdW1uTWFwIHtcclxuXHRcdHJldHVybiB0aGlzLmNhY2hlLnNldENvbHVtbnMoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hJdGVtVHlwZVRyYW5zbGF0aW9ucyAoaXRlbVR5cGVzOiBJdGVtVHlwZVtdKTogUHJvbWlzZUludGVyZmFjZTx7W2l0ZW1UeXBlOiBzdHJpbmddOiBzdHJpbmd9PiB7XHJcblx0XHRjb25zdCBwcm9taXNlczoge1tpdGVtVHlwZTogc3RyaW5nXTogUHJvbWlzZUludGVyZmFjZTxSZXNwb25zZUNvbHVtbk1hcD59ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBvZiBpdGVtVHlwZXMpXHJcblx0XHRcdHByb21pc2VzW2l0ZW1UeXBlXSA9IHRoaXMuZmV0Y2goaXRlbVR5cGUsIFsnaWQnXSk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHByb21pc2VzKVxyXG5cdFx0XHQudGhlbihcclxuXHRcdFx0XHRyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHJlc3BvbnNlKVxyXG5cdFx0XHRcdFx0XHRyZXN1bHRbaXRlbVR5cGVdID0gcmVzcG9uc2VbaXRlbVR5cGVdW2l0ZW1UeXBlXS5pZC5uYW1lO1xyXG5cclxuXHRcdFx0XHRcdHJldHVybiByZXN1bHQ7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdFx0KTtcclxuXHR9XHJcblxyXG5cdHJlcXVlc3QgKFxyXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0Y29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMsXHJcblx0XHRwYXJhbXMgPSB7ZmlsdGVyOiBmYWxzZX1cclxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPFJlc3BvbnNlQ29sdW1uTWFwPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5jb2x1bW5zKGl0ZW1UeXBlLCB7W2l0ZW1UeXBlXTogY29sdW1uc30sIHBhcmFtcykudGhlbihcclxuXHRcdFx0Y29sdW1uUmVzb3VyY2UgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNhY2hlLnNldENvbHVtbnMoXHJcblx0XHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHRcdGNvbHVtbnMsXHJcblx0XHRcdFx0XHRjb2x1bW5SZXNvdXJjZS5mZXRjaENvbHVtbnNPYmplY3QoKVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGZldGNoIChpdGVtVHlwZTogSXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucywgcGFyYW1zPyk6IFByb21pc2VJbnRlcmZhY2U8UmVzcG9uc2VDb2x1bW5NYXA+IHtcclxuXHRcdGNvbnN0IGNvbHVtblJlc291cmNlID0gdGhpcy5jYWNoZS5yZXRyaWV2ZShpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMpO1xyXG5cclxuXHRcdGlmIChjb2x1bW5SZXNvdXJjZS5taXNzaW5nICE9PSB0cnVlICYmIGNvbHVtblJlc291cmNlLm1pc3NpbmcubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGNvbHVtblJlc291cmNlLmNhY2hlZCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucmVxdWVzdChpdGVtVHlwZSwgY29sdW1uUmVzb3VyY2UubWlzc2luZywgcGFyYW1zKS50aGVuKFxyXG5cdFx0XHRyZXNwb25zZUNvbHVtbnMgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXNwb25zZUNvbHVtbnMoXHJcblx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnMsXHJcblx0XHRcdFx0XHRjb2x1bW5SZXNvdXJjZS5jYWNoZWRcclxuXHRcdFx0XHQpLm1lcmdlZDtcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGZldGNoQWxsIChpdGVtVHlwZTogSXRlbVR5cGUpOiBQcm9taXNlSW50ZXJmYWNlPFJlc3BvbnNlQ29sdW1uTWFwPiB7XHJcblx0XHRpZiAodGhpcy5jYWNoZS5jb250YWluc0FsbChpdGVtVHlwZSkpXHJcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4odGhpcy5jYWNoZS5nZXRDb2x1bW5zKGl0ZW1UeXBlKSk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucmVxdWVzdChpdGVtVHlwZSwgdHJ1ZSk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENPTFVNTl9TRVBFUkFUT1IgfSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBJdGVtVHlwZSwgUmVzcG9uc2VDb2x1bW4gfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sdW1uSW5mbyB7XHJcblx0aWQ6IHN0cmluZztcclxuXHRsZXZlbDogbnVtYmVyO1xyXG5cdHBhdGg6IHN0cmluZztcclxuXHR0YWlsUGF0aDogc3RyaW5nO1xyXG5cdGl0ZW1UeXBlOiBJdGVtVHlwZSB8IG51bGwgPSBudWxsO1xyXG5cdGNoaWxkcmVuOiBDb2x1bW5JbmZvW10gPSBbXTtcclxuXHRpc0xlYWY6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHRjb25zdHJ1Y3RvciAocmVhZG9ubHkgYXBpQ29sdW1uOiBSZXNwb25zZUNvbHVtbiwgcmVhZG9ubHkgcGFyZW50OiBDb2x1bW5JbmZvIHwgbnVsbCA9IG51bGwpIHtcclxuXHRcdGNvbnN0IGNvbHVtbklkID0gYXBpQ29sdW1uLmlkO1xyXG5cclxuXHRcdHRoaXMuaWQgPSBjb2x1bW5JZDtcclxuXHJcblx0XHRpZiAocGFyZW50ID09PSBudWxsKSB7XHJcblx0XHRcdHRoaXMubGV2ZWwgPSAwO1xyXG5cdFx0XHR0aGlzLnBhdGggPSBjb2x1bW5JZDtcclxuXHRcdFx0dGhpcy50YWlsUGF0aCA9ICcnO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5sZXZlbCA9IHBhcmVudC5sZXZlbCArIDE7XHJcblx0XHRcdHRoaXMucGF0aCA9IHBhcmVudC5wYXRoICsgQ09MVU1OX1NFUEVSQVRPUiArIGNvbHVtbklkO1xyXG5cdFx0XHR0aGlzLnRhaWxQYXRoID0gcGFyZW50LmxldmVsID09PSAwID9cclxuXHRcdFx0XHRjb2x1bW5JZCA6XHJcblx0XHRcdFx0cGFyZW50LnRhaWxQYXRoICsgQ09MVU1OX1NFUEVSQVRPUiArIGNvbHVtbklkO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0c2V0Q2hpbGRyZW4gKGl0ZW1UeXBlOiBJdGVtVHlwZSwgY2hpbGRyZW46IENvbHVtbkluZm9bXSk6IHRoaXMge1xyXG5cdFx0dGhpcy5pdGVtVHlwZSA9IGl0ZW1UeXBlO1xyXG5cdFx0dGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xyXG5cdFx0dGhpcy5pc0xlYWYgPSBmYWxzZTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sdW1uSGFuZGxlciwgQ29sdW1uSW5mbywgQ29sdW1uVXRpbCB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBDb2x1bW5JbmZvRmFjdG9yeSwgQ29sdW1uU2V0RmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEFwaVJlcXVlc3RDb2x1bW5zLCBDb2x1bW5FeHBhbnNpb25SZXN1bHQsIENvbHVtblNldEV4cGFuc2lvbiwgUmVzcG9uc2VDb2x1bW5NYXAgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5jb25zdCBlbXB0eU9iamVjdCA9IHt9O1xyXG5sZXQgY3VycmVudElkID0gMDtcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2x1bW5TZXQge1xyXG5cdGlkID0gKytjdXJyZW50SWQ7XHJcblxyXG5cdHJlcXVlc3RDb2x1bW5zVHJ1ZTogYm9vbGVhbjtcclxuXHRyZXNwb25zZTogUmVzcG9uc2VDb2x1bW5NYXAgPSBlbXB0eU9iamVjdDtcclxuXHJcblx0bGluazogQ29sdW1uSW5mbyB8IG51bGwgPSBudWxsO1xyXG5cdG1haW46IENvbHVtbkluZm9bXSA9IFtdO1xyXG5cdGRlcml2ZWQ6IENvbHVtbkluZm9bXSA9IFtdO1xyXG5cdHJvb3Q6IENvbHVtbkluZm9bXSA9IFtdO1xyXG5cdGxlYWY6IENvbHVtbkluZm9bXSA9IFtdO1xyXG5cdGZvcm1hdHRlZDoge21haW46IENvbHVtbkluZm9bXSwgZGVyaXZlZDogQ29sdW1uSW5mb1tdfSA9IHttYWluOiBbXSwgZGVyaXZlZDogW119O1xyXG5cdGZpbHRlcmVkOiBDb2x1bW5JbmZvW10gPSBbXTtcclxuXHRjdXN0b206IENvbHVtbkluZm9bXSA9IFtdO1xyXG5cdHNlYXJjaGFibGU6IENvbHVtbkluZm9bXSA9IFtdO1xyXG5cdGl0ZW06IENvbHVtbkluZm9bXSA9IFtdO1xyXG5cdG5vdEl0ZW06IENvbHVtbkluZm9bXSA9IFtdO1xyXG5cclxuXHRlbmFibGVDYWNoaW5nOiBib29sZWFuO1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWwsXHJcblx0XHRwcml2YXRlIGNvbHVtbkluZm9GYWN0b3J5OiBDb2x1bW5JbmZvRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcclxuXHRcdHB1YmxpYyBpdGVtVHlwZSxcclxuXHRcdHB1YmxpYyByZXF1ZXN0OiBBcGlSZXF1ZXN0Q29sdW1ucyxcclxuXHQpIHtcclxuXHRcdHRoaXMucmVxdWVzdENvbHVtbnNUcnVlID0gdGhpcy5yZXF1ZXN0Q29sdW1uc0lzVHJ1ZSh0aGlzLnJlcXVlc3QpO1xyXG5cdH1cclxuXHJcblx0dG9KU09OICgpIHtcclxuXHRcdGNvbnN0IHBhcnNlQ29sdW1ucyA9IChjb2x1bW5zOiBDb2x1bW5JbmZvW10pID0+IGNvbHVtbnMubWFwKGMgPT4gYy5pZCk7XHJcblxyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0bWFpbjogcGFyc2VDb2x1bW5zKHRoaXMubWFpbiksXHJcblx0XHRcdGRlcml2ZWQ6IHBhcnNlQ29sdW1ucyh0aGlzLmRlcml2ZWQpXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0cmVzb2x2ZSAocmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcCwgZW5hYmxlQ2FjaGluZyA9IHRydWUsIGluY2x1ZGVJZENvbHVtbiA9IHRydWUpOiB0aGlzIHtcclxuXHRcdHRoaXMuZW5hYmxlQ2FjaGluZyA9IGVuYWJsZUNhY2hpbmc7XHJcblxyXG5cdFx0aWYgKHRoaXMucmVxdWVzdENvbHVtbnNUcnVlKVxyXG5cdFx0XHR0aGlzLnByb2Nlc3NSZXNwb25zZUNvbHVtbnMocmVzcG9uc2VDb2x1bW5zKTtcclxuXHRcdGVsc2VcclxuXHRcdFx0dGhpcy5wcm9jZXNzUmVxdWVzdENvbHVtbnMocmVzcG9uc2VDb2x1bW5zLCBpbmNsdWRlSWRDb2x1bW4pO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0ZXhwYW5kUmVxdWVzdENvbHVtbnMgKGNvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zKSB7XHJcblx0XHRjb25zdCBtZXJnZWRSZXF1ZXN0Q29sdW1ucyA9IHRoaXMuY29sdW1uVXRpbC5tZXJnZVJlcXVlc3RDb2x1bW5zKHRoaXMucmVxdWVzdCwgY29sdW1ucykubWVyZ2VkO1xyXG5cclxuXHRcdHRoaXMucmVxdWVzdCA9IG1lcmdlZFJlcXVlc3RDb2x1bW5zO1xyXG5cdFx0dGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUgPSBtZXJnZWRSZXF1ZXN0Q29sdW1ucyA9PT0gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdGlzU3VwZXJzZXRPZiAoY29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMpIHtcclxuXHRcdHJldHVybiB0aGlzLmNvbHVtblV0aWwuaXNDb2x1bW5TdWJzZXQoY29sdW1ucywgdGhpcy5yZXF1ZXN0LCB0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHByb2Nlc3NSZXNwb25zZUNvbHVtbnMgKHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXApIHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gdGhpcy5pdGVtVHlwZTtcclxuXHJcblx0XHR0aGlzLnJlcXVlc3QgPSBbXTtcclxuXHRcdHRoaXMucmVzcG9uc2UgPSB0aGlzLmVuYWJsZUNhY2hpbmcgP1xyXG5cdFx0XHR0aGlzLmNvbHVtbkhhbmRsZXIuc2V0Q29sdW1ucyh0aGlzLml0ZW1UeXBlLCB0cnVlLCByZXNwb25zZUNvbHVtbnMpIDpcclxuXHRcdFx0cmVzcG9uc2VDb2x1bW5zO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gcmVzcG9uc2VDb2x1bW5zW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHR0aGlzLm1haW4ucHVzaCh0aGlzLmdldENvbHVtbkluZm8oY29sdW1uSWQsIGl0ZW1UeXBlLCBbXSwgbnVsbCwgcmVzcG9uc2VDb2x1bW5zKSk7XHJcblx0XHRcdHRoaXMucmVxdWVzdC5wdXNoKGNvbHVtbklkKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcmVxdWVzdENvbHVtbnNJc1RydWUgKHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyk6IHJlcXVlc3RDb2x1bW5zIGlzIHRydWUge1xyXG5cdFx0cmV0dXJuIHJlcXVlc3RDb2x1bW5zID09PSB0cnVlO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwcm9jZXNzUmVxdWVzdENvbHVtbnMgKHJlc3BvbnNlQ29sdW1ucywgaW5jbHVkZUlkQ29sdW1uKSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IHRoaXMuaXRlbVR5cGU7XHJcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IHRoaXMucmVxdWVzdDsgLy8gd2UgY2FuIGFzc3VtZSByZXF1ZXN0Q29sdW1ucyBpcyBhbiBhcnJheSBoZXJlXHJcblxyXG5cdFx0dGhpcy5yZXNwb25zZSA9IHt9O1xyXG5cclxuXHRcdGlmICh0aGlzLnJlcXVlc3RDb2x1bW5zSXNUcnVlKHJlcXVlc3RDb2x1bW5zKSB8fCByZXF1ZXN0Q29sdW1ucy5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybjtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHJlcXVlc3RDb2x1bW4gb2YgcmVxdWVzdENvbHVtbnMpIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uSW5mbyA9IHRoaXMuZ2V0UmVxdWVzdENvbHVtbkluZm8ocmVxdWVzdENvbHVtbiwgaXRlbVR5cGUsIG51bGwsIHJlc3BvbnNlQ29sdW1ucyk7XHJcblxyXG5cdFx0XHRpZiAoY29sdW1uSW5mbyA9PT0gbnVsbClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdHRoaXMubWFpbi5wdXNoKGNvbHVtbkluZm8pO1xyXG5cclxuXHRcdFx0aWYgKCFjb2x1bW5JbmZvLmlzTGVhZilcclxuXHRcdFx0XHR0aGlzLnJvb3QucHVzaChjb2x1bW5JbmZvKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaW5jbHVkZUlkQ29sdW1uICYmIHRoaXMucmVzcG9uc2VbaXRlbVR5cGVdLmlkID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uSW5mbyA9IHRoaXMuZ2V0UmVxdWVzdENvbHVtbkluZm8oJ2lkJywgaXRlbVR5cGUsIG51bGwsIHJlc3BvbnNlQ29sdW1ucyk7XHJcblxyXG5cdFx0XHRpZiAoY29sdW1uSW5mbyAhPT0gbnVsbClcclxuXHRcdFx0XHR0aGlzLm1haW4ucHVzaChjb2x1bW5JbmZvKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0UmVxdWVzdENvbHVtbkluZm8gKHJlcXVlc3RDb2x1bW4sIGl0ZW1UeXBlLCBwYXJlbnQsIHJlc3BvbnNlQ29sdW1ucykge1xyXG5cdFx0Y29uc3QgcGFyc2VkQ29sdW1uID0gdGhpcy5jb2x1bW5VdGlsLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcclxuXHRcdGNvbnN0IGNvbHVtbklkID0gcGFyc2VkQ29sdW1uLmlkO1xyXG5cclxuXHRcdGxldCByZXNwb25zZUNvbHVtbjtcclxuXHJcblx0XHRpZiAocmVzcG9uc2VDb2x1bW5zW2l0ZW1UeXBlXSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXNwb25zZUNvbHVtbiA9IHJlc3BvbnNlQ29sdW1uc1tpdGVtVHlwZV1bY29sdW1uSWRdO1xyXG5cclxuXHRcdGlmIChyZXNwb25zZUNvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGNvbnNvbGUud2FybignTm8gYXBpIGNvbHVtbiBmb3IgcmVxdWVzdCBjb2x1bW4nLCBjb2x1bW5JZCwgJ2ZvciBpdGVtVHlwZScsIGl0ZW1UeXBlKTtcclxuXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLmVuYWJsZUNhY2hpbmcpXHJcblx0XHRcdHJlc3BvbnNlQ29sdW1uID0gdGhpcy5jb2x1bW5IYW5kbGVyLnNldENvbHVtbihpdGVtVHlwZSwgcmVzcG9uc2VDb2x1bW4pO1xyXG5cclxuXHRcdGNvbnN0IHJlc3VsdFJlc3BvbnNlID0gdGhpcy5yZXNwb25zZTtcclxuXHJcblx0XHRpZiAocmVzdWx0UmVzcG9uc2VbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJlc3VsdFJlc3BvbnNlW2l0ZW1UeXBlXSA9IHt9O1xyXG5cclxuXHRcdGlmIChyZXN1bHRSZXNwb25zZVtpdGVtVHlwZV1bY29sdW1uSWRdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJlc3VsdFJlc3BvbnNlW2l0ZW1UeXBlXVtjb2x1bW5JZF0gPSByZXNwb25zZUNvbHVtbjtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5nZXRDb2x1bW5JbmZvKGNvbHVtbklkLCBpdGVtVHlwZSwgcGFyc2VkQ29sdW1uLmNoaWxkcmVuLCBwYXJlbnQsIHJlc3BvbnNlQ29sdW1ucyk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldENvbHVtbkluZm8gKGNvbHVtbklkLCBpdGVtVHlwZSwgY2hpbGRyZW4sIHBhcmVudCwgcmVzcG9uc2VDb2x1bW5zKTogQ29sdW1uSW5mbyB7XHJcblx0XHRjb25zdCBjb2x1bW5VdGlsID0gdGhpcy5jb2x1bW5VdGlsO1xyXG5cdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW4gPSByZXNwb25zZUNvbHVtbnNbaXRlbVR5cGVdW2NvbHVtbklkXTtcclxuXHRcdGNvbnN0IGNvbHVtbkluZm8gPSB0aGlzLmNvbHVtbkluZm9GYWN0b3J5LmNvbnN0cnVjdChyZXNwb25zZUNvbHVtbiwgcGFyZW50KTtcclxuXHRcdGNvbnN0IGlzRGVyaXZlZCA9IHBhcmVudCAhPT0gbnVsbDtcclxuXHJcblx0XHRpZiAoaXNEZXJpdmVkKVxyXG5cdFx0XHR0aGlzLmRlcml2ZWQucHVzaChjb2x1bW5JbmZvKTtcclxuXHRcdGVsc2UgLy8gd2UgY291bGQgcG9zc2libHkgYWRkIGRlcml2ZWQgY29sdW1ucyB0byAnbm90SXRlbSdcclxuXHRcdFx0dGhpc1tjb2x1bW5VdGlsLmlzSXRlbUNvbHVtbihyZXNwb25zZUNvbHVtbikgPyAnaXRlbScgOiAnbm90SXRlbSddLnB1c2goY29sdW1uSW5mbyk7XHJcblxyXG5cdFx0aWYgKGNvbHVtblV0aWwuaXNGb3JtYXR0ZWRDb2x1bW4ocmVzcG9uc2VDb2x1bW4pKVxyXG5cdFx0XHR0aGlzLmZvcm1hdHRlZFtpc0Rlcml2ZWQgPyAnZGVyaXZlZCcgOiAnbWFpbiddLnB1c2goY29sdW1uSW5mbyk7XHJcblxyXG5cdFx0aWYgKGNvbHVtblV0aWwuaXNGaWx0ZXJlZENvbHVtbihyZXNwb25zZUNvbHVtbikpXHJcblx0XHRcdHRoaXMuZmlsdGVyZWQucHVzaChjb2x1bW5JbmZvKTtcclxuXHJcblx0XHRpZiAoY29sdW1uVXRpbC5pc1NlYXJjaGFibGVDb2x1bW4ocmVzcG9uc2VDb2x1bW4pKVxyXG5cdFx0XHR0aGlzLnNlYXJjaGFibGUucHVzaChjb2x1bW5JbmZvKTtcclxuXHJcblx0XHRpZiAoY29sdW1uVXRpbC5pc0N1c3RvbUNvbHVtbihyZXNwb25zZUNvbHVtbikpXHJcblx0XHRcdHRoaXMuY3VzdG9tLnB1c2goY29sdW1uSW5mbyk7XHJcblxyXG5cdFx0aWYgKHJlc3BvbnNlQ29sdW1uLnR5cGUgPT09ICdsaW5rJylcclxuXHRcdFx0dGhpcy5saW5rID0gY29sdW1uSW5mbztcclxuXHJcblx0XHRpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XHJcblx0XHRcdHRoaXMubGVhZi5wdXNoKGNvbHVtbkluZm8pO1xyXG5cclxuXHRcdFx0cmV0dXJuIGNvbHVtbkluZm87XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgY2hpbGRDb2x1bW5zOiBDb2x1bW5JbmZvW10gPSBbXTtcclxuXHJcblx0XHQvLyBjb2x1bW5zIGlzICpub3QqIHRydWVcclxuXHRcdGZvciAoY29uc3QgY2hpbGRDb2x1bW5JZCBvZiBjaGlsZHJlbikge1xyXG5cdFx0XHRjb25zdCBjaGlsZENvbHVtbiA9IHRoaXMuZ2V0UmVxdWVzdENvbHVtbkluZm8oXHJcblx0XHRcdFx0Y2hpbGRDb2x1bW5JZCxcclxuXHRcdFx0XHRyZXNwb25zZUNvbHVtbi5pdGVtVHlwZSxcclxuXHRcdFx0XHRjb2x1bW5JbmZvLFxyXG5cdFx0XHRcdHJlc3BvbnNlQ29sdW1uc1xyXG5cdFx0XHQpO1xyXG5cclxuXHRcdFx0aWYgKGNoaWxkQ29sdW1uID09PSBudWxsKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0Y2hpbGRDb2x1bW5zLnB1c2goY2hpbGRDb2x1bW4pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBjb2x1bW5JbmZvLnNldENoaWxkcmVuKHJlc3BvbnNlQ29sdW1uLml0ZW1UeXBlLCBjaGlsZENvbHVtbnMpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRDb2x1bW5TZXRFeHBhbnNpb24gKFxyXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxyXG5cdFx0cmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcFxyXG5cdCk6IENvbHVtblNldEV4cGFuc2lvbiB7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRyZXF1ZXN0OiB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXF1ZXN0Q29sdW1ucyh0aGlzLnJlcXVlc3QsIHJlcXVlc3RDb2x1bW5zKSxcclxuXHRcdFx0cmVzcG9uc2U6IHRoaXMuY29sdW1uVXRpbC5tZXJnZVJlc3BvbnNlQ29sdW1ucyh0aGlzLnJlc3BvbnNlLCByZXNwb25zZUNvbHVtbnMpLm1lcmdlZFxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0TWVyZ2VkQ29sdW1uU2V0IChjb2x1bW5TZXRFeHBhbnNpb246IENvbHVtblNldEV4cGFuc2lvbiwgcmVxdWVzdENvbHVtbnNUcnVlOiBib29sZWFuKTogQ29sdW1uU2V0IHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdHRoaXMuaXRlbVR5cGUsXHJcblx0XHRcdGNvbHVtblNldEV4cGFuc2lvbi5yZXF1ZXN0Lm1lcmdlZCxcclxuXHRcdFx0Y29sdW1uU2V0RXhwYW5zaW9uLnJlc3BvbnNlXHJcblx0XHQpO1xyXG5cclxuXHRcdHJlc3VsdC5yZXF1ZXN0Q29sdW1uc1RydWUgPSB0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSB8fCByZXF1ZXN0Q29sdW1uc1RydWU7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdG1lcmdlIChjb2x1bW5TZXQ6IENvbHVtblNldCk6IENvbHVtblNldCB7XHJcblx0XHRyZXR1cm4gdGhpcy5nZXRNZXJnZWRDb2x1bW5TZXQoXHJcblx0XHRcdHRoaXMuZ2V0Q29sdW1uU2V0RXhwYW5zaW9uKGNvbHVtblNldC5yZXF1ZXN0LCBjb2x1bW5TZXQucmVzcG9uc2UpLFxyXG5cdFx0XHRjb2x1bW5TZXQucmVxdWVzdENvbHVtbnNUcnVlXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0ZXhwYW5kIChcclxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyxcclxuXHRcdHJlcXVlc3RDb2x1bW5zVHJ1ZTogYm9vbGVhbixcclxuXHRcdHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXBcclxuXHQpOiBDb2x1bW5FeHBhbnNpb25SZXN1bHQge1xyXG5cdFx0Y29uc3QgY29sdW1uU2V0RXhwYW5zaW9uID0gdGhpcy5nZXRDb2x1bW5TZXRFeHBhbnNpb24ocmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucyk7XHJcblxyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0bWVyZ2VkOiB0aGlzLmdldE1lcmdlZENvbHVtblNldChjb2x1bW5TZXRFeHBhbnNpb24sIHJlcXVlc3RDb2x1bW5zVHJ1ZSksXHJcblx0XHRcdGRpZmZlcmVuY2U6IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdFx0dGhpcy5pdGVtVHlwZSxcclxuXHRcdFx0XHRjb2x1bW5TZXRFeHBhbnNpb24ucmVxdWVzdC5kaWZmZXJlbmNlLFxyXG5cdFx0XHRcdGNvbHVtblNldEV4cGFuc2lvbi5yZXNwb25zZSwgLy8gd2UgbmVlZCB0byBiZSBhYmxlIHRvIGxvb2sgdXAgdGhlIHBhcmVudCBvZiBkZXJpdmVkIGNvbHVtbnNcclxuXHRcdFx0XHRmYWxzZSxcclxuXHRcdFx0XHRmYWxzZVxyXG5cdFx0XHQpXHJcblx0XHR9O1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuXHJcbmltcG9ydCB7IENPTFVNTl9TRVBFUkFUT1IsIFJFTkRFUl9BU19TRVBFUkFUT1IgfSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBBcGlSZXF1ZXN0Q29sdW1uLCBBcGlSZXF1ZXN0Q29sdW1ucywgUmVzcG9uc2VDb2x1bW5NYXAgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5pbXBvcnQgeyBleHRlbmQsIGdldEZpcnN0UHJvcGVydHksIGlzRGVmaW5lZCB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sdW1uVXRpbCB7XHJcblx0Y29uc3RydWN0b3IgKCkge1xyXG5cdH1cclxuXHJcblx0Z2V0Q29sdW1uUGF0aCAoY29sdW1ucywgcmVuZGVyQXMpIHtcclxuXHRcdGxldCBzZXBhcmF0b3IgPSAnJztcclxuXHRcdGxldCByZXN1bHQgPSAnJztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdHJlc3VsdCArPSBzZXBhcmF0b3IgKyBjb2x1bW4uaWQ7XHJcblx0XHRcdHNlcGFyYXRvciA9IENPTFVNTl9TRVBFUkFUT1I7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHJlbmRlckFzICE9PSBudWxsKVxyXG5cdFx0XHRyZXN1bHQgKz0gUkVOREVSX0FTX1NFUEVSQVRPUiArIHJlbmRlckFzO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRnZXREYXRlRm9ybWF0T3B0aW9ucyAoY29sdW1uVHlwZSkge1xyXG5cdFx0Y29uc3Qgbm93ID0gbW9tZW50KCk7XHJcblxyXG5cdFx0Y29uc3QgZm9ybWF0cyA9IHtcclxuXHRcdFx0J0otTS1ZJzogbm93LmZvcm1hdCgnREQtTU0tWVlZWScpLFxyXG5cdFx0XHQnSi1NJzogbm93LmZvcm1hdCgnREQtTU0nKSxcclxuXHRcdFx0J2orRitZJzogbm93LmZvcm1hdCgnRCBNTU0gWVlZWScpLFxyXG5cdFx0XHQnRCtqK0YrWSc6IG5vdy5mb3JtYXQoJ2RkZGQgRCBNTU0gWVlZWScpLFxyXG5cdFx0XHQnRic6IG5vdy5mb3JtYXQoJ01NTScpLFxyXG5cdFx0XHQnZic6IG5vdy5mb3JtYXQoJ01NTU0nKSxcclxuXHRcdFx0J0QnOiBub3cuZm9ybWF0KCdkZGRkJyksXHJcblx0XHRcdCdkJzogbm93LmZvcm1hdCgnZGRkJylcclxuXHRcdH07XHJcblxyXG5cdFx0aWYgKGNvbHVtblR5cGUgPT09ICdkYXRldGltZScpXHJcblx0XHRcdGV4dGVuZChmb3JtYXRzLCB7XHJcblx0XHRcdFx0J0otTS1ZK0g6aSc6IG5vdy5mb3JtYXQoJ0RELU1NLVlZWVkgSEg6bW0nKSxcclxuXHRcdFx0XHQnSi1NK0g6aSc6IG5vdy5mb3JtYXQoJ0RELU1NIEhIOm1tJyksXHJcblx0XHRcdFx0J2orRitZK0g6aSc6IG5vdy5mb3JtYXQoJ0REIE1NTU0gWSBISDptbScpLFxyXG5cdFx0XHRcdCdEK2orRitZK0g6aSc6IG5vdy5mb3JtYXQoJ2RkZGQgREQgTU1NIFkgSEg6bW0nKSxcclxuXHRcdFx0XHQnSDppJzogbm93LmZvcm1hdCgnSEg6bW0nKSxcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0cmV0dXJuIGZvcm1hdHM7XHJcblx0fVxyXG5cclxuXHRpc1N0cmluZ0NvbHVtbiAoY29sdW1uKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ2VtYWlsJzpcclxuXHRcdFx0Y2FzZSAncGhvbmUnOlxyXG5cdFx0XHRjYXNlICd1cmwnOlxyXG5cdFx0XHRjYXNlICd0ZXh0JzpcclxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxyXG5cdFx0XHRjYXNlICd0ZXh0cmVwbGFjZSc6XHJcblx0XHRcdFx0Ly8gY2FzZSAnaHRtbCc6IC8vIFRPRE86IHNvcnQgb24gZmlsdGVyZWQgdmFsdWVcclxuXHRcdFx0XHQvLyBjYXNlICdlbnVtJzpcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpc0Zsb2F0Q29sdW1uIChjb2x1bW4pIHtcclxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZG91YmxlJzogLy8gZmxvYXRpbmcgcG9pbnQgdHlwZXNcclxuXHRcdFx0Y2FzZSAndm9sdW1lJzpcclxuXHRcdFx0Y2FzZSAnd2VpZ2h0JzpcclxuXHRcdFx0Y2FzZSAnZGlzdGFuY2UnOlxyXG5cdFx0XHRjYXNlICdkaW1lbnNpb24nOlxyXG5cdFx0XHRjYXNlICdwb3dlcic6XHJcblx0XHRcdGNhc2UgJ2N1cnJlbnQnOlxyXG5cdFx0XHRjYXNlICdwcmljZSc6XHJcblx0XHRcdGNhc2UgJ3BlcmNlbnRhZ2UnOlxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlzSW50Q29sdW1uIChjb2x1bW4pIHtcclxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnaW50JzogLy8gaW50ZWdlciB0eXBlc1xyXG5cdFx0XHRjYXNlICdudW1iZXInOlxyXG5cdFx0XHRjYXNlICdxdWFudGl0eSc6XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aXNOdW1iZXJDb2x1bW4gKGNvbHVtbikge1xyXG5cdFx0cmV0dXJuIHRoaXMuaXNGbG9hdENvbHVtbihjb2x1bW4pIHx8IHRoaXMuaXNJbnRDb2x1bW4oY29sdW1uKTtcclxuXHR9XHJcblxyXG5cdGlzQ3VzdG9tQ29sdW1uIChjb2x1bW4pIHtcclxuXHRcdHJldHVybiBjb2x1bW4uZmllbGR0eXBlID09PSAnY3VzdG9tZmllbGQnO1xyXG5cdH1cclxuXHJcblx0aXNJdGVtQ29sdW1uIChjb2x1bW4sIGluY2x1ZGVJZCA9IHRydWUpIHtcclxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnaWQnOlxyXG5cdFx0XHRcdHJldHVybiBpbmNsdWRlSWQ7XHJcblx0XHRcdGNhc2UgJ2l0ZW0nOlxyXG5cdFx0XHRjYXNlICdjaGlsZCc6XHJcblx0XHRcdGNhc2UgJ3NpYmxpbmcnOlxyXG5cdFx0XHRjYXNlICdsaW5rJzpcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpc0RhdGVDb2x1bW4gKGNvbHVtbikge1xyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdkYXRldGltZSc6XHJcblx0XHRcdGNhc2UgJ2RhdGUnOlxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlzUmVuZGVyZWRDb2x1bW4gKGNvbHVtbikge1xyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdkYXRldGltZSc6XHJcblx0XHRcdGNhc2UgJ2RhdGUnOlxyXG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aXNGaWx0ZXJlZENvbHVtbiAoY29sdW1uKSB7XHJcblx0XHQvLyB1Z2x5IGhhY2sgOi0oXHJcblx0XHRpZiAoY29sdW1uLmlkID09PSAnc3RhZmZlbCcpXHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cclxuXHRcdGlmIChjb2x1bW4uZ2VuZXJhdG9yICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cclxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcclxuXHRcdFx0Y2FzZSAncHJpY2UnOlxyXG5cdFx0XHRjYXNlICdib29sJzpcclxuXHRcdFx0Y2FzZSAnZW51bSc6XHJcblx0XHRcdGNhc2UgJ2NvdW50cnknOlxyXG5cdFx0XHRjYXNlICd2b2x1bWUnOlxyXG5cdFx0XHRjYXNlICd3ZWlnaHQnOlxyXG5cdFx0XHRjYXNlICdkaXN0YW5jZSc6XHJcblx0XHRcdGNhc2UgJ2RpbWVuc2lvbic6XHJcblx0XHRcdGNhc2UgJ3F1YW50aXR5JzpcclxuXHRcdFx0Y2FzZSAnZW1haWwnOlxyXG5cdFx0XHRjYXNlICd1cmwnOlxyXG5cdFx0XHRjYXNlICdkYXRldGltZSc6XHJcblx0XHRcdGNhc2UgJ2RhdGUnOlxyXG5cdFx0XHRjYXNlICd0aW1lJzpcclxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxyXG5cdFx0XHRjYXNlICdodG1sJzpcclxuXHRcdFx0Y2FzZSAndGV4dHJlcGxhY2UnOlxyXG5cdFx0XHRjYXNlICdsb25ndGV4dCc6XHJcblx0XHRcdGNhc2UgJ3BlcmNlbnRhZ2UnOlxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlzRm9ybWF0dGVkQ29sdW1uIChjb2x1bW4pIHtcclxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0Y2FzZSAndGltZSc6XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0Y2FzZSAnY29sb3InOlxyXG5cdFx0XHRjYXNlICdqc29uJzpcclxuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcclxuXHRcdFx0Y2FzZSAnZmlsZXNpemUnOlxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlzU2VsZWN0YWJsZUNvbHVtbiAoY29sdW1uKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ2Jsb2InOlxyXG5cdFx0XHRjYXNlICdjb29yZGluYXRlJzpcclxuXHRcdFx0Y2FzZSAnZm9yY2V1cGRhdGUnOlxyXG5cdFx0XHRjYXNlICdpZCc6XHJcblx0XHRcdGNhc2UgJ2pzb24nOlxyXG5cdFx0XHRjYXNlICdvcmRlcic6XHJcblx0XHRcdGNhc2UgJ3BhcmVudGlkJzpcclxuXHRcdFx0Y2FzZSAncGFyZW50dHlwZSc6XHJcblx0XHRcdGNhc2UgJ3Bhc3N3b3JkJzpcclxuXHRcdFx0Y2FzZSAndG9rZW4nOlxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdGhhc0xvY2F0aW9uUHJvcGVydHkgKGNvbHVtbiwgbG9jYXRpb24pIHtcclxuXHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1iaXR3aXNlXHJcblx0XHRyZXR1cm4gKGxvY2F0aW9uICYgY29sdW1uLmxvY2F0aW9uKSAhPT0gMDtcclxuXHR9XHJcblxyXG5cdGlzRWRpdGFibGVDb2x1bW4gKGNvbHVtbikge1xyXG5cdFx0aWYgKGNvbHVtbi5yZWFkT25seSlcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcclxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdGlzU2VhcmNoYWJsZUNvbHVtbiAoY29sdW1uKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ2VtYWlsJzpcclxuXHRcdFx0Y2FzZSAncGhvbmUnOlxyXG5cdFx0XHRjYXNlICd0ZXh0JzpcclxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxyXG5cdFx0XHRjYXNlICdodG1sJzpcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRnZXREZWZhdWx0V2VpZ2h0IChjb2x1bW4pIHtcclxuXHRcdC8vIFx0XHRcdGNvbnNvbGUubG9nKCdnZXREZWZhdWx0V2VpZ2h0JywgY29sdW1uKTtcclxuXHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ2RvdWJsZSc6XHJcblx0XHRcdGNhc2UgJ3ByaWNlJzpcclxuXHRcdFx0Y2FzZSAnYm9vbCc6XHJcblx0XHRcdGNhc2UgJ2ludCc6XHJcblx0XHRcdGNhc2UgJ3BlcmNlbnRhZ2UnOlxyXG5cdFx0XHRjYXNlICdjb2xvcic6XHJcblx0XHRcdGNhc2UgJ251bWJlcic6XHJcblx0XHRcdGNhc2UgJ3Bvd2VyJzpcclxuXHRcdFx0Y2FzZSAnY3VycmVudCc6XHJcblx0XHRcdFx0cmV0dXJuIDAuNTtcclxuXHJcblx0XHRcdGNhc2UgJ3VybCc6XHJcblx0XHRcdGNhc2UgJ2VudW0nOlxyXG5cdFx0XHRjYXNlICdlbWFpbCc6XHJcblx0XHRcdGNhc2UgJ3RleHQnOlxyXG5cdFx0XHRjYXNlICdpdGVtJzpcclxuXHRcdFx0Y2FzZSAnbGluayc6XHJcblx0XHRcdFx0cmV0dXJuIDEuNTtcclxuXHJcblx0XHRcdGNhc2UgJ2xvbmd0ZXh0JzpcclxuXHRcdFx0Y2FzZSAnaHRtbCc6XHJcblx0XHRcdGNhc2UgJ3RleHRyZXBsYWNlJzpcclxuXHRcdFx0XHRyZXR1cm4gMjtcclxuXHJcblx0XHRcdGNhc2UgJ2RhdGUnOlxyXG5cdFx0XHRjYXNlICdkYXRldGltZSc6XHJcblx0XHRcdGNhc2UgJ3RpbWUnOlxyXG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XHJcblx0XHRcdFx0cmV0dXJuIDE7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIDE7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRnZXRDb21wYXJhdG9ycyAoY29sdW1uKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ2RpbWVuc2lvbic6XHJcblx0XHRcdGNhc2UgJ3dlaWdodCc6XHJcblx0XHRcdGNhc2UgJ3ByaWNlJzpcclxuXHRcdFx0XHRyZXR1cm4gWyc9JywgJz4nLCAnPCddO1xyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRjYXNlICd0aW1lJzpcclxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxyXG5cdFx0XHRcdHJldHVybiBbJz4nLCAnPCddO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiBbJz0nLCAnIT0nXTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIHJldHVybnMgd2hldGhlciB0aGUgZmlyc3QgY29sdW1uIHNldCBpcyBhIHN1YnNldCBvZiB0aGUgc2Vjb25kXHJcblx0aXNDb2x1bW5TdWJzZXQgKGZpcnN0LCBzZWNvbmQsIHNlY29uZFRydWUpIHtcclxuXHRcdGlmIChmaXJzdCA9PT0gdHJ1ZSkgLy8gPT09IG9wZXJhdG9yIG5lZWRlZCBoZXJlXHJcblx0XHRcdHJldHVybiBzZWNvbmRUcnVlO1xyXG5cclxuXHRcdC8vIHdoZW4gc2Vjb25kVHJ1ZSBpcyB0aGUgY2FzZSB3ZSBuZWVkIHRvIGNoZWNrIGZvciBkZXJpdmVkIGNvbHVtbnNcclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGZpcnN0KSB7XHJcblx0XHRcdGlmICghdGhpcy5jb250YWluc0NvbHVtbihjb2x1bW4sIHNlY29uZCkpXHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0Y29udGFpbnNDb2x1bW4gKHJlcXVlc3RDb2x1bW4sIGRlc3RpbmF0aW9uKSB7XHJcblx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcclxuXHRcdGNvbnN0IGNvbHVtbkluZGV4ID0gdGhpcy5maW5kQ29sdW1uKGNvbHVtbi5pZCwgZGVzdGluYXRpb24pO1xyXG5cclxuXHRcdGlmIChjb2x1bW5JbmRleCA9PT0gLTEpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRpZiAoY29sdW1uLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblxyXG5cdFx0aWYgKHR5cGVvZiBkZXN0aW5hdGlvbltjb2x1bW5JbmRleF0gPT09ICdzdHJpbmcnKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjaGlsZENvbHVtbiBvZiBjb2x1bW4uY2hpbGRyZW4pIHtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdCF0aGlzLmNvbnRhaW5zQ29sdW1uKFxyXG5cdFx0XHRcdFx0Y2hpbGRDb2x1bW4sXHJcblx0XHRcdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5JbmRleF1bY29sdW1uLmlkXVxyXG5cdFx0XHRcdClcclxuXHRcdFx0KVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdHJlc3BvbnNlQ29sdW1uc0F2YWlsYWJsZSAoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbk1hcCkge1xyXG5cdFx0Zm9yIChjb25zdCByZXF1ZXN0Q29sdW1uIG9mIHJlcXVlc3RDb2x1bW5zKSB7XHJcblx0XHRcdGNvbnN0IHBhcnNlZENvbHVtbiA9IHRoaXMucGFyc2VSZXF1ZXN0Q29sdW1uKHJlcXVlc3RDb2x1bW4pO1xyXG5cdFx0XHRjb25zdCBjaGlsZHJlbiA9IHBhcnNlZENvbHVtbi5jaGlsZHJlbjtcclxuXHRcdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gcmVzcG9uc2VDb2x1bW5NYXBbaXRlbVR5cGVdO1xyXG5cdFx0XHRsZXQgcmVzcG9uc2VDb2x1bW47XHJcblxyXG5cdFx0XHRpZiAocmVzcG9uc2VDb2x1bW5zID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdFx0cmVzcG9uc2VDb2x1bW4gPSByZXNwb25zZUNvbHVtbnNbcGFyc2VkQ29sdW1uLmlkXTtcclxuXHJcblx0XHRcdGlmIChyZXNwb25zZUNvbHVtbiA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRcdGlmIChjaGlsZHJlbi5sZW5ndGggPiAwICYmICF0aGlzLnJlc3BvbnNlQ29sdW1uc0F2YWlsYWJsZShyZXNwb25zZUNvbHVtbi5pdGVtVHlwZSwgY2hpbGRyZW4sIHJlc3BvbnNlQ29sdW1uTWFwKSlcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRjb3B5UmVxdWVzdENvbHVtbnMgKGNvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zKTogQXBpUmVxdWVzdENvbHVtbnMge1xyXG5cdFx0aWYgKGNvbHVtbnMgPT09IHRydWUpXHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cclxuXHRcdGNvbnN0IHJlc3VsdDogQXBpUmVxdWVzdENvbHVtbltdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucylcclxuXHRcdFx0cmVzdWx0LnB1c2godGhpcy5jb3B5UmVxdWVzdENvbHVtbihjb2x1bW4pKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Y29weVJlcXVlc3RDb2x1bW4gKHJlcXVlc3RDb2x1bW46IEFwaVJlcXVlc3RDb2x1bW4pOiBBcGlSZXF1ZXN0Q29sdW1uIHtcclxuXHRcdGNvbnN0IGNvbHVtbiA9IHRoaXMucGFyc2VSZXF1ZXN0Q29sdW1uKHJlcXVlc3RDb2x1bW4pO1xyXG5cclxuXHRcdGlmIChjb2x1bW4uY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gY29sdW1uLmlkO1xyXG5cclxuXHRcdGNvbnN0IGNoaWxkcmVuOiBBcGlSZXF1ZXN0Q29sdW1uW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNoaWxkQ29sdW1uIG9mIGNvbHVtbi5jaGlsZHJlbilcclxuXHRcdFx0Y2hpbGRyZW4ucHVzaCh0aGlzLmNvcHlSZXF1ZXN0Q29sdW1uKGNoaWxkQ29sdW1uKSk7XHJcblxyXG5cdFx0cmV0dXJuIHtbY29sdW1uLmlkXTogY2hpbGRyZW59O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRGlmZmVyZW5jZTogY29sdW1ucyB0aGF0IGFyZSBpbiBzZWNvbmQsIGJ1dCBub3QgaW4gZmlyc3RcclxuXHQgKiBAcGFyYW0ge0FycmF5fSBmaXJzdFxyXG5cdCAqIEBwYXJhbSB7QXJyYXl9IHNlY29uZFxyXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nICdtZXJnZWQnIGFuZCAnZGlmZmVyZW5jZScgcHJvcGVydGllc1xyXG5cdCAqL1xyXG5cdG1lcmdlUmVxdWVzdENvbHVtbnMgKGZpcnN0OiBBcGlSZXF1ZXN0Q29sdW1ucywgc2Vjb25kOiBBcGlSZXF1ZXN0Q29sdW1ucyk6IHttZXJnZWQ6IEFwaVJlcXVlc3RDb2x1bW5zLCBkaWZmZXJlbmNlOiBBcGlSZXF1ZXN0Q29sdW1uc30ge1xyXG5cdFx0aWYgKGZpcnN0ID09PSB0cnVlKSAvLyA9PT0gb3BlcmF0b3IgbmVlZGVkIGhlcmVcclxuXHRcdFx0cmV0dXJuIHttZXJnZWQ6IHRydWUsIGRpZmZlcmVuY2U6IFtdfTtcclxuXHJcblx0XHRpZiAoc2Vjb25kID09PSB0cnVlKVxyXG5cdFx0XHRyZXR1cm4ge21lcmdlZDogdHJ1ZSwgZGlmZmVyZW5jZTogdHJ1ZX07XHJcblxyXG5cdFx0Y29uc3QgbWVyZ2VkOiBBcGlSZXF1ZXN0Q29sdW1ucyA9IHRoaXMuY29weVJlcXVlc3RDb2x1bW5zKGZpcnN0KTtcclxuXHRcdGNvbnN0IGRpZmZlcmVuY2U6IEFwaVJlcXVlc3RDb2x1bW5zID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2Ygc2Vjb25kKSB7XHJcblx0XHRcdGNvbnN0IGFkZGVkQ29sdW1uID0gdGhpcy5tZXJnZVJlcXVlc3RDb2x1bW4oY29sdW1uLCBtZXJnZWQpO1xyXG5cclxuXHRcdFx0aWYgKGFkZGVkQ29sdW1uICE9PSBudWxsKVxyXG5cdFx0XHRcdGRpZmZlcmVuY2UucHVzaChhZGRlZENvbHVtbik7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHttZXJnZWQ6IG1lcmdlZCwgZGlmZmVyZW5jZTogZGlmZmVyZW5jZX07XHJcblx0fVxyXG5cclxuXHRtZXJnZVJlcXVlc3RDb2x1bW4gKHJlcXVlc3RDb2x1bW4sIGRlc3RpbmF0aW9uKSB7XHJcblx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcclxuXHRcdGNvbnN0IGNvbHVtbkluZGV4ID0gdGhpcy5maW5kQ29sdW1uKGNvbHVtbi5pZCwgZGVzdGluYXRpb24pO1xyXG5cclxuXHRcdGlmIChjb2x1bW5JbmRleCA9PT0gLTEpIHtcclxuXHRcdFx0ZGVzdGluYXRpb24ucHVzaChyZXF1ZXN0Q29sdW1uKTtcclxuXHRcdFx0cmV0dXJuIHJlcXVlc3RDb2x1bW47XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGNvbHVtbi5jaGlsZHJlbi5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cclxuXHRcdGlmICh0eXBlb2YgZGVzdGluYXRpb25bY29sdW1uSW5kZXhdID09PSAnc3RyaW5nJykge1xyXG5cdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5JbmRleF0gPSB7XHJcblx0XHRcdFx0W2NvbHVtbi5pZF06IFtdXHJcblx0XHRcdH07XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgYWRkZWRDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY2hpbGRDb2x1bW4gb2YgY29sdW1uLmNoaWxkcmVuKSB7XHJcblx0XHRcdGNvbnN0IGFkZGVkQ29sdW1uID0gdGhpcy5tZXJnZVJlcXVlc3RDb2x1bW4oXHJcblx0XHRcdFx0Y2hpbGRDb2x1bW4sXHJcblx0XHRcdFx0ZGVzdGluYXRpb25bY29sdW1uSW5kZXhdW2NvbHVtbi5pZF1cclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdGlmIChhZGRlZENvbHVtbiAhPT0gbnVsbClcclxuXHRcdFx0XHRhZGRlZENvbHVtbnMucHVzaChhZGRlZENvbHVtbik7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGFkZGVkQ29sdW1ucy5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cclxuXHRcdHJldHVybiB7XHJcblx0XHRcdFtjb2x1bW4uaWRdOiBhZGRlZENvbHVtbnNcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHRwYXJzZVJlcXVlc3RDb2x1bW4gKHJlcXVlc3RDb2x1bW4pOiB7aWQ6IHN0cmluZywgY2hpbGRyZW46IEFwaVJlcXVlc3RDb2x1bW5bXX0ge1xyXG5cdFx0Y29uc3QgaXNMZWFmID0gdHlwZW9mIHJlcXVlc3RDb2x1bW4gPT09ICdzdHJpbmcnO1xyXG5cdFx0Y29uc3QgY29sdW1uSWQgPSBpc0xlYWYgPyByZXF1ZXN0Q29sdW1uIDogZ2V0Rmlyc3RQcm9wZXJ0eShyZXF1ZXN0Q29sdW1uKTtcclxuXHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRpZDogY29sdW1uSWQsXHJcblx0XHRcdGNoaWxkcmVuOiBpc0xlYWYgPyBbXSA6IHJlcXVlc3RDb2x1bW5bY29sdW1uSWRdXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTWVyZ2VzIHR3byBzZXRzIG9mIHJlc3BvbnNlIGNvbHVtbnMuXHJcblx0ICogQHBhcmFtIHtvYmplY3R9IGZpcnN0XHJcblx0ICogQHBhcmFtIHtvYmplY3R9IHNlY29uZFxyXG5cdCAqIEByZXR1cm5zIHtvYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIGEgJ21lcmdlZCcgYW5kIGEgJ2RpZmZlcmVuY2UnIHByb3BlcnR5LlxyXG5cdCAqL1xyXG5cdG1lcmdlUmVzcG9uc2VDb2x1bW5zIChcclxuXHRcdGZpcnN0OiBSZXNwb25zZUNvbHVtbk1hcCxcclxuXHRcdHNlY29uZDogUmVzcG9uc2VDb2x1bW5NYXBcclxuXHQpOiB7bWVyZ2VkOiBSZXNwb25zZUNvbHVtbk1hcCwgZGlmZmVyZW5jZTogUmVzcG9uc2VDb2x1bW5NYXB9IHtcclxuXHRcdGNvbnN0IG1lcmdlZDogUmVzcG9uc2VDb2x1bW5NYXAgPSB7fTtcclxuXHRcdGNvbnN0IGRpZmZlcmVuY2U6IFJlc3BvbnNlQ29sdW1uTWFwID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBmaXJzdCkge1xyXG5cdFx0XHRpZiAoc2Vjb25kW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0bWVyZ2VkW2l0ZW1UeXBlXSA9IGZpcnN0W2l0ZW1UeXBlXTtcclxuXHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IG1lcmdlUmVzdWx0ID0gdGhpcy5tZXJnZVJlc3BvbnNlQ29sdW1uTWFwKFxyXG5cdFx0XHRcdGZpcnN0W2l0ZW1UeXBlXSxcclxuXHRcdFx0XHRzZWNvbmRbaXRlbVR5cGVdXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHRtZXJnZWRbaXRlbVR5cGVdID0gbWVyZ2VSZXN1bHQubWVyZ2VkO1xyXG5cdFx0XHRkaWZmZXJlbmNlW2l0ZW1UeXBlXSA9IG1lcmdlUmVzdWx0LmRpZmZlcmVuY2U7XHJcblx0XHR9XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBzZWNvbmQpIHtcclxuXHRcdFx0aWYgKGZpcnN0W2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0bWVyZ2VkW2l0ZW1UeXBlXSA9IHNlY29uZFtpdGVtVHlwZV07XHJcblx0XHRcdFx0ZGlmZmVyZW5jZVtpdGVtVHlwZV0gPSBzZWNvbmRbaXRlbVR5cGVdO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHttZXJnZWQ6IG1lcmdlZCwgZGlmZmVyZW5jZTogZGlmZmVyZW5jZX07XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBAcGFyYW0ge2FycmF5fSBmaXJzdFxyXG5cdCAqIEBwYXJhbSB7YXJyYXl9IHNlY29uZFxyXG5cdCAqIEByZXR1cm5zIHtvYmplY3R9IGRpZmZlcmVuY2U6IHRoZSBjb2x1bW5zIHRoYXQgYXJlIGluIHNlY29uZCwgYnV0IG5vdCBpbiBmaXJzdC5cclxuXHQgKi9cclxuXHRtZXJnZVJlc3BvbnNlQ29sdW1uTWFwIChmaXJzdCwgc2Vjb25kKSB7XHJcblx0XHRjb25zdCBtZXJnZWQgPSB7fTtcclxuXHRcdGNvbnN0IGRpZmZlcmVuY2UgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIGZpcnN0KVxyXG5cdFx0XHRtZXJnZWRbY29sdW1uSWRdID0gZmlyc3RbY29sdW1uSWRdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gc2Vjb25kKSB7XHJcblx0XHRcdGlmIChpc0RlZmluZWQoZmlyc3RbY29sdW1uSWRdKSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdG1lcmdlZFtjb2x1bW5JZF0gPSBzZWNvbmRbY29sdW1uSWRdO1xyXG5cdFx0XHRkaWZmZXJlbmNlW2NvbHVtbklkXSA9IHNlY29uZFtjb2x1bW5JZF07XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHttZXJnZWQ6IG1lcmdlZCwgZGlmZmVyZW5jZTogZGlmZmVyZW5jZX07XHJcblx0fVxyXG5cclxuXHRpc0xvY2FsQ29sdW1uSWQgKGNvbHVtbklkKSB7XHJcblx0XHRyZXR1cm4gY29sdW1uSWQuc3Vic3RyaW5nKDAsIDIpID09PSAnX18nO1xyXG5cdH1cclxuXHJcblx0cHJvY2Vzc0NvbmZpZ0NvbHVtbnMgKGNvbHVtbnMpIHtcclxuXHRcdGNvbnN0IHJlcXVlc3QgPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdGlmICh0aGlzLmlzTG9jYWxDb2x1bW5JZChjb2x1bW4pKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0dGhpcy5wcm9jZXNzQ29uZmlnQ29sdW1uKHRoaXMucGFyc2VDb25maWdDb2x1bW4oY29sdW1uKSwgcmVxdWVzdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlcXVlc3Q7XHJcblx0fVxyXG5cclxuXHRwYXJzZUNvbmZpZ0NvbHVtbiAoY29sdW1uKSB7XHJcblx0XHRyZXR1cm4gY29sdW1uLnNwbGl0KFJFTkRFUl9BU19TRVBFUkFUT1IpWzBdLnNwbGl0KENPTFVNTl9TRVBFUkFUT1IpO1xyXG5cdH1cclxuXHJcblx0cHJvY2Vzc0NvbmZpZ0NvbHVtbiAoY29sdW1uQXJyYXksIGRlc3RpbmF0aW9uKSB7XHJcblx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbkFycmF5WzBdO1xyXG5cdFx0Y29uc3QgaXNMZWFmID0gY29sdW1uQXJyYXkubGVuZ3RoID09PSAxO1xyXG5cclxuXHRcdGlmIChpc0xlYWYpIHtcclxuXHRcdFx0aWYgKGRlc3RpbmF0aW9uLmluZGV4T2YoY29sdW1uSWQpID09PSAtMSlcclxuXHRcdFx0XHRkZXN0aW5hdGlvbi5wdXNoKGNvbHVtbklkKTtcclxuXHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgY29sdW1uSW5kZXggPSB0aGlzLmZpbmRDb2x1bW5PYmplY3QoY29sdW1uSWQsIGRlc3RpbmF0aW9uKTtcclxuXHJcblx0XHRpZiAoY29sdW1uSW5kZXggPT09IC0xKSB7XHJcblx0XHRcdGNvbHVtbkluZGV4ID0gZGVzdGluYXRpb24ucHVzaCh7XHJcblx0XHRcdFx0W2NvbHVtbklkXTogW11cclxuXHRcdFx0fSkgLSAxO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMucHJvY2Vzc0NvbmZpZ0NvbHVtbihcclxuXHRcdFx0Y29sdW1uQXJyYXkuc2xpY2UoMSksXHJcblx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XVtjb2x1bW5JZF1cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRmaW5kQ29sdW1uT2JqZWN0IChjb2x1bW5JZCwgYXJyYXkpIHtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0aWYgKGdldEZpcnN0UHJvcGVydHkoYXJyYXlbaV0pID09PSBjb2x1bW5JZClcclxuXHRcdFx0XHRyZXR1cm4gaTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gLTE7XHJcblx0fVxyXG5cclxuXHRmaW5kQ29sdW1uIChjb2x1bW5JZCwgYXJyYXkpIHtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uID0gYXJyYXlbaV07XHJcblxyXG5cdFx0XHRpZiAodHlwZW9mIGNvbHVtbiA9PT0gJ3N0cmluZycpIHtcclxuXHRcdFx0XHRpZiAoY29sdW1uID09PSBjb2x1bW5JZClcclxuXHRcdFx0XHRcdHJldHVybiBpO1xyXG5cclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKGdldEZpcnN0UHJvcGVydHkoY29sdW1uKSA9PT0gY29sdW1uSWQpXHJcblx0XHRcdFx0cmV0dXJuIGk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIC0xO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUsIENvbGxlY3Rpb25IYW5kbGVyLCBDcmVhdGVDb21waWxhdGlvbiwgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksIFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQ3JlYXRlUmVxdWVzdEVudHJ5LCBDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwLCBJdGVtRW50cnlNYXAsIEl0ZW1JZCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5pbXBvcnQgeyBnZXRQYXRoIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDcmVhdGVSZXF1ZXN0IHtcclxuXHRyZXF1ZXN0czogQ3JlYXRlUmVxdWVzdEVudHJ5W10gPSBbXTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeTogQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSByZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbXBpbGF0aW9uOiBDcmVhdGVDb21waWxhdGlvbixcclxuXHRcdHByaXZhdGUgbG9jYWxDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZSxcclxuXHRcdHByaXZhdGUgcGFyYW1ldGVyTWFwOiBDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwLFxyXG5cdFx0cHJpdmF0ZSBicmVha3VwQnlQYXJlbnQgPSBmYWxzZVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0ZmluYWxpemVSZXF1ZXN0IChyZXF1ZXN0UmVzb3VyY2U6IENyZWF0ZVJlcXVlc3RFbnRyeSkge1xyXG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJpZXMgPSByZXF1ZXN0UmVzb3VyY2UuY29sbGVjdGlvbnMuZ2V0Q29sbGVjdGlvbnNXaXRoRml0dGluZ0l0ZW1zKCk7XHJcblx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSByZXF1ZXN0UmVzb3VyY2UuY29sdW1ucztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiBjb2xsZWN0aW9uRW50cmllcylcclxuXHRcdFx0Y29sdW1uRXhwYW5zaW9uLmV4cGFuZChjb2xsZWN0aW9uRW50cnkuY29sdW1ucyk7XHJcblxyXG5cdFx0cmVxdWVzdFJlc291cmNlLnJlcXVlc3QuY29sdW1ucyA9IGNvbHVtbkV4cGFuc2lvbi5nZXQoKTtcclxuXHJcblx0XHRyZXR1cm4gcmVxdWVzdFJlc291cmNlO1xyXG5cdH1cclxuXHJcblx0c2V0UmVxdWVzdFBhcmVudCAocGFyZW50VHlwZTogSXRlbVR5cGUsIHJlcXVlc3RFbnRyeTogQ3JlYXRlUmVxdWVzdEVudHJ5KSB7XHJcblx0XHRjb25zdCByZXF1ZXN0ID0gcmVxdWVzdEVudHJ5LnJlcXVlc3Q7XHJcblxyXG5cdFx0aWYgKHBhcmVudFR5cGUgPT09ICdWb2lkJylcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdHJlcXVlc3QucGFyZW50VHlwZSA9IHBhcmVudFR5cGU7XHJcblx0XHRyZXF1ZXN0LnBhcmVudElkID0ge307XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRydW4gKCkge1xyXG5cdFx0Y29uc3QgY29tcGlsYXRpb24gPSB0aGlzLmNvbXBpbGF0aW9uO1xyXG5cclxuXHRcdGlmICh0aGlzLmJyZWFrdXBCeVBhcmVudCkge1xyXG5cdFx0XHRmb3IgKGNvbnN0IHBhcmVudFR5cGUgaW4gY29tcGlsYXRpb24pIHtcclxuXHRcdFx0XHRjb25zdCBwYXJlbnRNYXAgPSBjb21waWxhdGlvbltwYXJlbnRUeXBlXTtcclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBwYXJlbnRNYXApIHtcclxuXHRcdFx0XHRcdGlmICh0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudElkKSlcclxuXHRcdFx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRcdFx0Y29uc3QgcmVxdWVzdFJlc291cmNlID0gdGhpcy5pbml0aWFsaXplUmVxdWVzdCgpO1xyXG5cclxuXHRcdFx0XHRcdHRoaXMuZXh0ZW5kUmVxdWVzdChcclxuXHRcdFx0XHRcdFx0cGFyZW50TWFwW3BhcmVudElkXSxcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRSZXF1ZXN0UGFyZW50KHBhcmVudFR5cGUsIHJlcXVlc3RSZXNvdXJjZSkgPyArcGFyZW50SWQgOiBudWxsLFxyXG5cdFx0XHRcdFx0XHRyZXF1ZXN0UmVzb3VyY2VcclxuXHRcdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdFx0dGhpcy5yZXF1ZXN0cy5wdXNoKHRoaXMuZmluYWxpemVSZXF1ZXN0KHJlcXVlc3RSZXNvdXJjZSkpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Zm9yIChjb25zdCBwYXJlbnRUeXBlIGluIGNvbXBpbGF0aW9uKSB7XHJcblx0XHRcdFx0Y29uc3QgcGFyZW50TWFwID0gY29tcGlsYXRpb25bcGFyZW50VHlwZV07XHJcblx0XHRcdFx0Y29uc3QgcmVxdWVzdFJlc291cmNlID0gdGhpcy5pbml0aWFsaXplUmVxdWVzdCgpO1xyXG5cdFx0XHRcdGNvbnN0IGhhc1BhcmVudCA9IHRoaXMuc2V0UmVxdWVzdFBhcmVudChwYXJlbnRUeXBlLCByZXF1ZXN0UmVzb3VyY2UpO1xyXG5cclxuXHRcdFx0XHRsZXQgdmFsaWRSZXF1ZXN0ID0gZmFsc2U7XHJcblxyXG5cdFx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gcGFyZW50TWFwKSB7XHJcblx0XHRcdFx0XHRpZiAodGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZChwYXJlbnRJZCkpXHJcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0XHRcdHRoaXMuZXh0ZW5kUmVxdWVzdChcclxuXHRcdFx0XHRcdFx0cGFyZW50TWFwW3BhcmVudElkXSxcclxuXHRcdFx0XHRcdFx0aGFzUGFyZW50ID8gK3BhcmVudElkIDogbnVsbCxcclxuXHRcdFx0XHRcdFx0cmVxdWVzdFJlc291cmNlXHJcblx0XHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRcdHZhbGlkUmVxdWVzdCA9IHRydWU7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZiAodmFsaWRSZXF1ZXN0KVxyXG5cdFx0XHRcdFx0dGhpcy5yZXF1ZXN0cy5wdXNoKHRoaXMuZmluYWxpemVSZXF1ZXN0KHJlcXVlc3RSZXNvdXJjZSkpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucmVxdWVzdHM7XHJcblx0fVxyXG5cclxuXHRpbml0aWFsaXplUmVxdWVzdCAoKTogQ3JlYXRlUmVxdWVzdEVudHJ5IHtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdHJlcXVlc3Q6IHtcclxuXHRcdFx0XHRyZXF1ZXN0VHlwZTogJ2NyZWF0ZScsXHJcblx0XHRcdFx0aXRlbXM6IHt9LFxyXG5cdFx0XHRcdGNvbHVtbnM6IHt9XHJcblx0XHRcdH0sXHJcblx0XHRcdGNvbHVtbnM6IHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KCksXHJcblx0XHRcdGl0ZW1zOiB7fSxcclxuXHRcdFx0Y29sbGVjdGlvbnM6IHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0XHRbdGhpcy5sb2NhbENvbGxlY3Rpb25DYWNoZSwgdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5lbnRyaWVzXSxcclxuXHRcdFx0XHR0cnVlLFxyXG5cdFx0XHRcdGZhbHNlXHJcblx0XHRcdClcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGV4dGVuZFJlcXVlc3QgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlNYXAsIHJlcXVlc3RQYXJlbnRJZDogSXRlbUlkIHwgbnVsbCwgZGVzdGluYXRpb246IENyZWF0ZVJlcXVlc3RFbnRyeSkge1xyXG5cdFx0Y29uc3QgcmVxdWVzdCA9IGRlc3RpbmF0aW9uLnJlcXVlc3Q7XHJcblx0XHRjb25zdCBpdGVtRW50cnlNYXAgPSBkZXN0aW5hdGlvbi5pdGVtcztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdGlmIChyZXF1ZXN0Lml0ZW1UeXBlID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0cmVxdWVzdC5pdGVtVHlwZSA9IGl0ZW1UeXBlO1xyXG5cclxuXHRcdFx0aWYgKGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV0gPSB7fTtcclxuXHRcdFx0XHRyZXF1ZXN0Lml0ZW1zW2l0ZW1UeXBlXSA9IHt9O1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtRW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSBpdGVtRW50cmllc1tpdGVtVHlwZV1baXRlbUlkXTtcclxuXHRcdFx0XHRjb25zdCBjaGlsZEVudHJpZXMgPSBnZXRQYXRoKHRoaXMuY29tcGlsYXRpb24sIFtpdGVtVHlwZSwgaXRlbUlkXSk7XHJcblx0XHRcdFx0Y29uc3QgaXRlbVJlcXVlc3Q6IGFueSA9IHJlcXVlc3QuaXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF0gPSB7fTtcclxuXHRcdFx0XHRjb25zdCBwYXJhbWV0ZXJzID0gZ2V0UGF0aCh0aGlzLnBhcmFtZXRlck1hcCwgW2l0ZW1UeXBlLCBpdGVtSWRdKTtcclxuXHJcblx0XHRcdFx0bGV0IGxpbmtzO1xyXG5cclxuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmVudElkICE9PSBudWxsKVxyXG5cdFx0XHRcdFx0KDx7W2l0ZW1JZDogc3RyaW5nXTogSXRlbUlkfT4gcmVxdWVzdC5wYXJlbnRJZClbaXRlbUlkXSA9IHJlcXVlc3RQYXJlbnRJZDtcclxuXHJcblx0XHRcdFx0ZGVzdGluYXRpb24uY29sdW1ucy5leHBhbmQoaXRlbUVudHJ5LmNvbHVtbnMpO1xyXG5cdFx0XHRcdGRlc3RpbmF0aW9uLmNvbGxlY3Rpb25zLmV4cGFuZChpdGVtRW50cnkpO1xyXG5cclxuXHRcdFx0XHRpdGVtRW50cnlNYXBbaXRlbVR5cGVdW2l0ZW1JZF0gPSBpdGVtRW50cnk7XHJcblxyXG5cdFx0XHRcdGl0ZW1SZXF1ZXN0LnZhbHVlcyA9IGl0ZW1FbnRyeS5mb3JtYXRSZXF1ZXN0KCk7XHJcblx0XHRcdFx0aXRlbVJlcXVlc3QucGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7XHJcblxyXG5cdFx0XHRcdGlmIChjaGlsZEVudHJpZXMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0XHRsaW5rcyA9IGl0ZW1SZXF1ZXN0LmxpbmtzID0ge307XHJcblxyXG5cdFx0XHRcdGZvciAoY29uc3QgY2hpbGRUeXBlIGluIGNoaWxkRW50cmllcykge1xyXG5cdFx0XHRcdFx0bGlua3NbY2hpbGRUeXBlXSA9IFtdO1xyXG5cclxuXHRcdFx0XHRcdGZvciAoY29uc3QgY2hpbGRJZCBpbiBjaGlsZEVudHJpZXNbY2hpbGRUeXBlXSlcclxuXHRcdFx0XHRcdFx0bGlua3NbY2hpbGRUeXBlXS5wdXNoKGNoaWxkSWQpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0dGhpcy5leHRlbmRSZXF1ZXN0KGNoaWxkRW50cmllcywgbnVsbCwgZGVzdGluYXRpb24pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbHVtbkV4cGFuc2lvbiwgQ29sdW1uSW5mbywgQ29sdW1uU2V0LCBpbkFycmF5LCBJdGVtQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5RmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25SZXNvdXJjZSwgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UsIFRlbXBsYXRlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHtcclxuXHRBcGlSZXF1ZXN0Q29sdW1ucywgRW50cnlQYXJlbnROdWxsLCBGaWVsZE1hcCwgSXRlbUlkLCBJdGVtSWRDb252ZXJzaW9uTWFwLCBJdGVtVHlwZSwgUHJvbWlzZUludGVyZmFjZVxyXG59IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmxldCBjdXJyZW50SWQgPSAwO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25FbnRyeSB7XHJcblx0aWQ6IG51bWJlciA9IGN1cnJlbnRJZCsrO1xyXG5cdHF1ZXJ5OiBhbnk7XHJcblx0Y29sdW1uczogQ29sdW1uU2V0O1xyXG5cdHRlbXBsYXRlQ29sdW1uczogQ29sdW1uU2V0IHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdHBhcmVudDogRW50cnlQYXJlbnROdWxsID0gbnVsbDtcclxuXHJcblx0aW5pdGlhbDogSXRlbUVudHJ5W10gPSBbXTtcclxuXHRpdGVtczogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0cmVzb3VyY2VzOiBDb2xsZWN0aW9uUmVzb3VyY2VbXSA9IFtdO1xyXG5cdGRlZmVycmVkOiBhbnk7XHJcblx0cHJvbWlzZTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uRW50cnk+O1xyXG5cdHJlbG9hZFF1ZXVlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHRoYXNFZGl0UmVzb3VyY2VzID0gZmFsc2U7XHJcblx0aGFzSXRlbUVkaXRSZXNvdXJjZXMgPSBmYWxzZTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBmYWN0b3J5OiBDb2xsZWN0aW9uRW50cnlGYWN0b3J5LFxyXG5cdFx0cHVibGljIGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdHB1YmxpYyBvcHRpb25zOiBhbnlcclxuXHQpIHtcclxuXHRcdHRoaXMucGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XHJcblx0XHR0aGlzLnF1ZXJ5ID0gZmFjdG9yeS5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNyZWF0ZVF1ZXJ5KG9wdGlvbnMpO1xyXG5cdFx0dGhpcy5jb2x1bW5zID0gZmFjdG9yeS5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdFN0dWIoaXRlbVR5cGUsIG9wdGlvbnMuY29sdW1ucyk7XHJcblxyXG5cdFx0dGhpcy5kZWZlcigpO1xyXG5cdH1cclxuXHJcblx0ZGVmZXIgKCk6IHRoaXMge1xyXG5cdFx0aWYgKHRoaXMuaXNEZWZlcnJlZCgpKVxyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0XHR0aGlzLmRlZmVycmVkID0gdGhpcy5mYWN0b3J5LnByb21pc2VTZXJ2aWNlLmRlZmVyKCk7XHJcblx0XHR0aGlzLnByb21pc2UgPSB0aGlzLmRlZmVycmVkLnByb21pc2U7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRpc0RlZmVycmVkICgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLnByb21pc2UgIT09IHVuZGVmaW5lZDtcclxuXHR9XHJcblxyXG5cdF9yZXNvbHZlICgpOiB0aGlzIHtcclxuXHRcdGNvbnN0IGRlZmVycmVkID0gdGhpcy5kZWZlcnJlZDtcclxuXHJcblx0XHRkZWxldGUgdGhpcy5kZWZlcnJlZDtcclxuXHRcdGRlbGV0ZSB0aGlzLnByb21pc2U7XHJcblxyXG5cdFx0ZGVmZXJyZWQucmVzb2x2ZSh0aGlzKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdHJlc29sdmUgKGl0ZW1FbnRyeUNvbXBvdW5kOiB7Y29sdW1uczogQ29sdW1uU2V0LCBpbml0aWFsOiBJdGVtRW50cnlbXSwgbW9kaWZpZWQ/OiBJdGVtRW50cnlbXX0pOiB0aGlzIHtcclxuXHRcdGNvbnN0IHtpbml0aWFsLCBtb2RpZmllZH0gPSBpdGVtRW50cnlDb21wb3VuZDtcclxuXHJcblx0XHR0aGlzLmNvbHVtbnMgPSBpdGVtRW50cnlDb21wb3VuZC5jb2x1bW5zO1xyXG5cdFx0dGhpcy5pbml0aWFsID0gaW5pdGlhbDtcclxuXHRcdHRoaXMuaXRlbXMgPSBtb2RpZmllZCAhPT0gdW5kZWZpbmVkID8gbW9kaWZpZWQgOiBpbml0aWFsLnNsaWNlKCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuX3Jlc29sdmUoKTtcclxuXHR9XHJcblxyXG5cdGlzTG9jYWwgKCk6IGJvb2xlYW4ge1xyXG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XHJcblxyXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmZhY3Rvcnkua2V5U2VydmljZS5pc0xvY2FsSWQocGFyZW50Lml0ZW1JZCk7XHJcblx0fVxyXG5cclxuXHRtYXRjaFBhcmVudCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCk6IGJvb2xlYW4ge1xyXG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XHJcblxyXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdC8vID09IHRvIGNvbXBhcmUgaXRlbUlkc1xyXG5cdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcclxuXHRcdHJldHVybiBwYXJlbnQuaXRlbVR5cGUgPT09IGl0ZW1UeXBlICYmIHBhcmVudC5pdGVtSWQgPT0gaXRlbUlkO1xyXG5cdH1cclxuXHJcblx0Zm9yRWFjaCAoY2FsbGJhY2s6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gdm9pZCk6IHZvaWQge1xyXG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xyXG5cclxuXHRcdGZvciAoY29uc3QgbW9kIG9mIG1vZGlmaWVkKVxyXG5cdFx0XHRjYWxsYmFjayhtb2QpO1xyXG5cdH1cclxuXHJcblx0Z2V0SXRlbUJ5SWQgKGl0ZW1JZCk6IEl0ZW1FbnRyeSB8IHVuZGVmaW5lZCB7XHJcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgbW9kaWZpZWQpIHtcclxuXHRcdFx0aWYgKGl0ZW1FbnRyeS5pdGVtSWQgPT09IGl0ZW1JZClcclxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5O1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblx0fVxyXG5cclxuXHRnZXRJZEFycmF5IChhY2N1bXVsYXRvcjogSXRlbUlkW10gPSBbXSk6IEl0ZW1JZFtdIHtcclxuXHRcdHJldHVybiB0aGlzLmZhY3RvcnkuY29sbGVjdGlvbkVudHJ5U2VydmljZS5nZXRJZEFycmF5KHRoaXMuaXRlbXMsIGFjY3VtdWxhdG9yKTtcclxuXHR9XHJcblxyXG5cdC8vIHNodWxkIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCByZXNvbHZlRGVyaXZlZFxyXG5cdGNyZWF0ZUl0ZW1zICh2YWx1ZXNBcnJheTogRmllbGRNYXBbXSk6IFByb21pc2VJbnRlcmZhY2U8SXRlbUVudHJ5W10+IHtcclxuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XHJcblx0XHRjb25zdCBjb2x1bW5TZXQgPSB0aGlzLmNvbHVtbnM7XHJcblx0XHRsZXQgdGVtcGxhdGU6IFRlbXBsYXRlO1xyXG5cclxuXHRcdHJldHVybiBmYWN0b3J5Lml0ZW1IYW5kbGVyLmZldGNoVGVtcGxhdGUodGhpcy5pdGVtVHlwZSkudGhlbihcclxuXHRcdFx0KHRlbXBsYXRlSW5zdGFuY2U6IFRlbXBsYXRlKSA9PiB7XHJcblx0XHRcdFx0dGVtcGxhdGUgPSB0ZW1wbGF0ZUluc3RhbmNlO1xyXG5cclxuXHRcdFx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdFx0XHRcdGlmICh0aGlzLnRlbXBsYXRlQ29sdW1ucyA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0dGhpcy50ZW1wbGF0ZUNvbHVtbnMgPSB0ZW1wbGF0ZS5jb2x1bW5zLm1lcmdlKGNvbHVtblNldCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IHZhbHVlcyBvZiB2YWx1ZXNBcnJheSkge1xyXG5cdFx0XHRcdFx0cmVzdWx0LnB1c2goXHJcblx0XHRcdFx0XHRcdGZhY3RvcnkuaXRlbUVudHJ5RmFjdG9yeS5jb25zdHJ1Y3RMb2NhbChcclxuXHRcdFx0XHRcdFx0XHRmYWN0b3J5LmtleVNlcnZpY2UuZ2V0TG9jYWxJZCgpLFxyXG5cdFx0XHRcdFx0XHRcdHRlbXBsYXRlLFxyXG5cdFx0XHRcdFx0XHRcdHZhbHVlcyxcclxuXHRcdFx0XHRcdFx0XHR7fSxcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnBhcmVudCxcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnRlbXBsYXRlQ29sdW1uc1xyXG5cdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHJcblx0XHRcdH0sXHJcblx0XHRcdGZhY3RvcnkuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHJlc29sdmVEZXJpdmVkVmFsdWVzIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGUpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1FbnRyeVtdPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5mYWN0b3J5Lml0ZW1IYW5kbGVyLnJlc29sdmVEZXJpdmVkVmFsdWVzKGl0ZW1FbnRyaWVzLCB0aGlzLmNvbHVtbnMucm9vdCwgbG9jYWxJdGVtQ2FjaGUpO1xyXG5cdH1cclxuXHJcblx0YWRkSXRlbXMgKFxyXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxyXG5cdFx0cmVzdWx0UmVzb3VyY2U/OiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsLFxyXG5cdFx0dXBkYXRlSW5pdGlhbDogYm9vbGVhbiA9IGZhbHNlLFxyXG5cdFx0Y2FsbE9uQWRkPzogYm9vbGVhbixcclxuXHRcdGNhbGxPbkFjdGl2YXRlPzogYm9vbGVhblxyXG5cdCk6IEl0ZW1SZXNvdXJjZVtdIHwgbnVsbCB7XHJcblx0XHQvLyBsb2NhbCBlbnRyeSBtaWdodCBiZSBhZGRlZCBtdWx0aXBsZSB0aW1lcyAoZXh0ZW5kPylcclxuXHRcdGlmIChpdGVtRW50cmllcy5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiBbXTtcclxuXHJcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XHJcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcclxuXHRcdGNvbnN0IHBhcmVudENvbHVtbiA9IHRoaXMuY29sdW1ucy5saW5rO1xyXG5cdFx0Y29uc3QgZW50cmllc0FkZGVkVG9Jbml0aWFsOiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cdFx0Y29uc3QgZW50cmllc0FkZGVkVG9Nb2RpZmllZDogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRpZiAodXBkYXRlSW5pdGlhbCkge1xyXG5cdFx0XHRjb25zdCBpbml0aWFsID0gdGhpcy5pbml0aWFsO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcclxuXHRcdFx0XHQvLyB3aGVuIHNhdmluZywgaXRlbXMgdGhhdCBtaWdodCBhbHJlYWR5IGJlIGluIG1vZGlmaWVkIGFyZSBhZGRlZCB0byBpbml0aWFsXHJcblx0XHRcdFx0aWYgKGluaXRpYWwuaW5kZXhPZihpdGVtRW50cnkpID09PSAtMSkge1xyXG5cdFx0XHRcdFx0aW5pdGlhbC5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHRcdFx0XHRlbnRyaWVzQWRkZWRUb0luaXRpYWwucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdGlmIChtb2RpZmllZC5pbmRleE9mKGl0ZW1FbnRyeSkgPT09IC0xKSB7XHJcblx0XHRcdFx0aWYgKHBhcmVudCAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0aXRlbUVudHJ5LnBhcmVudCA9IHBhcmVudDtcclxuXHJcblx0XHRcdFx0XHRpZiAocGFyZW50Q29sdW1uICE9PSBudWxsICYmIGl0ZW1FbnRyeS5tb2RpZmllZCAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0XHRpdGVtRW50cnkubW9kaWZpZWRbcGFyZW50Q29sdW1uLmlkXSA9IHBhcmVudC5pdGVtSWQ7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRtb2RpZmllZC5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHRcdFx0ZW50cmllc0FkZGVkVG9Nb2RpZmllZC5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5oYW5kbGVBZGRlZEl0ZW1DYWxsYmFja3MoXHJcblx0XHRcdGVudHJpZXNBZGRlZFRvSW5pdGlhbCxcclxuXHRcdFx0ZW50cmllc0FkZGVkVG9Nb2RpZmllZCxcclxuXHRcdFx0cmVzdWx0UmVzb3VyY2UsXHJcblx0XHRcdGNhbGxPbkFkZCxcclxuXHRcdFx0Y2FsbE9uQWN0aXZhdGVcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGhhbmRsZUFkZGVkSXRlbUNhbGxiYWNrcyAoXHJcblx0XHRlbnRyaWVzQWRkZWRUb0luaXRpYWw6IEl0ZW1FbnRyeVtdLFxyXG5cdFx0ZW50cmllc0FkZGVkVG9Nb2RpZmllZDogSXRlbUVudHJ5W10sXHJcblx0XHRyZXN1bHRSZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlIHwgbnVsbCA9IG51bGwsXHJcblx0XHRjYWxsT25BZGQ6IGJvb2xlYW4gPSB0cnVlLFxyXG5cdFx0Y2FsbE9uQWN0aXZhdGU6IGJvb2xlYW4gPSB0cnVlXHJcblx0KTogSXRlbVJlc291cmNlW10gfCBudWxsIHtcclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcclxuXHJcblx0XHRpZiAoZW50cmllc0FkZGVkVG9Jbml0aWFsLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2Ugb2YgY29sbGVjdGlvblJlc291cmNlcylcclxuXHRcdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2Uub3B0aW9ucy5vbkFkZEluaXRpYWwoZW50cmllc0FkZGVkVG9Jbml0aWFsLCB0aGlzKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoZW50cmllc0FkZGVkVG9Nb2RpZmllZC5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiByZXN1bHRSZXNvdXJjZSA9PT0gbnVsbCA/IG51bGwgOiBbXTtcclxuXHJcblx0XHRpZiAoY2FsbE9uQWN0aXZhdGUgJiYgY29sbGVjdGlvblJlc291cmNlcy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSBjb2xsZWN0aW9uUmVzb3VyY2VzWzBdLmxvY2FsQ2FjaGU7XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGFkZGVkSXRlbUVudHJ5IG9mIGVudHJpZXNBZGRlZFRvTW9kaWZpZWQpXHJcblx0XHRcdFx0bG9jYWxDYWNoZS5vbkFjdGl2YXRlSXRlbShhZGRlZEl0ZW1FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0bGV0IHJlc3VsdDogSXRlbVJlc291cmNlW10gfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZSBvZiBjb2xsZWN0aW9uUmVzb3VyY2VzKSB7XHJcblx0XHRcdGNvbnN0IGFkZGVkUmVzb3VyY2VzID0gY29sbGVjdGlvblJlc291cmNlLmFkZEl0ZW1SZXNvdXJjZXMoZW50cmllc0FkZGVkVG9Nb2RpZmllZCk7XHJcblxyXG5cdFx0XHRpZiAoY29sbGVjdGlvblJlc291cmNlID09PSByZXN1bHRSZXNvdXJjZSkge1xyXG5cdFx0XHRcdHJlc3VsdCA9IGFkZGVkUmVzb3VyY2VzO1xyXG5cclxuXHRcdFx0XHRpZiAoY2FsbE9uQWRkKVxyXG5cdFx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLmNhbGxPbkFkZChhZGRlZFJlc291cmNlcyk7XHJcblx0XHRcdH0gZWxzZVxyXG5cdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5jYWxsT25BZGQoYWRkZWRSZXNvdXJjZXMpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRyZW1vdmVJdGVtcyAoXHJcblx0XHRpZEFycmF5OiBJdGVtSWRbXSxcclxuXHRcdHJlc3VsdFJlc291cmNlPzogQ29sbGVjdGlvblJlc291cmNlIHwgbnVsbCxcclxuXHRcdHVwZGF0ZUluaXRpYWw/OiBib29sZWFuLFxyXG5cdFx0Y2FsbE9uUmVtb3ZlPzogYm9vbGVhblxyXG5cdCk6IEl0ZW1SZXNvdXJjZVtdIHwgbnVsbCB7XHJcblx0XHRpZiAoaWRBcnJheS5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiBbXTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5oYW5kbGVSZW1vdmVkSXRlbXMoXHJcblx0XHRcdGl0ZW1FbnRyeSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuICFpbkFycmF5KGl0ZW1FbnRyeS5pdGVtSWQsIGlkQXJyYXkpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRyZXN1bHRSZXNvdXJjZSxcclxuXHRcdFx0dXBkYXRlSW5pdGlhbCxcclxuXHRcdFx0Y2FsbE9uUmVtb3ZlXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Y2xlYXIgKFxyXG5cdFx0cmVzdWx0UmVzb3VyY2U/OiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsLFxyXG5cdFx0dXBkYXRlSW5pdGlhbD86IGJvb2xlYW4sXHJcblx0XHRjYWxsT25SZW1vdmU/OiBib29sZWFuXHJcblx0KSB7XHJcblx0XHRyZXR1cm4gdGhpcy5oYW5kbGVSZW1vdmVkSXRlbXMoXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH0sXHJcblx0XHRcdHJlc3VsdFJlc291cmNlLFxyXG5cdFx0XHR1cGRhdGVJbml0aWFsLFxyXG5cdFx0XHRjYWxsT25SZW1vdmVcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRoYW5kbGVSZW1vdmVkSXRlbXMgKFxyXG5cdFx0ZmlsdGVyRnVuY3Rpb246IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gYm9vbGVhbixcclxuXHRcdHJlc3VsdFJlc291cmNlPzogQ29sbGVjdGlvblJlc291cmNlIHwgbnVsbCxcclxuXHRcdHVwZGF0ZUluaXRpYWw6IGJvb2xlYW4gPSBmYWxzZSxcclxuXHRcdGNhbGxPblJlbW92ZT86IGJvb2xlYW5cclxuXHQpIHtcclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeVNlcnZpY2UgPSB0aGlzLmZhY3RvcnkuY29sbGVjdGlvbkVudHJ5U2VydmljZTtcclxuXHRcdGNvbnN0IHJlbW92ZWRGcm9tTW9kaWZpZWQgPSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmZpbHRlckFycmF5KHRoaXMuaXRlbXMsIGZpbHRlckZ1bmN0aW9uKTtcclxuXHRcdGxldCByZW1vdmVkRnJvbUluaXRpYWw7XHJcblxyXG5cdFx0aWYgKHVwZGF0ZUluaXRpYWwpXHJcblx0XHRcdHJlbW92ZWRGcm9tSW5pdGlhbCA9IGNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuZmlsdGVyQXJyYXkodGhpcy5pbml0aWFsLCBmaWx0ZXJGdW5jdGlvbik7XHJcblx0XHRlbHNlIHtcclxuXHRcdFx0Ly8gcmVtb3ZlIGFsbCAqbG9jYWwqIGl0ZW1zIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSBtb2RpZmllZCBmcm9tIGluaXRpYWwsIHRvb1xyXG5cdFx0XHRjb25zdCBsb2NhbFJlbW92ZWRGcm9tTW9kaWZpZWQ6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IHJlbW92ZWRFbnRyeSBvZiByZW1vdmVkRnJvbU1vZGlmaWVkKSB7XHJcblx0XHRcdFx0aWYgKHJlbW92ZWRFbnRyeS5pc0xvY2FsKCkpXHJcblx0XHRcdFx0XHRsb2NhbFJlbW92ZWRGcm9tTW9kaWZpZWQucHVzaChyZW1vdmVkRW50cnkpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAobG9jYWxSZW1vdmVkRnJvbU1vZGlmaWVkLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRyZW1vdmVkRnJvbUluaXRpYWwgPSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmZpbHRlckFycmF5KFxyXG5cdFx0XHRcdFx0dGhpcy5pbml0aWFsLFxyXG5cdFx0XHRcdFx0aXRlbUVudHJ5ID0+IGxvY2FsUmVtb3ZlZEZyb21Nb2RpZmllZC5pbmRleE9mKGl0ZW1FbnRyeSkgPT09IC0xXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSBlbHNlXHJcblx0XHRcdFx0cmVtb3ZlZEZyb21Jbml0aWFsID0gW107XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuaGFuZGxlUmVtb3ZlZEl0ZW1DYWxsYmFja3MocmVtb3ZlZEZyb21Jbml0aWFsLCByZW1vdmVkRnJvbU1vZGlmaWVkLCByZXN1bHRSZXNvdXJjZSwgY2FsbE9uUmVtb3ZlKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgaGFuZGxlUmVtb3ZlZEl0ZW1DYWxsYmFja3MgKFxyXG5cdFx0cmVtb3ZlZEZyb21Jbml0aWFsOiBJdGVtRW50cnlbXSxcclxuXHRcdHJlbW92ZWRGcm9tTW9kaWZpZWQ6IEl0ZW1FbnRyeVtdLFxyXG5cdFx0cmVzdWx0UmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSB8IG51bGwgPSBudWxsLFxyXG5cdFx0Y2FsbE9uUmVtb3ZlOiBib29sZWFuID0gdHJ1ZVxyXG5cdCk6IEl0ZW1SZXNvdXJjZVtdIHwgbnVsbCB7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7XHJcblxyXG5cdFx0aWYgKHJlbW92ZWRGcm9tSW5pdGlhbC5sZW5ndGggPiAwKSB7XHJcblx0XHRcdGZvciAoY29uc3QgY29sbGVjdGlvblJlc291cmNlIG9mIGNvbGxlY3Rpb25SZXNvdXJjZXMpXHJcblx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLm9wdGlvbnMub25SZW1vdmVJbml0aWFsKHJlbW92ZWRGcm9tSW5pdGlhbCwgdGhpcyk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHJlbW92ZWRGcm9tTW9kaWZpZWQubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0UmVzb3VyY2UgPT09IG51bGwgPyBudWxsIDogW107XHJcblxyXG5cdFx0bGV0IHJlc3VsdDogSXRlbVJlc291cmNlW10gfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHJlbW92ZWRFbnRyeSBvZiByZW1vdmVkRnJvbU1vZGlmaWVkKVxyXG5cdFx0XHRyZW1vdmVkRW50cnkuZGVhY3RpdmF0ZVJlc291cmNlcygpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvblJlc291cmNlIG9mIGNvbGxlY3Rpb25SZXNvdXJjZXMpIHtcclxuXHRcdFx0Y29uc3QgcmVtb3ZlZFJlc291cmNlcyA9IGNvbGxlY3Rpb25SZXNvdXJjZS5yZW1vdmVJdGVtUmVzb3VyY2VzKHJlbW92ZWRGcm9tTW9kaWZpZWQpO1xyXG5cclxuXHRcdFx0aWYgKGNvbGxlY3Rpb25SZXNvdXJjZSA9PT0gcmVzdWx0UmVzb3VyY2UpIHtcclxuXHRcdFx0XHRyZXN1bHQgPSByZW1vdmVkUmVzb3VyY2VzO1xyXG5cclxuXHRcdFx0XHRpZiAoY2FsbE9uUmVtb3ZlKVxyXG5cdFx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLmNhbGxPblJlbW92ZShyZW1vdmVkUmVzb3VyY2VzKTtcclxuXHRcdFx0fSBlbHNlXHJcblx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLmNhbGxPblJlbW92ZShyZW1vdmVkUmVzb3VyY2VzKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0ZXhwYW5kIChuZXdDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyk6IFByb21pc2VJbnRlcmZhY2U8dGhpcz4ge1xyXG5cdFx0Y29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gdGhpcy5pdGVtVHlwZTtcclxuXHJcblx0XHRpZiAobmV3Q29sdW1ucyAhPT0gdHJ1ZSAmJiBuZXdDb2x1bW5zLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuIGZhY3RvcnkucHJvbWlzZVNlcnZpY2Uud2hlbih0aGlzKTtcclxuXHJcblx0XHRyZXR1cm4gZmFjdG9yeS5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdEl0ZW1zKHRoaXMsIHVuZGVmaW5lZCwgbmV3Q29sdW1ucykudGhlbihcclxuXHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlSXRlbXMgPSByZXNwb25zZS5pdGVtc1tpdGVtVHlwZV07XHJcblx0XHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gZmFjdG9yeS5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc0V4cGFuc2lvbihcclxuXHRcdFx0XHRcdG5ld0NvbHVtbnMsXHJcblx0XHRcdFx0XHRyZXNwb25zZSxcclxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0dGhpcy5pdGVtc1xyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdHRoaXMuaGFuZGxlUmVtb3ZlZEl0ZW1zKFxyXG5cdFx0XHRcdFx0aXRlbUVudHJ5ID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlSXRlbXNbaXRlbUVudHJ5Lml0ZW1JZF0gIT09IHVuZGVmaW5lZCB8fCBpdGVtRW50cnkuaXNMb2NhbCgpO1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdG51bGwsXHJcblx0XHRcdFx0XHR0cnVlLFxyXG5cdFx0XHRcdFx0dHJ1ZVxyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdHRoaXMuZXhwYW5kQ29sdW1ucyhjb2x1bW5FeHBhbnNpb24pO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdFx0fSxcclxuXHRcdFx0ZmFjdG9yeS5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0ZXh0ZW5kUXVlcnkgKGNhbGxiYWNrKSB7XHJcblx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xyXG5cclxuXHRcdGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5xdWVyeTtcclxuXHJcblx0XHRvcHRpb25zLnF1ZXJ5UGFyYW1zID0gY2FsbGJhY2sob3B0aW9ucy5xdWVyeVBhcmFtcyk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucXVlcnkgPSB0aGlzLmZhY3RvcnkuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jcmVhdGVRdWVyeShvcHRpb25zKTtcclxuXHR9XHJcblxyXG5cdGV4dGVuZCAocXVlcnlDYWxsYmFjaywgY29sbGVjdGlvblJlc291cmNlLCBjYWxsT25BZGQ/LCB1cGRhdGVJbml0aWFsPyk6IFByb21pc2VJbnRlcmZhY2U8SXRlbVJlc291cmNlW10gfCBudWxsPiB7XHJcblx0XHRjb25zdCBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5O1xyXG5cdFx0Y29uc3QgZXJyb3JIYW5kbGVyID0gZmFjdG9yeS5lcnJvckhhbmRsZXI7XHJcblx0XHRjb25zdCBleHRlbmRlZFF1ZXJ5ID0gdGhpcy5leHRlbmRRdWVyeShxdWVyeUNhbGxiYWNrKS5vYmplY3Q7XHJcblx0XHRjb25zdCBmdWxsUXVlcnkgPSBmYWN0b3J5LnF1ZXJ5U2VydmljZS5hZGRBbmRDb25kaXRpb24oXHJcblx0XHRcdGV4dGVuZGVkUXVlcnksXHJcblx0XHRcdGZhY3RvcnkucXVlcnlTZXJ2aWNlLmNyZWF0ZU5vdEluKHRoaXMuZ2V0SWRBcnJheSgpKVxyXG5cdFx0KTtcclxuXHJcblx0XHQvLyB0b2RvOiBhbHNvIGRvIHRoZSBsaW1pdCBjaGVjayBpbiBiYXRjaEV4dGVuZFxyXG5cdFx0Y29uc3QgcHJvbWlzZSA9IGZhY3RvcnkuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RJdGVtcyhcclxuXHRcdFx0dGhpcyxcclxuXHRcdFx0Ly8gV2hlbiB0aGVyZSdzIGEgbGltaXQgd2Ugd2FudCB0byBmZXRjaCBhbGwgaXRlbXMgYmVjYXVzZSB3ZSB3aWxsIGRvIHNvcnRpbmcgYW5kIHNwbGljaW5nIG9mIHRoZSBleGNlc3MgaXRlbXNcclxuXHRcdFx0dGhpcy5vcHRpb25zLmxpbWl0ICE9PSBudWxsID9cclxuXHRcdFx0XHRleHRlbmRlZFF1ZXJ5IDpcclxuXHRcdFx0XHRmdWxsUXVlcnlcclxuXHRcdCkudGhlbihyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0Ly8gcmVtb3ZlQWJzZW50SXRlbXMocmVzcG9uc2UpOyBUT0RPOiB3ZSBjYW4gb25seSBkbyB0aGlzIHdoZW4gd2UgcmVxdWVzdCAqYWxsKiB0aGUgaXRlbXNcclxuXHRcdFx0XHRyZXR1cm4gZmFjdG9yeS5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc1Jlc3BvbnNlKFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UsXHJcblx0XHRcdFx0XHRyZXNwb25zZS5saW5rc1t0aGlzLml0ZW1UeXBlXSxcclxuXHRcdFx0XHRcdHRoaXMucGFyZW50LFxyXG5cdFx0XHRcdFx0dGhpcy5jb2x1bW5zXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS50aGVuKGl0ZW1FbnRyaWVzID0+IHtcclxuXHRcdFx0XHRkZWxldGUgdGhpcy5wcm9taXNlO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5hZGRJdGVtcyhpdGVtRW50cmllcywgY29sbGVjdGlvblJlc291cmNlLCB1cGRhdGVJbml0aWFsLCBjYWxsT25BZGQsIGZhbHNlKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLnByb21pc2UgPSBwcm9taXNlLnRoZW4oXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdFx0fSxcclxuXHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHJcblx0XHRyZXR1cm4gcHJvbWlzZTtcclxuXHR9XHJcblxyXG5cdHF1ZXVlUmVsb2FkICgpOiB2b2lkIHtcclxuXHRcdHRoaXMucmVsb2FkUXVldWVkID0gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdGV4cGFuZENvbHVtbnMgKGNvbHVtbkV4cGFuc2lvbjogQ29sdW1uRXhwYW5zaW9uKSB7XHJcblx0XHRjb25zdCBleHBhbnNpb25SZXN1bHQgPSBjb2x1bW5FeHBhbnNpb24ucnVuKHRoaXMuY29sdW1ucyk7XHJcblxyXG5cdFx0aWYgKGV4cGFuc2lvblJlc3VsdCA9PT0gbnVsbClcclxuXHRcdFx0cmV0dXJuO1xyXG5cclxuXHRcdHRoaXMuY29sdW1ucyA9IGV4cGFuc2lvblJlc3VsdC5tZXJnZWQ7XHJcblx0XHR0aGlzLnRlbXBsYXRlQ29sdW1ucyA9IG51bGw7XHJcblx0XHR0aGlzLm9wdGlvbnMuY29sdW1ucyA9IHRoaXMuY29sdW1ucy5yZXF1ZXN0O1xyXG5cdH1cclxuXHJcblx0ZXhwYW5kUmVxdWVzdENvbHVtbnMgKHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucykge1xyXG5cdFx0dGhpcy5jb2x1bW5zLmV4cGFuZFJlcXVlc3RDb2x1bW5zKHJlcXVlc3RDb2x1bW5zKTtcclxuXHRcdHRoaXMub3B0aW9ucy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zLnJlcXVlc3Q7XHJcblx0fVxyXG5cclxuXHRnZXRBZGRlZEl0ZW1zIChyZXR1cm5JdGVtSWRzOiBib29sZWFuID0gZmFsc2UpIHtcclxuXHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmluaXRpYWw7XHJcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XHJcblx0XHRjb25zdCByZXN1bHQ6IEFycmF5PEl0ZW1FbnRyeSB8IEl0ZW1JZD4gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBtb2RpZmllZCkge1xyXG5cdFx0XHRpZiAoaW5pdGlhbC5pbmRleE9mKGl0ZW1FbnRyeSkgPT09IC0xKVxyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKHJldHVybkl0ZW1JZHMgPyBpdGVtRW50cnkuaXRlbUlkIDogaXRlbUVudHJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0UmVtb3ZlZEl0ZW1zIChyZXR1cm5JdGVtSWRzID0gZmFsc2UpIHtcclxuXHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmluaXRpYWw7XHJcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XHJcblx0XHRjb25zdCByZXN1bHQ6IEFycmF5PEl0ZW1FbnRyeSB8IEl0ZW1JZD4gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpbml0aWFsKSB7XHJcblx0XHRcdGlmIChtb2RpZmllZC5pbmRleE9mKGl0ZW1FbnRyeSkgPT09IC0xKVxyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKHJldHVybkl0ZW1JZHMgPyBpdGVtRW50cnkuaXRlbUlkIDogaXRlbUVudHJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0VXBkYXRlZEl0ZW1zICgpIHtcclxuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBtb2RpZmllZCkge1xyXG5cdFx0XHRpZiAoIWl0ZW1FbnRyeS5pc0xvY2FsKCkgJiYgaXRlbUVudHJ5Lmhhc0NoYW5nZXMoKSlcclxuXHRcdFx0XHRyZXN1bHQucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRoYXNBZGRlZEl0ZW1zICgpIHtcclxuXHRcdHJldHVybiB0aGlzLml0ZW1zLmxlbmd0aCA+IHRoaXMuaW5pdGlhbC5sZW5ndGg7XHJcblx0fVxyXG5cclxuXHRoYXNSZW1vdmVkSXRlbXMgKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuaW5pdGlhbC5sZW5ndGggPiB0aGlzLml0ZW1zLmxlbmd0aDtcclxuXHR9XHJcblxyXG5cdGhhc1VwZGF0ZWRJdGVtcyAoKSB7XHJcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBtb2RpZmllZEl0ZW1FbnRyeSBvZiBtb2RpZmllZCkge1xyXG5cdFx0XHRpZiAobW9kaWZpZWRJdGVtRW50cnkuaGFzQ2hhbmdlcygpKVxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdGdldEN1cnJlbnRSZXNvdXJjZSAoKSB7XHJcblx0XHRjb25zdCByZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcclxuXHJcblx0XHRyZXR1cm4gcmVzb3VyY2VzW3Jlc291cmNlcy5sZW5ndGggLSAxXTtcclxuXHR9XHJcblxyXG5cdGNsZWFyUmVzb3VyY2VzIChpc1N1YnRhYkNoYW5nZSA9IGZhbHNlKSB7XHJcblx0XHRjb25zdCBpdGVtRW50cmllcyA9IHRoaXMuaXRlbXM7IC8vIFRPRE86IGluaXRpYWxcclxuXHRcdGNvbnN0IGN1cnJlbnRSZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcclxuXHRcdGNvbnN0IG5ld1Jlc291cmNlczogQ29sbGVjdGlvblJlc291cmNlW10gPSBbXTtcclxuXHJcblx0XHQvLyB3ZSdsbCBhZGQgdGhlIGl0ZW0gcmVzb3VyY2VzIGJhY2sgaW4gbGF0ZXJcclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxyXG5cdFx0XHRpdGVtRW50cnkuY2xlYXJSZXNvdXJjZXMoKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZSBvZiBjdXJyZW50UmVzb3VyY2VzKSB7XHJcblx0XHRcdGlmIChjb2xsZWN0aW9uUmVzb3VyY2Uub3B0aW9uc1tpc1N1YnRhYkNoYW5nZSA/ICdjbGVhck9uU3ViVGFiQ2hhbmdlJyA6ICdjbGVhck9uVGFiQ2hhbmdlJ10pXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRuZXdSZXNvdXJjZXMucHVzaChjb2xsZWN0aW9uUmVzb3VyY2UpO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgY29sbGVjdGlvblJlc291cmNlLml0ZW1zKVxyXG5cdFx0XHRcdGl0ZW1SZXNvdXJjZS5lbnRyeS5yZXNvdXJjZXMucHVzaChpdGVtUmVzb3VyY2UpOyAvLyByZXNvdXJjZXMgc2hvdWxkIGJlIGVtcHR5IGJ5IG5vdyA6LSlcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLnJlc291cmNlcyA9IG5ld1Jlc291cmNlcztcclxuXHR9XHJcblxyXG5cdC8vIHRoaXMgZG9lc24ndCByZXZlcnQgdXBkYXRlc1xyXG5cdHJldmVydENoYW5nZXMgKCkge1xyXG5cdFx0Ly8gc2F2ZSB0aGVzZSBiZWZvcmUgcmVzZXR0aW5nIHRoZSBpdGVtcyBwcm9wZXJ0eVxyXG5cdFx0Y29uc3QgYWRkZWRJdGVtcyA9IDxJdGVtRW50cnlbXT4gdGhpcy5nZXRBZGRlZEl0ZW1zKCk7XHJcblx0XHRjb25zdCByZW1vdmVkSXRlbXMgPSA8SXRlbUVudHJ5W10+IHRoaXMuZ2V0UmVtb3ZlZEl0ZW1zKCk7XHJcblxyXG5cdFx0dGhpcy5pdGVtcyA9IHRoaXMuaW5pdGlhbC5zbGljZSgpO1xyXG5cclxuXHRcdHRoaXMuaGFuZGxlQWRkZWRJdGVtQ2FsbGJhY2tzKFtdLCByZW1vdmVkSXRlbXMpO1xyXG5cdFx0dGhpcy5oYW5kbGVSZW1vdmVkSXRlbUNhbGxiYWNrcyhbXSwgYWRkZWRJdGVtcyk7XHJcblx0fVxyXG5cclxuXHRvbkl0ZW1zQ3JlYXRlZCAoY29udmVyc2lvbk1hcCkge1xyXG5cdFx0Y29uc3QgcmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7XHJcblxyXG5cdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNvdXJjZXMpIHtcclxuXHRcdFx0cmVzb3VyY2UucmVidWlsZE1hcCgpO1xyXG5cdFx0XHRyZXNvdXJjZS5vcHRpb25zLm9uSXRlbXNDcmVhdGVkKGNvbnZlcnNpb25NYXApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Z2V0VXBkYXRlZEl0ZW1Db2x1bW5zIChjb252ZXJzaW9uTWFwKSB7XHJcblx0XHRjb25zdCBpdGVtQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5pdGVtO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiB7W2NvbHVtbklkOiBzdHJpbmddOiBDb2x1bW5JbmZvfSA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGl0ZW1Db2x1bW5zKSB7XHJcblx0XHRcdGlmIChjb252ZXJzaW9uTWFwW2NvbHVtbi5hcGlDb2x1bW4uaXRlbVR5cGVdICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0cmVzdWx0W2NvbHVtbi5pZF0gPSBjb2x1bW47XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGNsb25lIChwYXJlbnQsIGNvbnZlcnNpb25NYXA/OiBJdGVtSWRDb252ZXJzaW9uTWFwKSB7XHJcblx0XHRjb25zdCBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5O1xyXG5cdFx0Y29uc3QgY2xvbmVkSXRlbUVudHJpZXMgPSBmYWN0b3J5Lml0ZW1FbnRyeVNlcnZpY2UuYmF0Y2hDbG9uZSh0aGlzLml0ZW1zLCBjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNsb25lZEl0ZW1FbnRyeSBvZiBjbG9uZWRJdGVtRW50cmllcylcclxuXHRcdFx0Y2xvbmVkSXRlbUVudHJ5LnBhcmVudCA9IHBhcmVudDtcclxuXHJcblx0XHRyZXR1cm4gZmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdHRoaXMuaXRlbVR5cGUsXHJcblx0XHRcdGZhY3RvcnkuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jbG9uZU9wdGlvbnModGhpcy5vcHRpb25zLCBwYXJlbnQpXHJcblx0XHQpLnJlc29sdmUoXHJcblx0XHRcdHtjb2x1bW5zOiB0aGlzLmNvbHVtbnMsIGluaXRpYWw6IGNsb25lZEl0ZW1FbnRyaWVzfVxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgZmlsdGVyQXJyYXksIExvY2FsQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgSXRlbVJlc291cmNlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgSXRlbVJlc291cmNlSXRlbUlkTWFwLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5IH0gZnJvbSAnLi9Db2xsZWN0aW9uRW50cnknO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25SZXNvdXJjZSB7XHJcblx0aXRlbXM6IEl0ZW1SZXNvdXJjZVtdO1xyXG5cdGl0ZW1JZE1hcDogSXRlbVJlc291cmNlSXRlbUlkTWFwID0ge307XHJcblx0Y29sdW1ucztcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxyXG5cdFx0cHVibGljIGVudHJ5OiBDb2xsZWN0aW9uRW50cnksXHJcblx0XHRwdWJsaWMgb3B0aW9ucyxcclxuXHRcdHB1YmxpYyBsb2NhbENhY2hlOiBMb2NhbENhY2hlXHJcblx0KSB7XHJcblx0XHR0aGlzLmNvbHVtbnMgPSBlbnRyeS5jb2x1bW5zLnJlc3BvbnNlO1xyXG5cdFx0dGhpcy5pdGVtSWRNYXAgPSB7fTtcclxuXHRcdHRoaXMuaXRlbXMgPSBbXTtcclxuXHJcblx0XHRlbnRyeS5yZXNvdXJjZXMucHVzaCh0aGlzKTtcclxuXHJcblx0XHR0aGlzLmFkZEl0ZW1SZXNvdXJjZXMoZW50cnkuaXRlbXMpO1xyXG5cdH1cclxuXHJcblx0Z2V0SXRlbUJ5SWQgKGl0ZW1JZDogbnVtYmVyKTogSXRlbVJlc291cmNlIHtcclxuXHRcdHJldHVybiB0aGlzLml0ZW1JZE1hcFtpdGVtSWRdO1xyXG5cdH1cclxuXHJcblx0cmVidWlsZE1hcCAoKTogdm9pZCB7XHJcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcclxuXHRcdGNvbnN0IGl0ZW1JZE1hcCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpIHtcclxuXHRcdFx0aXRlbUlkTWFwW2l0ZW1SZXNvdXJjZS5lbnRyeS5pdGVtSWRdID0gaXRlbVJlc291cmNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuaXRlbUlkTWFwID0gaXRlbUlkTWFwO1xyXG5cdH1cclxuXHJcblx0YWRkSXRlbVJlc291cmNlcyAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdKTogSXRlbVJlc291cmNlW10geyAvLyBzaG91bGQgYmUgZmFzdFxyXG5cdFx0aWYgKGl0ZW1FbnRyaWVzLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuIFtdO1xyXG5cclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbVJlc291cmNlW10gPSBbXTtcclxuXHRcdGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XHJcblx0XHRjb25zdCBpdGVtcyA9IHRoaXMuaXRlbXM7XHJcblx0XHRjb25zdCBpdGVtSWRNYXAgPSB0aGlzLml0ZW1JZE1hcDtcclxuXHRcdGNvbnN0IGNvbnN0cnVjdG9yID0gdGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LmdldENvbnN0cnVjdG9yKFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0ZWRpdDogb3B0aW9ucy5lZGl0SXRlbXMsXHJcblx0XHRcdFx0b25DaGFuZ2U6IG9wdGlvbnMub25DaGFuZ2UsXHJcblx0XHRcdFx0b25EZWFjdGl2YXRlOiBpdGVtRW50cnkgPT4gdGhpcy5sb2NhbENhY2hlLm9uRGVhY3RpdmF0ZUl0ZW0oaXRlbUVudHJ5KVxyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XHJcblxyXG5cdFx0XHRsZXQgaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2U7XHJcblxyXG5cdFx0XHRpZiAoaXRlbUlkTWFwW2l0ZW1JZF0gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGl0ZW1SZXNvdXJjZSA9IGNvbnN0cnVjdG9yKGl0ZW1FbnRyeSk7XHJcblx0XHRcdFx0aXRlbXMucHVzaChpdGVtUmVzb3VyY2UpO1xyXG5cdFx0XHRcdGl0ZW1JZE1hcFtpdGVtSWRdID0gaXRlbVJlc291cmNlO1xyXG5cdFx0XHR9IGVsc2VcclxuXHRcdFx0XHRpdGVtUmVzb3VyY2UgPSBpdGVtSWRNYXBbaXRlbUlkXTtcclxuXHJcblx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1SZXNvdXJjZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBwYXJhbSBpdGVtRW50cmllc1xyXG5cdCAqIEByZXR1cm5zIHtJdGVtUmVzb3VyY2VbXX1cclxuXHQgKlxyXG5cdCAqIFJldHVybnMgdGhlIEl0ZW1yZXNvdXJjZXMgdGhhdCB3aGVyZSByZW1vdmVkIENvbGxlY3Rpb24uXHJcblx0ICogRmlsdGVycyBvbiBJdGVtUmVzb3VyY2UuZW50cnkgPT09IEl0ZW1FbnRyeVxyXG5cdCAqL1xyXG5cdHJlbW92ZUl0ZW1SZXNvdXJjZXMgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSk6IEl0ZW1SZXNvdXJjZVtdIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbVJlc291cmNlW10gPSBbXTtcclxuXHJcblx0XHRmaWx0ZXJBcnJheShcclxuXHRcdFx0dGhpcy5pdGVtcyxcclxuXHRcdFx0aXRlbVJlc291cmNlID0+IHtcclxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRcdFx0aWYgKGl0ZW1SZXNvdXJjZS5lbnRyeSA9PT0gaXRlbUVudHJ5KSB7XHJcblx0XHRcdFx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1SZXNvdXJjZSk7XHJcblx0XHRcdFx0XHRcdGRlbGV0ZSB0aGlzLml0ZW1JZE1hcFtpdGVtRW50cnkuaXRlbUlkXTtcclxuXHJcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRjYWxsT25BZGQgKGl0ZW1SZXNvdXJjZXM6IEl0ZW1SZXNvdXJjZVtdKTogdm9pZCB7XHJcblx0XHR0aGlzLm9wdGlvbnMub25BZGQoaXRlbVJlc291cmNlcywgdGhpcyk7XHJcblx0fVxyXG5cclxuXHRjYWxsT25SZW1vdmUgKGl0ZW1SZXNvdXJjZXM6IEl0ZW1SZXNvdXJjZVtdKTogdm9pZCB7XHJcblx0XHR0aGlzLm9wdGlvbnMub25SZW1vdmUoaXRlbVJlc291cmNlcywgdGhpcyk7XHJcblx0fVxyXG5cclxuXHRmb3JFYWNoIChjYWxsYmFjazogKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlKSA9PiB2b2lkKTogdm9pZCB7XHJcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKVxyXG5cdFx0XHRjYWxsYmFjayhpdGVtUmVzb3VyY2UpO1xyXG5cdH1cclxuXHJcblx0ZmlsdGVyIChjYWxsYmFjazogKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlKSA9PiBib29sZWFuKTogSXRlbVJlc291cmNlW10ge1xyXG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1SZXNvdXJjZVtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcykge1xyXG5cdFx0XHRpZiAoY2FsbGJhY2soaXRlbVJlc291cmNlKSlcclxuXHRcdFx0XHRyZXN1bHQucHVzaChpdGVtUmVzb3VyY2UpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRmaXJzdCAoY2FsbGJhY2s6IChpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSkgPT4gYm9vbGVhbik6IEl0ZW1SZXNvdXJjZSB8IG51bGwge1xyXG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcykge1xyXG5cdFx0XHRpZiAoY2FsbGJhY2soaXRlbVJlc291cmNlKSlcclxuXHRcdFx0XHRyZXR1cm4gaXRlbVJlc291cmNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBudWxsO1xyXG5cdH1cclxuXHJcblx0c29tZSAoY2FsbGJhY2s6IChpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSkgPT4gYm9vbGVhbik6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuZmlyc3QoY2FsbGJhY2spICE9PSBudWxsO1xyXG5cdH1cclxuXHJcblx0Z3JvdXBCeSAoYXJndW1lbnQ6IHN0cmluZyB8ICgoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpID0+IHN0cmluZyB8IG51bGwpKToge1trZXk6IHN0cmluZ106IEl0ZW1SZXNvdXJjZVtdfSB7XHJcblx0XHRjb25zdCBpdGVtc1Jlc291cmNlcyA9IHRoaXMuaXRlbXM7XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnc3RyaW5nJykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtc1Jlc291cmNlcykge1xyXG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gaXRlbVJlc291cmNlLmZpZWxkc1thcmd1bWVudF07XHJcblxyXG5cdFx0XHRcdGlmIChyZXN1bHRbdmFsdWVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRyZXN1bHRbdmFsdWVdID0gW107XHJcblxyXG5cdFx0XHRcdHJlc3VsdFt2YWx1ZV0ucHVzaChpdGVtUmVzb3VyY2UpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ2Z1bmN0aW9uJykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtc1Jlc291cmNlcykge1xyXG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gYXJndW1lbnQoaXRlbVJlc291cmNlKTtcclxuXHJcblx0XHRcdFx0aWYgKHZhbHVlID09PSBudWxsKVxyXG5cdFx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRcdGlmIChyZXN1bHRbdmFsdWVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRyZXN1bHRbdmFsdWVdID0gW107XHJcblxyXG5cdFx0XHRcdHJlc3VsdFt2YWx1ZV0ucHVzaChpdGVtUmVzb3VyY2UpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdG1hcDxUPiAoYXJndW1lbnQ6IHN0cmluZyB8ICgoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpID0+IFQpKTogVFtdIHtcclxuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xyXG5cdFx0Y29uc3QgbGVuZ3RoID0gaXRlbVJlc291cmNlcy5sZW5ndGg7XHJcblx0XHRjb25zdCByZXN1bHQgPSBuZXcgQXJyYXkobGVuZ3RoKTtcclxuXHJcblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnc3RyaW5nJykge1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxyXG5cdFx0XHRcdHJlc3VsdFtpXSA9IGl0ZW1SZXNvdXJjZXNbaV0uZmllbGRzW2FyZ3VtZW50XTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nKSB7XHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXHJcblx0XHRcdFx0cmVzdWx0W2ldID0gYXJndW1lbnQoaXRlbVJlc291cmNlc1tpXSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHJlZHVjZTxUPiAoY2FsbGJhY2s6IChpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSwgdmFsdWU6IFQpID0+IFQsIHZhbHVlOiBUKTogVCB7XHJcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKVxyXG5cdFx0XHR2YWx1ZSA9IGNhbGxiYWNrKGl0ZW1SZXNvdXJjZSwgdmFsdWUpO1xyXG5cclxuXHRcdHJldHVybiB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdGV4dGVuZCAocXVlcnlDYWxsYmFjaywgcmV0dXJuQWxsSXRlbXM6IGJvb2xlYW4gPSBmYWxzZSwgY2FsbE9uQWRkPzogYm9vbGVhbik6IFByb21pc2VJbnRlcmZhY2U8SXRlbVJlc291cmNlW10gfCBudWxsPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5lbnRyeS5leHRlbmQocXVlcnlDYWxsYmFjaywgdGhpcywgY2FsbE9uQWRkLCB0cnVlKS50aGVuKFxyXG5cdFx0XHRpdGVtUmVzb3VyY2VzID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gcmV0dXJuQWxsSXRlbXMgPyB0aGlzLml0ZW1zIDogaXRlbVJlc291cmNlcztcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGRlYWN0aXZhdGUgKCk6IHZvaWQge1xyXG5cdFx0dGhpcy5sb2NhbENhY2hlLmNsZWFyQ29sbGVjdGlvbih0aGlzKTtcclxuXHR9XHJcblxyXG5cdGNsZWFyUmVzb3VyY2UgKCk6IHZvaWQge1xyXG5cdFx0Y29uc3QgY29sbGVjdGlvblJlc291cmNlcyA9IHRoaXMuZW50cnkucmVzb3VyY2VzO1xyXG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XHJcblx0XHRjb25zdCBpbmRleCA9IGNvbGxlY3Rpb25SZXNvdXJjZXMuaW5kZXhPZih0aGlzKTtcclxuXHJcblx0XHRpZiAoaW5kZXggIT09IC0xKVxyXG5cdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2VzLnNwbGljZShpbmRleCwgMSk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcylcclxuXHRcdFx0aXRlbVJlc291cmNlLmNsZWFyUmVzb3VyY2UoKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgTG9jYWxDYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBJdGVtUmVzb3VyY2VGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25WaWV3UmVzb3VyY2UgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2Uge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXHJcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcclxuXHRcdG9wdGlvbnMsXHJcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlXHJcblx0KSB7XHJcblx0XHRzdXBlcihpdGVtUmVzb3VyY2VGYWN0b3J5LCBjb2xsZWN0aW9uRW50cnksIG9wdGlvbnMsIGxvY2FsQ2FjaGUpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBMb2NhbENhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSwgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBGaWVsZE1hcCwgSXRlbUlkLCBJdGVtSWRDb252ZXJzaW9uTWFwLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25FZGl0UmVzb3VyY2UgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2Uge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgZmFjdG9yeTogQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcclxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxyXG5cdFx0b3B0aW9ucyxcclxuXHRcdGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGVcclxuXHQpIHtcclxuXHRcdHN1cGVyKGZhY3RvcnkuaXRlbVJlc291cmNlRmFjdG9yeSwgY29sbGVjdGlvbkVudHJ5LCBvcHRpb25zLCBsb2NhbENhY2hlKTtcclxuXHR9XHJcblxyXG5cdHNhdmUgKCk6IFByb21pc2VJbnRlcmZhY2U8SXRlbUlkQ29udmVyc2lvbk1hcD4ge1xyXG5cdFx0aWYgKCF0aGlzLm9wdGlvbnMuZW5hYmxlU2F2ZSlcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBTYXZpbmcgZGlzYWJsZWQnKTtcclxuXHJcblx0XHRjb25zdCBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5O1xyXG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gdGhpcy5lbnRyeTtcclxuXHRcdGNvbnN0IHBhcmVudCA9IGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQ7XHJcblxyXG5cdFx0aWYgKHBhcmVudCAhPT0gbnVsbCAmJiBmYWN0b3J5LmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudC5pdGVtSWQpKVxyXG5cdFx0XHRyZXR1cm4gZmFjdG9yeS5wcm9taXNlU2VydmljZS53aGVuKCk7XHJcblxyXG5cdFx0cmV0dXJuIGZhY3RvcnkuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkuY29uc3RydWN0KCkuZXhlY3V0ZShbXSwgW2NvbGxlY3Rpb25FbnRyeV0pO1xyXG5cdH1cclxuXHJcblx0Ly8gVE9ETzogdXNlIGNhbGxiYWNrIGZ1bmN0aW9uXHJcblx0bW92ZUl0ZW1zIChpZEFycmF5OiBJdGVtSWRbXSwgZGVzdGluYXRpb246IENvbGxlY3Rpb25SZXNvdXJjZSwgZW5hYmxlQ2FsbGJhY2tzPzogYm9vbGVhbik6IEl0ZW1SZXNvdXJjZVtdIHtcclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuZW50cnk7XHJcblx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xyXG5cclxuXHRcdGlmIChvcHRpb25zLmVuYWJsZVNhdmUgfHwgb3B0aW9ucy5tb2RJbnN0YW50KVxyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U6IENhbm5vdCBtb3ZlIGl0ZW1zOiBzYXZpbmcgZW5hYmxlZCcpO1xyXG5cclxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGUgIT09IGRlc3RpbmF0aW9uLmVudHJ5Lml0ZW1UeXBlKVxyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U6IENhbm5vdCBtb3ZlIGl0ZW1zOiBpdGVtVHlwZSBtaXNtYXRjaCcpO1xyXG5cclxuXHRcdGNvbnN0IHJlbW92ZWRJdGVtUmVzb3VyY2VzID0gPEl0ZW1SZXNvdXJjZVtdPiBjb2xsZWN0aW9uRW50cnkucmVtb3ZlSXRlbXMoaWRBcnJheSwgdGhpcywgZmFsc2UsIGVuYWJsZUNhbGxiYWNrcyk7XHJcblx0XHRjb25zdCBpdGVtRW50cmllczogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHJlbW92ZWRJdGVtUmVzb3VyY2Ugb2YgcmVtb3ZlZEl0ZW1SZXNvdXJjZXMpXHJcblx0XHRcdGl0ZW1FbnRyaWVzLnB1c2gocmVtb3ZlZEl0ZW1SZXNvdXJjZS5lbnRyeSk7XHJcblxyXG5cdFx0ZGVzdGluYXRpb24uZW50cnkuYWRkSXRlbXMoaXRlbUVudHJpZXMsIGRlc3RpbmF0aW9uLCBmYWxzZSwgZW5hYmxlQ2FsbGJhY2tzKTtcclxuXHJcblx0XHRyZXR1cm4gcmVtb3ZlZEl0ZW1SZXNvdXJjZXM7XHJcblx0fVxyXG5cclxuXHRyZW1vdmVJdGVtcyAoaWRBcnJheTogSXRlbUlkW10sIGNhbGxPblJlbW92ZTogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1SZXNvdXJjZVtdPiB7XHJcblx0XHQvLyBjYWxsT25SZW1vdmUgc2hvdWxkIGJlIGZhbHNlIGhlcmUgdG8gcHJldmVudCBvblJlbW92ZSBmcm9tIGJlaW5nIGNhbGxlZCB0d2ljZVxyXG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IDxJdGVtUmVzb3VyY2VbXT4gdGhpcy5lbnRyeS5yZW1vdmVJdGVtcyhpZEFycmF5LCB0aGlzLCBmYWxzZSwgZmFsc2UpO1xyXG5cclxuXHRcdGlmICh0aGlzLm9wdGlvbnMubW9kSW5zdGFudClcclxuXHRcdFx0cmV0dXJuIHRoaXMuc2F2ZSgpLnRoZW4oXHJcblx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGNhbGxPblJlbW92ZSlcclxuXHRcdFx0XHRcdFx0dGhpcy5jYWxsT25SZW1vdmUoaXRlbVJlc291cmNlcyk7XHJcblxyXG5cdFx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXM7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdGlmIChjYWxsT25SZW1vdmUpXHJcblx0XHRcdHRoaXMuY2FsbE9uUmVtb3ZlKGl0ZW1SZXNvdXJjZXMpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmZhY3RvcnkucHJvbWlzZVNlcnZpY2Uud2hlbihpdGVtUmVzb3VyY2VzKTtcclxuXHR9XHJcblxyXG5cdHJlbW92ZUl0ZW0gKGl0ZW1JZDogSXRlbUlkLCBjYWxsT25SZW1vdmU/OiBib29sZWFuKTogUHJvbWlzZUludGVyZmFjZTxJdGVtUmVzb3VyY2U+IHtcclxuXHRcdHJldHVybiB0aGlzLnJlbW92ZUl0ZW1zKFtpdGVtSWRdLCBjYWxsT25SZW1vdmUpLnRoZW4oXHJcblx0XHRcdGl0ZW1SZXNvdXJjZXMgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2VzWzBdO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmZhY3RvcnkuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGFkZEl0ZW1zICh2YWx1ZXNBcnJheTogRmllbGRNYXBbXSwgY2FsbE9uQWRkOiBib29sZWFuID0gdHJ1ZSwgY2FsbE9uQWN0aXZhdGU/OiBib29sZWFuKTogUHJvbWlzZUludGVyZmFjZTxJdGVtUmVzb3VyY2VbXT4ge1xyXG5cdFx0Y29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTtcclxuXHRcdGNvbnN0IG1vZEluc3RhbnQgPSB0aGlzLm9wdGlvbnMubW9kSW5zdGFudDtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5lbnRyeS5jcmVhdGVJdGVtcyh2YWx1ZXNBcnJheSkudGhlbihcclxuXHRcdFx0aXRlbUVudHJpZXMgPT4ge1xyXG5cdFx0XHRcdGlmIChtb2RJbnN0YW50KVxyXG5cdFx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyaWVzO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5lbnRyeS5yZXNvbHZlRGVyaXZlZFZhbHVlcyhpdGVtRW50cmllcywgdGhpcy5sb2NhbENhY2hlLml0ZW1zKTtcclxuXHRcdFx0fVxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHRpdGVtRW50cmllcyA9PiB7XHJcblx0XHRcdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IDxJdGVtUmVzb3VyY2VbXT4gdGhpcy5lbnRyeS5hZGRJdGVtcyhcclxuXHRcdFx0XHRcdGl0ZW1FbnRyaWVzLFxyXG5cdFx0XHRcdFx0dGhpcyxcclxuXHRcdFx0XHRcdGZhbHNlLFxyXG5cdFx0XHRcdFx0ZmFsc2UsXHJcblx0XHRcdFx0XHRjYWxsT25BY3RpdmF0ZVxyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdGlmIChtb2RJbnN0YW50KSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5zYXZlKCkudGhlbihcclxuXHRcdFx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChjYWxsT25BZGQpXHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmNhbGxPbkFkZChpdGVtUmVzb3VyY2VzKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXM7XHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdGZhY3RvcnkuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmIChjYWxsT25BZGQpXHJcblx0XHRcdFx0XHR0aGlzLmNhbGxPbkFkZChpdGVtUmVzb3VyY2VzKTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXM7XHJcblx0XHRcdH0sXHJcblx0XHRcdGZhY3RvcnkuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGFkZEl0ZW0gKHZhbHVlczogRmllbGRNYXAsIGNhbGxPbkFkZD86IGJvb2xlYW4sIGNhbGxPbkFjdGl2YXRlPzogYm9vbGVhbik6IFByb21pc2VJbnRlcmZhY2U8SXRlbVJlc291cmNlPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5hZGRJdGVtcyhbdmFsdWVzXSwgY2FsbE9uQWRkLCBjYWxsT25BY3RpdmF0ZSkudGhlbihcclxuXHRcdFx0aXRlbVJlc291cmNlcyA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXNbMF07XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZmFjdG9yeS5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Y2xlYXIgKGVuYWJsZUNhbGxiYWNrcykge1xyXG5cdFx0cmV0dXJuIHRoaXMuZW50cnkuY2xlYXIodGhpcywgZmFsc2UsIGVuYWJsZUNhbGxiYWNrcyk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbHVtbkluZm8sIENvbHVtblNldCB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnlGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHtcclxuXHRDb2x1bW5FeHBhbnNpb25SZXN1bHQsIEVudHJ5UGFyZW50TnVsbCwgRmllbGRNYXAsIEl0ZW1JZCwgSXRlbUlkQ29udmVyc2lvbk1hcCwgSXRlbVR5cGVcclxufSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5sZXQgY3VycmVudElkID0gMDtcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtRW50cnkge1xyXG5cdGlkOiBudW1iZXIgPSArK2N1cnJlbnRJZDtcclxuXHJcblx0cmVsb2FkUXVldWVkOiBib29sZWFuID0gZmFsc2U7XHJcblx0ZGVmZXJSZXF1ZXN0OiBib29sZWFuID0gZmFsc2U7XHJcblx0ZGVmZXJyZWQ7XHJcblx0cGFyZW50OiBFbnRyeVBhcmVudE51bGwgPSBudWxsO1xyXG5cclxuXHRpbml0aWFsOiBGaWVsZE1hcDtcclxuXHRtb2RpZmllZDogRmllbGRNYXA7XHJcblx0ZGVyaXZlZDogRmllbGRNYXA7XHJcblxyXG5cdHJlc291cmNlczogSXRlbVJlc291cmNlW10gPSBbXTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBmYWN0b3J5OiBJdGVtRW50cnlGYWN0b3J5LFxyXG5cdFx0cHVibGljIGl0ZW1UeXBlOiBzdHJpbmcsXHJcblx0XHRwdWJsaWMgaXRlbUlkOiBJdGVtSWQsXHJcblx0XHRwdWJsaWMgY29sdW1uczogQ29sdW1uU2V0XHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRxdWV1ZVJlbG9hZCAoKTogdGhpcyB7XHJcblx0XHR0aGlzLnJlbG9hZFF1ZXVlZCA9IHRydWU7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRkZWZlciAoZGVmZXJSZXF1ZXN0OiBib29sZWFuID0gZmFsc2UpOiB0aGlzIHtcclxuXHRcdHRoaXMuZGVmZXJyZWQgPSB0aGlzLmZhY3RvcnkucHJvbWlzZVNlcnZpY2UuZGVmZXIoKTtcclxuXHRcdHRoaXMuZGVmZXJSZXF1ZXN0ID0gZGVmZXJSZXF1ZXN0O1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0cmVzb2x2ZSAoKTogdGhpcyB7XHJcblx0XHRjb25zdCBkZWZlcnJlZCA9IHRoaXMuZGVmZXJyZWQ7XHJcblxyXG5cdFx0Ly8gdGhlIHJlc29sdmUgZnVuY3Rpb24gbWlnaHQgZGVmZXIgdGhlIGl0ZW0gYWdhaW4sIHNvIGRlbGV0ZSB0aGUgcHJvcGVydGllcyBmaXJzdFxyXG5cdFx0ZGVsZXRlIHRoaXMuZGVmZXJyZWQ7XHJcblx0XHRkZWxldGUgdGhpcy5kZWZlclJlcXVlc3Q7XHJcblxyXG5cdFx0ZGVmZXJyZWQucmVzb2x2ZSh0aGlzKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdHJlc29sdmVEZWZlcnJlZCAoaW5pdGlhbCwgZGVyaXZlZCwgY29sdW1ucyk6IHRoaXMge1xyXG5cdFx0dGhpcy5jb2x1bW5zID0gY29sdW1ucztcclxuXHRcdHRoaXMuc2V0RmllbGRzKGluaXRpYWwsIGRlcml2ZWQpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnJlc29sdmUoKTtcclxuXHR9XHJcblxyXG5cdGlzRGVmZXJyZWQgKCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuZGVmZXJyZWQgIT09IHVuZGVmaW5lZDtcclxuXHR9XHJcblxyXG5cdHJlamVjdCAoZXJyb3I/KTogdGhpcyB7XHJcblx0XHQvLyB0b2RvOiB0cmFuc2xhdGVkIGVycm9yXHJcblx0XHR0aGlzLmRlZmVycmVkLnJlamVjdChlcnJvcik7XHJcblxyXG5cdFx0ZGVsZXRlIHRoaXMuZGVmZXJyZWQ7XHJcblx0XHRkZWxldGUgdGhpcy5kZWZlclJlcXVlc3Q7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRzZXRGaWVsZHMgKGluaXRpYWw6IEZpZWxkTWFwLCBkZXJpdmVkOiBGaWVsZE1hcCk6IHRoaXMge1xyXG5cdFx0Y29uc3QgYXBpRm9ybWF0dGVyID0gdGhpcy5mYWN0b3J5LmFwaUZvcm1hdHRlcjtcclxuXHRcdGNvbnN0IGZvcm1hdHRlZENvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZm9ybWF0dGVkO1xyXG5cclxuXHRcdHRoaXMuaW5pdGlhbCA9IGFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZShpbml0aWFsLCBmb3JtYXR0ZWRDb2x1bW5zLm1haW4pO1xyXG5cdFx0dGhpcy5kZXJpdmVkID0gYXBpRm9ybWF0dGVyLmZvcm1hdFJlc3BvbnNlKGRlcml2ZWQsIGZvcm1hdHRlZENvbHVtbnMuZGVyaXZlZCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHQvLyBXZSBzaG91bGQgY3JlYXRlIGEgY29weSBvZiBpbml0aWFsIGhlcmUsIGJlY2F1c2UgaW4gbW9zdCBpbnN0YW5jZXMgaXQgd2lsbCBiZSBhIHRlbXBsYXRlLlxyXG5cdHNldExvY2FsRmllbGRzIChcclxuXHRcdGluaXRpYWxWYWx1ZXM6IEZpZWxkTWFwLFxyXG5cdFx0Y29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCxcclxuXHRcdGNvbHVtbnM6IENvbHVtblNldCA9IHRoaXMuY29sdW1uc1xyXG5cdCk6IHRoaXMge1xyXG5cdFx0Y29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTtcclxuXHRcdGNvbnN0IGluaXRpYWwgPSBmYWN0b3J5Lml0ZW1FbnRyeVNlcnZpY2UuZ2V0TG9jYWxEZWZhdWx0VmFsdWVzKCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucy5tYWluKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uLmlkO1xyXG5cclxuXHRcdFx0aW5pdGlhbFtjb2x1bW5JZF0gPSBpbml0aWFsVmFsdWVzW2NvbHVtbklkXTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLmluaXRpYWwgPSBmYWN0b3J5LmFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZShpbml0aWFsLCBjb2x1bW5zLmZvcm1hdHRlZC5tYWluKTtcclxuXHRcdHRoaXMuZGVyaXZlZCA9IHsnY3JlYXRvcj5kaXNwbGF5bmFtZSc6IGZhY3RvcnkuYXV0aEludGVyZmFjZS5nZXRVc2VyRGlzcGxheW5hbWUoKX07XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMudXBkYXRlSXRlbUZpZWxkcyhjb252ZXJzaW9uTWFwKTtcclxuXHR9XHJcblxyXG5cdGNsb25lIChjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwID0ge30pOiBJdGVtRW50cnkge1xyXG5cdFx0Y29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTtcclxuXHRcdGNvbnN0IGFwaUZvcm1hdHRlciA9IGZhY3RvcnkuYXBpRm9ybWF0dGVyO1xyXG5cdFx0Y29uc3QgaXRlbUVudHJ5U2VydmljZSA9IGZhY3RvcnkuaXRlbUVudHJ5U2VydmljZTtcclxuXHRcdGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XHJcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcclxuXHRcdGNvbnN0IG5ld0l0ZW1JZCA9IGl0ZW1FbnRyeVNlcnZpY2UuZXhwYW5kQ29udmVyc2lvbk1hcCh0aGlzLCBjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHQvLyB3ZSdsbCBjb3B5IG1vZGlmaWVkIHRvIHJlc3VsdC5pbml0aWFsIChpbml0aWFsIG1heSBiZSBhIHRlbXBsYXRlKVxyXG5cdFx0Y29uc3QgY2xvbmVkRW50cnkgPSBmYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0bmV3SXRlbUlkLFxyXG5cdFx0XHRhcGlGb3JtYXR0ZXIuY29weUZpZWxkcyh0aGlzLmdldEZpZWxkcygpLCB7fSwgY29sdW1ucy5tYWluKSxcclxuXHRcdFx0YXBpRm9ybWF0dGVyLmNvcHlGaWVsZHModGhpcy5kZXJpdmVkLCB7fSwgY29sdW1ucy5kZXJpdmVkKSxcclxuXHRcdFx0Y29sdW1uc1xyXG5cdFx0KTtcclxuXHJcblx0XHRjbG9uZWRFbnRyeS51cGRhdGVJdGVtRmllbGRzKGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdGNsb25lZEVudHJ5Lm1vZGlmaWVkID0gYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoY2xvbmVkRW50cnkuaW5pdGlhbCwge30sIGNvbHVtbnMubWFpbik7XHJcblxyXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcclxuXHRcdFx0cmV0dXJuIGNsb25lZEVudHJ5O1xyXG5cclxuXHRcdGNvbnN0IHBhcmVudElkID0gaXRlbUVudHJ5U2VydmljZS5nZXRDb252ZXJzaW9uVmFsdWUodGhpcy5pdGVtVHlwZSwgcGFyZW50Lml0ZW1JZCwgY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0Y2xvbmVkRW50cnkuc2V0UGFyZW50KFxyXG5cdFx0XHRwYXJlbnQuaXRlbVR5cGUsXHJcblx0XHRcdHBhcmVudElkID09PSB1bmRlZmluZWQgPyBwYXJlbnQuaXRlbUlkIDogcGFyZW50SWRcclxuXHRcdCk7XHJcblxyXG5cdFx0cmV0dXJuIGNsb25lZEVudHJ5O1xyXG5cdH1cclxuXHJcblx0cmVzZXREZXJpdmVkIChjb2x1bW5JZHMpOiB0aGlzIHtcclxuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xyXG5cclxuXHRcdGNvbnN0IHJvb3RDb2x1bW5zID0gdGhpcy5jb2x1bW5zLnJvb3Q7XHJcblx0XHRjb25zdCBmaWx0ZXJlZENvbHVtbnM6IENvbHVtbkluZm9bXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIHJvb3RDb2x1bW5zKSB7XHJcblx0XHRcdGlmIChjb2x1bW5JZHMuaW5kZXhPZihjb2x1bW4uaWQpICE9PSAtMSlcclxuXHRcdFx0XHRmaWx0ZXJlZENvbHVtbnMucHVzaChjb2x1bW4pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJlc2V0RGVyaXZlZFJlY3Vyc2l2ZWx5KGZpbHRlcmVkQ29sdW1ucyk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdFx0ZnVuY3Rpb24gcmVzZXREZXJpdmVkUmVjdXJzaXZlbHkgKGNvbHVtbnMpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG5cdFx0XHRcdGlmICghY29sdW1uLmlzTGVhZilcclxuXHRcdFx0XHRcdHJlc2V0RGVyaXZlZFJlY3Vyc2l2ZWx5KGNvbHVtbi5jaGlsZHJlbik7XHJcblxyXG5cdFx0XHRcdGRlbGV0ZSBzZWxmLmRlcml2ZWRbY29sdW1uLnBhdGhdO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRjbGVhclJlc291cmNlcyAoKTogdGhpcyB7XHJcblx0XHR0aGlzLnJlc291cmNlcyA9IFtdO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0ZGVhY3RpdmF0ZVJlc291cmNlcyAoKTogdGhpcyB7XHJcblx0XHRjb25zdCByZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlczsgLy8gb24gb2YgdGhlIGRlYWN0aXZhdGUgY2FsbGJhY2tzIG1pZ2h0IGNhbGwgY2xlYXJSZXNvdXJjZXNcclxuXHJcblx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc291cmNlcylcclxuXHRcdFx0cmVzb3VyY2UuZGVhY3RpdmF0ZSgpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0Z2V0RmllbGRzICgpOiBGaWVsZE1hcCB7XHJcblx0XHRpZiAodGhpcy5tb2RpZmllZCAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5tb2RpZmllZDtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5pbml0aWFsO1xyXG5cdH1cclxuXHJcblx0Ly8gc2hvdWxkIGJlIGZhc3RcclxuXHRleHBhbmQgKG1haW46IEZpZWxkTWFwLCBkZXJpdmVkOiBGaWVsZE1hcCwgY29sdW1uRXhwYW5zaW9uUmVzdWx0OiBDb2x1bW5FeHBhbnNpb25SZXN1bHQpOiB0aGlzIHtcclxuXHRcdGNvbnN0IGFwaUZvcm1hdHRlciA9IHRoaXMuZmFjdG9yeS5hcGlGb3JtYXR0ZXI7XHJcblx0XHRjb25zdCBkaWZmZXJlbmNlID0gY29sdW1uRXhwYW5zaW9uUmVzdWx0LmRpZmZlcmVuY2U7XHJcblxyXG5cdFx0dGhpcy5jb2x1bW5zID0gY29sdW1uRXhwYW5zaW9uUmVzdWx0Lm1lcmdlZDtcclxuXHJcblx0XHRhcGlGb3JtYXR0ZXIuZXhwYW5kUmVzcG9uc2UodGhpcy5pbml0aWFsLCBtYWluLCBkaWZmZXJlbmNlLm1haW4pO1xyXG5cdFx0YXBpRm9ybWF0dGVyLmV4cGFuZFJlc3BvbnNlKHRoaXMuZGVyaXZlZCwgZGVyaXZlZCwgZGlmZmVyZW5jZS5kZXJpdmVkKTtcclxuXHJcblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0XHRhcGlGb3JtYXR0ZXIuZXhwYW5kUmVzcG9uc2UodGhpcy5tb2RpZmllZCwgbWFpbiwgZGlmZmVyZW5jZS5tYWluKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdGV4cGFuZExvY2FsIChjb2x1bW5FeHBhbnNpb25SZXN1bHQ6IENvbHVtbkV4cGFuc2lvblJlc3VsdCk6IHRoaXMge1xyXG5cdFx0Y29uc3QgbWFpbkNvbHVtbnMgPSBjb2x1bW5FeHBhbnNpb25SZXN1bHQuZGlmZmVyZW5jZS5tYWluO1xyXG5cclxuXHRcdHRoaXMuY29sdW1ucyA9IGNvbHVtbkV4cGFuc2lvblJlc3VsdC5tZXJnZWQ7XHJcblxyXG5cdFx0aWYgKG1haW5Db2x1bW5zLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdFx0dGhpcy5zZXRMb2NhbFZhbHVlcyh0aGlzLmluaXRpYWwsIG1haW5Db2x1bW5zKTtcclxuXHJcblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0XHR0aGlzLnNldExvY2FsVmFsdWVzKHRoaXMubW9kaWZpZWQsIG1haW5Db2x1bW5zKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgc2V0TG9jYWxWYWx1ZXMgKGZpZWxkczogRmllbGRNYXAsIGNvbHVtbnM6IENvbHVtbkluZm9bXSk6IHZvaWQge1xyXG5cdFx0Y29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTtcclxuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XHJcblxyXG5cdFx0XHRpZiAoZmllbGRzW2NvbHVtbklkXSAhPT0gdW5kZWZpbmVkKSAvLyBwYXJlbnQgY29sdW1ucyBtaWdodCBhbHNvIGJlIGluY2x1ZGVkIGluIHRoZSBkaWZmZXJlbmNlXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRjb25zdCBjb2x1bW5UeXBlID0gY29sdW1uLmFwaUNvbHVtbi50eXBlO1xyXG5cclxuXHRcdFx0ZmllbGRzW2NvbHVtbklkXSA9IGNvbHVtblR5cGUgPT09ICdsaW5rJyAmJiBwYXJlbnQgIT09IG51bGwgP1xyXG5cdFx0XHRcdHBhcmVudC5pdGVtSWQgOlxyXG5cdFx0XHRcdGZhY3RvcnkuYXBpRm9ybWF0dGVyLmdldERlZmF1bHRWYWx1ZShjb2x1bW5UeXBlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGUgaW5pdGlhbCwgbW9kaWZpZWQsIGRlcml2ZWQgcHJvcGVydGllcyBhcmUgYWxyZWFkeSBzZXQuIEl0IHdpbGwgdXBkYXRlIHRoZSB2YWx1ZXNcclxuXHQgKiB0aGVtc2VsdmVzIHRvIHByZXNlcnZlIHJlZmVyZW5jZXMgaW4gZXhpc3RpbmcgaXRlbSByZXNvdXJjZXMuXHJcblx0ICovXHJcblx0dXBkYXRlRmllbGRzIChmaWVsZHM6IEZpZWxkTWFwLCBkZXJpdmVkOiBGaWVsZE1hcCB8IG51bGwgPSBudWxsLCBvdmVyd3JpdGU6IGJvb2xlYW4gPSB0cnVlKTogdGhpcyB7XHJcblx0XHRjb25zdCBhcGlGb3JtYXR0ZXIgPSB0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyO1xyXG5cdFx0Y29uc3QgbWFpbkNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFpbjtcclxuXHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmluaXRpYWw7XHJcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMubW9kaWZpZWQ7XHJcblxyXG5cdFx0Ly8gZm9yIHNvbWUgd2VpcmQgcmVhc29uIHRoaXMgZnVuY3Rpb24gaXMgbm90IGF0b21pYywgc28gb3ZlcndyaXRlIHRoZSB2YWx1ZXMgd2l0aCB0aGVpciBmb3JtYXR0ZWQgY291bnRlcnBhcnRzXHJcblx0XHQvLyBpbW1lZGlhdGVseVxyXG5cdFx0aWYgKG1vZGlmaWVkICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgbWFpbkNvbHVtbnMpIHtcclxuXHRcdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcclxuXHRcdFx0XHRjb25zdCBjb2x1bW5UeXBlID0gY29sdW1uLmFwaUNvbHVtbi50eXBlO1xyXG5cclxuXHRcdFx0XHRpZiAob3ZlcndyaXRlIHx8IGFwaUZvcm1hdHRlci5jb21wYXJlRmllbGRzKGNvbHVtblR5cGUsIGluaXRpYWxbY29sdW1uSWRdLCBtb2RpZmllZFtjb2x1bW5JZF0pKVxyXG5cdFx0XHRcdFx0bW9kaWZpZWRbY29sdW1uSWRdID0gYXBpRm9ybWF0dGVyLmZvcm1hdFJlc3BvbnNlVmFsdWUoY29sdW1uVHlwZSwgZmllbGRzW2NvbHVtbklkXSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBtYWluQ29sdW1ucykge1xyXG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcclxuXHJcblx0XHRcdGluaXRpYWxbY29sdW1uSWRdID0gYXBpRm9ybWF0dGVyLmZvcm1hdFJlc3BvbnNlVmFsdWUoY29sdW1uLmFwaUNvbHVtbi50eXBlLCBmaWVsZHNbY29sdW1uSWRdKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoZGVyaXZlZCAhPT0gbnVsbClcclxuXHRcdFx0dGhpcy5zZXREZXJpdmVkKGRlcml2ZWQpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB1cGRhdGVJdGVtVmFsdWVzIChmaWVsZHM6IEZpZWxkTWFwLCBpdGVtQ29sdW1uczogQ29sdW1uSW5mb1tdLCBjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwKTogdm9pZCB7XHJcblx0XHRjb25zdCBpdGVtRW50cnlTZXJ2aWNlID0gdGhpcy5mYWN0b3J5Lml0ZW1FbnRyeVNlcnZpY2U7XHJcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBpdGVtQ29sdW1ucykge1xyXG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcclxuXHRcdFx0Y29uc3QgYXBpQ29sdW1uID0gY29sdW1uLmFwaUNvbHVtbjtcclxuXHJcblx0XHRcdC8vIFRPRE86IHdlIGNhbiByZWNvbnNpZGVyIHRoaXMgb25jZSBhbGwgY29sdW1ucyBhcmUgcmVzcGVjdGVkIGZvciBsb2NhbCBpdGVtcyBbUk00LTEwMzc4XVxyXG5cdFx0XHRsZXQgbmV3VmFsdWU7XHJcblxyXG5cdFx0XHRpZiAoYXBpQ29sdW1uLnR5cGUgPT09ICdsaW5rJyAmJiBmaWVsZHNbY29sdW1uSWRdID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRpZiAocGFyZW50ICE9PSBudWxsKVxyXG5cdFx0XHRcdFx0bmV3VmFsdWUgPSBwYXJlbnQuaXRlbUlkO1xyXG5cdFx0XHR9IGVsc2VcclxuXHRcdFx0XHRuZXdWYWx1ZSA9IGl0ZW1FbnRyeVNlcnZpY2UuZ2V0Q29udmVyc2lvblZhbHVlKGFwaUNvbHVtbi5pdGVtVHlwZSwgZmllbGRzW2NvbHVtbklkXSwgY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0XHRpZiAobmV3VmFsdWUgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRmaWVsZHNbY29sdW1uSWRdID0gbmV3VmFsdWU7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHR1cGRhdGVJdGVtRmllbGRzIChjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwLCBjb2x1bW5zOiBDb2x1bW5TZXQgPSB0aGlzLmNvbHVtbnMpOiB0aGlzIHtcclxuXHRcdGNvbnN0IGl0ZW1Db2x1bW5zID0gY29sdW1ucy5pdGVtO1xyXG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLm1vZGlmaWVkO1xyXG5cclxuXHRcdHRoaXMudXBkYXRlSXRlbVZhbHVlcyh0aGlzLmluaXRpYWwsIGl0ZW1Db2x1bW5zLCBjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHRpZiAobW9kaWZpZWQgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdFx0dGhpcy51cGRhdGVJdGVtVmFsdWVzKG1vZGlmaWVkLCBpdGVtQ29sdW1ucywgY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRmb3JtYXRSZXF1ZXN0ICgpOiBGaWVsZE1hcCB7XHJcblx0XHRjb25zdCBhcGlGb3JtYXR0ZXIgPSB0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyO1xyXG5cdFx0Y29uc3QgbWFpbkNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFpbjtcclxuXHJcblx0XHRpZiAodGhpcy5pc0xvY2FsKCkpXHJcblx0XHRcdHJldHVybiBhcGlGb3JtYXR0ZXIuZm9ybWF0UmVxdWVzdExvY2FsKHRoaXMuZ2V0RmllbGRzKCksIG1haW5Db2x1bW5zKTtcclxuXHJcblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4ge307XHJcblxyXG5cdFx0cmV0dXJuIGFwaUZvcm1hdHRlci5mb3JtYXRSZXF1ZXN0KHRoaXMuaW5pdGlhbCwgdGhpcy5tb2RpZmllZCwgbWFpbkNvbHVtbnMpO1xyXG5cdH1cclxuXHJcblx0c2V0RGlzcGxheU5hbWUgKCk6IHRoaXMge1xyXG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdFx0Y29uc3QgcmVzdWx0ID0gdGhpcy5nZXREaXNwbGF5TmFtZSgpO1xyXG5cclxuXHRcdGlmIChyZXN1bHQpXHJcblx0XHRcdHRoaXMubW9kaWZpZWQuZGlzcGxheW5hbWUgPSByZXN1bHQ7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRnZXREaXNwbGF5TmFtZSAoKTogc3RyaW5nIHtcclxuXHRcdGNvbnN0IGl0ZW1FbnRyeVNlcnZpY2UgPSB0aGlzLmZhY3RvcnkuaXRlbUVudHJ5U2VydmljZTtcclxuXHRcdGNvbnN0IGZpZWxkcyA9IHRoaXMuZ2V0RmllbGRzKCk7XHJcblxyXG5cdFx0c3dpdGNoICh0aGlzLml0ZW1UeXBlKSB7XHJcblx0XHRcdGNhc2UgJ0NvbnRhY3QnOlxyXG5cdFx0XHRcdHJldHVybiBmaWVsZHMudHlwZSA9PT0gJ2JlZHJpamYnID9cclxuXHRcdFx0XHRcdGZpZWxkcy5iZWRyaWpmIDogaXRlbUVudHJ5U2VydmljZS5nZXRGdWxsTmFtZShcclxuXHRcdFx0XHRcdFx0ZmllbGRzLnZvb3JuYWFtLFxyXG5cdFx0XHRcdFx0XHRmaWVsZHMudHVzc2Vudm9lZ3NlbCxcclxuXHRcdFx0XHRcdFx0ZmllbGRzLm5hYW1cclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdGNhc2UgJ01lZGV3ZXJrZXInOlxyXG5cdFx0XHRjYXNlICdQZXJzb24nOlxyXG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnlTZXJ2aWNlLmdldEZ1bGxOYW1lKFxyXG5cdFx0XHRcdFx0ZmllbGRzLnZvb3JuYWFtLFxyXG5cdFx0XHRcdFx0ZmllbGRzLnR1c3NlbnZvZWdzZWwsXHJcblx0XHRcdFx0XHRmaWVsZHMuYWNodGVybmFhbVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdGNhc2UgJ1JlcGFyYXRpZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZGVyaXZlZFsnbWF0ZXJpYWFsPm5hYW0nXTsgLy8gVE9ETyFcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gZmllbGRzW2l0ZW1FbnRyeVNlcnZpY2UuZ2V0VGl0bGVGaWVsZCh0aGlzLml0ZW1UeXBlKV07XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBAcGFyYW0ge0Jvb2xlYW59IHJldHVybkFsbCBSZXR1cm5zIGFsbCBpbml0aWFsIHZhbHVlcyBpZiB0cnVlXHJcblx0ICogQHJldHVybnMge09iamVjdH1cclxuXHQgKi9cclxuXHRnZXRDaGFuZ2VzIChyZXR1cm5BbGw6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgPT09IHVuZGVmaW5lZCAmJiAhcmV0dXJuQWxsKVxyXG5cdFx0XHRyZXR1cm4gW107XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuZmFjdG9yeS5hcGlGb3JtYXR0ZXIuZ2V0Q2hhbmdlcyhcclxuXHRcdFx0dGhpcy5pbml0aWFsLFxyXG5cdFx0XHRyZXR1cm5BbGwgPyB7fSA6IHRoaXMubW9kaWZpZWQsXHJcblx0XHRcdHRoaXMuY29sdW1ucy5tYWluXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0aXNMb2NhbCAoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5mYWN0b3J5LmtleVNlcnZpY2UuaXNMb2NhbElkKHRoaXMuaXRlbUlkKTtcclxuXHR9XHJcblxyXG5cdGlzTG9ja2FibGUgKCk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKHRoaXMuaXNMb2NhbCgpKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0c3dpdGNoICh0aGlzLml0ZW1UeXBlKSB7XHJcblx0XHRcdGNhc2UgJ1Byb2plY3QnOlxyXG5cdFx0XHRjYXNlICdNYXRlcmlhYWwnOlxyXG5cdFx0XHRjYXNlICdDb250YWN0JzpcclxuXHRcdFx0Y2FzZSAnTWVkZXdlcmtlcic6XHJcblx0XHRcdGNhc2UgJ1ZvZXJ0dWlnJzpcclxuXHRcdFx0Y2FzZSAnVGVtcGxhdGUnOlxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGhhc0NoYW5nZXMgKCk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyLmhhc0NoYW5nZXMoXHJcblx0XHRcdHRoaXMuaW5pdGlhbCxcclxuXHRcdFx0dGhpcy5tb2RpZmllZCxcclxuXHRcdFx0dGhpcy5jb2x1bW5zLm1haW5cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRyZXNldE1vZGlmaWVkICgpOiB0aGlzIHtcclxuXHRcdGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFpbjtcclxuXHJcblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdHRoaXMubW9kaWZpZWRbY29sdW1uLmlkXSA9IHRoaXMuZmFjdG9yeS5hcGlGb3JtYXR0ZXIuY2xvbmUoXHJcblx0XHRcdFx0Y29sdW1uLmFwaUNvbHVtbi50eXBlLFxyXG5cdFx0XHRcdHRoaXMuaW5pdGlhbFtjb2x1bW4uaWRdXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRzZXRJbml0aWFsICh2YWx1ZXM6IEZpZWxkTWFwLCBlbmFibGVDYWxsYmFja3M6IGJvb2xlYW4gPSBmYWxzZSk6IHRoaXMge1xyXG5cdFx0Y29uc3QgYXBpRm9ybWF0dGVyID0gdGhpcy5mYWN0b3J5LmFwaUZvcm1hdHRlcjtcclxuXHRcdGxldCBwcmV2aW91cztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHZhbHVlcylcclxuXHRcdFx0dGhpcy5pbml0aWFsW2NvbHVtbklkXSA9IHZhbHVlc1tjb2x1bW5JZF07XHJcblxyXG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRpZiAoZW5hYmxlQ2FsbGJhY2tzKVxyXG5cdFx0XHRcdHRoaXMuY2FsbE9uQ2hhbmdlKGFwaUZvcm1hdHRlci5jb3B5RmllbGRzKHRoaXMuaW5pdGlhbCwge30sIHRoaXMuY29sdW1ucy5tYWluKSk7XHJcblxyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdH1cclxuXHJcblx0XHRwcmV2aW91cyA9IGFwaUZvcm1hdHRlci5jb3B5RmllbGRzKHRoaXMubW9kaWZpZWQsIHt9LCB0aGlzLmNvbHVtbnMubWFpbik7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB2YWx1ZXMpXHJcblx0XHRcdHRoaXMubW9kaWZpZWRbY29sdW1uSWRdID0gdmFsdWVzW2NvbHVtbklkXTtcclxuXHJcblx0XHRpZiAoZW5hYmxlQ2FsbGJhY2tzKVxyXG5cdFx0XHR0aGlzLmNhbGxPbkNoYW5nZShwcmV2aW91cyk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBEb2VzIGEgc2hhbGxvdyBjb3B5IG9mIHZhbHVlcyFcclxuXHQgKi9cclxuXHRzZXRNb2RpZmllZCAodmFsdWVzPzogRmllbGRNYXApOiB0aGlzIHtcclxuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XHJcblx0XHRjb25zdCBhcGlGb3JtYXR0ZXIgPSBmYWN0b3J5LmFwaUZvcm1hdHRlcjtcclxuXHRcdGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XHJcblx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSBjb2x1bW5zLnJlc3BvbnNlW3RoaXMuaXRlbVR5cGVdO1xyXG5cclxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0Y29uc3QgcmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7XHJcblx0XHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmluaXRpYWw7XHJcblx0XHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5tb2RpZmllZCA9IHRoaXMuaXNMb2NhbCgpID8gZmFjdG9yeS5pdGVtRW50cnlTZXJ2aWNlLmdldExvY2FsRGVmYXVsdFZhbHVlcygpIDoge307XHJcblxyXG5cdFx0XHRpZiAodmFsdWVzID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0YXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoaW5pdGlhbCwgbW9kaWZpZWQsIGNvbHVtbnMubWFpbik7XHJcblx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdGFwaUZvcm1hdHRlci5zaGFsbG93Q29weUZpZWxkcyh2YWx1ZXMsIGluaXRpYWwsIG1vZGlmaWVkLCBjb2x1bW5zLm1haW4pO1xyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHZhbHVlcykge1xyXG5cdFx0XHRcdFx0aWYgKHJlc3BvbnNlQ29sdW1uc1tjb2x1bW5JZF0gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0XHQvLyB0b2RvOiBkZXYgbW9kZSBjb25zdGFudFxyXG5cdFx0XHRcdFx0XHQvLyBpZiAoREVWX01PREUpXHJcblx0XHRcdFx0XHRcdC8vIFx0Y29uc29sZS53YXJuKCdzZXRNb2RpZmllZDogbm8gY29sdW1uIGZvdW5kIGZvcicsIGNvbHVtbklkKTtcclxuXHJcblx0XHRcdFx0XHRcdG1vZGlmaWVkW2NvbHVtbklkXSA9IHZhbHVlc1tjb2x1bW5JZF07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc291cmNlcylcclxuXHRcdFx0XHRyZXNvdXJjZS5maWVsZHMgPSBtb2RpZmllZDtcclxuXHJcblx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh2YWx1ZXMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB2YWx1ZXMpXHJcblx0XHRcdHRoaXMubW9kaWZpZWRbY29sdW1uSWRdID0gdmFsdWVzW2NvbHVtbklkXTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdHNldERlcml2ZWQgKHZhbHVlczogRmllbGRNYXApOiB0aGlzIHtcclxuXHRcdGZvciAoY29uc3Qga2V5IGluIHZhbHVlcylcclxuXHRcdFx0dGhpcy5kZXJpdmVkW2tleV0gPSB2YWx1ZXNba2V5XTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdHNldFBhcmVudCAocGFyZW50VHlwZTogSXRlbVR5cGUsIHBhcmVudElkOiBJdGVtSWQpOiB0aGlzIHtcclxuXHRcdHRoaXMucGFyZW50ID0ge1xyXG5cdFx0XHRpdGVtVHlwZTogcGFyZW50VHlwZSxcclxuXHRcdFx0aXRlbUlkOiBwYXJlbnRJZFxyXG5cdFx0fTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdGNhbGxPbkNoYW5nZSAocHJldmlvdXM6IEZpZWxkTWFwKTogdGhpcyB7XHJcblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IHRoaXMucmVzb3VyY2VzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG5cdFx0XHRjb25zdCBpdGVtUmVzb3VyY2UgPSB0aGlzLnJlc291cmNlc1tpXTtcclxuXHJcblx0XHRcdGlmIChpdGVtUmVzb3VyY2UgIT09IG51bGwpXHJcblx0XHRcdFx0aXRlbVJlc291cmNlLm9wdGlvbnMub25DaGFuZ2UoaXRlbVJlc291cmNlLCBwcmV2aW91cyk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHR0b0pTT04gKCkge1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0aWQ6IHRoaXMuaWQsXHJcblx0XHRcdHBhcmVudDogdGhpcy5wYXJlbnQsXHJcblx0XHRcdGluaXRpYWw6IHRoaXMuaW5pdGlhbCxcclxuXHRcdFx0bW9kaWZpZWQ6IHRoaXMubW9kaWZpZWQsXHJcblx0XHRcdGRlcml2ZWQ6IHRoaXMuZGVyaXZlZCxcclxuXHRcdFx0Y29sdW1uczogdGhpcy5jb2x1bW5zXHJcblx0XHR9O1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBGaWVsZE1hcCwgUmVzcG9uc2VDb2x1bW4gfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbVJlc291cmNlIHtcclxuXHRjb2x1bW5zOiB7IFtjb2x1bW5JZDogc3RyaW5nXTogUmVzcG9uc2VDb2x1bW4gfTtcclxuXHRmaWVsZHM6IEZpZWxkTWFwO1xyXG5cdGRlcml2ZWQ6IEZpZWxkTWFwO1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwdWJsaWMgZW50cnk6IEl0ZW1FbnRyeSxcclxuXHRcdHB1YmxpYyBvcHRpb25zLFxyXG5cdFx0cHJvdGVjdGVkIHJlYWRvbmx5IF9pc05ldzogYm9vbGVhbiA9IGZhbHNlXHJcblx0KSB7XHJcblx0XHR0aGlzLmRlcml2ZWQgPSBlbnRyeS5kZXJpdmVkO1xyXG5cdFx0dGhpcy5jb2x1bW5zID0gZW50cnkuY29sdW1ucy5yZXNwb25zZVtlbnRyeS5jb2x1bW5zLml0ZW1UeXBlXTtcclxuXHJcblx0XHRlbnRyeS5yZXNvdXJjZXMucHVzaCh0aGlzKTtcclxuXHR9XHJcblxyXG5cdGlzTmV3ICgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLl9pc05ldztcclxuXHR9XHJcblxyXG5cdGlzTG9jYWwgKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuZW50cnkuaXNMb2NhbCgpO1xyXG5cdH1cclxuXHJcblx0Y2xlYXJSZXNvdXJjZSAoKSB7XHJcblx0XHRjb25zdCByZXNvdXJjZXMgPSB0aGlzLmVudHJ5LnJlc291cmNlcztcclxuXHRcdGNvbnN0IGluZGV4ID0gcmVzb3VyY2VzLmluZGV4T2YodGhpcyk7XHJcblxyXG5cdFx0aWYgKGluZGV4ICE9PSAtMSlcclxuXHRcdFx0cmVzb3VyY2VzLnNwbGljZShpbmRleCwgMSk7XHJcblx0fVxyXG5cclxuXHRkZWFjdGl2YXRlICgpIHtcclxuXHRcdHRoaXMub3B0aW9ucy5vbkRlYWN0aXZhdGUodGhpcy5lbnRyeSk7XHJcblx0fVxyXG5cclxuXHR0b0pTT04gKCkge1xyXG5cdFx0Y29uc3QgY29sdW1uSWRzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gdGhpcy5jb2x1bW5zKVxyXG5cdFx0XHRjb2x1bW5JZHMucHVzaChjb2x1bW5JZCk7XHJcblxyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0Y29sdW1uczogY29sdW1uSWRzLFxyXG5cdFx0XHRmaWVsZHM6IHRoaXMuZmllbGRzLFxyXG5cdFx0XHRkZXJpdmVkOiB0aGlzLmRlcml2ZWQsXHJcblx0XHRcdGVudHJ5OiB0aGlzLmVudHJ5XHJcblx0XHR9O1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVmlld1Jlc291cmNlIGV4dGVuZHMgSXRlbVJlc291cmNlIHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRlbnRyeTogSXRlbUVudHJ5LFxyXG5cdFx0b3B0aW9ucyxcclxuXHRcdGlzTmV3PzogYm9vbGVhblxyXG5cdCkge1xyXG5cdFx0c3VwZXIoZW50cnksIG9wdGlvbnMsIGlzTmV3KTtcclxuXHJcblx0XHR0aGlzLmZpZWxkcyA9IGVudHJ5Lm1vZGlmaWVkID09PSB1bmRlZmluZWQgP1xyXG5cdFx0XHRlbnRyeS5pbml0aWFsIDogZW50cnkubW9kaWZpZWQ7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IGNyZWF0ZVBhdGggfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgSXRlbVJlc291cmNlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEZpZWxkTWFwLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRWRpdFJlc291cmNlIGV4dGVuZHMgSXRlbVJlc291cmNlIHtcclxuXHRsb2NhbENvcGllczogRmllbGRNYXBbXSA9IFtdO1xyXG5cdHRyYW5zYWN0aW9uczogbnVtYmVyID0gMDtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBmYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxyXG5cdFx0ZW50cnk6IEl0ZW1FbnRyeSxcclxuXHRcdG9wdGlvbnMsXHJcblx0XHRpc05ldz86IGJvb2xlYW5cclxuXHQpIHtcclxuXHRcdHN1cGVyKGVudHJ5LCBvcHRpb25zLCBpc05ldyk7XHJcblxyXG5cdFx0ZW50cnkuc2V0TW9kaWZpZWQoKTtcclxuXHJcblx0XHR0aGlzLmZpZWxkcyA9IGVudHJ5Lm1vZGlmaWVkO1xyXG5cdH1cclxuXHJcblx0aXNOZXcgKCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2lzTmV3ICYmIHRoaXMudHJhbnNhY3Rpb25zID09PSAwO1xyXG5cdH1cclxuXHJcblx0c3RhcnQgKCk6IHRoaXMge1xyXG5cdFx0aWYgKHRoaXMubG9jYWxDb3BpZXMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0dGhpcy5sb2NhbENvcGllcyA9IFtdO1xyXG5cclxuXHRcdHRoaXMubG9jYWxDb3BpZXMucHVzaCh0aGlzLmNvcHlGaWVsZHMoKSk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRyb2xsYmFjayAoKTogdGhpcyB7XHJcblx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLmVudHJ5O1xyXG5cclxuXHRcdHRoaXMuZmFjdG9yeS5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyg8RmllbGRNYXA+IHRoaXMubG9jYWxDb3BpZXMucG9wKCksIGl0ZW1FbnRyeS5tb2RpZmllZCwgaXRlbUVudHJ5LmNvbHVtbnMubWFpbik7XHJcblxyXG5cdFx0aWYgKHRoaXMuaXNOZXcoKSAmJiB0aGlzLmxvY2FsQ29waWVzLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0dGhpcy5kZWFjdGl2YXRlKCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRjb21taXQgKGNhbGxPbkNoYW5nZTogYm9vbGVhbiA9IHRydWUpOiB0aGlzIHtcclxuXHRcdGNvbnN0IHByZXZpb3VzID0gPEZpZWxkTWFwPiB0aGlzLmxvY2FsQ29waWVzLnBvcCgpO1xyXG5cclxuXHRcdGlmIChjYWxsT25DaGFuZ2UpXHJcblx0XHRcdHRoaXMuY2FsbE9uQ2hhbmdlKHByZXZpb3VzKTtcclxuXHJcblx0XHR0aGlzLnRyYW5zYWN0aW9ucysrOyAvLyBjb21wbGV0ZWQgdHJhbnNhY3Rpb25zXHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRnZXRMb2NhbENvcHkgKCk6IEZpZWxkTWFwIHwgbnVsbCB7XHJcblx0XHRjb25zdCBsb2NhbENvcGllcyA9IHRoaXMubG9jYWxDb3BpZXM7XHJcblxyXG5cdFx0aWYgKGxvY2FsQ29waWVzID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cclxuXHRcdGlmIChsb2NhbENvcGllcy5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cclxuXHRcdHJldHVybiBsb2NhbENvcGllc1tsb2NhbENvcGllcy5sZW5ndGggLSAxXTtcclxuXHR9XHJcblxyXG5cdGNvcHlGaWVsZHMgKGRlc3RpbmF0aW9uOiBGaWVsZE1hcCA9IHt9KTogRmllbGRNYXAge1xyXG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyeTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5mYWN0b3J5LmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGl0ZW1FbnRyeS5tb2RpZmllZCwgZGVzdGluYXRpb24sIGl0ZW1FbnRyeS5jb2x1bW5zLm1haW4pO1xyXG5cdH1cclxuXHJcblx0c2V0RmllbGRzICh2YWx1ZXM6IEZpZWxkTWFwLCBjYWxsT25DaGFuZ2U6IGJvb2xlYW4gPSB0cnVlKTogdGhpcyB7XHJcblx0XHRjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xyXG5cdFx0Y29uc3QgZmllbGRzID0gdGhpcy5maWVsZHM7XHJcblx0XHRsZXQgaGFzQ2hhbmdlcyA9IGZhbHNlO1xyXG5cdFx0bGV0IHByZXZpb3VzO1xyXG5cclxuXHRcdGlmIChjYWxsT25DaGFuZ2UpXHJcblx0XHRcdHByZXZpb3VzID0gdGhpcy5jb3B5RmllbGRzKCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB2YWx1ZXMpIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uID0gY29sdW1uc1tjb2x1bW5JZF07XHJcblxyXG5cdFx0XHRpZiAoY29sdW1uID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRjb25zb2xlLndhcm4oJ3NldEZpZWxkczogbm8gY29sdW1uIGZvdW5kIGZvcicsIGNvbHVtbklkKTtcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKHRoaXMuZmFjdG9yeS5hcGlGb3JtYXR0ZXIuY29tcGFyZUZpZWxkcyhjb2x1bW4udHlwZSwgZmllbGRzW2NvbHVtbklkXSwgdmFsdWVzW2NvbHVtbklkXSkpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRmaWVsZHNbY29sdW1uSWRdID0gdmFsdWVzW2NvbHVtbklkXTtcclxuXHRcdFx0aGFzQ2hhbmdlcyA9IHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGNhbGxPbkNoYW5nZSAmJiBoYXNDaGFuZ2VzKVxyXG5cdFx0XHR0aGlzLmNhbGxPbkNoYW5nZShwcmV2aW91cyk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRjYWxsT25DaGFuZ2UgKHByZXZpb3VzOiBGaWVsZE1hcCk6IHRoaXMge1xyXG5cdFx0dGhpcy5lbnRyeS5jYWxsT25DaGFuZ2UocHJldmlvdXMpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0c2F2ZSAocGFyYW1ldGVycz8pOiBQcm9taXNlSW50ZXJmYWNlPHRoaXM+IHtcclxuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XHJcblx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLmVudHJ5O1xyXG5cdFx0Y29uc3QgcGFyYW1ldGVyTWFwID0ge307XHJcblxyXG5cdFx0aWYgKHBhcmFtZXRlcnMgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRjcmVhdGVQYXRoKFxyXG5cdFx0XHRcdHBhcmFtZXRlck1hcCxcclxuXHRcdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcclxuXHRcdFx0XHRbe30sIHBhcmFtZXRlcnNdXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0aXRlbUVudHJ5LmlzTG9ja2FibGUoKSA/XHJcblx0XHRcdFx0ZmFjdG9yeS5sb2NrU2VydmljZS5mZXRjaExvY2soaXRlbUVudHJ5KSA6XHJcblx0XHRcdFx0ZmFjdG9yeS5wcm9taXNlU2VydmljZS53aGVuKClcclxuXHRcdCkudGhlbihcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdC8vIGFkZFRvQ29sbGVjdGlvbnMgaXMgY2FsbGVkIGluIGNoYW5nZXNQcm9jZXNzb3JcclxuXHRcdFx0XHRyZXR1cm4gZmFjdG9yeS5jaGFuZ2VzUHJvY2Vzc29yLmV4ZWN1dGUoW2l0ZW1FbnRyeV0sIFtdLCBwYXJhbWV0ZXJNYXApO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRmYWN0b3J5LmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCkudGhlbihcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRmYWN0b3J5LmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbHVtblNldCB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBUZW1wbGF0ZUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBBcGlSZXNwb25zZSwgRmllbGRNYXAsIEl0ZW1UeXBlLCBSZXNwb25zZUNvbHVtbk1hcCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZSB7XHJcblx0ZmllbGRzOiBGaWVsZE1hcDtcclxuXHRyZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwO1xyXG5cdGNvbHVtbnM6IENvbHVtblNldDsgLy8gVE9ETzogcmVuYW1lIHRvIGNvbHVtblNldFxyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRmYWN0b3J5OiBUZW1wbGF0ZUZhY3RvcnksXHJcblx0XHRwdWJsaWMgaXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0cHVibGljIHJlc3BvbnNlOiBBcGlSZXNwb25zZSxcclxuXHRcdGFkZGl0aW9uYWxDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcFxyXG5cdCkge1xyXG5cdFx0dGhpcy5maWVsZHMgPSByZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgcmVzcG9uc2UubGlua3NbaXRlbVR5cGVdWzBdKTtcclxuXHJcblx0XHR0aGlzLnJlc3BvbnNlQ29sdW1ucyA9IGZhY3RvcnkuY29sdW1uVXRpbC5tZXJnZVJlc3BvbnNlQ29sdW1ucyhyZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKSwgYWRkaXRpb25hbENvbHVtbnMpLm1lcmdlZDtcclxuXHJcblx0XHR0aGlzLmNvbHVtbnMgPSBmYWN0b3J5LmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCB0cnVlLCB0aGlzLnJlc3BvbnNlQ29sdW1ucyk7XHJcblx0fVxyXG59XHJcbiIsIi8vIHNob3VsZCBiZSBvcmRlcmVkIGJ5IGRlcGVuZGVuY3khXHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkVudHJ5JztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uUmVzb3VyY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25WaWV3UmVzb3VyY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25FZGl0UmVzb3VyY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1FbnRyeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vSXRlbVJlc291cmNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9WaWV3UmVzb3VyY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0VkaXRSZXNvdXJjZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vVGVtcGxhdGUnO1xyXG4iLCJpbXBvcnQge1xyXG5cdENvbGxlY3Rpb25DYWNoZSxcclxuXHRDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxyXG5cdENvbGxlY3Rpb25IYW5kbGVyLFxyXG5cdENvbGxlY3Rpb25NYXRjaGVyLFxyXG5cdENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UsXHJcblx0Q29sdW1uU2V0LFxyXG5cdEl0ZW1DYWNoZSxcclxuXHRJdGVtRW50cnlTZXJ2aWNlLFxyXG5cdEl0ZW1IYW5kbGVyLFxyXG5cdEl0ZW1SZXF1ZXN0U2VydmljZSxcclxuXHRLZXlTZXJ2aWNlLFxyXG5cdExvY2FsQ2FjaGUsXHJcblx0UXVlcnlTZXJ2aWNlXHJcbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7XHJcblx0Q29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxyXG5cdENvbHVtblNldEZhY3RvcnksXHJcblx0TG9jYWxDYWNoZUZhY3RvcnksXHJcblx0TW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeVxyXG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7XHJcblx0QXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXHJcblx0QXV0aEludGVyZmFjZSxcclxuXHRFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0TG9jYWxDYWNoZU1hbmFnZXJJbnRlcmZhY2UsXHJcblx0UHJvbWlzZUxpYnJhcnlJbnRlcmZhY2VcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHtcclxuXHRDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCxcclxuXHRDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcCxcclxuXHRDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwLCBJdGVtSWQsXHJcblx0SXRlbUlkQ29udmVyc2lvbk1hcCxcclxuXHRJdGVtT3B0aW9ucyxcclxuXHRJdGVtUmVzb3VyY2VzSXRlbVR5cGVNYXAsXHJcblx0SXRlbVR5cGUsXHJcblx0TGlua2VkSXRlbUVudHJ5TWFwLFxyXG5cdExvY2FsQ2FjaGVDYWxsYmFja0NvbmRpdGlvbixcclxuXHRPblNhdmVDYWxsYmFjayxcclxuXHRQcm9taXNlSW50ZXJmYWNlLFxyXG5cdFN0YXRlS2V5VHlwZSxcclxuXHRUZW1wbGF0ZUl0ZW1FbnRyeU1hcCxcclxuXHRUZW1wbGF0ZUl0ZW1SZXNvdXJjZU1hcFxyXG59IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IGNyZWF0ZVBhdGggfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW1BZG1pbmlzdHJhdG9yIHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgYXV0aEludGVyZmFjZTogQXV0aEludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkVudHJ5U2VydmljZTogQ29sbGVjdGlvbkVudHJ5U2VydmljZSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnk6IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvblJlc291cmNlU2VydmljZTogQ29sbGVjdGlvblJlc291cmNlU2VydmljZSxcclxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcclxuXHRcdHByaXZhdGUgaXRlbVJlcXVlc3RTZXJ2aWNlOiBJdGVtUmVxdWVzdFNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGxvY2FsQ2FjaGVGYWN0b3J5OiBMb2NhbENhY2hlRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgbG9jYWxDYWNoZU1hbmFnZXI6IExvY2FsQ2FjaGVNYW5hZ2VySW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBtb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5OiBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlSW50ZXJmYWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgcXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2VcclxuXHQpIHtcclxuXHJcblx0fVxyXG5cclxuXHRpbnZhbGlkYXRlQ2FjaGUgKCk6IHZvaWQge1xyXG5cdFx0Ly8gdGhlIGl0ZW1IYW5kbGVyIGNhY2hlIG9ubHkgY29udGFpbnMgcmVtb3RlIGVudHJpZXNcclxuXHRcdHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5mb3JFYWNoKFxyXG5cdFx0XHRpdGVtRW50cnkgPT4gaXRlbUVudHJ5LnF1ZXVlUmVsb2FkKClcclxuXHRcdCk7XHJcblxyXG5cdFx0Ly8gcXVldWVSZWxvYWQgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQgZm9yIGVhY2ggaW5kaXZpZHVhbCBpdGVtXHJcblx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmVudHJpZXMuZm9yRWFjaChcclxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5ID0+IGNvbGxlY3Rpb25FbnRyeS5xdWV1ZVJlbG9hZCgpXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Z2V0Q29sbGVjdGlvbk1hdGNoZXIgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgYWRkVG9UYWI6IGJvb2xlYW4gPSB0cnVlKTogQ29sbGVjdGlvbk1hdGNoZXIge1xyXG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xyXG5cdFx0Y29uc3QgY29sbGVjdGlvbk1hdGNoZXIgPSB0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QoW2xvY2FsQ2FjaGUuY29sbGVjdGlvbnNdLCBmYWxzZSwgdHJ1ZSk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcclxuXHRcdFx0Ly8gdGhpcyBpcyBvbmx5IHJlbGV2YW50IGlmIHRoZXJlIGFyZSBubyBjb2xsZWN0aW9ucyB0byBhZGQgdGhlIGl0ZW0gdG8sIGJ1dCB3ZSBzdGlsbCB3YW50IHRvIHNhdmUgdGhlIGl0ZW1cclxuXHRcdFx0aWYgKGFkZFRvVGFiKVxyXG5cdFx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMuYWRkKGl0ZW1FbnRyeSk7XHJcblxyXG5cdFx0XHRjb2xsZWN0aW9uTWF0Y2hlci5leHBhbmQoaXRlbUVudHJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gY29sbGVjdGlvbk1hdGNoZXI7XHJcblx0fVxyXG5cclxuXHRmZXRjaFRpdGxlIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkLCBkZWZlclJlcXVlc3Q/OiBib29sZWFuKTogUHJvbWlzZUludGVyZmFjZTxzdHJpbmc+IHtcclxuXHRcdHJldHVybiB0aGlzLml0ZW1IYW5kbGVyLmZldGNoVGl0bGUoaXRlbVR5cGUsIGl0ZW1JZCwgZGVmZXJSZXF1ZXN0LCB0aGlzLmdldExvY2FsQ2FjaGUoKS5pdGVtcyk7XHJcblx0fVxyXG5cclxuXHRnZXRJdGVtQnlJZCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCwgb3B0aW9uczogSXRlbU9wdGlvbnMsIGlzUm9vdD86IGJvb2xlYW4pOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1SZXNvdXJjZT4ge1xyXG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLml0ZW1IYW5kbGVyLmZldGNoSXRlbShcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdGl0ZW1JZCxcclxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpLFxyXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zXHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUl0ZW1SZXNvdXJjZShpdGVtRW50cnksIG9wdGlvbnMsIGlzUm9vdCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGdldEl0ZW1zQnlJZCAoaXRlbVR5cGU6IHN0cmluZywgaXRlbUlkczogbnVtYmVyW10sIG9wdGlvbnM6IGFueSk6IFByb21pc2VJbnRlcmZhY2U8SXRlbVJlc291cmNlW10+IHtcclxuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5pdGVtSGFuZGxlci5mZXRjaEl0ZW1zKFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0aXRlbUlkcyxcclxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpLFxyXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zXHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdChpdGVtRW50cmllczogSXRlbUVudHJ5W10pID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVJdGVtUmVzb3VyY2VzKGl0ZW1FbnRyaWVzLCBvcHRpb25zKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Z2V0SXRlbXNCeVF1ZXJ5IChpdGVtVHlwZTogc3RyaW5nLCBxdWVyeTogYW55LCBvcHRpb25zOiBhbnkpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1SZXNvdXJjZVtdPiB7XHJcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XHJcblx0XHRjb25zdCBlbnRyeU9wdGlvbnMgPSB0aGlzLml0ZW1FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5hZGRQYXJlbnRDb25kaXRpb24ocXVlcnksIGVudHJ5T3B0aW9ucy5wYXJlbnQpLFxyXG5cdFx0XHR7W2l0ZW1UeXBlXTogZW50cnlPcHRpb25zLmNvbHVtbnN9XHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc1Jlc3BvbnNlKFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UsXHJcblx0XHRcdFx0XHRyZXNwb25zZS5saW5rc1tpdGVtVHlwZV0sXHJcblx0XHRcdFx0XHRlbnRyeU9wdGlvbnMucGFyZW50LFxyXG5cdFx0XHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgZW50cnlPcHRpb25zLmNvbHVtbnMsIHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpKVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHQoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlSXRlbVJlc291cmNlcyhpdGVtRW50cmllcywgb3B0aW9ucyk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRoZSByZXR1cm4gdmFsdWUgaXMgZGVwZW5kZWQgb24gdGhlIHJldHVybiBsaW5rcyBib29sZWFuLiB0cnVlIHJldHVybnMgdGhlIFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXAuXHJcblx0ICogVGhlIHR5cGUgaGFzIHRvIGJlIGFzc2VydGVkIGF0IHVzZSBzaW5jZSB5b3Ugb25seSBrbm93IHRoZSB0eXBlIG9mIHRoZSByZXR1cm4gdmFsdWUgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkXHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaXRlbVR5cGVcclxuXHQgKiBAcGFyYW0gb3B0aW9uc1xyXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gcmV0dXJuTGlua3NcclxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGlzUm9vdFxyXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlSW50ZXJmYWNlPEl0ZW1SZXNvdXJjZSB8IFRlbXBsYXRlSXRlbUVudHJ5TWFwPn1cclxuXHQgKi9cclxuXHRnZXROZXdSZXNvdXJjZSAoXHJcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXHJcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9ucyA9IHt9LFxyXG5cdFx0cmV0dXJuTGlua3M6IGJvb2xlYW4gPSBmYWxzZSxcclxuXHRcdGlzUm9vdD86IGJvb2xlYW5cclxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1SZXNvdXJjZSB8IFRlbXBsYXRlSXRlbVJlc291cmNlTWFwPiB7XHJcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XHJcblxyXG5cdFx0b3B0aW9ucy5lZGl0ID0gdHJ1ZTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5pdGVtSGFuZGxlci5mZXRjaE5ld0l0ZW0oXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyksXHJcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXNcclxuXHRcdCkudGhlbihcclxuXHRcdFx0KGl0ZW1FbnRyeVJlc291cmNlOiBUZW1wbGF0ZUl0ZW1FbnRyeU1hcCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IG1haW4gPSBsb2NhbENhY2hlLmNyZWF0ZUl0ZW1SZXNvdXJjZShpdGVtRW50cnlSZXNvdXJjZS5tYWluLCBvcHRpb25zLCBpc1Jvb3QsIHRydWUpO1xyXG5cdFx0XHRcdGNvbnN0IGxpbmtlZCA9IHRoaXMucHJvY2Vzc0xpbmtlZEl0ZW1zKGl0ZW1FbnRyeVJlc291cmNlLmxpbmtlZCwgb3B0aW9ucywgdHJ1ZSk7IC8vIGRvIHRoaXMgYmVmb3JlaGFuZFxyXG5cclxuXHRcdFx0XHRpZiAoIXJldHVybkxpbmtzKVxyXG5cdFx0XHRcdFx0cmV0dXJuIChtYWluIGFzIEl0ZW1SZXNvdXJjZSk7XHJcblxyXG5cdFx0XHRcdHJldHVybiAoe21haW46IG1haW4sIGxpbmtlZDogbGlua2VkfSBhcyBUZW1wbGF0ZUl0ZW1SZXNvdXJjZU1hcCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGdldER1cGxpY2F0ZUJ5SWQgKFxyXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0ZHVwbGljYXRlSWQ6IEl0ZW1JZCxcclxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zID0ge30sXHJcblx0XHRyZXR1cm5MaW5rcz86IGJvb2xlYW4sXHJcblx0XHRpc1Jvb3Q/OiBib29sZWFuXHJcblx0KTogUHJvbWlzZUludGVyZmFjZTxJdGVtUmVzb3VyY2UgfCBUZW1wbGF0ZUl0ZW1SZXNvdXJjZU1hcD4ge1xyXG5cdFx0b3B0aW9ucy5pc0R1cGxpY2F0ZSA9IHRydWU7XHJcblxyXG5cdFx0aWYgKG9wdGlvbnMudGVtcGxhdGVPcHRpb25zID09PSB1bmRlZmluZWQpXHJcblx0XHRcdG9wdGlvbnMudGVtcGxhdGVPcHRpb25zID0ge307XHJcblxyXG5cdFx0aWYgKG9wdGlvbnMudGVtcGxhdGVPcHRpb25zLml0ZW0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0b3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMuaXRlbSA9IGR1cGxpY2F0ZUlkO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmdldE5ld1Jlc291cmNlKGl0ZW1UeXBlLCBvcHRpb25zLCByZXR1cm5MaW5rcywgaXNSb290KTtcclxuXHR9XHJcblxyXG5cdC8vIHN0YXRlS2V5IGNhbiBiZSBhIGtleXdvcmQgb3IgYSBsb2NhbCBpZCAoaW4gY2FzZSBvZiBhIHJlZnJlc2gpXHJcblx0Z2V0SXRlbUJ5U3RhdGUgKFxyXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0c3RhdGVLZXk6IEl0ZW1JZCB8IHN0cmluZyxcclxuXHRcdG9wdGlvbnM/OiBJdGVtT3B0aW9ucyxcclxuXHRcdGlzUm9vdD86IGJvb2xlYW5cclxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1SZXNvdXJjZT4ge1xyXG5cdFx0Y29uc3QgcGFyc2VkU3RhdGVLZXkgPSB0aGlzLmtleVNlcnZpY2UucGFyc2VTdGF0ZUtleSg8c3RyaW5nPiBzdGF0ZUtleSk7XHJcblxyXG5cdFx0aWYgKHBhcnNlZFN0YXRlS2V5ID09PSBudWxsKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW1JZCA9IDxJdGVtSWQ+IHN0YXRlS2V5O1xyXG5cclxuXHRcdFx0aWYgKCF0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKGl0ZW1JZCkgfHwgdGhpcy5nZXRMb2NhbENhY2hlKCkuaXRlbXMuY29udGFpbnMoaXRlbVR5cGUsIGl0ZW1JZCkpXHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0SXRlbUJ5SWQoaXRlbVR5cGUsIGl0ZW1JZCwgb3B0aW9ucywgaXNSb290KTtcclxuXHRcdH0gZWxzZSBpZiAocGFyc2VkU3RhdGVLZXkudHlwZSA9PT0gU3RhdGVLZXlUeXBlLkR1cGxpY2F0ZSkge1xyXG5cdFx0XHRyZXR1cm4gPFByb21pc2VJbnRlcmZhY2U8SXRlbVJlc291cmNlPj4gdGhpcy5nZXREdXBsaWNhdGVCeUlkKFxyXG5cdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdDxJdGVtSWQ+IHBhcnNlZFN0YXRlS2V5Lml0ZW1JZCxcclxuXHRcdFx0XHRvcHRpb25zLFxyXG5cdFx0XHRcdGZhbHNlLFxyXG5cdFx0XHRcdGlzUm9vdFxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiA8UHJvbWlzZUludGVyZmFjZTxJdGVtUmVzb3VyY2U+PiB0aGlzLmdldE5ld1Jlc291cmNlKGl0ZW1UeXBlLCBvcHRpb25zLCBmYWxzZSwgaXNSb290KTtcclxuXHR9XHJcblxyXG5cdGdldENvbGxlY3Rpb25EZWYgKGl0ZW1UeXBlOiBzdHJpbmcsIG9wdGlvbnM6IGFueSkge1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0aXRlbVR5cGU6IGl0ZW1UeXBlLFxyXG5cdFx0XHRvcHRpb25zOiB7XHJcblx0XHRcdFx0ZW50cnk6IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKSwgLy8gd2UgbmVlZCB0aGUgZGVmYXVsdCBjb2x1bW4gdmFsdWVcclxuXHRcdFx0XHRyZXNvdXJjZTogdGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpXHJcblx0XHRcdH1cclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHRnZXRMaW5rQ29sbGVjdGlvbnNEZWYgKGxpbmtUeXBlOiBzdHJpbmcsIGxpbmtJZEFycmF5OiBudW1iZXJbXSwgaXRlbVR5cGU6IHN0cmluZywgbGlua0ZpZWxkOiBzdHJpbmcsIG9wdGlvbnM6IGFueSkge1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0aXRlbVR5cGU6IGl0ZW1UeXBlLFxyXG5cdFx0XHRsaW5rVHlwZTogbGlua1R5cGUsXHJcblx0XHRcdGxpbmtJZEFycmF5OiBsaW5rSWRBcnJheSxcclxuXHRcdFx0bGlua0ZpZWxkOiBsaW5rRmllbGQsXHJcblx0XHRcdG9wdGlvbnM6IHtcclxuXHRcdFx0XHRlbnRyeTogdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpLFxyXG5cdFx0XHRcdHJlc291cmNlOiB0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucylcclxuXHRcdFx0fVxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdGdldENvbGxlY3Rpb24gKGl0ZW1UeXBlOiBzdHJpbmcsIG9wdGlvbnM6IGFueSk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvblJlc291cmNlPiB7XHJcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZmV0Y2goXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyksXHJcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMsXHJcblx0XHRcdGxvY2FsQ2FjaGUuY29sbGVjdGlvbnMsXHJcblx0XHRcdGxvY2FsQ2FjaGUuZGVmZXJyZWRDb2xsZWN0aW9uc1xyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHRlbnRyeSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlKFxyXG5cdFx0XHRcdFx0ZW50cnksXHJcblx0XHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucylcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRnZXRDb2xsZWN0aW9uRnJvbURlZiAoZGVmaW5pdGlvbjogYW55KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uUmVzb3VyY2U+IHtcclxuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5mZXRjaChcclxuXHRcdFx0ZGVmaW5pdGlvbi5pdGVtVHlwZSxcclxuXHRcdFx0ZGVmaW5pdGlvbi5vcHRpb25zLmVudHJ5LFxyXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxyXG5cdFx0XHRsb2NhbENhY2hlLmNvbGxlY3Rpb25zLFxyXG5cdFx0XHRsb2NhbENhY2hlLmRlZmVycmVkQ29sbGVjdGlvbnNcclxuXHRcdCkudGhlbihcclxuXHRcdFx0ZW50cnkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZShlbnRyeSwgZGVmaW5pdGlvbi5vcHRpb25zLnJlc291cmNlKTtcclxuXHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBkZXByZWNhdGVkLCB1c2UgYHBhcmVudGAgaW4gb3B0aW9uc1xyXG5cdCAqL1xyXG5cdGdldExpbmtDb2xsZWN0aW9uIChsaW5rVHlwZTogc3RyaW5nLCBsaW5rSWQ6IG51bWJlciwgaXRlbVR5cGU6IHN0cmluZywgb3B0aW9uczogYW55KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uUmVzb3VyY2U+IHtcclxuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcclxuXHRcdGNvbnN0IGVudHJ5T3B0aW9ucyA9IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTtcclxuXHJcblx0XHRlbnRyeU9wdGlvbnMucGFyZW50ID0ge2l0ZW1UeXBlOiBsaW5rVHlwZSwgaXRlbUlkOiBsaW5rSWR9O1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmZldGNoKFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0ZW50cnlPcHRpb25zLFxyXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxyXG5cdFx0XHRsb2NhbENhY2hlLmNvbGxlY3Rpb25zLFxyXG5cdFx0XHRsb2NhbENhY2hlLmRlZmVycmVkQ29sbGVjdGlvbnNcclxuXHRcdCkudGhlbihcclxuXHRcdFx0KGVudHJ5OiBDb2xsZWN0aW9uRW50cnkpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UoXHJcblx0XHRcdFx0XHRlbnRyeSxcclxuXHRcdFx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGdldExpbmtDb2xsZWN0aW9ucyAobGlua1R5cGU6IHN0cmluZywgbGlua0lkQXJyYXk6IG51bWJlcltdLCBpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zOiBhbnkpOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwPiB7XHJcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XHJcblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5iYXRjaEZldGNoKFxyXG5cdFx0XHRsaW5rVHlwZSxcclxuXHRcdFx0bGlua0lkQXJyYXksXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyksXHJcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMsXHJcblx0XHRcdGxvY2FsQ2FjaGUuY29sbGVjdGlvbnMsXHJcblx0XHRcdGxvY2FsQ2FjaGUuZGVmZXJyZWRDb2xsZWN0aW9uc1xyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHQoY29sbGVjdGlvbkVudHJpZXM6IENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlcyhcclxuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyaWVzLFxyXG5cdFx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Z2V0TGlua0NvbGxlY3Rpb25zRnJvbURlZiAoZGVmaW5pdGlvbjogYW55KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcD4ge1xyXG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmJhdGNoRmV0Y2goXHJcblx0XHRcdGRlZmluaXRpb24ubGlua1R5cGUsXHJcblx0XHRcdGRlZmluaXRpb24ubGlua0lkQXJyYXksXHJcblx0XHRcdGRlZmluaXRpb24uaXRlbVR5cGUsXHJcblx0XHRcdGRlZmluaXRpb24ub3B0aW9ucy5lbnRyeSxcclxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtcyxcclxuXHRcdFx0bG9jYWxDYWNoZS5jb2xsZWN0aW9ucyxcclxuXHRcdFx0bG9jYWxDYWNoZS5kZWZlcnJlZENvbGxlY3Rpb25zXHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdChjb2xsZWN0aW9uRW50cmllczogQ29sbGVjdGlvbkVudHJ5W10pID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2VzKFxyXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJpZXMsXHJcblx0XHRcdFx0XHRkZWZpbml0aW9uLm9wdGlvbnMucmVzb3VyY2VcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRnZXRBbGxMaW5rQ29sbGVjdGlvbnMgKGxpbmtUeXBlOiBzdHJpbmcsIGl0ZW1UeXBlOiBzdHJpbmcsIG9wdGlvbnM6IGFueSk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA+IHtcclxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KGxpbmtUeXBlLCB7fSwge30pXHJcblx0XHRcdC50aGVuKFxyXG5cdFx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRcdHJldHVybiB0aGlzLmdldExpbmtDb2xsZWN0aW9ucyhcclxuXHRcdFx0XHRcdFx0bGlua1R5cGUsXHJcblx0XHRcdFx0XHRcdHJlc3BvbnNlLmxpbmtzW2xpbmtUeXBlXSxcclxuXHRcdFx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0XHRcdG9wdGlvbnNcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdFx0KTtcclxuXHR9XHJcblxyXG5cdGNsb25lSXRlbSAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UsIG9wdGlvbnM6IGFueSk6IEl0ZW1SZXNvdXJjZSB7XHJcblx0XHRyZXR1cm4gdGhpcy5hZGRTaW5nbGVJdGVtKGl0ZW1SZXNvdXJjZS5lbnRyeS5jbG9uZSgpLCBvcHRpb25zLCBmYWxzZSk7XHJcblx0fVxyXG5cclxuXHRjbG9uZUNvbGxlY3Rpb24gKGNvbGxlY3Rpb25SZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlLCBvcHRpb25zOiBhbnksIGNvbnZlcnNpb25NYXA6IGFueSk6IENvbGxlY3Rpb25SZXNvdXJjZSB7XHJcblx0XHRsZXQgcGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XHJcblxyXG5cdFx0aWYgKHBhcmVudCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRwYXJlbnQgPSBudWxsO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmFkZENvbGxlY3Rpb24oXHJcblx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5lbnRyeS5jbG9uZShwYXJlbnQsIGNvbnZlcnNpb25NYXApLFxyXG5cdFx0XHRvcHRpb25zXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0c2F2ZUN1cnJlbnRMb2NhbENhY2hlIChcclxuXHRcdGNsb3NlVGFiPzogYm9vbGVhbixcclxuXHRcdHBhcmFtZXRlcnM/OiBDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwLFxyXG5cdFx0YnJlYWt1cEJ5UGFyZW50PzogYm9vbGVhbixcclxuXHRcdG9uQWZ0ZXJDcmVhdGVDYWxsYmFjaz86IChjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwKSA9PiB2b2lkXHJcblx0KSB7XHJcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbENhY2hlKCkuc2F2ZShjbG9zZVRhYiwgcGFyYW1ldGVycywgYnJlYWt1cEJ5UGFyZW50LCBvbkFmdGVyQ3JlYXRlQ2FsbGJhY2spO1xyXG5cdH1cclxuXHJcblx0Z2V0Q3VycmVudENvbGxlY3Rpb25zICgpOiBDb2xsZWN0aW9uQ2FjaGUge1xyXG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLmNvbGxlY3Rpb25zO1xyXG5cdH1cclxuXHJcblx0Z2V0Q3VycmVudEl0ZW1zICgpOiBJdGVtQ2FjaGUge1xyXG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLml0ZW1zO1xyXG5cdH1cclxuXHJcblx0Z2V0TW9kdWxlQ2hhbmdlcyAobG9jYWxDYWNoZTogTG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpKSB7XHJcblx0XHRpZiAobG9jYWxDYWNoZS5yb290SXRlbSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2l0ZW1BZG1pbmlzdHJhdG9yOiBObyByb290IGl0ZW0gZm9yIGxvY2FsIGNhY2hlICcgKyBsb2NhbENhY2hlLmlkKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5tb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0bG9jYWxDYWNoZS5yb290SXRlbSxcclxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtcyxcclxuXHRcdFx0bG9jYWxDYWNoZS5jb2xsZWN0aW9uc1xyXG5cdFx0KS5wcm9jZXNzKCk7XHJcblx0fVxyXG5cclxuXHRhZGRTaW5nbGVJdGVtIChcclxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5LFxyXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnMsXHJcblx0XHRpc1Jvb3Q/OiBib29sZWFuLFxyXG5cdFx0bG9jYWxDYWNoZTogTG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpXHJcblx0KTogSXRlbVJlc291cmNlIHtcclxuXHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUl0ZW1SZXNvdXJjZShsb2NhbENhY2hlLml0ZW1zLmFkZChpdGVtRW50cnkpLCBvcHRpb25zLCBpc1Jvb3QpO1xyXG5cdH1cclxuXHJcblx0YWRkU2luZ2xlSXRlbXMgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgb3B0aW9uczogSXRlbU9wdGlvbnMpIHtcclxuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbVJlc291cmNlW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcclxuXHRcdFx0cmVzdWx0LnB1c2godGhpcy5hZGRTaW5nbGVJdGVtKGl0ZW1FbnRyeSwgb3B0aW9ucywgZmFsc2UsIGxvY2FsQ2FjaGUpKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0YWRkQ29sbGVjdGlvbiAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIG9wdGlvbnM6IGFueSk6IENvbGxlY3Rpb25SZXNvdXJjZSB7XHJcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uQ2FjaGUgPSBsb2NhbENhY2hlLmNvbGxlY3Rpb25zO1xyXG5cclxuXHRcdGNvbGxlY3Rpb25DYWNoZS5hZGQoY29sbGVjdGlvbkVudHJ5KTtcclxuXHJcblx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UoXHJcblx0XHRcdGNvbGxlY3Rpb25FbnRyeSxcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjcmVhdGVJdGVtUmVzb3VyY2VzIChcclxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcclxuXHRcdG9wdGlvbnM6IGFueSxcclxuXHRcdGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGVcclxuXHQpOiBJdGVtUmVzb3VyY2VbXSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1SZXNvdXJjZVtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcclxuXHRcdFx0cmVzdWx0LnB1c2gobG9jYWxDYWNoZS5jcmVhdGVJdGVtUmVzb3VyY2UoaXRlbUVudHJ5LCBvcHRpb25zKSk7XHJcblxyXG5cdFx0XHRpZiAoaXRlbVR5cGUgPT09ICdQcm9qZWN0bm90aXRpZScpIHtcclxuXHRcdFx0XHRjcmVhdGVQYXRoKFxyXG5cdFx0XHRcdFx0bG9jYWxDYWNoZS50YWJSZXF1ZXN0UGFyYW1ldGVycyxcclxuXHRcdFx0XHRcdFtpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWRdLFxyXG5cdFx0XHRcdFx0W3t9LCB7bm9fbm90aWZpY2F0aW9uOiB0cnVlfV1cclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHByb2Nlc3NMaW5rZWRJdGVtcyAoXHJcblx0XHRsaW5rZWRFbnRyaWVzOiBMaW5rZWRJdGVtRW50cnlNYXBbXSxcclxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zLFxyXG5cdFx0YWRkVG9Db2xsZWN0aW9uczogYm9vbGVhbiA9IHRydWVcclxuXHQpOiBJdGVtUmVzb3VyY2VzSXRlbVR5cGVNYXAge1xyXG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtUmVzb3VyY2VzSXRlbVR5cGVNYXAgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIGxpbmtlZEVudHJpZXMpIHtcclxuXHRcdFx0Y29uc3QgaXRlbVR5cGUgPSBlbnRyeS5pdGVtVHlwZTtcclxuXHJcblx0XHRcdHJlc3VsdFtpdGVtVHlwZV0gPSB0aGlzLmNyZWF0ZUl0ZW1SZXNvdXJjZXMoZW50cnkuaXRlbVR5cGUsIGVudHJ5Lml0ZW1FbnRyaWVzLCBvcHRpb25zLCBsb2NhbENhY2hlKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIWFkZFRvQ29sbGVjdGlvbnMpXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblxyXG5cdFx0Ly8gdGhlIGl0ZW1FbnRyaWVzIGFyZSBpbiB0b3AtZG93biBvcmRlciwgc28gY2FsbCBmb3IgZWFjaCBpdGVtIHR5cGUgc2VwYXJhdGVseVxyXG5cdFx0Zm9yIChjb25zdCBlbnRyeSBvZiBsaW5rZWRFbnRyaWVzKVxyXG5cdFx0XHR0aGlzLmdldENvbGxlY3Rpb25NYXRjaGVyKGVudHJ5Lml0ZW1FbnRyaWVzLCBmYWxzZSkuYWRkVG9Db2xsZWN0aW9ucygpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRleHBhbmRQcm9jZXNzTGlua2VkSXRlbXMgKFxyXG5cdFx0bGlua2VkRW50cmllczogTGlua2VkSXRlbUVudHJ5TWFwW10sXHJcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc1xyXG5cdCk6IFByb21pc2U8SXRlbVJlc291cmNlc0l0ZW1UeXBlTWFwPiB7XHJcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XHJcblx0XHRsZXQgcHJvbWlzZUNoYWluID0gdGhpcy5wcm9taXNlSW50ZXJmYWNlLndoZW4oe30pO1xyXG5cclxuXHRcdGZvciAoY29uc3QgZW50cnkgb2YgbGlua2VkRW50cmllcykge1xyXG5cdFx0XHQvLyB0aGUgaXRlbUVudHJpZXMgYXJlIGluIHRvcC1kb3duIG9yZGVyLCBzbyBjYWxsIGZvciBlYWNoIGl0ZW0gdHlwZSBzZXBhcmF0ZWx5XHJcblx0XHRcdHByb21pc2VDaGFpbiA9IHByb21pc2VDaGFpbi50aGVuKFxyXG5cdFx0XHRcdHRoaXMuY29uc3RydWN0T25JdGVtc0V4cGFuZGVkKGVudHJ5Lml0ZW1UeXBlLCBlbnRyeS5pdGVtRW50cmllcywgb3B0aW9ucywgbG9jYWxDYWNoZSksXHJcblx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHByb21pc2VDaGFpbjtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY29uc3RydWN0T25JdGVtc0V4cGFuZGVkIChcclxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcclxuXHRcdGl0ZW1PcHRpb25zOiBJdGVtT3B0aW9ucyxcclxuXHRcdGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGVcclxuXHQpOiAoZGVzdGluYXRpb246IEl0ZW1SZXNvdXJjZXNJdGVtVHlwZU1hcCkgPT4gUHJvbWlzZTxJdGVtUmVzb3VyY2VzSXRlbVR5cGVNYXA+IHtcclxuXHRcdHJldHVybiBkZXN0aW5hdGlvbiA9PiB7XHJcblx0XHRcdHJldHVybiB0aGlzLmV4cGFuZEFkZFRvQ29sbGVjdGlvbnMoaXRlbVR5cGUsIGl0ZW1FbnRyaWVzLCBudWxsLCBsb2NhbENhY2hlKS50aGVuKFxyXG5cdFx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRcdGRlc3RpbmF0aW9uW2l0ZW1UeXBlXSA9IHRoaXMuY3JlYXRlSXRlbVJlc291cmNlcyhpdGVtVHlwZSwgaXRlbUVudHJpZXMsIGl0ZW1PcHRpb25zLCBsb2NhbENhY2hlKTtcclxuXHJcblx0XHRcdFx0XHRyZXR1cm4gZGVzdGluYXRpb247XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdFx0KTtcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGV4cGFuZEFkZFRvQ29sbGVjdGlvbnMgKFxyXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxyXG5cdFx0cmVzdWx0Q29sbGVjdGlvblJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsID0gbnVsbCxcclxuXHRcdGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKVxyXG5cdCk6IFByb21pc2U8SXRlbVJlc291cmNlW10gfCBudWxsPiB7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uTWF0Y2hlciA9IHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0W2xvY2FsQ2FjaGUuY29sbGVjdGlvbnNdLFxyXG5cdFx0XHRmYWxzZSxcclxuXHRcdFx0ZmFsc2VcclxuXHRcdCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXHJcblx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyLmV4cGFuZChpdGVtRW50cnkpO1xyXG5cclxuXHRcdGNvbnN0IGNvbHVtblN1cGVyc2V0ID0gdGhpcy5nZXRDb2x1bW5TdXBlcnNldChjb2xsZWN0aW9uTWF0Y2hlci5nZXRDb2xsZWN0aW9uc1dpdGhGaXR0aW5nSXRlbXMoKSk7XHJcblxyXG5cdFx0aWYgKGNvbHVtblN1cGVyc2V0ID09PSBudWxsKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlSW50ZXJmYWNlLndoZW4oQ29sbGVjdGlvblJlc291cmNlID09PSBudWxsID8gbnVsbCA6IFtdKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5pdGVtSGFuZGxlci5leHBhbmRMb2NhbEVudHJpZXMoaXRlbVR5cGUsIGl0ZW1FbnRyaWVzLCBjb2x1bW5TdXBlcnNldCwgbG9jYWxDYWNoZS5pdGVtcykudGhlbihcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBjb2xsZWN0aW9uTWF0Y2hlci5hZGRUb0NvbGxlY3Rpb25zKHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdC8vIHdlIGNvdWxkIG1vdmUgdGhpcyB0byB0aGUgQ29sbGVjdGlvbk1hdGNoZXIgaWYgd2UgZW5mb3JjZSBhIHNpbmdsZSBpdGVtIHR5cGVcclxuXHRwcml2YXRlIGdldENvbHVtblN1cGVyc2V0IChjb2xsZWN0aW9uRW50cmllczogQ29sbGVjdGlvbkVudHJ5W10pOiBDb2x1bW5TZXQgfCBudWxsIHtcclxuXHRcdGNvbnN0IGNvbHVtblNldElkTWFwOiB7W2NvbHVtblNldElkOiBudW1iZXJdOiBib29sZWFufSA9IHt9O1xyXG5cclxuXHRcdGlmIChjb2xsZWN0aW9uRW50cmllcy5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cclxuXHRcdGxldCByZXN1bHQgPSBjb2xsZWN0aW9uRW50cmllc1swXS5jb2x1bW5zO1xyXG5cclxuXHRcdGZvciAobGV0IGkgPSAxOyBpIDwgY29sbGVjdGlvbkVudHJpZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gY29sbGVjdGlvbkVudHJpZXNbaV07XHJcblx0XHRcdGNvbnN0IGNvbHVtblNldCA9IGNvbGxlY3Rpb25FbnRyeS5jb2x1bW5zO1xyXG5cclxuXHRcdFx0aWYgKGNvbHVtblNldElkTWFwW2NvbHVtblNldC5pZF0gPT09IHRydWUpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRjb2x1bW5TZXRJZE1hcFtjb2x1bW5TZXQuaWRdID0gdHJ1ZTtcclxuXHJcblx0XHRcdHJlc3VsdCA9IHJlc3VsdC5tZXJnZShjb2x1bW5TZXQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRnZXRMb2NhbENhY2hlICgpOiBMb2NhbENhY2hlIHtcclxuXHRcdHJldHVybiB0aGlzLmxvY2FsQ2FjaGVNYW5hZ2VyLmdldEN1cnJlbnRMb2NhbENhY2hlKHRoaXMuYXV0aEludGVyZmFjZS5nZXRVbmlxdWVVc2VySWQoKSk7XHJcblx0fVxyXG5cclxuXHRyZXNldExvY2FsQ2FjaGUgKCkge1xyXG5cdFx0Y29uc3Qgb2xkTG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xyXG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMubG9jYWxDYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XHJcblxyXG5cdFx0b2xkTG9jYWxDYWNoZS5jbGVhclJlc291cmNlcygpO1xyXG5cclxuXHRcdHRoaXMubG9jYWxDYWNoZU1hbmFnZXIuc2V0Q3VycmVudExvY2FsQ2FjaGUodGhpcy5hdXRoSW50ZXJmYWNlLmdldFVuaXF1ZVVzZXJJZCgpLCBsb2NhbENhY2hlKTtcclxuXHR9XHJcblxyXG5cdGFkZFRvQ29sbGVjdGlvbnMgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgcmVzdWx0Q29sbGVjdGlvblJlc291cmNlPzogQ29sbGVjdGlvblJlc291cmNlKTogSXRlbVJlc291cmNlW10gfCBudWxsIHtcclxuXHRcdHJldHVybiB0aGlzLmdldENvbGxlY3Rpb25NYXRjaGVyKGl0ZW1FbnRyaWVzKS5hZGRUb0NvbGxlY3Rpb25zKHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZSk7XHJcblx0fVxyXG5cclxuXHRyZW1vdmVGcm9tQ29sbGVjdGlvbnMgKFxyXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxyXG5cdFx0cmVzdWx0Q29sbGVjdGlvblJlc291cmNlPzogQ29sbGVjdGlvblJlc291cmNlXHJcblx0KTogSXRlbVJlc291cmNlW10gfCBudWxsIHtcclxuXHRcdHJldHVybiB0aGlzLmdldENvbGxlY3Rpb25NYXRjaGVyKGl0ZW1FbnRyaWVzLCBmYWxzZSkucmVtb3ZlRnJvbUNvbGxlY3Rpb25zKHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZSk7XHJcblx0fVxyXG5cclxuXHRzYXZlTG9jYWwgKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlKSB7XHJcblx0XHRjb25zdCBpdGVtRW50cnkgPSBpdGVtUmVzb3VyY2UuZW50cnk7XHJcblxyXG5cdFx0aXRlbUVudHJ5LnNldERpc3BsYXlOYW1lKCk7XHJcblx0XHR0aGlzLmFkZFRvQ29sbGVjdGlvbnMoW2l0ZW1FbnRyeV0pO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VJbnRlcmZhY2Uud2hlbihpdGVtUmVzb3VyY2UpO1xyXG5cdH1cclxuXHJcblx0dXBkYXRlSXRlbUlkTWFwIChjb2xsZWN0aW9uTWFwOiBhbnksIGNvbnZlcnNpb25NYXApIHtcclxuXHRcdGlmIChjb252ZXJzaW9uTWFwID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybjtcclxuXHJcblx0XHRmb3IgKGNvbnN0IG9sZElkIGluIGNvbnZlcnNpb25NYXApIHtcclxuXHRcdFx0Y29uc3QgbmV3SWQgPSBjb252ZXJzaW9uTWFwW29sZElkXTtcclxuXHJcblx0XHRcdGlmIChjb2xsZWN0aW9uTWFwW29sZElkXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0Y29sbGVjdGlvbk1hcFtuZXdJZF0gPSBjb2xsZWN0aW9uTWFwW29sZElkXTtcclxuXHRcdFx0ZGVsZXRlIGNvbGxlY3Rpb25NYXBbb2xkSWRdO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Y3JlYXRlQ29sbGVjdGlvblJlc291cmNlIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgcmVzb3VyY2VPcHRpb25zOiBhbnksIHByb2Nlc3NPcHRpb25zID0gdHJ1ZSk6IENvbGxlY3Rpb25SZXNvdXJjZSB7XHJcblx0XHRyZXR1cm4gdGhpcy5hZGRDb2xsZWN0aW9uKFxyXG5cdFx0XHRjb2xsZWN0aW9uRW50cnksXHJcblx0XHRcdHByb2Nlc3NPcHRpb25zID8gdGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKHJlc291cmNlT3B0aW9ucykgOiByZXNvdXJjZU9wdGlvbnNcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRjcmVhdGVJdGVtUmVzb3VyY2UgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBvcHRpb25zOiBhbnksIGlzUm9vdDogYm9vbGVhbikge1xyXG5cdFx0cmV0dXJuIHRoaXMuYWRkU2luZ2xlSXRlbShpdGVtRW50cnksIG9wdGlvbnMsIGlzUm9vdCk7XHJcblx0fVxyXG5cclxuXHRvbkJlZm9yZVNhdmUgKGtleTogc3RyaW5nLCBjYWxsYmFjazogKGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUpID0+IGFueSwgY29uZGl0aW9uPzogTG9jYWxDYWNoZUNhbGxiYWNrQ29uZGl0aW9uKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbENhY2hlKCkub25CZWZvcmVTYXZlKGtleSwgY2FsbGJhY2ssIGNvbmRpdGlvbik7XHJcblx0fVxyXG5cclxuXHRvblNhdmVTdWNjZXNzIChrZXk6IHN0cmluZywgY2FsbGJhY2s6IE9uU2F2ZUNhbGxiYWNrLCBjb25kaXRpb24/OiBMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24pIHtcclxuXHRcdHJldHVybiB0aGlzLmdldExvY2FsQ2FjaGUoKS5vblNhdmVTdWNjZXNzKGtleSwgY2FsbGJhY2ssIGNvbmRpdGlvbik7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IFF1ZXJ5TWF0Y2hlckZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnlNYXAsIEl0ZW1FbnRyeVBhcmVudElkTWFwLCBJdGVtSWQsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW1DYWNoZSB7XHJcblx0ZW50cmllczogSXRlbUVudHJ5TWFwID0ge307XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgcXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0c29tZSAoY2FsbGJhY2s6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gYm9vbGVhbikge1xyXG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGVudHJpZXMpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0XHRpZiAoY2FsbGJhY2soZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXSkpXHJcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdGdldEJ5SXRlbVR5cGUgKGl0ZW1UeXBlOiBJdGVtVHlwZSkge1xyXG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBlbnRyaWVzKVxyXG5cdFx0XHRyZXN1bHQucHVzaChlbnRyaWVzW2l0ZW1JZF0pO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRnZXRCeVF1ZXJ5IChpdGVtVHlwZTogSXRlbVR5cGUsIHF1ZXJ5KSB7XHJcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGVudHJpZXMpIHtcclxuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gZW50cmllc1tpdGVtSWRdO1xyXG5cclxuXHRcdFx0aWYgKGl0ZW1FbnRyeS5pc0RlZmVycmVkKCkpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRpZiAodGhpcy5tYXRjaFF1ZXJ5KGl0ZW1FbnRyeSwgcXVlcnkpKVxyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdldExvY2FsQnlRdWVyeSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBxdWVyeSkge1xyXG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBlbnRyaWVzKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGVudHJpZXNbaXRlbUlkXTtcclxuXHJcblx0XHRcdGlmICghaXRlbUVudHJ5LmlzTG9jYWwoKSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGlmICh0aGlzLm1hdGNoUXVlcnkoaXRlbUVudHJ5LCBxdWVyeSkpXHJcblx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0QnlQYXJlbnQgKHBhcmVudFR5cGU6IEl0ZW1UeXBlLCBwYXJlbnRJZDogSXRlbUlkLCBpdGVtVHlwZTogSXRlbVR5cGUpIHtcclxuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllcykge1xyXG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSBlbnRyaWVzW2l0ZW1JZF07XHJcblx0XHRcdGNvbnN0IHBhcmVudCA9IGl0ZW1FbnRyeS5wYXJlbnQ7XHJcblxyXG5cdFx0XHRpZiAocGFyZW50ID09PSBudWxsKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcclxuXHRcdFx0aWYgKHBhcmVudC5pdGVtVHlwZSA9PT0gcGFyZW50VHlwZSAmJiBwYXJlbnQuaXRlbUlkID09IHBhcmVudElkKVxyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGJhdGNoR2V0TG9jYWxCeVBhcmVudCAoXHJcblx0XHRwYXJlbnRUeXBlOiBJdGVtVHlwZSxcclxuXHRcdHBhcmVudElkczogSXRlbUlkW10sXHJcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXHJcblx0XHRhZGRpdGlvbmFsUXVlcnk6IGFueVxyXG5cdCk6IEl0ZW1FbnRyeVBhcmVudElkTWFwIHtcclxuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlQYXJlbnRJZE1hcCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgb2YgcGFyZW50SWRzKVxyXG5cdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gW107XHJcblxyXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBlbnRyaWVzKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGVudHJpZXNbaXRlbUlkXTtcclxuXHRcdFx0Y29uc3QgcGFyZW50ID0gaXRlbUVudHJ5LnBhcmVudDtcclxuXHJcblx0XHRcdGlmIChwYXJlbnQgPT09IG51bGwpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRpZiAocGFyZW50Lml0ZW1UeXBlICE9PSBwYXJlbnRUeXBlIHx8IHJlc3VsdFtwYXJlbnQuaXRlbUlkXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0aWYgKCFpdGVtRW50cnkuaXNMb2NhbCgpKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0aWYgKGFkZGl0aW9uYWxRdWVyeSA9PT0gbnVsbCB8fCB0aGlzLm1hdGNoUXVlcnkoaXRlbUVudHJ5LCBhZGRpdGlvbmFsUXVlcnkpKVxyXG5cdFx0XHRcdHJlc3VsdFtwYXJlbnQuaXRlbUlkXS5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGZvckVhY2ggKGNhbGxiYWNrOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IHZvaWQpIHtcclxuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBlbnRyaWVzKSB7XHJcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGVudHJpZXNbaXRlbVR5cGVdKVxyXG5cdFx0XHRcdGNhbGxiYWNrKGVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0dG9BcnJheSAoKSB7XHJcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gZW50cmllcykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBlbnRyaWVzW2l0ZW1UeXBlXSlcclxuXHRcdFx0XHRyZXN1bHQucHVzaChlbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0YWRkIChpdGVtRW50cnk6IEl0ZW1FbnRyeSk6IEl0ZW1FbnRyeSB7XHJcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzO1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XHJcblxyXG5cdFx0aWYgKGVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdGVudHJpZXNbaXRlbVR5cGVdID0ge307XHJcblxyXG5cdFx0cmV0dXJuIGVudHJpZXNbaXRlbVR5cGVdW2l0ZW1FbnRyeS5pdGVtSWRdID0gaXRlbUVudHJ5O1xyXG5cdH1cclxuXHJcblx0Z2V0IChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkIHwgc3RyaW5nKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdO1xyXG5cdH1cclxuXHJcblx0Ly8gc2hvdWxkIGJlIGZhc3RcclxuXHRjb250YWlucyAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCB8IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIHRoaXMuZW50cmllc1tpdGVtVHlwZV0gIT09IHVuZGVmaW5lZCAmJiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF0gIT09IHVuZGVmaW5lZDtcclxuXHR9XHJcblxyXG5cdHVwZGF0ZUl0ZW1JZCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIG9sZEl0ZW1JZCkge1xyXG5cdFx0Y29uc3QgZW50cnlNYXAgPSB0aGlzLmVudHJpZXNbaXRlbUVudHJ5Lml0ZW1UeXBlXTtcclxuXHJcblx0XHRkZWxldGUgZW50cnlNYXBbb2xkSXRlbUlkXTtcclxuXHRcdHJldHVybiBlbnRyeU1hcFtpdGVtRW50cnkuaXRlbUlkXSA9IGl0ZW1FbnRyeTtcclxuXHR9XHJcblxyXG5cdGNsZWFyIChpdGVtRW50cnk6IEl0ZW1FbnRyeSk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKGl0ZW1FbnRyeSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdHRoaXMuZW50cmllcyA9IHt9O1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1FbnRyeS5pdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdHJldHVybiBkZWxldGUgdGhpcy5lbnRyaWVzW2l0ZW1FbnRyeS5pdGVtVHlwZV1baXRlbUVudHJ5Lml0ZW1JZF07XHJcblx0fVxyXG5cclxuXHRtYXRjaFF1ZXJ5IChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgcXVlcnkpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRpdGVtRW50cnkuaXRlbVR5cGUsXHJcblx0XHRcdGl0ZW1FbnRyeS5nZXRGaWVsZHMoKSxcclxuXHRcdFx0aXRlbUVudHJ5LnBhcmVudFxyXG5cdFx0KS5tYXRjaFF1ZXJ5KHF1ZXJ5Lm9iamVjdCkgPT09IHRydWU7IC8vIFRPRE86IG1heWJlP1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuXHJcbmltcG9ydCB7IEtleVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQUxMX1BFUk1JU1NJT05TIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcclxuaW1wb3J0IHsgQXV0aEludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBBcGlSZXNwb25zZSwgRmllbGRNYXAsIEl0ZW1JZCwgSXRlbUlkQ29udmVyc2lvbk1hcCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5pbXBvcnQgeyBzaGFsbG93TWVyZ2UgfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW1FbnRyeVNlcnZpY2Uge1xyXG5cdC8vIHRvZG86IHRyYW5zbGF0ZVxyXG5cdHVuZGVmaW5lZEl0ZW1FcnJvciA9ICdUaGUgcmVxdWVzdGVkIGl0ZW0gY291bGQgbm90IGJlIGZvdW5kIC8geW91ciBjdXJyZW50IHBlcm1pc3Npb25zIGFyZSBub3Qgc3VmZmljaWVudCc7XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgYXV0aEludGVyZmFjZTogQXV0aEludGVyZmFjZSxcclxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZVxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdHByb2Nlc3NPcHRpb25zIChvcHRpb25zPykge1xyXG5cdFx0cmV0dXJuIHNoYWxsb3dNZXJnZShcclxuXHRcdFx0b3B0aW9ucyxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGNvbHVtbnM6IHRydWUsXHJcblx0XHRcdFx0cGFyZW50OiBudWxsLFxyXG5cdFx0XHRcdHRlbXBsYXRlT3B0aW9uczoge30sXHJcblx0XHRcdFx0dGVtcGxhdGVDb2x1bW5zOiB7fSxcclxuXHRcdFx0XHRkZWZlclJlcXVlc3Q6IGZhbHNlLFxyXG5cdFx0XHRcdGlzRHVwbGljYXRlOiBmYWxzZVxyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlVW5mb3VuZExvY2FsSXRlbUVycm9yIChpdGVtVHlwZTogSXRlbVR5cGUpIHtcclxuXHRcdHJldHVybiB7bWVzc2FnZTogJ0EgbG9jYWwgaXRlbSBvZiB0eXBlICcgKyBpdGVtVHlwZSArICcgY291bGQgbm90IGJlIGZvdW5kJ307XHJcblx0fVxyXG5cclxuXHRjcmVhdGVMb2NhbENvbnZlcnNpb25NYXAgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQsIGRvRXh0ZW5kID0gZmFsc2UsIGFwaVJlc3BvbnNlOiBBcGlSZXNwb25zZSkge1xyXG5cdFx0Y29uc3QgYXBpSXRlbUlkID0gYXBpUmVzcG9uc2UubGlua3NbaXRlbVR5cGVdWzBdO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtSWRDb252ZXJzaW9uTWFwID0ge307XHJcblxyXG5cdFx0cmVzdWx0W2l0ZW1UeXBlXSA9IHt9O1xyXG5cdFx0cmVzdWx0W2l0ZW1UeXBlXVthcGlJdGVtSWRdID0gaXRlbUlkO1xyXG5cclxuXHRcdGlmIChkb0V4dGVuZClcclxuXHRcdFx0dGhpcy5leHBhbmRMb2NhbENvbnZlcnNpb25NYXAoaXRlbVR5cGUsIGFwaUl0ZW1JZCwgYXBpUmVzcG9uc2UsIHJlc3VsdCk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGV4cGFuZExvY2FsQ29udmVyc2lvbk1hcCAocGFyZW50VHlwZTogSXRlbVR5cGUsIHBhcmVudElkOiBJdGVtSWQsIGFwaVJlc3BvbnNlOiBBcGlSZXNwb25zZSwgY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCkge1xyXG5cdFx0Y29uc3QgbGlua3MgPSBhcGlSZXNwb25zZS5pdGVtc1twYXJlbnRUeXBlXVtwYXJlbnRJZF0ubGlua3M7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBsaW5rcykge1xyXG5cdFx0XHRjb25zdCBpZEFycmF5ID0gbGlua3NbaXRlbVR5cGVdO1xyXG5cclxuXHRcdFx0aWYgKGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0Y29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPSB7fTtcclxuXHJcblx0XHRcdGZvciAoY29uc3QgYXBpSXRlbUlkIG9mIGlkQXJyYXkpIHtcclxuXHRcdFx0XHRjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXVthcGlJdGVtSWRdID0gdGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKTtcclxuXHJcblx0XHRcdFx0dGhpcy5leHBhbmRMb2NhbENvbnZlcnNpb25NYXAoaXRlbVR5cGUsIGFwaUl0ZW1JZCwgYXBpUmVzcG9uc2UsIGNvbnZlcnNpb25NYXApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRleHBhbmRDb252ZXJzaW9uTWFwIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCwgbmV3SXRlbUlkPzogSXRlbUlkKSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcclxuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XHJcblxyXG5cdFx0bGV0IGNvbnZlcnNpb25NYXBFbnRyeTtcclxuXHJcblx0XHRpZiAoY29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0Y29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPSB7fTtcclxuXHJcblx0XHRjb252ZXJzaW9uTWFwRW50cnkgPSBjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXTtcclxuXHJcblx0XHRpZiAoY29udmVyc2lvbk1hcEVudHJ5W2l0ZW1JZF0gIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIGNvbnZlcnNpb25NYXBFbnRyeVtpdGVtSWRdO1xyXG5cclxuXHRcdGlmIChuZXdJdGVtSWQgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0bmV3SXRlbUlkID0gdGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKTtcclxuXHJcblx0XHRyZXR1cm4gY29udmVyc2lvbk1hcEVudHJ5W2l0ZW1JZF0gPSBuZXdJdGVtSWQ7XHJcblx0fVxyXG5cclxuXHRiYXRjaEV4cGFuZENvbnZlcnNpb25NYXAgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCkge1xyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXHJcblx0XHRcdHRoaXMuZXhwYW5kQ29udmVyc2lvbk1hcChpdGVtRW50cnksIGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdHJldHVybiBjb252ZXJzaW9uTWFwO1xyXG5cdH1cclxuXHJcblx0Z2V0Q29udmVyc2lvblZhbHVlIChpdGVtVHlwZSwgaXRlbUlkLCBtYXApIHtcclxuXHRcdGlmIChtYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG5cdFx0cmV0dXJuIG1hcFtpdGVtVHlwZV1baXRlbUlkXTtcclxuXHR9XHJcblxyXG5cdGJhdGNoQ2xvbmUgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCA9IHt9KSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdFx0Ly8gdGhlIHRoZSBpdGVtcyBtaWdodCByZWZlcmVuY2UgZWFjaCBvdGhlciwgc28gdXBkYXRlIHRoZSBjb252ZXJzaW9uIG1hcCBmaXJzdFxyXG5cdFx0dGhpcy5iYXRjaEV4cGFuZENvbnZlcnNpb25NYXAoaXRlbUVudHJpZXMsIGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxyXG5cdFx0XHRyZXN1bHQucHVzaChpdGVtRW50cnkuY2xvbmUoY29udmVyc2lvbk1hcCkpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRnZXRGdWxsTmFtZSAoZmlyc3ROYW1lLCBpbmZpeCwgbGFzdE5hbWUpIHtcclxuXHRcdHJldHVybiBmaXJzdE5hbWUudHJpbSgpXHJcblx0XHRcdC5jb25jYXQoJyAnLCBpbmZpeCkudHJpbSgpIC8vIGluZml4IGNhbiBiZSBhbiBlbXB0eSBzdHJpbmdcclxuXHRcdFx0LmNvbmNhdCgnICcsIGxhc3ROYW1lKTtcclxuXHR9XHJcblxyXG5cdGdldFRpdGxlRmllbGQgKGl0ZW1UeXBlKSB7XHJcblx0XHRzd2l0Y2ggKGl0ZW1UeXBlKSB7XHJcblx0XHRcdGNhc2UgJ0V4ZW1wbGFhcic6XHJcblx0XHRcdFx0cmV0dXJuICdzZXJpZW51bW1lcic7XHJcblx0XHRcdGNhc2UgJ0ZhY3R1dXInOlxyXG5cdFx0XHRcdHJldHVybiAnbnVtbWVyJztcclxuXHRcdFx0Y2FzZSAnRmlsZXMnOlxyXG5cdFx0XHRcdHJldHVybiAnZnJpZW5kbHluYW1lJztcclxuXHRcdFx0Y2FzZSAnRnVuY3RpZSc6XHJcblx0XHRcdGNhc2UgJ1N0YW5kYWFyZGZ1bmN0aWUnOlxyXG5cdFx0XHRcdHJldHVybiAnbmFhbWludGVybic7XHJcblx0XHRcdGNhc2UgJ1Zvb3JyYWFkbXV0YXRpZSc6XHJcblx0XHRcdFx0cmV0dXJuICdvbXNjaHJpanZpbmcnO1xyXG5cdFx0XHRjYXNlICdCYXJjb2RlJzpcclxuXHRcdFx0XHRyZXR1cm4gJ2NvZGUnO1xyXG5cdFx0XHRjYXNlICdCZXRhYWxtaWRkZWwnOlxyXG5cdFx0XHRjYXNlICdCZXRhbGluZ3Njb25kaXRpZSc6XHJcblx0XHRcdGNhc2UgJ0JyaWVmcGFwaWVyJzpcclxuXHRcdFx0Y2FzZSAnVGF4Q2xhc3MnOlxyXG5cdFx0XHRjYXNlICdUYXhTY2hlbWEnOlxyXG5cdFx0XHRjYXNlICdDb25kaXRpb24nOlxyXG5cdFx0XHRjYXNlICdGYWN0dXVybW9tZW50JzpcclxuXHRcdFx0Y2FzZSAnRnVuY3RpZWdyb2VwJzpcclxuXHRcdFx0Y2FzZSAnR3Jvb3Rib2VrJzpcclxuXHRcdFx0Y2FzZSAnSW5odXVyJzpcclxuXHRcdFx0Y2FzZSAnSW5odXVyZ3JvZXAnOlxyXG5cdFx0XHRjYXNlICdJbmh1dXJtYXRlcmlhYWwnOlxyXG5cdFx0XHRjYXNlICdNYXRlcmlhYWwnOlxyXG5cdFx0XHRjYXNlICdNYXRlcmlhYWxDYXQnOlxyXG5cdFx0XHRjYXNlICdNZWRld2Vya2VydGFyaWVmJzpcclxuXHRcdFx0Y2FzZSAnTm90aXRpZSc6XHJcblx0XHRcdGNhc2UgJ1BsYW5uaW5nbWF0ZXJpYWFsJzpcclxuXHRcdFx0Y2FzZSAnUHJvamVjdCc6XHJcblx0XHRcdGNhc2UgJ1N0YWZmZWxncm9lcCc6XHJcblx0XHRcdGNhc2UgJ1N1YnByb2plY3QnOlxyXG5cdFx0XHRjYXNlICdUYWFrJzpcclxuXHRcdFx0Y2FzZSAnVGFnJzpcclxuXHRcdFx0Y2FzZSAnVGVtcGxhdGUnOlxyXG5cdFx0XHRjYXNlICdUaWpkJzpcclxuXHRcdFx0Y2FzZSAnVGl0ZWwnOlxyXG5cdFx0XHRjYXNlICdUeXBlJzpcclxuXHRcdFx0Y2FzZSAnVm9lcnR1aWcnOlxyXG5cdFx0XHRcdHJldHVybiAnbmFhbSc7XHJcblx0XHRcdC8vIGNhc2UgJ0NvbnRhY3QnOlxyXG5cdFx0XHQvLyBjYXNlICdNZWRld2Vya2VyJzpcclxuXHRcdFx0Ly8gY2FzZSAnUGVyc29uJzpcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHQvLyBvbmx5IHVzZSBkaXNwbGF5bmFtZSBmb3IgaXRlbXMgdGhhdCBkb250J3QgaGF2ZSBhIHNpbXBsZSwgd3JpdGFibGUgbmFtZSBmaWVsZFxyXG5cdFx0XHRcdC8vIHRoaXMgZnVuY3Rpb24gaXMgYWxzbyB1c2VkIGZvciB0ZW1wbGF0ZWQgaXRlbXNcclxuXHRcdFx0XHRyZXR1cm4gJ2Rpc3BsYXluYW1lJztcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIFRPRE86IHdlIGNhbiByZW1vdmUgdGhlc2Ugb25jZSBhbGwgY29sdW1ucyBhcmUgcmVzcGVjdGVkIGZvciBsb2NhbCBpdGVtcyBbUk00LTEwMzc4XVxyXG5cdGdldExvY2FsRGVmYXVsdFZhbHVlcyAoKTogRmllbGRNYXAge1xyXG5cdFx0cmV0dXJuIHtwZXJtaXNzaW9uczogQUxMX1BFUk1JU1NJT05TLCBjcmVhdG9yOiB0aGlzLmF1dGhJbnRlcmZhY2UuZ2V0VXNlcklkKCksIGNyZWF0ZWQ6IG1vbWVudCgpfTtcclxuXHR9XHJcblxyXG5cdGhhc0xvY2FsRGVmYXVsdFZhbHVlIChjb2x1bW5JZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtbklkKSB7XHJcblx0XHRcdGNhc2UgJ3Blcm1pc3Npb25zJzpcclxuXHRcdFx0Y2FzZSAnY3JlYXRvcic6XHJcblx0XHRcdGNhc2UgJ2NyZWF0ZWQnOlxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHtcclxuXHRBcGlGb3JtYXR0ZXIsXHJcblx0QXBpUmVzcG9uc2VQcm9jZXNzb3IsXHJcblx0QmF0Y2hTdGF0dXMsXHJcblx0Q29sdW1uRXhwYW5zaW9uLFxyXG5cdENvbHVtbkhhbmRsZXIsXHJcblx0Q29sdW1uSW5mbyxcclxuXHRDb2x1bW5TZXQsXHJcblx0Q29sdW1uVXRpbCxcclxuXHRJdGVtQ2FjaGUsXHJcblx0SXRlbUVudHJ5U2VydmljZSxcclxuXHRLZXlTZXJ2aWNlXHJcbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEVOVFJZX1NUQVRVUyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7XHJcblx0QmF0Y2hTdGF0dXNGYWN0b3J5LFxyXG5cdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0Q29sdW1uU2V0RmFjdG9yeSxcclxuXHRJdGVtQ2FjaGVGYWN0b3J5LFxyXG5cdEl0ZW1FbnRyeUZhY3RvcnksXHJcblx0VGVtcGxhdGVGYWN0b3J5XHJcbn0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgSXRlbUVudHJ5LCBUZW1wbGF0ZSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7XHJcblx0QXBpUmVzcG9uc2UsXHJcblx0RW50cnlTdGF0dXMsIEZpZWxkTWFwLFxyXG5cdEl0ZW1JZCxcclxuXHRJdGVtSWRDb252ZXJzaW9uTWFwLFxyXG5cdEl0ZW1PcHRpb25zLFxyXG5cdEl0ZW1UeXBlLFxyXG5cdFByb21pc2VJbnRlcmZhY2UsXHJcblx0QXBpUmVxdWVzdENvbHVtbnMsXHJcblx0VGVtcGxhdGVJdGVtRW50cnlNYXAsXHJcblx0TGlua2VkSXRlbUVudHJ5TWFwXHJcbn0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgZ2V0Rmlyc3RQcm9wZXJ0eSwgaGFzUHJvcGVydGllcyB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG4vLyB0b2RvIG1ha2UgY2xhc3NcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtSGFuZGxlciB7XHJcblx0ZW50cmllczogSXRlbUNhY2hlO1xyXG5cdHRlbXBsYXRlczoge1tpdGVtVHlwZTogc3RyaW5nXTogVGVtcGxhdGV9ID0ge307XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXHJcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgYmF0Y2hTdGF0dXNGYWN0b3J5OiBCYXRjaFN0YXR1c0ZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWwsXHJcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBpdGVtQ2FjaGVGYWN0b3J5OiBJdGVtQ2FjaGVGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlGYWN0b3J5OiBJdGVtRW50cnlGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIHRlbXBsYXRlRmFjdG9yeTogVGVtcGxhdGVGYWN0b3J5XHJcblx0KSB7XHJcblx0XHR0aGlzLmVudHJpZXMgPSB0aGlzLml0ZW1DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XHJcblx0fVxyXG5cclxuXHRmZXRjaEl0ZW0gKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQsIG9wdGlvbnM6IGFueSwgbG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZSk6IFByb21pc2VJbnRlcmZhY2U8SXRlbUVudHJ5PiB7XHJcblx0XHRjb25zdCBlbnRyeVN0YXR1cyA9IHRoaXMuZ2V0RW50cnlTdGF0dXMoaXRlbVR5cGUsIGl0ZW1JZCwgb3B0aW9ucywgbG9jYWxJdGVtQ2FjaGUpO1xyXG5cclxuXHRcdGlmIChlbnRyeVN0YXR1cyA9PT0gbnVsbClcclxuXHRcdFx0cmV0dXJuIHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdCh0aGlzLml0ZW1FbnRyeVNlcnZpY2UuY3JlYXRlVW5mb3VuZExvY2FsSXRlbUVycm9yKGl0ZW1UeXBlKSk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucmVzb2x2ZUNhY2hlZChlbnRyeVN0YXR1cy5lbnRyeSwgZW50cnlTdGF0dXMuc3RhdHVzLCBvcHRpb25zKTtcclxuXHR9XHJcblxyXG5cdGZldGNoTmV3SXRlbSAoXHJcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXHJcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9ucyxcclxuXHRcdGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGVcclxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPFRlbXBsYXRlSXRlbUVudHJ5TWFwPiB7XHJcblx0XHRjb25zdCBpdGVtRW50cnkgPSBsb2NhbEl0ZW1DYWNoZS5hZGQoXHJcblx0XHRcdHRoaXMuaXRlbUVudHJ5RmFjdG9yeS5jb25zdHJ1Y3REZWZlcnJlZChcclxuXHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHRvcHRpb25zLmlzRHVwbGljYXRlID8gdGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsRHVwbGljYXRlSWQoKSA6IHRoaXMua2V5U2VydmljZS5nZXRMb2NhbElkKCksXHJcblx0XHRcdFx0dHJ1ZSxcclxuXHRcdFx0XHRmYWxzZVxyXG5cdFx0XHQpXHJcblx0XHQpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmZldGNoVGVtcGxhdGUoaXRlbVR5cGUsIG9wdGlvbnMudGVtcGxhdGVPcHRpb25zLCBvcHRpb25zLnRlbXBsYXRlQ29sdW1ucykudGhlbihcclxuXHRcdFx0dGVtcGxhdGUgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLnJlc29sdmVMb2NhbChpdGVtRW50cnksIG9wdGlvbnMucGFyZW50LCB0ZW1wbGF0ZSwgbG9jYWxJdGVtQ2FjaGUpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRlcnJvciA9PiB7XHJcblx0XHRcdFx0aXRlbUVudHJ5LnJlamVjdChlcnJvcik7XHJcblxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5yZWplY3QoZXJyb3IpO1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gaXRlbVR5cGVcclxuXHQgKiBAcGFyYW0gaXRlbUlkc1xyXG5cdCAqIEBwYXJhbSBvcHRpb25zXHJcblx0ICogQHJldHVybnMge1Byb21pc2VJbnRlcmZhY2U8SXRlbUVudHJ5W10+fVxyXG5cdCAqXHJcblx0ICogRm9yIGV2ZXJ5IGl0ZW1pZCBmaW5kIHRoZSBzdGF0dXMgb2YgdGhlIEl0ZW1FbnRyeSBhbmQgcmVzb2x2ZSB0aGUgcHJvbWlzZXMgc28gdGhlIHJlc3VsdCBpc1xyXG5cdCAqIGEgdXNhYmxlIEl0ZW1FbnRyeVxyXG5cdCAqL1xyXG5cclxuXHRmZXRjaEl0ZW1zIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZHM6IEl0ZW1JZFtdLCBvcHRpb25zOiBhbnksIGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGUpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1FbnRyeVtdPiB7XHJcblx0XHRjb25zdCBiYXRjaFN0YXR1cyA9IHRoaXMuYmF0Y2hTdGF0dXNGYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0KGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBpdGVtRW50cnkuaXRlbUlkLFxyXG5cdFx0XHQoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGl0ZW1FbnRyeS5kZWZlcnJlZC5wcm9taXNlXHJcblx0XHQpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIG9mIGl0ZW1JZHMpIHtcclxuXHRcdFx0Y29uc3QgZW50cnlTdGF0dXMgPSB0aGlzLmdldEVudHJ5U3RhdHVzKGl0ZW1UeXBlLCBpdGVtSWQsIG9wdGlvbnMsIGxvY2FsSXRlbUNhY2hlKTtcclxuXHJcblx0XHRcdGlmIChlbnRyeVN0YXR1cyA9PT0gbnVsbClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGJhdGNoU3RhdHVzLmFkZChlbnRyeVN0YXR1cyk7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgcHJvbWlzZXM6IHtlbnRyaWVzOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1FbnRyeVtdPiwgcmVxdWVzdHM/OiBQcm9taXNlSW50ZXJmYWNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPn0gPVxyXG5cdFx0XHR7ZW50cmllczogYmF0Y2hTdGF0dXMuZ2V0UHJvbWlzZXMoKX07XHJcblxyXG5cdFx0aWYgKGJhdGNoU3RhdHVzLmhhc1JlcXVlc3RzKCkpXHJcblx0XHRcdHByb21pc2VzLnJlcXVlc3RzID0gdGhpcy5yZXF1ZXN0SXRlbXMoaXRlbVR5cGUsIGJhdGNoU3RhdHVzLmdldFJlcXVlc3RJZHMoKSwgb3B0aW9ucy5jb2x1bW5zKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocHJvbWlzZXMpLnRoZW4oXHJcblx0XHRcdHJlc29sdmVkID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5iYXRjaFJlc29sdmUoXHJcblx0XHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHRcdGJhdGNoU3RhdHVzLFxyXG5cdFx0XHRcdFx0b3B0aW9ucy5jb2x1bW5zLFxyXG5cdFx0XHRcdFx0PHtlbnRyaWVzOiBJdGVtRW50cnlbXSwgcmVxdWVzdHM/OiBBcGlSZXNwb25zZVByb2Nlc3Nvcn0+IHJlc29sdmVkXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cmVzb2x2ZUNhY2hlZCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIHN0YXR1czogRU5UUllfU1RBVFVTLCBvcHRpb25zKTogUHJvbWlzZUludGVyZmFjZTxJdGVtRW50cnk+IHtcclxuXHRcdHN3aXRjaCAoc3RhdHVzKSB7XHJcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLkNBQ0hFRDpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGl0ZW1FbnRyeSk7XHJcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLlBST01JU0VEOlxyXG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnkuZGVmZXJyZWQucHJvbWlzZTtcclxuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EOlxyXG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnkuZGVmZXJyZWQucHJvbWlzZS50aGVuKFxyXG5cdFx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlQ2FjaGVkKFxyXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeSxcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmdldENhY2hlZEVudHJ5U3RhdHVzKGl0ZW1FbnRyeSwgb3B0aW9ucyksXHJcblx0XHRcdFx0XHRcdFx0b3B0aW9uc1xyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLkVYUEFORDpcclxuXHRcdFx0XHRjb25zdCBjb2x1bW5EaWZmZXJlbmNlID0gdGhpcy5jb2x1bW5VdGlsLm1lcmdlUmVxdWVzdENvbHVtbnMoXHJcblx0XHRcdFx0XHRpdGVtRW50cnkuY29sdW1ucy5yZXF1ZXN0LFxyXG5cdFx0XHRcdFx0b3B0aW9ucy5jb2x1bW5zXHJcblx0XHRcdFx0KS5kaWZmZXJlbmNlO1xyXG5cclxuXHRcdFx0XHR0aGlzLnJlcXVlc3RJdGVtKGl0ZW1FbnRyeSwgY29sdW1uRGlmZmVyZW5jZSkudGhlbihcclxuXHRcdFx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5yZXNvbHZlRXhwYW5zaW9uKFxyXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeSxcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5Lml0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0XHRcdFx0Y29sdW1uRGlmZmVyZW5jZSxcclxuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpXHJcblx0XHRcdFx0XHRcdFx0KSxcclxuXHRcdFx0XHRcdFx0XHRyZXNwb25zZVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGVycm9yID0+IHtcclxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LnJlamVjdChlcnJvcik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5kZWZlcnJlZC5wcm9taXNlO1xyXG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5SRVNPTFZFX1ZBTFVFUzpcclxuXHRcdFx0XHR0aGlzLnJlcXVlc3RJdGVtKGl0ZW1FbnRyeSkudGhlbihcclxuXHRcdFx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5yZXNvbHZlUmVtb3RlVmFsdWVzKGl0ZW1FbnRyeSwgcmVzcG9uc2UpO1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGVycm9yID0+IHtcclxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LnJlamVjdChlcnJvcik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5kZWZlcnJlZC5wcm9taXNlO1xyXG5cdFx0XHRkZWZhdWx0OiAvLyBjYXNlIEVOVFJZX1NUQVRVUy5SRVNPTFZFOlxyXG5cdFx0XHRcdHRoaXMucmVxdWVzdEl0ZW0oaXRlbUVudHJ5KS50aGVuKFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnJlc29sdmVSZW1vdGUoXHJcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LFxyXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5jb2x1bW5zLnJlc29sdmUocmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCkpLFxyXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZXJyb3IgPT4ge1xyXG5cdFx0XHRcdFx0XHRpdGVtRW50cnkucmVqZWN0KGVycm9yKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmRlZmVycmVkLnByb21pc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRyZXNvbHZlTG9jYWwgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBwYXJlbnQsIHRlbXBsYXRlLCBsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlKTogVGVtcGxhdGVJdGVtRW50cnlNYXAge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XHJcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xyXG5cdFx0Y29uc3QgaXRlbUlkQ29udmVyc2lvbiA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5jcmVhdGVMb2NhbENvbnZlcnNpb25NYXAoaXRlbVR5cGUsIGl0ZW1JZCwgdHJ1ZSwgdGVtcGxhdGUucmVzcG9uc2UpO1xyXG5cclxuXHRcdGl0ZW1FbnRyeS5jb2x1bW5zID0gdGVtcGxhdGUuY29sdW1ucztcclxuXHJcblx0XHRpZiAocGFyZW50ICE9PSBudWxsKVxyXG5cdFx0XHRpdGVtRW50cnkuc2V0UGFyZW50KHBhcmVudC5pdGVtVHlwZSwgcGFyZW50Lml0ZW1JZCk7IC8vIGNyZWF0ZSBuZXcgb2JqZWN0XHJcblxyXG5cdFx0aXRlbUVudHJ5LnNldExvY2FsRmllbGRzKHRlbXBsYXRlLmZpZWxkcywgaXRlbUlkQ29udmVyc2lvbikucmVzb2x2ZSgpO1xyXG5cclxuXHRcdHJldHVybiB7XHJcblx0XHRcdG1haW46IGl0ZW1FbnRyeSxcclxuXHRcdFx0bGlua2VkOiB0aGlzLmNyZWF0ZUxvY2FsRW50cmllcyhpdGVtVHlwZSwgaXRlbUlkLCB0ZW1wbGF0ZSwgaXRlbUlkQ29udmVyc2lvbiwgbG9jYWxJdGVtQ2FjaGUpXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0cmVzb2x2ZUV4cGFuc2lvbiAoaXRlbUVudHJ5OiBJdGVtRW50cnksIGNvbHVtbkV4cGFuc2lvbjogQ29sdW1uRXhwYW5zaW9uLCByZXNwb25zZTogQXBpUmVzcG9uc2UpOiBJdGVtRW50cnkge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XHJcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xyXG5cdFx0Y29uc3QgZXhwYW5zaW9uUmVzdWx0ID0gY29sdW1uRXhwYW5zaW9uLnJ1bihpdGVtRW50cnkuY29sdW1ucyk7XHJcblxyXG5cdFx0Ly8gQW5vdGhlciByZXF1ZXN0IGFscmVhZHkgcmVxdWVzdGVkIHRoZSBjb2x1bW5zIHdlIG5lZWQgaGVyZSwgbm8gbmVlZCB0byBleHBhbmQgdGhlIGl0ZW0gYW5kIHJlc29sdmUgaXQgKGFscmVhZHkgZG9uZSBieSBvdGhlciByZXF1ZXN0KVxyXG5cdFx0aWYgKGV4cGFuc2lvblJlc3VsdCA9PT0gbnVsbClcclxuXHRcdFx0cmV0dXJuIGl0ZW1FbnRyeTtcclxuXHJcblx0XHRpdGVtRW50cnkuZXhwYW5kKFxyXG5cdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKSxcclxuXHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGV4cGFuc2lvblJlc3VsdC5kaWZmZXJlbmNlLnJvb3QpLFxyXG5cdFx0XHRleHBhbnNpb25SZXN1bHRcclxuXHRcdCk7XHJcblxyXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeS5yZXNvbHZlKCk7XHJcblx0fVxyXG5cclxuXHRyZXNvbHZlUmVtb3RlIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgY29sdW1uU2V0OiBDb2x1bW5TZXQsIHJlc3BvbnNlOiBBcGlSZXNwb25zZSk6IEl0ZW1FbnRyeSB8IG51bGwge1xyXG5cdFx0Y29uc3QgcmVzcG9uc2VGaWVsZHMgPSB0aGlzLmdldFJlc3BvbnNlRmllbGRzKGl0ZW1FbnRyeSwgY29sdW1uU2V0LCByZXNwb25zZSk7XHJcblxyXG5cdFx0aWYgKHJlc3BvbnNlRmllbGRzID09PSBudWxsKVxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHJcblx0XHRyZXR1cm4gaXRlbUVudHJ5LnJlc29sdmVEZWZlcnJlZChyZXNwb25zZUZpZWxkcy5pbml0aWFsLCByZXNwb25zZUZpZWxkcy5kZXJpdmVkLCBjb2x1bW5TZXQpO1xyXG5cdH1cclxuXHJcblx0cmVzb2x2ZVJlbW90ZVZhbHVlcyAoaXRlbUVudHJ5OiBJdGVtRW50cnksIHJlc3BvbnNlOiBBcGlSZXNwb25zZSk6IEl0ZW1FbnRyeSB8IG51bGwge1xyXG5cdFx0Y29uc3QgcmVzcG9uc2VGaWVsZHMgPSB0aGlzLmdldFJlc3BvbnNlRmllbGRzKGl0ZW1FbnRyeSwgaXRlbUVudHJ5LmNvbHVtbnMsIHJlc3BvbnNlKTtcclxuXHJcblx0XHRpZiAocmVzcG9uc2VGaWVsZHMgPT09IG51bGwpXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cclxuXHRcdHJldHVybiBpdGVtRW50cnkudXBkYXRlRmllbGRzKHJlc3BvbnNlRmllbGRzLmluaXRpYWwsIHJlc3BvbnNlRmllbGRzLmRlcml2ZWQsIGZhbHNlKS5yZXNvbHZlKCk7XHJcblx0fVxyXG5cclxuXHRnZXRSZXNwb25zZUZpZWxkcyAoXHJcblx0XHRpdGVtRW50cnk6IEl0ZW1FbnRyeSxcclxuXHRcdGNvbHVtblNldCxcclxuXHRcdHJlc3BvbnNlOiBBcGlSZXNwb25zZVxyXG5cdCk6IHtpbml0aWFsOiBGaWVsZE1hcCwgZGVyaXZlZDogRmllbGRNYXB9IHwgbnVsbCB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcclxuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XHJcblx0XHRjb25zdCBpbml0aWFsID0gcmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCk7XHJcblxyXG5cdFx0aWYgKGluaXRpYWwgPT09IHVuZGVmaW5lZCkgeyAvLyBxdWVyeSByZXR1cm5lZCBubyByZXN1bHRzXHJcblx0XHRcdGl0ZW1FbnRyeS5yZWplY3QoKTtcclxuXHRcdFx0dGhpcy5lbnRyaWVzLmNsZWFyKGl0ZW1FbnRyeSk7XHJcblxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRpbml0aWFsOiBpbml0aWFsLFxyXG5cdFx0XHRkZXJpdmVkOiByZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgY29sdW1uU2V0LnJvb3QpXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hUZW1wbGF0ZSAoaXRlbVR5cGU6IHN0cmluZywgdGVtcGxhdGVPcHRpb25zOiBhbnkgPSB7fSwgdGVtcGxhdGVDb2x1bW5zOiBhbnkgPSB7fSk6IFByb21pc2VJbnRlcmZhY2U8VGVtcGxhdGU+IHtcclxuXHRcdGNvbnN0IGhhc1RlbXBsYXRlT3B0aW9ucyA9IGhhc1Byb3BlcnRpZXModGVtcGxhdGVPcHRpb25zKTtcclxuXHRcdGNvbnN0IGNvbHVtbkl0ZW1UeXBlID0gZ2V0Rmlyc3RQcm9wZXJ0eSh0ZW1wbGF0ZUNvbHVtbnMpOyAvLyBpdCdzIHBvc3NpYmxlIHRvIGFkZCBjb2x1bW5zIHRvIGxpbmtlZCBpdGVtc1xyXG5cclxuXHRcdGlmICghaGFzVGVtcGxhdGVPcHRpb25zKSB7XHJcblx0XHRcdGNvbnN0IGNhY2hlZFRlbXBsYXRlID0gdGhpcy50ZW1wbGF0ZXNbaXRlbVR5cGVdO1xyXG5cclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdGNhY2hlZFRlbXBsYXRlICE9PSB1bmRlZmluZWQgJiZcclxuXHRcdFx0XHQoXHJcblx0XHRcdFx0XHRjb2x1bW5JdGVtVHlwZSA9PT0gbnVsbCB8fFxyXG5cdFx0XHRcdFx0dGhpcy5jb2x1bW5VdGlsLnJlc3BvbnNlQ29sdW1uc0F2YWlsYWJsZShcclxuXHRcdFx0XHRcdFx0Y29sdW1uSXRlbVR5cGUsXHJcblx0XHRcdFx0XHRcdHRlbXBsYXRlQ29sdW1uc1tjb2x1bW5JdGVtVHlwZV0sXHJcblx0XHRcdFx0XHRcdGNhY2hlZFRlbXBsYXRlLnJlc3BvbnNlQ29sdW1uc1xyXG5cdFx0XHRcdFx0KVxyXG5cdFx0XHRcdClcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihjYWNoZWRUZW1wbGF0ZSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwoXHJcblx0XHRcdHtcclxuXHRcdFx0XHR0ZW1wbGF0ZTogdGhpcy5hcGlSZXF1ZXN0U2VydmljZS50ZW1wbGF0ZShpdGVtVHlwZSwgdGVtcGxhdGVPcHRpb25zKSxcclxuXHRcdFx0XHRhZGRpdGlvbmFsQ29sdW1uczogY29sdW1uSXRlbVR5cGUgPT09IG51bGwgP1xyXG5cdFx0XHRcdFx0e30gOlxyXG5cdFx0XHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLmZldGNoKGNvbHVtbkl0ZW1UeXBlLCB0ZW1wbGF0ZUNvbHVtbnNbY29sdW1uSXRlbVR5cGVdKVxyXG5cdFx0XHR9XHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdHJlc29sdmVkID0+IHtcclxuXHRcdFx0XHRjb25zdCB0ZW1wbGF0ZVJlc3BvbnNlID0gcmVzb2x2ZWQudGVtcGxhdGU7XHJcblxyXG5cdFx0XHRcdGNvbnN0IHRlbXBsYXRlID0gdGhpcy50ZW1wbGF0ZUZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCB0ZW1wbGF0ZVJlc3BvbnNlLCByZXNvbHZlZC5hZGRpdGlvbmFsQ29sdW1ucyk7XHJcblxyXG5cdFx0XHRcdGlmICghaGFzVGVtcGxhdGVPcHRpb25zICYmIHRlbXBsYXRlUmVzcG9uc2UuY2FjaGVhYmxlKVxyXG5cdFx0XHRcdFx0dGhpcy50ZW1wbGF0ZXNbaXRlbVR5cGVdID0gdGVtcGxhdGU7XHJcblxyXG5cdFx0XHRcdHJldHVybiB0ZW1wbGF0ZTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Z2V0RW50cnlTdGF0dXMgKFxyXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0aXRlbUlkOiBJdGVtSWQsXHJcblx0XHRvcHRpb25zOiBhbnksXHJcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlXHJcblx0KTogRW50cnlTdGF0dXM8SXRlbUVudHJ5PiB8IG51bGwge1xyXG5cdFx0bGV0IGl0ZW1FbnRyeTtcclxuXHJcblx0XHRpZiAodGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZChpdGVtSWQpKSB7XHJcblx0XHRcdGl0ZW1FbnRyeSA9IGxvY2FsSXRlbUNhY2hlLmdldChpdGVtVHlwZSwgaXRlbUlkKTtcclxuXHJcblx0XHRcdGlmIChpdGVtRW50cnkgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRyZXR1cm4ge2VudHJ5OiBpdGVtRW50cnksIHN0YXR1czogdGhpcy5nZXRDYWNoZWRFbnRyeVN0YXR1cyhpdGVtRW50cnksIG9wdGlvbnMpfTtcclxuXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdGl0ZW1FbnRyeSA9IHRoaXMuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZCk7XHJcblxyXG5cdFx0aWYgKGl0ZW1FbnRyeSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4ge2VudHJ5OiBsb2NhbEl0ZW1DYWNoZS5hZGQoaXRlbUVudHJ5KSwgc3RhdHVzOiB0aGlzLmdldENhY2hlZEVudHJ5U3RhdHVzKGl0ZW1FbnRyeSwgb3B0aW9ucyl9O1xyXG5cclxuXHRcdGl0ZW1FbnRyeSA9IHRoaXMuaXRlbUVudHJ5RmFjdG9yeS5jb25zdHJ1Y3REZWZlcnJlZChpdGVtVHlwZSwgaXRlbUlkLCBvcHRpb25zLmNvbHVtbnMsIG9wdGlvbnMuZGVmZXJSZXF1ZXN0KTtcclxuXHJcblx0XHRjb25zdCBwYXJlbnQgPSBvcHRpb25zLnBhcmVudDtcclxuXHJcblx0XHRpZiAocGFyZW50ICE9PSBudWxsKVxyXG5cdFx0XHRpdGVtRW50cnkuc2V0UGFyZW50KHBhcmVudC5pdGVtVHlwZSwgcGFyZW50Lml0ZW1JZCk7XHJcblxyXG5cdFx0bG9jYWxJdGVtQ2FjaGUuYWRkKGl0ZW1FbnRyeSk7XHJcblx0XHR0aGlzLmVudHJpZXMuYWRkKGl0ZW1FbnRyeSk7XHJcblxyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0ZW50cnk6IGl0ZW1FbnRyeSxcclxuXHRcdFx0c3RhdHVzOiBvcHRpb25zLmRlZmVyUmVxdWVzdCA/IEVOVFJZX1NUQVRVUy5QUk9NSVNFRCA6IEVOVFJZX1NUQVRVUy5SRVNPTFZFXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0aXNDb2x1bW5TdXBlcnNldCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIGNvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zKSB7XHJcblx0XHRyZXR1cm4gaXRlbUVudHJ5LmlzTG9jYWwoKSB8fCBpdGVtRW50cnkuY29sdW1ucy5pc1N1cGVyc2V0T2YoY29sdW1ucyk7XHJcblx0fVxyXG5cclxuXHRnZXRDYWNoZWRFbnRyeVN0YXR1cyAoaXRlbUVudHJ5OiBJdGVtRW50cnksIG9wdGlvbnMpOiBFTlRSWV9TVEFUVVMge1xyXG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSBvcHRpb25zLmNvbHVtbnM7XHJcblxyXG5cdFx0aWYgKGl0ZW1FbnRyeS5pc0RlZmVycmVkKCkpIHtcclxuXHRcdFx0aWYgKGl0ZW1FbnRyeS5kZWZlclJlcXVlc3QpIHtcclxuXHRcdFx0XHRpdGVtRW50cnkuY29sdW1ucy5leHBhbmRSZXF1ZXN0Q29sdW1ucyhyZXF1ZXN0Q29sdW1ucyk7XHJcblxyXG5cdFx0XHRcdHJldHVybiBFTlRSWV9TVEFUVVMuUkVTT0xWRTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIHRoaXMuaXNDb2x1bW5TdXBlcnNldChpdGVtRW50cnksIHJlcXVlc3RDb2x1bW5zKSA/XHJcblx0XHRcdFx0RU5UUllfU1RBVFVTLlBST01JU0VEIDpcclxuXHRcdFx0XHRFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICghdGhpcy5pc0NvbHVtblN1cGVyc2V0KGl0ZW1FbnRyeSwgcmVxdWVzdENvbHVtbnMpKSB7XHJcblx0XHRcdGl0ZW1FbnRyeS5kZWZlcigpO1xyXG5cclxuXHRcdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5FWFBBTkQ7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGl0ZW1FbnRyeS5yZWxvYWRRdWV1ZWQpIHtcclxuXHRcdFx0aXRlbUVudHJ5LnJlbG9hZFF1ZXVlZCA9IGZhbHNlO1xyXG5cclxuXHRcdFx0aWYgKGl0ZW1FbnRyeS5pc0xvY2FsKCkpXHJcblx0XHRcdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5DQUNIRUQ7XHJcblxyXG5cdFx0XHRpdGVtRW50cnkuZGVmZXIoKTtcclxuXHJcblx0XHRcdHJldHVybiBFTlRSWV9TVEFUVVMuUkVTT0xWRV9WQUxVRVM7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5DQUNIRUQ7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKlxyXG5cdCAqIEBwYXJhbSBpdGVtVHlwZVxyXG5cdCAqIEBwYXJhbSB7QmF0Y2hTdGF0dXN9IGJhdGNoU3RhdHVzXHJcblx0ICogQHBhcmFtIHJlcXVlc3RDb2x1bW5zXHJcblx0ICogQHBhcmFtIHJlc29sdmVkXHJcblx0ICogQHJldHVybnMge0l0ZW1FbnRyeVtdfVxyXG5cdCAqXHJcblx0ICogZm9yIGV2ZXJ5IHR5cGUgb2YgZW50cnkgc3RhdHVzIHRoZXJlIGlzIGluIHRoaXMgYmF0Y2ggcmVxdWVzdCBtYWtlIHN1cmUgdGhlIGVudHJpZXMgZ2V0IHJlc29sdmVkLlxyXG5cdCAqIHRoZW4gcmV0dXJuIGEgYXJyYXkgb2YgdGhlIHJlc3VsdGluZyBJdGVtRW50cnlBcnJheVxyXG5cdCAqL1xyXG5cdGJhdGNoUmVzb2x2ZSAoXHJcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXHJcblx0XHRiYXRjaFN0YXR1czogQmF0Y2hTdGF0dXM8SXRlbUVudHJ5PixcclxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyxcclxuXHRcdHJlc29sdmVkOiB7ZW50cmllczogSXRlbUVudHJ5W10sIHJlcXVlc3RzPzogQXBpUmVzcG9uc2VQcm9jZXNzb3J9XHJcblx0KTogSXRlbUVudHJ5W10gfCBQcm9taXNlSW50ZXJmYWNlPGFueT4ge1xyXG5cdFx0Y29uc3QgcmVzcG9uc2UgPSA8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHJlc29sdmVkLnJlcXVlc3RzO1xyXG5cdFx0Y29uc3QgcmVzb2x2ZVN0YXR1cyA9IFtFTlRSWV9TVEFUVVMuUkVTT0xWRV07XHJcblxyXG5cdFx0bGV0IHN1Y2Nlc3MgPSB0cnVlO1xyXG5cclxuXHRcdGlmIChiYXRjaFN0YXR1cy5oYXNFbnRyaWVzKGJhdGNoU3RhdHVzLnJlbW90ZUV4cGFuZFN0YXR1cykpIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHRyZXF1ZXN0Q29sdW1ucyxcclxuXHRcdFx0XHRyZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKVxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdFx0YmF0Y2hTdGF0dXMuZm9yRWFjaEVudHJ5KFxyXG5cdFx0XHRcdGJhdGNoU3RhdHVzLnJlbW90ZUV4cGFuZFN0YXR1cyxcclxuXHRcdFx0XHRpdGVtRW50cnkgPT4gdGhpcy5yZXNvbHZlRXhwYW5zaW9uKGl0ZW1FbnRyeSwgY29sdW1uRXhwYW5zaW9uLCByZXNwb25zZSlcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoYmF0Y2hTdGF0dXMuaGFzRW50cmllcyhyZXNvbHZlU3RhdHVzKSkge1xyXG5cdFx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpKTtcclxuXHJcblx0XHRcdGJhdGNoU3RhdHVzLmZvckVhY2hFbnRyeShcclxuXHRcdFx0XHRyZXNvbHZlU3RhdHVzLFxyXG5cdFx0XHRcdGl0ZW1FbnRyeSA9PiB7XHJcblx0XHRcdFx0XHRpZiAodGhpcy5yZXNvbHZlUmVtb3RlKGl0ZW1FbnRyeSwgY29sdW1uSW5mbywgcmVzcG9uc2UpID09PSBudWxsKVxyXG5cdFx0XHRcdFx0XHRzdWNjZXNzID0gZmFsc2U7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGJhdGNoU3RhdHVzLmZvckVhY2hFbnRyeShcclxuXHRcdFx0W0VOVFJZX1NUQVRVUy5SRVNPTFZFX1ZBTFVFU10sXHJcblx0XHRcdGl0ZW1FbnRyeSA9PiB7XHJcblx0XHRcdFx0aWYgKHRoaXMucmVzb2x2ZVJlbW90ZVZhbHVlcyhpdGVtRW50cnksIHJlc3BvbnNlKSA9PT0gbnVsbClcclxuXHRcdFx0XHRcdHN1Y2Nlc3MgPSBmYWxzZTtcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHJcblx0XHQvLyB0b2RvOiBubyBpdGVtIGVycm9yICh7bWVzc2FnZTogdGhpcy5pdGVtRW50cnlTZXJ2aWNlLnVuZGVmaW5lZEl0ZW1FcnJvcn0pXHJcblx0XHRyZXR1cm4gc3VjY2VzcyA/IGJhdGNoU3RhdHVzLmdldEFycmF5KCkgOiB0aGlzLmVycm9ySGFuZGxlci5yZWplY3QoKTtcclxuXHR9XHJcblxyXG5cdGZldGNoVGl0bGUgKFxyXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0aXRlbUlkOiBJdGVtSWQsXHJcblx0XHRkZWZlclJlcXVlc3QgPSB0cnVlLFxyXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZVxyXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8c3RyaW5nPiB7XHJcblx0XHRjb25zdCB0aXRsZUZpZWxkID0gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLmdldFRpdGxlRmllbGQoaXRlbVR5cGUpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmZldGNoSXRlbShcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdGl0ZW1JZCxcclxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKHtjb2x1bW5zOiBbdGl0bGVGaWVsZF0sIGRlZmVyUmVxdWVzdDogZGVmZXJSZXF1ZXN0fSksXHJcblx0XHRcdGxvY2FsSXRlbUNhY2hlXHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdC8vIHRvZG86IEl0ZW1FbnRyeSB8IFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXBcclxuXHRcdFx0KGVudHJ5OiBhbnkpID0+IHtcclxuXHRcdFx0XHRpZiAoZW50cnkubWFpbiAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0cmV0dXJuIGVudHJ5Lm1haW4uZ2V0RmllbGRzKClbdGl0bGVGaWVsZF07XHJcblxyXG5cdFx0XHRcdHJldHVybiBlbnRyeS5nZXRGaWVsZHMoKVt0aXRsZUZpZWxkXTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlTG9jYWxFbnRyaWVzIChcclxuXHRcdHBhcmVudFR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0bG9jYWxQYXJlbnRJZDogSXRlbUlkLFxyXG5cdFx0dGVtcGxhdGU6IFRlbXBsYXRlLFxyXG5cdFx0aXRlbUlkQ29udmVyc2lvbjogSXRlbUlkQ29udmVyc2lvbk1hcCxcclxuXHRcdGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGUsXHJcblx0XHRmaWx0ZXJJdGVtRW50cnk6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gYm9vbGVhbiA9ICgpID0+IHRydWUgLy8gcmV0dXJuIHRydWUgdG8gaW5jbHVkZSBpdGVtXHJcblx0KTogTGlua2VkSXRlbUVudHJ5TWFwW10ge1xyXG5cdFx0Y29uc3QgYXBpUmVzcG9uc2UgPSB0ZW1wbGF0ZS5yZXNwb25zZTtcclxuXHRcdGNvbnN0IGl0ZW1FbnRyeU1hcDoge1tpdGVtVHlwZTogc3RyaW5nXTogSXRlbUVudHJ5W119ID0ge307XHJcblx0XHRjb25zdCBjb2x1bW5TZXRNYXA6IHtbaXRlbVR5cGU6IHN0cmluZ106IENvbHVtblNldH0gPSB7fTtcclxuXHRcdGNvbnN0IHJlc3VsdDogTGlua2VkSXRlbUVudHJ5TWFwW10gPSBbXTtcclxuXHJcblx0XHRjb25zdCBjcmVhdGVFbnRyaWVzID0gKHBhcmVudFR5cGUyLCBsb2NhbFBhcmVudElkMiwgYXBpUGFyZW50SWQpID0+IHtcclxuXHRcdFx0Y29uc3QgcGFyZW50ID0ge2l0ZW1UeXBlOiBwYXJlbnRUeXBlMiwgaXRlbUlkOiBsb2NhbFBhcmVudElkMn07XHJcblx0XHRcdGNvbnN0IGxpbmtzID0gYXBpUmVzcG9uc2UuaXRlbXNbcGFyZW50VHlwZTJdW2FwaVBhcmVudElkXS5saW5rcztcclxuXHJcblx0XHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gbGlua3MpIHtcclxuXHRcdFx0XHRpZiAoIWxpbmtzLmhhc093blByb3BlcnR5KGl0ZW1UeXBlKSlcclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0XHQvLyB0aGUgaXRlbSBlbnRyaWVzIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgcmVzdWx0IGluIHRvcC1kb3duIG9yZGVyXHJcblx0XHRcdFx0aWYgKGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0cmVzdWx0LnB1c2goXHJcblx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRpdGVtVHlwZTogaXRlbVR5cGUsXHJcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJpZXM6IGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV0gPSBbXSxcclxuXHRcdFx0XHRcdFx0XHRjb2x1bW5TZXQ6IGNvbHVtblNldE1hcFtpdGVtVHlwZV0gPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRcdFx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0XHRcdFx0XHR0cnVlLFxyXG5cdFx0XHRcdFx0XHRcdFx0dGVtcGxhdGUucmVzcG9uc2VDb2x1bW5zXHJcblx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCBhcGlJdGVtSWQgb2YgbGlua3NbaXRlbVR5cGVdKSB7XHJcblx0XHRcdFx0XHRjb25zdCBsb2NhbEl0ZW1JZCA9IGl0ZW1JZENvbnZlcnNpb25baXRlbVR5cGVdW2FwaUl0ZW1JZF07XHJcblxyXG5cdFx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5pdGVtRW50cnlGYWN0b3J5LmNvbnN0cnVjdExvY2FsTGlua2VkKFxyXG5cdFx0XHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHRcdFx0bG9jYWxJdGVtSWQsXHJcblx0XHRcdFx0XHRcdGFwaVJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBhcGlJdGVtSWQpLFxyXG5cdFx0XHRcdFx0XHRwYXJlbnQsXHJcblx0XHRcdFx0XHRcdGNvbHVtblNldE1hcFtpdGVtVHlwZV0sXHJcblx0XHRcdFx0XHRcdGl0ZW1JZENvbnZlcnNpb25cclxuXHRcdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKCFmaWx0ZXJJdGVtRW50cnkoaXRlbUVudHJ5KSlcclxuXHRcdFx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRcdFx0bG9jYWxJdGVtQ2FjaGUuYWRkKGl0ZW1FbnRyeSk7XHJcblx0XHRcdFx0XHRpdGVtRW50cnlNYXBbaXRlbVR5cGVdLnB1c2goaXRlbUVudHJ5KTtcclxuXHJcblx0XHRcdFx0XHRjcmVhdGVFbnRyaWVzKGl0ZW1UeXBlLCBsb2NhbEl0ZW1JZCwgYXBpSXRlbUlkKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH07XHJcblxyXG5cdFx0Y3JlYXRlRW50cmllcyhwYXJlbnRUeXBlLCBsb2NhbFBhcmVudElkLCBhcGlSZXNwb25zZS5saW5rc1twYXJlbnRUeXBlXVswXSk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGV4cGFuZExvY2FsRW50cmllcyAoXHJcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXHJcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXHJcblx0XHRjb2x1bW5TZXQ6IENvbHVtblNldCxcclxuXHRcdGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGVcclxuXHQpOiBQcm9taXNlPEl0ZW1FbnRyeVtdPiB7XHJcblx0XHRpZiAoaXRlbUVudHJpZXMubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGl0ZW1FbnRyaWVzKTtcclxuXHJcblx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCBjb2x1bW5TZXQucmVxdWVzdCwgY29sdW1uU2V0LnJlc3BvbnNlKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRjb25zdCBleHBhbnNpb25SZXN1bHQgPSBjb2x1bW5FeHBhbnNpb24ucnVuKGl0ZW1FbnRyeS5jb2x1bW5zKTtcclxuXHJcblx0XHRcdGlmIChleHBhbnNpb25SZXN1bHQgIT09IG51bGwpXHJcblx0XHRcdFx0aXRlbUVudHJ5LmV4cGFuZExvY2FsKGV4cGFuc2lvblJlc3VsdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucmVzb2x2ZURlcml2ZWRWYWx1ZXMoaXRlbUVudHJpZXMsIGNvbHVtbkV4cGFuc2lvbi5hZ2dyZWdhdGVSb290Q29sdW1ucygpLCBsb2NhbEl0ZW1DYWNoZSk7XHJcblx0fVxyXG5cclxuXHRyZXNvbHZlRGVyaXZlZFZhbHVlcyAoXHJcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXHJcblx0XHRjb2x1bW5zOiBDb2x1bW5JbmZvW10sXHJcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlXHJcblx0KTogUHJvbWlzZUludGVyZmFjZTxJdGVtRW50cnlbXT4ge1xyXG5cdFx0Y29uc3QgcHJvbWlzZXM6IEFycmF5PFByb21pc2VJbnRlcmZhY2U8YW55Pj4gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKVxyXG5cdFx0XHRwcm9taXNlcy5wdXNoKHRoaXMuZmV0Y2hEZXJpdmVkVmFsdWVzQnlDb2x1bW4oaXRlbUVudHJpZXMsIGNvbHVtbiwgbG9jYWxJdGVtQ2FjaGUpKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocHJvbWlzZXMpLnRoZW4oXHJcblx0XHRcdCgpID0+IGl0ZW1FbnRyaWVzLFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldERlZmF1bHRWYWx1ZXNCeUNvbHVtbiAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCByb290Q29sdW1uOiBDb2x1bW5JbmZvKTogdm9pZCB7XHJcblx0XHRjb25zdCBjaGlsZENvbHVtbnMgPSByb290Q29sdW1uLmNoaWxkcmVuO1xyXG5cclxuXHRcdGlmIChjaGlsZENvbHVtbnMubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0Ly8gbm8gbmVlZCB0byBkbyBhIHJlY3Vyc2l2ZSBjYWxsIGhlcmUsIGZ1bmN0aW9uIHdpbGwgZ2V0IGNhbGxlZCBtdWx0aXBsZSB0aW1lc1xyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY2hpbGRDb2x1bW5zKSB7XHJcblx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxyXG5cdFx0XHRcdGl0ZW1FbnRyeS5kZXJpdmVkW2NvbHVtbi5wYXRoXSA9IHRoaXMuYXBpRm9ybWF0dGVyLmdldERlZmF1bHRWYWx1ZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRJdGVtSWRCeUNvbHVtbiAoaXRlbUVudHJ5OiBJdGVtRW50cnksIGNvbHVtbjogQ29sdW1uSW5mbyk6IEl0ZW1JZCB7XHJcblx0XHRpZiAoY29sdW1uLmxldmVsID09PSAwKSB7XHJcblx0XHRcdGlmIChjb2x1bW4uYXBpQ29sdW1uLnR5cGUgPT09ICdsaW5rJyAmJiBpdGVtRW50cnkucGFyZW50ICE9PSBudWxsKVxyXG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnkucGFyZW50Lml0ZW1JZDtcclxuXHJcblx0XHRcdHJldHVybiBpdGVtRW50cnkuZ2V0RmllbGRzKClbY29sdW1uLnBhdGhdO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBpdGVtRW50cnkuZGVyaXZlZFtjb2x1bW4ucGF0aF07XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGZldGNoRGVyaXZlZFZhbHVlc0J5Q29sdW1uIChcclxuXHRcdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcclxuXHRcdHJvb3RDb2x1bW46IENvbHVtbkluZm8sXHJcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlXHJcblx0KTogUHJvbWlzZUludGVyZmFjZTx2b2lkIHwgSXRlbUVudHJ5W10+IHtcclxuXHRcdGNvbnN0IGNoaWxkQ29sdW1ucyA9IHJvb3RDb2x1bW4uY2hpbGRyZW47XHJcblxyXG5cdFx0aWYgKGNoaWxkQ29sdW1ucy5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcclxuXHJcblx0XHRjb25zdCBmaXJzdENoaWxkID0gY2hpbGRDb2x1bW5zWzBdO1xyXG5cclxuXHRcdGlmIChjaGlsZENvbHVtbnMubGVuZ3RoID09PSAxICYmIGZpcnN0Q2hpbGQuYXBpQ29sdW1uLnR5cGUgPT09ICdpZCcpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXHJcblx0XHRcdFx0aXRlbUVudHJ5LmRlcml2ZWRbZmlyc3RDaGlsZC5wYXRoXSA9IHRoaXMuZ2V0SXRlbUlkQnlDb2x1bW4oaXRlbUVudHJ5LCByb290Q29sdW1uKTtcclxuXHJcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBpdGVtSWRNYXA6IHtbaXRlbUlkOiBzdHJpbmddOiBJdGVtRW50cnlbXX0gPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRjb25zdCBpdGVtSWQgPSB0aGlzLmdldEl0ZW1JZEJ5Q29sdW1uKGl0ZW1FbnRyeSwgcm9vdENvbHVtbik7XHJcblxyXG5cdFx0XHRpZiAoaXRlbUlkTWFwW2l0ZW1JZF0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRpdGVtSWRNYXBbaXRlbUlkXSA9IFtdO1xyXG5cclxuXHRcdFx0aXRlbUlkTWFwW2l0ZW1JZF0ucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChpdGVtSWRNYXAubnVsbCAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHR0aGlzLmdldERlZmF1bHRWYWx1ZXNCeUNvbHVtbihpdGVtSWRNYXAubnVsbCwgcm9vdENvbHVtbik7XHJcblxyXG5cdFx0Y29uc3QgaXRlbUlkczogSXRlbUlkW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtSWRNYXApIHtcclxuXHRcdFx0aWYgKGl0ZW1JZCA9PT0gJ251bGwnKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0aXRlbUlkcy5wdXNoKCtpdGVtSWQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChpdGVtSWRzLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xyXG5cclxuXHRcdGNvbnN0IGNvbHVtbklkczogc3RyaW5nW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjaGlsZENvbHVtbnMpXHJcblx0XHRcdGNvbHVtbklkcy5wdXNoKGNvbHVtbi5pZCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuZmV0Y2hJdGVtcyhcclxuXHRcdFx0PEl0ZW1UeXBlPiByb290Q29sdW1uLml0ZW1UeXBlLFxyXG5cdFx0XHRpdGVtSWRzLFxyXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMoe2NvbHVtbnM6IGNvbHVtbklkc30pLFxyXG5cdFx0XHRsb2NhbEl0ZW1DYWNoZVxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHRzb3VyY2VJdGVtRW50cmllcyA9PiB7XHJcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2Ygc291cmNlSXRlbUVudHJpZXMpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeUZpZWxkcyA9IGl0ZW1FbnRyeS5nZXRGaWVsZHMoKTtcclxuXHRcdFx0XHRcdGNvbnN0IGRlc3RpbmF0aW9uSXRlbUVudHJpZXMgPSBpdGVtSWRNYXBbaXRlbUVudHJ5Lml0ZW1JZF07XHJcblxyXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBkZXN0aW5hdGlvbkl0ZW1FbnRyeSBvZiBkZXN0aW5hdGlvbkl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdFx0XHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNoaWxkQ29sdW1ucylcclxuXHRcdFx0XHRcdFx0XHRkZXN0aW5hdGlvbkl0ZW1FbnRyeS5kZXJpdmVkW2NvbHVtbi5wYXRoXSA9IGl0ZW1FbnRyeUZpZWxkc1tjb2x1bW4uaWRdO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb2x2ZURlcml2ZWRWYWx1ZXMoaXRlbUVudHJpZXMsIGNoaWxkQ29sdW1ucywgbG9jYWxJdGVtQ2FjaGUpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRyZXF1ZXN0SXRlbSAoaXRlbUVudHJ5OiBJdGVtRW50cnksIHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyA9IGl0ZW1FbnRyeS5jb2x1bW5zLnJlcXVlc3QpIHtcclxuXHRcdHJldHVybiB0aGlzLnJlcXVlc3RJdGVtcyhpdGVtRW50cnkuaXRlbVR5cGUsIFtpdGVtRW50cnkuaXRlbUlkXSwgcmVxdWVzdENvbHVtbnMpO1xyXG5cdH1cclxuXHJcblx0cmVxdWVzdEl0ZW1zIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZHM6IEl0ZW1JZFtdLCBjb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyk6IFByb21pc2VJbnRlcmZhY2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcclxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KGl0ZW1UeXBlLCB7aWQ6IGl0ZW1JZHN9LCB7W2l0ZW1UeXBlXTogY29sdW1uc30pO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBBcGlSZXNwb25zZVByb2Nlc3NvciwgQ29sdW1uRXhwYW5zaW9uLCBDb2x1bW5TZXQsIEl0ZW1IYW5kbGVyLCBRdWVyeVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSwgQ29sdW1uU2V0RmFjdG9yeSwgSXRlbUVudHJ5RmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgQXBpUmVxdWVzdENvbHVtbnMsIEFwaVJlc3BvbnNlLCBFbnRyeVBhcmVudE51bGwsIEl0ZW1JZCwgSXRlbVR5cGUsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5pbXBvcnQgeyBwYXRoRXhpc3RzIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtUmVxdWVzdFNlcnZpY2Uge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlGYWN0b3J5OiBJdGVtRW50cnlGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZSxcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlXHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRyZXF1ZXN0SXRlbSAoaXRlbVR5cGUsIGl0ZW1JZCwgY29sdW1ucyk6IFByb21pc2VJbnRlcmZhY2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcclxuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0ge1xyXG5cdFx0XHRbaXRlbVR5cGVdOiBjb2x1bW5zXHJcblx0XHR9O1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0e2lkOiBpdGVtSWR9LFxyXG5cdFx0XHRyZXF1ZXN0Q29sdW1uc1xyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHJlcXVlc3RJdGVtcyAoXHJcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcclxuXHRcdHF1ZXJ5ID0gY29sbGVjdGlvbkVudHJ5LnF1ZXJ5Lm9iamVjdCxcclxuXHRcdGNvbHVtbnMgPSBjb2xsZWN0aW9uRW50cnkub3B0aW9ucy5jb2x1bW5zXHJcblx0KTogUHJvbWlzZUludGVyZmFjZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0Y29uc3Qgb3B0aW9ucyA9IGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zO1xyXG5cclxuXHRcdGNvbnN0IHBhcmFtcyA9IHtcclxuXHRcdFx0cmVxdWVzdFR5cGU6ICdxdWVyeScsXHJcblx0XHRcdGl0ZW1UeXBlOiBvcHRpb25zLnF1ZXJ5SXRlbVR5cGUgPT09IG51bGwgPyBjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGUgOiBvcHRpb25zLnF1ZXJ5SXRlbVR5cGUsXHJcblx0XHRcdGNvbHVtbnM6IHtbY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlXTogY29sdW1uc30sXHJcblx0XHRcdHF1ZXJ5OiBxdWVyeSxcclxuXHRcdFx0bGltaXQ6IG51bGxcclxuXHRcdH07XHJcblxyXG5cdFx0aWYgKG9wdGlvbnMubGltaXQgIT09IG51bGwpXHJcblx0XHRcdHBhcmFtcy5saW1pdCA9IG9wdGlvbnMubGltaXQ7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucmVxdWVzdFNrZWxldG9uKHBhcmFtcyk7XHJcblx0fVxyXG5cclxuXHRyZXF1ZXN0TGlua0l0ZW1zIChwYXJlbnRUeXBlLCBwYXJlbnRJZEFycmF5LCBpdGVtVHlwZSwgcXVlcnksIGNvbHVtbnMpOiBQcm9taXNlSW50ZXJmYWNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XHJcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IHtcclxuXHRcdFx0W2l0ZW1UeXBlXTogY29sdW1uc1xyXG5cdFx0fTtcclxuXHJcblx0XHRyZXR1cm4gcXVlcnkgPT09IG51bGwgP1xyXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KFxyXG5cdFx0XHRcdHBhcmVudFR5cGUsXHJcblx0XHRcdFx0e2lkOiBwYXJlbnRJZEFycmF5fSxcclxuXHRcdFx0XHRyZXF1ZXN0Q29sdW1uc1xyXG5cdFx0XHQpIDpcclxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShcclxuXHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5hZGRBbmRDb25kaXRpb24oXHJcblx0XHRcdFx0XHRxdWVyeSxcclxuXHRcdFx0XHRcdHtsaW5rZWRUbzogcGFyZW50VHlwZSwgcXVlcnk6IHtpZDogcGFyZW50SWRBcnJheX19XHJcblx0XHRcdFx0KSxcclxuXHRcdFx0XHRyZXF1ZXN0Q29sdW1ucyAvLyBzaG91bGQgY29udGFpbiBhIGRlcml2ZWQgY29sdW1uIHRoYXQgcmVmZXJzIHRvIHRoZSBwYXJlbnRcclxuXHRcdFx0KTtcclxuXHR9XHJcblxyXG5cdHByb2Nlc3NFeHBhbnNpb24gKFxyXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxyXG5cdFx0cmVzcG9uc2U6IEFwaVJlc3BvbnNlLFxyXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdXHJcblx0KSB7XHJcblx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0cmVxdWVzdENvbHVtbnMsXHJcblx0XHRcdHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpXHJcblx0XHQpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdGlmIChpdGVtRW50cnkuaXNMb2NhbCgpKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0dGhpcy5oYW5kbGVDYWNoZWRJdGVtKGl0ZW1FbnRyeSwgcmVzcG9uc2UsIGNvbHVtbkV4cGFuc2lvbik7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGNvbHVtbkV4cGFuc2lvbjtcclxuXHR9XHJcblxyXG5cdHByb2Nlc3NSZXNwb25zZSAoXHJcblx0XHRyZXNwb25zZTogQXBpUmVzcG9uc2UsXHJcblx0XHRpZEFycmF5OiBJdGVtSWRbXSxcclxuXHRcdHBhcmVudDogRW50cnlQYXJlbnROdWxsLFxyXG5cdFx0Y29sdW1uU2V0OiBDb2x1bW5TZXQsXHJcblx0XHRjb2x1bW5FeHBhbnNpb246IENvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdGNvbHVtblNldC5pdGVtVHlwZSxcclxuXHRcdFx0Y29sdW1uU2V0LnJlcXVlc3RDb2x1bW5zVHJ1ZSA/IHRydWUgOiBjb2x1bW5TZXQucmVxdWVzdCxcclxuXHRcdFx0Y29sdW1uU2V0LnJlc3BvbnNlXHJcblx0XHQpXHJcblx0KTogUHJvbWlzZUludGVyZmFjZTxJdGVtRW50cnlbXT4ge1xyXG5cdFx0Y29uc3QgaXRlbUhhbmRsZXIgPSB0aGlzLml0ZW1IYW5kbGVyO1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBjb2x1bW5TZXQuaXRlbVR5cGU7XHJcblx0XHRjb25zdCByb290Q29sdW1ucyA9IGNvbHVtblNldC5yb290O1xyXG5cdFx0Y29uc3QgaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XHJcblx0XHRjb25zdCBkZWZlcnJlZEVudHJpZXM6IEFycmF5PFByb21pc2VJbnRlcmZhY2U8SXRlbUVudHJ5Pj4gPSBbXTtcclxuXHJcblx0XHQvLyBzaG91bGQgYmUgZmFzdC4uLlxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgaWRBcnJheSkge1xyXG5cdFx0XHRsZXQgaXRlbUVudHJ5ID0gaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZCk7XHJcblxyXG5cdFx0XHRpZiAoaXRlbUVudHJ5ID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRpdGVtRW50cnkgPSB0aGlzLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRcdFx0aXRlbUlkLFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCksXHJcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgcm9vdENvbHVtbnMpLFxyXG5cdFx0XHRcdFx0Y29sdW1uU2V0XHJcblx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0aXRlbUhhbmRsZXIuZW50cmllcy5hZGQoaXRlbUVudHJ5KTtcclxuXHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0aWYgKGl0ZW1FbnRyeS5pc0RlZmVycmVkKCkpIHtcclxuXHRcdFx0XHRcdGlmIChpdGVtRW50cnkuZGVmZXJSZXF1ZXN0KSB7XHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyaWVzLnB1c2goXHJcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LnJlc29sdmVEZWZlcnJlZChcclxuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQpLFxyXG5cdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIHJvb3RDb2x1bW5zKSxcclxuXHRcdFx0XHRcdFx0XHRcdGNvbHVtblNldFxyXG5cdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdH0gZWxzZVxyXG5cdFx0XHRcdFx0XHRkZWZlcnJlZEVudHJpZXMucHVzaChpdGVtRW50cnkuZGVmZXJyZWQucHJvbWlzZSk7XHJcblx0XHRcdFx0fSBlbHNlIGlmIChpdGVtRW50cnkucmVsb2FkUXVldWVkKSB7XHJcblx0XHRcdFx0XHRpdGVtRW50cnkucmVsb2FkUXVldWVkID0gZmFsc2U7XHJcblx0XHRcdFx0XHRpdGVtRW50cnkudXBkYXRlRmllbGRzKFxyXG5cdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKSxcclxuXHRcdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIHJvb3RDb2x1bW5zKSxcclxuXHRcdFx0XHRcdFx0ZmFsc2VcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHRcdFx0fSBlbHNlXHJcblx0XHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKHRoaXMuaGFuZGxlQ2FjaGVkSXRlbShpdGVtRW50cnksIHJlc3BvbnNlLCBjb2x1bW5FeHBhbnNpb24pKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKHBhcmVudCAhPT0gbnVsbClcclxuXHRcdFx0XHRpdGVtRW50cnkucGFyZW50ID0gcGFyZW50O1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChkZWZlcnJlZEVudHJpZXMpLnRoZW4oXHJcblx0XHRcdHJlc29sdmVkRW50cmllcyA9PiB7XHJcblx0XHRcdFx0Zm9yIChjb25zdCByZXNvbHZlZEVudHJ5IG9mIHJlc29sdmVkRW50cmllcykge1xyXG5cdFx0XHRcdFx0aXRlbUVudHJpZXMucHVzaChcclxuXHRcdFx0XHRcdFx0dGhpcy5oYW5kbGVDYWNoZWRJdGVtKFxyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmVkRW50cnksXHJcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2UsXHJcblx0XHRcdFx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uXHJcblx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJpZXM7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGhhbmRsZUNhY2hlZEl0ZW0gKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCByZXNwb25zZTogQXBpUmVzcG9uc2UsIGNvbHVtbkV4cGFuc2lvbjogQ29sdW1uRXhwYW5zaW9uKSB7XHJcblx0XHRjb25zdCBleHBhbnNpb25SZXN1bHQgPSBjb2x1bW5FeHBhbnNpb24ucnVuKGl0ZW1FbnRyeS5jb2x1bW5zKTtcclxuXHJcblx0XHRyZXR1cm4gZXhwYW5zaW9uUmVzdWx0ID09PSBudWxsID9cclxuXHRcdFx0aXRlbUVudHJ5IDpcclxuXHRcdFx0aXRlbUVudHJ5LmV4cGFuZChcclxuXHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWQpLFxyXG5cdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChcclxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5pdGVtVHlwZSxcclxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5pdGVtSWQsXHJcblx0XHRcdFx0XHRleHBhbnNpb25SZXN1bHQuZGlmZmVyZW5jZS5yb290XHJcblx0XHRcdFx0KSxcclxuXHRcdFx0XHRleHBhbnNpb25SZXN1bHRcclxuXHRcdFx0KTtcclxuXHR9XHJcblxyXG5cdHByb2Nlc3NMaW5rUmVzcG9uc2UgKFxyXG5cdFx0cmVzcG9uc2U6IEFwaVJlc3BvbnNlLFxyXG5cdFx0cGFyZW50VHlwZTogSXRlbVR5cGUsXHJcblx0XHRwYXJlbnRJZEFycmF5OiBJdGVtSWRbXSxcclxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdG9wdGlvbnNcclxuXHQpIHtcclxuXHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1ucyA9IHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpO1xyXG5cdFx0Y29uc3QgY29sdW1uU2V0ID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucy5jb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xyXG5cdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucy5jb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xyXG5cdFx0Y29uc3QgcGFyZW50SXRlbXMgPSByZXNwb25zZS5pdGVtc1twYXJlbnRUeXBlXTtcclxuXHRcdGNvbnN0IHByb21pc2VzOiBhbnkgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIG9mIHBhcmVudElkQXJyYXkpIHtcclxuXHRcdFx0cHJvbWlzZXNbcGFyZW50SWRdID0gcGF0aEV4aXN0cyhwYXJlbnRJdGVtcywgW3BhcmVudElkLCAnbGlua3MnLCBpdGVtVHlwZV0pID9cclxuXHRcdFx0XHR0aGlzLnByb2Nlc3NSZXNwb25zZShcclxuXHRcdFx0XHRcdHJlc3BvbnNlLFxyXG5cdFx0XHRcdFx0cGFyZW50SXRlbXNbcGFyZW50SWRdLmxpbmtzW2l0ZW1UeXBlXSxcclxuXHRcdFx0XHRcdHtpdGVtVHlwZTogcGFyZW50VHlwZSwgaXRlbUlkOiBwYXJlbnRJZH0sXHJcblx0XHRcdFx0XHRjb2x1bW5TZXQsXHJcblx0XHRcdFx0XHRjb2x1bW5FeHBhbnNpb25cclxuXHRcdFx0XHQpIDpcclxuXHRcdFx0XHRbXTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocHJvbWlzZXMpLnRoZW4oXHJcblx0XHRcdHJlc29sdmVkID0+IHtcclxuXHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0aXRlbXM6IHJlc29sdmVkLFxyXG5cdFx0XHRcdFx0Y29sdW1uczogY29sdW1uU2V0LFxyXG5cdFx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uOiBjb2x1bW5FeHBhbnNpb25cclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IG5vb3AgfSBmcm9tICcuLi8nO1xyXG5cclxuaW1wb3J0IHsgc2hhbGxvd01lcmdlIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtUmVzb3VyY2VTZXJ2aWNlIHtcclxuXHRjb25zdHJ1Y3RvciAoKSB7XHJcblxyXG5cdH1cclxuXHJcblx0cHJvY2Vzc09wdGlvbnMgKG9wdGlvbnMpIHtcclxuXHRcdHJldHVybiBzaGFsbG93TWVyZ2UoXHJcblx0XHRcdG9wdGlvbnMsXHJcblx0XHRcdHtcclxuXHRcdFx0XHRlZGl0OiBmYWxzZSxcclxuXHRcdFx0XHRvbkNoYW5nZTogbm9vcCxcclxuXHRcdFx0XHRvbkRlYWN0aXZhdGU6IG5vb3BcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGNvbXBhcmVPcHRpb25zIChmaXJzdCwgc2Vjb25kKSB7XHJcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBmaXJzdCkge1xyXG5cdFx0XHRpZiAoZmlyc3Rba2V5XSAhPT0gc2Vjb25kW2tleV0pXHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBEVVBMSUNBVEVfS0VZV09SRCwgRFVQTElDQVRFX1BSRUZJWCwgTkVXX0tFWVdPUkQsIE5FV19QUkVGSVggfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgSXRlbUlkLCBTdGF0ZUtleSwgU3RhdGVLZXlUeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgS2V5U2VydmljZSB7XG5cdHNlcGFyYXRvcjogc3RyaW5nID0gJzonO1xuXG5cdGNvbnN0cnVjdG9yICgpIHt9XG5cblx0Z2V0U2luZ2xlS2V5IChpdGVtVHlwZTogc3RyaW5nLCBpdGVtSWQ6IG51bWJlciB8IHN0cmluZykge1xuXHRcdHJldHVybiBpdGVtVHlwZSArIHRoaXMuc2VwYXJhdG9yICsgaXRlbUlkO1xuXHR9XG5cblx0Z2V0Q3NzS2V5ICgpIHtcblx0XHRyZXR1cm4gQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbChhcmd1bWVudHMsICdfJyk7XG5cdH1cblxuXHRwYXJzZVN0YXRlS2V5IChzdGF0ZUtleTogc3RyaW5nKTogU3RhdGVLZXkgfCBudWxsIHtcblx0XHRzdGF0ZUtleSA9IHN0YXRlS2V5LnRvU3RyaW5nKCk7XG5cblx0XHRpZiAoc3RhdGVLZXkuc3Vic3RyaW5nKDAsIE5FV19LRVlXT1JELmxlbmd0aCkgPT09IE5FV19LRVlXT1JEKVxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dHlwZTogU3RhdGVLZXlUeXBlLk5ldyxcblx0XHRcdFx0dGVtcGxhdGU6IHN0YXRlS2V5LnN1YnN0cmluZyhORVdfS0VZV09SRC5sZW5ndGgpIC8vIFRPRE86IHRoaXMgaXMgY3VycmVudGx5IG5vdCBiZWluZyB1c2VkLCByZWV2YWx1YXRlXG5cdFx0XHR9O1xuXG5cdFx0aWYgKHN0YXRlS2V5LnN1YnN0cmluZygwLCBEVVBMSUNBVEVfS0VZV09SRC5sZW5ndGgpID09PSBEVVBMSUNBVEVfS0VZV09SRClcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHR5cGU6IFN0YXRlS2V5VHlwZS5EdXBsaWNhdGUsXG5cdFx0XHRcdGl0ZW1JZDogK3N0YXRlS2V5LnN1YnN0cmluZyhEVVBMSUNBVEVfS0VZV09SRC5sZW5ndGgpXG5cdFx0XHR9O1xuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRnZXREdXBsaWNhdGVTdGF0ZUtleSAoaXRlbUlkOiBzdHJpbmcgfCBudW1iZXIpIHtcblx0XHRyZXR1cm4gRFVQTElDQVRFX0tFWVdPUkQgKyBpdGVtSWQ7XG5cdH1cblxuXHRnZXROZXdTdGF0ZUtleSAodGVtcGxhdGVUeXBlOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gTkVXX0tFWVdPUkQgKyB0ZW1wbGF0ZVR5cGU7XG5cdH1cblxuXHRnZXRMb2NhbElkICgpOiBJdGVtSWQge1xuXHRcdHJldHVybiArKE5FV19QUkVGSVggKyB0aGlzLmdldFJhbmRvbVN0cmluZygpKTtcblx0fVxuXG5cdGdldExvY2FsRHVwbGljYXRlSWQgKCk6IEl0ZW1JZCB7XG5cdFx0cmV0dXJuICsoRFVQTElDQVRFX1BSRUZJWCArIHRoaXMuZ2V0UmFuZG9tU3RyaW5nKCkpO1xuXHR9XG5cblx0Z2V0UmFuZG9tU3RyaW5nICgpIHtcblx0XHRyZXR1cm4gKCcnICsgTWF0aC5yYW5kb20oKSkuc3BsaXQoJy4nKVsxXS5zdWJzdHIoMCwgOCk7XG5cdH1cblxuXHQvLyBub3RlOiB0aGUgY2hhbmdlcyBjb21waWxlciB1c2VzIHRoaXNcblx0Ly8gbWlnaHQgYmUgY2FsbGVkIHdpdGggdW5kZWZpbmVkIChpdGVtSGFuZGxlci5jcmVhdGVSZXF1ZXN0KVxuXHRpc0xvY2FsSWQgKGl0ZW1JZDogSXRlbUlkIHwgc3RyaW5nKSB7XG5cdFx0cmV0dXJuIGl0ZW1JZCAhPT0gdW5kZWZpbmVkICYmICh0aGlzLmlzTmV3SWQoaXRlbUlkKSB8fCB0aGlzLmlzRHVwbGljYXRlSWQoaXRlbUlkKSk7XG5cdH1cblxuXHRpc05ld0lkIChpdGVtSWQ6IEl0ZW1JZCB8IHN0cmluZykge1xuXHRcdHJldHVybiBpdGVtSWQgPT09IE5FV19LRVlXT1JEIHx8ICgnJyArIGl0ZW1JZCkuc3Vic3RyaW5nKDAsIE5FV19QUkVGSVgubGVuZ3RoKSA9PT0gTkVXX1BSRUZJWDtcblx0fVxuXG5cdGlzRHVwbGljYXRlSWQgKGl0ZW1JZDogSXRlbUlkIHwgc3RyaW5nKSB7XG5cdFx0cmV0dXJuIGl0ZW1JZCA9PT0gRFVQTElDQVRFX0tFWVdPUkQgfHwgKCcnICsgaXRlbUlkKS5zdWJzdHJpbmcoMCwgRFVQTElDQVRFX1BSRUZJWC5sZW5ndGgpID09PSBEVVBMSUNBVEVfUFJFRklYO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBBcGlSZXNwb25zZVByb2Nlc3NvciwgQ29sbGVjdGlvbk1hdGNoZXIsIENvbHVtblNldCwgTG9jYWxDYWNoZSwgUmVxdWVzdENvbHVtbkV4cGFuc2lvbiB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBFTlRSWV9TVEFUVVMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSwgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5cclxuZXhwb3J0IHR5cGUgRW50cnlQYXJlbnQgPSB7aXRlbVR5cGU6IHN0cmluZywgaXRlbUlkOiBudW1iZXJ9O1xyXG5cclxuZXhwb3J0IHR5cGUgRW50cnlQYXJlbnROdWxsID0gRW50cnlQYXJlbnQgfCBudWxsO1xyXG5cclxuZXhwb3J0IHR5cGUgRmllbGRNYXAgPSB7XHJcblx0W2tleTogc3RyaW5nXTogYW55XHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBJdGVtT3B0aW9ucyA9IGFueTsgLy8gVE9ET1xyXG4vLyBleHBvcnQgdHlwZSBJdGVtRW50cnlPcHRpb25zID0gYW55OyAvLyBUT0RPXHJcbi8vIGV4cG9ydCB0eXBlIEl0ZW1SZXNvdXJjZU9wdGlvbnMgPSBhbnk7IC8vIFRPRE9cclxuXHJcbmV4cG9ydCBjb25zdCBlbnVtIFN0YXRlS2V5VHlwZSB7XHJcblx0TmV3ID0gJ25ldycsXHJcblx0RHVwbGljYXRlID0gJ2R1cGxpY2F0ZSdcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgU3RhdGVLZXkgPSB7dHlwZTogU3RhdGVLZXlUeXBlLCB0ZW1wbGF0ZT86IHN0cmluZywgaXRlbUlkPzogbnVtYmVyfTtcclxuXHJcbmV4cG9ydCB0eXBlIE9uU2F2ZUNhbGxiYWNrID0gKGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUsIGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApID0+IGFueTtcclxuXHJcbmV4cG9ydCBlbnVtIExvY2FsQ2FjaGVDYWxsYmFja0NvbmRpdGlvbiB7XHJcblx0QWx3YXlzID0gJ2Fsd2F5cycsXHJcblx0T25DbG9zZSA9ICdvbkNsb3NlJyxcclxuXHRTa2lwT25DbG9zZSA9ICdza2lwT25DbG9zZSdcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgTG9jYWxDYWNoZUNhbGxiYWNrczxUPiA9IHtcclxuXHRhbHdheXM6IHtba2V5OiBzdHJpbmddOiBUfSxcclxuXHRvbkNsb3NlOiB7W2tleTogc3RyaW5nXTogVH0sXHJcblx0c2tpcE9uQ2xvc2U6IHtba2V5OiBzdHJpbmddOiBUfVxyXG59O1xyXG5cclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gSXRlbSByZXNvdXJjZVxyXG5cclxuZXhwb3J0IHR5cGUgSXRlbVJlc291cmNlSXRlbUlkTWFwID0ge1xyXG5cdFtpdGVtSWQ6IG51bWJlcl06IEl0ZW1SZXNvdXJjZVxyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgSXRlbVJlc291cmNlc0l0ZW1UeXBlTWFwID0ge1xyXG5cdFtpdGVtVHlwZTogc3RyaW5nXTogSXRlbVJlc291cmNlW11cclxufTtcclxuXHJcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEl0ZW0gRW50cnlcclxuXHJcbmV4cG9ydCB0eXBlIEl0ZW1JZCA9IG51bWJlcjtcclxuXHJcbmV4cG9ydCB0eXBlIEl0ZW1UeXBlID0gc3RyaW5nO1xyXG5cclxuZXhwb3J0IHR5cGUgSXRlbUVudHJ5TWFwID0ge1xyXG5cdFtpdGVtVHlwZTogc3RyaW5nXToge1xyXG5cdFx0W2l0ZW1JZDogbnVtYmVyXTogSXRlbUVudHJ5XHJcblx0fVxyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgTGlua2VkSXRlbUVudHJ5TWFwID0ge1xyXG5cdGl0ZW1UeXBlOiBzdHJpbmcsXHJcblx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxyXG5cdGNvbHVtblNldDogQ29sdW1uU2V0XHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBFbnRyeVN0YXR1c01hcDxUPiA9IHtcclxuXHRbZW50cnlTdGF0dXM6IHN0cmluZ106IFRbXTtcclxufTtcclxuXHJcbmV4cG9ydCB0eXBlIEl0ZW1FbnRyeVBhcmVudElkTWFwID0ge1xyXG5cdFtwYXJlbnRJZDogbnVtYmVyXTogSXRlbUVudHJ5W107XHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBJdGVtSWRDb252ZXJzaW9uTWFwID0ge1xyXG5cdFtpdGVtVHlwZTogc3RyaW5nXToge1xyXG5cdFx0W2l0ZW1JZDogbnVtYmVyXTogbnVtYmVyO1xyXG5cdH07XHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwID0ge1xyXG5cdFtpdGVtVHlwZTogc3RyaW5nXToge1xyXG5cdFx0W2l0ZW1JZDogbnVtYmVyXTogYW55XHJcblx0fTtcclxufTtcclxuXHJcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IENvbGxlY3Rpb24gRW50cnlcclxuXHJcbmV4cG9ydCB0eXBlIENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwID0ge1xyXG5cdFtwYXJlbnRJZDogbnVtYmVyXTogQ29sbGVjdGlvbkVudHJ5XHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcCA9IHtcclxuXHRbcGFyZW50SWQ6IG51bWJlcl06IENvbGxlY3Rpb25SZXNvdXJjZVxyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgQ29sbGVjdGlvbk1hdGNoUmVzdWx0ID0ge1xyXG5cdGZpdHRpbmc6IENvbGxlY3Rpb25FbnRyeVtdLFxyXG5cdG5vdGZpdHRpbmc6IENvbGxlY3Rpb25FbnRyeVtdLFxyXG5cdG1heWJlOiBDb2xsZWN0aW9uRW50cnlbXVxyXG59O1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFeHRlbmRlZENvbGxlY3Rpb25NYXRjaFJlc3VsdCBleHRlbmRzIENvbGxlY3Rpb25NYXRjaFJlc3VsdCB7XHJcblx0Y29sbGVjdGlvbjogQ29sbGVjdGlvblJlc291cmNlO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwZWRFeHRlbmRlZENvbGxlY3Rpb25NYXRjaFJlc3VsdCB7XHJcblx0W2NvbGxlY3Rpb25JZDogbnVtYmVyXToge1xyXG5cdFx0W3N0YXR1czogc3RyaW5nXTogRXh0ZW5kZWRDb2xsZWN0aW9uTWF0Y2hSZXN1bHRcclxuXHR9O1xyXG59XHJcblxyXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBDb2x1bW5zXHJcblxyXG5leHBvcnQgdHlwZSBSZXNwb25zZUNvbHVtbiA9IGFueTsgLy8gVE9ET1xyXG5cclxuZXhwb3J0IHR5cGUgUmVzcG9uc2VDb2x1bW5NYXAgPSB7XHJcblx0W2l0ZW1UeXBlOiBzdHJpbmddOiB7XHJcblx0XHRbY29sdW1uSWQ6IHN0cmluZ106IFJlc3BvbnNlQ29sdW1uXHJcblx0fVxyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgQ29sdW1uRXhwYW5zaW9uUmVzdWx0ID0ge1xyXG5cdG1lcmdlZDogQ29sdW1uU2V0LFxyXG5cdGRpZmZlcmVuY2U6IENvbHVtblNldFxyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgQ29sdW1uU2V0RXhwYW5zaW9uID0ge1xyXG5cdHJlcXVlc3Q6IHttZXJnZWQ6IEFwaVJlcXVlc3RDb2x1bW5zLCBkaWZmZXJlbmNlOiBBcGlSZXF1ZXN0Q29sdW1uc30sXHJcblx0cmVzcG9uc2U6IFJlc3BvbnNlQ29sdW1uTWFwXHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBSb290Q29sdW1uTWFwID0ge1tjb2x1bW5JZDogc3RyaW5nXToge2FwaUNvbHVtbjogUmVzcG9uc2VDb2x1bW4sIGNoaWxkcmVuOiBSb290Q29sdW1uTWFwfX07XHJcblxyXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBBcGkgcmVmZXJlbmNlXHJcblxyXG5leHBvcnQgdHlwZSBBcGlSZXNwb25zZSA9IEFwaVJlc3BvbnNlUHJvY2Vzc29yOyAvLyBUT0RPXHJcblxyXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBBcGkgdGVtcGxhdGUgcmVzcG9uc2VcclxuZXhwb3J0IHR5cGUgVGVtcGxhdGVJdGVtUmVzb3VyY2VNYXAgPSB7XHJcblx0bWFpbjogSXRlbVJlc291cmNlO1xyXG5cdGxpbmtlZDogSXRlbVJlc291cmNlc0l0ZW1UeXBlTWFwXHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBUZW1wbGF0ZUl0ZW1FbnRyeU1hcCA9IHtcclxuXHRtYWluOiBJdGVtRW50cnk7XHJcblx0bGlua2VkOiBMaW5rZWRJdGVtRW50cnlNYXBbXTtcclxufTtcclxuXHJcbmV4cG9ydCB0eXBlIEl0ZW1UeXBlTWFwID0ge1xyXG5cdFtpdGVtVHlwZTogc3RyaW5nXTogYW55O1xyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgRW50cnlTdGF0dXM8VD4gPSB7XHJcblx0ZW50cnk6IFQ7XHJcblx0c3RhdHVzOiBFTlRSWV9TVEFUVVM7XHJcbn07XHJcblxyXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBBcGkgcmVxdWVzdFxyXG5cclxuZXhwb3J0IHR5cGUgQXBpUmVxdWVzdEl0ZW1WYWx1ZXMgPSB7XHJcblx0dmFsdWVzPzogYW55LFxyXG5cdGxpbmtzPzoge1xyXG5cdFx0W2l0ZW1UeXBlOiBzdHJpbmddOiBJdGVtSWRbXVxyXG5cdH1cclxufTtcclxuXHJcbmV4cG9ydCB0eXBlIEFwaVJlcXVlc3RJdGVtTWFwID0ge1xyXG5cdFtpdGVtVHlwZTogc3RyaW5nXToge1xyXG5cdFx0W2l0ZW1JZDogbnVtYmVyXTogQXBpUmVxdWVzdEl0ZW1WYWx1ZXNcclxuXHR9O1xyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgQXBpUmVxdWVzdENvbHVtbiA9IHN0cmluZyB8IHtbY29sdW1uSWQ6IHN0cmluZ106IEFwaVJlcXVlc3RDb2x1bW5bXX07XHJcblxyXG5leHBvcnQgdHlwZSBBcGlSZXF1ZXN0Q29sdW1ucyA9IEFwaVJlcXVlc3RDb2x1bW5bXSB8IHRydWU7XHJcblxyXG5leHBvcnQgdHlwZSBBcGlSZXF1ZXN0Q29sdW1uTWFwID0ge1xyXG5cdFtpdGVtVHlwZTogc3RyaW5nXTogQXBpUmVxdWVzdENvbHVtbnNcclxufTtcclxuXHJcbmV4cG9ydCB0eXBlIEFwaVJlcXVlc3RMaW1pdCA9IHtcclxuXHRmaWVsZDogc3RyaW5nLFxyXG5cdGxpbWl0OiBudW1iZXIsXHJcblx0b2Zmc2V0PzogbnVtYmVyLFxyXG5cdG9yZGVyPzogJ2Rlc2MnIHwgJ2FzYydcclxufTtcclxuXHJcbmV4cG9ydCB0eXBlIEFwaVJlcXVlc3RNb3ZlSXRlbXMgPSB7XHJcblx0W2l0ZW1UeXBlOiBzdHJpbmddOiBJdGVtSWRbXVxyXG59O1xyXG5cclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gQ3JlYXRlIHJlcXVlc3RcclxuXHJcbmV4cG9ydCB0eXBlIENyZWF0ZVJlcXVlc3RFbnRyeSA9IHtcclxuXHRyZXF1ZXN0OiB7XHJcblx0XHRyZXF1ZXN0VHlwZTogJ2NyZWF0ZScsXHJcblx0XHRpdGVtVHlwZT86IEl0ZW1UeXBlLFxyXG5cdFx0cGFyZW50VHlwZT86IEl0ZW1UeXBlLFxyXG5cdFx0cGFyZW50SWQ/OiB7W2l0ZW1JZDogc3RyaW5nXTogSXRlbUlkfSxcclxuXHRcdGl0ZW1zOiBBcGlSZXF1ZXN0SXRlbU1hcCxcclxuXHRcdGNvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5NYXBcclxuXHR9LFxyXG5cdGNvbHVtbnM6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb24sXHJcblx0aXRlbXM6IHtcclxuXHRcdFtpdGVtVHlwZTogc3RyaW5nXToge1xyXG5cdFx0XHRbaXRlbUlkOiBudW1iZXJdOiBJdGVtRW50cnlcclxuXHRcdH1cclxuXHR9LFxyXG5cdGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uTWF0Y2hlclxyXG59O1xyXG4iLCJleHBvcnQgKiBmcm9tICcuL0l0ZW1UeXBlc0NvbGxlY3Rpb24nO1xyXG5leHBvcnQgKiBmcm9tICcuL1Byb21pc2VJbnRlcmZhY2UnO1xyXG4iLCJpbXBvcnQge1xyXG5cdENvbGxlY3Rpb25DYWNoZSxcclxuXHRJdGVtQ2FjaGUsXHJcblx0SXRlbVJlc291cmNlU2VydmljZSxcclxuXHRMb2NrU2VydmljZVxyXG59IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQge1xyXG5cdENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxyXG5cdENvbGxlY3Rpb25DYWNoZUZhY3RvcnksXHJcblx0Q29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcclxuXHRJdGVtQ2FjaGVGYWN0b3J5LFxyXG5cdEl0ZW1SZXNvdXJjZUZhY3RvcnlcclxufSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgQ29sbGVjdGlvblJlc291cmNlLCBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7XHJcblx0Q29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXAsIENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAsIEl0ZW1JZENvbnZlcnNpb25NYXAsIEl0ZW1PcHRpb25zLCBMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24sXHJcblx0TG9jYWxDYWNoZUNhbGxiYWNrcywgT25TYXZlQ2FsbGJhY2ssIFByb21pc2VJbnRlcmZhY2VcclxufSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIExvY2FsQ2FjaGUge1xyXG5cdGl0ZW1zOiBJdGVtQ2FjaGU7XHJcblx0cm9vdEl0ZW06IEl0ZW1FbnRyeSB8IHVuZGVmaW5lZDtcclxuXHRjb2xsZWN0aW9uczogQ29sbGVjdGlvbkNhY2hlO1xyXG5cdGRlZmVycmVkQ29sbGVjdGlvbnM6IENvbGxlY3Rpb25DYWNoZTtcclxuXHR0YWJSZXF1ZXN0UGFyYW1ldGVycyA9IHt9O1xyXG5cclxuXHRpc1NhdmluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHRwcml2YXRlIGNhbGxiYWNrczoge1xyXG5cdFx0b25CZWZvcmVTYXZlOiBMb2NhbENhY2hlQ2FsbGJhY2tzPChsb2NhbENhY2hlOiBMb2NhbENhY2hlKSA9PiBhbnk+LFxyXG5cdFx0b25TYXZlU3VjY2VzczogTG9jYWxDYWNoZUNhbGxiYWNrczxPblNhdmVDYWxsYmFjaz4sXHJcblx0fSA9IHtcclxuXHRcdG9uQmVmb3JlU2F2ZToge2Fsd2F5czoge30sIG9uQ2xvc2U6IHt9LCBza2lwT25DbG9zZToge319LFxyXG5cdFx0b25TYXZlU3VjY2Vzczoge2Fsd2F5czoge30sIG9uQ2xvc2U6IHt9LCBza2lwT25DbG9zZToge319XHJcblx0fTtcclxuXHJcblx0cHJpdmF0ZSBjaGFuZ2VzSW50ZXJ2YWw6IG51bGwgfCBudW1iZXIgPSBudWxsO1xyXG5cdGhhc0NoYW5nZXMgPSBmYWxzZTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgbG9ja1NlcnZpY2U6IExvY2tTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeTogQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXHJcblx0XHRwcml2YXRlIGl0ZW1DYWNoZUZhY3Rvcnk6IEl0ZW1DYWNoZUZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnk6IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXHJcblx0XHRwcml2YXRlIGl0ZW1SZXNvdXJjZVNlcnZpY2U6IEl0ZW1SZXNvdXJjZVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZSxcclxuXHRcdHB1YmxpYyBpZDogc3RyaW5nID0gJydcclxuXHQpIHtcclxuXHRcdHRoaXMuaXRlbXMgPSB0aGlzLml0ZW1DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XHJcblx0XHR0aGlzLmNvbGxlY3Rpb25zID0gdGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xyXG5cdFx0dGhpcy5kZWZlcnJlZENvbGxlY3Rpb25zID0gdGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlSXRlbVJlc291cmNlIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgb3B0aW9uczogSXRlbU9wdGlvbnMsIGlzUm9vdDogYm9vbGVhbiA9IGZhbHNlLCBpc05ldz86IGJvb2xlYW4pIHtcclxuXHRcdGlmIChpc1Jvb3QpXHJcblx0XHRcdHRoaXMucm9vdEl0ZW0gPSBpdGVtRW50cnk7XHJcblxyXG5cdFx0b3B0aW9ucyA9IHRoaXMuaXRlbVJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTtcclxuXHRcdG9wdGlvbnMub25EZWFjdGl2YXRlID0gKF9pdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gdGhpcy5vbkRlYWN0aXZhdGVJdGVtKF9pdGVtRW50cnkpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnkuY29uc3RydWN0KGl0ZW1FbnRyeSwgb3B0aW9ucywgaXNOZXcpO1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlSXRlbVJlc291cmNlcyAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCBvcHRpb25zOiBJdGVtT3B0aW9ucykge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxyXG5cdFx0XHRyZXN1bHQucHVzaCh0aGlzLmNyZWF0ZUl0ZW1SZXNvdXJjZShpdGVtRW50cnksIG9wdGlvbnMpKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlQ29sbGVjdGlvblJlc291cmNlIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgcmVzb3VyY2VPcHRpb25zKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LmNvbnN0cnVjdChjb2xsZWN0aW9uRW50cnksIHJlc291cmNlT3B0aW9ucywgdGhpcyk7XHJcblx0fVxyXG5cclxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2VzIChjb2xsZWN0aW9uRW50cmllczogQ29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXAsIHJlc291cmNlT3B0aW9ucykge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBjb2xsZWN0aW9uRW50cmllcylcclxuXHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IHRoaXMuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlKGNvbGxlY3Rpb25FbnRyaWVzW3BhcmVudElkXSwgcmVzb3VyY2VPcHRpb25zKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Y2xlYXJJdGVtIChpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSkge1xyXG5cdFx0dGhpcy5jbGVhckl0ZW1FbnRyeShpdGVtUmVzb3VyY2UuZW50cnkpO1xyXG5cdH1cclxuXHJcblx0Y2xlYXJJdGVtRW50cnkgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSB7XHJcblx0XHR0aGlzLml0ZW1zLmNsZWFyKGl0ZW1FbnRyeSk7XHJcblx0XHRpdGVtRW50cnkuY2xlYXJSZXNvdXJjZXMoKTtcclxuXHR9XHJcblxyXG5cdGNsZWFyQ29sbGVjdGlvbiAoY29sbGVjdGlvblJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UpIHtcclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGNvbGxlY3Rpb25SZXNvdXJjZS5lbnRyeTtcclxuXHJcblx0XHR0aGlzLmNvbGxlY3Rpb25zLmNsZWFyKGNvbGxlY3Rpb25FbnRyeSk7XHJcblx0XHRjb2xsZWN0aW9uRW50cnkuY2xlYXJSZXNvdXJjZXMoKTtcclxuXHR9XHJcblxyXG5cdGNsZWFyUmVzb3VyY2VzIChpc1N1YlRhYkNoYW5nZTogYm9vbGVhbiA9IGZhbHNlKSB7XHJcblx0XHR0aGlzLml0ZW1zLmZvckVhY2goXHJcblx0XHRcdChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gaXRlbUVudHJ5LmNsZWFyUmVzb3VyY2VzKClcclxuXHRcdCk7XHJcblxyXG5cdFx0dGhpcy5jb2xsZWN0aW9ucy5mb3JFYWNoKFxyXG5cdFx0XHQoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpID0+IGNvbGxlY3Rpb25FbnRyeS5jbGVhclJlc291cmNlcyhpc1N1YlRhYkNoYW5nZSlcclxuXHRcdCk7XHJcblxyXG5cdFx0dGhpcy5kZWZlcnJlZENvbGxlY3Rpb25zLmNsZWFyKCk7XHJcblx0fVxyXG5cclxuXHR1cGRhdGVTaW5nbGVJdGVtcyAoY29udmVyc2lvbk1hcCkge1xyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBjb252ZXJzaW9uTWFwKSB7XHJcblx0XHRcdGZvciAoY29uc3Qgb2xkSXRlbUlkIGluIGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdKSB7XHJcblx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5pdGVtcy5nZXQoaXRlbVR5cGUsIG9sZEl0ZW1JZCk7XHJcblxyXG5cdFx0XHRcdGlmIChpdGVtRW50cnkgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0XHR0aGlzLml0ZW1zLnVwZGF0ZUl0ZW1JZChpdGVtRW50cnksIG9sZEl0ZW1JZCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIHJlc291cmNlcyB3aWxsIGJlIGNsZWFyZWQgbGF0ZXIgKGNsZWFyIGZ1bmN0aW9uKVxyXG5cdHJldmVydENoYW5nZXMgKCkge1xyXG5cdFx0dGhpcy5pdGVtcy5mb3JFYWNoKFxyXG5cdFx0XHQoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGl0ZW1FbnRyeS5yZXNldE1vZGlmaWVkKClcclxuXHRcdCk7XHJcblxyXG5cdFx0dGhpcy5jb2xsZWN0aW9ucy5mb3JFYWNoKFxyXG5cdFx0XHQoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpID0+IHRoaXMucmVzZXRDb2xsZWN0aW9uKGNvbGxlY3Rpb25FbnRyeSlcclxuXHRcdCk7XHJcblxyXG5cdFx0dGhpcy5oYXNDaGFuZ2VzID0gZmFsc2U7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuaXNMb2NrYWJsZSgpID9cclxuXHRcdFx0dGhpcy5sb2NrU2VydmljZS5kZWxldGVMb2NrKHRoaXMucm9vdEl0ZW0pIDpcclxuXHRcdFx0dGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XHJcblx0fVxyXG5cclxuXHRyZXNldENvbGxlY3Rpb24gKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KTogdm9pZCB7XHJcblx0XHQvLyByZXZlcnQgY2hhbmdlcyBmb3IgKmFsbCogY29sbGVjdGlvbnMsIGl0ZW1zIG1pZ2h0IGhhdmUgYmVlbiBhZGRlZCBvbiByZXNvbHZlXHJcblx0XHRjb2xsZWN0aW9uRW50cnkuaXRlbXMgPSBjb2xsZWN0aW9uRW50cnkuaW5pdGlhbC5zbGljZSgpO1xyXG5cclxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaGFzSXRlbUVkaXRSZXNvdXJjZXMpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgY29sbGVjdGlvbkVudHJ5Lml0ZW1zKVxyXG5cdFx0XHRcdGl0ZW1FbnRyeS5yZXNldE1vZGlmaWVkKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRkZXRlY3RDaGFuZ2VzICgpOiBib29sZWFuIHtcclxuXHRcdGlmICh0aGlzLmhhc0NoYW5nZXMpXHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cclxuXHRcdGlmIChcclxuXHRcdFx0dGhpcy5pdGVtcy5zb21lKFxyXG5cdFx0XHRcdChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gaXRlbUVudHJ5Lmhhc0NoYW5nZXMoKVxyXG5cdFx0XHQpXHJcblx0XHQpXHJcblx0XHRcdHJldHVybiB0aGlzLmhhc0NoYW5nZXMgPSB0cnVlO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmhhc0NoYW5nZXMgPSB0aGlzLmNvbGxlY3Rpb25zLnNvbWUoXHJcblx0XHRcdChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4gdGhpcy5jb2xsZWN0aW9uSGFzQ2hhbmdlcyhjb2xsZWN0aW9uRW50cnkpXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFzQ2hhbmdlcyAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpIHtcclxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaGFzRWRpdFJlc291cmNlcyAmJiAoY29sbGVjdGlvbkVudHJ5Lmhhc0FkZGVkSXRlbXMoKSB8fCBjb2xsZWN0aW9uRW50cnkuaGFzUmVtb3ZlZEl0ZW1zKCkpKVxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHJcblx0XHRyZXR1cm4gY29sbGVjdGlvbkVudHJ5Lmhhc0l0ZW1FZGl0UmVzb3VyY2VzICYmIGNvbGxlY3Rpb25FbnRyeS5oYXNVcGRhdGVkSXRlbXMoKTtcclxuXHR9XHJcblxyXG5cdGlzTG9ja2FibGUgKCkge1xyXG5cdFx0aWYgKHRoaXMucm9vdEl0ZW0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnJvb3RJdGVtLmlzTG9ja2FibGUoKTtcclxuXHR9XHJcblxyXG5cdHNhdmUgKFxyXG5cdFx0Y2xvc2VUYWIgPSBmYWxzZSxcclxuXHRcdHBhcmFtZXRlcnM6IENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAgPSB7fSxcclxuXHRcdGJyZWFrVXBCeVBhcmVudD86IGJvb2xlYW4sXHJcblx0XHRvbkFmdGVyQ3JlYXRlQ2FsbGJhY2s/OiAoY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCkgPT4gdm9pZFxyXG5cdCkge1xyXG5cdFx0aWYgKHRoaXMuaXNTYXZpbmcpXHJcblx0XHRcdHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5yZWplY3QoKTtcclxuXHJcblx0XHR0aGlzLmlzU2F2aW5nID0gdHJ1ZTtcclxuXHJcblx0XHR0aGlzLmRldGVjdENoYW5nZXMoKTtcclxuXHRcdHRoaXMuZGlzYWJsZUNoYW5nZXNXYXRjaGVyKCk7XHJcblxyXG5cdFx0cmV0dXJuICh0aGlzLmlzTG9ja2FibGUoKSA/IHRoaXMubG9ja1NlcnZpY2UuZmV0Y2hMb2NrKDxJdGVtRW50cnk+IHRoaXMucm9vdEl0ZW0pIDogdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCkpLnRoZW4oXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5leGVjdXRlQ2FsbGJhY2tFdmVudCh0aGlzLmNhbGxiYWNrcy5vbkJlZm9yZVNhdmUsIGNhbGxiYWNrID0+IGNhbGxiYWNrKHRoaXMpLCBjbG9zZVRhYik7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgcmVxdWVzdFBhcmFtZXRlcnMgPSBleHRlbmQoe30sIHRoaXMudGFiUmVxdWVzdFBhcmFtZXRlcnMsIHBhcmFtZXRlcnMpO1xyXG5cclxuXHRcdFx0XHR0aGlzLnRhYlJlcXVlc3RQYXJhbWV0ZXJzID0ge307XHJcblxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LmNvbnN0cnVjdCgpLmV4ZWN1dGUoXHJcblx0XHRcdFx0XHR0aGlzLml0ZW1zLnRvQXJyYXkoKSxcclxuXHRcdFx0XHRcdHRoaXMuY29sbGVjdGlvbnMudG9BcnJheSgpLFxyXG5cdFx0XHRcdFx0cmVxdWVzdFBhcmFtZXRlcnMsXHJcblx0XHRcdFx0XHRicmVha1VwQnlQYXJlbnQsXHJcblx0XHRcdFx0XHRvbkFmdGVyQ3JlYXRlQ2FsbGJhY2tcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCkudGhlbihcclxuXHRcdFx0Y29udmVyc2lvbk1hcCA9PiB7XHJcblx0XHRcdFx0aWYgKHRoaXMuaXNMb2NrYWJsZSgpKVxyXG5cdFx0XHRcdFx0dGhpcy5sb2NrU2VydmljZS5jbGVhckxvY2soPEl0ZW1FbnRyeT4gdGhpcy5yb290SXRlbSk7XHJcblxyXG5cdFx0XHRcdHRoaXMuaGFzQ2hhbmdlcyA9IGZhbHNlO1xyXG5cclxuXHRcdFx0XHRpZiAoIWNsb3NlVGFiKVxyXG5cdFx0XHRcdFx0dGhpcy51cGRhdGVTaW5nbGVJdGVtcyhjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZUNhbGxiYWNrRXZlbnQoXHJcblx0XHRcdFx0XHR0aGlzLmNhbGxiYWNrcy5vblNhdmVTdWNjZXNzLFxyXG5cdFx0XHRcdFx0Y2FsbGJhY2sgPT4gY2FsbGJhY2sodGhpcywgY29udmVyc2lvbk1hcCksXHJcblx0XHRcdFx0XHRjbG9zZVRhYlxyXG5cdFx0XHRcdCkudGhlbihcclxuXHRcdFx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRcdFx0aWYgKCFjbG9zZVRhYilcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmVuYWJsZUNoYW5nZXNXYXRjaGVyKCk7XHJcblxyXG5cdFx0XHRcdFx0XHR0aGlzLmlzU2F2aW5nID0gZmFsc2U7XHJcblxyXG5cdFx0XHRcdFx0XHRyZXR1cm4gY29udmVyc2lvbk1hcDtcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCkuY2F0Y2goZXJyb3IgPT4ge1xyXG5cdFx0XHR0aGlzLmlzU2F2aW5nID0gZmFsc2U7XHJcblxyXG5cdFx0XHRyZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIucmVqZWN0KGVycm9yKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0b25CZWZvcmVTYXZlIChcclxuXHRcdGtleTogc3RyaW5nLFxyXG5cdFx0Y2FsbGJhY2s6IChsb2NhbENhY2hlOiBMb2NhbENhY2hlKSA9PiBhbnksXHJcblx0XHRjb25kaXRpb246IExvY2FsQ2FjaGVDYWxsYmFja0NvbmRpdGlvbiA9IExvY2FsQ2FjaGVDYWxsYmFja0NvbmRpdGlvbi5BbHdheXNcclxuXHQpOiAoKSA9PiB2b2lkIHtcclxuXHRcdGNvbnN0IGNhbGxiYWNrcyA9IHRoaXMuY2FsbGJhY2tzLm9uQmVmb3JlU2F2ZVtjb25kaXRpb25dO1xyXG5cclxuXHRcdGNhbGxiYWNrc1trZXldID0gY2FsbGJhY2s7XHJcblxyXG5cdFx0cmV0dXJuICgpID0+IGRlbGV0ZSBjYWxsYmFja3Nba2V5XTtcclxuXHR9XHJcblxyXG5cdG9uU2F2ZVN1Y2Nlc3MgKFxyXG5cdFx0a2V5OiBzdHJpbmcsXHJcblx0XHRjYWxsYmFjazogT25TYXZlQ2FsbGJhY2ssXHJcblx0XHRjb25kaXRpb246IExvY2FsQ2FjaGVDYWxsYmFja0NvbmRpdGlvbiA9IExvY2FsQ2FjaGVDYWxsYmFja0NvbmRpdGlvbi5BbHdheXNcclxuXHQpOiAoKSA9PiB2b2lkIHtcclxuXHRcdGNvbnN0IGNhbGxiYWNrcyA9IHRoaXMuY2FsbGJhY2tzLm9uU2F2ZVN1Y2Nlc3NbY29uZGl0aW9uXTtcclxuXHJcblx0XHRjYWxsYmFja3Nba2V5XSA9IGNhbGxiYWNrO1xyXG5cclxuXHRcdHJldHVybiAoKSA9PiBkZWxldGUgY2FsbGJhY2tzW2tleV07XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGV4ZWN1dGVDYWxsYmFja0V2ZW50PFQ+IChcclxuXHRcdGNhbGxiYWNrczogTG9jYWxDYWNoZUNhbGxiYWNrczxUPixcclxuXHRcdGV4ZWN1dGU6IChjYWxsYmFjazogVCkgPT4gYW55LFxyXG5cdFx0Y2xvc2VUYWI6IGJvb2xlYW5cclxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPGFueT4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZUNhbGxiYWNrcyhjYWxsYmFja3NbTG9jYWxDYWNoZUNhbGxiYWNrQ29uZGl0aW9uLkFsd2F5c10sIGV4ZWN1dGUpLnRoZW4oXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5leGVjdXRlQ2FsbGJhY2tzKFxyXG5cdFx0XHRcdFx0Y2FsbGJhY2tzW2Nsb3NlVGFiID8gTG9jYWxDYWNoZUNhbGxiYWNrQ29uZGl0aW9uLk9uQ2xvc2UgOiBMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24uU2tpcE9uQ2xvc2VdLFxyXG5cdFx0XHRcdFx0ZXhlY3V0ZVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZXhlY3V0ZUNhbGxiYWNrczxUPiAoY2FsbGJhY2tzOiB7W2tleTogc3RyaW5nXTogVH0sIGV4ZWN1dGU6IChjYWxsYmFjazogVCkgPT4gYW55KSB7XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBjYWxsYmFja3MpXHJcblx0XHRcdHJlc3VsdFtrZXldID0gZXhlY3V0ZShjYWxsYmFja3Nba2V5XSk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHJlc3VsdCk7XHJcblx0fVxyXG5cclxuXHRlbmFibGVDaGFuZ2VzV2F0Y2hlciAoKTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy5jaGFuZ2VzSW50ZXJ2YWwgIT09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS53YXJuKCdDaGFuZ2VzIHdhdGNoZXIgYWxyZWFkeSBydW5uaW5nIScsIHRoaXMpO1xyXG5cdFx0XHR0aGlzLmRpc2FibGVDaGFuZ2VzV2F0Y2hlcigpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuY2hhbmdlc0ludGVydmFsID0gc2V0SW50ZXJ2YWwoXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRpZiAoIXRoaXMuZGV0ZWN0Q2hhbmdlcygpKVxyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cclxuXHRcdFx0XHR0aGlzLmRpc2FibGVDaGFuZ2VzV2F0Y2hlcigpO1xyXG5cclxuXHRcdFx0XHRpZiAodGhpcy5pc0xvY2thYmxlKCkpXHJcblx0XHRcdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLmZldGNoTG9jayg8SXRlbUVudHJ5PiB0aGlzLnJvb3RJdGVtKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0MzAwMFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGRpc2FibGVDaGFuZ2VzV2F0Y2hlciAoKTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy5jaGFuZ2VzSW50ZXJ2YWwgPT09IG51bGwpXHJcblx0XHRcdHJldHVybjtcclxuXHJcblx0XHRjbGVhckludGVydmFsKHRoaXMuY2hhbmdlc0ludGVydmFsKTtcclxuXHRcdHRoaXMuY2hhbmdlc0ludGVydmFsID0gbnVsbDtcclxuXHR9XHJcblxyXG5cdG9uRGVhY3RpdmF0ZUl0ZW0gKGl0ZW1FbnRyeSkge1xyXG5cdFx0dGhpcy5jbGVhckl0ZW1FbnRyeShpdGVtRW50cnkpO1xyXG5cdFx0Ly8gdGhpcy5oYXNDaGFuZ2VzID0gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdG9uQWN0aXZhdGVJdGVtIChpdGVtRW50cnkpIHtcclxuXHRcdHRoaXMuaXRlbXMuYWRkKGl0ZW1FbnRyeSk7XHJcblx0XHQvLyB0aGlzLmhhc0NoYW5nZXMgPSB0cnVlO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcblxyXG5pbXBvcnQgeyBjcmVhdGVQYXRoIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMb2NrU2VydmljZSB7XHJcblx0bG9ja0l0ZW1zID0ge307XHJcblx0cHJvbWlzZXMgPSB7fTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2VcclxuXHQpIHtcclxuXHJcblx0fVxyXG5cclxuXHRnZXRWYWx1ZSAoaXRlbUVudHJ5OiBJdGVtRW50cnksIG1hcCkge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XHJcblxyXG5cdFx0aWYgKG1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcblx0XHRyZXR1cm4gbWFwW2l0ZW1UeXBlXVtpdGVtRW50cnkuaXRlbUlkXTtcclxuXHR9XHJcblxyXG5cdHNldFZhbHVlIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgdmFsdWUsIG1hcCkge1xyXG5cdFx0cmV0dXJuIGNyZWF0ZVBhdGgoXHJcblx0XHRcdG1hcCxcclxuXHRcdFx0W2l0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXHJcblx0XHRcdFt7fSwgdmFsdWVdXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Z2V0TG9ja3MgKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMubG9ja0l0ZW1zO1xyXG5cdH1cclxuXHJcblx0aGFzTG9jayAobG9ja1Rva2VuSWQpIHtcclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5sb2NrSXRlbXMpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5sb2NrSXRlbXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdFx0Y29uc3QgbG9ja0l0ZW0gPSB0aGlzLmxvY2tJdGVtc1tpdGVtVHlwZV1baXRlbUlkXTtcclxuXHJcblx0XHRcdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcclxuXHRcdFx0XHRpZiAoIWxvY2tJdGVtLmlzRm9yZWlnbiAmJiBsb2NrSXRlbS5pZCA9PSBsb2NrVG9rZW5JZClcclxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Ly8gc2hvdWxkIGJlIGZhc3QgKHdhdGNoZWQpXHJcblx0aXNMb2NrZWQgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSB7XHJcblx0XHRjb25zdCBsb2NrSXRlbSA9IHRoaXMuZ2V0VmFsdWUoaXRlbUVudHJ5LCB0aGlzLmxvY2tJdGVtcyk7XHJcblxyXG5cdFx0aWYgKGxvY2tJdGVtID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRyZXR1cm4gbG9ja0l0ZW0uaXNGb3JlaWduO1xyXG5cdH1cclxuXHJcblx0Z2V0TWVzc2FnZSAoaXRlbUVudHJ5KSB7XHJcblx0XHRjb25zdCBsb2NrSXRlbSA9IHRoaXMuZ2V0VmFsdWUoaXRlbUVudHJ5LCB0aGlzLmxvY2tJdGVtcyk7XHJcblxyXG5cdFx0aWYgKGxvY2tJdGVtID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG5cdFx0aWYgKCFsb2NrSXRlbS5pc0ZvcmVpZ24pXHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG5cdFx0cmV0dXJuIGxvY2tJdGVtLm1lc3NhZ2U7XHJcblx0fVxyXG5cclxuXHQvLyBkb2VzIG5vdCByZWplY3Qgd2hlbiBhIGZvcmVpZ24gbG9jayBpcyBlbmNvdW50ZXJlZFxyXG5cdC8vIGlzIGFsc28gdXNlZCBieSBkZWxldGVMb2NrXHJcblx0ZmV0Y2hDYWNoZWRMb2NrIChpdGVtRW50cnk6IEl0ZW1FbnRyeSkge1xyXG5cdFx0Y29uc3QgbG9jayA9IHRoaXMuZ2V0VmFsdWUoaXRlbUVudHJ5LCB0aGlzLmxvY2tJdGVtcyk7XHJcblxyXG5cdFx0aWYgKGxvY2sgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihsb2NrKTtcclxuXHJcblx0XHRjb25zdCBwcm9taXNlID0gdGhpcy5nZXRWYWx1ZShpdGVtRW50cnksIHRoaXMucHJvbWlzZXMpO1xyXG5cclxuXHRcdGlmIChwcm9taXNlICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBwcm9taXNlO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcclxuXHR9XHJcblxyXG5cdGZldGNoTG9jayAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcclxuXHRcdHJldHVybiB0aGlzLmZldGNoQ2FjaGVkTG9jayhpdGVtRW50cnkpLnRoZW4obG9ja0l0ZW0gPT4ge1xyXG5cdFx0XHRcdGlmIChsb2NrSXRlbSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0cmV0dXJuIGxvY2tJdGVtO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZXF1ZXN0TG9jayhpdGVtRW50cnkpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCkudGhlbihsb2NrSXRlbSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIGxvY2tJdGVtLmlzRm9yZWlnbiA/XHJcblx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3QobG9ja0l0ZW0ubWVzc2FnZSkgOlxyXG5cdFx0XHRcdFx0bG9ja0l0ZW0udG9rZW47XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHJlcXVlc3RMb2NrIChpdGVtRW50cnk6IEl0ZW1FbnRyeSkge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XHJcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xyXG5cclxuXHRcdGNvbnN0IHByb21pc2UgPSB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLmNyZWF0ZShcclxuXHRcdFx0J0xvY2t0b2tlbicsXHJcblx0XHRcdHRoaXMua2V5U2VydmljZS5nZXRMb2NhbElkKCksXHJcblx0XHRcdHtpdGVtdHlwZTogaXRlbVR5cGUsIGl0ZW06IGl0ZW1JZH1cclxuXHRcdCkudGhlbihcclxuXHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLnByb21pc2VzW2l0ZW1UeXBlXVtpdGVtSWRdO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5zZXRWYWx1ZShcclxuXHRcdFx0XHRcdGl0ZW1FbnRyeSxcclxuXHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoT2JqZWN0KFxyXG5cdFx0XHRcdFx0XHQnTG9ja3Rva2VuJyxcclxuXHRcdFx0XHRcdFx0cmVzcG9uc2UubGlua3MuTG9ja3Rva2VuWzBdXHJcblx0XHRcdFx0XHQpLFxyXG5cdFx0XHRcdFx0dGhpcy5sb2NrSXRlbXNcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9LCBlcnJvciA9PiB7XHJcblx0XHRcdFx0ZGVsZXRlIHRoaXMucHJvbWlzZXNbaXRlbVR5cGVdW2l0ZW1JZF07XHJcblxyXG5cdFx0XHRcdGlmIChlcnJvci5jb2RlID09PSAzMDEpIHtcclxuXHRcdFx0XHRcdHJldHVybiB0aGlzLnNldFZhbHVlKFxyXG5cdFx0XHRcdFx0XHRpdGVtRW50cnksXHJcblx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRpc0ZvcmVpZ246IHRydWUsXHJcblx0XHRcdFx0XHRcdFx0bWVzc2FnZTogZXJyb3IubWVzc2FnZVxyXG5cdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHR0aGlzLmxvY2tJdGVtc1xyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5yZWplY3QoZXJyb3IpO1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnNldFZhbHVlKGl0ZW1FbnRyeSwgcHJvbWlzZSwgdGhpcy5wcm9taXNlcyk7XHJcblx0fVxyXG5cclxuXHRkZWxldGVMb2NrIChpdGVtRW50cnkpIHtcclxuXHRcdHJldHVybiB0aGlzLmZldGNoQ2FjaGVkTG9jayhpdGVtRW50cnkpLnRoZW4oY2FjaGVkTG9jayA9PiB7XHJcblx0XHRcdFx0Ly8gdW5kZWZpbmVkOiBub3QgcmVxdWVzdGVkIHlldFxyXG5cclxuXHRcdFx0XHRpZiAoY2FjaGVkTG9jayA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cclxuXHRcdFx0XHRpZiAoY2FjaGVkTG9jay5pc0ZvcmVpZ24pIHtcclxuXHRcdFx0XHRcdHRoaXMuY2xlYXJMb2NrKGl0ZW1FbnRyeSk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5kZWxldGUoJ0xvY2t0b2tlbicsIGNhY2hlZExvY2suaWQpXHJcblx0XHRcdFx0XHQudGhlbihcclxuXHRcdFx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuY2xlYXJMb2NrKGl0ZW1FbnRyeSk7XHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Y2xlYXJMb2NrIChpdGVtRW50cnkpIHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xyXG5cclxuXHRcdGlmICh0aGlzLmxvY2tJdGVtc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdHJldHVybiBkZWxldGUgdGhpcy5sb2NrSXRlbXNbaXRlbVR5cGVdW2l0ZW1FbnRyeS5pdGVtSWRdO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUsIEl0ZW1DYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBBcGlSZXF1ZXN0SXRlbU1hcCwgSXRlbUlkLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IGhhc1Byb3BlcnRpZXMgfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuY29uc3QgRU1QVFlfRU5UUlkgPSB7fTtcclxuXHJcbmV4cG9ydCB0eXBlIE1vZHVsZUNoYW5nZXNDb21waWxhdGlvblJlc3VsdCA9IHtcclxuXHRpdGVtVHlwZTogSXRlbVR5cGUsXHJcblx0aXRlbUlkOiBJdGVtSWQsXHJcblx0aXRlbXM6IEFwaVJlcXVlc3RJdGVtTWFwXHJcbn07XHJcblxyXG5leHBvcnQgY2xhc3MgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uIHtcclxuXHRwYXJlbnRNYXA6IGFueSA9IHt9O1xyXG5cdGRlc3RpbmF0aW9uOiBBcGlSZXF1ZXN0SXRlbU1hcCA9IHt9O1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIHJvb3RJdGVtRW50cnk6IEl0ZW1FbnRyeSxcclxuXHRcdHByaXZhdGUgc2luZ2xlSXRlbUNhY2hlOiBJdGVtQ2FjaGUsXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlXHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzICgpOiBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25SZXN1bHQge1xyXG5cdFx0dGhpcy5wYXJlbnRNYXAgPSB0aGlzLmNyZWF0ZVBhcmVudE1hcCh0aGlzLnNpbmdsZUl0ZW1DYWNoZSk7XHJcblx0XHR0aGlzLnByb2Nlc3NJdGVtcyh0aGlzLnJvb3RJdGVtRW50cnkuaXRlbVR5cGUsIFt0aGlzLnJvb3RJdGVtRW50cnldLCB7fSk7XHJcblxyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0aXRlbVR5cGU6IHRoaXMucm9vdEl0ZW1FbnRyeS5pdGVtVHlwZSxcclxuXHRcdFx0aXRlbUlkOiB0aGlzLnJvb3RJdGVtRW50cnkuaXRlbUlkLFxyXG5cdFx0XHRpdGVtczogdGhpcy5kZXN0aW5hdGlvblxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY3JlYXRlUGFyZW50TWFwIChpdGVtQ2FjaGUpIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdGl0ZW1DYWNoZS5mb3JFYWNoKFxyXG5cdFx0XHRpdGVtRW50cnkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xyXG5cdFx0XHRcdGNvbnN0IHBhcmVudCA9IGl0ZW1FbnRyeS5wYXJlbnQ7XHJcblxyXG5cdFx0XHRcdGlmIChwYXJlbnQgPT09IG51bGwpIC8vIHdlIGRvbid0IGNhcmUgZm9yIGl0ZW1zIHRoYXQgYXJlIG5vdCBsaW5rZWQgdG8gdGhlIHJvb3QgaXRlbVxyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cclxuXHRcdFx0XHRjb25zdCBwYXJlbnRUeXBlID0gcGFyZW50Lml0ZW1UeXBlO1xyXG5cdFx0XHRcdGNvbnN0IHBhcmVudElkID0gcGFyZW50Lml0ZW1JZDtcclxuXHJcblx0XHRcdFx0aWYgKHJlc3VsdFtwYXJlbnRUeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0cmVzdWx0W3BhcmVudFR5cGVdID0ge307XHJcblxyXG5cdFx0XHRcdGxldCBtYXBFbnRyeSA9IHJlc3VsdFtwYXJlbnRUeXBlXTtcclxuXHJcblx0XHRcdFx0aWYgKG1hcEVudHJ5W3BhcmVudElkXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0bWFwRW50cnlbcGFyZW50SWRdID0ge307XHJcblxyXG5cdFx0XHRcdG1hcEVudHJ5ID0gbWFwRW50cnlbcGFyZW50SWRdO1xyXG5cclxuXHRcdFx0XHRpZiAobWFwRW50cnlbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRtYXBFbnRyeVtpdGVtVHlwZV0gPSBbXTtcclxuXHJcblx0XHRcdFx0bWFwRW50cnlbaXRlbVR5cGVdLnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwcm9jZXNzSXRlbXMgKGl0ZW1UeXBlLCBpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGxpbmtBY2N1bXVsYXRvcikge1xyXG5cdFx0aWYgKHRoaXMuZGVzdGluYXRpb25baXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHRoaXMuZGVzdGluYXRpb25baXRlbVR5cGVdID0ge307XHJcblxyXG5cdFx0aWYgKGxpbmtBY2N1bXVsYXRvcltpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0bGlua0FjY3VtdWxhdG9yW2l0ZW1UeXBlXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XHJcblxyXG5cdFx0XHQvLyBlYWNoIGl0ZW0gb25seSBoYXMgYSBzaW5nbGUgcGFyZW50LCBzbyB3ZSBjYW4gc2FmZWx5IGRvIHRoaXNcclxuXHRcdFx0aWYgKHRoaXMuZGVzdGluYXRpb25baXRlbVR5cGVdW2l0ZW1JZF0gIT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGxpbmtBY2N1bXVsYXRvcltpdGVtVHlwZV0ucHVzaChpdGVtSWQpO1xyXG5cclxuXHRcdFx0dGhpcy5kZXN0aW5hdGlvbltpdGVtVHlwZV1baXRlbUlkXSA9IHRoaXMucHJvY2Vzc0l0ZW0oaXRlbUVudHJ5KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcHJvY2Vzc0l0ZW0gKGl0ZW1FbnRyeSkge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XHJcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xyXG5cdFx0Y29uc3QgY2hpbGRJdGVtcyA9IHRoaXMuZ2V0SXRlbXNCeVBhcmVudChpdGVtVHlwZSwgaXRlbUlkKTtcclxuXHRcdGNvbnN0IGNoaWxkQ29sbGVjdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25DYWNoZS5nZXRDb2xsZWN0aW9uc0J5UGFyZW50KGl0ZW1UeXBlLCBpdGVtSWQpO1xyXG5cdFx0Y29uc3QgdmFsdWVzID0gaXRlbUVudHJ5LmZvcm1hdFJlcXVlc3QoKTtcclxuXHRcdGNvbnN0IGxpbmtzID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjaGlsZFR5cGUgaW4gY2hpbGRJdGVtcylcclxuXHRcdFx0dGhpcy5wcm9jZXNzSXRlbXMoY2hpbGRUeXBlLCBjaGlsZEl0ZW1zW2NoaWxkVHlwZV0sIGxpbmtzKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiBjaGlsZENvbGxlY3Rpb25zKSB7XHJcblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkub3B0aW9ucy5xdWVyeSAhPT0gbnVsbClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdHRoaXMucHJvY2Vzc0l0ZW1zKGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZSwgY29sbGVjdGlvbkVudHJ5Lml0ZW1zLCBsaW5rcyk7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgaGFzVmFsdWVzID0gaGFzUHJvcGVydGllcyh2YWx1ZXMpO1xyXG5cdFx0Y29uc3QgaGFzTGlua3MgPSBoYXNQcm9wZXJ0aWVzKGxpbmtzKTtcclxuXHJcblx0XHRpZiAoaGFzVmFsdWVzICYmIGhhc0xpbmtzKVxyXG5cdFx0XHRyZXR1cm4ge3ZhbHVlczogdmFsdWVzLCBsaW5rczogbGlua3N9O1xyXG5cclxuXHRcdGlmIChoYXNWYWx1ZXMpXHJcblx0XHRcdHJldHVybiB7dmFsdWVzOiB2YWx1ZXN9O1xyXG5cclxuXHRcdGlmIChoYXNMaW5rcylcclxuXHRcdFx0cmV0dXJuIHtsaW5rczogbGlua3N9O1xyXG5cclxuXHRcdHJldHVybiBFTVBUWV9FTlRSWTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0SXRlbXNCeVBhcmVudCAocGFyZW50VHlwZSwgcGFyZW50SWQpIHtcclxuXHRcdGNvbnN0IG1hcEVudHJ5ID0gdGhpcy5wYXJlbnRNYXBbcGFyZW50VHlwZV07XHJcblxyXG5cdFx0aWYgKG1hcEVudHJ5ID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB7fTtcclxuXHJcblx0XHRpZiAobWFwRW50cnlbcGFyZW50SWRdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB7fTtcclxuXHJcblx0XHRyZXR1cm4gbWFwRW50cnlbcGFyZW50SWRdO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuXHJcbmltcG9ydCB7IEFwaUZvcm1hdHRlciB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBFbnRyeVBhcmVudE51bGwsIEZpZWxkTWFwLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IGhhc1Byb3BlcnRpZXMsIGluQXJyYXkgfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuY29uc3QgTUFZQkUgPSAnbWF5YmUnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXJ5TWF0Y2hlciB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcclxuXHRcdHB1YmxpYyBpdGVtVHlwZTogSXRlbVR5cGUsXHJcblx0XHRwdWJsaWMgZmllbGRzOiBGaWVsZE1hcCxcclxuXHRcdHB1YmxpYyBwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCA9IG51bGxcclxuXHQpIHtcclxuXHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGNvbXBhcmVWYWx1ZXMgKHZhbHVlLCBxdWVyeVZhbHVlKSB7XHJcblx0XHRpZiAobW9tZW50LmlzTW9tZW50KHF1ZXJ5VmFsdWUpKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5hcGlGb3JtYXR0ZXIuY29tcGFyZU1vbWVudE9iamVjdHMocXVlcnlWYWx1ZSwgdmFsdWUpO1xyXG5cclxuXHRcdGlmIChtb21lbnQuaXNEdXJhdGlvbihxdWVyeVZhbHVlKSlcclxuXHRcdFx0cmV0dXJuIHRoaXMuYXBpRm9ybWF0dGVyLmNvbXBhcmVEdXJhdGlvbnMocXVlcnlWYWx1ZSwgdmFsdWUpO1xyXG5cclxuXHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXHJcblx0XHRyZXR1cm4gcXVlcnlWYWx1ZSA9PSB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdG1hdGNoUXVlcnkgKHF1ZXJ5OiBhbnkpOiBib29sZWFuIHwgc3RyaW5nIHtcclxuXHRcdGlmIChxdWVyeS5zZWFyY2ggIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIE1BWUJFO1xyXG5cclxuXHRcdGlmIChxdWVyeS5jdXN0b20gIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIE1BWUJFO1xyXG5cclxuXHRcdGlmIChxdWVyeS5saW5rZWRUbyAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5tYXRjaExpbmtlZFRvUXVlcnkocXVlcnkpO1xyXG5cclxuXHRcdGlmIChxdWVyeS5jb25kaXRpb25zICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzLm1hdGNoQ29tcGxleFF1ZXJ5KHF1ZXJ5KTtcclxuXHJcblx0XHRpZiAocXVlcnkua2V5ICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzLm1hdGNoU2ltcGxlUXVlcnkodGhpcy5maWVsZHNbcXVlcnkua2V5XSwgcXVlcnkpO1xyXG5cclxuXHRcdGlmICghaGFzUHJvcGVydGllcyhxdWVyeSkpXHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cclxuXHRcdHRocm93IG5ldyBFcnJvcigncXVlcnlNYXRjaGVyOiBVbnN1cHBvcnRlZCBxdWVyeSEgUGFyc2VkPycpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBtYXRjaExpbmtlZFRvUXVlcnkgKHF1ZXJ5KSB7XHJcblx0XHRpZiAocXVlcnkucmV2ZXJzZSlcclxuXHRcdFx0cmV0dXJuIE1BWUJFO1xyXG5cclxuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xyXG5cdFx0bGV0IG1hdGNoO1xyXG5cclxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXHJcblx0XHRcdG1hdGNoID0gZmFsc2U7XHJcblx0XHRlbHNlIGlmIChxdWVyeS5saW5rZWRUbyAhPT0gcGFyZW50Lml0ZW1UeXBlKVxyXG5cdFx0XHRtYXRjaCA9IGZhbHNlO1xyXG5cdFx0ZWxzZVxyXG5cdFx0XHRtYXRjaCA9IHRoaXMubWF0Y2hTaW1wbGVRdWVyeShwYXJlbnQuaXRlbUlkLCBxdWVyeS5xdWVyeSk7XHJcblxyXG5cdFx0aWYgKG1hdGNoID09PSBNQVlCRSlcclxuXHRcdFx0cmV0dXJuIE1BWUJFO1xyXG5cclxuXHRcdHJldHVybiBxdWVyeS5ub3QgPyAhbWF0Y2ggOiBtYXRjaDtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgbWF0Y2hDb21wbGV4UXVlcnkgKHF1ZXJ5KSB7XHJcblx0XHRjb25zdCBjb25kaXRpb25zID0gcXVlcnkuY29uZGl0aW9ucztcclxuXHJcblx0XHRsZXQgcmVzdWx0O1xyXG5cdFx0bGV0IHRlcm1pbmFsO1xyXG5cclxuXHRcdHN3aXRjaCAocXVlcnkub3BlcmF0b3IpIHtcclxuXHRcdFx0Y2FzZSAnQU5EJzpcclxuXHRcdFx0XHRyZXN1bHQgPSB0cnVlO1xyXG5cdFx0XHRcdHRlcm1pbmFsID0gZmFsc2U7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgJ09SJzpcclxuXHRcdFx0XHRyZXN1bHQgPSBmYWxzZTtcclxuXHRcdFx0XHR0ZXJtaW5hbCA9IHRydWU7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdxdWVyeU1hdGNoZXI6IFVuc3VwcG9ydGVkIG9wZXJhdG9yJyk7XHJcblx0XHR9XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb25kaXRpb24gb2YgY29uZGl0aW9ucykge1xyXG5cdFx0XHRjb25zdCBtYXRjaCA9IHRoaXMubWF0Y2hRdWVyeShjb25kaXRpb24pO1xyXG5cclxuXHRcdFx0aWYgKG1hdGNoID09PSB0ZXJtaW5hbClcclxuXHRcdFx0XHRyZXR1cm4gdGVybWluYWw7XHJcblxyXG5cdFx0XHRpZiAobWF0Y2ggPT09IE1BWUJFKVxyXG5cdFx0XHRcdHJlc3VsdCA9IE1BWUJFO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIG1hdGNoU2ltcGxlUXVlcnkgKHZhbHVlLCBxdWVyeSkge1xyXG5cdFx0Y29uc3Qga2V5ID0gcXVlcnkua2V5O1xyXG5cdFx0bGV0IHF1ZXJ5VmFsdWUgPSBxdWVyeS52YWx1ZTtcclxuXHJcblx0XHRpZiAoIWhhc1Byb3BlcnRpZXMocXVlcnkpKSAvLyBDb3VsZCBiZSBsaW5rZWRUbyBhbiBlbXB0eSBvYmplY3RcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblxyXG5cdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0Y29uc29sZS53YXJuKCdSZXF1aXJlZCBmaWVsZCcsIGtleSwgJ25vdCBmb3VuZCBmb3InLCB0aGlzLml0ZW1UeXBlKTtcclxuXHRcdFx0cmV0dXJuIE1BWUJFO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChxdWVyeVZhbHVlID09PSAnTk9XJylcclxuXHRcdFx0cXVlcnlWYWx1ZSA9IG1vbWVudCgpO1xyXG5cclxuXHRcdHN3aXRjaCAocXVlcnkuY29tcGFyYXRvcikge1xyXG5cdFx0XHRjYXNlICc9JzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb21wYXJlVmFsdWVzKHZhbHVlLCBxdWVyeVZhbHVlKTtcclxuXHRcdFx0Y2FzZSAnIT0nOlxyXG5cdFx0XHRcdHJldHVybiAhdGhpcy5jb21wYXJlVmFsdWVzKHZhbHVlLCBxdWVyeVZhbHVlKTtcclxuXHRcdFx0Y2FzZSAnPCc6XHJcblx0XHRcdFx0cmV0dXJuIHZhbHVlIDwgcXVlcnlWYWx1ZTtcclxuXHRcdFx0Y2FzZSAnPD0nOlxyXG5cdFx0XHRcdHJldHVybiB2YWx1ZSA8PSBxdWVyeVZhbHVlO1xyXG5cdFx0XHRjYXNlICc+JzpcclxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPiBxdWVyeVZhbHVlO1xyXG5cdFx0XHRjYXNlICc+PSc6XHJcblx0XHRcdFx0cmV0dXJuIHZhbHVlID49IHF1ZXJ5VmFsdWU7XHJcblx0XHRcdGNhc2UgJ0lOJzpcclxuXHRcdFx0XHRyZXR1cm4gaW5BcnJheSh2YWx1ZSwgcXVlcnlWYWx1ZSk7XHJcblx0XHRcdGNhc2UgJ05PVCBJTic6XHJcblx0XHRcdFx0cmV0dXJuICFpbkFycmF5KHZhbHVlLCBxdWVyeVZhbHVlKTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ3F1ZXJ5TWF0Y2hlcjogVW5zdXBwb3J0ZWQgY29tcGFyYXRvcjogJyArIHF1ZXJ5LmNvbXBhcmF0b3IgKyAnIGluIHF1ZXJ5ICcgKyBxdWVyeSk7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5cclxuaW1wb3J0IHsgZ2V0Rmlyc3RQcm9wZXJ0eSB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5lbnVtIENPTlNUQU5UUyB7XHJcblx0T0JKID0gMCxcclxuXHRTVFIgPSAxLFxyXG5cdFNFUCA9ICc6J1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlcnlQYXJzZXIge1xyXG5cdHF1ZXJ5OiBhbnk7XHJcblx0cGFyYW1ldGVyczogYW55O1xyXG5cclxuXHRjb25zdHJ1Y3RvciAocXVlcnksIHBhcmFtZXRlcnM/KSB7XHJcblx0XHR0aGlzLnF1ZXJ5ID0gcXVlcnk7XHJcblx0XHR0aGlzLnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwcm9jZXNzVmFsdWUgKHZhbHVlKSB7XHJcblx0XHQvLyBhbGdvcml0aG0gaXMgbm90IGltcG9ydGFudCwgYXMgbG9uZyBhcyBhbGwgYXJyYXlzIGFyZSBzb3J0ZWQgdGhlIHNhbWUgd2F5XHJcblx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpXHJcblx0XHRcdHJldHVybiB2YWx1ZS5zbGljZSgpLnNvcnQoKTtcclxuXHJcblx0XHRpZiAobW9tZW50LmlzTW9tZW50KHZhbHVlKSlcclxuXHRcdFx0cmV0dXJuIG1vbWVudCh2YWx1ZSk7XHJcblxyXG5cdFx0aWYgKG1vbWVudC5pc0R1cmF0aW9uKHZhbHVlKSlcclxuXHRcdFx0cmV0dXJuIG1vbWVudC5kdXJhdGlvbih2YWx1ZSk7XHJcblxyXG5cdFx0cmV0dXJuIHZhbHVlO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjb21wYXJlUGFyc2VkUXVlcmllcyAoYSwgYikge1xyXG5cdFx0aWYgKGFbQ09OU1RBTlRTLlNUUl0gPT09IGJbQ09OU1RBTlRTLlNUUl0pXHJcblx0XHRcdHJldHVybiAwO1xyXG5cclxuXHRcdHJldHVybiBhW0NPTlNUQU5UUy5TVFJdID4gYltDT05TVEFOVFMuU1RSXSA/IDEgOiAtMTtcclxuXHR9XHJcblxyXG5cdHBhcnNlIChxdWVyeSA9IHRoaXMucXVlcnkpIHtcclxuXHRcdGlmIChxdWVyeS5saW5rZWRUbyAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZUxpbmtlZFRvUXVlcnkoXHJcblx0XHRcdFx0cXVlcnkubGlua2VkVG8sXHJcblx0XHRcdFx0cXVlcnkucXVlcnksXHJcblx0XHRcdFx0cXVlcnkucmV2ZXJzZSxcclxuXHRcdFx0XHRxdWVyeS5ub3RcclxuXHRcdFx0KTtcclxuXHJcblx0XHRpZiAocXVlcnkubm90ICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHRocm93IG5ldyBFcnJvcigncXVlcnlQYXJzZXI6IFwiTm90XCIgbm90IHN1cHBvcnRlZCcpO1xyXG5cclxuXHRcdGlmIChxdWVyeS5jdXN0b20gIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXMucGFyc2VDdXN0b21RdWVyeShcclxuXHRcdFx0XHRxdWVyeS5jdXN0b20sXHJcblx0XHRcdFx0cXVlcnkucGFyYW1ldGVyc1xyXG5cdFx0XHQpO1xyXG5cclxuXHRcdGlmIChxdWVyeS5zZWFyY2ggIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXMucGFyc2VTZWFyY2hRdWVyeShxdWVyeS5zZWFyY2gpO1xyXG5cclxuXHRcdGlmIChxdWVyeS5jb25kaXRpb25zICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlQ29tcGxleFF1ZXJ5KFxyXG5cdFx0XHRcdHF1ZXJ5LmNvbmRpdGlvbnMsXHJcblx0XHRcdFx0cXVlcnkub3BlcmF0b3JcclxuXHRcdFx0KTtcclxuXHJcblx0XHRpZiAocXVlcnkua2V5ICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlU2ltcGxlUXVlcnkoXHJcblx0XHRcdFx0cXVlcnkua2V5LFxyXG5cdFx0XHRcdHF1ZXJ5LnZhbHVlLFxyXG5cdFx0XHRcdHF1ZXJ5LmNvbXBhcmF0b3JcclxuXHRcdFx0KTtcclxuXHJcblx0XHRjb25zdCBrZXkgPSBnZXRGaXJzdFByb3BlcnR5KHF1ZXJ5KTtcclxuXHJcblx0XHRpZiAoa2V5ID09PSBudWxsKVxyXG5cdFx0XHRyZXR1cm4gW3t9LCAne30nXTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wYXJzZVNpbXBsZVF1ZXJ5KGtleSwgcXVlcnlba2V5XSk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHBhcnNlU2VhcmNoUXVlcnkgKHZhbHVlKSB7XHJcblx0XHR2YWx1ZSA9IHRoaXMuZm9ybWF0VmFsdWUodmFsdWUpO1xyXG5cclxuXHRcdHJldHVybiBbXHJcblx0XHRcdHtzZWFyY2g6IHZhbHVlW0NPTlNUQU5UUy5PQkpdfSxcclxuXHRcdFx0J1snICsgJ3NlYXJjaCcgKyBDT05TVEFOVFMuU0VQICsgdmFsdWVbQ09OU1RBTlRTLlNUUl0gKyAnXSdcclxuXHRcdF07XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHBhcnNlQ3VzdG9tUXVlcnkgKGN1c3RvbSwgcGFyYW1ldGVycykge1xyXG5cdFx0aWYgKHBhcmFtZXRlcnMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIFtcclxuXHRcdFx0XHR7Y3VzdG9tOiBjdXN0b219LFxyXG5cdFx0XHRcdCdbJyArIGN1c3RvbSArICddJ1xyXG5cdFx0XHRdO1xyXG5cclxuXHRcdGNvbnN0IHBhcnNlZFBhcmFtZXRlcnMgPSB0aGlzLnBhcnNlQ3VzdG9tUGFyYW1ldGVycyhwYXJhbWV0ZXJzKTtcclxuXHJcblx0XHRyZXR1cm4gW1xyXG5cdFx0XHR7Y3VzdG9tOiBjdXN0b20sIHBhcmFtZXRlcnM6IHBhcnNlZFBhcmFtZXRlcnNbQ09OU1RBTlRTLk9CSl19LFxyXG5cdFx0XHQnWycgKyBjdXN0b20gKyBDT05TVEFOVFMuU0VQICsgcGFyc2VkUGFyYW1ldGVyc1tDT05TVEFOVFMuU1RSXSArICddJ1xyXG5cdFx0XTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcGFyc2VDdXN0b21QYXJhbWV0ZXJzIChwYXJhbWV0ZXJzKSB7XHJcblx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocGFyYW1ldGVycykuc29ydCgpO1xyXG5cclxuXHRcdGNvbnN0IHF1ZXJ5ID0ge307XHJcblx0XHRsZXQgc3RyaW5nID0gJyc7XHJcblxyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGtleSA9IGtleXNbaV07XHJcblx0XHRcdGNvbnN0IHZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZShwYXJhbWV0ZXJzW2tleV0pO1xyXG5cclxuXHRcdFx0cXVlcnlba2V5XSA9IHZhbHVlW0NPTlNUQU5UUy5PQkpdO1xyXG5cclxuXHRcdFx0aWYgKGkgPiAwKVxyXG5cdFx0XHRcdHN0cmluZyArPSBDT05TVEFOVFMuU0VQO1xyXG5cclxuXHRcdFx0c3RyaW5nICs9IHZhbHVlW0NPTlNUQU5UUy5TVFJdO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBbcXVlcnksIHN0cmluZ107XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHBhcnNlU2ltcGxlUXVlcnkgKGtleSwgdmFsdWUsIGNvbXBhcmF0b3I/KSB7XHJcblx0XHR2YWx1ZSA9IHRoaXMuZm9ybWF0VmFsdWUodmFsdWUpO1xyXG5cclxuXHRcdGlmIChjb21wYXJhdG9yID09PSB1bmRlZmluZWQpXHJcblx0XHRcdGNvbXBhcmF0b3IgPSBBcnJheS5pc0FycmF5KHZhbHVlW0NPTlNUQU5UUy5PQkpdKSA/ICdJTicgOiAnPSc7XHJcblxyXG5cdFx0cmV0dXJuIFtcclxuXHRcdFx0e2tleToga2V5LCB2YWx1ZTogdmFsdWVbQ09OU1RBTlRTLk9CSl0sIGNvbXBhcmF0b3I6IGNvbXBhcmF0b3J9LFxyXG5cdFx0XHQnWycgKyBjb21wYXJhdG9yICsgQ09OU1RBTlRTLlNFUCArIGtleSArIENPTlNUQU5UUy5TRVAgKyB2YWx1ZVtDT05TVEFOVFMuU1RSXSArICddJ1xyXG5cdFx0XTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcGFyc2VMaW5rZWRUb1F1ZXJ5IChsaW5rZWRUbywgcXVlcnksIHJldmVyc2UsIG5vdCkge1xyXG5cdFx0aWYgKHF1ZXJ5ID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHF1ZXJ5ID0ge307XHJcblxyXG5cdFx0aWYgKHJldmVyc2UgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV2ZXJzZSA9IGZhbHNlO1xyXG5cclxuXHRcdGlmIChub3QgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0bm90ID0gZmFsc2U7XHJcblxyXG5cdFx0Y29uc3QgcGFyc2VkUXVlcnkgPSB0aGlzLnBhcnNlKHF1ZXJ5KTtcclxuXHJcblx0XHRyZXR1cm4gW1xyXG5cdFx0XHR7bGlua2VkVG86IGxpbmtlZFRvLCBxdWVyeTogcGFyc2VkUXVlcnlbQ09OU1RBTlRTLk9CSl0sIHJldmVyc2U6IHJldmVyc2UsIG5vdDogbm90fSxcclxuXHRcdFx0J1snICsgJ2xpbmtlZFRvJyArIENPTlNUQU5UUy5TRVAgKyBsaW5rZWRUbyArIENPTlNUQU5UUy5TRVAgKyBwYXJzZWRRdWVyeVtDT05TVEFOVFMuU1RSXSArIENPTlNUQU5UUy5TRVAgKyByZXZlcnNlICsgQ09OU1RBTlRTLlNFUCArIG5vdCArICddJ1xyXG5cdFx0XTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcGFyc2VDb21wbGV4UXVlcnkgKGNvbmRpdGlvbnMsIG9wZXJhdG9yKSB7XHJcblx0XHRpZiAob3BlcmF0b3IgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0b3BlcmF0b3IgPSAnQU5EJztcclxuXHRcdGVsc2VcclxuXHRcdFx0b3BlcmF0b3IgPSBvcGVyYXRvci50b1VwcGVyQ2FzZSgpO1xyXG5cclxuXHRcdGNvbnN0IHBhcnNlZENvbmRpdGlvbnMgPSB0aGlzLnBhcnNlQ29uZGl0aW9ucyhjb25kaXRpb25zKTtcclxuXHJcblx0XHRyZXR1cm4gW1xyXG5cdFx0XHR7Y29uZGl0aW9uczogcGFyc2VkQ29uZGl0aW9uc1tDT05TVEFOVFMuT0JKXSwgb3BlcmF0b3I6IG9wZXJhdG9yfSxcclxuXHRcdFx0J1snICsgb3BlcmF0b3IgKyBwYXJzZWRDb25kaXRpb25zW0NPTlNUQU5UUy5TVFJdICsgJ10nXHJcblx0XHRdO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwYXJzZUNvbmRpdGlvbnMgKGNvbmRpdGlvbnMpIHtcclxuXHRcdGxldCBwYXJzZWRDb25kaXRpb25zOiBvYmplY3RbXSA9IFtdO1xyXG5cdFx0Y29uc3QgcXVlcnk6IG9iamVjdFtdID0gW107XHJcblx0XHRsZXQgc3RyaW5nID0gJyc7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb25kaXRpb24gb2YgY29uZGl0aW9ucylcclxuXHRcdFx0cGFyc2VkQ29uZGl0aW9ucy5wdXNoKHRoaXMucGFyc2UoY29uZGl0aW9uKSk7XHJcblxyXG5cdFx0cGFyc2VkQ29uZGl0aW9ucyA9IHBhcnNlZENvbmRpdGlvbnMuc29ydCgoYSwgYikgPT4gdGhpcy5jb21wYXJlUGFyc2VkUXVlcmllcyhhLCBiKSk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBwYXJzZWRDb25kaXRpb24gb2YgcGFyc2VkQ29uZGl0aW9ucykge1xyXG5cdFx0XHRxdWVyeS5wdXNoKHBhcnNlZENvbmRpdGlvbltDT05TVEFOVFMuT0JKXSk7XHJcblx0XHRcdHN0cmluZyArPSBwYXJzZWRDb25kaXRpb25bQ09OU1RBTlRTLlNUUl07XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIFtxdWVyeSwgc3RyaW5nXTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZm9ybWF0VmFsdWUgKHZhbHVlKSB7XHJcblx0XHRsZXQgcHJvY2Vzc2VkVmFsdWU7XHJcblxyXG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUuY2hhckF0KDApID09PSAnJicpIHtcclxuXHRcdFx0Y29uc3Qga2V5ID0gdmFsdWUuc3Vic3RyaW5nKDEpO1xyXG5cclxuXHRcdFx0dmFsdWUgPSB0aGlzLnBhcmFtZXRlcnNba2V5XTtcclxuXHJcblx0XHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcigncXVlcnlQYXJzZXI6IFVuZGVmaW5lZCB0ZW1wbGF0ZSBwYXJhbWV0ZXIgXFwnJyArIGtleSArICdcXCcnKTtcclxuXHJcblx0XHRcdHByb2Nlc3NlZFZhbHVlID0gdGhpcy5wcm9jZXNzVmFsdWUodmFsdWUpO1xyXG5cclxuXHRcdFx0cmV0dXJuIFtwcm9jZXNzZWRWYWx1ZSwga2V5ICsgJz4nICsgdmFsdWVdO1xyXG5cdFx0fVxyXG5cclxuXHRcdHByb2Nlc3NlZFZhbHVlID0gdGhpcy5wcm9jZXNzVmFsdWUodmFsdWUpO1xyXG5cclxuXHRcdHJldHVybiBbcHJvY2Vzc2VkVmFsdWUsICcnICsgcHJvY2Vzc2VkVmFsdWVdO1xyXG5cdH1cclxufVxyXG4iLCJleHBvcnQgY2xhc3MgUXVlcnlTZXJ2aWNlIHtcclxuXHRjb25zdHJ1Y3RvciAoKSB7XHJcblx0fVxyXG5cclxuXHRhZGRBbmRDb25kaXRpb24gKHF1ZXJ5LCBjb25kaXRpb24pIHtcclxuXHRcdGlmIChxdWVyeS5jb25kaXRpb25zID09PSB1bmRlZmluZWQgfHwgcXVlcnkub3BlcmF0b3IgPT09ICdvcicpXHJcblx0XHRcdHJldHVybiB7Y29uZGl0aW9uczogW3F1ZXJ5LCBjb25kaXRpb25dfTtcclxuXHJcblx0XHQvLyB3ZSBoYXZlIGFuICdhbmQnIGNvbmRpdGlvblxyXG5cdFx0cmV0dXJuIHtjb25kaXRpb25zOiBxdWVyeS5jb25kaXRpb25zLmNvbmNhdChjb25kaXRpb24pfTtcclxuXHR9XHJcblxyXG5cdGFkZE9yQ29uZGl0aW9uIChxdWVyeSwgY29uZGl0aW9uKSB7XHJcblx0XHRpZiAocXVlcnkub3BlcmF0b3IgPT09ICdvcicpXHJcblx0XHRcdHJldHVybiB7Y29uZGl0aW9uczogcXVlcnkuY29uZGl0aW9ucy5jb25jYXQoY29uZGl0aW9uKX07XHJcblxyXG5cdFx0Ly8gd2UgaGF2ZSBhbiAnYW5kJyBjb25kaXRpb25cclxuXHRcdHJldHVybiB7Y29uZGl0aW9uczogW3F1ZXJ5LCBjb25kaXRpb25dLCBvcGVyYXRvcjogJ29yJ307XHJcblx0fVxyXG5cclxuXHRhZGRQYXJlbnRDb25kaXRpb24gKHF1ZXJ5LCBwYXJlbnQpIHtcclxuXHRcdGxldCBsaW5rZWRUb1F1ZXJ5O1xyXG5cclxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXHJcblx0XHRcdHJldHVybiBxdWVyeTtcclxuXHJcblx0XHRsaW5rZWRUb1F1ZXJ5ID0ge2xpbmtlZFRvOiBwYXJlbnQuaXRlbVR5cGUsIHF1ZXJ5OiBwYXJlbnQuaXRlbUlkfTtcclxuXHJcblx0XHRyZXR1cm4gcXVlcnkgPT09IG51bGwgPyBsaW5rZWRUb1F1ZXJ5IDogdGhpcy5hZGRBbmRDb25kaXRpb24ocXVlcnksIGxpbmtlZFRvUXVlcnkpO1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlTm90SW4gKGlkQXJyYXkpIHtcclxuXHRcdHJldHVybiB7Y29tcGFyYXRvcjogJ05PVCBJTicsIGtleTogJ2lkJywgdmFsdWU6IGlkQXJyYXl9O1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2x1bW5TZXQsIENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQXBpUmVxdWVzdENvbHVtbnMgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgUmVxdWVzdENvbHVtbkV4cGFuc2lvbiB7XHJcblx0cHJpdmF0ZSBjb2x1bW5zOiB7W2l0ZW1UeXBlOiBzdHJpbmddOiBBcGlSZXF1ZXN0Q29sdW1uc30gPSB7fTtcclxuXHRwcml2YXRlIGNvbHVtblNldElkTWFwOiB7W2NvbHVtblNldElkOiBudW1iZXJdOiBib29sZWFufSA9IHt9O1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWxcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdGV4cGFuZCAoY29sdW1uU2V0OiBDb2x1bW5TZXQpIHtcclxuXHRcdGlmICh0aGlzLmNvbHVtblNldElkTWFwW2NvbHVtblNldC5pZF0pXHJcblx0XHRcdHJldHVybjtcclxuXHJcblx0XHRjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBjb2x1bW5TZXQuaXRlbVR5cGU7XHJcblxyXG5cdFx0aWYgKGNvbHVtbnNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdGNvbHVtbnNbaXRlbVR5cGVdID0gW107XHJcblxyXG5cdFx0Y29sdW1uc1tpdGVtVHlwZV0gPSB0aGlzLmNvbHVtblV0aWxcclxuXHRcdFx0Lm1lcmdlUmVxdWVzdENvbHVtbnMoY29sdW1uc1tpdGVtVHlwZV0sIGNvbHVtblNldC5yZXF1ZXN0KVxyXG5cdFx0XHQubWVyZ2VkO1xyXG5cclxuXHRcdHRoaXMuY29sdW1uU2V0SWRNYXBbY29sdW1uU2V0LmlkXSA9IHRydWU7XHJcblx0fVxyXG5cclxuXHRnZXQgKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuY29sdW1ucztcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQXBpRm9ybWF0dGVyLCBDb2xsZWN0aW9uSGFuZGxlciwgSXRlbUhhbmRsZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHtcclxuXHRDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdENvbHVtblNldEZhY3RvcnksXHJcblx0SXRlbUVudHJ5RmFjdG9yeSxcclxuXHRSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxyXG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7XHJcblx0Q29sbGVjdGlvbk1hdGNoUmVzdWx0LFxyXG5cdEV4dGVuZGVkQ29sbGVjdGlvbk1hdGNoUmVzdWx0LCBGaWVsZE1hcCxcclxuXHRHcm91cGVkRXh0ZW5kZWRDb2xsZWN0aW9uTWF0Y2hSZXN1bHQsXHJcblx0SXRlbUlkLFxyXG5cdFByb21pc2VJbnRlcmZhY2VcclxufSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU29ja2V0TWVzc2FnZUhhbmRsZXIge1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGl0ZW1FbnRyeUZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcclxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgcmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2VcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdG9uTWVzc2FnZVJlY2VpdmVkIChtZXNzYWdlOiBhbnkpOiBhbnkge1xyXG5cdFx0c3dpdGNoIChtZXNzYWdlLmJvZHkuZXZlbnRUeXBlKSB7XHJcblx0XHRcdGNhc2UgJ3VwZGF0ZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlVXBkYXRlKG1lc3NhZ2UpO1xyXG5cdFx0XHRjYXNlICdjcmVhdGUnOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmhhbmRsZUNyZWF0ZShtZXNzYWdlKTtcclxuXHRcdFx0Y2FzZSAnZGVsZXRlJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVEZWxldGUobWVzc2FnZSk7XHJcblx0XHRcdGNhc2UgJ2xpbmtUbyc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlTGlua01vdmUoLyogbWVzc2FnZSAqLyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRmb3JtYXRNZXNzYWdlVmFsdWVzICh2YWx1ZXMsIGNvbHVtbnMpOiBGaWVsZE1hcCB7XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIGNvbHVtbnMpXHJcblx0XHRcdHJlc3VsdFtjb2x1bW5JZF0gPSB0aGlzLmFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZVZhbHVlKGNvbHVtbnNbY29sdW1uSWRdLnR5cGUsIHZhbHVlc1tjb2x1bW5JZF0pO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRjcmVhdGVDb2xsZWN0aW9uTWFwIChpdGVtVHlwZSwgaXRlbXMsIGNvbHVtbnMpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDoge1tpdGVtSWQ6IG51bWJlcl06IENvbGxlY3Rpb25NYXRjaFJlc3VsdH0gPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtcykge1xyXG5cdFx0XHRjb25zdCBpdGVtID0gaXRlbXNbaXRlbUlkXTtcclxuXHRcdFx0Y29uc3QgcGFyZW50ID0gaXRlbS5wYXJlbnQgIT09IG51bGwgPyBpdGVtLnBhcmVudCA6IHt9O1xyXG5cclxuXHRcdFx0cmVzdWx0W2l0ZW1JZF0gPSB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmVudHJpZXMuZ2V0QnlGaXR0aW5nSXRlbShcclxuXHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHR0aGlzLmZvcm1hdE1lc3NhZ2VWYWx1ZXMoaXRlbS52YWx1ZXMsIGNvbHVtbnMpLFxyXG5cdFx0XHRcdHBhcmVudFxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRncm91cEJ5Q29sbGVjdGlvbklkIChpdGVtVHlwZSwgY29sbGVjdGlvbk1hcCk6IEdyb3VwZWRFeHRlbmRlZENvbGxlY3Rpb25NYXRjaFJlc3VsdCB7XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25zID0gY29sbGVjdGlvbk1hcFtpdGVtSWRdO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBzdGF0dXMgaW4gY29sbGVjdGlvbnMpIHtcclxuXHRcdFx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb24gb2YgY29sbGVjdGlvbnNbc3RhdHVzXSkge1xyXG5cdFx0XHRcdFx0Y29uc3QgY29sbGVjdGlvbklkID0gY29sbGVjdGlvbi5pZDtcclxuXHJcblx0XHRcdFx0XHRpZiAocmVzdWx0W2NvbGxlY3Rpb25JZF0gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0XHQoPEV4dGVuZGVkQ29sbGVjdGlvbk1hdGNoUmVzdWx0PiByZXN1bHRbY29sbGVjdGlvbklkXSkgPSB7XHJcblx0XHRcdFx0XHRcdFx0Y29sbGVjdGlvbjogY29sbGVjdGlvbixcclxuXHRcdFx0XHRcdFx0XHRmaXR0aW5nOiBbXSxcclxuXHRcdFx0XHRcdFx0XHRub3RmaXR0aW5nOiBbXSxcclxuXHRcdFx0XHRcdFx0XHRtYXliZTogW11cclxuXHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRyZXN1bHRbY29sbGVjdGlvbklkXVtzdGF0dXNdLnB1c2goXHJcblx0XHRcdFx0XHRcdHN0YXR1cyA9PT0gJ2ZpdHRpbmcnID8gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkKSA6IGl0ZW1JZFxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0UmVxdWVzdENvbHVtbnMgKGl0ZW1UeXBlLCBjb2xsZWN0aW9uTWFwKSB7XHJcblx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdCgpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGNvbGxlY3Rpb25NYXApIHtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbnMgPSBjb2xsZWN0aW9uTWFwW2l0ZW1JZF07XHJcblx0XHRcdGNvbnN0IGZpdHRpbmdDb2xsZWN0aW9ucyA9IGNvbGxlY3Rpb25zLmZpdHRpbmc7XHJcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZCk7XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGZpdHRpbmdDb2xsZWN0aW9uIG9mIGZpdHRpbmdDb2xsZWN0aW9ucylcclxuXHRcdFx0XHRjb2x1bW5FeHBhbnNpb24uZXhwYW5kKGZpdHRpbmdDb2xsZWN0aW9uLmNvbHVtbnMpO1xyXG5cclxuXHRcdFx0aWYgKGl0ZW1FbnRyeSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGNvbHVtbkV4cGFuc2lvbi5leHBhbmQoaXRlbUVudHJ5LmNvbHVtbnMpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBjb2x1bW5FeHBhbnNpb24uZ2V0KCk7XHJcblx0fVxyXG5cclxuXHRkZWZlckVudHJ5IChpdGVtRW50cnkpIHtcclxuXHRcdGNvbnN0IGRlZmVycmVkID0gaXRlbUVudHJ5LmRlZmVycmVkO1xyXG5cclxuXHRcdGlmIChkZWZlcnJlZCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmRlZmVyKCk7XHJcblxyXG5cdFx0cmV0dXJuIGRlZmVycmVkLnByb21pc2UudGhlbihcclxuXHRcdFx0dGhpcy5kZWZlckVudHJ5LmJpbmQodGhpcyksXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHByb2Nlc3NNZXNzYWdlIChib2R5KTogUHJvbWlzZUludGVyZmFjZTxHcm91cGVkRXh0ZW5kZWRDb2xsZWN0aW9uTWF0Y2hSZXN1bHQ+IHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gYm9keS5pdGVtVHlwZTtcclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25NYXAgPSB0aGlzLmNyZWF0ZUNvbGxlY3Rpb25NYXAoaXRlbVR5cGUsIGJvZHkuaXRlbXNbaXRlbVR5cGVdLCBib2R5LmNvbHVtbnNbaXRlbVR5cGVdKTtcclxuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0gdGhpcy5nZXRSZXF1ZXN0Q29sdW1ucyhpdGVtVHlwZSwgY29sbGVjdGlvbk1hcCk7XHJcblx0XHRjb25zdCBkZWZlcnJlZEVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XHJcblx0XHRjb25zdCByZXF1ZXN0SWRzOiBJdGVtSWRbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkU3RyaW5nIGluIGNvbGxlY3Rpb25NYXApIHtcclxuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkU3RyaW5nKTtcclxuXHRcdFx0Y29uc3QgaXRlbUlkID0gK2l0ZW1JZFN0cmluZztcclxuXHJcblx0XHRcdGlmIChpdGVtRW50cnkgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGRlZmVycmVkRW50cmllcy5wdXNoKHRoaXMuZGVmZXJFbnRyeShpdGVtRW50cnkpKTtcclxuXHRcdFx0XHRyZXF1ZXN0SWRzLnB1c2goaXRlbUlkKTtcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKGNvbGxlY3Rpb25NYXBbaXRlbUlkXS5maXR0aW5nLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5hZGQoXHJcblx0XHRcdFx0dGhpcy5pdGVtRW50cnlGYWN0b3J5LmNvbnN0cnVjdERlZmVycmVkKGl0ZW1UeXBlLCBpdGVtSWQsIHJlcXVlc3RDb2x1bW5zW2l0ZW1UeXBlXSwgZmFsc2UpXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHRyZXF1ZXN0SWRzLnB1c2goaXRlbUlkKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAocmVxdWVzdElkcy5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4odGhpcy5ncm91cEJ5Q29sbGVjdGlvbklkKGl0ZW1UeXBlLCBjb2xsZWN0aW9uTWFwKSk7IC8vIGNvbGxlY3Rpb25NYXAgbWlnaHQgY29udGFpbiAnbWF5YmUnIG1hdGNoZXNcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwoZGVmZXJyZWRFbnRyaWVzKS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoaXRlbVR5cGUsIHtpZDogcmVxdWVzdElkc30sIHJlcXVlc3RDb2x1bW5zKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVSZXNwb25zZShpdGVtVHlwZSwgcmVxdWVzdElkcywgcmVxdWVzdENvbHVtbnNbaXRlbVR5cGVdLCByZXNwb25zZSwgY29sbGVjdGlvbk1hcCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHByb2Nlc3NGdW5jdGlvbkNoYW5nZXNSZXNvbHZlIChib2R5KSB7XHJcblx0XHRjb25zdCBpdGVtcyA9IGJvZHkuaXRlbXMuRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZTtcclxuXHRcdGNvbnN0IGRlZmVycmVkRW50cmllczogSXRlbUVudHJ5W10gPSBbXTtcclxuXHRcdGNvbnN0IHJlcXVlc3RJZHM6IEl0ZW1JZFtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbXMpIHtcclxuXHRcdFx0Y29uc3QgZnVuY3Rpb25JZCA9IGl0ZW1zW2l0ZW1JZF0ucGFyZW50Lml0ZW1JZDtcclxuXHRcdFx0Y29uc3QgZnVuY3Rpb25FbnRyeSA9IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoJ0Z1bmN0aWUnLCBmdW5jdGlvbklkKTtcclxuXHJcblx0XHRcdGlmIChmdW5jdGlvbkVudHJ5ID09PSB1bmRlZmluZWQgfHwgZnVuY3Rpb25FbnRyeS5jb2x1bW5zLnJlc3BvbnNlLkZ1bmN0aWUubmV3Y2hhbmdlcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0ZGVmZXJyZWRFbnRyaWVzLnB1c2godGhpcy5kZWZlckVudHJ5KGZ1bmN0aW9uRW50cnkpKTtcclxuXHRcdFx0cmVxdWVzdElkcy5wdXNoKGZ1bmN0aW9uSWQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChyZXF1ZXN0SWRzLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChkZWZlcnJlZEVudHJpZXMpLnRoZW4oXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeSgnRnVuY3RpZScsIHtpZDogcmVxdWVzdElkc30sIHtGdW5jdGllOiBbJ25ld2NoYW5nZXMnXX0pO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCkudGhlbihcclxuXHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlSWRzID0gcmVzcG9uc2UubGlua3MuRnVuY3RpZTtcclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgcmVzcG9uc2VJZHMpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IDxJdGVtRW50cnk+IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoJ0Z1bmN0aWUnLCBpdGVtSWQpO1xyXG5cclxuXHRcdFx0XHRcdGNvbnN0IHByZXZpb3VzID0gdGhpcy5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyhcclxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LmdldEZpZWxkcygpLFxyXG5cdFx0XHRcdFx0XHR7fSxcclxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LmNvbHVtbnMubWFpblxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGNvbnN0IHJlc3BvbnNlVmFsdWUgPSByZXNwb25zZS5mZXRjaFZhbHVlKCdGdW5jdGllJywgaXRlbUlkLCAnbmV3Y2hhbmdlcycpO1xyXG5cclxuXHRcdFx0XHRcdGlmIChyZXNwb25zZVZhbHVlID09PSBwcmV2aW91cy5uZXdjaGFuZ2VzKVxyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0XHRcdFx0aXRlbUVudHJ5XHJcblx0XHRcdFx0XHRcdC5zZXRJbml0aWFsKHtuZXdjaGFuZ2VzOiByZXNwb25zZVZhbHVlfSwgdHJ1ZSlcclxuXHRcdFx0XHRcdFx0LmNhbGxPbkNoYW5nZShwcmV2aW91cylcclxuXHRcdFx0XHRcdFx0LnJlc29sdmUoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS5jYXRjaCh0aGlzLmVycm9ySGFuZGxlci5ub3RpZnlFcnJvcik7XHJcblx0fVxyXG5cclxuXHRoYW5kbGVSZXNwb25zZSAoaXRlbVR5cGUsIHJlcXVlc3RJZHMsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZSwgY29sbGVjdGlvbk1hcCk6IEdyb3VwZWRFeHRlbmRlZENvbGxlY3Rpb25NYXRjaFJlc3VsdCB7XHJcblx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKTtcclxuXHRcdGNvbnN0IGNvbHVtbkluZm8gPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKTtcclxuXHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIG9mIHJlcXVlc3RJZHMpIHtcclxuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gPEl0ZW1FbnRyeT4gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkKTtcclxuXHRcdFx0Y29uc3QgaXNOZXcgPSBpdGVtRW50cnkuaW5pdGlhbCA9PT0gdW5kZWZpbmVkO1xyXG5cdFx0XHRjb25zdCBmaWVsZHMgPSByZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKTtcclxuXHJcblx0XHRcdGlmIChmaWVsZHMgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGl0ZW1FbnRyeS5yZWplY3QoKTtcclxuXHJcblx0XHRcdFx0aWYgKGlzTmV3KVxyXG5cdFx0XHRcdFx0dGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmNsZWFyKGl0ZW1FbnRyeSk7XHJcblxyXG5cdFx0XHRcdGRlbGV0ZSBjb2xsZWN0aW9uTWFwW2l0ZW1JZF07XHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IGRlcml2ZWQgPSByZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgY29sdW1uSW5mby5yb290KTtcclxuXHJcblx0XHRcdGlmIChpc05ldylcclxuXHRcdFx0XHRpdGVtRW50cnkucmVzb2x2ZURlZmVycmVkKGZpZWxkcywgZGVyaXZlZCwgY29sdW1uSW5mbyk7XHJcblx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdGNvbnN0IGV4cGFuc2lvblJlc3VsdCA9IGNvbHVtbkV4cGFuc2lvbi5ydW4oaXRlbUVudHJ5LmNvbHVtbnMpO1xyXG5cdFx0XHRcdGNvbnN0IHByZXZpb3VzID0gdGhpcy5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyhcclxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5nZXRGaWVsZHMoKSxcclxuXHRcdFx0XHRcdHt9LFxyXG5cdFx0XHRcdFx0aXRlbUVudHJ5LmNvbHVtbnMubWFpblxyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdGlmIChleHBhbnNpb25SZXN1bHQgIT09IG51bGwpXHJcblx0XHRcdFx0XHRpdGVtRW50cnkuZXhwYW5kKGZpZWxkcywgZGVyaXZlZCwgZXhwYW5zaW9uUmVzdWx0KTtcclxuXHJcblx0XHRcdFx0aXRlbUVudHJ5XHJcblx0XHRcdFx0XHQudXBkYXRlRmllbGRzKGZpZWxkcywgZGVyaXZlZCwgZmFsc2UpXHJcblx0XHRcdFx0XHQuY2FsbE9uQ2hhbmdlKHByZXZpb3VzKVxyXG5cdFx0XHRcdFx0LnJlc29sdmUoKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLmdyb3VwQnlDb2xsZWN0aW9uSWQoaXRlbVR5cGUsIGNvbGxlY3Rpb25NYXApO1xyXG5cdH1cclxuXHJcblx0aGFuZGxlQ3JlYXRlIChtZXNzYWdlKSB7XHJcblx0XHRjb25zdCBib2R5ID0gbWVzc2FnZS5ib2R5O1xyXG5cclxuXHRcdGlmIChib2R5Lml0ZW1UeXBlID09PSAnRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZScpXHJcblx0XHRcdHJldHVybiB0aGlzLnByb2Nlc3NGdW5jdGlvbkNoYW5nZXNSZXNvbHZlKGJvZHkpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NNZXNzYWdlKGJvZHkpLnRoZW4oXHJcblx0XHRcdGNvbGxlY3Rpb25NYXAgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmFkZFRvQ29sbGVjdGlvbnMoY29sbGVjdGlvbk1hcCwgdHJ1ZSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS5jYXRjaCh0aGlzLmVycm9ySGFuZGxlci5ub3RpZnlFcnJvcik7XHJcblx0fVxyXG5cclxuXHRoYW5kbGVVcGRhdGUgKG1lc3NhZ2UpIHtcclxuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NNZXNzYWdlKG1lc3NhZ2UuYm9keSkudGhlbihcclxuXHRcdFx0Y29sbGVjdGlvbk1hcCA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIucmVtb3ZlRnJvbUFuZEFkZFRvQ29sbGVjdGlvbnMoY29sbGVjdGlvbk1hcCwgdHJ1ZSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS5jYXRjaCh0aGlzLmVycm9ySGFuZGxlci5ub3RpZnlFcnJvcik7XHJcblx0fVxyXG5cclxuXHRoYW5kbGVEZWxldGUgKG1lc3NhZ2UpIHtcclxuXHRcdGNvbnN0IGJvZHkgPSBtZXNzYWdlLmJvZHk7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uTWFwID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgYm9keS5pdGVtcykge1xyXG5cdFx0XHRjb25zdCBjb2xsZWN0aW9ucyA9IHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZW50cmllcy5nZXRCeUNvbnRhaW5pbmdJdGVtKGJvZHkuaXRlbVR5cGUsIGl0ZW1JZCk7XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb24gb2YgY29sbGVjdGlvbnMpIHtcclxuXHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uSWQgPSBjb2xsZWN0aW9uLmlkO1xyXG5cclxuXHRcdFx0XHRpZiAoY29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF0gPSB7Y29sbGVjdGlvbjogY29sbGVjdGlvbiwgaXRlbXM6IFtdfTtcclxuXHJcblx0XHRcdFx0Y29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdLml0ZW1zLnB1c2goaXRlbUlkKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIGNvbGxlY3Rpb25NYXApIHtcclxuXHRcdFx0Y29uc3QgbWFwRW50cnkgPSBjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF07XHJcblx0XHRcdG1hcEVudHJ5LmNvbGxlY3Rpb24ucmVtb3ZlSXRlbXMobWFwRW50cnkuaXRlbXMsIG51bGwsIHRydWUpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcclxuXHR9XHJcblxyXG5cdC8vIFRPRE8hXHJcblx0aGFuZGxlTGlua01vdmUgKCkge31cclxuXHJcblx0LypcdGhhbmRsZUxpbmtNb3ZlIChtZXNzYWdlKSB7XHJcblx0XHRcdHByb2Nlc3NNZXNzYWdlKFxyXG5cdFx0XHRcdG1lc3NhZ2UsXHJcblx0XHRcdFx0ZnVuY3Rpb24gKGNvbGxlY3Rpb24sIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdFx0XHQvLyBmaXRzIGluIHRoaXMgY29sbGVjdGlvbiwgdG9kbzogZ2V0IHRoZSBvbGQgY29sbGVjdGlvbiBpdCBiZWxvbmdlZCB0b1xyXG5cdFx0XHRcdFx0Y29sbGVjdGlvbi5tb3ZlSXRlbXMoaXRlbUVudHJpZXMsIG51bGwsIHRydWUpO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0ZnVuY3Rpb24gKGNvbGxlY3Rpb24sIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdFx0XHQvLyBtYXliZSBmaXRzXHJcblx0XHRcdFx0XHQvLyB0b2RvOiBhbHNvIHJlbW92ZSB0aGVtIGZyb20gdGhlIG9sZCBjb2xsZWN0aW9uXHJcblx0XHRcdFx0XHRjb2xsZWN0aW9uLmV4dGVuZChhbmd1bGFyLmlkZW50aXR5LCBmYWxzZSwgZmFsc2UpO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0ZnVuY3Rpb24gKGNvbGxlY3Rpb24sIGlkcykge1xyXG5cdFx0XHRcdFx0Ly8gbm90IGZpdHRpbmcgaW4gdGhpcyBjb2xsZWN0aW9uLCByZW1vdmUgaXQgP1xyXG5cdFx0XHRcdFx0Y29sbGVjdGlvbi5yZW1vdmVJdGVtcyhpZHMsIG51bGwsIG1lc3NhZ2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHQqL1xyXG59XHJcbiIsImV4cG9ydCAqIGZyb20gJy4vQXBpRm9ybWF0dGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9BcGlSZXF1ZXN0U2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQXBpUmVzcG9uc2VQcm9jZXNzb3InO1xyXG5leHBvcnQgKiBmcm9tICcuL0JhdGNoU3RhdHVzJztcclxuZXhwb3J0ICogZnJvbSAnLi9DaGFuZ2VzQ29tcGlsYXRpb24nO1xyXG5leHBvcnQgKiBmcm9tICcuL0NoYW5nZXNQcm9jZXNzb3InO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25DYWNoZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkVudHJ5U2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkhhbmRsZXInO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25NYXRjaGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5DYWNoZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uRXhwYW5zaW9uJztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5IYW5kbGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5JbmZvJztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5TZXQnO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbHVtblV0aWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL0NyZWF0ZVJlcXVlc3QnO1xyXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1BZG1pbmlzdHJhdG9yJztcclxuZXhwb3J0ICogZnJvbSAnLi9JdGVtQ2FjaGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1FbnRyeVNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1IYW5kbGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9JdGVtUmVxdWVzdFNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1SZXNvdXJjZVNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0tleVNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0xvY2FsQ2FjaGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL0xvY2tTZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9Nb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb24nO1xyXG5leHBvcnQgKiBmcm9tICcuL1F1ZXJ5TWF0Y2hlcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vUXVlcnlQYXJzZXInO1xyXG5leHBvcnQgKiBmcm9tICcuL1F1ZXJ5U2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vUmVxdWVzdENvbHVtbkV4cGFuc2lvbic7XHJcbmV4cG9ydCAqIGZyb20gJy4vU29ja2V0TWVzc2FnZUhhbmRsZXInO1xyXG5leHBvcnQgKiBmcm9tICcuL1V0aWwnO1xyXG4iLCJpbXBvcnQgeyBBcGlGb3JtYXR0ZXIsIEFwaVJlc3BvbnNlUHJvY2Vzc29yIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAocHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcikge1xyXG5cclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAocmVzcG9uc2U6IGFueSkge1xyXG5cdFx0cmV0dXJuIG5ldyBBcGlSZXNwb25zZVByb2Nlc3Nvcih0aGlzLmFwaUZvcm1hdHRlciwgcmVzcG9uc2UpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBCYXRjaFN0YXR1cyB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBQcm9taXNlTGlicmFyeUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBJdGVtSWQsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQmF0Y2hTdGF0dXNGYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZSxcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdDxUPiAoXHJcblx0XHRnZXRJdGVtSWQ6IChlbnRyeTogVCkgPT4gSXRlbUlkLFxyXG5cdFx0Z2V0UHJvbWlzZTogKGVudHJ5OiBUKSA9PiBQcm9taXNlSW50ZXJmYWNlPFQ+XHJcblx0KTogQmF0Y2hTdGF0dXM8VD4ge1xyXG5cdFx0cmV0dXJuIG5ldyBCYXRjaFN0YXR1cyhcclxuXHRcdFx0dGhpcy5wcm9taXNlU2VydmljZSxcclxuXHRcdFx0Z2V0SXRlbUlkLFxyXG5cdFx0XHRnZXRQcm9taXNlXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDaGFuZ2VzQ29tcGlsYXRpb24gfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5cclxuaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSB9IGZyb20gJy4vJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25DYWNoZUZhY3Rvcnk6IENvbGxlY3Rpb25DYWNoZUZhY3RvcnksXHJcblx0XHRwcml2YXRlIGtleVNlcnZpY2VcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoc2luZ2xlSXRlbXM6IEl0ZW1FbnRyeVtdLCBjb2xsZWN0aW9uczogQ29sbGVjdGlvbkVudHJ5W10pOiBDaGFuZ2VzQ29tcGlsYXRpb24ge1xyXG5cdFx0cmV0dXJuIG5ldyBDaGFuZ2VzQ29tcGlsYXRpb24oXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxyXG5cdFx0XHRzaW5nbGVJdGVtcyxcclxuXHRcdFx0Y29sbGVjdGlvbnNcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7XHJcblx0QXBpRm9ybWF0dGVyLFxyXG5cdENoYW5nZXNQcm9jZXNzb3IsXHJcblx0Q29sbGVjdGlvbkVudHJ5U2VydmljZSxcclxuXHRDb2xsZWN0aW9uSGFuZGxlcixcclxuXHRJdGVtSGFuZGxlclxyXG59IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQge1xyXG5cdENoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXHJcblx0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRDcmVhdGVSZXF1ZXN0RmFjdG9yeSxcclxuXHRSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxyXG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXHJcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgY2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeTogQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkVudHJ5U2VydmljZTogQ29sbGVjdGlvbkVudHJ5U2VydmljZSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjcmVhdGVSZXF1ZXN0RmFjdG9yeTogQ3JlYXRlUmVxdWVzdEZhY3RvcnksXHJcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgcmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0ICgpOiBDaGFuZ2VzUHJvY2Vzc29yIHtcclxuXHRcdHJldHVybiBuZXcgQ2hhbmdlc1Byb2Nlc3NvcihcclxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXHJcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXHJcblx0XHRcdHRoaXMuY2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxyXG5cdFx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRcdHRoaXMuY3JlYXRlUmVxdWVzdEZhY3RvcnksXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLFxyXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLFxyXG5cdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlLFxyXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IFF1ZXJ5TWF0Y2hlckZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25DYWNoZUZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgcXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0ICgpIHtcclxuXHRcdHJldHVybiBuZXcgQ29sbGVjdGlvbkNhY2hlKFxyXG5cdFx0XHR0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnlcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7XHJcblx0Q29sbGVjdGlvbkVudHJ5U2VydmljZSwgSXRlbUVudHJ5U2VydmljZSwgSXRlbUhhbmRsZXIsIEl0ZW1SZXF1ZXN0U2VydmljZSwgS2V5U2VydmljZSwgUXVlcnlTZXJ2aWNlXHJcbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IENvbHVtblNldEZhY3RvcnksIEl0ZW1FbnRyeUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSB9IGZyb20gJy4uL21vZGVscy8nO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25FbnRyeUZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHB1YmxpYyBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxyXG5cdFx0cHVibGljIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXHJcblx0XHRwdWJsaWMgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwdWJsaWMgaXRlbUVudHJ5RmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeSxcclxuXHRcdHB1YmxpYyBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxyXG5cdFx0cHVibGljIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcclxuXHRcdHB1YmxpYyBpdGVtUmVxdWVzdFNlcnZpY2U6IEl0ZW1SZXF1ZXN0U2VydmljZSxcclxuXHRcdHB1YmxpYyBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG5cdFx0cHVibGljIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZSxcclxuXHRcdHB1YmxpYyBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0IChpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zKTogQ29sbGVjdGlvbkVudHJ5IHtcclxuXHRcdHJldHVybiBuZXcgQ29sbGVjdGlvbkVudHJ5KFxyXG5cdFx0XHR0aGlzLFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUsIENvbGxlY3Rpb25NYXRjaGVyIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBRdWVyeU1hdGNoZXJGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3Rvcnlcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3QgKGNvbGxlY3Rpb25DYWNoZXM6IENvbGxlY3Rpb25DYWNoZVtdLCB1cGRhdGVJbml0aWFsOiBib29sZWFuLCBjYWxsT25BY3RpdmF0ZTogYm9vbGVhbikge1xuXHRcdHJldHVybiBuZXcgQ29sbGVjdGlvbk1hdGNoZXIoXG5cdFx0XHR0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnksXG5cdFx0XHRjb2xsZWN0aW9uQ2FjaGVzLFxuXHRcdFx0dXBkYXRlSW5pdGlhbCxcblx0XHRcdGNhbGxPbkFjdGl2YXRlXG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvblJlc291cmNlU2VydmljZSwgS2V5U2VydmljZSwgTG9jYWxDYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSwgSXRlbVJlc291cmNlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVkaXRSZXNvdXJjZSwgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UsIENvbGxlY3Rpb25WaWV3UmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHB1YmxpYyBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHB1YmxpYyBpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxyXG5cdFx0cHVibGljIGNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5OiBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcclxuXHRcdHB1YmxpYyBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG5cdFx0cHVibGljIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZSxcclxuXHRcdHB1YmxpYyBjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlXHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0IChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucywgbG9jYWxDYWNoZTogTG9jYWxDYWNoZSk6IENvbGxlY3Rpb25SZXNvdXJjZSB7XHJcblx0XHRvcHRpb25zID0gdGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpO1xyXG5cclxuXHRcdGlmIChvcHRpb25zLmVkaXRJdGVtcylcclxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5Lmhhc0l0ZW1FZGl0UmVzb3VyY2VzID0gdHJ1ZTtcclxuXHJcblx0XHRpZiAob3B0aW9ucy5lZGl0Q29sbGVjdGlvbikge1xyXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuaGFzRWRpdFJlc291cmNlcyA9IHRydWU7XHJcblxyXG5cdFx0XHRyZXR1cm4gbmV3IENvbGxlY3Rpb25FZGl0UmVzb3VyY2UodGhpcywgY29sbGVjdGlvbkVudHJ5LCBvcHRpb25zLCBsb2NhbENhY2hlKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gbmV3IENvbGxlY3Rpb25WaWV3UmVzb3VyY2UodGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LCBjb2xsZWN0aW9uRW50cnksIG9wdGlvbnMsIGxvY2FsQ2FjaGUpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2x1bW5FeHBhbnNpb24sIENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sdW1uSW5mb0ZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBBcGlSZXF1ZXN0Q29sdW1ucywgSXRlbVR5cGUsIFJlc3BvbnNlQ29sdW1uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbHVtbkV4cGFuc2lvbkZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgY29sdW1uSW5mb0ZhY3Rvcnk6IENvbHVtbkluZm9GYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0IChpdGVtVHlwZTogSXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcCkge1xyXG5cdFx0cmV0dXJuIG5ldyBDb2x1bW5FeHBhbnNpb24oXHJcblx0XHRcdHRoaXMuY29sdW1uSW5mb0ZhY3RvcnksXHJcblx0XHRcdHRoaXMuY29sdW1uVXRpbCxcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdHJlcXVlc3RDb2x1bW5zLFxyXG5cdFx0XHRyZXNwb25zZUNvbHVtbnNcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbHVtbkluZm8gfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgUmVzcG9uc2VDb2x1bW4gfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sdW1uSW5mb0ZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yICgpIHt9XHJcblxyXG5cdGNvbnN0cnVjdCAoYXBpQ29sdW1uOiBSZXNwb25zZUNvbHVtbiwgcGFyZW50OiBDb2x1bW5JbmZvKSB7XHJcblx0XHRyZXR1cm4gbmV3IENvbHVtbkluZm8oYXBpQ29sdW1uLCBwYXJlbnQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2x1bW5IYW5kbGVyLCBDb2x1bW5TZXQsIENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sdW1uSW5mb0ZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBBcGlSZXF1ZXN0Q29sdW1ucywgSXRlbVR5cGUsIFJlc3BvbnNlQ29sdW1uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbHVtblNldEZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgY29sdW1uSGFuZGxlcjogQ29sdW1uSGFuZGxlcixcclxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbCxcclxuXHRcdHByaXZhdGUgY29sdW1uSW5mb0ZhY3Rvcnk6IENvbHVtbkluZm9GYWN0b3J5XHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3RTdHViIChpdGVtVHlwZTogSXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucykge1xyXG5cdFx0cmV0dXJuIG5ldyBDb2x1bW5TZXQoXHJcblx0XHRcdHRoaXMuY29sdW1uSGFuZGxlcixcclxuXHRcdFx0dGhpcy5jb2x1bW5VdGlsLFxyXG5cdFx0XHR0aGlzLmNvbHVtbkluZm9GYWN0b3J5LFxyXG5cdFx0XHR0aGlzLFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0cmVxdWVzdENvbHVtbnNcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKFxyXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxyXG5cdFx0cmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcCxcclxuXHRcdGVuYWJsZUNhY2hpbmc/LFxyXG5cdFx0aW5jbHVkZUlkQ29sdW1uP1xyXG5cdCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuY29uc3RydWN0U3R1YihpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMpLnJlc29sdmUocmVzcG9uc2VDb2x1bW5zLCBlbmFibGVDYWNoaW5nLCBpbmNsdWRlSWRDb2x1bW4pO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUsIENvbGxlY3Rpb25IYW5kbGVyLCBDcmVhdGVDb21waWxhdGlvbiwgQ3JlYXRlUmVxdWVzdCwgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksIFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQ3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDcmVhdGVSZXF1ZXN0RmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeTogQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSByZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnlcclxuXHQpIHtcclxuXHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKFxyXG5cdFx0Y29tcGlsYXRpb246IENyZWF0ZUNvbXBpbGF0aW9uLFxyXG5cdFx0bG9jYWxDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZSxcclxuXHRcdHBhcmFtZXRlck1hcDogQ3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCxcclxuXHRcdGJyZWFrdXBCeVBhcmVudD86IGJvb2xlYW5cclxuXHQpOiBDcmVhdGVSZXF1ZXN0IHtcclxuXHRcdHJldHVybiBuZXcgQ3JlYXRlUmVxdWVzdChcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksXHJcblx0XHRcdHRoaXMua2V5U2VydmljZSxcclxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRcdFx0Y29tcGlsYXRpb24sXHJcblx0XHRcdGxvY2FsQ29sbGVjdGlvbkNhY2hlLFxyXG5cdFx0XHRwYXJhbWV0ZXJNYXAsXHJcblx0XHRcdGJyZWFrdXBCeVBhcmVudFxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgSXRlbUNhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IFF1ZXJ5TWF0Y2hlckZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW1DYWNoZUZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgcXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0ICgpOiBJdGVtQ2FjaGUge1xyXG5cdFx0cmV0dXJuIG5ldyBJdGVtQ2FjaGUodGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQXBpRm9ybWF0dGVyLCBDb2x1bW5TZXQsIEl0ZW1FbnRyeVNlcnZpY2UsIEtleVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sdW1uU2V0RmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEF1dGhJbnRlcmZhY2UsIFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSwgVGVtcGxhdGUgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBBcGlSZXF1ZXN0Q29sdW1ucywgRW50cnlQYXJlbnROdWxsLCBGaWVsZE1hcCwgSXRlbUlkLCBJdGVtSWRDb252ZXJzaW9uTWFwLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtRW50cnlGYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwdWJsaWMgYXV0aEludGVyZmFjZTogQXV0aEludGVyZmFjZSxcclxuXHRcdHB1YmxpYyBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcclxuXHRcdHB1YmxpYyBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxyXG5cdFx0cHVibGljIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXHJcblx0XHRwdWJsaWMga2V5U2VydmljZTogS2V5U2VydmljZSxcclxuXHRcdHB1YmxpYyBwcm9taXNlU2VydmljZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2VcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdFN0dWIgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQsIGNvbHVtblNldFN0dWI6IENvbHVtblNldCkge1xyXG5cdFx0cmV0dXJuIG5ldyBJdGVtRW50cnkodGhpcywgaXRlbVR5cGUsIGl0ZW1JZCwgY29sdW1uU2V0U3R1Yik7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3RMb2NhbExpbmtlZCAoXHJcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXHJcblx0XHRpdGVtSWQ6IEl0ZW1JZCxcclxuXHRcdGluaXRpYWw6IEZpZWxkTWFwLFxyXG5cdFx0cGFyZW50OiBFbnRyeVBhcmVudE51bGwsXHJcblx0XHRjb2x1bW5TZXQ6IENvbHVtblNldCxcclxuXHRcdGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXBcclxuXHQpOiBJdGVtRW50cnkge1xyXG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5jb25zdHJ1Y3RTdHViKGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtblNldCk7XHJcblxyXG5cdFx0aXRlbUVudHJ5LnBhcmVudCA9IHBhcmVudDtcclxuXHJcblx0XHRyZXR1cm4gaXRlbUVudHJ5LnNldExvY2FsRmllbGRzKGluaXRpYWwsIGNvbnZlcnNpb25NYXApO1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0TG9jYWwgKFxyXG5cdFx0aXRlbUlkOiBJdGVtSWQsXHJcblx0XHR0ZW1wbGF0ZTogVGVtcGxhdGUsXHJcblx0XHRtb2RpZmllZDogRmllbGRNYXAsXHJcblx0XHRkZXJpdmVkOiBGaWVsZE1hcCxcclxuXHRcdHBhcmVudDogRW50cnlQYXJlbnROdWxsID0gbnVsbCxcclxuXHRcdGNvbHVtblNldDogQ29sdW1uU2V0ID0gdGVtcGxhdGUuY29sdW1ucyxcclxuXHRcdGNvbnZlcnNpb25NYXA/XHJcblx0KTogSXRlbUVudHJ5IHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gdGVtcGxhdGUuY29sdW1ucy5pdGVtVHlwZTtcclxuXHJcblx0XHRpZiAoY29udmVyc2lvbk1hcCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRjb252ZXJzaW9uTWFwID0gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLmNyZWF0ZUxvY2FsQ29udmVyc2lvbk1hcChpdGVtVHlwZSwgaXRlbUlkLCB0cnVlLCB0ZW1wbGF0ZS5yZXNwb25zZSk7XHJcblxyXG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5jb25zdHJ1Y3RTdHViKGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtblNldCk7XHJcblxyXG5cdFx0aXRlbUVudHJ5LnBhcmVudCA9IHBhcmVudDtcclxuXHJcblx0XHRyZXR1cm4gaXRlbUVudHJ5XHJcblx0XHRcdC5zZXRMb2NhbEZpZWxkcyh0ZW1wbGF0ZS5maWVsZHMsIGNvbnZlcnNpb25NYXAsIHRlbXBsYXRlLmNvbHVtbnMpXHJcblx0XHRcdC5zZXRNb2RpZmllZChtb2RpZmllZClcclxuXHRcdFx0LnNldERlcml2ZWQoZGVyaXZlZCk7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3REZWZlcnJlZCAoXHJcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXHJcblx0XHRpdGVtSWQ6IEl0ZW1JZCxcclxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyxcclxuXHRcdGRlZmVyUmVxdWVzdDogYm9vbGVhblxyXG5cdCk6IEl0ZW1FbnRyeSB7XHJcblx0XHRjb25zdCBpdGVtRW50cnlTdHViID0gdGhpcy5jb25zdHJ1Y3RTdHViKFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0aXRlbUlkLFxyXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0U3R1YihcclxuXHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHRyZXF1ZXN0Q29sdW1uc1xyXG5cdFx0XHQpXHJcblx0XHQpO1xyXG5cclxuXHRcdGl0ZW1FbnRyeVN0dWIuZGVmZXIoZGVmZXJSZXF1ZXN0KTtcclxuXHJcblx0XHRyZXR1cm4gaXRlbUVudHJ5U3R1YjtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoXHJcblx0XHRpdGVtSWQ6IEl0ZW1JZCxcclxuXHRcdGluaXRpYWw6IEZpZWxkTWFwLFxyXG5cdFx0ZGVyaXZlZDogRmllbGRNYXAsXHJcblx0XHRjb2x1bW5JbmZvOiBDb2x1bW5TZXRcclxuXHQpOiBJdGVtRW50cnkge1xyXG5cdFx0cmV0dXJuIHRoaXMuY29uc3RydWN0U3R1YihcclxuXHRcdFx0Y29sdW1uSW5mby5pdGVtVHlwZSxcclxuXHRcdFx0aXRlbUlkLCAvLyBpbml0aWFsLmlkICh3aGVuIGluaXRpYWwgaXMgbm90IGEgdGVtcGxhdGUpXHJcblx0XHRcdGNvbHVtbkluZm8sXHJcblx0XHQpLnNldEZpZWxkcyhcclxuXHRcdFx0aW5pdGlhbCwgLy8gY2FuIGFsc28gYmUgYSB0ZW1wbGF0ZVxyXG5cdFx0XHRkZXJpdmVkLFxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQXBpRm9ybWF0dGVyLCBDaGFuZ2VzUHJvY2Vzc29yLCBJdGVtUmVzb3VyY2VTZXJ2aWNlLCBMb2NrU2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEVkaXRSZXNvdXJjZSwgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UsIFZpZXdSZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEl0ZW1PcHRpb25zIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW1SZXNvdXJjZUZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHB1YmxpYyBpdGVtUmVzb3VyY2VTZXJ2aWNlOiBJdGVtUmVzb3VyY2VTZXJ2aWNlLFxyXG5cdFx0cHVibGljIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxyXG5cdFx0cHVibGljIGxvY2tTZXJ2aWNlOiBMb2NrU2VydmljZSxcclxuXHRcdHB1YmxpYyBjaGFuZ2VzUHJvY2Vzc29yOiBDaGFuZ2VzUHJvY2Vzc29yLFxyXG5cdFx0cHVibGljIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0cHVibGljIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0Z2V0Q29uc3RydWN0b3IgKG9wdGlvbnM6IEl0ZW1PcHRpb25zKTogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBJdGVtUmVzb3VyY2Uge1xyXG5cdFx0b3B0aW9ucyA9IHRoaXMuaXRlbVJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTtcclxuXHJcblx0XHRyZXR1cm4gaXRlbUVudHJ5ID0+IHtcclxuXHRcdFx0cmV0dXJuIG9wdGlvbnMuZWRpdCA/XHJcblx0XHRcdFx0bmV3IEVkaXRSZXNvdXJjZSh0aGlzLCBpdGVtRW50cnksIG9wdGlvbnMpIDpcclxuXHRcdFx0XHRuZXcgVmlld1Jlc291cmNlKGl0ZW1FbnRyeSwgb3B0aW9ucyk7XHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0IChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgb3B0aW9uczogSXRlbU9wdGlvbnMsIGlzTmV3PzogYm9vbGVhbik6IEl0ZW1SZXNvdXJjZSB7XHJcblx0XHRvcHRpb25zID0gdGhpcy5pdGVtUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpO1xyXG5cclxuXHRcdHJldHVybiBvcHRpb25zLmVkaXQgP1xyXG5cdFx0XHRuZXcgRWRpdFJlc291cmNlKHRoaXMsIGl0ZW1FbnRyeSwgb3B0aW9ucywgaXNOZXcpIDpcclxuXHRcdFx0bmV3IFZpZXdSZXNvdXJjZShpdGVtRW50cnksIG9wdGlvbnMsIGlzTmV3KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHtcclxuXHRJdGVtUmVzb3VyY2VTZXJ2aWNlLFxyXG5cdExvY2FsQ2FjaGUsXHJcblx0TG9ja1NlcnZpY2VcclxufSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHtcclxuXHRDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcclxuXHRDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxyXG5cdENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXHJcblx0SXRlbUNhY2hlRmFjdG9yeSxcclxuXHRJdGVtUmVzb3VyY2VGYWN0b3J5XHJcbn0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlTGlicmFyeUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIExvY2FsQ2FjaGVGYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBsb2NrU2VydmljZTogTG9ja1NlcnZpY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25DYWNoZUZhY3Rvcnk6IENvbGxlY3Rpb25DYWNoZUZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5OiBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgaXRlbUNhY2hlRmFjdG9yeTogSXRlbUNhY2hlRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvblJlc291cmNlRmFjdG9yeTogQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgaXRlbVJlc291cmNlU2VydmljZTogSXRlbVJlc291cmNlU2VydmljZSxcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlXHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0IChpZD86IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIG5ldyBMb2NhbENhY2hlKFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlcixcclxuXHRcdFx0dGhpcy5sb2NrU2VydmljZSxcclxuXHRcdFx0dGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnksXHJcblx0XHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXHJcblx0XHRcdHRoaXMuaXRlbUNhY2hlRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLml0ZW1SZXNvdXJjZVNlcnZpY2UsXHJcblx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2UsXHJcblx0XHRcdGlkXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUsIEl0ZW1DYWNoZSwgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcblxyXG5leHBvcnQgY2xhc3MgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0IChyb290SXRlbTogSXRlbUVudHJ5LCBzaW5nbGVJdGVtQ2FjaGU6IEl0ZW1DYWNoZSwgY29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGUpIHtcclxuXHRcdHJldHVybiBuZXcgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uKHJvb3RJdGVtLCBzaW5nbGVJdGVtQ2FjaGUsIGNvbGxlY3Rpb25DYWNoZSk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEFwaUZvcm1hdHRlciwgUXVlcnlNYXRjaGVyIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEVudHJ5UGFyZW50TnVsbCwgRmllbGRNYXAsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXJ5TWF0Y2hlckZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXJcclxuXHQpIHtcclxuXHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgZmllbGRzOiBGaWVsZE1hcCwgcGFyZW50OiBFbnRyeVBhcmVudE51bGwpOiBRdWVyeU1hdGNoZXIge1xyXG5cdFx0cmV0dXJuIG5ldyBRdWVyeU1hdGNoZXIoXHJcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0ZmllbGRzLFxyXG5cdFx0XHRwYXJlbnRcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IFF1ZXJ5UGFyc2VyIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlcnlQYXJzZXJGYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoKSB7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKHF1ZXJ5LCBwYXJhbWV0ZXJzPyk6IFF1ZXJ5UGFyc2VyIHtcclxuXHRcdHJldHVybiBuZXcgUXVlcnlQYXJzZXIocXVlcnksIHBhcmFtZXRlcnMpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2x1bW5VdGlsLCBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0ICgpIHtcclxuXHRcdHJldHVybiBuZXcgUmVxdWVzdENvbHVtbkV4cGFuc2lvbihcclxuXHRcdFx0dGhpcy5jb2x1bW5VdGlsXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2x1bW5VdGlsIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IENvbHVtblNldEZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEFwaVJlc3BvbnNlLCBJdGVtVHlwZSwgUmVzcG9uc2VDb2x1bW5NYXAgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVGYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwdWJsaWMgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcclxuXHRcdHB1YmxpYyBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXHJcblx0KSB7fVxyXG5cclxuXHRjb25zdHJ1Y3QgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcmVzcG9uc2U6IEFwaVJlc3BvbnNlLCBhZGRpdGlvbmFsQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXApIHtcclxuXHRcdHJldHVybiBuZXcgVGVtcGxhdGUodGhpcywgaXRlbVR5cGUsIHJlc3BvbnNlLCBhZGRpdGlvbmFsQ29sdW1ucyk7XHJcblx0fVxyXG59XHJcbiIsImV4cG9ydCAqIGZyb20gJy4vQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9CYXRjaFN0YXR1c0ZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0NoYW5nZXNDb21waWxhdGlvbkZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0NoYW5nZXNQcm9jZXNzb3JGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uQ2FjaGVGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uRW50cnlGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uTWF0Y2hlckZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbHVtbkV4cGFuc2lvbkZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbHVtbkluZm9GYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5TZXRGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9DcmVhdGVSZXF1ZXN0RmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vSXRlbUNhY2hlRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vSXRlbUVudHJ5RmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vSXRlbVJlc291cmNlRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vTG9jYWxDYWNoZUZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL01vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL1F1ZXJ5TWF0Y2hlckZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL1F1ZXJ5UGFyc2VyRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL1RlbXBsYXRlRmFjdG9yeSc7XHJcbiIsImltcG9ydCB7XG5cdEFwaUZvcm1hdHRlcixcblx0QXBpUmVxdWVzdFNlcnZpY2UsXG5cdENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdENvbGxlY3Rpb25IYW5kbGVyLFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLFxuXHRDb2x1bW5DYWNoZSxcblx0Q29sdW1uSGFuZGxlcixcblx0Q29sdW1uVXRpbCxcblx0SXRlbUFkbWluaXN0cmF0b3IsXG5cdEl0ZW1FbnRyeVNlcnZpY2UsXG5cdEl0ZW1IYW5kbGVyLFxuXHRJdGVtUmVxdWVzdFNlcnZpY2UsXG5cdEl0ZW1SZXNvdXJjZVNlcnZpY2UsXG5cdEtleVNlcnZpY2UsXG5cdExvY2tTZXJ2aWNlLFxuXHRRdWVyeVNlcnZpY2UsXG5cdFNvY2tldE1lc3NhZ2VIYW5kbGVyXG59IGZyb20gJy4vY2xhc3Nlcyc7XG5pbXBvcnQge1xuXHRBcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnksXG5cdEJhdGNoU3RhdHVzRmFjdG9yeSxcblx0Q2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcblx0Q2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXG5cdENvbGxlY3Rpb25DYWNoZUZhY3RvcnksXG5cdENvbGxlY3Rpb25FbnRyeUZhY3RvcnksXG5cdENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcblx0Q29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcblx0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0Q29sdW1uSW5mb0ZhY3RvcnksXG5cdENvbHVtblNldEZhY3RvcnksXG5cdENyZWF0ZVJlcXVlc3RGYWN0b3J5LFxuXHRJdGVtQ2FjaGVGYWN0b3J5LFxuXHRJdGVtRW50cnlGYWN0b3J5LFxuXHRJdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRMb2NhbENhY2hlRmFjdG9yeSxcblx0TW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcblx0UXVlcnlNYXRjaGVyRmFjdG9yeSxcblx0UXVlcnlQYXJzZXJGYWN0b3J5LFxuXHRSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSwgVGVtcGxhdGVGYWN0b3J5XG59IGZyb20gJy4vZmFjdG9yaWVzJztcbmltcG9ydCB7XG5cdEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRBdXRoSW50ZXJmYWNlLFxuXHRFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdExvY2FsQ2FjaGVNYW5hZ2VySW50ZXJmYWNlLFxuXHRQcm9taXNlTGlicmFyeUludGVyZmFjZVxufSBmcm9tICcuL2ludGVyZmFjZXMnO1xuXG5leHBvcnQgY2xhc3MgUm1Db3JlIHtcblx0dmVyc2lvbjogc3RyaW5nO1xuXHRub29wID0gbm9vcDtcblxuXHRhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcjtcblx0YXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlO1xuXHRhcGlSZXNwb25zZVByb2Nlc3NvckZhY3Rvcnk6IEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeTtcblx0YmF0Y2hTdGF0dXNGYWN0b3J5OiBCYXRjaFN0YXR1c0ZhY3Rvcnk7XG5cdGNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnk6IENoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnk7XG5cdGNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5OiBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeTtcblx0Y29sbGVjdGlvbkNhY2hlRmFjdG9yeTogQ29sbGVjdGlvbkNhY2hlRmFjdG9yeTtcblx0Y29sbGVjdGlvbkVudHJ5RmFjdG9yeTogQ29sbGVjdGlvbkVudHJ5RmFjdG9yeTtcblx0Y29sbGVjdGlvbkVudHJ5U2VydmljZTogQ29sbGVjdGlvbkVudHJ5U2VydmljZTtcblx0Y29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyO1xuXHRjb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnk6IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeTtcblx0Y29sbGVjdGlvblJlc291cmNlRmFjdG9yeTogQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeTtcblx0Y29sbGVjdGlvblJlc291cmNlU2VydmljZTogQ29sbGVjdGlvblJlc291cmNlU2VydmljZTtcblx0Y29sdW1uQ2FjaGU6IENvbHVtbkNhY2hlO1xuXHRjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5O1xuXHRjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyO1xuXHRjb2x1bW5JbmZvRmFjdG9yeTogQ29sdW1uSW5mb0ZhY3Rvcnk7XG5cdGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3Rvcnk7XG5cdGNvbHVtblV0aWw6IENvbHVtblV0aWw7XG5cdGNyZWF0ZVJlcXVlc3RGYWN0b3J5OiBDcmVhdGVSZXF1ZXN0RmFjdG9yeTtcblx0aXRlbUFkbWluaXN0cmF0b3I6IEl0ZW1BZG1pbmlzdHJhdG9yO1xuXHRpdGVtQ2FjaGVGYWN0b3J5OiBJdGVtQ2FjaGVGYWN0b3J5O1xuXHRpdGVtRW50cnlGYWN0b3J5OiBJdGVtRW50cnlGYWN0b3J5O1xuXHRpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlO1xuXHRpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXI7XG5cdGl0ZW1SZXF1ZXN0U2VydmljZTogSXRlbVJlcXVlc3RTZXJ2aWNlO1xuXHRpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5O1xuXHRpdGVtUmVzb3VyY2VTZXJ2aWNlOiBJdGVtUmVzb3VyY2VTZXJ2aWNlO1xuXHRrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlO1xuXHRsb2NhbENhY2hlRmFjdG9yeTogTG9jYWxDYWNoZUZhY3Rvcnk7XG5cdGxvY2tTZXJ2aWNlOiBMb2NrU2VydmljZTtcblx0bW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeTogTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeTtcblx0cXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeTtcblx0cXVlcnlQYXJzZXJGYWN0b3J5OiBRdWVyeVBhcnNlckZhY3Rvcnk7XG5cdHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlO1xuXHRyZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk7XG5cdHNvY2tldE1lc3NhZ2VIYW5kbGVyOiBTb2NrZXRNZXNzYWdlSGFuZGxlcjtcblx0dGVtcGxhdGVGYWN0b3J5OiBUZW1wbGF0ZUZhY3Rvcnk7XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdGV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdGxvY2FsQ2FjaGVNYW5hZ2VyOiBMb2NhbENhY2hlTWFuYWdlckludGVyZmFjZSxcblx0XHRhdXRoSW50ZXJmYWNlOiBBdXRoSW50ZXJmYWNlLFxuXHRcdGVycm9ySGFuZGxlckludGVyZmFjZTogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByb21pc2VMaWJyYXJ5SW50ZXJmYWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZVxuXHQpIHtcblx0XHR0aGlzLnZlcnNpb24gPSAnMS40LjAtMSc7XG5cblx0XHR0aGlzLmFwaUZvcm1hdHRlciA9IG5ldyBBcGlGb3JtYXR0ZXIoKTtcblx0XHR0aGlzLmtleVNlcnZpY2UgPSBuZXcgS2V5U2VydmljZSgpO1xuXHRcdHRoaXMucXVlcnlTZXJ2aWNlID0gbmV3IFF1ZXJ5U2VydmljZSgpO1xuXHRcdHRoaXMuY29sdW1uVXRpbCA9IG5ldyBDb2x1bW5VdGlsKCk7XG5cblx0XHR0aGlzLmFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSA9IG5ldyBBcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnkodGhpcy5hcGlGb3JtYXR0ZXIpO1xuXG5cdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZSA9IG5ldyBBcGlSZXF1ZXN0U2VydmljZShleHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLCB0aGlzLmFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSk7XG5cblx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UgPSBuZXcgSXRlbUVudHJ5U2VydmljZShhdXRoSW50ZXJmYWNlLCB0aGlzLmtleVNlcnZpY2UpO1xuXHRcdHRoaXMuaXRlbVJlc291cmNlU2VydmljZSA9IG5ldyBJdGVtUmVzb3VyY2VTZXJ2aWNlKCk7XG5cblx0XHR0aGlzLmxvY2tTZXJ2aWNlID0gbmV3IExvY2tTZXJ2aWNlKFxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMua2V5U2VydmljZSxcblx0XHRcdHByb21pc2VMaWJyYXJ5SW50ZXJmYWNlXG5cdFx0KTtcblx0XHR0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkgPSBuZXcgUXVlcnlNYXRjaGVyRmFjdG9yeSh0aGlzLmFwaUZvcm1hdHRlcik7XG5cdFx0dGhpcy5pdGVtQ2FjaGVGYWN0b3J5ID0gbmV3IEl0ZW1DYWNoZUZhY3RvcnkodGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5KTtcblx0XHR0aGlzLmJhdGNoU3RhdHVzRmFjdG9yeSA9IG5ldyBCYXRjaFN0YXR1c0ZhY3RvcnkocHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UpO1xuXG5cdFx0dGhpcy5jb2x1bW5DYWNoZSA9IG5ldyBDb2x1bW5DYWNoZSh0aGlzLmNvbHVtblV0aWwpO1xuXHRcdHRoaXMuY29sdW1uSGFuZGxlciA9IG5ldyBDb2x1bW5IYW5kbGVyKFxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5jb2x1bW5DYWNoZSxcblx0XHRcdHRoaXMuY29sdW1uVXRpbFxuXHRcdCk7XG5cblx0XHR0aGlzLmNvbHVtbkluZm9GYWN0b3J5ID0gbmV3IENvbHVtbkluZm9GYWN0b3J5KCk7XG5cdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5ID0gbmV3IENvbHVtblNldEZhY3RvcnkodGhpcy5jb2x1bW5IYW5kbGVyLCB0aGlzLmNvbHVtblV0aWwsIHRoaXMuY29sdW1uSW5mb0ZhY3RvcnkpO1xuXHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSA9IG5ldyBDb2x1bW5FeHBhbnNpb25GYWN0b3J5KHRoaXMuY29sdW1uSW5mb0ZhY3RvcnksIHRoaXMuY29sdW1uVXRpbCk7XG5cblx0XHR0aGlzLnRlbXBsYXRlRmFjdG9yeSA9IG5ldyBUZW1wbGF0ZUZhY3RvcnkodGhpcy5jb2x1bW5TZXRGYWN0b3J5LCB0aGlzLmNvbHVtblV0aWwpO1xuXG5cdFx0dGhpcy5pdGVtRW50cnlGYWN0b3J5ID0gbmV3IEl0ZW1FbnRyeUZhY3RvcnkoXG5cdFx0XHRhdXRoSW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnksXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHRwcm9taXNlTGlicmFyeUludGVyZmFjZVxuXHRcdCk7XG5cdFx0dGhpcy5pdGVtSGFuZGxlciA9IG5ldyBJdGVtSGFuZGxlcihcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcblx0XHRcdHRoaXMuYmF0Y2hTdGF0dXNGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5VdGlsLFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5pdGVtQ2FjaGVGYWN0b3J5LFxuXHRcdFx0dGhpcy5pdGVtRW50cnlGYWN0b3J5LFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLnRlbXBsYXRlRmFjdG9yeVxuXHRcdCk7XG5cdFx0dGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UgPSBuZXcgSXRlbVJlcXVlc3RTZXJ2aWNlKHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxuXHRcdFx0dGhpcy5pdGVtRW50cnlGYWN0b3J5LFxuXHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UsXG5cdFx0XHRwcm9taXNlTGlicmFyeUludGVyZmFjZVxuXHRcdCk7XG5cblx0XHR0aGlzLnF1ZXJ5UGFyc2VyRmFjdG9yeSA9IG5ldyBRdWVyeVBhcnNlckZhY3RvcnkoKTtcblx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UgPSBuZXcgQ29sbGVjdGlvbkVudHJ5U2VydmljZSh0aGlzLnF1ZXJ5UGFyc2VyRmFjdG9yeSwgdGhpcy5xdWVyeVNlcnZpY2UpO1xuXHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZSA9IG5ldyBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlKCk7XG5cdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlGYWN0b3J5ID0gbmV3IENvbGxlY3Rpb25FbnRyeUZhY3RvcnkoXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnksXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnksXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLFxuXHRcdFx0dGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHRwcm9taXNlTGlicmFyeUludGVyZmFjZSxcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlXG5cdFx0KTtcblx0XHR0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkgPSBuZXcgQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSh0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkpO1xuXHRcdHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5ID0gbmV3IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSh0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkpO1xuXHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIgPSBuZXcgQ29sbGVjdGlvbkhhbmRsZXIoXG5cdFx0XHR0aGlzLmJhdGNoU3RhdHVzRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5RmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcblx0XHRcdHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLnF1ZXJ5UGFyc2VyRmFjdG9yeSxcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlXG5cdFx0KTtcblxuXHRcdHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkgPSBuZXcgUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkodGhpcy5jb2x1bW5VdGlsKTtcblx0XHR0aGlzLmNyZWF0ZVJlcXVlc3RGYWN0b3J5ID0gbmV3IENyZWF0ZVJlcXVlc3RGYWN0b3J5KFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcblx0XHRcdHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxuXHRcdCk7XG5cdFx0dGhpcy5jaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5ID0gbmV3IENoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkodGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LCB0aGlzLmtleVNlcnZpY2UpO1xuXHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkgPSBuZXcgQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkoXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHR0aGlzLmNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5jcmVhdGVSZXF1ZXN0RmFjdG9yeSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXG5cdFx0XHRwcm9taXNlTGlicmFyeUludGVyZmFjZSxcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnlcblx0XHQpO1xuXHRcdHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSA9IG5ldyBJdGVtUmVzb3VyY2VGYWN0b3J5KHRoaXMuaXRlbVJlc291cmNlU2VydmljZSxcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxuXHRcdFx0dGhpcy5sb2NrU2VydmljZSxcblx0XHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkuY29uc3RydWN0KCksXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHRwcm9taXNlTGlicmFyeUludGVyZmFjZVxuXHRcdCk7XG5cdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5ID0gbmV3IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkoXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2Vcblx0XHQpO1xuXG5cdFx0dGhpcy5sb2NhbENhY2hlRmFjdG9yeSA9IG5ldyBMb2NhbENhY2hlRmFjdG9yeShlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLFxuXHRcdFx0dGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRcdFx0dGhpcy5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbUNhY2hlRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbVJlc291cmNlU2VydmljZSxcblx0XHRcdHByb21pc2VMaWJyYXJ5SW50ZXJmYWNlXG5cdFx0KTtcblx0XHR0aGlzLm1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkgPSBuZXcgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSgpO1xuXG5cdFx0dGhpcy5pdGVtQWRtaW5pc3RyYXRvciA9IG5ldyBJdGVtQWRtaW5pc3RyYXRvcihcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHRhdXRoSW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcblx0XHRcdHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcblx0XHRcdHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5sb2NhbENhY2hlRmFjdG9yeSxcblx0XHRcdGxvY2FsQ2FjaGVNYW5hZ2VyLFxuXHRcdFx0dGhpcy5tb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxuXHRcdFx0cHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZVxuXHRcdCk7XG5cblx0XHR0aGlzLnNvY2tldE1lc3NhZ2VIYW5kbGVyID0gbmV3IFNvY2tldE1lc3NhZ2VIYW5kbGVyKHByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXG5cdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlXG5cdFx0KTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9vcCAoKSB7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eSAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlO1xufVxuIiwiZXhwb3J0ICogZnJvbSAnLi9jb3JlJztcclxuZXhwb3J0ICogZnJvbSAnLi9jb25zdGFudHMnO1xyXG5leHBvcnQgKiBmcm9tICcuL21vZGVscyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJmYWNlcyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vY2xhc3Nlcyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZmFjdG9yaWVzJztcclxuZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=
|
|
7404
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9SbUNvcmUvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL1JtQ29yZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9SbUNvcmUvZXh0ZXJuYWwgXCJtb21lbnRcIiIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9VdGlsLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0FwaUZvcm1hdHRlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9BcGlSZXF1ZXN0U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9BcGlSZXNwb25zZVByb2Nlc3Nvci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY29uc3RhbnRzLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0JhdGNoU3RhdHVzLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NoYW5nZXNDb21waWxhdGlvbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9DaGFuZ2VzUHJvY2Vzc29yLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25DYWNoZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2xsZWN0aW9uRW50cnlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25IYW5kbGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25NYXRjaGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uRXhwYW5zaW9uLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbHVtbkhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uSW5mby50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2x1bW5TZXQudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uVXRpbC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9DcmVhdGVSZXF1ZXN0LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvbkVudHJ5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvblJlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvblZpZXdSZXNvdXJjZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL0NvbGxlY3Rpb25FZGl0UmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9JdGVtRW50cnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9JdGVtUmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9WaWV3UmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9FZGl0UmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9UZW1wbGF0ZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL2luZGV4LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1BZG1pbmlzdHJhdG9yLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1DYWNoZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtRW50cnlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1IYW5kbGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1SZXF1ZXN0U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtUmVzb3VyY2VTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0tleVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL3R5cGVzL0l0ZW1UeXBlc0NvbGxlY3Rpb24udHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL3R5cGVzL2luZGV4LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0xvY2FsQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvTG9ja1NlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL1F1ZXJ5TWF0Y2hlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9RdWVyeVBhcnNlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9RdWVyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvUmVxdWVzdENvbHVtbkV4cGFuc2lvbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Tb2NrZXRNZXNzYWdlSGFuZGxlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9pbmRleC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0FwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0JhdGNoU3RhdHVzRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9DaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbGxlY3Rpb25DYWNoZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2xsZWN0aW9uRW50cnlGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbHVtbkV4cGFuc2lvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2x1bW5JbmZvRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbHVtblNldEZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9DcmVhdGVSZXF1ZXN0RmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0l0ZW1DYWNoZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9JdGVtRW50cnlGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvSXRlbVJlc291cmNlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0xvY2FsQ2FjaGVGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL1F1ZXJ5TWF0Y2hlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9RdWVyeVBhcnNlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9SZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL1RlbXBsYXRlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL2luZGV4LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jb3JlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTztBQ1ZBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0RBQTBDLGdDQUFnQztBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdFQUF3RCxrQkFBa0I7QUFDMUU7QUFDQSx5REFBaUQsY0FBYztBQUMvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQXlDLGlDQUFpQztBQUMxRSx3SEFBZ0gsbUJBQW1CLEVBQUU7QUFDckk7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBMkIsMEJBQTBCLEVBQUU7QUFDdkQseUNBQWlDLGVBQWU7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOERBQXNELCtEQUErRDs7QUFFckg7QUFDQTs7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Qyx1QkFBdUIsRUFDdkIsSUFBSSxDQUFDLFlBQVksQ0FDakIsQ0FBQztRQUVGLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLG9CQUFvQixDQUFDLHVCQUF1QixFQUMzRSxJQUFJLENBQUMsaUJBQWlCLEVBQ3RCLElBQUksQ0FBQyxXQUFXLEVBQ2hCLElBQUksQ0FBQyxnQkFBZ0IsRUFDckIsSUFBSSxDQUFDLGlCQUFpQixFQUN0QixJQUFJLENBQUMsZ0JBQWdCLEVBQ3JCLElBQUksQ0FBQyxzQkFBc0IsRUFDM0IsSUFBSSxDQUFDLDZCQUE2QixFQUNsQyxJQUFJLENBQUMsWUFBWSxFQUNqQixxQkFBcUIsQ0FDckIsQ0FBQztJQUNILENBQUM7SUFDRixhQUFDO0FBQUQsQ0FBQzs7QUFFSztBQUNOLENBQUM7QUFFSyxrQkFBb0IsS0FBSztJQUM5QixNQUFNLENBQUMsS0FBSyxDQUFDO0FBQ2QsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3RTc0I7QUFDSztBQUNIO0FBRUM7QUFDRTtBQUNKIiwiZmlsZSI6InJtLWNvcmUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJtb21lbnRcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW1wibW9tZW50XCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIlJtQ29yZVwiXSA9IGZhY3RvcnkocmVxdWlyZShcIm1vbWVudFwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiUm1Db3JlXCJdID0gZmFjdG9yeShyb290W1wibW9tZW50XCJdKTtcbn0pKHdpbmRvdywgZnVuY3Rpb24oX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fMF9fKSB7XG5yZXR1cm4gIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDEpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX18wX187IiwiZXhwb3J0IGZ1bmN0aW9uIHNoYWxsb3dNZXJnZSAob2JqZWN0LCBkZWZhdWx0cykge1xyXG5cdGlmIChvYmplY3QgPT09IHVuZGVmaW5lZClcclxuXHRcdHJldHVybiBkZWZhdWx0cztcclxuXHJcblx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdGZvciAoY29uc3Qga2V5IGluIGRlZmF1bHRzKSB7XHJcblx0XHRyZXN1bHRba2V5XSA9IG9iamVjdFtrZXldID09PSB1bmRlZmluZWQgP1xyXG5cdFx0XHRkZWZhdWx0c1trZXldIDogb2JqZWN0W2tleV07XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaGFzUHJvcGVydGllcyAob2JqZWN0KSB7XHJcblx0Ly8gQHRzLWlnbm9yZVxyXG5cdGZvciAoY29uc3Qga2V5IGluIG9iamVjdClcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cclxuXHRyZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRGaXJzdFByb3BlcnR5IChvYmplY3QpIHtcclxuXHRpZiAodHlwZW9mIG9iamVjdCAhPT0gJ29iamVjdCcpXHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHJcblx0Zm9yIChjb25zdCBrZXkgaW4gb2JqZWN0KVxyXG5cdFx0cmV0dXJuIGtleTtcclxuXHJcblx0cmV0dXJuIG51bGw7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpbkFycmF5IChuZWVkbGUsIGhheXN0YWNrKSB7XHJcblx0Zm9yIChjb25zdCBoYXkgb2YgaGF5c3RhY2spIHtcclxuXHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXHJcblx0XHRpZiAobmVlZGxlID09IGhheSlcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJBcnJheTxUPiAoc291cmNlOiBUW10sIGNhbGxiYWNrOiAoVCkgPT4gYm9vbGVhbik6IGJvb2xlYW4ge1xyXG5cdGNvbnN0IGZpbHRlcmVkOiBUW10gPSBbXTtcclxuXHJcblx0Zm9yIChjb25zdCBzcmMgb2Ygc291cmNlKSB7XHJcblx0XHRpZiAoY2FsbGJhY2soc3JjKSlcclxuXHRcdFx0ZmlsdGVyZWQucHVzaChzcmMpO1xyXG5cdH1cclxuXHJcblx0aWYgKGZpbHRlcmVkLmxlbmd0aCA9PT0gc291cmNlLmxlbmd0aClcclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0ZW1wdHlBcnJheShzb3VyY2UpO1xyXG5cclxuXHRmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJlZClcclxuXHRcdHNvdXJjZS5wdXNoKGZpbHRlcik7XHJcblxyXG5cdHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZW1wdHlBcnJheSAoYXJyYXkpOiB2b2lkIHtcclxuXHRhcnJheS5zcGxpY2UoMCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwYXRoRXhpc3RzIChzb3VyY2UsIHBhdGgpIHtcclxuXHRpZiAodHlwZW9mIHNvdXJjZSA9PT0gJ3VuZGVmaW5lZCcpXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdGZvciAoY29uc3QgcCBvZiBwYXRoKSB7XHJcblx0XHRpZiAodHlwZW9mIHNvdXJjZVtwXSA9PT0gJ3VuZGVmaW5lZCcpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRzb3VyY2UgPSBzb3VyY2VbcF07XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gdHJ1ZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBhdGggKG9iamVjdDoge30sIHBhdGg6IEFycmF5PG51bWJlciB8IHN0cmluZz4sIGRlZmF1bHRzOiBhbnlbXSk6IGFueSB7XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRjb25zdCB2YWx1ZSA9IHBhdGhbaV07XHJcblxyXG5cdFx0aWYgKG9iamVjdFt2YWx1ZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0b2JqZWN0W3ZhbHVlXSA9IGRlZmF1bHRzW2ldO1xyXG5cclxuXHRcdG9iamVjdCA9IG9iamVjdFt2YWx1ZV07XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gb2JqZWN0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGF0aCAob2JqZWN0OiB7fSwgcGF0aDogQXJyYXk8bnVtYmVyIHwgc3RyaW5nPiwgY3JlYXRlOiBib29sZWFuID0gZmFsc2UpOiBhbnkge1xyXG5cdGlmIChvYmplY3QgPT09IHVuZGVmaW5lZClcclxuXHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG5cdGZvciAoY29uc3QgcCBvZiBwYXRoKSB7XHJcblx0XHRvYmplY3QgPSBvYmplY3RbcF07IC8vIHdvbid0IGFsdGVyIHRoZSBjYWxsZXIncyB2YXJcclxuXHJcblx0XHRpZiAob2JqZWN0ID09PSB1bmRlZmluZWQgJiYgIWNyZWF0ZSlcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHR9XHJcblxyXG5cdHJldHVybiBvYmplY3Q7XHJcbn1cclxuXHJcbi8vIFRha2VuIGZyb20gQW5ndWxhckpTLCBhZGRlZCBjb21tZW50cyB0byBpZ25vcmUgVHlwZVNjcmlwdCBlcnJvcnNcclxuZnVuY3Rpb24gYmFzZUV4dGVuZCAoZHN0LCBvYmpzLCBkZWVwKSB7XHJcblx0Zm9yIChsZXQgaSA9IDAsIGlpID0gb2Jqcy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XHJcblx0XHRjb25zdCBvYmogPSBvYmpzW2ldO1xyXG5cclxuXHRcdGlmICghaXNPYmplY3Qob2JqKSAmJiAhaXNGdW5jdGlvbihvYmopKVxyXG5cdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcclxuXHJcblx0XHRmb3IgKGxldCBqID0gMCwgamogPSBrZXlzLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcclxuXHRcdFx0Y29uc3Qga2V5ID0ga2V5c1tqXTtcclxuXHRcdFx0Y29uc3Qgc3JjID0gb2JqW2tleV07XHJcblxyXG5cdFx0XHRpZiAoZGVlcCAmJiBpc09iamVjdChzcmMpKSB7XHJcblx0XHRcdFx0aWYgKGlzRGF0ZShzcmMpKSB7XHJcblx0XHRcdFx0XHRkc3Rba2V5XSA9IG5ldyBEYXRlKHNyYy52YWx1ZU9mKCkpO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAoaXNSZWdFeHAoc3JjKSkge1xyXG5cdFx0XHRcdFx0ZHN0W2tleV0gPSBuZXcgUmVnRXhwKHNyYyk7XHJcblx0XHRcdFx0fSBlbHNlIGlmIChzcmMubm9kZU5hbWUpIHtcclxuXHRcdFx0XHRcdGRzdFtrZXldID0gc3JjLmNsb25lTm9kZSh0cnVlKTtcclxuXHRcdFx0XHR9IGVsc2UgaWYgKGlzRWxlbWVudChzcmMpKSB7XHJcblx0XHRcdFx0XHRkc3Rba2V5XSA9IHNyYy5jbG9uZSgpO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRpZiAoIWlzT2JqZWN0KGRzdFtrZXldKSlcclxuXHRcdFx0XHRcdFx0ZHN0W2tleV0gPSBpc0FycmF5KHNyYykgPyBbXSA6IHt9O1xyXG5cclxuXHRcdFx0XHRcdGJhc2VFeHRlbmQoZHN0W2tleV0sIFtzcmNdLCB0cnVlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0ZHN0W2tleV0gPSBzcmM7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHJldHVybiBkc3Q7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBleHRlbmQgKGRzdCwgLi4uYXJncykge1xyXG5cdHJldHVybiBiYXNlRXh0ZW5kKGRzdCwgYXJncywgZmFsc2UpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2UgKGRzdCwgLi4uYXJncykge1xyXG5cdHJldHVybiBiYXNlRXh0ZW5kKGRzdCwgYXJncywgdHJ1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdCAodmFsdWUpIHtcclxuXHQvLyBodHRwOi8vanNwZXJmLmNvbS9pc29iamVjdDRcclxuXHRyZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzQmxhbmtPYmplY3QgKHZhbHVlKSB7XHJcblx0cmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgIU9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZyAodmFsdWUpIHtcclxuXHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVtYmVyICh2YWx1ZSkge1xyXG5cdHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRlICh2YWx1ZSkge1xyXG5cdHJldHVybiB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNGdW5jdGlvbiAodmFsdWUpIHtcclxuXHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNSZWdFeHAgKHZhbHVlKSB7XHJcblx0cmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBSZWdFeHBdJztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzQm9vbGVhbiAodmFsdWUpIHtcclxuXHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbic7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0VsZW1lbnQgKG5vZGUpIHtcclxuXHRyZXR1cm4gISEobm9kZSAmJlxyXG5cdFx0KFxyXG5cdFx0XHRub2RlLm5vZGVOYW1lICAvLyBXZSBhcmUgYSBkaXJlY3QgZWxlbWVudC5cclxuXHRcdFx0fHwgKG5vZGUucHJvcCAmJiBub2RlLmF0dHIgJiYgbm9kZS5maW5kKVxyXG5cdFx0KVxyXG5cdCk7ICAvLyBXZSBoYXZlIGFuIG9uIGFuZCBmaW5kIG1ldGhvZCBwYXJ0IG9mIGpRdWVyeSBBUEkuXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1dpbmRvdyAob2JqKSB7XHJcblx0cmV0dXJuIG9iaiAmJiBvYmoud2luZG93ID09PSBvYmo7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0RlZmluZWQgKHZhbHVlKSB7XHJcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCc7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBlcXVhbHMgKG8xLCBvMikge1xyXG5cdGlmIChvMSA9PT0gbzIpXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHJcblx0aWYgKG8xID09PSBudWxsIHx8IG8yID09PSBudWxsKVxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXHJcblx0aWYgKG8xICE9PSBvMSAmJiBvMiAhPT0gbzIpXHJcblx0XHRyZXR1cm4gdHJ1ZTsgLy8gTmFOID09PSBOYU5cclxuXHJcblx0Y29uc3QgdDEgPSB0eXBlb2YgbzE7XHJcblx0Y29uc3QgdDIgPSB0eXBlb2YgbzI7XHJcblxyXG5cdGxldCBsZW5ndGg7XHJcblx0bGV0IGtleTtcclxuXHRsZXQga2V5U2V0O1xyXG5cclxuXHRpZiAodDEgPT09IHQyICYmIHQxID09PSAnb2JqZWN0Jykge1xyXG5cdFx0aWYgKGlzQXJyYXkobzEpKSB7XHJcblx0XHRcdGlmICghaXNBcnJheShvMikpXHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdFx0bGVuZ3RoID0gbzEubGVuZ3RoO1xyXG5cclxuXHRcdFx0aWYgKG8xLmxlbmd0aCA9PT0gbzIubGVuZ3RoKSB7XHJcblx0XHRcdFx0Zm9yIChrZXkgPSAwOyBrZXkgPCBsZW5ndGg7IGtleSsrKSB7XHJcblx0XHRcdFx0XHRpZiAoIWVxdWFscyhvMVtrZXldLCBvMltrZXldKSlcclxuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSBpZiAoaXNEYXRlKG8xKSkge1xyXG5cdFx0XHRpZiAoIWlzRGF0ZShvMikpXHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdFx0cmV0dXJuIHNpbXBsZUNvbXBhcmUobzEuZ2V0VGltZSgpLCBvMi5nZXRUaW1lKCkpO1xyXG5cdFx0fSBlbHNlIGlmIChpc1JlZ0V4cChvMSkpIHtcclxuXHRcdFx0aWYgKCFpc1JlZ0V4cChvMikpXHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdFx0cmV0dXJuIG8xLnRvU3RyaW5nKCkgPT09IG8yLnRvU3RyaW5nKCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRpZiAoaXNXaW5kb3cobzEpIHx8IGlzV2luZG93KG8yKSB8fCBpc0FycmF5KG8yKSB8fCBpc0RhdGUobzIpIHx8IGlzUmVnRXhwKG8yKSlcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0XHRrZXlTZXQgPSBjcmVhdGVNYXAoKTtcclxuXHRcdFx0Zm9yIChrZXkgaW4gbzEpIHtcclxuXHRcdFx0XHRpZiAoaXNGdW5jdGlvbihvMVtrZXldKSlcclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0XHRpZiAoIWVxdWFscyhvMVtrZXldLCBvMltrZXldKSlcclxuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRcdFx0a2V5U2V0W2tleV0gPSB0cnVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRmb3IgKGtleSBpbiBvMikge1xyXG5cdFx0XHRcdGlmICghKGtleSBpbiBrZXlTZXQpICYmIGlzRGVmaW5lZChvMltrZXldKSAmJiAhaXNGdW5jdGlvbihvMltrZXldKSlcclxuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZU1hcCAoKSB7XHJcblx0cmV0dXJuIE9iamVjdC5jcmVhdGUobnVsbCk7XHJcbn1cclxuXHJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcclxuZnVuY3Rpb24gc2ltcGxlQ29tcGFyZSAoYSwgYikge1xyXG5cdHJldHVybiBhID09PSBiIHx8IChhICE9PSBhICYmIGIgIT09IGIpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1ZhbGlkT2JqZWN0TWF4RGVwdGggKG1heERlcHRoKSB7XHJcblx0cmV0dXJuIGlzTnVtYmVyKG1heERlcHRoKSAmJiBtYXhEZXB0aCA+IDA7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3B5IChzb3VyY2UsIGRlc3RpbmF0aW9uPywgbWF4RGVwdGg/KSB7XHJcblx0Y29uc3Qgc3RhY2tTb3VyY2UgPSBbXTtcclxuXHRjb25zdCBzdGFja0Rlc3QgPSBbXTtcclxuXHJcblx0bWF4RGVwdGggPSBpc1ZhbGlkT2JqZWN0TWF4RGVwdGgobWF4RGVwdGgpID8gbWF4RGVwdGggOiBOYU47XHJcblxyXG5cdGlmIChkZXN0aW5hdGlvbikge1xyXG5cdFx0aWYgKHNvdXJjZSA9PT0gZGVzdGluYXRpb24pIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IGNvcHkhIFNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlIGlkZW50aWNhbC4nKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBFbXB0eSB0aGUgZGVzdGluYXRpb24gb2JqZWN0XHJcblx0XHRpZiAoaXNBcnJheShkZXN0aW5hdGlvbikpIHtcclxuXHRcdFx0ZGVzdGluYXRpb24ubGVuZ3RoID0gMDtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIGRlc3RpbmF0aW9uKVxyXG5cdFx0XHRcdGRlbGV0ZSBkZXN0aW5hdGlvbltrZXldO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEB0cy1pZ25vcmVcclxuXHRcdHN0YWNrU291cmNlLnB1c2goc291cmNlKTtcclxuXHRcdC8vIEB0cy1pZ25vcmVcclxuXHRcdHN0YWNrRGVzdC5wdXNoKGRlc3RpbmF0aW9uKTtcclxuXHJcblx0XHRyZXR1cm4gY29weVJlY3Vyc2Uoc291cmNlLCBkZXN0aW5hdGlvbiwgbWF4RGVwdGgpO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIGNvcHlFbGVtZW50KHNvdXJjZSwgbWF4RGVwdGgpO1xyXG5cclxuXHRmdW5jdGlvbiBjb3B5UmVjdXJzZSAoX3NvdXJjZSwgX2Rlc3RpbmF0aW9uLCBfbWF4RGVwdGgpIHtcclxuXHRcdF9tYXhEZXB0aC0tO1xyXG5cclxuXHRcdGlmIChfbWF4RGVwdGggPCAwKVxyXG5cdFx0XHRyZXR1cm4gJy4uLic7XHJcblxyXG5cdFx0aWYgKGlzQXJyYXkoX3NvdXJjZSkpIHtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIGlpID0gX3NvdXJjZS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XHJcblx0XHRcdFx0X2Rlc3RpbmF0aW9uLnB1c2goY29weUVsZW1lbnQoX3NvdXJjZVtpXSwgX21heERlcHRoKSk7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSBpZiAoaXNCbGFua09iamVjdChfc291cmNlKSkge1xyXG5cdFx0XHQvLyBjcmVhdGVNYXAoKSBmYXN0IHBhdGggLS0tIFNhZmUgdG8gYXZvaWQgaGFzT3duUHJvcGVydHkgY2hlY2sgYmVjYXVzZSBwcm90b3R5cGUgY2hhaW4gaXMgZW1wdHlcclxuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gX3NvdXJjZSkge1xyXG5cdFx0XHRcdF9kZXN0aW5hdGlvbltrZXldID0gY29weUVsZW1lbnQoX3NvdXJjZVtrZXldLCBfbWF4RGVwdGgpO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2UgaWYgKF9zb3VyY2UgJiYgdHlwZW9mIF9zb3VyY2UuaGFzT3duUHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcclxuXHRcdFx0Ly8gU2xvdyBwYXRoLCB3aGljaCBtdXN0IHJlbHkgb24gaGFzT3duUHJvcGVydHlcclxuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gX3NvdXJjZSkge1xyXG5cdFx0XHRcdGlmIChfc291cmNlLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuXHRcdFx0XHRcdF9kZXN0aW5hdGlvbltrZXldID0gY29weUVsZW1lbnQoX3NvdXJjZVtrZXldLCBfbWF4RGVwdGgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly8gU2xvd2VzdCBwYXRoIC0tLSBoYXNPd25Qcm9wZXJ0eSBjYW4ndCBiZSBjYWxsZWQgYXMgYSBtZXRob2RcclxuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gX3NvdXJjZSkge1xyXG5cdFx0XHRcdGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX3NvdXJjZSwga2V5KSkge1xyXG5cdFx0XHRcdFx0X2Rlc3RpbmF0aW9uW2tleV0gPSBjb3B5RWxlbWVudChfc291cmNlW2tleV0sIF9tYXhEZXB0aCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIF9kZXN0aW5hdGlvbjtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGNvcHlFbGVtZW50IChfc291cmNlLCBfbWF4RGVwdGggPSA1KSB7XHJcblx0XHQvLyBTaW1wbGUgdmFsdWVzXHJcblx0XHRpZiAoIWlzT2JqZWN0KF9zb3VyY2UpKVxyXG5cdFx0XHRyZXR1cm4gX3NvdXJjZTtcclxuXHJcblx0XHQvLyBBbHJlYWR5IGNvcGllZCB2YWx1ZXNcclxuXHRcdC8vIEB0cy1pZ25vcmVcclxuXHRcdGNvbnN0IGluZGV4ID0gc3RhY2tTb3VyY2UuaW5kZXhPZihfc291cmNlKTtcclxuXHJcblx0XHRpZiAoaW5kZXggIT09IC0xKVxyXG5cdFx0XHRyZXR1cm4gc3RhY2tEZXN0W2luZGV4XTtcclxuXHJcblx0XHRpZiAoaXNXaW5kb3coX3NvdXJjZSkpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IGNvcHkhIE1ha2luZyBjb3BpZXMgb2YgV2luZG93IGluc3RhbmNlcyBpcyBub3Qgc3VwcG9ydGVkLicpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBuZWVkc1JlY3Vyc2UgPSBmYWxzZTtcclxuXHRcdGxldCBfZGVzdGluYXRpb24gPSBjb3B5VHlwZShfc291cmNlKTtcclxuXHJcblx0XHRpZiAoX2Rlc3RpbmF0aW9uID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0X2Rlc3RpbmF0aW9uID0gaXNBcnJheShfc291cmNlKSA/IFtdIDogT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YoX3NvdXJjZSkpO1xyXG5cdFx0XHRuZWVkc1JlY3Vyc2UgPSB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEB0cy1pZ25vcmVcclxuXHRcdHN0YWNrU291cmNlLnB1c2goX3NvdXJjZSk7XHJcblx0XHQvLyBAdHMtaWdub3JlXHJcblx0XHRzdGFja0Rlc3QucHVzaChfZGVzdGluYXRpb24pO1xyXG5cclxuXHRcdHJldHVybiBuZWVkc1JlY3Vyc2VcclxuXHRcdFx0PyBjb3B5UmVjdXJzZShfc291cmNlLCBfZGVzdGluYXRpb24sIF9tYXhEZXB0aClcclxuXHRcdFx0OiBfZGVzdGluYXRpb247XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBjb3B5VHlwZSAoX3NvdXJjZSkge1xyXG5cdFx0c3dpdGNoICh0b1N0cmluZy5jYWxsKF9zb3VyY2UpKSB7XHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgSW50OEFycmF5XSc6XHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgSW50MTZBcnJheV0nOlxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IEludDMyQXJyYXldJzpcclxuXHRcdFx0Y2FzZSAnW29iamVjdCBGbG9hdDMyQXJyYXldJzpcclxuXHRcdFx0Y2FzZSAnW29iamVjdCBGbG9hdDY0QXJyYXldJzpcclxuXHRcdFx0Y2FzZSAnW29iamVjdCBVaW50OEFycmF5XSc6XHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJzpcclxuXHRcdFx0Y2FzZSAnW29iamVjdCBVaW50MTZBcnJheV0nOlxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IFVpbnQzMkFycmF5XSc6XHJcblx0XHRcdFx0cmV0dXJuIG5ldyBfc291cmNlLmNvbnN0cnVjdG9yKGNvcHlFbGVtZW50KF9zb3VyY2UuYnVmZmVyKSwgX3NvdXJjZS5ieXRlT2Zmc2V0LCBfc291cmNlLmxlbmd0aCk7XHJcblxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IEFycmF5QnVmZmVyXSc6XHJcblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUxMFxyXG5cdFx0XHRcdGlmICghX3NvdXJjZS5zbGljZSkge1xyXG5cdFx0XHRcdFx0Ly8gSWYgd2UncmUgaW4gdGhpcyBjYXNlIHdlIGtub3cgdGhlIGVudmlyb25tZW50IHN1cHBvcnRzIEFycmF5QnVmZmVyXHJcblx0XHRcdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqL1xyXG5cdFx0XHRcdFx0Y29uc3QgY29waWVkID0gbmV3IEFycmF5QnVmZmVyKF9zb3VyY2UuYnl0ZUxlbmd0aCk7XHJcblx0XHRcdFx0XHRuZXcgVWludDhBcnJheShjb3BpZWQpLnNldChuZXcgVWludDhBcnJheShfc291cmNlKSk7XHJcblx0XHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlICovXHJcblx0XHRcdFx0XHRyZXR1cm4gY29waWVkO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4gX3NvdXJjZS5zbGljZSgwKTtcclxuXHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgQm9vbGVhbl0nOlxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IE51bWJlcl0nOlxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IFN0cmluZ10nOlxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IERhdGVdJzpcclxuXHRcdFx0XHRyZXR1cm4gbmV3IF9zb3VyY2UuY29uc3RydWN0b3IoX3NvdXJjZS52YWx1ZU9mKCkpO1xyXG5cclxuXHRcdFx0Y2FzZSAnW29iamVjdCBSZWdFeHBdJzpcclxuXHRcdFx0XHRjb25zdCByZSA9IG5ldyBSZWdFeHAoX3NvdXJjZS5fc291cmNlLCBfc291cmNlLnRvU3RyaW5nKCkubWF0Y2goL1teL10qJC8pWzBdKTtcclxuXHJcblx0XHRcdFx0cmUubGFzdEluZGV4ID0gX3NvdXJjZS5sYXN0SW5kZXg7XHJcblxyXG5cdFx0XHRcdHJldHVybiByZTtcclxuXHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgQmxvYl0nOlxyXG5cdFx0XHRcdHJldHVybiBuZXcgX3NvdXJjZS5jb25zdHJ1Y3RvcihbX3NvdXJjZV0sIHt0eXBlOiBfc291cmNlLnR5cGV9KTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaXNGdW5jdGlvbihfc291cmNlLmNsb25lTm9kZSkpIHtcclxuXHRcdFx0cmV0dXJuIF9zb3VyY2UuY2xvbmVOb2RlKHRydWUpO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuXHJcbmltcG9ydCB7IENvbHVtbkluZm8gfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgRmllbGRNYXAgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5pbXBvcnQgeyBjb3B5LCBlcXVhbHMgfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEFwaUZvcm1hdHRlciB7XHJcblx0TU9NRU5UX0lOVkFMSUQgPSAnSW52YWxpZCBkYXRlJztcclxuXHRTRVJWRVJfREFURVRJTUVfRk9STUFUID0gJ1lZWVktTU0tRERbVF1ISDptbTpzc1onO1xyXG5cdFNFUlZFUl9USU1FX0ZPUk1BVCA9ICdISDptbTpzcyc7XHJcblx0U0VSVkVSX0RBVEVfRk9STUFUID0gJ1lZWVktTU0tREQnO1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoKSB7XHJcblxyXG5cdH1cclxuXHJcblx0Zm9ybWF0UmVzcG9uc2UgKGZpZWxkczogRmllbGRNYXAsIGNvbHVtbnM6IENvbHVtbkluZm9bXSk6IEZpZWxkTWFwIHtcclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpXHJcblx0XHRcdGZpZWxkc1tjb2x1bW4ucGF0aF0gPSB0aGlzLmZvcm1hdFJlc3BvbnNlVmFsdWUoY29sdW1uLmFwaUNvbHVtbi50eXBlLCBmaWVsZHNbY29sdW1uLnBhdGhdKTtcclxuXHJcblx0XHRyZXR1cm4gZmllbGRzO1xyXG5cdH1cclxuXHJcblx0ZXhwYW5kUmVzcG9uc2UgKGN1cnJlbnQ6IEZpZWxkTWFwLCBleHBhbmRlZDogRmllbGRNYXAsIGNvbHVtbnM6IENvbHVtbkluZm9bXSk6IEZpZWxkTWFwIHtcclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpXHJcblx0XHRcdGN1cnJlbnRbY29sdW1uLnBhdGhdID0gdGhpcy5mb3JtYXRSZXNwb25zZVZhbHVlKGNvbHVtbi5hcGlDb2x1bW4udHlwZSwgZXhwYW5kZWRbY29sdW1uLnBhdGhdKTtcclxuXHJcblx0XHRyZXR1cm4gY3VycmVudDtcclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlcXVlc3QgKGluaXRpYWw6IEZpZWxkTWFwLCBtb2RpZmllZDogRmllbGRNYXAsIGNvbHVtbnM6IENvbHVtbkluZm9bXSk6IEZpZWxkTWFwIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XHJcblx0XHRcdGNvbnN0IGFwaUNvbHVtbiA9IGNvbHVtbi5hcGlDb2x1bW47XHJcblx0XHRcdGNvbnN0IGNvbHVtblR5cGUgPSBhcGlDb2x1bW4udHlwZTtcclxuXHJcblx0XHRcdGlmIChhcGlDb2x1bW4ucmVhZE9ubHkpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRpZiAoIXRoaXMuY29tcGFyZUZpZWxkcyhjb2x1bW5UeXBlLCBpbml0aWFsW2NvbHVtbklkXSwgbW9kaWZpZWRbY29sdW1uSWRdKSlcclxuXHRcdFx0XHRyZXN1bHRbY29sdW1uSWRdID0gdGhpcy5mb3JtYXRSZXF1ZXN0VmFsdWUoY29sdW1uVHlwZSwgbW9kaWZpZWRbY29sdW1uSWRdKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Zm9ybWF0UmVxdWVzdExvY2FsIChmaWVsZHM6IEZpZWxkTWFwLCBjb2x1bW5zOiBDb2x1bW5JbmZvW10pOiBGaWVsZE1hcCB7XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uLmlkO1xyXG5cdFx0XHRjb25zdCBhcGlDb2x1bW4gPSBjb2x1bW4uYXBpQ29sdW1uO1xyXG5cclxuXHRcdFx0aWYgKGFwaUNvbHVtbi5yZWFkT25seSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdHJlc3VsdFtjb2x1bW5JZF0gPSB0aGlzLmZvcm1hdFJlcXVlc3RWYWx1ZShhcGlDb2x1bW4udHlwZSwgZmllbGRzW2NvbHVtbklkXSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGhhc0NoYW5nZXMgKGluaXRpYWw6IEZpZWxkTWFwLCBtb2RpZmllZDogRmllbGRNYXAsIGNvbHVtbnM6IENvbHVtbkluZm9bXSk6IGJvb2xlYW4ge1xyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcclxuXHRcdFx0Y29uc3QgYXBpQ29sdW1uID0gY29sdW1uLmFwaUNvbHVtbjtcclxuXHJcblx0XHRcdGlmIChhcGlDb2x1bW4ucmVhZE9ubHkpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRpZiAoIXRoaXMuY29tcGFyZUZpZWxkcyhhcGlDb2x1bW4udHlwZSwgaW5pdGlhbFtjb2x1bW5JZF0sIG1vZGlmaWVkW2NvbHVtbklkXSkpXHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Z2V0Q2hhbmdlcyAoaW5pdGlhbDogRmllbGRNYXAsIG1vZGlmaWVkOiBGaWVsZE1hcCwgY29sdW1uczogQ29sdW1uSW5mb1tdKTogRmllbGRNYXAge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBvYmplY3RbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XHJcblx0XHRcdGNvbnN0IGFwaUNvbHVtbiA9IGNvbHVtbi5hcGlDb2x1bW47XHJcblxyXG5cdFx0XHRpZiAoYXBpQ29sdW1uLnJlYWRPbmx5KVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0aWYgKCF0aGlzLmNvbXBhcmVGaWVsZHMoYXBpQ29sdW1uLnR5cGUsIGluaXRpYWxbY29sdW1uSWRdLCBtb2RpZmllZFtjb2x1bW5JZF0pKSB7XHJcblx0XHRcdFx0cmVzdWx0LnB1c2goXHJcblx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdG9sZFZhbHVlOiBpbml0aWFsW2NvbHVtbklkXSxcclxuXHRcdFx0XHRcdFx0bmV3VmFsdWU6IG1vZGlmaWVkW2NvbHVtbklkXSxcclxuXHRcdFx0XHRcdFx0Y29sdW1uOiBjb2x1bW4uYXBpQ29sdW1uXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRjb3B5RmllbGRzIChzb3VyY2U6IEZpZWxkTWFwLCBkZXN0aW5hdGlvbjogRmllbGRNYXAsIGNvbHVtbnM6IENvbHVtbkluZm9bXSk6IEZpZWxkTWFwIHtcclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uUGF0aCA9IGNvbHVtbi5wYXRoO1xyXG5cclxuXHRcdFx0ZGVzdGluYXRpb25bY29sdW1uUGF0aF0gPSB0aGlzLmNsb25lKGNvbHVtbi5hcGlDb2x1bW4udHlwZSwgc291cmNlW2NvbHVtblBhdGhdKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZGVzdGluYXRpb247XHJcblx0fVxyXG5cclxuXHRzaGFsbG93Q29weUZpZWxkcyAoXHJcblx0XHRzaGFsbG93U291cmNlOiBGaWVsZE1hcCxcclxuXHRcdGRlZXBTb3VyY2U6IEZpZWxkTWFwLFxyXG5cdFx0ZGVzdGluYXRpb246IEZpZWxkTWFwLFxyXG5cdFx0Y29sdW1uczogQ29sdW1uSW5mb1tdXHJcblx0KTogRmllbGRNYXAge1xyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG5cdFx0XHRjb25zdCBjb2x1bW5QYXRoID0gY29sdW1uLnBhdGg7XHJcblxyXG5cdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5QYXRoXSA9IHNoYWxsb3dTb3VyY2VbY29sdW1uUGF0aF0gIT09IHVuZGVmaW5lZCA/XHJcblx0XHRcdFx0c2hhbGxvd1NvdXJjZVtjb2x1bW5QYXRoXSA6XHJcblx0XHRcdFx0dGhpcy5jbG9uZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUsIGRlZXBTb3VyY2VbY29sdW1uUGF0aF0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBkZXN0aW5hdGlvbjtcclxuXHR9XHJcblxyXG5cdHNldERlZmF1bHRWYWx1ZXMgKGRlc3RpbmF0aW9uOiBGaWVsZE1hcCwgY29sdW1uczogQ29sdW1uSW5mb1tdKTogRmllbGRNYXAge1xyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucylcclxuXHRcdFx0ZGVzdGluYXRpb25bY29sdW1uLmlkXSA9IHRoaXMuZ2V0RGVmYXVsdFZhbHVlKGNvbHVtbi5hcGlDb2x1bW4udHlwZSk7XHJcblxyXG5cdFx0cmV0dXJuIGRlc3RpbmF0aW9uO1xyXG5cdH1cclxuXHJcblx0Y29tcGFyZUZpZWxkczxUPiAoY29sdW1uVHlwZTogc3RyaW5nLCBmaXJzdDogVCwgc2Vjb25kOiBUKTogYm9vbGVhbiB7XHJcblx0XHRpZiAoZmlyc3QgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHNlY29uZCA9PT0gdW5kZWZpbmVkO1xyXG5cclxuXHRcdGlmIChzZWNvbmQgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdHN3aXRjaCAoY29sdW1uVHlwZSkge1xyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0Y2FzZSAndGltZSc6XHJcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb21wYXJlTW9tZW50T2JqZWN0cyhmaXJzdCwgc2Vjb25kKTtcclxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbXBhcmVEdXJhdGlvbnMoZmlyc3QsIHNlY29uZCk7XHJcblx0XHRcdGNhc2UgJ2lkJzogLy8gaWQgdHlwZXNcclxuXHRcdFx0Y2FzZSAnaXRlbSc6XHJcblx0XHRcdGNhc2UgJ2xpbmsnOlxyXG5cdFx0XHRjYXNlICdjaGlsZCc6XHJcblx0XHRcdGNhc2UgJ3NpYmxpbmcnOlxyXG5cdFx0XHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXHJcblx0XHRcdFx0cmV0dXJuIGZpcnN0ID09IHNlY29uZDsgLy8gdXNlIG5vbi1zdHJpY3QgY29tcGFyaXNvblxyXG5cdFx0XHRjYXNlICdjdXJyZW50JzpcclxuXHRcdFx0Y2FzZSAnZGltZW5zaW9uJzpcclxuXHRcdFx0Y2FzZSAnZGlzdGFuY2UnOlxyXG5cdFx0XHRjYXNlICdkb3VibGUnOiAvLyBmbG9hdGluZyBwb2ludCB0eXBlc1xyXG5cdFx0XHRjYXNlICdmaWxlc2l6ZSc6XHJcblx0XHRcdGNhc2UgJ251bWJlcic6XHJcblx0XHRcdGNhc2UgJ3Bvd2VyJzpcclxuXHRcdFx0Y2FzZSAncXVhbnRpdHknOlxyXG5cdFx0XHRjYXNlICd2b2x1bWUnOlxyXG5cdFx0XHRjYXNlICd3ZWlnaHQnOlxyXG5cdFx0XHRjYXNlICdjb29yZGluYXRlJzpcclxuXHRcdFx0Y2FzZSAncHJpY2UnOlxyXG5cdFx0XHRjYXNlICdwZXJjZW50YWdlJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb21wYXJlRmxvYXRzKGZpcnN0LCBzZWNvbmQpO1xyXG5cdFx0XHRjYXNlICdpbnQnOiAvLyBpbnRlZ2VyIHR5cGVzXHJcblx0XHRcdGNhc2UgJ2Jvb2wnOiAvLyBib29sZWFuIHR5cGVzXHJcblx0XHRcdGNhc2UgJ2VudW0nOlxyXG5cdFx0XHRjYXNlICdlbWFpbCc6IC8vIHN0cmluZyB0eXBlc1xyXG5cdFx0XHRjYXNlICdwaG9uZSc6XHJcblx0XHRcdGNhc2UgJ3VybCc6XHJcblx0XHRcdGNhc2UgJ3RleHQnOlxyXG5cdFx0XHRjYXNlICdsb25ndGV4dCc6XHJcblx0XHRcdGNhc2UgJ2NvbG9yJzpcclxuXHRcdFx0XHRyZXR1cm4gZmlyc3QgPT09IHNlY29uZDtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gZXF1YWxzKGZpcnN0LCBzZWNvbmQpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Y29tcGFyZUZsb2F0cyAoYSwgYikge1xyXG5cdFx0Y29uc3QgYWJzQSA9IE1hdGguYWJzKGEpO1xyXG5cdFx0Y29uc3QgYWJzQiA9IE1hdGguYWJzKGIpO1xyXG5cdFx0Y29uc3QgZGlmZiA9IE1hdGguYWJzKGEgLSBiKTtcclxuXHJcblx0XHRjb25zdCBFUFNJTE9OID0gMS4xOWUtMDc7XHJcblxyXG5cdFx0Ly8gc2hvcnRjdXQsIGhhbmRsZXMgaW5maW5pdGllc1xyXG5cdFx0aWYgKGEgPT09IGIpIHtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9IGVsc2UgaWYgKGEgPT09IDAgfHwgYiA9PT0gMCB8fCBkaWZmIDwgTnVtYmVyLk1JTl9WQUxVRSkge1xyXG5cdFx0XHQvLyBhIG9yIGIgaXMgemVybyBvciBib3RoIGFyZSBleHRyZW1lbHkgY2xvc2UgdG8gaXRcclxuXHRcdFx0Ly8gcmVsYXRpdmUgZXJyb3IgaXMgbGVzcyBtZWFuaW5nZnVsIGhlcmVcclxuXHRcdFx0cmV0dXJuIGRpZmYgPCAoRVBTSUxPTiAqIE51bWJlci5NSU5fVkFMVUUpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly8gdXNlIHJlbGF0aXZlIGVycm9yXHJcblx0XHRcdHJldHVybiBkaWZmIC8gTWF0aC5taW4oKGFic0EgKyBhYnNCKSwgTnVtYmVyLk1BWF9WQUxVRSkgPCBFUFNJTE9OO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Y29tcGFyZU1vbWVudE9iamVjdHMgKGZpcnN0LCBzZWNvbmQpOiBib29sZWFuIHtcclxuXHRcdGlmICghZmlyc3QuaXNWYWxpZCgpKVxyXG5cdFx0XHRyZXR1cm4gIXNlY29uZC5pc1ZhbGlkKCk7XHJcblxyXG5cdFx0aWYgKCFzZWNvbmQuaXNWYWxpZCgpKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7IC8vIGZpcnN0IElTIHZhbGlkXHJcblxyXG5cdFx0cmV0dXJuIGZpcnN0LmlzU2FtZShzZWNvbmQpO1xyXG5cdH1cclxuXHJcblx0Y29tcGFyZUR1cmF0aW9ucyAoZmlyc3QsIHNlY29uZCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIGZpcnN0LmFzTWlsbGlzZWNvbmRzKCkgPT09IHNlY29uZC5hc01pbGxpc2Vjb25kcygpO1xyXG5cdH1cclxuXHJcblx0Zm9ybWF0UmVzcG9uc2VWYWx1ZSAoY29sdW1uVHlwZSwgdmFsdWUpIHtcclxuXHRcdHN3aXRjaCAoY29sdW1uVHlwZSkge1xyXG5cdFx0XHRjYXNlICdkYXRldGltZSc6XHJcblx0XHRcdGNhc2UgJ2RhdGUnOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlc3BvbnNlRGF0ZSh2YWx1ZSk7XHJcblx0XHRcdGNhc2UgJ2NvbG9yJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXNwb25zZUNvbG9yKHZhbHVlKTtcclxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlc3BvbnNlRHVyYXRpb24odmFsdWUpO1xyXG5cdFx0XHRjYXNlICdqc29uJzpcclxuXHRcdFx0XHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZSAhPT0gJycgPyBKU09OLnBhcnNlKHZhbHVlKSA6IHZhbHVlO1xyXG5cdFx0XHRjYXNlICdudW1iZXInOlxyXG5cdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gMCA/IG51bGwgOiB2YWx1ZTtcclxuXHRcdFx0Y2FzZSAnZmlsZXNpemUnOlxyXG5cdFx0XHRcdHJldHVybiB2YWx1ZSAvIDEwMDAwMDA7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Zm9ybWF0UmVxdWVzdFZhbHVlIChjb2x1bW5UeXBlLCB2YWx1ZSkge1xyXG5cdFx0c3dpdGNoIChjb2x1bW5UeXBlKSB7XHJcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXF1ZXN0RGF0ZVRpbWUodmFsdWUpO1xyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXF1ZXN0RGF0ZSh2YWx1ZSk7XHJcblx0XHRcdGNhc2UgJ2NvbG9yJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXF1ZXN0Q29sb3IodmFsdWUpO1xyXG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVxdWVzdER1cmF0aW9uKHZhbHVlKTtcclxuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcclxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IDAgPyBudWxsIDogdmFsdWU7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Zm9ybWF0UmVzcG9uc2VEYXRlICh2YWx1ZSkge1xyXG5cdFx0cmV0dXJuIHZhbHVlID09PSBudWxsID8gbW9tZW50LmludmFsaWQoKSA6IG1vbWVudCh2YWx1ZSk7XHJcblx0fVxyXG5cclxuXHRmb3JtYXRSZXNwb25zZUR1cmF0aW9uICh2YWx1ZSkge1xyXG5cdFx0cmV0dXJuIG1vbWVudC5kdXJhdGlvbih2YWx1ZSA9PT0gbnVsbCA/IDAgOiB2YWx1ZSwgJ3NlY29uZHMnKTtcclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlc3BvbnNlQ29sb3IgKHZhbHVlKSB7XHJcblx0XHRyZXR1cm4gdmFsdWUuY2hhckF0KDApID09PSAnIycgPyB2YWx1ZSA6ICcjJyArIHZhbHVlO1xyXG5cdH1cclxuXHJcblx0Zm9ybWF0UmVxdWVzdERhdGVUaW1lICh2YWx1ZSkge1xyXG5cdFx0cmV0dXJuIHZhbHVlLmlzVmFsaWQoKSA/IHZhbHVlLmZvcm1hdCh0aGlzLlNFUlZFUl9EQVRFVElNRV9GT1JNQVQpIDogbnVsbDtcclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlcXVlc3REYXRlICh2YWx1ZSkge1xyXG5cdFx0cmV0dXJuIHZhbHVlLmlzVmFsaWQoKSA/IHZhbHVlLmZvcm1hdCh0aGlzLlNFUlZFUl9EQVRFX0ZPUk1BVCkgOiBudWxsO1xyXG5cdH1cclxuXHJcblx0Zm9ybWF0UmVxdWVzdER1cmF0aW9uICh2YWx1ZSkge1xyXG5cdFx0cmV0dXJuIHZhbHVlLmFzU2Vjb25kcygpO1xyXG5cdH1cclxuXHJcblx0Zm9ybWF0UmVxdWVzdENvbG9yICh2YWx1ZSkge1xyXG5cdFx0cmV0dXJuIHZhbHVlLmNoYXJBdCgwKSA9PT0gJyMnID8gdmFsdWUuc3Vic3RyaW5nKDEpIDogdmFsdWU7XHJcblx0fVxyXG5cclxuXHRnZXREZWZhdWx0VmFsdWUgKGNvbHVtblR5cGUpIHtcclxuXHRcdHN3aXRjaCAoY29sdW1uVHlwZSkge1xyXG5cdFx0XHRjYXNlICdpbnQnOlxyXG5cdFx0XHRjYXNlICdkb3VibGUnOlxyXG5cdFx0XHRjYXNlICdwZXJjZW50YWdlJzpcclxuXHRcdFx0Y2FzZSAncHJpY2UnOlxyXG5cdFx0XHRcdHJldHVybiAwO1xyXG5cdFx0XHRjYXNlICdpdGVtJzpcclxuXHRcdFx0Y2FzZSAnbGluayc6XHJcblx0XHRcdGNhc2UgJ2NoaWxkJzpcclxuXHRcdFx0Y2FzZSAnc2libGluZyc6XHJcblx0XHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHRcdGNhc2UgJ2Jvb2wnOlxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0Y2FzZSAnZW51bSc6XHJcblx0XHRcdFx0cmV0dXJuICcwJztcclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcclxuXHRcdFx0Y2FzZSAndGltZSc6XHJcblx0XHRcdFx0cmV0dXJuIG1vbWVudC5pbnZhbGlkKCk7XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0XHRyZXR1cm4gbW9tZW50LmR1cmF0aW9uKCk7XHJcblx0XHRcdGNhc2UgJ3RleHQnOlxyXG5cdFx0XHRjYXNlICdsb25ndGV4dCc6XHJcblx0XHRcdFx0cmV0dXJuICcnO1xyXG5cdFx0XHRjYXNlICdjb2xvcic6XHJcblx0XHRcdFx0cmV0dXJuICcjMDAwMDAwJztcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gJyc7XHJcblx0XHRcdC8vIFx0XHRcdFx0XHRlbWFpbFxyXG5cdFx0XHQvLyBcdFx0XHRcdFx0dXJsXHJcblx0XHRcdC8vIFx0XHRcdFx0XHRodG1sXHJcblx0XHRcdC8vIFx0XHRcdFx0XHRqc29uXHJcblx0XHRcdC8vIFx0XHRcdFx0XHRkYXRhXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpc0RlZmF1bHRWYWx1ZSAoY29sdW1uVHlwZSwgdmFsdWUpIHtcclxuXHRcdHJldHVybiB0aGlzLmNvbXBhcmVGaWVsZHMoY29sdW1uVHlwZSwgdmFsdWUsIHRoaXMuZ2V0RGVmYXVsdFZhbHVlKGNvbHVtblR5cGUpKTtcclxuXHR9XHJcblxyXG5cdGNsb25lIChjb2x1bW5UeXBlLCB2YWx1ZSkge1xyXG5cdFx0c3dpdGNoIChjb2x1bW5UeXBlKSB7XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jbG9uZUR1cmF0aW9uKHZhbHVlKTtcclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcclxuXHRcdFx0XHRyZXR1cm4gbW9tZW50KHZhbHVlKTtcclxuXHRcdFx0Y2FzZSAnanNvbic6XHJcblx0XHRcdFx0cmV0dXJuIGNvcHkodmFsdWUpO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGdldENsb25lRnVuY3Rpb24gKGNvbHVtblR5cGUpIHtcclxuXHRcdHN3aXRjaCAoY29sdW1uVHlwZSkge1xyXG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY2xvbmVEdXJhdGlvbjtcclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jbG9uZURhdGU7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuaWRlbnRpdHk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRjbG9uZUR1cmF0aW9uIChkdXJhdGlvbikge1xyXG5cdFx0cmV0dXJuIG1vbWVudC5kdXJhdGlvbihkdXJhdGlvbik7XHJcblx0fVxyXG5cclxuXHRjbG9uZURhdGUgKGRhdGUpIHtcclxuXHRcdHJldHVybiBkYXRlLmNsb25lKCk7XHJcblx0fVxyXG5cclxuXHRpZGVudGl0eSAoaW5wdXQpIHtcclxuXHRcdHJldHVybiBpbnB1dDtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQXBpUmVzcG9uc2VQcm9jZXNzb3IgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHtcclxuXHRBcGlSZXF1ZXN0Q29sdW1uTWFwLCBBcGlSZXF1ZXN0SXRlbU1hcCwgQXBpUmVxdWVzdExpbWl0LCBJdGVtSWQsIEl0ZW1UeXBlLCBQcm9taXNlSW50ZXJmYWNlXHJcbn0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEFwaVJlcXVlc3RTZXJ2aWNlIHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBhcGlSZXNwb25zZVByb2Nlc3NvckZhY3Rvcnk6IEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeVxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdHRlbXBsYXRlIChpdGVtVHlwZTogSXRlbVR5cGUsIHBhcmFtczogYW55KTogUHJvbWlzZUludGVyZmFjZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS50ZW1wbGF0ZShpdGVtVHlwZSwgcGFyYW1zKSk7XHJcblx0fVxyXG5cclxuXHRjcmVhdGUgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQsIHZhbHVlczogYW55LCBwYXJlbnRUeXBlPzogSXRlbVR5cGUsIHBhcmVudElkPzogSXRlbUlkKTogUHJvbWlzZUludGVyZmFjZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5jcmVhdGUoaXRlbVR5cGUsIGl0ZW1JZCwgdmFsdWVzLCBwYXJlbnRUeXBlLCBwYXJlbnRJZCkpO1xyXG5cdH1cclxuXHJcblx0ZGVsZXRlIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZHM6IEl0ZW1JZFtdKTogUHJvbWlzZUludGVyZmFjZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5kZWxldGUoaXRlbVR5cGUsIGl0ZW1JZHMpKTtcclxuXHR9XHJcblxyXG5cdHVwZGF0ZUl0ZW1zIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1zOiBBcGlSZXF1ZXN0SXRlbU1hcCwgY29sdW1uczogYW55KTogUHJvbWlzZUludGVyZmFjZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS51cGRhdGVJdGVtcyhpdGVtVHlwZSwgaXRlbXMsIGNvbHVtbnMpKTtcclxuXHR9XHJcblxyXG5cdHJlcXVlc3RTa2VsZXRvbiAocGFyYW1zOiBhbnksIHJlcXVlc3RDYW5jZWxlcj86IFByb21pc2VJbnRlcmZhY2U8YW55Pik6IFByb21pc2VJbnRlcmZhY2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcclxuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UucmVxdWVzdFNrZWxldG9uKHBhcmFtcywgcmVxdWVzdENhbmNlbGVyKSk7XHJcblx0fVxyXG5cclxuXHRtb3ZlSXRlbXMgKHBhcmVudFR5cGU6IEl0ZW1UeXBlLCBwYXJlbnRJZDogSXRlbUlkLCBpdGVtczoge1tpdGVtVHlwZTogc3RyaW5nXTogSXRlbUlkW119KTogUHJvbWlzZUludGVyZmFjZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5tb3ZlSXRlbXMocGFyZW50VHlwZSwgcGFyZW50SWQsIGl0ZW1zKSk7XHJcblx0fVxyXG5cclxuXHRjb2x1bW5zIChpdGVtVHlwZTogSXRlbVR5cGUsIGNvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5NYXAsIHBhcmFtcz86IGFueSk6IFByb21pc2VJbnRlcmZhY2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcclxuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UuY29sdW1ucyhpdGVtVHlwZSwgY29sdW1ucywgcGFyYW1zKSk7XHJcblx0fVxyXG5cclxuXHRxdWVyeSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBxdWVyeTogYW55LCBjb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1uTWFwLCBsaW1pdD86IEFwaVJlcXVlc3RMaW1pdCk6IFByb21pc2VJbnRlcmZhY2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcclxuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoaXRlbVR5cGUsIHF1ZXJ5LCBjb2x1bW5zLCBsaW1pdCkpO1xyXG5cdH1cclxuXHJcblx0cHJvY2Vzc1Jlc3BvbnNlIChyZXF1ZXN0KTogUHJvbWlzZUludGVyZmFjZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0cmV0dXJuIHJlcXVlc3QudGhlbihyZXNwb25zZSA9PiB0aGlzLmFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeS5jb25zdHJ1Y3QocmVzcG9uc2UpKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQXBpRm9ybWF0dGVyIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEl0ZW1UeXBlTWFwLCBSZXNwb25zZUNvbHVtbiB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBBcGlSZXNwb25zZVByb2Nlc3NvciB7XHJcblx0Y29sdW1uczogSXRlbVR5cGVNYXA7XHJcblx0aXRlbXM6IEl0ZW1UeXBlTWFwO1xyXG5cdGxpbmtzOiBJdGVtVHlwZU1hcDtcclxuXHRjYWNoZWFibGU6IGJvb2xlYW47XHJcblx0bWFwOiBhbnk7XHJcblxyXG5cdGNvbHVtbkluZGV4TWFwOiBhbnkgPSB7fTtcclxuXHRjb2x1bW5NYXA6IGFueSA9IHt9O1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwdWJsaWMgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXHJcblx0XHRwdWJsaWMgcmVzcG9uc2U6IGFueVxyXG5cdCkge1xyXG5cdFx0dGhpcy5jb2x1bW5zID0gcmVzcG9uc2UuY29sdW1ucztcclxuXHRcdHRoaXMuaXRlbXMgPSByZXNwb25zZS5pdGVtcztcclxuXHRcdHRoaXMubGlua3MgPSByZXNwb25zZS5saW5rcztcclxuXHRcdHRoaXMuY2FjaGVhYmxlID0gcmVzcG9uc2UuY2FjaGVhYmxlO1xyXG5cdFx0dGhpcy5tYXAgPSByZXNwb25zZS5tYXA7XHJcblxyXG5cdFx0dGhpcy5jcmVhdGVDb2x1bW5NYXBzKCk7XHJcblx0fVxyXG5cclxuXHRjcmVhdGVDb2x1bW5NYXBzICgpIHtcclxuXHRcdGZvciAoY29uc3QgY29sdW1uVHlwZSBpbiB0aGlzLmNvbHVtbnMpIHtcclxuXHRcdFx0dGhpcy5jb2x1bW5JbmRleE1hcFtjb2x1bW5UeXBlXSA9IHt9O1xyXG5cdFx0XHR0aGlzLmNvbHVtbk1hcFtjb2x1bW5UeXBlXSA9IHt9O1xyXG5cclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnNbY29sdW1uVHlwZV0ubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnNbY29sdW1uVHlwZV1baV07XHJcblx0XHRcdFx0dGhpcy5jb2x1bW5JbmRleE1hcFtjb2x1bW5UeXBlXVtjb2x1bW4uaWRdID0gaTtcclxuXHRcdFx0XHR0aGlzLmNvbHVtbk1hcFtjb2x1bW5UeXBlXVtjb2x1bW4uaWRdID0gY29sdW1uO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRmZXRjaFZhbHVlIChpdGVtVHlwZSwgaXRlbUlkLCBjb2x1bW5JZCkge1xyXG5cdFx0aWYgKHRoaXMuaXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5pdGVtc1tpdGVtVHlwZV1baXRlbUlkXS5kYXRhW3RoaXMuY29sdW1uSW5kZXhNYXBbaXRlbVR5cGVdW2NvbHVtbklkXV07XHJcblx0fVxyXG5cclxuXHRmZXRjaERlcml2ZWRPYmplY3QgKGl0ZW1UeXBlLCBpdGVtSWQsIHJvb3RDb2x1bW5zKSB7XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiByb290Q29sdW1ucykge1xyXG5cdFx0XHR0aGlzLmZldGNoRGVyaXZlZFZhbHVlcyhcclxuXHRcdFx0XHR0aGlzLmZldGNoVmFsdWUoaXRlbVR5cGUsIGl0ZW1JZCwgY29sdW1uLmlkKSxcclxuXHRcdFx0XHRjb2x1bW4sXHJcblx0XHRcdFx0cmVzdWx0XHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGZldGNoRGVyaXZlZFZhbHVlcyAodmFsdWUsIGNvbHVtbiwgZGVzdGluYXRpb24pIHtcclxuXHRcdGZvciAoY29uc3QgY2hpbGRDb2x1bW4gb2YgY29sdW1uLmNoaWxkcmVuKSB7XHJcblx0XHRcdGxldCBjaGlsZFZhbHVlO1xyXG5cclxuXHRcdFx0aWYgKHZhbHVlID09PSBudWxsKSB7XHJcblx0XHRcdFx0Y2hpbGRWYWx1ZSA9IG51bGw7XHJcblx0XHRcdFx0ZGVzdGluYXRpb25bY2hpbGRDb2x1bW4ucGF0aF0gPSB0aGlzLmFwaUZvcm1hdHRlci5nZXREZWZhdWx0VmFsdWUoY2hpbGRDb2x1bW4uYXBpQ29sdW1uLnR5cGUpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGNoaWxkVmFsdWUgPSB0aGlzLmZldGNoVmFsdWUoY29sdW1uLml0ZW1UeXBlLCB2YWx1ZSwgY2hpbGRDb2x1bW4uaWQpO1xyXG5cdFx0XHRcdGRlc3RpbmF0aW9uW2NoaWxkQ29sdW1uLnBhdGhdID0gY2hpbGRWYWx1ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKGNoaWxkQ29sdW1uLmlzTGVhZilcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdHRoaXMuZmV0Y2hEZXJpdmVkVmFsdWVzKGNoaWxkVmFsdWUsIGNoaWxkQ29sdW1uLCBkZXN0aW5hdGlvbik7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRmZXRjaE9iamVjdCAoaXRlbVR5cGUsIGl0ZW1JZCwgaW5jbHVkZUxpbmtzOiBib29sZWFuID0gZmFsc2UpOiBhbnkge1xyXG5cdFx0aWYgKHRoaXMuaXRlbXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG5cdFx0Y29uc3QgaXRlbSA9IHRoaXMuaXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF07XHJcblxyXG5cdFx0aWYgKGl0ZW0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcblx0XHRjb25zdCBkYXRhID0gdGhpcy5pdGVtc1tpdGVtVHlwZV1baXRlbUlkXS5kYXRhO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcclxuXHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0cmVzdWx0W3RoaXMuY29sdW1uc1tpdGVtVHlwZV1baV0uaWRdID0gZGF0YVtpXTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaW5jbHVkZUxpbmtzKSB7XHJcblx0XHRcdGNvbnN0IGxpbmtzID0gdGhpcy5pdGVtc1tpdGVtVHlwZV1baXRlbUlkXS5saW5rcztcclxuXHRcdFx0cmVzdWx0Ll9fbGlua3MgPSB7fTtcclxuXHJcblx0XHRcdGZvciAoY29uc3QgbGlua1R5cGUgaW4gbGlua3MpXHJcblx0XHRcdFx0cmVzdWx0Ll9fbGlua3NbbGlua1R5cGVdID1cclxuXHRcdFx0XHRcdHRoaXMuZmV0Y2hPYmplY3RBcnJheShsaW5rVHlwZSwgaW5jbHVkZUxpbmtzLCBsaW5rc1tsaW5rVHlwZV0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRmZXRjaE9iamVjdEFycmF5IChpdGVtVHlwZSwgaW5jbHVkZUxpbmtzLCBpZEFycmF5KSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IGFueSA9IFtdO1xyXG5cclxuXHRcdGlmIChpZEFycmF5ID09PSBudWxsKSB7XHJcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuaXRlbXNbaXRlbVR5cGVdKVxyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKHRoaXMuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgaW5jbHVkZUxpbmtzKSk7XHJcblxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChpZEFycmF5ID09PSB1bmRlZmluZWQpXHJcblx0XHRcdGlkQXJyYXkgPSB0aGlzLmxpbmtzW2l0ZW1UeXBlXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBvZiBpZEFycmF5KVxyXG5cdFx0XHRyZXN1bHQucHVzaCh0aGlzLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGluY2x1ZGVMaW5rcykpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRmZXRjaE9iamVjdE1hcCAoaXRlbVR5cGUsIGNvbHVtbklkLCBpbmNsdWRlTGlua3MsIHJldHVybktleXMpIHtcclxuXHRcdGNvbnN0IGNvbHVtbkluZGV4ID0gdGhpcy5jb2x1bW5JbmRleE1hcFtpdGVtVHlwZV1bY29sdW1uSWRdO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiB7W2tleTogc3RyaW5nXTogYW55fSA9IHt9O1xyXG5cdFx0Y29uc3Qga2V5czogc3RyaW5nW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGlkIGluIHRoaXMuaXRlbXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdGNvbnN0IGtleSA9IHRoaXMuaXRlbXNbaXRlbVR5cGVdW2lkXS5kYXRhW2NvbHVtbkluZGV4XTtcclxuXHRcdFx0a2V5cy5wdXNoKGtleSk7XHJcblx0XHRcdHJlc3VsdFtrZXldID0gdGhpcy5mZXRjaE9iamVjdChpdGVtVHlwZSwgaWQsIGluY2x1ZGVMaW5rcyk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHJldHVybktleXMpXHJcblx0XHRcdHJldHVybiB7cmVzdWx0OiByZXN1bHQsIGtleXM6IGtleXN9O1xyXG5cdFx0ZWxzZVxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hGaWVsZE1hcCAoaXRlbVR5cGUsIGNvbHVtbklkKSB7XHJcblx0XHRjb25zdCBpbmRleCA9IHRoaXMuY29sdW1uSW5kZXhNYXBbaXRlbVR5cGVdW2NvbHVtbklkXTtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgaWQgaW4gdGhpcy5pdGVtc1tpdGVtVHlwZV0pXHJcblx0XHRcdHJlc3VsdFtpZF0gPSB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpZF0uZGF0YVtpbmRleF07XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGZldGNoQ29sdW1uQXJyYXkgKGl0ZW1UeXBlKSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IFJlc3BvbnNlQ29sdW1uW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGFwaUNvbHVtbiBvZiB0aGlzLmNvbHVtbnNbaXRlbVR5cGVdKVxyXG5cdFx0XHRyZXN1bHQucHVzaChhcGlDb2x1bW4pO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRmZXRjaENvbHVtbk9iamVjdCAoaXRlbVR5cGUpIHtcclxuXHRcdHJldHVybiB0aGlzLmNvbHVtbk1hcFtpdGVtVHlwZV07XHJcblx0fVxyXG5cclxuXHRmZXRjaENvbHVtbnNPYmplY3QgKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuY29sdW1uTWFwO1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlUmVzb3VyY2UgKGl0ZW1UeXBlLCBpZCkge1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0b2JqZWN0OiB0aGlzLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpZCksXHJcblx0XHRcdGxpbmtzOiB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpZF0ubGlua3NcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHRoYXNJdGVtcyAoaXRlbVR5cGUpIHtcclxuXHRcdC8vIEB0cy1pZ25vcmVcclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuaXRlbXNbaXRlbVR5cGVdKVxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRnZXRJZEFycmF5IChpdGVtVHlwZSkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuaXRlbXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1JZCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcbn1cclxuIiwiZXhwb3J0IGVudW0gRU5UUllfU1RBVFVTIHtcclxuXHRDQUNIRUQgPSAnY2FjaGVkJyxcclxuXHRQUk9NSVNFRCA9ICdwcm9taXNlZCcsXHJcblx0RVhQQU5EID0gJ2V4cGFuZCcsXHJcblx0UFJPTUlTRURfRVhQQU5EID0gJ3Byb21pc2VkLWV4cGFuZCcsXHJcblx0UkVTT0xWRSA9ICdyZXNvbHZlJyxcclxuXHRSRVNPTFZFX1ZBTFVFUyA9ICdyZXNvbHZlLXZhbHVlcycsXHJcblx0TE9DQUwgPSAnbG9jYWwnXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBBTExfUEVSTUlTU0lPTlMgPSAnNyc7XHJcblxyXG5leHBvcnQgY29uc3QgQ09MVU1OX1NFUEVSQVRPUiA9ICc+JztcclxuZXhwb3J0IGNvbnN0IFJFTkRFUl9BU19TRVBFUkFUT1IgPSAnOic7XHJcblxyXG5leHBvcnQgY29uc3QgTkVXX1BSRUZJWDogc3RyaW5nID0gJy0xJztcclxuZXhwb3J0IGNvbnN0IERVUExJQ0FURV9QUkVGSVg6IHN0cmluZyA9ICctMic7XHJcblxyXG5leHBvcnQgY29uc3QgTkVXX0tFWVdPUkQ6IHN0cmluZyA9ICduZXctJztcclxuZXhwb3J0IGNvbnN0IERVUExJQ0FURV9LRVlXT1JEOiBzdHJpbmcgPSAnZHVwLSc7XHJcbiIsImltcG9ydCB7IEVOVFJZX1NUQVRVUyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEVudHJ5U3RhdHVzLCBFbnRyeVN0YXR1c01hcCwgSXRlbUlkLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJhdGNoU3RhdHVzPFQ+IHtcclxuXHRyZWFkb25seSByZXF1ZXN0U3RhdHVzID0gW1xyXG5cdFx0RU5UUllfU1RBVFVTLlJFU09MVkUsXHJcblx0XHRFTlRSWV9TVEFUVVMuUkVTT0xWRV9WQUxVRVMsXHJcblx0XHRFTlRSWV9TVEFUVVMuRVhQQU5ELFxyXG5cdFx0RU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORFxyXG5cdF07XHJcblxyXG5cdHJlYWRvbmx5IHJlbW90ZUV4cGFuZFN0YXR1cyA9IFtFTlRSWV9TVEFUVVMuRVhQQU5ELCBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EXTtcclxuXHJcblx0ZW50cmllczogRW50cnlTdGF0dXNNYXA8VD4gPSB7fTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXHJcblx0XHRwdWJsaWMgZ2V0SXRlbUlkOiAoaXRlbUVudHJ5OiBUKSA9PiBJdGVtSWQsXHJcblx0XHRwdWJsaWMgZ2V0UHJvbWlzZTogKGl0ZW1FbnRyeTogVCkgPT4gUHJvbWlzZUludGVyZmFjZTxUPlxyXG5cdCkge1xyXG5cdFx0Zm9yIChjb25zdCBzdGF0dXMgaW4gRU5UUllfU1RBVFVTKVxyXG5cdFx0XHR0aGlzLmVudHJpZXNbRU5UUllfU1RBVFVTW3N0YXR1c11dID0gW107XHJcblx0fVxyXG5cclxuXHRhZGQgKGVudHJ5U3RhdHVzOiBFbnRyeVN0YXR1czxUPik6IHZvaWQge1xyXG5cdFx0dGhpcy5lbnRyaWVzW2VudHJ5U3RhdHVzLnN0YXR1c10ucHVzaChlbnRyeVN0YXR1cy5lbnRyeSk7XHJcblx0fVxyXG5cclxuXHRoYXNFbnRyaWVzIChzdGF0dXNBcnJheTogRU5UUllfU1RBVFVTW10pOiBib29sZWFuIHtcclxuXHRcdGZvciAoY29uc3Qgc3RhdHVzIG9mIHN0YXR1c0FycmF5KSB7XHJcblx0XHRcdGlmICh0aGlzLmVudHJpZXNbc3RhdHVzXS5sZW5ndGggPiAwKVxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdGhhc1JlcXVlc3RzICgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLmhhc0VudHJpZXModGhpcy5yZXF1ZXN0U3RhdHVzKTtcclxuXHR9XHJcblxyXG5cdGZvckVhY2hFbnRyeSAoc3RhdHVzQXJyYXk6IEVOVFJZX1NUQVRVU1tdLCBjYWxsYmFjazogKGVudHJ5OiBULCBpdGVtSWQ6IEl0ZW1JZCkgPT4gdm9pZCk6IHZvaWQge1xyXG5cdFx0Zm9yIChjb25zdCBzdGF0dXMgb2Ygc3RhdHVzQXJyYXkpIHtcclxuXHRcdFx0Y29uc3Qgc3RhdHVzRW50cmllcyA9IHRoaXMuZW50cmllc1tzdGF0dXNdO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBzdGF0dXNFbnRyeSBvZiBzdGF0dXNFbnRyaWVzKVxyXG5cdFx0XHRcdGNhbGxiYWNrKHN0YXR1c0VudHJ5LCB0aGlzLmdldEl0ZW1JZChzdGF0dXNFbnRyeSkpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmVkdWNlRW50cmllczxVPiAoXHJcblx0XHRzdGF0dXNBcnJheTogRU5UUllfU1RBVFVTW10sXHJcblx0XHRjYWxsYmFjazogKGVudHJ5OiBULCBpdGVtSWQ6IEl0ZW1JZCwgZGVzdGluYXRpb246IFUpID0+IHZvaWQsXHJcblx0XHRkZXN0aW5hdGlvbjogVVxyXG5cdCk6IFUge1xyXG5cdFx0Zm9yIChjb25zdCBzdGF0dXMgb2Ygc3RhdHVzQXJyYXkpIHtcclxuXHRcdFx0Y29uc3Qgc3RhdHVzRW50cmllcyA9IHRoaXMuZW50cmllc1tzdGF0dXNdO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBzdGF0dXNFbnRyeSBvZiBzdGF0dXNFbnRyaWVzKVxyXG5cdFx0XHRcdGNhbGxiYWNrKHN0YXR1c0VudHJ5LCB0aGlzLmdldEl0ZW1JZChzdGF0dXNFbnRyeSksIGRlc3RpbmF0aW9uKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZGVzdGluYXRpb247XHJcblx0fVxyXG5cclxuXHRyZWR1Y2VBbGxFbnRyaWVzPFU+IChcclxuXHRcdGNhbGxiYWNrOiAoZW50cnk6IFQsIGl0ZW1JZDogSXRlbUlkLCBkZXN0aW5hdGlvbjogVSkgPT4gdm9pZCxcclxuXHRcdGRlc3RpbmF0aW9uOiBVXHJcblx0KTogVSB7XHJcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzO1xyXG5cclxuXHRcdGZvciAoY29uc3Qgc3RhdHVzIGluIGVudHJpZXMpIHtcclxuXHRcdFx0Y29uc3Qgc3RhdHVzRW50cmllcyA9IGVudHJpZXNbc3RhdHVzXTtcclxuXHJcblx0XHRcdGZvciAoY29uc3Qgc3RhdHVzRW50cnkgb2Ygc3RhdHVzRW50cmllcylcclxuXHRcdFx0XHRjYWxsYmFjayhzdGF0dXNFbnRyeSwgdGhpcy5nZXRJdGVtSWQoc3RhdHVzRW50cnkpLCBkZXN0aW5hdGlvbik7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGRlc3RpbmF0aW9uO1xyXG5cdH1cclxuXHJcblx0Z2V0UHJvbWlzZXMgKCk6IFByb21pc2VJbnRlcmZhY2U8VFtdPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwoXHJcblx0XHRcdHRoaXMucmVkdWNlRW50cmllcyhcclxuXHRcdFx0XHRbRU5UUllfU1RBVFVTLlBST01JU0VELCBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EXSxcclxuXHRcdFx0XHQoZW50cnksIF8sIGRlc3RpbmF0aW9uKSA9PiB7XHJcblx0XHRcdFx0XHRkZXN0aW5hdGlvbi5wdXNoKHRoaXMuZ2V0UHJvbWlzZShlbnRyeSkpO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0PEFycmF5PFByb21pc2VJbnRlcmZhY2U8VD4+PiBbXVxyXG5cdFx0XHQpXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Z2V0SXRlbUlkcyAoc3RhdHVzQXJyYXk6IEVOVFJZX1NUQVRVU1tdKTogSXRlbUlkW10ge1xyXG5cdFx0cmV0dXJuIHRoaXMucmVkdWNlRW50cmllcyhcclxuXHRcdFx0c3RhdHVzQXJyYXksXHJcblx0XHRcdChfLCBpdGVtSWQsIGRlc3RpbmF0aW9uKSA9PiB7XHJcblx0XHRcdFx0ZGVzdGluYXRpb24ucHVzaChpdGVtSWQpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHQ8SXRlbUlkW10+IFtdXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Z2V0UmVxdWVzdElkcyAoKTogSXRlbUlkW10ge1xyXG5cdFx0cmV0dXJuIHRoaXMuZ2V0SXRlbUlkcyh0aGlzLnJlcXVlc3RTdGF0dXMpO1xyXG5cdH1cclxuXHJcblx0Z2V0QXJyYXkgKHN0YXR1c0FycmF5PzogRU5UUllfU1RBVFVTW10pOiBUW10ge1xyXG5cdFx0Y29uc3QgY2FsbGJhY2sgPSAoZW50cnksIF8sIGRlc3RpbmF0aW9uKSA9PiB7XHJcblx0XHRcdGRlc3RpbmF0aW9uLnB1c2goZW50cnkpO1xyXG5cdFx0fTtcclxuXHJcblx0XHRpZiAoc3RhdHVzQXJyYXkgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXMucmVkdWNlQWxsRW50cmllcyhjYWxsYmFjaywgPFRbXT4gW10pO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnJlZHVjZUVudHJpZXMoc3RhdHVzQXJyYXksIGNhbGxiYWNrLCA8VFtdPiBbXSk7XHJcblx0fVxyXG5cclxuXHRnZXRNYXAgKCk6IHtbaXRlbUlkOiBzdHJpbmddOiBUfSB7XHJcblx0XHRyZXR1cm4gdGhpcy5yZWR1Y2VBbGxFbnRyaWVzKFxyXG5cdFx0XHQoZW50cnksIGl0ZW1JZCwgZGVzdGluYXRpb24pID0+IHtcclxuXHRcdFx0XHRkZXN0aW5hdGlvbltpdGVtSWRdID0gZW50cnk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHt9XHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUsIEtleVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgRW50cnlQYXJlbnQsIEVudHJ5UGFyZW50TnVsbCwgSXRlbUVudHJ5TWFwLCBJdGVtSWQsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgY3JlYXRlUGF0aCwgZ2V0UGF0aCB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5leHBvcnQgdHlwZSBDcmVhdGVDb21waWxhdGlvbiA9IHtcclxuXHRbcGFyZW50VHlwZTogc3RyaW5nXToge1xyXG5cdFx0W3BhcmVudElkOiBudW1iZXJdOiBJdGVtRW50cnlNYXBcclxuXHR9XHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBEZWxldGVDb21waWxhdGlvbiA9IHtcclxuXHRbaXRlbVR5cGU6IHN0cmluZ106IEl0ZW1FbnRyeVtdXHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBVcGRhdGVDb21waWxhdGlvbiA9IEl0ZW1FbnRyeU1hcDtcclxuXHJcbmV4cG9ydCB0eXBlIE1vdmVDb21waWxhdGlvbiA9IHtcclxuXHRbcGFyZW50VHlwZTogc3RyaW5nXToge1xyXG5cdFx0W3BhcmVudElkOiBudW1iZXJdOiBJdGVtRW50cnlbXVxyXG5cdH1cclxufTtcclxuXHJcbnR5cGUgRGVsZXRlTWFwRW50cnkgPSB7aXRlbTogSXRlbUVudHJ5LCBwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbH07XHJcblxyXG5leHBvcnQgY2xhc3MgQ2hhbmdlc0NvbXBpbGF0aW9uIHtcclxuXHRjb21waWxhdGlvbjoge1xyXG5cdFx0Y3JlYXRlOiBDcmVhdGVDb21waWxhdGlvbixcclxuXHRcdGRlbGV0ZTogRGVsZXRlQ29tcGlsYXRpb24sXHJcblx0XHR1cGRhdGU6IFVwZGF0ZUNvbXBpbGF0aW9uLFxyXG5cdFx0bW92ZTogTW92ZUNvbXBpbGF0aW9uXHJcblx0fSA9IHtcclxuXHRcdGNyZWF0ZToge30sXHJcblx0XHRkZWxldGU6IHt9LFxyXG5cdFx0dXBkYXRlOiB7fSxcclxuXHRcdG1vdmU6IHt9XHJcblx0fTtcclxuXHJcblx0Y29sbGVjdGlvbnM6IENvbGxlY3Rpb25DYWNoZTtcclxuXHJcblx0cHJpdmF0ZSBtb3ZlQXJyYXk6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdHByaXZhdGUgZGVsZXRlTWFwOiB7XHJcblx0XHRbaXRlbVR5cGU6IHN0cmluZ106IHtcclxuXHRcdFx0W2l0ZW1JZDogbnVtYmVyXTogRGVsZXRlTWFwRW50cnlcclxuXHRcdH1cclxuXHR9ID0ge307XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlRmFjdG9yeTogQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcclxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcclxuXHRcdHB1YmxpYyBzaW5nbGVJdGVtczogSXRlbUVudHJ5W10sXHJcblx0XHRjb2xsZWN0aW9uRW50cmllczogQ29sbGVjdGlvbkVudHJ5W11cclxuXHQpIHtcclxuXHRcdHRoaXMuY29sbGVjdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XHJcblxyXG5cdFx0dGhpcy5wcm9jZXNzU2luZ2xlSXRlbXMoKTtcclxuXHRcdHRoaXMucHJvY2Vzc0NvbGxlY3Rpb25zKGNvbGxlY3Rpb25FbnRyaWVzKTtcclxuXHRcdHRoaXMucG9zdFByb2Nlc3MoKTtcclxuXHR9XHJcblxyXG5cdGdldERlZmF1bHRQYXJlbnQgKCk6IEVudHJ5UGFyZW50IHtcclxuXHRcdHJldHVybiB7aXRlbVR5cGU6ICdWb2lkJywgaXRlbUlkOiAwfTtcclxuXHR9XHJcblxyXG5cdGFkZE1vdmVFbnRyeSAoaXRlbUVudHJ5OiBJdGVtRW50cnkpOiB2b2lkIHtcclxuXHRcdHRoaXMubW92ZUFycmF5LnB1c2goaXRlbUVudHJ5KTtcclxuXHR9XHJcblxyXG5cdGFkZERlbGV0ZUVudHJ5IChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgcGFyZW50OiBFbnRyeVBhcmVudE51bGwpOiB2b2lkIHtcclxuXHRcdGNyZWF0ZVBhdGgoXHJcblx0XHRcdHRoaXMuZGVsZXRlTWFwLFxyXG5cdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcclxuXHRcdFx0W3t9LCB7aXRlbTogaXRlbUVudHJ5LCBwYXJlbnQ6IHBhcmVudH1dXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0YWRkVXBkYXRlRW50cnkgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KTogdm9pZCB7XHJcblx0XHRjcmVhdGVQYXRoKFxyXG5cdFx0XHR0aGlzLmNvbXBpbGF0aW9uLnVwZGF0ZSxcclxuXHRcdFx0W2l0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXHJcblx0XHRcdFt7fSwgaXRlbUVudHJ5XVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGFkZENyZWF0ZUVudHJ5IChpdGVtRW50cnk6IEl0ZW1FbnRyeSk6IHZvaWQge1xyXG5cdFx0bGV0IHBhcmVudCA9IGl0ZW1FbnRyeS5wYXJlbnQ7XHJcblxyXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcclxuXHRcdFx0cGFyZW50ID0gdGhpcy5nZXREZWZhdWx0UGFyZW50KCk7XHJcblxyXG5cdFx0Y3JlYXRlUGF0aChcclxuXHRcdFx0dGhpcy5jb21waWxhdGlvbi5jcmVhdGUsXHJcblx0XHRcdFtwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQsIGl0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXHJcblx0XHRcdFt7fSwge30sIHt9LCBpdGVtRW50cnldXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Y29udGFpbnNDcmVhdGVFbnRyeSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCk6IGJvb2xlYW4ge1xyXG5cdFx0Y29uc3QgY3JlYXRlQ29tcGlsYXRpb24gPSB0aGlzLmNvbXBpbGF0aW9uLmNyZWF0ZTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcmVudFR5cGUgaW4gY3JlYXRlQ29tcGlsYXRpb24pIHtcclxuXHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBjcmVhdGVDb21waWxhdGlvbltwYXJlbnRUeXBlXSkge1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeU1hcCA9IGNyZWF0ZUNvbXBpbGF0aW9uW3BhcmVudFR5cGVdW3BhcmVudElkXVtpdGVtVHlwZV07XHJcblxyXG5cdFx0XHRcdGlmIChpdGVtRW50cnlNYXAgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBpdGVtRW50cnlNYXApIHtcclxuXHRcdFx0XHRcdGlmIChpdGVtRW50cnlNYXBba2V5XS5pdGVtSWQgPT09IGl0ZW1JZClcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjcmVhdGVEZWxldGVDb21waWxhdGlvbiAoKTogdm9pZCB7XHJcblx0XHRjb25zdCBkZWxldGVNYXAgPSB0aGlzLmRlbGV0ZU1hcDtcclxuXHRcdGNvbnN0IGRlbGV0ZUNvbXBpbGF0aW9uID0gdGhpcy5jb21waWxhdGlvbi5kZWxldGU7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBkZWxldGVNYXApIHtcclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZGVsZXRlTWFwW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeTogSXRlbUVudHJ5ID0gZGVsZXRlTWFwW2l0ZW1UeXBlXVtpdGVtSWRdLml0ZW07XHJcblxyXG5cdFx0XHRcdGlmIChkZWxldGVDb21waWxhdGlvbltpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdGRlbGV0ZUNvbXBpbGF0aW9uW2l0ZW1UeXBlXSA9IFtdO1xyXG5cclxuXHRcdFx0XHRkZWxldGVDb21waWxhdGlvbltpdGVtVHlwZV0ucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwb3N0UHJvY2VzcyAoKTogdm9pZCB7XHJcblx0XHRjb25zdCBkZWxldGVNYXAgPSB0aGlzLmRlbGV0ZU1hcDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiB0aGlzLm1vdmVBcnJheSkge1xyXG5cdFx0XHRjb25zdCBkZWxldGVFbnRyeTogRGVsZXRlTWFwRW50cnkgPSBnZXRQYXRoKGRlbGV0ZU1hcCwgW2l0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0pO1xyXG5cclxuXHRcdFx0aWYgKGRlbGV0ZUVudHJ5ID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHQvLyBhc3N1bWUgdGhlIGl0ZW1FbnRyeSBoYXMgYSBwYXJlbnQgKG9yIHNvbWV0aGluZyB3ZW50IHNlcmlvdXNseSB3cm9uZylcclxuXHRcdFx0Y29uc3Qge2l0ZW1UeXBlOiBwYXJlbnRUeXBlLCBpdGVtSWQ6IHBhcmVudElkfSA9IDxFbnRyeVBhcmVudD4gaXRlbUVudHJ5LnBhcmVudDtcclxuXHJcblx0XHRcdGlmICh0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudElkKSAmJiAhdGhpcy5jb250YWluc0NyZWF0ZUVudHJ5KHBhcmVudFR5cGUsIHBhcmVudElkKSkge1xyXG5cdFx0XHRcdGl0ZW1FbnRyeS5wYXJlbnQgPSBkZWxldGVFbnRyeS5wYXJlbnQ7XHJcblxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjcmVhdGVQYXRoKHRoaXMuY29tcGlsYXRpb24ubW92ZSwgW3BhcmVudFR5cGUsIHBhcmVudElkXSwgW3t9LCBbXV0pLnB1c2goZGVsZXRlRW50cnkpO1xyXG5cclxuXHRcdFx0ZGVsZXRlIGRlbGV0ZU1hcFtpdGVtRW50cnkuaXRlbVR5cGVdW2l0ZW1FbnRyeS5pdGVtSWRdO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuY3JlYXRlRGVsZXRlQ29tcGlsYXRpb24oKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcHJvY2Vzc1NpbmdsZUl0ZW1zICgpOiB2b2lkIHtcclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIHRoaXMuc2luZ2xlSXRlbXMpIHtcclxuXHRcdFx0aWYgKGl0ZW1FbnRyeS5pc0xvY2FsKCkpXHJcblx0XHRcdFx0dGhpcy5hZGRDcmVhdGVFbnRyeShpdGVtRW50cnkpO1xyXG5cdFx0XHRlbHNlIGlmIChpdGVtRW50cnkuaGFzQ2hhbmdlcygpKVxyXG5cdFx0XHRcdHRoaXMuYWRkVXBkYXRlRW50cnkoaXRlbUVudHJ5KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcHJvY2Vzc0NvbGxlY3Rpb25zIChjb2xsZWN0aW9uRW50cmllczogQ29sbGVjdGlvbkVudHJ5W10pOiB2b2lkIHtcclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIGNvbGxlY3Rpb25FbnRyaWVzKSB7XHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbnMuYWRkKGNvbGxlY3Rpb25FbnRyeSk7XHJcblxyXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LmlzRGVmZXJyZWQoKSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGxldCBhZGRlZEl0ZW1zO1xyXG5cdFx0XHRsZXQgcmVtb3ZlZEl0ZW1zO1xyXG5cclxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0xvY2FsKCkpIHtcclxuXHRcdFx0XHRhZGRlZEl0ZW1zID0gY29sbGVjdGlvbkVudHJ5Lml0ZW1zO1xyXG5cdFx0XHRcdHJlbW92ZWRJdGVtcyA9IFtdO1xyXG5cdFx0XHR9IGVsc2UgaWYgKGNvbGxlY3Rpb25FbnRyeS5oYXNFZGl0UmVzb3VyY2VzKSB7XHJcblx0XHRcdFx0YWRkZWRJdGVtcyA9IGNvbGxlY3Rpb25FbnRyeS5nZXRBZGRlZEl0ZW1zKCk7XHJcblx0XHRcdFx0cmVtb3ZlZEl0ZW1zID0gY29sbGVjdGlvbkVudHJ5LmdldFJlbW92ZWRJdGVtcygpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGFkZGVkSXRlbXMgPSBbXTtcclxuXHRcdFx0XHRyZW1vdmVkSXRlbXMgPSBbXTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBhZGRlZEl0ZW0gb2YgYWRkZWRJdGVtcykgeyAvLyBpdCBpcyBwb3NzaWJsZSB0byBtb3ZlIGFuIGV4aXN0aW5nIGl0ZW0gdG8gYSBuZXcgY29sbGVjdGlvblxyXG5cdFx0XHRcdGlmIChhZGRlZEl0ZW0uaXNMb2NhbCgpKVxyXG5cdFx0XHRcdFx0dGhpcy5hZGRDcmVhdGVFbnRyeShhZGRlZEl0ZW0pO1xyXG5cdFx0XHRcdGVsc2VcclxuXHRcdFx0XHRcdHRoaXMuYWRkTW92ZUVudHJ5KGFkZGVkSXRlbSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGZvciAoY29uc3QgcmVtb3ZlZEl0ZW0gb2YgcmVtb3ZlZEl0ZW1zKVxyXG5cdFx0XHRcdHRoaXMuYWRkRGVsZXRlRW50cnkocmVtb3ZlZEl0ZW0sIGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQpO1xyXG5cclxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5oYXNJdGVtRWRpdFJlc291cmNlcykge1xyXG5cdFx0XHRcdGNvbnN0IHVwZGF0ZWRJdGVtcyA9IGNvbGxlY3Rpb25FbnRyeS5nZXRVcGRhdGVkSXRlbXMoKTtcclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCB1cGRhdGVkSXRlbSBvZiB1cGRhdGVkSXRlbXMpXHJcblx0XHRcdFx0XHR0aGlzLmFkZFVwZGF0ZUVudHJ5KHVwZGF0ZWRJdGVtKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQge1xyXG5cdEFwaUZvcm1hdHRlcixcclxuXHRDaGFuZ2VzQ29tcGlsYXRpb24sXHJcblx0Q29sbGVjdGlvbkVudHJ5U2VydmljZSxcclxuXHRDb2xsZWN0aW9uSGFuZGxlcixcclxuXHRDb2x1bW5JbmZvLFxyXG5cdERlbGV0ZUNvbXBpbGF0aW9uLFxyXG5cdEl0ZW1IYW5kbGVyLFxyXG5cdE1vdmVDb21waWxhdGlvbixcclxuXHRVcGRhdGVDb21waWxhdGlvblxyXG59IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQge1xyXG5cdENoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXHJcblx0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRDcmVhdGVSZXF1ZXN0RmFjdG9yeSxcclxuXHRSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxyXG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHtcclxuXHRBcGlSZXNwb25zZSxcclxuXHRDcmVhdGVSZXF1ZXN0RW50cnksXHJcblx0Q3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCxcclxuXHRFbnRyeVBhcmVudCxcclxuXHRJdGVtSWQsXHJcblx0SXRlbUlkQ29udmVyc2lvbk1hcCxcclxuXHRJdGVtVHlwZSxcclxuXHRQcm9taXNlSW50ZXJmYWNlXHJcbn0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgY3JlYXRlUGF0aCwgZ2V0UGF0aCwgaGFzUHJvcGVydGllcywgaW5BcnJheSB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2hhbmdlc1Byb2Nlc3NvciB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcclxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5OiBDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGNvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNyZWF0ZVJlcXVlc3RGYWN0b3J5OiBDcmVhdGVSZXF1ZXN0RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSByZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnlcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdGJ1aWxkTW92ZVJlcXVlc3QgKGNvbXBpbGF0aW9uRW50cmllcykge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb21waWxhdGlvbkVudHJ5IG9mIGNvbXBpbGF0aW9uRW50cmllcykge1xyXG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSBjb21waWxhdGlvbkVudHJ5Lml0ZW07XHJcblx0XHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xyXG5cclxuXHRcdFx0aWYgKHJlc3VsdFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRyZXN1bHRbaXRlbVR5cGVdID0gW107XHJcblxyXG5cdFx0XHRyZXN1bHRbaXRlbVR5cGVdLnB1c2goaXRlbUVudHJ5Lml0ZW1JZCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdldE1hcFZhbHVlIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogbnVtYmVyIHwgc3RyaW5nLCBtYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApOiBJdGVtSWQgfCB1bmRlZmluZWQge1xyXG5cdFx0aWYgKG1hcCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRcdGlmIChtYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG5cdFx0cmV0dXJuIG1hcFtpdGVtVHlwZV1baXRlbUlkXTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZXhlY3V0ZUNyZWF0ZVJlcXVlc3RzIChcclxuXHRcdGNoYW5nZXNDb21waWxhdGlvbjogQ2hhbmdlc0NvbXBpbGF0aW9uLFxyXG5cdFx0cGFyYW1ldGVyczogQ3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCxcclxuXHRcdGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAsXHJcblx0XHRicmVha3VwQnlQYXJlbnQ/OiBib29sZWFuLFxyXG5cdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrPzogKGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApID0+IHZvaWRcclxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1JZENvbnZlcnNpb25NYXA+IHtcclxuXHRcdGNvbnN0IHJlcXVlc3RzID0gdGhpcy5jcmVhdGVSZXF1ZXN0RmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdGNoYW5nZXNDb21waWxhdGlvbi5jb21waWxhdGlvbi5jcmVhdGUsXHJcblx0XHRcdGNoYW5nZXNDb21waWxhdGlvbi5jb2xsZWN0aW9ucyxcclxuXHRcdFx0cGFyYW1ldGVycyxcclxuXHRcdFx0YnJlYWt1cEJ5UGFyZW50XHJcblx0XHQpLnJ1bigpO1xyXG5cdFx0Y29uc3QgcmVzcG9uc2VzOiBBcnJheTxQcm9taXNlSW50ZXJmYWNlPGFueT4+ID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCByZXF1ZXN0IG9mIHJlcXVlc3RzKVxyXG5cdFx0XHRyZXNwb25zZXMucHVzaCh0aGlzLmV4ZWN1dGVDcmVhdGVSZXF1ZXN0KHJlcXVlc3QsIGNvbnZlcnNpb25NYXApLnRoZW4obm90aWZ5KSk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHJlc3BvbnNlcykudGhlbihcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBjb252ZXJzaW9uTWFwO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblxyXG5cdFx0ZnVuY3Rpb24gbm90aWZ5IChyZXN1bHQpIHtcclxuXHRcdFx0aWYgKG9uQWZ0ZXJDcmVhdGVDYWxsYmFjayAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdG9uQWZ0ZXJDcmVhdGVDYWxsYmFjayhjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGV4ZWN1dGVDcmVhdGVSZXF1ZXN0IChcclxuXHRcdHJlcXVlc3RSZXNvdXJjZTogQ3JlYXRlUmVxdWVzdEVudHJ5LFxyXG5cdFx0Y29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcFxyXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8dm9pZD4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucmVxdWVzdFNrZWxldG9uKHJlcXVlc3RSZXNvdXJjZS5yZXF1ZXN0KS50aGVuKFxyXG5cdFx0XHRyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2VNYXAgPSByZXNwb25zZS5tYXA7XHJcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCk7XHJcblx0XHRcdFx0Y29uc3QgaXRlbUVudHJpZXMgPSByZXF1ZXN0UmVzb3VyY2UuaXRlbXM7XHJcblxyXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gaXRlbUVudHJpZXMpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0XHRyZXF1ZXN0UmVzb3VyY2UucmVxdWVzdC5jb2x1bW5zW2l0ZW1UeXBlXSxcclxuXHRcdFx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zXHJcblx0XHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGl0ZW1FbnRyaWVzW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBpdGVtRW50cnk6IEl0ZW1FbnRyeSA9IGl0ZW1FbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdO1xyXG5cdFx0XHRcdFx0XHRjb25zdCBuZXdJdGVtSWQgPSB0aGlzLmdldE1hcFZhbHVlKGl0ZW1UeXBlLCBpdGVtSWQsIHJlc3BvbnNlTWFwKTtcclxuXHJcblx0XHRcdFx0XHRcdGlmIChuZXdJdGVtSWQgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUud2FybignQ3JlYXRlIGZhaWxlZCEnLCBpdGVtRW50cnkpO1xyXG5cdFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRjb25zdCBmaWVsZHMgPSByZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgbmV3SXRlbUlkKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgZXhwYW5kUmVzb3VyY2UgPSBjb2x1bW5FeHBhbnNpb24ucnVuKGl0ZW1FbnRyeS5jb2x1bW5zKTtcclxuXHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5pdGVtSWQgPSBuZXdJdGVtSWQ7XHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS51cGRhdGVGaWVsZHMoXHJcblx0XHRcdFx0XHRcdFx0ZmllbGRzLFxyXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgbmV3SXRlbUlkLCBpdGVtRW50cnkuY29sdW1ucy5yb290KSxcclxuXHRcdFx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0XHRcdGlmIChleHBhbmRSZXNvdXJjZSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5leHBhbmQoXHJcblx0XHRcdFx0XHRcdFx0XHRmaWVsZHMsXHJcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIG5ld0l0ZW1JZCwgZXhwYW5kUmVzb3VyY2UuZGlmZmVyZW5jZS5yb290KSxcclxuXHRcdFx0XHRcdFx0XHRcdGV4cGFuZFJlc291cmNlXHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0dGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmFkZChpdGVtRW50cnkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmVxdWVzdFJlc291cmNlLmNvbGxlY3Rpb25zLmFkZFRvQ29sbGVjdGlvbnMoKTtcclxuXHJcblx0XHRcdFx0Ly8gZXh0ZW5kIGNvbnZlcnNpb24gbWFwXHJcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiByZXNwb25zZU1hcCkge1xyXG5cdFx0XHRcdFx0aWYgKGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRcdGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID0ge307XHJcblxyXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gcmVzcG9uc2VNYXBbaXRlbVR5cGVdKVxyXG5cdFx0XHRcdFx0XHRjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXVtpdGVtSWRdID0gcmVzcG9uc2VNYXBbaXRlbVR5cGVdW2l0ZW1JZF07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGV4ZWN1dGVVcGRhdGVSZXF1ZXN0cyAoY29tcGlsYXRpb246IFVwZGF0ZUNvbXBpbGF0aW9uLCBwYXJhbWV0ZXJzKSB7XHJcblx0XHRjb25zdCByZXF1ZXN0czogQXJyYXk8UHJvbWlzZTxBcGlSZXNwb25zZT4+ID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBjb21waWxhdGlvbilcclxuXHRcdFx0cmVxdWVzdHMucHVzaCh0aGlzLmV4ZWN1dGVVcGRhdGVSZXF1ZXN0KGl0ZW1UeXBlLCBjb21waWxhdGlvbltpdGVtVHlwZV0sIHBhcmFtZXRlcnMpKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocmVxdWVzdHMpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBleGVjdXRlVXBkYXRlUmVxdWVzdCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtRW50cmllczoge1tpdGVtSWQ6IG51bWJlcl06IEl0ZW1FbnRyeX0sIHBhcmFtZXRlck1hcCkge1xyXG5cdFx0Y29uc3QgcmVxdWVzdCA9IHt9O1xyXG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSB0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdCgpO1xyXG5cdFx0Y29uc3QgY29sbGVjdGlvbk1hdGNoZXIgPSB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmdldENvbGxlY3Rpb25NYXRjaGVyKCk7XHJcblxyXG5cdFx0cmVxdWVzdFtpdGVtVHlwZV0gPSB7fTtcclxuXHJcblx0XHQvLyB3ZSBuZWVkIHRvIGRvIHRoZSBmb3JtYXRSZXF1ZXN0IGNhbGwgaGVyZSAoZmllbGRzIG1pZ2h0IGhhdmUgYmVlbiB1cGRhdGVkKVxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbUVudHJpZXMpIHtcclxuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gaXRlbUVudHJpZXNbaXRlbUlkXTtcclxuXHRcdFx0Ly8gUk1Db3JlIHRvZG86IHR5cGVcclxuXHRcdFx0Y29uc3QgaXRlbVJlcXVlc3Q6IGFueSA9IHJlcXVlc3RbaXRlbVR5cGVdW2l0ZW1JZF0gPSB7fTtcclxuXHRcdFx0Y29uc3QgcGFyYW1ldGVycyA9IGdldFBhdGgocGFyYW1ldGVyTWFwLCBbaXRlbVR5cGUsIGl0ZW1JZF0pO1xyXG5cclxuXHRcdFx0aXRlbVJlcXVlc3QudmFsdWVzID0gaXRlbUVudHJ5LmZvcm1hdFJlcXVlc3QoKTtcclxuXHJcblx0XHRcdGlmIChwYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0aXRlbVJlcXVlc3QucGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7XHJcblxyXG5cdFx0XHRyZXF1ZXN0Q29sdW1ucy5leHBhbmQoaXRlbUVudHJ5LmNvbHVtbnMpO1xyXG5cdFx0XHRjb2xsZWN0aW9uTWF0Y2hlci5leHBhbmQoaXRlbUVudHJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBjb2xsZWN0aW9uc1dpdGhGaXR0aW5nSXRlbXMgPSBjb2xsZWN0aW9uTWF0Y2hlci5nZXRDb2xsZWN0aW9uc1dpdGhGaXR0aW5nSXRlbXMoKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb24gb2YgY29sbGVjdGlvbnNXaXRoRml0dGluZ0l0ZW1zKVxyXG5cdFx0XHRyZXF1ZXN0Q29sdW1ucy5leHBhbmQoY29sbGVjdGlvbi5jb2x1bW5zKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS51cGRhdGVJdGVtcyhpdGVtVHlwZSwgcmVxdWVzdCwgcmVxdWVzdENvbHVtbnMuZ2V0KCkpLnRoZW4oXHJcblx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0XHRyZXF1ZXN0Q29sdW1ucy5nZXQoKVtpdGVtVHlwZV0sXHJcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKVxyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSBpdGVtRW50cmllc1tpdGVtSWRdO1xyXG5cdFx0XHRcdFx0Y29uc3QgZmllbGRzID0gcmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKGZpZWxkcyA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUud2FybignVXBkYXRlIGZhaWxlZCEnLCBpdGVtRW50cnkpO1xyXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRjb25zdCBwcmV2aW91cyA9IHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoaXRlbUVudHJ5LmluaXRpYWwsIHt9LCBpdGVtRW50cnkuY29sdW1ucy5tYWluKTtcclxuXHJcblx0XHRcdFx0XHRpdGVtRW50cnlcclxuXHRcdFx0XHRcdFx0LnVwZGF0ZUZpZWxkcyhmaWVsZHMsIHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBpdGVtRW50cnkuY29sdW1ucy5yb290KSlcclxuXHRcdFx0XHRcdFx0LmNhbGxPbkNoYW5nZShwcmV2aW91cyk7XHJcblxyXG5cdFx0XHRcdFx0Y29uc3QgZXhwYW5kUmVzb3VyY2UgPSBjb2x1bW5FeHBhbnNpb24ucnVuKGl0ZW1FbnRyeS5jb2x1bW5zKTtcclxuXHJcblx0XHRcdFx0XHRpZiAoZXhwYW5kUmVzb3VyY2UgPT09IG51bGwpXHJcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5leHBhbmQoXHJcblx0XHRcdFx0XHRcdGZpZWxkcyxcclxuXHRcdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGV4cGFuZFJlc291cmNlLmRpZmZlcmVuY2Uucm9vdCksXHJcblx0XHRcdFx0XHRcdGV4cGFuZFJlc291cmNlXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIucmVtb3ZlRnJvbUFuZEFkZFRvQ29sbGVjdGlvbnMoKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBleGVjdXRlRGVsZXRlUmVxdWVzdHMgKGNvbXBpbGF0aW9uOiBEZWxldGVDb21waWxhdGlvbikge1xyXG5cdFx0Y29uc3QgcmVxdWVzdHM6IEFycmF5PFByb21pc2VJbnRlcmZhY2U8dm9pZD4+ID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBjb21waWxhdGlvbikgLy8gY2xlYXJpbmcgbm90IG5lY2Vzc2FyeVxyXG5cdFx0XHRyZXF1ZXN0cy5wdXNoKHRoaXMuZXhlY3V0ZURlbGV0ZVJlcXVlc3QoaXRlbVR5cGUsIGNvbXBpbGF0aW9uW2l0ZW1UeXBlXSkpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChyZXF1ZXN0cyk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGV4ZWN1dGVEZWxldGVSZXF1ZXN0IChpdGVtVHlwZSwgaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdKSB7XHJcblx0XHRjb25zdCBpZEFycmF5OiBJdGVtSWRbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxyXG5cdFx0XHRpZEFycmF5LnB1c2goaXRlbUVudHJ5Lml0ZW1JZCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UuZGVsZXRlKGl0ZW1UeXBlLCBpZEFycmF5KS50aGVuKFxyXG5cdFx0XHRyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2VJZEFycmF5ID0gcmVzcG9uc2UuaXRlbXM7XHJcblx0XHRcdFx0Y29uc3QgY29sbGVjdGlvbk1hdGNoZXIgPSB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmdldENvbGxlY3Rpb25NYXRjaGVyKCk7XHJcblxyXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdFx0XHRpZiAoIWluQXJyYXkoaXRlbUVudHJ5Lml0ZW1JZCwgcmVzcG9uc2VJZEFycmF5KSlcclxuXHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKCdEZWxldGUgZmFpbGVkIScsIGl0ZW1FbnRyeSk7XHJcblxyXG5cdFx0XHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIuZXhwYW5kKGl0ZW1FbnRyeSk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRjb2xsZWN0aW9uTWF0Y2hlci5yZW1vdmVGcm9tQ29sbGVjdGlvbnMoKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBleGVjdXRlTW92ZVJlcXVlc3RzIChjb21waWxhdGlvbjogTW92ZUNvbXBpbGF0aW9uLCBjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwKSB7XHJcblx0XHRjb25zdCBzZWxmID0gdGhpcztcclxuXHRcdGNvbnN0IHJlcXVlc3RzOiBBcnJheTxQcm9taXNlSW50ZXJmYWNlPHZvaWQ+PiA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgcGFyZW50VHlwZSBpbiBjb21waWxhdGlvbikge1xyXG5cdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGNvbXBpbGF0aW9uW3BhcmVudFR5cGVdKVxyXG5cdFx0XHRcdGV4ZWN1dGVNb3ZlUmVxdWVzdChwYXJlbnRUeXBlLCArcGFyZW50SWQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChyZXF1ZXN0cyk7XHJcblxyXG5cdFx0ZnVuY3Rpb24gZXhlY3V0ZU1vdmVSZXF1ZXN0IChwYXJlbnRUeXBlOiBJdGVtVHlwZSwgcGFyZW50SWQ6IEl0ZW1JZCkge1xyXG5cdFx0XHQvLyBvbmx5IHRoZSBwYXJlbnQgaWQgY291bGQgaGF2ZSBiZWVuIHVwZGF0ZWRcclxuXHRcdFx0Y29uc3QgY29tcGlsYXRpb25FbnRyaWVzID0gY29tcGlsYXRpb25bcGFyZW50VHlwZV1bcGFyZW50SWRdO1xyXG5cdFx0XHRjb25zdCBuZXdQYXJlbnRJZCA9IHNlbGYuZ2V0TWFwVmFsdWUocGFyZW50VHlwZSwgcGFyZW50SWQsIGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdFx0cmVxdWVzdHMucHVzaChcclxuXHRcdFx0XHRzZWxmLmFwaVJlcXVlc3RTZXJ2aWNlLm1vdmVJdGVtcyhcclxuXHRcdFx0XHRcdHBhcmVudFR5cGUsXHJcblx0XHRcdFx0XHRuZXdQYXJlbnRJZCAhPT0gdW5kZWZpbmVkID8gbmV3UGFyZW50SWQgOiBwYXJlbnRJZCxcclxuXHRcdFx0XHRcdHNlbGYuYnVpbGRNb3ZlUmVxdWVzdChjb21waWxhdGlvbkVudHJpZXMpXHJcblx0XHRcdFx0KS50aGVuKFxyXG5cdFx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRzZWxmLnByb2Nlc3NNb3ZlUmVzcG9uc2UoLyogcmVzcG9uc2UsICovY29tcGlsYXRpb25FbnRyaWVzKTtcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRzZWxmLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdFx0XHQpXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHByb2Nlc3NNb3ZlUmVzcG9uc2UgKC8qIHJlc3BvbnNlLCAqL2NvbXBpbGF0aW9uRW50cmllcykge1xyXG5cdFx0Ly8gVE9ETzogcHJvY2VzcyByZXNwb25zZVxyXG5cclxuXHRcdGNvbnN0IGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cdFx0Y29uc3QgcmVtb3ZlQ29sbGVjdGlvbk1hcCA9IHt9O1xyXG5cdFx0Y29uc3QgYWRkQ29sbGVjdGlvbk1hcCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29tcGlsYXRpb25FbnRyeSBvZiBjb21waWxhdGlvbkVudHJpZXMpIHtcclxuXHRcdFx0Y29uc3QgaXRlbUVudHJ5OiBJdGVtRW50cnkgPSBjb21waWxhdGlvbkVudHJ5Lml0ZW07XHJcblxyXG5cdFx0XHR0aGlzLmFkZENvbGxlY3Rpb25NYXBFbnRyeShcclxuXHRcdFx0XHRyZW1vdmVDb2xsZWN0aW9uTWFwLFxyXG5cdFx0XHRcdGNvbXBpbGF0aW9uRW50cnkucGFyZW50SWQsXHJcblx0XHRcdFx0aXRlbUVudHJ5LFxyXG5cdFx0XHRcdGl0ZW1FbnRyeS5pdGVtSWRcclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdHRoaXMuYWRkQ29sbGVjdGlvbk1hcEVudHJ5KFxyXG5cdFx0XHRcdGFkZENvbGxlY3Rpb25NYXAsXHJcblx0XHRcdFx0KDxFbnRyeVBhcmVudD4gaXRlbUVudHJ5LnBhcmVudCkuaXRlbUlkLFxyXG5cdFx0XHRcdGl0ZW1FbnRyeSxcclxuXHRcdFx0XHRpdGVtRW50cnlcclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdGl0ZW1FbnRyaWVzLnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLmZvckVhY2hDb2xsZWN0aW9uKHJlbW92ZUNvbGxlY3Rpb25NYXAsICdyZW1vdmVJdGVtcycpO1xyXG5cdFx0dGhpcy5mb3JFYWNoQ29sbGVjdGlvbihhZGRDb2xsZWN0aW9uTWFwLCAnYWRkSXRlbXMnKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYWRkQ29sbGVjdGlvbk1hcEVudHJ5IChjb2xsZWN0aW9uTWFwLCBwYXJlbnRJZCwgaXRlbUVudHJ5LCB2YWx1ZSkge1xyXG5cdFx0Y29uc3QgY29sbGVjdGlvbk1hcEVudHJ5ID0gY3JlYXRlUGF0aChcclxuXHRcdFx0Y29sbGVjdGlvbk1hcCxcclxuXHRcdFx0W2l0ZW1FbnRyeS5wYXJlbnQuaXRlbVR5cGUsIHBhcmVudElkLCBpdGVtRW50cnkuaXRlbVR5cGVdLFxyXG5cdFx0XHRbe30sIHt9LCBbXV1cclxuXHRcdCk7XHJcblxyXG5cdFx0Y29sbGVjdGlvbk1hcEVudHJ5LnB1c2godmFsdWUpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBmb3JFYWNoQ29sbGVjdGlvbiAoY29sbGVjdGlvbk1hcCwgbWV0aG9kKSB7XHJcblx0XHRmb3IgKGNvbnN0IHBhcmVudFR5cGUgaW4gY29sbGVjdGlvbk1hcCkge1xyXG5cdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGNvbGxlY3Rpb25NYXBbcGFyZW50VHlwZV0pIHtcclxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGNvbGxlY3Rpb25NYXBbcGFyZW50VHlwZV1bcGFyZW50SWRdKSB7XHJcblx0XHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmVudHJpZXMuZ2V0QnlQYXJlbnQocGFyZW50VHlwZSwgcGFyZW50SWQsIGl0ZW1UeXBlKTtcclxuXHJcblx0XHRcdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ID09PSBudWxsKVxyXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cnlbbWV0aG9kXShcclxuXHRcdFx0XHRcdFx0Y29sbGVjdGlvbk1hcFtwYXJlbnRUeXBlXVtwYXJlbnRJZF1baXRlbVR5cGVdLFxyXG5cdFx0XHRcdFx0XHRudWxsLFxyXG5cdFx0XHRcdFx0XHR0cnVlXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gbm90ZTogd2l0aCB0aGUgbmV3IGl0ZW0gc3RydWN0dXJlLCAqYWxsKiBsb2NhbCBpdGVtcyBhcmUgaW4gdGhlIHNpbmdsZSBpdGVtIGNhY2hlXHJcblx0cHJpdmF0ZSBvbkl0ZW1zQ3JlYXRlZCAoXHJcblx0XHRjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwLFxyXG5cdFx0c2luZ2xlSXRlbXM6IEl0ZW1FbnRyeVtdLFxyXG5cdFx0Y29sbGVjdGlvbnM6IENvbGxlY3Rpb25FbnRyeVtdXHJcblx0KSB7XHJcblx0XHRpZiAoIWhhc1Byb3BlcnRpZXMoY29udmVyc2lvbk1hcCkpXHJcblx0XHRcdHJldHVybjtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiBjb2xsZWN0aW9ucykge1xyXG5cdFx0XHRjb25zdCBwYXJlbnQgPSBjb2xsZWN0aW9uRW50cnkucGFyZW50O1xyXG5cdFx0XHRjb25zdCB1cGRhdGVkQ29sdW1uczoge1tjb2x1bW5JZDogc3RyaW5nXTogQ29sdW1uSW5mb30gPVxyXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5nZXRVcGRhdGVkSXRlbUNvbHVtbnMoY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0XHRpZiAocGFyZW50ICE9PSBudWxsKSB7XHJcblx0XHRcdFx0Y29uc3QgbmV3UGFyZW50SWQgPSB0aGlzLmdldE1hcFZhbHVlKHBhcmVudC5pdGVtVHlwZSwgcGFyZW50Lml0ZW1JZCwgY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0XHRcdGlmIChuZXdQYXJlbnRJZCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHRwYXJlbnQuaXRlbUlkID0gbmV3UGFyZW50SWQ7XHJcblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cnkucXVlcnkgPSB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuY3JlYXRlUXVlcnkoY29sbGVjdGlvbkVudHJ5Lm9wdGlvbnMpO1xyXG5cclxuXHRcdFx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZW50cmllcy5hZGQoY29sbGVjdGlvbkVudHJ5KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICghaGFzUHJvcGVydGllcyh1cGRhdGVkQ29sdW1ucykpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRpZiAodXBkYXRlZENvbHVtbnMuaWQgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkub25JdGVtc0NyZWF0ZWQoY29udmVyc2lvbk1hcFtjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGVdKTtcclxuXHJcblx0XHRcdC8vIHdoZW4gdXBkYXRpbmcgYW4gaXRlbSB0byByZWZlciB0byBhIG5ld2x5IGNyZWF0ZWQgaXRlbSwgdGhlIHVwZGF0ZWQgaXRlbSB3aWxsICpub3QqIGJlIGFkZGVkIHRvXHJcblx0XHRcdC8vIHNpbmdsZSBpdGVtcyAoZS5nLiBtb3ZpbmcgYSBmdW5jdGlvbiB0byBhIG5ld2x5IGNyZWF0ZWQgZnVuY3Rpb24gZ3JvdXApXHJcblx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGNvbGxlY3Rpb25FbnRyeS5pdGVtcylcclxuXHRcdFx0XHRpdGVtRW50cnkudXBkYXRlSXRlbUZpZWxkcyhjb252ZXJzaW9uTWFwKTtcclxuXHRcdH1cclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBzaW5nbGVJdGVtcykge1xyXG5cdFx0XHRjb25zdCBwYXJlbnQgPSBpdGVtRW50cnkucGFyZW50O1xyXG5cclxuXHRcdFx0aXRlbUVudHJ5LnVwZGF0ZUl0ZW1GaWVsZHMoY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0XHRpZiAocGFyZW50ICE9PSBudWxsKSB7XHJcblx0XHRcdFx0Y29uc3QgbmV3UGFyZW50SWQgPSB0aGlzLmdldE1hcFZhbHVlKHBhcmVudC5pdGVtVHlwZSwgcGFyZW50Lml0ZW1JZCwgY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0XHRcdGlmIChuZXdQYXJlbnRJZCAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0cGFyZW50Lml0ZW1JZCA9IG5ld1BhcmVudElkO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBwcm9wZXIgb3JkZXI6IGNyZWF0ZSAtIG1vdmUgLSBkZWxldGUgLSB1cGRhdGVcclxuXHRleGVjdXRlIChcclxuXHRcdHNpbmdsZUl0ZW1zOiBJdGVtRW50cnlbXSxcclxuXHRcdGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uRW50cnlbXSxcclxuXHRcdHBhcmFtZXRlcnM6IENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAgPSB7fSxcclxuXHRcdGJyZWFrdXBCeVBhcmVudD86IGJvb2xlYW4sXHJcblx0XHRvbkFmdGVyQ3JlYXRlQ2FsbGJhY2s/OiAoY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCkgPT4gdm9pZFxyXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8SXRlbUlkQ29udmVyc2lvbk1hcD4ge1xyXG5cdFx0Y29uc3QgZXJyb3JIYW5kbGVyID0gdGhpcy5lcnJvckhhbmRsZXI7XHJcblx0XHRjb25zdCBjaGFuZ2VzQ29tcGlsYXRpb24gPSB0aGlzLmNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkuY29uc3RydWN0KHNpbmdsZUl0ZW1zLCBjb2xsZWN0aW9ucyk7XHJcblx0XHRjb25zdCBjb21waWxhdGlvbiA9IGNoYW5nZXNDb21waWxhdGlvbi5jb21waWxhdGlvbjtcclxuXHRcdGNvbnN0IGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAgPSB7fTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5leGVjdXRlQ3JlYXRlUmVxdWVzdHMoXHJcblx0XHRcdGNoYW5nZXNDb21waWxhdGlvbixcclxuXHRcdFx0cGFyYW1ldGVycyxcclxuXHRcdFx0Y29udmVyc2lvbk1hcCxcclxuXHRcdFx0YnJlYWt1cEJ5UGFyZW50LFxyXG5cdFx0XHRvbkFmdGVyQ3JlYXRlQ2FsbGJhY2tcclxuXHRcdCkudGhlbihcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdHRoaXMub25JdGVtc0NyZWF0ZWQoY29udmVyc2lvbk1hcCwgc2luZ2xlSXRlbXMsIGNvbGxlY3Rpb25zKTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZU1vdmVSZXF1ZXN0cyhjb21waWxhdGlvbi5tb3ZlLCBjb252ZXJzaW9uTWFwKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0ZXJyb3IgPT4ge1xyXG5cdFx0XHRcdHRoaXMub25JdGVtc0NyZWF0ZWQoY29udmVyc2lvbk1hcCwgc2luZ2xlSXRlbXMsIGNvbGxlY3Rpb25zKTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIGVycm9ySGFuZGxlci5yZWplY3QoZXJyb3IpO1xyXG5cdFx0XHR9XHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5leGVjdXRlVXBkYXRlUmVxdWVzdHMoY29tcGlsYXRpb24udXBkYXRlLCBwYXJhbWV0ZXJzKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZURlbGV0ZVJlcXVlc3RzKGNvbXBpbGF0aW9uLmRlbGV0ZSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdGVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCkudGhlbihcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBjb252ZXJzaW9uTWFwO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBRdWVyeU1hdGNoZXJGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uTWF0Y2hSZXN1bHQsIEVudHJ5UGFyZW50TnVsbCwgRmllbGRNYXAsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZW51bSBDT05TVEFOVFMge1xyXG5cdE1BWUJFID0gJ21heWJlJ1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkNhY2hlIHtcclxuXHRlbnRyaWVzOiB7XHJcblx0XHRbaXRlbVR5cGU6IHN0cmluZ106IHtcclxuXHRcdFx0W2NvbGxlY3Rpb25FbnRyeUlkOiBudW1iZXJdOiBDb2xsZWN0aW9uRW50cnlcclxuXHRcdH1cclxuXHR9ID0ge307XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgcXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeVxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdGNvbnRhaW5zIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSk6IGJvb2xlYW4ge1xyXG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGVdO1xyXG5cclxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRyZXR1cm4gZW50cmllc1tjb2xsZWN0aW9uRW50cnkuaWRdICE9PSB1bmRlZmluZWQ7XHJcblx0fVxyXG5cclxuXHRzb21lIChjYWxsYmFjazogKGVudHJ5OiBDb2xsZWN0aW9uRW50cnkpID0+IGJvb2xlYW4pOiBib29sZWFuIHtcclxuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBlbnRyaWVzKSB7XHJcblx0XHRcdGZvciAoY29uc3QgZW50cnlJZCBpbiBlbnRyaWVzW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHRcdGlmIChjYWxsYmFjayhlbnRyaWVzW2l0ZW1UeXBlXVtlbnRyeUlkXSkpXHJcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdC8vIFRPRE86IGNoZWNrIGlmIHRoaXMgaXMgc3RpbGwgaW4gdXNlXHJcblx0Zm9yRWFjaCAoY2FsbGJhY2s6IChlbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiB2b2lkKTogdm9pZCB7XHJcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gZW50cmllcykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllc1tpdGVtVHlwZV0pXHJcblx0XHRcdFx0Y2FsbGJhY2soZW50cmllc1tpdGVtVHlwZV1bZW50cnlJZF0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0dG9BcnJheSAoKSB7XHJcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gZW50cmllcykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllc1tpdGVtVHlwZV0pXHJcblx0XHRcdFx0cmVzdWx0LnB1c2goZW50cmllc1tpdGVtVHlwZV1bZW50cnlJZF0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRhZGQgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KTogQ29sbGVjdGlvbkVudHJ5IHtcclxuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZTtcclxuXHJcblx0XHRpZiAoZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0ZW50cmllc1tpdGVtVHlwZV0gPSB7fTtcclxuXHJcblx0XHRyZXR1cm4gZW50cmllc1tpdGVtVHlwZV1bY29sbGVjdGlvbkVudHJ5LmlkXSA9IGNvbGxlY3Rpb25FbnRyeTtcclxuXHR9XHJcblxyXG5cdGNsZWFyIChjb2xsZWN0aW9uRW50cnk/OiBDb2xsZWN0aW9uRW50cnkpOiBib29sZWFuIHtcclxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHR0aGlzLmVudHJpZXMgPSB7fTtcclxuXHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICghdGhpcy5jb250YWlucyhjb2xsZWN0aW9uRW50cnkpKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0cmV0dXJuIGRlbGV0ZSB0aGlzLmVudHJpZXNbY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlXVtjb2xsZWN0aW9uRW50cnkuaWRdO1xyXG5cdH1cclxuXHJcblx0Z2V0QnlJdGVtVHlwZSAoaXRlbVR5cGU6IHN0cmluZykge1xyXG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XHJcblx0XHRjb25zdCByZXN1bHQ6IENvbGxlY3Rpb25FbnRyeVtdID0gW107XHJcblxyXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllcylcclxuXHRcdFx0cmVzdWx0LnB1c2goZW50cmllc1tlbnRyeUlkXSk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdG1hdGNoUGFyZW50IChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgaXRlbVR5cGU6IHN0cmluZywgaXRlbUlkKSB7XHJcblx0XHRjb25zdCBwYXJlbnQgPSBjb2xsZWN0aW9uRW50cnkucGFyZW50O1xyXG5cclxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHQvLyA9PSB0byBjb21wYXJlIGl0ZW1JZHNcclxuXHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXHJcblx0XHRyZXR1cm4gcGFyZW50Lml0ZW1UeXBlID09PSBpdGVtVHlwZSAmJiBwYXJlbnQuaXRlbUlkID09IGl0ZW1JZDtcclxuXHR9XHJcblxyXG5cdC8vIFRPRE86IHRoaW5rIG9mIGJldHRlciBuYW1lXHJcblx0Z2V0QnlQYXJlbnQgKHBhcmVudFR5cGUsIHBhcmVudElkLCBpdGVtVHlwZSk6IENvbGxlY3Rpb25FbnRyeSB8IG51bGwge1xyXG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XHJcblxyXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXMpIHtcclxuXHRcdFx0aWYgKHRoaXMubWF0Y2hQYXJlbnQoZW50cmllc1tlbnRyeUlkXSwgcGFyZW50VHlwZSwgcGFyZW50SWQpKVxyXG5cdFx0XHRcdHJldHVybiBlbnRyaWVzW2VudHJ5SWRdO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBudWxsO1xyXG5cdH1cclxuXHJcblx0Z2V0UmVzb3VyY2VCeVBhcmVudCAocGFyZW50VHlwZSwgcGFyZW50SWQsIGl0ZW1UeXBlKTogQ29sbGVjdGlvblJlc291cmNlIHwgbnVsbCB7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSB0aGlzLmdldEJ5UGFyZW50KHBhcmVudFR5cGUsIHBhcmVudElkLCBpdGVtVHlwZSk7XHJcblxyXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeSA9PT0gbnVsbClcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblxyXG5cdFx0cmV0dXJuIGNvbGxlY3Rpb25FbnRyeS5nZXRDdXJyZW50UmVzb3VyY2UoKTtcclxuXHR9XHJcblxyXG5cdGdldENvbGxlY3Rpb25zQnlQYXJlbnQgKHBhcmVudFR5cGUsIHBhcmVudElkKSB7XHJcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gZW50cmllcykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBlbnRyaWVzW2l0ZW1UeXBlXVtlbnRyeUlkXTtcclxuXHJcblx0XHRcdFx0aWYgKHRoaXMubWF0Y2hQYXJlbnQoY29sbGVjdGlvbkVudHJ5LCBwYXJlbnRUeXBlLCBwYXJlbnRJZCkpXHJcblx0XHRcdFx0XHRyZXN1bHQucHVzaChjb2xsZWN0aW9uRW50cnkpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIE9ubHkgcmVzb3VyY2VzXHJcblx0ICogQHBhcmFtIHtTdHJpbmd9IGl0ZW1UeXBlXHJcblx0ICogQHBhcmFtIHtTdHJpbmd8SW50ZWdlcn0gaXRlbUlkXHJcblx0ICogQHJldHVybnMge09iamVjdH0gQXJyYXkgb2YgY29sbGVjdGlvbnMuXHJcblx0ICovXHJcblx0Z2V0QnlDb250YWluaW5nSXRlbSAoaXRlbVR5cGUsIGl0ZW1JZCkge1xyXG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XHJcblx0XHRjb25zdCByZXN1bHQ6IENvbGxlY3Rpb25FbnRyeVtdID0gW107XHJcblxyXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllcykge1xyXG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBlbnRyaWVzW2VudHJ5SWRdO1xyXG5cclxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5nZXRJdGVtQnlJZChpdGVtSWQpICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0cmVzdWx0LnB1c2goY29sbGVjdGlvbkVudHJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmV0dXJucyBhbiBhcnJheSBvZiBjb2xsZWN0aW9ucyB0aGUgaXRlbSAnYmVsb25ncycgaW4uXHJcblx0ICovXHJcblx0Z2V0QnlGaXR0aW5nSXRlbSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBmaWVsZHM6IEZpZWxkTWFwLCBwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCkge1xyXG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XHJcblx0XHRjb25zdCByZXN1bHQ6IENvbGxlY3Rpb25NYXRjaFJlc3VsdCA9IHtmaXR0aW5nOiBbXSwgbm90Zml0dGluZzogW10sIG1heWJlOiBbXX07XHJcblxyXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHJcblx0XHQvLyBjb25zb2xlLnRpbWUoJ2dldEJ5Rml0dGluZ0l0ZW0nKTtcclxuXHJcblx0XHRjb25zdCBxdWVyeU1hdGNoZXIgPSB0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCBmaWVsZHMsIHBhcmVudCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXMpIHtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gZW50cmllc1tlbnRyeUlkXTtcclxuXHRcdFx0Y29uc3QgbWF0Y2hSZXN1bHQgPSBxdWVyeU1hdGNoZXIubWF0Y2hRdWVyeShjb2xsZWN0aW9uRW50cnkucXVlcnkub2JqZWN0KTtcclxuXHJcblx0XHRcdC8vIFRPRE86IG1heWJlP1xyXG5cdFx0XHRpZiAobWF0Y2hSZXN1bHQgPT09IHRydWUpIC8vIG1pZ2h0IGFsc28gcmV0dXJuICdtYXliZSdcclxuXHRcdFx0XHRyZXN1bHQuZml0dGluZy5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XHJcblx0XHRcdGVsc2UgaWYgKG1hdGNoUmVzdWx0ID09PSBDT05TVEFOVFMuTUFZQkUpXHJcblx0XHRcdFx0cmVzdWx0Lm1heWJlLnB1c2goY29sbGVjdGlvbkVudHJ5KTtcclxuXHRcdFx0ZWxzZVxyXG5cdFx0XHRcdHJlc3VsdC5ub3RmaXR0aW5nLnB1c2goY29sbGVjdGlvbkVudHJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBjb25zb2xlLnRpbWVFbmQoJ2dldEJ5Rml0dGluZ0l0ZW0nKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0QnlRdWVyeSAoaXRlbVR5cGUsIHF1ZXJ5KTogQ29sbGVjdGlvbkVudHJ5IHwgbnVsbCB7XHJcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcclxuXHJcblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllcykge1xyXG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBlbnRyaWVzW2VudHJ5SWRdO1xyXG5cclxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5xdWVyeS5zdHJpbmcgPT09IHF1ZXJ5LnN0cmluZylcclxuXHRcdFx0XHRyZXR1cm4gY29sbGVjdGlvbkVudHJ5O1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBudWxsO1xyXG5cdH1cclxuXHJcblx0Z2V0QnlLZXkgKGl0ZW1UeXBlLCBlbnRyeUtleSkge1xyXG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XHJcblx0XHRjb25zdCByZXN1bHQ6IENvbGxlY3Rpb25FbnRyeVtdID0gW107XHJcblxyXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllcykge1xyXG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBlbnRyaWVzW2VudHJ5SWRdO1xyXG5cclxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zLmVudHJ5S2V5ID09PSBlbnRyeUtleSlcclxuXHRcdFx0XHRyZXN1bHQucHVzaChjb2xsZWN0aW9uRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRnZXRSZXNvdXJjZUJ5S2V5IChpdGVtVHlwZSwgcmVzb3VyY2VLZXkpIHtcclxuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uUmVzb3VyY2VbXSA9IFtdO1xyXG5cclxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXMpIHtcclxuXHRcdFx0Y29uc3QgcmVzb3VyY2VzID0gZW50cmllc1tlbnRyeUlkXS5yZXNvdXJjZXM7XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc291cmNlcykge1xyXG5cdFx0XHRcdGlmIChyZXNvdXJjZS5vcHRpb25zLnJlc291cmNlS2V5ID09PSByZXNvdXJjZUtleSlcclxuXHRcdFx0XHRcdHJlc3VsdC5wdXNoKHJlc291cmNlKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5cclxuaW1wb3J0IHsgUXVlcnlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IFF1ZXJ5UGFyc2VyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEl0ZW1JZCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IHNoYWxsb3dNZXJnZSB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkVudHJ5U2VydmljZSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBxdWVyeVBhcnNlckZhY3Rvcnk6IFF1ZXJ5UGFyc2VyRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgcXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2VcclxuXHQpIHtcclxuXHJcblx0fVxyXG5cclxuXHQvLyBubyBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoZSBjb2x1bW5zIHByb3BlcnR5LCBpdCB3aWxsIGJlIHJlcGxhY2VkIGluIHdoZW4gY29sdW1ucyBhcmUgZXhwYW5kZWRcclxuXHRjbG9uZU9wdGlvbnMgKG9wdGlvbnMsIHBhcmVudCkge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0gdGhpcy5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTsgLy8gZG9lcyBhIHNoYWxsb3cgY29weVxyXG5cclxuXHRcdHJlc3VsdC5xdWVyeVBhcmFtcyA9IHRoaXMuY2xvbmVRdWVyeVBhcmFtcyhvcHRpb25zLnF1ZXJ5UGFyYW1zKTtcclxuXHRcdHJlc3VsdC5wYXJlbnQgPSBwYXJlbnQ7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGNsb25lUXVlcnlQYXJhbXMgKHBhcmFtZXRlcnMpIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3Qga2V5IGluIHBhcmFtZXRlcnMpIHtcclxuXHRcdFx0Y29uc3QgdmFsdWUgPSBwYXJhbWV0ZXJzW2tleV07XHJcblx0XHRcdGxldCBjbG9uZTtcclxuXHJcblx0XHRcdGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSlcclxuXHRcdFx0XHRjbG9uZSA9IHZhbHVlLnNsaWNlKCk7IC8vIHdlJ3JlIG9ubHkgdXNpbmcgcHJpbWl0aXZlIGFycmF5c1xyXG5cdFx0XHRlbHNlIGlmIChtb21lbnQuaXNNb21lbnQodmFsdWUpKVxyXG5cdFx0XHRcdGNsb25lID0gdmFsdWUuY2xvbmUoKTtcclxuXHRcdFx0ZWxzZVxyXG5cdFx0XHRcdGNsb25lID0gdmFsdWU7XHJcblxyXG5cdFx0XHRyZXN1bHRba2V5XSA9IGNsb25lO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzT3B0aW9ucyAob3B0aW9ucykge1xyXG5cdFx0cmV0dXJuIHNoYWxsb3dNZXJnZShcclxuXHRcdFx0b3B0aW9ucyxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGNvbHVtbnM6IFtdLFxyXG5cdFx0XHRcdHF1ZXJ5OiBudWxsLFxyXG5cdFx0XHRcdHF1ZXJ5SXRlbVR5cGU6IG51bGwsXHJcblx0XHRcdFx0cXVlcnlQYXJhbXM6IHt9LFxyXG5cdFx0XHRcdHBhcmVudDogbnVsbCxcclxuXHRcdFx0XHRkZWZlclJlcXVlc3Q6IGZhbHNlLFxyXG5cdFx0XHRcdGxpbWl0OiBudWxsLFxyXG5cdFx0XHRcdGVudHJ5S2V5OiAnJ1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlUXVlcnkgKG9wdGlvbnMpIHtcclxuXHRcdGNvbnN0IHBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xyXG5cclxuXHRcdGxldCBxdWVyeTtcclxuXHJcblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxyXG5cdFx0XHRxdWVyeSA9IG9wdGlvbnMucXVlcnk7XHJcblx0XHRlbHNlIHtcclxuXHRcdFx0Y29uc3QgbGlua2VkVG9RdWVyeSA9IHtsaW5rZWRUbzogcGFyZW50Lml0ZW1UeXBlLCBxdWVyeToge2lkOiAnJnBhcmVudElkJ319O1xyXG5cdFx0XHRvcHRpb25zLnF1ZXJ5UGFyYW1zLnBhcmVudElkID0gcGFyZW50Lml0ZW1JZDtcclxuXHJcblx0XHRcdHF1ZXJ5ID0gb3B0aW9ucy5xdWVyeSA9PT0gbnVsbCA/XHJcblx0XHRcdFx0bGlua2VkVG9RdWVyeSA6XHJcblx0XHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UuYWRkQW5kQ29uZGl0aW9uKG9wdGlvbnMucXVlcnksIGxpbmtlZFRvUXVlcnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHBhcnNlZFF1ZXJ5ID0gdGhpcy5xdWVyeVBhcnNlckZhY3RvcnkuY29uc3RydWN0KHF1ZXJ5LCBvcHRpb25zLnF1ZXJ5UGFyYW1zKS5wYXJzZSgpO1xyXG5cclxuXHRcdHJldHVybiB7b2JqZWN0OiBwYXJzZWRRdWVyeVswXSwgc3RyaW5nOiBwYXJzZWRRdWVyeVsxXX07XHJcblx0fVxyXG5cclxuXHRnZXRJZEFycmF5IChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGFjY3VtdWxhdG9yKTogSXRlbUlkW10ge1xyXG5cdFx0aWYgKGFjY3VtdWxhdG9yID09PSB1bmRlZmluZWQpXHJcblx0XHRcdGFjY3VtdWxhdG9yID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXHJcblx0XHRcdGFjY3VtdWxhdG9yLnB1c2goaXRlbUVudHJ5Lml0ZW1JZCk7XHJcblxyXG5cdFx0cmV0dXJuIGFjY3VtdWxhdG9yO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQHBhcmFtIHtJdGVtRW50cnlbXX0gaXRlbUVudHJpZXNcclxuXHQgKiBAcGFyYW0geyhpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gYm9vbGVhbn0gY2FsbGJhY2tcclxuXHQgKiBAcmV0dXJucyB7SXRlbUVudHJ5W119XHJcblx0ICpcclxuXHQgKiBmaWx0ZXIgYW4gYXJyYXkgYWNjb3JkaW5nIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbi4gUmV0dXJuIHRoZSBlbnRyaWVzIHRoYXQgZmFpbGVkIHRoZSBjb25kaXRpb25cclxuXHQgKiBSZXBsYWNlIHRoZSBnaXZlbiBhcnJheSB3aXRoIHRoZSBlbnRyaWVzIHRoYXQgZGlkbid0IGZhaWwgdGhlIGNvbmRpdGlvbi5cclxuXHQgKi9cclxuXHRmaWx0ZXJBcnJheSAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCBjYWxsYmFjazogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBib29sZWFuKSB7XHJcblx0XHRjb25zdCBmaWx0ZXJlZEVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XHJcblx0XHRjb25zdCByZW1vdmVkRW50cmllczogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcclxuXHRcdFx0KGNhbGxiYWNrKGl0ZW1FbnRyeSkgPyBmaWx0ZXJlZEVudHJpZXMgOiByZW1vdmVkRW50cmllcykucHVzaChpdGVtRW50cnkpO1xyXG5cclxuXHRcdGlmIChyZW1vdmVkRW50cmllcy5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiByZW1vdmVkRW50cmllcztcclxuXHJcblx0XHRpdGVtRW50cmllcy5sZW5ndGggPSBmaWx0ZXJlZEVudHJpZXMubGVuZ3RoO1xyXG5cclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbUVudHJpZXMubGVuZ3RoOyBpKyspXHJcblx0XHRcdGl0ZW1FbnRyaWVzW2ldID0gZmlsdGVyZWRFbnRyaWVzW2ldO1xyXG5cclxuXHRcdHJldHVybiByZW1vdmVkRW50cmllcztcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgaWRlbnRpdHksIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi8nO1xyXG5pbXBvcnQge1xyXG5cdEJhdGNoU3RhdHVzLFxyXG5cdENvbGxlY3Rpb25DYWNoZSxcclxuXHRDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxyXG5cdENvbGxlY3Rpb25NYXRjaGVyLFxyXG5cdENvbHVtbkV4cGFuc2lvbixcclxuXHRDb2x1bW5IYW5kbGVyLFxyXG5cdENvbHVtblNldCxcclxuXHRJdGVtQ2FjaGUsXHJcblx0SXRlbUhhbmRsZXIsXHJcblx0SXRlbVJlcXVlc3RTZXJ2aWNlLFxyXG5cdEtleVNlcnZpY2UsXHJcblx0UXVlcnlTZXJ2aWNlXHJcbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEVOVFJZX1NUQVRVUyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7XHJcblx0QmF0Y2hTdGF0dXNGYWN0b3J5LFxyXG5cdENvbGxlY3Rpb25DYWNoZUZhY3RvcnksXHJcblx0Q29sbGVjdGlvbkVudHJ5RmFjdG9yeSxcclxuXHRDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksXHJcblx0Q29sdW1uU2V0RmFjdG9yeSxcclxuXHRRdWVyeVBhcnNlckZhY3RvcnlcclxufSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgQ29sbGVjdGlvblJlc291cmNlLCBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7XHJcblx0QXBpUmVxdWVzdENvbHVtbixcclxuXHRDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCxcclxuXHRFbnRyeVBhcmVudCxcclxuXHRFbnRyeVN0YXR1cyxcclxuXHRJdGVtRW50cnlQYXJlbnRJZE1hcCxcclxuXHRJdGVtSWQsXHJcblx0SXRlbVJlc291cmNlSXRlbUlkTWFwLFxyXG5cdEl0ZW1UeXBlXHJcbn0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgaGFzUHJvcGVydGllcyB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkhhbmRsZXIge1xyXG5cdGVudHJpZXM6IENvbGxlY3Rpb25DYWNoZTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBiYXRjaFN0YXR1c0ZhY3Rvcnk6IEJhdGNoU3RhdHVzRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlRmFjdG9yeTogQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkVudHJ5RmFjdG9yeTogQ29sbGVjdGlvbkVudHJ5RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkVudHJ5U2VydmljZTogQ29sbGVjdGlvbkVudHJ5U2VydmljZSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5OiBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXHJcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGl0ZW1SZXF1ZXN0U2VydmljZTogSXRlbVJlcXVlc3RTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIHF1ZXJ5UGFyc2VyRmFjdG9yeTogUXVlcnlQYXJzZXJGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZVxyXG5cdCkge1xyXG5cdFx0dGhpcy5lbnRyaWVzID0gdGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQGRlcHJlY2F0ZWQsIHVzZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnlcclxuXHQgKi9cclxuXHRyZW1vdmVGcm9tQW5kQWRkVG9Db2xsZWN0aW9ucyAoY29sbGVjdGlvbk1hcCwgdXBkYXRlSW5pdGlhbD8pIHtcclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIGNvbGxlY3Rpb25NYXApIHtcclxuXHRcdFx0Y29uc3QgZW50cnkgPSBjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF07XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb246IENvbGxlY3Rpb25FbnRyeSA9IGVudHJ5LmNvbGxlY3Rpb247XHJcblxyXG5cdFx0XHRjb2xsZWN0aW9uLnJlbW92ZUl0ZW1zKGVudHJ5Lm5vdGZpdHRpbmcsIG51bGwsIHRydWUpO1xyXG5cdFx0XHRjb2xsZWN0aW9uLmFkZEl0ZW1zKGVudHJ5LmZpdHRpbmcsIG51bGwsIHRydWUpOyAvLyBkb2Vzbid0IGRvIGFueXRoaW5nIHdpdGggaW5pdGlhbFxyXG5cclxuXHRcdFx0aWYgKGVudHJ5Lm1heWJlLmxlbmd0aCA+IDApXHJcblx0XHRcdFx0Y29sbGVjdGlvbi5leHRlbmQoaWRlbnRpdHksIG51bGwsIHRydWUsIHVwZGF0ZUluaXRpYWwpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Z2V0Q29sbGVjdGlvbk1hdGNoZXIgKCk6IENvbGxlY3Rpb25NYXRjaGVyIHtcclxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QoW3RoaXMuZW50cmllc10sIHRydWUsIHRydWUpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQGRlcHJlY2F0ZWQsIHVzZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnlcclxuXHQgKi9cclxuXHRyZW1vdmVGcm9tQ29sbGVjdGlvbnMgKGNvbGxlY3Rpb25NYXAsIHVwZGF0ZUluaXRpYWw/LCByZXN1bHRSZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlIHwgbnVsbCA9IG51bGwpIHtcclxuXHRcdGxldCByZXN1bHQ7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gY29sbGVjdGlvbk1hcCkge1xyXG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXTtcclxuXHRcdFx0Y29uc3QgZml0dGluZyA9IG1hcEVudHJ5LmZpdHRpbmc7XHJcblx0XHRcdGNvbnN0IG1heWJlID0gbWFwRW50cnkubWF5YmU7XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5ID0gbWFwRW50cnkuY29sbGVjdGlvbjtcclxuXHRcdFx0Y29uc3QgaWRBcnJheTogSXRlbUlkW10gPSBbXTtcclxuXHJcblx0XHRcdGZvciAoY29uc3QgZml0dGluZ0l0ZW0gb2YgZml0dGluZylcclxuXHRcdFx0XHRpZEFycmF5LnB1c2goZml0dGluZ0l0ZW0uaXRlbUlkKTtcclxuXHJcblx0XHRcdGZvciAoY29uc3QgbWF5YmVJdGVtIG9mIG1heWJlKVxyXG5cdFx0XHRcdGlkQXJyYXkucHVzaChtYXliZUl0ZW0pO1xyXG5cclxuXHRcdFx0aWYgKHJlc3VsdFJlc291cmNlICE9PSBudWxsICYmIGNvbGxlY3Rpb25FbnRyeSA9PT0gcmVzdWx0UmVzb3VyY2UuZW50cnkpXHJcblx0XHRcdFx0cmVzdWx0ID0gY29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGlkQXJyYXksIHJlc3VsdFJlc291cmNlLCB1cGRhdGVJbml0aWFsKTtcclxuXHRcdFx0ZWxzZVxyXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5yZW1vdmVJdGVtcyhpZEFycmF5LCBudWxsLCB1cGRhdGVJbml0aWFsKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Ly8gVE9ETzogbWF5YmUsIGJvb2xlYW4gaW5zdGVhZCBvZiBtZXNzYWdlXHJcblx0LyoqXHJcblx0ICogQGRlcHJlY2F0ZWQsIHVzZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnlcclxuXHQgKi9cclxuXHRhZGRUb0NvbGxlY3Rpb25zIChjb2xsZWN0aW9uTWFwLCB1cGRhdGVJbml0aWFsOiBib29sZWFuLCByZXN1bHRSZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlIHwgbnVsbCA9IG51bGwpOiBJdGVtUmVzb3VyY2VbXSB7XHJcblx0XHRsZXQgcmVzdWx0O1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIGNvbGxlY3Rpb25NYXApIHtcclxuXHRcdFx0Y29uc3QgbWFwRW50cnkgPSBjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF07XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IG1hcEVudHJ5LmNvbGxlY3Rpb247XHJcblxyXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LmlzRGVmZXJyZWQoKSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGlmIChyZXN1bHRSZXNvdXJjZSAhPT0gbnVsbCAmJiBjb2xsZWN0aW9uRW50cnkgPT09IHJlc3VsdFJlc291cmNlLmVudHJ5KVxyXG5cdFx0XHRcdHJlc3VsdCA9IGNvbGxlY3Rpb25FbnRyeS5hZGRJdGVtcyhtYXBFbnRyeS5maXR0aW5nLCByZXN1bHRSZXNvdXJjZSwgdXBkYXRlSW5pdGlhbCk7XHJcblx0XHRcdGVsc2VcclxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuYWRkSXRlbXMobWFwRW50cnkuZml0dGluZywgbnVsbCwgdXBkYXRlSW5pdGlhbCk7XHJcblxyXG5cdFx0XHRpZiAodXBkYXRlSW5pdGlhbCAmJiBtYXBFbnRyeS5tYXliZS5sZW5ndGggPiAwKVxyXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5leHRlbmQoaWRlbnRpdHksIG51bGwsIHRydWUsIHVwZGF0ZUluaXRpYWwpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRiYXRjaEV4cGFuZCAoXHJcblx0XHRwYXJlbnRUeXBlOiBJdGVtVHlwZSxcclxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VbXSxcclxuXHRcdG5ld0NvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5bXVxyXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvblJlc291cmNlW10+IHtcclxuXHRcdGlmIChuZXdDb2x1bW5zLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihjb2xsZWN0aW9ucyk7XHJcblxyXG5cdFx0Y29uc3QgcGFyZW50SWRBcnJheTogSXRlbUlkW10gPSBbXTtcclxuXHRcdGxldCBpdGVtRW50cmllczogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHQvLyBUT0RPOiBmaWx0ZXIgbG9jYWwgaXRlbXM/XHJcblxyXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBjb2xsZWN0aW9ucykge1xyXG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBjb2xsZWN0aW9uc1twYXJlbnRJZF0uZW50cnk7XHJcblxyXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuZGVmZXIoKTtcclxuXHJcblx0XHRcdHBhcmVudElkQXJyYXkucHVzaCgoPEVudHJ5UGFyZW50PiBjb2xsZWN0aW9uRW50cnkucGFyZW50KS5pdGVtSWQpO1xyXG5cdFx0XHRpdGVtRW50cmllcyA9IGl0ZW1FbnRyaWVzLmNvbmNhdChjb2xsZWN0aW9uRW50cnkuaXRlbXMpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5yZXF1ZXN0TGlua0l0ZW1zKFxyXG5cdFx0XHRwYXJlbnRUeXBlLFxyXG5cdFx0XHRwYXJlbnRJZEFycmF5LFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0bnVsbCxcclxuXHRcdFx0bmV3Q29sdW1uc1xyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHRyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc0V4cGFuc2lvbihcclxuXHRcdFx0XHRcdG5ld0NvbHVtbnMsXHJcblx0XHRcdFx0XHRyZXNwb25zZSxcclxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0aXRlbUVudHJpZXNcclxuXHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIG9mIHBhcmVudElkQXJyYXkpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGNvbGxlY3Rpb25zW3BhcmVudElkXS5lbnRyeTtcclxuXHJcblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuZXhwYW5kQ29sdW1ucyhjb2x1bW5FeHBhbnNpb24pO1xyXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5Ll9yZXNvbHZlKCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXR1cm4gY29sbGVjdGlvbnM7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRiYXRjaEV4dGVuZCAoXHJcblx0XHRwYXJlbnRUeXBlOiBzdHJpbmcsXHJcblx0XHRpdGVtVHlwZTogc3RyaW5nLFxyXG5cdFx0b3B0aW9ucyxcclxuXHRcdHF1ZXJ5Q2FsbGJhY2ssXHJcblx0XHRjb2xsZWN0aW9uczogQ29sbGVjdGlvblJlc291cmNlW10sXHJcblx0XHRyZXR1cm5BbGxJdGVtcyA9IGZhbHNlXHJcblx0KTogUHJvbWlzZUludGVyZmFjZTxJdGVtUmVzb3VyY2VJdGVtSWRNYXA+IHtcclxuXHRcdGlmICghaGFzUHJvcGVydGllcyhjb2xsZWN0aW9ucykpXHJcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oe30pO1xyXG5cclxuXHRcdGNvbnN0IHBhcmVudElkQXJyYXk6IEl0ZW1JZFtdID0gW107XHJcblx0XHRsZXQgaXRlbUlkQXJyYXk6IEl0ZW1JZFtdID0gW107XHJcblxyXG5cdFx0b3B0aW9ucy5xdWVyeVBhcmFtcyA9IHF1ZXJ5Q2FsbGJhY2sob3B0aW9ucy5xdWVyeVBhcmFtcyk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBjb2xsZWN0aW9ucykge1xyXG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBjb2xsZWN0aW9uc1twYXJlbnRJZF0uZW50cnk7XHJcblxyXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuZXh0ZW5kUXVlcnkocXVlcnlDYWxsYmFjayk7XHJcblx0XHRcdHBhcmVudElkQXJyYXkucHVzaCgoPEVudHJ5UGFyZW50PiBjb2xsZWN0aW9uRW50cnkucGFyZW50KS5pdGVtSWQpO1xyXG5cclxuXHRcdFx0aXRlbUlkQXJyYXkgPSBpdGVtSWRBcnJheS5jb25jYXQoY29sbGVjdGlvbkVudHJ5LmdldElkQXJyYXkoKSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RMaW5rSXRlbXMoXHJcblx0XHRcdHBhcmVudFR5cGUsXHJcblx0XHRcdHBhcmVudElkQXJyYXksXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5hZGRBbmRDb25kaXRpb24oXHJcblx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNyZWF0ZVF1ZXJ5KG9wdGlvbnMpLm9iamVjdCxcclxuXHRcdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5jcmVhdGVOb3RJbihpdGVtSWRBcnJheSlcclxuXHRcdFx0KSxcclxuXHRcdFx0b3B0aW9ucy5jb2x1bW5zXHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc0xpbmtSZXNwb25zZShcclxuXHRcdFx0XHRcdHJlc3BvbnNlLFxyXG5cdFx0XHRcdFx0cGFyZW50VHlwZSxcclxuXHRcdFx0XHRcdHBhcmVudElkQXJyYXksXHJcblx0XHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHRcdG9wdGlvbnNcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCkudGhlbihcclxuXHRcdFx0aXRlbUVudHJ5UmVzb3VyY2UgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIG9mIHBhcmVudElkQXJyYXkpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZSA9IGNvbGxlY3Rpb25zW3BhcmVudElkXTtcclxuXHRcdFx0XHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSBjb2xsZWN0aW9uUmVzb3VyY2UuZW50cnkuYWRkSXRlbXMoIC8vIHNob3VsZCBnbyBmaXJzdFxyXG5cdFx0XHRcdFx0XHRpdGVtRW50cnlSZXNvdXJjZS5pdGVtc1twYXJlbnRJZF0sXHJcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZVxyXG5cdFx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gcmV0dXJuQWxsSXRlbXMgPyBjb2xsZWN0aW9uUmVzb3VyY2UuaXRlbXMgOiBpdGVtUmVzb3VyY2VzO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0YmF0Y2hGZXRjaCAoXHJcblx0XHRwYXJlbnRUeXBlOiBJdGVtVHlwZSxcclxuXHRcdHBhcmVudElkQXJyYXk6IEl0ZW1JZFtdLFxyXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0b3B0aW9ucyxcclxuXHRcdGl0ZW1DYWNoZTogSXRlbUNhY2hlLFxyXG5cdFx0bG9jYWxDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZSxcclxuXHRcdGRlZmVycmVkQ29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGVcclxuXHQpOiBQcm9taXNlPENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwPiB7XHJcblx0XHRjb25zdCBlcnJvckhhbmRsZXIgPSB0aGlzLmVycm9ySGFuZGxlcjtcclxuXHRcdGNvbnN0IGJhdGNoU3RhdHVzOiBCYXRjaFN0YXR1czxDb2xsZWN0aW9uRW50cnk+ID0gdGhpcy5iYXRjaFN0YXR1c0ZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkgPT4gKDxFbnRyeVBhcmVudD4gY29sbGVjdGlvbkVudHJ5LnBhcmVudCkuaXRlbUlkLFxyXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkgPT4gY29sbGVjdGlvbkVudHJ5LnByb21pc2VcclxuXHRcdCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBvZiBwYXJlbnRJZEFycmF5KSB7XHJcblx0XHRcdGJhdGNoU3RhdHVzLmFkZChcclxuXHRcdFx0XHR0aGlzLmdldEVudHJ5U3RhdHVzKFxyXG5cdFx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuY2xvbmVPcHRpb25zKG9wdGlvbnMsIHtpdGVtVHlwZTogcGFyZW50VHlwZSwgaXRlbUlkOiBwYXJlbnRJZH0pLFxyXG5cdFx0XHRcdFx0bG9jYWxDb2xsZWN0aW9uQ2FjaGUsXHJcblx0XHRcdFx0XHRkZWZlcnJlZENvbGxlY3Rpb25DYWNoZVxyXG5cdFx0XHRcdClcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwoYmF0Y2hTdGF0dXMuZ2V0UHJvbWlzZXMoKSkudGhlbihcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHJlcXVlc3RJZHMgPSBiYXRjaFN0YXR1cy5nZXRSZXF1ZXN0SWRzKCk7XHJcblx0XHRcdFx0bGV0IGl0ZW1FbnRyeUNvbXBvdW5kUHJvbWlzZTtcclxuXHRcdFx0XHRsZXQgYWRkaXRpb25hbFF1ZXJ5O1xyXG5cclxuXHRcdFx0XHRpZiAob3B0aW9ucy5xdWVyeSA9PT0gbnVsbClcclxuXHRcdFx0XHRcdGFkZGl0aW9uYWxRdWVyeSA9IG51bGw7XHJcblx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHRjb25zdCBwYXJzZWRRdWVyeSA9IHRoaXMucXVlcnlQYXJzZXJGYWN0b3J5LmNvbnN0cnVjdChvcHRpb25zLnF1ZXJ5LCBvcHRpb25zLnF1ZXJ5UGFyYW1zKS5wYXJzZSgpO1xyXG5cdFx0XHRcdFx0YWRkaXRpb25hbFF1ZXJ5ID0ge29iamVjdDogcGFyc2VkUXVlcnlbMF0sIHN0cmluZzogcGFyc2VkUXVlcnlbMV19O1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKHJlcXVlc3RJZHMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0aXRlbUVudHJ5Q29tcG91bmRQcm9taXNlID0gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdExpbmtJdGVtcyhcclxuXHRcdFx0XHRcdFx0cGFyZW50VHlwZSxcclxuXHRcdFx0XHRcdFx0cmVxdWVzdElkcyxcclxuXHRcdFx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0XHRcdGFkZGl0aW9uYWxRdWVyeSA9PT0gbnVsbCA/IG51bGwgOiBhZGRpdGlvbmFsUXVlcnkub2JqZWN0LFxyXG5cdFx0XHRcdFx0XHRvcHRpb25zLmNvbHVtbnNcclxuXHRcdFx0XHRcdCkudGhlbihcclxuXHRcdFx0XHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzTGlua1Jlc3BvbnNlKFxyXG5cdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2UsXHJcblx0XHRcdFx0XHRcdFx0XHRwYXJlbnRUeXBlLFxyXG5cdFx0XHRcdFx0XHRcdFx0cmVxdWVzdElkcyxcclxuXHRcdFx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0XHRcdFx0b3B0aW9uc1xyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdGVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fSBlbHNlIGlmIChiYXRjaFN0YXR1cy5oYXNFbnRyaWVzKFtFTlRSWV9TVEFUVVMuTE9DQUxdKSkge1xyXG5cdFx0XHRcdFx0aXRlbUVudHJ5Q29tcG91bmRQcm9taXNlID0gdGhpcy5jb2x1bW5IYW5kbGVyLmZldGNoKGl0ZW1UeXBlLCBvcHRpb25zLmNvbHVtbnMpLnRoZW4oXHJcblx0XHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1ucyA9PiB7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdFx0XHRcdGNvbHVtbnM6IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdFx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRvcHRpb25zLmNvbHVtbnMsXHJcblx0XHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1ucyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZmFsc2VcclxuXHRcdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH0gZWxzZVxyXG5cdFx0XHRcdFx0cmV0dXJuIGJhdGNoU3RhdHVzLmdldE1hcCgpO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5Q29tcG91bmRQcm9taXNlLnRoZW4oXHJcblx0XHRcdFx0XHRpdGVtRW50cnlDb21wb3VuZCA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeU1hcCA9IGl0ZW1DYWNoZS5iYXRjaEdldExvY2FsQnlQYXJlbnQoXHJcblx0XHRcdFx0XHRcdFx0cGFyZW50VHlwZSxcclxuXHRcdFx0XHRcdFx0XHRwYXJlbnRJZEFycmF5LFxyXG5cdFx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0XHRcdGFkZGl0aW9uYWxRdWVyeVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRcdFx0bGV0IGl0ZW1FbnRyeUFycmF5OiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdFx0XHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBpdGVtRW50cnlNYXApXHJcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5QXJyYXkgPSBpdGVtRW50cnlBcnJheS5jb25jYXQoaXRlbUVudHJ5TWFwW3BhcmVudElkXSk7XHJcblxyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5pdGVtSGFuZGxlci5leHBhbmRMb2NhbEVudHJpZXMoXHJcblx0XHRcdFx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5QXJyYXksXHJcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5Q29tcG91bmQuY29sdW1ucyxcclxuXHRcdFx0XHRcdFx0XHRpdGVtQ2FjaGVcclxuXHRcdFx0XHRcdFx0KS50aGVuKFxyXG5cdFx0XHRcdFx0XHRcdCgpID0+IHRoaXMuaGFuZGxlQmF0Y2hSZXNwb25zZShiYXRjaFN0YXR1cywgaXRlbUVudHJ5Q29tcG91bmQsIGl0ZW1FbnRyeU1hcCksXHJcblx0XHRcdFx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Ly8gVE9ETzogc29tZSBzdGF0dXNlcyBhcmUgbm90IHRha2VuIGludG8gYWNjb3VudFxyXG5cdGhhbmRsZUJhdGNoUmVzcG9uc2UgKFxyXG5cdFx0YmF0Y2hTdGF0dXM6IEJhdGNoU3RhdHVzPENvbGxlY3Rpb25FbnRyeT4sXHJcblx0XHRpdGVtRW50cnlDb21wb3VuZDoge1xyXG5cdFx0XHRjb2x1bW5zOiBDb2x1bW5TZXQsXHJcblx0XHRcdGNvbHVtbkV4cGFuc2lvbj86IENvbHVtbkV4cGFuc2lvbixcclxuXHRcdFx0aXRlbXM/OiBJdGVtRW50cnlQYXJlbnRJZE1hcFxyXG5cdFx0fSxcclxuXHRcdGxvY2FsSXRlbXM6IEl0ZW1FbnRyeVBhcmVudElkTWFwXHJcblx0KTogQ29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXAge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0YmF0Y2hTdGF0dXMuZm9yRWFjaEVudHJ5KFxyXG5cdFx0XHRbRU5UUllfU1RBVFVTLkNBQ0hFRF0sXHJcblx0XHRcdChjb2xsZWN0aW9uRW50cnksIHBhcmVudElkKSA9PiB7XHJcblx0XHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IGNvbGxlY3Rpb25FbnRyeTtcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHJcblx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXHJcblx0XHRcdFtFTlRSWV9TVEFUVVMuUkVTT0xWRV0sXHJcblx0XHRcdChjb2xsZWN0aW9uRW50cnksIHBhcmVudElkKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgaXRlbUVudHJpZXMgPSAoPEl0ZW1FbnRyeVBhcmVudElkTWFwPiBpdGVtRW50cnlDb21wb3VuZC5pdGVtcylbcGFyZW50SWRdO1xyXG5cclxuXHRcdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gY29sbGVjdGlvbkVudHJ5LnJlc29sdmUoXHJcblx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdGluaXRpYWw6IGl0ZW1FbnRyaWVzLFxyXG5cdFx0XHRcdFx0XHRtb2RpZmllZDogaXRlbUVudHJpZXMuY29uY2F0KGxvY2FsSXRlbXNbcGFyZW50SWRdKSxcclxuXHRcdFx0XHRcdFx0Y29sdW1uczogaXRlbUVudHJ5Q29tcG91bmQuY29sdW1uc1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblxyXG5cdFx0YmF0Y2hTdGF0dXMuZm9yRWFjaEVudHJ5KFxyXG5cdFx0XHRiYXRjaFN0YXR1cy5yZW1vdGVFeHBhbmRTdGF0dXMsXHJcblx0XHRcdChjb2xsZWN0aW9uRW50cnksIHBhcmVudElkKSA9PiB7XHJcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LmV4cGFuZENvbHVtbnMoPENvbHVtbkV4cGFuc2lvbj4gaXRlbUVudHJ5Q29tcG91bmQuY29sdW1uRXhwYW5zaW9uKTtcclxuXHRcdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gY29sbGVjdGlvbkVudHJ5Ll9yZXNvbHZlKCk7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblxyXG5cdFx0YmF0Y2hTdGF0dXMuZm9yRWFjaEVudHJ5KFxyXG5cdFx0XHRbRU5UUllfU1RBVFVTLkxPQ0FMXSxcclxuXHRcdFx0KGNvbGxlY3Rpb25FbnRyeSwgcGFyZW50SWQpID0+IHtcclxuXHRcdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gY29sbGVjdGlvbkVudHJ5LnJlc29sdmUoXHJcblx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdGluaXRpYWw6IGxvY2FsSXRlbXNbcGFyZW50SWRdLFxyXG5cdFx0XHRcdFx0XHRjb2x1bW5zOiBpdGVtRW50cnlDb21wb3VuZC5jb2x1bW5zXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0ZmV0Y2ggKFxyXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0b3B0aW9ucyxcclxuXHRcdGl0ZW1DYWNoZTogSXRlbUNhY2hlLFxyXG5cdFx0bG9jYWxDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZSxcclxuXHRcdGRlZmVycmVkQ29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGVcclxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25FbnRyeT4ge1xyXG5cdFx0Y29uc3QgZXJyb3JIYW5kbGVyID0gdGhpcy5lcnJvckhhbmRsZXI7XHJcblx0XHRjb25zdCBzdGF0dXNSZXNvdXJjZSA9IHRoaXMuZ2V0RW50cnlTdGF0dXMoaXRlbVR5cGUsIG9wdGlvbnMsIGxvY2FsQ29sbGVjdGlvbkNhY2hlLCBkZWZlcnJlZENvbGxlY3Rpb25DYWNoZSk7XHJcblx0XHRjb25zdCBlbnRyeSA9IHN0YXR1c1Jlc291cmNlLmVudHJ5O1xyXG5cclxuXHRcdHN3aXRjaCAoc3RhdHVzUmVzb3VyY2Uuc3RhdHVzKSB7XHJcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLkNBQ0hFRDpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGVudHJ5KTtcclxuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuUFJPTUlTRUQ6XHJcblx0XHRcdFx0cmV0dXJuIGVudHJ5LnByb21pc2U7XHJcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLkVYUEFORDpcclxuXHRcdFx0XHRyZXR1cm4gZW50cnkuZXhwYW5kKG9wdGlvbnMuY29sdW1ucykudGhlbihcclxuXHRcdFx0XHRcdCgpID0+IGVudHJ5Ll9yZXNvbHZlKCksXHJcblx0XHRcdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EOlxyXG5cdFx0XHRcdHJldHVybiBlbnRyeS5wcm9taXNlLnRoZW4oXHJcblx0XHRcdFx0XHQoKSA9PiBlbnRyeS5kZWZlcigpLmV4cGFuZChvcHRpb25zLmNvbHVtbnMpLFxyXG5cdFx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0XHRcdCkudGhlbihcclxuXHRcdFx0XHRcdCgpID0+IGVudHJ5Ll9yZXNvbHZlKCksXHJcblx0XHRcdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuTE9DQUw6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb2x2ZUxvY2FsKGVudHJ5LCBpdGVtQ2FjaGUpO1xyXG5cdFx0XHRkZWZhdWx0OiAvLyBjYXNlIEVOVFJZX1NUQVRVUy5SRVNPTFZFOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLnJlc29sdmVSZW1vdGUoZW50cnksIGl0ZW1DYWNoZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRnZXRDYWNoZWRFbnRyeVN0YXR1cyAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIG9wdGlvbnMpOiBFTlRSWV9TVEFUVVMge1xyXG5cdFx0aWYgKCFjb2xsZWN0aW9uRW50cnkuY29sdW1ucy5pc1N1cGVyc2V0T2Yob3B0aW9ucy5jb2x1bW5zKSkge1xyXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LmlzRGVmZXJyZWQoKSlcclxuXHRcdFx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORDtcclxuXHJcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5kZWZlcigpO1xyXG5cclxuXHRcdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5FWFBBTkQ7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0RlZmVycmVkKCkpXHJcblx0XHRcdHJldHVybiBFTlRSWV9TVEFUVVMuUFJPTUlTRUQ7XHJcblxyXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5yZWxvYWRRdWV1ZWQpIHtcclxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LnJlbG9hZFF1ZXVlZCA9IGZhbHNlO1xyXG5cclxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0xvY2FsKCkpXHJcblx0XHRcdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5DQUNIRUQ7XHJcblxyXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuZGVmZXIoKTtcclxuXHJcblx0XHRcdHJldHVybiBFTlRSWV9TVEFUVVMuUkVTT0xWRTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLkNBQ0hFRDtcclxuXHR9XHJcblxyXG5cdGdldERlZmVycmVkRW50cnlTdGF0dXMgKFxyXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0b3B0aW9ucyxcclxuXHRcdHF1ZXJ5LFxyXG5cdFx0ZGVmZXJyZWRFbnRyaWVzOiBDb2xsZWN0aW9uQ2FjaGVcclxuXHQpOiB7ZW50cnk6IENvbGxlY3Rpb25FbnRyeSwgaXNEZWZlcnJlZDogYm9vbGVhbn0ge1xyXG5cdFx0bGV0IGNvbGxlY3Rpb25FbnRyeTtcclxuXHJcblx0XHRpZiAoIW9wdGlvbnMuZGVmZXJSZXF1ZXN0KSB7XHJcblx0XHRcdGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuY29sbGVjdGlvbkVudHJ5RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIG9wdGlvbnMpO1xyXG5cclxuXHRcdFx0cmV0dXJuIHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBpc0RlZmVycmVkOiBmYWxzZX07XHJcblx0XHR9XHJcblxyXG5cdFx0Y29sbGVjdGlvbkVudHJ5ID0gZGVmZXJyZWRFbnRyaWVzLmdldEJ5UXVlcnkoaXRlbVR5cGUsIHF1ZXJ5KTtcclxuXHJcblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ICE9PSBudWxsKSB7XHJcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5leHBhbmRSZXF1ZXN0Q29sdW1ucyhvcHRpb25zLmNvbHVtbnMpO1xyXG5cclxuXHRcdFx0cmV0dXJuIHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBpc0RlZmVycmVkOiBmYWxzZX07XHJcblx0XHR9XHJcblxyXG5cdFx0Y29sbGVjdGlvbkVudHJ5ID0gdGhpcy5jb2xsZWN0aW9uRW50cnlGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucyk7XHJcblxyXG5cdFx0cmV0dXJuIHtlbnRyeTogZGVmZXJyZWRFbnRyaWVzLmFkZChjb2xsZWN0aW9uRW50cnkpLCBpc0RlZmVycmVkOiB0cnVlfTtcclxuXHR9XHJcblxyXG5cdGdldEVudHJ5U3RhdHVzIChcclxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdG9wdGlvbnMsXHJcblx0XHRsb2NhbEVudHJpZXM6IENvbGxlY3Rpb25DYWNoZSxcclxuXHRcdGRlZmVycmVkRW50cmllczogQ29sbGVjdGlvbkNhY2hlXHJcblx0KTogRW50cnlTdGF0dXM8Q29sbGVjdGlvbkVudHJ5PiB7XHJcblx0XHRjb25zdCBxdWVyeSA9IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jcmVhdGVRdWVyeShvcHRpb25zKTtcclxuXHRcdGxldCBjb2xsZWN0aW9uRW50cnk7XHJcblx0XHRsZXQgaXNEZWZlcnJlZDtcclxuXHJcblx0XHRpZiAodGhpcy5pc0xvY2FsKG9wdGlvbnMpKSB7XHJcblx0XHRcdGNvbGxlY3Rpb25FbnRyeSA9IGxvY2FsRW50cmllcy5nZXRCeVF1ZXJ5KGl0ZW1UeXBlLCBxdWVyeSk7XHJcblxyXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ICE9PSBudWxsKVxyXG5cdFx0XHRcdHJldHVybiB7ZW50cnk6IGNvbGxlY3Rpb25FbnRyeSwgc3RhdHVzOiB0aGlzLmdldENhY2hlZEVudHJ5U3RhdHVzKGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucyl9O1xyXG5cclxuXHRcdFx0KHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBpc0RlZmVycmVkfSA9IHRoaXMuZ2V0RGVmZXJyZWRFbnRyeVN0YXR1cyhcclxuXHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHRvcHRpb25zLFxyXG5cdFx0XHRcdHF1ZXJ5LFxyXG5cdFx0XHRcdGRlZmVycmVkRW50cmllc1xyXG5cdFx0XHQpKTtcclxuXHJcblx0XHRcdGlmIChpc0RlZmVycmVkKVxyXG5cdFx0XHRcdHJldHVybiB7ZW50cnk6IGNvbGxlY3Rpb25FbnRyeSwgc3RhdHVzOiBFTlRSWV9TVEFUVVMuUFJPTUlTRUR9O1xyXG5cclxuXHRcdFx0Ly8gbmV3IGxvY2FsIGVudHJ5IGNyZWF0ZWQsIHNob3VsZCBiZSBhZGRlZCB0byBsb2NhbCBjYWNoZSBvbmx5XHJcblx0XHRcdHJldHVybiB7ZW50cnk6IGxvY2FsRW50cmllcy5hZGQoY29sbGVjdGlvbkVudHJ5KSwgc3RhdHVzOiBFTlRSWV9TVEFUVVMuTE9DQUx9O1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuZW50cmllcy5nZXRCeVF1ZXJ5KGl0ZW1UeXBlLCBxdWVyeSk7XHJcblxyXG5cdFx0Ly8gZW50cnkgYWxyZWFkeSBleGlzdHMgaW4gZ2xvYmFsIGNhY2hlLCBhZGQgdG8gbG9jYWwgY2FjaGVcclxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkgIT09IG51bGwpXHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0ZW50cnk6IGxvY2FsRW50cmllcy5hZGQoY29sbGVjdGlvbkVudHJ5KSxcclxuXHRcdFx0XHRzdGF0dXM6IHRoaXMuZ2V0Q2FjaGVkRW50cnlTdGF0dXMoY29sbGVjdGlvbkVudHJ5LCBvcHRpb25zKVxyXG5cdFx0XHR9O1xyXG5cclxuXHRcdCh7ZW50cnk6IGNvbGxlY3Rpb25FbnRyeSwgaXNEZWZlcnJlZH0gPSB0aGlzLmdldERlZmVycmVkRW50cnlTdGF0dXMoaXRlbVR5cGUsIG9wdGlvbnMsIHF1ZXJ5LCBkZWZlcnJlZEVudHJpZXMpKTtcclxuXHJcblx0XHRpZiAoaXNEZWZlcnJlZClcclxuXHRcdFx0cmV0dXJuIHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBzdGF0dXM6IEVOVFJZX1NUQVRVUy5QUk9NSVNFRH07XHJcblxyXG5cdFx0Ly8gbmV3IGdsb2JhbCBlbnRyeSBjcmVhdGVkLCBhZGQgdG8gYm90aCBsb2NhbCBhbmQgZ2xvYmFsIGNhY2hlXHJcblx0XHRsb2NhbEVudHJpZXMuYWRkKGNvbGxlY3Rpb25FbnRyeSk7XHJcblx0XHR0aGlzLmVudHJpZXMuYWRkKGNvbGxlY3Rpb25FbnRyeSk7XHJcblxyXG5cdFx0cmV0dXJuIHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBzdGF0dXM6IEVOVFJZX1NUQVRVUy5SRVNPTFZFfTtcclxuXHR9XHJcblxyXG5cdHJlc29sdmVMb2NhbCAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIGl0ZW1DYWNoZTogSXRlbUNhY2hlKTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uRW50cnk+IHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlO1xyXG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSBjb2xsZWN0aW9uRW50cnkub3B0aW9ucy5jb2x1bW5zO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmNvbHVtbkhhbmRsZXIuZmV0Y2goaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zKS50aGVuKFxyXG5cdFx0XHRyZXNwb25zZUNvbHVtbnMgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGNvbHVtblNldCA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMsIGZhbHNlKTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZXhwYW5kTG9jYWxFbnRyaWVzKFxyXG5cdFx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0XHRpdGVtQ2FjaGUuZ2V0TG9jYWxCeVF1ZXJ5KGl0ZW1UeXBlLCBjb2xsZWN0aW9uRW50cnkucXVlcnkpLFxyXG5cdFx0XHRcdFx0Y29sdW1uU2V0LFxyXG5cdFx0XHRcdFx0aXRlbUNhY2hlXHJcblx0XHRcdFx0KS50aGVuKFxyXG5cdFx0XHRcdFx0bG9jYWxFbnRyaWVzID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25FbnRyeS5yZXNvbHZlKHtpbml0aWFsOiBsb2NhbEVudHJpZXMsIGNvbHVtbnM6IGNvbHVtblNldH0pO1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHJlc29sdmVSZW1vdGUgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LCBpdGVtQ2FjaGU6IEl0ZW1DYWNoZSk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvbkVudHJ5PiB7XHJcblx0XHRjb25zdCBlcnJvckhhbmRsZXIgPSB0aGlzLmVycm9ySGFuZGxlcjtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlO1xyXG5cclxuXHRcdGxldCBjb2x1bW5TZXQ7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RJdGVtcyhjb2xsZWN0aW9uRW50cnkpLnRoZW4oXHJcblx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRjb2x1bW5TZXQgPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cnkub3B0aW9ucy5jb2x1bW5zLFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KClcclxuXHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc1Jlc3BvbnNlKFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UsXHJcblx0XHRcdFx0XHRyZXNwb25zZS5saW5rc1tpdGVtVHlwZV0sXHJcblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cnkucGFyZW50LFxyXG5cdFx0XHRcdFx0Y29sdW1uU2V0XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHRyZW1vdGVFbnRyaWVzID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5pdGVtSGFuZGxlci5leHBhbmRMb2NhbEVudHJpZXMoXHJcblx0XHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHRcdGl0ZW1DYWNoZS5nZXRMb2NhbEJ5UXVlcnkoaXRlbVR5cGUsIGNvbGxlY3Rpb25FbnRyeS5xdWVyeSksXHJcblx0XHRcdFx0XHRjb2x1bW5TZXQsXHJcblx0XHRcdFx0XHRpdGVtQ2FjaGVcclxuXHRcdFx0XHQpLnRoZW4oXHJcblx0XHRcdFx0XHRsb2NhbEVudHJpZXMgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gY29sbGVjdGlvbkVudHJ5LnJlc29sdmUoXHJcblx0XHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdFx0aW5pdGlhbDogcmVtb3RlRW50cmllcyxcclxuXHRcdFx0XHRcdFx0XHRcdG1vZGlmaWVkOiByZW1vdGVFbnRyaWVzLmNvbmNhdChsb2NhbEVudHJpZXMpLFxyXG5cdFx0XHRcdFx0XHRcdFx0Y29sdW1uczogY29sdW1uU2V0XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0aXNMb2NhbCAob3B0aW9ucykge1xyXG5cdFx0Y29uc3QgcGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XHJcblxyXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudC5pdGVtSWQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBpZGVudGl0eSwgSXRlbUlkIH0gZnJvbSAnLi4vJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IFF1ZXJ5TWF0Y2hlckZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMvJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uTWF0Y2hlciB7XHJcblx0bWFwOiB7XHJcblx0XHRbY29sbGVjdGlvbkVudHJ5SWQ6IG51bWJlcl06IHtcclxuXHRcdFx0Y29sbGVjdGlvbjogQ29sbGVjdGlvbkVudHJ5XHJcblx0XHRcdG1hdGNoZXM6IHtcclxuXHRcdFx0XHRbaXRlbUlkOiBudW1iZXJdOiB7aXRlbTogSXRlbUVudHJ5LCBpc01hdGNoOiBib29sZWFufVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fSA9IHt9O1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25DYWNoZXM6IENvbGxlY3Rpb25DYWNoZVtdLFxyXG5cdFx0cHJpdmF0ZSB1cGRhdGVJbml0aWFsOiBib29sZWFuLFxyXG5cdFx0cHJpdmF0ZSBjYWxsT25BY3RpdmF0ZTogYm9vbGVhblxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdGV4cGFuZCAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcclxuXHRcdGNvbnN0IHF1ZXJ5TWF0Y2hlciA9IHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdGl0ZW1FbnRyeS5pdGVtVHlwZSxcclxuXHRcdFx0aXRlbUVudHJ5LmdldEZpZWxkcygpLFxyXG5cdFx0XHRpdGVtRW50cnkucGFyZW50XHJcblx0XHQpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLl9leHBhbmQoXHJcblx0XHRcdGl0ZW1FbnRyeSxcclxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5ID0+IHF1ZXJ5TWF0Y2hlci5tYXRjaFF1ZXJ5KGNvbGxlY3Rpb25FbnRyeS5xdWVyeS5vYmplY3QpXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBfZXhwYW5kIChcclxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5LFxyXG5cdFx0bWF0Y2hGdW5jdGlvbjogKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiBib29sZWFuIHwgc3RyaW5nXHJcblx0KTogdGhpcyB7XHJcblx0XHRjb25zdCBtYXAgPSB0aGlzLm1hcDtcclxuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uQ2FjaGUgb2YgdGhpcy5jb2xsZWN0aW9uQ2FjaGVzKSB7XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyaWVzID0gY29sbGVjdGlvbkNhY2hlLmdldEJ5SXRlbVR5cGUoaXRlbUVudHJ5Lml0ZW1UeXBlKTtcclxuXHJcblx0XHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIGNvbGxlY3Rpb25FbnRyaWVzKSB7XHJcblx0XHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5SWQgPSBjb2xsZWN0aW9uRW50cnkuaWQ7XHJcblx0XHRcdFx0bGV0IG1hdGNoZXM7XHJcblxyXG5cdFx0XHRcdGlmIChtYXBbY29sbGVjdGlvbkVudHJ5SWRdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRtYXBbY29sbGVjdGlvbkVudHJ5SWRdID0ge2NvbGxlY3Rpb246IGNvbGxlY3Rpb25FbnRyeSwgbWF0Y2hlczoge319O1xyXG5cclxuXHRcdFx0XHRtYXRjaGVzID0gbWFwW2NvbGxlY3Rpb25FbnRyeUlkXS5tYXRjaGVzO1xyXG5cclxuXHRcdFx0XHRpZiAobWF0Y2hlc1tpdGVtSWRdICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdFx0bWF0Y2hlc1tpdGVtSWRdID0ge2l0ZW06IGl0ZW1FbnRyeSwgaXNNYXRjaDogbWF0Y2hGdW5jdGlvbihjb2xsZWN0aW9uRW50cnkpfTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0Z2V0Q29sbGVjdGlvbnNXaXRoRml0dGluZ0l0ZW1zICgpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogQ29sbGVjdGlvbkVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiB0aGlzLm1hcCkge1xyXG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IHRoaXMubWFwW2NvbGxlY3Rpb25JZF07XHJcblxyXG5cdFx0XHRpZiAodGhpcy5oYXNGaXR0aW5nSXRlbXMobWFwRW50cnkubWF0Y2hlcykpXHJcblx0XHRcdFx0cmVzdWx0LnB1c2gobWFwRW50cnkuY29sbGVjdGlvbik7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGFkZFRvQ29sbGVjdGlvbnMgKHJlc3VsdFJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsID0gbnVsbCkge1xyXG5cdFx0bGV0IHJlc3VsdDogSXRlbVJlc291cmNlW10gfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiB0aGlzLm1hcCkge1xyXG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IHRoaXMubWFwW2NvbGxlY3Rpb25JZF07XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IG1hcEVudHJ5LmNvbGxlY3Rpb247XHJcblx0XHRcdGNvbnN0IGdyb3VwZWRJdGVtRW50cmllcyA9IHRoaXMuZ3JvdXBJdGVtRW50cmllcyhtYXBFbnRyeS5tYXRjaGVzKTtcclxuXHRcdFx0Y29uc3QgZml0dGluZ0l0ZW1FbnRyaWVzID0gZ3JvdXBlZEl0ZW1FbnRyaWVzLmZpdHRpbmc7XHJcblxyXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LmlzRGVmZXJyZWQoKSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGlmIChyZXN1bHRSZXNvdXJjZSAhPT0gbnVsbCAmJiBjb2xsZWN0aW9uRW50cnkgPT09IHJlc3VsdFJlc291cmNlLmVudHJ5KSB7XHJcblx0XHRcdFx0cmVzdWx0ID0gY29sbGVjdGlvbkVudHJ5LmFkZEl0ZW1zKFxyXG5cdFx0XHRcdFx0Zml0dGluZ0l0ZW1FbnRyaWVzLFxyXG5cdFx0XHRcdFx0cmVzdWx0UmVzb3VyY2UsXHJcblx0XHRcdFx0XHR0aGlzLnVwZGF0ZUluaXRpYWwsXHJcblx0XHRcdFx0XHR0cnVlLFxyXG5cdFx0XHRcdFx0dGhpcy5jYWxsT25BY3RpdmF0ZVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LmFkZEl0ZW1zKFxyXG5cdFx0XHRcdFx0Zml0dGluZ0l0ZW1FbnRyaWVzLFxyXG5cdFx0XHRcdFx0bnVsbCxcclxuXHRcdFx0XHRcdHRoaXMudXBkYXRlSW5pdGlhbCxcclxuXHRcdFx0XHRcdHRydWUsXHJcblx0XHRcdFx0XHR0aGlzLmNhbGxPbkFjdGl2YXRlXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKHRoaXMudXBkYXRlSW5pdGlhbCAmJiBncm91cGVkSXRlbUVudHJpZXMubWF5YmUubGVuZ3RoID4gMClcclxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuZXh0ZW5kKGlkZW50aXR5LCBudWxsLCB0cnVlLCB0aGlzLnVwZGF0ZUluaXRpYWwpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRyZW1vdmVGcm9tQ29sbGVjdGlvbnMgKHJlc3VsdFJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsID0gbnVsbCkge1xyXG5cdFx0bGV0IHJlc3VsdDogSXRlbVJlc291cmNlW10gfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiB0aGlzLm1hcCkge1xyXG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IHRoaXMubWFwW2NvbGxlY3Rpb25JZF07XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IG1hcEVudHJ5LmNvbGxlY3Rpb247XHJcblx0XHRcdGNvbnN0IGZpdHRpbmdJdGVtSWRzID0gdGhpcy5ncm91cEl0ZW1JZHMobWFwRW50cnkubWF0Y2hlcykuZml0dGluZztcclxuXHJcblx0XHRcdGlmIChyZXN1bHRSZXNvdXJjZSA9PT0gbnVsbCB8fCBjb2xsZWN0aW9uRW50cnkgIT09IHJlc3VsdFJlc291cmNlLmVudHJ5KVxyXG5cdFx0XHRcdHJlc3VsdCA9IGNvbGxlY3Rpb25FbnRyeS5yZW1vdmVJdGVtcyhmaXR0aW5nSXRlbUlkcywgcmVzdWx0UmVzb3VyY2UsIHRoaXMudXBkYXRlSW5pdGlhbCk7XHJcblx0XHRcdGVsc2VcclxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkucmVtb3ZlSXRlbXMoZml0dGluZ0l0ZW1JZHMsIG51bGwsIHRoaXMudXBkYXRlSW5pdGlhbCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHJlbW92ZUZyb21BbmRBZGRUb0NvbGxlY3Rpb25zICgpIHtcclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIHRoaXMubWFwKSB7XHJcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gdGhpcy5tYXBbY29sbGVjdGlvbklkXTtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gbWFwRW50cnkuY29sbGVjdGlvbjtcclxuXHRcdFx0Y29uc3QgZ3JvdXBlZEl0ZW1FbnRyaWVzID0gdGhpcy5ncm91cEl0ZW1FbnRyaWVzKG1hcEVudHJ5Lm1hdGNoZXMpO1xyXG5cclxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGdyb3VwZWRJdGVtRW50cmllcy5ub3RGaXR0aW5nLCBudWxsLCB0aGlzLnVwZGF0ZUluaXRpYWwpO1xyXG5cclxuXHRcdFx0Ly8gZG9lc24ndCBkbyBhbnl0aGluZyB3aXRoIGluaXRpYWxcclxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LmFkZEl0ZW1zKGdyb3VwZWRJdGVtRW50cmllcy5maXR0aW5nLCBudWxsLCB0aGlzLnVwZGF0ZUluaXRpYWwpO1xyXG5cclxuXHRcdFx0aWYgKGdyb3VwZWRJdGVtRW50cmllcy5tYXliZS5sZW5ndGggPiAwKVxyXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5leHRlbmQoaWRlbnRpdHksIG51bGwsIHRydWUsIHRoaXMudXBkYXRlSW5pdGlhbCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdyb3VwSXRlbUVudHJpZXMgKG1hdGNoZXMpIHtcclxuXHRcdGNvbnN0IGZpdHRpbmc6IEl0ZW1FbnRyeVtdID0gW107XHJcblx0XHRjb25zdCBub3RGaXR0aW5nOiBJdGVtSWRbXSA9IFtdO1xyXG5cdFx0Y29uc3QgbWF5YmU6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gbWF0Y2hlcykge1xyXG5cdFx0XHRjb25zdCBtYXRjaCA9IG1hdGNoZXNbaXRlbUlkXTtcclxuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gbWF0Y2guaXRlbTtcclxuXHRcdFx0Y29uc3QgaXNNYXRjaCA9IG1hdGNoLmlzTWF0Y2g7XHJcblxyXG5cdFx0XHRpZiAoaXNNYXRjaCA9PT0gdHJ1ZSlcclxuXHRcdFx0XHRmaXR0aW5nLnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdFx0ZWxzZSBpZiAoaXNNYXRjaCA9PT0gZmFsc2UpXHJcblx0XHRcdFx0bm90Rml0dGluZy5wdXNoKGl0ZW1FbnRyeS5pdGVtSWQpO1xyXG5cdFx0XHRlbHNlXHJcblx0XHRcdFx0bWF5YmUucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB7Zml0dGluZzogZml0dGluZywgbm90Rml0dGluZzogbm90Rml0dGluZywgbWF5YmU6IG1heWJlfTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ3JvdXBJdGVtSWRzIChtYXRjaGVzKSB7XHJcblx0XHQvLyBhbHNvIGluY2x1ZGVzICdtYXliZSc7XHJcblx0XHRjb25zdCBmaXR0aW5nOiBJdGVtSWRbXSA9IFtdO1xyXG5cdFx0Y29uc3Qgbm90Rml0dGluZzogSXRlbUlkW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBtYXRjaGVzKSB7XHJcblx0XHRcdGNvbnN0IG1hdGNoID0gbWF0Y2hlc1tpdGVtSWRdO1xyXG5cclxuXHRcdFx0KG1hdGNoLmlzTWF0Y2ggPT09IGZhbHNlID8gbm90Rml0dGluZyA6IGZpdHRpbmcpLnB1c2gobWF0Y2guaXRlbS5pdGVtSWQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB7Zml0dGluZzogZml0dGluZywgbm90Rml0dGluZzogbm90Rml0dGluZ307XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGhhc0ZpdHRpbmdJdGVtcyAobWF0Y2hlcykge1xyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gbWF0Y2hlcykge1xyXG5cdFx0XHRpZiAobWF0Y2hlc1tpdGVtSWRdLmlzTWF0Y2ggPT09IHRydWUpXHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vJztcclxuaW1wb3J0IHsgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgSXRlbUlkIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgc2hhbGxvd01lcmdlIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlIHtcclxuXHRwcm9jZXNzT3B0aW9ucyAob3B0aW9ucykge1xyXG5cdFx0cmV0dXJuIHNoYWxsb3dNZXJnZShcclxuXHRcdFx0b3B0aW9ucyxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGVkaXRJdGVtczogZmFsc2UsXHJcblx0XHRcdFx0ZWRpdENvbGxlY3Rpb246IGZhbHNlLFxyXG5cdFx0XHRcdG1vZEluc3RhbnQ6IGZhbHNlLFxyXG5cdFx0XHRcdGVuYWJsZVNhdmU6IHRydWUsXHJcblx0XHRcdFx0b25JdGVtc0NyZWF0ZWQ6IG5vb3AsXHJcblx0XHRcdFx0b25DaGFuZ2U6IG5vb3AsIC8vIG5lZWRlZCBmb3IgY29tcGFyaXNvblxyXG5cdFx0XHRcdG9uQWRkOiBub29wLFxyXG5cdFx0XHRcdG9uUmVtb3ZlOiBub29wLFxyXG5cdFx0XHRcdG9uQWRkSW5pdGlhbDogbm9vcCxcclxuXHRcdFx0XHRvblJlbW92ZUluaXRpYWw6IG5vb3AsXHJcblx0XHRcdFx0cmVzb3VyY2VLZXk6IG51bGwsIC8vIFRPRE86IHJlbW92ZVxyXG5cdFx0XHRcdGNsZWFyT25UYWJDaGFuZ2U6IHRydWUsXHJcblx0XHRcdFx0Y2xlYXJPblN1YlRhYkNoYW5nZTogdHJ1ZSxcclxuXHRcdFx0XHRjdXN0b206IG51bGxcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGdldElkQXJyYXkgKGl0ZW1SZXNvdXJjZXM6IEl0ZW1SZXNvdXJjZVtdKSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1JZFtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcylcclxuXHRcdFx0cmVzdWx0LnB1c2goaXRlbVJlc291cmNlLmVudHJ5Lml0ZW1JZCk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sdW1uVXRpbCB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBBcGlSZXF1ZXN0Q29sdW1uLCBBcGlSZXF1ZXN0Q29sdW1ucywgSXRlbVR5cGUsIFJlc3BvbnNlQ29sdW1uLCBSZXNwb25zZUNvbHVtbk1hcCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2x1bW5DYWNoZSB7XHJcblx0Y2FjaGU6IFJlc3BvbnNlQ29sdW1uTWFwID0ge307XHJcblx0YWxsQ29sdW1uczoge1tpdGVtVHlwZTogc3RyaW5nXTogYm9vbGVhbn0gPSB7fTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRzZXRDb2x1bW4gKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcmVzcG9uc2VDb2x1bW46IFJlc3BvbnNlQ29sdW1uKSB7XHJcblx0XHRjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGU7XHJcblxyXG5cdFx0aWYgKGNhY2hlW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRjYWNoZVtpdGVtVHlwZV0gPSB7fTtcclxuXHJcblx0XHRjb25zdCBlbnRyeSA9IGNhY2hlW2l0ZW1UeXBlXTtcclxuXHRcdGNvbnN0IGNvbHVtbklkID0gcmVzcG9uc2VDb2x1bW4uaWQ7XHJcblxyXG5cdFx0aWYgKGVudHJ5W2NvbHVtbklkXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRlbnRyeVtjb2x1bW5JZF0gPSByZXNwb25zZUNvbHVtbjtcclxuXHJcblx0XHRyZXR1cm4gZW50cnlbY29sdW1uSWRdO1xyXG5cdH1cclxuXHJcblx0c2V0Q29sdW1ucyAoXHJcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXHJcblx0XHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMsXHJcblx0XHRyZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwXHJcblx0KTogUmVzcG9uc2VDb2x1bW5NYXAge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCByZXNwb25zZVR5cGUgaW4gcmVzcG9uc2VDb2x1bW5zKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtbnMgPSByZXNwb25zZUNvbHVtbnNbcmVzcG9uc2VUeXBlXTtcclxuXHJcblx0XHRcdHJlc3VsdFtyZXNwb25zZVR5cGVdID0ge307XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIGNvbHVtbnMpXHJcblx0XHRcdFx0cmVzdWx0W3Jlc3BvbnNlVHlwZV1bY29sdW1uSWRdID0gdGhpcy5zZXRDb2x1bW4ocmVzcG9uc2VUeXBlLCBjb2x1bW5zW2NvbHVtbklkXSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHJlcXVlc3RDb2x1bW5zID09PSB0cnVlKVxyXG5cdFx0XHR0aGlzLmFsbENvbHVtbnNbaXRlbVR5cGVdID0gdHJ1ZTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0cmV0cmlldmUgKFxyXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zXHJcblx0KToge2NhY2hlZDogUmVzcG9uc2VDb2x1bW5NYXAsIG1pc3Npbmc6IEFwaVJlcXVlc3RDb2x1bW5zfSB7XHJcblx0XHRpZiAocmVxdWVzdENvbHVtbnMgPT09IHRydWUpIHtcclxuXHRcdFx0aWYgKHRoaXMuY29udGFpbnNBbGwoaXRlbVR5cGUpKVxyXG5cdFx0XHRcdHJldHVybiB7Y2FjaGVkOiB0aGlzLmdldENvbHVtbnMoaXRlbVR5cGUpLCBtaXNzaW5nOiBbXX07XHJcblxyXG5cdFx0XHRyZXR1cm4ge2NhY2hlZDoge30sIG1pc3Npbmc6IHRydWV9O1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHJlc3BvbnNlQWNjdW11bGF0b3IgPSB7fTtcclxuXHRcdGNvbnN0IHJlcXVlc3RBY2N1bXVsYXRvciA9IFtdO1xyXG5cclxuXHRcdHRoaXMucmV0cmlldmVDb2x1bW5zKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVxdWVzdEFjY3VtdWxhdG9yLCByZXNwb25zZUFjY3VtdWxhdG9yKTtcclxuXHJcblx0XHRyZXR1cm4ge2NhY2hlZDogcmVzcG9uc2VBY2N1bXVsYXRvciwgbWlzc2luZzogcmVxdWVzdEFjY3VtdWxhdG9yfTtcclxuXHR9XHJcblxyXG5cdGNvbnRhaW5zQWxsIChpdGVtVHlwZTogSXRlbVR5cGUpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLmFsbENvbHVtbnNbaXRlbVR5cGVdID09PSB0cnVlO1xyXG5cdH1cclxuXHJcblx0Z2V0Q29sdW1ucyAoaXRlbVR5cGU6IEl0ZW1UeXBlKTogUmVzcG9uc2VDb2x1bW5NYXAge1xyXG5cdFx0Y29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlO1xyXG5cclxuXHRcdHJldHVybiB7W2l0ZW1UeXBlXTogY2FjaGVbaXRlbVR5cGVdID09PSB1bmRlZmluZWQgPyBbXSA6IGNhY2hlW2l0ZW1UeXBlXX07XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHJldHJpZXZlQ29sdW1ucyAoXHJcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXHJcblx0XHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbltdLFxyXG5cdFx0cmVxdWVzdEFjY3VtdWxhdG9yOiBBcGlSZXF1ZXN0Q29sdW1uW10sXHJcblx0XHRyZXNwb25zZUFjY3VtdWxhdG9yOiBSZXNwb25zZUNvbHVtbk1hcFxyXG5cdCk6IHZvaWQge1xyXG5cdFx0Ly8gYWx3YXlzIHJldHJpZXZlIHRoZSBpZCBjb2x1bW5cclxuXHRcdHRoaXMucmV0cmlldmVDb2x1bW4oaXRlbVR5cGUsICdpZCcsIHJlcXVlc3RBY2N1bXVsYXRvciwgcmVzcG9uc2VBY2N1bXVsYXRvcik7XHJcblxyXG5cdFx0Zm9yIChjb25zdCByZXF1ZXN0Q29sdW1uIG9mIHJlcXVlc3RDb2x1bW5zKVxyXG5cdFx0XHR0aGlzLnJldHJpZXZlQ29sdW1uKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1uLCByZXF1ZXN0QWNjdW11bGF0b3IsIHJlc3BvbnNlQWNjdW11bGF0b3IpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSByZXRyaWV2ZUNvbHVtbiAoXHJcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXHJcblx0XHRyZXF1ZXN0Q29sdW1uOiBBcGlSZXF1ZXN0Q29sdW1uLFxyXG5cdFx0cmVxdWVzdEFjY3VtdWxhdG9yOiBSZXNwb25zZUNvbHVtbltdLFxyXG5cdFx0cmVzcG9uc2VBY2N1bXVsYXRvcjogUmVzcG9uc2VDb2x1bW5NYXBcclxuXHQpOiB2b2lkIHtcclxuXHRcdGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1uVXRpbC5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XHJcblx0XHRjb25zdCByZXNwb25zZUNvbHVtbiA9IHRoaXMuZ2V0Q29sdW1uKGl0ZW1UeXBlLCBjb2x1bW4uaWQpO1xyXG5cclxuXHRcdGlmIChyZXNwb25zZUNvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdHJlcXVlc3RBY2N1bXVsYXRvci5wdXNoKHJlcXVlc3RDb2x1bW4pO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHJlc3BvbnNlQWNjdW11bGF0b3JbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJlc3BvbnNlQWNjdW11bGF0b3JbaXRlbVR5cGVdID0ge307XHJcblxyXG5cdFx0cmVzcG9uc2VBY2N1bXVsYXRvcltpdGVtVHlwZV1bY29sdW1uLmlkXSA9IHJlc3BvbnNlQ29sdW1uO1xyXG5cclxuXHRcdGlmIChjb2x1bW4uY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0Y29uc3QgbWlzc2luZ0Rlcml2ZWQgPSBbXTtcclxuXHJcblx0XHR0aGlzLnJldHJpZXZlQ29sdW1ucyhyZXNwb25zZUNvbHVtbi5pdGVtVHlwZSwgY29sdW1uLmNoaWxkcmVuLCBtaXNzaW5nRGVyaXZlZCwgcmVzcG9uc2VBY2N1bXVsYXRvcik7XHJcblxyXG5cdFx0aWYgKG1pc3NpbmdEZXJpdmVkLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuO1xyXG5cclxuXHRcdHJlcXVlc3RBY2N1bXVsYXRvci5wdXNoKHtbY29sdW1uLmlkXTogbWlzc2luZ0Rlcml2ZWR9KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0Q29sdW1uIChpdGVtVHlwZTogSXRlbVR5cGUsIGNvbHVtbklkOiBzdHJpbmcpOiBSZXNwb25zZUNvbHVtbiB8IHVuZGVmaW5lZCB7XHJcblx0XHRjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGVbaXRlbVR5cGVdO1xyXG5cclxuXHRcdGlmIChjYWNoZSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0cmV0dXJuIGNhY2hlW2NvbHVtbklkXTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sdW1uSW5mbywgQ29sdW1uU2V0LCBDb2x1bW5VdGlsIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7XHJcblx0QXBpUmVxdWVzdENvbHVtbixcclxuXHRBcGlSZXF1ZXN0Q29sdW1ucyxcclxuXHRDb2x1bW5FeHBhbnNpb25SZXN1bHQsXHJcblx0SXRlbVR5cGUsXHJcblx0UmVzcG9uc2VDb2x1bW5NYXAsXHJcblx0Um9vdENvbHVtbk1hcFxyXG59IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2x1bW5FeHBhbnNpb24ge1xyXG5cdGV4cGFuc2lvbk1hcDoge1tjb2x1bW5TZXRJZDogbnVtYmVyXTogQ29sdW1uRXhwYW5zaW9uUmVzdWx0IHwgbnVsbH0gPSB7fTtcclxuXHRyZXF1ZXN0Q29sdW1uc1RydWU6IGJvb2xlYW47XHJcblx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5bXTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5JbmZvRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbCxcclxuXHRcdHB1YmxpYyBpdGVtVHlwZTogSXRlbVR5cGUsXHJcblx0XHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMsXHJcblx0XHRwdWJsaWMgcmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcFxyXG5cdCkge1xyXG5cdFx0aWYgKHJlcXVlc3RDb2x1bW5zID09PSB0cnVlKSB7XHJcblx0XHRcdC8vIHJlcXVlc3RDb2x1bW5zIHNob3VsZCBhbHdheXMgYmUgYW4gYXJyYXksIHdoZW4gaXQgaXMgdHJ1ZSBkZXJpdmVkIGNvbHVtbiBpbmZvcm1hdGlvbiB3aWxsIGJlIGxvc3RcclxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUgPSB0cnVlO1xyXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zID0gW107XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHJlc3BvbnNlQ29sdW1uc1tpdGVtVHlwZV0pXHJcblx0XHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1ucy5wdXNoKGNvbHVtbklkKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbnNUcnVlID0gZmFsc2U7XHJcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbnMgPSByZXF1ZXN0Q29sdW1ucztcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHJ1biAoY29sdW1uU2V0OiBDb2x1bW5TZXQpOiBDb2x1bW5FeHBhbnNpb25SZXN1bHQgfCBudWxsIHtcclxuXHRcdGNvbnN0IGV4cGFuc2lvbk1hcCA9IHRoaXMuZXhwYW5zaW9uTWFwO1xyXG5cdFx0Y29uc3QgY29sdW1uU2V0SWQgPSBjb2x1bW5TZXQuaWQ7XHJcblxyXG5cdFx0aWYgKGV4cGFuc2lvbk1hcFtjb2x1bW5TZXRJZF0gIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIGV4cGFuc2lvbk1hcFtjb2x1bW5TZXRJZF07XHJcblxyXG5cdFx0Y29uc3QgaXNDb2x1bW5TdWJzZXQgPSB0aGlzLmNvbHVtblV0aWwuaXNDb2x1bW5TdWJzZXQoXHJcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbnMsXHJcblx0XHRcdGNvbHVtblNldC5yZXF1ZXN0LFxyXG5cdFx0XHRjb2x1bW5TZXQucmVxdWVzdENvbHVtbnNUcnVlXHJcblx0XHQpO1xyXG5cclxuXHRcdHJldHVybiBleHBhbnNpb25NYXBbY29sdW1uU2V0SWRdID0gaXNDb2x1bW5TdWJzZXQgP1xyXG5cdFx0XHRudWxsIDpcclxuXHRcdFx0Y29sdW1uU2V0LmV4cGFuZCh0aGlzLnJlcXVlc3RDb2x1bW5zLCB0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSwgdGhpcy5yZXNwb25zZUNvbHVtbnMpO1xyXG5cdH1cclxuXHJcblx0YWdncmVnYXRlUm9vdENvbHVtbnMgKCk6IENvbHVtbkluZm9bXSB7XHJcblx0XHRjb25zdCBleHBhbnNpb25NYXAgPSB0aGlzLmV4cGFuc2lvbk1hcDtcclxuXHRcdGNvbnN0IHJvb3RDb2x1bW5NYXA6IFJvb3RDb2x1bW5NYXAgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtblNldElkIGluIGV4cGFuc2lvbk1hcCkge1xyXG5cdFx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSBleHBhbnNpb25NYXBbY29sdW1uU2V0SWRdO1xyXG5cclxuXHRcdFx0aWYgKGNvbHVtbkV4cGFuc2lvbiA9PT0gbnVsbClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdHRoaXMuZXhwYW5kUm9vdENvbHVtbk1hcChjb2x1bW5FeHBhbnNpb24uZGlmZmVyZW5jZS5yb290LCByb290Q29sdW1uTWFwKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUm9vdENvbHVtbk1hcChyb290Q29sdW1uTWFwLCBudWxsKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZXhwYW5kUm9vdENvbHVtbk1hcCAoY29sdW1uczogQ29sdW1uSW5mb1tdLCBkZXN0aW5hdGlvbjogUm9vdENvbHVtbk1hcCkge1xyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcclxuXHJcblx0XHRcdGlmIChkZXN0aW5hdGlvbltjb2x1bW5JZF0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5JZF0gPSB7YXBpQ29sdW1uOiBjb2x1bW4uYXBpQ29sdW1uLCBjaGlsZHJlbjoge319O1xyXG5cclxuXHRcdFx0dGhpcy5leHBhbmRSb290Q29sdW1uTWFwKGNvbHVtbi5jaGlsZHJlbiwgZGVzdGluYXRpb25bY29sdW1uSWRdLmNoaWxkcmVuKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcHJvY2Vzc1Jvb3RDb2x1bW5NYXAgKHJvb3RDb2x1bW5NYXA6IFJvb3RDb2x1bW5NYXAsIHBhcmVudDogQ29sdW1uSW5mbyB8IG51bGwpOiBDb2x1bW5JbmZvW10ge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBDb2x1bW5JbmZvW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHJvb3RDb2x1bW5NYXApIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uTWFwRW50cnkgPSByb290Q29sdW1uTWFwW2NvbHVtbklkXTtcclxuXHRcdFx0Y29uc3QgY29sdW1uSW5mbyA9IHRoaXMuY29sdW1uSW5mb0ZhY3RvcnkuY29uc3RydWN0KGNvbHVtbk1hcEVudHJ5LmFwaUNvbHVtbiwgcGFyZW50KTtcclxuXHRcdFx0Y29uc3QgY2hpbGRDb2x1bW5zID0gdGhpcy5wcm9jZXNzUm9vdENvbHVtbk1hcChjb2x1bW5NYXBFbnRyeS5jaGlsZHJlbiwgY29sdW1uSW5mbyk7XHJcblxyXG5cdFx0XHRpZiAoY2hpbGRDb2x1bW5zLmxlbmd0aCA+IDApXHJcblx0XHRcdFx0Y29sdW1uSW5mby5zZXRDaGlsZHJlbihjb2x1bW5JbmZvLmFwaUNvbHVtbi5pdGVtVHlwZSwgY2hpbGRDb2x1bW5zKTtcclxuXHJcblx0XHRcdHJlc3VsdC5wdXNoKGNvbHVtbkluZm8pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbHVtbkNhY2hlLCBDb2x1bW5VdGlsIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7XHJcblx0QXBpUmVxdWVzdENvbHVtbnMsXHJcblx0SXRlbVR5cGUsXHJcblx0UHJvbWlzZUludGVyZmFjZSxcclxuXHRSZXNwb25zZUNvbHVtbixcclxuXHRSZXNwb25zZUNvbHVtbk1hcFxyXG59IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2x1bW5IYW5kbGVyIHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgY2FjaGU6IENvbHVtbkNhY2hlLFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRzZXRDb2x1bW4gKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcmVzcG9uc2VDb2x1bW46IFJlc3BvbnNlQ29sdW1uKTogUmVzcG9uc2VDb2x1bW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuY2FjaGUuc2V0Q29sdW1uKGl0ZW1UeXBlLCByZXNwb25zZUNvbHVtbik7XHJcblx0fVxyXG5cclxuXHRzZXRDb2x1bW5zIChcclxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyxcclxuXHRcdHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXBcclxuXHQpOiBSZXNwb25zZUNvbHVtbk1hcCB7XHJcblx0XHRyZXR1cm4gdGhpcy5jYWNoZS5zZXRDb2x1bW5zKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKTtcclxuXHR9XHJcblxyXG5cdGZldGNoSXRlbVR5cGVUcmFuc2xhdGlvbnMgKGl0ZW1UeXBlczogSXRlbVR5cGVbXSk6IFByb21pc2VJbnRlcmZhY2U8e1tpdGVtVHlwZTogc3RyaW5nXTogc3RyaW5nfT4ge1xyXG5cdFx0Y29uc3QgcHJvbWlzZXM6IHtbaXRlbVR5cGU6IHN0cmluZ106IFByb21pc2VJbnRlcmZhY2U8UmVzcG9uc2VDb2x1bW5NYXA+fSA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgb2YgaXRlbVR5cGVzKVxyXG5cdFx0XHRwcm9taXNlc1tpdGVtVHlwZV0gPSB0aGlzLmZldGNoKGl0ZW1UeXBlLCBbJ2lkJ10pO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChwcm9taXNlcylcclxuXHRcdFx0LnRoZW4oXHJcblx0XHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiByZXNwb25zZSlcclxuXHRcdFx0XHRcdFx0cmVzdWx0W2l0ZW1UeXBlXSA9IHJlc3BvbnNlW2l0ZW1UeXBlXVtpdGVtVHlwZV0uaWQubmFtZTtcclxuXHJcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdCk7XHJcblx0fVxyXG5cclxuXHRyZXF1ZXN0IChcclxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdGNvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxyXG5cdFx0cGFyYW1zID0ge2ZpbHRlcjogZmFsc2V9XHJcblx0KTogUHJvbWlzZUludGVyZmFjZTxSZXNwb25zZUNvbHVtbk1hcD4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UuY29sdW1ucyhpdGVtVHlwZSwge1tpdGVtVHlwZV06IGNvbHVtbnN9LCBwYXJhbXMpLnRoZW4oXHJcblx0XHRcdGNvbHVtblJlc291cmNlID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jYWNoZS5zZXRDb2x1bW5zKFxyXG5cdFx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0XHRjb2x1bW5zLFxyXG5cdFx0XHRcdFx0Y29sdW1uUmVzb3VyY2UuZmV0Y2hDb2x1bW5zT2JqZWN0KClcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRmZXRjaCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMsIHBhcmFtcz8pOiBQcm9taXNlSW50ZXJmYWNlPFJlc3BvbnNlQ29sdW1uTWFwPiB7XHJcblx0XHRjb25zdCBjb2x1bW5SZXNvdXJjZSA9IHRoaXMuY2FjaGUucmV0cmlldmUoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zKTtcclxuXHJcblx0XHRpZiAoY29sdW1uUmVzb3VyY2UubWlzc2luZyAhPT0gdHJ1ZSAmJiBjb2x1bW5SZXNvdXJjZS5taXNzaW5nLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihjb2x1bW5SZXNvdXJjZS5jYWNoZWQpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnJlcXVlc3QoaXRlbVR5cGUsIGNvbHVtblJlc291cmNlLm1pc3NpbmcsIHBhcmFtcykudGhlbihcclxuXHRcdFx0cmVzcG9uc2VDb2x1bW5zID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb2x1bW5VdGlsLm1lcmdlUmVzcG9uc2VDb2x1bW5zKFxyXG5cdFx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zLFxyXG5cdFx0XHRcdFx0Y29sdW1uUmVzb3VyY2UuY2FjaGVkXHJcblx0XHRcdFx0KS5tZXJnZWQ7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRmZXRjaEFsbCAoaXRlbVR5cGU6IEl0ZW1UeXBlKTogUHJvbWlzZUludGVyZmFjZTxSZXNwb25zZUNvbHVtbk1hcD4ge1xyXG5cdFx0aWYgKHRoaXMuY2FjaGUuY29udGFpbnNBbGwoaXRlbVR5cGUpKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKHRoaXMuY2FjaGUuZ2V0Q29sdW1ucyhpdGVtVHlwZSkpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnJlcXVlc3QoaXRlbVR5cGUsIHRydWUpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDT0xVTU5fU0VQRVJBVE9SIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcclxuaW1wb3J0IHsgSXRlbVR5cGUsIFJlc3BvbnNlQ29sdW1uIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbHVtbkluZm8ge1xyXG5cdGlkOiBzdHJpbmc7XHJcblx0bGV2ZWw6IG51bWJlcjtcclxuXHRwYXRoOiBzdHJpbmc7XHJcblx0dGFpbFBhdGg6IHN0cmluZztcclxuXHRpdGVtVHlwZTogSXRlbVR5cGUgfCBudWxsID0gbnVsbDtcclxuXHRjaGlsZHJlbjogQ29sdW1uSW5mb1tdID0gW107XHJcblx0aXNMZWFmOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcblx0Y29uc3RydWN0b3IgKHJlYWRvbmx5IGFwaUNvbHVtbjogUmVzcG9uc2VDb2x1bW4sIHJlYWRvbmx5IHBhcmVudDogQ29sdW1uSW5mbyB8IG51bGwgPSBudWxsKSB7XHJcblx0XHRjb25zdCBjb2x1bW5JZCA9IGFwaUNvbHVtbi5pZDtcclxuXHJcblx0XHR0aGlzLmlkID0gY29sdW1uSWQ7XHJcblxyXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbCkge1xyXG5cdFx0XHR0aGlzLmxldmVsID0gMDtcclxuXHRcdFx0dGhpcy5wYXRoID0gY29sdW1uSWQ7XHJcblx0XHRcdHRoaXMudGFpbFBhdGggPSAnJztcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMubGV2ZWwgPSBwYXJlbnQubGV2ZWwgKyAxO1xyXG5cdFx0XHR0aGlzLnBhdGggPSBwYXJlbnQucGF0aCArIENPTFVNTl9TRVBFUkFUT1IgKyBjb2x1bW5JZDtcclxuXHRcdFx0dGhpcy50YWlsUGF0aCA9IHBhcmVudC5sZXZlbCA9PT0gMCA/XHJcblx0XHRcdFx0Y29sdW1uSWQgOlxyXG5cdFx0XHRcdHBhcmVudC50YWlsUGF0aCArIENPTFVNTl9TRVBFUkFUT1IgKyBjb2x1bW5JZDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHNldENoaWxkcmVuIChpdGVtVHlwZTogSXRlbVR5cGUsIGNoaWxkcmVuOiBDb2x1bW5JbmZvW10pOiB0aGlzIHtcclxuXHRcdHRoaXMuaXRlbVR5cGUgPSBpdGVtVHlwZTtcclxuXHRcdHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcclxuXHRcdHRoaXMuaXNMZWFmID0gZmFsc2U7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbHVtbkhhbmRsZXIsIENvbHVtbkluZm8sIENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sdW1uSW5mb0ZhY3RvcnksIENvbHVtblNldEZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBBcGlSZXF1ZXN0Q29sdW1ucywgQ29sdW1uRXhwYW5zaW9uUmVzdWx0LCBDb2x1bW5TZXRFeHBhbnNpb24sIFJlc3BvbnNlQ29sdW1uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuY29uc3QgZW1wdHlPYmplY3QgPSB7fTtcclxubGV0IGN1cnJlbnRJZCA9IDA7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sdW1uU2V0IHtcclxuXHRpZCA9ICsrY3VycmVudElkO1xyXG5cclxuXHRyZXF1ZXN0Q29sdW1uc1RydWU6IGJvb2xlYW47XHJcblx0cmVzcG9uc2U6IFJlc3BvbnNlQ29sdW1uTWFwID0gZW1wdHlPYmplY3Q7XHJcblxyXG5cdGxpbms6IENvbHVtbkluZm8gfCBudWxsID0gbnVsbDtcclxuXHRtYWluOiBDb2x1bW5JbmZvW10gPSBbXTtcclxuXHRkZXJpdmVkOiBDb2x1bW5JbmZvW10gPSBbXTtcclxuXHRyb290OiBDb2x1bW5JbmZvW10gPSBbXTtcclxuXHRsZWFmOiBDb2x1bW5JbmZvW10gPSBbXTtcclxuXHRmb3JtYXR0ZWQ6IHttYWluOiBDb2x1bW5JbmZvW10sIGRlcml2ZWQ6IENvbHVtbkluZm9bXX0gPSB7bWFpbjogW10sIGRlcml2ZWQ6IFtdfTtcclxuXHRmaWx0ZXJlZDogQ29sdW1uSW5mb1tdID0gW107XHJcblx0Y3VzdG9tOiBDb2x1bW5JbmZvW10gPSBbXTtcclxuXHRzZWFyY2hhYmxlOiBDb2x1bW5JbmZvW10gPSBbXTtcclxuXHRpdGVtOiBDb2x1bW5JbmZvW10gPSBbXTtcclxuXHRub3RJdGVtOiBDb2x1bW5JbmZvW10gPSBbXTtcclxuXHJcblx0ZW5hYmxlQ2FjaGluZzogYm9vbGVhbjtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsLFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5JbmZvRmFjdG9yeTogQ29sdW1uSW5mb0ZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXHJcblx0XHRwdWJsaWMgaXRlbVR5cGUsXHJcblx0XHRwdWJsaWMgcmVxdWVzdDogQXBpUmVxdWVzdENvbHVtbnMsXHJcblx0KSB7XHJcblx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSA9IHRoaXMucmVxdWVzdENvbHVtbnNJc1RydWUodGhpcy5yZXF1ZXN0KTtcclxuXHR9XHJcblxyXG5cdHRvSlNPTiAoKSB7XHJcblx0XHRjb25zdCBwYXJzZUNvbHVtbnMgPSAoY29sdW1uczogQ29sdW1uSW5mb1tdKSA9PiBjb2x1bW5zLm1hcChjID0+IGMuaWQpO1xyXG5cclxuXHRcdHJldHVybiB7XHJcblx0XHRcdG1haW46IHBhcnNlQ29sdW1ucyh0aGlzLm1haW4pLFxyXG5cdFx0XHRkZXJpdmVkOiBwYXJzZUNvbHVtbnModGhpcy5kZXJpdmVkKVxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdHJlc29sdmUgKHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXAsIGVuYWJsZUNhY2hpbmcgPSB0cnVlLCBpbmNsdWRlSWRDb2x1bW4gPSB0cnVlKTogdGhpcyB7XHJcblx0XHR0aGlzLmVuYWJsZUNhY2hpbmcgPSBlbmFibGVDYWNoaW5nO1xyXG5cclxuXHRcdGlmICh0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSlcclxuXHRcdFx0dGhpcy5wcm9jZXNzUmVzcG9uc2VDb2x1bW5zKHJlc3BvbnNlQ29sdW1ucyk7XHJcblx0XHRlbHNlXHJcblx0XHRcdHRoaXMucHJvY2Vzc1JlcXVlc3RDb2x1bW5zKHJlc3BvbnNlQ29sdW1ucywgaW5jbHVkZUlkQ29sdW1uKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdGV4cGFuZFJlcXVlc3RDb2x1bW5zIChjb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucykge1xyXG5cdFx0Y29uc3QgbWVyZ2VkUmVxdWVzdENvbHVtbnMgPSB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXF1ZXN0Q29sdW1ucyh0aGlzLnJlcXVlc3QsIGNvbHVtbnMpLm1lcmdlZDtcclxuXHJcblx0XHR0aGlzLnJlcXVlc3QgPSBtZXJnZWRSZXF1ZXN0Q29sdW1ucztcclxuXHRcdHRoaXMucmVxdWVzdENvbHVtbnNUcnVlID0gbWVyZ2VkUmVxdWVzdENvbHVtbnMgPT09IHRydWU7XHJcblx0fVxyXG5cclxuXHRpc1N1cGVyc2V0T2YgKGNvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5jb2x1bW5VdGlsLmlzQ29sdW1uU3Vic2V0KGNvbHVtbnMsIHRoaXMucmVxdWVzdCwgdGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwcm9jZXNzUmVzcG9uc2VDb2x1bW5zIChyZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwKSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IHRoaXMuaXRlbVR5cGU7XHJcblxyXG5cdFx0dGhpcy5yZXF1ZXN0ID0gW107XHJcblx0XHR0aGlzLnJlc3BvbnNlID0gdGhpcy5lbmFibGVDYWNoaW5nID9cclxuXHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLnNldENvbHVtbnModGhpcy5pdGVtVHlwZSwgdHJ1ZSwgcmVzcG9uc2VDb2x1bW5zKSA6XHJcblx0XHRcdHJlc3BvbnNlQ29sdW1ucztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHJlc3BvbnNlQ29sdW1uc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0dGhpcy5tYWluLnB1c2godGhpcy5nZXRDb2x1bW5JbmZvKGNvbHVtbklkLCBpdGVtVHlwZSwgW10sIG51bGwsIHJlc3BvbnNlQ29sdW1ucykpO1xyXG5cdFx0XHR0aGlzLnJlcXVlc3QucHVzaChjb2x1bW5JZCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHJlcXVlc3RDb2x1bW5zSXNUcnVlIChyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMpOiByZXF1ZXN0Q29sdW1ucyBpcyB0cnVlIHtcclxuXHRcdHJldHVybiByZXF1ZXN0Q29sdW1ucyA9PT0gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcHJvY2Vzc1JlcXVlc3RDb2x1bW5zIChyZXNwb25zZUNvbHVtbnMsIGluY2x1ZGVJZENvbHVtbikge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSB0aGlzLml0ZW1UeXBlO1xyXG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSB0aGlzLnJlcXVlc3Q7IC8vIHdlIGNhbiBhc3N1bWUgcmVxdWVzdENvbHVtbnMgaXMgYW4gYXJyYXkgaGVyZVxyXG5cclxuXHRcdHRoaXMucmVzcG9uc2UgPSB7fTtcclxuXHJcblx0XHRpZiAodGhpcy5yZXF1ZXN0Q29sdW1uc0lzVHJ1ZShyZXF1ZXN0Q29sdW1ucykgfHwgcmVxdWVzdENvbHVtbnMubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0Zm9yIChjb25zdCByZXF1ZXN0Q29sdW1uIG9mIHJlcXVlc3RDb2x1bW5zKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtbkluZm8gPSB0aGlzLmdldFJlcXVlc3RDb2x1bW5JbmZvKHJlcXVlc3RDb2x1bW4sIGl0ZW1UeXBlLCBudWxsLCByZXNwb25zZUNvbHVtbnMpO1xyXG5cclxuXHRcdFx0aWYgKGNvbHVtbkluZm8gPT09IG51bGwpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHR0aGlzLm1haW4ucHVzaChjb2x1bW5JbmZvKTtcclxuXHJcblx0XHRcdGlmICghY29sdW1uSW5mby5pc0xlYWYpXHJcblx0XHRcdFx0dGhpcy5yb290LnB1c2goY29sdW1uSW5mbyk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGluY2x1ZGVJZENvbHVtbiAmJiB0aGlzLnJlc3BvbnNlW2l0ZW1UeXBlXS5pZCA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtbkluZm8gPSB0aGlzLmdldFJlcXVlc3RDb2x1bW5JbmZvKCdpZCcsIGl0ZW1UeXBlLCBudWxsLCByZXNwb25zZUNvbHVtbnMpO1xyXG5cclxuXHRcdFx0aWYgKGNvbHVtbkluZm8gIT09IG51bGwpXHJcblx0XHRcdFx0dGhpcy5tYWluLnB1c2goY29sdW1uSW5mbyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldFJlcXVlc3RDb2x1bW5JbmZvIChyZXF1ZXN0Q29sdW1uLCBpdGVtVHlwZSwgcGFyZW50LCByZXNwb25zZUNvbHVtbnMpIHtcclxuXHRcdGNvbnN0IHBhcnNlZENvbHVtbiA9IHRoaXMuY29sdW1uVXRpbC5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XHJcblx0XHRjb25zdCBjb2x1bW5JZCA9IHBhcnNlZENvbHVtbi5pZDtcclxuXHJcblx0XHRsZXQgcmVzcG9uc2VDb2x1bW47XHJcblxyXG5cdFx0aWYgKHJlc3BvbnNlQ29sdW1uc1tpdGVtVHlwZV0gIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmVzcG9uc2VDb2x1bW4gPSByZXNwb25zZUNvbHVtbnNbaXRlbVR5cGVdW2NvbHVtbklkXTtcclxuXHJcblx0XHRpZiAocmVzcG9uc2VDb2x1bW4gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRjb25zb2xlLndhcm4oJ05vIGFwaSBjb2x1bW4gZm9yIHJlcXVlc3QgY29sdW1uJywgY29sdW1uSWQsICdmb3IgaXRlbVR5cGUnLCBpdGVtVHlwZSk7XHJcblxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodGhpcy5lbmFibGVDYWNoaW5nKVxyXG5cdFx0XHRyZXNwb25zZUNvbHVtbiA9IHRoaXMuY29sdW1uSGFuZGxlci5zZXRDb2x1bW4oaXRlbVR5cGUsIHJlc3BvbnNlQ29sdW1uKTtcclxuXHJcblx0XHRjb25zdCByZXN1bHRSZXNwb25zZSA9IHRoaXMucmVzcG9uc2U7XHJcblxyXG5cdFx0aWYgKHJlc3VsdFJlc3BvbnNlW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXN1bHRSZXNwb25zZVtpdGVtVHlwZV0gPSB7fTtcclxuXHJcblx0XHRpZiAocmVzdWx0UmVzcG9uc2VbaXRlbVR5cGVdW2NvbHVtbklkXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXN1bHRSZXNwb25zZVtpdGVtVHlwZV1bY29sdW1uSWRdID0gcmVzcG9uc2VDb2x1bW47XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuZ2V0Q29sdW1uSW5mbyhjb2x1bW5JZCwgaXRlbVR5cGUsIHBhcnNlZENvbHVtbi5jaGlsZHJlbiwgcGFyZW50LCByZXNwb25zZUNvbHVtbnMpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRDb2x1bW5JbmZvIChjb2x1bW5JZCwgaXRlbVR5cGUsIGNoaWxkcmVuLCBwYXJlbnQsIHJlc3BvbnNlQ29sdW1ucyk6IENvbHVtbkluZm8ge1xyXG5cdFx0Y29uc3QgY29sdW1uVXRpbCA9IHRoaXMuY29sdW1uVXRpbDtcclxuXHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1uID0gcmVzcG9uc2VDb2x1bW5zW2l0ZW1UeXBlXVtjb2x1bW5JZF07XHJcblx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5jb2x1bW5JbmZvRmFjdG9yeS5jb25zdHJ1Y3QocmVzcG9uc2VDb2x1bW4sIHBhcmVudCk7XHJcblx0XHRjb25zdCBpc0Rlcml2ZWQgPSBwYXJlbnQgIT09IG51bGw7XHJcblxyXG5cdFx0aWYgKGlzRGVyaXZlZClcclxuXHRcdFx0dGhpcy5kZXJpdmVkLnB1c2goY29sdW1uSW5mbyk7XHJcblx0XHRlbHNlIC8vIHdlIGNvdWxkIHBvc3NpYmx5IGFkZCBkZXJpdmVkIGNvbHVtbnMgdG8gJ25vdEl0ZW0nXHJcblx0XHRcdHRoaXNbY29sdW1uVXRpbC5pc0l0ZW1Db2x1bW4ocmVzcG9uc2VDb2x1bW4pID8gJ2l0ZW0nIDogJ25vdEl0ZW0nXS5wdXNoKGNvbHVtbkluZm8pO1xyXG5cclxuXHRcdGlmIChjb2x1bW5VdGlsLmlzRm9ybWF0dGVkQ29sdW1uKHJlc3BvbnNlQ29sdW1uKSlcclxuXHRcdFx0dGhpcy5mb3JtYXR0ZWRbaXNEZXJpdmVkID8gJ2Rlcml2ZWQnIDogJ21haW4nXS5wdXNoKGNvbHVtbkluZm8pO1xyXG5cclxuXHRcdGlmIChjb2x1bW5VdGlsLmlzRmlsdGVyZWRDb2x1bW4ocmVzcG9uc2VDb2x1bW4pKVxyXG5cdFx0XHR0aGlzLmZpbHRlcmVkLnB1c2goY29sdW1uSW5mbyk7XHJcblxyXG5cdFx0aWYgKGNvbHVtblV0aWwuaXNTZWFyY2hhYmxlQ29sdW1uKHJlc3BvbnNlQ29sdW1uKSlcclxuXHRcdFx0dGhpcy5zZWFyY2hhYmxlLnB1c2goY29sdW1uSW5mbyk7XHJcblxyXG5cdFx0aWYgKGNvbHVtblV0aWwuaXNDdXN0b21Db2x1bW4ocmVzcG9uc2VDb2x1bW4pKVxyXG5cdFx0XHR0aGlzLmN1c3RvbS5wdXNoKGNvbHVtbkluZm8pO1xyXG5cclxuXHRcdGlmIChyZXNwb25zZUNvbHVtbi50eXBlID09PSAnbGluaycpXHJcblx0XHRcdHRoaXMubGluayA9IGNvbHVtbkluZm87XHJcblxyXG5cdFx0aWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xyXG5cdFx0XHR0aGlzLmxlYWYucHVzaChjb2x1bW5JbmZvKTtcclxuXHJcblx0XHRcdHJldHVybiBjb2x1bW5JbmZvO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGNoaWxkQ29sdW1uczogQ29sdW1uSW5mb1tdID0gW107XHJcblxyXG5cdFx0Ly8gY29sdW1ucyBpcyAqbm90KiB0cnVlXHJcblx0XHRmb3IgKGNvbnN0IGNoaWxkQ29sdW1uSWQgb2YgY2hpbGRyZW4pIHtcclxuXHRcdFx0Y29uc3QgY2hpbGRDb2x1bW4gPSB0aGlzLmdldFJlcXVlc3RDb2x1bW5JbmZvKFxyXG5cdFx0XHRcdGNoaWxkQ29sdW1uSWQsXHJcblx0XHRcdFx0cmVzcG9uc2VDb2x1bW4uaXRlbVR5cGUsXHJcblx0XHRcdFx0Y29sdW1uSW5mbyxcclxuXHRcdFx0XHRyZXNwb25zZUNvbHVtbnNcclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdGlmIChjaGlsZENvbHVtbiA9PT0gbnVsbClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGNoaWxkQ29sdW1ucy5wdXNoKGNoaWxkQ29sdW1uKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gY29sdW1uSW5mby5zZXRDaGlsZHJlbihyZXNwb25zZUNvbHVtbi5pdGVtVHlwZSwgY2hpbGRDb2x1bW5zKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0Q29sdW1uU2V0RXhwYW5zaW9uIChcclxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyxcclxuXHRcdHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXBcclxuXHQpOiBDb2x1bW5TZXRFeHBhbnNpb24ge1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0cmVxdWVzdDogdGhpcy5jb2x1bW5VdGlsLm1lcmdlUmVxdWVzdENvbHVtbnModGhpcy5yZXF1ZXN0LCByZXF1ZXN0Q29sdW1ucyksXHJcblx0XHRcdHJlc3BvbnNlOiB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXNwb25zZUNvbHVtbnModGhpcy5yZXNwb25zZSwgcmVzcG9uc2VDb2x1bW5zKS5tZXJnZWRcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldE1lcmdlZENvbHVtblNldCAoY29sdW1uU2V0RXhwYW5zaW9uOiBDb2x1bW5TZXRFeHBhbnNpb24sIHJlcXVlc3RDb2x1bW5zVHJ1ZTogYm9vbGVhbik6IENvbHVtblNldCB7XHJcblx0XHRjb25zdCByZXN1bHQgPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHR0aGlzLml0ZW1UeXBlLFxyXG5cdFx0XHRjb2x1bW5TZXRFeHBhbnNpb24ucmVxdWVzdC5tZXJnZWQsXHJcblx0XHRcdGNvbHVtblNldEV4cGFuc2lvbi5yZXNwb25zZVxyXG5cdFx0KTtcclxuXHJcblx0XHRyZXN1bHQucmVxdWVzdENvbHVtbnNUcnVlID0gdGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUgfHwgcmVxdWVzdENvbHVtbnNUcnVlO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRtZXJnZSAoY29sdW1uU2V0OiBDb2x1bW5TZXQpOiBDb2x1bW5TZXQge1xyXG5cdFx0cmV0dXJuIHRoaXMuZ2V0TWVyZ2VkQ29sdW1uU2V0KFxyXG5cdFx0XHR0aGlzLmdldENvbHVtblNldEV4cGFuc2lvbihjb2x1bW5TZXQucmVxdWVzdCwgY29sdW1uU2V0LnJlc3BvbnNlKSxcclxuXHRcdFx0Y29sdW1uU2V0LnJlcXVlc3RDb2x1bW5zVHJ1ZVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGV4cGFuZCAoXHJcblx0XHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMsXHJcblx0XHRyZXF1ZXN0Q29sdW1uc1RydWU6IGJvb2xlYW4sXHJcblx0XHRyZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwXHJcblx0KTogQ29sdW1uRXhwYW5zaW9uUmVzdWx0IHtcclxuXHRcdGNvbnN0IGNvbHVtblNldEV4cGFuc2lvbiA9IHRoaXMuZ2V0Q29sdW1uU2V0RXhwYW5zaW9uKHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xyXG5cclxuXHRcdHJldHVybiB7XHJcblx0XHRcdG1lcmdlZDogdGhpcy5nZXRNZXJnZWRDb2x1bW5TZXQoY29sdW1uU2V0RXhwYW5zaW9uLCByZXF1ZXN0Q29sdW1uc1RydWUpLFxyXG5cdFx0XHRkaWZmZXJlbmNlOiB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRcdHRoaXMuaXRlbVR5cGUsXHJcblx0XHRcdFx0Y29sdW1uU2V0RXhwYW5zaW9uLnJlcXVlc3QuZGlmZmVyZW5jZSxcclxuXHRcdFx0XHRjb2x1bW5TZXRFeHBhbnNpb24ucmVzcG9uc2UsIC8vIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBsb29rIHVwIHRoZSBwYXJlbnQgb2YgZGVyaXZlZCBjb2x1bW5zXHJcblx0XHRcdFx0ZmFsc2UsXHJcblx0XHRcdFx0ZmFsc2VcclxuXHRcdFx0KVxyXG5cdFx0fTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcblxyXG5pbXBvcnQgeyBDT0xVTU5fU0VQRVJBVE9SLCBSRU5ERVJfQVNfU0VQRVJBVE9SIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcclxuaW1wb3J0IHsgQXBpUmVxdWVzdENvbHVtbiwgQXBpUmVxdWVzdENvbHVtbnMsIFJlc3BvbnNlQ29sdW1uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgZXh0ZW5kLCBnZXRGaXJzdFByb3BlcnR5LCBpc0RlZmluZWQgfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbHVtblV0aWwge1xyXG5cdGNvbnN0cnVjdG9yICgpIHtcclxuXHR9XHJcblxyXG5cdGdldENvbHVtblBhdGggKGNvbHVtbnMsIHJlbmRlckFzKSB7XHJcblx0XHRsZXQgc2VwYXJhdG9yID0gJyc7XHJcblx0XHRsZXQgcmVzdWx0ID0gJyc7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG5cdFx0XHRyZXN1bHQgKz0gc2VwYXJhdG9yICsgY29sdW1uLmlkO1xyXG5cdFx0XHRzZXBhcmF0b3IgPSBDT0xVTU5fU0VQRVJBVE9SO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChyZW5kZXJBcyAhPT0gbnVsbClcclxuXHRcdFx0cmVzdWx0ICs9IFJFTkRFUl9BU19TRVBFUkFUT1IgKyByZW5kZXJBcztcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0RGF0ZUZvcm1hdE9wdGlvbnMgKGNvbHVtblR5cGUpIHtcclxuXHRcdGNvbnN0IG5vdyA9IG1vbWVudCgpO1xyXG5cclxuXHRcdGNvbnN0IGZvcm1hdHMgPSB7XHJcblx0XHRcdCdKLU0tWSc6IG5vdy5mb3JtYXQoJ0RELU1NLVlZWVknKSxcclxuXHRcdFx0J0otTSc6IG5vdy5mb3JtYXQoJ0RELU1NJyksXHJcblx0XHRcdCdqK0YrWSc6IG5vdy5mb3JtYXQoJ0QgTU1NIFlZWVknKSxcclxuXHRcdFx0J0QraitGK1knOiBub3cuZm9ybWF0KCdkZGRkIEQgTU1NIFlZWVknKSxcclxuXHRcdFx0J0YnOiBub3cuZm9ybWF0KCdNTU0nKSxcclxuXHRcdFx0J2YnOiBub3cuZm9ybWF0KCdNTU1NJyksXHJcblx0XHRcdCdEJzogbm93LmZvcm1hdCgnZGRkZCcpLFxyXG5cdFx0XHQnZCc6IG5vdy5mb3JtYXQoJ2RkZCcpXHJcblx0XHR9O1xyXG5cclxuXHRcdGlmIChjb2x1bW5UeXBlID09PSAnZGF0ZXRpbWUnKVxyXG5cdFx0XHRleHRlbmQoZm9ybWF0cywge1xyXG5cdFx0XHRcdCdKLU0tWStIOmknOiBub3cuZm9ybWF0KCdERC1NTS1ZWVlZIEhIOm1tJyksXHJcblx0XHRcdFx0J0otTStIOmknOiBub3cuZm9ybWF0KCdERC1NTSBISDptbScpLFxyXG5cdFx0XHRcdCdqK0YrWStIOmknOiBub3cuZm9ybWF0KCdERCBNTU1NIFkgSEg6bW0nKSxcclxuXHRcdFx0XHQnRCtqK0YrWStIOmknOiBub3cuZm9ybWF0KCdkZGRkIEREIE1NTSBZIEhIOm1tJyksXHJcblx0XHRcdFx0J0g6aSc6IG5vdy5mb3JtYXQoJ0hIOm1tJyksXHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdHJldHVybiBmb3JtYXRzO1xyXG5cdH1cclxuXHJcblx0aXNTdHJpbmdDb2x1bW4gKGNvbHVtbikge1xyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdlbWFpbCc6XHJcblx0XHRcdGNhc2UgJ3Bob25lJzpcclxuXHRcdFx0Y2FzZSAndXJsJzpcclxuXHRcdFx0Y2FzZSAndGV4dCc6XHJcblx0XHRcdGNhc2UgJ2xvbmd0ZXh0JzpcclxuXHRcdFx0Y2FzZSAndGV4dHJlcGxhY2UnOlxyXG5cdFx0XHRcdC8vIGNhc2UgJ2h0bWwnOiAvLyBUT0RPOiBzb3J0IG9uIGZpbHRlcmVkIHZhbHVlXHJcblx0XHRcdFx0Ly8gY2FzZSAnZW51bSc6XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aXNGbG9hdENvbHVtbiAoY29sdW1uKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ2RvdWJsZSc6IC8vIGZsb2F0aW5nIHBvaW50IHR5cGVzXHJcblx0XHRcdGNhc2UgJ3ZvbHVtZSc6XHJcblx0XHRcdGNhc2UgJ3dlaWdodCc6XHJcblx0XHRcdGNhc2UgJ2Rpc3RhbmNlJzpcclxuXHRcdFx0Y2FzZSAnZGltZW5zaW9uJzpcclxuXHRcdFx0Y2FzZSAncG93ZXInOlxyXG5cdFx0XHRjYXNlICdjdXJyZW50JzpcclxuXHRcdFx0Y2FzZSAncHJpY2UnOlxyXG5cdFx0XHRjYXNlICdwZXJjZW50YWdlJzpcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpc0ludENvbHVtbiAoY29sdW1uKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ2ludCc6IC8vIGludGVnZXIgdHlwZXNcclxuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcclxuXHRcdFx0Y2FzZSAncXVhbnRpdHknOlxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlzTnVtYmVyQ29sdW1uIChjb2x1bW4pIHtcclxuXHRcdHJldHVybiB0aGlzLmlzRmxvYXRDb2x1bW4oY29sdW1uKSB8fCB0aGlzLmlzSW50Q29sdW1uKGNvbHVtbik7XHJcblx0fVxyXG5cclxuXHRpc0N1c3RvbUNvbHVtbiAoY29sdW1uKSB7XHJcblx0XHRyZXR1cm4gY29sdW1uLmZpZWxkdHlwZSA9PT0gJ2N1c3RvbWZpZWxkJztcclxuXHR9XHJcblxyXG5cdGlzSXRlbUNvbHVtbiAoY29sdW1uLCBpbmNsdWRlSWQgPSB0cnVlKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ2lkJzpcclxuXHRcdFx0XHRyZXR1cm4gaW5jbHVkZUlkO1xyXG5cdFx0XHRjYXNlICdpdGVtJzpcclxuXHRcdFx0Y2FzZSAnY2hpbGQnOlxyXG5cdFx0XHRjYXNlICdzaWJsaW5nJzpcclxuXHRcdFx0Y2FzZSAnbGluayc6XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aXNEYXRlQ29sdW1uIChjb2x1bW4pIHtcclxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpc1JlbmRlcmVkQ29sdW1uIChjb2x1bW4pIHtcclxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlzRmlsdGVyZWRDb2x1bW4gKGNvbHVtbikge1xyXG5cdFx0Ly8gdWdseSBoYWNrIDotKFxyXG5cdFx0aWYgKGNvbHVtbi5pZCA9PT0gJ3N0YWZmZWwnKVxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHJcblx0XHRpZiAoY29sdW1uLmdlbmVyYXRvciAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ3ByaWNlJzpcclxuXHRcdFx0Y2FzZSAnYm9vbCc6XHJcblx0XHRcdGNhc2UgJ2VudW0nOlxyXG5cdFx0XHRjYXNlICdjb3VudHJ5JzpcclxuXHRcdFx0Y2FzZSAndm9sdW1lJzpcclxuXHRcdFx0Y2FzZSAnd2VpZ2h0JzpcclxuXHRcdFx0Y2FzZSAnZGlzdGFuY2UnOlxyXG5cdFx0XHRjYXNlICdkaW1lbnNpb24nOlxyXG5cdFx0XHRjYXNlICdxdWFudGl0eSc6XHJcblx0XHRcdGNhc2UgJ2VtYWlsJzpcclxuXHRcdFx0Y2FzZSAndXJsJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0Y2FzZSAndGltZSc6XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0Y2FzZSAnaHRtbCc6XHJcblx0XHRcdGNhc2UgJ3RleHRyZXBsYWNlJzpcclxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxyXG5cdFx0XHRjYXNlICdwZXJjZW50YWdlJzpcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpc0Zvcm1hdHRlZENvbHVtbiAoY29sdW1uKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdGNhc2UgJ3RpbWUnOlxyXG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XHJcblx0XHRcdGNhc2UgJ2NvbG9yJzpcclxuXHRcdFx0Y2FzZSAnanNvbic6XHJcblx0XHRcdGNhc2UgJ251bWJlcic6XHJcblx0XHRcdGNhc2UgJ2ZpbGVzaXplJzpcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpc1NlbGVjdGFibGVDb2x1bW4gKGNvbHVtbikge1xyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdibG9iJzpcclxuXHRcdFx0Y2FzZSAnY29vcmRpbmF0ZSc6XHJcblx0XHRcdGNhc2UgJ2ZvcmNldXBkYXRlJzpcclxuXHRcdFx0Y2FzZSAnaWQnOlxyXG5cdFx0XHRjYXNlICdqc29uJzpcclxuXHRcdFx0Y2FzZSAnb3JkZXInOlxyXG5cdFx0XHRjYXNlICdwYXJlbnRpZCc6XHJcblx0XHRcdGNhc2UgJ3BhcmVudHR5cGUnOlxyXG5cdFx0XHRjYXNlICdwYXNzd29yZCc6XHJcblx0XHRcdGNhc2UgJ3Rva2VuJzpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRoYXNMb2NhdGlvblByb3BlcnR5IChjb2x1bW4sIGxvY2F0aW9uKSB7XHJcblx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxyXG5cdFx0cmV0dXJuIChsb2NhdGlvbiAmIGNvbHVtbi5sb2NhdGlvbikgIT09IDA7XHJcblx0fVxyXG5cclxuXHRpc0VkaXRhYmxlQ29sdW1uIChjb2x1bW4pIHtcclxuXHRcdGlmIChjb2x1bW4ucmVhZE9ubHkpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ2RhdGUnOlxyXG5cdFx0XHRjYXNlICdkYXRldGltZSc6XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRpc1NlYXJjaGFibGVDb2x1bW4gKGNvbHVtbikge1xyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdlbWFpbCc6XHJcblx0XHRcdGNhc2UgJ3Bob25lJzpcclxuXHRcdFx0Y2FzZSAndGV4dCc6XHJcblx0XHRcdGNhc2UgJ2xvbmd0ZXh0JzpcclxuXHRcdFx0Y2FzZSAnaHRtbCc6XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Z2V0RGVmYXVsdFdlaWdodCAoY29sdW1uKSB7XHJcblx0XHQvLyBcdFx0XHRjb25zb2xlLmxvZygnZ2V0RGVmYXVsdFdlaWdodCcsIGNvbHVtbik7XHJcblxyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdkb3VibGUnOlxyXG5cdFx0XHRjYXNlICdwcmljZSc6XHJcblx0XHRcdGNhc2UgJ2Jvb2wnOlxyXG5cdFx0XHRjYXNlICdpbnQnOlxyXG5cdFx0XHRjYXNlICdwZXJjZW50YWdlJzpcclxuXHRcdFx0Y2FzZSAnY29sb3InOlxyXG5cdFx0XHRjYXNlICdudW1iZXInOlxyXG5cdFx0XHRjYXNlICdwb3dlcic6XHJcblx0XHRcdGNhc2UgJ2N1cnJlbnQnOlxyXG5cdFx0XHRcdHJldHVybiAwLjU7XHJcblxyXG5cdFx0XHRjYXNlICd1cmwnOlxyXG5cdFx0XHRjYXNlICdlbnVtJzpcclxuXHRcdFx0Y2FzZSAnZW1haWwnOlxyXG5cdFx0XHRjYXNlICd0ZXh0JzpcclxuXHRcdFx0Y2FzZSAnaXRlbSc6XHJcblx0XHRcdGNhc2UgJ2xpbmsnOlxyXG5cdFx0XHRcdHJldHVybiAxLjU7XHJcblxyXG5cdFx0XHRjYXNlICdsb25ndGV4dCc6XHJcblx0XHRcdGNhc2UgJ2h0bWwnOlxyXG5cdFx0XHRjYXNlICd0ZXh0cmVwbGFjZSc6XHJcblx0XHRcdFx0cmV0dXJuIDI7XHJcblxyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRjYXNlICd0aW1lJzpcclxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxyXG5cdFx0XHRcdHJldHVybiAxO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiAxO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Z2V0Q29tcGFyYXRvcnMgKGNvbHVtbikge1xyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdkaW1lbnNpb24nOlxyXG5cdFx0XHRjYXNlICd3ZWlnaHQnOlxyXG5cdFx0XHRjYXNlICdwcmljZSc6XHJcblx0XHRcdFx0cmV0dXJuIFsnPScsICc+JywgJzwnXTtcclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcclxuXHRcdFx0Y2FzZSAndGltZSc6XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0XHRyZXR1cm4gWyc+JywgJzwnXTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gWyc9JywgJyE9J107XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyByZXR1cm5zIHdoZXRoZXIgdGhlIGZpcnN0IGNvbHVtbiBzZXQgaXMgYSBzdWJzZXQgb2YgdGhlIHNlY29uZFxyXG5cdGlzQ29sdW1uU3Vic2V0IChmaXJzdCwgc2Vjb25kLCBzZWNvbmRUcnVlKSB7XHJcblx0XHRpZiAoZmlyc3QgPT09IHRydWUpIC8vID09PSBvcGVyYXRvciBuZWVkZWQgaGVyZVxyXG5cdFx0XHRyZXR1cm4gc2Vjb25kVHJ1ZTtcclxuXHJcblx0XHQvLyB3aGVuIHNlY29uZFRydWUgaXMgdGhlIGNhc2Ugd2UgbmVlZCB0byBjaGVjayBmb3IgZGVyaXZlZCBjb2x1bW5zXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBmaXJzdCkge1xyXG5cdFx0XHRpZiAoIXRoaXMuY29udGFpbnNDb2x1bW4oY29sdW1uLCBzZWNvbmQpKVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdGNvbnRhaW5zQ29sdW1uIChyZXF1ZXN0Q29sdW1uLCBkZXN0aW5hdGlvbikge1xyXG5cdFx0Y29uc3QgY29sdW1uID0gdGhpcy5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XHJcblx0XHRjb25zdCBjb2x1bW5JbmRleCA9IHRoaXMuZmluZENvbHVtbihjb2x1bW4uaWQsIGRlc3RpbmF0aW9uKTtcclxuXHJcblx0XHRpZiAoY29sdW1uSW5kZXggPT09IC0xKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0aWYgKGNvbHVtbi5jaGlsZHJlbi5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cclxuXHRcdGlmICh0eXBlb2YgZGVzdGluYXRpb25bY29sdW1uSW5kZXhdID09PSAnc3RyaW5nJylcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY2hpbGRDb2x1bW4gb2YgY29sdW1uLmNoaWxkcmVuKSB7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHQhdGhpcy5jb250YWluc0NvbHVtbihcclxuXHRcdFx0XHRcdGNoaWxkQ29sdW1uLFxyXG5cdFx0XHRcdFx0ZGVzdGluYXRpb25bY29sdW1uSW5kZXhdW2NvbHVtbi5pZF1cclxuXHRcdFx0XHQpXHJcblx0XHRcdClcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRyZXNwb25zZUNvbHVtbnNBdmFpbGFibGUgKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5NYXApIHtcclxuXHRcdGZvciAoY29uc3QgcmVxdWVzdENvbHVtbiBvZiByZXF1ZXN0Q29sdW1ucykge1xyXG5cdFx0XHRjb25zdCBwYXJzZWRDb2x1bW4gPSB0aGlzLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcclxuXHRcdFx0Y29uc3QgY2hpbGRyZW4gPSBwYXJzZWRDb2x1bW4uY2hpbGRyZW47XHJcblx0XHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1ucyA9IHJlc3BvbnNlQ29sdW1uTWFwW2l0ZW1UeXBlXTtcclxuXHRcdFx0bGV0IHJlc3BvbnNlQ29sdW1uO1xyXG5cclxuXHRcdFx0aWYgKHJlc3BvbnNlQ29sdW1ucyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRcdHJlc3BvbnNlQ29sdW1uID0gcmVzcG9uc2VDb2x1bW5zW3BhcnNlZENvbHVtbi5pZF07XHJcblxyXG5cdFx0XHRpZiAocmVzcG9uc2VDb2x1bW4gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0XHRpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMCAmJiAhdGhpcy5yZXNwb25zZUNvbHVtbnNBdmFpbGFibGUocmVzcG9uc2VDb2x1bW4uaXRlbVR5cGUsIGNoaWxkcmVuLCByZXNwb25zZUNvbHVtbk1hcCkpXHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0Y29weVJlcXVlc3RDb2x1bW5zIChjb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyk6IEFwaVJlcXVlc3RDb2x1bW5zIHtcclxuXHRcdGlmIChjb2x1bW5zID09PSB0cnVlKVxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHJcblx0XHRjb25zdCByZXN1bHQ6IEFwaVJlcXVlc3RDb2x1bW5bXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpXHJcblx0XHRcdHJlc3VsdC5wdXNoKHRoaXMuY29weVJlcXVlc3RDb2x1bW4oY29sdW1uKSk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGNvcHlSZXF1ZXN0Q29sdW1uIChyZXF1ZXN0Q29sdW1uOiBBcGlSZXF1ZXN0Q29sdW1uKTogQXBpUmVxdWVzdENvbHVtbiB7XHJcblx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcclxuXHJcblx0XHRpZiAoY29sdW1uLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuIGNvbHVtbi5pZDtcclxuXHJcblx0XHRjb25zdCBjaGlsZHJlbjogQXBpUmVxdWVzdENvbHVtbltdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjaGlsZENvbHVtbiBvZiBjb2x1bW4uY2hpbGRyZW4pXHJcblx0XHRcdGNoaWxkcmVuLnB1c2godGhpcy5jb3B5UmVxdWVzdENvbHVtbihjaGlsZENvbHVtbikpO1xyXG5cclxuXHRcdHJldHVybiB7W2NvbHVtbi5pZF06IGNoaWxkcmVufTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIERpZmZlcmVuY2U6IGNvbHVtbnMgdGhhdCBhcmUgaW4gc2Vjb25kLCBidXQgbm90IGluIGZpcnN0XHJcblx0ICogQHBhcmFtIHtBcnJheX0gZmlyc3RcclxuXHQgKiBAcGFyYW0ge0FycmF5fSBzZWNvbmRcclxuXHQgKiBAcmV0dXJucyB7T2JqZWN0fSBBbiBvYmplY3QgY29udGFpbmluZyAnbWVyZ2VkJyBhbmQgJ2RpZmZlcmVuY2UnIHByb3BlcnRpZXNcclxuXHQgKi9cclxuXHRtZXJnZVJlcXVlc3RDb2x1bW5zIChmaXJzdDogQXBpUmVxdWVzdENvbHVtbnMsIHNlY29uZDogQXBpUmVxdWVzdENvbHVtbnMpOiB7bWVyZ2VkOiBBcGlSZXF1ZXN0Q29sdW1ucywgZGlmZmVyZW5jZTogQXBpUmVxdWVzdENvbHVtbnN9IHtcclxuXHRcdGlmIChmaXJzdCA9PT0gdHJ1ZSkgLy8gPT09IG9wZXJhdG9yIG5lZWRlZCBoZXJlXHJcblx0XHRcdHJldHVybiB7bWVyZ2VkOiB0cnVlLCBkaWZmZXJlbmNlOiBbXX07XHJcblxyXG5cdFx0aWYgKHNlY29uZCA9PT0gdHJ1ZSlcclxuXHRcdFx0cmV0dXJuIHttZXJnZWQ6IHRydWUsIGRpZmZlcmVuY2U6IHRydWV9O1xyXG5cclxuXHRcdGNvbnN0IG1lcmdlZDogQXBpUmVxdWVzdENvbHVtbnMgPSB0aGlzLmNvcHlSZXF1ZXN0Q29sdW1ucyhmaXJzdCk7XHJcblx0XHRjb25zdCBkaWZmZXJlbmNlOiBBcGlSZXF1ZXN0Q29sdW1ucyA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIHNlY29uZCkge1xyXG5cdFx0XHRjb25zdCBhZGRlZENvbHVtbiA9IHRoaXMubWVyZ2VSZXF1ZXN0Q29sdW1uKGNvbHVtbiwgbWVyZ2VkKTtcclxuXHJcblx0XHRcdGlmIChhZGRlZENvbHVtbiAhPT0gbnVsbClcclxuXHRcdFx0XHRkaWZmZXJlbmNlLnB1c2goYWRkZWRDb2x1bW4pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB7bWVyZ2VkOiBtZXJnZWQsIGRpZmZlcmVuY2U6IGRpZmZlcmVuY2V9O1xyXG5cdH1cclxuXHJcblx0bWVyZ2VSZXF1ZXN0Q29sdW1uIChyZXF1ZXN0Q29sdW1uLCBkZXN0aW5hdGlvbikge1xyXG5cdFx0Y29uc3QgY29sdW1uID0gdGhpcy5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XHJcblx0XHRjb25zdCBjb2x1bW5JbmRleCA9IHRoaXMuZmluZENvbHVtbihjb2x1bW4uaWQsIGRlc3RpbmF0aW9uKTtcclxuXHJcblx0XHRpZiAoY29sdW1uSW5kZXggPT09IC0xKSB7XHJcblx0XHRcdGRlc3RpbmF0aW9uLnB1c2gocmVxdWVzdENvbHVtbik7XHJcblx0XHRcdHJldHVybiByZXF1ZXN0Q29sdW1uO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChjb2x1bW4uY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHJcblx0XHRpZiAodHlwZW9mIGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XSA9PT0gJ3N0cmluZycpIHtcclxuXHRcdFx0ZGVzdGluYXRpb25bY29sdW1uSW5kZXhdID0ge1xyXG5cdFx0XHRcdFtjb2x1bW4uaWRdOiBbXVxyXG5cdFx0XHR9O1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGFkZGVkQ29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMgPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNoaWxkQ29sdW1uIG9mIGNvbHVtbi5jaGlsZHJlbikge1xyXG5cdFx0XHRjb25zdCBhZGRlZENvbHVtbiA9IHRoaXMubWVyZ2VSZXF1ZXN0Q29sdW1uKFxyXG5cdFx0XHRcdGNoaWxkQ29sdW1uLFxyXG5cdFx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XVtjb2x1bW4uaWRdXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHRpZiAoYWRkZWRDb2x1bW4gIT09IG51bGwpXHJcblx0XHRcdFx0YWRkZWRDb2x1bW5zLnB1c2goYWRkZWRDb2x1bW4pO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChhZGRlZENvbHVtbnMubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRbY29sdW1uLmlkXTogYWRkZWRDb2x1bW5zXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0cGFyc2VSZXF1ZXN0Q29sdW1uIChyZXF1ZXN0Q29sdW1uKToge2lkOiBzdHJpbmcsIGNoaWxkcmVuOiBBcGlSZXF1ZXN0Q29sdW1uW119IHtcclxuXHRcdGNvbnN0IGlzTGVhZiA9IHR5cGVvZiByZXF1ZXN0Q29sdW1uID09PSAnc3RyaW5nJztcclxuXHRcdGNvbnN0IGNvbHVtbklkID0gaXNMZWFmID8gcmVxdWVzdENvbHVtbiA6IGdldEZpcnN0UHJvcGVydHkocmVxdWVzdENvbHVtbik7XHJcblxyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0aWQ6IGNvbHVtbklkLFxyXG5cdFx0XHRjaGlsZHJlbjogaXNMZWFmID8gW10gOiByZXF1ZXN0Q29sdW1uW2NvbHVtbklkXVxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIE1lcmdlcyB0d28gc2V0cyBvZiByZXNwb25zZSBjb2x1bW5zLlxyXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBmaXJzdFxyXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBzZWNvbmRcclxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBBbiBvYmplY3QgY29udGFpbmluZyBhICdtZXJnZWQnIGFuZCBhICdkaWZmZXJlbmNlJyBwcm9wZXJ0eS5cclxuXHQgKi9cclxuXHRtZXJnZVJlc3BvbnNlQ29sdW1ucyAoXHJcblx0XHRmaXJzdDogUmVzcG9uc2VDb2x1bW5NYXAsXHJcblx0XHRzZWNvbmQ6IFJlc3BvbnNlQ29sdW1uTWFwXHJcblx0KToge21lcmdlZDogUmVzcG9uc2VDb2x1bW5NYXAsIGRpZmZlcmVuY2U6IFJlc3BvbnNlQ29sdW1uTWFwfSB7XHJcblx0XHRjb25zdCBtZXJnZWQ6IFJlc3BvbnNlQ29sdW1uTWFwID0ge307XHJcblx0XHRjb25zdCBkaWZmZXJlbmNlOiBSZXNwb25zZUNvbHVtbk1hcCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gZmlyc3QpIHtcclxuXHRcdFx0aWYgKHNlY29uZFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdG1lcmdlZFtpdGVtVHlwZV0gPSBmaXJzdFtpdGVtVHlwZV07XHJcblxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb25zdCBtZXJnZVJlc3VsdCA9IHRoaXMubWVyZ2VSZXNwb25zZUNvbHVtbk1hcChcclxuXHRcdFx0XHRmaXJzdFtpdGVtVHlwZV0sXHJcblx0XHRcdFx0c2Vjb25kW2l0ZW1UeXBlXVxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdFx0bWVyZ2VkW2l0ZW1UeXBlXSA9IG1lcmdlUmVzdWx0Lm1lcmdlZDtcclxuXHRcdFx0ZGlmZmVyZW5jZVtpdGVtVHlwZV0gPSBtZXJnZVJlc3VsdC5kaWZmZXJlbmNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gc2Vjb25kKSB7XHJcblx0XHRcdGlmIChmaXJzdFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdG1lcmdlZFtpdGVtVHlwZV0gPSBzZWNvbmRbaXRlbVR5cGVdO1xyXG5cdFx0XHRcdGRpZmZlcmVuY2VbaXRlbVR5cGVdID0gc2Vjb25kW2l0ZW1UeXBlXTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB7bWVyZ2VkOiBtZXJnZWQsIGRpZmZlcmVuY2U6IGRpZmZlcmVuY2V9O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQHBhcmFtIHthcnJheX0gZmlyc3RcclxuXHQgKiBAcGFyYW0ge2FycmF5fSBzZWNvbmRcclxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBkaWZmZXJlbmNlOiB0aGUgY29sdW1ucyB0aGF0IGFyZSBpbiBzZWNvbmQsIGJ1dCBub3QgaW4gZmlyc3QuXHJcblx0ICovXHJcblx0bWVyZ2VSZXNwb25zZUNvbHVtbk1hcCAoZmlyc3QsIHNlY29uZCkge1xyXG5cdFx0Y29uc3QgbWVyZ2VkID0ge307XHJcblx0XHRjb25zdCBkaWZmZXJlbmNlID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiBmaXJzdClcclxuXHRcdFx0bWVyZ2VkW2NvbHVtbklkXSA9IGZpcnN0W2NvbHVtbklkXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHNlY29uZCkge1xyXG5cdFx0XHRpZiAoaXNEZWZpbmVkKGZpcnN0W2NvbHVtbklkXSkpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRtZXJnZWRbY29sdW1uSWRdID0gc2Vjb25kW2NvbHVtbklkXTtcclxuXHRcdFx0ZGlmZmVyZW5jZVtjb2x1bW5JZF0gPSBzZWNvbmRbY29sdW1uSWRdO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB7bWVyZ2VkOiBtZXJnZWQsIGRpZmZlcmVuY2U6IGRpZmZlcmVuY2V9O1xyXG5cdH1cclxuXHJcblx0aXNMb2NhbENvbHVtbklkIChjb2x1bW5JZCkge1xyXG5cdFx0cmV0dXJuIGNvbHVtbklkLnN1YnN0cmluZygwLCAyKSA9PT0gJ19fJztcclxuXHR9XHJcblxyXG5cdHByb2Nlc3NDb25maWdDb2x1bW5zIChjb2x1bW5zKSB7XHJcblx0XHRjb25zdCByZXF1ZXN0ID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG5cdFx0XHRpZiAodGhpcy5pc0xvY2FsQ29sdW1uSWQoY29sdW1uKSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdHRoaXMucHJvY2Vzc0NvbmZpZ0NvbHVtbih0aGlzLnBhcnNlQ29uZmlnQ29sdW1uKGNvbHVtbiksIHJlcXVlc3QpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXF1ZXN0O1xyXG5cdH1cclxuXHJcblx0cGFyc2VDb25maWdDb2x1bW4gKGNvbHVtbikge1xyXG5cdFx0cmV0dXJuIGNvbHVtbi5zcGxpdChSRU5ERVJfQVNfU0VQRVJBVE9SKVswXS5zcGxpdChDT0xVTU5fU0VQRVJBVE9SKTtcclxuXHR9XHJcblxyXG5cdHByb2Nlc3NDb25maWdDb2x1bW4gKGNvbHVtbkFycmF5LCBkZXN0aW5hdGlvbikge1xyXG5cdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW5BcnJheVswXTtcclxuXHRcdGNvbnN0IGlzTGVhZiA9IGNvbHVtbkFycmF5Lmxlbmd0aCA9PT0gMTtcclxuXHJcblx0XHRpZiAoaXNMZWFmKSB7XHJcblx0XHRcdGlmIChkZXN0aW5hdGlvbi5pbmRleE9mKGNvbHVtbklkKSA9PT0gLTEpXHJcblx0XHRcdFx0ZGVzdGluYXRpb24ucHVzaChjb2x1bW5JZCk7XHJcblxyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0bGV0IGNvbHVtbkluZGV4ID0gdGhpcy5maW5kQ29sdW1uT2JqZWN0KGNvbHVtbklkLCBkZXN0aW5hdGlvbik7XHJcblxyXG5cdFx0aWYgKGNvbHVtbkluZGV4ID09PSAtMSkge1xyXG5cdFx0XHRjb2x1bW5JbmRleCA9IGRlc3RpbmF0aW9uLnB1c2goe1xyXG5cdFx0XHRcdFtjb2x1bW5JZF06IFtdXHJcblx0XHRcdH0pIC0gMTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLnByb2Nlc3NDb25maWdDb2x1bW4oXHJcblx0XHRcdGNvbHVtbkFycmF5LnNsaWNlKDEpLFxyXG5cdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5JbmRleF1bY29sdW1uSWRdXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0ZmluZENvbHVtbk9iamVjdCAoY29sdW1uSWQsIGFycmF5KSB7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGlmIChnZXRGaXJzdFByb3BlcnR5KGFycmF5W2ldKSA9PT0gY29sdW1uSWQpXHJcblx0XHRcdFx0cmV0dXJuIGk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIC0xO1xyXG5cdH1cclxuXHJcblx0ZmluZENvbHVtbiAoY29sdW1uSWQsIGFycmF5KSB7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtbiA9IGFycmF5W2ldO1xyXG5cclxuXHRcdFx0aWYgKHR5cGVvZiBjb2x1bW4gPT09ICdzdHJpbmcnKSB7XHJcblx0XHRcdFx0aWYgKGNvbHVtbiA9PT0gY29sdW1uSWQpXHJcblx0XHRcdFx0XHRyZXR1cm4gaTtcclxuXHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChnZXRGaXJzdFByb3BlcnR5KGNvbHVtbikgPT09IGNvbHVtbklkKVxyXG5cdFx0XHRcdHJldHVybiBpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiAtMTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlLCBDb2xsZWN0aW9uSGFuZGxlciwgQ3JlYXRlQ29tcGlsYXRpb24sIEtleVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LCBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IENyZWF0ZVJlcXVlc3RFbnRyeSwgQ3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCwgSXRlbUVudHJ5TWFwLCBJdGVtSWQsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgZ2V0UGF0aCB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ3JlYXRlUmVxdWVzdCB7XHJcblx0cmVxdWVzdHM6IENyZWF0ZVJlcXVlc3RFbnRyeVtdID0gW107XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnk6IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcclxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcclxuXHRcdHByaXZhdGUgcmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb21waWxhdGlvbjogQ3JlYXRlQ29tcGlsYXRpb24sXHJcblx0XHRwcml2YXRlIGxvY2FsQ29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGUsXHJcblx0XHRwcml2YXRlIHBhcmFtZXRlck1hcDogQ3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCxcclxuXHRcdHByaXZhdGUgYnJlYWt1cEJ5UGFyZW50ID0gZmFsc2VcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdGZpbmFsaXplUmVxdWVzdCAocmVxdWVzdFJlc291cmNlOiBDcmVhdGVSZXF1ZXN0RW50cnkpIHtcclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyaWVzID0gcmVxdWVzdFJlc291cmNlLmNvbGxlY3Rpb25zLmdldENvbGxlY3Rpb25zV2l0aEZpdHRpbmdJdGVtcygpO1xyXG5cdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gcmVxdWVzdFJlc291cmNlLmNvbHVtbnM7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgY29sbGVjdGlvbkVudHJpZXMpXHJcblx0XHRcdGNvbHVtbkV4cGFuc2lvbi5leHBhbmQoY29sbGVjdGlvbkVudHJ5LmNvbHVtbnMpO1xyXG5cclxuXHRcdHJlcXVlc3RSZXNvdXJjZS5yZXF1ZXN0LmNvbHVtbnMgPSBjb2x1bW5FeHBhbnNpb24uZ2V0KCk7XHJcblxyXG5cdFx0cmV0dXJuIHJlcXVlc3RSZXNvdXJjZTtcclxuXHR9XHJcblxyXG5cdHNldFJlcXVlc3RQYXJlbnQgKHBhcmVudFR5cGU6IEl0ZW1UeXBlLCByZXF1ZXN0RW50cnk6IENyZWF0ZVJlcXVlc3RFbnRyeSkge1xyXG5cdFx0Y29uc3QgcmVxdWVzdCA9IHJlcXVlc3RFbnRyeS5yZXF1ZXN0O1xyXG5cclxuXHRcdGlmIChwYXJlbnRUeXBlID09PSAnVm9pZCcpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRyZXF1ZXN0LnBhcmVudFR5cGUgPSBwYXJlbnRUeXBlO1xyXG5cdFx0cmVxdWVzdC5wYXJlbnRJZCA9IHt9O1xyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0cnVuICgpIHtcclxuXHRcdGNvbnN0IGNvbXBpbGF0aW9uID0gdGhpcy5jb21waWxhdGlvbjtcclxuXHJcblx0XHRpZiAodGhpcy5icmVha3VwQnlQYXJlbnQpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBwYXJlbnRUeXBlIGluIGNvbXBpbGF0aW9uKSB7XHJcblx0XHRcdFx0Y29uc3QgcGFyZW50TWFwID0gY29tcGlsYXRpb25bcGFyZW50VHlwZV07XHJcblxyXG5cdFx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gcGFyZW50TWFwKSB7XHJcblx0XHRcdFx0XHRpZiAodGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZChwYXJlbnRJZCkpXHJcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0XHRcdGNvbnN0IHJlcXVlc3RSZXNvdXJjZSA9IHRoaXMuaW5pdGlhbGl6ZVJlcXVlc3QoKTtcclxuXHJcblx0XHRcdFx0XHR0aGlzLmV4dGVuZFJlcXVlc3QoXHJcblx0XHRcdFx0XHRcdHBhcmVudE1hcFtwYXJlbnRJZF0sXHJcblx0XHRcdFx0XHRcdHRoaXMuc2V0UmVxdWVzdFBhcmVudChwYXJlbnRUeXBlLCByZXF1ZXN0UmVzb3VyY2UpID8gK3BhcmVudElkIDogbnVsbCxcclxuXHRcdFx0XHRcdFx0cmVxdWVzdFJlc291cmNlXHJcblx0XHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRcdHRoaXMucmVxdWVzdHMucHVzaCh0aGlzLmZpbmFsaXplUmVxdWVzdChyZXF1ZXN0UmVzb3VyY2UpKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGZvciAoY29uc3QgcGFyZW50VHlwZSBpbiBjb21waWxhdGlvbikge1xyXG5cdFx0XHRcdGNvbnN0IHBhcmVudE1hcCA9IGNvbXBpbGF0aW9uW3BhcmVudFR5cGVdO1xyXG5cdFx0XHRcdGNvbnN0IHJlcXVlc3RSZXNvdXJjZSA9IHRoaXMuaW5pdGlhbGl6ZVJlcXVlc3QoKTtcclxuXHRcdFx0XHRjb25zdCBoYXNQYXJlbnQgPSB0aGlzLnNldFJlcXVlc3RQYXJlbnQocGFyZW50VHlwZSwgcmVxdWVzdFJlc291cmNlKTtcclxuXHJcblx0XHRcdFx0bGV0IHZhbGlkUmVxdWVzdCA9IGZhbHNlO1xyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHBhcmVudE1hcCkge1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQocGFyZW50SWQpKVxyXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdFx0XHR0aGlzLmV4dGVuZFJlcXVlc3QoXHJcblx0XHRcdFx0XHRcdHBhcmVudE1hcFtwYXJlbnRJZF0sXHJcblx0XHRcdFx0XHRcdGhhc1BhcmVudCA/ICtwYXJlbnRJZCA6IG51bGwsXHJcblx0XHRcdFx0XHRcdHJlcXVlc3RSZXNvdXJjZVxyXG5cdFx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0XHR2YWxpZFJlcXVlc3QgPSB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKHZhbGlkUmVxdWVzdClcclxuXHRcdFx0XHRcdHRoaXMucmVxdWVzdHMucHVzaCh0aGlzLmZpbmFsaXplUmVxdWVzdChyZXF1ZXN0UmVzb3VyY2UpKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLnJlcXVlc3RzO1xyXG5cdH1cclxuXHJcblx0aW5pdGlhbGl6ZVJlcXVlc3QgKCk6IENyZWF0ZVJlcXVlc3RFbnRyeSB7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRyZXF1ZXN0OiB7XHJcblx0XHRcdFx0cmVxdWVzdFR5cGU6ICdjcmVhdGUnLFxyXG5cdFx0XHRcdGl0ZW1zOiB7fSxcclxuXHRcdFx0XHRjb2x1bW5zOiB7fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRjb2x1bW5zOiB0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdCgpLFxyXG5cdFx0XHRpdGVtczoge30sXHJcblx0XHRcdGNvbGxlY3Rpb25zOiB0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdFx0W3RoaXMubG9jYWxDb2xsZWN0aW9uQ2FjaGUsIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZW50cmllc10sXHJcblx0XHRcdFx0dHJ1ZSxcclxuXHRcdFx0XHRmYWxzZVxyXG5cdFx0XHQpXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBleHRlbmRSZXF1ZXN0IChpdGVtRW50cmllczogSXRlbUVudHJ5TWFwLCByZXF1ZXN0UGFyZW50SWQ6IEl0ZW1JZCB8IG51bGwsIGRlc3RpbmF0aW9uOiBDcmVhdGVSZXF1ZXN0RW50cnkpIHtcclxuXHRcdGNvbnN0IHJlcXVlc3QgPSBkZXN0aW5hdGlvbi5yZXF1ZXN0O1xyXG5cdFx0Y29uc3QgaXRlbUVudHJ5TWFwID0gZGVzdGluYXRpb24uaXRlbXM7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRpZiAocmVxdWVzdC5pdGVtVHlwZSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdHJlcXVlc3QuaXRlbVR5cGUgPSBpdGVtVHlwZTtcclxuXHJcblx0XHRcdGlmIChpdGVtRW50cnlNYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRpdGVtRW50cnlNYXBbaXRlbVR5cGVdID0ge307XHJcblx0XHRcdFx0cmVxdWVzdC5pdGVtc1tpdGVtVHlwZV0gPSB7fTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbUVudHJpZXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gaXRlbUVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF07XHJcblx0XHRcdFx0Y29uc3QgY2hpbGRFbnRyaWVzID0gZ2V0UGF0aCh0aGlzLmNvbXBpbGF0aW9uLCBbaXRlbVR5cGUsIGl0ZW1JZF0pO1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW1SZXF1ZXN0OiBhbnkgPSByZXF1ZXN0Lml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdID0ge307XHJcblx0XHRcdFx0Y29uc3QgcGFyYW1ldGVycyA9IGdldFBhdGgodGhpcy5wYXJhbWV0ZXJNYXAsIFtpdGVtVHlwZSwgaXRlbUlkXSk7XHJcblxyXG5cdFx0XHRcdGxldCBsaW5rcztcclxuXHJcblx0XHRcdFx0aWYgKHJlcXVlc3RQYXJlbnRJZCAhPT0gbnVsbClcclxuXHRcdFx0XHRcdCg8e1tpdGVtSWQ6IHN0cmluZ106IEl0ZW1JZH0+IHJlcXVlc3QucGFyZW50SWQpW2l0ZW1JZF0gPSByZXF1ZXN0UGFyZW50SWQ7XHJcblxyXG5cdFx0XHRcdGRlc3RpbmF0aW9uLmNvbHVtbnMuZXhwYW5kKGl0ZW1FbnRyeS5jb2x1bW5zKTtcclxuXHRcdFx0XHRkZXN0aW5hdGlvbi5jb2xsZWN0aW9ucy5leHBhbmQoaXRlbUVudHJ5KTtcclxuXHJcblx0XHRcdFx0aXRlbUVudHJ5TWFwW2l0ZW1UeXBlXVtpdGVtSWRdID0gaXRlbUVudHJ5O1xyXG5cclxuXHRcdFx0XHRpdGVtUmVxdWVzdC52YWx1ZXMgPSBpdGVtRW50cnkuZm9ybWF0UmVxdWVzdCgpO1xyXG5cdFx0XHRcdGl0ZW1SZXF1ZXN0LnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzO1xyXG5cclxuXHRcdFx0XHRpZiAoY2hpbGRFbnRyaWVzID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdFx0bGlua3MgPSBpdGVtUmVxdWVzdC5saW5rcyA9IHt9O1xyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IGNoaWxkVHlwZSBpbiBjaGlsZEVudHJpZXMpIHtcclxuXHRcdFx0XHRcdGxpbmtzW2NoaWxkVHlwZV0gPSBbXTtcclxuXHJcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGNoaWxkSWQgaW4gY2hpbGRFbnRyaWVzW2NoaWxkVHlwZV0pXHJcblx0XHRcdFx0XHRcdGxpbmtzW2NoaWxkVHlwZV0ucHVzaChjaGlsZElkKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHRoaXMuZXh0ZW5kUmVxdWVzdChjaGlsZEVudHJpZXMsIG51bGwsIGRlc3RpbmF0aW9uKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2x1bW5FeHBhbnNpb24sIENvbHVtbkluZm8sIENvbHVtblNldCwgaW5BcnJheSwgSXRlbUNhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uUmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlLCBUZW1wbGF0ZSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7XHJcblx0QXBpUmVxdWVzdENvbHVtbnMsIEVudHJ5UGFyZW50TnVsbCwgRmllbGRNYXAsIEl0ZW1JZCwgSXRlbUlkQ29udmVyc2lvbk1hcCwgSXRlbVR5cGUsIFByb21pc2VJbnRlcmZhY2VcclxufSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5sZXQgY3VycmVudElkID0gMDtcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRW50cnkge1xyXG5cdGlkOiBudW1iZXIgPSBjdXJyZW50SWQrKztcclxuXHRxdWVyeTogYW55O1xyXG5cdGNvbHVtbnM6IENvbHVtblNldDtcclxuXHR0ZW1wbGF0ZUNvbHVtbnM6IENvbHVtblNldCB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCA9IG51bGw7XHJcblxyXG5cdGluaXRpYWw6IEl0ZW1FbnRyeVtdID0gW107XHJcblx0aXRlbXM6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdHJlc291cmNlczogQ29sbGVjdGlvblJlc291cmNlW10gPSBbXTtcclxuXHRkZWZlcnJlZDogYW55O1xyXG5cdHByb21pc2U6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvbkVudHJ5PjtcclxuXHRyZWxvYWRRdWV1ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0aGFzRWRpdFJlc291cmNlcyA9IGZhbHNlO1xyXG5cdGhhc0l0ZW1FZGl0UmVzb3VyY2VzID0gZmFsc2U7XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgZmFjdG9yeTogQ29sbGVjdGlvbkVudHJ5RmFjdG9yeSxcclxuXHRcdHB1YmxpYyBpdGVtVHlwZTogSXRlbVR5cGUsXHJcblx0XHRwdWJsaWMgb3B0aW9uczogYW55XHJcblx0KSB7XHJcblx0XHR0aGlzLnBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xyXG5cdFx0dGhpcy5xdWVyeSA9IGZhY3RvcnkuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jcmVhdGVRdWVyeShvcHRpb25zKTtcclxuXHRcdHRoaXMuY29sdW1ucyA9IGZhY3RvcnkuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3RTdHViKGl0ZW1UeXBlLCBvcHRpb25zLmNvbHVtbnMpO1xyXG5cclxuXHRcdHRoaXMuZGVmZXIoKTtcclxuXHR9XHJcblxyXG5cdGRlZmVyICgpOiB0aGlzIHtcclxuXHRcdGlmICh0aGlzLmlzRGVmZXJyZWQoKSlcclxuXHRcdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdFx0dGhpcy5kZWZlcnJlZCA9IHRoaXMuZmFjdG9yeS5wcm9taXNlU2VydmljZS5kZWZlcigpO1xyXG5cdFx0dGhpcy5wcm9taXNlID0gdGhpcy5kZWZlcnJlZC5wcm9taXNlO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0aXNEZWZlcnJlZCAoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlICE9PSB1bmRlZmluZWQ7XHJcblx0fVxyXG5cclxuXHRfcmVzb2x2ZSAoKTogdGhpcyB7XHJcblx0XHRjb25zdCBkZWZlcnJlZCA9IHRoaXMuZGVmZXJyZWQ7XHJcblxyXG5cdFx0ZGVsZXRlIHRoaXMuZGVmZXJyZWQ7XHJcblx0XHRkZWxldGUgdGhpcy5wcm9taXNlO1xyXG5cclxuXHRcdGRlZmVycmVkLnJlc29sdmUodGhpcyk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRyZXNvbHZlIChpdGVtRW50cnlDb21wb3VuZDoge2NvbHVtbnM6IENvbHVtblNldCwgaW5pdGlhbDogSXRlbUVudHJ5W10sIG1vZGlmaWVkPzogSXRlbUVudHJ5W119KTogdGhpcyB7XHJcblx0XHRjb25zdCB7aW5pdGlhbCwgbW9kaWZpZWR9ID0gaXRlbUVudHJ5Q29tcG91bmQ7XHJcblxyXG5cdFx0dGhpcy5jb2x1bW5zID0gaXRlbUVudHJ5Q29tcG91bmQuY29sdW1ucztcclxuXHRcdHRoaXMuaW5pdGlhbCA9IGluaXRpYWw7XHJcblx0XHR0aGlzLml0ZW1zID0gbW9kaWZpZWQgIT09IHVuZGVmaW5lZCA/IG1vZGlmaWVkIDogaW5pdGlhbC5zbGljZSgpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLl9yZXNvbHZlKCk7XHJcblx0fVxyXG5cclxuXHRpc0xvY2FsICgpOiBib29sZWFuIHtcclxuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xyXG5cclxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5mYWN0b3J5LmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudC5pdGVtSWQpO1xyXG5cdH1cclxuXHJcblx0bWF0Y2hQYXJlbnQgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQpOiBib29sZWFuIHtcclxuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xyXG5cclxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHQvLyA9PSB0byBjb21wYXJlIGl0ZW1JZHNcclxuXHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXHJcblx0XHRyZXR1cm4gcGFyZW50Lml0ZW1UeXBlID09PSBpdGVtVHlwZSAmJiBwYXJlbnQuaXRlbUlkID09IGl0ZW1JZDtcclxuXHR9XHJcblxyXG5cdGZvckVhY2ggKGNhbGxiYWNrOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IHZvaWQpOiB2b2lkIHtcclxuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcclxuXHJcblx0XHRmb3IgKGNvbnN0IG1vZCBvZiBtb2RpZmllZClcclxuXHRcdFx0Y2FsbGJhY2sobW9kKTtcclxuXHR9XHJcblxyXG5cdGdldEl0ZW1CeUlkIChpdGVtSWQpOiBJdGVtRW50cnkgfCB1bmRlZmluZWQge1xyXG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIG1vZGlmaWVkKSB7XHJcblx0XHRcdGlmIChpdGVtRW50cnkuaXRlbUlkID09PSBpdGVtSWQpXHJcblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdH1cclxuXHJcblx0Z2V0SWRBcnJheSAoYWNjdW11bGF0b3I6IEl0ZW1JZFtdID0gW10pOiBJdGVtSWRbXSB7XHJcblx0XHRyZXR1cm4gdGhpcy5mYWN0b3J5LmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuZ2V0SWRBcnJheSh0aGlzLml0ZW1zLCBhY2N1bXVsYXRvcik7XHJcblx0fVxyXG5cclxuXHQvLyBzaHVsZCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggcmVzb2x2ZURlcml2ZWRcclxuXHRjcmVhdGVJdGVtcyAodmFsdWVzQXJyYXk6IEZpZWxkTWFwW10pOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1FbnRyeVtdPiB7XHJcblx0XHRjb25zdCBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5O1xyXG5cdFx0Y29uc3QgY29sdW1uU2V0ID0gdGhpcy5jb2x1bW5zO1xyXG5cdFx0bGV0IHRlbXBsYXRlOiBUZW1wbGF0ZTtcclxuXHJcblx0XHRyZXR1cm4gZmFjdG9yeS5pdGVtSGFuZGxlci5mZXRjaFRlbXBsYXRlKHRoaXMuaXRlbVR5cGUpLnRoZW4oXHJcblx0XHRcdCh0ZW1wbGF0ZUluc3RhbmNlOiBUZW1wbGF0ZSkgPT4ge1xyXG5cdFx0XHRcdHRlbXBsYXRlID0gdGVtcGxhdGVJbnN0YW5jZTtcclxuXHJcblx0XHRcdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdFx0XHRpZiAodGhpcy50ZW1wbGF0ZUNvbHVtbnMgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHRoaXMudGVtcGxhdGVDb2x1bW5zID0gdGVtcGxhdGUuY29sdW1ucy5tZXJnZShjb2x1bW5TZXQpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCB2YWx1ZXMgb2YgdmFsdWVzQXJyYXkpIHtcclxuXHRcdFx0XHRcdHJlc3VsdC5wdXNoKFxyXG5cdFx0XHRcdFx0XHRmYWN0b3J5Lml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0TG9jYWwoXHJcblx0XHRcdFx0XHRcdFx0ZmFjdG9yeS5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKSxcclxuXHRcdFx0XHRcdFx0XHR0ZW1wbGF0ZSxcclxuXHRcdFx0XHRcdFx0XHR2YWx1ZXMsXHJcblx0XHRcdFx0XHRcdFx0e30sXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5wYXJlbnQsXHJcblx0XHRcdFx0XHRcdFx0dGhpcy50ZW1wbGF0ZUNvbHVtbnNcclxuXHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldHVybiByZXN1bHQ7XHJcblxyXG5cdFx0XHR9LFxyXG5cdFx0XHRmYWN0b3J5LmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRyZXNvbHZlRGVyaXZlZFZhbHVlcyAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCBsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlKTogUHJvbWlzZUludGVyZmFjZTxJdGVtRW50cnlbXT4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuZmFjdG9yeS5pdGVtSGFuZGxlci5yZXNvbHZlRGVyaXZlZFZhbHVlcyhpdGVtRW50cmllcywgdGhpcy5jb2x1bW5zLnJvb3QsIGxvY2FsSXRlbUNhY2hlKTtcclxuXHR9XHJcblxyXG5cdGFkZEl0ZW1zIChcclxuXHRcdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcclxuXHRcdHJlc3VsdFJlc291cmNlPzogQ29sbGVjdGlvblJlc291cmNlIHwgbnVsbCxcclxuXHRcdHVwZGF0ZUluaXRpYWw6IGJvb2xlYW4gPSBmYWxzZSxcclxuXHRcdGNhbGxPbkFkZD86IGJvb2xlYW4sXHJcblx0XHRjYWxsT25BY3RpdmF0ZT86IGJvb2xlYW5cclxuXHQpOiBJdGVtUmVzb3VyY2VbXSB8IG51bGwge1xyXG5cdFx0Ly8gbG9jYWwgZW50cnkgbWlnaHQgYmUgYWRkZWQgbXVsdGlwbGUgdGltZXMgKGV4dGVuZD8pXHJcblx0XHRpZiAoaXRlbUVudHJpZXMubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gW107XHJcblxyXG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xyXG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XHJcblx0XHRjb25zdCBwYXJlbnRDb2x1bW4gPSB0aGlzLmNvbHVtbnMubGluaztcclxuXHRcdGNvbnN0IGVudHJpZXNBZGRlZFRvSW5pdGlhbDogSXRlbUVudHJ5W10gPSBbXTtcclxuXHRcdGNvbnN0IGVudHJpZXNBZGRlZFRvTW9kaWZpZWQ6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdFx0aWYgKHVwZGF0ZUluaXRpYWwpIHtcclxuXHRcdFx0Y29uc3QgaW5pdGlhbCA9IHRoaXMuaW5pdGlhbDtcclxuXHJcblx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdFx0Ly8gd2hlbiBzYXZpbmcsIGl0ZW1zIHRoYXQgbWlnaHQgYWxyZWFkeSBiZSBpbiBtb2RpZmllZCBhcmUgYWRkZWQgdG8gaW5pdGlhbFxyXG5cdFx0XHRcdGlmIChpbml0aWFsLmluZGV4T2YoaXRlbUVudHJ5KSA9PT0gLTEpIHtcclxuXHRcdFx0XHRcdGluaXRpYWwucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0XHRcdFx0ZW50cmllc0FkZGVkVG9Jbml0aWFsLnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRpZiAobW9kaWZpZWQuaW5kZXhPZihpdGVtRW50cnkpID09PSAtMSkge1xyXG5cdFx0XHRcdGlmIChwYXJlbnQgIT09IG51bGwpIHtcclxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5wYXJlbnQgPSBwYXJlbnQ7XHJcblxyXG5cdFx0XHRcdFx0aWYgKHBhcmVudENvbHVtbiAhPT0gbnVsbCAmJiBpdGVtRW50cnkubW9kaWZpZWQgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5Lm1vZGlmaWVkW3BhcmVudENvbHVtbi5pZF0gPSBwYXJlbnQuaXRlbUlkO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0bW9kaWZpZWQucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0XHRcdGVudHJpZXNBZGRlZFRvTW9kaWZpZWQucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuaGFuZGxlQWRkZWRJdGVtQ2FsbGJhY2tzKFxyXG5cdFx0XHRlbnRyaWVzQWRkZWRUb0luaXRpYWwsXHJcblx0XHRcdGVudHJpZXNBZGRlZFRvTW9kaWZpZWQsXHJcblx0XHRcdHJlc3VsdFJlc291cmNlLFxyXG5cdFx0XHRjYWxsT25BZGQsXHJcblx0XHRcdGNhbGxPbkFjdGl2YXRlXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBoYW5kbGVBZGRlZEl0ZW1DYWxsYmFja3MgKFxyXG5cdFx0ZW50cmllc0FkZGVkVG9Jbml0aWFsOiBJdGVtRW50cnlbXSxcclxuXHRcdGVudHJpZXNBZGRlZFRvTW9kaWZpZWQ6IEl0ZW1FbnRyeVtdLFxyXG5cdFx0cmVzdWx0UmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSB8IG51bGwgPSBudWxsLFxyXG5cdFx0Y2FsbE9uQWRkOiBib29sZWFuID0gdHJ1ZSxcclxuXHRcdGNhbGxPbkFjdGl2YXRlOiBib29sZWFuID0gdHJ1ZVxyXG5cdCk6IEl0ZW1SZXNvdXJjZVtdIHwgbnVsbCB7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7XHJcblxyXG5cdFx0aWYgKGVudHJpZXNBZGRlZFRvSW5pdGlhbC5sZW5ndGggPiAwKSB7XHJcblx0XHRcdGZvciAoY29uc3QgY29sbGVjdGlvblJlc291cmNlIG9mIGNvbGxlY3Rpb25SZXNvdXJjZXMpXHJcblx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLm9wdGlvbnMub25BZGRJbml0aWFsKGVudHJpZXNBZGRlZFRvSW5pdGlhbCwgdGhpcyk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGVudHJpZXNBZGRlZFRvTW9kaWZpZWQubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0UmVzb3VyY2UgPT09IG51bGwgPyBudWxsIDogW107XHJcblxyXG5cdFx0aWYgKGNhbGxPbkFjdGl2YXRlICYmIGNvbGxlY3Rpb25SZXNvdXJjZXMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRjb25zdCBsb2NhbENhY2hlID0gY29sbGVjdGlvblJlc291cmNlc1swXS5sb2NhbENhY2hlO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBhZGRlZEl0ZW1FbnRyeSBvZiBlbnRyaWVzQWRkZWRUb01vZGlmaWVkKVxyXG5cdFx0XHRcdGxvY2FsQ2FjaGUub25BY3RpdmF0ZUl0ZW0oYWRkZWRJdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGxldCByZXN1bHQ6IEl0ZW1SZXNvdXJjZVtdIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2Ugb2YgY29sbGVjdGlvblJlc291cmNlcykge1xyXG5cdFx0XHRjb25zdCBhZGRlZFJlc291cmNlcyA9IGNvbGxlY3Rpb25SZXNvdXJjZS5hZGRJdGVtUmVzb3VyY2VzKGVudHJpZXNBZGRlZFRvTW9kaWZpZWQpO1xyXG5cclxuXHRcdFx0aWYgKGNvbGxlY3Rpb25SZXNvdXJjZSA9PT0gcmVzdWx0UmVzb3VyY2UpIHtcclxuXHRcdFx0XHRyZXN1bHQgPSBhZGRlZFJlc291cmNlcztcclxuXHJcblx0XHRcdFx0aWYgKGNhbGxPbkFkZClcclxuXHRcdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5jYWxsT25BZGQoYWRkZWRSZXNvdXJjZXMpO1xyXG5cdFx0XHR9IGVsc2VcclxuXHRcdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2UuY2FsbE9uQWRkKGFkZGVkUmVzb3VyY2VzKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0cmVtb3ZlSXRlbXMgKFxyXG5cdFx0aWRBcnJheTogSXRlbUlkW10sXHJcblx0XHRyZXN1bHRSZXNvdXJjZT86IENvbGxlY3Rpb25SZXNvdXJjZSB8IG51bGwsXHJcblx0XHR1cGRhdGVJbml0aWFsPzogYm9vbGVhbixcclxuXHRcdGNhbGxPblJlbW92ZT86IGJvb2xlYW5cclxuXHQpOiBJdGVtUmVzb3VyY2VbXSB8IG51bGwge1xyXG5cdFx0aWYgKGlkQXJyYXkubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gW107XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuaGFuZGxlUmVtb3ZlZEl0ZW1zKFxyXG5cdFx0XHRpdGVtRW50cnkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiAhaW5BcnJheShpdGVtRW50cnkuaXRlbUlkLCBpZEFycmF5KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0cmVzdWx0UmVzb3VyY2UsXHJcblx0XHRcdHVwZGF0ZUluaXRpYWwsXHJcblx0XHRcdGNhbGxPblJlbW92ZVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGNsZWFyIChcclxuXHRcdHJlc3VsdFJlc291cmNlPzogQ29sbGVjdGlvblJlc291cmNlIHwgbnVsbCxcclxuXHRcdHVwZGF0ZUluaXRpYWw/OiBib29sZWFuLFxyXG5cdFx0Y2FsbE9uUmVtb3ZlPzogYm9vbGVhblxyXG5cdCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuaGFuZGxlUmVtb3ZlZEl0ZW1zKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRyZXN1bHRSZXNvdXJjZSxcclxuXHRcdFx0dXBkYXRlSW5pdGlhbCxcclxuXHRcdFx0Y2FsbE9uUmVtb3ZlXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0aGFuZGxlUmVtb3ZlZEl0ZW1zIChcclxuXHRcdGZpbHRlckZ1bmN0aW9uOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGJvb2xlYW4sXHJcblx0XHRyZXN1bHRSZXNvdXJjZT86IENvbGxlY3Rpb25SZXNvdXJjZSB8IG51bGwsXHJcblx0XHR1cGRhdGVJbml0aWFsOiBib29sZWFuID0gZmFsc2UsXHJcblx0XHRjYWxsT25SZW1vdmU/OiBib29sZWFuXHJcblx0KSB7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlID0gdGhpcy5mYWN0b3J5LmNvbGxlY3Rpb25FbnRyeVNlcnZpY2U7XHJcblx0XHRjb25zdCByZW1vdmVkRnJvbU1vZGlmaWVkID0gY29sbGVjdGlvbkVudHJ5U2VydmljZS5maWx0ZXJBcnJheSh0aGlzLml0ZW1zLCBmaWx0ZXJGdW5jdGlvbik7XHJcblx0XHRsZXQgcmVtb3ZlZEZyb21Jbml0aWFsO1xyXG5cclxuXHRcdGlmICh1cGRhdGVJbml0aWFsKVxyXG5cdFx0XHRyZW1vdmVkRnJvbUluaXRpYWwgPSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmZpbHRlckFycmF5KHRoaXMuaW5pdGlhbCwgZmlsdGVyRnVuY3Rpb24pO1xyXG5cdFx0ZWxzZSB7XHJcblx0XHRcdC8vIHJlbW92ZSBhbGwgKmxvY2FsKiBpdGVtcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIGZyb20gbW9kaWZpZWQgZnJvbSBpbml0aWFsLCB0b29cclxuXHRcdFx0Y29uc3QgbG9jYWxSZW1vdmVkRnJvbU1vZGlmaWVkOiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCByZW1vdmVkRW50cnkgb2YgcmVtb3ZlZEZyb21Nb2RpZmllZCkge1xyXG5cdFx0XHRcdGlmIChyZW1vdmVkRW50cnkuaXNMb2NhbCgpKVxyXG5cdFx0XHRcdFx0bG9jYWxSZW1vdmVkRnJvbU1vZGlmaWVkLnB1c2gocmVtb3ZlZEVudHJ5KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKGxvY2FsUmVtb3ZlZEZyb21Nb2RpZmllZC5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0cmVtb3ZlZEZyb21Jbml0aWFsID0gY29sbGVjdGlvbkVudHJ5U2VydmljZS5maWx0ZXJBcnJheShcclxuXHRcdFx0XHRcdHRoaXMuaW5pdGlhbCxcclxuXHRcdFx0XHRcdGl0ZW1FbnRyeSA9PiBsb2NhbFJlbW92ZWRGcm9tTW9kaWZpZWQuaW5kZXhPZihpdGVtRW50cnkpID09PSAtMVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0gZWxzZVxyXG5cdFx0XHRcdHJlbW92ZWRGcm9tSW5pdGlhbCA9IFtdO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLmhhbmRsZVJlbW92ZWRJdGVtQ2FsbGJhY2tzKHJlbW92ZWRGcm9tSW5pdGlhbCwgcmVtb3ZlZEZyb21Nb2RpZmllZCwgcmVzdWx0UmVzb3VyY2UsIGNhbGxPblJlbW92ZSk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGhhbmRsZVJlbW92ZWRJdGVtQ2FsbGJhY2tzIChcclxuXHRcdHJlbW92ZWRGcm9tSW5pdGlhbDogSXRlbUVudHJ5W10sXHJcblx0XHRyZW1vdmVkRnJvbU1vZGlmaWVkOiBJdGVtRW50cnlbXSxcclxuXHRcdHJlc3VsdFJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsID0gbnVsbCxcclxuXHRcdGNhbGxPblJlbW92ZTogYm9vbGVhbiA9IHRydWVcclxuXHQpOiBJdGVtUmVzb3VyY2VbXSB8IG51bGwge1xyXG5cdFx0Y29uc3QgY29sbGVjdGlvblJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xyXG5cclxuXHRcdGlmIChyZW1vdmVkRnJvbUluaXRpYWwubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZSBvZiBjb2xsZWN0aW9uUmVzb3VyY2VzKVxyXG5cdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5vcHRpb25zLm9uUmVtb3ZlSW5pdGlhbChyZW1vdmVkRnJvbUluaXRpYWwsIHRoaXMpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChyZW1vdmVkRnJvbU1vZGlmaWVkLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuIHJlc3VsdFJlc291cmNlID09PSBudWxsID8gbnVsbCA6IFtdO1xyXG5cclxuXHRcdGxldCByZXN1bHQ6IEl0ZW1SZXNvdXJjZVtdIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Zm9yIChjb25zdCByZW1vdmVkRW50cnkgb2YgcmVtb3ZlZEZyb21Nb2RpZmllZClcclxuXHRcdFx0cmVtb3ZlZEVudHJ5LmRlYWN0aXZhdGVSZXNvdXJjZXMoKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZSBvZiBjb2xsZWN0aW9uUmVzb3VyY2VzKSB7XHJcblx0XHRcdGNvbnN0IHJlbW92ZWRSZXNvdXJjZXMgPSBjb2xsZWN0aW9uUmVzb3VyY2UucmVtb3ZlSXRlbVJlc291cmNlcyhyZW1vdmVkRnJvbU1vZGlmaWVkKTtcclxuXHJcblx0XHRcdGlmIChjb2xsZWN0aW9uUmVzb3VyY2UgPT09IHJlc3VsdFJlc291cmNlKSB7XHJcblx0XHRcdFx0cmVzdWx0ID0gcmVtb3ZlZFJlc291cmNlcztcclxuXHJcblx0XHRcdFx0aWYgKGNhbGxPblJlbW92ZSlcclxuXHRcdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5jYWxsT25SZW1vdmUocmVtb3ZlZFJlc291cmNlcyk7XHJcblx0XHRcdH0gZWxzZVxyXG5cdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5jYWxsT25SZW1vdmUocmVtb3ZlZFJlc291cmNlcyk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGV4cGFuZCAobmV3Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMpOiBQcm9taXNlSW50ZXJmYWNlPHRoaXM+IHtcclxuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IHRoaXMuaXRlbVR5cGU7XHJcblxyXG5cdFx0aWYgKG5ld0NvbHVtbnMgIT09IHRydWUgJiYgbmV3Q29sdW1ucy5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiBmYWN0b3J5LnByb21pc2VTZXJ2aWNlLndoZW4odGhpcyk7XHJcblxyXG5cdFx0cmV0dXJuIGZhY3RvcnkuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RJdGVtcyh0aGlzLCB1bmRlZmluZWQsIG5ld0NvbHVtbnMpLnRoZW4oXHJcblx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRjb25zdCByZXNwb25zZUl0ZW1zID0gcmVzcG9uc2UuaXRlbXNbaXRlbVR5cGVdO1xyXG5cdFx0XHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IGZhY3RvcnkuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NFeHBhbnNpb24oXHJcblx0XHRcdFx0XHRuZXdDb2x1bW5zLFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UsXHJcblx0XHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHRcdHRoaXMuaXRlbXNcclxuXHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHR0aGlzLmhhbmRsZVJlbW92ZWRJdGVtcyhcclxuXHRcdFx0XHRcdGl0ZW1FbnRyeSA9PiB7XHJcblx0XHRcdFx0XHRcdHJldHVybiByZXNwb25zZUl0ZW1zW2l0ZW1FbnRyeS5pdGVtSWRdICE9PSB1bmRlZmluZWQgfHwgaXRlbUVudHJ5LmlzTG9jYWwoKTtcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRudWxsLFxyXG5cdFx0XHRcdFx0dHJ1ZSxcclxuXHRcdFx0XHRcdHRydWVcclxuXHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHR0aGlzLmV4cGFuZENvbHVtbnMoY29sdW1uRXhwYW5zaW9uKTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIHRoaXM7XHJcblx0XHRcdH0sXHJcblx0XHRcdGZhY3RvcnkuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGV4dGVuZFF1ZXJ5IChjYWxsYmFjaykge1xyXG5cdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcclxuXHJcblx0XHRpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXMucXVlcnk7XHJcblxyXG5cdFx0b3B0aW9ucy5xdWVyeVBhcmFtcyA9IGNhbGxiYWNrKG9wdGlvbnMucXVlcnlQYXJhbXMpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnF1ZXJ5ID0gdGhpcy5mYWN0b3J5LmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuY3JlYXRlUXVlcnkob3B0aW9ucyk7XHJcblx0fVxyXG5cclxuXHRleHRlbmQgKHF1ZXJ5Q2FsbGJhY2ssIGNvbGxlY3Rpb25SZXNvdXJjZSwgY2FsbE9uQWRkPywgdXBkYXRlSW5pdGlhbD8pOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1SZXNvdXJjZVtdIHwgbnVsbD4ge1xyXG5cdFx0Y29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTtcclxuXHRcdGNvbnN0IGVycm9ySGFuZGxlciA9IGZhY3RvcnkuZXJyb3JIYW5kbGVyO1xyXG5cdFx0Y29uc3QgZXh0ZW5kZWRRdWVyeSA9IHRoaXMuZXh0ZW5kUXVlcnkocXVlcnlDYWxsYmFjaykub2JqZWN0O1xyXG5cdFx0Y29uc3QgZnVsbFF1ZXJ5ID0gZmFjdG9yeS5xdWVyeVNlcnZpY2UuYWRkQW5kQ29uZGl0aW9uKFxyXG5cdFx0XHRleHRlbmRlZFF1ZXJ5LFxyXG5cdFx0XHRmYWN0b3J5LnF1ZXJ5U2VydmljZS5jcmVhdGVOb3RJbih0aGlzLmdldElkQXJyYXkoKSlcclxuXHRcdCk7XHJcblxyXG5cdFx0Ly8gdG9kbzogYWxzbyBkbyB0aGUgbGltaXQgY2hlY2sgaW4gYmF0Y2hFeHRlbmRcclxuXHRcdGNvbnN0IHByb21pc2UgPSBmYWN0b3J5Lml0ZW1SZXF1ZXN0U2VydmljZS5yZXF1ZXN0SXRlbXMoXHJcblx0XHRcdHRoaXMsXHJcblx0XHRcdC8vIFdoZW4gdGhlcmUncyBhIGxpbWl0IHdlIHdhbnQgdG8gZmV0Y2ggYWxsIGl0ZW1zIGJlY2F1c2Ugd2Ugd2lsbCBkbyBzb3J0aW5nIGFuZCBzcGxpY2luZyBvZiB0aGUgZXhjZXNzIGl0ZW1zXHJcblx0XHRcdHRoaXMub3B0aW9ucy5saW1pdCAhPT0gbnVsbCA/XHJcblx0XHRcdFx0ZXh0ZW5kZWRRdWVyeSA6XHJcblx0XHRcdFx0ZnVsbFF1ZXJ5XHJcblx0XHQpLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdC8vIHJlbW92ZUFic2VudEl0ZW1zKHJlc3BvbnNlKTsgVE9ETzogd2UgY2FuIG9ubHkgZG8gdGhpcyB3aGVuIHdlIHJlcXVlc3QgKmFsbCogdGhlIGl0ZW1zXHJcblx0XHRcdFx0cmV0dXJuIGZhY3RvcnkuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NSZXNwb25zZShcclxuXHRcdFx0XHRcdHJlc3BvbnNlLFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UubGlua3NbdGhpcy5pdGVtVHlwZV0sXHJcblx0XHRcdFx0XHR0aGlzLnBhcmVudCxcclxuXHRcdFx0XHRcdHRoaXMuY29sdW1uc1xyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdGVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCkudGhlbihpdGVtRW50cmllcyA9PiB7XHJcblx0XHRcdFx0ZGVsZXRlIHRoaXMucHJvbWlzZTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuYWRkSXRlbXMoaXRlbUVudHJpZXMsIGNvbGxlY3Rpb25SZXNvdXJjZSwgdXBkYXRlSW5pdGlhbCwgY2FsbE9uQWRkLCBmYWxzZSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdGVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblxyXG5cdFx0dGhpcy5wcm9taXNlID0gcHJvbWlzZS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXM7XHJcblx0XHRcdH0sXHJcblx0XHRcdGVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblxyXG5cdFx0cmV0dXJuIHByb21pc2U7XHJcblx0fVxyXG5cclxuXHRxdWV1ZVJlbG9hZCAoKTogdm9pZCB7XHJcblx0XHR0aGlzLnJlbG9hZFF1ZXVlZCA9IHRydWU7XHJcblx0fVxyXG5cclxuXHRleHBhbmRDb2x1bW5zIChjb2x1bW5FeHBhbnNpb246IENvbHVtbkV4cGFuc2lvbikge1xyXG5cdFx0Y29uc3QgZXhwYW5zaW9uUmVzdWx0ID0gY29sdW1uRXhwYW5zaW9uLnJ1bih0aGlzLmNvbHVtbnMpO1xyXG5cclxuXHRcdGlmIChleHBhbnNpb25SZXN1bHQgPT09IG51bGwpXHJcblx0XHRcdHJldHVybjtcclxuXHJcblx0XHR0aGlzLmNvbHVtbnMgPSBleHBhbnNpb25SZXN1bHQubWVyZ2VkO1xyXG5cdFx0dGhpcy50ZW1wbGF0ZUNvbHVtbnMgPSBudWxsO1xyXG5cdFx0dGhpcy5vcHRpb25zLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMucmVxdWVzdDtcclxuXHR9XHJcblxyXG5cdGV4cGFuZFJlcXVlc3RDb2x1bW5zIChyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMpIHtcclxuXHRcdHRoaXMuY29sdW1ucy5leHBhbmRSZXF1ZXN0Q29sdW1ucyhyZXF1ZXN0Q29sdW1ucyk7XHJcblx0XHR0aGlzLm9wdGlvbnMuY29sdW1ucyA9IHRoaXMuY29sdW1ucy5yZXF1ZXN0O1xyXG5cdH1cclxuXHJcblx0Z2V0QWRkZWRJdGVtcyAocmV0dXJuSXRlbUlkczogYm9vbGVhbiA9IGZhbHNlKSB7XHJcblx0XHRjb25zdCBpbml0aWFsID0gdGhpcy5pbml0aWFsO1xyXG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBBcnJheTxJdGVtRW50cnkgfCBJdGVtSWQ+ID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgbW9kaWZpZWQpIHtcclxuXHRcdFx0aWYgKGluaXRpYWwuaW5kZXhPZihpdGVtRW50cnkpID09PSAtMSlcclxuXHRcdFx0XHRyZXN1bHQucHVzaChyZXR1cm5JdGVtSWRzID8gaXRlbUVudHJ5Lml0ZW1JZCA6IGl0ZW1FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdldFJlbW92ZWRJdGVtcyAocmV0dXJuSXRlbUlkcyA9IGZhbHNlKSB7XHJcblx0XHRjb25zdCBpbml0aWFsID0gdGhpcy5pbml0aWFsO1xyXG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBBcnJheTxJdGVtRW50cnkgfCBJdGVtSWQ+ID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaW5pdGlhbCkge1xyXG5cdFx0XHRpZiAobW9kaWZpZWQuaW5kZXhPZihpdGVtRW50cnkpID09PSAtMSlcclxuXHRcdFx0XHRyZXN1bHQucHVzaChyZXR1cm5JdGVtSWRzID8gaXRlbUVudHJ5Lml0ZW1JZCA6IGl0ZW1FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdldFVwZGF0ZWRJdGVtcyAoKSB7XHJcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgbW9kaWZpZWQpIHtcclxuXHRcdFx0aWYgKCFpdGVtRW50cnkuaXNMb2NhbCgpICYmIGl0ZW1FbnRyeS5oYXNDaGFuZ2VzKCkpXHJcblx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0aGFzQWRkZWRJdGVtcyAoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5pdGVtcy5sZW5ndGggPiB0aGlzLmluaXRpYWwubGVuZ3RoO1xyXG5cdH1cclxuXHJcblx0aGFzUmVtb3ZlZEl0ZW1zICgpIHtcclxuXHRcdHJldHVybiB0aGlzLmluaXRpYWwubGVuZ3RoID4gdGhpcy5pdGVtcy5sZW5ndGg7XHJcblx0fVxyXG5cclxuXHRoYXNVcGRhdGVkSXRlbXMgKCkge1xyXG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xyXG5cclxuXHRcdGZvciAoY29uc3QgbW9kaWZpZWRJdGVtRW50cnkgb2YgbW9kaWZpZWQpIHtcclxuXHRcdFx0aWYgKG1vZGlmaWVkSXRlbUVudHJ5Lmhhc0NoYW5nZXMoKSlcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRnZXRDdXJyZW50UmVzb3VyY2UgKCkge1xyXG5cdFx0Y29uc3QgcmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7XHJcblxyXG5cdFx0cmV0dXJuIHJlc291cmNlc1tyZXNvdXJjZXMubGVuZ3RoIC0gMV07XHJcblx0fVxyXG5cclxuXHRjbGVhclJlc291cmNlcyAoaXNTdWJ0YWJDaGFuZ2UgPSBmYWxzZSkge1xyXG5cdFx0Y29uc3QgaXRlbUVudHJpZXMgPSB0aGlzLml0ZW1zOyAvLyBUT0RPOiBpbml0aWFsXHJcblx0XHRjb25zdCBjdXJyZW50UmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7XHJcblx0XHRjb25zdCBuZXdSZXNvdXJjZXM6IENvbGxlY3Rpb25SZXNvdXJjZVtdID0gW107XHJcblxyXG5cdFx0Ly8gd2UnbGwgYWRkIHRoZSBpdGVtIHJlc291cmNlcyBiYWNrIGluIGxhdGVyXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcclxuXHRcdFx0aXRlbUVudHJ5LmNsZWFyUmVzb3VyY2VzKCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2Ugb2YgY3VycmVudFJlc291cmNlcykge1xyXG5cdFx0XHRpZiAoY29sbGVjdGlvblJlc291cmNlLm9wdGlvbnNbaXNTdWJ0YWJDaGFuZ2UgPyAnY2xlYXJPblN1YlRhYkNoYW5nZScgOiAnY2xlYXJPblRhYkNoYW5nZSddKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0bmV3UmVzb3VyY2VzLnB1c2goY29sbGVjdGlvblJlc291cmNlKTtcclxuXHJcblx0XHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGNvbGxlY3Rpb25SZXNvdXJjZS5pdGVtcylcclxuXHRcdFx0XHRpdGVtUmVzb3VyY2UuZW50cnkucmVzb3VyY2VzLnB1c2goaXRlbVJlc291cmNlKTsgLy8gcmVzb3VyY2VzIHNob3VsZCBiZSBlbXB0eSBieSBub3cgOi0pXHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5yZXNvdXJjZXMgPSBuZXdSZXNvdXJjZXM7XHJcblx0fVxyXG5cclxuXHQvLyB0aGlzIGRvZXNuJ3QgcmV2ZXJ0IHVwZGF0ZXNcclxuXHRyZXZlcnRDaGFuZ2VzICgpIHtcclxuXHRcdC8vIHNhdmUgdGhlc2UgYmVmb3JlIHJlc2V0dGluZyB0aGUgaXRlbXMgcHJvcGVydHlcclxuXHRcdGNvbnN0IGFkZGVkSXRlbXMgPSA8SXRlbUVudHJ5W10+IHRoaXMuZ2V0QWRkZWRJdGVtcygpO1xyXG5cdFx0Y29uc3QgcmVtb3ZlZEl0ZW1zID0gPEl0ZW1FbnRyeVtdPiB0aGlzLmdldFJlbW92ZWRJdGVtcygpO1xyXG5cclxuXHRcdHRoaXMuaXRlbXMgPSB0aGlzLmluaXRpYWwuc2xpY2UoKTtcclxuXHJcblx0XHR0aGlzLmhhbmRsZUFkZGVkSXRlbUNhbGxiYWNrcyhbXSwgcmVtb3ZlZEl0ZW1zKTtcclxuXHRcdHRoaXMuaGFuZGxlUmVtb3ZlZEl0ZW1DYWxsYmFja3MoW10sIGFkZGVkSXRlbXMpO1xyXG5cdH1cclxuXHJcblx0b25JdGVtc0NyZWF0ZWQgKGNvbnZlcnNpb25NYXApIHtcclxuXHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xyXG5cclxuXHRcdGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgcmVzb3VyY2VzKSB7XHJcblx0XHRcdHJlc291cmNlLnJlYnVpbGRNYXAoKTtcclxuXHRcdFx0cmVzb3VyY2Uub3B0aW9ucy5vbkl0ZW1zQ3JlYXRlZChjb252ZXJzaW9uTWFwKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGdldFVwZGF0ZWRJdGVtQ29sdW1ucyAoY29udmVyc2lvbk1hcCkge1xyXG5cdFx0Y29uc3QgaXRlbUNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuaXRlbTtcclxuXHRcdGNvbnN0IHJlc3VsdDoge1tjb2x1bW5JZDogc3RyaW5nXTogQ29sdW1uSW5mb30gPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBpdGVtQ29sdW1ucykge1xyXG5cdFx0XHRpZiAoY29udmVyc2lvbk1hcFtjb2x1bW4uYXBpQ29sdW1uLml0ZW1UeXBlXSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdHJlc3VsdFtjb2x1bW4uaWRdID0gY29sdW1uO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRjbG9uZSAocGFyZW50LCBjb252ZXJzaW9uTWFwPzogSXRlbUlkQ29udmVyc2lvbk1hcCkge1xyXG5cdFx0Y29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTtcclxuXHRcdGNvbnN0IGNsb25lZEl0ZW1FbnRyaWVzID0gZmFjdG9yeS5pdGVtRW50cnlTZXJ2aWNlLmJhdGNoQ2xvbmUodGhpcy5pdGVtcywgY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjbG9uZWRJdGVtRW50cnkgb2YgY2xvbmVkSXRlbUVudHJpZXMpXHJcblx0XHRcdGNsb25lZEl0ZW1FbnRyeS5wYXJlbnQgPSBwYXJlbnQ7XHJcblxyXG5cdFx0cmV0dXJuIGZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHR0aGlzLml0ZW1UeXBlLFxyXG5cdFx0XHRmYWN0b3J5LmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuY2xvbmVPcHRpb25zKHRoaXMub3B0aW9ucywgcGFyZW50KVxyXG5cdFx0KS5yZXNvbHZlKFxyXG5cdFx0XHR7Y29sdW1uczogdGhpcy5jb2x1bW5zLCBpbml0aWFsOiBjbG9uZWRJdGVtRW50cmllc31cclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IGZpbHRlckFycmF5LCBMb2NhbENhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEl0ZW1SZXNvdXJjZUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcCwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSB9IGZyb20gJy4vQ29sbGVjdGlvbkVudHJ5JztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uUmVzb3VyY2Uge1xyXG5cdGl0ZW1zOiBJdGVtUmVzb3VyY2VbXTtcclxuXHRpdGVtSWRNYXA6IEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcCA9IHt9O1xyXG5cdGNvbHVtbnM7XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgaXRlbVJlc291cmNlRmFjdG9yeTogSXRlbVJlc291cmNlRmFjdG9yeSxcclxuXHRcdHB1YmxpYyBlbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxyXG5cdFx0cHVibGljIG9wdGlvbnMsXHJcblx0XHRwdWJsaWMgbG9jYWxDYWNoZTogTG9jYWxDYWNoZVxyXG5cdCkge1xyXG5cdFx0dGhpcy5jb2x1bW5zID0gZW50cnkuY29sdW1ucy5yZXNwb25zZTtcclxuXHRcdHRoaXMuaXRlbUlkTWFwID0ge307XHJcblx0XHR0aGlzLml0ZW1zID0gW107XHJcblxyXG5cdFx0ZW50cnkucmVzb3VyY2VzLnB1c2godGhpcyk7XHJcblxyXG5cdFx0dGhpcy5hZGRJdGVtUmVzb3VyY2VzKGVudHJ5Lml0ZW1zKTtcclxuXHR9XHJcblxyXG5cdGdldEl0ZW1CeUlkIChpdGVtSWQ6IG51bWJlcik6IEl0ZW1SZXNvdXJjZSB7XHJcblx0XHRyZXR1cm4gdGhpcy5pdGVtSWRNYXBbaXRlbUlkXTtcclxuXHR9XHJcblxyXG5cdHJlYnVpbGRNYXAgKCk6IHZvaWQge1xyXG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XHJcblx0XHRjb25zdCBpdGVtSWRNYXAgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKSB7XHJcblx0XHRcdGl0ZW1JZE1hcFtpdGVtUmVzb3VyY2UuZW50cnkuaXRlbUlkXSA9IGl0ZW1SZXNvdXJjZTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLml0ZW1JZE1hcCA9IGl0ZW1JZE1hcDtcclxuXHR9XHJcblxyXG5cdGFkZEl0ZW1SZXNvdXJjZXMgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSk6IEl0ZW1SZXNvdXJjZVtdIHsgLy8gc2hvdWxkIGJlIGZhc3RcclxuXHRcdGlmIChpdGVtRW50cmllcy5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiBbXTtcclxuXHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1SZXNvdXJjZVtdID0gW107XHJcblx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xyXG5cdFx0Y29uc3QgaXRlbXMgPSB0aGlzLml0ZW1zO1xyXG5cdFx0Y29uc3QgaXRlbUlkTWFwID0gdGhpcy5pdGVtSWRNYXA7XHJcblx0XHRjb25zdCBjb25zdHJ1Y3RvciA9IHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeS5nZXRDb25zdHJ1Y3RvcihcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGVkaXQ6IG9wdGlvbnMuZWRpdEl0ZW1zLFxyXG5cdFx0XHRcdG9uQ2hhbmdlOiBvcHRpb25zLm9uQ2hhbmdlLFxyXG5cdFx0XHRcdG9uRGVhY3RpdmF0ZTogaXRlbUVudHJ5ID0+IHRoaXMubG9jYWxDYWNoZS5vbkRlYWN0aXZhdGVJdGVtKGl0ZW1FbnRyeSlcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xyXG5cclxuXHRcdFx0bGV0IGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlO1xyXG5cclxuXHRcdFx0aWYgKGl0ZW1JZE1hcFtpdGVtSWRdID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRpdGVtUmVzb3VyY2UgPSBjb25zdHJ1Y3RvcihpdGVtRW50cnkpO1xyXG5cdFx0XHRcdGl0ZW1zLnB1c2goaXRlbVJlc291cmNlKTtcclxuXHRcdFx0XHRpdGVtSWRNYXBbaXRlbUlkXSA9IGl0ZW1SZXNvdXJjZTtcclxuXHRcdFx0fSBlbHNlXHJcblx0XHRcdFx0aXRlbVJlc291cmNlID0gaXRlbUlkTWFwW2l0ZW1JZF07XHJcblxyXG5cdFx0XHRyZXN1bHQucHVzaChpdGVtUmVzb3VyY2UpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBAcGFyYW0gaXRlbUVudHJpZXNcclxuXHQgKiBAcmV0dXJucyB7SXRlbVJlc291cmNlW119XHJcblx0ICpcclxuXHQgKiBSZXR1cm5zIHRoZSBJdGVtcmVzb3VyY2VzIHRoYXQgd2hlcmUgcmVtb3ZlZCBDb2xsZWN0aW9uLlxyXG5cdCAqIEZpbHRlcnMgb24gSXRlbVJlc291cmNlLmVudHJ5ID09PSBJdGVtRW50cnlcclxuXHQgKi9cclxuXHRyZW1vdmVJdGVtUmVzb3VyY2VzIChpdGVtRW50cmllczogSXRlbUVudHJ5W10pOiBJdGVtUmVzb3VyY2VbXSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1SZXNvdXJjZVtdID0gW107XHJcblxyXG5cdFx0ZmlsdGVyQXJyYXkoXHJcblx0XHRcdHRoaXMuaXRlbXMsXHJcblx0XHRcdGl0ZW1SZXNvdXJjZSA9PiB7XHJcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcclxuXHRcdFx0XHRcdGlmIChpdGVtUmVzb3VyY2UuZW50cnkgPT09IGl0ZW1FbnRyeSkge1xyXG5cdFx0XHRcdFx0XHRyZXN1bHQucHVzaChpdGVtUmVzb3VyY2UpO1xyXG5cdFx0XHRcdFx0XHRkZWxldGUgdGhpcy5pdGVtSWRNYXBbaXRlbUVudHJ5Lml0ZW1JZF07XHJcblxyXG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Y2FsbE9uQWRkIChpdGVtUmVzb3VyY2VzOiBJdGVtUmVzb3VyY2VbXSk6IHZvaWQge1xyXG5cdFx0dGhpcy5vcHRpb25zLm9uQWRkKGl0ZW1SZXNvdXJjZXMsIHRoaXMpO1xyXG5cdH1cclxuXHJcblx0Y2FsbE9uUmVtb3ZlIChpdGVtUmVzb3VyY2VzOiBJdGVtUmVzb3VyY2VbXSk6IHZvaWQge1xyXG5cdFx0dGhpcy5vcHRpb25zLm9uUmVtb3ZlKGl0ZW1SZXNvdXJjZXMsIHRoaXMpO1xyXG5cdH1cclxuXHJcblx0Zm9yRWFjaCAoY2FsbGJhY2s6IChpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSkgPT4gdm9pZCk6IHZvaWQge1xyXG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcylcclxuXHRcdFx0Y2FsbGJhY2soaXRlbVJlc291cmNlKTtcclxuXHR9XHJcblxyXG5cdGZpbHRlciAoY2FsbGJhY2s6IChpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSkgPT4gYm9vbGVhbik6IEl0ZW1SZXNvdXJjZVtdIHtcclxuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpIHtcclxuXHRcdFx0aWYgKGNhbGxiYWNrKGl0ZW1SZXNvdXJjZSkpXHJcblx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbVJlc291cmNlKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Zmlyc3QgKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpID0+IGJvb2xlYW4pOiBJdGVtUmVzb3VyY2UgfCBudWxsIHtcclxuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpIHtcclxuXHRcdFx0aWYgKGNhbGxiYWNrKGl0ZW1SZXNvdXJjZSkpXHJcblx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9XHJcblxyXG5cdHNvbWUgKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpID0+IGJvb2xlYW4pOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLmZpcnN0KGNhbGxiYWNrKSAhPT0gbnVsbDtcclxuXHR9XHJcblxyXG5cdGdyb3VwQnkgKGFyZ3VtZW50OiBzdHJpbmcgfCAoKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlKSA9PiBzdHJpbmcgfCBudWxsKSk6IHtba2V5OiBzdHJpbmddOiBJdGVtUmVzb3VyY2VbXX0ge1xyXG5cdFx0Y29uc3QgaXRlbXNSZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbXNSZXNvdXJjZXMpIHtcclxuXHRcdFx0XHRjb25zdCB2YWx1ZSA9IGl0ZW1SZXNvdXJjZS5maWVsZHNbYXJndW1lbnRdO1xyXG5cclxuXHRcdFx0XHRpZiAocmVzdWx0W3ZhbHVlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0cmVzdWx0W3ZhbHVlXSA9IFtdO1xyXG5cclxuXHRcdFx0XHRyZXN1bHRbdmFsdWVdLnB1c2goaXRlbVJlc291cmNlKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0eXBlb2YgYXJndW1lbnQgPT09ICdmdW5jdGlvbicpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbXNSZXNvdXJjZXMpIHtcclxuXHRcdFx0XHRjb25zdCB2YWx1ZSA9IGFyZ3VtZW50KGl0ZW1SZXNvdXJjZSk7XHJcblxyXG5cdFx0XHRcdGlmICh2YWx1ZSA9PT0gbnVsbClcclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0XHRpZiAocmVzdWx0W3ZhbHVlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0cmVzdWx0W3ZhbHVlXSA9IFtdO1xyXG5cclxuXHRcdFx0XHRyZXN1bHRbdmFsdWVdLnB1c2goaXRlbVJlc291cmNlKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRtYXA8VD4gKGFyZ3VtZW50OiBzdHJpbmcgfCAoKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlKSA9PiBUKSk6IFRbXSB7XHJcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcclxuXHRcdGNvbnN0IGxlbmd0aCA9IGl0ZW1SZXNvdXJjZXMubGVuZ3RoO1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IEFycmF5KGxlbmd0aCk7XHJcblxyXG5cdFx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycpIHtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcclxuXHRcdFx0XHRyZXN1bHRbaV0gPSBpdGVtUmVzb3VyY2VzW2ldLmZpZWxkc1thcmd1bWVudF07XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ2Z1bmN0aW9uJykge1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxyXG5cdFx0XHRcdHJlc3VsdFtpXSA9IGFyZ3VtZW50KGl0ZW1SZXNvdXJjZXNbaV0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRyZWR1Y2U8VD4gKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UsIHZhbHVlOiBUKSA9PiBULCB2YWx1ZTogVCk6IFQge1xyXG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcylcclxuXHRcdFx0dmFsdWUgPSBjYWxsYmFjayhpdGVtUmVzb3VyY2UsIHZhbHVlKTtcclxuXHJcblx0XHRyZXR1cm4gdmFsdWU7XHJcblx0fVxyXG5cclxuXHRleHRlbmQgKHF1ZXJ5Q2FsbGJhY2ssIHJldHVybkFsbEl0ZW1zOiBib29sZWFuID0gZmFsc2UsIGNhbGxPbkFkZD86IGJvb2xlYW4pOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1SZXNvdXJjZVtdIHwgbnVsbD4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuZW50cnkuZXh0ZW5kKHF1ZXJ5Q2FsbGJhY2ssIHRoaXMsIGNhbGxPbkFkZCwgdHJ1ZSkudGhlbihcclxuXHRcdFx0aXRlbVJlc291cmNlcyA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHJldHVybkFsbEl0ZW1zID8gdGhpcy5pdGVtcyA6IGl0ZW1SZXNvdXJjZXM7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRkZWFjdGl2YXRlICgpOiB2b2lkIHtcclxuXHRcdHRoaXMubG9jYWxDYWNoZS5jbGVhckNvbGxlY3Rpb24odGhpcyk7XHJcblx0fVxyXG5cclxuXHRjbGVhclJlc291cmNlICgpOiB2b2lkIHtcclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZXMgPSB0aGlzLmVudHJ5LnJlc291cmNlcztcclxuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xyXG5cdFx0Y29uc3QgaW5kZXggPSBjb2xsZWN0aW9uUmVzb3VyY2VzLmluZGV4T2YodGhpcyk7XHJcblxyXG5cdFx0aWYgKGluZGV4ICE9PSAtMSlcclxuXHRcdFx0Y29sbGVjdGlvblJlc291cmNlcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpXHJcblx0XHRcdGl0ZW1SZXNvdXJjZS5jbGVhclJlc291cmNlKCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IExvY2FsQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgSXRlbVJlc291cmNlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgQ29sbGVjdGlvblJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uVmlld1Jlc291cmNlIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlIHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxyXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksXHJcblx0XHRvcHRpb25zLFxyXG5cdFx0bG9jYWxDYWNoZTogTG9jYWxDYWNoZVxyXG5cdCkge1xyXG5cdFx0c3VwZXIoaXRlbVJlc291cmNlRmFjdG9yeSwgY29sbGVjdGlvbkVudHJ5LCBvcHRpb25zLCBsb2NhbENhY2hlKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgTG9jYWxDYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgRmllbGRNYXAsIEl0ZW1JZCwgSXRlbUlkQ29udmVyc2lvbk1hcCwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRWRpdFJlc291cmNlIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlIHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGZhY3Rvcnk6IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXHJcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcclxuXHRcdG9wdGlvbnMsXHJcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlXHJcblx0KSB7XHJcblx0XHRzdXBlcihmYWN0b3J5Lml0ZW1SZXNvdXJjZUZhY3RvcnksIGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucywgbG9jYWxDYWNoZSk7XHJcblx0fVxyXG5cclxuXHRzYXZlICgpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1JZENvbnZlcnNpb25NYXA+IHtcclxuXHRcdGlmICghdGhpcy5vcHRpb25zLmVuYWJsZVNhdmUpXHJcblx0XHRcdHRocm93IG5ldyBFcnJvcignY29sbGVjdGlvblJlc291cmNlU2VydmljZTogU2F2aW5nIGRpc2FibGVkJyk7XHJcblxyXG5cdFx0Y29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTtcclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuZW50cnk7XHJcblx0XHRjb25zdCBwYXJlbnQgPSBjb2xsZWN0aW9uRW50cnkucGFyZW50O1xyXG5cclxuXHRcdGlmIChwYXJlbnQgIT09IG51bGwgJiYgZmFjdG9yeS5rZXlTZXJ2aWNlLmlzTG9jYWxJZChwYXJlbnQuaXRlbUlkKSlcclxuXHRcdFx0cmV0dXJuIGZhY3RvcnkucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xyXG5cclxuXHRcdHJldHVybiBmYWN0b3J5LmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LmNvbnN0cnVjdCgpLmV4ZWN1dGUoW10sIFtjb2xsZWN0aW9uRW50cnldKTtcclxuXHR9XHJcblxyXG5cdC8vIFRPRE86IHVzZSBjYWxsYmFjayBmdW5jdGlvblxyXG5cdG1vdmVJdGVtcyAoaWRBcnJheTogSXRlbUlkW10sIGRlc3RpbmF0aW9uOiBDb2xsZWN0aW9uUmVzb3VyY2UsIGVuYWJsZUNhbGxiYWNrcz86IGJvb2xlYW4pOiBJdGVtUmVzb3VyY2VbXSB7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSB0aGlzLmVudHJ5O1xyXG5cdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcclxuXHJcblx0XHRpZiAob3B0aW9ucy5lbmFibGVTYXZlIHx8IG9wdGlvbnMubW9kSW5zdGFudClcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBDYW5ub3QgbW92ZSBpdGVtczogc2F2aW5nIGVuYWJsZWQnKTtcclxuXHJcblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlICE9PSBkZXN0aW5hdGlvbi5lbnRyeS5pdGVtVHlwZSlcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBDYW5ub3QgbW92ZSBpdGVtczogaXRlbVR5cGUgbWlzbWF0Y2gnKTtcclxuXHJcblx0XHRjb25zdCByZW1vdmVkSXRlbVJlc291cmNlcyA9IDxJdGVtUmVzb3VyY2VbXT4gY29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGlkQXJyYXksIHRoaXMsIGZhbHNlLCBlbmFibGVDYWxsYmFja3MpO1xyXG5cdFx0Y29uc3QgaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCByZW1vdmVkSXRlbVJlc291cmNlIG9mIHJlbW92ZWRJdGVtUmVzb3VyY2VzKVxyXG5cdFx0XHRpdGVtRW50cmllcy5wdXNoKHJlbW92ZWRJdGVtUmVzb3VyY2UuZW50cnkpO1xyXG5cclxuXHRcdGRlc3RpbmF0aW9uLmVudHJ5LmFkZEl0ZW1zKGl0ZW1FbnRyaWVzLCBkZXN0aW5hdGlvbiwgZmFsc2UsIGVuYWJsZUNhbGxiYWNrcyk7XHJcblxyXG5cdFx0cmV0dXJuIHJlbW92ZWRJdGVtUmVzb3VyY2VzO1xyXG5cdH1cclxuXHJcblx0cmVtb3ZlSXRlbXMgKGlkQXJyYXk6IEl0ZW1JZFtdLCBjYWxsT25SZW1vdmU6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZUludGVyZmFjZTxJdGVtUmVzb3VyY2VbXT4ge1xyXG5cdFx0Ly8gY2FsbE9uUmVtb3ZlIHNob3VsZCBiZSBmYWxzZSBoZXJlIHRvIHByZXZlbnQgb25SZW1vdmUgZnJvbSBiZWluZyBjYWxsZWQgdHdpY2VcclxuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSA8SXRlbVJlc291cmNlW10+IHRoaXMuZW50cnkucmVtb3ZlSXRlbXMoaWRBcnJheSwgdGhpcywgZmFsc2UsIGZhbHNlKTtcclxuXHJcblx0XHRpZiAodGhpcy5vcHRpb25zLm1vZEluc3RhbnQpXHJcblx0XHRcdHJldHVybiB0aGlzLnNhdmUoKS50aGVuKFxyXG5cdFx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRcdGlmIChjYWxsT25SZW1vdmUpXHJcblx0XHRcdFx0XHRcdHRoaXMuY2FsbE9uUmVtb3ZlKGl0ZW1SZXNvdXJjZXMpO1xyXG5cclxuXHRcdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2VzO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0KTtcclxuXHJcblx0XHRpZiAoY2FsbE9uUmVtb3ZlKVxyXG5cdFx0XHR0aGlzLmNhbGxPblJlbW92ZShpdGVtUmVzb3VyY2VzKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5mYWN0b3J5LnByb21pc2VTZXJ2aWNlLndoZW4oaXRlbVJlc291cmNlcyk7XHJcblx0fVxyXG5cclxuXHRyZW1vdmVJdGVtIChpdGVtSWQ6IEl0ZW1JZCwgY2FsbE9uUmVtb3ZlPzogYm9vbGVhbik6IFByb21pc2VJbnRlcmZhY2U8SXRlbVJlc291cmNlPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5yZW1vdmVJdGVtcyhbaXRlbUlkXSwgY2FsbE9uUmVtb3ZlKS50aGVuKFxyXG5cdFx0XHRpdGVtUmVzb3VyY2VzID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gaXRlbVJlc291cmNlc1swXTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5mYWN0b3J5LmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRhZGRJdGVtcyAodmFsdWVzQXJyYXk6IEZpZWxkTWFwW10sIGNhbGxPbkFkZDogYm9vbGVhbiA9IHRydWUsIGNhbGxPbkFjdGl2YXRlPzogYm9vbGVhbik6IFByb21pc2VJbnRlcmZhY2U8SXRlbVJlc291cmNlW10+IHtcclxuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XHJcblx0XHRjb25zdCBtb2RJbnN0YW50ID0gdGhpcy5vcHRpb25zLm1vZEluc3RhbnQ7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuZW50cnkuY3JlYXRlSXRlbXModmFsdWVzQXJyYXkpLnRoZW4oXHJcblx0XHRcdGl0ZW1FbnRyaWVzID0+IHtcclxuXHRcdFx0XHRpZiAobW9kSW5zdGFudClcclxuXHRcdFx0XHRcdHJldHVybiBpdGVtRW50cmllcztcclxuXHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZW50cnkucmVzb2x2ZURlcml2ZWRWYWx1ZXMoaXRlbUVudHJpZXMsIHRoaXMubG9jYWxDYWNoZS5pdGVtcyk7XHJcblx0XHRcdH1cclxuXHRcdCkudGhlbihcclxuXHRcdFx0aXRlbUVudHJpZXMgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSA8SXRlbVJlc291cmNlW10+IHRoaXMuZW50cnkuYWRkSXRlbXMoXHJcblx0XHRcdFx0XHRpdGVtRW50cmllcyxcclxuXHRcdFx0XHRcdHRoaXMsXHJcblx0XHRcdFx0XHRmYWxzZSxcclxuXHRcdFx0XHRcdGZhbHNlLFxyXG5cdFx0XHRcdFx0Y2FsbE9uQWN0aXZhdGVcclxuXHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRpZiAobW9kSW5zdGFudCkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2F2ZSgpLnRoZW4oXHJcblx0XHRcdFx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoY2FsbE9uQWRkKVxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5jYWxsT25BZGQoaXRlbVJlc291cmNlcyk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2VzO1xyXG5cdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHRmYWN0b3J5LmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZiAoY2FsbE9uQWRkKVxyXG5cdFx0XHRcdFx0dGhpcy5jYWxsT25BZGQoaXRlbVJlc291cmNlcyk7XHJcblxyXG5cdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2VzO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRmYWN0b3J5LmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRhZGRJdGVtICh2YWx1ZXM6IEZpZWxkTWFwLCBjYWxsT25BZGQ/OiBib29sZWFuLCBjYWxsT25BY3RpdmF0ZT86IGJvb2xlYW4pOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1SZXNvdXJjZT4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuYWRkSXRlbXMoW3ZhbHVlc10sIGNhbGxPbkFkZCwgY2FsbE9uQWN0aXZhdGUpLnRoZW4oXHJcblx0XHRcdGl0ZW1SZXNvdXJjZXMgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2VzWzBdO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmZhY3RvcnkuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGNsZWFyIChlbmFibGVDYWxsYmFja3MpIHtcclxuXHRcdHJldHVybiB0aGlzLmVudHJ5LmNsZWFyKHRoaXMsIGZhbHNlLCBlbmFibGVDYWxsYmFja3MpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2x1bW5JbmZvLCBDb2x1bW5TZXQgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgSXRlbUVudHJ5RmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7XHJcblx0Q29sdW1uRXhwYW5zaW9uUmVzdWx0LCBFbnRyeVBhcmVudE51bGwsIEZpZWxkTWFwLCBJdGVtSWQsIEl0ZW1JZENvbnZlcnNpb25NYXAsIEl0ZW1UeXBlXHJcbn0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxubGV0IGN1cnJlbnRJZCA9IDA7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbUVudHJ5IHtcclxuXHRpZDogbnVtYmVyID0gKytjdXJyZW50SWQ7XHJcblxyXG5cdHJlbG9hZFF1ZXVlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdGRlZmVyUmVxdWVzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdGRlZmVycmVkO1xyXG5cdHBhcmVudDogRW50cnlQYXJlbnROdWxsID0gbnVsbDtcclxuXHJcblx0aW5pdGlhbDogRmllbGRNYXA7XHJcblx0bW9kaWZpZWQ6IEZpZWxkTWFwO1xyXG5cdGRlcml2ZWQ6IEZpZWxkTWFwO1xyXG5cclxuXHRyZXNvdXJjZXM6IEl0ZW1SZXNvdXJjZVtdID0gW107XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgZmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeSxcclxuXHRcdHB1YmxpYyBpdGVtVHlwZTogc3RyaW5nLFxyXG5cdFx0cHVibGljIGl0ZW1JZDogSXRlbUlkLFxyXG5cdFx0cHVibGljIGNvbHVtbnM6IENvbHVtblNldFxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0cXVldWVSZWxvYWQgKCk6IHRoaXMge1xyXG5cdFx0dGhpcy5yZWxvYWRRdWV1ZWQgPSB0cnVlO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0ZGVmZXIgKGRlZmVyUmVxdWVzdDogYm9vbGVhbiA9IGZhbHNlKTogdGhpcyB7XHJcblx0XHR0aGlzLmRlZmVycmVkID0gdGhpcy5mYWN0b3J5LnByb21pc2VTZXJ2aWNlLmRlZmVyKCk7XHJcblx0XHR0aGlzLmRlZmVyUmVxdWVzdCA9IGRlZmVyUmVxdWVzdDtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdHJlc29sdmUgKCk6IHRoaXMge1xyXG5cdFx0Y29uc3QgZGVmZXJyZWQgPSB0aGlzLmRlZmVycmVkO1xyXG5cclxuXHRcdC8vIHRoZSByZXNvbHZlIGZ1bmN0aW9uIG1pZ2h0IGRlZmVyIHRoZSBpdGVtIGFnYWluLCBzbyBkZWxldGUgdGhlIHByb3BlcnRpZXMgZmlyc3RcclxuXHRcdGRlbGV0ZSB0aGlzLmRlZmVycmVkO1xyXG5cdFx0ZGVsZXRlIHRoaXMuZGVmZXJSZXF1ZXN0O1xyXG5cclxuXHRcdGRlZmVycmVkLnJlc29sdmUodGhpcyk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRyZXNvbHZlRGVmZXJyZWQgKGluaXRpYWwsIGRlcml2ZWQsIGNvbHVtbnMpOiB0aGlzIHtcclxuXHRcdHRoaXMuY29sdW1ucyA9IGNvbHVtbnM7XHJcblx0XHR0aGlzLnNldEZpZWxkcyhpbml0aWFsLCBkZXJpdmVkKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlKCk7XHJcblx0fVxyXG5cclxuXHRpc0RlZmVycmVkICgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLmRlZmVycmVkICE9PSB1bmRlZmluZWQ7XHJcblx0fVxyXG5cclxuXHRyZWplY3QgKGVycm9yPyk6IHRoaXMge1xyXG5cdFx0Ly8gdG9kbzogdHJhbnNsYXRlZCBlcnJvclxyXG5cdFx0dGhpcy5kZWZlcnJlZC5yZWplY3QoZXJyb3IpO1xyXG5cclxuXHRcdGRlbGV0ZSB0aGlzLmRlZmVycmVkO1xyXG5cdFx0ZGVsZXRlIHRoaXMuZGVmZXJSZXF1ZXN0O1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0c2V0RmllbGRzIChpbml0aWFsOiBGaWVsZE1hcCwgZGVyaXZlZDogRmllbGRNYXApOiB0aGlzIHtcclxuXHRcdGNvbnN0IGFwaUZvcm1hdHRlciA9IHRoaXMuZmFjdG9yeS5hcGlGb3JtYXR0ZXI7XHJcblx0XHRjb25zdCBmb3JtYXR0ZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZvcm1hdHRlZDtcclxuXHJcblx0XHR0aGlzLmluaXRpYWwgPSBhcGlGb3JtYXR0ZXIuZm9ybWF0UmVzcG9uc2UoaW5pdGlhbCwgZm9ybWF0dGVkQ29sdW1ucy5tYWluKTtcclxuXHRcdHRoaXMuZGVyaXZlZCA9IGFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZShkZXJpdmVkLCBmb3JtYXR0ZWRDb2x1bW5zLmRlcml2ZWQpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0Ly8gV2Ugc2hvdWxkIGNyZWF0ZSBhIGNvcHkgb2YgaW5pdGlhbCBoZXJlLCBiZWNhdXNlIGluIG1vc3QgaW5zdGFuY2VzIGl0IHdpbGwgYmUgYSB0ZW1wbGF0ZS5cclxuXHRzZXRMb2NhbEZpZWxkcyAoXHJcblx0XHRpbml0aWFsVmFsdWVzOiBGaWVsZE1hcCxcclxuXHRcdGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAsXHJcblx0XHRjb2x1bW5zOiBDb2x1bW5TZXQgPSB0aGlzLmNvbHVtbnNcclxuXHQpOiB0aGlzIHtcclxuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XHJcblx0XHRjb25zdCBpbml0aWFsID0gZmFjdG9yeS5pdGVtRW50cnlTZXJ2aWNlLmdldExvY2FsRGVmYXVsdFZhbHVlcygpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMubWFpbikge1xyXG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcclxuXHJcblx0XHRcdGluaXRpYWxbY29sdW1uSWRdID0gaW5pdGlhbFZhbHVlc1tjb2x1bW5JZF07XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5pbml0aWFsID0gZmFjdG9yeS5hcGlGb3JtYXR0ZXIuZm9ybWF0UmVzcG9uc2UoaW5pdGlhbCwgY29sdW1ucy5mb3JtYXR0ZWQubWFpbik7XHJcblx0XHR0aGlzLmRlcml2ZWQgPSB7J2NyZWF0b3I+ZGlzcGxheW5hbWUnOiBmYWN0b3J5LmF1dGhJbnRlcmZhY2UuZ2V0VXNlckRpc3BsYXluYW1lKCl9O1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnVwZGF0ZUl0ZW1GaWVsZHMoY29udmVyc2lvbk1hcCk7XHJcblx0fVxyXG5cclxuXHRjbG9uZSAoY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCA9IHt9KTogSXRlbUVudHJ5IHtcclxuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XHJcblx0XHRjb25zdCBhcGlGb3JtYXR0ZXIgPSBmYWN0b3J5LmFwaUZvcm1hdHRlcjtcclxuXHRcdGNvbnN0IGl0ZW1FbnRyeVNlcnZpY2UgPSBmYWN0b3J5Lml0ZW1FbnRyeVNlcnZpY2U7XHJcblx0XHRjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xyXG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XHJcblx0XHRjb25zdCBuZXdJdGVtSWQgPSBpdGVtRW50cnlTZXJ2aWNlLmV4cGFuZENvbnZlcnNpb25NYXAodGhpcywgY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0Ly8gd2UnbGwgY29weSBtb2RpZmllZCB0byByZXN1bHQuaW5pdGlhbCAoaW5pdGlhbCBtYXkgYmUgYSB0ZW1wbGF0ZSlcclxuXHRcdGNvbnN0IGNsb25lZEVudHJ5ID0gZmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdG5ld0l0ZW1JZCxcclxuXHRcdFx0YXBpRm9ybWF0dGVyLmNvcHlGaWVsZHModGhpcy5nZXRGaWVsZHMoKSwge30sIGNvbHVtbnMubWFpbiksXHJcblx0XHRcdGFwaUZvcm1hdHRlci5jb3B5RmllbGRzKHRoaXMuZGVyaXZlZCwge30sIGNvbHVtbnMuZGVyaXZlZCksXHJcblx0XHRcdGNvbHVtbnNcclxuXHRcdCk7XHJcblxyXG5cdFx0Y2xvbmVkRW50cnkudXBkYXRlSXRlbUZpZWxkcyhjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHRjbG9uZWRFbnRyeS5tb2RpZmllZCA9IGFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGNsb25lZEVudHJ5LmluaXRpYWwsIHt9LCBjb2x1bW5zLm1haW4pO1xyXG5cclxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXHJcblx0XHRcdHJldHVybiBjbG9uZWRFbnRyeTtcclxuXHJcblx0XHRjb25zdCBwYXJlbnRJZCA9IGl0ZW1FbnRyeVNlcnZpY2UuZ2V0Q29udmVyc2lvblZhbHVlKHRoaXMuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQsIGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdGNsb25lZEVudHJ5LnNldFBhcmVudChcclxuXHRcdFx0cGFyZW50Lml0ZW1UeXBlLFxyXG5cdFx0XHRwYXJlbnRJZCA9PT0gdW5kZWZpbmVkID8gcGFyZW50Lml0ZW1JZCA6IHBhcmVudElkXHJcblx0XHQpO1xyXG5cclxuXHRcdHJldHVybiBjbG9uZWRFbnRyeTtcclxuXHR9XHJcblxyXG5cdHJlc2V0RGVyaXZlZCAoY29sdW1uSWRzKTogdGhpcyB7XHJcblx0XHRjb25zdCBzZWxmID0gdGhpcztcclxuXHJcblx0XHRjb25zdCByb290Q29sdW1ucyA9IHRoaXMuY29sdW1ucy5yb290O1xyXG5cdFx0Y29uc3QgZmlsdGVyZWRDb2x1bW5zOiBDb2x1bW5JbmZvW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiByb290Q29sdW1ucykge1xyXG5cdFx0XHRpZiAoY29sdW1uSWRzLmluZGV4T2YoY29sdW1uLmlkKSAhPT0gLTEpXHJcblx0XHRcdFx0ZmlsdGVyZWRDb2x1bW5zLnB1c2goY29sdW1uKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXNldERlcml2ZWRSZWN1cnNpdmVseShmaWx0ZXJlZENvbHVtbnMpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHRcdGZ1bmN0aW9uIHJlc2V0RGVyaXZlZFJlY3Vyc2l2ZWx5IChjb2x1bW5zKSB7XHJcblx0XHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuXHRcdFx0XHRpZiAoIWNvbHVtbi5pc0xlYWYpXHJcblx0XHRcdFx0XHRyZXNldERlcml2ZWRSZWN1cnNpdmVseShjb2x1bW4uY2hpbGRyZW4pO1xyXG5cclxuXHRcdFx0XHRkZWxldGUgc2VsZi5kZXJpdmVkW2NvbHVtbi5wYXRoXTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Y2xlYXJSZXNvdXJjZXMgKCk6IHRoaXMge1xyXG5cdFx0dGhpcy5yZXNvdXJjZXMgPSBbXTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdGRlYWN0aXZhdGVSZXNvdXJjZXMgKCk6IHRoaXMge1xyXG5cdFx0Y29uc3QgcmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7IC8vIG9uIG9mIHRoZSBkZWFjdGl2YXRlIGNhbGxiYWNrcyBtaWdodCBjYWxsIGNsZWFyUmVzb3VyY2VzXHJcblxyXG5cdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNvdXJjZXMpXHJcblx0XHRcdHJlc291cmNlLmRlYWN0aXZhdGUoKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdGdldEZpZWxkcyAoKTogRmllbGRNYXAge1xyXG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXMubW9kaWZpZWQ7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuaW5pdGlhbDtcclxuXHR9XHJcblxyXG5cdC8vIHNob3VsZCBiZSBmYXN0XHJcblx0ZXhwYW5kIChtYWluOiBGaWVsZE1hcCwgZGVyaXZlZDogRmllbGRNYXAsIGNvbHVtbkV4cGFuc2lvblJlc3VsdDogQ29sdW1uRXhwYW5zaW9uUmVzdWx0KTogdGhpcyB7XHJcblx0XHRjb25zdCBhcGlGb3JtYXR0ZXIgPSB0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyO1xyXG5cdFx0Y29uc3QgZGlmZmVyZW5jZSA9IGNvbHVtbkV4cGFuc2lvblJlc3VsdC5kaWZmZXJlbmNlO1xyXG5cclxuXHRcdHRoaXMuY29sdW1ucyA9IGNvbHVtbkV4cGFuc2lvblJlc3VsdC5tZXJnZWQ7XHJcblxyXG5cdFx0YXBpRm9ybWF0dGVyLmV4cGFuZFJlc3BvbnNlKHRoaXMuaW5pdGlhbCwgbWFpbiwgZGlmZmVyZW5jZS5tYWluKTtcclxuXHRcdGFwaUZvcm1hdHRlci5leHBhbmRSZXNwb25zZSh0aGlzLmRlcml2ZWQsIGRlcml2ZWQsIGRpZmZlcmVuY2UuZGVyaXZlZCk7XHJcblxyXG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdFx0YXBpRm9ybWF0dGVyLmV4cGFuZFJlc3BvbnNlKHRoaXMubW9kaWZpZWQsIG1haW4sIGRpZmZlcmVuY2UubWFpbik7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRleHBhbmRMb2NhbCAoY29sdW1uRXhwYW5zaW9uUmVzdWx0OiBDb2x1bW5FeHBhbnNpb25SZXN1bHQpOiB0aGlzIHtcclxuXHRcdGNvbnN0IG1haW5Db2x1bW5zID0gY29sdW1uRXhwYW5zaW9uUmVzdWx0LmRpZmZlcmVuY2UubWFpbjtcclxuXHJcblx0XHR0aGlzLmNvbHVtbnMgPSBjb2x1bW5FeHBhbnNpb25SZXN1bHQubWVyZ2VkO1xyXG5cclxuXHRcdGlmIChtYWluQ29sdW1ucy5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHRcdHRoaXMuc2V0TG9jYWxWYWx1ZXModGhpcy5pbml0aWFsLCBtYWluQ29sdW1ucyk7XHJcblxyXG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdFx0dGhpcy5zZXRMb2NhbFZhbHVlcyh0aGlzLm1vZGlmaWVkLCBtYWluQ29sdW1ucyk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHNldExvY2FsVmFsdWVzIChmaWVsZHM6IEZpZWxkTWFwLCBjb2x1bW5zOiBDb2x1bW5JbmZvW10pOiB2b2lkIHtcclxuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XHJcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uLmlkO1xyXG5cclxuXHRcdFx0aWYgKGZpZWxkc1tjb2x1bW5JZF0gIT09IHVuZGVmaW5lZCkgLy8gcGFyZW50IGNvbHVtbnMgbWlnaHQgYWxzbyBiZSBpbmNsdWRlZCBpbiB0aGUgZGlmZmVyZW5jZVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0Y29uc3QgY29sdW1uVHlwZSA9IGNvbHVtbi5hcGlDb2x1bW4udHlwZTtcclxuXHJcblx0XHRcdGZpZWxkc1tjb2x1bW5JZF0gPSBjb2x1bW5UeXBlID09PSAnbGluaycgJiYgcGFyZW50ICE9PSBudWxsID9cclxuXHRcdFx0XHRwYXJlbnQuaXRlbUlkIDpcclxuXHRcdFx0XHRmYWN0b3J5LmFwaUZvcm1hdHRlci5nZXREZWZhdWx0VmFsdWUoY29sdW1uVHlwZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhlIGluaXRpYWwsIG1vZGlmaWVkLCBkZXJpdmVkIHByb3BlcnRpZXMgYXJlIGFscmVhZHkgc2V0LiBJdCB3aWxsIHVwZGF0ZSB0aGUgdmFsdWVzXHJcblx0ICogdGhlbXNlbHZlcyB0byBwcmVzZXJ2ZSByZWZlcmVuY2VzIGluIGV4aXN0aW5nIGl0ZW0gcmVzb3VyY2VzLlxyXG5cdCAqL1xyXG5cdHVwZGF0ZUZpZWxkcyAoZmllbGRzOiBGaWVsZE1hcCwgZGVyaXZlZDogRmllbGRNYXAgfCBudWxsID0gbnVsbCwgb3ZlcndyaXRlOiBib29sZWFuID0gdHJ1ZSk6IHRoaXMge1xyXG5cdFx0Y29uc3QgYXBpRm9ybWF0dGVyID0gdGhpcy5mYWN0b3J5LmFwaUZvcm1hdHRlcjtcclxuXHRcdGNvbnN0IG1haW5Db2x1bW5zID0gdGhpcy5jb2x1bW5zLm1haW47XHJcblx0XHRjb25zdCBpbml0aWFsID0gdGhpcy5pbml0aWFsO1xyXG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLm1vZGlmaWVkO1xyXG5cclxuXHRcdC8vIGZvciBzb21lIHdlaXJkIHJlYXNvbiB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBhdG9taWMsIHNvIG92ZXJ3cml0ZSB0aGUgdmFsdWVzIHdpdGggdGhlaXIgZm9ybWF0dGVkIGNvdW50ZXJwYXJ0c1xyXG5cdFx0Ly8gaW1tZWRpYXRlbHlcclxuXHRcdGlmIChtb2RpZmllZCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGZvciAoY29uc3QgY29sdW1uIG9mIG1haW5Db2x1bW5zKSB7XHJcblx0XHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XHJcblx0XHRcdFx0Y29uc3QgY29sdW1uVHlwZSA9IGNvbHVtbi5hcGlDb2x1bW4udHlwZTtcclxuXHJcblx0XHRcdFx0aWYgKG92ZXJ3cml0ZSB8fCBhcGlGb3JtYXR0ZXIuY29tcGFyZUZpZWxkcyhjb2x1bW5UeXBlLCBpbml0aWFsW2NvbHVtbklkXSwgbW9kaWZpZWRbY29sdW1uSWRdKSlcclxuXHRcdFx0XHRcdG1vZGlmaWVkW2NvbHVtbklkXSA9IGFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZVZhbHVlKGNvbHVtblR5cGUsIGZpZWxkc1tjb2x1bW5JZF0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgbWFpbkNvbHVtbnMpIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XHJcblxyXG5cdFx0XHRpbml0aWFsW2NvbHVtbklkXSA9IGFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZVZhbHVlKGNvbHVtbi5hcGlDb2x1bW4udHlwZSwgZmllbGRzW2NvbHVtbklkXSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGRlcml2ZWQgIT09IG51bGwpXHJcblx0XHRcdHRoaXMuc2V0RGVyaXZlZChkZXJpdmVkKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgdXBkYXRlSXRlbVZhbHVlcyAoZmllbGRzOiBGaWVsZE1hcCwgaXRlbUNvbHVtbnM6IENvbHVtbkluZm9bXSwgY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCk6IHZvaWQge1xyXG5cdFx0Y29uc3QgaXRlbUVudHJ5U2VydmljZSA9IHRoaXMuZmFjdG9yeS5pdGVtRW50cnlTZXJ2aWNlO1xyXG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgaXRlbUNvbHVtbnMpIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XHJcblx0XHRcdGNvbnN0IGFwaUNvbHVtbiA9IGNvbHVtbi5hcGlDb2x1bW47XHJcblxyXG5cdFx0XHQvLyBUT0RPOiB3ZSBjYW4gcmVjb25zaWRlciB0aGlzIG9uY2UgYWxsIGNvbHVtbnMgYXJlIHJlc3BlY3RlZCBmb3IgbG9jYWwgaXRlbXMgW1JNNC0xMDM3OF1cclxuXHRcdFx0bGV0IG5ld1ZhbHVlO1xyXG5cclxuXHRcdFx0aWYgKGFwaUNvbHVtbi50eXBlID09PSAnbGluaycgJiYgZmllbGRzW2NvbHVtbklkXSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0aWYgKHBhcmVudCAhPT0gbnVsbClcclxuXHRcdFx0XHRcdG5ld1ZhbHVlID0gcGFyZW50Lml0ZW1JZDtcclxuXHRcdFx0fSBlbHNlXHJcblx0XHRcdFx0bmV3VmFsdWUgPSBpdGVtRW50cnlTZXJ2aWNlLmdldENvbnZlcnNpb25WYWx1ZShhcGlDb2x1bW4uaXRlbVR5cGUsIGZpZWxkc1tjb2x1bW5JZF0sIGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdFx0aWYgKG5ld1ZhbHVlICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0ZmllbGRzW2NvbHVtbklkXSA9IG5ld1ZhbHVlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0dXBkYXRlSXRlbUZpZWxkcyAoY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCwgY29sdW1uczogQ29sdW1uU2V0ID0gdGhpcy5jb2x1bW5zKTogdGhpcyB7XHJcblx0XHRjb25zdCBpdGVtQ29sdW1ucyA9IGNvbHVtbnMuaXRlbTtcclxuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5tb2RpZmllZDtcclxuXHJcblx0XHR0aGlzLnVwZGF0ZUl0ZW1WYWx1ZXModGhpcy5pbml0aWFsLCBpdGVtQ29sdW1ucywgY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0aWYgKG1vZGlmaWVkID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHRcdHRoaXMudXBkYXRlSXRlbVZhbHVlcyhtb2RpZmllZCwgaXRlbUNvbHVtbnMsIGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0Zm9ybWF0UmVxdWVzdCAoKTogRmllbGRNYXAge1xyXG5cdFx0Y29uc3QgYXBpRm9ybWF0dGVyID0gdGhpcy5mYWN0b3J5LmFwaUZvcm1hdHRlcjtcclxuXHRcdGNvbnN0IG1haW5Db2x1bW5zID0gdGhpcy5jb2x1bW5zLm1haW47XHJcblxyXG5cdFx0aWYgKHRoaXMuaXNMb2NhbCgpKVxyXG5cdFx0XHRyZXR1cm4gYXBpRm9ybWF0dGVyLmZvcm1hdFJlcXVlc3RMb2NhbCh0aGlzLmdldEZpZWxkcygpLCBtYWluQ29sdW1ucyk7XHJcblxyXG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHt9O1xyXG5cclxuXHRcdHJldHVybiBhcGlGb3JtYXR0ZXIuZm9ybWF0UmVxdWVzdCh0aGlzLmluaXRpYWwsIHRoaXMubW9kaWZpZWQsIG1haW5Db2x1bW5zKTtcclxuXHR9XHJcblxyXG5cdHNldERpc3BsYXlOYW1lICgpOiB0aGlzIHtcclxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHRcdGNvbnN0IHJlc3VsdCA9IHRoaXMuZ2V0RGlzcGxheU5hbWUoKTtcclxuXHJcblx0XHRpZiAocmVzdWx0KVxyXG5cdFx0XHR0aGlzLm1vZGlmaWVkLmRpc3BsYXluYW1lID0gcmVzdWx0O1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0Z2V0RGlzcGxheU5hbWUgKCk6IHN0cmluZyB7XHJcblx0XHRjb25zdCBpdGVtRW50cnlTZXJ2aWNlID0gdGhpcy5mYWN0b3J5Lml0ZW1FbnRyeVNlcnZpY2U7XHJcblx0XHRjb25zdCBmaWVsZHMgPSB0aGlzLmdldEZpZWxkcygpO1xyXG5cclxuXHRcdHN3aXRjaCAodGhpcy5pdGVtVHlwZSkge1xyXG5cdFx0XHRjYXNlICdDb250YWN0JzpcclxuXHRcdFx0XHRyZXR1cm4gZmllbGRzLnR5cGUgPT09ICdiZWRyaWpmJyA/XHJcblx0XHRcdFx0XHRmaWVsZHMuYmVkcmlqZiA6IGl0ZW1FbnRyeVNlcnZpY2UuZ2V0RnVsbE5hbWUoXHJcblx0XHRcdFx0XHRcdGZpZWxkcy52b29ybmFhbSxcclxuXHRcdFx0XHRcdFx0ZmllbGRzLnR1c3NlbnZvZWdzZWwsXHJcblx0XHRcdFx0XHRcdGZpZWxkcy5uYWFtXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRjYXNlICdNZWRld2Vya2VyJzpcclxuXHRcdFx0Y2FzZSAnUGVyc29uJzpcclxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5U2VydmljZS5nZXRGdWxsTmFtZShcclxuXHRcdFx0XHRcdGZpZWxkcy52b29ybmFhbSxcclxuXHRcdFx0XHRcdGZpZWxkcy50dXNzZW52b2Vnc2VsLFxyXG5cdFx0XHRcdFx0ZmllbGRzLmFjaHRlcm5hYW1cclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRjYXNlICdSZXBhcmF0aWUnOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmRlcml2ZWRbJ21hdGVyaWFhbD5uYWFtJ107IC8vIFRPRE8hXHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGZpZWxkc1tpdGVtRW50cnlTZXJ2aWNlLmdldFRpdGxlRmllbGQodGhpcy5pdGVtVHlwZSldO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQHBhcmFtIHtCb29sZWFufSByZXR1cm5BbGwgUmV0dXJucyBhbGwgaW5pdGlhbCB2YWx1ZXMgaWYgdHJ1ZVxyXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9XHJcblx0ICovXHJcblx0Z2V0Q2hhbmdlcyAocmV0dXJuQWxsOiBib29sZWFuID0gZmFsc2UpIHtcclxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQgJiYgIXJldHVybkFsbClcclxuXHRcdFx0cmV0dXJuIFtdO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyLmdldENoYW5nZXMoXHJcblx0XHRcdHRoaXMuaW5pdGlhbCxcclxuXHRcdFx0cmV0dXJuQWxsID8ge30gOiB0aGlzLm1vZGlmaWVkLFxyXG5cdFx0XHR0aGlzLmNvbHVtbnMubWFpblxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGlzTG9jYWwgKCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuZmFjdG9yeS5rZXlTZXJ2aWNlLmlzTG9jYWxJZCh0aGlzLml0ZW1JZCk7XHJcblx0fVxyXG5cclxuXHRpc0xvY2thYmxlICgpOiBib29sZWFuIHtcclxuXHRcdGlmICh0aGlzLmlzTG9jYWwoKSlcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdHN3aXRjaCAodGhpcy5pdGVtVHlwZSkge1xyXG5cdFx0XHRjYXNlICdQcm9qZWN0JzpcclxuXHRcdFx0Y2FzZSAnTWF0ZXJpYWFsJzpcclxuXHRcdFx0Y2FzZSAnQ29udGFjdCc6XHJcblx0XHRcdGNhc2UgJ01lZGV3ZXJrZXInOlxyXG5cdFx0XHRjYXNlICdWb2VydHVpZyc6XHJcblx0XHRcdGNhc2UgJ1RlbXBsYXRlJzpcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRoYXNDaGFuZ2VzICgpOiBib29sZWFuIHtcclxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5mYWN0b3J5LmFwaUZvcm1hdHRlci5oYXNDaGFuZ2VzKFxyXG5cdFx0XHR0aGlzLmluaXRpYWwsXHJcblx0XHRcdHRoaXMubW9kaWZpZWQsXHJcblx0XHRcdHRoaXMuY29sdW1ucy5tYWluXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cmVzZXRNb2RpZmllZCAoKTogdGhpcyB7XHJcblx0XHRjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1haW47XHJcblxyXG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG5cdFx0XHR0aGlzLm1vZGlmaWVkW2NvbHVtbi5pZF0gPSB0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyLmNsb25lKFxyXG5cdFx0XHRcdGNvbHVtbi5hcGlDb2x1bW4udHlwZSxcclxuXHRcdFx0XHR0aGlzLmluaXRpYWxbY29sdW1uLmlkXVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0c2V0SW5pdGlhbCAodmFsdWVzOiBGaWVsZE1hcCwgZW5hYmxlQ2FsbGJhY2tzOiBib29sZWFuID0gZmFsc2UpOiB0aGlzIHtcclxuXHRcdGNvbnN0IGFwaUZvcm1hdHRlciA9IHRoaXMuZmFjdG9yeS5hcGlGb3JtYXR0ZXI7XHJcblx0XHRsZXQgcHJldmlvdXM7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB2YWx1ZXMpXHJcblx0XHRcdHRoaXMuaW5pdGlhbFtjb2x1bW5JZF0gPSB2YWx1ZXNbY29sdW1uSWRdO1xyXG5cclxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0aWYgKGVuYWJsZUNhbGxiYWNrcylcclxuXHRcdFx0XHR0aGlzLmNhbGxPbkNoYW5nZShhcGlGb3JtYXR0ZXIuY29weUZpZWxkcyh0aGlzLmluaXRpYWwsIHt9LCB0aGlzLmNvbHVtbnMubWFpbikpO1xyXG5cclxuXHRcdFx0cmV0dXJuIHRoaXM7XHJcblx0XHR9XHJcblxyXG5cdFx0cHJldmlvdXMgPSBhcGlGb3JtYXR0ZXIuY29weUZpZWxkcyh0aGlzLm1vZGlmaWVkLCB7fSwgdGhpcy5jb2x1bW5zLm1haW4pO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gdmFsdWVzKVxyXG5cdFx0XHR0aGlzLm1vZGlmaWVkW2NvbHVtbklkXSA9IHZhbHVlc1tjb2x1bW5JZF07XHJcblxyXG5cdFx0aWYgKGVuYWJsZUNhbGxiYWNrcylcclxuXHRcdFx0dGhpcy5jYWxsT25DaGFuZ2UocHJldmlvdXMpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRG9lcyBhIHNoYWxsb3cgY29weSBvZiB2YWx1ZXMhXHJcblx0ICovXHJcblx0c2V0TW9kaWZpZWQgKHZhbHVlcz86IEZpZWxkTWFwKTogdGhpcyB7XHJcblx0XHRjb25zdCBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5O1xyXG5cdFx0Y29uc3QgYXBpRm9ybWF0dGVyID0gZmFjdG9yeS5hcGlGb3JtYXR0ZXI7XHJcblx0XHRjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xyXG5cdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gY29sdW1ucy5yZXNwb25zZVt0aGlzLml0ZW1UeXBlXTtcclxuXHJcblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xyXG5cdFx0XHRjb25zdCBpbml0aWFsID0gdGhpcy5pbml0aWFsO1xyXG5cdFx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMubW9kaWZpZWQgPSB0aGlzLmlzTG9jYWwoKSA/IGZhY3RvcnkuaXRlbUVudHJ5U2VydmljZS5nZXRMb2NhbERlZmF1bHRWYWx1ZXMoKSA6IHt9O1xyXG5cclxuXHRcdFx0aWYgKHZhbHVlcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGluaXRpYWwsIG1vZGlmaWVkLCBjb2x1bW5zLm1haW4pO1xyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRhcGlGb3JtYXR0ZXIuc2hhbGxvd0NvcHlGaWVsZHModmFsdWVzLCBpbml0aWFsLCBtb2RpZmllZCwgY29sdW1ucy5tYWluKTtcclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB2YWx1ZXMpIHtcclxuXHRcdFx0XHRcdGlmIChyZXNwb25zZUNvbHVtbnNbY29sdW1uSWRdID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFx0Ly8gdG9kbzogZGV2IG1vZGUgY29uc3RhbnRcclxuXHRcdFx0XHRcdFx0Ly8gaWYgKERFVl9NT0RFKVxyXG5cdFx0XHRcdFx0XHQvLyBcdGNvbnNvbGUud2Fybignc2V0TW9kaWZpZWQ6IG5vIGNvbHVtbiBmb3VuZCBmb3InLCBjb2x1bW5JZCk7XHJcblxyXG5cdFx0XHRcdFx0XHRtb2RpZmllZFtjb2x1bW5JZF0gPSB2YWx1ZXNbY29sdW1uSWRdO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNvdXJjZXMpXHJcblx0XHRcdFx0cmVzb3VyY2UuZmllbGRzID0gbW9kaWZpZWQ7XHJcblxyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodmFsdWVzID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gdmFsdWVzKVxyXG5cdFx0XHR0aGlzLm1vZGlmaWVkW2NvbHVtbklkXSA9IHZhbHVlc1tjb2x1bW5JZF07XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRzZXREZXJpdmVkICh2YWx1ZXM6IEZpZWxkTWFwKTogdGhpcyB7XHJcblx0XHRmb3IgKGNvbnN0IGtleSBpbiB2YWx1ZXMpXHJcblx0XHRcdHRoaXMuZGVyaXZlZFtrZXldID0gdmFsdWVzW2tleV07XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRzZXRQYXJlbnQgKHBhcmVudFR5cGU6IEl0ZW1UeXBlLCBwYXJlbnRJZDogSXRlbUlkKTogdGhpcyB7XHJcblx0XHR0aGlzLnBhcmVudCA9IHtcclxuXHRcdFx0aXRlbVR5cGU6IHBhcmVudFR5cGUsXHJcblx0XHRcdGl0ZW1JZDogcGFyZW50SWRcclxuXHRcdH07XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRjYWxsT25DaGFuZ2UgKHByZXZpb3VzOiBGaWVsZE1hcCk6IHRoaXMge1xyXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSB0aGlzLnJlc291cmNlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgaXRlbVJlc291cmNlID0gdGhpcy5yZXNvdXJjZXNbaV07XHJcblxyXG5cdFx0XHRpZiAoaXRlbVJlc291cmNlICE9PSBudWxsKVxyXG5cdFx0XHRcdGl0ZW1SZXNvdXJjZS5vcHRpb25zLm9uQ2hhbmdlKGl0ZW1SZXNvdXJjZSwgcHJldmlvdXMpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0dG9KU09OICgpIHtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdGlkOiB0aGlzLmlkLFxyXG5cdFx0XHRwYXJlbnQ6IHRoaXMucGFyZW50LFxyXG5cdFx0XHRpbml0aWFsOiB0aGlzLmluaXRpYWwsXHJcblx0XHRcdG1vZGlmaWVkOiB0aGlzLm1vZGlmaWVkLFxyXG5cdFx0XHRkZXJpdmVkOiB0aGlzLmRlcml2ZWQsXHJcblx0XHRcdGNvbHVtbnM6IHRoaXMuY29sdW1uc1xyXG5cdFx0fTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgRmllbGRNYXAsIFJlc3BvbnNlQ29sdW1uIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW1SZXNvdXJjZSB7XHJcblx0Y29sdW1uczogeyBbY29sdW1uSWQ6IHN0cmluZ106IFJlc3BvbnNlQ29sdW1uIH07XHJcblx0ZmllbGRzOiBGaWVsZE1hcDtcclxuXHRkZXJpdmVkOiBGaWVsZE1hcDtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHVibGljIGVudHJ5OiBJdGVtRW50cnksXHJcblx0XHRwdWJsaWMgb3B0aW9ucyxcclxuXHRcdHByb3RlY3RlZCByZWFkb25seSBfaXNOZXc6IGJvb2xlYW4gPSBmYWxzZVxyXG5cdCkge1xyXG5cdFx0dGhpcy5kZXJpdmVkID0gZW50cnkuZGVyaXZlZDtcclxuXHRcdHRoaXMuY29sdW1ucyA9IGVudHJ5LmNvbHVtbnMucmVzcG9uc2VbZW50cnkuY29sdW1ucy5pdGVtVHlwZV07XHJcblxyXG5cdFx0ZW50cnkucmVzb3VyY2VzLnB1c2godGhpcyk7XHJcblx0fVxyXG5cclxuXHRpc05ldyAoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5faXNOZXc7XHJcblx0fVxyXG5cclxuXHRpc0xvY2FsICgpIHtcclxuXHRcdHJldHVybiB0aGlzLmVudHJ5LmlzTG9jYWwoKTtcclxuXHR9XHJcblxyXG5cdGNsZWFyUmVzb3VyY2UgKCkge1xyXG5cdFx0Y29uc3QgcmVzb3VyY2VzID0gdGhpcy5lbnRyeS5yZXNvdXJjZXM7XHJcblx0XHRjb25zdCBpbmRleCA9IHJlc291cmNlcy5pbmRleE9mKHRoaXMpO1xyXG5cclxuXHRcdGlmIChpbmRleCAhPT0gLTEpXHJcblx0XHRcdHJlc291cmNlcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cdH1cclxuXHJcblx0ZGVhY3RpdmF0ZSAoKSB7XHJcblx0XHR0aGlzLm9wdGlvbnMub25EZWFjdGl2YXRlKHRoaXMuZW50cnkpO1xyXG5cdH1cclxuXHJcblx0dG9KU09OICgpIHtcclxuXHRcdGNvbnN0IGNvbHVtbklkczogc3RyaW5nW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHRoaXMuY29sdW1ucylcclxuXHRcdFx0Y29sdW1uSWRzLnB1c2goY29sdW1uSWQpO1xyXG5cclxuXHRcdHJldHVybiB7XHJcblx0XHRcdGNvbHVtbnM6IGNvbHVtbklkcyxcclxuXHRcdFx0ZmllbGRzOiB0aGlzLmZpZWxkcyxcclxuXHRcdFx0ZGVyaXZlZDogdGhpcy5kZXJpdmVkLFxyXG5cdFx0XHRlbnRyeTogdGhpcy5lbnRyeVxyXG5cdFx0fTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFZpZXdSZXNvdXJjZSBleHRlbmRzIEl0ZW1SZXNvdXJjZSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0ZW50cnk6IEl0ZW1FbnRyeSxcclxuXHRcdG9wdGlvbnMsXHJcblx0XHRpc05ldz86IGJvb2xlYW5cclxuXHQpIHtcclxuXHRcdHN1cGVyKGVudHJ5LCBvcHRpb25zLCBpc05ldyk7XHJcblxyXG5cdFx0dGhpcy5maWVsZHMgPSBlbnRyeS5tb2RpZmllZCA9PT0gdW5kZWZpbmVkID9cclxuXHRcdFx0ZW50cnkuaW5pdGlhbCA6IGVudHJ5Lm1vZGlmaWVkO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBjcmVhdGVQYXRoIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEl0ZW1SZXNvdXJjZUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBGaWVsZE1hcCwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi8nO1xyXG5cclxuZXhwb3J0IGNsYXNzIEVkaXRSZXNvdXJjZSBleHRlbmRzIEl0ZW1SZXNvdXJjZSB7XHJcblx0bG9jYWxDb3BpZXM6IEZpZWxkTWFwW10gPSBbXTtcclxuXHR0cmFuc2FjdGlvbnM6IG51bWJlciA9IDA7XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgZmFjdG9yeTogSXRlbVJlc291cmNlRmFjdG9yeSxcclxuXHRcdGVudHJ5OiBJdGVtRW50cnksXHJcblx0XHRvcHRpb25zLFxyXG5cdFx0aXNOZXc/OiBib29sZWFuXHJcblx0KSB7XHJcblx0XHRzdXBlcihlbnRyeSwgb3B0aW9ucywgaXNOZXcpO1xyXG5cclxuXHRcdGVudHJ5LnNldE1vZGlmaWVkKCk7XHJcblxyXG5cdFx0dGhpcy5maWVsZHMgPSBlbnRyeS5tb2RpZmllZDtcclxuXHR9XHJcblxyXG5cdGlzTmV3ICgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLl9pc05ldyAmJiB0aGlzLnRyYW5zYWN0aW9ucyA9PT0gMDtcclxuXHR9XHJcblxyXG5cdHN0YXJ0ICgpOiB0aGlzIHtcclxuXHRcdGlmICh0aGlzLmxvY2FsQ29waWVzID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHRoaXMubG9jYWxDb3BpZXMgPSBbXTtcclxuXHJcblx0XHR0aGlzLmxvY2FsQ29waWVzLnB1c2godGhpcy5jb3B5RmllbGRzKCkpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0cm9sbGJhY2sgKCk6IHRoaXMge1xyXG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyeTtcclxuXHJcblx0XHR0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoPEZpZWxkTWFwPiB0aGlzLmxvY2FsQ29waWVzLnBvcCgpLCBpdGVtRW50cnkubW9kaWZpZWQsIGl0ZW1FbnRyeS5jb2x1bW5zLm1haW4pO1xyXG5cclxuXHRcdGlmICh0aGlzLmlzTmV3KCkgJiYgdGhpcy5sb2NhbENvcGllcy5sZW5ndGggPT09IDApXHJcblx0XHRcdHRoaXMuZGVhY3RpdmF0ZSgpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0Y29tbWl0IChjYWxsT25DaGFuZ2U6IGJvb2xlYW4gPSB0cnVlKTogdGhpcyB7XHJcblx0XHRjb25zdCBwcmV2aW91cyA9IDxGaWVsZE1hcD4gdGhpcy5sb2NhbENvcGllcy5wb3AoKTtcclxuXHJcblx0XHRpZiAoY2FsbE9uQ2hhbmdlKVxyXG5cdFx0XHR0aGlzLmNhbGxPbkNoYW5nZShwcmV2aW91cyk7XHJcblxyXG5cdFx0dGhpcy50cmFuc2FjdGlvbnMrKzsgLy8gY29tcGxldGVkIHRyYW5zYWN0aW9uc1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0Z2V0TG9jYWxDb3B5ICgpOiBGaWVsZE1hcCB8IG51bGwge1xyXG5cdFx0Y29uc3QgbG9jYWxDb3BpZXMgPSB0aGlzLmxvY2FsQ29waWVzO1xyXG5cclxuXHRcdGlmIChsb2NhbENvcGllcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHJcblx0XHRpZiAobG9jYWxDb3BpZXMubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHJcblx0XHRyZXR1cm4gbG9jYWxDb3BpZXNbbG9jYWxDb3BpZXMubGVuZ3RoIC0gMV07XHJcblx0fVxyXG5cclxuXHRjb3B5RmllbGRzIChkZXN0aW5hdGlvbjogRmllbGRNYXAgPSB7fSk6IEZpZWxkTWFwIHtcclxuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuZW50cnk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuZmFjdG9yeS5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyhpdGVtRW50cnkubW9kaWZpZWQsIGRlc3RpbmF0aW9uLCBpdGVtRW50cnkuY29sdW1ucy5tYWluKTtcclxuXHR9XHJcblxyXG5cdHNldEZpZWxkcyAodmFsdWVzOiBGaWVsZE1hcCwgY2FsbE9uQ2hhbmdlOiBib29sZWFuID0gdHJ1ZSk6IHRoaXMge1xyXG5cdFx0Y29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1ucztcclxuXHRcdGNvbnN0IGZpZWxkcyA9IHRoaXMuZmllbGRzO1xyXG5cdFx0bGV0IGhhc0NoYW5nZXMgPSBmYWxzZTtcclxuXHRcdGxldCBwcmV2aW91cztcclxuXHJcblx0XHRpZiAoY2FsbE9uQ2hhbmdlKVxyXG5cdFx0XHRwcmV2aW91cyA9IHRoaXMuY29weUZpZWxkcygpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gdmFsdWVzKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtbiA9IGNvbHVtbnNbY29sdW1uSWRdO1xyXG5cclxuXHRcdFx0aWYgKGNvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0Y29uc29sZS53YXJuKCdzZXRGaWVsZHM6IG5vIGNvbHVtbiBmb3VuZCBmb3InLCBjb2x1bW5JZCk7XHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICh0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyLmNvbXBhcmVGaWVsZHMoY29sdW1uLnR5cGUsIGZpZWxkc1tjb2x1bW5JZF0sIHZhbHVlc1tjb2x1bW5JZF0pKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0ZmllbGRzW2NvbHVtbklkXSA9IHZhbHVlc1tjb2x1bW5JZF07XHJcblx0XHRcdGhhc0NoYW5nZXMgPSB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChjYWxsT25DaGFuZ2UgJiYgaGFzQ2hhbmdlcylcclxuXHRcdFx0dGhpcy5jYWxsT25DaGFuZ2UocHJldmlvdXMpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0Y2FsbE9uQ2hhbmdlIChwcmV2aW91czogRmllbGRNYXApOiB0aGlzIHtcclxuXHRcdHRoaXMuZW50cnkuY2FsbE9uQ2hhbmdlKHByZXZpb3VzKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdHNhdmUgKHBhcmFtZXRlcnM/KTogUHJvbWlzZUludGVyZmFjZTx0aGlzPiB7XHJcblx0XHRjb25zdCBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5O1xyXG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyeTtcclxuXHRcdGNvbnN0IHBhcmFtZXRlck1hcCA9IHt9O1xyXG5cclxuXHRcdGlmIChwYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0Y3JlYXRlUGF0aChcclxuXHRcdFx0XHRwYXJhbWV0ZXJNYXAsXHJcblx0XHRcdFx0W2l0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXHJcblx0XHRcdFx0W3t9LCBwYXJhbWV0ZXJzXVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiAoXHJcblx0XHRcdGl0ZW1FbnRyeS5pc0xvY2thYmxlKCkgP1xyXG5cdFx0XHRcdGZhY3RvcnkubG9ja1NlcnZpY2UuZmV0Y2hMb2NrKGl0ZW1FbnRyeSkgOlxyXG5cdFx0XHRcdGZhY3RvcnkucHJvbWlzZVNlcnZpY2Uud2hlbigpXHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHQvLyBhZGRUb0NvbGxlY3Rpb25zIGlzIGNhbGxlZCBpbiBjaGFuZ2VzUHJvY2Vzc29yXHJcblx0XHRcdFx0cmV0dXJuIGZhY3RvcnkuY2hhbmdlc1Byb2Nlc3Nvci5leGVjdXRlKFtpdGVtRW50cnldLCBbXSwgcGFyYW1ldGVyTWFwKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0ZmFjdG9yeS5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdFx0fSxcclxuXHRcdFx0ZmFjdG9yeS5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2x1bW5TZXQgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgVGVtcGxhdGVGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQXBpUmVzcG9uc2UsIEZpZWxkTWFwLCBJdGVtVHlwZSwgUmVzcG9uc2VDb2x1bW5NYXAgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVGVtcGxhdGUge1xyXG5cdGZpZWxkczogRmllbGRNYXA7XHJcblx0cmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcDtcclxuXHRjb2x1bW5zOiBDb2x1bW5TZXQ7IC8vIFRPRE86IHJlbmFtZSB0byBjb2x1bW5TZXRcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0ZmFjdG9yeTogVGVtcGxhdGVGYWN0b3J5LFxyXG5cdFx0cHVibGljIGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdHB1YmxpYyByZXNwb25zZTogQXBpUmVzcG9uc2UsXHJcblx0XHRhZGRpdGlvbmFsQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXBcclxuXHQpIHtcclxuXHRcdHRoaXMuZmllbGRzID0gcmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIHJlc3BvbnNlLmxpbmtzW2l0ZW1UeXBlXVswXSk7XHJcblxyXG5cdFx0dGhpcy5yZXNwb25zZUNvbHVtbnMgPSBmYWN0b3J5LmNvbHVtblV0aWwubWVyZ2VSZXNwb25zZUNvbHVtbnMocmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCksIGFkZGl0aW9uYWxDb2x1bW5zKS5tZXJnZWQ7XHJcblxyXG5cdFx0dGhpcy5jb2x1bW5zID0gZmFjdG9yeS5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgdHJ1ZSwgdGhpcy5yZXNwb25zZUNvbHVtbnMpO1xyXG5cdH1cclxufVxyXG4iLCIvLyBzaG91bGQgYmUgb3JkZXJlZCBieSBkZXBlbmRlbmN5IVxyXG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25FbnRyeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvblJlc291cmNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uVmlld1Jlc291cmNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uRWRpdFJlc291cmNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9JdGVtRW50cnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1SZXNvdXJjZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vVmlld1Jlc291cmNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9FZGl0UmVzb3VyY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL1RlbXBsYXRlJztcclxuIiwiaW1wb3J0IHtcclxuXHRDb2xsZWN0aW9uQ2FjaGUsXHJcblx0Q29sbGVjdGlvbkVudHJ5U2VydmljZSxcclxuXHRDb2xsZWN0aW9uSGFuZGxlcixcclxuXHRDb2xsZWN0aW9uTWF0Y2hlcixcclxuXHRDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLFxyXG5cdENvbHVtblNldCxcclxuXHRJdGVtQ2FjaGUsXHJcblx0SXRlbUVudHJ5U2VydmljZSxcclxuXHRJdGVtSGFuZGxlcixcclxuXHRJdGVtUmVxdWVzdFNlcnZpY2UsXHJcblx0S2V5U2VydmljZSxcclxuXHRMb2NhbENhY2hlLFxyXG5cdFF1ZXJ5U2VydmljZVxyXG59IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQge1xyXG5cdENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcclxuXHRDb2x1bW5TZXRGYWN0b3J5LFxyXG5cdExvY2FsQ2FjaGVGYWN0b3J5LFxyXG5cdE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnlcclxufSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQge1xyXG5cdEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxyXG5cdEF1dGhJbnRlcmZhY2UsXHJcblx0RXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdExvY2FsQ2FjaGVNYW5hZ2VySW50ZXJmYWNlLFxyXG5cdFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgQ29sbGVjdGlvblJlc291cmNlLCBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7XHJcblx0Q29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXAsXHJcblx0Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXAsXHJcblx0Q3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCwgSXRlbUlkLFxyXG5cdEl0ZW1JZENvbnZlcnNpb25NYXAsXHJcblx0SXRlbU9wdGlvbnMsXHJcblx0SXRlbVJlc291cmNlc0l0ZW1UeXBlTWFwLFxyXG5cdEl0ZW1UeXBlLFxyXG5cdExpbmtlZEl0ZW1FbnRyeU1hcCxcclxuXHRMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24sXHJcblx0T25TYXZlQ2FsbGJhY2ssXHJcblx0UHJvbWlzZUludGVyZmFjZSxcclxuXHRTdGF0ZUtleVR5cGUsXHJcblx0VGVtcGxhdGVJdGVtRW50cnlNYXAsXHJcblx0VGVtcGxhdGVJdGVtUmVzb3VyY2VNYXBcclxufSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5pbXBvcnQgeyBjcmVhdGVQYXRoIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtQWRtaW5pc3RyYXRvciB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGF1dGhJbnRlcmZhY2U6IEF1dGhJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25FbnRyeVNlcnZpY2U6IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5OiBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U6IENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXHJcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGl0ZW1SZXF1ZXN0U2VydmljZTogSXRlbVJlcXVlc3RTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBsb2NhbENhY2hlRmFjdG9yeTogTG9jYWxDYWNoZUZhY3RvcnksXHJcblx0XHRwcml2YXRlIGxvY2FsQ2FjaGVNYW5hZ2VyOiBMb2NhbENhY2hlTWFuYWdlckludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgbW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeTogTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgcHJvbWlzZUludGVyZmFjZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlXHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0aW52YWxpZGF0ZUNhY2hlICgpOiB2b2lkIHtcclxuXHRcdC8vIHRoZSBpdGVtSGFuZGxlciBjYWNoZSBvbmx5IGNvbnRhaW5zIHJlbW90ZSBlbnRyaWVzXHJcblx0XHR0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZm9yRWFjaChcclxuXHRcdFx0aXRlbUVudHJ5ID0+IGl0ZW1FbnRyeS5xdWV1ZVJlbG9hZCgpXHJcblx0XHQpO1xyXG5cclxuXHRcdC8vIHF1ZXVlUmVsb2FkIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkIGZvciBlYWNoIGluZGl2aWR1YWwgaXRlbVxyXG5cdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlci5lbnRyaWVzLmZvckVhY2goXHJcblx0XHRcdGNvbGxlY3Rpb25FbnRyeSA9PiBjb2xsZWN0aW9uRW50cnkucXVldWVSZWxvYWQoKVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGdldENvbGxlY3Rpb25NYXRjaGVyIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGFkZFRvVGFiOiBib29sZWFuID0gdHJ1ZSk6IENvbGxlY3Rpb25NYXRjaGVyIHtcclxuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25NYXRjaGVyID0gdGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnkuY29uc3RydWN0KFtsb2NhbENhY2hlLmNvbGxlY3Rpb25zXSwgZmFsc2UsIHRydWUpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdC8vIHRoaXMgaXMgb25seSByZWxldmFudCBpZiB0aGVyZSBhcmUgbm8gY29sbGVjdGlvbnMgdG8gYWRkIHRoZSBpdGVtIHRvLCBidXQgd2Ugc3RpbGwgd2FudCB0byBzYXZlIHRoZSBpdGVtXHJcblx0XHRcdGlmIChhZGRUb1RhYilcclxuXHRcdFx0XHRsb2NhbENhY2hlLml0ZW1zLmFkZChpdGVtRW50cnkpO1xyXG5cclxuXHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIuZXhwYW5kKGl0ZW1FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGNvbGxlY3Rpb25NYXRjaGVyO1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hUaXRsZSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCwgZGVmZXJSZXF1ZXN0PzogYm9vbGVhbik6IFByb21pc2VJbnRlcmZhY2U8c3RyaW5nPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5pdGVtSGFuZGxlci5mZXRjaFRpdGxlKGl0ZW1UeXBlLCBpdGVtSWQsIGRlZmVyUmVxdWVzdCwgdGhpcy5nZXRMb2NhbENhY2hlKCkuaXRlbXMpO1xyXG5cdH1cclxuXHJcblx0Z2V0SXRlbUJ5SWQgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQsIG9wdGlvbnM6IEl0ZW1PcHRpb25zLCBpc1Jvb3Q/OiBib29sZWFuKTogUHJvbWlzZUludGVyZmFjZTxJdGVtUmVzb3VyY2U+IHtcclxuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5pdGVtSGFuZGxlci5mZXRjaEl0ZW0oXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRpdGVtSWQsXHJcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKSxcclxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtc1xyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHQoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVJdGVtUmVzb3VyY2UoaXRlbUVudHJ5LCBvcHRpb25zLCBpc1Jvb3QpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRnZXRJdGVtc0J5SWQgKGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZHM6IG51bWJlcltdLCBvcHRpb25zOiBhbnkpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1SZXNvdXJjZVtdPiB7XHJcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZmV0Y2hJdGVtcyhcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdGl0ZW1JZHMsXHJcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKSxcclxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtc1xyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHQoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlSXRlbVJlc291cmNlcyhpdGVtRW50cmllcywgb3B0aW9ucyk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGdldEl0ZW1zQnlRdWVyeSAoaXRlbVR5cGU6IHN0cmluZywgcXVlcnk6IGFueSwgb3B0aW9uczogYW55KTogUHJvbWlzZUludGVyZmFjZTxJdGVtUmVzb3VyY2VbXT4ge1xyXG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xyXG5cdFx0Y29uc3QgZW50cnlPcHRpb25zID0gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UuYWRkUGFyZW50Q29uZGl0aW9uKHF1ZXJ5LCBlbnRyeU9wdGlvbnMucGFyZW50KSxcclxuXHRcdFx0e1tpdGVtVHlwZV06IGVudHJ5T3B0aW9ucy5jb2x1bW5zfVxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHRyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NSZXNwb25zZShcclxuXHRcdFx0XHRcdHJlc3BvbnNlLFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UubGlua3NbaXRlbVR5cGVdLFxyXG5cdFx0XHRcdFx0ZW50cnlPcHRpb25zLnBhcmVudCxcclxuXHRcdFx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIGVudHJ5T3B0aW9ucy5jb2x1bW5zLCByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKSlcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCkudGhlbihcclxuXHRcdFx0KGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUl0ZW1SZXNvdXJjZXMoaXRlbUVudHJpZXMsIG9wdGlvbnMpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGRlcGVuZGVkIG9uIHRoZSByZXR1cm4gbGlua3MgYm9vbGVhbi4gdHJ1ZSByZXR1cm5zIHRoZSBUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwLlxyXG5cdCAqIFRoZSB0eXBlIGhhcyB0byBiZSBhc3NlcnRlZCBhdCB1c2Ugc2luY2UgeW91IG9ubHkga25vdyB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuIHZhbHVlIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZFxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IGl0ZW1UeXBlXHJcblx0ICogQHBhcmFtIG9wdGlvbnNcclxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IHJldHVybkxpbmtzXHJcblx0ICogQHBhcmFtIHtib29sZWFufSBpc1Jvb3RcclxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZUludGVyZmFjZTxJdGVtUmVzb3VyY2UgfCBUZW1wbGF0ZUl0ZW1FbnRyeU1hcD59XHJcblx0ICovXHJcblx0Z2V0TmV3UmVzb3VyY2UgKFxyXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnMgPSB7fSxcclxuXHRcdHJldHVybkxpbmtzOiBib29sZWFuID0gZmFsc2UsXHJcblx0XHRpc1Jvb3Q/OiBib29sZWFuXHJcblx0KTogUHJvbWlzZUludGVyZmFjZTxJdGVtUmVzb3VyY2UgfCBUZW1wbGF0ZUl0ZW1SZXNvdXJjZU1hcD4ge1xyXG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xyXG5cclxuXHRcdG9wdGlvbnMuZWRpdCA9IHRydWU7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZmV0Y2hOZXdJdGVtKFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpLFxyXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zXHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdChpdGVtRW50cnlSZXNvdXJjZTogVGVtcGxhdGVJdGVtRW50cnlNYXApID0+IHtcclxuXHRcdFx0XHRjb25zdCBtYWluID0gbG9jYWxDYWNoZS5jcmVhdGVJdGVtUmVzb3VyY2UoaXRlbUVudHJ5UmVzb3VyY2UubWFpbiwgb3B0aW9ucywgaXNSb290LCB0cnVlKTtcclxuXHRcdFx0XHRjb25zdCBsaW5rZWQgPSB0aGlzLnByb2Nlc3NMaW5rZWRJdGVtcyhpdGVtRW50cnlSZXNvdXJjZS5saW5rZWQsIG9wdGlvbnMsIHRydWUpOyAvLyBkbyB0aGlzIGJlZm9yZWhhbmRcclxuXHJcblx0XHRcdFx0aWYgKCFyZXR1cm5MaW5rcylcclxuXHRcdFx0XHRcdHJldHVybiAobWFpbiBhcyBJdGVtUmVzb3VyY2UpO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gKHttYWluOiBtYWluLCBsaW5rZWQ6IGxpbmtlZH0gYXMgVGVtcGxhdGVJdGVtUmVzb3VyY2VNYXApO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRnZXREdXBsaWNhdGVCeUlkIChcclxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdGR1cGxpY2F0ZUlkOiBJdGVtSWQsXHJcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9ucyA9IHt9LFxyXG5cdFx0cmV0dXJuTGlua3M/OiBib29sZWFuLFxyXG5cdFx0aXNSb290PzogYm9vbGVhblxyXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8SXRlbVJlc291cmNlIHwgVGVtcGxhdGVJdGVtUmVzb3VyY2VNYXA+IHtcclxuXHRcdG9wdGlvbnMuaXNEdXBsaWNhdGUgPSB0cnVlO1xyXG5cclxuXHRcdGlmIChvcHRpb25zLnRlbXBsYXRlT3B0aW9ucyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRvcHRpb25zLnRlbXBsYXRlT3B0aW9ucyA9IHt9O1xyXG5cclxuXHRcdGlmIChvcHRpb25zLnRlbXBsYXRlT3B0aW9ucy5pdGVtID09PSB1bmRlZmluZWQpXHJcblx0XHRcdG9wdGlvbnMudGVtcGxhdGVPcHRpb25zLml0ZW0gPSBkdXBsaWNhdGVJZDtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5nZXROZXdSZXNvdXJjZShpdGVtVHlwZSwgb3B0aW9ucywgcmV0dXJuTGlua3MsIGlzUm9vdCk7XHJcblx0fVxyXG5cclxuXHQvLyBzdGF0ZUtleSBjYW4gYmUgYSBrZXl3b3JkIG9yIGEgbG9jYWwgaWQgKGluIGNhc2Ugb2YgYSByZWZyZXNoKVxyXG5cdGdldEl0ZW1CeVN0YXRlIChcclxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdHN0YXRlS2V5OiBJdGVtSWQgfCBzdHJpbmcsXHJcblx0XHRvcHRpb25zPzogSXRlbU9wdGlvbnMsXHJcblx0XHRpc1Jvb3Q/OiBib29sZWFuXHJcblx0KTogUHJvbWlzZUludGVyZmFjZTxJdGVtUmVzb3VyY2U+IHtcclxuXHRcdGNvbnN0IHBhcnNlZFN0YXRlS2V5ID0gdGhpcy5rZXlTZXJ2aWNlLnBhcnNlU3RhdGVLZXkoPHN0cmluZz4gc3RhdGVLZXkpO1xyXG5cclxuXHRcdGlmIChwYXJzZWRTdGF0ZUtleSA9PT0gbnVsbCkge1xyXG5cdFx0XHRjb25zdCBpdGVtSWQgPSA8SXRlbUlkPiBzdGF0ZUtleTtcclxuXHJcblx0XHRcdGlmICghdGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZChpdGVtSWQpIHx8IHRoaXMuZ2V0TG9jYWxDYWNoZSgpLml0ZW1zLmNvbnRhaW5zKGl0ZW1UeXBlLCBpdGVtSWQpKVxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmdldEl0ZW1CeUlkKGl0ZW1UeXBlLCBpdGVtSWQsIG9wdGlvbnMsIGlzUm9vdCk7XHJcblx0XHR9IGVsc2UgaWYgKHBhcnNlZFN0YXRlS2V5LnR5cGUgPT09IFN0YXRlS2V5VHlwZS5EdXBsaWNhdGUpIHtcclxuXHRcdFx0cmV0dXJuIDxQcm9taXNlSW50ZXJmYWNlPEl0ZW1SZXNvdXJjZT4+IHRoaXMuZ2V0RHVwbGljYXRlQnlJZChcclxuXHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHQ8SXRlbUlkPiBwYXJzZWRTdGF0ZUtleS5pdGVtSWQsXHJcblx0XHRcdFx0b3B0aW9ucyxcclxuXHRcdFx0XHRmYWxzZSxcclxuXHRcdFx0XHRpc1Jvb3RcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gPFByb21pc2VJbnRlcmZhY2U8SXRlbVJlc291cmNlPj4gdGhpcy5nZXROZXdSZXNvdXJjZShpdGVtVHlwZSwgb3B0aW9ucywgZmFsc2UsIGlzUm9vdCk7XHJcblx0fVxyXG5cclxuXHRnZXRDb2xsZWN0aW9uRGVmIChpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zOiBhbnkpIHtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdGl0ZW1UeXBlOiBpdGVtVHlwZSxcclxuXHRcdFx0b3B0aW9uczoge1xyXG5cdFx0XHRcdGVudHJ5OiB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyksIC8vIHdlIG5lZWQgdGhlIGRlZmF1bHQgY29sdW1uIHZhbHVlXHJcblx0XHRcdFx0cmVzb3VyY2U6IHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxyXG5cdFx0XHR9XHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0Z2V0TGlua0NvbGxlY3Rpb25zRGVmIChsaW5rVHlwZTogc3RyaW5nLCBsaW5rSWRBcnJheTogbnVtYmVyW10sIGl0ZW1UeXBlOiBzdHJpbmcsIGxpbmtGaWVsZDogc3RyaW5nLCBvcHRpb25zOiBhbnkpIHtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdGl0ZW1UeXBlOiBpdGVtVHlwZSxcclxuXHRcdFx0bGlua1R5cGU6IGxpbmtUeXBlLFxyXG5cdFx0XHRsaW5rSWRBcnJheTogbGlua0lkQXJyYXksXHJcblx0XHRcdGxpbmtGaWVsZDogbGlua0ZpZWxkLFxyXG5cdFx0XHRvcHRpb25zOiB7XHJcblx0XHRcdFx0ZW50cnk6IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKSxcclxuXHRcdFx0XHRyZXNvdXJjZTogdGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpXHJcblx0XHRcdH1cclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHRnZXRDb2xsZWN0aW9uIChpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zOiBhbnkpOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25SZXNvdXJjZT4ge1xyXG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmZldGNoKFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpLFxyXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxyXG5cdFx0XHRsb2NhbENhY2hlLmNvbGxlY3Rpb25zLFxyXG5cdFx0XHRsb2NhbENhY2hlLmRlZmVycmVkQ29sbGVjdGlvbnNcclxuXHRcdCkudGhlbihcclxuXHRcdFx0ZW50cnkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZShcclxuXHRcdFx0XHRcdGVudHJ5LFxyXG5cdFx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Z2V0Q29sbGVjdGlvbkZyb21EZWYgKGRlZmluaXRpb246IGFueSk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvblJlc291cmNlPiB7XHJcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZmV0Y2goXHJcblx0XHRcdGRlZmluaXRpb24uaXRlbVR5cGUsXHJcblx0XHRcdGRlZmluaXRpb24ub3B0aW9ucy5lbnRyeSxcclxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtcyxcclxuXHRcdFx0bG9jYWxDYWNoZS5jb2xsZWN0aW9ucyxcclxuXHRcdFx0bG9jYWxDYWNoZS5kZWZlcnJlZENvbGxlY3Rpb25zXHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdGVudHJ5ID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UoZW50cnksIGRlZmluaXRpb24ub3B0aW9ucy5yZXNvdXJjZSk7XHJcblxyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBAZGVwcmVjYXRlZCwgdXNlIGBwYXJlbnRgIGluIG9wdGlvbnNcclxuXHQgKi9cclxuXHRnZXRMaW5rQ29sbGVjdGlvbiAobGlua1R5cGU6IHN0cmluZywgbGlua0lkOiBudW1iZXIsIGl0ZW1UeXBlOiBzdHJpbmcsIG9wdGlvbnM6IGFueSk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvblJlc291cmNlPiB7XHJcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XHJcblx0XHRjb25zdCBlbnRyeU9wdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyk7XHJcblxyXG5cdFx0ZW50cnlPcHRpb25zLnBhcmVudCA9IHtpdGVtVHlwZTogbGlua1R5cGUsIGl0ZW1JZDogbGlua0lkfTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5mZXRjaChcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdGVudHJ5T3B0aW9ucyxcclxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtcyxcclxuXHRcdFx0bG9jYWxDYWNoZS5jb2xsZWN0aW9ucyxcclxuXHRcdFx0bG9jYWxDYWNoZS5kZWZlcnJlZENvbGxlY3Rpb25zXHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdChlbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlKFxyXG5cdFx0XHRcdFx0ZW50cnksXHJcblx0XHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucylcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRnZXRMaW5rQ29sbGVjdGlvbnMgKGxpbmtUeXBlOiBzdHJpbmcsIGxpbmtJZEFycmF5OiBudW1iZXJbXSwgaXRlbVR5cGU6IHN0cmluZywgb3B0aW9uczogYW55KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcD4ge1xyXG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xyXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuYmF0Y2hGZXRjaChcclxuXHRcdFx0bGlua1R5cGUsXHJcblx0XHRcdGxpbmtJZEFycmF5LFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpLFxyXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxyXG5cdFx0XHRsb2NhbENhY2hlLmNvbGxlY3Rpb25zLFxyXG5cdFx0XHRsb2NhbENhY2hlLmRlZmVycmVkQ29sbGVjdGlvbnNcclxuXHRcdCkudGhlbihcclxuXHRcdFx0KGNvbGxlY3Rpb25FbnRyaWVzOiBDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZXMoXHJcblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cmllcyxcclxuXHRcdFx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGdldExpbmtDb2xsZWN0aW9uc0Zyb21EZWYgKGRlZmluaXRpb246IGFueSk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA+IHtcclxuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5iYXRjaEZldGNoKFxyXG5cdFx0XHRkZWZpbml0aW9uLmxpbmtUeXBlLFxyXG5cdFx0XHRkZWZpbml0aW9uLmxpbmtJZEFycmF5LFxyXG5cdFx0XHRkZWZpbml0aW9uLml0ZW1UeXBlLFxyXG5cdFx0XHRkZWZpbml0aW9uLm9wdGlvbnMuZW50cnksXHJcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMsXHJcblx0XHRcdGxvY2FsQ2FjaGUuY29sbGVjdGlvbnMsXHJcblx0XHRcdGxvY2FsQ2FjaGUuZGVmZXJyZWRDb2xsZWN0aW9uc1xyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHQoY29sbGVjdGlvbkVudHJpZXM6IENvbGxlY3Rpb25FbnRyeVtdKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlcyhcclxuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyaWVzLFxyXG5cdFx0XHRcdFx0ZGVmaW5pdGlvbi5vcHRpb25zLnJlc291cmNlXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Z2V0QWxsTGlua0NvbGxlY3Rpb25zIChsaW5rVHlwZTogc3RyaW5nLCBpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zOiBhbnkpOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShsaW5rVHlwZSwge30sIHt9KVxyXG5cdFx0XHQudGhlbihcclxuXHRcdFx0XHRyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRMaW5rQ29sbGVjdGlvbnMoXHJcblx0XHRcdFx0XHRcdGxpbmtUeXBlLFxyXG5cdFx0XHRcdFx0XHRyZXNwb25zZS5saW5rc1tsaW5rVHlwZV0sXHJcblx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0XHRvcHRpb25zXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdCk7XHJcblx0fVxyXG5cclxuXHRjbG9uZUl0ZW0gKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlLCBvcHRpb25zOiBhbnkpOiBJdGVtUmVzb3VyY2Uge1xyXG5cdFx0cmV0dXJuIHRoaXMuYWRkU2luZ2xlSXRlbShpdGVtUmVzb3VyY2UuZW50cnkuY2xvbmUoKSwgb3B0aW9ucywgZmFsc2UpO1xyXG5cdH1cclxuXHJcblx0Y2xvbmVDb2xsZWN0aW9uIChjb2xsZWN0aW9uUmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSwgb3B0aW9uczogYW55LCBjb252ZXJzaW9uTWFwOiBhbnkpOiBDb2xsZWN0aW9uUmVzb3VyY2Uge1xyXG5cdFx0bGV0IHBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xyXG5cclxuXHRcdGlmIChwYXJlbnQgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cGFyZW50ID0gbnVsbDtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5hZGRDb2xsZWN0aW9uKFxyXG5cdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2UuZW50cnkuY2xvbmUocGFyZW50LCBjb252ZXJzaW9uTWFwKSxcclxuXHRcdFx0b3B0aW9uc1xyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHNhdmVDdXJyZW50TG9jYWxDYWNoZSAoXHJcblx0XHRjbG9zZVRhYj86IGJvb2xlYW4sXHJcblx0XHRwYXJhbWV0ZXJzPzogQ3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCxcclxuXHRcdGJyZWFrdXBCeVBhcmVudD86IGJvb2xlYW4sXHJcblx0XHRvbkFmdGVyQ3JlYXRlQ2FsbGJhY2s/OiAoY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCkgPT4gdm9pZFxyXG5cdCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLnNhdmUoY2xvc2VUYWIsIHBhcmFtZXRlcnMsIGJyZWFrdXBCeVBhcmVudCwgb25BZnRlckNyZWF0ZUNhbGxiYWNrKTtcclxuXHR9XHJcblxyXG5cdGdldEN1cnJlbnRDb2xsZWN0aW9ucyAoKTogQ29sbGVjdGlvbkNhY2hlIHtcclxuXHRcdHJldHVybiB0aGlzLmdldExvY2FsQ2FjaGUoKS5jb2xsZWN0aW9ucztcclxuXHR9XHJcblxyXG5cdGdldEN1cnJlbnRJdGVtcyAoKTogSXRlbUNhY2hlIHtcclxuXHRcdHJldHVybiB0aGlzLmdldExvY2FsQ2FjaGUoKS5pdGVtcztcclxuXHR9XHJcblxyXG5cdGdldE1vZHVsZUNoYW5nZXMgKGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKSkge1xyXG5cdFx0aWYgKGxvY2FsQ2FjaGUucm9vdEl0ZW0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdpdGVtQWRtaW5pc3RyYXRvcjogTm8gcm9vdCBpdGVtIGZvciBsb2NhbCBjYWNoZSAnICsgbG9jYWxDYWNoZS5pZCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMubW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdGxvY2FsQ2FjaGUucm9vdEl0ZW0sXHJcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMsXHJcblx0XHRcdGxvY2FsQ2FjaGUuY29sbGVjdGlvbnNcclxuXHRcdCkucHJvY2VzcygpO1xyXG5cdH1cclxuXHJcblx0YWRkU2luZ2xlSXRlbSAoXHJcblx0XHRpdGVtRW50cnk6IEl0ZW1FbnRyeSxcclxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zLFxyXG5cdFx0aXNSb290PzogYm9vbGVhbixcclxuXHRcdGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKVxyXG5cdCk6IEl0ZW1SZXNvdXJjZSB7XHJcblx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVJdGVtUmVzb3VyY2UobG9jYWxDYWNoZS5pdGVtcy5hZGQoaXRlbUVudHJ5KSwgb3B0aW9ucywgaXNSb290KTtcclxuXHR9XHJcblxyXG5cdGFkZFNpbmdsZUl0ZW1zIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIG9wdGlvbnM6IEl0ZW1PcHRpb25zKSB7XHJcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1SZXNvdXJjZVtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXHJcblx0XHRcdHJlc3VsdC5wdXNoKHRoaXMuYWRkU2luZ2xlSXRlbShpdGVtRW50cnksIG9wdGlvbnMsIGZhbHNlLCBsb2NhbENhY2hlKSk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGFkZENvbGxlY3Rpb24gKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LCBvcHRpb25zOiBhbnkpOiBDb2xsZWN0aW9uUmVzb3VyY2Uge1xyXG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xyXG5cdFx0Y29uc3QgY29sbGVjdGlvbkNhY2hlID0gbG9jYWxDYWNoZS5jb2xsZWN0aW9ucztcclxuXHJcblx0XHRjb2xsZWN0aW9uQ2FjaGUuYWRkKGNvbGxlY3Rpb25FbnRyeSk7XHJcblxyXG5cdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlKFxyXG5cdFx0XHRjb2xsZWN0aW9uRW50cnksXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY3JlYXRlSXRlbVJlc291cmNlcyAoXHJcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXHJcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXHJcblx0XHRvcHRpb25zOiBhbnksXHJcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlXHJcblx0KTogSXRlbVJlc291cmNlW10ge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdHJlc3VsdC5wdXNoKGxvY2FsQ2FjaGUuY3JlYXRlSXRlbVJlc291cmNlKGl0ZW1FbnRyeSwgb3B0aW9ucykpO1xyXG5cclxuXHRcdFx0aWYgKGl0ZW1UeXBlID09PSAnUHJvamVjdG5vdGl0aWUnKSB7XHJcblx0XHRcdFx0Y3JlYXRlUGF0aChcclxuXHRcdFx0XHRcdGxvY2FsQ2FjaGUudGFiUmVxdWVzdFBhcmFtZXRlcnMsXHJcblx0XHRcdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcclxuXHRcdFx0XHRcdFt7fSwge25vX25vdGlmaWNhdGlvbjogdHJ1ZX1dXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzTGlua2VkSXRlbXMgKFxyXG5cdFx0bGlua2VkRW50cmllczogTGlua2VkSXRlbUVudHJ5TWFwW10sXHJcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9ucyxcclxuXHRcdGFkZFRvQ29sbGVjdGlvbnM6IGJvb2xlYW4gPSB0cnVlXHJcblx0KTogSXRlbVJlc291cmNlc0l0ZW1UeXBlTWFwIHtcclxuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbVJlc291cmNlc0l0ZW1UeXBlTWFwID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBlbnRyeSBvZiBsaW5rZWRFbnRyaWVzKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW1UeXBlID0gZW50cnkuaXRlbVR5cGU7XHJcblxyXG5cdFx0XHRyZXN1bHRbaXRlbVR5cGVdID0gdGhpcy5jcmVhdGVJdGVtUmVzb3VyY2VzKGVudHJ5Lml0ZW1UeXBlLCBlbnRyeS5pdGVtRW50cmllcywgb3B0aW9ucywgbG9jYWxDYWNoZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCFhZGRUb0NvbGxlY3Rpb25zKVxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cclxuXHRcdC8vIHRoZSBpdGVtRW50cmllcyBhcmUgaW4gdG9wLWRvd24gb3JkZXIsIHNvIGNhbGwgZm9yIGVhY2ggaXRlbSB0eXBlIHNlcGFyYXRlbHlcclxuXHRcdGZvciAoY29uc3QgZW50cnkgb2YgbGlua2VkRW50cmllcylcclxuXHRcdFx0dGhpcy5nZXRDb2xsZWN0aW9uTWF0Y2hlcihlbnRyeS5pdGVtRW50cmllcywgZmFsc2UpLmFkZFRvQ29sbGVjdGlvbnMoKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0ZXhwYW5kUHJvY2Vzc0xpbmtlZEl0ZW1zIChcclxuXHRcdGxpbmtlZEVudHJpZXM6IExpbmtlZEl0ZW1FbnRyeU1hcFtdLFxyXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNcclxuXHQpOiBQcm9taXNlPEl0ZW1SZXNvdXJjZXNJdGVtVHlwZU1hcD4ge1xyXG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xyXG5cdFx0bGV0IHByb21pc2VDaGFpbiA9IHRoaXMucHJvbWlzZUludGVyZmFjZS53aGVuKHt9KTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIGxpbmtlZEVudHJpZXMpIHtcclxuXHRcdFx0Ly8gdGhlIGl0ZW1FbnRyaWVzIGFyZSBpbiB0b3AtZG93biBvcmRlciwgc28gY2FsbCBmb3IgZWFjaCBpdGVtIHR5cGUgc2VwYXJhdGVseVxyXG5cdFx0XHRwcm9taXNlQ2hhaW4gPSBwcm9taXNlQ2hhaW4udGhlbihcclxuXHRcdFx0XHR0aGlzLmNvbnN0cnVjdE9uSXRlbXNFeHBhbmRlZChlbnRyeS5pdGVtVHlwZSwgZW50cnkuaXRlbUVudHJpZXMsIG9wdGlvbnMsIGxvY2FsQ2FjaGUpLFxyXG5cdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBwcm9taXNlQ2hhaW47XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGNvbnN0cnVjdE9uSXRlbXNFeHBhbmRlZCAoXHJcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXHJcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXHJcblx0XHRpdGVtT3B0aW9uczogSXRlbU9wdGlvbnMsXHJcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlXHJcblx0KTogKGRlc3RpbmF0aW9uOiBJdGVtUmVzb3VyY2VzSXRlbVR5cGVNYXApID0+IFByb21pc2U8SXRlbVJlc291cmNlc0l0ZW1UeXBlTWFwPiB7XHJcblx0XHRyZXR1cm4gZGVzdGluYXRpb24gPT4ge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5leHBhbmRBZGRUb0NvbGxlY3Rpb25zKGl0ZW1UeXBlLCBpdGVtRW50cmllcywgbnVsbCwgbG9jYWxDYWNoZSkudGhlbihcclxuXHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHRkZXN0aW5hdGlvbltpdGVtVHlwZV0gPSB0aGlzLmNyZWF0ZUl0ZW1SZXNvdXJjZXMoaXRlbVR5cGUsIGl0ZW1FbnRyaWVzLCBpdGVtT3B0aW9ucywgbG9jYWxDYWNoZSk7XHJcblxyXG5cdFx0XHRcdFx0cmV0dXJuIGRlc3RpbmF0aW9uO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdCk7XHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBleHBhbmRBZGRUb0NvbGxlY3Rpb25zIChcclxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcclxuXHRcdHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlIHwgbnVsbCA9IG51bGwsXHJcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKClcclxuXHQpOiBQcm9taXNlPEl0ZW1SZXNvdXJjZVtdIHwgbnVsbD4ge1xyXG5cdFx0Y29uc3QgY29sbGVjdGlvbk1hdGNoZXIgPSB0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdFtsb2NhbENhY2hlLmNvbGxlY3Rpb25zXSxcclxuXHRcdFx0ZmFsc2UsXHJcblx0XHRcdGZhbHNlXHJcblx0XHQpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxyXG5cdFx0XHRjb2xsZWN0aW9uTWF0Y2hlci5leHBhbmQoaXRlbUVudHJ5KTtcclxuXHJcblx0XHRjb25zdCBjb2x1bW5TdXBlcnNldCA9IHRoaXMuZ2V0Q29sdW1uU3VwZXJzZXQoY29sbGVjdGlvbk1hdGNoZXIuZ2V0Q29sbGVjdGlvbnNXaXRoRml0dGluZ0l0ZW1zKCkpO1xyXG5cclxuXHRcdGlmIChjb2x1bW5TdXBlcnNldCA9PT0gbnVsbClcclxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZUludGVyZmFjZS53aGVuKENvbGxlY3Rpb25SZXNvdXJjZSA9PT0gbnVsbCA/IG51bGwgOiBbXSk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZXhwYW5kTG9jYWxFbnRyaWVzKGl0ZW1UeXBlLCBpdGVtRW50cmllcywgY29sdW1uU3VwZXJzZXQsIGxvY2FsQ2FjaGUuaXRlbXMpLnRoZW4oXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gY29sbGVjdGlvbk1hdGNoZXIuYWRkVG9Db2xsZWN0aW9ucyhyZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2UpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHQvLyB3ZSBjb3VsZCBtb3ZlIHRoaXMgdG8gdGhlIENvbGxlY3Rpb25NYXRjaGVyIGlmIHdlIGVuZm9yY2UgYSBzaW5nbGUgaXRlbSB0eXBlXHJcblx0cHJpdmF0ZSBnZXRDb2x1bW5TdXBlcnNldCAoY29sbGVjdGlvbkVudHJpZXM6IENvbGxlY3Rpb25FbnRyeVtdKTogQ29sdW1uU2V0IHwgbnVsbCB7XHJcblx0XHRjb25zdCBjb2x1bW5TZXRJZE1hcDoge1tjb2x1bW5TZXRJZDogbnVtYmVyXTogYm9vbGVhbn0gPSB7fTtcclxuXHJcblx0XHRpZiAoY29sbGVjdGlvbkVudHJpZXMubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHJcblx0XHRsZXQgcmVzdWx0ID0gY29sbGVjdGlvbkVudHJpZXNbMF0uY29sdW1ucztcclxuXHJcblx0XHRmb3IgKGxldCBpID0gMTsgaSA8IGNvbGxlY3Rpb25FbnRyaWVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGNvbGxlY3Rpb25FbnRyaWVzW2ldO1xyXG5cdFx0XHRjb25zdCBjb2x1bW5TZXQgPSBjb2xsZWN0aW9uRW50cnkuY29sdW1ucztcclxuXHJcblx0XHRcdGlmIChjb2x1bW5TZXRJZE1hcFtjb2x1bW5TZXQuaWRdID09PSB0cnVlKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0Y29sdW1uU2V0SWRNYXBbY29sdW1uU2V0LmlkXSA9IHRydWU7XHJcblxyXG5cdFx0XHRyZXN1bHQgPSByZXN1bHQubWVyZ2UoY29sdW1uU2V0KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0TG9jYWxDYWNoZSAoKTogTG9jYWxDYWNoZSB7XHJcblx0XHRyZXR1cm4gdGhpcy5sb2NhbENhY2hlTWFuYWdlci5nZXRDdXJyZW50TG9jYWxDYWNoZSh0aGlzLmF1dGhJbnRlcmZhY2UuZ2V0VW5pcXVlVXNlcklkKCkpO1xyXG5cdH1cclxuXHJcblx0cmVzZXRMb2NhbENhY2hlICgpIHtcclxuXHRcdGNvbnN0IG9sZExvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcclxuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmxvY2FsQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xyXG5cclxuXHRcdG9sZExvY2FsQ2FjaGUuY2xlYXJSZXNvdXJjZXMoKTtcclxuXHJcblx0XHR0aGlzLmxvY2FsQ2FjaGVNYW5hZ2VyLnNldEN1cnJlbnRMb2NhbENhY2hlKHRoaXMuYXV0aEludGVyZmFjZS5nZXRVbmlxdWVVc2VySWQoKSwgbG9jYWxDYWNoZSk7XHJcblx0fVxyXG5cclxuXHRhZGRUb0NvbGxlY3Rpb25zIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZT86IENvbGxlY3Rpb25SZXNvdXJjZSk6IEl0ZW1SZXNvdXJjZVtdIHwgbnVsbCB7XHJcblx0XHRyZXR1cm4gdGhpcy5nZXRDb2xsZWN0aW9uTWF0Y2hlcihpdGVtRW50cmllcykuYWRkVG9Db2xsZWN0aW9ucyhyZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2UpO1xyXG5cdH1cclxuXHJcblx0cmVtb3ZlRnJvbUNvbGxlY3Rpb25zIChcclxuXHRcdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcclxuXHRcdHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZT86IENvbGxlY3Rpb25SZXNvdXJjZVxyXG5cdCk6IEl0ZW1SZXNvdXJjZVtdIHwgbnVsbCB7XHJcblx0XHRyZXR1cm4gdGhpcy5nZXRDb2xsZWN0aW9uTWF0Y2hlcihpdGVtRW50cmllcywgZmFsc2UpLnJlbW92ZUZyb21Db2xsZWN0aW9ucyhyZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2UpO1xyXG5cdH1cclxuXHJcblx0c2F2ZUxvY2FsIChpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSkge1xyXG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gaXRlbVJlc291cmNlLmVudHJ5O1xyXG5cclxuXHRcdGl0ZW1FbnRyeS5zZXREaXNwbGF5TmFtZSgpO1xyXG5cdFx0dGhpcy5hZGRUb0NvbGxlY3Rpb25zKFtpdGVtRW50cnldKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlSW50ZXJmYWNlLndoZW4oaXRlbVJlc291cmNlKTtcclxuXHR9XHJcblxyXG5cdHVwZGF0ZUl0ZW1JZE1hcCAoY29sbGVjdGlvbk1hcDogYW55LCBjb252ZXJzaW9uTWFwKSB7XHJcblx0XHRpZiAoY29udmVyc2lvbk1hcCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0Zm9yIChjb25zdCBvbGRJZCBpbiBjb252ZXJzaW9uTWFwKSB7XHJcblx0XHRcdGNvbnN0IG5ld0lkID0gY29udmVyc2lvbk1hcFtvbGRJZF07XHJcblxyXG5cdFx0XHRpZiAoY29sbGVjdGlvbk1hcFtvbGRJZF0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGNvbGxlY3Rpb25NYXBbbmV3SWRdID0gY29sbGVjdGlvbk1hcFtvbGRJZF07XHJcblx0XHRcdGRlbGV0ZSBjb2xsZWN0aW9uTWFwW29sZElkXTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZSAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIHJlc291cmNlT3B0aW9uczogYW55LCBwcm9jZXNzT3B0aW9ucyA9IHRydWUpOiBDb2xsZWN0aW9uUmVzb3VyY2Uge1xyXG5cdFx0cmV0dXJuIHRoaXMuYWRkQ29sbGVjdGlvbihcclxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LFxyXG5cdFx0XHRwcm9jZXNzT3B0aW9ucyA/IHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhyZXNvdXJjZU9wdGlvbnMpIDogcmVzb3VyY2VPcHRpb25zXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlSXRlbVJlc291cmNlIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgb3B0aW9uczogYW55LCBpc1Jvb3Q6IGJvb2xlYW4pIHtcclxuXHRcdHJldHVybiB0aGlzLmFkZFNpbmdsZUl0ZW0oaXRlbUVudHJ5LCBvcHRpb25zLCBpc1Jvb3QpO1xyXG5cdH1cclxuXHJcblx0b25CZWZvcmVTYXZlIChrZXk6IHN0cmluZywgY2FsbGJhY2s6IChsb2NhbENhY2hlOiBMb2NhbENhY2hlKSA9PiBhbnksIGNvbmRpdGlvbj86IExvY2FsQ2FjaGVDYWxsYmFja0NvbmRpdGlvbikge1xyXG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLm9uQmVmb3JlU2F2ZShrZXksIGNhbGxiYWNrLCBjb25kaXRpb24pO1xyXG5cdH1cclxuXHJcblx0b25TYXZlU3VjY2VzcyAoa2V5OiBzdHJpbmcsIGNhbGxiYWNrOiBPblNhdmVDYWxsYmFjaywgY29uZGl0aW9uPzogTG9jYWxDYWNoZUNhbGxiYWNrQ29uZGl0aW9uKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbENhY2hlKCkub25TYXZlU3VjY2VzcyhrZXksIGNhbGxiYWNrLCBjb25kaXRpb24pO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBRdWVyeU1hdGNoZXJGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgSXRlbUVudHJ5TWFwLCBJdGVtRW50cnlQYXJlbnRJZE1hcCwgSXRlbUlkLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtQ2FjaGUge1xyXG5cdGVudHJpZXM6IEl0ZW1FbnRyeU1hcCA9IHt9O1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3RvcnlcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdHNvbWUgKGNhbGxiYWNrOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGJvb2xlYW4pIHtcclxuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBlbnRyaWVzKSB7XHJcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGVudHJpZXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdFx0aWYgKGNhbGxiYWNrKGVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF0pKVxyXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRnZXRCeUl0ZW1UeXBlIChpdGVtVHlwZTogSXRlbVR5cGUpIHtcclxuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllcylcclxuXHRcdFx0cmVzdWx0LnB1c2goZW50cmllc1tpdGVtSWRdKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0QnlRdWVyeSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBxdWVyeSkge1xyXG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBlbnRyaWVzKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGVudHJpZXNbaXRlbUlkXTtcclxuXHJcblx0XHRcdGlmIChpdGVtRW50cnkuaXNEZWZlcnJlZCgpKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0aWYgKHRoaXMubWF0Y2hRdWVyeShpdGVtRW50cnksIHF1ZXJ5KSlcclxuXHRcdFx0XHRyZXN1bHQucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRnZXRMb2NhbEJ5UXVlcnkgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcXVlcnkpIHtcclxuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllcykge1xyXG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSBlbnRyaWVzW2l0ZW1JZF07XHJcblxyXG5cdFx0XHRpZiAoIWl0ZW1FbnRyeS5pc0xvY2FsKCkpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRpZiAodGhpcy5tYXRjaFF1ZXJ5KGl0ZW1FbnRyeSwgcXVlcnkpKVxyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdldEJ5UGFyZW50IChwYXJlbnRUeXBlOiBJdGVtVHlwZSwgcGFyZW50SWQ6IEl0ZW1JZCwgaXRlbVR5cGU6IEl0ZW1UeXBlKSB7XHJcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGVudHJpZXMpIHtcclxuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gZW50cmllc1tpdGVtSWRdO1xyXG5cdFx0XHRjb25zdCBwYXJlbnQgPSBpdGVtRW50cnkucGFyZW50O1xyXG5cclxuXHRcdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXHJcblx0XHRcdGlmIChwYXJlbnQuaXRlbVR5cGUgPT09IHBhcmVudFR5cGUgJiYgcGFyZW50Lml0ZW1JZCA9PSBwYXJlbnRJZClcclxuXHRcdFx0XHRyZXN1bHQucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRiYXRjaEdldExvY2FsQnlQYXJlbnQgKFxyXG5cdFx0cGFyZW50VHlwZTogSXRlbVR5cGUsXHJcblx0XHRwYXJlbnRJZHM6IEl0ZW1JZFtdLFxyXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0YWRkaXRpb25hbFF1ZXJ5OiBhbnlcclxuXHQpOiBJdGVtRW50cnlQYXJlbnRJZE1hcCB7XHJcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5UGFyZW50SWRNYXAgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIG9mIHBhcmVudElkcylcclxuXHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IFtdO1xyXG5cclxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllcykge1xyXG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSBlbnRyaWVzW2l0ZW1JZF07XHJcblx0XHRcdGNvbnN0IHBhcmVudCA9IGl0ZW1FbnRyeS5wYXJlbnQ7XHJcblxyXG5cdFx0XHRpZiAocGFyZW50ID09PSBudWxsKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0aWYgKHBhcmVudC5pdGVtVHlwZSAhPT0gcGFyZW50VHlwZSB8fCByZXN1bHRbcGFyZW50Lml0ZW1JZF0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGlmICghaXRlbUVudHJ5LmlzTG9jYWwoKSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGlmIChhZGRpdGlvbmFsUXVlcnkgPT09IG51bGwgfHwgdGhpcy5tYXRjaFF1ZXJ5KGl0ZW1FbnRyeSwgYWRkaXRpb25hbFF1ZXJ5KSlcclxuXHRcdFx0XHRyZXN1bHRbcGFyZW50Lml0ZW1JZF0ucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRmb3JFYWNoIChjYWxsYmFjazogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiB2b2lkKSB7XHJcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gZW50cmllcykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBlbnRyaWVzW2l0ZW1UeXBlXSlcclxuXHRcdFx0XHRjYWxsYmFjayhlbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHRvQXJyYXkgKCkge1xyXG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGVudHJpZXMpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllc1tpdGVtVHlwZV0pXHJcblx0XHRcdFx0cmVzdWx0LnB1c2goZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGFkZCAoaXRlbUVudHJ5OiBJdGVtRW50cnkpOiBJdGVtRW50cnkge1xyXG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xyXG5cclxuXHRcdGlmIChlbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRlbnRyaWVzW2l0ZW1UeXBlXSA9IHt9O1xyXG5cclxuXHRcdHJldHVybiBlbnRyaWVzW2l0ZW1UeXBlXVtpdGVtRW50cnkuaXRlbUlkXSA9IGl0ZW1FbnRyeTtcclxuXHR9XHJcblxyXG5cdGdldCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCB8IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXTtcclxuXHR9XHJcblxyXG5cdC8vIHNob3VsZCBiZSBmYXN0XHJcblx0Y29udGFpbnMgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQgfCBzdHJpbmcpIHtcclxuXHRcdHJldHVybiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdICE9PSB1bmRlZmluZWQgJiYgdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdICE9PSB1bmRlZmluZWQ7XHJcblx0fVxyXG5cclxuXHR1cGRhdGVJdGVtSWQgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBvbGRJdGVtSWQpIHtcclxuXHRcdGNvbnN0IGVudHJ5TWFwID0gdGhpcy5lbnRyaWVzW2l0ZW1FbnRyeS5pdGVtVHlwZV07XHJcblxyXG5cdFx0ZGVsZXRlIGVudHJ5TWFwW29sZEl0ZW1JZF07XHJcblx0XHRyZXR1cm4gZW50cnlNYXBbaXRlbUVudHJ5Lml0ZW1JZF0gPSBpdGVtRW50cnk7XHJcblx0fVxyXG5cclxuXHRjbGVhciAoaXRlbUVudHJ5OiBJdGVtRW50cnkpOiBib29sZWFuIHtcclxuXHRcdGlmIChpdGVtRW50cnkgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHR0aGlzLmVudHJpZXMgPSB7fTtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtRW50cnkuaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRyZXR1cm4gZGVsZXRlIHRoaXMuZW50cmllc1tpdGVtRW50cnkuaXRlbVR5cGVdW2l0ZW1FbnRyeS5pdGVtSWRdO1xyXG5cdH1cclxuXHJcblx0bWF0Y2hRdWVyeSAoaXRlbUVudHJ5OiBJdGVtRW50cnksIHF1ZXJ5KTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0aXRlbUVudHJ5Lml0ZW1UeXBlLFxyXG5cdFx0XHRpdGVtRW50cnkuZ2V0RmllbGRzKCksXHJcblx0XHRcdGl0ZW1FbnRyeS5wYXJlbnRcclxuXHRcdCkubWF0Y2hRdWVyeShxdWVyeS5vYmplY3QpID09PSB0cnVlOyAvLyBUT0RPOiBtYXliZT9cclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcblxyXG5pbXBvcnQgeyBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEFMTF9QRVJNSVNTSU9OUyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IEF1dGhJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgQXBpUmVzcG9uc2UsIEZpZWxkTWFwLCBJdGVtSWQsIEl0ZW1JZENvbnZlcnNpb25NYXAsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgc2hhbGxvd01lcmdlIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtRW50cnlTZXJ2aWNlIHtcclxuXHQvLyB0b2RvOiB0cmFuc2xhdGVcclxuXHR1bmRlZmluZWRJdGVtRXJyb3IgPSAnVGhlIHJlcXVlc3RlZCBpdGVtIGNvdWxkIG5vdCBiZSBmb3VuZCAvIHlvdXIgY3VycmVudCBwZXJtaXNzaW9ucyBhcmUgbm90IHN1ZmZpY2llbnQnO1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGF1dGhJbnRlcmZhY2U6IEF1dGhJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2VcclxuXHQpIHtcclxuXHJcblx0fVxyXG5cclxuXHRwcm9jZXNzT3B0aW9ucyAob3B0aW9ucz8pIHtcclxuXHRcdHJldHVybiBzaGFsbG93TWVyZ2UoXHJcblx0XHRcdG9wdGlvbnMsXHJcblx0XHRcdHtcclxuXHRcdFx0XHRjb2x1bW5zOiB0cnVlLFxyXG5cdFx0XHRcdHBhcmVudDogbnVsbCxcclxuXHRcdFx0XHR0ZW1wbGF0ZU9wdGlvbnM6IHt9LFxyXG5cdFx0XHRcdHRlbXBsYXRlQ29sdW1uczoge30sXHJcblx0XHRcdFx0ZGVmZXJSZXF1ZXN0OiBmYWxzZSxcclxuXHRcdFx0XHRpc0R1cGxpY2F0ZTogZmFsc2VcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZVVuZm91bmRMb2NhbEl0ZW1FcnJvciAoaXRlbVR5cGU6IEl0ZW1UeXBlKSB7XHJcblx0XHRyZXR1cm4ge21lc3NhZ2U6ICdBIGxvY2FsIGl0ZW0gb2YgdHlwZSAnICsgaXRlbVR5cGUgKyAnIGNvdWxkIG5vdCBiZSBmb3VuZCd9O1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlTG9jYWxDb252ZXJzaW9uTWFwIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkLCBkb0V4dGVuZCA9IGZhbHNlLCBhcGlSZXNwb25zZTogQXBpUmVzcG9uc2UpIHtcclxuXHRcdGNvbnN0IGFwaUl0ZW1JZCA9IGFwaVJlc3BvbnNlLmxpbmtzW2l0ZW1UeXBlXVswXTtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUlkQ29udmVyc2lvbk1hcCA9IHt9O1xyXG5cclxuXHRcdHJlc3VsdFtpdGVtVHlwZV0gPSB7fTtcclxuXHRcdHJlc3VsdFtpdGVtVHlwZV1bYXBpSXRlbUlkXSA9IGl0ZW1JZDtcclxuXHJcblx0XHRpZiAoZG9FeHRlbmQpXHJcblx0XHRcdHRoaXMuZXhwYW5kTG9jYWxDb252ZXJzaW9uTWFwKGl0ZW1UeXBlLCBhcGlJdGVtSWQsIGFwaVJlc3BvbnNlLCByZXN1bHQpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRleHBhbmRMb2NhbENvbnZlcnNpb25NYXAgKHBhcmVudFR5cGU6IEl0ZW1UeXBlLCBwYXJlbnRJZDogSXRlbUlkLCBhcGlSZXNwb25zZTogQXBpUmVzcG9uc2UsIGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApIHtcclxuXHRcdGNvbnN0IGxpbmtzID0gYXBpUmVzcG9uc2UuaXRlbXNbcGFyZW50VHlwZV1bcGFyZW50SWRdLmxpbmtzO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gbGlua3MpIHtcclxuXHRcdFx0Y29uc3QgaWRBcnJheSA9IGxpbmtzW2l0ZW1UeXBlXTtcclxuXHJcblx0XHRcdGlmIChjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID0ge307XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGFwaUl0ZW1JZCBvZiBpZEFycmF5KSB7XHJcblx0XHRcdFx0Y29udmVyc2lvbk1hcFtpdGVtVHlwZV1bYXBpSXRlbUlkXSA9IHRoaXMua2V5U2VydmljZS5nZXRMb2NhbElkKCk7XHJcblxyXG5cdFx0XHRcdHRoaXMuZXhwYW5kTG9jYWxDb252ZXJzaW9uTWFwKGl0ZW1UeXBlLCBhcGlJdGVtSWQsIGFwaVJlc3BvbnNlLCBjb252ZXJzaW9uTWFwKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZXhwYW5kQ29udmVyc2lvbk1hcCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAsIG5ld0l0ZW1JZD86IEl0ZW1JZCkge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XHJcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xyXG5cclxuXHRcdGxldCBjb252ZXJzaW9uTWFwRW50cnk7XHJcblxyXG5cdFx0aWYgKGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID0ge307XHJcblxyXG5cdFx0Y29udmVyc2lvbk1hcEVudHJ5ID0gY29udmVyc2lvbk1hcFtpdGVtVHlwZV07XHJcblxyXG5cdFx0aWYgKGNvbnZlcnNpb25NYXBFbnRyeVtpdGVtSWRdICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBjb252ZXJzaW9uTWFwRW50cnlbaXRlbUlkXTtcclxuXHJcblx0XHRpZiAobmV3SXRlbUlkID09PSB1bmRlZmluZWQpXHJcblx0XHRcdG5ld0l0ZW1JZCA9IHRoaXMua2V5U2VydmljZS5nZXRMb2NhbElkKCk7XHJcblxyXG5cdFx0cmV0dXJuIGNvbnZlcnNpb25NYXBFbnRyeVtpdGVtSWRdID0gbmV3SXRlbUlkO1xyXG5cdH1cclxuXHJcblx0YmF0Y2hFeHBhbmRDb252ZXJzaW9uTWFwIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApIHtcclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxyXG5cdFx0XHR0aGlzLmV4cGFuZENvbnZlcnNpb25NYXAoaXRlbUVudHJ5LCBjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHRyZXR1cm4gY29udmVyc2lvbk1hcDtcclxuXHR9XHJcblxyXG5cdGdldENvbnZlcnNpb25WYWx1ZSAoaXRlbVR5cGUsIGl0ZW1JZCwgbWFwKSB7XHJcblx0XHRpZiAobWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRcdHJldHVybiBtYXBbaXRlbVR5cGVdW2l0ZW1JZF07XHJcblx0fVxyXG5cclxuXHRiYXRjaENsb25lIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAgPSB7fSkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdC8vIHRoZSB0aGUgaXRlbXMgbWlnaHQgcmVmZXJlbmNlIGVhY2ggb3RoZXIsIHNvIHVwZGF0ZSB0aGUgY29udmVyc2lvbiBtYXAgZmlyc3RcclxuXHRcdHRoaXMuYmF0Y2hFeHBhbmRDb252ZXJzaW9uTWFwKGl0ZW1FbnRyaWVzLCBjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcclxuXHRcdFx0cmVzdWx0LnB1c2goaXRlbUVudHJ5LmNsb25lKGNvbnZlcnNpb25NYXApKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0RnVsbE5hbWUgKGZpcnN0TmFtZSwgaW5maXgsIGxhc3ROYW1lKSB7XHJcblx0XHRyZXR1cm4gZmlyc3ROYW1lLnRyaW0oKVxyXG5cdFx0XHQuY29uY2F0KCcgJywgaW5maXgpLnRyaW0oKSAvLyBpbmZpeCBjYW4gYmUgYW4gZW1wdHkgc3RyaW5nXHJcblx0XHRcdC5jb25jYXQoJyAnLCBsYXN0TmFtZSk7XHJcblx0fVxyXG5cclxuXHRnZXRUaXRsZUZpZWxkIChpdGVtVHlwZSkge1xyXG5cdFx0c3dpdGNoIChpdGVtVHlwZSkge1xyXG5cdFx0XHRjYXNlICdFeGVtcGxhYXInOlxyXG5cdFx0XHRcdHJldHVybiAnc2VyaWVudW1tZXInO1xyXG5cdFx0XHRjYXNlICdGYWN0dXVyJzpcclxuXHRcdFx0XHRyZXR1cm4gJ251bW1lcic7XHJcblx0XHRcdGNhc2UgJ0ZpbGVzJzpcclxuXHRcdFx0XHRyZXR1cm4gJ2ZyaWVuZGx5bmFtZSc7XHJcblx0XHRcdGNhc2UgJ0Z1bmN0aWUnOlxyXG5cdFx0XHRjYXNlICdTdGFuZGFhcmRmdW5jdGllJzpcclxuXHRcdFx0XHRyZXR1cm4gJ25hYW1pbnRlcm4nO1xyXG5cdFx0XHRjYXNlICdWb29ycmFhZG11dGF0aWUnOlxyXG5cdFx0XHRcdHJldHVybiAnb21zY2hyaWp2aW5nJztcclxuXHRcdFx0Y2FzZSAnQmFyY29kZSc6XHJcblx0XHRcdFx0cmV0dXJuICdjb2RlJztcclxuXHRcdFx0Y2FzZSAnQmV0YWFsbWlkZGVsJzpcclxuXHRcdFx0Y2FzZSAnQmV0YWxpbmdzY29uZGl0aWUnOlxyXG5cdFx0XHRjYXNlICdCcmllZnBhcGllcic6XHJcblx0XHRcdGNhc2UgJ1RheENsYXNzJzpcclxuXHRcdFx0Y2FzZSAnVGF4U2NoZW1hJzpcclxuXHRcdFx0Y2FzZSAnQ29uZGl0aW9uJzpcclxuXHRcdFx0Y2FzZSAnRmFjdHV1cm1vbWVudCc6XHJcblx0XHRcdGNhc2UgJ0Z1bmN0aWVncm9lcCc6XHJcblx0XHRcdGNhc2UgJ0dyb290Ym9layc6XHJcblx0XHRcdGNhc2UgJ0luaHV1cic6XHJcblx0XHRcdGNhc2UgJ0luaHV1cmdyb2VwJzpcclxuXHRcdFx0Y2FzZSAnSW5odXVybWF0ZXJpYWFsJzpcclxuXHRcdFx0Y2FzZSAnTWF0ZXJpYWFsJzpcclxuXHRcdFx0Y2FzZSAnTWF0ZXJpYWFsQ2F0JzpcclxuXHRcdFx0Y2FzZSAnTWVkZXdlcmtlcnRhcmllZic6XHJcblx0XHRcdGNhc2UgJ05vdGl0aWUnOlxyXG5cdFx0XHRjYXNlICdQbGFubmluZ21hdGVyaWFhbCc6XHJcblx0XHRcdGNhc2UgJ1Byb2plY3QnOlxyXG5cdFx0XHRjYXNlICdTdGFmZmVsZ3JvZXAnOlxyXG5cdFx0XHRjYXNlICdTdWJwcm9qZWN0JzpcclxuXHRcdFx0Y2FzZSAnVGFhayc6XHJcblx0XHRcdGNhc2UgJ1RhZyc6XHJcblx0XHRcdGNhc2UgJ1RlbXBsYXRlJzpcclxuXHRcdFx0Y2FzZSAnVGlqZCc6XHJcblx0XHRcdGNhc2UgJ1RpdGVsJzpcclxuXHRcdFx0Y2FzZSAnVHlwZSc6XHJcblx0XHRcdGNhc2UgJ1ZvZXJ0dWlnJzpcclxuXHRcdFx0XHRyZXR1cm4gJ25hYW0nO1xyXG5cdFx0XHQvLyBjYXNlICdDb250YWN0JzpcclxuXHRcdFx0Ly8gY2FzZSAnTWVkZXdlcmtlcic6XHJcblx0XHRcdC8vIGNhc2UgJ1BlcnNvbic6XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0Ly8gb25seSB1c2UgZGlzcGxheW5hbWUgZm9yIGl0ZW1zIHRoYXQgZG9udCd0IGhhdmUgYSBzaW1wbGUsIHdyaXRhYmxlIG5hbWUgZmllbGRcclxuXHRcdFx0XHQvLyB0aGlzIGZ1bmN0aW9uIGlzIGFsc28gdXNlZCBmb3IgdGVtcGxhdGVkIGl0ZW1zXHJcblx0XHRcdFx0cmV0dXJuICdkaXNwbGF5bmFtZSc7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBUT0RPOiB3ZSBjYW4gcmVtb3ZlIHRoZXNlIG9uY2UgYWxsIGNvbHVtbnMgYXJlIHJlc3BlY3RlZCBmb3IgbG9jYWwgaXRlbXMgW1JNNC0xMDM3OF1cclxuXHRnZXRMb2NhbERlZmF1bHRWYWx1ZXMgKCk6IEZpZWxkTWFwIHtcclxuXHRcdHJldHVybiB7cGVybWlzc2lvbnM6IEFMTF9QRVJNSVNTSU9OUywgY3JlYXRvcjogdGhpcy5hdXRoSW50ZXJmYWNlLmdldFVzZXJJZCgpLCBjcmVhdGVkOiBtb21lbnQoKX07XHJcblx0fVxyXG5cclxuXHRoYXNMb2NhbERlZmF1bHRWYWx1ZSAoY29sdW1uSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG5cdFx0c3dpdGNoIChjb2x1bW5JZCkge1xyXG5cdFx0XHRjYXNlICdwZXJtaXNzaW9ucyc6XHJcblx0XHRcdGNhc2UgJ2NyZWF0b3InOlxyXG5cdFx0XHRjYXNlICdjcmVhdGVkJzpcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7XHJcblx0QXBpRm9ybWF0dGVyLFxyXG5cdEFwaVJlc3BvbnNlUHJvY2Vzc29yLFxyXG5cdEJhdGNoU3RhdHVzLFxyXG5cdENvbHVtbkV4cGFuc2lvbixcclxuXHRDb2x1bW5IYW5kbGVyLFxyXG5cdENvbHVtbkluZm8sXHJcblx0Q29sdW1uU2V0LFxyXG5cdENvbHVtblV0aWwsXHJcblx0SXRlbUNhY2hlLFxyXG5cdEl0ZW1FbnRyeVNlcnZpY2UsXHJcblx0S2V5U2VydmljZVxyXG59IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBFTlRSWV9TVEFUVVMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQge1xyXG5cdEJhdGNoU3RhdHVzRmFjdG9yeSxcclxuXHRDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdENvbHVtblNldEZhY3RvcnksXHJcblx0SXRlbUNhY2hlRmFjdG9yeSxcclxuXHRJdGVtRW50cnlGYWN0b3J5LFxyXG5cdFRlbXBsYXRlRmFjdG9yeVxyXG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSwgVGVtcGxhdGUgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQge1xyXG5cdEFwaVJlc3BvbnNlLFxyXG5cdEVudHJ5U3RhdHVzLCBGaWVsZE1hcCxcclxuXHRJdGVtSWQsXHJcblx0SXRlbUlkQ29udmVyc2lvbk1hcCxcclxuXHRJdGVtT3B0aW9ucyxcclxuXHRJdGVtVHlwZSxcclxuXHRQcm9taXNlSW50ZXJmYWNlLFxyXG5cdEFwaVJlcXVlc3RDb2x1bW5zLFxyXG5cdFRlbXBsYXRlSXRlbUVudHJ5TWFwLFxyXG5cdExpbmtlZEl0ZW1FbnRyeU1hcFxyXG59IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IGdldEZpcnN0UHJvcGVydHksIGhhc1Byb3BlcnRpZXMgfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuLy8gdG9kbyBtYWtlIGNsYXNzXHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbUhhbmRsZXIge1xyXG5cdGVudHJpZXM6IEl0ZW1DYWNoZTtcclxuXHR0ZW1wbGF0ZXM6IHtbaXRlbVR5cGU6IHN0cmluZ106IFRlbXBsYXRlfSA9IHt9O1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxyXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGJhdGNoU3RhdHVzRmFjdG9yeTogQmF0Y2hTdGF0dXNGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsLFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgaXRlbUNhY2hlRmFjdG9yeTogSXRlbUNhY2hlRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgaXRlbUVudHJ5RmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcclxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSB0ZW1wbGF0ZUZhY3Rvcnk6IFRlbXBsYXRlRmFjdG9yeVxyXG5cdCkge1xyXG5cdFx0dGhpcy5lbnRyaWVzID0gdGhpcy5pdGVtQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hJdGVtIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkLCBvcHRpb25zOiBhbnksIGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGUpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1FbnRyeT4ge1xyXG5cdFx0Y29uc3QgZW50cnlTdGF0dXMgPSB0aGlzLmdldEVudHJ5U3RhdHVzKGl0ZW1UeXBlLCBpdGVtSWQsIG9wdGlvbnMsIGxvY2FsSXRlbUNhY2hlKTtcclxuXHJcblx0XHRpZiAoZW50cnlTdGF0dXMgPT09IG51bGwpXHJcblx0XHRcdHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5yZWplY3QodGhpcy5pdGVtRW50cnlTZXJ2aWNlLmNyZWF0ZVVuZm91bmRMb2NhbEl0ZW1FcnJvcihpdGVtVHlwZSkpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnJlc29sdmVDYWNoZWQoZW50cnlTdGF0dXMuZW50cnksIGVudHJ5U3RhdHVzLnN0YXR1cywgb3B0aW9ucyk7XHJcblx0fVxyXG5cclxuXHRmZXRjaE5ld0l0ZW0gKFxyXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnMsXHJcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlXHJcblx0KTogUHJvbWlzZUludGVyZmFjZTxUZW1wbGF0ZUl0ZW1FbnRyeU1hcD4ge1xyXG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gbG9jYWxJdGVtQ2FjaGUuYWRkKFxyXG5cdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0RGVmZXJyZWQoXHJcblx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0b3B0aW9ucy5pc0R1cGxpY2F0ZSA/IHRoaXMua2V5U2VydmljZS5nZXRMb2NhbER1cGxpY2F0ZUlkKCkgOiB0aGlzLmtleVNlcnZpY2UuZ2V0TG9jYWxJZCgpLFxyXG5cdFx0XHRcdHRydWUsXHJcblx0XHRcdFx0ZmFsc2VcclxuXHRcdFx0KVxyXG5cdFx0KTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5mZXRjaFRlbXBsYXRlKGl0ZW1UeXBlLCBvcHRpb25zLnRlbXBsYXRlT3B0aW9ucywgb3B0aW9ucy50ZW1wbGF0ZUNvbHVtbnMpLnRoZW4oXHJcblx0XHRcdHRlbXBsYXRlID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlTG9jYWwoaXRlbUVudHJ5LCBvcHRpb25zLnBhcmVudCwgdGVtcGxhdGUsIGxvY2FsSXRlbUNhY2hlKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0ZXJyb3IgPT4ge1xyXG5cdFx0XHRcdGl0ZW1FbnRyeS5yZWplY3QoZXJyb3IpO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIucmVqZWN0KGVycm9yKTtcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIGl0ZW1UeXBlXHJcblx0ICogQHBhcmFtIGl0ZW1JZHNcclxuXHQgKiBAcGFyYW0gb3B0aW9uc1xyXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlSW50ZXJmYWNlPEl0ZW1FbnRyeVtdPn1cclxuXHQgKlxyXG5cdCAqIEZvciBldmVyeSBpdGVtaWQgZmluZCB0aGUgc3RhdHVzIG9mIHRoZSBJdGVtRW50cnkgYW5kIHJlc29sdmUgdGhlIHByb21pc2VzIHNvIHRoZSByZXN1bHQgaXNcclxuXHQgKiBhIHVzYWJsZSBJdGVtRW50cnlcclxuXHQgKi9cclxuXHJcblx0ZmV0Y2hJdGVtcyAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWRzOiBJdGVtSWRbXSwgb3B0aW9uczogYW55LCBsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlKTogUHJvbWlzZUludGVyZmFjZTxJdGVtRW50cnlbXT4ge1xyXG5cdFx0Y29uc3QgYmF0Y2hTdGF0dXMgPSB0aGlzLmJhdGNoU3RhdHVzRmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gaXRlbUVudHJ5Lml0ZW1JZCxcclxuXHRcdFx0KGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBpdGVtRW50cnkuZGVmZXJyZWQucHJvbWlzZVxyXG5cdFx0KTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBvZiBpdGVtSWRzKSB7XHJcblx0XHRcdGNvbnN0IGVudHJ5U3RhdHVzID0gdGhpcy5nZXRFbnRyeVN0YXR1cyhpdGVtVHlwZSwgaXRlbUlkLCBvcHRpb25zLCBsb2NhbEl0ZW1DYWNoZSk7XHJcblxyXG5cdFx0XHRpZiAoZW50cnlTdGF0dXMgPT09IG51bGwpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRiYXRjaFN0YXR1cy5hZGQoZW50cnlTdGF0dXMpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHByb21pc2VzOiB7ZW50cmllczogUHJvbWlzZUludGVyZmFjZTxJdGVtRW50cnlbXT4sIHJlcXVlc3RzPzogUHJvbWlzZUludGVyZmFjZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj59ID1cclxuXHRcdFx0e2VudHJpZXM6IGJhdGNoU3RhdHVzLmdldFByb21pc2VzKCl9O1xyXG5cclxuXHRcdGlmIChiYXRjaFN0YXR1cy5oYXNSZXF1ZXN0cygpKVxyXG5cdFx0XHRwcm9taXNlcy5yZXF1ZXN0cyA9IHRoaXMucmVxdWVzdEl0ZW1zKGl0ZW1UeXBlLCBiYXRjaFN0YXR1cy5nZXRSZXF1ZXN0SWRzKCksIG9wdGlvbnMuY29sdW1ucyk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHByb21pc2VzKS50aGVuKFxyXG5cdFx0XHRyZXNvbHZlZCA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuYmF0Y2hSZXNvbHZlKFxyXG5cdFx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0XHRiYXRjaFN0YXR1cyxcclxuXHRcdFx0XHRcdG9wdGlvbnMuY29sdW1ucyxcclxuXHRcdFx0XHRcdDx7ZW50cmllczogSXRlbUVudHJ5W10sIHJlcXVlc3RzPzogQXBpUmVzcG9uc2VQcm9jZXNzb3J9PiByZXNvbHZlZFxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHJlc29sdmVDYWNoZWQgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBzdGF0dXM6IEVOVFJZX1NUQVRVUywgb3B0aW9ucyk6IFByb21pc2VJbnRlcmZhY2U8SXRlbUVudHJ5PiB7XHJcblx0XHRzd2l0Y2ggKHN0YXR1cykge1xyXG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5DQUNIRUQ6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihpdGVtRW50cnkpO1xyXG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5QUk9NSVNFRDpcclxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmRlZmVycmVkLnByb21pc2U7XHJcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORDpcclxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmRlZmVycmVkLnByb21pc2UudGhlbihcclxuXHRcdFx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb2x2ZUNhY2hlZChcclxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnksXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5nZXRDYWNoZWRFbnRyeVN0YXR1cyhpdGVtRW50cnksIG9wdGlvbnMpLFxyXG5cdFx0XHRcdFx0XHRcdG9wdGlvbnNcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5FWFBBTkQ6XHJcblx0XHRcdFx0Y29uc3QgY29sdW1uRGlmZmVyZW5jZSA9IHRoaXMuY29sdW1uVXRpbC5tZXJnZVJlcXVlc3RDb2x1bW5zKFxyXG5cdFx0XHRcdFx0aXRlbUVudHJ5LmNvbHVtbnMucmVxdWVzdCxcclxuXHRcdFx0XHRcdG9wdGlvbnMuY29sdW1uc1xyXG5cdFx0XHRcdCkuZGlmZmVyZW5jZTtcclxuXHJcblx0XHRcdFx0dGhpcy5yZXF1ZXN0SXRlbShpdGVtRW50cnksIGNvbHVtbkRpZmZlcmVuY2UpLnRoZW4oXHJcblx0XHRcdFx0XHRyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0XHRcdHRoaXMucmVzb2x2ZUV4cGFuc2lvbihcclxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnksXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5pdGVtVHlwZSxcclxuXHRcdFx0XHRcdFx0XHRcdGNvbHVtbkRpZmZlcmVuY2UsXHJcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKVxyXG5cdFx0XHRcdFx0XHRcdCksXHJcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2VcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRlcnJvciA9PiB7XHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5yZWplY3QoZXJyb3IpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnkuZGVmZXJyZWQucHJvbWlzZTtcclxuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuUkVTT0xWRV9WQUxVRVM6XHJcblx0XHRcdFx0dGhpcy5yZXF1ZXN0SXRlbShpdGVtRW50cnkpLnRoZW4oXHJcblx0XHRcdFx0XHRyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0XHRcdHRoaXMucmVzb2x2ZVJlbW90ZVZhbHVlcyhpdGVtRW50cnksIHJlc3BvbnNlKTtcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRlcnJvciA9PiB7XHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5yZWplY3QoZXJyb3IpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnkuZGVmZXJyZWQucHJvbWlzZTtcclxuXHRcdFx0ZGVmYXVsdDogLy8gY2FzZSBFTlRSWV9TVEFUVVMuUkVTT0xWRTpcclxuXHRcdFx0XHR0aGlzLnJlcXVlc3RJdGVtKGl0ZW1FbnRyeSkudGhlbihcclxuXHRcdFx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5yZXNvbHZlUmVtb3RlKFxyXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeSxcclxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnkuY29sdW1ucy5yZXNvbHZlKHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpKSxcclxuXHRcdFx0XHRcdFx0XHRyZXNwb25zZVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGVycm9yID0+IHtcclxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LnJlamVjdChlcnJvcik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5kZWZlcnJlZC5wcm9taXNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmVzb2x2ZUxvY2FsIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgcGFyZW50LCB0ZW1wbGF0ZSwgbG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZSk6IFRlbXBsYXRlSXRlbUVudHJ5TWFwIHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xyXG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcclxuXHRcdGNvbnN0IGl0ZW1JZENvbnZlcnNpb24gPSB0aGlzLml0ZW1FbnRyeVNlcnZpY2UuY3JlYXRlTG9jYWxDb252ZXJzaW9uTWFwKGl0ZW1UeXBlLCBpdGVtSWQsIHRydWUsIHRlbXBsYXRlLnJlc3BvbnNlKTtcclxuXHJcblx0XHRpdGVtRW50cnkuY29sdW1ucyA9IHRlbXBsYXRlLmNvbHVtbnM7XHJcblxyXG5cdFx0aWYgKHBhcmVudCAhPT0gbnVsbClcclxuXHRcdFx0aXRlbUVudHJ5LnNldFBhcmVudChwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQpOyAvLyBjcmVhdGUgbmV3IG9iamVjdFxyXG5cclxuXHRcdGl0ZW1FbnRyeS5zZXRMb2NhbEZpZWxkcyh0ZW1wbGF0ZS5maWVsZHMsIGl0ZW1JZENvbnZlcnNpb24pLnJlc29sdmUoKTtcclxuXHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRtYWluOiBpdGVtRW50cnksXHJcblx0XHRcdGxpbmtlZDogdGhpcy5jcmVhdGVMb2NhbEVudHJpZXMoaXRlbVR5cGUsIGl0ZW1JZCwgdGVtcGxhdGUsIGl0ZW1JZENvbnZlcnNpb24sIGxvY2FsSXRlbUNhY2hlKVxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdHJlc29sdmVFeHBhbnNpb24gKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBjb2x1bW5FeHBhbnNpb246IENvbHVtbkV4cGFuc2lvbiwgcmVzcG9uc2U6IEFwaVJlc3BvbnNlKTogSXRlbUVudHJ5IHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xyXG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcclxuXHRcdGNvbnN0IGV4cGFuc2lvblJlc3VsdCA9IGNvbHVtbkV4cGFuc2lvbi5ydW4oaXRlbUVudHJ5LmNvbHVtbnMpO1xyXG5cclxuXHRcdC8vIEFub3RoZXIgcmVxdWVzdCBhbHJlYWR5IHJlcXVlc3RlZCB0aGUgY29sdW1ucyB3ZSBuZWVkIGhlcmUsIG5vIG5lZWQgdG8gZXhwYW5kIHRoZSBpdGVtIGFuZCByZXNvbHZlIGl0IChhbHJlYWR5IGRvbmUgYnkgb3RoZXIgcmVxdWVzdClcclxuXHRcdGlmIChleHBhbnNpb25SZXN1bHQgPT09IG51bGwpXHJcblx0XHRcdHJldHVybiBpdGVtRW50cnk7XHJcblxyXG5cdFx0aXRlbUVudHJ5LmV4cGFuZChcclxuXHRcdFx0cmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCksXHJcblx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBleHBhbnNpb25SZXN1bHQuZGlmZmVyZW5jZS5yb290KSxcclxuXHRcdFx0ZXhwYW5zaW9uUmVzdWx0XHJcblx0XHQpO1xyXG5cclxuXHRcdHJldHVybiBpdGVtRW50cnkucmVzb2x2ZSgpO1xyXG5cdH1cclxuXHJcblx0cmVzb2x2ZVJlbW90ZSAoaXRlbUVudHJ5OiBJdGVtRW50cnksIGNvbHVtblNldDogQ29sdW1uU2V0LCByZXNwb25zZTogQXBpUmVzcG9uc2UpOiBJdGVtRW50cnkgfCBudWxsIHtcclxuXHRcdGNvbnN0IHJlc3BvbnNlRmllbGRzID0gdGhpcy5nZXRSZXNwb25zZUZpZWxkcyhpdGVtRW50cnksIGNvbHVtblNldCwgcmVzcG9uc2UpO1xyXG5cclxuXHRcdGlmIChyZXNwb25zZUZpZWxkcyA9PT0gbnVsbClcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblxyXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeS5yZXNvbHZlRGVmZXJyZWQocmVzcG9uc2VGaWVsZHMuaW5pdGlhbCwgcmVzcG9uc2VGaWVsZHMuZGVyaXZlZCwgY29sdW1uU2V0KTtcclxuXHR9XHJcblxyXG5cdHJlc29sdmVSZW1vdGVWYWx1ZXMgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCByZXNwb25zZTogQXBpUmVzcG9uc2UpOiBJdGVtRW50cnkgfCBudWxsIHtcclxuXHRcdGNvbnN0IHJlc3BvbnNlRmllbGRzID0gdGhpcy5nZXRSZXNwb25zZUZpZWxkcyhpdGVtRW50cnksIGl0ZW1FbnRyeS5jb2x1bW5zLCByZXNwb25zZSk7XHJcblxyXG5cdFx0aWYgKHJlc3BvbnNlRmllbGRzID09PSBudWxsKVxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHJcblx0XHRyZXR1cm4gaXRlbUVudHJ5LnVwZGF0ZUZpZWxkcyhyZXNwb25zZUZpZWxkcy5pbml0aWFsLCByZXNwb25zZUZpZWxkcy5kZXJpdmVkLCBmYWxzZSkucmVzb2x2ZSgpO1xyXG5cdH1cclxuXHJcblx0Z2V0UmVzcG9uc2VGaWVsZHMgKFxyXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnksXHJcblx0XHRjb2x1bW5TZXQsXHJcblx0XHRyZXNwb25zZTogQXBpUmVzcG9uc2VcclxuXHQpOiB7aW5pdGlhbDogRmllbGRNYXAsIGRlcml2ZWQ6IEZpZWxkTWFwfSB8IG51bGwge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XHJcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xyXG5cdFx0Y29uc3QgaW5pdGlhbCA9IHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQpO1xyXG5cclxuXHRcdGlmIChpbml0aWFsID09PSB1bmRlZmluZWQpIHsgLy8gcXVlcnkgcmV0dXJuZWQgbm8gcmVzdWx0c1xyXG5cdFx0XHRpdGVtRW50cnkucmVqZWN0KCk7XHJcblx0XHRcdHRoaXMuZW50cmllcy5jbGVhcihpdGVtRW50cnkpO1xyXG5cclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0aW5pdGlhbDogaW5pdGlhbCxcclxuXHRcdFx0ZGVyaXZlZDogcmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtblNldC5yb290KVxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdGZldGNoVGVtcGxhdGUgKGl0ZW1UeXBlOiBzdHJpbmcsIHRlbXBsYXRlT3B0aW9uczogYW55ID0ge30sIHRlbXBsYXRlQ29sdW1uczogYW55ID0ge30pOiBQcm9taXNlSW50ZXJmYWNlPFRlbXBsYXRlPiB7XHJcblx0XHRjb25zdCBoYXNUZW1wbGF0ZU9wdGlvbnMgPSBoYXNQcm9wZXJ0aWVzKHRlbXBsYXRlT3B0aW9ucyk7XHJcblx0XHRjb25zdCBjb2x1bW5JdGVtVHlwZSA9IGdldEZpcnN0UHJvcGVydHkodGVtcGxhdGVDb2x1bW5zKTsgLy8gaXQncyBwb3NzaWJsZSB0byBhZGQgY29sdW1ucyB0byBsaW5rZWQgaXRlbXNcclxuXHJcblx0XHRpZiAoIWhhc1RlbXBsYXRlT3B0aW9ucykge1xyXG5cdFx0XHRjb25zdCBjYWNoZWRUZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGVzW2l0ZW1UeXBlXTtcclxuXHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRjYWNoZWRUZW1wbGF0ZSAhPT0gdW5kZWZpbmVkICYmXHJcblx0XHRcdFx0KFxyXG5cdFx0XHRcdFx0Y29sdW1uSXRlbVR5cGUgPT09IG51bGwgfHxcclxuXHRcdFx0XHRcdHRoaXMuY29sdW1uVXRpbC5yZXNwb25zZUNvbHVtbnNBdmFpbGFibGUoXHJcblx0XHRcdFx0XHRcdGNvbHVtbkl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0XHR0ZW1wbGF0ZUNvbHVtbnNbY29sdW1uSXRlbVR5cGVdLFxyXG5cdFx0XHRcdFx0XHRjYWNoZWRUZW1wbGF0ZS5yZXNwb25zZUNvbHVtbnNcclxuXHRcdFx0XHRcdClcclxuXHRcdFx0XHQpXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oY2FjaGVkVGVtcGxhdGUpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0dGVtcGxhdGU6IHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UudGVtcGxhdGUoaXRlbVR5cGUsIHRlbXBsYXRlT3B0aW9ucyksXHJcblx0XHRcdFx0YWRkaXRpb25hbENvbHVtbnM6IGNvbHVtbkl0ZW1UeXBlID09PSBudWxsID9cclxuXHRcdFx0XHRcdHt9IDpcclxuXHRcdFx0XHRcdHRoaXMuY29sdW1uSGFuZGxlci5mZXRjaChjb2x1bW5JdGVtVHlwZSwgdGVtcGxhdGVDb2x1bW5zW2NvbHVtbkl0ZW1UeXBlXSlcclxuXHRcdFx0fVxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHRyZXNvbHZlZCA9PiB7XHJcblx0XHRcdFx0Y29uc3QgdGVtcGxhdGVSZXNwb25zZSA9IHJlc29sdmVkLnRlbXBsYXRlO1xyXG5cclxuXHRcdFx0XHRjb25zdCB0ZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGVGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgdGVtcGxhdGVSZXNwb25zZSwgcmVzb2x2ZWQuYWRkaXRpb25hbENvbHVtbnMpO1xyXG5cclxuXHRcdFx0XHRpZiAoIWhhc1RlbXBsYXRlT3B0aW9ucyAmJiB0ZW1wbGF0ZVJlc3BvbnNlLmNhY2hlYWJsZSlcclxuXHRcdFx0XHRcdHRoaXMudGVtcGxhdGVzW2l0ZW1UeXBlXSA9IHRlbXBsYXRlO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gdGVtcGxhdGU7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGdldEVudHJ5U3RhdHVzIChcclxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdGl0ZW1JZDogSXRlbUlkLFxyXG5cdFx0b3B0aW9uczogYW55LFxyXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZVxyXG5cdCk6IEVudHJ5U3RhdHVzPEl0ZW1FbnRyeT4gfCBudWxsIHtcclxuXHRcdGxldCBpdGVtRW50cnk7XHJcblxyXG5cdFx0aWYgKHRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQoaXRlbUlkKSkge1xyXG5cdFx0XHRpdGVtRW50cnkgPSBsb2NhbEl0ZW1DYWNoZS5nZXQoaXRlbVR5cGUsIGl0ZW1JZCk7XHJcblxyXG5cdFx0XHRpZiAoaXRlbUVudHJ5ICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0cmV0dXJuIHtlbnRyeTogaXRlbUVudHJ5LCBzdGF0dXM6IHRoaXMuZ2V0Q2FjaGVkRW50cnlTdGF0dXMoaXRlbUVudHJ5LCBvcHRpb25zKX07XHJcblxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRpdGVtRW50cnkgPSB0aGlzLmVudHJpZXMuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpO1xyXG5cclxuXHRcdGlmIChpdGVtRW50cnkgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHtlbnRyeTogbG9jYWxJdGVtQ2FjaGUuYWRkKGl0ZW1FbnRyeSksIHN0YXR1czogdGhpcy5nZXRDYWNoZWRFbnRyeVN0YXR1cyhpdGVtRW50cnksIG9wdGlvbnMpfTtcclxuXHJcblx0XHRpdGVtRW50cnkgPSB0aGlzLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0RGVmZXJyZWQoaXRlbVR5cGUsIGl0ZW1JZCwgb3B0aW9ucy5jb2x1bW5zLCBvcHRpb25zLmRlZmVyUmVxdWVzdCk7XHJcblxyXG5cdFx0Y29uc3QgcGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XHJcblxyXG5cdFx0aWYgKHBhcmVudCAhPT0gbnVsbClcclxuXHRcdFx0aXRlbUVudHJ5LnNldFBhcmVudChwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQpO1xyXG5cclxuXHRcdGxvY2FsSXRlbUNhY2hlLmFkZChpdGVtRW50cnkpO1xyXG5cdFx0dGhpcy5lbnRyaWVzLmFkZChpdGVtRW50cnkpO1xyXG5cclxuXHRcdHJldHVybiB7XHJcblx0XHRcdGVudHJ5OiBpdGVtRW50cnksXHJcblx0XHRcdHN0YXR1czogb3B0aW9ucy5kZWZlclJlcXVlc3QgPyBFTlRSWV9TVEFUVVMuUFJPTUlTRUQgOiBFTlRSWV9TVEFUVVMuUkVTT0xWRVxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdGlzQ29sdW1uU3VwZXJzZXQgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBjb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucykge1xyXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeS5pc0xvY2FsKCkgfHwgaXRlbUVudHJ5LmNvbHVtbnMuaXNTdXBlcnNldE9mKGNvbHVtbnMpO1xyXG5cdH1cclxuXHJcblx0Z2V0Q2FjaGVkRW50cnlTdGF0dXMgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBvcHRpb25zKTogRU5UUllfU1RBVFVTIHtcclxuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0gb3B0aW9ucy5jb2x1bW5zO1xyXG5cclxuXHRcdGlmIChpdGVtRW50cnkuaXNEZWZlcnJlZCgpKSB7XHJcblx0XHRcdGlmIChpdGVtRW50cnkuZGVmZXJSZXF1ZXN0KSB7XHJcblx0XHRcdFx0aXRlbUVudHJ5LmNvbHVtbnMuZXhwYW5kUmVxdWVzdENvbHVtbnMocmVxdWVzdENvbHVtbnMpO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLlJFU09MVkU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiB0aGlzLmlzQ29sdW1uU3VwZXJzZXQoaXRlbUVudHJ5LCByZXF1ZXN0Q29sdW1ucykgP1xyXG5cdFx0XHRcdEVOVFJZX1NUQVRVUy5QUk9NSVNFRCA6XHJcblx0XHRcdFx0RU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORDtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIXRoaXMuaXNDb2x1bW5TdXBlcnNldChpdGVtRW50cnksIHJlcXVlc3RDb2x1bW5zKSkge1xyXG5cdFx0XHRpdGVtRW50cnkuZGVmZXIoKTtcclxuXHJcblx0XHRcdHJldHVybiBFTlRSWV9TVEFUVVMuRVhQQU5EO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChpdGVtRW50cnkucmVsb2FkUXVldWVkKSB7XHJcblx0XHRcdGl0ZW1FbnRyeS5yZWxvYWRRdWV1ZWQgPSBmYWxzZTtcclxuXHJcblx0XHRcdGlmIChpdGVtRW50cnkuaXNMb2NhbCgpKVxyXG5cdFx0XHRcdHJldHVybiBFTlRSWV9TVEFUVVMuQ0FDSEVEO1xyXG5cclxuXHRcdFx0aXRlbUVudHJ5LmRlZmVyKCk7XHJcblxyXG5cdFx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLlJFU09MVkVfVkFMVUVTO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBFTlRSWV9TVEFUVVMuQ0FDSEVEO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gaXRlbVR5cGVcclxuXHQgKiBAcGFyYW0ge0JhdGNoU3RhdHVzfSBiYXRjaFN0YXR1c1xyXG5cdCAqIEBwYXJhbSByZXF1ZXN0Q29sdW1uc1xyXG5cdCAqIEBwYXJhbSByZXNvbHZlZFxyXG5cdCAqIEByZXR1cm5zIHtJdGVtRW50cnlbXX1cclxuXHQgKlxyXG5cdCAqIGZvciBldmVyeSB0eXBlIG9mIGVudHJ5IHN0YXR1cyB0aGVyZSBpcyBpbiB0aGlzIGJhdGNoIHJlcXVlc3QgbWFrZSBzdXJlIHRoZSBlbnRyaWVzIGdldCByZXNvbHZlZC5cclxuXHQgKiB0aGVuIHJldHVybiBhIGFycmF5IG9mIHRoZSByZXN1bHRpbmcgSXRlbUVudHJ5QXJyYXlcclxuXHQgKi9cclxuXHRiYXRjaFJlc29sdmUgKFxyXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0YmF0Y2hTdGF0dXM6IEJhdGNoU3RhdHVzPEl0ZW1FbnRyeT4sXHJcblx0XHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMsXHJcblx0XHRyZXNvbHZlZDoge2VudHJpZXM6IEl0ZW1FbnRyeVtdLCByZXF1ZXN0cz86IEFwaVJlc3BvbnNlUHJvY2Vzc29yfVxyXG5cdCk6IEl0ZW1FbnRyeVtdIHwgUHJvbWlzZUludGVyZmFjZTxhbnk+IHtcclxuXHRcdGNvbnN0IHJlc3BvbnNlID0gPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiByZXNvbHZlZC5yZXF1ZXN0cztcclxuXHRcdGNvbnN0IHJlc29sdmVTdGF0dXMgPSBbRU5UUllfU1RBVFVTLlJFU09MVkVdO1xyXG5cclxuXHRcdGxldCBzdWNjZXNzID0gdHJ1ZTtcclxuXHJcblx0XHRpZiAoYmF0Y2hTdGF0dXMuaGFzRW50cmllcyhiYXRjaFN0YXR1cy5yZW1vdGVFeHBhbmRTdGF0dXMpKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0cmVxdWVzdENvbHVtbnMsXHJcblx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KClcclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdGJhdGNoU3RhdHVzLmZvckVhY2hFbnRyeShcclxuXHRcdFx0XHRiYXRjaFN0YXR1cy5yZW1vdGVFeHBhbmRTdGF0dXMsXHJcblx0XHRcdFx0aXRlbUVudHJ5ID0+IHRoaXMucmVzb2x2ZUV4cGFuc2lvbihpdGVtRW50cnksIGNvbHVtbkV4cGFuc2lvbiwgcmVzcG9uc2UpXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGJhdGNoU3RhdHVzLmhhc0VudHJpZXMocmVzb2x2ZVN0YXR1cykpIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uSW5mbyA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKSk7XHJcblxyXG5cdFx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXHJcblx0XHRcdFx0cmVzb2x2ZVN0YXR1cyxcclxuXHRcdFx0XHRpdGVtRW50cnkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMucmVzb2x2ZVJlbW90ZShpdGVtRW50cnksIGNvbHVtbkluZm8sIHJlc3BvbnNlKSA9PT0gbnVsbClcclxuXHRcdFx0XHRcdFx0c3VjY2VzcyA9IGZhbHNlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXHJcblx0XHRcdFtFTlRSWV9TVEFUVVMuUkVTT0xWRV9WQUxVRVNdLFxyXG5cdFx0XHRpdGVtRW50cnkgPT4ge1xyXG5cdFx0XHRcdGlmICh0aGlzLnJlc29sdmVSZW1vdGVWYWx1ZXMoaXRlbUVudHJ5LCByZXNwb25zZSkgPT09IG51bGwpXHJcblx0XHRcdFx0XHRzdWNjZXNzID0gZmFsc2U7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblxyXG5cdFx0Ly8gdG9kbzogbm8gaXRlbSBlcnJvciAoe21lc3NhZ2U6IHRoaXMuaXRlbUVudHJ5U2VydmljZS51bmRlZmluZWRJdGVtRXJyb3J9KVxyXG5cdFx0cmV0dXJuIHN1Y2Nlc3MgPyBiYXRjaFN0YXR1cy5nZXRBcnJheSgpIDogdGhpcy5lcnJvckhhbmRsZXIucmVqZWN0KCk7XHJcblx0fVxyXG5cclxuXHRmZXRjaFRpdGxlIChcclxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdGl0ZW1JZDogSXRlbUlkLFxyXG5cdFx0ZGVmZXJSZXF1ZXN0ID0gdHJ1ZSxcclxuXHRcdGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGVcclxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPHN0cmluZz4ge1xyXG5cdFx0Y29uc3QgdGl0bGVGaWVsZCA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5nZXRUaXRsZUZpZWxkKGl0ZW1UeXBlKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5mZXRjaEl0ZW0oXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRpdGVtSWQsXHJcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyh7Y29sdW1uczogW3RpdGxlRmllbGRdLCBkZWZlclJlcXVlc3Q6IGRlZmVyUmVxdWVzdH0pLFxyXG5cdFx0XHRsb2NhbEl0ZW1DYWNoZVxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHQvLyB0b2RvOiBJdGVtRW50cnkgfCBUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwXHJcblx0XHRcdChlbnRyeTogYW55KSA9PiB7XHJcblx0XHRcdFx0aWYgKGVudHJ5Lm1haW4gIT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdHJldHVybiBlbnRyeS5tYWluLmdldEZpZWxkcygpW3RpdGxlRmllbGRdO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gZW50cnkuZ2V0RmllbGRzKClbdGl0bGVGaWVsZF07XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZUxvY2FsRW50cmllcyAoXHJcblx0XHRwYXJlbnRUeXBlOiBJdGVtVHlwZSxcclxuXHRcdGxvY2FsUGFyZW50SWQ6IEl0ZW1JZCxcclxuXHRcdHRlbXBsYXRlOiBUZW1wbGF0ZSxcclxuXHRcdGl0ZW1JZENvbnZlcnNpb246IEl0ZW1JZENvbnZlcnNpb25NYXAsXHJcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlLFxyXG5cdFx0ZmlsdGVySXRlbUVudHJ5OiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGJvb2xlYW4gPSAoKSA9PiB0cnVlIC8vIHJldHVybiB0cnVlIHRvIGluY2x1ZGUgaXRlbVxyXG5cdCk6IExpbmtlZEl0ZW1FbnRyeU1hcFtdIHtcclxuXHRcdGNvbnN0IGFwaVJlc3BvbnNlID0gdGVtcGxhdGUucmVzcG9uc2U7XHJcblx0XHRjb25zdCBpdGVtRW50cnlNYXA6IHtbaXRlbVR5cGU6IHN0cmluZ106IEl0ZW1FbnRyeVtdfSA9IHt9O1xyXG5cdFx0Y29uc3QgY29sdW1uU2V0TWFwOiB7W2l0ZW1UeXBlOiBzdHJpbmddOiBDb2x1bW5TZXR9ID0ge307XHJcblx0XHRjb25zdCByZXN1bHQ6IExpbmtlZEl0ZW1FbnRyeU1hcFtdID0gW107XHJcblxyXG5cdFx0Y29uc3QgY3JlYXRlRW50cmllcyA9IChwYXJlbnRUeXBlMiwgbG9jYWxQYXJlbnRJZDIsIGFwaVBhcmVudElkKSA9PiB7XHJcblx0XHRcdGNvbnN0IHBhcmVudCA9IHtpdGVtVHlwZTogcGFyZW50VHlwZTIsIGl0ZW1JZDogbG9jYWxQYXJlbnRJZDJ9O1xyXG5cdFx0XHRjb25zdCBsaW5rcyA9IGFwaVJlc3BvbnNlLml0ZW1zW3BhcmVudFR5cGUyXVthcGlQYXJlbnRJZF0ubGlua3M7XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGxpbmtzKSB7XHJcblx0XHRcdFx0aWYgKCFsaW5rcy5oYXNPd25Qcm9wZXJ0eShpdGVtVHlwZSkpXHJcblx0XHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdFx0Ly8gdGhlIGl0ZW0gZW50cmllcyBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIHJlc3VsdCBpbiB0b3AtZG93biBvcmRlclxyXG5cdFx0XHRcdGlmIChpdGVtRW50cnlNYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdHJlc3VsdC5wdXNoKFxyXG5cdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0aXRlbVR5cGU6IGl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyaWVzOiBpdGVtRW50cnlNYXBbaXRlbVR5cGVdID0gW10sXHJcblx0XHRcdFx0XHRcdFx0Y29sdW1uU2V0OiBjb2x1bW5TZXRNYXBbaXRlbVR5cGVdID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0XHRcdFx0dHJ1ZSxcclxuXHRcdFx0XHRcdFx0XHRcdHRlbXBsYXRlLnJlc3BvbnNlQ29sdW1uc1xyXG5cdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGZvciAoY29uc3QgYXBpSXRlbUlkIG9mIGxpbmtzW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHRcdFx0Y29uc3QgbG9jYWxJdGVtSWQgPSBpdGVtSWRDb252ZXJzaW9uW2l0ZW1UeXBlXVthcGlJdGVtSWRdO1xyXG5cclxuXHRcdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuaXRlbUVudHJ5RmFjdG9yeS5jb25zdHJ1Y3RMb2NhbExpbmtlZChcclxuXHRcdFx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0XHRcdGxvY2FsSXRlbUlkLFxyXG5cdFx0XHRcdFx0XHRhcGlSZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgYXBpSXRlbUlkKSxcclxuXHRcdFx0XHRcdFx0cGFyZW50LFxyXG5cdFx0XHRcdFx0XHRjb2x1bW5TZXRNYXBbaXRlbVR5cGVdLFxyXG5cdFx0XHRcdFx0XHRpdGVtSWRDb252ZXJzaW9uXHJcblx0XHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRcdGlmICghZmlsdGVySXRlbUVudHJ5KGl0ZW1FbnRyeSkpXHJcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0XHRcdGxvY2FsSXRlbUNhY2hlLmFkZChpdGVtRW50cnkpO1xyXG5cdFx0XHRcdFx0aXRlbUVudHJ5TWFwW2l0ZW1UeXBlXS5wdXNoKGl0ZW1FbnRyeSk7XHJcblxyXG5cdFx0XHRcdFx0Y3JlYXRlRW50cmllcyhpdGVtVHlwZSwgbG9jYWxJdGVtSWQsIGFwaUl0ZW1JZCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9O1xyXG5cclxuXHRcdGNyZWF0ZUVudHJpZXMocGFyZW50VHlwZSwgbG9jYWxQYXJlbnRJZCwgYXBpUmVzcG9uc2UubGlua3NbcGFyZW50VHlwZV1bMF0pO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRleHBhbmRMb2NhbEVudHJpZXMgKFxyXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxyXG5cdFx0Y29sdW1uU2V0OiBDb2x1bW5TZXQsXHJcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlXHJcblx0KTogUHJvbWlzZTxJdGVtRW50cnlbXT4ge1xyXG5cdFx0aWYgKGl0ZW1FbnRyaWVzLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihpdGVtRW50cmllcyk7XHJcblxyXG5cdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgY29sdW1uU2V0LnJlcXVlc3QsIGNvbHVtblNldC5yZXNwb25zZSk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcclxuXHRcdFx0Y29uc3QgZXhwYW5zaW9uUmVzdWx0ID0gY29sdW1uRXhwYW5zaW9uLnJ1bihpdGVtRW50cnkuY29sdW1ucyk7XHJcblxyXG5cdFx0XHRpZiAoZXhwYW5zaW9uUmVzdWx0ICE9PSBudWxsKVxyXG5cdFx0XHRcdGl0ZW1FbnRyeS5leHBhbmRMb2NhbChleHBhbnNpb25SZXN1bHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLnJlc29sdmVEZXJpdmVkVmFsdWVzKGl0ZW1FbnRyaWVzLCBjb2x1bW5FeHBhbnNpb24uYWdncmVnYXRlUm9vdENvbHVtbnMoKSwgbG9jYWxJdGVtQ2FjaGUpO1xyXG5cdH1cclxuXHJcblx0cmVzb2x2ZURlcml2ZWRWYWx1ZXMgKFxyXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxyXG5cdFx0Y29sdW1uczogQ29sdW1uSW5mb1tdLFxyXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZVxyXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8SXRlbUVudHJ5W10+IHtcclxuXHRcdGNvbnN0IHByb21pc2VzOiBBcnJheTxQcm9taXNlSW50ZXJmYWNlPGFueT4+ID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucylcclxuXHRcdFx0cHJvbWlzZXMucHVzaCh0aGlzLmZldGNoRGVyaXZlZFZhbHVlc0J5Q29sdW1uKGl0ZW1FbnRyaWVzLCBjb2x1bW4sIGxvY2FsSXRlbUNhY2hlKSk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHByb21pc2VzKS50aGVuKFxyXG5cdFx0XHQoKSA9PiBpdGVtRW50cmllcyxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXREZWZhdWx0VmFsdWVzQnlDb2x1bW4gKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgcm9vdENvbHVtbjogQ29sdW1uSW5mbyk6IHZvaWQge1xyXG5cdFx0Y29uc3QgY2hpbGRDb2x1bW5zID0gcm9vdENvbHVtbi5jaGlsZHJlbjtcclxuXHJcblx0XHRpZiAoY2hpbGRDb2x1bW5zLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuO1xyXG5cclxuXHRcdC8vIG5vIG5lZWQgdG8gZG8gYSByZWN1cnNpdmUgY2FsbCBoZXJlLCBmdW5jdGlvbiB3aWxsIGdldCBjYWxsZWQgbXVsdGlwbGUgdGltZXNcclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNoaWxkQ29sdW1ucykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcclxuXHRcdFx0XHRpdGVtRW50cnkuZGVyaXZlZFtjb2x1bW4ucGF0aF0gPSB0aGlzLmFwaUZvcm1hdHRlci5nZXREZWZhdWx0VmFsdWUoY29sdW1uLmFwaUNvbHVtbi50eXBlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0SXRlbUlkQnlDb2x1bW4gKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBjb2x1bW46IENvbHVtbkluZm8pOiBJdGVtSWQge1xyXG5cdFx0aWYgKGNvbHVtbi5sZXZlbCA9PT0gMCkge1xyXG5cdFx0XHRpZiAoY29sdW1uLmFwaUNvbHVtbi50eXBlID09PSAnbGluaycgJiYgaXRlbUVudHJ5LnBhcmVudCAhPT0gbnVsbClcclxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5LnBhcmVudC5pdGVtSWQ7XHJcblxyXG5cdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmdldEZpZWxkcygpW2NvbHVtbi5wYXRoXTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gaXRlbUVudHJ5LmRlcml2ZWRbY29sdW1uLnBhdGhdO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBmZXRjaERlcml2ZWRWYWx1ZXNCeUNvbHVtbiAoXHJcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXHJcblx0XHRyb290Q29sdW1uOiBDb2x1bW5JbmZvLFxyXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZVxyXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8dm9pZCB8IEl0ZW1FbnRyeVtdPiB7XHJcblx0XHRjb25zdCBjaGlsZENvbHVtbnMgPSByb290Q29sdW1uLmNoaWxkcmVuO1xyXG5cclxuXHRcdGlmIChjaGlsZENvbHVtbnMubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XHJcblxyXG5cdFx0Y29uc3QgZmlyc3RDaGlsZCA9IGNoaWxkQ29sdW1uc1swXTtcclxuXHJcblx0XHRpZiAoY2hpbGRDb2x1bW5zLmxlbmd0aCA9PT0gMSAmJiBmaXJzdENoaWxkLmFwaUNvbHVtbi50eXBlID09PSAnaWQnKSB7XHJcblx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxyXG5cdFx0XHRcdGl0ZW1FbnRyeS5kZXJpdmVkW2ZpcnN0Q2hpbGQucGF0aF0gPSB0aGlzLmdldEl0ZW1JZEJ5Q29sdW1uKGl0ZW1FbnRyeSwgcm9vdENvbHVtbik7XHJcblxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgaXRlbUlkTWFwOiB7W2l0ZW1JZDogc3RyaW5nXTogSXRlbUVudHJ5W119ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcclxuXHRcdFx0Y29uc3QgaXRlbUlkID0gdGhpcy5nZXRJdGVtSWRCeUNvbHVtbihpdGVtRW50cnksIHJvb3RDb2x1bW4pO1xyXG5cclxuXHRcdFx0aWYgKGl0ZW1JZE1hcFtpdGVtSWRdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0aXRlbUlkTWFwW2l0ZW1JZF0gPSBbXTtcclxuXHJcblx0XHRcdGl0ZW1JZE1hcFtpdGVtSWRdLnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaXRlbUlkTWFwLm51bGwgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0dGhpcy5nZXREZWZhdWx0VmFsdWVzQnlDb2x1bW4oaXRlbUlkTWFwLm51bGwsIHJvb3RDb2x1bW4pO1xyXG5cclxuXHRcdGNvbnN0IGl0ZW1JZHM6IEl0ZW1JZFtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbUlkTWFwKSB7XHJcblx0XHRcdGlmIChpdGVtSWQgPT09ICdudWxsJylcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGl0ZW1JZHMucHVzaCgraXRlbUlkKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaXRlbUlkcy5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcclxuXHJcblx0XHRjb25zdCBjb2x1bW5JZHM6IHN0cmluZ1tdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY2hpbGRDb2x1bW5zKVxyXG5cdFx0XHRjb2x1bW5JZHMucHVzaChjb2x1bW4uaWQpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmZldGNoSXRlbXMoXHJcblx0XHRcdDxJdGVtVHlwZT4gcm9vdENvbHVtbi5pdGVtVHlwZSxcclxuXHRcdFx0aXRlbUlkcyxcclxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKHtjb2x1bW5zOiBjb2x1bW5JZHN9KSxcclxuXHRcdFx0bG9jYWxJdGVtQ2FjaGVcclxuXHRcdCkudGhlbihcclxuXHRcdFx0c291cmNlSXRlbUVudHJpZXMgPT4ge1xyXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIHNvdXJjZUl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdFx0XHRjb25zdCBpdGVtRW50cnlGaWVsZHMgPSBpdGVtRW50cnkuZ2V0RmllbGRzKCk7XHJcblx0XHRcdFx0XHRjb25zdCBkZXN0aW5hdGlvbkl0ZW1FbnRyaWVzID0gaXRlbUlkTWFwW2l0ZW1FbnRyeS5pdGVtSWRdO1xyXG5cclxuXHRcdFx0XHRcdGZvciAoY29uc3QgZGVzdGluYXRpb25JdGVtRW50cnkgb2YgZGVzdGluYXRpb25JdGVtRW50cmllcykge1xyXG5cdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjaGlsZENvbHVtbnMpXHJcblx0XHRcdFx0XHRcdFx0ZGVzdGluYXRpb25JdGVtRW50cnkuZGVyaXZlZFtjb2x1bW4ucGF0aF0gPSBpdGVtRW50cnlGaWVsZHNbY29sdW1uLmlkXTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldHVybiB0aGlzLnJlc29sdmVEZXJpdmVkVmFsdWVzKGl0ZW1FbnRyaWVzLCBjaGlsZENvbHVtbnMsIGxvY2FsSXRlbUNhY2hlKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cmVxdWVzdEl0ZW0gKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCByZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMgPSBpdGVtRW50cnkuY29sdW1ucy5yZXF1ZXN0KSB7XHJcblx0XHRyZXR1cm4gdGhpcy5yZXF1ZXN0SXRlbXMoaXRlbUVudHJ5Lml0ZW1UeXBlLCBbaXRlbUVudHJ5Lml0ZW1JZF0sIHJlcXVlc3RDb2x1bW5zKTtcclxuXHR9XHJcblxyXG5cdHJlcXVlc3RJdGVtcyAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWRzOiBJdGVtSWRbXSwgY29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMpOiBQcm9taXNlSW50ZXJmYWNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShpdGVtVHlwZSwge2lkOiBpdGVtSWRzfSwge1tpdGVtVHlwZV06IGNvbHVtbnN9KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQXBpUmVzcG9uc2VQcm9jZXNzb3IsIENvbHVtbkV4cGFuc2lvbiwgQ29sdW1uU2V0LCBJdGVtSGFuZGxlciwgUXVlcnlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IENvbHVtbkV4cGFuc2lvbkZhY3RvcnksIENvbHVtblNldEZhY3RvcnksIEl0ZW1FbnRyeUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSwgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlTGlicmFyeUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEFwaVJlcXVlc3RDb2x1bW5zLCBBcGlSZXNwb25zZSwgRW50cnlQYXJlbnROdWxsLCBJdGVtSWQsIEl0ZW1UeXBlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgcGF0aEV4aXN0cyB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbVJlcXVlc3RTZXJ2aWNlIHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcclxuXHRcdHByaXZhdGUgY29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgaXRlbUVudHJ5RmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgcXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0cmVxdWVzdEl0ZW0gKGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtbnMpOiBQcm9taXNlSW50ZXJmYWNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XHJcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IHtcclxuXHRcdFx0W2l0ZW1UeXBlXTogY29sdW1uc1xyXG5cdFx0fTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdHtpZDogaXRlbUlkfSxcclxuXHRcdFx0cmVxdWVzdENvbHVtbnNcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRyZXF1ZXN0SXRlbXMgKFxyXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksXHJcblx0XHRxdWVyeSA9IGNvbGxlY3Rpb25FbnRyeS5xdWVyeS5vYmplY3QsXHJcblx0XHRjb2x1bW5zID0gY29sbGVjdGlvbkVudHJ5Lm9wdGlvbnMuY29sdW1uc1xyXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcclxuXHRcdGNvbnN0IG9wdGlvbnMgPSBjb2xsZWN0aW9uRW50cnkub3B0aW9ucztcclxuXHJcblx0XHRjb25zdCBwYXJhbXMgPSB7XHJcblx0XHRcdHJlcXVlc3RUeXBlOiAncXVlcnknLFxyXG5cdFx0XHRpdGVtVHlwZTogb3B0aW9ucy5xdWVyeUl0ZW1UeXBlID09PSBudWxsID8gY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlIDogb3B0aW9ucy5xdWVyeUl0ZW1UeXBlLFxyXG5cdFx0XHRjb2x1bW5zOiB7W2NvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZV06IGNvbHVtbnN9LFxyXG5cdFx0XHRxdWVyeTogcXVlcnksXHJcblx0XHRcdGxpbWl0OiBudWxsXHJcblx0XHR9O1xyXG5cclxuXHRcdGlmIChvcHRpb25zLmxpbWl0ICE9PSBudWxsKVxyXG5cdFx0XHRwYXJhbXMubGltaXQgPSBvcHRpb25zLmxpbWl0O1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RTa2VsZXRvbihwYXJhbXMpO1xyXG5cdH1cclxuXHJcblx0cmVxdWVzdExpbmtJdGVtcyAocGFyZW50VHlwZSwgcGFyZW50SWRBcnJheSwgaXRlbVR5cGUsIHF1ZXJ5LCBjb2x1bW5zKTogUHJvbWlzZUludGVyZmFjZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSB7XHJcblx0XHRcdFtpdGVtVHlwZV06IGNvbHVtbnNcclxuXHRcdH07XHJcblxyXG5cdFx0cmV0dXJuIHF1ZXJ5ID09PSBudWxsID9cclxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShcclxuXHRcdFx0XHRwYXJlbnRUeXBlLFxyXG5cdFx0XHRcdHtpZDogcGFyZW50SWRBcnJheX0sXHJcblx0XHRcdFx0cmVxdWVzdENvbHVtbnNcclxuXHRcdFx0KSA6XHJcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoXHJcblx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UuYWRkQW5kQ29uZGl0aW9uKFxyXG5cdFx0XHRcdFx0cXVlcnksXHJcblx0XHRcdFx0XHR7bGlua2VkVG86IHBhcmVudFR5cGUsIHF1ZXJ5OiB7aWQ6IHBhcmVudElkQXJyYXl9fVxyXG5cdFx0XHRcdCksXHJcblx0XHRcdFx0cmVxdWVzdENvbHVtbnMgLy8gc2hvdWxkIGNvbnRhaW4gYSBkZXJpdmVkIGNvbHVtbiB0aGF0IHJlZmVycyB0byB0aGUgcGFyZW50XHJcblx0XHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzRXhwYW5zaW9uIChcclxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyxcclxuXHRcdHJlc3BvbnNlOiBBcGlSZXNwb25zZSxcclxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXVxyXG5cdCkge1xyXG5cdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdHJlcXVlc3RDb2x1bW5zLFxyXG5cdFx0XHRyZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKVxyXG5cdFx0KTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRpZiAoaXRlbUVudHJ5LmlzTG9jYWwoKSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdHRoaXMuaGFuZGxlQ2FjaGVkSXRlbShpdGVtRW50cnksIHJlc3BvbnNlLCBjb2x1bW5FeHBhbnNpb24pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBjb2x1bW5FeHBhbnNpb247XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzUmVzcG9uc2UgKFxyXG5cdFx0cmVzcG9uc2U6IEFwaVJlc3BvbnNlLFxyXG5cdFx0aWRBcnJheTogSXRlbUlkW10sXHJcblx0XHRwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCxcclxuXHRcdGNvbHVtblNldDogQ29sdW1uU2V0LFxyXG5cdFx0Y29sdW1uRXhwYW5zaW9uOiBDb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRjb2x1bW5TZXQuaXRlbVR5cGUsXHJcblx0XHRcdGNvbHVtblNldC5yZXF1ZXN0Q29sdW1uc1RydWUgPyB0cnVlIDogY29sdW1uU2V0LnJlcXVlc3QsXHJcblx0XHRcdGNvbHVtblNldC5yZXNwb25zZVxyXG5cdFx0KVxyXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8SXRlbUVudHJ5W10+IHtcclxuXHRcdGNvbnN0IGl0ZW1IYW5kbGVyID0gdGhpcy5pdGVtSGFuZGxlcjtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sdW1uU2V0Lml0ZW1UeXBlO1xyXG5cdFx0Y29uc3Qgcm9vdENvbHVtbnMgPSBjb2x1bW5TZXQucm9vdDtcclxuXHRcdGNvbnN0IGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cdFx0Y29uc3QgZGVmZXJyZWRFbnRyaWVzOiBBcnJheTxQcm9taXNlSW50ZXJmYWNlPEl0ZW1FbnRyeT4+ID0gW107XHJcblxyXG5cdFx0Ly8gc2hvdWxkIGJlIGZhc3QuLi5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIG9mIGlkQXJyYXkpIHtcclxuXHRcdFx0bGV0IGl0ZW1FbnRyeSA9IGl0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpO1xyXG5cclxuXHRcdFx0aWYgKGl0ZW1FbnRyeSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0aXRlbUVudHJ5ID0gdGhpcy5pdGVtRW50cnlGYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0XHRcdGl0ZW1JZCxcclxuXHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQpLFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIHJvb3RDb2x1bW5zKSxcclxuXHRcdFx0XHRcdGNvbHVtblNldFxyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdGl0ZW1IYW5kbGVyLmVudHJpZXMuYWRkKGl0ZW1FbnRyeSk7XHJcblx0XHRcdFx0aXRlbUVudHJpZXMucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGlmIChpdGVtRW50cnkuaXNEZWZlcnJlZCgpKSB7XHJcblx0XHRcdFx0XHRpZiAoaXRlbUVudHJ5LmRlZmVyUmVxdWVzdCkge1xyXG5cdFx0XHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKFxyXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5yZXNvbHZlRGVmZXJyZWQoXHJcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKSxcclxuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCByb290Q29sdW1ucyksXHJcblx0XHRcdFx0XHRcdFx0XHRjb2x1bW5TZXRcclxuXHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9IGVsc2VcclxuXHRcdFx0XHRcdFx0ZGVmZXJyZWRFbnRyaWVzLnB1c2goaXRlbUVudHJ5LmRlZmVycmVkLnByb21pc2UpO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAoaXRlbUVudHJ5LnJlbG9hZFF1ZXVlZCkge1xyXG5cdFx0XHRcdFx0aXRlbUVudHJ5LnJlbG9hZFF1ZXVlZCA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0aXRlbUVudHJ5LnVwZGF0ZUZpZWxkcyhcclxuXHRcdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCksXHJcblx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCByb290Q29sdW1ucyksXHJcblx0XHRcdFx0XHRcdGZhbHNlXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0aXRlbUVudHJpZXMucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0XHRcdH0gZWxzZVxyXG5cdFx0XHRcdFx0aXRlbUVudHJpZXMucHVzaCh0aGlzLmhhbmRsZUNhY2hlZEl0ZW0oaXRlbUVudHJ5LCByZXNwb25zZSwgY29sdW1uRXhwYW5zaW9uKSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChwYXJlbnQgIT09IG51bGwpXHJcblx0XHRcdFx0aXRlbUVudHJ5LnBhcmVudCA9IHBhcmVudDtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwoZGVmZXJyZWRFbnRyaWVzKS50aGVuKFxyXG5cdFx0XHRyZXNvbHZlZEVudHJpZXMgPT4ge1xyXG5cdFx0XHRcdGZvciAoY29uc3QgcmVzb2x2ZWRFbnRyeSBvZiByZXNvbHZlZEVudHJpZXMpIHtcclxuXHRcdFx0XHRcdGl0ZW1FbnRyaWVzLnB1c2goXHJcblx0XHRcdFx0XHRcdHRoaXMuaGFuZGxlQ2FjaGVkSXRlbShcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlZEVudHJ5LFxyXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlLFxyXG5cdFx0XHRcdFx0XHRcdGNvbHVtbkV4cGFuc2lvblxyXG5cdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyaWVzO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRoYW5kbGVDYWNoZWRJdGVtIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgcmVzcG9uc2U6IEFwaVJlc3BvbnNlLCBjb2x1bW5FeHBhbnNpb246IENvbHVtbkV4cGFuc2lvbikge1xyXG5cdFx0Y29uc3QgZXhwYW5zaW9uUmVzdWx0ID0gY29sdW1uRXhwYW5zaW9uLnJ1bihpdGVtRW50cnkuY29sdW1ucyk7XHJcblxyXG5cdFx0cmV0dXJuIGV4cGFuc2lvblJlc3VsdCA9PT0gbnVsbCA/XHJcblx0XHRcdGl0ZW1FbnRyeSA6XHJcblx0XHRcdGl0ZW1FbnRyeS5leHBhbmQoXHJcblx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkKSxcclxuXHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoXHJcblx0XHRcdFx0XHRpdGVtRW50cnkuaXRlbVR5cGUsXHJcblx0XHRcdFx0XHRpdGVtRW50cnkuaXRlbUlkLFxyXG5cdFx0XHRcdFx0ZXhwYW5zaW9uUmVzdWx0LmRpZmZlcmVuY2Uucm9vdFxyXG5cdFx0XHRcdCksXHJcblx0XHRcdFx0ZXhwYW5zaW9uUmVzdWx0XHJcblx0XHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzTGlua1Jlc3BvbnNlIChcclxuXHRcdHJlc3BvbnNlOiBBcGlSZXNwb25zZSxcclxuXHRcdHBhcmVudFR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0cGFyZW50SWRBcnJheTogSXRlbUlkW10sXHJcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXHJcblx0XHRvcHRpb25zXHJcblx0KSB7XHJcblx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKTtcclxuXHRcdGNvbnN0IGNvbHVtblNldCA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIG9wdGlvbnMuY29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKTtcclxuXHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIG9wdGlvbnMuY29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKTtcclxuXHRcdGNvbnN0IHBhcmVudEl0ZW1zID0gcmVzcG9uc2UuaXRlbXNbcGFyZW50VHlwZV07XHJcblx0XHRjb25zdCBwcm9taXNlczogYW55ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBvZiBwYXJlbnRJZEFycmF5KSB7XHJcblx0XHRcdHByb21pc2VzW3BhcmVudElkXSA9IHBhdGhFeGlzdHMocGFyZW50SXRlbXMsIFtwYXJlbnRJZCwgJ2xpbmtzJywgaXRlbVR5cGVdKSA/XHJcblx0XHRcdFx0dGhpcy5wcm9jZXNzUmVzcG9uc2UoXHJcblx0XHRcdFx0XHRyZXNwb25zZSxcclxuXHRcdFx0XHRcdHBhcmVudEl0ZW1zW3BhcmVudElkXS5saW5rc1tpdGVtVHlwZV0sXHJcblx0XHRcdFx0XHR7aXRlbVR5cGU6IHBhcmVudFR5cGUsIGl0ZW1JZDogcGFyZW50SWR9LFxyXG5cdFx0XHRcdFx0Y29sdW1uU2V0LFxyXG5cdFx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uXHJcblx0XHRcdFx0KSA6XHJcblx0XHRcdFx0W107XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHByb21pc2VzKS50aGVuKFxyXG5cdFx0XHRyZXNvbHZlZCA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdGl0ZW1zOiByZXNvbHZlZCxcclxuXHRcdFx0XHRcdGNvbHVtbnM6IGNvbHVtblNldCxcclxuXHRcdFx0XHRcdGNvbHVtbkV4cGFuc2lvbjogY29sdW1uRXhwYW5zaW9uXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vJztcclxuXHJcbmltcG9ydCB7IHNoYWxsb3dNZXJnZSB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbVJlc291cmNlU2VydmljZSB7XHJcblx0Y29uc3RydWN0b3IgKCkge1xyXG5cclxuXHR9XHJcblxyXG5cdHByb2Nlc3NPcHRpb25zIChvcHRpb25zKSB7XHJcblx0XHRyZXR1cm4gc2hhbGxvd01lcmdlKFxyXG5cdFx0XHRvcHRpb25zLFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0ZWRpdDogZmFsc2UsXHJcblx0XHRcdFx0b25DaGFuZ2U6IG5vb3AsXHJcblx0XHRcdFx0b25EZWFjdGl2YXRlOiBub29wXHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRjb21wYXJlT3B0aW9ucyAoZmlyc3QsIHNlY29uZCkge1xyXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gZmlyc3QpIHtcclxuXHRcdFx0aWYgKGZpcnN0W2tleV0gIT09IHNlY29uZFtrZXldKVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgRFVQTElDQVRFX0tFWVdPUkQsIERVUExJQ0FURV9QUkVGSVgsIE5FV19LRVlXT1JELCBORVdfUFJFRklYIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IEl0ZW1JZCwgU3RhdGVLZXksIFN0YXRlS2V5VHlwZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIEtleVNlcnZpY2Uge1xuXHRzZXBhcmF0b3I6IHN0cmluZyA9ICc6JztcblxuXHRjb25zdHJ1Y3RvciAoKSB7fVxuXG5cdGdldFNpbmdsZUtleSAoaXRlbVR5cGU6IHN0cmluZywgaXRlbUlkOiBudW1iZXIgfCBzdHJpbmcpIHtcblx0XHRyZXR1cm4gaXRlbVR5cGUgKyB0aGlzLnNlcGFyYXRvciArIGl0ZW1JZDtcblx0fVxuXG5cdGdldENzc0tleSAoKSB7XG5cdFx0cmV0dXJuIEFycmF5LnByb3RvdHlwZS5qb2luLmNhbGwoYXJndW1lbnRzLCAnXycpO1xuXHR9XG5cblx0cGFyc2VTdGF0ZUtleSAoc3RhdGVLZXk6IHN0cmluZyk6IFN0YXRlS2V5IHwgbnVsbCB7XG5cdFx0c3RhdGVLZXkgPSBzdGF0ZUtleS50b1N0cmluZygpO1xuXG5cdFx0aWYgKHN0YXRlS2V5LnN1YnN0cmluZygwLCBORVdfS0VZV09SRC5sZW5ndGgpID09PSBORVdfS0VZV09SRClcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHR5cGU6IFN0YXRlS2V5VHlwZS5OZXcsXG5cdFx0XHRcdHRlbXBsYXRlOiBzdGF0ZUtleS5zdWJzdHJpbmcoTkVXX0tFWVdPUkQubGVuZ3RoKSAvLyBUT0RPOiB0aGlzIGlzIGN1cnJlbnRseSBub3QgYmVpbmcgdXNlZCwgcmVldmFsdWF0ZVxuXHRcdFx0fTtcblxuXHRcdGlmIChzdGF0ZUtleS5zdWJzdHJpbmcoMCwgRFVQTElDQVRFX0tFWVdPUkQubGVuZ3RoKSA9PT0gRFVQTElDQVRFX0tFWVdPUkQpXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0eXBlOiBTdGF0ZUtleVR5cGUuRHVwbGljYXRlLFxuXHRcdFx0XHRpdGVtSWQ6ICtzdGF0ZUtleS5zdWJzdHJpbmcoRFVQTElDQVRFX0tFWVdPUkQubGVuZ3RoKVxuXHRcdFx0fTtcblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Z2V0RHVwbGljYXRlU3RhdGVLZXkgKGl0ZW1JZDogc3RyaW5nIHwgbnVtYmVyKSB7XG5cdFx0cmV0dXJuIERVUExJQ0FURV9LRVlXT1JEICsgaXRlbUlkO1xuXHR9XG5cblx0Z2V0TmV3U3RhdGVLZXkgKHRlbXBsYXRlVHlwZTogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIE5FV19LRVlXT1JEICsgdGVtcGxhdGVUeXBlO1xuXHR9XG5cblx0Z2V0TG9jYWxJZCAoKTogSXRlbUlkIHtcblx0XHRyZXR1cm4gKyhORVdfUFJFRklYICsgdGhpcy5nZXRSYW5kb21TdHJpbmcoKSk7XG5cdH1cblxuXHRnZXRMb2NhbER1cGxpY2F0ZUlkICgpOiBJdGVtSWQge1xuXHRcdHJldHVybiArKERVUExJQ0FURV9QUkVGSVggKyB0aGlzLmdldFJhbmRvbVN0cmluZygpKTtcblx0fVxuXG5cdGdldFJhbmRvbVN0cmluZyAoKSB7XG5cdFx0cmV0dXJuICgnJyArIE1hdGgucmFuZG9tKCkpLnNwbGl0KCcuJylbMV0uc3Vic3RyKDAsIDgpO1xuXHR9XG5cblx0Ly8gbm90ZTogdGhlIGNoYW5nZXMgY29tcGlsZXIgdXNlcyB0aGlzXG5cdC8vIG1pZ2h0IGJlIGNhbGxlZCB3aXRoIHVuZGVmaW5lZCAoaXRlbUhhbmRsZXIuY3JlYXRlUmVxdWVzdClcblx0aXNMb2NhbElkIChpdGVtSWQ6IEl0ZW1JZCB8IHN0cmluZykge1xuXHRcdHJldHVybiBpdGVtSWQgIT09IHVuZGVmaW5lZCAmJiAodGhpcy5pc05ld0lkKGl0ZW1JZCkgfHwgdGhpcy5pc0R1cGxpY2F0ZUlkKGl0ZW1JZCkpO1xuXHR9XG5cblx0aXNOZXdJZCAoaXRlbUlkOiBJdGVtSWQgfCBzdHJpbmcpIHtcblx0XHRyZXR1cm4gaXRlbUlkID09PSBORVdfS0VZV09SRCB8fCAoJycgKyBpdGVtSWQpLnN1YnN0cmluZygwLCBORVdfUFJFRklYLmxlbmd0aCkgPT09IE5FV19QUkVGSVg7XG5cdH1cblxuXHRpc0R1cGxpY2F0ZUlkIChpdGVtSWQ6IEl0ZW1JZCB8IHN0cmluZykge1xuXHRcdHJldHVybiBpdGVtSWQgPT09IERVUExJQ0FURV9LRVlXT1JEIHx8ICgnJyArIGl0ZW1JZCkuc3Vic3RyaW5nKDAsIERVUExJQ0FURV9QUkVGSVgubGVuZ3RoKSA9PT0gRFVQTElDQVRFX1BSRUZJWDtcblx0fVxufVxuIiwiaW1wb3J0IHsgQXBpUmVzcG9uc2VQcm9jZXNzb3IsIENvbGxlY3Rpb25NYXRjaGVyLCBDb2x1bW5TZXQsIExvY2FsQ2FjaGUsIFJlcXVlc3RDb2x1bW5FeHBhbnNpb24gfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgRU5UUllfU1RBVFVTIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuXHJcbmV4cG9ydCB0eXBlIEVudHJ5UGFyZW50ID0ge2l0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZDogbnVtYmVyfTtcclxuXHJcbmV4cG9ydCB0eXBlIEVudHJ5UGFyZW50TnVsbCA9IEVudHJ5UGFyZW50IHwgbnVsbDtcclxuXHJcbmV4cG9ydCB0eXBlIEZpZWxkTWFwID0ge1xyXG5cdFtrZXk6IHN0cmluZ106IGFueVxyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgSXRlbU9wdGlvbnMgPSBhbnk7IC8vIFRPRE9cclxuLy8gZXhwb3J0IHR5cGUgSXRlbUVudHJ5T3B0aW9ucyA9IGFueTsgLy8gVE9ET1xyXG4vLyBleHBvcnQgdHlwZSBJdGVtUmVzb3VyY2VPcHRpb25zID0gYW55OyAvLyBUT0RPXHJcblxyXG5leHBvcnQgY29uc3QgZW51bSBTdGF0ZUtleVR5cGUge1xyXG5cdE5ldyA9ICduZXcnLFxyXG5cdER1cGxpY2F0ZSA9ICdkdXBsaWNhdGUnXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFN0YXRlS2V5ID0ge3R5cGU6IFN0YXRlS2V5VHlwZSwgdGVtcGxhdGU/OiBzdHJpbmcsIGl0ZW1JZD86IG51bWJlcn07XHJcblxyXG5leHBvcnQgdHlwZSBPblNhdmVDYWxsYmFjayA9IChsb2NhbENhY2hlOiBMb2NhbENhY2hlLCBjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwKSA9PiBhbnk7XHJcblxyXG5leHBvcnQgZW51bSBMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24ge1xyXG5cdEFsd2F5cyA9ICdhbHdheXMnLFxyXG5cdE9uQ2xvc2UgPSAnb25DbG9zZScsXHJcblx0U2tpcE9uQ2xvc2UgPSAnc2tpcE9uQ2xvc2UnXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIExvY2FsQ2FjaGVDYWxsYmFja3M8VD4gPSB7XHJcblx0YWx3YXlzOiB7W2tleTogc3RyaW5nXTogVH0sXHJcblx0b25DbG9zZToge1trZXk6IHN0cmluZ106IFR9LFxyXG5cdHNraXBPbkNsb3NlOiB7W2tleTogc3RyaW5nXTogVH1cclxufTtcclxuXHJcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEl0ZW0gcmVzb3VyY2VcclxuXHJcbmV4cG9ydCB0eXBlIEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcCA9IHtcclxuXHRbaXRlbUlkOiBudW1iZXJdOiBJdGVtUmVzb3VyY2VcclxufTtcclxuXHJcbmV4cG9ydCB0eXBlIEl0ZW1SZXNvdXJjZXNJdGVtVHlwZU1hcCA9IHtcclxuXHRbaXRlbVR5cGU6IHN0cmluZ106IEl0ZW1SZXNvdXJjZVtdXHJcbn07XHJcblxyXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBJdGVtIEVudHJ5XHJcblxyXG5leHBvcnQgdHlwZSBJdGVtSWQgPSBudW1iZXI7XHJcblxyXG5leHBvcnQgdHlwZSBJdGVtVHlwZSA9IHN0cmluZztcclxuXHJcbmV4cG9ydCB0eXBlIEl0ZW1FbnRyeU1hcCA9IHtcclxuXHRbaXRlbVR5cGU6IHN0cmluZ106IHtcclxuXHRcdFtpdGVtSWQ6IG51bWJlcl06IEl0ZW1FbnRyeVxyXG5cdH1cclxufTtcclxuXHJcbmV4cG9ydCB0eXBlIExpbmtlZEl0ZW1FbnRyeU1hcCA9IHtcclxuXHRpdGVtVHlwZTogc3RyaW5nLFxyXG5cdGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSxcclxuXHRjb2x1bW5TZXQ6IENvbHVtblNldFxyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgRW50cnlTdGF0dXNNYXA8VD4gPSB7XHJcblx0W2VudHJ5U3RhdHVzOiBzdHJpbmddOiBUW107XHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBJdGVtRW50cnlQYXJlbnRJZE1hcCA9IHtcclxuXHRbcGFyZW50SWQ6IG51bWJlcl06IEl0ZW1FbnRyeVtdO1xyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgSXRlbUlkQ29udmVyc2lvbk1hcCA9IHtcclxuXHRbaXRlbVR5cGU6IHN0cmluZ106IHtcclxuXHRcdFtpdGVtSWQ6IG51bWJlcl06IG51bWJlcjtcclxuXHR9O1xyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgQ3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCA9IHtcclxuXHRbaXRlbVR5cGU6IHN0cmluZ106IHtcclxuXHRcdFtpdGVtSWQ6IG51bWJlcl06IGFueVxyXG5cdH07XHJcbn07XHJcblxyXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBDb2xsZWN0aW9uIEVudHJ5XHJcblxyXG5leHBvcnQgdHlwZSBDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCA9IHtcclxuXHRbcGFyZW50SWQ6IG51bWJlcl06IENvbGxlY3Rpb25FbnRyeVxyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgQ29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXAgPSB7XHJcblx0W3BhcmVudElkOiBudW1iZXJdOiBDb2xsZWN0aW9uUmVzb3VyY2VcclxufTtcclxuXHJcbmV4cG9ydCB0eXBlIENvbGxlY3Rpb25NYXRjaFJlc3VsdCA9IHtcclxuXHRmaXR0aW5nOiBDb2xsZWN0aW9uRW50cnlbXSxcclxuXHRub3RmaXR0aW5nOiBDb2xsZWN0aW9uRW50cnlbXSxcclxuXHRtYXliZTogQ29sbGVjdGlvbkVudHJ5W11cclxufTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRXh0ZW5kZWRDb2xsZWN0aW9uTWF0Y2hSZXN1bHQgZXh0ZW5kcyBDb2xsZWN0aW9uTWF0Y2hSZXN1bHQge1xyXG5cdGNvbGxlY3Rpb246IENvbGxlY3Rpb25SZXNvdXJjZTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBHcm91cGVkRXh0ZW5kZWRDb2xsZWN0aW9uTWF0Y2hSZXN1bHQge1xyXG5cdFtjb2xsZWN0aW9uSWQ6IG51bWJlcl06IHtcclxuXHRcdFtzdGF0dXM6IHN0cmluZ106IEV4dGVuZGVkQ29sbGVjdGlvbk1hdGNoUmVzdWx0XHJcblx0fTtcclxufVxyXG5cclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gQ29sdW1uc1xyXG5cclxuZXhwb3J0IHR5cGUgUmVzcG9uc2VDb2x1bW4gPSBhbnk7IC8vIFRPRE9cclxuXHJcbmV4cG9ydCB0eXBlIFJlc3BvbnNlQ29sdW1uTWFwID0ge1xyXG5cdFtpdGVtVHlwZTogc3RyaW5nXToge1xyXG5cdFx0W2NvbHVtbklkOiBzdHJpbmddOiBSZXNwb25zZUNvbHVtblxyXG5cdH1cclxufTtcclxuXHJcbmV4cG9ydCB0eXBlIENvbHVtbkV4cGFuc2lvblJlc3VsdCA9IHtcclxuXHRtZXJnZWQ6IENvbHVtblNldCxcclxuXHRkaWZmZXJlbmNlOiBDb2x1bW5TZXRcclxufTtcclxuXHJcbmV4cG9ydCB0eXBlIENvbHVtblNldEV4cGFuc2lvbiA9IHtcclxuXHRyZXF1ZXN0OiB7bWVyZ2VkOiBBcGlSZXF1ZXN0Q29sdW1ucywgZGlmZmVyZW5jZTogQXBpUmVxdWVzdENvbHVtbnN9LFxyXG5cdHJlc3BvbnNlOiBSZXNwb25zZUNvbHVtbk1hcFxyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgUm9vdENvbHVtbk1hcCA9IHtbY29sdW1uSWQ6IHN0cmluZ106IHthcGlDb2x1bW46IFJlc3BvbnNlQ29sdW1uLCBjaGlsZHJlbjogUm9vdENvbHVtbk1hcH19O1xyXG5cclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gQXBpIHJlZmVyZW5jZVxyXG5cclxuZXhwb3J0IHR5cGUgQXBpUmVzcG9uc2UgPSBBcGlSZXNwb25zZVByb2Nlc3NvcjsgLy8gVE9ET1xyXG5cclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gQXBpIHRlbXBsYXRlIHJlc3BvbnNlXHJcbmV4cG9ydCB0eXBlIFRlbXBsYXRlSXRlbVJlc291cmNlTWFwID0ge1xyXG5cdG1haW46IEl0ZW1SZXNvdXJjZTtcclxuXHRsaW5rZWQ6IEl0ZW1SZXNvdXJjZXNJdGVtVHlwZU1hcFxyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgVGVtcGxhdGVJdGVtRW50cnlNYXAgPSB7XHJcblx0bWFpbjogSXRlbUVudHJ5O1xyXG5cdGxpbmtlZDogTGlua2VkSXRlbUVudHJ5TWFwW107XHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBJdGVtVHlwZU1hcCA9IHtcclxuXHRbaXRlbVR5cGU6IHN0cmluZ106IGFueTtcclxufTtcclxuXHJcbmV4cG9ydCB0eXBlIEVudHJ5U3RhdHVzPFQ+ID0ge1xyXG5cdGVudHJ5OiBUO1xyXG5cdHN0YXR1czogRU5UUllfU1RBVFVTO1xyXG59O1xyXG5cclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gQXBpIHJlcXVlc3RcclxuXHJcbmV4cG9ydCB0eXBlIEFwaVJlcXVlc3RJdGVtVmFsdWVzID0ge1xyXG5cdHZhbHVlcz86IGFueSxcclxuXHRsaW5rcz86IHtcclxuXHRcdFtpdGVtVHlwZTogc3RyaW5nXTogSXRlbUlkW11cclxuXHR9XHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBBcGlSZXF1ZXN0SXRlbU1hcCA9IHtcclxuXHRbaXRlbVR5cGU6IHN0cmluZ106IHtcclxuXHRcdFtpdGVtSWQ6IG51bWJlcl06IEFwaVJlcXVlc3RJdGVtVmFsdWVzXHJcblx0fTtcclxufTtcclxuXHJcbmV4cG9ydCB0eXBlIEFwaVJlcXVlc3RDb2x1bW4gPSBzdHJpbmcgfCB7W2NvbHVtbklkOiBzdHJpbmddOiBBcGlSZXF1ZXN0Q29sdW1uW119O1xyXG5cclxuZXhwb3J0IHR5cGUgQXBpUmVxdWVzdENvbHVtbnMgPSBBcGlSZXF1ZXN0Q29sdW1uW10gfCB0cnVlO1xyXG5cclxuZXhwb3J0IHR5cGUgQXBpUmVxdWVzdENvbHVtbk1hcCA9IHtcclxuXHRbaXRlbVR5cGU6IHN0cmluZ106IEFwaVJlcXVlc3RDb2x1bW5zXHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBBcGlSZXF1ZXN0TGltaXQgPSB7XHJcblx0ZmllbGQ6IHN0cmluZyxcclxuXHRsaW1pdDogbnVtYmVyLFxyXG5cdG9mZnNldD86IG51bWJlcixcclxuXHRvcmRlcj86ICdkZXNjJyB8ICdhc2MnXHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBBcGlSZXF1ZXN0TW92ZUl0ZW1zID0ge1xyXG5cdFtpdGVtVHlwZTogc3RyaW5nXTogSXRlbUlkW11cclxufTtcclxuXHJcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IENyZWF0ZSByZXF1ZXN0XHJcblxyXG5leHBvcnQgdHlwZSBDcmVhdGVSZXF1ZXN0RW50cnkgPSB7XHJcblx0cmVxdWVzdDoge1xyXG5cdFx0cmVxdWVzdFR5cGU6ICdjcmVhdGUnLFxyXG5cdFx0aXRlbVR5cGU/OiBJdGVtVHlwZSxcclxuXHRcdHBhcmVudFR5cGU/OiBJdGVtVHlwZSxcclxuXHRcdHBhcmVudElkPzoge1tpdGVtSWQ6IHN0cmluZ106IEl0ZW1JZH0sXHJcblx0XHRpdGVtczogQXBpUmVxdWVzdEl0ZW1NYXAsXHJcblx0XHRjb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1uTWFwXHJcblx0fSxcclxuXHRjb2x1bW5zOiBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uLFxyXG5cdGl0ZW1zOiB7XHJcblx0XHRbaXRlbVR5cGU6IHN0cmluZ106IHtcclxuXHRcdFx0W2l0ZW1JZDogbnVtYmVyXTogSXRlbUVudHJ5XHJcblx0XHR9XHJcblx0fSxcclxuXHRjb2xsZWN0aW9uczogQ29sbGVjdGlvbk1hdGNoZXJcclxufTtcclxuIiwiZXhwb3J0ICogZnJvbSAnLi9JdGVtVHlwZXNDb2xsZWN0aW9uJztcclxuZXhwb3J0ICogZnJvbSAnLi9Qcm9taXNlSW50ZXJmYWNlJztcclxuIiwiaW1wb3J0IHtcclxuXHRDb2xsZWN0aW9uQ2FjaGUsXHJcblx0SXRlbUNhY2hlLFxyXG5cdEl0ZW1SZXNvdXJjZVNlcnZpY2UsXHJcblx0TG9ja1NlcnZpY2VcclxufSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHtcclxuXHRDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcclxuXHRDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxyXG5cdENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXHJcblx0SXRlbUNhY2hlRmFjdG9yeSxcclxuXHRJdGVtUmVzb3VyY2VGYWN0b3J5XHJcbn0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlTGlicmFyeUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSwgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQge1xyXG5cdENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwLCBDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwLCBJdGVtSWRDb252ZXJzaW9uTWFwLCBJdGVtT3B0aW9ucywgTG9jYWxDYWNoZUNhbGxiYWNrQ29uZGl0aW9uLFxyXG5cdExvY2FsQ2FjaGVDYWxsYmFja3MsIE9uU2F2ZUNhbGxiYWNrLCBQcm9taXNlSW50ZXJmYWNlXHJcbn0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMb2NhbENhY2hlIHtcclxuXHRpdGVtczogSXRlbUNhY2hlO1xyXG5cdHJvb3RJdGVtOiBJdGVtRW50cnkgfCB1bmRlZmluZWQ7XHJcblx0Y29sbGVjdGlvbnM6IENvbGxlY3Rpb25DYWNoZTtcclxuXHRkZWZlcnJlZENvbGxlY3Rpb25zOiBDb2xsZWN0aW9uQ2FjaGU7XHJcblx0dGFiUmVxdWVzdFBhcmFtZXRlcnMgPSB7fTtcclxuXHJcblx0aXNTYXZpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0cHJpdmF0ZSBjYWxsYmFja3M6IHtcclxuXHRcdG9uQmVmb3JlU2F2ZTogTG9jYWxDYWNoZUNhbGxiYWNrczwobG9jYWxDYWNoZTogTG9jYWxDYWNoZSkgPT4gYW55PixcclxuXHRcdG9uU2F2ZVN1Y2Nlc3M6IExvY2FsQ2FjaGVDYWxsYmFja3M8T25TYXZlQ2FsbGJhY2s+LFxyXG5cdH0gPSB7XHJcblx0XHRvbkJlZm9yZVNhdmU6IHthbHdheXM6IHt9LCBvbkNsb3NlOiB7fSwgc2tpcE9uQ2xvc2U6IHt9fSxcclxuXHRcdG9uU2F2ZVN1Y2Nlc3M6IHthbHdheXM6IHt9LCBvbkNsb3NlOiB7fSwgc2tpcE9uQ2xvc2U6IHt9fVxyXG5cdH07XHJcblxyXG5cdHByaXZhdGUgY2hhbmdlc0ludGVydmFsOiBudWxsIHwgbnVtYmVyID0gbnVsbDtcclxuXHRoYXNDaGFuZ2VzID0gZmFsc2U7XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGxvY2tTZXJ2aWNlOiBMb2NrU2VydmljZSxcclxuXHRcdHByaXZhdGUgaXRlbVJlc291cmNlRmFjdG9yeTogSXRlbVJlc291cmNlRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlRmFjdG9yeTogQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnk6IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBpdGVtQ2FjaGVGYWN0b3J5OiBJdGVtQ2FjaGVGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5OiBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VTZXJ2aWNlOiBJdGVtUmVzb3VyY2VTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXHJcblx0XHRwdWJsaWMgaWQ6IHN0cmluZyA9ICcnXHJcblx0KSB7XHJcblx0XHR0aGlzLml0ZW1zID0gdGhpcy5pdGVtQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xyXG5cdFx0dGhpcy5jb2xsZWN0aW9ucyA9IHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeS5jb25zdHJ1Y3QoKTtcclxuXHRcdHRoaXMuZGVmZXJyZWRDb2xsZWN0aW9ucyA9IHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeS5jb25zdHJ1Y3QoKTtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZUl0ZW1SZXNvdXJjZSAoaXRlbUVudHJ5OiBJdGVtRW50cnksIG9wdGlvbnM6IEl0ZW1PcHRpb25zLCBpc1Jvb3Q6IGJvb2xlYW4gPSBmYWxzZSwgaXNOZXc/OiBib29sZWFuKSB7XHJcblx0XHRpZiAoaXNSb290KVxyXG5cdFx0XHR0aGlzLnJvb3RJdGVtID0gaXRlbUVudHJ5O1xyXG5cclxuXHRcdG9wdGlvbnMgPSB0aGlzLml0ZW1SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyk7XHJcblx0XHRvcHRpb25zLm9uRGVhY3RpdmF0ZSA9IChfaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IHRoaXMub25EZWFjdGl2YXRlSXRlbShfaXRlbUVudHJ5KTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LmNvbnN0cnVjdChpdGVtRW50cnksIG9wdGlvbnMsIGlzTmV3KTtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZUl0ZW1SZXNvdXJjZXMgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgb3B0aW9uczogSXRlbU9wdGlvbnMpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbVJlc291cmNlW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcclxuXHRcdFx0cmVzdWx0LnB1c2godGhpcy5jcmVhdGVJdGVtUmVzb3VyY2UoaXRlbUVudHJ5LCBvcHRpb25zKSk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZSAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIHJlc291cmNlT3B0aW9ucykge1xyXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvblJlc291cmNlRmFjdG9yeS5jb25zdHJ1Y3QoY29sbGVjdGlvbkVudHJ5LCByZXNvdXJjZU9wdGlvbnMsIHRoaXMpO1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlQ29sbGVjdGlvblJlc291cmNlcyAoY29sbGVjdGlvbkVudHJpZXM6IENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwLCByZXNvdXJjZU9wdGlvbnMpIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gY29sbGVjdGlvbkVudHJpZXMpXHJcblx0XHRcdHJlc3VsdFtwYXJlbnRJZF0gPSB0aGlzLmNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZShjb2xsZWN0aW9uRW50cmllc1twYXJlbnRJZF0sIHJlc291cmNlT3B0aW9ucyk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGNsZWFySXRlbSAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpIHtcclxuXHRcdHRoaXMuY2xlYXJJdGVtRW50cnkoaXRlbVJlc291cmNlLmVudHJ5KTtcclxuXHR9XHJcblxyXG5cdGNsZWFySXRlbUVudHJ5IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkge1xyXG5cdFx0dGhpcy5pdGVtcy5jbGVhcihpdGVtRW50cnkpO1xyXG5cdFx0aXRlbUVudHJ5LmNsZWFyUmVzb3VyY2VzKCk7XHJcblx0fVxyXG5cclxuXHRjbGVhckNvbGxlY3Rpb24gKGNvbGxlY3Rpb25SZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlKSB7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBjb2xsZWN0aW9uUmVzb3VyY2UuZW50cnk7XHJcblxyXG5cdFx0dGhpcy5jb2xsZWN0aW9ucy5jbGVhcihjb2xsZWN0aW9uRW50cnkpO1xyXG5cdFx0Y29sbGVjdGlvbkVudHJ5LmNsZWFyUmVzb3VyY2VzKCk7XHJcblx0fVxyXG5cclxuXHRjbGVhclJlc291cmNlcyAoaXNTdWJUYWJDaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG5cdFx0dGhpcy5pdGVtcy5mb3JFYWNoKFxyXG5cdFx0XHQoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGl0ZW1FbnRyeS5jbGVhclJlc291cmNlcygpXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuY29sbGVjdGlvbnMuZm9yRWFjaChcclxuXHRcdFx0KGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiBjb2xsZWN0aW9uRW50cnkuY2xlYXJSZXNvdXJjZXMoaXNTdWJUYWJDaGFuZ2UpXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuZGVmZXJyZWRDb2xsZWN0aW9ucy5jbGVhcigpO1xyXG5cdH1cclxuXHJcblx0dXBkYXRlU2luZ2xlSXRlbXMgKGNvbnZlcnNpb25NYXApIHtcclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gY29udmVyc2lvbk1hcCkge1xyXG5cdFx0XHRmb3IgKGNvbnN0IG9sZEl0ZW1JZCBpbiBjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuaXRlbXMuZ2V0KGl0ZW1UeXBlLCBvbGRJdGVtSWQpO1xyXG5cclxuXHRcdFx0XHRpZiAoaXRlbUVudHJ5ID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdFx0dGhpcy5pdGVtcy51cGRhdGVJdGVtSWQoaXRlbUVudHJ5LCBvbGRJdGVtSWQpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyByZXNvdXJjZXMgd2lsbCBiZSBjbGVhcmVkIGxhdGVyIChjbGVhciBmdW5jdGlvbilcclxuXHRyZXZlcnRDaGFuZ2VzICgpIHtcclxuXHRcdHRoaXMuaXRlbXMuZm9yRWFjaChcclxuXHRcdFx0KGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBpdGVtRW50cnkucmVzZXRNb2RpZmllZCgpXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuY29sbGVjdGlvbnMuZm9yRWFjaChcclxuXHRcdFx0KGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiB0aGlzLnJlc2V0Q29sbGVjdGlvbihjb2xsZWN0aW9uRW50cnkpXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuaGFzQ2hhbmdlcyA9IGZhbHNlO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmlzTG9ja2FibGUoKSA/XHJcblx0XHRcdHRoaXMubG9ja1NlcnZpY2UuZGVsZXRlTG9jayh0aGlzLnJvb3RJdGVtKSA6XHJcblx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xyXG5cdH1cclxuXHJcblx0cmVzZXRDb2xsZWN0aW9uIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSk6IHZvaWQge1xyXG5cdFx0Ly8gcmV2ZXJ0IGNoYW5nZXMgZm9yICphbGwqIGNvbGxlY3Rpb25zLCBpdGVtcyBtaWdodCBoYXZlIGJlZW4gYWRkZWQgb24gcmVzb2x2ZVxyXG5cdFx0Y29sbGVjdGlvbkVudHJ5Lml0ZW1zID0gY29sbGVjdGlvbkVudHJ5LmluaXRpYWwuc2xpY2UoKTtcclxuXHJcblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5Lmhhc0l0ZW1FZGl0UmVzb3VyY2VzKSB7XHJcblx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGNvbGxlY3Rpb25FbnRyeS5pdGVtcylcclxuXHRcdFx0XHRpdGVtRW50cnkucmVzZXRNb2RpZmllZCgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZGV0ZWN0Q2hhbmdlcyAoKTogYm9vbGVhbiB7XHJcblx0XHRpZiAodGhpcy5oYXNDaGFuZ2VzKVxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHJcblx0XHRpZiAoXHJcblx0XHRcdHRoaXMuaXRlbXMuc29tZShcclxuXHRcdFx0XHQoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGl0ZW1FbnRyeS5oYXNDaGFuZ2VzKClcclxuXHRcdFx0KVxyXG5cdFx0KVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5oYXNDaGFuZ2VzID0gdHJ1ZTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5oYXNDaGFuZ2VzID0gdGhpcy5jb2xsZWN0aW9ucy5zb21lKFxyXG5cdFx0XHQoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpID0+IHRoaXMuY29sbGVjdGlvbkhhc0NoYW5nZXMoY29sbGVjdGlvbkVudHJ5KVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY29sbGVjdGlvbkhhc0NoYW5nZXMgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KSB7XHJcblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5Lmhhc0VkaXRSZXNvdXJjZXMgJiYgKGNvbGxlY3Rpb25FbnRyeS5oYXNBZGRlZEl0ZW1zKCkgfHwgY29sbGVjdGlvbkVudHJ5Lmhhc1JlbW92ZWRJdGVtcygpKSlcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblxyXG5cdFx0cmV0dXJuIGNvbGxlY3Rpb25FbnRyeS5oYXNJdGVtRWRpdFJlc291cmNlcyAmJiBjb2xsZWN0aW9uRW50cnkuaGFzVXBkYXRlZEl0ZW1zKCk7XHJcblx0fVxyXG5cclxuXHRpc0xvY2thYmxlICgpIHtcclxuXHRcdGlmICh0aGlzLnJvb3RJdGVtID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5yb290SXRlbS5pc0xvY2thYmxlKCk7XHJcblx0fVxyXG5cclxuXHRzYXZlIChcclxuXHRcdGNsb3NlVGFiID0gZmFsc2UsXHJcblx0XHRwYXJhbWV0ZXJzOiBDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwID0ge30sXHJcblx0XHRicmVha1VwQnlQYXJlbnQ/OiBib29sZWFuLFxyXG5cdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrPzogKGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApID0+IHZvaWRcclxuXHQpIHtcclxuXHRcdGlmICh0aGlzLmlzU2F2aW5nKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIucmVqZWN0KCk7XHJcblxyXG5cdFx0dGhpcy5pc1NhdmluZyA9IHRydWU7XHJcblxyXG5cdFx0dGhpcy5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0XHR0aGlzLmRpc2FibGVDaGFuZ2VzV2F0Y2hlcigpO1xyXG5cclxuXHRcdHJldHVybiAodGhpcy5pc0xvY2thYmxlKCkgPyB0aGlzLmxvY2tTZXJ2aWNlLmZldGNoTG9jayg8SXRlbUVudHJ5PiB0aGlzLnJvb3RJdGVtKSA6IHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpKS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZUNhbGxiYWNrRXZlbnQodGhpcy5jYWxsYmFja3Mub25CZWZvcmVTYXZlLCBjYWxsYmFjayA9PiBjYWxsYmFjayh0aGlzKSwgY2xvc2VUYWIpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCkudGhlbihcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHJlcXVlc3RQYXJhbWV0ZXJzID0gZXh0ZW5kKHt9LCB0aGlzLnRhYlJlcXVlc3RQYXJhbWV0ZXJzLCBwYXJhbWV0ZXJzKTtcclxuXHJcblx0XHRcdFx0dGhpcy50YWJSZXF1ZXN0UGFyYW1ldGVycyA9IHt9O1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeS5jb25zdHJ1Y3QoKS5leGVjdXRlKFxyXG5cdFx0XHRcdFx0dGhpcy5pdGVtcy50b0FycmF5KCksXHJcblx0XHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25zLnRvQXJyYXkoKSxcclxuXHRcdFx0XHRcdHJlcXVlc3RQYXJhbWV0ZXJzLFxyXG5cdFx0XHRcdFx0YnJlYWtVcEJ5UGFyZW50LFxyXG5cdFx0XHRcdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdGNvbnZlcnNpb25NYXAgPT4ge1xyXG5cdFx0XHRcdGlmICh0aGlzLmlzTG9ja2FibGUoKSlcclxuXHRcdFx0XHRcdHRoaXMubG9ja1NlcnZpY2UuY2xlYXJMb2NrKDxJdGVtRW50cnk+IHRoaXMucm9vdEl0ZW0pO1xyXG5cclxuXHRcdFx0XHR0aGlzLmhhc0NoYW5nZXMgPSBmYWxzZTtcclxuXHJcblx0XHRcdFx0aWYgKCFjbG9zZVRhYilcclxuXHRcdFx0XHRcdHRoaXMudXBkYXRlU2luZ2xlSXRlbXMoY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmV4ZWN1dGVDYWxsYmFja0V2ZW50KFxyXG5cdFx0XHRcdFx0dGhpcy5jYWxsYmFja3Mub25TYXZlU3VjY2VzcyxcclxuXHRcdFx0XHRcdGNhbGxiYWNrID0+IGNhbGxiYWNrKHRoaXMsIGNvbnZlcnNpb25NYXApLFxyXG5cdFx0XHRcdFx0Y2xvc2VUYWJcclxuXHRcdFx0XHQpLnRoZW4oXHJcblx0XHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHRcdGlmICghY2xvc2VUYWIpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5lbmFibGVDaGFuZ2VzV2F0Y2hlcigpO1xyXG5cclxuXHRcdFx0XHRcdFx0dGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG5cclxuXHRcdFx0XHRcdFx0cmV0dXJuIGNvbnZlcnNpb25NYXA7XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpLmNhdGNoKGVycm9yID0+IHtcclxuXHRcdFx0dGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG5cclxuXHRcdFx0cmV0dXJuIHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdChlcnJvcik7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdG9uQmVmb3JlU2F2ZSAoXHJcblx0XHRrZXk6IHN0cmluZyxcclxuXHRcdGNhbGxiYWNrOiAobG9jYWxDYWNoZTogTG9jYWxDYWNoZSkgPT4gYW55LFxyXG5cdFx0Y29uZGl0aW9uOiBMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24gPSBMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24uQWx3YXlzXHJcblx0KTogKCkgPT4gdm9pZCB7XHJcblx0XHRjb25zdCBjYWxsYmFja3MgPSB0aGlzLmNhbGxiYWNrcy5vbkJlZm9yZVNhdmVbY29uZGl0aW9uXTtcclxuXHJcblx0XHRjYWxsYmFja3Nba2V5XSA9IGNhbGxiYWNrO1xyXG5cclxuXHRcdHJldHVybiAoKSA9PiBkZWxldGUgY2FsbGJhY2tzW2tleV07XHJcblx0fVxyXG5cclxuXHRvblNhdmVTdWNjZXNzIChcclxuXHRcdGtleTogc3RyaW5nLFxyXG5cdFx0Y2FsbGJhY2s6IE9uU2F2ZUNhbGxiYWNrLFxyXG5cdFx0Y29uZGl0aW9uOiBMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24gPSBMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24uQWx3YXlzXHJcblx0KTogKCkgPT4gdm9pZCB7XHJcblx0XHRjb25zdCBjYWxsYmFja3MgPSB0aGlzLmNhbGxiYWNrcy5vblNhdmVTdWNjZXNzW2NvbmRpdGlvbl07XHJcblxyXG5cdFx0Y2FsbGJhY2tzW2tleV0gPSBjYWxsYmFjaztcclxuXHJcblx0XHRyZXR1cm4gKCkgPT4gZGVsZXRlIGNhbGxiYWNrc1trZXldO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBleGVjdXRlQ2FsbGJhY2tFdmVudDxUPiAoXHJcblx0XHRjYWxsYmFja3M6IExvY2FsQ2FjaGVDYWxsYmFja3M8VD4sXHJcblx0XHRleGVjdXRlOiAoY2FsbGJhY2s6IFQpID0+IGFueSxcclxuXHRcdGNsb3NlVGFiOiBib29sZWFuXHJcblx0KTogUHJvbWlzZUludGVyZmFjZTxhbnk+IHtcclxuXHRcdHJldHVybiB0aGlzLmV4ZWN1dGVDYWxsYmFja3MoY2FsbGJhY2tzW0xvY2FsQ2FjaGVDYWxsYmFja0NvbmRpdGlvbi5BbHdheXNdLCBleGVjdXRlKS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZUNhbGxiYWNrcyhcclxuXHRcdFx0XHRcdGNhbGxiYWNrc1tjbG9zZVRhYiA/IExvY2FsQ2FjaGVDYWxsYmFja0NvbmRpdGlvbi5PbkNsb3NlIDogTG9jYWxDYWNoZUNhbGxiYWNrQ29uZGl0aW9uLlNraXBPbkNsb3NlXSxcclxuXHRcdFx0XHRcdGV4ZWN1dGVcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGV4ZWN1dGVDYWxsYmFja3M8VD4gKGNhbGxiYWNrczoge1trZXk6IHN0cmluZ106IFR9LCBleGVjdXRlOiAoY2FsbGJhY2s6IFQpID0+IGFueSkge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gY2FsbGJhY2tzKVxyXG5cdFx0XHRyZXN1bHRba2V5XSA9IGV4ZWN1dGUoY2FsbGJhY2tzW2tleV0pO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChyZXN1bHQpO1xyXG5cdH1cclxuXHJcblx0ZW5hYmxlQ2hhbmdlc1dhdGNoZXIgKCk6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMuY2hhbmdlc0ludGVydmFsICE9PSBudWxsKSB7XHJcblx0XHRcdGNvbnNvbGUud2FybignQ2hhbmdlcyB3YXRjaGVyIGFscmVhZHkgcnVubmluZyEnLCB0aGlzKTtcclxuXHRcdFx0dGhpcy5kaXNhYmxlQ2hhbmdlc1dhdGNoZXIoKTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLmNoYW5nZXNJbnRlcnZhbCA9IHNldEludGVydmFsKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0aWYgKCF0aGlzLmRldGVjdENoYW5nZXMoKSlcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHJcblx0XHRcdFx0dGhpcy5kaXNhYmxlQ2hhbmdlc1dhdGNoZXIoKTtcclxuXHJcblx0XHRcdFx0aWYgKHRoaXMuaXNMb2NrYWJsZSgpKVxyXG5cdFx0XHRcdFx0dGhpcy5sb2NrU2VydmljZS5mZXRjaExvY2soPEl0ZW1FbnRyeT4gdGhpcy5yb290SXRlbSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdDMwMDBcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRkaXNhYmxlQ2hhbmdlc1dhdGNoZXIgKCk6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMuY2hhbmdlc0ludGVydmFsID09PSBudWxsKVxyXG5cdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0Y2xlYXJJbnRlcnZhbCh0aGlzLmNoYW5nZXNJbnRlcnZhbCk7XHJcblx0XHR0aGlzLmNoYW5nZXNJbnRlcnZhbCA9IG51bGw7XHJcblx0fVxyXG5cclxuXHRvbkRlYWN0aXZhdGVJdGVtIChpdGVtRW50cnkpIHtcclxuXHRcdHRoaXMuY2xlYXJJdGVtRW50cnkoaXRlbUVudHJ5KTtcclxuXHRcdC8vIHRoaXMuaGFzQ2hhbmdlcyA9IHRydWU7XHJcblx0fVxyXG5cclxuXHRvbkFjdGl2YXRlSXRlbSAoaXRlbUVudHJ5KSB7XHJcblx0XHR0aGlzLml0ZW1zLmFkZChpdGVtRW50cnkpO1xyXG5cdFx0Ly8gdGhpcy5oYXNDaGFuZ2VzID0gdHJ1ZTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSwgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlTGlicmFyeUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5cclxuaW1wb3J0IHsgY3JlYXRlUGF0aCB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgTG9ja1NlcnZpY2Uge1xyXG5cdGxvY2tJdGVtcyA9IHt9O1xyXG5cdHByb21pc2VzID0ge307XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlXHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0Z2V0VmFsdWUgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBtYXApIHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xyXG5cclxuXHRcdGlmIChtYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG5cdFx0cmV0dXJuIG1hcFtpdGVtVHlwZV1baXRlbUVudHJ5Lml0ZW1JZF07XHJcblx0fVxyXG5cclxuXHRzZXRWYWx1ZSAoaXRlbUVudHJ5OiBJdGVtRW50cnksIHZhbHVlLCBtYXApIHtcclxuXHRcdHJldHVybiBjcmVhdGVQYXRoKFxyXG5cdFx0XHRtYXAsXHJcblx0XHRcdFtpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWRdLFxyXG5cdFx0XHRbe30sIHZhbHVlXVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGdldExvY2tzICgpIHtcclxuXHRcdHJldHVybiB0aGlzLmxvY2tJdGVtcztcclxuXHR9XHJcblxyXG5cdGhhc0xvY2sgKGxvY2tUb2tlbklkKSB7XHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHRoaXMubG9ja0l0ZW1zKSB7XHJcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMubG9ja0l0ZW1zW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHRcdGNvbnN0IGxvY2tJdGVtID0gdGhpcy5sb2NrSXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF07XHJcblxyXG5cdFx0XHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXHJcblx0XHRcdFx0aWYgKCFsb2NrSXRlbS5pc0ZvcmVpZ24gJiYgbG9ja0l0ZW0uaWQgPT0gbG9ja1Rva2VuSWQpXHJcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdC8vIHNob3VsZCBiZSBmYXN0ICh3YXRjaGVkKVxyXG5cdGlzTG9ja2VkIChpdGVtRW50cnk6IEl0ZW1FbnRyeSkge1xyXG5cdFx0Y29uc3QgbG9ja0l0ZW0gPSB0aGlzLmdldFZhbHVlKGl0ZW1FbnRyeSwgdGhpcy5sb2NrSXRlbXMpO1xyXG5cclxuXHRcdGlmIChsb2NrSXRlbSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0cmV0dXJuIGxvY2tJdGVtLmlzRm9yZWlnbjtcclxuXHR9XHJcblxyXG5cdGdldE1lc3NhZ2UgKGl0ZW1FbnRyeSkge1xyXG5cdFx0Y29uc3QgbG9ja0l0ZW0gPSB0aGlzLmdldFZhbHVlKGl0ZW1FbnRyeSwgdGhpcy5sb2NrSXRlbXMpO1xyXG5cclxuXHRcdGlmIChsb2NrSXRlbSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRcdGlmICghbG9ja0l0ZW0uaXNGb3JlaWduKVxyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRcdHJldHVybiBsb2NrSXRlbS5tZXNzYWdlO1xyXG5cdH1cclxuXHJcblx0Ly8gZG9lcyBub3QgcmVqZWN0IHdoZW4gYSBmb3JlaWduIGxvY2sgaXMgZW5jb3VudGVyZWRcclxuXHQvLyBpcyBhbHNvIHVzZWQgYnkgZGVsZXRlTG9ja1xyXG5cdGZldGNoQ2FjaGVkTG9jayAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcclxuXHRcdGNvbnN0IGxvY2sgPSB0aGlzLmdldFZhbHVlKGl0ZW1FbnRyeSwgdGhpcy5sb2NrSXRlbXMpO1xyXG5cclxuXHRcdGlmIChsb2NrICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4obG9jayk7XHJcblxyXG5cdFx0Y29uc3QgcHJvbWlzZSA9IHRoaXMuZ2V0VmFsdWUoaXRlbUVudHJ5LCB0aGlzLnByb21pc2VzKTtcclxuXHJcblx0XHRpZiAocHJvbWlzZSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gcHJvbWlzZTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XHJcblx0fVxyXG5cclxuXHRmZXRjaExvY2sgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSB7XHJcblx0XHRyZXR1cm4gdGhpcy5mZXRjaENhY2hlZExvY2soaXRlbUVudHJ5KS50aGVuKGxvY2tJdGVtID0+IHtcclxuXHRcdFx0XHRpZiAobG9ja0l0ZW0gIT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdHJldHVybiBsb2NrSXRlbTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIHRoaXMucmVxdWVzdExvY2soaXRlbUVudHJ5KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpLnRoZW4obG9ja0l0ZW0gPT4ge1xyXG5cdFx0XHRcdHJldHVybiBsb2NrSXRlbS5pc0ZvcmVpZ24gP1xyXG5cdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0KGxvY2tJdGVtLm1lc3NhZ2UpIDpcclxuXHRcdFx0XHRcdGxvY2tJdGVtLnRva2VuO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRyZXF1ZXN0TG9jayAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xyXG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcclxuXHJcblx0XHRjb25zdCBwcm9taXNlID0gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5jcmVhdGUoXHJcblx0XHRcdCdMb2NrdG9rZW4nLFxyXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UuZ2V0TG9jYWxJZCgpLFxyXG5cdFx0XHR7aXRlbXR5cGU6IGl0ZW1UeXBlLCBpdGVtOiBpdGVtSWR9XHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRkZWxldGUgdGhpcy5wcm9taXNlc1tpdGVtVHlwZV1baXRlbUlkXTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuc2V0VmFsdWUoXHJcblx0XHRcdFx0XHRpdGVtRW50cnksXHJcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChcclxuXHRcdFx0XHRcdFx0J0xvY2t0b2tlbicsXHJcblx0XHRcdFx0XHRcdHJlc3BvbnNlLmxpbmtzLkxvY2t0b2tlblswXVxyXG5cdFx0XHRcdFx0KSxcclxuXHRcdFx0XHRcdHRoaXMubG9ja0l0ZW1zXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSwgZXJyb3IgPT4ge1xyXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLnByb21pc2VzW2l0ZW1UeXBlXVtpdGVtSWRdO1xyXG5cclxuXHRcdFx0XHRpZiAoZXJyb3IuY29kZSA9PT0gMzAxKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5zZXRWYWx1ZShcclxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LFxyXG5cdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0aXNGb3JlaWduOiB0cnVlLFxyXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2VcclxuXHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0dGhpcy5sb2NrSXRlbXNcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIucmVqZWN0KGVycm9yKTtcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5zZXRWYWx1ZShpdGVtRW50cnksIHByb21pc2UsIHRoaXMucHJvbWlzZXMpO1xyXG5cdH1cclxuXHJcblx0ZGVsZXRlTG9jayAoaXRlbUVudHJ5KSB7XHJcblx0XHRyZXR1cm4gdGhpcy5mZXRjaENhY2hlZExvY2soaXRlbUVudHJ5KS50aGVuKGNhY2hlZExvY2sgPT4ge1xyXG5cdFx0XHRcdC8vIHVuZGVmaW5lZDogbm90IHJlcXVlc3RlZCB5ZXRcclxuXHJcblx0XHRcdFx0aWYgKGNhY2hlZExvY2sgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHJcblx0XHRcdFx0aWYgKGNhY2hlZExvY2suaXNGb3JlaWduKSB7XHJcblx0XHRcdFx0XHR0aGlzLmNsZWFyTG9jayhpdGVtRW50cnkpO1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UuZGVsZXRlKCdMb2NrdG9rZW4nLCBjYWNoZWRMb2NrLmlkKVxyXG5cdFx0XHRcdFx0LnRoZW4oXHJcblx0XHRcdFx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmNsZWFyTG9jayhpdGVtRW50cnkpO1xyXG5cdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGNsZWFyTG9jayAoaXRlbUVudHJ5KSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcclxuXHJcblx0XHRpZiAodGhpcy5sb2NrSXRlbXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRyZXR1cm4gZGVsZXRlIHRoaXMubG9ja0l0ZW1zW2l0ZW1UeXBlXVtpdGVtRW50cnkuaXRlbUlkXTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlLCBJdGVtQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgQXBpUmVxdWVzdEl0ZW1NYXAsIEl0ZW1JZCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5pbXBvcnQgeyBoYXNQcm9wZXJ0aWVzIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmNvbnN0IEVNUFRZX0VOVFJZID0ge307XHJcblxyXG5leHBvcnQgdHlwZSBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25SZXN1bHQgPSB7XHJcblx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdGl0ZW1JZDogSXRlbUlkLFxyXG5cdGl0ZW1zOiBBcGlSZXF1ZXN0SXRlbU1hcFxyXG59O1xyXG5cclxuZXhwb3J0IGNsYXNzIE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbiB7XHJcblx0cGFyZW50TWFwOiBhbnkgPSB7fTtcclxuXHRkZXN0aW5hdGlvbjogQXBpUmVxdWVzdEl0ZW1NYXAgPSB7fTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSByb290SXRlbUVudHJ5OiBJdGVtRW50cnksXHJcblx0XHRwcml2YXRlIHNpbmdsZUl0ZW1DYWNoZTogSXRlbUNhY2hlLFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0cHJvY2VzcyAoKTogTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uUmVzdWx0IHtcclxuXHRcdHRoaXMucGFyZW50TWFwID0gdGhpcy5jcmVhdGVQYXJlbnRNYXAodGhpcy5zaW5nbGVJdGVtQ2FjaGUpO1xyXG5cdFx0dGhpcy5wcm9jZXNzSXRlbXModGhpcy5yb290SXRlbUVudHJ5Lml0ZW1UeXBlLCBbdGhpcy5yb290SXRlbUVudHJ5XSwge30pO1xyXG5cclxuXHRcdHJldHVybiB7XHJcblx0XHRcdGl0ZW1UeXBlOiB0aGlzLnJvb3RJdGVtRW50cnkuaXRlbVR5cGUsXHJcblx0XHRcdGl0ZW1JZDogdGhpcy5yb290SXRlbUVudHJ5Lml0ZW1JZCxcclxuXHRcdFx0aXRlbXM6IHRoaXMuZGVzdGluYXRpb25cclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGNyZWF0ZVBhcmVudE1hcCAoaXRlbUNhY2hlKSB7XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRpdGVtQ2FjaGUuZm9yRWFjaChcclxuXHRcdFx0aXRlbUVudHJ5ID0+IHtcclxuXHRcdFx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcclxuXHRcdFx0XHRjb25zdCBwYXJlbnQgPSBpdGVtRW50cnkucGFyZW50O1xyXG5cclxuXHRcdFx0XHRpZiAocGFyZW50ID09PSBudWxsKSAvLyB3ZSBkb24ndCBjYXJlIGZvciBpdGVtcyB0aGF0IGFyZSBub3QgbGlua2VkIHRvIHRoZSByb290IGl0ZW1cclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHJcblx0XHRcdFx0Y29uc3QgcGFyZW50VHlwZSA9IHBhcmVudC5pdGVtVHlwZTtcclxuXHRcdFx0XHRjb25zdCBwYXJlbnRJZCA9IHBhcmVudC5pdGVtSWQ7XHJcblxyXG5cdFx0XHRcdGlmIChyZXN1bHRbcGFyZW50VHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdHJlc3VsdFtwYXJlbnRUeXBlXSA9IHt9O1xyXG5cclxuXHRcdFx0XHRsZXQgbWFwRW50cnkgPSByZXN1bHRbcGFyZW50VHlwZV07XHJcblxyXG5cdFx0XHRcdGlmIChtYXBFbnRyeVtwYXJlbnRJZF0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdG1hcEVudHJ5W3BhcmVudElkXSA9IHt9O1xyXG5cclxuXHRcdFx0XHRtYXBFbnRyeSA9IG1hcEVudHJ5W3BhcmVudElkXTtcclxuXHJcblx0XHRcdFx0aWYgKG1hcEVudHJ5W2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0bWFwRW50cnlbaXRlbVR5cGVdID0gW107XHJcblxyXG5cdFx0XHRcdG1hcEVudHJ5W2l0ZW1UeXBlXS5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcHJvY2Vzc0l0ZW1zIChpdGVtVHlwZSwgaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCBsaW5rQWNjdW11bGF0b3IpIHtcclxuXHRcdGlmICh0aGlzLmRlc3RpbmF0aW9uW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHR0aGlzLmRlc3RpbmF0aW9uW2l0ZW1UeXBlXSA9IHt9O1xyXG5cclxuXHRcdGlmIChsaW5rQWNjdW11bGF0b3JbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdGxpbmtBY2N1bXVsYXRvcltpdGVtVHlwZV0gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xyXG5cclxuXHRcdFx0Ly8gZWFjaCBpdGVtIG9ubHkgaGFzIGEgc2luZ2xlIHBhcmVudCwgc28gd2UgY2FuIHNhZmVseSBkbyB0aGlzXHJcblx0XHRcdGlmICh0aGlzLmRlc3RpbmF0aW9uW2l0ZW1UeXBlXVtpdGVtSWRdICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRsaW5rQWNjdW11bGF0b3JbaXRlbVR5cGVdLnB1c2goaXRlbUlkKTtcclxuXHJcblx0XHRcdHRoaXMuZGVzdGluYXRpb25baXRlbVR5cGVdW2l0ZW1JZF0gPSB0aGlzLnByb2Nlc3NJdGVtKGl0ZW1FbnRyeSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHByb2Nlc3NJdGVtIChpdGVtRW50cnkpIHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xyXG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcclxuXHRcdGNvbnN0IGNoaWxkSXRlbXMgPSB0aGlzLmdldEl0ZW1zQnlQYXJlbnQoaXRlbVR5cGUsIGl0ZW1JZCk7XHJcblx0XHRjb25zdCBjaGlsZENvbGxlY3Rpb25zID0gdGhpcy5jb2xsZWN0aW9uQ2FjaGUuZ2V0Q29sbGVjdGlvbnNCeVBhcmVudChpdGVtVHlwZSwgaXRlbUlkKTtcclxuXHRcdGNvbnN0IHZhbHVlcyA9IGl0ZW1FbnRyeS5mb3JtYXRSZXF1ZXN0KCk7XHJcblx0XHRjb25zdCBsaW5rcyA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgY2hpbGRUeXBlIGluIGNoaWxkSXRlbXMpXHJcblx0XHRcdHRoaXMucHJvY2Vzc0l0ZW1zKGNoaWxkVHlwZSwgY2hpbGRJdGVtc1tjaGlsZFR5cGVdLCBsaW5rcyk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgY2hpbGRDb2xsZWN0aW9ucykge1xyXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5Lm9wdGlvbnMucXVlcnkgIT09IG51bGwpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHR0aGlzLnByb2Nlc3NJdGVtcyhjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGUsIGNvbGxlY3Rpb25FbnRyeS5pdGVtcywgbGlua3MpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGhhc1ZhbHVlcyA9IGhhc1Byb3BlcnRpZXModmFsdWVzKTtcclxuXHRcdGNvbnN0IGhhc0xpbmtzID0gaGFzUHJvcGVydGllcyhsaW5rcyk7XHJcblxyXG5cdFx0aWYgKGhhc1ZhbHVlcyAmJiBoYXNMaW5rcylcclxuXHRcdFx0cmV0dXJuIHt2YWx1ZXM6IHZhbHVlcywgbGlua3M6IGxpbmtzfTtcclxuXHJcblx0XHRpZiAoaGFzVmFsdWVzKVxyXG5cdFx0XHRyZXR1cm4ge3ZhbHVlczogdmFsdWVzfTtcclxuXHJcblx0XHRpZiAoaGFzTGlua3MpXHJcblx0XHRcdHJldHVybiB7bGlua3M6IGxpbmtzfTtcclxuXHJcblx0XHRyZXR1cm4gRU1QVFlfRU5UUlk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldEl0ZW1zQnlQYXJlbnQgKHBhcmVudFR5cGUsIHBhcmVudElkKSB7XHJcblx0XHRjb25zdCBtYXBFbnRyeSA9IHRoaXMucGFyZW50TWFwW3BhcmVudFR5cGVdO1xyXG5cclxuXHRcdGlmIChtYXBFbnRyeSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4ge307XHJcblxyXG5cdFx0aWYgKG1hcEVudHJ5W3BhcmVudElkXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4ge307XHJcblxyXG5cdFx0cmV0dXJuIG1hcEVudHJ5W3BhcmVudElkXTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcblxyXG5pbXBvcnQgeyBBcGlGb3JtYXR0ZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgRW50cnlQYXJlbnROdWxsLCBGaWVsZE1hcCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5pbXBvcnQgeyBoYXNQcm9wZXJ0aWVzLCBpbkFycmF5IH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmNvbnN0IE1BWUJFID0gJ21heWJlJztcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVyeU1hdGNoZXIge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXHJcblx0XHRwdWJsaWMgaXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0cHVibGljIGZpZWxkczogRmllbGRNYXAsXHJcblx0XHRwdWJsaWMgcGFyZW50OiBFbnRyeVBhcmVudE51bGwgPSBudWxsXHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjb21wYXJlVmFsdWVzICh2YWx1ZSwgcXVlcnlWYWx1ZSkge1xyXG5cdFx0aWYgKG1vbWVudC5pc01vbWVudChxdWVyeVZhbHVlKSlcclxuXHRcdFx0cmV0dXJuIHRoaXMuYXBpRm9ybWF0dGVyLmNvbXBhcmVNb21lbnRPYmplY3RzKHF1ZXJ5VmFsdWUsIHZhbHVlKTtcclxuXHJcblx0XHRpZiAobW9tZW50LmlzRHVyYXRpb24ocXVlcnlWYWx1ZSkpXHJcblx0XHRcdHJldHVybiB0aGlzLmFwaUZvcm1hdHRlci5jb21wYXJlRHVyYXRpb25zKHF1ZXJ5VmFsdWUsIHZhbHVlKTtcclxuXHJcblx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xyXG5cdFx0cmV0dXJuIHF1ZXJ5VmFsdWUgPT0gdmFsdWU7XHJcblx0fVxyXG5cclxuXHRtYXRjaFF1ZXJ5IChxdWVyeTogYW55KTogYm9vbGVhbiB8IHN0cmluZyB7XHJcblx0XHRpZiAocXVlcnkuc2VhcmNoICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBNQVlCRTtcclxuXHJcblx0XHRpZiAocXVlcnkuY3VzdG9tICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBNQVlCRTtcclxuXHJcblx0XHRpZiAocXVlcnkubGlua2VkVG8gIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXMubWF0Y2hMaW5rZWRUb1F1ZXJ5KHF1ZXJ5KTtcclxuXHJcblx0XHRpZiAocXVlcnkuY29uZGl0aW9ucyAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5tYXRjaENvbXBsZXhRdWVyeShxdWVyeSk7XHJcblxyXG5cdFx0aWYgKHF1ZXJ5LmtleSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5tYXRjaFNpbXBsZVF1ZXJ5KHRoaXMuZmllbGRzW3F1ZXJ5LmtleV0sIHF1ZXJ5KTtcclxuXHJcblx0XHRpZiAoIWhhc1Byb3BlcnRpZXMocXVlcnkpKVxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHJcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ3F1ZXJ5TWF0Y2hlcjogVW5zdXBwb3J0ZWQgcXVlcnkhIFBhcnNlZD8nKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgbWF0Y2hMaW5rZWRUb1F1ZXJ5IChxdWVyeSkge1xyXG5cdFx0aWYgKHF1ZXJ5LnJldmVyc2UpXHJcblx0XHRcdHJldHVybiBNQVlCRTtcclxuXHJcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcclxuXHRcdGxldCBtYXRjaDtcclxuXHJcblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxyXG5cdFx0XHRtYXRjaCA9IGZhbHNlO1xyXG5cdFx0ZWxzZSBpZiAocXVlcnkubGlua2VkVG8gIT09IHBhcmVudC5pdGVtVHlwZSlcclxuXHRcdFx0bWF0Y2ggPSBmYWxzZTtcclxuXHRcdGVsc2VcclxuXHRcdFx0bWF0Y2ggPSB0aGlzLm1hdGNoU2ltcGxlUXVlcnkocGFyZW50Lml0ZW1JZCwgcXVlcnkucXVlcnkpO1xyXG5cclxuXHRcdGlmIChtYXRjaCA9PT0gTUFZQkUpXHJcblx0XHRcdHJldHVybiBNQVlCRTtcclxuXHJcblx0XHRyZXR1cm4gcXVlcnkubm90ID8gIW1hdGNoIDogbWF0Y2g7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIG1hdGNoQ29tcGxleFF1ZXJ5IChxdWVyeSkge1xyXG5cdFx0Y29uc3QgY29uZGl0aW9ucyA9IHF1ZXJ5LmNvbmRpdGlvbnM7XHJcblxyXG5cdFx0bGV0IHJlc3VsdDtcclxuXHRcdGxldCB0ZXJtaW5hbDtcclxuXHJcblx0XHRzd2l0Y2ggKHF1ZXJ5Lm9wZXJhdG9yKSB7XHJcblx0XHRcdGNhc2UgJ0FORCc6XHJcblx0XHRcdFx0cmVzdWx0ID0gdHJ1ZTtcclxuXHRcdFx0XHR0ZXJtaW5hbCA9IGZhbHNlO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRjYXNlICdPUic6XHJcblx0XHRcdFx0cmVzdWx0ID0gZmFsc2U7XHJcblx0XHRcdFx0dGVybWluYWwgPSB0cnVlO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcigncXVlcnlNYXRjaGVyOiBVbnN1cHBvcnRlZCBvcGVyYXRvcicpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGZvciAoY29uc3QgY29uZGl0aW9uIG9mIGNvbmRpdGlvbnMpIHtcclxuXHRcdFx0Y29uc3QgbWF0Y2ggPSB0aGlzLm1hdGNoUXVlcnkoY29uZGl0aW9uKTtcclxuXHJcblx0XHRcdGlmIChtYXRjaCA9PT0gdGVybWluYWwpXHJcblx0XHRcdFx0cmV0dXJuIHRlcm1pbmFsO1xyXG5cclxuXHRcdFx0aWYgKG1hdGNoID09PSBNQVlCRSlcclxuXHRcdFx0XHRyZXN1bHQgPSBNQVlCRTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBtYXRjaFNpbXBsZVF1ZXJ5ICh2YWx1ZSwgcXVlcnkpIHtcclxuXHRcdGNvbnN0IGtleSA9IHF1ZXJ5LmtleTtcclxuXHRcdGxldCBxdWVyeVZhbHVlID0gcXVlcnkudmFsdWU7XHJcblxyXG5cdFx0aWYgKCFoYXNQcm9wZXJ0aWVzKHF1ZXJ5KSkgLy8gQ291bGQgYmUgbGlua2VkVG8gYW4gZW1wdHkgb2JqZWN0XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cclxuXHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGNvbnNvbGUud2FybignUmVxdWlyZWQgZmllbGQnLCBrZXksICdub3QgZm91bmQgZm9yJywgdGhpcy5pdGVtVHlwZSk7XHJcblx0XHRcdHJldHVybiBNQVlCRTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAocXVlcnlWYWx1ZSA9PT0gJ05PVycpXHJcblx0XHRcdHF1ZXJ5VmFsdWUgPSBtb21lbnQoKTtcclxuXHJcblx0XHRzd2l0Y2ggKHF1ZXJ5LmNvbXBhcmF0b3IpIHtcclxuXHRcdFx0Y2FzZSAnPSc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29tcGFyZVZhbHVlcyh2YWx1ZSwgcXVlcnlWYWx1ZSk7XHJcblx0XHRcdGNhc2UgJyE9JzpcclxuXHRcdFx0XHRyZXR1cm4gIXRoaXMuY29tcGFyZVZhbHVlcyh2YWx1ZSwgcXVlcnlWYWx1ZSk7XHJcblx0XHRcdGNhc2UgJzwnOlxyXG5cdFx0XHRcdHJldHVybiB2YWx1ZSA8IHF1ZXJ5VmFsdWU7XHJcblx0XHRcdGNhc2UgJzw9JzpcclxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPD0gcXVlcnlWYWx1ZTtcclxuXHRcdFx0Y2FzZSAnPic6XHJcblx0XHRcdFx0cmV0dXJuIHZhbHVlID4gcXVlcnlWYWx1ZTtcclxuXHRcdFx0Y2FzZSAnPj0nOlxyXG5cdFx0XHRcdHJldHVybiB2YWx1ZSA+PSBxdWVyeVZhbHVlO1xyXG5cdFx0XHRjYXNlICdJTic6XHJcblx0XHRcdFx0cmV0dXJuIGluQXJyYXkodmFsdWUsIHF1ZXJ5VmFsdWUpO1xyXG5cdFx0XHRjYXNlICdOT1QgSU4nOlxyXG5cdFx0XHRcdHJldHVybiAhaW5BcnJheSh2YWx1ZSwgcXVlcnlWYWx1ZSk7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdxdWVyeU1hdGNoZXI6IFVuc3VwcG9ydGVkIGNvbXBhcmF0b3I6ICcgKyBxdWVyeS5jb21wYXJhdG9yICsgJyBpbiBxdWVyeSAnICsgcXVlcnkpO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuXHJcbmltcG9ydCB7IGdldEZpcnN0UHJvcGVydHkgfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuZW51bSBDT05TVEFOVFMge1xyXG5cdE9CSiA9IDAsXHJcblx0U1RSID0gMSxcclxuXHRTRVAgPSAnOidcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXJ5UGFyc2VyIHtcclxuXHRxdWVyeTogYW55O1xyXG5cdHBhcmFtZXRlcnM6IGFueTtcclxuXHJcblx0Y29uc3RydWN0b3IgKHF1ZXJ5LCBwYXJhbWV0ZXJzPykge1xyXG5cdFx0dGhpcy5xdWVyeSA9IHF1ZXJ5O1xyXG5cdFx0dGhpcy5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcHJvY2Vzc1ZhbHVlICh2YWx1ZSkge1xyXG5cdFx0Ly8gYWxnb3JpdGhtIGlzIG5vdCBpbXBvcnRhbnQsIGFzIGxvbmcgYXMgYWxsIGFycmF5cyBhcmUgc29ydGVkIHRoZSBzYW1lIHdheVxyXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKVxyXG5cdFx0XHRyZXR1cm4gdmFsdWUuc2xpY2UoKS5zb3J0KCk7XHJcblxyXG5cdFx0aWYgKG1vbWVudC5pc01vbWVudCh2YWx1ZSkpXHJcblx0XHRcdHJldHVybiBtb21lbnQodmFsdWUpO1xyXG5cclxuXHRcdGlmIChtb21lbnQuaXNEdXJhdGlvbih2YWx1ZSkpXHJcblx0XHRcdHJldHVybiBtb21lbnQuZHVyYXRpb24odmFsdWUpO1xyXG5cclxuXHRcdHJldHVybiB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY29tcGFyZVBhcnNlZFF1ZXJpZXMgKGEsIGIpIHtcclxuXHRcdGlmIChhW0NPTlNUQU5UUy5TVFJdID09PSBiW0NPTlNUQU5UUy5TVFJdKVxyXG5cdFx0XHRyZXR1cm4gMDtcclxuXHJcblx0XHRyZXR1cm4gYVtDT05TVEFOVFMuU1RSXSA+IGJbQ09OU1RBTlRTLlNUUl0gPyAxIDogLTE7XHJcblx0fVxyXG5cclxuXHRwYXJzZSAocXVlcnkgPSB0aGlzLnF1ZXJ5KSB7XHJcblx0XHRpZiAocXVlcnkubGlua2VkVG8gIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXMucGFyc2VMaW5rZWRUb1F1ZXJ5KFxyXG5cdFx0XHRcdHF1ZXJ5LmxpbmtlZFRvLFxyXG5cdFx0XHRcdHF1ZXJ5LnF1ZXJ5LFxyXG5cdFx0XHRcdHF1ZXJ5LnJldmVyc2UsXHJcblx0XHRcdFx0cXVlcnkubm90XHJcblx0XHRcdCk7XHJcblxyXG5cdFx0aWYgKHF1ZXJ5Lm5vdCAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ3F1ZXJ5UGFyc2VyOiBcIk5vdFwiIG5vdCBzdXBwb3J0ZWQnKTtcclxuXHJcblx0XHRpZiAocXVlcnkuY3VzdG9tICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlQ3VzdG9tUXVlcnkoXHJcblx0XHRcdFx0cXVlcnkuY3VzdG9tLFxyXG5cdFx0XHRcdHF1ZXJ5LnBhcmFtZXRlcnNcclxuXHRcdFx0KTtcclxuXHJcblx0XHRpZiAocXVlcnkuc2VhcmNoICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlU2VhcmNoUXVlcnkocXVlcnkuc2VhcmNoKTtcclxuXHJcblx0XHRpZiAocXVlcnkuY29uZGl0aW9ucyAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZUNvbXBsZXhRdWVyeShcclxuXHRcdFx0XHRxdWVyeS5jb25kaXRpb25zLFxyXG5cdFx0XHRcdHF1ZXJ5Lm9wZXJhdG9yXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0aWYgKHF1ZXJ5LmtleSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZVNpbXBsZVF1ZXJ5KFxyXG5cdFx0XHRcdHF1ZXJ5LmtleSxcclxuXHRcdFx0XHRxdWVyeS52YWx1ZSxcclxuXHRcdFx0XHRxdWVyeS5jb21wYXJhdG9yXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0Y29uc3Qga2V5ID0gZ2V0Rmlyc3RQcm9wZXJ0eShxdWVyeSk7XHJcblxyXG5cdFx0aWYgKGtleSA9PT0gbnVsbClcclxuXHRcdFx0cmV0dXJuIFt7fSwgJ3t9J107XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucGFyc2VTaW1wbGVRdWVyeShrZXksIHF1ZXJ5W2tleV0pO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwYXJzZVNlYXJjaFF1ZXJ5ICh2YWx1ZSkge1xyXG5cdFx0dmFsdWUgPSB0aGlzLmZvcm1hdFZhbHVlKHZhbHVlKTtcclxuXHJcblx0XHRyZXR1cm4gW1xyXG5cdFx0XHR7c2VhcmNoOiB2YWx1ZVtDT05TVEFOVFMuT0JKXX0sXHJcblx0XHRcdCdbJyArICdzZWFyY2gnICsgQ09OU1RBTlRTLlNFUCArIHZhbHVlW0NPTlNUQU5UUy5TVFJdICsgJ10nXHJcblx0XHRdO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwYXJzZUN1c3RvbVF1ZXJ5IChjdXN0b20sIHBhcmFtZXRlcnMpIHtcclxuXHRcdGlmIChwYXJhbWV0ZXJzID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBbXHJcblx0XHRcdFx0e2N1c3RvbTogY3VzdG9tfSxcclxuXHRcdFx0XHQnWycgKyBjdXN0b20gKyAnXSdcclxuXHRcdFx0XTtcclxuXHJcblx0XHRjb25zdCBwYXJzZWRQYXJhbWV0ZXJzID0gdGhpcy5wYXJzZUN1c3RvbVBhcmFtZXRlcnMocGFyYW1ldGVycyk7XHJcblxyXG5cdFx0cmV0dXJuIFtcclxuXHRcdFx0e2N1c3RvbTogY3VzdG9tLCBwYXJhbWV0ZXJzOiBwYXJzZWRQYXJhbWV0ZXJzW0NPTlNUQU5UUy5PQkpdfSxcclxuXHRcdFx0J1snICsgY3VzdG9tICsgQ09OU1RBTlRTLlNFUCArIHBhcnNlZFBhcmFtZXRlcnNbQ09OU1RBTlRTLlNUUl0gKyAnXSdcclxuXHRcdF07XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHBhcnNlQ3VzdG9tUGFyYW1ldGVycyAocGFyYW1ldGVycykge1xyXG5cdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHBhcmFtZXRlcnMpLnNvcnQoKTtcclxuXHJcblx0XHRjb25zdCBxdWVyeSA9IHt9O1xyXG5cdFx0bGV0IHN0cmluZyA9ICcnO1xyXG5cclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBrZXkgPSBrZXlzW2ldO1xyXG5cdFx0XHRjb25zdCB2YWx1ZSA9IHRoaXMuZm9ybWF0VmFsdWUocGFyYW1ldGVyc1trZXldKTtcclxuXHJcblx0XHRcdHF1ZXJ5W2tleV0gPSB2YWx1ZVtDT05TVEFOVFMuT0JKXTtcclxuXHJcblx0XHRcdGlmIChpID4gMClcclxuXHRcdFx0XHRzdHJpbmcgKz0gQ09OU1RBTlRTLlNFUDtcclxuXHJcblx0XHRcdHN0cmluZyArPSB2YWx1ZVtDT05TVEFOVFMuU1RSXTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gW3F1ZXJ5LCBzdHJpbmddO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwYXJzZVNpbXBsZVF1ZXJ5IChrZXksIHZhbHVlLCBjb21wYXJhdG9yPykge1xyXG5cdFx0dmFsdWUgPSB0aGlzLmZvcm1hdFZhbHVlKHZhbHVlKTtcclxuXHJcblx0XHRpZiAoY29tcGFyYXRvciA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRjb21wYXJhdG9yID0gQXJyYXkuaXNBcnJheSh2YWx1ZVtDT05TVEFOVFMuT0JKXSkgPyAnSU4nIDogJz0nO1xyXG5cclxuXHRcdHJldHVybiBbXHJcblx0XHRcdHtrZXk6IGtleSwgdmFsdWU6IHZhbHVlW0NPTlNUQU5UUy5PQkpdLCBjb21wYXJhdG9yOiBjb21wYXJhdG9yfSxcclxuXHRcdFx0J1snICsgY29tcGFyYXRvciArIENPTlNUQU5UUy5TRVAgKyBrZXkgKyBDT05TVEFOVFMuU0VQICsgdmFsdWVbQ09OU1RBTlRTLlNUUl0gKyAnXSdcclxuXHRcdF07XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHBhcnNlTGlua2VkVG9RdWVyeSAobGlua2VkVG8sIHF1ZXJ5LCByZXZlcnNlLCBub3QpIHtcclxuXHRcdGlmIChxdWVyeSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRxdWVyeSA9IHt9O1xyXG5cclxuXHRcdGlmIChyZXZlcnNlID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldmVyc2UgPSBmYWxzZTtcclxuXHJcblx0XHRpZiAobm90ID09PSB1bmRlZmluZWQpXHJcblx0XHRcdG5vdCA9IGZhbHNlO1xyXG5cclxuXHRcdGNvbnN0IHBhcnNlZFF1ZXJ5ID0gdGhpcy5wYXJzZShxdWVyeSk7XHJcblxyXG5cdFx0cmV0dXJuIFtcclxuXHRcdFx0e2xpbmtlZFRvOiBsaW5rZWRUbywgcXVlcnk6IHBhcnNlZFF1ZXJ5W0NPTlNUQU5UUy5PQkpdLCByZXZlcnNlOiByZXZlcnNlLCBub3Q6IG5vdH0sXHJcblx0XHRcdCdbJyArICdsaW5rZWRUbycgKyBDT05TVEFOVFMuU0VQICsgbGlua2VkVG8gKyBDT05TVEFOVFMuU0VQICsgcGFyc2VkUXVlcnlbQ09OU1RBTlRTLlNUUl0gKyBDT05TVEFOVFMuU0VQICsgcmV2ZXJzZSArIENPTlNUQU5UUy5TRVAgKyBub3QgKyAnXSdcclxuXHRcdF07XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHBhcnNlQ29tcGxleFF1ZXJ5IChjb25kaXRpb25zLCBvcGVyYXRvcikge1xyXG5cdFx0aWYgKG9wZXJhdG9yID09PSB1bmRlZmluZWQpXHJcblx0XHRcdG9wZXJhdG9yID0gJ0FORCc7XHJcblx0XHRlbHNlXHJcblx0XHRcdG9wZXJhdG9yID0gb3BlcmF0b3IudG9VcHBlckNhc2UoKTtcclxuXHJcblx0XHRjb25zdCBwYXJzZWRDb25kaXRpb25zID0gdGhpcy5wYXJzZUNvbmRpdGlvbnMoY29uZGl0aW9ucyk7XHJcblxyXG5cdFx0cmV0dXJuIFtcclxuXHRcdFx0e2NvbmRpdGlvbnM6IHBhcnNlZENvbmRpdGlvbnNbQ09OU1RBTlRTLk9CSl0sIG9wZXJhdG9yOiBvcGVyYXRvcn0sXHJcblx0XHRcdCdbJyArIG9wZXJhdG9yICsgcGFyc2VkQ29uZGl0aW9uc1tDT05TVEFOVFMuU1RSXSArICddJ1xyXG5cdFx0XTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcGFyc2VDb25kaXRpb25zIChjb25kaXRpb25zKSB7XHJcblx0XHRsZXQgcGFyc2VkQ29uZGl0aW9uczogb2JqZWN0W10gPSBbXTtcclxuXHRcdGNvbnN0IHF1ZXJ5OiBvYmplY3RbXSA9IFtdO1xyXG5cdFx0bGV0IHN0cmluZyA9ICcnO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29uZGl0aW9uIG9mIGNvbmRpdGlvbnMpXHJcblx0XHRcdHBhcnNlZENvbmRpdGlvbnMucHVzaCh0aGlzLnBhcnNlKGNvbmRpdGlvbikpO1xyXG5cclxuXHRcdHBhcnNlZENvbmRpdGlvbnMgPSBwYXJzZWRDb25kaXRpb25zLnNvcnQoKGEsIGIpID0+IHRoaXMuY29tcGFyZVBhcnNlZFF1ZXJpZXMoYSwgYikpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgcGFyc2VkQ29uZGl0aW9uIG9mIHBhcnNlZENvbmRpdGlvbnMpIHtcclxuXHRcdFx0cXVlcnkucHVzaChwYXJzZWRDb25kaXRpb25bQ09OU1RBTlRTLk9CSl0pO1xyXG5cdFx0XHRzdHJpbmcgKz0gcGFyc2VkQ29uZGl0aW9uW0NPTlNUQU5UUy5TVFJdO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBbcXVlcnksIHN0cmluZ107XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGZvcm1hdFZhbHVlICh2YWx1ZSkge1xyXG5cdFx0bGV0IHByb2Nlc3NlZFZhbHVlO1xyXG5cclxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmNoYXJBdCgwKSA9PT0gJyYnKSB7XHJcblx0XHRcdGNvbnN0IGtleSA9IHZhbHVlLnN1YnN0cmluZygxKTtcclxuXHJcblx0XHRcdHZhbHVlID0gdGhpcy5wYXJhbWV0ZXJzW2tleV07XHJcblxyXG5cdFx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ3F1ZXJ5UGFyc2VyOiBVbmRlZmluZWQgdGVtcGxhdGUgcGFyYW1ldGVyIFxcJycgKyBrZXkgKyAnXFwnJyk7XHJcblxyXG5cdFx0XHRwcm9jZXNzZWRWYWx1ZSA9IHRoaXMucHJvY2Vzc1ZhbHVlKHZhbHVlKTtcclxuXHJcblx0XHRcdHJldHVybiBbcHJvY2Vzc2VkVmFsdWUsIGtleSArICc+JyArIHZhbHVlXTtcclxuXHRcdH1cclxuXHJcblx0XHRwcm9jZXNzZWRWYWx1ZSA9IHRoaXMucHJvY2Vzc1ZhbHVlKHZhbHVlKTtcclxuXHJcblx0XHRyZXR1cm4gW3Byb2Nlc3NlZFZhbHVlLCAnJyArIHByb2Nlc3NlZFZhbHVlXTtcclxuXHR9XHJcbn1cclxuIiwiZXhwb3J0IGNsYXNzIFF1ZXJ5U2VydmljZSB7XHJcblx0Y29uc3RydWN0b3IgKCkge1xyXG5cdH1cclxuXHJcblx0YWRkQW5kQ29uZGl0aW9uIChxdWVyeSwgY29uZGl0aW9uKSB7XHJcblx0XHRpZiAocXVlcnkuY29uZGl0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IHF1ZXJ5Lm9wZXJhdG9yID09PSAnb3InKVxyXG5cdFx0XHRyZXR1cm4ge2NvbmRpdGlvbnM6IFtxdWVyeSwgY29uZGl0aW9uXX07XHJcblxyXG5cdFx0Ly8gd2UgaGF2ZSBhbiAnYW5kJyBjb25kaXRpb25cclxuXHRcdHJldHVybiB7Y29uZGl0aW9uczogcXVlcnkuY29uZGl0aW9ucy5jb25jYXQoY29uZGl0aW9uKX07XHJcblx0fVxyXG5cclxuXHRhZGRPckNvbmRpdGlvbiAocXVlcnksIGNvbmRpdGlvbikge1xyXG5cdFx0aWYgKHF1ZXJ5Lm9wZXJhdG9yID09PSAnb3InKVxyXG5cdFx0XHRyZXR1cm4ge2NvbmRpdGlvbnM6IHF1ZXJ5LmNvbmRpdGlvbnMuY29uY2F0KGNvbmRpdGlvbil9O1xyXG5cclxuXHRcdC8vIHdlIGhhdmUgYW4gJ2FuZCcgY29uZGl0aW9uXHJcblx0XHRyZXR1cm4ge2NvbmRpdGlvbnM6IFtxdWVyeSwgY29uZGl0aW9uXSwgb3BlcmF0b3I6ICdvcid9O1xyXG5cdH1cclxuXHJcblx0YWRkUGFyZW50Q29uZGl0aW9uIChxdWVyeSwgcGFyZW50KSB7XHJcblx0XHRsZXQgbGlua2VkVG9RdWVyeTtcclxuXHJcblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxyXG5cdFx0XHRyZXR1cm4gcXVlcnk7XHJcblxyXG5cdFx0bGlua2VkVG9RdWVyeSA9IHtsaW5rZWRUbzogcGFyZW50Lml0ZW1UeXBlLCBxdWVyeTogcGFyZW50Lml0ZW1JZH07XHJcblxyXG5cdFx0cmV0dXJuIHF1ZXJ5ID09PSBudWxsID8gbGlua2VkVG9RdWVyeSA6IHRoaXMuYWRkQW5kQ29uZGl0aW9uKHF1ZXJ5LCBsaW5rZWRUb1F1ZXJ5KTtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZU5vdEluIChpZEFycmF5KSB7XHJcblx0XHRyZXR1cm4ge2NvbXBhcmF0b3I6ICdOT1QgSU4nLCBrZXk6ICdpZCcsIHZhbHVlOiBpZEFycmF5fTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sdW1uU2V0LCBDb2x1bW5VdGlsIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEFwaVJlcXVlc3RDb2x1bW5zIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFJlcXVlc3RDb2x1bW5FeHBhbnNpb24ge1xyXG5cdHByaXZhdGUgY29sdW1uczoge1tpdGVtVHlwZTogc3RyaW5nXTogQXBpUmVxdWVzdENvbHVtbnN9ID0ge307XHJcblx0cHJpdmF0ZSBjb2x1bW5TZXRJZE1hcDoge1tjb2x1bW5TZXRJZDogbnVtYmVyXTogYm9vbGVhbn0gPSB7fTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRleHBhbmQgKGNvbHVtblNldDogQ29sdW1uU2V0KSB7XHJcblx0XHRpZiAodGhpcy5jb2x1bW5TZXRJZE1hcFtjb2x1bW5TZXQuaWRdKVxyXG5cdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0Y29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1ucztcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sdW1uU2V0Lml0ZW1UeXBlO1xyXG5cclxuXHRcdGlmIChjb2x1bW5zW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRjb2x1bW5zW2l0ZW1UeXBlXSA9IFtdO1xyXG5cclxuXHRcdGNvbHVtbnNbaXRlbVR5cGVdID0gdGhpcy5jb2x1bW5VdGlsXHJcblx0XHRcdC5tZXJnZVJlcXVlc3RDb2x1bW5zKGNvbHVtbnNbaXRlbVR5cGVdLCBjb2x1bW5TZXQucmVxdWVzdClcclxuXHRcdFx0Lm1lcmdlZDtcclxuXHJcblx0XHR0aGlzLmNvbHVtblNldElkTWFwW2NvbHVtblNldC5pZF0gPSB0cnVlO1xyXG5cdH1cclxuXHJcblx0Z2V0ICgpIHtcclxuXHRcdHJldHVybiB0aGlzLmNvbHVtbnM7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEFwaUZvcm1hdHRlciwgQ29sbGVjdGlvbkhhbmRsZXIsIEl0ZW1IYW5kbGVyIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7XHJcblx0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRDb2x1bW5TZXRGYWN0b3J5LFxyXG5cdEl0ZW1FbnRyeUZhY3RvcnksXHJcblx0UmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnlcclxufSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSwgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlTGlicmFyeUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQge1xyXG5cdENvbGxlY3Rpb25NYXRjaFJlc3VsdCxcclxuXHRFeHRlbmRlZENvbGxlY3Rpb25NYXRjaFJlc3VsdCwgRmllbGRNYXAsXHJcblx0R3JvdXBlZEV4dGVuZGVkQ29sbGVjdGlvbk1hdGNoUmVzdWx0LFxyXG5cdEl0ZW1JZCxcclxuXHRQcm9taXNlSW50ZXJmYWNlXHJcbn0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNvY2tldE1lc3NhZ2VIYW5kbGVyIHtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlGYWN0b3J5OiBJdGVtRW50cnlGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRwcml2YXRlIHJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXHJcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlXHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRvbk1lc3NhZ2VSZWNlaXZlZCAobWVzc2FnZTogYW55KTogYW55IHtcclxuXHRcdHN3aXRjaCAobWVzc2FnZS5ib2R5LmV2ZW50VHlwZSkge1xyXG5cdFx0XHRjYXNlICd1cGRhdGUnOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmhhbmRsZVVwZGF0ZShtZXNzYWdlKTtcclxuXHRcdFx0Y2FzZSAnY3JlYXRlJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVDcmVhdGUobWVzc2FnZSk7XHJcblx0XHRcdGNhc2UgJ2RlbGV0ZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlRGVsZXRlKG1lc3NhZ2UpO1xyXG5cdFx0XHRjYXNlICdsaW5rVG8nOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmhhbmRsZUxpbmtNb3ZlKC8qIG1lc3NhZ2UgKi8pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Zm9ybWF0TWVzc2FnZVZhbHVlcyAodmFsdWVzLCBjb2x1bW5zKTogRmllbGRNYXAge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiBjb2x1bW5zKVxyXG5cdFx0XHRyZXN1bHRbY29sdW1uSWRdID0gdGhpcy5hcGlGb3JtYXR0ZXIuZm9ybWF0UmVzcG9uc2VWYWx1ZShjb2x1bW5zW2NvbHVtbklkXS50eXBlLCB2YWx1ZXNbY29sdW1uSWRdKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlQ29sbGVjdGlvbk1hcCAoaXRlbVR5cGUsIGl0ZW1zLCBjb2x1bW5zKSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IHtbaXRlbUlkOiBudW1iZXJdOiBDb2xsZWN0aW9uTWF0Y2hSZXN1bHR9ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbXMpIHtcclxuXHRcdFx0Y29uc3QgaXRlbSA9IGl0ZW1zW2l0ZW1JZF07XHJcblx0XHRcdGNvbnN0IHBhcmVudCA9IGl0ZW0ucGFyZW50ICE9PSBudWxsID8gaXRlbS5wYXJlbnQgOiB7fTtcclxuXHJcblx0XHRcdHJlc3VsdFtpdGVtSWRdID0gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5lbnRyaWVzLmdldEJ5Rml0dGluZ0l0ZW0oXHJcblx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0dGhpcy5mb3JtYXRNZXNzYWdlVmFsdWVzKGl0ZW0udmFsdWVzLCBjb2x1bW5zKSxcclxuXHRcdFx0XHRwYXJlbnRcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z3JvdXBCeUNvbGxlY3Rpb25JZCAoaXRlbVR5cGUsIGNvbGxlY3Rpb25NYXApOiBHcm91cGVkRXh0ZW5kZWRDb2xsZWN0aW9uTWF0Y2hSZXN1bHQge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gY29sbGVjdGlvbk1hcCkge1xyXG5cdFx0XHRjb25zdCBjb2xsZWN0aW9ucyA9IGNvbGxlY3Rpb25NYXBbaXRlbUlkXTtcclxuXHJcblx0XHRcdGZvciAoY29uc3Qgc3RhdHVzIGluIGNvbGxlY3Rpb25zKSB7XHJcblx0XHRcdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uIG9mIGNvbGxlY3Rpb25zW3N0YXR1c10pIHtcclxuXHRcdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25JZCA9IGNvbGxlY3Rpb24uaWQ7XHJcblxyXG5cdFx0XHRcdFx0aWYgKHJlc3VsdFtjb2xsZWN0aW9uSWRdID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFx0KDxFeHRlbmRlZENvbGxlY3Rpb25NYXRjaFJlc3VsdD4gcmVzdWx0W2NvbGxlY3Rpb25JZF0pID0ge1xyXG5cdFx0XHRcdFx0XHRcdGNvbGxlY3Rpb246IGNvbGxlY3Rpb24sXHJcblx0XHRcdFx0XHRcdFx0Zml0dGluZzogW10sXHJcblx0XHRcdFx0XHRcdFx0bm90Zml0dGluZzogW10sXHJcblx0XHRcdFx0XHRcdFx0bWF5YmU6IFtdXHJcblx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0cmVzdWx0W2NvbGxlY3Rpb25JZF1bc3RhdHVzXS5wdXNoKFxyXG5cdFx0XHRcdFx0XHRzdGF0dXMgPT09ICdmaXR0aW5nJyA/IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZCkgOiBpdGVtSWRcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdldFJlcXVlc3RDb2x1bW5zIChpdGVtVHlwZSwgY29sbGVjdGlvbk1hcCkge1xyXG5cdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25zID0gY29sbGVjdGlvbk1hcFtpdGVtSWRdO1xyXG5cdFx0XHRjb25zdCBmaXR0aW5nQ29sbGVjdGlvbnMgPSBjb2xsZWN0aW9ucy5maXR0aW5nO1xyXG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBmaXR0aW5nQ29sbGVjdGlvbiBvZiBmaXR0aW5nQ29sbGVjdGlvbnMpXHJcblx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uLmV4cGFuZChmaXR0aW5nQ29sbGVjdGlvbi5jb2x1bW5zKTtcclxuXHJcblx0XHRcdGlmIChpdGVtRW50cnkgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRjb2x1bW5FeHBhbnNpb24uZXhwYW5kKGl0ZW1FbnRyeS5jb2x1bW5zKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gY29sdW1uRXhwYW5zaW9uLmdldCgpO1xyXG5cdH1cclxuXHJcblx0ZGVmZXJFbnRyeSAoaXRlbUVudHJ5KSB7XHJcblx0XHRjb25zdCBkZWZlcnJlZCA9IGl0ZW1FbnRyeS5kZWZlcnJlZDtcclxuXHJcblx0XHRpZiAoZGVmZXJyZWQgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5kZWZlcigpO1xyXG5cclxuXHRcdHJldHVybiBkZWZlcnJlZC5wcm9taXNlLnRoZW4oXHJcblx0XHRcdHRoaXMuZGVmZXJFbnRyeS5iaW5kKHRoaXMpLFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzTWVzc2FnZSAoYm9keSk6IFByb21pc2VJbnRlcmZhY2U8R3JvdXBlZEV4dGVuZGVkQ29sbGVjdGlvbk1hdGNoUmVzdWx0PiB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGJvZHkuaXRlbVR5cGU7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uTWFwID0gdGhpcy5jcmVhdGVDb2xsZWN0aW9uTWFwKGl0ZW1UeXBlLCBib2R5Lml0ZW1zW2l0ZW1UeXBlXSwgYm9keS5jb2x1bW5zW2l0ZW1UeXBlXSk7XHJcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IHRoaXMuZ2V0UmVxdWVzdENvbHVtbnMoaXRlbVR5cGUsIGNvbGxlY3Rpb25NYXApO1xyXG5cdFx0Y29uc3QgZGVmZXJyZWRFbnRyaWVzOiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cdFx0Y29uc3QgcmVxdWVzdElkczogSXRlbUlkW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZFN0cmluZyBpbiBjb2xsZWN0aW9uTWFwKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZFN0cmluZyk7XHJcblx0XHRcdGNvbnN0IGl0ZW1JZCA9ICtpdGVtSWRTdHJpbmc7XHJcblxyXG5cdFx0XHRpZiAoaXRlbUVudHJ5ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRkZWZlcnJlZEVudHJpZXMucHVzaCh0aGlzLmRlZmVyRW50cnkoaXRlbUVudHJ5KSk7XHJcblx0XHRcdFx0cmVxdWVzdElkcy5wdXNoKGl0ZW1JZCk7XHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChjb2xsZWN0aW9uTWFwW2l0ZW1JZF0uZml0dGluZy5sZW5ndGggPT09IDApXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuYWRkKFxyXG5cdFx0XHRcdHRoaXMuaXRlbUVudHJ5RmFjdG9yeS5jb25zdHJ1Y3REZWZlcnJlZChpdGVtVHlwZSwgaXRlbUlkLCByZXF1ZXN0Q29sdW1uc1tpdGVtVHlwZV0sIGZhbHNlKVxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdFx0cmVxdWVzdElkcy5wdXNoKGl0ZW1JZCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHJlcXVlc3RJZHMubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKHRoaXMuZ3JvdXBCeUNvbGxlY3Rpb25JZChpdGVtVHlwZSwgY29sbGVjdGlvbk1hcCkpOyAvLyBjb2xsZWN0aW9uTWFwIG1pZ2h0IGNvbnRhaW4gJ21heWJlJyBtYXRjaGVzXHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKGRlZmVycmVkRW50cmllcykudGhlbihcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KGl0ZW1UeXBlLCB7aWQ6IHJlcXVlc3RJZHN9LCByZXF1ZXN0Q29sdW1ucyk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHRyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlUmVzcG9uc2UoaXRlbVR5cGUsIHJlcXVlc3RJZHMsIHJlcXVlc3RDb2x1bW5zW2l0ZW1UeXBlXSwgcmVzcG9uc2UsIGNvbGxlY3Rpb25NYXApO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZSAoYm9keSkge1xyXG5cdFx0Y29uc3QgaXRlbXMgPSBib2R5Lml0ZW1zLkZ1bmN0aW9uQ2hhbmdlc1Jlc29sdmU7XHJcblx0XHRjb25zdCBkZWZlcnJlZEVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XHJcblx0XHRjb25zdCByZXF1ZXN0SWRzOiBJdGVtSWRbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGl0ZW1zKSB7XHJcblx0XHRcdGNvbnN0IGZ1bmN0aW9uSWQgPSBpdGVtc1tpdGVtSWRdLnBhcmVudC5pdGVtSWQ7XHJcblx0XHRcdGNvbnN0IGZ1bmN0aW9uRW50cnkgPSB0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KCdGdW5jdGllJywgZnVuY3Rpb25JZCk7XHJcblxyXG5cdFx0XHRpZiAoZnVuY3Rpb25FbnRyeSA9PT0gdW5kZWZpbmVkIHx8IGZ1bmN0aW9uRW50cnkuY29sdW1ucy5yZXNwb25zZS5GdW5jdGllLm5ld2NoYW5nZXMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGRlZmVycmVkRW50cmllcy5wdXNoKHRoaXMuZGVmZXJFbnRyeShmdW5jdGlvbkVudHJ5KSk7XHJcblx0XHRcdHJlcXVlc3RJZHMucHVzaChmdW5jdGlvbklkKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAocmVxdWVzdElkcy5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybjtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwoZGVmZXJyZWRFbnRyaWVzKS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoJ0Z1bmN0aWUnLCB7aWQ6IHJlcXVlc3RJZHN9LCB7RnVuY3RpZTogWyduZXdjaGFuZ2VzJ119KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRjb25zdCByZXNwb25zZUlkcyA9IHJlc3BvbnNlLmxpbmtzLkZ1bmN0aWU7XHJcblxyXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbUlkIG9mIHJlc3BvbnNlSWRzKSB7XHJcblx0XHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSA8SXRlbUVudHJ5PiB0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KCdGdW5jdGllJywgaXRlbUlkKTtcclxuXHJcblx0XHRcdFx0XHRjb25zdCBwcmV2aW91cyA9IHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoXHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5nZXRGaWVsZHMoKSxcclxuXHRcdFx0XHRcdFx0e30sXHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5jb2x1bW5zLm1haW5cclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRjb25zdCByZXNwb25zZVZhbHVlID0gcmVzcG9uc2UuZmV0Y2hWYWx1ZSgnRnVuY3RpZScsIGl0ZW1JZCwgJ25ld2NoYW5nZXMnKTtcclxuXHJcblx0XHRcdFx0XHRpZiAocmVzcG9uc2VWYWx1ZSA9PT0gcHJldmlvdXMubmV3Y2hhbmdlcylcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cclxuXHRcdFx0XHRcdGl0ZW1FbnRyeVxyXG5cdFx0XHRcdFx0XHQuc2V0SW5pdGlhbCh7bmV3Y2hhbmdlczogcmVzcG9uc2VWYWx1ZX0sIHRydWUpXHJcblx0XHRcdFx0XHRcdC5jYWxsT25DaGFuZ2UocHJldmlvdXMpXHJcblx0XHRcdFx0XHRcdC5yZXNvbHZlKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCkuY2F0Y2godGhpcy5lcnJvckhhbmRsZXIubm90aWZ5RXJyb3IpO1xyXG5cdH1cclxuXHJcblx0aGFuZGxlUmVzcG9uc2UgKGl0ZW1UeXBlLCByZXF1ZXN0SWRzLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2UsIGNvbGxlY3Rpb25NYXApOiBHcm91cGVkRXh0ZW5kZWRDb2xsZWN0aW9uTWF0Y2hSZXN1bHQge1xyXG5cdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCk7XHJcblx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucyk7XHJcblx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBvZiByZXF1ZXN0SWRzKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IDxJdGVtRW50cnk+IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZCk7XHJcblx0XHRcdGNvbnN0IGlzTmV3ID0gaXRlbUVudHJ5LmluaXRpYWwgPT09IHVuZGVmaW5lZDtcclxuXHRcdFx0Y29uc3QgZmllbGRzID0gcmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCk7XHJcblxyXG5cdFx0XHRpZiAoZmllbGRzID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRpdGVtRW50cnkucmVqZWN0KCk7XHJcblxyXG5cdFx0XHRcdGlmIChpc05ldylcclxuXHRcdFx0XHRcdHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5jbGVhcihpdGVtRW50cnkpO1xyXG5cclxuXHRcdFx0XHRkZWxldGUgY29sbGVjdGlvbk1hcFtpdGVtSWRdO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb25zdCBkZXJpdmVkID0gcmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtbkluZm8ucm9vdCk7XHJcblxyXG5cdFx0XHRpZiAoaXNOZXcpXHJcblx0XHRcdFx0aXRlbUVudHJ5LnJlc29sdmVEZWZlcnJlZChmaWVsZHMsIGRlcml2ZWQsIGNvbHVtbkluZm8pO1xyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRjb25zdCBleHBhbnNpb25SZXN1bHQgPSBjb2x1bW5FeHBhbnNpb24ucnVuKGl0ZW1FbnRyeS5jb2x1bW5zKTtcclxuXHRcdFx0XHRjb25zdCBwcmV2aW91cyA9IHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoXHJcblx0XHRcdFx0XHRpdGVtRW50cnkuZ2V0RmllbGRzKCksXHJcblx0XHRcdFx0XHR7fSxcclxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5jb2x1bW5zLm1haW5cclxuXHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRpZiAoZXhwYW5zaW9uUmVzdWx0ICE9PSBudWxsKVxyXG5cdFx0XHRcdFx0aXRlbUVudHJ5LmV4cGFuZChmaWVsZHMsIGRlcml2ZWQsIGV4cGFuc2lvblJlc3VsdCk7XHJcblxyXG5cdFx0XHRcdGl0ZW1FbnRyeVxyXG5cdFx0XHRcdFx0LnVwZGF0ZUZpZWxkcyhmaWVsZHMsIGRlcml2ZWQsIGZhbHNlKVxyXG5cdFx0XHRcdFx0LmNhbGxPbkNoYW5nZShwcmV2aW91cylcclxuXHRcdFx0XHRcdC5yZXNvbHZlKCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5ncm91cEJ5Q29sbGVjdGlvbklkKGl0ZW1UeXBlLCBjb2xsZWN0aW9uTWFwKTtcclxuXHR9XHJcblxyXG5cdGhhbmRsZUNyZWF0ZSAobWVzc2FnZSkge1xyXG5cdFx0Y29uc3QgYm9keSA9IG1lc3NhZ2UuYm9keTtcclxuXHJcblx0XHRpZiAoYm9keS5pdGVtVHlwZSA9PT0gJ0Z1bmN0aW9uQ2hhbmdlc1Jlc29sdmUnKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZShib2R5KTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzTWVzc2FnZShib2R5KS50aGVuKFxyXG5cdFx0XHRjb2xsZWN0aW9uTWFwID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5hZGRUb0NvbGxlY3Rpb25zKGNvbGxlY3Rpb25NYXAsIHRydWUpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCkuY2F0Y2godGhpcy5lcnJvckhhbmRsZXIubm90aWZ5RXJyb3IpO1xyXG5cdH1cclxuXHJcblx0aGFuZGxlVXBkYXRlIChtZXNzYWdlKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzTWVzc2FnZShtZXNzYWdlLmJvZHkpLnRoZW4oXHJcblx0XHRcdGNvbGxlY3Rpb25NYXAgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLnJlbW92ZUZyb21BbmRBZGRUb0NvbGxlY3Rpb25zKGNvbGxlY3Rpb25NYXAsIHRydWUpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCkuY2F0Y2godGhpcy5lcnJvckhhbmRsZXIubm90aWZ5RXJyb3IpO1xyXG5cdH1cclxuXHJcblx0aGFuZGxlRGVsZXRlIChtZXNzYWdlKSB7XHJcblx0XHRjb25zdCBib2R5ID0gbWVzc2FnZS5ib2R5O1xyXG5cdFx0Y29uc3QgY29sbGVjdGlvbk1hcCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIG9mIGJvZHkuaXRlbXMpIHtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmVudHJpZXMuZ2V0QnlDb250YWluaW5nSXRlbShib2R5Lml0ZW1UeXBlLCBpdGVtSWQpO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uIG9mIGNvbGxlY3Rpb25zKSB7XHJcblx0XHRcdFx0Y29uc3QgY29sbGVjdGlvbklkID0gY29sbGVjdGlvbi5pZDtcclxuXHJcblx0XHRcdFx0aWYgKGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0Y29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdID0ge2NvbGxlY3Rpb246IGNvbGxlY3Rpb24sIGl0ZW1zOiBbXX07XHJcblxyXG5cdFx0XHRcdGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXS5pdGVtcy5wdXNoKGl0ZW1JZCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XHJcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gY29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdO1xyXG5cdFx0XHRtYXBFbnRyeS5jb2xsZWN0aW9uLnJlbW92ZUl0ZW1zKG1hcEVudHJ5Lml0ZW1zLCBudWxsLCB0cnVlKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XHJcblx0fVxyXG5cclxuXHQvLyBUT0RPIVxyXG5cdGhhbmRsZUxpbmtNb3ZlICgpIHt9XHJcblxyXG5cdC8qXHRoYW5kbGVMaW5rTW92ZSAobWVzc2FnZSkge1xyXG5cdFx0XHRwcm9jZXNzTWVzc2FnZShcclxuXHRcdFx0XHRtZXNzYWdlLFxyXG5cdFx0XHRcdGZ1bmN0aW9uIChjb2xsZWN0aW9uLCBpdGVtRW50cmllcykge1xyXG5cdFx0XHRcdFx0Ly8gZml0cyBpbiB0aGlzIGNvbGxlY3Rpb24sIHRvZG86IGdldCB0aGUgb2xkIGNvbGxlY3Rpb24gaXQgYmVsb25nZWQgdG9cclxuXHRcdFx0XHRcdGNvbGxlY3Rpb24ubW92ZUl0ZW1zKGl0ZW1FbnRyaWVzLCBudWxsLCB0cnVlKTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGZ1bmN0aW9uIChjb2xsZWN0aW9uLCBpdGVtRW50cmllcykge1xyXG5cdFx0XHRcdFx0Ly8gbWF5YmUgZml0c1xyXG5cdFx0XHRcdFx0Ly8gdG9kbzogYWxzbyByZW1vdmUgdGhlbSBmcm9tIHRoZSBvbGQgY29sbGVjdGlvblxyXG5cdFx0XHRcdFx0Y29sbGVjdGlvbi5leHRlbmQoYW5ndWxhci5pZGVudGl0eSwgZmFsc2UsIGZhbHNlKTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGZ1bmN0aW9uIChjb2xsZWN0aW9uLCBpZHMpIHtcclxuXHRcdFx0XHRcdC8vIG5vdCBmaXR0aW5nIGluIHRoaXMgY29sbGVjdGlvbiwgcmVtb3ZlIGl0ID9cclxuXHRcdFx0XHRcdGNvbGxlY3Rpb24ucmVtb3ZlSXRlbXMoaWRzLCBudWxsLCBtZXNzYWdlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblx0Ki9cclxufVxyXG4iLCJleHBvcnQgKiBmcm9tICcuL0FwaUZvcm1hdHRlcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vQXBpUmVxdWVzdFNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0FwaVJlc3BvbnNlUHJvY2Vzc29yJztcclxuZXhwb3J0ICogZnJvbSAnLi9CYXRjaFN0YXR1cyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ2hhbmdlc0NvbXBpbGF0aW9uJztcclxuZXhwb3J0ICogZnJvbSAnLi9DaGFuZ2VzUHJvY2Vzc29yJztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uQ2FjaGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25FbnRyeVNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25IYW5kbGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uTWF0Y2hlcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvblJlc291cmNlU2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uQ2FjaGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbHVtbkV4cGFuc2lvbic7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uSGFuZGxlcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uSW5mbyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uU2V0JztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5VdGlsJztcclxuZXhwb3J0ICogZnJvbSAnLi9DcmVhdGVSZXF1ZXN0JztcclxuZXhwb3J0ICogZnJvbSAnLi9JdGVtQWRtaW5pc3RyYXRvcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vSXRlbUNhY2hlJztcclxuZXhwb3J0ICogZnJvbSAnLi9JdGVtRW50cnlTZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9JdGVtSGFuZGxlcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vSXRlbVJlcXVlc3RTZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9JdGVtUmVzb3VyY2VTZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9LZXlTZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9Mb2NhbENhY2hlJztcclxuZXhwb3J0ICogZnJvbSAnLi9Mb2NrU2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uJztcclxuZXhwb3J0ICogZnJvbSAnLi9RdWVyeU1hdGNoZXInO1xyXG5leHBvcnQgKiBmcm9tICcuL1F1ZXJ5UGFyc2VyJztcclxuZXhwb3J0ICogZnJvbSAnLi9RdWVyeVNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL1JlcXVlc3RDb2x1bW5FeHBhbnNpb24nO1xyXG5leHBvcnQgKiBmcm9tICcuL1NvY2tldE1lc3NhZ2VIYW5kbGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9VdGlsJztcclxuIiwiaW1wb3J0IHsgQXBpRm9ybWF0dGVyLCBBcGlSZXNwb25zZVByb2Nlc3NvciB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIpIHtcclxuXHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKHJlc3BvbnNlOiBhbnkpIHtcclxuXHRcdHJldHVybiBuZXcgQXBpUmVzcG9uc2VQcm9jZXNzb3IodGhpcy5hcGlGb3JtYXR0ZXIsIHJlc3BvbnNlKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQmF0Y2hTdGF0dXMgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgSXRlbUlkLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJhdGNoU3RhdHVzRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3Q8VD4gKFxyXG5cdFx0Z2V0SXRlbUlkOiAoZW50cnk6IFQpID0+IEl0ZW1JZCxcclxuXHRcdGdldFByb21pc2U6IChlbnRyeTogVCkgPT4gUHJvbWlzZUludGVyZmFjZTxUPlxyXG5cdCk6IEJhdGNoU3RhdHVzPFQ+IHtcclxuXHRcdHJldHVybiBuZXcgQmF0Y2hTdGF0dXMoXHJcblx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2UsXHJcblx0XHRcdGdldEl0ZW1JZCxcclxuXHRcdFx0Z2V0UHJvbWlzZVxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ2hhbmdlc0NvbXBpbGF0aW9uIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuXHJcbmltcG9ydCB7IENvbGxlY3Rpb25DYWNoZUZhY3RvcnkgfSBmcm9tICcuLyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlXHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKHNpbmdsZUl0ZW1zOiBJdGVtRW50cnlbXSwgY29sbGVjdGlvbnM6IENvbGxlY3Rpb25FbnRyeVtdKTogQ2hhbmdlc0NvbXBpbGF0aW9uIHtcclxuXHRcdHJldHVybiBuZXcgQ2hhbmdlc0NvbXBpbGF0aW9uKFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnksXHJcblx0XHRcdHRoaXMua2V5U2VydmljZSxcclxuXHRcdFx0c2luZ2xlSXRlbXMsXHJcblx0XHRcdGNvbGxlY3Rpb25zXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQge1xyXG5cdEFwaUZvcm1hdHRlcixcclxuXHRDaGFuZ2VzUHJvY2Vzc29yLFxyXG5cdENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXHJcblx0Q29sbGVjdGlvbkhhbmRsZXIsXHJcblx0SXRlbUhhbmRsZXJcclxufSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHtcclxuXHRDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxyXG5cdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0Q3JlYXRlUmVxdWVzdEZhY3RvcnksXHJcblx0UmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnlcclxufSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSwgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlTGlicmFyeUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxyXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnk6IENoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25FbnRyeVNlcnZpY2U6IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcclxuXHRcdHByaXZhdGUgY29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY3JlYXRlUmVxdWVzdEZhY3Rvcnk6IENyZWF0ZVJlcXVlc3RGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIHJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoKTogQ2hhbmdlc1Byb2Nlc3NvciB7XHJcblx0XHRyZXR1cm4gbmV3IENoYW5nZXNQcm9jZXNzb3IoXHJcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxyXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxyXG5cdFx0XHR0aGlzLmNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSxcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcclxuXHRcdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNyZWF0ZVJlcXVlc3RGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlcixcclxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcclxuXHRcdFx0dGhpcy5wcm9taXNlU2VydmljZSxcclxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG59XHJcbiIsImltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBRdWVyeU1hdGNoZXJGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3RvcnlcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoKSB7XHJcblx0XHRyZXR1cm4gbmV3IENvbGxlY3Rpb25DYWNoZShcclxuXHRcdFx0dGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5XHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQge1xyXG5cdENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsIEl0ZW1FbnRyeVNlcnZpY2UsIEl0ZW1IYW5kbGVyLCBJdGVtUmVxdWVzdFNlcnZpY2UsIEtleVNlcnZpY2UsIFF1ZXJ5U2VydmljZVxyXG59IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBDb2x1bW5TZXRGYWN0b3J5LCBJdGVtRW50cnlGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlTGlicmFyeUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnkgfSBmcm9tICcuLi9tb2RlbHMvJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRW50cnlGYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwdWJsaWMgY29sbGVjdGlvbkVudHJ5U2VydmljZTogQ29sbGVjdGlvbkVudHJ5U2VydmljZSxcclxuXHRcdHB1YmxpYyBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxyXG5cdFx0cHVibGljIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0cHVibGljIGl0ZW1FbnRyeUZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3RvcnksXHJcblx0XHRwdWJsaWMgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcclxuXHRcdHB1YmxpYyBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXHJcblx0XHRwdWJsaWMgaXRlbVJlcXVlc3RTZXJ2aWNlOiBJdGVtUmVxdWVzdFNlcnZpY2UsXHJcblx0XHRwdWJsaWMga2V5U2VydmljZTogS2V5U2VydmljZSxcclxuXHRcdHB1YmxpYyBwcm9taXNlU2VydmljZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXHJcblx0XHRwdWJsaWMgcXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2VcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoaXRlbVR5cGU6IHN0cmluZywgb3B0aW9ucyk6IENvbGxlY3Rpb25FbnRyeSB7XHJcblx0XHRyZXR1cm4gbmV3IENvbGxlY3Rpb25FbnRyeShcclxuXHRcdFx0dGhpcyxcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlLCBDb2xsZWN0aW9uTWF0Y2hlciB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5XG5cdCkge1xuXHR9XG5cblx0Y29uc3RydWN0IChjb2xsZWN0aW9uQ2FjaGVzOiBDb2xsZWN0aW9uQ2FjaGVbXSwgdXBkYXRlSW5pdGlhbDogYm9vbGVhbiwgY2FsbE9uQWN0aXZhdGU6IGJvb2xlYW4pIHtcblx0XHRyZXR1cm4gbmV3IENvbGxlY3Rpb25NYXRjaGVyKFxuXHRcdFx0dGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5LFxuXHRcdFx0Y29sbGVjdGlvbkNhY2hlcyxcblx0XHRcdHVwZGF0ZUluaXRpYWwsXG5cdFx0XHRjYWxsT25BY3RpdmF0ZVxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UsIEtleVNlcnZpY2UsIExvY2FsQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksIEl0ZW1SZXNvdXJjZUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25FZGl0UmVzb3VyY2UsIENvbGxlY3Rpb25FbnRyeSwgQ29sbGVjdGlvblJlc291cmNlLCBDb2xsZWN0aW9uVmlld1Jlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwdWJsaWMgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwdWJsaWMgaXRlbVJlc291cmNlRmFjdG9yeTogSXRlbVJlc291cmNlRmFjdG9yeSxcclxuXHRcdHB1YmxpYyBjaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeTogQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXHJcblx0XHRwdWJsaWMga2V5U2VydmljZTogS2V5U2VydmljZSxcclxuXHRcdHB1YmxpYyBwcm9taXNlU2VydmljZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXHJcblx0XHRwdWJsaWMgY29sbGVjdGlvblJlc291cmNlU2VydmljZTogQ29sbGVjdGlvblJlc291cmNlU2VydmljZVxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIG9wdGlvbnMsIGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUpOiBDb2xsZWN0aW9uUmVzb3VyY2Uge1xyXG5cdFx0b3B0aW9ucyA9IHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTtcclxuXHJcblx0XHRpZiAob3B0aW9ucy5lZGl0SXRlbXMpXHJcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5oYXNJdGVtRWRpdFJlc291cmNlcyA9IHRydWU7XHJcblxyXG5cdFx0aWYgKG9wdGlvbnMuZWRpdENvbGxlY3Rpb24pIHtcclxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5Lmhhc0VkaXRSZXNvdXJjZXMgPSB0cnVlO1xyXG5cclxuXHRcdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uRWRpdFJlc291cmNlKHRoaXMsIGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucywgbG9jYWxDYWNoZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uVmlld1Jlc291cmNlKHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSwgY29sbGVjdGlvbkVudHJ5LCBvcHRpb25zLCBsb2NhbENhY2hlKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sdW1uRXhwYW5zaW9uLCBDb2x1bW5VdGlsIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IENvbHVtbkluZm9GYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQXBpUmVxdWVzdENvbHVtbnMsIEl0ZW1UeXBlLCBSZXNwb25zZUNvbHVtbk1hcCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2x1bW5FeHBhbnNpb25GYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGNvbHVtbkluZm9GYWN0b3J5OiBDb2x1bW5JbmZvRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXApIHtcclxuXHRcdHJldHVybiBuZXcgQ29sdW1uRXhwYW5zaW9uKFxyXG5cdFx0XHR0aGlzLmNvbHVtbkluZm9GYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNvbHVtblV0aWwsXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRyZXF1ZXN0Q29sdW1ucyxcclxuXHRcdFx0cmVzcG9uc2VDb2x1bW5zXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2x1bW5JbmZvIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IFJlc3BvbnNlQ29sdW1uIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbHVtbkluZm9GYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoKSB7fVxyXG5cclxuXHRjb25zdHJ1Y3QgKGFwaUNvbHVtbjogUmVzcG9uc2VDb2x1bW4sIHBhcmVudDogQ29sdW1uSW5mbykge1xyXG5cdFx0cmV0dXJuIG5ldyBDb2x1bW5JbmZvKGFwaUNvbHVtbiwgcGFyZW50KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sdW1uSGFuZGxlciwgQ29sdW1uU2V0LCBDb2x1bW5VdGlsIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IENvbHVtbkluZm9GYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQXBpUmVxdWVzdENvbHVtbnMsIEl0ZW1UeXBlLCBSZXNwb25zZUNvbHVtbk1hcCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2x1bW5TZXRGYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWwsXHJcblx0XHRwcml2YXRlIGNvbHVtbkluZm9GYWN0b3J5OiBDb2x1bW5JbmZvRmFjdG9yeVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0U3R1YiAoaXRlbVR5cGU6IEl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMpIHtcclxuXHRcdHJldHVybiBuZXcgQ29sdW1uU2V0KFxyXG5cdFx0XHR0aGlzLmNvbHVtbkhhbmRsZXIsXHJcblx0XHRcdHRoaXMuY29sdW1uVXRpbCxcclxuXHRcdFx0dGhpcy5jb2x1bW5JbmZvRmFjdG9yeSxcclxuXHRcdFx0dGhpcyxcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdHJlcXVlc3RDb2x1bW5zXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0IChcclxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyxcclxuXHRcdHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXAsXHJcblx0XHRlbmFibGVDYWNoaW5nPyxcclxuXHRcdGluY2x1ZGVJZENvbHVtbj9cclxuXHQpIHtcclxuXHRcdHJldHVybiB0aGlzLmNvbnN0cnVjdFN0dWIoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zKS5yZXNvbHZlKHJlc3BvbnNlQ29sdW1ucywgZW5hYmxlQ2FjaGluZywgaW5jbHVkZUlkQ29sdW1uKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlLCBDb2xsZWN0aW9uSGFuZGxlciwgQ3JlYXRlQ29tcGlsYXRpb24sIENyZWF0ZVJlcXVlc3QsIEtleVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LCBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ3JlYXRlUmVxdWVzdEZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnk6IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcclxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcclxuXHRcdHByaXZhdGUgcmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0IChcclxuXHRcdGNvbXBpbGF0aW9uOiBDcmVhdGVDb21waWxhdGlvbixcclxuXHRcdGxvY2FsQ29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGUsXHJcblx0XHRwYXJhbWV0ZXJNYXA6IENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAsXHJcblx0XHRicmVha3VwQnlQYXJlbnQ/OiBib29sZWFuXHJcblx0KTogQ3JlYXRlUmVxdWVzdCB7XHJcblx0XHRyZXR1cm4gbmV3IENyZWF0ZVJlcXVlc3QoXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIsXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXHJcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRcdGNvbXBpbGF0aW9uLFxyXG5cdFx0XHRsb2NhbENvbGxlY3Rpb25DYWNoZSxcclxuXHRcdFx0cGFyYW1ldGVyTWFwLFxyXG5cdFx0XHRicmVha3VwQnlQYXJlbnRcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEl0ZW1DYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBRdWVyeU1hdGNoZXJGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtQ2FjaGVGYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3RvcnlcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoKTogSXRlbUNhY2hlIHtcclxuXHRcdHJldHVybiBuZXcgSXRlbUNhY2hlKHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeSk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEFwaUZvcm1hdHRlciwgQ29sdW1uU2V0LCBJdGVtRW50cnlTZXJ2aWNlLCBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IENvbHVtblNldEZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBBdXRoSW50ZXJmYWNlLCBQcm9taXNlTGlicmFyeUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnksIFRlbXBsYXRlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgQXBpUmVxdWVzdENvbHVtbnMsIEVudHJ5UGFyZW50TnVsbCwgRmllbGRNYXAsIEl0ZW1JZCwgSXRlbUlkQ29udmVyc2lvbk1hcCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbUVudHJ5RmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHVibGljIGF1dGhJbnRlcmZhY2U6IEF1dGhJbnRlcmZhY2UsXHJcblx0XHRwdWJsaWMgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXHJcblx0XHRwdWJsaWMgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcclxuXHRcdHB1YmxpYyBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxyXG5cdFx0cHVibGljIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXHJcblx0XHRwdWJsaWMgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlXHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3RTdHViIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkLCBjb2x1bW5TZXRTdHViOiBDb2x1bW5TZXQpIHtcclxuXHRcdHJldHVybiBuZXcgSXRlbUVudHJ5KHRoaXMsIGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtblNldFN0dWIpO1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0TG9jYWxMaW5rZWQgKFxyXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0aXRlbUlkOiBJdGVtSWQsXHJcblx0XHRpbml0aWFsOiBGaWVsZE1hcCxcclxuXHRcdHBhcmVudDogRW50cnlQYXJlbnROdWxsLFxyXG5cdFx0Y29sdW1uU2V0OiBDb2x1bW5TZXQsXHJcblx0XHRjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwXHJcblx0KTogSXRlbUVudHJ5IHtcclxuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuY29uc3RydWN0U3R1YihpdGVtVHlwZSwgaXRlbUlkLCBjb2x1bW5TZXQpO1xyXG5cclxuXHRcdGl0ZW1FbnRyeS5wYXJlbnQgPSBwYXJlbnQ7XHJcblxyXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeS5zZXRMb2NhbEZpZWxkcyhpbml0aWFsLCBjb252ZXJzaW9uTWFwKTtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdExvY2FsIChcclxuXHRcdGl0ZW1JZDogSXRlbUlkLFxyXG5cdFx0dGVtcGxhdGU6IFRlbXBsYXRlLFxyXG5cdFx0bW9kaWZpZWQ6IEZpZWxkTWFwLFxyXG5cdFx0ZGVyaXZlZDogRmllbGRNYXAsXHJcblx0XHRwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCA9IG51bGwsXHJcblx0XHRjb2x1bW5TZXQ6IENvbHVtblNldCA9IHRlbXBsYXRlLmNvbHVtbnMsXHJcblx0XHRjb252ZXJzaW9uTWFwP1xyXG5cdCk6IEl0ZW1FbnRyeSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IHRlbXBsYXRlLmNvbHVtbnMuaXRlbVR5cGU7XHJcblxyXG5cdFx0aWYgKGNvbnZlcnNpb25NYXAgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0Y29udmVyc2lvbk1hcCA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5jcmVhdGVMb2NhbENvbnZlcnNpb25NYXAoaXRlbVR5cGUsIGl0ZW1JZCwgdHJ1ZSwgdGVtcGxhdGUucmVzcG9uc2UpO1xyXG5cclxuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuY29uc3RydWN0U3R1YihpdGVtVHlwZSwgaXRlbUlkLCBjb2x1bW5TZXQpO1xyXG5cclxuXHRcdGl0ZW1FbnRyeS5wYXJlbnQgPSBwYXJlbnQ7XHJcblxyXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeVxyXG5cdFx0XHQuc2V0TG9jYWxGaWVsZHModGVtcGxhdGUuZmllbGRzLCBjb252ZXJzaW9uTWFwLCB0ZW1wbGF0ZS5jb2x1bW5zKVxyXG5cdFx0XHQuc2V0TW9kaWZpZWQobW9kaWZpZWQpXHJcblx0XHRcdC5zZXREZXJpdmVkKGRlcml2ZWQpO1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0RGVmZXJyZWQgKFxyXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0aXRlbUlkOiBJdGVtSWQsXHJcblx0XHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMsXHJcblx0XHRkZWZlclJlcXVlc3Q6IGJvb2xlYW5cclxuXHQpOiBJdGVtRW50cnkge1xyXG5cdFx0Y29uc3QgaXRlbUVudHJ5U3R1YiA9IHRoaXMuY29uc3RydWN0U3R1YihcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdGl0ZW1JZCxcclxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdFN0dWIoXHJcblx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0cmVxdWVzdENvbHVtbnNcclxuXHRcdFx0KVxyXG5cdFx0KTtcclxuXHJcblx0XHRpdGVtRW50cnlTdHViLmRlZmVyKGRlZmVyUmVxdWVzdCk7XHJcblxyXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeVN0dWI7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKFxyXG5cdFx0aXRlbUlkOiBJdGVtSWQsXHJcblx0XHRpbml0aWFsOiBGaWVsZE1hcCxcclxuXHRcdGRlcml2ZWQ6IEZpZWxkTWFwLFxyXG5cdFx0Y29sdW1uSW5mbzogQ29sdW1uU2V0XHJcblx0KTogSXRlbUVudHJ5IHtcclxuXHRcdHJldHVybiB0aGlzLmNvbnN0cnVjdFN0dWIoXHJcblx0XHRcdGNvbHVtbkluZm8uaXRlbVR5cGUsXHJcblx0XHRcdGl0ZW1JZCwgLy8gaW5pdGlhbC5pZCAod2hlbiBpbml0aWFsIGlzIG5vdCBhIHRlbXBsYXRlKVxyXG5cdFx0XHRjb2x1bW5JbmZvLFxyXG5cdFx0KS5zZXRGaWVsZHMoXHJcblx0XHRcdGluaXRpYWwsIC8vIGNhbiBhbHNvIGJlIGEgdGVtcGxhdGVcclxuXHRcdFx0ZGVyaXZlZCxcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEFwaUZvcm1hdHRlciwgQ2hhbmdlc1Byb2Nlc3NvciwgSXRlbVJlc291cmNlU2VydmljZSwgTG9ja1NlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlTGlicmFyeUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBFZGl0UmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlLCBWaWV3UmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBJdGVtT3B0aW9ucyB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtUmVzb3VyY2VGYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwdWJsaWMgaXRlbVJlc291cmNlU2VydmljZTogSXRlbVJlc291cmNlU2VydmljZSxcclxuXHRcdHB1YmxpYyBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcclxuXHRcdHB1YmxpYyBsb2NrU2VydmljZTogTG9ja1NlcnZpY2UsXHJcblx0XHRwdWJsaWMgY2hhbmdlc1Byb2Nlc3NvcjogQ2hhbmdlc1Byb2Nlc3NvcixcclxuXHRcdHB1YmxpYyBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHB1YmxpYyBwcm9taXNlU2VydmljZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2VcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdGdldENvbnN0cnVjdG9yIChvcHRpb25zOiBJdGVtT3B0aW9ucyk6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gSXRlbVJlc291cmNlIHtcclxuXHRcdG9wdGlvbnMgPSB0aGlzLml0ZW1SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyk7XHJcblxyXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeSA9PiB7XHJcblx0XHRcdHJldHVybiBvcHRpb25zLmVkaXQgP1xyXG5cdFx0XHRcdG5ldyBFZGl0UmVzb3VyY2UodGhpcywgaXRlbUVudHJ5LCBvcHRpb25zKSA6XHJcblx0XHRcdFx0bmV3IFZpZXdSZXNvdXJjZShpdGVtRW50cnksIG9wdGlvbnMpO1xyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIG9wdGlvbnM6IEl0ZW1PcHRpb25zLCBpc05ldz86IGJvb2xlYW4pOiBJdGVtUmVzb3VyY2Uge1xyXG5cdFx0b3B0aW9ucyA9IHRoaXMuaXRlbVJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTtcclxuXHJcblx0XHRyZXR1cm4gb3B0aW9ucy5lZGl0ID9cclxuXHRcdFx0bmV3IEVkaXRSZXNvdXJjZSh0aGlzLCBpdGVtRW50cnksIG9wdGlvbnMsIGlzTmV3KSA6XHJcblx0XHRcdG5ldyBWaWV3UmVzb3VyY2UoaXRlbUVudHJ5LCBvcHRpb25zLCBpc05ldyk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7XHJcblx0SXRlbVJlc291cmNlU2VydmljZSxcclxuXHRMb2NhbENhY2hlLFxyXG5cdExvY2tTZXJ2aWNlXHJcbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7XHJcblx0Q2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXHJcblx0Q29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcclxuXHRDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxyXG5cdEl0ZW1DYWNoZUZhY3RvcnksXHJcblx0SXRlbVJlc291cmNlRmFjdG9yeVxyXG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMb2NhbENhY2hlRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgbG9ja1NlcnZpY2U6IExvY2tTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeTogQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXHJcblx0XHRwcml2YXRlIGl0ZW1DYWNoZUZhY3Rvcnk6IEl0ZW1DYWNoZUZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnk6IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXHJcblx0XHRwcml2YXRlIGl0ZW1SZXNvdXJjZVNlcnZpY2U6IEl0ZW1SZXNvdXJjZVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZVxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoaWQ/OiBzdHJpbmcpIHtcclxuXHRcdHJldHVybiBuZXcgTG9jYWxDYWNoZShcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIsXHJcblx0XHRcdHRoaXMubG9ja1NlcnZpY2UsXHJcblx0XHRcdHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLml0ZW1DYWNoZUZhY3RvcnksXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5pdGVtUmVzb3VyY2VTZXJ2aWNlLFxyXG5cdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlLFxyXG5cdFx0XHRpZFxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlLCBJdGVtQ2FjaGUsIE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbiB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdCAocm9vdEl0ZW06IEl0ZW1FbnRyeSwgc2luZ2xlSXRlbUNhY2hlOiBJdGVtQ2FjaGUsIGNvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlKSB7XHJcblx0XHRyZXR1cm4gbmV3IE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbihyb290SXRlbSwgc2luZ2xlSXRlbUNhY2hlLCBjb2xsZWN0aW9uQ2FjaGUpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBBcGlGb3JtYXR0ZXIsIFF1ZXJ5TWF0Y2hlciB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBFbnRyeVBhcmVudE51bGwsIEZpZWxkTWFwLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVyeU1hdGNoZXJGYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyXHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0IChpdGVtVHlwZTogSXRlbVR5cGUsIGZpZWxkczogRmllbGRNYXAsIHBhcmVudDogRW50cnlQYXJlbnROdWxsKTogUXVlcnlNYXRjaGVyIHtcclxuXHRcdHJldHVybiBuZXcgUXVlcnlNYXRjaGVyKFxyXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdGZpZWxkcyxcclxuXHRcdFx0cGFyZW50XHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBRdWVyeVBhcnNlciB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXJ5UGFyc2VyRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKCkge1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0IChxdWVyeSwgcGFyYW1ldGVycz8pOiBRdWVyeVBhcnNlciB7XHJcblx0XHRyZXR1cm4gbmV3IFF1ZXJ5UGFyc2VyKHF1ZXJ5LCBwYXJhbWV0ZXJzKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sdW1uVXRpbCwgUmVxdWVzdENvbHVtbkV4cGFuc2lvbiB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWxcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoKSB7XHJcblx0XHRyZXR1cm4gbmV3IFJlcXVlc3RDb2x1bW5FeHBhbnNpb24oXHJcblx0XHRcdHRoaXMuY29sdW1uVXRpbFxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sdW1uVXRpbCB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBDb2x1bW5TZXRGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBBcGlSZXNwb25zZSwgSXRlbVR5cGUsIFJlc3BvbnNlQ29sdW1uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHVibGljIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXHJcblx0XHRwdWJsaWMgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxyXG5cdCkge31cclxuXHJcblx0Y29uc3RydWN0IChpdGVtVHlwZTogSXRlbVR5cGUsIHJlc3BvbnNlOiBBcGlSZXNwb25zZSwgYWRkaXRpb25hbENvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwKSB7XHJcblx0XHRyZXR1cm4gbmV3IFRlbXBsYXRlKHRoaXMsIGl0ZW1UeXBlLCByZXNwb25zZSwgYWRkaXRpb25hbENvbHVtbnMpO1xyXG5cdH1cclxufVxyXG4iLCJleHBvcnQgKiBmcm9tICcuL0FwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQmF0Y2hTdGF0dXNGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9DaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9DaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkVudHJ5RmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5FeHBhbnNpb25GYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5JbmZvRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uU2V0RmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ3JlYXRlUmVxdWVzdEZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1DYWNoZUZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1FbnRyeUZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1SZXNvdXJjZUZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0xvY2FsQ2FjaGVGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9Nb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9RdWVyeU1hdGNoZXJGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9RdWVyeVBhcnNlckZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL1JlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9UZW1wbGF0ZUZhY3RvcnknO1xyXG4iLCJpbXBvcnQge1xyXG5cdEFwaUZvcm1hdHRlcixcclxuXHRBcGlSZXF1ZXN0U2VydmljZSxcclxuXHRDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxyXG5cdENvbGxlY3Rpb25IYW5kbGVyLFxyXG5cdENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UsXHJcblx0Q29sdW1uQ2FjaGUsXHJcblx0Q29sdW1uSGFuZGxlcixcclxuXHRDb2x1bW5VdGlsLFxyXG5cdEl0ZW1BZG1pbmlzdHJhdG9yLFxyXG5cdEl0ZW1FbnRyeVNlcnZpY2UsXHJcblx0SXRlbUhhbmRsZXIsXHJcblx0SXRlbVJlcXVlc3RTZXJ2aWNlLFxyXG5cdEl0ZW1SZXNvdXJjZVNlcnZpY2UsXHJcblx0S2V5U2VydmljZSxcclxuXHRMb2NrU2VydmljZSxcclxuXHRRdWVyeVNlcnZpY2UsXHJcblx0U29ja2V0TWVzc2FnZUhhbmRsZXJcclxufSBmcm9tICcuL2NsYXNzZXMnO1xyXG5pbXBvcnQge1xyXG5cdEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSxcclxuXHRCYXRjaFN0YXR1c0ZhY3RvcnksXHJcblx0Q2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcclxuXHRDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcclxuXHRDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxyXG5cdENvbGxlY3Rpb25FbnRyeUZhY3RvcnksXHJcblx0Q29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxyXG5cdENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXHJcblx0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRDb2x1bW5JbmZvRmFjdG9yeSxcclxuXHRDb2x1bW5TZXRGYWN0b3J5LFxyXG5cdENyZWF0ZVJlcXVlc3RGYWN0b3J5LFxyXG5cdEl0ZW1DYWNoZUZhY3RvcnksXHJcblx0SXRlbUVudHJ5RmFjdG9yeSxcclxuXHRJdGVtUmVzb3VyY2VGYWN0b3J5LFxyXG5cdExvY2FsQ2FjaGVGYWN0b3J5LFxyXG5cdE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXHJcblx0UXVlcnlNYXRjaGVyRmFjdG9yeSxcclxuXHRRdWVyeVBhcnNlckZhY3RvcnksXHJcblx0UmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksIFRlbXBsYXRlRmFjdG9yeVxyXG59IGZyb20gJy4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHtcclxuXHRBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcclxuXHRBdXRoSW50ZXJmYWNlLFxyXG5cdEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRMb2NhbENhY2hlTWFuYWdlckludGVyZmFjZSxcclxuXHRQcm9taXNlTGlicmFyeUludGVyZmFjZVxyXG59IGZyb20gJy4vaW50ZXJmYWNlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgUm1Db3JlIHtcclxuXHR2ZXJzaW9uOiBzdHJpbmc7XHJcblx0bm9vcCA9IG5vb3A7XHJcblxyXG5cdGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyO1xyXG5cdGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZTtcclxuXHRhcGlSZXNwb25zZVByb2Nlc3NvckZhY3Rvcnk6IEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeTtcclxuXHRiYXRjaFN0YXR1c0ZhY3Rvcnk6IEJhdGNoU3RhdHVzRmFjdG9yeTtcclxuXHRjaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5OiBDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5O1xyXG5cdGNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5OiBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeTtcclxuXHRjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5O1xyXG5cdGNvbGxlY3Rpb25FbnRyeUZhY3Rvcnk6IENvbGxlY3Rpb25FbnRyeUZhY3Rvcnk7XHJcblx0Y29sbGVjdGlvbkVudHJ5U2VydmljZTogQ29sbGVjdGlvbkVudHJ5U2VydmljZTtcclxuXHRjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXI7XHJcblx0Y29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5OiBDb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnk7XHJcblx0Y29sbGVjdGlvblJlc291cmNlRmFjdG9yeTogQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeTtcclxuXHRjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlO1xyXG5cdGNvbHVtbkNhY2hlOiBDb2x1bW5DYWNoZTtcclxuXHRjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5O1xyXG5cdGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXI7XHJcblx0Y29sdW1uSW5mb0ZhY3Rvcnk6IENvbHVtbkluZm9GYWN0b3J5O1xyXG5cdGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3Rvcnk7XHJcblx0Y29sdW1uVXRpbDogQ29sdW1uVXRpbDtcclxuXHRjcmVhdGVSZXF1ZXN0RmFjdG9yeTogQ3JlYXRlUmVxdWVzdEZhY3Rvcnk7XHJcblx0aXRlbUFkbWluaXN0cmF0b3I6IEl0ZW1BZG1pbmlzdHJhdG9yO1xyXG5cdGl0ZW1DYWNoZUZhY3Rvcnk6IEl0ZW1DYWNoZUZhY3Rvcnk7XHJcblx0aXRlbUVudHJ5RmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeTtcclxuXHRpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlO1xyXG5cdGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcjtcclxuXHRpdGVtUmVxdWVzdFNlcnZpY2U6IEl0ZW1SZXF1ZXN0U2VydmljZTtcclxuXHRpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5O1xyXG5cdGl0ZW1SZXNvdXJjZVNlcnZpY2U6IEl0ZW1SZXNvdXJjZVNlcnZpY2U7XHJcblx0a2V5U2VydmljZTogS2V5U2VydmljZTtcclxuXHRsb2NhbENhY2hlRmFjdG9yeTogTG9jYWxDYWNoZUZhY3Rvcnk7XHJcblx0bG9ja1NlcnZpY2U6IExvY2tTZXJ2aWNlO1xyXG5cdG1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnk6IE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnk7XHJcblx0cXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeTtcclxuXHRxdWVyeVBhcnNlckZhY3Rvcnk6IFF1ZXJ5UGFyc2VyRmFjdG9yeTtcclxuXHRxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZTtcclxuXHRyZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk7XHJcblx0c29ja2V0TWVzc2FnZUhhbmRsZXI6IFNvY2tldE1lc3NhZ2VIYW5kbGVyO1xyXG5cdHRlbXBsYXRlRmFjdG9yeTogVGVtcGxhdGVGYWN0b3J5O1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRleHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcclxuXHRcdGxvY2FsQ2FjaGVNYW5hZ2VyOiBMb2NhbENhY2hlTWFuYWdlckludGVyZmFjZSxcclxuXHRcdGF1dGhJbnRlcmZhY2U6IEF1dGhJbnRlcmZhY2UsXHJcblx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2U6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHByb21pc2VMaWJyYXJ5SW50ZXJmYWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZVxyXG5cdCkge1xyXG5cdFx0dGhpcy52ZXJzaW9uID0gJzEuNC4wJztcclxuXHJcblx0XHR0aGlzLmFwaUZvcm1hdHRlciA9IG5ldyBBcGlGb3JtYXR0ZXIoKTtcclxuXHRcdHRoaXMua2V5U2VydmljZSA9IG5ldyBLZXlTZXJ2aWNlKCk7XHJcblx0XHR0aGlzLnF1ZXJ5U2VydmljZSA9IG5ldyBRdWVyeVNlcnZpY2UoKTtcclxuXHRcdHRoaXMuY29sdW1uVXRpbCA9IG5ldyBDb2x1bW5VdGlsKCk7XHJcblxyXG5cdFx0dGhpcy5hcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnkgPSBuZXcgQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5KHRoaXMuYXBpRm9ybWF0dGVyKTtcclxuXHJcblx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlID0gbmV3IEFwaVJlcXVlc3RTZXJ2aWNlKGV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UsIHRoaXMuYXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5KTtcclxuXHJcblx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UgPSBuZXcgSXRlbUVudHJ5U2VydmljZShhdXRoSW50ZXJmYWNlLCB0aGlzLmtleVNlcnZpY2UpO1xyXG5cdFx0dGhpcy5pdGVtUmVzb3VyY2VTZXJ2aWNlID0gbmV3IEl0ZW1SZXNvdXJjZVNlcnZpY2UoKTtcclxuXHJcblx0XHR0aGlzLmxvY2tTZXJ2aWNlID0gbmV3IExvY2tTZXJ2aWNlKFxyXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxyXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRcdHRoaXMua2V5U2VydmljZSxcclxuXHRcdFx0cHJvbWlzZUxpYnJhcnlJbnRlcmZhY2VcclxuXHRcdCk7XHJcblx0XHR0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkgPSBuZXcgUXVlcnlNYXRjaGVyRmFjdG9yeSh0aGlzLmFwaUZvcm1hdHRlcik7XHJcblx0XHR0aGlzLml0ZW1DYWNoZUZhY3RvcnkgPSBuZXcgSXRlbUNhY2hlRmFjdG9yeSh0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkpO1xyXG5cdFx0dGhpcy5iYXRjaFN0YXR1c0ZhY3RvcnkgPSBuZXcgQmF0Y2hTdGF0dXNGYWN0b3J5KHByb21pc2VMaWJyYXJ5SW50ZXJmYWNlKTtcclxuXHJcblx0XHR0aGlzLmNvbHVtbkNhY2hlID0gbmV3IENvbHVtbkNhY2hlKHRoaXMuY29sdW1uVXRpbCk7XHJcblx0XHR0aGlzLmNvbHVtbkhhbmRsZXIgPSBuZXcgQ29sdW1uSGFuZGxlcihcclxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcclxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0XHRwcm9taXNlTGlicmFyeUludGVyZmFjZSxcclxuXHRcdFx0dGhpcy5jb2x1bW5DYWNoZSxcclxuXHRcdFx0dGhpcy5jb2x1bW5VdGlsXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuY29sdW1uSW5mb0ZhY3RvcnkgPSBuZXcgQ29sdW1uSW5mb0ZhY3RvcnkoKTtcclxuXHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSA9IG5ldyBDb2x1bW5TZXRGYWN0b3J5KHRoaXMuY29sdW1uSGFuZGxlciwgdGhpcy5jb2x1bW5VdGlsLCB0aGlzLmNvbHVtbkluZm9GYWN0b3J5KTtcclxuXHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSA9IG5ldyBDb2x1bW5FeHBhbnNpb25GYWN0b3J5KHRoaXMuY29sdW1uSW5mb0ZhY3RvcnksIHRoaXMuY29sdW1uVXRpbCk7XHJcblxyXG5cdFx0dGhpcy50ZW1wbGF0ZUZhY3RvcnkgPSBuZXcgVGVtcGxhdGVGYWN0b3J5KHRoaXMuY29sdW1uU2V0RmFjdG9yeSwgdGhpcy5jb2x1bW5VdGlsKTtcclxuXHJcblx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnkgPSBuZXcgSXRlbUVudHJ5RmFjdG9yeShcclxuXHRcdFx0YXV0aEludGVyZmFjZSxcclxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXHJcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcclxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLFxyXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXHJcblx0XHRcdHByb21pc2VMaWJyYXJ5SW50ZXJmYWNlXHJcblx0XHQpO1xyXG5cdFx0dGhpcy5pdGVtSGFuZGxlciA9IG5ldyBJdGVtSGFuZGxlcihcclxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXHJcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXHJcblx0XHRcdHRoaXMuYmF0Y2hTdGF0dXNGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRcdHRoaXMuY29sdW1uSGFuZGxlcixcclxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNvbHVtblV0aWwsXHJcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdFx0dGhpcy5pdGVtQ2FjaGVGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnksXHJcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcclxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxyXG5cdFx0XHRwcm9taXNlTGlicmFyeUludGVyZmFjZSxcclxuXHRcdFx0dGhpcy50ZW1wbGF0ZUZhY3RvcnlcclxuXHRcdCk7XHJcblx0XHR0aGlzLml0ZW1SZXF1ZXN0U2VydmljZSA9IG5ldyBJdGVtUmVxdWVzdFNlcnZpY2UodGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcclxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLFxyXG5cdFx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcclxuXHRcdFx0dGhpcy5pdGVtRW50cnlGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZSxcclxuXHRcdFx0cHJvbWlzZUxpYnJhcnlJbnRlcmZhY2VcclxuXHRcdCk7XHJcblxyXG5cdFx0dGhpcy5xdWVyeVBhcnNlckZhY3RvcnkgPSBuZXcgUXVlcnlQYXJzZXJGYWN0b3J5KCk7XHJcblx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UgPSBuZXcgQ29sbGVjdGlvbkVudHJ5U2VydmljZSh0aGlzLnF1ZXJ5UGFyc2VyRmFjdG9yeSwgdGhpcy5xdWVyeVNlcnZpY2UpO1xyXG5cdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlID0gbmV3IENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UoKTtcclxuXHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5RmFjdG9yeSA9IG5ldyBDb2xsZWN0aW9uRW50cnlGYWN0b3J5KFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXHJcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcclxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnksXHJcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcclxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcclxuXHRcdFx0dGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UsXHJcblx0XHRcdHRoaXMua2V5U2VydmljZSxcclxuXHRcdFx0cHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXHJcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlXHJcblx0XHQpO1xyXG5cdFx0dGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5ID0gbmV3IENvbGxlY3Rpb25DYWNoZUZhY3RvcnkodGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5KTtcclxuXHRcdHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5ID0gbmV3IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSh0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkpO1xyXG5cdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlciA9IG5ldyBDb2xsZWN0aW9uSGFuZGxlcihcclxuXHRcdFx0dGhpcy5iYXRjaFN0YXR1c0ZhY3RvcnksXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNvbHVtbkhhbmRsZXIsXHJcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcclxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLFxyXG5cdFx0XHR0aGlzLml0ZW1SZXF1ZXN0U2VydmljZSxcclxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxyXG5cdFx0XHRwcm9taXNlTGlicmFyeUludGVyZmFjZSxcclxuXHRcdFx0dGhpcy5xdWVyeVBhcnNlckZhY3RvcnksXHJcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkgPSBuZXcgUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkodGhpcy5jb2x1bW5VdGlsKTtcclxuXHRcdHRoaXMuY3JlYXRlUmVxdWVzdEZhY3RvcnkgPSBuZXcgQ3JlYXRlUmVxdWVzdEZhY3RvcnkoXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIsXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXHJcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnlcclxuXHRcdCk7XHJcblx0XHR0aGlzLmNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkgPSBuZXcgQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSh0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnksIHRoaXMua2V5U2VydmljZSk7XHJcblx0XHR0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5ID0gbmV3IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5KFxyXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcclxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcclxuXHRcdFx0dGhpcy5jaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIsXHJcblx0XHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5jcmVhdGVSZXF1ZXN0RmFjdG9yeSxcclxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLFxyXG5cdFx0XHRwcm9taXNlTGlicmFyeUludGVyZmFjZSxcclxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxyXG5cdFx0KTtcclxuXHRcdHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSA9IG5ldyBJdGVtUmVzb3VyY2VGYWN0b3J5KHRoaXMuaXRlbVJlc291cmNlU2VydmljZSxcclxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXHJcblx0XHRcdHRoaXMubG9ja1NlcnZpY2UsXHJcblx0XHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkuY29uc3RydWN0KCksXHJcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdFx0cHJvbWlzZUxpYnJhcnlJbnRlcmZhY2VcclxuXHRcdCk7XHJcblx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkgPSBuZXcgQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeShcclxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0XHR0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnksXHJcblx0XHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXHJcblx0XHRcdHRoaXMua2V5U2VydmljZSxcclxuXHRcdFx0cHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZVxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLmxvY2FsQ2FjaGVGYWN0b3J5ID0gbmV3IExvY2FsQ2FjaGVGYWN0b3J5KGVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdFx0dGhpcy5sb2NrU2VydmljZSxcclxuXHRcdFx0dGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnksXHJcblx0XHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXHJcblx0XHRcdHRoaXMuaXRlbUNhY2hlRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLml0ZW1SZXNvdXJjZVNlcnZpY2UsXHJcblx0XHRcdHByb21pc2VMaWJyYXJ5SW50ZXJmYWNlXHJcblx0XHQpO1xyXG5cdFx0dGhpcy5tb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5ID0gbmV3IE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkoKTtcclxuXHJcblx0XHR0aGlzLml0ZW1BZG1pbmlzdHJhdG9yID0gbmV3IEl0ZW1BZG1pbmlzdHJhdG9yKFxyXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxyXG5cdFx0XHRhdXRoSW50ZXJmYWNlLFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIsXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UsXHJcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcclxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXHJcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXHJcblx0XHRcdHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLFxyXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXHJcblx0XHRcdHRoaXMubG9jYWxDYWNoZUZhY3RvcnksXHJcblx0XHRcdGxvY2FsQ2FjaGVNYW5hZ2VyLFxyXG5cdFx0XHR0aGlzLm1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXHJcblx0XHRcdHByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxyXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZVxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLnNvY2tldE1lc3NhZ2VIYW5kbGVyID0gbmV3IFNvY2tldE1lc3NhZ2VIYW5kbGVyKHByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxyXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxyXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLFxyXG5cdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnksXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIsXHJcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcclxuXHRcdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcclxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG5vb3AgKCkge1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHkgKHZhbHVlKSB7XHJcblx0cmV0dXJuIHZhbHVlO1xyXG59XHJcbiIsImV4cG9ydCAqIGZyb20gJy4vY29yZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RhbnRzJztcclxuZXhwb3J0ICogZnJvbSAnLi9tb2RlbHMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2ludGVyZmFjZXMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2NsYXNzZXMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2ZhY3Rvcmllcyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9
|