@sapui5/sap.fe.core 1.92.0 → 1.93.3
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/package.json +2 -3
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AnnotationHelper.js +2 -2
- package/src/sap/fe/core/AppComponent.js +21 -1
- package/src/sap/fe/core/CommonUtils.js +130 -48
- package/src/sap/fe/core/ExtensionAPI.js +238 -226
- package/src/sap/fe/core/PageController.js +5 -2
- package/src/sap/fe/core/TemplateComponent.js +1 -0
- package/src/sap/fe/core/TransactionHelper.js +35 -8
- package/src/sap/fe/core/actions/draft.js +1 -1
- package/src/sap/fe/core/actions/messageHandling.js +18 -6
- package/src/sap/fe/core/actions/operations.js +17 -41
- package/src/sap/fe/core/controllerextensions/EditFlow.js +127 -43
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +11 -11
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +417 -0
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +399 -0
- package/src/sap/fe/core/controllerextensions/PageReady.js +2 -3
- package/src/sap/fe/core/controllerextensions/PageReady.ts +1 -1
- package/src/sap/fe/core/controllerextensions/Share.js +102 -66
- package/src/sap/fe/core/controllerextensions/SideEffects.js +60 -14
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +53 -12
- package/src/sap/fe/core/controllerextensions/ViewState.js +18 -18
- package/src/sap/fe/core/controls/filterbar/FilterContainer.js +13 -0
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +68 -2
- package/src/sap/fe/core/converters/ConverterContext.js +15 -1
- package/src/sap/fe/core/converters/ConverterContext.ts +11 -0
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +14 -2
- package/src/sap/fe/core/converters/ManifestWrapper.js +14 -14
- package/src/sap/fe/core/converters/ManifestWrapper.ts +13 -12
- package/src/sap/fe/core/converters/MetaModelConverter.js +32 -2
- package/src/sap/fe/core/converters/MetaModelConverter.ts +39 -2
- package/src/sap/fe/core/converters/annotations/DataField.js +10 -6
- package/src/sap/fe/core/converters/annotations/DataField.ts +9 -5
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +14 -4
- package/src/sap/fe/core/converters/controls/Common/Action.js +25 -15
- package/src/sap/fe/core/converters/controls/Common/Action.ts +33 -19
- package/src/sap/fe/core/converters/controls/Common/Criticality.js +50 -0
- package/src/sap/fe/core/converters/controls/Common/Criticality.ts +33 -0
- package/src/sap/fe/core/converters/controls/Common/Form.js +2 -3
- package/src/sap/fe/core/converters/controls/Common/Form.ts +1 -2
- package/src/sap/fe/core/converters/controls/Common/KPI.js +181 -0
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +220 -0
- package/src/sap/fe/core/converters/controls/Common/Table.js +121 -59
- package/src/sap/fe/core/converters/controls/Common/Table.ts +130 -62
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +5 -4
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +9 -3
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +62 -7
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +58 -6
- package/src/sap/fe/core/converters/helpers/Aggregation.js +86 -11
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +79 -8
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +44 -2
- package/src/sap/fe/core/converters/helpers/BindingHelper.ts +43 -2
- package/src/sap/fe/core/converters/helpers/ID.js +3 -1
- package/src/sap/fe/core/converters/helpers/ID.ts +1 -0
- package/src/sap/fe/core/converters/helpers/IssueManager.js +8 -2
- package/src/sap/fe/core/converters/helpers/IssueManager.ts +7 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +93 -0
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +92 -0
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +102 -23
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +111 -17
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +44 -5
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +39 -2
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +41 -30
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +47 -30
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +4 -1
- package/src/sap/fe/core/formatters/CriticalityFormatter.js +77 -0
- package/src/sap/fe/core/formatters/CriticalityFormatter.ts +58 -0
- package/src/sap/fe/core/formatters/KPIFormatter.js +103 -0
- package/src/sap/fe/core/formatters/KPIFormatter.ts +88 -0
- package/src/sap/fe/core/fpm/manifest.json +1 -3
- package/src/sap/fe/core/helpers/BindingExpression.js +161 -97
- package/src/sap/fe/core/helpers/BindingExpression.ts +188 -117
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/messagebundle.properties +45 -1
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +3 -1
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +3 -0
- package/src/sap/fe/core/services/RoutingServiceFactory.js +30 -8
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +16 -4
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +13 -3
- package/src/sap/fe/core/templating/DataModelPathHelper.js +7 -3
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +7 -2
- package/src/sap/fe/core/templating/UIFormatters.js +1 -5
- package/src/sap/fe/core/templating/UIFormatters.ts +0 -3
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["../ManifestSettings", "../controls/Common/DataVisualization", "../helpers/ID", "sap/fe/core/converters/controls/Common/Table", "sap/fe/core/converters/controls/Common/Action", "sap/fe/core/converters/helpers/ConfigurableObject", "sap/fe/core/converters/helpers/Key", "sap/fe/core/helpers/BindingExpression", "sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/templating/FilterTemplating", "sap/fe/core/templating/DataModelPathHelper", "../helpers/Aggregation"], function (ManifestSettings, DataVisualization, ID, Table, Action, ConfigurableObject, Key, BindingExpression, IssueManager, FilterTemplating, DataModelPathHelper, Aggregation) {
|
|
5
|
+
sap.ui.define(["../ManifestSettings", "../controls/Common/DataVisualization", "../helpers/ID", "sap/fe/core/converters/controls/Common/Table", "sap/fe/core/converters/controls/Common/Action", "sap/fe/core/converters/helpers/ConfigurableObject", "sap/fe/core/converters/helpers/Key", "sap/fe/core/helpers/BindingExpression", "sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/templating/FilterTemplating", "sap/fe/core/templating/DataModelPathHelper", "../helpers/Aggregation", "../controls/Common/KPI"], function (ManifestSettings, DataVisualization, ID, Table, Action, ConfigurableObject, Key, BindingExpression, IssueManager, FilterTemplating, DataModelPathHelper, Aggregation, KPI) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
9
|
+
var getKPIDefinitions = KPI.getKPIDefinitions;
|
|
9
10
|
var AggregationHelper = Aggregation.AggregationHelper;
|
|
10
11
|
var checkFilterExpressionRestrictions = DataModelPathHelper.checkFilterExpressionRestrictions;
|
|
11
12
|
var getIsRequired = FilterTemplating.getIsRequired;
|
|
@@ -459,7 +460,7 @@ sap.ui.define(["../ManifestSettings", "../controls/Common/DataVisualization", ".
|
|
|
459
460
|
return;
|
|
460
461
|
} else {
|
|
461
462
|
if (aVisualizations && aVisualizations.length) {
|
|
462
|
-
var _chartAnnotation3, _chartAnnotation3$$ta, _chartAnnotation3$$ta2, _outParameter, _outParameter$LocalDa;
|
|
463
|
+
var _chartAnnotation3, _chartAnnotation3$$ta, _chartAnnotation3$$ta2, _outParameter, _outParameter$LocalDa, _collectionPathConver4, _entitySetAnnotations, _entitySetAnnotations2, _visualFilter$require;
|
|
463
464
|
|
|
464
465
|
visualFilter.chartAnnotation = chartAnnotation ? collectionPathConverterContext === null || collectionPathConverterContext === void 0 ? void 0 : collectionPathConverterContext.getAbsoluteAnnotationPath(chartAnnotation.fullyQualifiedName + "/$AnnotationPath/") : undefined;
|
|
465
466
|
visualFilter.presentationAnnotation = pvAnnotation ? collectionPathConverterContext === null || collectionPathConverterContext === void 0 ? void 0 : collectionPathConverterContext.getAbsoluteAnnotationPath(pvAnnotation.fullyQualifiedName + "/") : undefined;
|
|
@@ -475,13 +476,50 @@ sap.ui.define(["../ManifestSettings", "../controls/Common/DataVisualization", ".
|
|
|
475
476
|
var bIsMainEntitySetSingleSelection = checkFilterExpressionRestrictions(converterContext.getConverterContextFor(converterContext.getAbsoluteAnnotationPath(sPropertyPath)).getDataModelObjectPath(), ["SingleValue"]);
|
|
476
477
|
visualFilter.multipleSelectionAllowed = compileBinding(!bIsMainEntitySetSingleSelection.value);
|
|
477
478
|
visualFilter.required = getIsRequired(converterContext, sPropertyPath);
|
|
479
|
+
var svAnnotation;
|
|
478
480
|
|
|
479
481
|
if (svQualifier) {
|
|
480
482
|
var _collectionPathConver3;
|
|
481
483
|
|
|
482
|
-
|
|
484
|
+
svAnnotation = collectionPathConverterContext === null || collectionPathConverterContext === void 0 ? void 0 : (_collectionPathConver3 = collectionPathConverterContext.getEntityTypeAnnotation("@UI.SelectionVariant#" + svQualifier)) === null || _collectionPathConver3 === void 0 ? void 0 : _collectionPathConver3.annotation;
|
|
483
485
|
visualFilter.selectionVariantAnnotation = svAnnotation ? collectionPathConverterContext === null || collectionPathConverterContext === void 0 ? void 0 : collectionPathConverterContext.getAbsoluteAnnotationPath(svAnnotation.fullyQualifiedName + "/") : undefined;
|
|
484
486
|
}
|
|
487
|
+
|
|
488
|
+
var entitySetAnnotations = (_collectionPathConver4 = collectionPathConverterContext.getEntitySet()) === null || _collectionPathConver4 === void 0 ? void 0 : _collectionPathConver4.annotations;
|
|
489
|
+
var requiredPropertyPaths = [];
|
|
490
|
+
var requiredProperties = entitySetAnnotations === null || entitySetAnnotations === void 0 ? void 0 : (_entitySetAnnotations = entitySetAnnotations.Capabilities) === null || _entitySetAnnotations === void 0 ? void 0 : (_entitySetAnnotations2 = _entitySetAnnotations.FilterRestrictions) === null || _entitySetAnnotations2 === void 0 ? void 0 : _entitySetAnnotations2.RequiredProperties;
|
|
491
|
+
|
|
492
|
+
if (requiredProperties === null || requiredProperties === void 0 ? void 0 : requiredProperties.length) {
|
|
493
|
+
requiredProperties.forEach(function (oRequireProperty) {
|
|
494
|
+
requiredPropertyPaths.push(oRequireProperty.value);
|
|
495
|
+
});
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
visualFilter.requiredProperties = requiredPropertyPaths;
|
|
499
|
+
|
|
500
|
+
if ((_visualFilter$require = visualFilter.requiredProperties) === null || _visualFilter$require === void 0 ? void 0 : _visualFilter$require.length) {
|
|
501
|
+
if (!visualFilter.inParameters || !visualFilter.inParameters.length) {
|
|
502
|
+
if (!visualFilter.selectionVariantAnnotation) {
|
|
503
|
+
visualFilter.showOverlayInitially = true;
|
|
504
|
+
} else {
|
|
505
|
+
var _svAnnotation;
|
|
506
|
+
|
|
507
|
+
var selectOptions = [];
|
|
508
|
+
(_svAnnotation = svAnnotation) === null || _svAnnotation === void 0 ? void 0 : _svAnnotation.SelectOptions.forEach(function (oSelectOption) {
|
|
509
|
+
selectOptions.push(oSelectOption.PropertyName.value);
|
|
510
|
+
});
|
|
511
|
+
requiredPropertyPaths = requiredPropertyPaths.sort();
|
|
512
|
+
selectOptions = selectOptions.sort();
|
|
513
|
+
visualFilter.showOverlayInitially = requiredPropertyPaths.some(function (sPath) {
|
|
514
|
+
return selectOptions.indexOf(sPath) === -1;
|
|
515
|
+
});
|
|
516
|
+
}
|
|
517
|
+
} else {
|
|
518
|
+
visualFilter.showOverlayInitially = false;
|
|
519
|
+
}
|
|
520
|
+
} else {
|
|
521
|
+
visualFilter.showOverlayInitially = false;
|
|
522
|
+
}
|
|
485
523
|
}
|
|
486
524
|
}
|
|
487
525
|
} else {
|
|
@@ -1130,7 +1168,8 @@ sap.ui.define(["../ManifestSettings", "../controls/Common/DataVisualization", ".
|
|
|
1130
1168
|
hasMultiVisualizations: hasMultiVisualizations,
|
|
1131
1169
|
useSemanticDateRange: useSemanticDateRange,
|
|
1132
1170
|
filterInitialLayout: filterInitialLayout,
|
|
1133
|
-
filterLayout: filterLayout
|
|
1171
|
+
filterLayout: filterLayout,
|
|
1172
|
+
kpiDefinitions: getKPIDefinitions(converterContext)
|
|
1134
1173
|
};
|
|
1135
1174
|
};
|
|
1136
1175
|
|
|
@@ -1213,4 +1252,4 @@ sap.ui.define(["../ManifestSettings", "../controls/Common/DataVisualization", ".
|
|
|
1213
1252
|
|
|
1214
1253
|
return _exports;
|
|
1215
1254
|
}, false);
|
|
1216
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkxpc3RSZXBvcnRDb252ZXJ0ZXIudHMiXSwibmFtZXMiOlsiX2dldENvbmRpdGlvblBhdGgiLCJlbnRpdHlUeXBlIiwicHJvcGVydHlQYXRoIiwicGFydHMiLCJzcGxpdCIsInBhcnRpYWxQYXRoIiwia2V5IiwibGVuZ3RoIiwicGFydCIsInNoaWZ0IiwicHJvcGVydHkiLCJyZXNvbHZlUGF0aCIsIl90eXBlIiwiaXNDb2xsZWN0aW9uIiwiX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkIiwiZnVsbFByb3BlcnR5UGF0aCIsImluY2x1ZGVIaWRkZW4iLCJjb252ZXJ0ZXJDb250ZXh0IiwidW5kZWZpbmVkIiwidGFyZ2V0VHlwZSIsImFubm90YXRpb25zIiwiVUkiLCJIaWRkZW4iLCJ2YWx1ZU9mIiwidGFyZ2V0RW50aXR5VHlwZSIsImdldEFubm90YXRpb25FbnRpdHlUeXBlIiwiS2V5SGVscGVyIiwiZ2V0U2VsZWN0aW9uRmllbGRLZXlGcm9tUGF0aCIsImFubm90YXRpb25QYXRoIiwiZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aCIsImNvbmRpdGlvblBhdGgiLCJhdmFpbGFiaWxpdHkiLCJIaWRkZW5GaWx0ZXIiLCJBdmFpbGFiaWxpdHlUeXBlIiwiQWRhcHRhdGlvbiIsImxhYmVsIiwiY29tcGlsZUJpbmRpbmciLCJhbm5vdGF0aW9uRXhwcmVzc2lvbiIsIkNvbW1vbiIsIkxhYmVsIiwibmFtZSIsImdyb3VwIiwiZ3JvdXBMYWJlbCIsIl9nZXRTZWxlY3Rpb25GaWVsZHMiLCJuYXZpZ2F0aW9uUGF0aCIsInByb3BlcnRpZXMiLCJzZWxlY3Rpb25GaWVsZE1hcCIsImZvckVhY2giLCJmdWxsUGF0aCIsInNlbGVjdGlvbkZpZWxkIiwiX2dldFNlbGVjdGlvbkZpZWxkc0J5UGF0aCIsInByb3BlcnR5UGF0aHMiLCJzZWxlY3Rpb25GaWVsZHMiLCJsb2NhbFNlbGVjdGlvbkZpZWxkcyIsImVudGl0eVByb3BlcnRpZXMiLCJpbmNsdWRlcyIsInNwbGljZSIsImpvaW4iLCJnZXRGaWVsZEdyb3VwRmlsdGVyR3JvdXBzIiwiZmllbGRHcm91cCIsImZpbHRlckZhY2V0TWFwIiwiRGF0YSIsImRhdGFGaWVsZCIsIiRUeXBlIiwiVmFsdWUiLCJwYXRoIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwicXVhbGlmaWVyIiwiZ2V0VGFibGVWaXN1YWxpemF0aW9ucyIsInZpZXdzIiwidGFibGVzIiwidmlldyIsInR5cGUiLCJ2aXN1YWxpemF0aW9ucyIsInNlY29uZGFyeVZpc3VhbGl6YXRpb24iLCJwcmVzZW50YXRpb24iLCJ2aXN1YWxpemF0aW9uIiwiVmlzdWFsaXphdGlvblR5cGUiLCJUYWJsZSIsInB1c2giLCJnZXRGaWx0ZXJCYXJoaWRlQmFzaWNTZWFyY2giLCJsaXN0UmVwb3J0VGFibGVzIiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyIsImdldFRlbXBsYXRlVHlwZSIsIlRlbXBsYXRlVHlwZSIsIkFuYWx5dGljYWxMaXN0UGFnZSIsInNDb250ZXh0UGF0aCIsImdldENvbnRleHRQYXRoIiwiY2hlY2tBbGxUYWJsZUZvckVudGl0eVNldEFyZUFuYWx5dGljYWwiLCJjb250ZXh0UGF0aCIsImV2ZXJ5IiwiZW5hYmxlQW5hbHl0aWNzIiwiYW5ub3RhdGlvbiIsImNvbGxlY3Rpb24iLCJfZ2V0UGFyYW1ldGVyRmllbGRzIiwiZGF0YU1vZGVsT2JqZWN0UGF0aCIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJwYXJhbWV0ZXJFbnRpdHlUeXBlIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJpc1BhcmFtZXRlcml6ZWQiLCJSZXN1bHRDb250ZXh0IiwicGFyYW1ldGVyQ29udmVydGVyQ29udGV4dCIsImdldENvbnZlcnRlckNvbnRleHRGb3IiLCJwYXJhbWV0ZXJGaWVsZHMiLCJtYXAiLCJfZ2V0RmlsdGVyRmllbGQiLCJnZXRTZWxlY3Rpb25GaWVsZHMiLCJsclRhYmxlcyIsInNlbGVjdGlvblZhcmlhbnRzIiwiZ2V0U2VsZWN0aW9uVmFyaWFudHMiLCJleGNsdWRlZEZpbHRlclByb3BlcnRpZXMiLCJnZXRFeGNsdWRlZEZpbHRlclByb3BlcnRpZXMiLCJnZXRFbnRpdHlUeXBlIiwiZmlsdGVyRmFjZXRzIiwiRmlsdGVyRmFjZXRzIiwiYUZpZWxkR3JvdXBzIiwiZ2V0QW5ub3RhdGlvbnNCeVRlcm0iLCJpIiwicmVkdWNlIiwicHJldmlvdXNWYWx1ZSIsImZpbHRlckZhY2V0IiwiVGFyZ2V0IiwiJHRhcmdldCIsIklEIiwidG9TdHJpbmciLCJhU2VsZWN0T3B0aW9ucyIsInNlbGVjdGlvblZhcmlhbnQiLCJnZXRTZWxlY3Rpb25WYXJpYW50IiwiU2VsZWN0T3B0aW9ucyIsImZpbHRlckZpZWxkcyIsImdldEZpbHRlckNvbmZpZ3VyYXRpb24iLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsImRlZmF1bHRGaWx0ZXJzIiwiX2dldERlZmF1bHRGaWx0ZXJGaWVsZHMiLCJhbGxGaWx0ZXJzIiwiY29uY2F0IiwiU2VsZWN0aW9uRmllbGRzIiwidmFsdWUiLCJmaWx0ZXJGaWVsZCIsIk9iamVjdCIsImtleXMiLCJmaWx0ZXIiLCJhc3NpZ24iLCJhZ2dyZWdhdGVzIiwiYWdncmVnYXRhYmxlUHJvcGVydGllcyIsImFnZ3JlZ2F0ZUtleSIsInJlbGF0aXZlUGF0aCIsImluZGV4T2YiLCJpbnNlcnRDdXN0b21FbGVtZW50cyIsImdldE1hbmlmZXN0RmlsdGVyRmllbGRzIiwicG9zaXRpb24iLCJ0ZW1wbGF0ZSIsInNldHRpbmdzIiwidmlzdWFsRmlsdGVyIiwiZ2V0VmlzdWFsRmlsdGVycyIsInNQcm9wZXJ0eVBhdGgiLCJGaWx0ZXJGaWVsZHMiLCJvVmlzdWFsRmlsdGVyIiwidmFsdWVMaXN0Iiwib1ZGUGF0aCIsImFubm90YXRpb25RdWFsaWZpZXJTcGxpdCIsInF1YWxpZmllclZMIiwiY29sbGVjdGlvblBhdGgiLCJDb2xsZWN0aW9uUGF0aCIsImNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dCIsImdldEVudGl0eVNldCIsInZhbHVlTGlzdFBhcmFtcyIsIlBhcmFtZXRlcnMiLCJvdXRQYXJhbWV0ZXIiLCJpblBhcmFtZXRlcnMiLCJsb2NhbERhdGFQcm9wZXJ0eSIsIkxvY2FsRGF0YVByb3BlcnR5IiwidmFsdWVMaXN0UHJvcGVydHkiLCJWYWx1ZUxpc3RQcm9wZXJ0eSIsImJOb3RGaWx0ZXJhYmxlIiwiaXNQcm9wZXJ0eUZpbHRlcmFibGUiLCJvSW5QYXJhbWV0ZXIiLCJtYWluRW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24iLCJjaGVja0ZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMiLCJ2YWx1ZUxpc3RFbnRpdHlTZXRJbk1hcHBpbmdBbGxvd2VkRXhwcmVzc2lvbiIsIkVycm9yIiwicHZRdWFsaWZpZXIiLCJQcmVzZW50YXRpb25WYXJpYW50UXVhbGlmaWVyIiwic3ZRdWFsaWZpZXIiLCJTZWxlY3Rpb25WYXJpYW50UXVhbGlmaWVyIiwicHZBbm5vdGF0aW9uIiwiZ2V0RW50aXR5VHlwZUFubm90YXRpb24iLCJhZ2dyZWdhdGlvbkhlbHBlciIsIkFnZ3JlZ2F0aW9uSGVscGVyIiwiaXNBbmFseXRpY3NTdXBwb3J0ZWQiLCJhVmlzdWFsaXphdGlvbnMiLCJWaXN1YWxpemF0aW9ucyIsImNoYXJ0QW5ub3RhdGlvbiIsInRlcm0iLCJfYmdldFZGQWdncmVnYXRpb24iLCJfY2hlY2tWRkFnZ3JlZ2F0aW9uIiwiYkRpbWVuc2lvbkhpZGRlbiIsIkRpbWVuc2lvbnMiLCJiRGltZW5zaW9uSGlkZGVuRmlsdGVyIiwicHJlc2VudGF0aW9uQW5ub3RhdGlvbiIsInZpc3VhbEZpbHRlcklkIiwiVmlzdWFsRmlsdGVySUQiLCJiSXNSYW5nZSIsImJJc01haW5FbnRpdHlTZXRTaW5nbGVTZWxlY3Rpb24iLCJtdWx0aXBsZVNlbGVjdGlvbkFsbG93ZWQiLCJyZXF1aXJlZCIsImdldElzUmVxdWlyZWQiLCJzdkFubm90YXRpb24iLCJzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbiIsImdldERpYWdub3N0aWNzIiwiYWRkSXNzdWUiLCJJc3N1ZUNhdGVnb3J5IiwiQW5ub3RhdGlvbiIsIklzc3VlU2V2ZXJpdHkiLCJIaWdoIiwiSXNzdWVUeXBlIiwiTUFMRk9STUVEX1ZJU1VBTEZJTFRFUlMiLCJDSEFSVCIsIlBSRVNFTlRBVElPTlZBUklBTlQiLCJWQUxVRUxJU1QiLCJNYW5pZmVzdCIsInNNZWFzdXJlUGF0aCIsImJHcm91cGFibGUiLCJiQWdncmVnYXRhYmxlIiwic01lYXN1cmUiLCJNZWFzdXJlcyIsInNEaW1lbnNpb24iLCJjdXN0b21BZ2dyZWdhdGVzIiwiZ2V0Q3VzdG9tQWdncmVnYXRlRGVmaW5pdGlvbnMiLCJhVHJhbnNBZ2dyZWdhdGlvbnMiLCJnZXRFbnRpdHlDb250YWluZXIiLCJhQWdncmVnYXRpb25zIiwic29tZSIsIm9BZ2dyZWdhdGUiLCJOYW1lIiwiQWdncmVnYXRhYmxlUHJvcGVydHkiLCJhQWdncmVnYXRhYmxlUHJvcHNGcm9tQ29udGFpbmVyIiwiQWdncmVnYXRpb24iLCJBcHBseVN1cHBvcnRlZCIsIkFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMiLCJhR3JvdXBhYmxlUHJvcHNGcm9tQ29udGFpbmVyIiwiR3JvdXBhYmxlUHJvcGVydGllcyIsIlByb3BlcnR5IiwiVUlTZWxlY3Rpb25GaWVsZHMiLCJTZWxlY3Rpb25GaWVsZCIsInNlbGVjdE9wdGlvbiIsInByb3BlcnR5TmFtZSIsIlByb3BlcnR5TmFtZSIsIkZpbHRlckZpZWxkIiwiZGVmYXVsdEZpbHRlclZhbHVlIiwiRmlsdGVyRGVmYXVsdFZhbHVlIiwiUHJvcGVydHlQYXRoIiwiTUlTU0lOR19TRUxFQ1RJT05GSUVMRCIsIkRlZmF1bHQiLCJpc1BhcmFtZXRlciIsImdldERlZmF1bHRTZW1hbnRpY0RhdGVzIiwiZGVmYXVsdFNlbWFudGljRGF0ZXMiLCJkZWZhdWx0VmFsdWVzIiwiZ2V0RmlsdGVyRmllbGQiLCJmYkNvbmZpZyIsImRlZmluZWRGaWx0ZXJGaWVsZHMiLCJnZXRQYXRoRnJvbVNlbGVjdGlvbkZpZWxkS2V5Iiwic0tleSIsInBsYWNlbWVudCIsIlBsYWNlbWVudCIsIkFmdGVyIiwiZ2V0Q29tcGxpYW50VmlzdWFsaXphdGlvbkFubm90YXRpb24iLCJiSXNBTFAiLCJnZXREZWZhdWx0VGVtcGxhdGVBbm5vdGF0aW9uUGF0aCIsInNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQiLCJnZXRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IiwicHJlc2VudGF0aW9uVmFyaWFudCIsIlByZXNlbnRhdGlvblZhcmlhbnQiLCJiUFZDb21wbGFpbnQiLCJpc1ByZXNlbnRhdGlvbkNvbXBsaWFudCIsImlzU2VsZWN0aW9uUHJlc2VudGF0aW9uQ29tcGxpYW50IiwiZ2V0RGVmYXVsdFByZXNlbnRhdGlvblZhcmlhbnQiLCJkZWZhdWx0TGluZUl0ZW0iLCJnZXREZWZhdWx0TGluZUl0ZW0iLCJnZXRWaWV3Iiwidmlld0NvbnZlcnRlckNvbmZpZ3VyYXRpb24iLCJjb25maWciLCJnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24iLCJnZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoIiwidGFibGVDb250cm9sSWQiLCJjaGFydENvbnRyb2xJZCIsInRpdGxlIiwic2VsZWN0aW9uVmFyaWFudFBhdGgiLCJpc011bHRpcGxlVmlld0NvbmZpZ3VyYXRpb24iLCJjcmVhdGVWaXN1YWxpemF0aW9uIiwiaXNQcmltYXJ5IiwiZGVmYXVsdFZpc3VhbGl6YXRpb24iLCJDaGFydCIsInByZXNlbnRhdGlvbkNyZWF0ZWQiLCJnZXRQcmVzZW50YXRpb24iLCJpdGVtIiwicmVzb2x2ZWRUYXJnZXQiLCJ0YXJnZXRBbm5vdGF0aW9uIiwiY3JlYXRlQWxwVmlldyIsInByZXNlbnRhdGlvbnMiLCJkZWZhdWx0UGF0aCIsInByaW1hcnlWaXN1YWxpemF0aW9uIiwiaWQiLCJwcmltYXJ5Iiwic2Vjb25kYXJ5Iiwidmlld0Fubm90YXRpb24iLCJUZXh0IiwidmlzdWFsaXphdGlvbkRlZmluaXRpb24iLCJpbmRleCIsInRhYmxlVmlzdWFsaXphdGlvbiIsImZpbHRlcnMiLCJjb250cm9sIiwiaGlkZGVuRmlsdGVycyIsInBhdGhzIiwia2VlcFByZXZpb3VzUHJlc29uYWxpemF0aW9uIiwiVGFibGVJRCIsIlNlbGVjdGlvblZhcmlhbnQiLCJmcmFnbWVudCIsImN1c3RvbVRhYklkIiwiQ3VzdG9tVGFiSUQiLCJnZXRWaWV3cyIsInNldHRpbmdzVmlld3MiLCJ2aWV3Q29udmVydGVyQ29uZmlncyIsIm1hbmlmZXN0V3JhcHBlciIsInZpZXdDb252ZXJ0ZXJDb250ZXh0IiwiZW50aXR5U2V0IiwiZ2V0QWxwVmlld0NvbmZpZyIsInZpZXdDb252ZXJ0ZXJDb25maWciLCJ2aWV3Q29uZmlncyIsImNoYXJ0IiwidGFibGUiLCJnZXREZWZhdWx0Q2hhcnQiLCJnZXRIZWFkZXJBY3Rpb25zIiwiZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdCIsImNvbnZlcnRQYWdlIiwidmlld3NEZWZpbml0aW9uIiwiZ2V0Vmlld0NvbmZpZ3VyYXRpb24iLCJoYXNNdWx0aXBsZUVudGl0eVNldHMiLCJzaG93VGFiQ291bnRzIiwic2hvd0NvdW50cyIsImxyVGFibGVWaXN1YWxpemF0aW9ucyIsInNob3dQaW5uYWJsZVRvZ2dsZSIsInNpbmdsZVRhYmxlSWQiLCJzaW5nbGVDaGFydElkIiwiZmlsdGVyQmFySWQiLCJGaWx0ZXJCYXJJRCIsImZpbHRlclZhcmlhbnRNYW5hZ2VtZW50SUQiLCJGaWx0ZXJWYXJpYW50TWFuYWdlbWVudElEIiwidGFyZ2V0Q29udHJvbElkcyIsImZpbHRlckluaXRpYWxMYXlvdXQiLCJpbml0aWFsTGF5b3V0IiwidG9Mb3dlckNhc2UiLCJmaWx0ZXJMYXlvdXQiLCJsYXlvdXQiLCJ1c2VTZW1hbnRpY0RhdGVSYW5nZSIsIm9Db25maWciLCJnZXRDb250ZW50QXJlYUlkIiwiY2hhcnRJZCIsInRhYmxlSWQiLCJoaWRlQmFzaWNTZWFyY2giLCJoZWFkZXJBY3Rpb25zIiwiaGFzTXVsdGlWaXN1YWxpemF0aW9ucyIsIm1haW5FbnRpdHlTZXQiLCJtYWluRW50aXR5VHlwZSIsImZpbHRlckJhciIsImZpbHRlckNvbmRpdGlvbnMiLCJ2YXJpYW50TWFuYWdlbWVudCIsImlzTXVsdGlFbnRpdHlTZXRzIiwic2VsZWN0aW9uVmFyaWFudFBhdGhzIiwidGFibGVGaWx0ZXJzIiwidGFibGVTVkNvbmZpZ3MiLCJBcnJheSIsImlzQXJyYXkiLCJzZWxlY3Rpb25WYXJpYW50Q29uZmlnIiwiZ2V0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24iLCJzdkNvbmZpZ3MiLCJwcm9wZXJ0eU5hbWVzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE0S0E7Ozs7Ozs7O0FBUUEsTUFBTUEsaUJBQWlCLEdBQUcsVUFBU0MsVUFBVCxFQUFpQ0MsWUFBakMsRUFBK0Q7QUFDeEYsUUFBTUMsS0FBSyxHQUFHRCxZQUFZLENBQUNFLEtBQWIsQ0FBbUIsR0FBbkIsQ0FBZDtBQUNBLFFBQUlDLFdBQUo7QUFDQSxRQUFJQyxHQUFHLEdBQUcsRUFBVjs7QUFDQSxXQUFPSCxLQUFLLENBQUNJLE1BQWIsRUFBcUI7QUFDcEIsVUFBSUMsSUFBSSxHQUFHTCxLQUFLLENBQUNNLEtBQU4sRUFBWDtBQUNBSixNQUFBQSxXQUFXLEdBQUdBLFdBQVcsR0FBR0EsV0FBVyxHQUFHLEdBQWQsR0FBb0JHLElBQXZCLEdBQThCQSxJQUF2RDtBQUNBLFVBQU1FLFFBQXVDLEdBQUdULFVBQVUsQ0FBQ1UsV0FBWCxDQUF1Qk4sV0FBdkIsQ0FBaEQ7O0FBQ0EsVUFBSUssUUFBUSxDQUFDRSxLQUFULEtBQW1CLG9CQUFuQixJQUEyQ0YsUUFBUSxDQUFDRyxZQUF4RCxFQUFzRTtBQUNyRUwsUUFBQUEsSUFBSSxJQUFJLEdBQVI7QUFDQTs7QUFDREYsTUFBQUEsR0FBRyxHQUFHQSxHQUFHLEdBQUdBLEdBQUcsR0FBRyxHQUFOLEdBQVlFLElBQWYsR0FBc0JBLElBQS9CO0FBQ0E7O0FBQ0QsV0FBT0YsR0FBUDtBQUNBLEdBZEQ7O0FBZ0JBLE1BQU1RLDJCQUEyQixH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RCxZQUFBQSxhQUFhLEdBQUdqUixJQUFJLENBQUN1TixjQUFyQjtBQUNBeUQsWUFBQUEsYUFBYSxHQUFHaFIsSUFBSSxDQUFDc04sY0FBckI7QUFDQTtBQUNBO0FBQ0Q7QUFSQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBU0QsS0FaRCxNQVlPO0FBQ04wRCxNQUFBQSxhQUFhLEdBQUlsUixLQUFLLENBQUMsQ0FBRCxDQUFOLENBQW1Dd04sY0FBbkQ7QUFDQTs7QUFDRCxRQUFJMEQsYUFBYSxJQUFJQyxhQUFyQixFQUFvQztBQUNuQyxhQUFPO0FBQ05jLFFBQUFBLE9BQU8sRUFBRWQsYUFESDtBQUVOZSxRQUFBQSxPQUFPLEVBQUVoQjtBQUZILE9BQVA7QUFJQTs7QUFDRCxXQUFPclUsU0FBUDtBQUNBIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRBdmFpbGFiaWxpdHlUeXBlLFxuXHRGaWx0ZXJGaWVsZE1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0RmlsdGVyTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRNdWx0aXBsZVZpZXdzQ29uZmlndXJhdGlvbixcblx0Vmlld1BhdGhDb25maWd1cmF0aW9uLFxuXHRTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb24sXG5cdFZpc3VhbGl6YXRpb25UeXBlLFxuXHRGaWx0ZXJTZXR0aW5ncyxcblx0VGVtcGxhdGVUeXBlLFxuXHRDb21iaW5lZFZpZXdQYXRoQ29uZmlndXJhdGlvbixcblx0Q3VzdG9tVmlld1RlbXBsYXRlQ29uZmlndXJhdGlvblxufSBmcm9tIFwiLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgRW50aXR5VHlwZSwgTmF2aWdhdGlvblByb3BlcnR5LCBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyXCI7XG5pbXBvcnQge1xuXHREYXRhVmlzdWFsaXphdGlvbkFubm90YXRpb25zLFxuXHREYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24sXG5cdGdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbixcblx0Z2V0RGVmYXVsdENoYXJ0LFxuXHRnZXREZWZhdWx0TGluZUl0ZW0sXG5cdGdldERlZmF1bHRQcmVzZW50YXRpb25WYXJpYW50LFxuXHRnZXRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LFxuXHRpc1ByZXNlbnRhdGlvbkNvbXBsaWFudCxcblx0Z2V0U2VsZWN0aW9uVmFyaWFudCxcblx0aXNTZWxlY3Rpb25QcmVzZW50YXRpb25Db21wbGlhbnRcbn0gZnJvbSBcIi4uL2NvbnRyb2xzL0NvbW1vbi9EYXRhVmlzdWFsaXphdGlvblwiO1xuaW1wb3J0IHtcblx0TGluZUl0ZW0sXG5cdFByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXMsXG5cdFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXMsXG5cdFNlbGVjdE9wdGlvblR5cGUsXG5cdFNlbGVjdGlvblZhcmlhbnRUeXBlVHlwZXMsXG5cdEZpZWxkR3JvdXBUeXBlLFxuXHRGaWVsZEdyb3VwXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9kaXN0L2dlbmVyYXRlZC9VSVwiO1xuaW1wb3J0IHsgQW5ub3RhdGlvblRlcm0sIERhdGFGaWVsZEFic3RyYWN0VHlwZXMsIERhdGFGaWVsZFR5cGVzLCBSZWZlcmVuY2VGYWNldFR5cGVzLCBVSUFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHsgQ3VzdG9tVGFiSUQsIEZpbHRlckJhcklELCBGaWx0ZXJWYXJpYW50TWFuYWdlbWVudElELCBUYWJsZUlELCBWaXN1YWxGaWx0ZXJJRCB9IGZyb20gXCIuLi9oZWxwZXJzL0lEXCI7XG5pbXBvcnQge1xuXHRnZXRTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbixcblx0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24sXG5cdFRhYmxlVmlzdWFsaXphdGlvblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCB7IENoYXJ0VmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9DaGFydFwiO1xuaW1wb3J0IHsgQmFzZUFjdGlvbiwgZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7IENvbmZpZ3VyYWJsZU9iamVjdCwgQ3VzdG9tRWxlbWVudCwgaW5zZXJ0Q3VzdG9tRWxlbWVudHMsIFBsYWNlbWVudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBLZXlIZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0tleVwiO1xuaW1wb3J0IHsgYW5ub3RhdGlvbkV4cHJlc3Npb24sIGNvbXBpbGVCaW5kaW5nIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0V4cHJlc3Npb25cIjtcbmltcG9ydCB7IElzc3VlVHlwZSwgSXNzdWVTZXZlcml0eSwgSXNzdWVDYXRlZ29yeSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSXNzdWVNYW5hZ2VyXCI7XG5pbXBvcnQgeyBpc1Byb3BlcnR5RmlsdGVyYWJsZSwgZ2V0SXNSZXF1aXJlZCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0ZpbHRlclRlbXBsYXRpbmdcIjtcbmltcG9ydCB7IGNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uSGVscGVyIH0gZnJvbSBcIi4uL2hlbHBlcnMvQWdncmVnYXRpb25cIjtcblxudHlwZSBWaWV3QW5ub3RhdGlvbnNUeXBlVHlwZXMgPSBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzIHwgU2VsZWN0aW9uVmFyaWFudFR5cGVUeXBlcztcbnR5cGUgVmFyaWFudE1hbmFnZW1lbnREZWZpbml0aW9uID0ge1xuXHRpZDogc3RyaW5nO1xuXHR0YXJnZXRDb250cm9sSWRzOiBzdHJpbmc7XG59O1xuXG50eXBlIE11bHRpcGxlVmlld0NvbmZpZ3VyYXRpb24gPSBWaWV3UGF0aENvbmZpZ3VyYXRpb24gJiB7XG5cdGFubm90YXRpb24/OiBEYXRhVmlzdWFsaXphdGlvbkFubm90YXRpb25zO1xufTtcblxudHlwZSBTaW5nbGVWaWV3Q29uZmlndXJhdGlvbiA9IHtcblx0YW5ub3RhdGlvbj86IERhdGFWaXN1YWxpemF0aW9uQW5ub3RhdGlvbnM7XG59O1xuXG50eXBlIEN1c3RvbVZpZXdDb25maWd1cmF0aW9uID0gQ3VzdG9tVmlld1RlbXBsYXRlQ29uZmlndXJhdGlvbiAmIHtcblx0dHlwZTogc3RyaW5nO1xufTtcblxudHlwZSBWaWV3Q29uZmlndXJhdGlvbiA9IE11bHRpcGxlVmlld0NvbmZpZ3VyYXRpb24gfCBTaW5nbGVWaWV3Q29uZmlndXJhdGlvbiB8IEN1c3RvbVZpZXdDb25maWd1cmF0aW9uO1xudHlwZSBWaWV3QW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24gPSBNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uIHwgU2luZ2xlVmlld0NvbmZpZ3VyYXRpb247XG5cbnR5cGUgRmlsdGVyRmllbGQgPSBDb25maWd1cmFibGVPYmplY3QgJiB7XG5cdGNvbmRpdGlvblBhdGg6IHN0cmluZztcblx0YXZhaWxhYmlsaXR5OiBBdmFpbGFiaWxpdHlUeXBlO1xuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHRsYWJlbD86IHN0cmluZztcblx0dGVtcGxhdGU/OiBzdHJpbmc7XG5cdGdyb3VwPzogc3RyaW5nO1xuXHRncm91cExhYmVsPzogc3RyaW5nO1xuXHRzZXR0aW5ncz86IEZpbHRlclNldHRpbmdzO1xuXHRpc1BhcmFtZXRlcj86IGJvb2xlYW47XG5cdHZpc3VhbEZpbHRlcj86IFZpc3VhbEZpbHRlcnM7XG59O1xuXG50eXBlIFZpc3VhbEZpbHRlcnMgPSB7XG5cdGRpbWVuc2lvblBhdGg/OiBzdHJpbmc7XG5cdG1lYXN1cmVQYXRoPzogc3RyaW5nO1xuXHR2aXN1YWxGaWx0ZXJJZD86IHN0cmluZztcblx0bGFiZWw/OiBzdHJpbmc7XG5cdGNoYXJ0QW5ub3RhdGlvbj86IHN0cmluZztcblx0cHJlc2VudGF0aW9uQW5ub3RhdGlvbj86IHN0cmluZztcblx0dmlzaWJsZT86IGJvb2xlYW47XG5cdG91dFBhcmFtZXRlcj86IHN0cmluZztcblx0aW5QYXJhbWV0ZXJzPzogb2JqZWN0W107XG5cdGNvbnRleHRQYXRoPzogc3RyaW5nO1xuXHRzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbj86IHN0cmluZztcblx0bXVsdGlwbGVTZWxlY3Rpb25BbGxvd2VkPzogYm9vbGVhbjtcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xufTtcblxudHlwZSBGaWx0ZXJHcm91cCA9IHtcblx0Z3JvdXA/OiBzdHJpbmc7XG5cdGdyb3VwTGFiZWw/OiBzdHJpbmc7XG59O1xuXG50eXBlIFZpZXdDb252ZXJ0ZXJTZXR0aW5ncyA9IFZpZXdDb25maWd1cmF0aW9uICYge1xuXHRjb252ZXJ0ZXJDb250ZXh0PzogQ29udmVydGVyQ29udGV4dDtcbn07XG5cbnR5cGUgQ3VzdG9tRWxlbWVudEZpbHRlckZpZWxkID0gQ3VzdG9tRWxlbWVudDxGaWx0ZXJGaWVsZD47XG5cbnR5cGUgRGVmYXVsdFNlbWFudGljRGF0ZSA9IENvbmZpZ3VyYWJsZU9iamVjdCAmIHtcblx0b3BlcmF0b3I6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIExpc3RSZXBvcnREZWZpbml0aW9uID0ge1xuXHRtYWluRW50aXR5U2V0OiBzdHJpbmc7XG5cdG1haW5FbnRpdHlUeXBlOiBzdHJpbmc7IC8vIGVudGl0eVR5cGU+IGF0IHRoZSBzdGFydCBvZiBMUiB0ZW1wbGF0aW5nXG5cdHNpbmdsZVRhYmxlSWQ/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBzaW5nbGUgVGFibGUgbW9kZVxuXHRzaW5nbGVDaGFydElkPzogc3RyaW5nOyAvLyBvbmx5IHdpdGggc2luZ2xlIFRhYmxlIG1vZGVcblx0c2hvd1RhYkNvdW50cz86IGJvb2xlYW47IC8vIG9ubHkgd2l0aCBtdWx0aSBUYWJsZSBtb2RlXG5cdGhlYWRlckFjdGlvbnM6IEJhc2VBY3Rpb25bXTtcblx0c2hvd1Bpbm5hYmxlVG9nZ2xlPzogYm9vbGVhbjtcblx0ZmlsdGVyQmFyOiB7XG5cdFx0c2VsZWN0aW9uRmllbGRzOiBGaWx0ZXJGaWVsZFtdO1xuXHRcdGhpZGVCYXNpY1NlYXJjaDogYm9vbGVhbjtcblx0fTtcblx0dmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdO1xuXHRmaWx0ZXJDb25kaXRpb25zOiBvYmplY3Q7XG5cdGlzTXVsdGlFbnRpdHlTZXRzOiBib29sZWFuO1xuXHRmaWx0ZXJCYXJJZDogc3RyaW5nO1xuXHR2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnREZWZpbml0aW9uO1xuXHRoYXNNdWx0aVZpc3VhbGl6YXRpb25zOiBib29sZWFuO1xuXHR1c2VTZW1hbnRpY0RhdGVSYW5nZT86IGJvb2xlYW47XG5cdGZpbHRlckluaXRpYWxMYXlvdXQ/OiBzdHJpbmc7XG5cdGZpbHRlckxheW91dD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbiA9IFNpbmdsZVZpZXdEZWZpbml0aW9uIHwgQ3VzdG9tVmlld0RlZmluaXRpb24gfCBDb21iaW5lZFZpZXdEZWZpbml0aW9uO1xuXG5leHBvcnQgdHlwZSBDb21iaW5lZFZpZXdEZWZpbml0aW9uID0ge1xuXHRzZWxlY3Rpb25WYXJpYW50UGF0aD86IHN0cmluZzsgLy8gb25seSB3aXRoIG9uIG11bHRpIFRhYmxlIG1vZGVcblx0dGl0bGU/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBtdWx0aSBUYWJsZSBtb2RlXG5cdHByaW1hcnlWaXN1YWxpemF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb247XG5cdHNlY29uZGFyeVZpc3VhbGl6YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbjtcblx0dGFibGVDb250cm9sSWQ6IHN0cmluZztcblx0Y2hhcnRDb250cm9sSWQ6IHN0cmluZztcblx0ZGVmYXVsdFBhdGg/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBDdXN0b21WaWV3RGVmaW5pdGlvbiA9IHtcblx0dGl0bGU/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBtdWx0aSBUYWJsZSBtb2RlXG5cdGZyYWdtZW50OiBzdHJpbmc7XG5cdHR5cGU6IHN0cmluZztcblx0Y3VzdG9tVGFiSWQ6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFNpbmdsZVZpZXdEZWZpbml0aW9uID0ge1xuXHRzZWxlY3Rpb25WYXJpYW50UGF0aD86IHN0cmluZzsgLy8gb25seSB3aXRoIG9uIG11bHRpIFRhYmxlIG1vZGVcblx0dGl0bGU/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBtdWx0aSBUYWJsZSBtb2RlXG5cdHByZXNlbnRhdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uO1xuXHR0YWJsZUNvbnRyb2xJZDogc3RyaW5nO1xufTtcblxudHlwZSBDb250ZW50QXJlYUlEID0ge1xuXHRjaGFydElkOiBzdHJpbmc7XG5cdHRhYmxlSWQ6IHN0cmluZztcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY29uZGl0aW9uIHBhdGggcmVxdWlyZWQgZm9yIHRoZSBjb25kaXRpb24gbW9kZWwuIEl0IGxvb2tzIGxpa2UgZm9sbG93OlxuICogPDE6Ti1Qcm9wZXJ0eU5hbWU+KlxcLzwxOjEtUHJvcGVydHlOYW1lPi88UHJvcGVydHlOYW1lPi5cbiAqXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgcm9vdCBFbnRpdHlUeVtlXG4gKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSBmdWxsIHBhdGggdG8gdGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCBjb25kaXRpb24gcGF0aFxuICovXG5jb25zdCBfZ2V0Q29uZGl0aW9uUGF0aCA9IGZ1bmN0aW9uKGVudGl0eVR5cGU6IEVudGl0eVR5cGUsIHByb3BlcnR5UGF0aDogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3QgcGFydHMgPSBwcm9wZXJ0eVBhdGguc3BsaXQoXCIvXCIpO1xuXHRsZXQgcGFydGlhbFBhdGg7XG5cdGxldCBrZXkgPSBcIlwiO1xuXHR3aGlsZSAocGFydHMubGVuZ3RoKSB7XG5cdFx0bGV0IHBhcnQgPSBwYXJ0cy5zaGlmdCgpIGFzIHN0cmluZztcblx0XHRwYXJ0aWFsUGF0aCA9IHBhcnRpYWxQYXRoID8gcGFydGlhbFBhdGggKyBcIi9cIiArIHBhcnQgOiBwYXJ0O1xuXHRcdGNvbnN0IHByb3BlcnR5OiBQcm9wZXJ0eSB8IE5hdmlnYXRpb25Qcm9wZXJ0eSA9IGVudGl0eVR5cGUucmVzb2x2ZVBhdGgocGFydGlhbFBhdGgpO1xuXHRcdGlmIChwcm9wZXJ0eS5fdHlwZSA9PT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlcIiAmJiBwcm9wZXJ0eS5pc0NvbGxlY3Rpb24pIHtcblx0XHRcdHBhcnQgKz0gXCIqXCI7XG5cdFx0fVxuXHRcdGtleSA9IGtleSA/IGtleSArIFwiL1wiICsgcGFydCA6IHBhcnQ7XG5cdH1cblx0cmV0dXJuIGtleTtcbn07XG5cbmNvbnN0IF9jcmVhdGVGaWx0ZXJTZWxlY3Rpb25GaWVsZCA9IGZ1bmN0aW9uKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRwcm9wZXJ0eTogUHJvcGVydHksXG5cdGZ1bGxQcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0aW5jbHVkZUhpZGRlbjogYm9vbGVhbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQge1xuXHQvLyBpZ25vcmUgY29tcGxleCBwcm9wZXJ0eSB0eXBlcyBhbmQgaGlkZGVuIGFubm90YXRlZCBvbmVzXG5cdGlmIChcblx0XHRwcm9wZXJ0eSAhPT0gdW5kZWZpbmVkICYmXG5cdFx0cHJvcGVydHkudGFyZ2V0VHlwZSA9PT0gdW5kZWZpbmVkICYmXG5cdFx0KGluY2x1ZGVIaWRkZW4gfHwgcHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSAhPT0gdHJ1ZSlcblx0KSB7XG5cdFx0Y29uc3QgdGFyZ2V0RW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUocHJvcGVydHkpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRrZXk6IEtleUhlbHBlci5nZXRTZWxlY3Rpb25GaWVsZEtleUZyb21QYXRoKGZ1bGxQcm9wZXJ0eVBhdGgpLFxuXHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChmdWxsUHJvcGVydHlQYXRoKSxcblx0XHRcdGNvbmRpdGlvblBhdGg6IF9nZXRDb25kaXRpb25QYXRoKGVudGl0eVR5cGUsIGZ1bGxQcm9wZXJ0eVBhdGgpLFxuXHRcdFx0YXZhaWxhYmlsaXR5OlxuXHRcdFx0XHRwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbkZpbHRlcj8udmFsdWVPZigpID09PSB0cnVlID8gQXZhaWxhYmlsaXR5VHlwZS5IaWRkZW4gOiBBdmFpbGFiaWxpdHlUeXBlLkFkYXB0YXRpb24sXG5cdFx0XHRsYWJlbDogY29tcGlsZUJpbmRpbmcoYW5ub3RhdGlvbkV4cHJlc3Npb24ocHJvcGVydHkuYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbD8udmFsdWVPZigpIHx8IHByb3BlcnR5Lm5hbWUpKSxcblx0XHRcdGdyb3VwOiB0YXJnZXRFbnRpdHlUeXBlLm5hbWUsXG5cdFx0XHRncm91cExhYmVsOiBjb21waWxlQmluZGluZyhcblx0XHRcdFx0YW5ub3RhdGlvbkV4cHJlc3Npb24odGFyZ2V0RW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWw/LnZhbHVlT2YoKSB8fCB0YXJnZXRFbnRpdHlUeXBlLm5hbWUpXG5cdFx0XHQpXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuY29uc3QgX2dldFNlbGVjdGlvbkZpZWxkcyA9IGZ1bmN0aW9uKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRuYXZpZ2F0aW9uUGF0aDogc3RyaW5nLFxuXHRwcm9wZXJ0aWVzOiBBcnJheTxQcm9wZXJ0eT4gfCB1bmRlZmluZWQsXG5cdGluY2x1ZGVIaWRkZW46IGJvb2xlYW4sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiB7XG5cdGNvbnN0IHNlbGVjdGlvbkZpZWxkTWFwOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSB7fTtcblx0aWYgKHByb3BlcnRpZXMpIHtcblx0XHRwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5OiBQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoOiBzdHJpbmcgPSBwcm9wZXJ0eS5uYW1lO1xuXHRcdFx0Y29uc3QgZnVsbFBhdGg6IHN0cmluZyA9IChuYXZpZ2F0aW9uUGF0aCA/IG5hdmlnYXRpb25QYXRoICsgXCIvXCIgOiBcIlwiKSArIHByb3BlcnR5UGF0aDtcblx0XHRcdGNvbnN0IHNlbGVjdGlvbkZpZWxkID0gX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkKGVudGl0eVR5cGUsIHByb3BlcnR5LCBmdWxsUGF0aCwgaW5jbHVkZUhpZGRlbiwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRpZiAoc2VsZWN0aW9uRmllbGQpIHtcblx0XHRcdFx0c2VsZWN0aW9uRmllbGRNYXBbZnVsbFBhdGhdID0gc2VsZWN0aW9uRmllbGQ7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHNlbGVjdGlvbkZpZWxkTWFwO1xufTtcblxuY29uc3QgX2dldFNlbGVjdGlvbkZpZWxkc0J5UGF0aCA9IGZ1bmN0aW9uKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRwcm9wZXJ0eVBhdGhzOiBBcnJheTxzdHJpbmc+IHwgdW5kZWZpbmVkLFxuXHRpbmNsdWRlSGlkZGVuOiBib29sZWFuLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4ge1xuXHRsZXQgc2VsZWN0aW9uRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSB7fTtcblx0aWYgKHByb3BlcnR5UGF0aHMpIHtcblx0XHRwcm9wZXJ0eVBhdGhzLmZvckVhY2goKHByb3BlcnR5UGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0XHRsZXQgbG9jYWxTZWxlY3Rpb25GaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPjtcblxuXHRcdFx0Y29uc3QgcHJvcGVydHk6IFByb3BlcnR5IHwgTmF2aWdhdGlvblByb3BlcnR5ID0gZW50aXR5VHlwZS5yZXNvbHZlUGF0aChwcm9wZXJ0eVBhdGgpO1xuXHRcdFx0aWYgKHByb3BlcnR5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHByb3BlcnR5Ll90eXBlID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiKSB7XG5cdFx0XHRcdC8vIGhhbmRsZSBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcblx0XHRcdFx0bG9jYWxTZWxlY3Rpb25GaWVsZHMgPSBfZ2V0U2VsZWN0aW9uRmllbGRzKFxuXHRcdFx0XHRcdGVudGl0eVR5cGUsXG5cdFx0XHRcdFx0cHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdHByb3BlcnR5LnRhcmdldFR5cGUuZW50aXR5UHJvcGVydGllcyxcblx0XHRcdFx0XHRpbmNsdWRlSGlkZGVuLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSBpZiAocHJvcGVydHkudGFyZ2V0VHlwZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdC8vIGhhbmRsZSBDb21wbGV4VHlwZSBwcm9wZXJ0aWVzXG5cdFx0XHRcdGxvY2FsU2VsZWN0aW9uRmllbGRzID0gX2dldFNlbGVjdGlvbkZpZWxkcyhcblx0XHRcdFx0XHRlbnRpdHlUeXBlLFxuXHRcdFx0XHRcdHByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRwcm9wZXJ0eS50YXJnZXRUeXBlLnByb3BlcnRpZXMsXG5cdFx0XHRcdFx0aW5jbHVkZUhpZGRlbixcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBuYXZpZ2F0aW9uUGF0aCA9IHByb3BlcnR5UGF0aC5pbmNsdWRlcyhcIi9cIilcblx0XHRcdFx0XHQ/IHByb3BlcnR5UGF0aFxuXHRcdFx0XHRcdFx0XHQuc3BsaXQoXCIvXCIpXG5cdFx0XHRcdFx0XHRcdC5zcGxpY2UoMCwgMSlcblx0XHRcdFx0XHRcdFx0LmpvaW4oXCIvXCIpXG5cdFx0XHRcdFx0OiBcIlwiO1xuXHRcdFx0XHRsb2NhbFNlbGVjdGlvbkZpZWxkcyA9IF9nZXRTZWxlY3Rpb25GaWVsZHMoZW50aXR5VHlwZSwgbmF2aWdhdGlvblBhdGgsIFtwcm9wZXJ0eV0sIGluY2x1ZGVIaWRkZW4sIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxlY3Rpb25GaWVsZHMgPSB7XG5cdFx0XHRcdC4uLnNlbGVjdGlvbkZpZWxkcyxcblx0XHRcdFx0Li4ubG9jYWxTZWxlY3Rpb25GaWVsZHNcblx0XHRcdH07XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHNlbGVjdGlvbkZpZWxkcztcbn07XG5cbi8qKlxuICogRW50ZXIgYWxsIERhdGFGaWVsZHMgb2YgYSBnaXZlbiBGaWVsZEdyb3VwIGludG8gdGhlIGZpbHRlckZhY2V0TWFwLlxuICpcbiAqIEBwYXJhbSB7QW5ub3RhdGlvblRlcm08RmllbGRHcm91cFR5cGU+fSBmaWVsZEdyb3VwXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgRmlsdGVyR3JvdXA+fSBUaGUgbWFwIG9mIGZhY2V0cyBmb3IgdGhlIGdpdmVuIGZpZWxkR3JvdXBcbiAqL1xuZnVuY3Rpb24gZ2V0RmllbGRHcm91cEZpbHRlckdyb3VwcyhmaWVsZEdyb3VwOiBBbm5vdGF0aW9uVGVybTxGaWVsZEdyb3VwVHlwZT4pOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJHcm91cD4ge1xuXHRjb25zdCBmaWx0ZXJGYWNldE1hcDogUmVjb3JkPHN0cmluZywgRmlsdGVyR3JvdXA+ID0ge307XG5cdGZpZWxkR3JvdXAuRGF0YS5mb3JFYWNoKChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRpZiAoZGF0YUZpZWxkLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFwiKSB7XG5cdFx0XHRmaWx0ZXJGYWNldE1hcFtkYXRhRmllbGQuVmFsdWUucGF0aF0gPSB7XG5cdFx0XHRcdGdyb3VwOiBmaWVsZEdyb3VwLmZ1bGx5UXVhbGlmaWVkTmFtZSxcblx0XHRcdFx0Z3JvdXBMYWJlbDpcblx0XHRcdFx0XHRjb21waWxlQmluZGluZyhcblx0XHRcdFx0XHRcdGFubm90YXRpb25FeHByZXNzaW9uKGZpZWxkR3JvdXAuTGFiZWwgfHwgZmllbGRHcm91cC5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbCB8fCBmaWVsZEdyb3VwLnF1YWxpZmllcilcblx0XHRcdFx0XHQpIHx8IGZpZWxkR3JvdXAucXVhbGlmaWVyXG5cdFx0XHR9O1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBmaWx0ZXJGYWNldE1hcDtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgYWxsIGxpc3QgcmVwb3J0IHRhYmxlcy5cbiAqIEBwYXJhbSB7TGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uW119IHZpZXdzIFRoZSBsaXN0IHJlcG9ydCB2aWV3cyBjb25maWd1cmVkIGluIHRoZSBtYW5pZmVzdFxuICogQHJldHVybnMge1RhYmxlVmlzdWFsaXphdGlvbltdfSBUaGUgbGlzdCByZXBvcnQgdGFibGVcbiAqL1xuZnVuY3Rpb24gZ2V0VGFibGVWaXN1YWxpemF0aW9ucyh2aWV3czogTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uW10pOiBUYWJsZVZpc3VhbGl6YXRpb25bXSB7XG5cdGNvbnN0IHRhYmxlczogVGFibGVWaXN1YWxpemF0aW9uW10gPSBbXTtcblx0dmlld3MuZm9yRWFjaChmdW5jdGlvbih2aWV3KSB7XG5cdFx0aWYgKCEodmlldyBhcyBDdXN0b21WaWV3RGVmaW5pdGlvbikudHlwZSkge1xuXHRcdFx0Y29uc3QgdmlzdWFsaXphdGlvbnMgPSAodmlldyBhcyBDb21iaW5lZFZpZXdEZWZpbml0aW9uKS5zZWNvbmRhcnlWaXN1YWxpemF0aW9uXG5cdFx0XHRcdD8gKHZpZXcgYXMgQ29tYmluZWRWaWV3RGVmaW5pdGlvbikuc2Vjb25kYXJ5VmlzdWFsaXphdGlvbi52aXN1YWxpemF0aW9uc1xuXHRcdFx0XHQ6ICh2aWV3IGFzIFNpbmdsZVZpZXdEZWZpbml0aW9uKS5wcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnM7XG5cblx0XHRcdHZpc3VhbGl6YXRpb25zLmZvckVhY2goZnVuY3Rpb24odmlzdWFsaXphdGlvbikge1xuXHRcdFx0XHRpZiAodmlzdWFsaXphdGlvbi50eXBlID09PSBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZSkge1xuXHRcdFx0XHRcdHRhYmxlcy5wdXNoKHZpc3VhbGl6YXRpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gdGFibGVzO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIEZpbHRlckJhciBzZWFyY2ggZmllbGQgaXMgaGlkZGVuIG9yIG5vdC5cbiAqXG4gKiBAcGFyYW0ge1RhYmxlVmlzdWFsaXphdGlvbltdfSBsaXN0UmVwb3J0VGFibGVzIFRoZSBsaXN0IHJlcG9ydCB0YWJsZXNcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtib29sZWFufSBUaGUgaW5mb3JtYXRpb24gaWYgdGhlIEZpbHRlckJhciBzZWFyY2ggZmllbGQgaXMgaGlkZGVuIG9yIG5vdFxuICovXG5mdW5jdGlvbiBnZXRGaWx0ZXJCYXJoaWRlQmFzaWNTZWFyY2gobGlzdFJlcG9ydFRhYmxlczogVGFibGVWaXN1YWxpemF0aW9uW10sIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBib29sZWFuIHtcblx0aWYgKFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucygpIHx8XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZVxuXHQpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHQvLyBUcmllcyB0byBmaW5kIGEgbm9uLWFuYWx5dGljYWwgdGFibGUgd2l0aCB0aGUgbWFpbiBlbnRpdHkgc2V0IChwYWdlIGVudGl0eSBzZXQpIGFzIGNvbGxlY3Rpb25cblx0Ly8gaWYgYXQgbGVhc3Qgb25lIHRhYmxlIG1hdGNoZXMgdGhlc2UgY29uZGl0aW9ucywgYmFzaWMgc2VhcmNoIGZpZWxkIG11c3QgYmUgZGlzcGxheWVkLlxuXHRjb25zdCBzQ29udGV4dFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCk7XG5cdHJldHVybiBjaGVja0FsbFRhYmxlRm9yRW50aXR5U2V0QXJlQW5hbHl0aWNhbChsaXN0UmVwb3J0VGFibGVzLCBzQ29udGV4dFBhdGgpO1xufVxuXG4vKipcbiAqIENoZWNrIHRoYXQgYWxsIHRoZSB0YWJsZXMgZm9yIGEgZGVkaWNhdGVkIGVudGl0eXNldCBhcmUgY29uZmlndXJlZCBhcyBhbmFseXRpY2FsIHRhYmxlLlxuICogQHBhcmFtIHtUYWJsZVZpc3VhbGl6YXRpb25bXX0gbGlzdFJlcG9ydFRhYmxlcyBMaXN0IFJlcG9ydCB0YWJsZXNcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZXh0UGF0aFxuICogQHJldHVybnMge2Jvb2xlYW59IElzIEZpbHRlckJhciBzZWFyY2ggZmllbGQgaGlkZGVuIG9yIG5vdFxuICovXG5mdW5jdGlvbiBjaGVja0FsbFRhYmxlRm9yRW50aXR5U2V0QXJlQW5hbHl0aWNhbChsaXN0UmVwb3J0VGFibGVzOiBUYWJsZVZpc3VhbGl6YXRpb25bXSwgY29udGV4dFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuXHRpZiAoY29udGV4dFBhdGggJiYgbGlzdFJlcG9ydFRhYmxlcy5sZW5ndGggPiAwKSB7XG5cdFx0cmV0dXJuIGxpc3RSZXBvcnRUYWJsZXMuZXZlcnkodmlzdWFsaXphdGlvbiA9PiB7XG5cdFx0XHRyZXR1cm4gdmlzdWFsaXphdGlvbi5lbmFibGVBbmFseXRpY3MgJiYgY29udGV4dFBhdGggPT09IHZpc3VhbGl6YXRpb24uYW5ub3RhdGlvbi5jb2xsZWN0aW9uO1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBHZXQgYWxsIFBhcmFtZXRlciBmaWx0ZXJGaWVsZHMgaW4gY2FzZSBvZiBhIHBhcmFtZXRlcml6ZWQgc2VydmljZS5cbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMge0ZpbHRlckZpZWxkW119IEFuIGFycmF5IG9mIHBhcmFtZXRlciBmaWx0ZXJmaWVsZHNcbiAqL1xuZnVuY3Rpb24gX2dldFBhcmFtZXRlckZpZWxkcyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogRmlsdGVyRmllbGRbXSB7XG5cdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0Y29uc3QgcGFyYW1ldGVyRW50aXR5VHlwZSA9IGRhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQuZW50aXR5VHlwZTtcblx0Y29uc3QgaXNQYXJhbWV0ZXJpemVkID0gISFwYXJhbWV0ZXJFbnRpdHlUeXBlLmFubm90YXRpb25zPy5Db21tb24/LlJlc3VsdENvbnRleHQ7XG5cdGNvbnN0IHBhcmFtZXRlckNvbnZlcnRlckNvbnRleHQgPVxuXHRcdGlzUGFyYW1ldGVyaXplZCAmJiBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3IoXCIvXCIgKyBkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0Lm5hbWUpO1xuXG5cdGNvbnN0IHBhcmFtZXRlckZpZWxkcyA9IChwYXJhbWV0ZXJDb252ZXJ0ZXJDb250ZXh0XG5cdFx0PyBwYXJhbWV0ZXJFbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMubWFwKGZ1bmN0aW9uKHByb3BlcnR5KSB7XG5cdFx0XHRcdHJldHVybiBfZ2V0RmlsdGVyRmllbGQoe30gYXMgUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+LCBwcm9wZXJ0eS5uYW1lLCBwYXJhbWV0ZXJDb252ZXJ0ZXJDb250ZXh0LCBwYXJhbWV0ZXJFbnRpdHlUeXBlKTtcblx0XHQgIH0pXG5cdFx0OiBbXSkgYXMgRmlsdGVyRmllbGRbXTtcblxuXHRyZXR1cm4gcGFyYW1ldGVyRmllbGRzO1xufVxuXG4vKipcbiAqIFJldHJpZXZlIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgc2VsZWN0aW9uIGZpZWxkcyB0aGF0IHdpbGwgYmUgdXNlZCB3aXRoaW4gdGhlIGZpbHRlciBiYXJcbiAqIFRoaXMgY29uZmlndXJhdGlvbiB0YWtlcyBpbnRvIGFjY291bnQgYW5ub3RhdGlvbiBhbmQgdGhlIHNlbGVjdGlvbiB2YXJpYW50cy5cbiAqXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSB7VGFibGVWaXN1YWxpemF0aW9uW119IGxyVGFibGVzXG4gKiBAcmV0dXJucyB7RmlsdGVyU2VsZWN0aW9uRmllbGRbXX0gQW4gYXJyYXkgb2Ygc2VsZWN0aW9uIGZpZWxkc1xuICovXG5cbmV4cG9ydCBjb25zdCBnZXRTZWxlY3Rpb25GaWVsZHMgPSBmdW5jdGlvbihjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LCBsclRhYmxlczogVGFibGVWaXN1YWxpemF0aW9uW10gPSBbXSk6IEZpbHRlckZpZWxkW10ge1xuXHQvLyBGZXRjaCBhbGwgc2VsZWN0aW9uVmFyaWFudHMgZGVmaW5lZCBpbiB0aGUgZGlmZmVyZW50IHZpc3VhbGl6YXRpb25zIGFuZCBkaWZmZXJlbnQgdmlld3MgKG11bHRpIHRhYmxlIG1vZGUpXG5cdGNvbnN0IHNlbGVjdGlvblZhcmlhbnRzOiBTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbltdID0gZ2V0U2VsZWN0aW9uVmFyaWFudHMobHJUYWJsZXMsIGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdC8vIGNyZWF0ZSBhIG1hcCBvZiBwcm9wZXJ0aWVzIHRvIGJlIHVzZWQgaW4gc2VsZWN0aW9uIHZhcmlhbnRzXG5cdGNvbnN0IGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSBnZXRFeGNsdWRlZEZpbHRlclByb3BlcnRpZXMoc2VsZWN0aW9uVmFyaWFudHMpO1xuXHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdGNvbnN0IGZpbHRlckZhY2V0cyA9IGVudGl0eVR5cGUuYW5ub3RhdGlvbnMuVUk/LkZpbHRlckZhY2V0cztcblx0bGV0IGZpbHRlckZhY2V0TWFwOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJHcm91cD4gPSB7fTtcblxuXHRjb25zdCBhRmllbGRHcm91cHMgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25zQnlUZXJtKFwiVUlcIiwgVUlBbm5vdGF0aW9uVGVybXMuRmllbGRHcm91cCk7XG5cblx0aWYgKGZpbHRlckZhY2V0cyA9PT0gdW5kZWZpbmVkIHx8IGZpbHRlckZhY2V0cy5sZW5ndGggPCAwKSB7XG5cdFx0Zm9yIChjb25zdCBpIGluIGFGaWVsZEdyb3Vwcykge1xuXHRcdFx0ZmlsdGVyRmFjZXRNYXAgPSB7XG5cdFx0XHRcdC4uLmZpbHRlckZhY2V0TWFwLFxuXHRcdFx0XHQuLi5nZXRGaWVsZEdyb3VwRmlsdGVyR3JvdXBzKGFGaWVsZEdyb3Vwc1tpXSBhcyBBbm5vdGF0aW9uVGVybTxGaWVsZEdyb3VwVHlwZT4pXG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRmaWx0ZXJGYWNldE1hcCA9IGZpbHRlckZhY2V0cy5yZWR1Y2UoKHByZXZpb3VzVmFsdWU6IFJlY29yZDxzdHJpbmcsIEZpbHRlckdyb3VwPiwgZmlsdGVyRmFjZXQ6IFJlZmVyZW5jZUZhY2V0VHlwZXMpID0+IHtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgKGZpbHRlckZhY2V0LlRhcmdldC4kdGFyZ2V0IGFzIEZpZWxkR3JvdXApLkRhdGEubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0cHJldmlvdXNWYWx1ZVsoKGZpbHRlckZhY2V0LlRhcmdldC4kdGFyZ2V0IGFzIEZpZWxkR3JvdXApLkRhdGFbaV0gYXMgRGF0YUZpZWxkVHlwZXMpLlZhbHVlLnBhdGhdID0ge1xuXHRcdFx0XHRcdGdyb3VwOiBmaWx0ZXJGYWNldD8uSUQ/LnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0Z3JvdXBMYWJlbDogZmlsdGVyRmFjZXQ/LkxhYmVsPy50b1N0cmluZygpXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcHJldmlvdXNWYWx1ZTtcblx0XHR9LCB7fSk7XG5cdH1cblxuXHRsZXQgYVNlbGVjdE9wdGlvbnM6IGFueVtdID0gW107XG5cdGNvbnN0IHNlbGVjdGlvblZhcmlhbnQgPSBnZXRTZWxlY3Rpb25WYXJpYW50KGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRpZiAoc2VsZWN0aW9uVmFyaWFudCkge1xuXHRcdGFTZWxlY3RPcHRpb25zID0gc2VsZWN0aW9uVmFyaWFudC5TZWxlY3RPcHRpb25zO1xuXHR9XG5cblx0Ly8gY3JlYXRlIGEgbWFwIG9mIGFsbCBwb3RlbnRpYWwgZmlsdGVyIGZpZWxkcyBiYXNlZCBvbi4uLlxuXHRjb25zdCBmaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiA9IHtcblx0XHQvLyAuLi5ub24gaGlkZGVuIHByb3BlcnRpZXMgb2YgdGhlIGVudGl0eVxuXHRcdC4uLl9nZXRTZWxlY3Rpb25GaWVsZHMoZW50aXR5VHlwZSwgXCJcIiwgZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLCBmYWxzZSwgY29udmVydGVyQ29udGV4dCksXG5cdFx0Ly8gLi4uYWRkaXRpb25hbCBtYW5pZmVzdCBkZWZpbmVkIG5hdmlnYXRpb24gcHJvcGVydGllc1xuXHRcdC4uLl9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGgoXG5cdFx0XHRlbnRpdHlUeXBlLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRGaWx0ZXJDb25maWd1cmF0aW9uKCkubmF2aWdhdGlvblByb3BlcnRpZXMsXG5cdFx0XHRmYWxzZSxcblx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHQpXG5cdH07XG5cblx0Ly9GaWx0ZXJzIHdoaWNoIGhhcyB0byBiZSBhZGRlZCB3aGljaCBpcyBwYXJ0IG9mIFNWL0RlZmF1bHQgYW5ub3RhdGlvbnMgYnV0IG5vdCBwcmVzZW50IGluIHRoZSBTZWxlY3Rpb25GaWVsZHNcblx0Y29uc3QgZGVmYXVsdEZpbHRlcnMgPSBfZ2V0RGVmYXVsdEZpbHRlckZpZWxkcyhmaWx0ZXJGaWVsZHMsIGFTZWxlY3RPcHRpb25zLCBlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0LCBleGNsdWRlZEZpbHRlclByb3BlcnRpZXMpO1xuXHRjb25zdCBwYXJhbWV0ZXJGaWVsZHMgPSBfZ2V0UGFyYW1ldGVyRmllbGRzKGNvbnZlcnRlckNvbnRleHQpO1xuXHQvLyBmaW5hbGx5IGNyZWF0ZSBmaW5hbCBsaXN0IG9mIGZpbHRlciBmaWVsZHMgYnkgYWRkaW5nIHRoZSBTZWxlY3Rpb25GaWVsZHMgZmlyc3QgKG9yZGVyIG1hdHRlcnMpLi4uXG5cdGxldCBhbGxGaWx0ZXJzID0gcGFyYW1ldGVyRmllbGRzXG5cdFx0LmNvbmNhdChcblx0XHRcdGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5TZWxlY3Rpb25GaWVsZHM/LnJlZHVjZSgoc2VsZWN0aW9uRmllbGRzOiBGaWx0ZXJGaWVsZFtdLCBzZWxlY3Rpb25GaWVsZCkgPT4ge1xuXHRcdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSBzZWxlY3Rpb25GaWVsZC52YWx1ZTtcblx0XHRcdFx0aWYgKCEocHJvcGVydHlQYXRoIGluIGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcykpIHtcblx0XHRcdFx0XHRjb25zdCBmaWx0ZXJGaWVsZDogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQgPSBfZ2V0RmlsdGVyRmllbGQoZmlsdGVyRmllbGRzLCBwcm9wZXJ0eVBhdGgsIGNvbnZlcnRlckNvbnRleHQsIGVudGl0eVR5cGUpO1xuXHRcdFx0XHRcdGlmIChmaWx0ZXJGaWVsZCkge1xuXHRcdFx0XHRcdFx0ZmlsdGVyRmllbGQuZ3JvdXAgPSBcIlwiO1xuXHRcdFx0XHRcdFx0ZmlsdGVyRmllbGQuZ3JvdXBMYWJlbCA9IFwiXCI7XG5cdFx0XHRcdFx0XHRzZWxlY3Rpb25GaWVsZHMucHVzaChmaWx0ZXJGaWVsZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBzZWxlY3Rpb25GaWVsZHM7XG5cdFx0XHR9LCBbXSkgfHwgW11cblx0XHQpXG5cdFx0Ly8gVG8gYWRkIHRoZSBGaWx0ZXJGaWVsZCB3aGljaCBpcyBub3QgcGFydCBvZiB0aGUgU2VsZWN0aW9uIEZpZWxkcyBidXQgdGhlIHByb3BlcnR5IGlzIG1lbnRpb25lZCBpbiB0aGUgU2VsZWN0aW9uIFZhcmlhbnRcblx0XHQuY29uY2F0KGRlZmF1bHRGaWx0ZXJzIHx8IFtdKVxuXHRcdC8vIC4uLmFuZCBhZGRpbmcgcmVtYWluaW5nIGZpbHRlciBmaWVsZHMsIHRoYXQgYXJlIG5vdCB1c2VkIGluIGEgU2VsZWN0aW9uVmFyaWFudCAob3JkZXIgZG9lc24ndCBtYXR0ZXIpXG5cdFx0LmNvbmNhdChcblx0XHRcdE9iamVjdC5rZXlzKGZpbHRlckZpZWxkcylcblx0XHRcdFx0LmZpbHRlcihwcm9wZXJ0eVBhdGggPT4gIShwcm9wZXJ0eVBhdGggaW4gZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzKSlcblx0XHRcdFx0Lm1hcChwcm9wZXJ0eVBhdGggPT4ge1xuXHRcdFx0XHRcdHJldHVybiBPYmplY3QuYXNzaWduKGZpbHRlckZpZWxkc1twcm9wZXJ0eVBhdGhdLCBmaWx0ZXJGYWNldE1hcFtwcm9wZXJ0eVBhdGhdKTtcblx0XHRcdFx0fSlcblx0XHQpO1xuXHRjb25zdCBzQ29udGV4dFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCk7XG5cblx0Ly9pZiBhbGwgdGFibGVzIGFyZSBhbmFseXRpY2FsIHRhYmxlcyBcImFnZ3JlZ2F0YWJsZVwiIHByb3BlcnRpZXMgbXVzdCBiZSBleGNsdWRlZFxuXHRpZiAoY2hlY2tBbGxUYWJsZUZvckVudGl0eVNldEFyZUFuYWx5dGljYWwobHJUYWJsZXMsIHNDb250ZXh0UGF0aCkpIHtcblx0XHQvLyBDdXJyZW50bHkgYWxsIGFncmVnYXRlcyBhcmUgcm9vdCBlbnRpdHkgcHJvcGVydGllcyAobm8gcHJvcGVydGllcyBjb21pbmcgZnJvbSBuYXZpZ2F0aW9uKSBhbmQgYWxsXG5cdFx0Ly8gdGFibGVzIHdpdGggc2FtZSBlbnRpdHlTZXQgZ2V0cyBzYW1lIGFnZ3JlYWd0ZSBjb25maWd1cmF0aW9uIHRoYXQncyB3aHkgd2UgY2FuIHVzZSBmaXJzdCB0YWJsZSBpbnRvXG5cdFx0Ly8gTFIgdG8gZ2V0IGFnZ3JlZ2F0ZXMgKHdpdGhvdXQgY3VycmVuY3kvdW5pdCBwcm9wZXJ0aWVzIHNpbmNlIHdlIGV4cGVjdCB0byBiZSBhYmxlIHRvIGZpbHRlciB0aGVtKS5cblx0XHRjb25zdCBhZ2dyZWdhdGVzID0gbHJUYWJsZXNbMF0uYWdncmVnYXRlcztcblx0XHRpZiAoYWdncmVnYXRlcykge1xuXHRcdFx0Y29uc3QgYWdncmVnYXRhYmxlUHJvcGVydGllczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhhZ2dyZWdhdGVzKS5tYXAoYWdncmVnYXRlS2V5ID0+IGFnZ3JlZ2F0ZXNbYWdncmVnYXRlS2V5XS5yZWxhdGl2ZVBhdGgpO1xuXHRcdFx0YWxsRmlsdGVycyA9IGFsbEZpbHRlcnMuZmlsdGVyKGZpbHRlckZpZWxkID0+IHtcblx0XHRcdFx0cmV0dXJuIGFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMuaW5kZXhPZihmaWx0ZXJGaWVsZC5rZXkpID09PSAtMTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHNlbGVjdGlvbkZpZWxkcyA9IGluc2VydEN1c3RvbUVsZW1lbnRzKGFsbEZpbHRlcnMsIGdldE1hbmlmZXN0RmlsdGVyRmllbGRzKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpLCB7XG5cdFx0XCJhdmFpbGFiaWxpdHlcIjogXCJvdmVyd3JpdGVcIixcblx0XHRsYWJlbDogXCJvdmVyd3JpdGVcIixcblx0XHRwb3NpdGlvbjogXCJvdmVyd3JpdGVcIixcblx0XHR0ZW1wbGF0ZTogXCJvdmVyd3JpdGVcIixcblx0XHRzZXR0aW5nczogXCJvdmVyd3JpdGVcIixcblx0XHR2aXN1YWxGaWx0ZXI6IFwib3ZlcndyaXRlXCJcblx0fSk7XG5cdHJldHVybiBzZWxlY3Rpb25GaWVsZHM7XG59O1xuXG5jb25zdCBnZXRWaXN1YWxGaWx0ZXJzID0gZnVuY3Rpb24oXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHNQcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0RmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZE1hbmlmZXN0Q29uZmlndXJhdGlvbj5cbik6IFZpc3VhbEZpbHRlcnMgfCB1bmRlZmluZWQge1xuXHRjb25zdCB2aXN1YWxGaWx0ZXI6IFZpc3VhbEZpbHRlcnMgPSB7fTtcblx0ZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LlNlbGVjdGlvbkZpZWxkcz8ubWFwKChzZWxlY3Rpb25GaWVsZDogYW55KSA9PiB7XG5cdFx0aWYgKHNQcm9wZXJ0eVBhdGggPT09IHNlbGVjdGlvbkZpZWxkPy52YWx1ZSkge1xuXHRcdFx0Y29uc3Qgb1Zpc3VhbEZpbHRlcjogRmlsdGVyRmllbGRNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSBGaWx0ZXJGaWVsZHNbc1Byb3BlcnR5UGF0aF07XG5cdFx0XHRpZiAob1Zpc3VhbEZpbHRlciAmJiBvVmlzdWFsRmlsdGVyPy52aXN1YWxGaWx0ZXIgJiYgb1Zpc3VhbEZpbHRlcj8udmlzdWFsRmlsdGVyPy52YWx1ZUxpc3QpIHtcblx0XHRcdFx0Y29uc3Qgb1ZGUGF0aCA9IG9WaXN1YWxGaWx0ZXI/LnZpc3VhbEZpbHRlcj8udmFsdWVMaXN0O1xuXHRcdFx0XHRjb25zdCBhbm5vdGF0aW9uUXVhbGlmaWVyU3BsaXQgPSBvVkZQYXRoLnNwbGl0KFwiI1wiKTtcblx0XHRcdFx0Y29uc3QgcXVhbGlmaWVyVkwgPVxuXHRcdFx0XHRcdGFubm90YXRpb25RdWFsaWZpZXJTcGxpdC5sZW5ndGggPiAxID8gXCJWYWx1ZUxpc3QjXCIgKyBhbm5vdGF0aW9uUXVhbGlmaWVyU3BsaXRbMV0gOiBhbm5vdGF0aW9uUXVhbGlmaWVyU3BsaXRbMF07XG5cdFx0XHRcdGNvbnN0IHZhbHVlTGlzdDogYW55ID0gc2VsZWN0aW9uRmllbGQuJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbltxdWFsaWZpZXJWTF07XG5cdFx0XHRcdGlmICh2YWx1ZUxpc3QpIHtcblx0XHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uUGF0aCA9IHZhbHVlTGlzdD8uQ29sbGVjdGlvblBhdGg7XG5cdFx0XHRcdFx0Y29uc3QgY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKFxuXHRcdFx0XHRcdFx0XCIvXCIgKyAoY29sbGVjdGlvblBhdGggfHwgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8ubmFtZSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGNvbnN0IHZhbHVlTGlzdFBhcmFtcyA9IHZhbHVlTGlzdD8uUGFyYW1ldGVycztcblx0XHRcdFx0XHRsZXQgb3V0UGFyYW1ldGVyOiBhbnk7XG5cdFx0XHRcdFx0Y29uc3QgaW5QYXJhbWV0ZXJzOiBBcnJheTxvYmplY3Q+ID0gW107XG5cdFx0XHRcdFx0aWYgKHZhbHVlTGlzdFBhcmFtcykge1xuXHRcdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZUxpc3RQYXJhbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgbG9jYWxEYXRhUHJvcGVydHkgPSAodmFsdWVMaXN0UGFyYW1zW2ldIGFzIGFueSkuTG9jYWxEYXRhUHJvcGVydHk/LnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRjb25zdCB2YWx1ZUxpc3RQcm9wZXJ0eSA9ICh2YWx1ZUxpc3RQYXJhbXNbaV0gYXMgYW55KS5WYWx1ZUxpc3RQcm9wZXJ0eTtcblx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdCh2YWx1ZUxpc3RQYXJhbXNbaV0/LiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dFwiIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZUxpc3RQYXJhbXNbaV0/LiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RQYXJhbWV0ZXJPdXRcIikgJiZcblx0XHRcdFx0XHRcdFx0XHRzUHJvcGVydHlQYXRoID09PSBsb2NhbERhdGFQcm9wZXJ0eVxuXHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRvdXRQYXJhbWV0ZXIgPSB2YWx1ZUxpc3RQYXJhbXNbaV07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdCh2YWx1ZUxpc3RQYXJhbXNbaV0/LiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dFwiIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZUxpc3RQYXJhbXNbaV0/LiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RQYXJhbWV0ZXJJblwiKSAmJlxuXHRcdFx0XHRcdFx0XHRcdHNQcm9wZXJ0eVBhdGggIT09IGxvY2FsRGF0YVByb3BlcnR5XG5cdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGJOb3RGaWx0ZXJhYmxlID0gaXNQcm9wZXJ0eUZpbHRlcmFibGUoY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LCB2YWx1ZUxpc3RQcm9wZXJ0eSk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFiTm90RmlsdGVyYWJsZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aW5QYXJhbWV0ZXJzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRsb2NhbERhdGFQcm9wZXJ0eTogbG9jYWxEYXRhUHJvcGVydHksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlTGlzdFByb3BlcnR5OiB2YWx1ZUxpc3RQcm9wZXJ0eVxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChpblBhcmFtZXRlcnMgJiYgaW5QYXJhbWV0ZXJzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0aW5QYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24ob0luUGFyYW1ldGVyOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgbWFpbkVudGl0eVNldEluTWFwcGluZ0FsbG93ZWRFeHByZXNzaW9uID0gY29tcGlsZUJpbmRpbmcoXG5cdFx0XHRcdFx0XHRcdFx0Y2hlY2tGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zKFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcihjb252ZXJ0ZXJDb250ZXh0LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgob0luUGFyYW1ldGVyPy5sb2NhbERhdGFQcm9wZXJ0eSkpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0XHRcdFx0XHRcdFx0XHRbXCJTaW5nbGVWYWx1ZVwiXVxuXHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgdmFsdWVMaXN0RW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24gPSBjb21waWxlQmluZGluZyhcblx0XHRcdFx0XHRcdFx0XHRjaGVja0ZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMoXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmdldENvbnZlcnRlckNvbnRleHRGb3IoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgob0luUGFyYW1ldGVyPy52YWx1ZUxpc3RQcm9wZXJ0eSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdFx0XHRcdFx0XHRcdFx0W1wiU2luZ2xlVmFsdWVcIl1cblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZUxpc3RFbnRpdHlTZXRJbk1hcHBpbmdBbGxvd2VkRXhwcmVzc2lvbiA9PT0gXCJ0cnVlXCIgJiZcblx0XHRcdFx0XHRcdFx0XHRtYWluRW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24gPT09IFwiZmFsc2VcIlxuXHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdFx0XHRcdFx0XHRcIkZpbHRlclJlc3RyaWN0aW9ucyBvZiBcIiArIHNQcm9wZXJ0eVBhdGggKyBcIiBpbiBNYWluRW50aXR5U2V0IGFuZCBWYWx1ZUxpc3RFbnRpdHlTZXQgYXJlIGRpZmZlcmVudFwiXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IHB2UXVhbGlmaWVyID0gdmFsdWVMaXN0Py5QcmVzZW50YXRpb25WYXJpYW50UXVhbGlmaWVyO1xuXHRcdFx0XHRcdGNvbnN0IHN2UXVhbGlmaWVyID0gdmFsdWVMaXN0Py5TZWxlY3Rpb25WYXJpYW50UXVhbGlmaWVyO1xuXHRcdFx0XHRcdGNvbnN0IHB2QW5ub3RhdGlvbjogYW55ID0gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0Py5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihcblx0XHRcdFx0XHRcdFwiQFVJLlByZXNlbnRhdGlvblZhcmlhbnQjXCIgKyBwdlF1YWxpZmllclxuXHRcdFx0XHRcdCk/LmFubm90YXRpb247XG5cdFx0XHRcdFx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoXG5cdFx0XHRcdFx0XHRjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLFxuXHRcdFx0XHRcdFx0Y29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRpZiAoIWFnZ3JlZ2F0aW9uSGVscGVyLmlzQW5hbHl0aWNzU3VwcG9ydGVkKCkpIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKHB2QW5ub3RhdGlvbikge1xuXHRcdFx0XHRcdFx0Y29uc3QgYVZpc3VhbGl6YXRpb25zID0gcHZBbm5vdGF0aW9uPy5WaXN1YWxpemF0aW9ucztcblx0XHRcdFx0XHRcdGNvbnN0IGNvbnRleHRQYXRoID0gXCIvXCIgKyBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQ/LmdldEVudGl0eVNldCgpPy5uYW1lO1xuXHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLmNvbnRleHRQYXRoID0gY29udGV4dFBhdGg7XG5cdFx0XHRcdFx0XHRsZXQgY2hhcnRBbm5vdGF0aW9uO1xuXHRcdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhVmlzdWFsaXphdGlvbnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0aWYgKGFWaXN1YWxpemF0aW9uc1tpXS4kdGFyZ2V0Py50ZXJtID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0XCIpIHtcblx0XHRcdFx0XHRcdFx0XHRjaGFydEFubm90YXRpb24gPSBhVmlzdWFsaXphdGlvbnNbaV07XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChjaGFydEFubm90YXRpb24pIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgX2JnZXRWRkFnZ3JlZ2F0aW9uOiBib29sZWFuIHwgdW5kZWZpbmVkID0gX2NoZWNrVkZBZ2dyZWdhdGlvbihcblx0XHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdFx0Y2hhcnRBbm5vdGF0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdGFnZ3JlZ2F0aW9uSGVscGVyXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdGlmICghX2JnZXRWRkFnZ3JlZ2F0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGJEaW1lbnNpb25IaWRkZW46IGJvb2xlYW4gPSBjaGFydEFubm90YXRpb24/LiR0YXJnZXQ/LkRpbWVuc2lvbnNbMF0/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGJEaW1lbnNpb25IaWRkZW5GaWx0ZXI6IGJvb2xlYW4gPSBjaGFydEFubm90YXRpb24/LiR0YXJnZXQ/LkRpbWVuc2lvbnNbMF0/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5VST8uSGlkZGVuRmlsdGVyPy52YWx1ZU9mKCk7XG5cdFx0XHRcdFx0XHRcdGlmIChiRGltZW5zaW9uSGlkZGVuID09PSB0cnVlIHx8IGJEaW1lbnNpb25IaWRkZW5GaWx0ZXIgPT09IHRydWUpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGFWaXN1YWxpemF0aW9ucyAmJiBhVmlzdWFsaXphdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuY2hhcnRBbm5vdGF0aW9uID0gY2hhcnRBbm5vdGF0aW9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdD8gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0Py5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2hhcnRBbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSArIFwiLyRBbm5vdGF0aW9uUGF0aC9cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIucHJlc2VudGF0aW9uQW5ub3RhdGlvbiA9IHB2QW5ub3RhdGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ/IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dD8uZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChwdkFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lICsgXCIvXCIpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnZpc3VhbEZpbHRlcklkID0gVmlzdWFsRmlsdGVySUQoY2hhcnRBbm5vdGF0aW9uPy4kdGFyZ2V0Py5EaW1lbnNpb25zWzBdPy52YWx1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIub3V0UGFyYW1ldGVyID0gb3V0UGFyYW1ldGVyPy5Mb2NhbERhdGFQcm9wZXJ0eT8udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuaW5QYXJhbWV0ZXJzID0gaW5QYXJhbWV0ZXJzO1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgYklzUmFuZ2UgPSBjaGVja0ZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcihjb252ZXJ0ZXJDb250ZXh0LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgoc1Byb3BlcnR5UGF0aCkpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0W1wiU2luZ2xlUmFuZ2VcIiwgXCJNdWx0aVJhbmdlXCJdXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoY29tcGlsZUJpbmRpbmcoYklzUmFuZ2UpID09PSBcInRydWVcIikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJSYW5nZSBBbGxvd2VkRXhwcmVzc2lvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciB2aXN1YWwgZmlsdGVyc1wiKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgYklzTWFpbkVudGl0eVNldFNpbmdsZVNlbGVjdGlvbjogYW55ID0gY2hlY2tGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0LmdldENvbnZlcnRlckNvbnRleHRGb3IoY29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKHNQcm9wZXJ0eVBhdGgpKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFtcIlNpbmdsZVZhbHVlXCJdXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLm11bHRpcGxlU2VsZWN0aW9uQWxsb3dlZCA9IGNvbXBpbGVCaW5kaW5nKCFiSXNNYWluRW50aXR5U2V0U2luZ2xlU2VsZWN0aW9uLnZhbHVlKSBhcyBhbnk7XG5cdFx0XHRcdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIucmVxdWlyZWQgPSBnZXRJc1JlcXVpcmVkKGNvbnZlcnRlckNvbnRleHQsIHNQcm9wZXJ0eVBhdGgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHN2UXVhbGlmaWVyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHN2QW5ub3RhdGlvbjogYW55ID0gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0Py5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcIkBVSS5TZWxlY3Rpb25WYXJpYW50I1wiICsgc3ZRdWFsaWZpZXJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KT8uYW5ub3RhdGlvbjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uID0gc3ZBbm5vdGF0aW9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PyBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQ/LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHN2QW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUgKyBcIi9cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdFx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5IaWdoLCBJc3N1ZVR5cGUuTUFMRk9STUVEX1ZJU1VBTEZJTFRFUlMuQ0hBUlQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuSGlnaCwgSXNzdWVUeXBlLk1BTEZPUk1FRF9WSVNVQUxGSUxURVJTLlBSRVNFTlRBVElPTlZBUklBTlQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5IaWdoLCBJc3N1ZVR5cGUuTUFMRk9STUVEX1ZJU1VBTEZJTFRFUlMuVkFMVUVMSVNUKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuTWFuaWZlc3QsIElzc3VlU2V2ZXJpdHkuSGlnaCwgSXNzdWVUeXBlLk1BTEZPUk1FRF9WSVNVQUxGSUxURVJTLlZBTFVFTElTVCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblx0aWYgKE9iamVjdC5rZXlzKHZpc3VhbEZpbHRlcikubGVuZ3RoID4gMSkge1xuXHRcdHJldHVybiB2aXN1YWxGaWx0ZXI7XG5cdH1cbn07XG5cbi8qKlxuICogQ2hlY2tzIHRoYXQgbWVhc3VyZXMgYW5kIGRpbWVuc2lvbnMgb2YgdGhlIHZpc3VhbCBmaWx0ZXIgY2hhcnQgY2FuIGJlIGFnZ3JlZ2F0ZWQgYW5kIGdyb3VwZWQuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBjaGFydEFubm90YXRpb24gVGhlIGNoYXJ0IGFubm90YXRpb25cbiAqIEBwYXJhbSBhZ2dyZWdhdGlvbkhlbHBlciBUaGUgYWdncmVnYXRpb24gaGVscGVyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbiB8IHVuZGVmaW5lZCB9XG4gKi9cblxuY29uc3QgX2NoZWNrVkZBZ2dyZWdhdGlvbiA9IGZ1bmN0aW9uKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRjaGFydEFubm90YXRpb246IGFueSxcblx0YWdncmVnYXRpb25IZWxwZXI6IGFueVxuKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG5cdGxldCBzTWVhc3VyZVBhdGgsIGJHcm91cGFibGUsIGJBZ2dyZWdhdGFibGU7XG5cdGNvbnN0IHNNZWFzdXJlOiBzdHJpbmcgPSBjaGFydEFubm90YXRpb24/LiR0YXJnZXQ/Lk1lYXN1cmVzWzBdPy52YWx1ZTtcblx0Y29uc3Qgc0RpbWVuc2lvbjogc3RyaW5nID0gY2hhcnRBbm5vdGF0aW9uPy4kdGFyZ2V0Py5EaW1lbnNpb25zWzBdPy52YWx1ZTtcblx0Y29uc3QgY3VzdG9tQWdncmVnYXRlcyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zKCk7XG5cdGNvbnN0IGFUcmFuc0FnZ3JlZ2F0aW9ucyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbnNCeVRlcm0oXG5cdFx0XCJBbmFseXRpY3NcIixcblx0XHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkFuYWx5dGljcy52MS5BZ2dyZWdhdGVkUHJvcGVydGllc1wiLFxuXHRcdFtjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eUNvbnRhaW5lcigpLCBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKV1cblx0KTtcblx0aWYgKGN1c3RvbUFnZ3JlZ2F0ZXNbc01lYXN1cmVdKSB7XG5cdFx0c01lYXN1cmVQYXRoID0gc01lYXN1cmU7XG5cdH0gZWxzZSBpZiAoYVRyYW5zQWdncmVnYXRpb25zICYmIGFUcmFuc0FnZ3JlZ2F0aW9uc1swXSkge1xuXHRcdGNvbnN0IGFBZ2dyZWdhdGlvbnMgPSBhVHJhbnNBZ2dyZWdhdGlvbnNbMF07XG5cdFx0YUFnZ3JlZ2F0aW9ucy5zb21lKGZ1bmN0aW9uKG9BZ2dyZWdhdGU6IGFueSkge1xuXHRcdFx0aWYgKG9BZ2dyZWdhdGUuTmFtZSA9PT0gc01lYXN1cmUpIHtcblx0XHRcdFx0c01lYXN1cmVQYXRoID0gb0FnZ3JlZ2F0ZT8uQWdncmVnYXRhYmxlUHJvcGVydHkudmFsdWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0Y29uc3QgYUFnZ3JlZ2F0YWJsZVByb3BzRnJvbUNvbnRhaW5lciA9IChjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpPy5hbm5vdGF0aW9ucz8uQWdncmVnYXRpb24/LkFwcGx5U3VwcG9ydGVkXG5cdFx0Py5BZ2dyZWdhdGFibGVQcm9wZXJ0aWVzIHx8IFtdKSBhcyBhbnlbXTtcblx0Y29uc3QgYUdyb3VwYWJsZVByb3BzRnJvbUNvbnRhaW5lciA9IChjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpPy5hbm5vdGF0aW9ucz8uQWdncmVnYXRpb24/LkFwcGx5U3VwcG9ydGVkPy5Hcm91cGFibGVQcm9wZXJ0aWVzIHx8XG5cdFx0W10pIGFzIGFueVtdO1xuXHRpZiAoYUFnZ3JlZ2F0YWJsZVByb3BzRnJvbUNvbnRhaW5lciAmJiBhQWdncmVnYXRhYmxlUHJvcHNGcm9tQ29udGFpbmVyLmxlbmd0aCkge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYUFnZ3JlZ2F0YWJsZVByb3BzRnJvbUNvbnRhaW5lci5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKGFBZ2dyZWdhdGFibGVQcm9wc0Zyb21Db250YWluZXJbaV0/LlByb3BlcnR5Py52YWx1ZSA9PT0gc01lYXN1cmVQYXRoKSB7XG5cdFx0XHRcdGJBZ2dyZWdhdGFibGUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRpZiAoYUdyb3VwYWJsZVByb3BzRnJvbUNvbnRhaW5lciAmJiBhR3JvdXBhYmxlUHJvcHNGcm9tQ29udGFpbmVyLmxlbmd0aCkge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYUdyb3VwYWJsZVByb3BzRnJvbUNvbnRhaW5lci5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKGFHcm91cGFibGVQcm9wc0Zyb21Db250YWluZXJbaV0/LnZhbHVlID09PSBzRGltZW5zaW9uKSB7XG5cdFx0XHRcdGJHcm91cGFibGUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gYkFnZ3JlZ2F0YWJsZSAmJiBiR3JvdXBhYmxlO1xufTtcblxuY29uc3QgX2dldERlZmF1bHRGaWx0ZXJGaWVsZHMgPSBmdW5jdGlvbihcblx0ZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4sXG5cdGFTZWxlY3RPcHRpb25zOiBhbnlbXSxcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0ZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPlxuKTogRmlsdGVyRmllbGRbXSB7XG5cdGNvbnN0IHNlbGVjdGlvbkZpZWxkczogRmlsdGVyRmllbGRbXSA9IFtdO1xuXHRjb25zdCBVSVNlbGVjdGlvbkZpZWxkczogYW55ID0ge307XG5cdGNvbnN0IHByb3BlcnRpZXMgPSBlbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXM7XG5cdC8vIFVzaW5nIGVudGl0eVR5cGUgaW5zdGVhZCBvZiBlbnRpdHlTZXRcblx0ZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LlNlbGVjdGlvbkZpZWxkcz8uZm9yRWFjaChTZWxlY3Rpb25GaWVsZCA9PiB7XG5cdFx0VUlTZWxlY3Rpb25GaWVsZHNbU2VsZWN0aW9uRmllbGQudmFsdWVdID0gdHJ1ZTtcblx0fSk7XG5cdGlmIChhU2VsZWN0T3B0aW9ucyAmJiBhU2VsZWN0T3B0aW9ucy5sZW5ndGggPiAwKSB7XG5cdFx0YVNlbGVjdE9wdGlvbnM/LmZvckVhY2goKHNlbGVjdE9wdGlvbjogU2VsZWN0T3B0aW9uVHlwZSkgPT4ge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlOYW1lOiBhbnkgPSBzZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lO1xuXHRcdFx0Y29uc3Qgc1Byb3BlcnR5UGF0aDogc3RyaW5nID0gcHJvcGVydHlOYW1lLnZhbHVlO1xuXHRcdFx0Y29uc3QgVUlTZWxlY3Rpb25GaWVsZHM6IGFueSA9IHt9O1xuXHRcdFx0ZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LlNlbGVjdGlvbkZpZWxkcz8uZm9yRWFjaChTZWxlY3Rpb25GaWVsZCA9PiB7XG5cdFx0XHRcdFVJU2VsZWN0aW9uRmllbGRzW1NlbGVjdGlvbkZpZWxkLnZhbHVlXSA9IHRydWU7XG5cdFx0XHR9KTtcblx0XHRcdGlmICghKHNQcm9wZXJ0eVBhdGggaW4gZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzKSkge1xuXHRcdFx0XHRpZiAoIShzUHJvcGVydHlQYXRoIGluIFVJU2VsZWN0aW9uRmllbGRzKSkge1xuXHRcdFx0XHRcdGNvbnN0IEZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCA9IF9nZXRGaWx0ZXJGaWVsZChmaWx0ZXJGaWVsZHMsIHNQcm9wZXJ0eVBhdGgsIGNvbnZlcnRlckNvbnRleHQsIGVudGl0eVR5cGUpO1xuXHRcdFx0XHRcdGlmIChGaWx0ZXJGaWVsZCkge1xuXHRcdFx0XHRcdFx0c2VsZWN0aW9uRmllbGRzLnB1c2goRmlsdGVyRmllbGQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKHByb3BlcnRpZXMpIHtcblx0XHRwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5OiBQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0Y29uc3QgZGVmYXVsdEZpbHRlclZhbHVlID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uRmlsdGVyRGVmYXVsdFZhbHVlO1xuXHRcdFx0Y29uc3QgUHJvcGVydHlQYXRoID0gcHJvcGVydHkubmFtZTtcblx0XHRcdGlmICghKFByb3BlcnR5UGF0aCBpbiBleGNsdWRlZEZpbHRlclByb3BlcnRpZXMpKSB7XG5cdFx0XHRcdGlmIChkZWZhdWx0RmlsdGVyVmFsdWUgJiYgIShQcm9wZXJ0eVBhdGggaW4gVUlTZWxlY3Rpb25GaWVsZHMpKSB7XG5cdFx0XHRcdFx0Y29uc3QgRmlsdGVyRmllbGQ6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkID0gX2dldEZpbHRlckZpZWxkKGZpbHRlckZpZWxkcywgUHJvcGVydHlQYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBlbnRpdHlUeXBlKTtcblx0XHRcdFx0XHRpZiAoRmlsdGVyRmllbGQpIHtcblx0XHRcdFx0XHRcdHNlbGVjdGlvbkZpZWxkcy5wdXNoKEZpbHRlckZpZWxkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gc2VsZWN0aW9uRmllbGRzO1xufTtcblxuY29uc3QgX2dldEZpbHRlckZpZWxkID0gZnVuY3Rpb24oXG5cdGZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+LFxuXHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZVxuKTogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQge1xuXHRsZXQgZmlsdGVyRmllbGQ6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkID0gZmlsdGVyRmllbGRzW3Byb3BlcnR5UGF0aF07XG5cdGlmIChmaWx0ZXJGaWVsZCkge1xuXHRcdGRlbGV0ZSBmaWx0ZXJGaWVsZHNbcHJvcGVydHlQYXRoXTtcblx0fSBlbHNlIHtcblx0XHRmaWx0ZXJGaWVsZCA9IF9jcmVhdGVGaWx0ZXJTZWxlY3Rpb25GaWVsZChlbnRpdHlUeXBlLCBlbnRpdHlUeXBlLnJlc29sdmVQYXRoKHByb3BlcnR5UGF0aCksIHByb3BlcnR5UGF0aCwgdHJ1ZSwgY29udmVydGVyQ29udGV4dCk7XG5cdH1cblx0aWYgKCFmaWx0ZXJGaWVsZCkge1xuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGlhZ25vc3RpY3MoKS5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuSGlnaCwgSXNzdWVUeXBlLk1JU1NJTkdfU0VMRUNUSU9ORklFTEQpO1xuXHR9XG5cdC8vIGRlZmluZWQgU2VsZWN0aW9uRmllbGRzIGFyZSBhdmFpbGFibGUgYnkgZGVmYXVsdFxuXHRpZiAoZmlsdGVyRmllbGQpIHtcblx0XHRmaWx0ZXJGaWVsZC5hdmFpbGFiaWxpdHkgPSBBdmFpbGFiaWxpdHlUeXBlLkRlZmF1bHQ7XG5cdFx0ZmlsdGVyRmllbGQuaXNQYXJhbWV0ZXIgPSAhIWVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LkNvbW1vbj8uUmVzdWx0Q29udGV4dDtcblx0fVxuXHRyZXR1cm4gZmlsdGVyRmllbGQ7XG59O1xuXG5jb25zdCBnZXREZWZhdWx0U2VtYW50aWNEYXRlcyA9IGZ1bmN0aW9uKGZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgQ3VzdG9tRWxlbWVudEZpbHRlckZpZWxkPik6IFJlY29yZDxzdHJpbmcsIERlZmF1bHRTZW1hbnRpY0RhdGU+IHtcblx0Y29uc3QgZGVmYXVsdFNlbWFudGljRGF0ZXM6IGFueSA9IHt9O1xuXHRmb3IgKGNvbnN0IGZpbHRlckZpZWxkIGluIGZpbHRlckZpZWxkcykge1xuXHRcdGlmIChmaWx0ZXJGaWVsZHNbZmlsdGVyRmllbGRdPy5zZXR0aW5ncz8uZGVmYXVsdFZhbHVlcz8ubGVuZ3RoKSB7XG5cdFx0XHRkZWZhdWx0U2VtYW50aWNEYXRlc1tmaWx0ZXJGaWVsZF0gPSBmaWx0ZXJGaWVsZHNbZmlsdGVyRmllbGRdPy5zZXR0aW5ncz8uZGVmYXVsdFZhbHVlcztcblx0XHR9XG5cdH1cblx0cmV0dXJuIGRlZmF1bHRTZW1hbnRpY0RhdGVzO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZpbHRlckZpZWxkID0gZnVuY3Rpb24ocHJvcGVydHlQYXRoOiBzdHJpbmcsIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsIGVudGl0eVR5cGU6IEVudGl0eVR5cGUpIHtcblx0cmV0dXJuIF9nZXRGaWx0ZXJGaWVsZCh7fSwgcHJvcGVydHlQYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBlbnRpdHlUeXBlKTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIGZpbHRlciBmaWVsZHMgZnJvbSB0aGUgbWFuaWZlc3QuXG4gKlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIGN1cnJlbnQgZW50aXR5VHlwZVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgQ3VzdG9tRWxlbWVudEZpbHRlckZpZWxkPn0gVGhlIGZpbHRlciBmaWVsZHMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3RcbiAqL1xuY29uc3QgZ2V0TWFuaWZlc3RGaWx0ZXJGaWVsZHMgPSBmdW5jdGlvbihcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogUmVjb3JkPHN0cmluZywgQ3VzdG9tRWxlbWVudEZpbHRlckZpZWxkPiB7XG5cdGNvbnN0IGZiQ29uZmlnOiBGaWx0ZXJNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldEZpbHRlckNvbmZpZ3VyYXRpb24oKTtcblx0Y29uc3QgZGVmaW5lZEZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGRNYW5pZmVzdENvbmZpZ3VyYXRpb24+ID0gZmJDb25maWc/LmZpbHRlckZpZWxkcyB8fCB7fTtcblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSBfZ2V0U2VsZWN0aW9uRmllbGRzQnlQYXRoKFxuXHRcdGVudGl0eVR5cGUsXG5cdFx0T2JqZWN0LmtleXMoZGVmaW5lZEZpbHRlckZpZWxkcykubWFwKGtleSA9PiBLZXlIZWxwZXIuZ2V0UGF0aEZyb21TZWxlY3Rpb25GaWVsZEtleShrZXkpKSxcblx0XHR0cnVlLFxuXHRcdGNvbnZlcnRlckNvbnRleHRcblx0KTtcblx0Y29uc3QgZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21FbGVtZW50RmlsdGVyRmllbGQ+ID0ge307XG5cblx0Zm9yIChjb25zdCBzS2V5IGluIGRlZmluZWRGaWx0ZXJGaWVsZHMpIHtcblx0XHRjb25zdCBmaWx0ZXJGaWVsZCA9IGRlZmluZWRGaWx0ZXJGaWVsZHNbc0tleV07XG5cdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gS2V5SGVscGVyLmdldFBhdGhGcm9tU2VsZWN0aW9uRmllbGRLZXkoc0tleSk7XG5cdFx0Y29uc3Qgc2VsZWN0aW9uRmllbGQgPSBzZWxlY3Rpb25GaWVsZHNbcHJvcGVydHlOYW1lXTtcblx0XHRjb25zdCB2aXN1YWxGaWx0ZXIgPSBnZXRWaXN1YWxGaWx0ZXJzKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQsIHNLZXksIGRlZmluZWRGaWx0ZXJGaWVsZHMpO1xuXHRcdGZpbHRlckZpZWxkc1tzS2V5XSA9IHtcblx0XHRcdGtleTogc0tleSxcblx0XHRcdGFubm90YXRpb25QYXRoOiBzZWxlY3Rpb25GaWVsZD8uYW5ub3RhdGlvblBhdGgsXG5cdFx0XHRjb25kaXRpb25QYXRoOiBzZWxlY3Rpb25GaWVsZD8uY29uZGl0aW9uUGF0aCB8fCBwcm9wZXJ0eU5hbWUsXG5cdFx0XHR0ZW1wbGF0ZTogZmlsdGVyRmllbGQudGVtcGxhdGUsXG5cdFx0XHRsYWJlbDogZmlsdGVyRmllbGQubGFiZWwsXG5cdFx0XHRwb3NpdGlvbjogZmlsdGVyRmllbGQucG9zaXRpb24gfHwgeyBwbGFjZW1lbnQ6IFBsYWNlbWVudC5BZnRlciB9LFxuXHRcdFx0YXZhaWxhYmlsaXR5OiBmaWx0ZXJGaWVsZC5hdmFpbGFiaWxpdHkgfHwgQXZhaWxhYmlsaXR5VHlwZS5EZWZhdWx0LFxuXHRcdFx0c2V0dGluZ3M6IGZpbHRlckZpZWxkLnNldHRpbmdzLFxuXHRcdFx0dmlzdWFsRmlsdGVyOiB2aXN1YWxGaWx0ZXJcblx0XHR9O1xuXHR9XG5cdHJldHVybiBmaWx0ZXJGaWVsZHM7XG59O1xuXG4vKipcbiAqIEZpbmQgYSB2aXN1YWxpemF0aW9uIGFubm90YXRpb24gdGhhdCBjYW4gYmUgdXNlZCBmb3IgcmVuZGVyaW5nIHRoZSBsaXN0IHJlcG9ydC5cbiAqXG4gKiBAcGFyYW0ge0VudGl0eVR5cGV9IGVudGl0eVR5cGUgVGhlIGN1cnJlbnQgRW50aXR5VHlwZVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBiSXNBTFBcbiAqIEByZXR1cm5zIHtMaW5lSXRlbSB8IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXMgfCB1bmRlZmluZWR9IEEgY29tcGxpYW50IGFubm90YXRpb24gZm9yIHJlbmRlcmluZyB0aGUgbGlzdCByZXBvcnRcbiAqL1xuZnVuY3Rpb24gZ2V0Q29tcGxpYW50VmlzdWFsaXphdGlvbkFubm90YXRpb24oXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGJJc0FMUDogQm9vbGVhblxuKTogTGluZUl0ZW0gfCBQcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzIHwgU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGFubm90YXRpb25QYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXREZWZhdWx0VGVtcGxhdGVBbm5vdGF0aW9uUGF0aCgpO1xuXHRjb25zdCBzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50ID0gZ2V0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudChlbnRpdHlUeXBlLCBhbm5vdGF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdGlmIChhbm5vdGF0aW9uUGF0aCAmJiBzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50KSB7XG5cdFx0Y29uc3QgcHJlc2VudGF0aW9uVmFyaWFudCA9IHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQuUHJlc2VudGF0aW9uVmFyaWFudDtcblx0XHRpZiAoIXByZXNlbnRhdGlvblZhcmlhbnQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlByZXNlbnRhdGlvbiBWYXJpYW50IGlzIG5vdCBjb25maWd1cmVkIGluIHRoZSBTUFYgbWVudGlvbmVkIGluIHRoZSBtYW5pZmVzdFwiKTtcblx0XHR9XG5cdFx0Y29uc3QgYlBWQ29tcGxhaW50ID0gaXNQcmVzZW50YXRpb25Db21wbGlhbnQoc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudC5QcmVzZW50YXRpb25WYXJpYW50KTtcblx0XHRpZiAoIWJQVkNvbXBsYWludCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKGlzU2VsZWN0aW9uUHJlc2VudGF0aW9uQ29tcGxpYW50KHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQsIGJJc0FMUCkpIHtcblx0XHRcdHJldHVybiBzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50O1xuXHRcdH1cblx0fVxuXHRpZiAoc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCkge1xuXHRcdGlmIChpc1NlbGVjdGlvblByZXNlbnRhdGlvbkNvbXBsaWFudChzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LCBiSXNBTFApKSB7XG5cdFx0XHRyZXR1cm4gc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudDtcblx0XHR9XG5cdH1cblx0Y29uc3QgcHJlc2VudGF0aW9uVmFyaWFudCA9IGdldERlZmF1bHRQcmVzZW50YXRpb25WYXJpYW50KGVudGl0eVR5cGUpO1xuXHRpZiAocHJlc2VudGF0aW9uVmFyaWFudCkge1xuXHRcdGlmIChpc1ByZXNlbnRhdGlvbkNvbXBsaWFudChwcmVzZW50YXRpb25WYXJpYW50LCBiSXNBTFApKSB7XG5cdFx0XHRyZXR1cm4gcHJlc2VudGF0aW9uVmFyaWFudDtcblx0XHR9XG5cdH1cblx0aWYgKCFiSXNBTFApIHtcblx0XHRjb25zdCBkZWZhdWx0TGluZUl0ZW0gPSBnZXREZWZhdWx0TGluZUl0ZW0oZW50aXR5VHlwZSk7XG5cdFx0aWYgKGRlZmF1bHRMaW5lSXRlbSkge1xuXHRcdFx0cmV0dXJuIGRlZmF1bHRMaW5lSXRlbTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuY29uc3QgZ2V0VmlldyA9IGZ1bmN0aW9uKHZpZXdDb252ZXJ0ZXJDb25maWd1cmF0aW9uOiBWaWV3Q29udmVydGVyU2V0dGluZ3MpOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb24ge1xuXHRsZXQgY29uZmlnID0gdmlld0NvbnZlcnRlckNvbmZpZ3VyYXRpb247XG5cdGlmIChjb25maWcuY29udmVydGVyQ29udGV4dCkge1xuXHRcdGxldCBjb252ZXJ0ZXJDb250ZXh0ID0gY29uZmlnLmNvbnZlcnRlckNvbnRleHQ7XG5cdFx0Y29uZmlnID0gY29uZmlnIGFzIFZpZXdBbm5vdGF0aW9uQ29uZmlndXJhdGlvbjtcblx0XHRsZXQgcHJlc2VudGF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24gPSBnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24oXG5cdFx0XHRjb25maWcuYW5ub3RhdGlvblxuXHRcdFx0XHQ/IGNvbnZlcnRlckNvbnRleHQuZ2V0UmVsYXRpdmVBbm5vdGF0aW9uUGF0aChjb25maWcuYW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUsIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpKVxuXHRcdFx0XHQ6IFwiXCIsXG5cdFx0XHR0cnVlLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdGNvbmZpZyBhcyBWaWV3UGF0aENvbmZpZ3VyYXRpb25cblx0XHQpO1xuXHRcdGxldCB0YWJsZUNvbnRyb2xJZCA9IFwiXCI7XG5cdFx0bGV0IGNoYXJ0Q29udHJvbElkID0gXCJcIjtcblx0XHRsZXQgdGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IFwiXCI7XG5cdFx0bGV0IHNlbGVjdGlvblZhcmlhbnRQYXRoID0gXCJcIjtcblx0XHRjb25zdCBpc011bHRpcGxlVmlld0NvbmZpZ3VyYXRpb24gPSBmdW5jdGlvbihjb25maWc6IFZpZXdDb25maWd1cmF0aW9uKTogY29uZmlnIGlzIE11bHRpcGxlVmlld0NvbmZpZ3VyYXRpb24ge1xuXHRcdFx0cmV0dXJuIChjb25maWcgYXMgTXVsdGlwbGVWaWV3Q29uZmlndXJhdGlvbikua2V5ICE9PSB1bmRlZmluZWQ7XG5cdFx0fTtcblx0XHRjb25zdCBjcmVhdGVWaXN1YWxpemF0aW9uID0gZnVuY3Rpb24ocHJlc2VudGF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24sIGlzUHJpbWFyeT86IGJvb2xlYW4pIHtcblx0XHRcdGxldCBkZWZhdWx0VmlzdWFsaXphdGlvbjtcblx0XHRcdGZvciAoY29uc3QgdmlzdWFsaXphdGlvbiBvZiBwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnMpIHtcblx0XHRcdFx0aWYgKGlzUHJpbWFyeSAmJiB2aXN1YWxpemF0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KSB7XG5cdFx0XHRcdFx0ZGVmYXVsdFZpc3VhbGl6YXRpb24gPSB2aXN1YWxpemF0aW9uO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghaXNQcmltYXJ5ICYmIHZpc3VhbGl6YXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuVGFibGUpIHtcblx0XHRcdFx0XHRkZWZhdWx0VmlzdWFsaXphdGlvbiA9IHZpc3VhbGl6YXRpb247XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGNvbnN0IHByZXNlbnRhdGlvbkNyZWF0ZWQgPSBPYmplY3QuYXNzaWduKHt9LCBwcmVzZW50YXRpb24pO1xuXHRcdFx0aWYgKGRlZmF1bHRWaXN1YWxpemF0aW9uKSB7XG5cdFx0XHRcdHByZXNlbnRhdGlvbkNyZWF0ZWQudmlzdWFsaXphdGlvbnMgPSBbZGVmYXVsdFZpc3VhbGl6YXRpb25dO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHByZXNlbnRhdGlvbkNyZWF0ZWQ7XG5cdFx0fTtcblx0XHRjb25zdCBnZXRQcmVzZW50YXRpb24gPSBmdW5jdGlvbihpdGVtOiBTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb24pIHtcblx0XHRcdGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihpdGVtLmFubm90YXRpb25QYXRoKTtcblx0XHRcdGNvbnN0IHRhcmdldEFubm90YXRpb24gPSByZXNvbHZlZFRhcmdldC5hbm5vdGF0aW9uIGFzIERhdGFWaXN1YWxpemF0aW9uQW5ub3RhdGlvbnM7XG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0ID0gcmVzb2x2ZWRUYXJnZXQuY29udmVydGVyQ29udGV4dDtcblx0XHRcdGNvbnN0IGFubm90YXRpb24gPSB0YXJnZXRBbm5vdGF0aW9uO1xuXHRcdFx0cHJlc2VudGF0aW9uID0gZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uKFxuXHRcdFx0XHRhbm5vdGF0aW9uXG5cdFx0XHRcdFx0PyBjb252ZXJ0ZXJDb250ZXh0LmdldFJlbGF0aXZlQW5ub3RhdGlvblBhdGgoYW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUsIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpKVxuXHRcdFx0XHRcdDogXCJcIixcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0Y29uZmlnIGFzIFZpZXdQYXRoQ29uZmlndXJhdGlvblxuXHRcdFx0KTtcblx0XHRcdHJldHVybiBwcmVzZW50YXRpb247XG5cdFx0fTtcblx0XHRjb25zdCBjcmVhdGVBbHBWaWV3ID0gZnVuY3Rpb24oXG5cdFx0XHRwcmVzZW50YXRpb25zOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb25bXSxcblx0XHRcdGRlZmF1bHRQYXRoOiBcImJvdGhcIiB8IFwicHJpbWFyeVwiIHwgXCJzZWNvbmRhcnlcIiB8IHVuZGVmaW5lZFxuXHRcdCkge1xuXHRcdFx0Y29uc3QgcHJpbWFyeVZpc3VhbGl6YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiB8IHVuZGVmaW5lZCA9IGNyZWF0ZVZpc3VhbGl6YXRpb24ocHJlc2VudGF0aW9uc1swXSwgdHJ1ZSk7XG5cdFx0XHRjaGFydENvbnRyb2xJZCA9IChwcmltYXJ5VmlzdWFsaXphdGlvbj8udmlzdWFsaXphdGlvbnNbMF0gYXMgQ2hhcnRWaXN1YWxpemF0aW9uKS5pZDtcblx0XHRcdGNvbnN0IHNlY29uZGFyeVZpc3VhbGl6YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiB8IHVuZGVmaW5lZCA9IGNyZWF0ZVZpc3VhbGl6YXRpb24oXG5cdFx0XHRcdHByZXNlbnRhdGlvbnNbMV0gPyBwcmVzZW50YXRpb25zWzFdIDogcHJlc2VudGF0aW9uc1swXVxuXHRcdFx0KTtcblx0XHRcdHRhYmxlQ29udHJvbElkID0gKHNlY29uZGFyeVZpc3VhbGl6YXRpb24/LnZpc3VhbGl6YXRpb25zWzBdIGFzIFRhYmxlVmlzdWFsaXphdGlvbikuYW5ub3RhdGlvbi5pZDtcblx0XHRcdGlmIChwcmltYXJ5VmlzdWFsaXphdGlvbiAmJiBzZWNvbmRhcnlWaXN1YWxpemF0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IHZpZXc6IENvbWJpbmVkVmlld0RlZmluaXRpb24gPSB7XG5cdFx0XHRcdFx0cHJpbWFyeVZpc3VhbGl6YXRpb24sXG5cdFx0XHRcdFx0c2Vjb25kYXJ5VmlzdWFsaXphdGlvbixcblx0XHRcdFx0XHR0YWJsZUNvbnRyb2xJZCxcblx0XHRcdFx0XHRjaGFydENvbnRyb2xJZCxcblx0XHRcdFx0XHRkZWZhdWx0UGF0aFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRyZXR1cm4gdmlldztcblx0XHRcdH1cblx0XHR9O1xuXHRcdGlmIChwcmVzZW50YXRpb24/LnZpc3VhbGl6YXRpb25zPy5sZW5ndGggPT09IDIgJiYgY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZSkge1xuXHRcdFx0Y29uc3QgdmlldzogQ29tYmluZWRWaWV3RGVmaW5pdGlvbiB8IHVuZGVmaW5lZCA9IGNyZWF0ZUFscFZpZXcoW3ByZXNlbnRhdGlvbl0sIFwiYm90aFwiKTtcblx0XHRcdGlmICh2aWV3KSB7XG5cdFx0XHRcdHJldHVybiB2aWV3O1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMoY29uZmlnIGFzIFZpZXdQYXRoQ29uZmlndXJhdGlvbikgfHxcblx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2Vcblx0XHQpIHtcblx0XHRcdGNvbnN0IHsgcHJpbWFyeSwgc2Vjb25kYXJ5IH0gPSBjb25maWcgYXMgQ29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb247XG5cdFx0XHRpZiAocHJpbWFyeSAmJiBwcmltYXJ5Lmxlbmd0aCAmJiBzZWNvbmRhcnkgJiYgc2Vjb25kYXJ5Lmxlbmd0aCkge1xuXHRcdFx0XHRjb25zdCB2aWV3OiBDb21iaW5lZFZpZXdEZWZpbml0aW9uIHwgdW5kZWZpbmVkID0gY3JlYXRlQWxwVmlldyhcblx0XHRcdFx0XHRbZ2V0UHJlc2VudGF0aW9uKHByaW1hcnlbMF0pLCBnZXRQcmVzZW50YXRpb24oc2Vjb25kYXJ5WzBdKV0sXG5cdFx0XHRcdFx0KGNvbmZpZyBhcyBDb21iaW5lZFZpZXdQYXRoQ29uZmlndXJhdGlvbikuZGVmYXVsdFBhdGhcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKHZpZXcpIHtcblx0XHRcdFx0XHRyZXR1cm4gdmlldztcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiU2Vjb25kYXJ5SXRlbXMgaW4gdGhlIFZpZXdzIGlzIG5vdCBwcmVzZW50XCIpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoaXNNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uKGNvbmZpZykpIHtcblx0XHRcdC8vIGtleSBleGlzdHMgb25seSBvbiBtdWx0aSB0YWJsZXMgbW9kZVxuXHRcdFx0Y29uc3QgcmVzb2x2ZWRUYXJnZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKChjb25maWcgYXMgU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uKS5hbm5vdGF0aW9uUGF0aCk7XG5cdFx0XHRjb25zdCB2aWV3QW5ub3RhdGlvbjogVmlld0Fubm90YXRpb25zVHlwZVR5cGVzID0gcmVzb2x2ZWRUYXJnZXQuYW5ub3RhdGlvbiBhcyBWaWV3QW5ub3RhdGlvbnNUeXBlVHlwZXM7XG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0ID0gcmVzb2x2ZWRUYXJnZXQuY29udmVydGVyQ29udGV4dDtcblx0XHRcdHRpdGxlID0gY29tcGlsZUJpbmRpbmcoYW5ub3RhdGlvbkV4cHJlc3Npb24odmlld0Fubm90YXRpb24uVGV4dCkpO1xuXHRcdFx0Ly8gTmVlZCB0byBsb29wIG9uIHRhYmxlIGludG8gdmlld3Mgc2luY2UgbXVsdGkgdGFibGUgbW9kZSBnZXQgc3BlY2lmaWMgY29uZmlndXJhdGlvbiAoaGlkZGVuIGZpbHRlcnMgb3IgVGFibGUgSWQpXG5cdFx0XHRwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnMuZm9yRWFjaCgodmlzdWFsaXphdGlvbkRlZmluaXRpb24sIGluZGV4KSA9PiB7XG5cdFx0XHRcdHN3aXRjaCAodmlzdWFsaXphdGlvbkRlZmluaXRpb24udHlwZSkge1xuXHRcdFx0XHRcdGNhc2UgVmlzdWFsaXphdGlvblR5cGUuVGFibGU6XG5cdFx0XHRcdFx0XHRjb25zdCB0YWJsZVZpc3VhbGl6YXRpb24gPSBwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnNbaW5kZXhdIGFzIFRhYmxlVmlzdWFsaXphdGlvbjtcblx0XHRcdFx0XHRcdGNvbnN0IGZpbHRlcnMgPSB0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC5maWx0ZXJzIHx8IHt9O1xuXHRcdFx0XHRcdFx0ZmlsdGVycy5oaWRkZW5GaWx0ZXJzID0gZmlsdGVycy5oaWRkZW5GaWx0ZXJzIHx8IHsgcGF0aHM6IFtdIH07XG5cdFx0XHRcdFx0XHRpZiAoIShjb25maWcgYXMgU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uKS5rZWVwUHJldmlvdXNQcmVzb25hbGl6YXRpb24pIHtcblx0XHRcdFx0XHRcdFx0Ly8gTmVlZCB0byBvdmVycmlkZSBUYWJsZSBJZCB0byBtYXRjaCB3aXRoIFRhYiBLZXkgKGN1cnJlbnRseSBvbmx5IHRhYmxlIGlzIG1hbmFnZWQgaW4gbXVsdGlwbGUgdmlldyBtb2RlKVxuXHRcdFx0XHRcdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uYW5ub3RhdGlvbi5pZCA9IFRhYmxlSUQoKGNvbmZpZyBhcyBTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb24pLmtleSB8fCBcIlwiLCBcIkxpbmVJdGVtXCIpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Y29uZmlnID0gY29uZmlnIGFzIFZpZXdBbm5vdGF0aW9uQ29uZmlndXJhdGlvbjtcblx0XHRcdFx0XHRcdGlmIChjb25maWcgJiYgY29uZmlnLmFubm90YXRpb24gJiYgY29uZmlnLmFubm90YXRpb24udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCkge1xuXHRcdFx0XHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50UGF0aCA9IChjb25maWcuYW5ub3RhdGlvbiBhcyBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzKS5TZWxlY3Rpb25WYXJpYW50LmZ1bGx5UXVhbGlmaWVkTmFtZS5zcGxpdChcblx0XHRcdFx0XHRcdFx0XHRcIkBcIlxuXHRcdFx0XHRcdFx0XHQpWzFdO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0c2VsZWN0aW9uVmFyaWFudFBhdGggPSAoY29uZmlnIGFzIFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbikuYW5ub3RhdGlvblBhdGg7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQvL1Byb3ZpZGUgU2VsZWN0aW9uIFZhcmlhbnQgdG8gaGlkZGVuRmlsdGVycyBpbiBvcmRlciB0byBzZXQgdGhlIFNWIGZpbHRlcnMgdG8gdGhlIHRhYmxlLlxuXHRcdFx0XHRcdFx0Ly9NREMgVGFibGUgb3ZlcnJpZGVzIGJpbmRpbmcgRmlsdGVyIGFuZCBmcm9tIFNBUCBGRSB0aGUgb25seSBtZXRob2Qgd2hlcmUgd2UgYXJlIGFibGUgdG8gYWRkXG5cdFx0XHRcdFx0XHQvL2FkZGl0aW9uYWwgZmlsdGVyIGlzICdyZWJpbmRUYWJsZScgaW50byBUYWJsZSBkZWxlZ2F0ZS5cblx0XHRcdFx0XHRcdC8vVG8gYXZvaWQgaW1wbGVtZW50aW5nIHNwZWNpZmljIExSIGZlYXR1cmUgdG8gU0FQIEZFIE1hY3JvIFRhYmxlLCB0aGUgZmlsdGVyKHMpIHJlbGF0ZWQgdG8gdGhlIFRhYiAobXVsdGkgdGFibGUgbW9kZSlcblx0XHRcdFx0XHRcdC8vY2FuIGJlIHBhc3NlZCB0byBtYWNybyB0YWJsZSB2aWEgcGFyYW1ldGVyL2NvbnRleHQgbmFtZWQgZmlsdGVycyBhbmQga2V5IGhpZGRlbkZpbHRlcnMuXG5cdFx0XHRcdFx0XHRmaWx0ZXJzLmhpZGRlbkZpbHRlcnMucGF0aHMucHVzaCh7IGFubm90YXRpb25QYXRoOiBzZWxlY3Rpb25WYXJpYW50UGF0aCB9KTtcblx0XHRcdFx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLmZpbHRlcnMgPSBmaWx0ZXJzO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBWaXN1YWxpemF0aW9uVHlwZS5DaGFydDpcblx0XHRcdFx0XHRcdC8vIE5vdCBjdXJyZW50bHkgbWFuYWdlZFxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zLmZvckVhY2godmlzdWFsaXphdGlvbkRlZmluaXRpb24gPT4ge1xuXHRcdFx0aWYgKHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlKSB7XG5cdFx0XHRcdHRhYmxlQ29udHJvbElkID0gdmlzdWFsaXphdGlvbkRlZmluaXRpb24uYW5ub3RhdGlvbi5pZDtcblx0XHRcdH0gZWxzZSBpZiAodmlzdWFsaXphdGlvbkRlZmluaXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQpIHtcblx0XHRcdFx0Y2hhcnRDb250cm9sSWQgPSB2aXN1YWxpemF0aW9uRGVmaW5pdGlvbi5pZDtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0cHJlc2VudGF0aW9uLFxuXHRcdFx0dGFibGVDb250cm9sSWQsXG5cdFx0XHRjaGFydENvbnRyb2xJZCxcblx0XHRcdHRpdGxlLFxuXHRcdFx0c2VsZWN0aW9uVmFyaWFudFBhdGhcblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdGNvbmZpZyA9IGNvbmZpZyBhcyBDdXN0b21WaWV3Q29uZmlndXJhdGlvbjtcblx0XHRjb25zdCB0aXRsZSA9IGNvbmZpZy5sYWJlbCxcblx0XHRcdGZyYWdtZW50ID0gY29uZmlnLnRlbXBsYXRlLFxuXHRcdFx0dHlwZSA9IGNvbmZpZy50eXBlLFxuXHRcdFx0Y3VzdG9tVGFiSWQgPSBDdXN0b21UYWJJRChjb25maWcua2V5IHx8IFwiXCIpO1xuXHRcdHJldHVybiB7XG5cdFx0XHR0aXRsZSxcblx0XHRcdGZyYWdtZW50LFxuXHRcdFx0dHlwZSxcblx0XHRcdGN1c3RvbVRhYklkXG5cdFx0fTtcblx0fVxufTtcblxuY29uc3QgZ2V0Vmlld3MgPSBmdW5jdGlvbihcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0c2V0dGluZ3NWaWV3czogTXVsdGlwbGVWaWV3c0NvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWRcbik6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdIHtcblx0bGV0IHZpZXdDb252ZXJ0ZXJDb25maWdzOiBWaWV3Q29udmVydGVyU2V0dGluZ3NbXSA9IFtdO1xuXHRpZiAoc2V0dGluZ3NWaWV3cykge1xuXHRcdHNldHRpbmdzVmlld3MucGF0aHMuZm9yRWFjaCgocGF0aDogVmlld1BhdGhDb25maWd1cmF0aW9uIHwgQ3VzdG9tVmlld1RlbXBsYXRlQ29uZmlndXJhdGlvbikgPT4ge1xuXHRcdFx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyhwYXRoIGFzIFZpZXdQYXRoQ29uZmlndXJhdGlvbikpIHtcblx0XHRcdFx0aWYgKHNldHRpbmdzVmlld3MucGF0aHMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIkFMUCBmbGF2b3IgY2Fubm90IGhhdmUgbXVsdGlwbGUgdmlld3NcIik7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cGF0aCA9IHBhdGggYXMgQ29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb247XG5cdFx0XHRcdFx0dmlld0NvbnZlcnRlckNvbmZpZ3MucHVzaCh7XG5cdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiBjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0cHJpbWFyeTogcGF0aC5wcmltYXJ5LFxuXHRcdFx0XHRcdFx0c2Vjb25kYXJ5OiBwYXRoLnNlY29uZGFyeSxcblx0XHRcdFx0XHRcdGRlZmF1bHRQYXRoOiBwYXRoLmRlZmF1bHRQYXRoXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoKHBhdGggYXMgQ3VzdG9tVmlld0NvbmZpZ3VyYXRpb24pLnRlbXBsYXRlKSB7XG5cdFx0XHRcdHBhdGggPSBwYXRoIGFzIEN1c3RvbVZpZXdDb25maWd1cmF0aW9uO1xuXHRcdFx0XHR2aWV3Q29udmVydGVyQ29uZmlncy5wdXNoKHtcblx0XHRcdFx0XHRrZXk6IHBhdGgua2V5LFxuXHRcdFx0XHRcdGxhYmVsOiBwYXRoLmxhYmVsLFxuXHRcdFx0XHRcdHRlbXBsYXRlOiBwYXRoLnRlbXBsYXRlLFxuXHRcdFx0XHRcdHR5cGU6IFwiQ3VzdG9tXCJcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwYXRoID0gcGF0aCBhcyBTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb247XG5cdFx0XHRcdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCksXG5cdFx0XHRcdFx0dmlld0NvbnZlcnRlckNvbnRleHQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3IoXG5cdFx0XHRcdFx0XHRwYXRoLmNvbnRleHRQYXRoIHx8IChwYXRoLmVudGl0eVNldCAmJiBcIi9cIiArIHBhdGguZW50aXR5U2V0KSB8fCBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKClcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGVudGl0eVR5cGUgPSB2aWV3Q29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cblx0XHRcdFx0aWYgKGVudGl0eVR5cGUgJiYgdmlld0NvbnZlcnRlckNvbnRleHQpIHtcblx0XHRcdFx0XHRjb25zdCBhbm5vdGF0aW9uUGF0aCA9IG1hbmlmZXN0V3JhcHBlci5nZXREZWZhdWx0VGVtcGxhdGVBbm5vdGF0aW9uUGF0aCgpO1xuXHRcdFx0XHRcdGxldCBhbm5vdGF0aW9uO1xuXHRcdFx0XHRcdGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gdmlld0NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24ocGF0aC5hbm5vdGF0aW9uUGF0aCk7XG5cdFx0XHRcdFx0Y29uc3QgdGFyZ2V0QW5ub3RhdGlvbiA9IHJlc29sdmVkVGFyZ2V0LmFubm90YXRpb24gYXMgRGF0YVZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucztcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0ID0gcmVzb2x2ZWRUYXJnZXQuY29udmVydGVyQ29udGV4dDtcblx0XHRcdFx0XHRpZiAodGFyZ2V0QW5ub3RhdGlvbikge1xuXHRcdFx0XHRcdFx0aWYgKHRhcmdldEFubm90YXRpb24udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuU2VsZWN0aW9uVmFyaWFudCkge1xuXHRcdFx0XHRcdFx0XHRpZiAoYW5ub3RhdGlvblBhdGgpIHtcblx0XHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uID0gZ2V0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudChcblx0XHRcdFx0XHRcdFx0XHRcdHZpZXdDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSxcblx0XHRcdFx0XHRcdFx0XHRcdGFubm90YXRpb25QYXRoLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvbiA9IGdldERlZmF1bHRMaW5lSXRlbSh2aWV3Q29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkpIGFzIExpbmVJdGVtO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uID0gdGFyZ2V0QW5ub3RhdGlvbjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHZpZXdDb252ZXJ0ZXJDb25maWdzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiB2aWV3Q29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvbixcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IHBhdGguYW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdFx0XHRcdGtlZXBQcmV2aW91c1ByZXNvbmFsaXphdGlvbjogcGF0aC5rZWVwUHJldmlvdXNQcmVzb25hbGl6YXRpb24sXG5cdFx0XHRcdFx0XHRcdGtleTogcGF0aC5rZXlcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBUT0RPIERpYWdub3N0aWNzIG1lc3NhZ2Vcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0XHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZSkge1xuXHRcdFx0dmlld0NvbnZlcnRlckNvbmZpZ3MgPSBnZXRBbHBWaWV3Q29uZmlnKGNvbnZlcnRlckNvbnRleHQsIHZpZXdDb252ZXJ0ZXJDb25maWdzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmlld0NvbnZlcnRlckNvbmZpZ3MucHVzaCh7XG5cdFx0XHRcdGFubm90YXRpb246IGdldENvbXBsaWFudFZpc3VhbGl6YXRpb25Bbm5vdGF0aW9uKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQsIGZhbHNlKSxcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogY29udmVydGVyQ29udGV4dFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2aWV3Q29udmVydGVyQ29uZmlncy5tYXAodmlld0NvbnZlcnRlckNvbmZpZyA9PiB7XG5cdFx0cmV0dXJuIGdldFZpZXcodmlld0NvbnZlcnRlckNvbmZpZyk7XG5cdH0pO1xufTtcblxuZnVuY3Rpb24gZ2V0QWxwVmlld0NvbmZpZyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LCB2aWV3Q29uZmlnczogVmlld0NvbnZlcnRlclNldHRpbmdzW10pOiBWaWV3Q29udmVydGVyU2V0dGluZ3NbXSB7XG5cdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0Y29uc3QgYW5ub3RhdGlvbiA9IGdldENvbXBsaWFudFZpc3VhbGl6YXRpb25Bbm5vdGF0aW9uKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQsIHRydWUpO1xuXHRsZXQgY2hhcnQsIHRhYmxlO1xuXHRpZiAoYW5ub3RhdGlvbikge1xuXHRcdHZpZXdDb25maWdzLnB1c2goe1xuXHRcdFx0YW5ub3RhdGlvbjogYW5ub3RhdGlvbixcblx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRjaGFydCA9IGdldERlZmF1bHRDaGFydChlbnRpdHlUeXBlKTtcblx0XHR0YWJsZSA9IGdldERlZmF1bHRMaW5lSXRlbShlbnRpdHlUeXBlKTtcblx0XHRpZiAoY2hhcnQgJiYgdGFibGUpIHtcblx0XHRcdGNvbnN0IHByaW1hcnk6IFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbltdID0gW3sgYW5ub3RhdGlvblBhdGg6IGNoYXJ0LnRlcm0gfV07XG5cdFx0XHRjb25zdCBzZWNvbmRhcnk6IFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbltdID0gW3sgYW5ub3RhdGlvblBhdGg6IHRhYmxlLnRlcm0gfV07XG5cdFx0XHR2aWV3Q29uZmlncy5wdXNoKHtcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogY29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0cHJpbWFyeTogcHJpbWFyeSxcblx0XHRcdFx0c2Vjb25kYXJ5OiBzZWNvbmRhcnksXG5cdFx0XHRcdGRlZmF1bHRQYXRoOiBcImJvdGhcIlxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2aWV3Q29uZmlncztcbn1cblxuZXhwb3J0IGNvbnN0IGdldEhlYWRlckFjdGlvbnMgPSBmdW5jdGlvbihjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogQmFzZUFjdGlvbltdIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0cmV0dXJuIGluc2VydEN1c3RvbUVsZW1lbnRzKFtdLCBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KG1hbmlmZXN0V3JhcHBlci5nZXRIZWFkZXJBY3Rpb25zKCksIGNvbnZlcnRlckNvbnRleHQpKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBMaXN0UmVwb3J0RGVmaW5pdGlvbiBmb3IgdGhlIG11bHRpIGVudGl0eVNldHMgKG11bHRpIHRhYmxlIGluc3RhbmNlcykuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIHtMaXN0UmVwb3J0RGVmaW5pdGlvbn0gVGhlIGxpc3QgcmVwb3J0IGRlZmluaXRpb24gYmFzZWQgb24gYW5ub3RhdGlvbiArIG1hbmlmZXN0XG4gKi9cbmV4cG9ydCBjb25zdCBjb252ZXJ0UGFnZSA9IGZ1bmN0aW9uKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBMaXN0UmVwb3J0RGVmaW5pdGlvbiB7XG5cdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0Y29uc3Qgc0NvbnRleHRQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXG5cdGlmICghc0NvbnRleHRQYXRoKSB7XG5cdFx0Ly8gSWYgd2UgZG9uJ3QgaGF2ZSBhbiBlbnRpdHlTZXQgYXQgdGhpcyBwb2ludCB3ZSBoYXZlIGFuIGlzc3VlIEknZCBzYXlcblx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcIkFuIEVudGl0eVNldCBpcyByZXF1aXJlZCB0byBiZSBhYmxlIHRvIGRpc3BsYXkgYSBMaXN0UmVwb3J0LCBwbGVhc2UgYWRqdXN0IHlvdXIgYGVudGl0eVNldGAgcHJvcGVydHkgdG8gcG9pbnQgdG8gb25lLlwiXG5cdFx0KTtcblx0fVxuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCB2aWV3c0RlZmluaXRpb246IE11bHRpcGxlVmlld3NDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkID0gbWFuaWZlc3RXcmFwcGVyLmdldFZpZXdDb25maWd1cmF0aW9uKCk7XG5cdGNvbnN0IGhhc011bHRpcGxlRW50aXR5U2V0cyA9IG1hbmlmZXN0V3JhcHBlci5oYXNNdWx0aXBsZUVudGl0eVNldHMoKTtcblx0Y29uc3Qgdmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdID0gZ2V0Vmlld3MoY29udmVydGVyQ29udGV4dCwgdmlld3NEZWZpbml0aW9uKTtcblx0Y29uc3Qgc2hvd1RhYkNvdW50cyA9IHZpZXdzRGVmaW5pdGlvbiA/IHZpZXdzRGVmaW5pdGlvbj8uc2hvd0NvdW50cyB8fCBoYXNNdWx0aXBsZUVudGl0eVNldHMgOiB1bmRlZmluZWQ7IC8vIHdpdGggbXVsdGkgRW50aXR5U2V0cywgdGFiIGNvdW50cyBhcmUgZGlzcGxheWVkIGJ5IGRlZmF1bHRcblx0Y29uc3QgbHJUYWJsZVZpc3VhbGl6YXRpb25zID0gZ2V0VGFibGVWaXN1YWxpemF0aW9ucyh2aWV3cyk7XG5cdGNvbnN0IHNob3dQaW5uYWJsZVRvZ2dsZSA9IGxyVGFibGVWaXN1YWxpemF0aW9ucy5zb21lKHRhYmxlID0+IHRhYmxlLmNvbnRyb2wudHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIik7XG5cdGxldCBzaW5nbGVUYWJsZUlkID0gXCJcIjtcblx0bGV0IHNpbmdsZUNoYXJ0SWQgPSBcIlwiO1xuXHRjb25zdCBmaWx0ZXJCYXJJZCA9IEZpbHRlckJhcklEKHNDb250ZXh0UGF0aCk7XG5cdGNvbnN0IGZpbHRlclZhcmlhbnRNYW5hZ2VtZW50SUQgPSBGaWx0ZXJWYXJpYW50TWFuYWdlbWVudElEKGZpbHRlckJhcklkKTtcblx0Y29uc3QgdGFyZ2V0Q29udHJvbElkcyA9IFtmaWx0ZXJCYXJJZF0uY29uY2F0KFxuXHRcdGxyVGFibGVWaXN1YWxpemF0aW9ucy5tYXAodmlzdWFsaXphdGlvbiA9PiB7XG5cdFx0XHRyZXR1cm4gdmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmlkO1xuXHRcdH0pXG5cdCk7XG5cdGNvbnN0IGZiQ29uZmlnID0gbWFuaWZlc3RXcmFwcGVyLmdldEZpbHRlckNvbmZpZ3VyYXRpb24oKTtcblx0Y29uc3QgZmlsdGVySW5pdGlhbExheW91dCA9IGZiQ29uZmlnPy5pbml0aWFsTGF5b3V0ICE9PSB1bmRlZmluZWQgPyBmYkNvbmZpZz8uaW5pdGlhbExheW91dC50b0xvd2VyQ2FzZSgpIDogXCJjb21wYWN0XCI7XG5cdGNvbnN0IGZpbHRlckxheW91dCA9IGZiQ29uZmlnPy5sYXlvdXQgIT09IHVuZGVmaW5lZCA/IGZiQ29uZmlnPy5sYXlvdXQudG9Mb3dlckNhc2UoKSA6IFwiY29tcGFjdFwiO1xuXHRjb25zdCB1c2VTZW1hbnRpY0RhdGVSYW5nZSA9IGZiQ29uZmlnLnVzZVNlbWFudGljRGF0ZVJhbmdlICE9PSB1bmRlZmluZWQgPyBmYkNvbmZpZy51c2VTZW1hbnRpY0RhdGVSYW5nZSA6IHRydWU7XG5cblx0Y29uc3Qgb0NvbmZpZyA9IGdldENvbnRlbnRBcmVhSWQoY29udmVydGVyQ29udGV4dCwgdmlld3MpO1xuXHRpZiAob0NvbmZpZykge1xuXHRcdHNpbmdsZUNoYXJ0SWQgPSBvQ29uZmlnLmNoYXJ0SWQ7XG5cdFx0c2luZ2xlVGFibGVJZCA9IG9Db25maWcudGFibGVJZDtcblx0fVxuXHRjb25zdCBzZWxlY3Rpb25GaWVsZHMgPSBnZXRTZWxlY3Rpb25GaWVsZHMoY29udmVydGVyQ29udGV4dCwgbHJUYWJsZVZpc3VhbGl6YXRpb25zKTtcblxuXHRjb25zdCBoaWRlQmFzaWNTZWFyY2ggPSBnZXRGaWx0ZXJCYXJoaWRlQmFzaWNTZWFyY2gobHJUYWJsZVZpc3VhbGl6YXRpb25zLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3Qgc2VsZWN0aW9uVmFyaWFudCA9IGdldFNlbGVjdGlvblZhcmlhbnQoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGRlZmF1bHRTZW1hbnRpY0RhdGVzOiBhbnkgPSB1c2VTZW1hbnRpY0RhdGVSYW5nZVxuXHRcdD8gZ2V0RGVmYXVsdFNlbWFudGljRGF0ZXMoZ2V0TWFuaWZlc3RGaWx0ZXJGaWVsZHMoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCkpXG5cdFx0OiB7fTtcblx0Ly8gU29ydCBoZWFkZXIgYWN0aW9ucyBhY2NvcmRpbmcgdG8gcG9zaXRpb24gYXR0cmlidXRlcyBpbiBtYW5pZmVzdFxuXHRjb25zdCBoZWFkZXJBY3Rpb25zID0gZ2V0SGVhZGVyQWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgaGFzTXVsdGlWaXN1YWxpemF0aW9uczogYm9vbGVhbiA9XG5cdFx0bWFuaWZlc3RXcmFwcGVyLmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMoKSB8fCBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlO1xuXG5cdHJldHVybiB7XG5cdFx0bWFpbkVudGl0eVNldDogc0NvbnRleHRQYXRoLFxuXHRcdG1haW5FbnRpdHlUeXBlOiBzQ29udGV4dFBhdGggKyBcIi9cIixcblx0XHRzaW5nbGVUYWJsZUlkLFxuXHRcdHNpbmdsZUNoYXJ0SWQsXG5cdFx0c2hvd1RhYkNvdW50cyxcblx0XHRoZWFkZXJBY3Rpb25zLFxuXHRcdHNob3dQaW5uYWJsZVRvZ2dsZTogc2hvd1Bpbm5hYmxlVG9nZ2xlLFxuXHRcdGZpbHRlckJhcjoge1xuXHRcdFx0c2VsZWN0aW9uRmllbGRzLFxuXHRcdFx0aGlkZUJhc2ljU2VhcmNoXG5cdFx0fSxcblx0XHR2aWV3czogdmlld3MsXG5cdFx0ZmlsdGVyQmFySWQsXG5cdFx0ZmlsdGVyQ29uZGl0aW9uczoge1xuXHRcdFx0c2VsZWN0aW9uVmFyaWFudDogc2VsZWN0aW9uVmFyaWFudCxcblx0XHRcdGRlZmF1bHRTZW1hbnRpY0RhdGVzOiBkZWZhdWx0U2VtYW50aWNEYXRlc1xuXHRcdH0sXG5cdFx0dmFyaWFudE1hbmFnZW1lbnQ6IHtcblx0XHRcdGlkOiBmaWx0ZXJWYXJpYW50TWFuYWdlbWVudElELFxuXHRcdFx0dGFyZ2V0Q29udHJvbElkczogdGFyZ2V0Q29udHJvbElkcy5qb2luKFwiLFwiKVxuXHRcdH0sXG5cdFx0aXNNdWx0aUVudGl0eVNldHM6IGhhc011bHRpcGxlRW50aXR5U2V0cyxcblx0XHRoYXNNdWx0aVZpc3VhbGl6YXRpb25zOiBoYXNNdWx0aVZpc3VhbGl6YXRpb25zLFxuXHRcdHVzZVNlbWFudGljRGF0ZVJhbmdlLFxuXHRcdGZpbHRlckluaXRpYWxMYXlvdXQsXG5cdFx0ZmlsdGVyTGF5b3V0XG5cdH07XG59O1xuXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb25WYXJpYW50cyhcblx0bHJUYWJsZVZpc3VhbGl6YXRpb25zOiBUYWJsZVZpc3VhbGl6YXRpb25bXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogU2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb25bXSB7XG5cdGNvbnN0IHNlbGVjdGlvblZhcmlhbnRQYXRoczogc3RyaW5nW10gPSBbXTtcblx0cmV0dXJuIGxyVGFibGVWaXN1YWxpemF0aW9uc1xuXHRcdC5tYXAodmlzdWFsaXphdGlvbiA9PiB7XG5cdFx0XHRjb25zdCB0YWJsZUZpbHRlcnMgPSB2aXN1YWxpemF0aW9uLmNvbnRyb2wuZmlsdGVycztcblx0XHRcdGNvbnN0IHRhYmxlU1ZDb25maWdzOiBTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbltdID0gW107XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiB0YWJsZUZpbHRlcnMpIHtcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkodGFibGVGaWx0ZXJzW2tleV0ucGF0aHMpKSB7XG5cdFx0XHRcdFx0Y29uc3QgcGF0aHMgPSB0YWJsZUZpbHRlcnNba2V5XS5wYXRocztcblx0XHRcdFx0XHRwYXRocy5mb3JFYWNoKHBhdGggPT4ge1xuXHRcdFx0XHRcdFx0aWYgKHBhdGggJiYgcGF0aC5hbm5vdGF0aW9uUGF0aCAmJiBzZWxlY3Rpb25WYXJpYW50UGF0aHMuaW5kZXhPZihwYXRoLmFubm90YXRpb25QYXRoKSA9PT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0c2VsZWN0aW9uVmFyaWFudFBhdGhzLnB1c2gocGF0aC5hbm5vdGF0aW9uUGF0aCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNlbGVjdGlvblZhcmlhbnRDb25maWcgPSBnZXRTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbihwYXRoLmFubm90YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdFx0XHRcdFx0aWYgKHNlbGVjdGlvblZhcmlhbnRDb25maWcpIHtcblx0XHRcdFx0XHRcdFx0XHR0YWJsZVNWQ29uZmlncy5wdXNoKHNlbGVjdGlvblZhcmlhbnRDb25maWcpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0YWJsZVNWQ29uZmlncztcblx0XHR9KVxuXHRcdC5yZWR1Y2UoKHN2Q29uZmlncywgc2VsZWN0aW9uVmFyaWFudCkgPT4gc3ZDb25maWdzLmNvbmNhdChzZWxlY3Rpb25WYXJpYW50KSwgW10pO1xufVxuXG5mdW5jdGlvbiBnZXRFeGNsdWRlZEZpbHRlclByb3BlcnRpZXMoc2VsZWN0aW9uVmFyaWFudHM6IFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uW10pOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiB7XG5cdHJldHVybiBzZWxlY3Rpb25WYXJpYW50cy5yZWR1Y2UoKHByZXZpb3VzVmFsdWU6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+LCBzZWxlY3Rpb25WYXJpYW50KSA9PiB7XG5cdFx0c2VsZWN0aW9uVmFyaWFudC5wcm9wZXJ0eU5hbWVzLmZvckVhY2gocHJvcGVydHlOYW1lID0+IHtcblx0XHRcdHByZXZpb3VzVmFsdWVbcHJvcGVydHlOYW1lXSA9IHRydWU7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHByZXZpb3VzVmFsdWU7XG5cdH0sIHt9KTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29udGVudEFyZWFJZChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LCB2aWV3czogTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uW10pOiBDb250ZW50QXJlYUlEIHwgdW5kZWZpbmVkIHtcblx0bGV0IHNpbmdsZVRhYmxlSWQgPSBcIlwiLFxuXHRcdHNpbmdsZUNoYXJ0SWQgPSBcIlwiO1xuXHRpZiAoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKCkgfHxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlXG5cdCkge1xuXHRcdGZvciAobGV0IHZpZXcgb2Ygdmlld3MpIHtcblx0XHRcdHZpZXcgPSB2aWV3IGFzIENvbWJpbmVkVmlld0RlZmluaXRpb247XG5cdFx0XHRpZiAodmlldy5jaGFydENvbnRyb2xJZCAmJiB2aWV3LnRhYmxlQ29udHJvbElkKSB7XG5cdFx0XHRcdHNpbmdsZUNoYXJ0SWQgPSB2aWV3LmNoYXJ0Q29udHJvbElkO1xuXHRcdFx0XHRzaW5nbGVUYWJsZUlkID0gdmlldy50YWJsZUNvbnRyb2xJZDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHNpbmdsZVRhYmxlSWQgPSAodmlld3NbMF0gYXMgU2luZ2xlVmlld0RlZmluaXRpb24pLnRhYmxlQ29udHJvbElkO1xuXHR9XG5cdGlmIChzaW5nbGVUYWJsZUlkIHx8IHNpbmdsZUNoYXJ0SWQpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Y2hhcnRJZDogc2luZ2xlQ2hhcnRJZCxcblx0XHRcdHRhYmxlSWQ6IHNpbmdsZVRhYmxlSWRcblx0XHR9O1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG4iXX0=
|
|
1255
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkxpc3RSZXBvcnRDb252ZXJ0ZXIudHMiXSwibmFtZXMiOlsiX2dldENvbmRpdGlvblBhdGgiLCJlbnRpdHlUeXBlIiwicHJvcGVydHlQYXRoIiwicGFydHMiLCJzcGxpdCIsInBhcnRpYWxQYXRoIiwia2V5IiwibGVuZ3RoIiwicGFydCIsInNoaWZ0IiwicHJvcGVydHkiLCJyZXNvbHZlUGF0aCIsIl90eXBlIiwiaXNDb2xsZWN0aW9uIiwiX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkIiwiZnVsbFByb3BlcnR5UGF0aCIsImluY2x1ZGVIaWRkZW4iLCJjb252ZXJ0ZXJDb250ZXh0IiwidW5kZWZpbmVkIiwidGFyZ2V0VHlwZSIsImFubm90YXRpb25zIiwiVUkiLCJIaWRkZW4iLCJ2YWx1ZU9mIiwidGFyZ2V0RW50aXR5VHlwZSIsImdldEFubm90YXRpb25FbnRpdHlUeXBlIiwiS2V5SGVscGVyIiwiZ2V0U2VsZWN0aW9uRmllbGRLZXlGcm9tUGF0aCIsImFubm90YXRpb25QYXRoIiwiZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aCIsImNvbmRpdGlvblBhdGgiLCJhdmFpbGFiaWxpdHkiLCJIaWRkZW5GaWx0ZXIiLCJBdmFpbGFiaWxpdHlUeXBlIiwiQWRhcHRhdGlvbiIsImxhYmVsIiwiY29tcGlsZUJpbmRpbmciLCJhbm5vdGF0aW9uRXhwcmVzc2lvbiIsIkNvbW1vbiIsIkxhYmVsIiwibmFtZSIsImdyb3VwIiwiZ3JvdXBMYWJlbCIsIl9nZXRTZWxlY3Rpb25GaWVsZHMiLCJuYXZpZ2F0aW9uUGF0aCIsInByb3BlcnRpZXMiLCJzZWxlY3Rpb25GaWVsZE1hcCIsImZvckVhY2giLCJmdWxsUGF0aCIsInNlbGVjdGlvbkZpZWxkIiwiX2dldFNlbGVjdGlvbkZpZWxkc0J5UGF0aCIsInByb3BlcnR5UGF0aHMiLCJzZWxlY3Rpb25GaWVsZHMiLCJsb2NhbFNlbGVjdGlvbkZpZWxkcyIsImVudGl0eVByb3BlcnRpZXMiLCJpbmNsdWRlcyIsInNwbGljZSIsImpvaW4iLCJnZXRGaWVsZEdyb3VwRmlsdGVyR3JvdXBzIiwiZmllbGRHcm91cCIsImZpbHRlckZhY2V0TWFwIiwiRGF0YSIsImRhdGFGaWVsZCIsIiRUeXBlIiwiVmFsdWUiLCJwYXRoIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwicXVhbGlmaWVyIiwiZ2V0VGFibGVWaXN1YWxpemF0aW9ucyIsInZpZXdzIiwidGFibGVzIiwidmlldyIsInR5cGUiLCJ2aXN1YWxpemF0aW9ucyIsInNlY29uZGFyeVZpc3VhbGl6YXRpb24iLCJwcmVzZW50YXRpb24iLCJ2aXN1YWxpemF0aW9uIiwiVmlzdWFsaXphdGlvblR5cGUiLCJUYWJsZSIsInB1c2giLCJnZXRGaWx0ZXJCYXJoaWRlQmFzaWNTZWFyY2giLCJsaXN0UmVwb3J0VGFibGVzIiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyIsImdldFRlbXBsYXRlVHlwZSIsIlRlbXBsYXRlVHlwZSIsIkFuYWx5dGljYWxMaXN0UGFnZSIsInNDb250ZXh0UGF0aCIsImdldENvbnRleHRQYXRoIiwiY2hlY2tBbGxUYWJsZUZvckVudGl0eVNldEFyZUFuYWx5dGljYWwiLCJjb250ZXh0UGF0aCIsImV2ZXJ5IiwiZW5hYmxlQW5hbHl0aWNzIiwiYW5ub3RhdGlvbiIsImNvbGxlY3Rpb24iLCJfZ2V0UGFyYW1ldGVyRmllbGRzIiwiZGF0YU1vZGVsT2JqZWN0UGF0aCIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJwYXJhbWV0ZXJFbnRpdHlUeXBlIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJpc1BhcmFtZXRlcml6ZWQiLCJSZXN1bHRDb250ZXh0IiwicGFyYW1ldGVyQ29udmVydGVyQ29udGV4dCIsImdldENvbnZlcnRlckNvbnRleHRGb3IiLCJwYXJhbWV0ZXJGaWVsZHMiLCJtYXAiLCJfZ2V0RmlsdGVyRmllbGQiLCJnZXRTZWxlY3Rpb25GaWVsZHMiLCJsclRhYmxlcyIsInNlbGVjdGlvblZhcmlhbnRzIiwiZ2V0U2VsZWN0aW9uVmFyaWFudHMiLCJleGNsdWRlZEZpbHRlclByb3BlcnRpZXMiLCJnZXRFeGNsdWRlZEZpbHRlclByb3BlcnRpZXMiLCJnZXRFbnRpdHlUeXBlIiwiZmlsdGVyRmFjZXRzIiwiRmlsdGVyRmFjZXRzIiwiYUZpZWxkR3JvdXBzIiwiZ2V0QW5ub3RhdGlvbnNCeVRlcm0iLCJpIiwicmVkdWNlIiwicHJldmlvdXNWYWx1ZSIsImZpbHRlckZhY2V0IiwiVGFyZ2V0IiwiJHRhcmdldCIsIklEIiwidG9TdHJpbmciLCJhU2VsZWN0T3B0aW9ucyIsInNlbGVjdGlvblZhcmlhbnQiLCJnZXRTZWxlY3Rpb25WYXJpYW50IiwiU2VsZWN0T3B0aW9ucyIsImZpbHRlckZpZWxkcyIsImdldEZpbHRlckNvbmZpZ3VyYXRpb24iLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsImRlZmF1bHRGaWx0ZXJzIiwiX2dldERlZmF1bHRGaWx0ZXJGaWVsZHMiLCJhbGxGaWx0ZXJzIiwiY29uY2F0IiwiU2VsZWN0aW9uRmllbGRzIiwidmFsdWUiLCJmaWx0ZXJGaWVsZCIsIk9iamVjdCIsImtleXMiLCJmaWx0ZXIiLCJhc3NpZ24iLCJhZ2dyZWdhdGVzIiwiYWdncmVnYXRhYmxlUHJvcGVydGllcyIsImFnZ3JlZ2F0ZUtleSIsInJlbGF0aXZlUGF0aCIsImluZGV4T2YiLCJpbnNlcnRDdXN0b21FbGVtZW50cyIsImdldE1hbmlmZXN0RmlsdGVyRmllbGRzIiwicG9zaXRpb24iLCJ0ZW1wbGF0ZSIsInNldHRpbmdzIiwidmlzdWFsRmlsdGVyIiwiZ2V0VmlzdWFsRmlsdGVycyIsInNQcm9wZXJ0eVBhdGgiLCJGaWx0ZXJGaWVsZHMiLCJvVmlzdWFsRmlsdGVyIiwidmFsdWVMaXN0Iiwib1ZGUGF0aCIsImFubm90YXRpb25RdWFsaWZpZXJTcGxpdCIsInF1YWxpZmllclZMIiwiY29sbGVjdGlvblBhdGgiLCJDb2xsZWN0aW9uUGF0aCIsImNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dCIsImdldEVudGl0eVNldCIsInZhbHVlTGlzdFBhcmFtcyIsIlBhcmFtZXRlcnMiLCJvdXRQYXJhbWV0ZXIiLCJpblBhcmFtZXRlcnMiLCJsb2NhbERhdGFQcm9wZXJ0eSIsIkxvY2FsRGF0YVByb3BlcnR5IiwidmFsdWVMaXN0UHJvcGVydHkiLCJWYWx1ZUxpc3RQcm9wZXJ0eSIsImJOb3RGaWx0ZXJhYmxlIiwiaXNQcm9wZXJ0eUZpbHRlcmFibGUiLCJvSW5QYXJhbWV0ZXIiLCJtYWluRW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24iLCJjaGVja0ZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMiLCJ2YWx1ZUxpc3RFbnRpdHlTZXRJbk1hcHBpbmdBbGxvd2VkRXhwcmVzc2lvbiIsIkVycm9yIiwicHZRdWFsaWZpZXIiLCJQcmVzZW50YXRpb25WYXJpYW50UXVhbGlmaWVyIiwic3ZRdWFsaWZpZXIiLCJTZWxlY3Rpb25WYXJpYW50UXVhbGlmaWVyIiwicHZBbm5vdGF0aW9uIiwiZ2V0RW50aXR5VHlwZUFubm90YXRpb24iLCJhZ2dyZWdhdGlvbkhlbHBlciIsIkFnZ3JlZ2F0aW9uSGVscGVyIiwiaXNBbmFseXRpY3NTdXBwb3J0ZWQiLCJhVmlzdWFsaXphdGlvbnMiLCJWaXN1YWxpemF0aW9ucyIsImNoYXJ0QW5ub3RhdGlvbiIsInRlcm0iLCJfYmdldFZGQWdncmVnYXRpb24iLCJfY2hlY2tWRkFnZ3JlZ2F0aW9uIiwiYkRpbWVuc2lvbkhpZGRlbiIsIkRpbWVuc2lvbnMiLCJiRGltZW5zaW9uSGlkZGVuRmlsdGVyIiwicHJlc2VudGF0aW9uQW5ub3RhdGlvbiIsInZpc3VhbEZpbHRlcklkIiwiVmlzdWFsRmlsdGVySUQiLCJiSXNSYW5nZSIsImJJc01haW5FbnRpdHlTZXRTaW5nbGVTZWxlY3Rpb24iLCJtdWx0aXBsZVNlbGVjdGlvbkFsbG93ZWQiLCJyZXF1aXJlZCIsImdldElzUmVxdWlyZWQiLCJzdkFubm90YXRpb24iLCJzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbiIsImVudGl0eVNldEFubm90YXRpb25zIiwicmVxdWlyZWRQcm9wZXJ0eVBhdGhzIiwicmVxdWlyZWRQcm9wZXJ0aWVzIiwiQ2FwYWJpbGl0aWVzIiwiRmlsdGVyUmVzdHJpY3Rpb25zIiwiUmVxdWlyZWRQcm9wZXJ0aWVzIiwib1JlcXVpcmVQcm9wZXJ0eSIsInNob3dPdmVybGF5SW5pdGlhbGx5Iiwic2VsZWN0T3B0aW9ucyIsIm9TZWxlY3RPcHRpb24iLCJQcm9wZXJ0eU5hbWUiLCJzb3J0Iiwic29tZSIsInNQYXRoIiwiZ2V0RGlhZ25vc3RpY3MiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJBbm5vdGF0aW9uIiwiSXNzdWVTZXZlcml0eSIsIkhpZ2giLCJJc3N1ZVR5cGUiLCJNQUxGT1JNRURfVklTVUFMRklMVEVSUyIsIkNIQVJUIiwiUFJFU0VOVEFUSU9OVkFSSUFOVCIsIlZBTFVFTElTVCIsIk1hbmlmZXN0Iiwic01lYXN1cmVQYXRoIiwiYkdyb3VwYWJsZSIsImJBZ2dyZWdhdGFibGUiLCJzTWVhc3VyZSIsIk1lYXN1cmVzIiwic0RpbWVuc2lvbiIsImN1c3RvbUFnZ3JlZ2F0ZXMiLCJnZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucyIsImFUcmFuc0FnZ3JlZ2F0aW9ucyIsImdldEVudGl0eUNvbnRhaW5lciIsImFBZ2dyZWdhdGlvbnMiLCJvQWdncmVnYXRlIiwiTmFtZSIsIkFnZ3JlZ2F0YWJsZVByb3BlcnR5IiwiYUFnZ3JlZ2F0YWJsZVByb3BzRnJvbUNvbnRhaW5lciIsIkFnZ3JlZ2F0aW9uIiwiQXBwbHlTdXBwb3J0ZWQiLCJBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzIiwiYUdyb3VwYWJsZVByb3BzRnJvbUNvbnRhaW5lciIsIkdyb3VwYWJsZVByb3BlcnRpZXMiLCJQcm9wZXJ0eSIsIlVJU2VsZWN0aW9uRmllbGRzIiwiU2VsZWN0aW9uRmllbGQiLCJzZWxlY3RPcHRpb24iLCJwcm9wZXJ0eU5hbWUiLCJGaWx0ZXJGaWVsZCIsImRlZmF1bHRGaWx0ZXJWYWx1ZSIsIkZpbHRlckRlZmF1bHRWYWx1ZSIsIlByb3BlcnR5UGF0aCIsIk1JU1NJTkdfU0VMRUNUSU9ORklFTEQiLCJEZWZhdWx0IiwiaXNQYXJhbWV0ZXIiLCJnZXREZWZhdWx0U2VtYW50aWNEYXRlcyIsImRlZmF1bHRTZW1hbnRpY0RhdGVzIiwiZGVmYXVsdFZhbHVlcyIsImdldEZpbHRlckZpZWxkIiwiZmJDb25maWciLCJkZWZpbmVkRmlsdGVyRmllbGRzIiwiZ2V0UGF0aEZyb21TZWxlY3Rpb25GaWVsZEtleSIsInNLZXkiLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnQiLCJBZnRlciIsImdldENvbXBsaWFudFZpc3VhbGl6YXRpb25Bbm5vdGF0aW9uIiwiYklzQUxQIiwiZ2V0RGVmYXVsdFRlbXBsYXRlQW5ub3RhdGlvblBhdGgiLCJzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IiwiZ2V0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCIsInByZXNlbnRhdGlvblZhcmlhbnQiLCJQcmVzZW50YXRpb25WYXJpYW50IiwiYlBWQ29tcGxhaW50IiwiaXNQcmVzZW50YXRpb25Db21wbGlhbnQiLCJpc1NlbGVjdGlvblByZXNlbnRhdGlvbkNvbXBsaWFudCIsImdldERlZmF1bHRQcmVzZW50YXRpb25WYXJpYW50IiwiZGVmYXVsdExpbmVJdGVtIiwiZ2V0RGVmYXVsdExpbmVJdGVtIiwiZ2V0VmlldyIsInZpZXdDb252ZXJ0ZXJDb25maWd1cmF0aW9uIiwiY29uZmlnIiwiZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uIiwiZ2V0UmVsYXRpdmVBbm5vdGF0aW9uUGF0aCIsInRhYmxlQ29udHJvbElkIiwiY2hhcnRDb250cm9sSWQiLCJ0aXRsZSIsInNlbGVjdGlvblZhcmlhbnRQYXRoIiwiaXNNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uIiwiY3JlYXRlVmlzdWFsaXphdGlvbiIsImlzUHJpbWFyeSIsImRlZmF1bHRWaXN1YWxpemF0aW9uIiwiQ2hhcnQiLCJwcmVzZW50YXRpb25DcmVhdGVkIiwiZ2V0UHJlc2VudGF0aW9uIiwiaXRlbSIsInJlc29sdmVkVGFyZ2V0IiwidGFyZ2V0QW5ub3RhdGlvbiIsImNyZWF0ZUFscFZpZXciLCJwcmVzZW50YXRpb25zIiwiZGVmYXVsdFBhdGgiLCJwcmltYXJ5VmlzdWFsaXphdGlvbiIsImlkIiwicHJpbWFyeSIsInNlY29uZGFyeSIsInZpZXdBbm5vdGF0aW9uIiwiVGV4dCIsInZpc3VhbGl6YXRpb25EZWZpbml0aW9uIiwiaW5kZXgiLCJ0YWJsZVZpc3VhbGl6YXRpb24iLCJmaWx0ZXJzIiwiY29udHJvbCIsImhpZGRlbkZpbHRlcnMiLCJwYXRocyIsImtlZXBQcmV2aW91c1ByZXNvbmFsaXphdGlvbiIsIlRhYmxlSUQiLCJTZWxlY3Rpb25WYXJpYW50IiwiZnJhZ21lbnQiLCJjdXN0b21UYWJJZCIsIkN1c3RvbVRhYklEIiwiZ2V0Vmlld3MiLCJzZXR0aW5nc1ZpZXdzIiwidmlld0NvbnZlcnRlckNvbmZpZ3MiLCJtYW5pZmVzdFdyYXBwZXIiLCJ2aWV3Q29udmVydGVyQ29udGV4dCIsImVudGl0eVNldCIsImdldEFscFZpZXdDb25maWciLCJ2aWV3Q29udmVydGVyQ29uZmlnIiwidmlld0NvbmZpZ3MiLCJjaGFydCIsInRhYmxlIiwiZ2V0RGVmYXVsdENoYXJ0IiwiZ2V0SGVhZGVyQWN0aW9ucyIsImdldEFjdGlvbnNGcm9tTWFuaWZlc3QiLCJjb252ZXJ0UGFnZSIsInZpZXdzRGVmaW5pdGlvbiIsImdldFZpZXdDb25maWd1cmF0aW9uIiwiaGFzTXVsdGlwbGVFbnRpdHlTZXRzIiwic2hvd1RhYkNvdW50cyIsInNob3dDb3VudHMiLCJsclRhYmxlVmlzdWFsaXphdGlvbnMiLCJzaG93UGlubmFibGVUb2dnbGUiLCJzaW5nbGVUYWJsZUlkIiwic2luZ2xlQ2hhcnRJZCIsImZpbHRlckJhcklkIiwiRmlsdGVyQmFySUQiLCJmaWx0ZXJWYXJpYW50TWFuYWdlbWVudElEIiwiRmlsdGVyVmFyaWFudE1hbmFnZW1lbnRJRCIsInRhcmdldENvbnRyb2xJZHMiLCJmaWx0ZXJJbml0aWFsTGF5b3V0IiwiaW5pdGlhbExheW91dCIsInRvTG93ZXJDYXNlIiwiZmlsdGVyTGF5b3V0IiwibGF5b3V0IiwidXNlU2VtYW50aWNEYXRlUmFuZ2UiLCJvQ29uZmlnIiwiZ2V0Q29udGVudEFyZWFJZCIsImNoYXJ0SWQiLCJ0YWJsZUlkIiwiaGlkZUJhc2ljU2VhcmNoIiwiaGVhZGVyQWN0aW9ucyIsImhhc011bHRpVmlzdWFsaXphdGlvbnMiLCJtYWluRW50aXR5U2V0IiwibWFpbkVudGl0eVR5cGUiLCJmaWx0ZXJCYXIiLCJmaWx0ZXJDb25kaXRpb25zIiwidmFyaWFudE1hbmFnZW1lbnQiLCJpc011bHRpRW50aXR5U2V0cyIsImtwaURlZmluaXRpb25zIiwiZ2V0S1BJRGVmaW5pdGlvbnMiLCJzZWxlY3Rpb25WYXJpYW50UGF0aHMiLCJ0YWJsZUZpbHRlcnMiLCJ0YWJsZVNWQ29uZmlncyIsIkFycmF5IiwiaXNBcnJheSIsInNlbGVjdGlvblZhcmlhbnRDb25maWciLCJnZXRTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbiIsInN2Q29uZmlncyIsInByb3BlcnR5TmFtZXMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnTEE7Ozs7Ozs7O0FBUUEsTUFBTUEsaUJBQWlCLEdBQUcsVUFBU0MsVUFBVCxFQUFpQ0MsWUFBakMsRUFBK0Q7QUFDeEYsUUFBTUMsS0FBSyxHQUFHRCxZQUFZLENBQUNFLEtBQWIsQ0FBbUIsR0FBbkIsQ0FBZDtBQUNBLFFBQUlDLFdBQUo7QUFDQSxRQUFJQyxHQUFHLEdBQUcsRUFBVjs7QUFDQSxXQUFPSCxLQUFLLENBQUNJLE1BQWIsRUFBcUI7QUFDcEIsVUFBSUMsSUFBSSxHQUFHTCxLQUFLLENBQUNNLEtBQU4sRUFBWDtBQUNBSixNQUFBQSxXQUFXLEdBQUdBLFdBQVcsR0FBR0EsV0FBVyxHQUFHLEdBQWQsR0FBb0JHLElBQXZCLEdBQThCQSxJQUF2RDtBQUNBLFVBQU1FLFFBQXVDLEdBQUdULFVBQVUsQ0FBQ1UsV0FB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TixDQUFtQ29PLGNBQW5EO0FBQ0E7O0FBQ0QsUUFBSTBELGFBQWEsSUFBSUMsYUFBckIsRUFBb0M7QUFDbkMsYUFBTztBQUNOYyxRQUFBQSxPQUFPLEVBQUVkLGFBREg7QUFFTmUsUUFBQUEsT0FBTyxFQUFFaEI7QUFGSCxPQUFQO0FBSUE7O0FBQ0QsV0FBT2pWLFNBQVA7QUFDQSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0QXZhaWxhYmlsaXR5VHlwZSxcblx0RmlsdGVyRmllbGRNYW5pZmVzdENvbmZpZ3VyYXRpb24sXG5cdEZpbHRlck1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0TXVsdGlwbGVWaWV3c0NvbmZpZ3VyYXRpb24sXG5cdFZpZXdQYXRoQ29uZmlndXJhdGlvbixcblx0U2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uLFxuXHRWaXN1YWxpemF0aW9uVHlwZSxcblx0RmlsdGVyU2V0dGluZ3MsXG5cdFRlbXBsYXRlVHlwZSxcblx0Q29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb24sXG5cdEN1c3RvbVZpZXdUZW1wbGF0ZUNvbmZpZ3VyYXRpb25cbn0gZnJvbSBcIi4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IEVudGl0eVR5cGUsIE5hdmlnYXRpb25Qcm9wZXJ0eSwgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC9hbm5vdGF0aW9uLWNvbnZlcnRlclwiO1xuaW1wb3J0IHtcblx0RGF0YVZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucyxcblx0RGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uLFxuXHRnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24sXG5cdGdldERlZmF1bHRDaGFydCxcblx0Z2V0RGVmYXVsdExpbmVJdGVtLFxuXHRnZXREZWZhdWx0UHJlc2VudGF0aW9uVmFyaWFudCxcblx0Z2V0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCxcblx0aXNQcmVzZW50YXRpb25Db21wbGlhbnQsXG5cdGdldFNlbGVjdGlvblZhcmlhbnQsXG5cdGlzU2VsZWN0aW9uUHJlc2VudGF0aW9uQ29tcGxpYW50XG59IGZyb20gXCIuLi9jb250cm9scy9Db21tb24vRGF0YVZpc3VhbGl6YXRpb25cIjtcbmltcG9ydCB7XG5cdExpbmVJdGVtLFxuXHRQcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzLFxuXHRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzLFxuXHRTZWxlY3RPcHRpb25UeXBlLFxuXHRTZWxlY3Rpb25WYXJpYW50VHlwZVR5cGVzLFxuXHRGaWVsZEdyb3VwVHlwZSxcblx0RmllbGRHcm91cFxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvZGlzdC9nZW5lcmF0ZWQvVUlcIjtcbmltcG9ydCB7IEFubm90YXRpb25UZXJtLCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLCBEYXRhRmllbGRUeXBlcywgUmVmZXJlbmNlRmFjZXRUeXBlcywgVUlBbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IEN1c3RvbVRhYklELCBGaWx0ZXJCYXJJRCwgRmlsdGVyVmFyaWFudE1hbmFnZW1lbnRJRCwgVGFibGVJRCwgVmlzdWFsRmlsdGVySUQgfSBmcm9tIFwiLi4vaGVscGVycy9JRFwiO1xuaW1wb3J0IHtcblx0Z2V0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24sXG5cdFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uLFxuXHRUYWJsZVZpc3VhbGl6YXRpb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgeyBDaGFydFZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQ2hhcnRcIjtcbmltcG9ydCB7IEJhc2VBY3Rpb24sIGdldEFjdGlvbnNGcm9tTWFuaWZlc3QgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgeyBDb25maWd1cmFibGVPYmplY3QsIEN1c3RvbUVsZW1lbnQsIGluc2VydEN1c3RvbUVsZW1lbnRzLCBQbGFjZW1lbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgS2V5SGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9LZXlcIjtcbmltcG9ydCB7IGFubm90YXRpb25FeHByZXNzaW9uLCBjb21waWxlQmluZGluZyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBJc3N1ZVR5cGUsIElzc3VlU2V2ZXJpdHksIElzc3VlQ2F0ZWdvcnkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lzc3VlTWFuYWdlclwiO1xuaW1wb3J0IHsgaXNQcm9wZXJ0eUZpbHRlcmFibGUsIGdldElzUmVxdWlyZWQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9GaWx0ZXJUZW1wbGF0aW5nXCI7XG5pbXBvcnQgeyBjaGVja0ZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgeyBBZ2dyZWdhdGlvbkhlbHBlciB9IGZyb20gXCIuLi9oZWxwZXJzL0FnZ3JlZ2F0aW9uXCI7XG5pbXBvcnQgeyBLUElEZWZpbml0aW9uLCBnZXRLUElEZWZpbml0aW9ucyB9IGZyb20gXCIuLi9jb250cm9scy9Db21tb24vS1BJXCI7XG5cbnR5cGUgVmlld0Fubm90YXRpb25zVHlwZVR5cGVzID0gU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyB8IFNlbGVjdGlvblZhcmlhbnRUeXBlVHlwZXM7XG50eXBlIFZhcmlhbnRNYW5hZ2VtZW50RGVmaW5pdGlvbiA9IHtcblx0aWQ6IHN0cmluZztcblx0dGFyZ2V0Q29udHJvbElkczogc3RyaW5nO1xufTtcblxudHlwZSBNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uID0gVmlld1BhdGhDb25maWd1cmF0aW9uICYge1xuXHRhbm5vdGF0aW9uPzogRGF0YVZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucztcbn07XG5cbnR5cGUgU2luZ2xlVmlld0NvbmZpZ3VyYXRpb24gPSB7XG5cdGFubm90YXRpb24/OiBEYXRhVmlzdWFsaXphdGlvbkFubm90YXRpb25zO1xufTtcblxudHlwZSBDdXN0b21WaWV3Q29uZmlndXJhdGlvbiA9IEN1c3RvbVZpZXdUZW1wbGF0ZUNvbmZpZ3VyYXRpb24gJiB7XG5cdHR5cGU6IHN0cmluZztcbn07XG5cbnR5cGUgVmlld0NvbmZpZ3VyYXRpb24gPSBNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uIHwgU2luZ2xlVmlld0NvbmZpZ3VyYXRpb24gfCBDdXN0b21WaWV3Q29uZmlndXJhdGlvbjtcbnR5cGUgVmlld0Fubm90YXRpb25Db25maWd1cmF0aW9uID0gTXVsdGlwbGVWaWV3Q29uZmlndXJhdGlvbiB8IFNpbmdsZVZpZXdDb25maWd1cmF0aW9uO1xuXG50eXBlIEZpbHRlckZpZWxkID0gQ29uZmlndXJhYmxlT2JqZWN0ICYge1xuXHRjb25kaXRpb25QYXRoOiBzdHJpbmc7XG5cdGF2YWlsYWJpbGl0eTogQXZhaWxhYmlsaXR5VHlwZTtcblx0YW5ub3RhdGlvblBhdGg6IHN0cmluZztcblx0bGFiZWw/OiBzdHJpbmc7XG5cdHRlbXBsYXRlPzogc3RyaW5nO1xuXHRncm91cD86IHN0cmluZztcblx0Z3JvdXBMYWJlbD86IHN0cmluZztcblx0c2V0dGluZ3M/OiBGaWx0ZXJTZXR0aW5ncztcblx0aXNQYXJhbWV0ZXI/OiBib29sZWFuO1xuXHR2aXN1YWxGaWx0ZXI/OiBWaXN1YWxGaWx0ZXJzO1xufTtcblxudHlwZSBWaXN1YWxGaWx0ZXJzID0ge1xuXHRkaW1lbnNpb25QYXRoPzogc3RyaW5nO1xuXHRtZWFzdXJlUGF0aD86IHN0cmluZztcblx0dmlzdWFsRmlsdGVySWQ/OiBzdHJpbmc7XG5cdGxhYmVsPzogc3RyaW5nO1xuXHRjaGFydEFubm90YXRpb24/OiBzdHJpbmc7XG5cdHByZXNlbnRhdGlvbkFubm90YXRpb24/OiBzdHJpbmc7XG5cdHZpc2libGU/OiBib29sZWFuO1xuXHRvdXRQYXJhbWV0ZXI/OiBzdHJpbmc7XG5cdGluUGFyYW1ldGVycz86IG9iamVjdFtdO1xuXHRjb250ZXh0UGF0aD86IHN0cmluZztcblx0c2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24/OiBzdHJpbmc7XG5cdG11bHRpcGxlU2VsZWN0aW9uQWxsb3dlZD86IGJvb2xlYW47XG5cdHJlcXVpcmVkPzogYm9vbGVhbjtcblx0c2hvd092ZXJsYXlJbml0aWFsbHk/OiBib29sZWFuO1xuXHRyZXF1aXJlZFByb3BlcnRpZXM/OiBvYmplY3RbXTtcbn07XG5cbnR5cGUgRmlsdGVyR3JvdXAgPSB7XG5cdGdyb3VwPzogc3RyaW5nO1xuXHRncm91cExhYmVsPzogc3RyaW5nO1xufTtcblxudHlwZSBWaWV3Q29udmVydGVyU2V0dGluZ3MgPSBWaWV3Q29uZmlndXJhdGlvbiAmIHtcblx0Y29udmVydGVyQ29udGV4dD86IENvbnZlcnRlckNvbnRleHQ7XG59O1xuXG50eXBlIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZCA9IEN1c3RvbUVsZW1lbnQ8RmlsdGVyRmllbGQ+O1xuXG50eXBlIERlZmF1bHRTZW1hbnRpY0RhdGUgPSBDb25maWd1cmFibGVPYmplY3QgJiB7XG5cdG9wZXJhdG9yOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBMaXN0UmVwb3J0RGVmaW5pdGlvbiA9IHtcblx0bWFpbkVudGl0eVNldDogc3RyaW5nO1xuXHRtYWluRW50aXR5VHlwZTogc3RyaW5nOyAvLyBlbnRpdHlUeXBlPiBhdCB0aGUgc3RhcnQgb2YgTFIgdGVtcGxhdGluZ1xuXHRzaW5nbGVUYWJsZUlkPzogc3RyaW5nOyAvLyBvbmx5IHdpdGggc2luZ2xlIFRhYmxlIG1vZGVcblx0c2luZ2xlQ2hhcnRJZD86IHN0cmluZzsgLy8gb25seSB3aXRoIHNpbmdsZSBUYWJsZSBtb2RlXG5cdHNob3dUYWJDb3VudHM/OiBib29sZWFuOyAvLyBvbmx5IHdpdGggbXVsdGkgVGFibGUgbW9kZVxuXHRoZWFkZXJBY3Rpb25zOiBCYXNlQWN0aW9uW107XG5cdHNob3dQaW5uYWJsZVRvZ2dsZT86IGJvb2xlYW47XG5cdGZpbHRlckJhcjoge1xuXHRcdHNlbGVjdGlvbkZpZWxkczogRmlsdGVyRmllbGRbXTtcblx0XHRoaWRlQmFzaWNTZWFyY2g6IGJvb2xlYW47XG5cdH07XG5cdHZpZXdzOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXTtcblx0ZmlsdGVyQ29uZGl0aW9uczogb2JqZWN0O1xuXHRpc011bHRpRW50aXR5U2V0czogYm9vbGVhbjtcblx0ZmlsdGVyQmFySWQ6IHN0cmluZztcblx0dmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50RGVmaW5pdGlvbjtcblx0aGFzTXVsdGlWaXN1YWxpemF0aW9uczogYm9vbGVhbjtcblx0dXNlU2VtYW50aWNEYXRlUmFuZ2U/OiBib29sZWFuO1xuXHRmaWx0ZXJJbml0aWFsTGF5b3V0Pzogc3RyaW5nO1xuXHRmaWx0ZXJMYXlvdXQ/OiBzdHJpbmc7XG5cdGtwaURlZmluaXRpb25zOiBLUElEZWZpbml0aW9uW107XG59O1xuXG5leHBvcnQgdHlwZSBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb24gPSBTaW5nbGVWaWV3RGVmaW5pdGlvbiB8IEN1c3RvbVZpZXdEZWZpbml0aW9uIHwgQ29tYmluZWRWaWV3RGVmaW5pdGlvbjtcblxuZXhwb3J0IHR5cGUgQ29tYmluZWRWaWV3RGVmaW5pdGlvbiA9IHtcblx0c2VsZWN0aW9uVmFyaWFudFBhdGg/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBvbiBtdWx0aSBUYWJsZSBtb2RlXG5cdHRpdGxlPzogc3RyaW5nOyAvLyBvbmx5IHdpdGggbXVsdGkgVGFibGUgbW9kZVxuXHRwcmltYXJ5VmlzdWFsaXphdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uO1xuXHRzZWNvbmRhcnlWaXN1YWxpemF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb247XG5cdHRhYmxlQ29udHJvbElkOiBzdHJpbmc7XG5cdGNoYXJ0Q29udHJvbElkOiBzdHJpbmc7XG5cdGRlZmF1bHRQYXRoPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tVmlld0RlZmluaXRpb24gPSB7XG5cdHRpdGxlPzogc3RyaW5nOyAvLyBvbmx5IHdpdGggbXVsdGkgVGFibGUgbW9kZVxuXHRmcmFnbWVudDogc3RyaW5nO1xuXHR0eXBlOiBzdHJpbmc7XG5cdGN1c3RvbVRhYklkOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTaW5nbGVWaWV3RGVmaW5pdGlvbiA9IHtcblx0c2VsZWN0aW9uVmFyaWFudFBhdGg/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBvbiBtdWx0aSBUYWJsZSBtb2RlXG5cdHRpdGxlPzogc3RyaW5nOyAvLyBvbmx5IHdpdGggbXVsdGkgVGFibGUgbW9kZVxuXHRwcmVzZW50YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbjtcblx0dGFibGVDb250cm9sSWQ6IHN0cmluZztcbn07XG5cbnR5cGUgQ29udGVudEFyZWFJRCA9IHtcblx0Y2hhcnRJZDogc3RyaW5nO1xuXHR0YWJsZUlkOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGNvbmRpdGlvbiBwYXRoIHJlcXVpcmVkIGZvciB0aGUgY29uZGl0aW9uIG1vZGVsLiBJdCBsb29rcyBsaWtlIGZvbGxvdzpcbiAqIDwxOk4tUHJvcGVydHlOYW1lPipcXC88MToxLVByb3BlcnR5TmFtZT4vPFByb3BlcnR5TmFtZT4uXG4gKlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIHJvb3QgRW50aXR5VHlbZVxuICogQHBhcmFtIHByb3BlcnR5UGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgY29uZGl0aW9uIHBhdGhcbiAqL1xuY29uc3QgX2dldENvbmRpdGlvblBhdGggPSBmdW5jdGlvbihlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLCBwcm9wZXJ0eVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG5cdGNvbnN0IHBhcnRzID0gcHJvcGVydHlQYXRoLnNwbGl0KFwiL1wiKTtcblx0bGV0IHBhcnRpYWxQYXRoO1xuXHRsZXQga2V5ID0gXCJcIjtcblx0d2hpbGUgKHBhcnRzLmxlbmd0aCkge1xuXHRcdGxldCBwYXJ0ID0gcGFydHMuc2hpZnQoKSBhcyBzdHJpbmc7XG5cdFx0cGFydGlhbFBhdGggPSBwYXJ0aWFsUGF0aCA/IHBhcnRpYWxQYXRoICsgXCIvXCIgKyBwYXJ0IDogcGFydDtcblx0XHRjb25zdCBwcm9wZXJ0eTogUHJvcGVydHkgfCBOYXZpZ2F0aW9uUHJvcGVydHkgPSBlbnRpdHlUeXBlLnJlc29sdmVQYXRoKHBhcnRpYWxQYXRoKTtcblx0XHRpZiAocHJvcGVydHkuX3R5cGUgPT09IFwiTmF2aWdhdGlvblByb3BlcnR5XCIgJiYgcHJvcGVydHkuaXNDb2xsZWN0aW9uKSB7XG5cdFx0XHRwYXJ0ICs9IFwiKlwiO1xuXHRcdH1cblx0XHRrZXkgPSBrZXkgPyBrZXkgKyBcIi9cIiArIHBhcnQgOiBwYXJ0O1xuXHR9XG5cdHJldHVybiBrZXk7XG59O1xuXG5jb25zdCBfY3JlYXRlRmlsdGVyU2VsZWN0aW9uRmllbGQgPSBmdW5jdGlvbihcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0cHJvcGVydHk6IFByb3BlcnR5LFxuXHRmdWxsUHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdGluY2x1ZGVIaWRkZW46IGJvb2xlYW4sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkIHtcblx0Ly8gaWdub3JlIGNvbXBsZXggcHJvcGVydHkgdHlwZXMgYW5kIGhpZGRlbiBhbm5vdGF0ZWQgb25lc1xuXHRpZiAoXG5cdFx0cHJvcGVydHkgIT09IHVuZGVmaW5lZCAmJlxuXHRcdHByb3BlcnR5LnRhcmdldFR5cGUgPT09IHVuZGVmaW5lZCAmJlxuXHRcdChpbmNsdWRlSGlkZGVuIHx8IHByb3BlcnR5LmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgIT09IHRydWUpXG5cdCkge1xuXHRcdGNvbnN0IHRhcmdldEVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKHByb3BlcnR5KTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2V0U2VsZWN0aW9uRmllbGRLZXlGcm9tUGF0aChmdWxsUHJvcGVydHlQYXRoKSxcblx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgoZnVsbFByb3BlcnR5UGF0aCksXG5cdFx0XHRjb25kaXRpb25QYXRoOiBfZ2V0Q29uZGl0aW9uUGF0aChlbnRpdHlUeXBlLCBmdWxsUHJvcGVydHlQYXRoKSxcblx0XHRcdGF2YWlsYWJpbGl0eTpcblx0XHRcdFx0cHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW5GaWx0ZXI/LnZhbHVlT2YoKSA9PT0gdHJ1ZSA/IEF2YWlsYWJpbGl0eVR5cGUuSGlkZGVuIDogQXZhaWxhYmlsaXR5VHlwZS5BZGFwdGF0aW9uLFxuXHRcdFx0bGFiZWw6IGNvbXBpbGVCaW5kaW5nKGFubm90YXRpb25FeHByZXNzaW9uKHByb3BlcnR5LmFubm90YXRpb25zLkNvbW1vbj8uTGFiZWw/LnZhbHVlT2YoKSB8fCBwcm9wZXJ0eS5uYW1lKSksXG5cdFx0XHRncm91cDogdGFyZ2V0RW50aXR5VHlwZS5uYW1lLFxuXHRcdFx0Z3JvdXBMYWJlbDogY29tcGlsZUJpbmRpbmcoXG5cdFx0XHRcdGFubm90YXRpb25FeHByZXNzaW9uKHRhcmdldEVudGl0eVR5cGU/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy52YWx1ZU9mKCkgfHwgdGFyZ2V0RW50aXR5VHlwZS5uYW1lKVxuXHRcdFx0KVxuXHRcdH07XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmNvbnN0IF9nZXRTZWxlY3Rpb25GaWVsZHMgPSBmdW5jdGlvbihcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0bmF2aWdhdGlvblBhdGg6IHN0cmluZyxcblx0cHJvcGVydGllczogQXJyYXk8UHJvcGVydHk+IHwgdW5kZWZpbmVkLFxuXHRpbmNsdWRlSGlkZGVuOiBib29sZWFuLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4ge1xuXHRjb25zdCBzZWxlY3Rpb25GaWVsZE1hcDogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+ID0ge307XG5cdGlmIChwcm9wZXJ0aWVzKSB7XG5cdFx0cHJvcGVydGllcy5mb3JFYWNoKChwcm9wZXJ0eTogUHJvcGVydHkpID0+IHtcblx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aDogc3RyaW5nID0gcHJvcGVydHkubmFtZTtcblx0XHRcdGNvbnN0IGZ1bGxQYXRoOiBzdHJpbmcgPSAobmF2aWdhdGlvblBhdGggPyBuYXZpZ2F0aW9uUGF0aCArIFwiL1wiIDogXCJcIikgKyBwcm9wZXJ0eVBhdGg7XG5cdFx0XHRjb25zdCBzZWxlY3Rpb25GaWVsZCA9IF9jcmVhdGVGaWx0ZXJTZWxlY3Rpb25GaWVsZChlbnRpdHlUeXBlLCBwcm9wZXJ0eSwgZnVsbFBhdGgsIGluY2x1ZGVIaWRkZW4sIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0aWYgKHNlbGVjdGlvbkZpZWxkKSB7XG5cdFx0XHRcdHNlbGVjdGlvbkZpZWxkTWFwW2Z1bGxQYXRoXSA9IHNlbGVjdGlvbkZpZWxkO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBzZWxlY3Rpb25GaWVsZE1hcDtcbn07XG5cbmNvbnN0IF9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGggPSBmdW5jdGlvbihcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0cHJvcGVydHlQYXRoczogQXJyYXk8c3RyaW5nPiB8IHVuZGVmaW5lZCxcblx0aW5jbHVkZUhpZGRlbjogYm9vbGVhbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+IHtcblx0bGV0IHNlbGVjdGlvbkZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+ID0ge307XG5cdGlmIChwcm9wZXJ0eVBhdGhzKSB7XG5cdFx0cHJvcGVydHlQYXRocy5mb3JFYWNoKChwcm9wZXJ0eVBhdGg6IHN0cmluZykgPT4ge1xuXHRcdFx0bGV0IGxvY2FsU2VsZWN0aW9uRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD47XG5cblx0XHRcdGNvbnN0IHByb3BlcnR5OiBQcm9wZXJ0eSB8IE5hdmlnYXRpb25Qcm9wZXJ0eSA9IGVudGl0eVR5cGUucmVzb2x2ZVBhdGgocHJvcGVydHlQYXRoKTtcblx0XHRcdGlmIChwcm9wZXJ0eSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmIChwcm9wZXJ0eS5fdHlwZSA9PT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlcIikge1xuXHRcdFx0XHQvLyBoYW5kbGUgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG5cdFx0XHRcdGxvY2FsU2VsZWN0aW9uRmllbGRzID0gX2dldFNlbGVjdGlvbkZpZWxkcyhcblx0XHRcdFx0XHRlbnRpdHlUeXBlLFxuXHRcdFx0XHRcdHByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRwcm9wZXJ0eS50YXJnZXRUeXBlLmVudGl0eVByb3BlcnRpZXMsXG5cdFx0XHRcdFx0aW5jbHVkZUhpZGRlbixcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2UgaWYgKHByb3BlcnR5LnRhcmdldFR5cGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHQvLyBoYW5kbGUgQ29tcGxleFR5cGUgcHJvcGVydGllc1xuXHRcdFx0XHRsb2NhbFNlbGVjdGlvbkZpZWxkcyA9IF9nZXRTZWxlY3Rpb25GaWVsZHMoXG5cdFx0XHRcdFx0ZW50aXR5VHlwZSxcblx0XHRcdFx0XHRwcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0cHJvcGVydHkudGFyZ2V0VHlwZS5wcm9wZXJ0aWVzLFxuXHRcdFx0XHRcdGluY2x1ZGVIaWRkZW4sXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgbmF2aWdhdGlvblBhdGggPSBwcm9wZXJ0eVBhdGguaW5jbHVkZXMoXCIvXCIpXG5cdFx0XHRcdFx0PyBwcm9wZXJ0eVBhdGhcblx0XHRcdFx0XHRcdFx0LnNwbGl0KFwiL1wiKVxuXHRcdFx0XHRcdFx0XHQuc3BsaWNlKDAsIDEpXG5cdFx0XHRcdFx0XHRcdC5qb2luKFwiL1wiKVxuXHRcdFx0XHRcdDogXCJcIjtcblx0XHRcdFx0bG9jYWxTZWxlY3Rpb25GaWVsZHMgPSBfZ2V0U2VsZWN0aW9uRmllbGRzKGVudGl0eVR5cGUsIG5hdmlnYXRpb25QYXRoLCBbcHJvcGVydHldLCBpbmNsdWRlSGlkZGVuLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdH1cblxuXHRcdFx0c2VsZWN0aW9uRmllbGRzID0ge1xuXHRcdFx0XHQuLi5zZWxlY3Rpb25GaWVsZHMsXG5cdFx0XHRcdC4uLmxvY2FsU2VsZWN0aW9uRmllbGRzXG5cdFx0XHR9O1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBzZWxlY3Rpb25GaWVsZHM7XG59O1xuXG4vKipcbiAqIEVudGVyIGFsbCBEYXRhRmllbGRzIG9mIGEgZ2l2ZW4gRmllbGRHcm91cCBpbnRvIHRoZSBmaWx0ZXJGYWNldE1hcC5cbiAqXG4gKiBAcGFyYW0ge0Fubm90YXRpb25UZXJtPEZpZWxkR3JvdXBUeXBlPn0gZmllbGRHcm91cFxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIEZpbHRlckdyb3VwPn0gVGhlIG1hcCBvZiBmYWNldHMgZm9yIHRoZSBnaXZlbiBmaWVsZEdyb3VwXG4gKi9cbmZ1bmN0aW9uIGdldEZpZWxkR3JvdXBGaWx0ZXJHcm91cHMoZmllbGRHcm91cDogQW5ub3RhdGlvblRlcm08RmllbGRHcm91cFR5cGU+KTogUmVjb3JkPHN0cmluZywgRmlsdGVyR3JvdXA+IHtcblx0Y29uc3QgZmlsdGVyRmFjZXRNYXA6IFJlY29yZDxzdHJpbmcsIEZpbHRlckdyb3VwPiA9IHt9O1xuXHRmaWVsZEdyb3VwLkRhdGEuZm9yRWFjaCgoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSA9PiB7XG5cdFx0aWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRcIikge1xuXHRcdFx0ZmlsdGVyRmFjZXRNYXBbZGF0YUZpZWxkLlZhbHVlLnBhdGhdID0ge1xuXHRcdFx0XHRncm91cDogZmllbGRHcm91cC5mdWxseVF1YWxpZmllZE5hbWUsXG5cdFx0XHRcdGdyb3VwTGFiZWw6XG5cdFx0XHRcdFx0Y29tcGlsZUJpbmRpbmcoXG5cdFx0XHRcdFx0XHRhbm5vdGF0aW9uRXhwcmVzc2lvbihmaWVsZEdyb3VwLkxhYmVsIHx8IGZpZWxkR3JvdXAuYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWwgfHwgZmllbGRHcm91cC5xdWFsaWZpZXIpXG5cdFx0XHRcdFx0KSB8fCBmaWVsZEdyb3VwLnF1YWxpZmllclxuXHRcdFx0fTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gZmlsdGVyRmFjZXRNYXA7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIGFsbCBsaXN0IHJlcG9ydCB0YWJsZXMuXG4gKiBAcGFyYW0ge0xpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdfSB2aWV3cyBUaGUgbGlzdCByZXBvcnQgdmlld3MgY29uZmlndXJlZCBpbiB0aGUgbWFuaWZlc3RcbiAqIEByZXR1cm5zIHtUYWJsZVZpc3VhbGl6YXRpb25bXX0gVGhlIGxpc3QgcmVwb3J0IHRhYmxlXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlVmlzdWFsaXphdGlvbnModmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdKTogVGFibGVWaXN1YWxpemF0aW9uW10ge1xuXHRjb25zdCB0YWJsZXM6IFRhYmxlVmlzdWFsaXphdGlvbltdID0gW107XG5cdHZpZXdzLmZvckVhY2goZnVuY3Rpb24odmlldykge1xuXHRcdGlmICghKHZpZXcgYXMgQ3VzdG9tVmlld0RlZmluaXRpb24pLnR5cGUpIHtcblx0XHRcdGNvbnN0IHZpc3VhbGl6YXRpb25zID0gKHZpZXcgYXMgQ29tYmluZWRWaWV3RGVmaW5pdGlvbikuc2Vjb25kYXJ5VmlzdWFsaXphdGlvblxuXHRcdFx0XHQ/ICh2aWV3IGFzIENvbWJpbmVkVmlld0RlZmluaXRpb24pLnNlY29uZGFyeVZpc3VhbGl6YXRpb24udmlzdWFsaXphdGlvbnNcblx0XHRcdFx0OiAodmlldyBhcyBTaW5nbGVWaWV3RGVmaW5pdGlvbikucHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zO1xuXG5cdFx0XHR2aXN1YWxpemF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHZpc3VhbGl6YXRpb24pIHtcblx0XHRcdFx0aWYgKHZpc3VhbGl6YXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuVGFibGUpIHtcblx0XHRcdFx0XHR0YWJsZXMucHVzaCh2aXN1YWxpemF0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHRhYmxlcztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBGaWx0ZXJCYXIgc2VhcmNoIGZpZWxkIGlzIGhpZGRlbiBvciBub3QuXG4gKlxuICogQHBhcmFtIHtUYWJsZVZpc3VhbGl6YXRpb25bXX0gbGlzdFJlcG9ydFRhYmxlcyBUaGUgbGlzdCByZXBvcnQgdGFibGVzXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVGhlIGluZm9ybWF0aW9uIGlmIHRoZSBGaWx0ZXJCYXIgc2VhcmNoIGZpZWxkIGlzIGhpZGRlbiBvciBub3RcbiAqL1xuZnVuY3Rpb24gZ2V0RmlsdGVyQmFyaGlkZUJhc2ljU2VhcmNoKGxpc3RSZXBvcnRUYWJsZXM6IFRhYmxlVmlzdWFsaXphdGlvbltdLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogYm9vbGVhbiB7XG5cdGlmIChcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMoKSB8fFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2Vcblx0KSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0Ly8gVHJpZXMgdG8gZmluZCBhIG5vbi1hbmFseXRpY2FsIHRhYmxlIHdpdGggdGhlIG1haW4gZW50aXR5IHNldCAocGFnZSBlbnRpdHkgc2V0KSBhcyBjb2xsZWN0aW9uXG5cdC8vIGlmIGF0IGxlYXN0IG9uZSB0YWJsZSBtYXRjaGVzIHRoZXNlIGNvbmRpdGlvbnMsIGJhc2ljIHNlYXJjaCBmaWVsZCBtdXN0IGJlIGRpc3BsYXllZC5cblx0Y29uc3Qgc0NvbnRleHRQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXHRyZXR1cm4gY2hlY2tBbGxUYWJsZUZvckVudGl0eVNldEFyZUFuYWx5dGljYWwobGlzdFJlcG9ydFRhYmxlcywgc0NvbnRleHRQYXRoKTtcbn1cblxuLyoqXG4gKiBDaGVjayB0aGF0IGFsbCB0aGUgdGFibGVzIGZvciBhIGRlZGljYXRlZCBlbnRpdHlzZXQgYXJlIGNvbmZpZ3VyZWQgYXMgYW5hbHl0aWNhbCB0YWJsZS5cbiAqIEBwYXJhbSB7VGFibGVWaXN1YWxpemF0aW9uW119IGxpc3RSZXBvcnRUYWJsZXMgTGlzdCBSZXBvcnQgdGFibGVzXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGV4dFBhdGhcbiAqIEByZXR1cm5zIHtib29sZWFufSBJcyBGaWx0ZXJCYXIgc2VhcmNoIGZpZWxkIGhpZGRlbiBvciBub3RcbiAqL1xuZnVuY3Rpb24gY2hlY2tBbGxUYWJsZUZvckVudGl0eVNldEFyZUFuYWx5dGljYWwobGlzdFJlcG9ydFRhYmxlczogVGFibGVWaXN1YWxpemF0aW9uW10sIGNvbnRleHRQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcblx0aWYgKGNvbnRleHRQYXRoICYmIGxpc3RSZXBvcnRUYWJsZXMubGVuZ3RoID4gMCkge1xuXHRcdHJldHVybiBsaXN0UmVwb3J0VGFibGVzLmV2ZXJ5KHZpc3VhbGl6YXRpb24gPT4ge1xuXHRcdFx0cmV0dXJuIHZpc3VhbGl6YXRpb24uZW5hYmxlQW5hbHl0aWNzICYmIGNvbnRleHRQYXRoID09PSB2aXN1YWxpemF0aW9uLmFubm90YXRpb24uY29sbGVjdGlvbjtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogR2V0IGFsbCBQYXJhbWV0ZXIgZmlsdGVyRmllbGRzIGluIGNhc2Ugb2YgYSBwYXJhbWV0ZXJpemVkIHNlcnZpY2UuXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIHtGaWx0ZXJGaWVsZFtdfSBBbiBhcnJheSBvZiBwYXJhbWV0ZXIgZmlsdGVyZmllbGRzXG4gKi9cbmZ1bmN0aW9uIF9nZXRQYXJhbWV0ZXJGaWVsZHMoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IEZpbHRlckZpZWxkW10ge1xuXHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdGNvbnN0IHBhcmFtZXRlckVudGl0eVR5cGUgPSBkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0LmVudGl0eVR5cGU7XG5cdGNvbnN0IGlzUGFyYW1ldGVyaXplZCA9ICEhcGFyYW1ldGVyRW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5SZXN1bHRDb250ZXh0O1xuXHRjb25zdCBwYXJhbWV0ZXJDb252ZXJ0ZXJDb250ZXh0ID1cblx0XHRpc1BhcmFtZXRlcml6ZWQgJiYgY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKFwiL1wiICsgZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldC5uYW1lKTtcblxuXHRjb25zdCBwYXJhbWV0ZXJGaWVsZHMgPSAocGFyYW1ldGVyQ29udmVydGVyQ29udGV4dFxuXHRcdD8gcGFyYW1ldGVyRW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLm1hcChmdW5jdGlvbihwcm9wZXJ0eSkge1xuXHRcdFx0XHRyZXR1cm4gX2dldEZpbHRlckZpZWxkKHt9IGFzIFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiwgcHJvcGVydHkubmFtZSwgcGFyYW1ldGVyQ29udmVydGVyQ29udGV4dCwgcGFyYW1ldGVyRW50aXR5VHlwZSk7XG5cdFx0ICB9KVxuXHRcdDogW10pIGFzIEZpbHRlckZpZWxkW107XG5cblx0cmV0dXJuIHBhcmFtZXRlckZpZWxkcztcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIHNlbGVjdGlvbiBmaWVsZHMgdGhhdCB3aWxsIGJlIHVzZWQgd2l0aGluIHRoZSBmaWx0ZXIgYmFyXG4gKiBUaGlzIGNvbmZpZ3VyYXRpb24gdGFrZXMgaW50byBhY2NvdW50IGFubm90YXRpb24gYW5kIHRoZSBzZWxlY3Rpb24gdmFyaWFudHMuXG4gKlxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0ge1RhYmxlVmlzdWFsaXphdGlvbltdfSBsclRhYmxlc1xuICogQHJldHVybnMge0ZpbHRlclNlbGVjdGlvbkZpZWxkW119IEFuIGFycmF5IG9mIHNlbGVjdGlvbiBmaWVsZHNcbiAqL1xuXG5leHBvcnQgY29uc3QgZ2V0U2VsZWN0aW9uRmllbGRzID0gZnVuY3Rpb24oY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCwgbHJUYWJsZXM6IFRhYmxlVmlzdWFsaXphdGlvbltdID0gW10pOiBGaWx0ZXJGaWVsZFtdIHtcblx0Ly8gRmV0Y2ggYWxsIHNlbGVjdGlvblZhcmlhbnRzIGRlZmluZWQgaW4gdGhlIGRpZmZlcmVudCB2aXN1YWxpemF0aW9ucyBhbmQgZGlmZmVyZW50IHZpZXdzIChtdWx0aSB0YWJsZSBtb2RlKVxuXHRjb25zdCBzZWxlY3Rpb25WYXJpYW50czogU2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb25bXSA9IGdldFNlbGVjdGlvblZhcmlhbnRzKGxyVGFibGVzLCBjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHQvLyBjcmVhdGUgYSBtYXAgb2YgcHJvcGVydGllcyB0byBiZSB1c2VkIGluIHNlbGVjdGlvbiB2YXJpYW50c1xuXHRjb25zdCBleGNsdWRlZEZpbHRlclByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0gZ2V0RXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzKHNlbGVjdGlvblZhcmlhbnRzKTtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRjb25zdCBmaWx0ZXJGYWNldHMgPSBlbnRpdHlUeXBlLmFubm90YXRpb25zLlVJPy5GaWx0ZXJGYWNldHM7XG5cdGxldCBmaWx0ZXJGYWNldE1hcDogUmVjb3JkPHN0cmluZywgRmlsdGVyR3JvdXA+ID0ge307XG5cblx0Y29uc3QgYUZpZWxkR3JvdXBzID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uc0J5VGVybShcIlVJXCIsIFVJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXApO1xuXG5cdGlmIChmaWx0ZXJGYWNldHMgPT09IHVuZGVmaW5lZCB8fCBmaWx0ZXJGYWNldHMubGVuZ3RoIDwgMCkge1xuXHRcdGZvciAoY29uc3QgaSBpbiBhRmllbGRHcm91cHMpIHtcblx0XHRcdGZpbHRlckZhY2V0TWFwID0ge1xuXHRcdFx0XHQuLi5maWx0ZXJGYWNldE1hcCxcblx0XHRcdFx0Li4uZ2V0RmllbGRHcm91cEZpbHRlckdyb3VwcyhhRmllbGRHcm91cHNbaV0gYXMgQW5ub3RhdGlvblRlcm08RmllbGRHcm91cFR5cGU+KVxuXHRcdFx0fTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0ZmlsdGVyRmFjZXRNYXAgPSBmaWx0ZXJGYWNldHMucmVkdWNlKChwcmV2aW91c1ZhbHVlOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJHcm91cD4sIGZpbHRlckZhY2V0OiBSZWZlcmVuY2VGYWNldFR5cGVzKSA9PiB7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IChmaWx0ZXJGYWNldC5UYXJnZXQuJHRhcmdldCBhcyBGaWVsZEdyb3VwKS5EYXRhLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHByZXZpb3VzVmFsdWVbKChmaWx0ZXJGYWNldC5UYXJnZXQuJHRhcmdldCBhcyBGaWVsZEdyb3VwKS5EYXRhW2ldIGFzIERhdGFGaWVsZFR5cGVzKS5WYWx1ZS5wYXRoXSA9IHtcblx0XHRcdFx0XHRncm91cDogZmlsdGVyRmFjZXQ/LklEPy50b1N0cmluZygpLFxuXHRcdFx0XHRcdGdyb3VwTGFiZWw6IGZpbHRlckZhY2V0Py5MYWJlbD8udG9TdHJpbmcoKVxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHByZXZpb3VzVmFsdWU7XG5cdFx0fSwge30pO1xuXHR9XG5cblx0bGV0IGFTZWxlY3RPcHRpb25zOiBhbnlbXSA9IFtdO1xuXHRjb25zdCBzZWxlY3Rpb25WYXJpYW50ID0gZ2V0U2VsZWN0aW9uVmFyaWFudChlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0aWYgKHNlbGVjdGlvblZhcmlhbnQpIHtcblx0XHRhU2VsZWN0T3B0aW9ucyA9IHNlbGVjdGlvblZhcmlhbnQuU2VsZWN0T3B0aW9ucztcblx0fVxuXG5cdC8vIGNyZWF0ZSBhIG1hcCBvZiBhbGwgcG90ZW50aWFsIGZpbHRlciBmaWVsZHMgYmFzZWQgb24uLi5cblx0Y29uc3QgZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSB7XG5cdFx0Ly8gLi4ubm9uIGhpZGRlbiBwcm9wZXJ0aWVzIG9mIHRoZSBlbnRpdHlcblx0XHQuLi5fZ2V0U2VsZWN0aW9uRmllbGRzKGVudGl0eVR5cGUsIFwiXCIsIGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcywgZmFsc2UsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdC8vIC4uLmFkZGl0aW9uYWwgbWFuaWZlc3QgZGVmaW5lZCBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcblx0XHQuLi5fZ2V0U2VsZWN0aW9uRmllbGRzQnlQYXRoKFxuXHRcdFx0ZW50aXR5VHlwZSxcblx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0RmlsdGVyQ29uZmlndXJhdGlvbigpLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLFxuXHRcdFx0ZmFsc2UsXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0KVxuXHR9O1xuXG5cdC8vRmlsdGVycyB3aGljaCBoYXMgdG8gYmUgYWRkZWQgd2hpY2ggaXMgcGFydCBvZiBTVi9EZWZhdWx0IGFubm90YXRpb25zIGJ1dCBub3QgcHJlc2VudCBpbiB0aGUgU2VsZWN0aW9uRmllbGRzXG5cdGNvbnN0IGRlZmF1bHRGaWx0ZXJzID0gX2dldERlZmF1bHRGaWx0ZXJGaWVsZHMoZmlsdGVyRmllbGRzLCBhU2VsZWN0T3B0aW9ucywgZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCwgZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzKTtcblx0Y29uc3QgcGFyYW1ldGVyRmllbGRzID0gX2dldFBhcmFtZXRlckZpZWxkcyhjb252ZXJ0ZXJDb250ZXh0KTtcblx0Ly8gZmluYWxseSBjcmVhdGUgZmluYWwgbGlzdCBvZiBmaWx0ZXIgZmllbGRzIGJ5IGFkZGluZyB0aGUgU2VsZWN0aW9uRmllbGRzIGZpcnN0IChvcmRlciBtYXR0ZXJzKS4uLlxuXHRsZXQgYWxsRmlsdGVycyA9IHBhcmFtZXRlckZpZWxkc1xuXHRcdC5jb25jYXQoXG5cdFx0XHRlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uU2VsZWN0aW9uRmllbGRzPy5yZWR1Y2UoKHNlbGVjdGlvbkZpZWxkczogRmlsdGVyRmllbGRbXSwgc2VsZWN0aW9uRmllbGQpID0+IHtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoID0gc2VsZWN0aW9uRmllbGQudmFsdWU7XG5cdFx0XHRcdGlmICghKHByb3BlcnR5UGF0aCBpbiBleGNsdWRlZEZpbHRlclByb3BlcnRpZXMpKSB7XG5cdFx0XHRcdFx0Y29uc3QgZmlsdGVyRmllbGQ6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkID0gX2dldEZpbHRlckZpZWxkKGZpbHRlckZpZWxkcywgcHJvcGVydHlQYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBlbnRpdHlUeXBlKTtcblx0XHRcdFx0XHRpZiAoZmlsdGVyRmllbGQpIHtcblx0XHRcdFx0XHRcdGZpbHRlckZpZWxkLmdyb3VwID0gXCJcIjtcblx0XHRcdFx0XHRcdGZpbHRlckZpZWxkLmdyb3VwTGFiZWwgPSBcIlwiO1xuXHRcdFx0XHRcdFx0c2VsZWN0aW9uRmllbGRzLnB1c2goZmlsdGVyRmllbGQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gc2VsZWN0aW9uRmllbGRzO1xuXHRcdFx0fSwgW10pIHx8IFtdXG5cdFx0KVxuXHRcdC8vIFRvIGFkZCB0aGUgRmlsdGVyRmllbGQgd2hpY2ggaXMgbm90IHBhcnQgb2YgdGhlIFNlbGVjdGlvbiBGaWVsZHMgYnV0IHRoZSBwcm9wZXJ0eSBpcyBtZW50aW9uZWQgaW4gdGhlIFNlbGVjdGlvbiBWYXJpYW50XG5cdFx0LmNvbmNhdChkZWZhdWx0RmlsdGVycyB8fCBbXSlcblx0XHQvLyAuLi5hbmQgYWRkaW5nIHJlbWFpbmluZyBmaWx0ZXIgZmllbGRzLCB0aGF0IGFyZSBub3QgdXNlZCBpbiBhIFNlbGVjdGlvblZhcmlhbnQgKG9yZGVyIGRvZXNuJ3QgbWF0dGVyKVxuXHRcdC5jb25jYXQoXG5cdFx0XHRPYmplY3Qua2V5cyhmaWx0ZXJGaWVsZHMpXG5cdFx0XHRcdC5maWx0ZXIocHJvcGVydHlQYXRoID0+ICEocHJvcGVydHlQYXRoIGluIGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcykpXG5cdFx0XHRcdC5tYXAocHJvcGVydHlQYXRoID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbihmaWx0ZXJGaWVsZHNbcHJvcGVydHlQYXRoXSwgZmlsdGVyRmFjZXRNYXBbcHJvcGVydHlQYXRoXSk7XG5cdFx0XHRcdH0pXG5cdFx0KTtcblx0Y29uc3Qgc0NvbnRleHRQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXG5cdC8vaWYgYWxsIHRhYmxlcyBhcmUgYW5hbHl0aWNhbCB0YWJsZXMgXCJhZ2dyZWdhdGFibGVcIiBwcm9wZXJ0aWVzIG11c3QgYmUgZXhjbHVkZWRcblx0aWYgKGNoZWNrQWxsVGFibGVGb3JFbnRpdHlTZXRBcmVBbmFseXRpY2FsKGxyVGFibGVzLCBzQ29udGV4dFBhdGgpKSB7XG5cdFx0Ly8gQ3VycmVudGx5IGFsbCBhZ3JlZ2F0ZXMgYXJlIHJvb3QgZW50aXR5IHByb3BlcnRpZXMgKG5vIHByb3BlcnRpZXMgY29taW5nIGZyb20gbmF2aWdhdGlvbikgYW5kIGFsbFxuXHRcdC8vIHRhYmxlcyB3aXRoIHNhbWUgZW50aXR5U2V0IGdldHMgc2FtZSBhZ2dyZWFndGUgY29uZmlndXJhdGlvbiB0aGF0J3Mgd2h5IHdlIGNhbiB1c2UgZmlyc3QgdGFibGUgaW50b1xuXHRcdC8vIExSIHRvIGdldCBhZ2dyZWdhdGVzICh3aXRob3V0IGN1cnJlbmN5L3VuaXQgcHJvcGVydGllcyBzaW5jZSB3ZSBleHBlY3QgdG8gYmUgYWJsZSB0byBmaWx0ZXIgdGhlbSkuXG5cdFx0Y29uc3QgYWdncmVnYXRlcyA9IGxyVGFibGVzWzBdLmFnZ3JlZ2F0ZXM7XG5cdFx0aWYgKGFnZ3JlZ2F0ZXMpIHtcblx0XHRcdGNvbnN0IGFnZ3JlZ2F0YWJsZVByb3BlcnRpZXM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMoYWdncmVnYXRlcykubWFwKGFnZ3JlZ2F0ZUtleSA9PiBhZ2dyZWdhdGVzW2FnZ3JlZ2F0ZUtleV0ucmVsYXRpdmVQYXRoKTtcblx0XHRcdGFsbEZpbHRlcnMgPSBhbGxGaWx0ZXJzLmZpbHRlcihmaWx0ZXJGaWVsZCA9PiB7XG5cdFx0XHRcdHJldHVybiBhZ2dyZWdhdGFibGVQcm9wZXJ0aWVzLmluZGV4T2YoZmlsdGVyRmllbGQua2V5KSA9PT0gLTE7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBzZWxlY3Rpb25GaWVsZHMgPSBpbnNlcnRDdXN0b21FbGVtZW50cyhhbGxGaWx0ZXJzLCBnZXRNYW5pZmVzdEZpbHRlckZpZWxkcyhlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KSwge1xuXHRcdFwiYXZhaWxhYmlsaXR5XCI6IFwib3ZlcndyaXRlXCIsXG5cdFx0bGFiZWw6IFwib3ZlcndyaXRlXCIsXG5cdFx0cG9zaXRpb246IFwib3ZlcndyaXRlXCIsXG5cdFx0dGVtcGxhdGU6IFwib3ZlcndyaXRlXCIsXG5cdFx0c2V0dGluZ3M6IFwib3ZlcndyaXRlXCIsXG5cdFx0dmlzdWFsRmlsdGVyOiBcIm92ZXJ3cml0ZVwiXG5cdH0pO1xuXHRyZXR1cm4gc2VsZWN0aW9uRmllbGRzO1xufTtcblxuY29uc3QgZ2V0VmlzdWFsRmlsdGVycyA9IGZ1bmN0aW9uKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRzUHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdEZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGRNYW5pZmVzdENvbmZpZ3VyYXRpb24+XG4pOiBWaXN1YWxGaWx0ZXJzIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgdmlzdWFsRmlsdGVyOiBWaXN1YWxGaWx0ZXJzID0ge307XG5cdGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5TZWxlY3Rpb25GaWVsZHM/Lm1hcCgoc2VsZWN0aW9uRmllbGQ6IGFueSkgPT4ge1xuXHRcdGlmIChzUHJvcGVydHlQYXRoID09PSBzZWxlY3Rpb25GaWVsZD8udmFsdWUpIHtcblx0XHRcdGNvbnN0IG9WaXN1YWxGaWx0ZXI6IEZpbHRlckZpZWxkTWFuaWZlc3RDb25maWd1cmF0aW9uID0gRmlsdGVyRmllbGRzW3NQcm9wZXJ0eVBhdGhdO1xuXHRcdFx0aWYgKG9WaXN1YWxGaWx0ZXIgJiYgb1Zpc3VhbEZpbHRlcj8udmlzdWFsRmlsdGVyICYmIG9WaXN1YWxGaWx0ZXI/LnZpc3VhbEZpbHRlcj8udmFsdWVMaXN0KSB7XG5cdFx0XHRcdGNvbnN0IG9WRlBhdGggPSBvVmlzdWFsRmlsdGVyPy52aXN1YWxGaWx0ZXI/LnZhbHVlTGlzdDtcblx0XHRcdFx0Y29uc3QgYW5ub3RhdGlvblF1YWxpZmllclNwbGl0ID0gb1ZGUGF0aC5zcGxpdChcIiNcIik7XG5cdFx0XHRcdGNvbnN0IHF1YWxpZmllclZMID1cblx0XHRcdFx0XHRhbm5vdGF0aW9uUXVhbGlmaWVyU3BsaXQubGVuZ3RoID4gMSA/IFwiVmFsdWVMaXN0I1wiICsgYW5ub3RhdGlvblF1YWxpZmllclNwbGl0WzFdIDogYW5ub3RhdGlvblF1YWxpZmllclNwbGl0WzBdO1xuXHRcdFx0XHRjb25zdCB2YWx1ZUxpc3Q6IGFueSA9IHNlbGVjdGlvbkZpZWxkLiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb25bcXVhbGlmaWVyVkxdO1xuXHRcdFx0XHRpZiAodmFsdWVMaXN0KSB7XG5cdFx0XHRcdFx0Y29uc3QgY29sbGVjdGlvblBhdGggPSB2YWx1ZUxpc3Q/LkNvbGxlY3Rpb25QYXRoO1xuXHRcdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcihcblx0XHRcdFx0XHRcdFwiL1wiICsgKGNvbGxlY3Rpb25QYXRoIHx8IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk/Lm5hbWUpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRjb25zdCB2YWx1ZUxpc3RQYXJhbXMgPSB2YWx1ZUxpc3Q/LlBhcmFtZXRlcnM7XG5cdFx0XHRcdFx0bGV0IG91dFBhcmFtZXRlcjogYW55O1xuXHRcdFx0XHRcdGNvbnN0IGluUGFyYW1ldGVyczogQXJyYXk8b2JqZWN0PiA9IFtdO1xuXHRcdFx0XHRcdGlmICh2YWx1ZUxpc3RQYXJhbXMpIHtcblx0XHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWVMaXN0UGFyYW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGxvY2FsRGF0YVByb3BlcnR5ID0gKHZhbHVlTGlzdFBhcmFtc1tpXSBhcyBhbnkpLkxvY2FsRGF0YVByb3BlcnR5Py52YWx1ZTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgdmFsdWVMaXN0UHJvcGVydHkgPSAodmFsdWVMaXN0UGFyYW1zW2ldIGFzIGFueSkuVmFsdWVMaXN0UHJvcGVydHk7XG5cdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHQodmFsdWVMaXN0UGFyYW1zW2ldPy4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UGFyYW1ldGVySW5PdXRcIiB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWVMaXN0UGFyYW1zW2ldPy4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UGFyYW1ldGVyT3V0XCIpICYmXG5cdFx0XHRcdFx0XHRcdFx0c1Byb3BlcnR5UGF0aCA9PT0gbG9jYWxEYXRhUHJvcGVydHlcblx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0b3V0UGFyYW1ldGVyID0gdmFsdWVMaXN0UGFyYW1zW2ldO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHQodmFsdWVMaXN0UGFyYW1zW2ldPy4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UGFyYW1ldGVySW5PdXRcIiB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWVMaXN0UGFyYW1zW2ldPy4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UGFyYW1ldGVySW5cIikgJiZcblx0XHRcdFx0XHRcdFx0XHRzUHJvcGVydHlQYXRoICE9PSBsb2NhbERhdGFQcm9wZXJ0eVxuXHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBiTm90RmlsdGVyYWJsZSA9IGlzUHJvcGVydHlGaWx0ZXJhYmxlKGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dCwgdmFsdWVMaXN0UHJvcGVydHkpO1xuXHRcdFx0XHRcdFx0XHRcdGlmICghYk5vdEZpbHRlcmFibGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGluUGFyYW1ldGVycy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0bG9jYWxEYXRhUHJvcGVydHk6IGxvY2FsRGF0YVByb3BlcnR5LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZUxpc3RQcm9wZXJ0eTogdmFsdWVMaXN0UHJvcGVydHlcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoaW5QYXJhbWV0ZXJzICYmIGluUGFyYW1ldGVycy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdGluUGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uKG9JblBhcmFtZXRlcjogYW55KSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG1haW5FbnRpdHlTZXRJbk1hcHBpbmdBbGxvd2VkRXhwcmVzc2lvbiA9IGNvbXBpbGVCaW5kaW5nKFxuXHRcdFx0XHRcdFx0XHRcdGNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyhcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmdldENvbnZlcnRlckNvbnRleHRGb3IoY29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKG9JblBhcmFtZXRlcj8ubG9jYWxEYXRhUHJvcGVydHkpKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdFx0XHRcdFx0XHRcdFx0W1wiU2luZ2xlVmFsdWVcIl1cblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHZhbHVlTGlzdEVudGl0eVNldEluTWFwcGluZ0FsbG93ZWRFeHByZXNzaW9uID0gY29tcGlsZUJpbmRpbmcoXG5cdFx0XHRcdFx0XHRcdFx0Y2hlY2tGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zKFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKG9JblBhcmFtZXRlcj8udmFsdWVMaXN0UHJvcGVydHkpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSxcblx0XHRcdFx0XHRcdFx0XHRcdFtcIlNpbmdsZVZhbHVlXCJdXG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWVMaXN0RW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24gPT09IFwidHJ1ZVwiICYmXG5cdFx0XHRcdFx0XHRcdFx0bWFpbkVudGl0eVNldEluTWFwcGluZ0FsbG93ZWRFeHByZXNzaW9uID09PSBcImZhbHNlXCJcblx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRcdFx0XHRcdFx0XCJGaWx0ZXJSZXN0cmljdGlvbnMgb2YgXCIgKyBzUHJvcGVydHlQYXRoICsgXCIgaW4gTWFpbkVudGl0eVNldCBhbmQgVmFsdWVMaXN0RW50aXR5U2V0IGFyZSBkaWZmZXJlbnRcIlxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBwdlF1YWxpZmllciA9IHZhbHVlTGlzdD8uUHJlc2VudGF0aW9uVmFyaWFudFF1YWxpZmllcjtcblx0XHRcdFx0XHRjb25zdCBzdlF1YWxpZmllciA9IHZhbHVlTGlzdD8uU2VsZWN0aW9uVmFyaWFudFF1YWxpZmllcjtcblx0XHRcdFx0XHRjb25zdCBwdkFubm90YXRpb246IGFueSA9IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dD8uZ2V0RW50aXR5VHlwZUFubm90YXRpb24oXG5cdFx0XHRcdFx0XHRcIkBVSS5QcmVzZW50YXRpb25WYXJpYW50I1wiICsgcHZRdWFsaWZpZXJcblx0XHRcdFx0XHQpPy5hbm5vdGF0aW9uO1xuXHRcdFx0XHRcdGNvbnN0IGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKFxuXHRcdFx0XHRcdFx0Y29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSxcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aWYgKCFhZ2dyZWdhdGlvbkhlbHBlci5pc0FuYWx5dGljc1N1cHBvcnRlZCgpKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChwdkFubm90YXRpb24pIHtcblx0XHRcdFx0XHRcdGNvbnN0IGFWaXN1YWxpemF0aW9ucyA9IHB2QW5ub3RhdGlvbj8uVmlzdWFsaXphdGlvbnM7XG5cdFx0XHRcdFx0XHRjb25zdCBjb250ZXh0UGF0aCA9IFwiL1wiICsgY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0Py5nZXRFbnRpdHlTZXQoKT8ubmFtZTtcblx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5jb250ZXh0UGF0aCA9IGNvbnRleHRQYXRoO1xuXHRcdFx0XHRcdFx0bGV0IGNoYXJ0QW5ub3RhdGlvbjtcblx0XHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYVZpc3VhbGl6YXRpb25zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChhVmlzdWFsaXphdGlvbnNbaV0uJHRhcmdldD8udGVybSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5DaGFydFwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y2hhcnRBbm5vdGF0aW9uID0gYVZpc3VhbGl6YXRpb25zW2ldO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoY2hhcnRBbm5vdGF0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IF9iZ2V0VkZBZ2dyZWdhdGlvbjogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IF9jaGVja1ZGQWdncmVnYXRpb24oXG5cdFx0XHRcdFx0XHRcdFx0Y29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRcdGNoYXJ0QW5ub3RhdGlvbixcblx0XHRcdFx0XHRcdFx0XHRhZ2dyZWdhdGlvbkhlbHBlclxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRpZiAoIV9iZ2V0VkZBZ2dyZWdhdGlvbikge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRjb25zdCBiRGltZW5zaW9uSGlkZGVuOiBib29sZWFuID0gY2hhcnRBbm5vdGF0aW9uPy4kdGFyZ2V0Py5EaW1lbnNpb25zWzBdPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBiRGltZW5zaW9uSGlkZGVuRmlsdGVyOiBib29sZWFuID0gY2hhcnRBbm5vdGF0aW9uPy4kdGFyZ2V0Py5EaW1lbnNpb25zWzBdPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbkZpbHRlcj8udmFsdWVPZigpO1xuXHRcdFx0XHRcdFx0XHRpZiAoYkRpbWVuc2lvbkhpZGRlbiA9PT0gdHJ1ZSB8fCBiRGltZW5zaW9uSGlkZGVuRmlsdGVyID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChhVmlzdWFsaXphdGlvbnMgJiYgYVZpc3VhbGl6YXRpb25zLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLmNoYXJ0QW5ub3RhdGlvbiA9IGNoYXJ0QW5ub3RhdGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ/IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dD8uZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNoYXJ0QW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUgKyBcIi8kQW5ub3RhdGlvblBhdGgvXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnByZXNlbnRhdGlvbkFubm90YXRpb24gPSBwdkFubm90YXRpb25cblx0XHRcdFx0XHRcdFx0XHRcdFx0PyBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQ/LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgocHZBbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSArIFwiL1wiKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci52aXN1YWxGaWx0ZXJJZCA9IFZpc3VhbEZpbHRlcklEKGNoYXJ0QW5ub3RhdGlvbj8uJHRhcmdldD8uRGltZW5zaW9uc1swXT8udmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLm91dFBhcmFtZXRlciA9IG91dFBhcmFtZXRlcj8uTG9jYWxEYXRhUHJvcGVydHk/LnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLmluUGFyYW1ldGVycyA9IGluUGFyYW1ldGVycztcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGJJc1JhbmdlID0gY2hlY2tGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0LmdldENvbnZlcnRlckNvbnRleHRGb3IoY29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKHNQcm9wZXJ0eVBhdGgpKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFtcIlNpbmdsZVJhbmdlXCIsIFwiTXVsdGlSYW5nZVwiXVxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGNvbXBpbGVCaW5kaW5nKGJJc1JhbmdlKSA9PT0gXCJ0cnVlXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiUmFuZ2UgQWxsb3dlZEV4cHJlc3Npb24gaXMgbm90IHN1cHBvcnRlZCBmb3IgdmlzdWFsIGZpbHRlcnNcIik7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGJJc01haW5FbnRpdHlTZXRTaW5nbGVTZWxlY3Rpb246IGFueSA9IGNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyhcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChzUHJvcGVydHlQYXRoKSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRbXCJTaW5nbGVWYWx1ZVwiXVxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5tdWx0aXBsZVNlbGVjdGlvbkFsbG93ZWQgPSBjb21waWxlQmluZGluZyghYklzTWFpbkVudGl0eVNldFNpbmdsZVNlbGVjdGlvbi52YWx1ZSkgYXMgYW55O1xuXHRcdFx0XHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnJlcXVpcmVkID0gZ2V0SXNSZXF1aXJlZChjb252ZXJ0ZXJDb250ZXh0LCBzUHJvcGVydHlQYXRoKTtcblx0XHRcdFx0XHRcdFx0XHRcdGxldCBzdkFubm90YXRpb246IGFueTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChzdlF1YWxpZmllcikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdkFubm90YXRpb24gPSBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQ/LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiQFVJLlNlbGVjdGlvblZhcmlhbnQjXCIgKyBzdlF1YWxpZmllclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpPy5hbm5vdGF0aW9uO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuc2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24gPSBzdkFubm90YXRpb25cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ/IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dD8uZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3ZBbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSArIFwiL1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBlbnRpdHlTZXRBbm5vdGF0aW9ucyA9IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8uYW5ub3RhdGlvbnM7XG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgcmVxdWlyZWRQcm9wZXJ0eVBhdGhzOiBBcnJheTxvYmplY3Q+ID0gW107XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCByZXF1aXJlZFByb3BlcnRpZXMgPSBlbnRpdHlTZXRBbm5vdGF0aW9ucz8uQ2FwYWJpbGl0aWVzPy5GaWx0ZXJSZXN0cmljdGlvbnNcblx0XHRcdFx0XHRcdFx0XHRcdFx0Py5SZXF1aXJlZFByb3BlcnRpZXMgYXMgYW55W107XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocmVxdWlyZWRQcm9wZXJ0aWVzPy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVxdWlyZWRQcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24ob1JlcXVpcmVQcm9wZXJ0eTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVxdWlyZWRQcm9wZXJ0eVBhdGhzLnB1c2gob1JlcXVpcmVQcm9wZXJ0eS52YWx1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnJlcXVpcmVkUHJvcGVydGllcyA9IHJlcXVpcmVkUHJvcGVydHlQYXRocztcblx0XHRcdFx0XHRcdFx0XHRcdGlmICh2aXN1YWxGaWx0ZXIucmVxdWlyZWRQcm9wZXJ0aWVzPy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCF2aXN1YWxGaWx0ZXIuaW5QYXJhbWV0ZXJzIHx8ICF2aXN1YWxGaWx0ZXIuaW5QYXJhbWV0ZXJzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICghdmlzdWFsRmlsdGVyLnNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuc2hvd092ZXJsYXlJbml0aWFsbHkgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsZXQgc2VsZWN0T3B0aW9uczogYW55W10gPSBbXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHN2QW5ub3RhdGlvbj8uU2VsZWN0T3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKG9TZWxlY3RPcHRpb246IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzZWxlY3RPcHRpb25zLnB1c2gob1NlbGVjdE9wdGlvbi5Qcm9wZXJ0eU5hbWUudmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXF1aXJlZFByb3BlcnR5UGF0aHMgPSByZXF1aXJlZFByb3BlcnR5UGF0aHMuc29ydCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2VsZWN0T3B0aW9ucyA9IHNlbGVjdE9wdGlvbnMuc29ydCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnNob3dPdmVybGF5SW5pdGlhbGx5ID0gcmVxdWlyZWRQcm9wZXJ0eVBhdGhzLnNvbWUoZnVuY3Rpb24oc1BhdGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNlbGVjdE9wdGlvbnMuaW5kZXhPZihzUGF0aCkgPT09IC0xO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5zaG93T3ZlcmxheUluaXRpYWxseSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuc2hvd092ZXJsYXlJbml0aWFsbHkgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuSGlnaCwgSXNzdWVUeXBlLk1BTEZPUk1FRF9WSVNVQUxGSUxURVJTLkNIQVJUKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHRcdFx0XHQuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5LkhpZ2gsIElzc3VlVHlwZS5NQUxGT1JNRURfVklTVUFMRklMVEVSUy5QUkVTRU5UQVRJT05WQVJJQU5UKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuSGlnaCwgSXNzdWVUeXBlLk1BTEZPUk1FRF9WSVNVQUxGSUxURVJTLlZBTFVFTElTVCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5Lk1hbmlmZXN0LCBJc3N1ZVNldmVyaXR5LkhpZ2gsIElzc3VlVHlwZS5NQUxGT1JNRURfVklTVUFMRklMVEVSUy5WQUxVRUxJU1QpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cdGlmIChPYmplY3Qua2V5cyh2aXN1YWxGaWx0ZXIpLmxlbmd0aCA+IDEpIHtcblx0XHRyZXR1cm4gdmlzdWFsRmlsdGVyO1xuXHR9XG59O1xuXG4vKipcbiAqIENoZWNrcyB0aGF0IG1lYXN1cmVzIGFuZCBkaW1lbnNpb25zIG9mIHRoZSB2aXN1YWwgZmlsdGVyIGNoYXJ0IGNhbiBiZSBhZ2dyZWdhdGVkIGFuZCBncm91cGVkLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gY2hhcnRBbm5vdGF0aW9uIFRoZSBjaGFydCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gYWdncmVnYXRpb25IZWxwZXIgVGhlIGFnZ3JlZ2F0aW9uIGhlbHBlclxuICogQHJldHVybnMge2Jvb2xlYW4gfCB1bmRlZmluZWQgfVxuICovXG5cbmNvbnN0IF9jaGVja1ZGQWdncmVnYXRpb24gPSBmdW5jdGlvbihcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0Y2hhcnRBbm5vdGF0aW9uOiBhbnksXG5cdGFnZ3JlZ2F0aW9uSGVscGVyOiBhbnlcbik6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuXHRsZXQgc01lYXN1cmVQYXRoLCBiR3JvdXBhYmxlLCBiQWdncmVnYXRhYmxlO1xuXHRjb25zdCBzTWVhc3VyZTogc3RyaW5nID0gY2hhcnRBbm5vdGF0aW9uPy4kdGFyZ2V0Py5NZWFzdXJlc1swXT8udmFsdWU7XG5cdGNvbnN0IHNEaW1lbnNpb246IHN0cmluZyA9IGNoYXJ0QW5ub3RhdGlvbj8uJHRhcmdldD8uRGltZW5zaW9uc1swXT8udmFsdWU7XG5cdGNvbnN0IGN1c3RvbUFnZ3JlZ2F0ZXMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucygpO1xuXHRjb25zdCBhVHJhbnNBZ2dyZWdhdGlvbnMgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25zQnlUZXJtKFxuXHRcdFwiQW5hbHl0aWNzXCIsXG5cdFx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuQWdncmVnYXRlZFByb3BlcnRpZXNcIixcblx0XHRbY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlDb250YWluZXIoKSwgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCldXG5cdCk7XG5cdGlmIChjdXN0b21BZ2dyZWdhdGVzW3NNZWFzdXJlXSkge1xuXHRcdHNNZWFzdXJlUGF0aCA9IHNNZWFzdXJlO1xuXHR9IGVsc2UgaWYgKGFUcmFuc0FnZ3JlZ2F0aW9ucyAmJiBhVHJhbnNBZ2dyZWdhdGlvbnNbMF0pIHtcblx0XHRjb25zdCBhQWdncmVnYXRpb25zID0gYVRyYW5zQWdncmVnYXRpb25zWzBdO1xuXHRcdGFBZ2dyZWdhdGlvbnMuc29tZShmdW5jdGlvbihvQWdncmVnYXRlOiBhbnkpIHtcblx0XHRcdGlmIChvQWdncmVnYXRlLk5hbWUgPT09IHNNZWFzdXJlKSB7XG5cdFx0XHRcdHNNZWFzdXJlUGF0aCA9IG9BZ2dyZWdhdGU/LkFnZ3JlZ2F0YWJsZVByb3BlcnR5LnZhbHVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdGNvbnN0IGFBZ2dyZWdhdGFibGVQcm9wc0Zyb21Db250YWluZXIgPSAoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8uYW5ub3RhdGlvbnM/LkFnZ3JlZ2F0aW9uPy5BcHBseVN1cHBvcnRlZFxuXHRcdD8uQWdncmVnYXRhYmxlUHJvcGVydGllcyB8fCBbXSkgYXMgYW55W107XG5cdGNvbnN0IGFHcm91cGFibGVQcm9wc0Zyb21Db250YWluZXIgPSAoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8uYW5ub3RhdGlvbnM/LkFnZ3JlZ2F0aW9uPy5BcHBseVN1cHBvcnRlZD8uR3JvdXBhYmxlUHJvcGVydGllcyB8fFxuXHRcdFtdKSBhcyBhbnlbXTtcblx0aWYgKGFBZ2dyZWdhdGFibGVQcm9wc0Zyb21Db250YWluZXIgJiYgYUFnZ3JlZ2F0YWJsZVByb3BzRnJvbUNvbnRhaW5lci5sZW5ndGgpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFBZ2dyZWdhdGFibGVQcm9wc0Zyb21Db250YWluZXIubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmIChhQWdncmVnYXRhYmxlUHJvcHNGcm9tQ29udGFpbmVyW2ldPy5Qcm9wZXJ0eT8udmFsdWUgPT09IHNNZWFzdXJlUGF0aCkge1xuXHRcdFx0XHRiQWdncmVnYXRhYmxlID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0aWYgKGFHcm91cGFibGVQcm9wc0Zyb21Db250YWluZXIgJiYgYUdyb3VwYWJsZVByb3BzRnJvbUNvbnRhaW5lci5sZW5ndGgpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFHcm91cGFibGVQcm9wc0Zyb21Db250YWluZXIubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmIChhR3JvdXBhYmxlUHJvcHNGcm9tQ29udGFpbmVyW2ldPy52YWx1ZSA9PT0gc0RpbWVuc2lvbikge1xuXHRcdFx0XHRiR3JvdXBhYmxlID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGJBZ2dyZWdhdGFibGUgJiYgYkdyb3VwYWJsZTtcbn07XG5cbmNvbnN0IF9nZXREZWZhdWx0RmlsdGVyRmllbGRzID0gZnVuY3Rpb24oXG5cdGZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+LFxuXHRhU2VsZWN0T3B0aW9uczogYW55W10sXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj5cbik6IEZpbHRlckZpZWxkW10ge1xuXHRjb25zdCBzZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW10gPSBbXTtcblx0Y29uc3QgVUlTZWxlY3Rpb25GaWVsZHM6IGFueSA9IHt9O1xuXHRjb25zdCBwcm9wZXJ0aWVzID0gZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzO1xuXHQvLyBVc2luZyBlbnRpdHlUeXBlIGluc3RlYWQgb2YgZW50aXR5U2V0XG5cdGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5TZWxlY3Rpb25GaWVsZHM/LmZvckVhY2goU2VsZWN0aW9uRmllbGQgPT4ge1xuXHRcdFVJU2VsZWN0aW9uRmllbGRzW1NlbGVjdGlvbkZpZWxkLnZhbHVlXSA9IHRydWU7XG5cdH0pO1xuXHRpZiAoYVNlbGVjdE9wdGlvbnMgJiYgYVNlbGVjdE9wdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdGFTZWxlY3RPcHRpb25zPy5mb3JFYWNoKChzZWxlY3RPcHRpb246IFNlbGVjdE9wdGlvblR5cGUpID0+IHtcblx0XHRcdGNvbnN0IHByb3BlcnR5TmFtZTogYW55ID0gc2VsZWN0T3B0aW9uLlByb3BlcnR5TmFtZTtcblx0XHRcdGNvbnN0IHNQcm9wZXJ0eVBhdGg6IHN0cmluZyA9IHByb3BlcnR5TmFtZS52YWx1ZTtcblx0XHRcdGNvbnN0IFVJU2VsZWN0aW9uRmllbGRzOiBhbnkgPSB7fTtcblx0XHRcdGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5TZWxlY3Rpb25GaWVsZHM/LmZvckVhY2goU2VsZWN0aW9uRmllbGQgPT4ge1xuXHRcdFx0XHRVSVNlbGVjdGlvbkZpZWxkc1tTZWxlY3Rpb25GaWVsZC52YWx1ZV0gPSB0cnVlO1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAoIShzUHJvcGVydHlQYXRoIGluIGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcykpIHtcblx0XHRcdFx0aWYgKCEoc1Byb3BlcnR5UGF0aCBpbiBVSVNlbGVjdGlvbkZpZWxkcykpIHtcblx0XHRcdFx0XHRjb25zdCBGaWx0ZXJGaWVsZDogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQgPSBfZ2V0RmlsdGVyRmllbGQoZmlsdGVyRmllbGRzLCBzUHJvcGVydHlQYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBlbnRpdHlUeXBlKTtcblx0XHRcdFx0XHRpZiAoRmlsdGVyRmllbGQpIHtcblx0XHRcdFx0XHRcdHNlbGVjdGlvbkZpZWxkcy5wdXNoKEZpbHRlckZpZWxkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIGlmIChwcm9wZXJ0aWVzKSB7XG5cdFx0cHJvcGVydGllcy5mb3JFYWNoKChwcm9wZXJ0eTogUHJvcGVydHkpID0+IHtcblx0XHRcdGNvbnN0IGRlZmF1bHRGaWx0ZXJWYWx1ZSA9IHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LkZpbHRlckRlZmF1bHRWYWx1ZTtcblx0XHRcdGNvbnN0IFByb3BlcnR5UGF0aCA9IHByb3BlcnR5Lm5hbWU7XG5cdFx0XHRpZiAoIShQcm9wZXJ0eVBhdGggaW4gZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzKSkge1xuXHRcdFx0XHRpZiAoZGVmYXVsdEZpbHRlclZhbHVlICYmICEoUHJvcGVydHlQYXRoIGluIFVJU2VsZWN0aW9uRmllbGRzKSkge1xuXHRcdFx0XHRcdGNvbnN0IEZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCA9IF9nZXRGaWx0ZXJGaWVsZChmaWx0ZXJGaWVsZHMsIFByb3BlcnR5UGF0aCwgY29udmVydGVyQ29udGV4dCwgZW50aXR5VHlwZSk7XG5cdFx0XHRcdFx0aWYgKEZpbHRlckZpZWxkKSB7XG5cdFx0XHRcdFx0XHRzZWxlY3Rpb25GaWVsZHMucHVzaChGaWx0ZXJGaWVsZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHNlbGVjdGlvbkZpZWxkcztcbn07XG5cbmNvbnN0IF9nZXRGaWx0ZXJGaWVsZCA9IGZ1bmN0aW9uKFxuXHRmaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPixcblx0cHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGVcbik6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkIHtcblx0bGV0IGZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCA9IGZpbHRlckZpZWxkc1twcm9wZXJ0eVBhdGhdO1xuXHRpZiAoZmlsdGVyRmllbGQpIHtcblx0XHRkZWxldGUgZmlsdGVyRmllbGRzW3Byb3BlcnR5UGF0aF07XG5cdH0gZWxzZSB7XG5cdFx0ZmlsdGVyRmllbGQgPSBfY3JlYXRlRmlsdGVyU2VsZWN0aW9uRmllbGQoZW50aXR5VHlwZSwgZW50aXR5VHlwZS5yZXNvbHZlUGF0aChwcm9wZXJ0eVBhdGgpLCBwcm9wZXJ0eVBhdGgsIHRydWUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHR9XG5cdGlmICghZmlsdGVyRmllbGQpIHtcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldERpYWdub3N0aWNzKCkuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5LkhpZ2gsIElzc3VlVHlwZS5NSVNTSU5HX1NFTEVDVElPTkZJRUxEKTtcblx0fVxuXHQvLyBkZWZpbmVkIFNlbGVjdGlvbkZpZWxkcyBhcmUgYXZhaWxhYmxlIGJ5IGRlZmF1bHRcblx0aWYgKGZpbHRlckZpZWxkKSB7XG5cdFx0ZmlsdGVyRmllbGQuYXZhaWxhYmlsaXR5ID0gQXZhaWxhYmlsaXR5VHlwZS5EZWZhdWx0O1xuXHRcdGZpbHRlckZpZWxkLmlzUGFyYW1ldGVyID0gISFlbnRpdHlUeXBlLmFubm90YXRpb25zPy5Db21tb24/LlJlc3VsdENvbnRleHQ7XG5cdH1cblx0cmV0dXJuIGZpbHRlckZpZWxkO1xufTtcblxuY29uc3QgZ2V0RGVmYXVsdFNlbWFudGljRGF0ZXMgPSBmdW5jdGlvbihmaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZD4pOiBSZWNvcmQ8c3RyaW5nLCBEZWZhdWx0U2VtYW50aWNEYXRlPiB7XG5cdGNvbnN0IGRlZmF1bHRTZW1hbnRpY0RhdGVzOiBhbnkgPSB7fTtcblx0Zm9yIChjb25zdCBmaWx0ZXJGaWVsZCBpbiBmaWx0ZXJGaWVsZHMpIHtcblx0XHRpZiAoZmlsdGVyRmllbGRzW2ZpbHRlckZpZWxkXT8uc2V0dGluZ3M/LmRlZmF1bHRWYWx1ZXM/Lmxlbmd0aCkge1xuXHRcdFx0ZGVmYXVsdFNlbWFudGljRGF0ZXNbZmlsdGVyRmllbGRdID0gZmlsdGVyRmllbGRzW2ZpbHRlckZpZWxkXT8uc2V0dGluZ3M/LmRlZmF1bHRWYWx1ZXM7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBkZWZhdWx0U2VtYW50aWNEYXRlcztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGaWx0ZXJGaWVsZCA9IGZ1bmN0aW9uKHByb3BlcnR5UGF0aDogc3RyaW5nLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LCBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlKSB7XG5cdHJldHVybiBfZ2V0RmlsdGVyRmllbGQoe30sIHByb3BlcnR5UGF0aCwgY29udmVydGVyQ29udGV4dCwgZW50aXR5VHlwZSk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyBmaWx0ZXIgZmllbGRzIGZyb20gdGhlIG1hbmlmZXN0LlxuICpcbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBjdXJyZW50IGVudGl0eVR5cGVcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZD59IFRoZSBmaWx0ZXIgZmllbGRzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKi9cbmNvbnN0IGdldE1hbmlmZXN0RmlsdGVyRmllbGRzID0gZnVuY3Rpb24oXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZD4ge1xuXHRjb25zdCBmYkNvbmZpZzogRmlsdGVyTWFuaWZlc3RDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRGaWx0ZXJDb25maWd1cmF0aW9uKCk7XG5cdGNvbnN0IGRlZmluZWRGaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkTWFuaWZlc3RDb25maWd1cmF0aW9uPiA9IGZiQ29uZmlnPy5maWx0ZXJGaWVsZHMgfHwge307XG5cdGNvbnN0IHNlbGVjdGlvbkZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+ID0gX2dldFNlbGVjdGlvbkZpZWxkc0J5UGF0aChcblx0XHRlbnRpdHlUeXBlLFxuXHRcdE9iamVjdC5rZXlzKGRlZmluZWRGaWx0ZXJGaWVsZHMpLm1hcChrZXkgPT4gS2V5SGVscGVyLmdldFBhdGhGcm9tU2VsZWN0aW9uRmllbGRLZXkoa2V5KSksXG5cdFx0dHJ1ZSxcblx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdCk7XG5cdGNvbnN0IGZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgQ3VzdG9tRWxlbWVudEZpbHRlckZpZWxkPiA9IHt9O1xuXG5cdGZvciAoY29uc3Qgc0tleSBpbiBkZWZpbmVkRmlsdGVyRmllbGRzKSB7XG5cdFx0Y29uc3QgZmlsdGVyRmllbGQgPSBkZWZpbmVkRmlsdGVyRmllbGRzW3NLZXldO1xuXHRcdGNvbnN0IHByb3BlcnR5TmFtZSA9IEtleUhlbHBlci5nZXRQYXRoRnJvbVNlbGVjdGlvbkZpZWxkS2V5KHNLZXkpO1xuXHRcdGNvbnN0IHNlbGVjdGlvbkZpZWxkID0gc2VsZWN0aW9uRmllbGRzW3Byb3BlcnR5TmFtZV07XG5cdFx0Y29uc3QgdmlzdWFsRmlsdGVyID0gZ2V0VmlzdWFsRmlsdGVycyhlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0LCBzS2V5LCBkZWZpbmVkRmlsdGVyRmllbGRzKTtcblx0XHRmaWx0ZXJGaWVsZHNbc0tleV0gPSB7XG5cdFx0XHRrZXk6IHNLZXksXG5cdFx0XHRhbm5vdGF0aW9uUGF0aDogc2VsZWN0aW9uRmllbGQ/LmFubm90YXRpb25QYXRoLFxuXHRcdFx0Y29uZGl0aW9uUGF0aDogc2VsZWN0aW9uRmllbGQ/LmNvbmRpdGlvblBhdGggfHwgcHJvcGVydHlOYW1lLFxuXHRcdFx0dGVtcGxhdGU6IGZpbHRlckZpZWxkLnRlbXBsYXRlLFxuXHRcdFx0bGFiZWw6IGZpbHRlckZpZWxkLmxhYmVsLFxuXHRcdFx0cG9zaXRpb246IGZpbHRlckZpZWxkLnBvc2l0aW9uIHx8IHsgcGxhY2VtZW50OiBQbGFjZW1lbnQuQWZ0ZXIgfSxcblx0XHRcdGF2YWlsYWJpbGl0eTogZmlsdGVyRmllbGQuYXZhaWxhYmlsaXR5IHx8IEF2YWlsYWJpbGl0eVR5cGUuRGVmYXVsdCxcblx0XHRcdHNldHRpbmdzOiBmaWx0ZXJGaWVsZC5zZXR0aW5ncyxcblx0XHRcdHZpc3VhbEZpbHRlcjogdmlzdWFsRmlsdGVyXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gZmlsdGVyRmllbGRzO1xufTtcblxuLyoqXG4gKiBGaW5kIGEgdmlzdWFsaXphdGlvbiBhbm5vdGF0aW9uIHRoYXQgY2FuIGJlIHVzZWQgZm9yIHJlbmRlcmluZyB0aGUgbGlzdCByZXBvcnQuXG4gKlxuICogQHBhcmFtIHtFbnRpdHlUeXBlfSBlbnRpdHlUeXBlIFRoZSBjdXJyZW50IEVudGl0eVR5cGVcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gYklzQUxQXG4gKiBAcmV0dXJucyB7TGluZUl0ZW0gfCBQcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzIHwgdW5kZWZpbmVkfSBBIGNvbXBsaWFudCBhbm5vdGF0aW9uIGZvciByZW5kZXJpbmcgdGhlIGxpc3QgcmVwb3J0XG4gKi9cbmZ1bmN0aW9uIGdldENvbXBsaWFudFZpc3VhbGl6YXRpb25Bbm5vdGF0aW9uKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRiSXNBTFA6IEJvb2xlYW5cbik6IExpbmVJdGVtIHwgUHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyB8IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXMgfCB1bmRlZmluZWQge1xuXHRjb25zdCBhbm5vdGF0aW9uUGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0RGVmYXVsdFRlbXBsYXRlQW5ub3RhdGlvblBhdGgoKTtcblx0Y29uc3Qgc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCA9IGdldFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQoZW50aXR5VHlwZSwgYW5ub3RhdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRpZiAoYW5ub3RhdGlvblBhdGggJiYgc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCkge1xuXHRcdGNvbnN0IHByZXNlbnRhdGlvblZhcmlhbnQgPSBzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LlByZXNlbnRhdGlvblZhcmlhbnQ7XG5cdFx0aWYgKCFwcmVzZW50YXRpb25WYXJpYW50KSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJQcmVzZW50YXRpb24gVmFyaWFudCBpcyBub3QgY29uZmlndXJlZCBpbiB0aGUgU1BWIG1lbnRpb25lZCBpbiB0aGUgbWFuaWZlc3RcIik7XG5cdFx0fVxuXHRcdGNvbnN0IGJQVkNvbXBsYWludCA9IGlzUHJlc2VudGF0aW9uQ29tcGxpYW50KHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQuUHJlc2VudGF0aW9uVmFyaWFudCk7XG5cdFx0aWYgKCFiUFZDb21wbGFpbnQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmIChpc1NlbGVjdGlvblByZXNlbnRhdGlvbkNvbXBsaWFudChzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LCBiSXNBTFApKSB7XG5cdFx0XHRyZXR1cm4gc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudDtcblx0XHR9XG5cdH1cblx0aWYgKHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQpIHtcblx0XHRpZiAoaXNTZWxlY3Rpb25QcmVzZW50YXRpb25Db21wbGlhbnQoc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCwgYklzQUxQKSkge1xuXHRcdFx0cmV0dXJuIHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ7XG5cdFx0fVxuXHR9XG5cdGNvbnN0IHByZXNlbnRhdGlvblZhcmlhbnQgPSBnZXREZWZhdWx0UHJlc2VudGF0aW9uVmFyaWFudChlbnRpdHlUeXBlKTtcblx0aWYgKHByZXNlbnRhdGlvblZhcmlhbnQpIHtcblx0XHRpZiAoaXNQcmVzZW50YXRpb25Db21wbGlhbnQocHJlc2VudGF0aW9uVmFyaWFudCwgYklzQUxQKSkge1xuXHRcdFx0cmV0dXJuIHByZXNlbnRhdGlvblZhcmlhbnQ7XG5cdFx0fVxuXHR9XG5cdGlmICghYklzQUxQKSB7XG5cdFx0Y29uc3QgZGVmYXVsdExpbmVJdGVtID0gZ2V0RGVmYXVsdExpbmVJdGVtKGVudGl0eVR5cGUpO1xuXHRcdGlmIChkZWZhdWx0TGluZUl0ZW0pIHtcblx0XHRcdHJldHVybiBkZWZhdWx0TGluZUl0ZW07XG5cdFx0fVxuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmNvbnN0IGdldFZpZXcgPSBmdW5jdGlvbih2aWV3Q29udmVydGVyQ29uZmlndXJhdGlvbjogVmlld0NvbnZlcnRlclNldHRpbmdzKTogTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uIHtcblx0bGV0IGNvbmZpZyA9IHZpZXdDb252ZXJ0ZXJDb25maWd1cmF0aW9uO1xuXHRpZiAoY29uZmlnLmNvbnZlcnRlckNvbnRleHQpIHtcblx0XHRsZXQgY29udmVydGVyQ29udGV4dCA9IGNvbmZpZy5jb252ZXJ0ZXJDb250ZXh0O1xuXHRcdGNvbmZpZyA9IGNvbmZpZyBhcyBWaWV3QW5ub3RhdGlvbkNvbmZpZ3VyYXRpb247XG5cdFx0bGV0IHByZXNlbnRhdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uID0gZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uKFxuXHRcdFx0Y29uZmlnLmFubm90YXRpb25cblx0XHRcdFx0PyBjb252ZXJ0ZXJDb250ZXh0LmdldFJlbGF0aXZlQW5ub3RhdGlvblBhdGgoY29uZmlnLmFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lLCBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSlcblx0XHRcdFx0OiBcIlwiLFxuXHRcdFx0dHJ1ZSxcblx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRjb25maWcgYXMgVmlld1BhdGhDb25maWd1cmF0aW9uXG5cdFx0KTtcblx0XHRsZXQgdGFibGVDb250cm9sSWQgPSBcIlwiO1xuXHRcdGxldCBjaGFydENvbnRyb2xJZCA9IFwiXCI7XG5cdFx0bGV0IHRpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBcIlwiO1xuXHRcdGxldCBzZWxlY3Rpb25WYXJpYW50UGF0aCA9IFwiXCI7XG5cdFx0Y29uc3QgaXNNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uID0gZnVuY3Rpb24oY29uZmlnOiBWaWV3Q29uZmlndXJhdGlvbik6IGNvbmZpZyBpcyBNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uIHtcblx0XHRcdHJldHVybiAoY29uZmlnIGFzIE11bHRpcGxlVmlld0NvbmZpZ3VyYXRpb24pLmtleSAhPT0gdW5kZWZpbmVkO1xuXHRcdH07XG5cdFx0Y29uc3QgY3JlYXRlVmlzdWFsaXphdGlvbiA9IGZ1bmN0aW9uKHByZXNlbnRhdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uLCBpc1ByaW1hcnk/OiBib29sZWFuKSB7XG5cdFx0XHRsZXQgZGVmYXVsdFZpc3VhbGl6YXRpb247XG5cdFx0XHRmb3IgKGNvbnN0IHZpc3VhbGl6YXRpb24gb2YgcHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zKSB7XG5cdFx0XHRcdGlmIChpc1ByaW1hcnkgJiYgdmlzdWFsaXphdGlvbi50eXBlID09PSBWaXN1YWxpemF0aW9uVHlwZS5DaGFydCkge1xuXHRcdFx0XHRcdGRlZmF1bHRWaXN1YWxpemF0aW9uID0gdmlzdWFsaXphdGlvbjtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIWlzUHJpbWFyeSAmJiB2aXN1YWxpemF0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlKSB7XG5cdFx0XHRcdFx0ZGVmYXVsdFZpc3VhbGl6YXRpb24gPSB2aXN1YWxpemF0aW9uO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBwcmVzZW50YXRpb25DcmVhdGVkID0gT2JqZWN0LmFzc2lnbih7fSwgcHJlc2VudGF0aW9uKTtcblx0XHRcdGlmIChkZWZhdWx0VmlzdWFsaXphdGlvbikge1xuXHRcdFx0XHRwcmVzZW50YXRpb25DcmVhdGVkLnZpc3VhbGl6YXRpb25zID0gW2RlZmF1bHRWaXN1YWxpemF0aW9uXTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBwcmVzZW50YXRpb25DcmVhdGVkO1xuXHRcdH07XG5cdFx0Y29uc3QgZ2V0UHJlc2VudGF0aW9uID0gZnVuY3Rpb24oaXRlbTogU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uKSB7XG5cdFx0XHRjb25zdCByZXNvbHZlZFRhcmdldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oaXRlbS5hbm5vdGF0aW9uUGF0aCk7XG5cdFx0XHRjb25zdCB0YXJnZXRBbm5vdGF0aW9uID0gcmVzb2x2ZWRUYXJnZXQuYW5ub3RhdGlvbiBhcyBEYXRhVmlzdWFsaXphdGlvbkFubm90YXRpb25zO1xuXHRcdFx0Y29udmVydGVyQ29udGV4dCA9IHJlc29sdmVkVGFyZ2V0LmNvbnZlcnRlckNvbnRleHQ7XG5cdFx0XHRjb25zdCBhbm5vdGF0aW9uID0gdGFyZ2V0QW5ub3RhdGlvbjtcblx0XHRcdHByZXNlbnRhdGlvbiA9IGdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbihcblx0XHRcdFx0YW5ub3RhdGlvblxuXHRcdFx0XHRcdD8gY29udmVydGVyQ29udGV4dC5nZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoKGFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lLCBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSlcblx0XHRcdFx0XHQ6IFwiXCIsXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdGNvbmZpZyBhcyBWaWV3UGF0aENvbmZpZ3VyYXRpb25cblx0XHRcdCk7XG5cdFx0XHRyZXR1cm4gcHJlc2VudGF0aW9uO1xuXHRcdH07XG5cdFx0Y29uc3QgY3JlYXRlQWxwVmlldyA9IGZ1bmN0aW9uKFxuXHRcdFx0cHJlc2VudGF0aW9uczogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uW10sXG5cdFx0XHRkZWZhdWx0UGF0aDogXCJib3RoXCIgfCBcInByaW1hcnlcIiB8IFwic2Vjb25kYXJ5XCIgfCB1bmRlZmluZWRcblx0XHQpIHtcblx0XHRcdGNvbnN0IHByaW1hcnlWaXN1YWxpemF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24gfCB1bmRlZmluZWQgPSBjcmVhdGVWaXN1YWxpemF0aW9uKHByZXNlbnRhdGlvbnNbMF0sIHRydWUpO1xuXHRcdFx0Y2hhcnRDb250cm9sSWQgPSAocHJpbWFyeVZpc3VhbGl6YXRpb24/LnZpc3VhbGl6YXRpb25zWzBdIGFzIENoYXJ0VmlzdWFsaXphdGlvbikuaWQ7XG5cdFx0XHRjb25zdCBzZWNvbmRhcnlWaXN1YWxpemF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24gfCB1bmRlZmluZWQgPSBjcmVhdGVWaXN1YWxpemF0aW9uKFxuXHRcdFx0XHRwcmVzZW50YXRpb25zWzFdID8gcHJlc2VudGF0aW9uc1sxXSA6IHByZXNlbnRhdGlvbnNbMF1cblx0XHRcdCk7XG5cdFx0XHR0YWJsZUNvbnRyb2xJZCA9IChzZWNvbmRhcnlWaXN1YWxpemF0aW9uPy52aXN1YWxpemF0aW9uc1swXSBhcyBUYWJsZVZpc3VhbGl6YXRpb24pLmFubm90YXRpb24uaWQ7XG5cdFx0XHRpZiAocHJpbWFyeVZpc3VhbGl6YXRpb24gJiYgc2Vjb25kYXJ5VmlzdWFsaXphdGlvbikge1xuXHRcdFx0XHRjb25zdCB2aWV3OiBDb21iaW5lZFZpZXdEZWZpbml0aW9uID0ge1xuXHRcdFx0XHRcdHByaW1hcnlWaXN1YWxpemF0aW9uLFxuXHRcdFx0XHRcdHNlY29uZGFyeVZpc3VhbGl6YXRpb24sXG5cdFx0XHRcdFx0dGFibGVDb250cm9sSWQsXG5cdFx0XHRcdFx0Y2hhcnRDb250cm9sSWQsXG5cdFx0XHRcdFx0ZGVmYXVsdFBhdGhcblx0XHRcdFx0fTtcblx0XHRcdFx0cmV0dXJuIHZpZXc7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRpZiAocHJlc2VudGF0aW9uPy52aXN1YWxpemF0aW9ucz8ubGVuZ3RoID09PSAyICYmIGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2UpIHtcblx0XHRcdGNvbnN0IHZpZXc6IENvbWJpbmVkVmlld0RlZmluaXRpb24gfCB1bmRlZmluZWQgPSBjcmVhdGVBbHBWaWV3KFtwcmVzZW50YXRpb25dLCBcImJvdGhcIik7XG5cdFx0XHRpZiAodmlldykge1xuXHRcdFx0XHRyZXR1cm4gdmlldztcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKGNvbmZpZyBhcyBWaWV3UGF0aENvbmZpZ3VyYXRpb24pIHx8XG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlXG5cdFx0KSB7XG5cdFx0XHRjb25zdCB7IHByaW1hcnksIHNlY29uZGFyeSB9ID0gY29uZmlnIGFzIENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uO1xuXHRcdFx0aWYgKHByaW1hcnkgJiYgcHJpbWFyeS5sZW5ndGggJiYgc2Vjb25kYXJ5ICYmIHNlY29uZGFyeS5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgdmlldzogQ29tYmluZWRWaWV3RGVmaW5pdGlvbiB8IHVuZGVmaW5lZCA9IGNyZWF0ZUFscFZpZXcoXG5cdFx0XHRcdFx0W2dldFByZXNlbnRhdGlvbihwcmltYXJ5WzBdKSwgZ2V0UHJlc2VudGF0aW9uKHNlY29uZGFyeVswXSldLFxuXHRcdFx0XHRcdChjb25maWcgYXMgQ29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb24pLmRlZmF1bHRQYXRoXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmICh2aWV3KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHZpZXc7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIlNlY29uZGFyeUl0ZW1zIGluIHRoZSBWaWV3cyBpcyBub3QgcHJlc2VudFwiKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGlzTXVsdGlwbGVWaWV3Q29uZmlndXJhdGlvbihjb25maWcpKSB7XG5cdFx0XHQvLyBrZXkgZXhpc3RzIG9ubHkgb24gbXVsdGkgdGFibGVzIG1vZGVcblx0XHRcdGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbigoY29uZmlnIGFzIFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbikuYW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0Y29uc3Qgdmlld0Fubm90YXRpb246IFZpZXdBbm5vdGF0aW9uc1R5cGVUeXBlcyA9IHJlc29sdmVkVGFyZ2V0LmFubm90YXRpb24gYXMgVmlld0Fubm90YXRpb25zVHlwZVR5cGVzO1xuXHRcdFx0Y29udmVydGVyQ29udGV4dCA9IHJlc29sdmVkVGFyZ2V0LmNvbnZlcnRlckNvbnRleHQ7XG5cdFx0XHR0aXRsZSA9IGNvbXBpbGVCaW5kaW5nKGFubm90YXRpb25FeHByZXNzaW9uKHZpZXdBbm5vdGF0aW9uLlRleHQpKTtcblx0XHRcdC8vIE5lZWQgdG8gbG9vcCBvbiB0YWJsZSBpbnRvIHZpZXdzIHNpbmNlIG11bHRpIHRhYmxlIG1vZGUgZ2V0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gKGhpZGRlbiBmaWx0ZXJzIG9yIFRhYmxlIElkKVxuXHRcdFx0cHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zLmZvckVhY2goKHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLCBpbmRleCkgPT4ge1xuXHRcdFx0XHRzd2l0Y2ggKHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLnR5cGUpIHtcblx0XHRcdFx0XHRjYXNlIFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlOlxuXHRcdFx0XHRcdFx0Y29uc3QgdGFibGVWaXN1YWxpemF0aW9uID0gcHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zW2luZGV4XSBhcyBUYWJsZVZpc3VhbGl6YXRpb247XG5cdFx0XHRcdFx0XHRjb25zdCBmaWx0ZXJzID0gdGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wuZmlsdGVycyB8fCB7fTtcblx0XHRcdFx0XHRcdGZpbHRlcnMuaGlkZGVuRmlsdGVycyA9IGZpbHRlcnMuaGlkZGVuRmlsdGVycyB8fCB7IHBhdGhzOiBbXSB9O1xuXHRcdFx0XHRcdFx0aWYgKCEoY29uZmlnIGFzIFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbikua2VlcFByZXZpb3VzUHJlc29uYWxpemF0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdC8vIE5lZWQgdG8gb3ZlcnJpZGUgVGFibGUgSWQgdG8gbWF0Y2ggd2l0aCBUYWIgS2V5IChjdXJyZW50bHkgb25seSB0YWJsZSBpcyBtYW5hZ2VkIGluIG11bHRpcGxlIHZpZXcgbW9kZSlcblx0XHRcdFx0XHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmFubm90YXRpb24uaWQgPSBUYWJsZUlEKChjb25maWcgYXMgU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uKS5rZXkgfHwgXCJcIiwgXCJMaW5lSXRlbVwiKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNvbmZpZyA9IGNvbmZpZyBhcyBWaWV3QW5ub3RhdGlvbkNvbmZpZ3VyYXRpb247XG5cdFx0XHRcdFx0XHRpZiAoY29uZmlnICYmIGNvbmZpZy5hbm5vdGF0aW9uICYmIGNvbmZpZy5hbm5vdGF0aW9uLnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQpIHtcblx0XHRcdFx0XHRcdFx0c2VsZWN0aW9uVmFyaWFudFBhdGggPSAoY29uZmlnLmFubm90YXRpb24gYXMgU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcykuU2VsZWN0aW9uVmFyaWFudC5mdWxseVF1YWxpZmllZE5hbWUuc3BsaXQoXG5cdFx0XHRcdFx0XHRcdFx0XCJAXCJcblx0XHRcdFx0XHRcdFx0KVsxXTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHNlbGVjdGlvblZhcmlhbnRQYXRoID0gKGNvbmZpZyBhcyBTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb24pLmFubm90YXRpb25QYXRoO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Ly9Qcm92aWRlIFNlbGVjdGlvbiBWYXJpYW50IHRvIGhpZGRlbkZpbHRlcnMgaW4gb3JkZXIgdG8gc2V0IHRoZSBTViBmaWx0ZXJzIHRvIHRoZSB0YWJsZS5cblx0XHRcdFx0XHRcdC8vTURDIFRhYmxlIG92ZXJyaWRlcyBiaW5kaW5nIEZpbHRlciBhbmQgZnJvbSBTQVAgRkUgdGhlIG9ubHkgbWV0aG9kIHdoZXJlIHdlIGFyZSBhYmxlIHRvIGFkZFxuXHRcdFx0XHRcdFx0Ly9hZGRpdGlvbmFsIGZpbHRlciBpcyAncmViaW5kVGFibGUnIGludG8gVGFibGUgZGVsZWdhdGUuXG5cdFx0XHRcdFx0XHQvL1RvIGF2b2lkIGltcGxlbWVudGluZyBzcGVjaWZpYyBMUiBmZWF0dXJlIHRvIFNBUCBGRSBNYWNybyBUYWJsZSwgdGhlIGZpbHRlcihzKSByZWxhdGVkIHRvIHRoZSBUYWIgKG11bHRpIHRhYmxlIG1vZGUpXG5cdFx0XHRcdFx0XHQvL2NhbiBiZSBwYXNzZWQgdG8gbWFjcm8gdGFibGUgdmlhIHBhcmFtZXRlci9jb250ZXh0IG5hbWVkIGZpbHRlcnMgYW5kIGtleSBoaWRkZW5GaWx0ZXJzLlxuXHRcdFx0XHRcdFx0ZmlsdGVycy5oaWRkZW5GaWx0ZXJzLnBhdGhzLnB1c2goeyBhbm5vdGF0aW9uUGF0aDogc2VsZWN0aW9uVmFyaWFudFBhdGggfSk7XG5cdFx0XHRcdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC5maWx0ZXJzID0gZmlsdGVycztcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQ6XG5cdFx0XHRcdFx0XHQvLyBOb3QgY3VycmVudGx5IG1hbmFnZWRcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9ucy5mb3JFYWNoKHZpc3VhbGl6YXRpb25EZWZpbml0aW9uID0+IHtcblx0XHRcdGlmICh2aXN1YWxpemF0aW9uRGVmaW5pdGlvbi50eXBlID09PSBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZSkge1xuXHRcdFx0XHR0YWJsZUNvbnRyb2xJZCA9IHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLmFubm90YXRpb24uaWQ7XG5cdFx0XHR9IGVsc2UgaWYgKHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KSB7XG5cdFx0XHRcdGNoYXJ0Q29udHJvbElkID0gdmlzdWFsaXphdGlvbkRlZmluaXRpb24uaWQ7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHByZXNlbnRhdGlvbixcblx0XHRcdHRhYmxlQ29udHJvbElkLFxuXHRcdFx0Y2hhcnRDb250cm9sSWQsXG5cdFx0XHR0aXRsZSxcblx0XHRcdHNlbGVjdGlvblZhcmlhbnRQYXRoXG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHRjb25maWcgPSBjb25maWcgYXMgQ3VzdG9tVmlld0NvbmZpZ3VyYXRpb247XG5cdFx0Y29uc3QgdGl0bGUgPSBjb25maWcubGFiZWwsXG5cdFx0XHRmcmFnbWVudCA9IGNvbmZpZy50ZW1wbGF0ZSxcblx0XHRcdHR5cGUgPSBjb25maWcudHlwZSxcblx0XHRcdGN1c3RvbVRhYklkID0gQ3VzdG9tVGFiSUQoY29uZmlnLmtleSB8fCBcIlwiKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dGl0bGUsXG5cdFx0XHRmcmFnbWVudCxcblx0XHRcdHR5cGUsXG5cdFx0XHRjdXN0b21UYWJJZFxuXHRcdH07XG5cdH1cbn07XG5cbmNvbnN0IGdldFZpZXdzID0gZnVuY3Rpb24oXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHNldHRpbmdzVmlld3M6IE11bHRpcGxlVmlld3NDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkXG4pOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXSB7XG5cdGxldCB2aWV3Q29udmVydGVyQ29uZmlnczogVmlld0NvbnZlcnRlclNldHRpbmdzW10gPSBbXTtcblx0aWYgKHNldHRpbmdzVmlld3MpIHtcblx0XHRzZXR0aW5nc1ZpZXdzLnBhdGhzLmZvckVhY2goKHBhdGg6IFZpZXdQYXRoQ29uZmlndXJhdGlvbiB8IEN1c3RvbVZpZXdUZW1wbGF0ZUNvbmZpZ3VyYXRpb24pID0+IHtcblx0XHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMocGF0aCBhcyBWaWV3UGF0aENvbmZpZ3VyYXRpb24pKSB7XG5cdFx0XHRcdGlmIChzZXR0aW5nc1ZpZXdzLnBhdGhzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJBTFAgZmxhdm9yIGNhbm5vdCBoYXZlIG11bHRpcGxlIHZpZXdzXCIpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHBhdGggPSBwYXRoIGFzIENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uO1xuXHRcdFx0XHRcdHZpZXdDb252ZXJ0ZXJDb25maWdzLnB1c2goe1xuXHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogY29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdHByaW1hcnk6IHBhdGgucHJpbWFyeSxcblx0XHRcdFx0XHRcdHNlY29uZGFyeTogcGF0aC5zZWNvbmRhcnksXG5cdFx0XHRcdFx0XHRkZWZhdWx0UGF0aDogcGF0aC5kZWZhdWx0UGF0aFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKChwYXRoIGFzIEN1c3RvbVZpZXdDb25maWd1cmF0aW9uKS50ZW1wbGF0ZSkge1xuXHRcdFx0XHRwYXRoID0gcGF0aCBhcyBDdXN0b21WaWV3Q29uZmlndXJhdGlvbjtcblx0XHRcdFx0dmlld0NvbnZlcnRlckNvbmZpZ3MucHVzaCh7XG5cdFx0XHRcdFx0a2V5OiBwYXRoLmtleSxcblx0XHRcdFx0XHRsYWJlbDogcGF0aC5sYWJlbCxcblx0XHRcdFx0XHR0ZW1wbGF0ZTogcGF0aC50ZW1wbGF0ZSxcblx0XHRcdFx0XHR0eXBlOiBcIkN1c3RvbVwiXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cGF0aCA9IHBhdGggYXMgU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uO1xuXHRcdFx0XHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLFxuXHRcdFx0XHRcdHZpZXdDb252ZXJ0ZXJDb250ZXh0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKFxuXHRcdFx0XHRcdFx0cGF0aC5jb250ZXh0UGF0aCB8fCAocGF0aC5lbnRpdHlTZXQgJiYgXCIvXCIgKyBwYXRoLmVudGl0eVNldCkgfHwgY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRlbnRpdHlUeXBlID0gdmlld0NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXG5cdFx0XHRcdGlmIChlbnRpdHlUeXBlICYmIHZpZXdDb252ZXJ0ZXJDb250ZXh0KSB7XG5cdFx0XHRcdFx0Y29uc3QgYW5ub3RhdGlvblBhdGggPSBtYW5pZmVzdFdyYXBwZXIuZ2V0RGVmYXVsdFRlbXBsYXRlQW5ub3RhdGlvblBhdGgoKTtcblx0XHRcdFx0XHRsZXQgYW5ub3RhdGlvbjtcblx0XHRcdFx0XHRjb25zdCByZXNvbHZlZFRhcmdldCA9IHZpZXdDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKHBhdGguYW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0XHRcdGNvbnN0IHRhcmdldEFubm90YXRpb24gPSByZXNvbHZlZFRhcmdldC5hbm5vdGF0aW9uIGFzIERhdGFWaXN1YWxpemF0aW9uQW5ub3RhdGlvbnM7XG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCA9IHJlc29sdmVkVGFyZ2V0LmNvbnZlcnRlckNvbnRleHQ7XG5cdFx0XHRcdFx0aWYgKHRhcmdldEFubm90YXRpb24pIHtcblx0XHRcdFx0XHRcdGlmICh0YXJnZXRBbm5vdGF0aW9uLnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblZhcmlhbnQpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGFubm90YXRpb25QYXRoKSB7XG5cdFx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvbiA9IGdldFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQoXG5cdFx0XHRcdFx0XHRcdFx0XHR2aWV3Q29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksXG5cdFx0XHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGFubm90YXRpb24gPSBnZXREZWZhdWx0TGluZUl0ZW0odmlld0NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpKSBhcyBMaW5lSXRlbTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvbiA9IHRhcmdldEFubm90YXRpb247XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR2aWV3Q29udmVydGVyQ29uZmlncy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogdmlld0NvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb24sXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb25QYXRoOiBwYXRoLmFubm90YXRpb25QYXRoLFxuXHRcdFx0XHRcdFx0XHRrZWVwUHJldmlvdXNQcmVzb25hbGl6YXRpb246IHBhdGgua2VlcFByZXZpb3VzUHJlc29uYWxpemF0aW9uLFxuXHRcdFx0XHRcdFx0XHRrZXk6IHBhdGgua2V5XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gVE9ETyBEaWFnbm9zdGljcyBtZXNzYWdlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdFx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2UpIHtcblx0XHRcdHZpZXdDb252ZXJ0ZXJDb25maWdzID0gZ2V0QWxwVmlld0NvbmZpZyhjb252ZXJ0ZXJDb250ZXh0LCB2aWV3Q29udmVydGVyQ29uZmlncyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZpZXdDb252ZXJ0ZXJDb25maWdzLnB1c2goe1xuXHRcdFx0XHRhbm5vdGF0aW9uOiBnZXRDb21wbGlhbnRWaXN1YWxpemF0aW9uQW5ub3RhdGlvbihlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0LCBmYWxzZSksXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQ6IGNvbnZlcnRlckNvbnRleHRcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdmlld0NvbnZlcnRlckNvbmZpZ3MubWFwKHZpZXdDb252ZXJ0ZXJDb25maWcgPT4ge1xuXHRcdHJldHVybiBnZXRWaWV3KHZpZXdDb252ZXJ0ZXJDb25maWcpO1xuXHR9KTtcbn07XG5cbmZ1bmN0aW9uIGdldEFscFZpZXdDb25maWcoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCwgdmlld0NvbmZpZ3M6IFZpZXdDb252ZXJ0ZXJTZXR0aW5nc1tdKTogVmlld0NvbnZlcnRlclNldHRpbmdzW10ge1xuXHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdGNvbnN0IGFubm90YXRpb24gPSBnZXRDb21wbGlhbnRWaXN1YWxpemF0aW9uQW5ub3RhdGlvbihlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0LCB0cnVlKTtcblx0bGV0IGNoYXJ0LCB0YWJsZTtcblx0aWYgKGFubm90YXRpb24pIHtcblx0XHR2aWV3Q29uZmlncy5wdXNoKHtcblx0XHRcdGFubm90YXRpb246IGFubm90YXRpb24sXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0Y2hhcnQgPSBnZXREZWZhdWx0Q2hhcnQoZW50aXR5VHlwZSk7XG5cdFx0dGFibGUgPSBnZXREZWZhdWx0TGluZUl0ZW0oZW50aXR5VHlwZSk7XG5cdFx0aWYgKGNoYXJ0ICYmIHRhYmxlKSB7XG5cdFx0XHRjb25zdCBwcmltYXJ5OiBTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb25bXSA9IFt7IGFubm90YXRpb25QYXRoOiBjaGFydC50ZXJtIH1dO1xuXHRcdFx0Y29uc3Qgc2Vjb25kYXJ5OiBTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb25bXSA9IFt7IGFubm90YXRpb25QYXRoOiB0YWJsZS50ZXJtIH1dO1xuXHRcdFx0dmlld0NvbmZpZ3MucHVzaCh7XG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQ6IGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdHByaW1hcnk6IHByaW1hcnksXG5cdFx0XHRcdHNlY29uZGFyeTogc2Vjb25kYXJ5LFxuXHRcdFx0XHRkZWZhdWx0UGF0aDogXCJib3RoXCJcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdmlld0NvbmZpZ3M7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRIZWFkZXJBY3Rpb25zID0gZnVuY3Rpb24oY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IEJhc2VBY3Rpb25bXSB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdHJldHVybiBpbnNlcnRDdXN0b21FbGVtZW50cyhbXSwgZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdChtYW5pZmVzdFdyYXBwZXIuZ2V0SGVhZGVyQWN0aW9ucygpLCBjb252ZXJ0ZXJDb250ZXh0KSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZSB0aGUgTGlzdFJlcG9ydERlZmluaXRpb24gZm9yIHRoZSBtdWx0aSBlbnRpdHlTZXRzIChtdWx0aSB0YWJsZSBpbnN0YW5jZXMpLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyB7TGlzdFJlcG9ydERlZmluaXRpb259IFRoZSBsaXN0IHJlcG9ydCBkZWZpbml0aW9uIGJhc2VkIG9uIGFubm90YXRpb24gKyBtYW5pZmVzdFxuICovXG5leHBvcnQgY29uc3QgY29udmVydFBhZ2UgPSBmdW5jdGlvbihjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogTGlzdFJlcG9ydERlZmluaXRpb24ge1xuXHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdGNvbnN0IHNDb250ZXh0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKTtcblxuXHRpZiAoIXNDb250ZXh0UGF0aCkge1xuXHRcdC8vIElmIHdlIGRvbid0IGhhdmUgYW4gZW50aXR5U2V0IGF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBhbiBpc3N1ZSBJJ2Qgc2F5XG5cdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XCJBbiBFbnRpdHlTZXQgaXMgcmVxdWlyZWQgdG8gYmUgYWJsZSB0byBkaXNwbGF5IGEgTGlzdFJlcG9ydCwgcGxlYXNlIGFkanVzdCB5b3VyIGBlbnRpdHlTZXRgIHByb3BlcnR5IHRvIHBvaW50IHRvIG9uZS5cIlxuXHRcdCk7XG5cdH1cblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3Qgdmlld3NEZWZpbml0aW9uOiBNdWx0aXBsZVZpZXdzQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCA9IG1hbmlmZXN0V3JhcHBlci5nZXRWaWV3Q29uZmlndXJhdGlvbigpO1xuXHRjb25zdCBoYXNNdWx0aXBsZUVudGl0eVNldHMgPSBtYW5pZmVzdFdyYXBwZXIuaGFzTXVsdGlwbGVFbnRpdHlTZXRzKCk7XG5cdGNvbnN0IHZpZXdzOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXSA9IGdldFZpZXdzKGNvbnZlcnRlckNvbnRleHQsIHZpZXdzRGVmaW5pdGlvbik7XG5cdGNvbnN0IHNob3dUYWJDb3VudHMgPSB2aWV3c0RlZmluaXRpb24gPyB2aWV3c0RlZmluaXRpb24/LnNob3dDb3VudHMgfHwgaGFzTXVsdGlwbGVFbnRpdHlTZXRzIDogdW5kZWZpbmVkOyAvLyB3aXRoIG11bHRpIEVudGl0eVNldHMsIHRhYiBjb3VudHMgYXJlIGRpc3BsYXllZCBieSBkZWZhdWx0XG5cdGNvbnN0IGxyVGFibGVWaXN1YWxpemF0aW9ucyA9IGdldFRhYmxlVmlzdWFsaXphdGlvbnModmlld3MpO1xuXHRjb25zdCBzaG93UGlubmFibGVUb2dnbGUgPSBsclRhYmxlVmlzdWFsaXphdGlvbnMuc29tZSh0YWJsZSA9PiB0YWJsZS5jb250cm9sLnR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIpO1xuXHRsZXQgc2luZ2xlVGFibGVJZCA9IFwiXCI7XG5cdGxldCBzaW5nbGVDaGFydElkID0gXCJcIjtcblx0Y29uc3QgZmlsdGVyQmFySWQgPSBGaWx0ZXJCYXJJRChzQ29udGV4dFBhdGgpO1xuXHRjb25zdCBmaWx0ZXJWYXJpYW50TWFuYWdlbWVudElEID0gRmlsdGVyVmFyaWFudE1hbmFnZW1lbnRJRChmaWx0ZXJCYXJJZCk7XG5cdGNvbnN0IHRhcmdldENvbnRyb2xJZHMgPSBbZmlsdGVyQmFySWRdLmNvbmNhdChcblx0XHRsclRhYmxlVmlzdWFsaXphdGlvbnMubWFwKHZpc3VhbGl6YXRpb24gPT4ge1xuXHRcdFx0cmV0dXJuIHZpc3VhbGl6YXRpb24uYW5ub3RhdGlvbi5pZDtcblx0XHR9KVxuXHQpO1xuXHRjb25zdCBmYkNvbmZpZyA9IG1hbmlmZXN0V3JhcHBlci5nZXRGaWx0ZXJDb25maWd1cmF0aW9uKCk7XG5cdGNvbnN0IGZpbHRlckluaXRpYWxMYXlvdXQgPSBmYkNvbmZpZz8uaW5pdGlhbExheW91dCAhPT0gdW5kZWZpbmVkID8gZmJDb25maWc/LmluaXRpYWxMYXlvdXQudG9Mb3dlckNhc2UoKSA6IFwiY29tcGFjdFwiO1xuXHRjb25zdCBmaWx0ZXJMYXlvdXQgPSBmYkNvbmZpZz8ubGF5b3V0ICE9PSB1bmRlZmluZWQgPyBmYkNvbmZpZz8ubGF5b3V0LnRvTG93ZXJDYXNlKCkgOiBcImNvbXBhY3RcIjtcblx0Y29uc3QgdXNlU2VtYW50aWNEYXRlUmFuZ2UgPSBmYkNvbmZpZy51c2VTZW1hbnRpY0RhdGVSYW5nZSAhPT0gdW5kZWZpbmVkID8gZmJDb25maWcudXNlU2VtYW50aWNEYXRlUmFuZ2UgOiB0cnVlO1xuXG5cdGNvbnN0IG9Db25maWcgPSBnZXRDb250ZW50QXJlYUlkKGNvbnZlcnRlckNvbnRleHQsIHZpZXdzKTtcblx0aWYgKG9Db25maWcpIHtcblx0XHRzaW5nbGVDaGFydElkID0gb0NvbmZpZy5jaGFydElkO1xuXHRcdHNpbmdsZVRhYmxlSWQgPSBvQ29uZmlnLnRhYmxlSWQ7XG5cdH1cblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRzID0gZ2V0U2VsZWN0aW9uRmllbGRzKGNvbnZlcnRlckNvbnRleHQsIGxyVGFibGVWaXN1YWxpemF0aW9ucyk7XG5cblx0Y29uc3QgaGlkZUJhc2ljU2VhcmNoID0gZ2V0RmlsdGVyQmFyaGlkZUJhc2ljU2VhcmNoKGxyVGFibGVWaXN1YWxpemF0aW9ucywgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IHNlbGVjdGlvblZhcmlhbnQgPSBnZXRTZWxlY3Rpb25WYXJpYW50KGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBkZWZhdWx0U2VtYW50aWNEYXRlczogYW55ID0gdXNlU2VtYW50aWNEYXRlUmFuZ2Vcblx0XHQ/IGdldERlZmF1bHRTZW1hbnRpY0RhdGVzKGdldE1hbmlmZXN0RmlsdGVyRmllbGRzKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpKVxuXHRcdDoge307XG5cdC8vIFNvcnQgaGVhZGVyIGFjdGlvbnMgYWNjb3JkaW5nIHRvIHBvc2l0aW9uIGF0dHJpYnV0ZXMgaW4gbWFuaWZlc3Rcblx0Y29uc3QgaGVhZGVyQWN0aW9ucyA9IGdldEhlYWRlckFjdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGhhc011bHRpVmlzdWFsaXphdGlvbnM6IGJvb2xlYW4gPVxuXHRcdG1hbmlmZXN0V3JhcHBlci5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKCkgfHwgY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZTtcblxuXHRyZXR1cm4ge1xuXHRcdG1haW5FbnRpdHlTZXQ6IHNDb250ZXh0UGF0aCxcblx0XHRtYWluRW50aXR5VHlwZTogc0NvbnRleHRQYXRoICsgXCIvXCIsXG5cdFx0c2luZ2xlVGFibGVJZCxcblx0XHRzaW5nbGVDaGFydElkLFxuXHRcdHNob3dUYWJDb3VudHMsXG5cdFx0aGVhZGVyQWN0aW9ucyxcblx0XHRzaG93UGlubmFibGVUb2dnbGU6IHNob3dQaW5uYWJsZVRvZ2dsZSxcblx0XHRmaWx0ZXJCYXI6IHtcblx0XHRcdHNlbGVjdGlvbkZpZWxkcyxcblx0XHRcdGhpZGVCYXNpY1NlYXJjaFxuXHRcdH0sXG5cdFx0dmlld3M6IHZpZXdzLFxuXHRcdGZpbHRlckJhcklkLFxuXHRcdGZpbHRlckNvbmRpdGlvbnM6IHtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQ6IHNlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRkZWZhdWx0U2VtYW50aWNEYXRlczogZGVmYXVsdFNlbWFudGljRGF0ZXNcblx0XHR9LFxuXHRcdHZhcmlhbnRNYW5hZ2VtZW50OiB7XG5cdFx0XHRpZDogZmlsdGVyVmFyaWFudE1hbmFnZW1lbnRJRCxcblx0XHRcdHRhcmdldENvbnRyb2xJZHM6IHRhcmdldENvbnRyb2xJZHMuam9pbihcIixcIilcblx0XHR9LFxuXHRcdGlzTXVsdGlFbnRpdHlTZXRzOiBoYXNNdWx0aXBsZUVudGl0eVNldHMsXG5cdFx0aGFzTXVsdGlWaXN1YWxpemF0aW9uczogaGFzTXVsdGlWaXN1YWxpemF0aW9ucyxcblx0XHR1c2VTZW1hbnRpY0RhdGVSYW5nZSxcblx0XHRmaWx0ZXJJbml0aWFsTGF5b3V0LFxuXHRcdGZpbHRlckxheW91dCxcblx0XHRrcGlEZWZpbml0aW9uczogZ2V0S1BJRGVmaW5pdGlvbnMoY29udmVydGVyQ29udGV4dClcblx0fTtcbn07XG5cbmZ1bmN0aW9uIGdldFNlbGVjdGlvblZhcmlhbnRzKFxuXHRsclRhYmxlVmlzdWFsaXphdGlvbnM6IFRhYmxlVmlzdWFsaXphdGlvbltdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbltdIHtcblx0Y29uc3Qgc2VsZWN0aW9uVmFyaWFudFBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuXHRyZXR1cm4gbHJUYWJsZVZpc3VhbGl6YXRpb25zXG5cdFx0Lm1hcCh2aXN1YWxpemF0aW9uID0+IHtcblx0XHRcdGNvbnN0IHRhYmxlRmlsdGVycyA9IHZpc3VhbGl6YXRpb24uY29udHJvbC5maWx0ZXJzO1xuXHRcdFx0Y29uc3QgdGFibGVTVkNvbmZpZ3M6IFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uW10gPSBbXTtcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIHRhYmxlRmlsdGVycykge1xuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheSh0YWJsZUZpbHRlcnNba2V5XS5wYXRocykpIHtcblx0XHRcdFx0XHRjb25zdCBwYXRocyA9IHRhYmxlRmlsdGVyc1trZXldLnBhdGhzO1xuXHRcdFx0XHRcdHBhdGhzLmZvckVhY2gocGF0aCA9PiB7XG5cdFx0XHRcdFx0XHRpZiAocGF0aCAmJiBwYXRoLmFubm90YXRpb25QYXRoICYmIHNlbGVjdGlvblZhcmlhbnRQYXRocy5pbmRleE9mKHBhdGguYW5ub3RhdGlvblBhdGgpID09PSAtMSkge1xuXHRcdFx0XHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50UGF0aHMucHVzaChwYXRoLmFubm90YXRpb25QYXRoKTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uVmFyaWFudENvbmZpZyA9IGdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uKHBhdGguYW5ub3RhdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0XHRcdFx0XHRpZiAoc2VsZWN0aW9uVmFyaWFudENvbmZpZykge1xuXHRcdFx0XHRcdFx0XHRcdHRhYmxlU1ZDb25maWdzLnB1c2goc2VsZWN0aW9uVmFyaWFudENvbmZpZyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRhYmxlU1ZDb25maWdzO1xuXHRcdH0pXG5cdFx0LnJlZHVjZSgoc3ZDb25maWdzLCBzZWxlY3Rpb25WYXJpYW50KSA9PiBzdkNvbmZpZ3MuY29uY2F0KHNlbGVjdGlvblZhcmlhbnQpLCBbXSk7XG59XG5cbmZ1bmN0aW9uIGdldEV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcyhzZWxlY3Rpb25WYXJpYW50czogU2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb25bXSk6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+IHtcblx0cmV0dXJuIHNlbGVjdGlvblZhcmlhbnRzLnJlZHVjZSgocHJldmlvdXNWYWx1ZTogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4sIHNlbGVjdGlvblZhcmlhbnQpID0+IHtcblx0XHRzZWxlY3Rpb25WYXJpYW50LnByb3BlcnR5TmFtZXMuZm9yRWFjaChwcm9wZXJ0eU5hbWUgPT4ge1xuXHRcdFx0cHJldmlvdXNWYWx1ZVtwcm9wZXJ0eU5hbWVdID0gdHJ1ZTtcblx0XHR9KTtcblx0XHRyZXR1cm4gcHJldmlvdXNWYWx1ZTtcblx0fSwge30pO1xufVxuXG5mdW5jdGlvbiBnZXRDb250ZW50QXJlYUlkKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsIHZpZXdzOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXSk6IENvbnRlbnRBcmVhSUQgfCB1bmRlZmluZWQge1xuXHRsZXQgc2luZ2xlVGFibGVJZCA9IFwiXCIsXG5cdFx0c2luZ2xlQ2hhcnRJZCA9IFwiXCI7XG5cdGlmIChcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMoKSB8fFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2Vcblx0KSB7XG5cdFx0Zm9yIChsZXQgdmlldyBvZiB2aWV3cykge1xuXHRcdFx0dmlldyA9IHZpZXcgYXMgQ29tYmluZWRWaWV3RGVmaW5pdGlvbjtcblx0XHRcdGlmICh2aWV3LmNoYXJ0Q29udHJvbElkICYmIHZpZXcudGFibGVDb250cm9sSWQpIHtcblx0XHRcdFx0c2luZ2xlQ2hhcnRJZCA9IHZpZXcuY2hhcnRDb250cm9sSWQ7XG5cdFx0XHRcdHNpbmdsZVRhYmxlSWQgPSB2aWV3LnRhYmxlQ29udHJvbElkO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0c2luZ2xlVGFibGVJZCA9ICh2aWV3c1swXSBhcyBTaW5nbGVWaWV3RGVmaW5pdGlvbikudGFibGVDb250cm9sSWQ7XG5cdH1cblx0aWYgKHNpbmdsZVRhYmxlSWQgfHwgc2luZ2xlQ2hhcnRJZCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRjaGFydElkOiBzaW5nbGVDaGFydElkLFxuXHRcdFx0dGFibGVJZDogc2luZ2xlVGFibGVJZFxuXHRcdH07XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cbiJdfQ==
|