@sapui5/sap.fe.macros 1.142.0 → 1.142.2
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 +1 -1
- package/src/sap/fe/macros/.library +1 -1
- package/src/sap/fe/macros/Field.js +5 -5
- package/src/sap/fe/macros/Field.ts +5 -3
- package/src/sap/fe/macros/FooterContent.js +3 -2
- package/src/sap/fe/macros/FooterContent.tsx +2 -10
- package/src/sap/fe/macros/MessageButton.js +3 -3
- package/src/sap/fe/macros/MessageButton.tsx +3 -2
- package/src/sap/fe/macros/Page.js +8 -4
- package/src/sap/fe/macros/Page.tsx +13 -4
- package/src/sap/fe/macros/RichTextEditor.js +12 -14
- package/src/sap/fe/macros/RichTextEditor.tsx +10 -13
- package/src/sap/fe/macros/ai/EasyFillDialog.js +2 -1
- package/src/sap/fe/macros/ai/EasyFillDialog.tsx +1 -0
- package/src/sap/fe/macros/ai/SummarizationButton.js +6 -4
- package/src/sap/fe/macros/ai/SummarizationButton.tsx +5 -3
- package/src/sap/fe/macros/chart/Action.js +19 -7
- package/src/sap/fe/macros/chart/Action.ts +8 -0
- package/src/sap/fe/macros/chart/ChartDelegate.js +13 -2
- package/src/sap/fe/macros/chart/ChartDelegate.ts +20 -1
- package/src/sap/fe/macros/chart/MdcChartTemplate.js +8 -6
- package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +13 -22
- package/src/sap/fe/macros/controls/FileWrapper.js +4 -3
- package/src/sap/fe/macros/controls/FileWrapper.ts +3 -2
- package/src/sap/fe/macros/controls/FilterBar.js +1 -1
- package/src/sap/fe/macros/controls/FilterBar.ts +8 -1
- package/src/sap/fe/macros/controls/Section.js +3 -2
- package/src/sap/fe/macros/controls/Section.ts +1 -1
- package/src/sap/fe/macros/controls/TextLink.js +15 -1
- package/src/sap/fe/macros/controls/TextLink.tsx +19 -0
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +23 -18
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +27 -25
- package/src/sap/fe/macros/field/FieldRuntimeHelper.js +4 -2
- package/src/sap/fe/macros/field/FieldRuntimeHelper.ts +7 -7
- package/src/sap/fe/macros/field/FieldTemplating.js +8 -3
- package/src/sap/fe/macros/field/FieldTemplating.ts +8 -3
- package/src/sap/fe/macros/filterBar/FilterBar.block.js +10 -1
- package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +10 -0
- package/src/sap/fe/macros/form/FormContainer.block.js +9 -8
- package/src/sap/fe/macros/form/FormContainer.block.ts +10 -7
- package/src/sap/fe/macros/internal/field/DisplayStyle.js +3 -2
- package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +1 -0
- package/src/sap/fe/macros/internal/field/EditStyle.js +11 -6
- package/src/sap/fe/macros/internal/field/EditStyle.tsx +7 -3
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.js +36 -7
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.ts +35 -6
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.js +54 -1
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.ts +59 -0
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +23 -3
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +24 -2
- package/src/sap/fe/macros/library.js +5 -6
- package/src/sap/fe/macros/{library.ts → library.tsx} +1 -1
- package/src/sap/fe/macros/messagebundle.properties +6 -0
- package/src/sap/fe/macros/messages/MessageButton.js +21 -12
- package/src/sap/fe/macros/messages/MessageButton.ts +21 -11
- package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.js +8 -3
- package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.ts +9 -2
- package/src/sap/fe/macros/quickView/QuickView.js +5 -4
- package/src/sap/fe/macros/quickView/QuickView.tsx +10 -3
- package/src/sap/fe/macros/table/ActionsTemplating.js +6 -5
- package/src/sap/fe/macros/table/ActionsTemplating.tsx +4 -4
- package/src/sap/fe/macros/table/MdcTableTemplate.js +31 -13
- package/src/sap/fe/macros/table/MdcTableTemplate.tsx +35 -7
- package/src/sap/fe/macros/table/Table.block.js +3 -1
- package/src/sap/fe/macros/table/Table.block.tsx +7 -4
- package/src/sap/fe/macros/table/TableAPI.js +62 -28
- package/src/sap/fe/macros/table/TableAPI.ts +73 -32
- package/src/sap/fe/macros/table/TableEventHandlerProvider.js +15 -4
- package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +16 -3
- package/src/sap/fe/macros/table/TableRuntime.js +6 -4
- package/src/sap/fe/macros/table/TableRuntime.ts +16 -3
- package/src/sap/fe/macros/table/delegates/TableDelegate.js +3 -3
- package/src/sap/fe/macros/table/delegates/TableDelegate.ts +3 -4
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +41 -15
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +41 -22
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -4
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +1 -2
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +10 -4
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +9 -3
- package/src/sap/fe/macros/table/mixin/TableHierarchy.js +6 -6
- package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +5 -5
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +28 -10
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +33 -14
|
@@ -400,17 +400,15 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUt
|
|
|
400
400
|
if (sActionName) {
|
|
401
401
|
(oView?.getBindingContext("internal")).setProperty("sActionName", null);
|
|
402
402
|
}
|
|
403
|
-
for (i =
|
|
404
|
-
// Loop over all messages
|
|
403
|
+
for (i = 0; i < messages.length; i++) {
|
|
405
404
|
message = messages[i];
|
|
406
405
|
let bIsGeneralGroupName = true;
|
|
407
|
-
for (j =
|
|
406
|
+
for (j = 0; j < aVisibleSections.length; j++) {
|
|
408
407
|
let shouldBreak = false;
|
|
409
|
-
// Loop over all visible sections
|
|
408
|
+
// Loop over all visible sections from header section to last visible section
|
|
410
409
|
section = aVisibleSections[j];
|
|
411
410
|
aSubSections = section.getSubSections();
|
|
412
|
-
for (k =
|
|
413
|
-
// Loop over all sub-sections
|
|
411
|
+
for (k = 0; k < aSubSections.length; k++) {
|
|
414
412
|
const subSection = aSubSections[k];
|
|
415
413
|
const oMessageObject = message?.getBindingContext("message")?.getObject();
|
|
416
414
|
this.sGeneralGroupText = this._getGeneralGroupText(oView, oMessageObject);
|
|
@@ -682,6 +680,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUt
|
|
|
682
680
|
_proto._setMessageData = function _setMessageData() {
|
|
683
681
|
clearTimeout(this._setMessageDataTimeout);
|
|
684
682
|
this._setMessageDataTimeout = setTimeout(async () => {
|
|
683
|
+
// Close messagePopover if objectPage showFooter is false
|
|
684
|
+
if (this.oObjectPageLayout && !this.oObjectPageLayout.getShowFooter()) {
|
|
685
|
+
this.oMessagePopover.close();
|
|
686
|
+
}
|
|
685
687
|
const sIcon = "",
|
|
686
688
|
oMessages = this.oMessagePopover.getItems(),
|
|
687
689
|
oMessageCount = {
|
|
@@ -1075,12 +1077,12 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUt
|
|
|
1075
1077
|
_proto._getMessageRank = function _getMessageRank(obj, aSections) {
|
|
1076
1078
|
if (aSections) {
|
|
1077
1079
|
let section, aSubSections, subSection, j, k, aElements, aAllElements, sectionRank;
|
|
1078
|
-
for (j =
|
|
1079
|
-
// Loop over all sections
|
|
1080
|
+
for (j = 0; j < aSections.length; j++) {
|
|
1081
|
+
// Loop over all sections from first to last
|
|
1080
1082
|
section = aSections[j];
|
|
1081
1083
|
aSubSections = section.getSubSections();
|
|
1082
|
-
for (k =
|
|
1083
|
-
// Loop over all sub-sections
|
|
1084
|
+
for (k = 0; k < aSubSections.length; k++) {
|
|
1085
|
+
// Loop over all sub-sections from first to last
|
|
1084
1086
|
subSection = aSubSections[k];
|
|
1085
1087
|
aAllElements = subSection.findElements(true); // Get all elements inside a sub-section
|
|
1086
1088
|
//Try to find the control 1 inside the sub section
|
|
@@ -1192,6 +1194,14 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUt
|
|
|
1192
1194
|
let oValidationFilters, hiddenDraftFilter, oValidationAndContextFilter, oFilters, sPath, oSorter, oDialogFilter, objectPageLayoutSections;
|
|
1193
1195
|
const aUserDefinedFilter = [];
|
|
1194
1196
|
this.sViewId = this.sViewId ? this.sViewId : this._getViewId(this.getId());
|
|
1197
|
+
|
|
1198
|
+
// Initialize ObjectPageLayout if not already done
|
|
1199
|
+
this.oObjectPageLayout = this._getObjectPageLayout(this, this.oObjectPageLayout);
|
|
1200
|
+
|
|
1201
|
+
// Close messagePopover if objectPage showFooter is false
|
|
1202
|
+
if (this.oObjectPageLayout && !this.oObjectPageLayout.getShowFooter()) {
|
|
1203
|
+
this.oMessagePopover.close();
|
|
1204
|
+
}
|
|
1195
1205
|
//Add the filters provided by the user
|
|
1196
1206
|
const aCustomFilters = this.getAggregation("customFilters");
|
|
1197
1207
|
if (aCustomFilters) {
|
|
@@ -1266,7 +1276,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUt
|
|
|
1266
1276
|
oFilters = oValidationContextDialogFilters;
|
|
1267
1277
|
}
|
|
1268
1278
|
this.oItemBinding.filter(oFilters);
|
|
1269
|
-
this.oObjectPageLayout = this._getObjectPageLayout(this, this.oObjectPageLayout);
|
|
1270
1279
|
// We support sorting only for ObjectPageLayout use-case.
|
|
1271
1280
|
if (this.oObjectPageLayout) {
|
|
1272
1281
|
oSorter = new Sorter("", undefined, undefined, (obj1, obj2) => {
|
|
@@ -1517,4 +1526,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUt
|
|
|
1517
1526
|
}), _class2)) || _class);
|
|
1518
1527
|
return MessageButton;
|
|
1519
1528
|
}, false);
|
|
1520
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNZXNzYWdlQnV0dG9uIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJhZ2dyZWdhdGlvbiIsInR5cGUiLCJtdWx0aXBsZSIsInNpbmd1bGFyTmFtZSIsIl9kZWMzIiwiZXZlbnQiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0J1dHRvbiIsImlkIiwic2V0dGluZ3MiLCJfdGhpcyIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwic0dlbmVyYWxHcm91cFRleHQiLCJzVmlld0lkIiwic0xhc3RBY3Rpb25UZXh0IiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJpbml0IiwiQnV0dG9uIiwiYXBwbHkiLCJpc0hpZGRlbkRyYWZ0RW5hYmxlZCIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJnZXRDYXBhYmlsaXRpZXMiLCJIaWRkZW5EcmFmdCIsImVuYWJsZWQiLCJhdHRhY2hQcmVzcyIsImhhbmRsZU1lc3NhZ2VQb3BvdmVyUHJlc3MiLCJvTWVzc2FnZVBvcG92ZXIiLCJNZXNzYWdlUG9wb3ZlciIsIm9JdGVtQmluZGluZyIsImdldEJpbmRpbmciLCJhdHRhY2hDaGFuZ2UiLCJfc2V0TWVzc2FnZURhdGEiLCJtZXNzYWdlQnV0dG9uSWQiLCJnZXRJZCIsImFkZEN1c3RvbURhdGEiLCJDdXN0b21EYXRhIiwia2V5IiwidmFsdWUiLCJhdHRhY2hNb2RlbENvbnRleHRDaGFuZ2UiLCJfYXBwbHlGaWx0ZXJzQW5kU29ydCIsImJpbmQiLCJhdHRhY2hBY3RpdmVUaXRsZVByZXNzIiwiX2FjdGl2ZVRpdGxlUHJlc3MiLCJvRXZlbnQiLCJ0b2dnbGUiLCJnZXRTb3VyY2UiLCJfYXBwbHlHcm91cGluZ0FzeW5jIiwib1ZpZXciLCJhV2FpdEZvckRhdGEiLCJvVmlld0JpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJfZmluZFRhYmxlc1JlbGF0ZWRUb01lc3NhZ2VzIiwidmlldyIsIm9SZXMiLCJhTWVzc2FnZXMiLCJnZXRDb250ZXh0cyIsIm1hcCIsIm9Db250ZXh0IiwiZ2V0T2JqZWN0Iiwib1ZpZXdDb250ZXh0Iiwib09iamVjdFBhZ2UiLCJnZXRDb250ZW50IiwibWVzc2FnZUhhbmRsaW5nIiwiZ2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQiLCJmb3JFYWNoIiwib1NlY3Rpb24iLCJnZXRTdWJTZWN0aW9ucyIsIm9TdWJTZWN0aW9uIiwiZmluZEVsZW1lbnRzIiwib0VsZW0iLCJpc0EiLCJpIiwibGVuZ3RoIiwib1Jvd0JpbmRpbmciLCJnZXRSb3dCaW5kaW5nIiwic0VsZW1lQmluZGluZ1BhdGgiLCJnZXRQYXRoIiwidGFyZ2V0IiwiaW5kZXhPZiIsInB1c2giLCJ0YWJsZSIsInN1YnNlY3Rpb24iLCJvVGFibGVzIiwiX29UYWJsZSIsIm9NRENUYWJsZSIsIm9TdWJzZWN0aW9uIiwic2V0QmluZGluZ0NvbnRleHQiLCJpc0xlbmd0aEZpbmFsIiwiUHJvbWlzZSIsInJlc29sdmUiLCJhdHRhY2hFdmVudE9uY2UiLCJ3YWl0Rm9yR3JvdXBpbmdBcHBsaWVkIiwic2V0VGltZW91dCIsIl9hcHBseUdyb3VwaW5nIiwiYWxsIiwiZ2V0TW9kZWwiLCJjaGVja01lc3NhZ2VzIiwiZXJyIiwiTG9nIiwiZXJyb3IiLCJvT2JqZWN0UGFnZUxheW91dCIsIl9nZXRPYmplY3RQYWdlTGF5b3V0IiwibWVzc2FnZXMiLCJnZXRJdGVtcyIsInNlY3Rpb24iLCJlbmFibGVCaW5kaW5nIiwiX2NoZWNrQ29udHJvbElkSW5TZWN0aW9ucyIsIl9mbkVuYWJsZUJpbmRpbmdzIiwidmlld0lkIiwiX2dldFZpZXdJZCIsIlVJNUVsZW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsInVJTW9kZWwiLCJzZXRQcm9wZXJ0eSIsInVuZGVmaW5lZCIsIl9nZXRUYWJsZVJlZkVycm9yQ29udGV4dCIsIm9UYWJsZSIsIm9Nb2RlbCIsImdldFByb3BlcnR5Iiwic1JlZkVycm9yQ29udGV4dFBhdGgiLCJyZXBsYWNlIiwiZ2V0Q29udGV4dCIsIl91cGRhdGVJbnRlcm5hbE1vZGVsIiwidGFibGVSb3dDb250ZXh0Iiwicm93SW5kZXgiLCJ0YWJsZVRhcmdldENvbFByb3BlcnR5IiwibWVzc2FnZU9iamVjdCIsImlzQ3JlYXRpb25Sb3ciLCJ0ZW1wIiwidGFyZ2V0Q29sUHJvcGVydHkiLCJtb2RlbCIsImNvbnRleHQiLCJhVmFsaWRNZXNzYWdlSWRzIiwiTWVzc2FnaW5nIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsIm1lc3NhZ2UiLCJhT2Jzb2xldGVNZXNzYWdlbElkcyIsIk9iamVjdCIsImtleXMiLCJmaWx0ZXIiLCJpbnRlcm5hbE1lc3NhZ2VJZCIsIm9ic29sZXRlSWQiLCJhc3NpZ24iLCJfc2V0R3JvdXBMYWJlbEZvclRyYW5zaWVudE1zZyIsInNBY3Rpb25OYW1lIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiZ2V0VGV4dCIsInNldEdyb3VwTmFtZSIsIl9jb21wdXRlTWVzc2FnZUdyb3VwQW5kU3ViVGl0bGUiLCJzdWJTZWN0aW9uIiwiZWxlbWVudHMiLCJoYXNNdWx0aXBsZVN1YlNlY3Rpb25zIiwiYWN0aW9uTmFtZSIsInJlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwiZGV0YWNoQ2hhbmdlIiwic2V0U2VjdGlvbk5hbWVJbkdyb3VwIiwiZWxlbWVudCIsInRhcmdldFRhYmxlSW5mbyIsImwiLCJ0YXJnZXRlZENvbnRyb2wiLCJpc0JhY2tFbmRNZXNzYWdlIiwiUmVnRXhwIiwidGVzdCIsImdldFRhcmdldHMiLCJnZXRQYXJlbnQiLCJyb3dCaW5kaW5nIiwiZm5DYWxsYmFja1NldEdyb3VwTmFtZSIsIm9iaiIsImdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGUiLCJvVGFyZ2V0VGFibGVJbmZvIiwic3ViVGl0bGUiLCJzZXRTdWJ0aXRsZSIsInNldEFjdGl2ZVRpdGxlIiwib1RhYmxlUm93Q29udGV4dCIsImlzSW5hY3RpdmUiLCJfZm9ybWF0TWVzc2FnZURlc2NyaXB0aW9uIiwic1RhYmxlVGFyZ2V0Q29sTmFtZSIsImdldEluZGV4Iiwic1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkiLCJnZXRTdWJ0aXRsZSIsImZvcm1FbGVtZW50IiwicGFyZW50IiwibGFiZWwiLCJnZXRMYWJlbCIsImxhYmVsVGV4dCIsImlzVGFyZ2V0ZWRDb250cm9sT3JwaGFuIiwiYklzT3JwaGFuRWxlbWVudCIsIl9nZXRNZGNUYWJsZSIsInRhYmxlSGVhZGVyIiwiZ2V0SGVhZGVyIiwidGFyZ2V0Q29sdW1uSW5kZXgiLCJfZ2V0VGFibGVDb2x1bW5JbmRleCIsImdldENvbHVtbnMiLCJnZXRQcm9wZXJ0eUtleSIsIl9nZXRUYWJsZVJvdyIsIl9nZXRUYWJsZVJvd0luZGV4Iiwib1RhYmxlUm93QmluZGluZ0NvbnRleHRzIiwiZ2V0Q3VycmVudENvbnRleHRzIiwibWVzc2FnZVN1YnRpdGxlIiwiZ2V0TWVzc2FnZVN1YnRpdGxlIiwiZ2V0VmFsdWVTdGF0ZSIsImluY2x1ZGVUYWJsZUdyb3VwTmFtZSIsIl9jaGVja01lcmdlTG9naWNGb3JNZXNzYWdlR3JvdXBpbmciLCJzZWN0aW9uQmFzZWRHcm91cE5hbWUiLCJjcmVhdGVTZWN0aW9uR3JvdXBOYW1lIiwidmlld0NvbnRleHRQYXRoIiwibWVzc2FnZVRhcmdldFByb3BlcnR5TmFtZSIsInNwbGl0IiwicG9wIiwiaW50ZXJuYWxNb2RlbCIsImludGVybmFsTW9kZWxNZXNzYWdlVGFyZ2V0UHJvcGVydHlQYXRoIiwiaW50ZXJuYWxNb2RlbE1lc3NhZ2VUYXJnZXRQcm9wZXJ0eUNvbnRleHRQYXRoIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJzdGFydHNXaXRoIiwiZmlyZUFjdGl2ZVRpdGxlUHJlc3MiLCJpdGVtIiwiYkluY2x1ZGVUYWJsZUdyb3VwTmFtZSIsInNpbmdsZVN1YnNlY3Rpb25JblBhZ2VMYXlvdXQiLCJnZXRWaWV3RGF0YSIsInNlY3Rpb25MYXlvdXQiLCJtdWx0aVN1YnNlY3Rpb25JblRhYkxheW91dCIsImJsb2NrIiwiZ2V0QmxvY2tzIiwiY29udGVudCIsImdldEFnZ3JlZ2F0aW9uIiwiYmxvY2tzIiwiZ2V0TWFpbkNvbnRlbnQiLCJGdW5jdGlvbiIsImFTdWJTZWN0aW9ucyIsImoiLCJrIiwiYVZpc2libGVTZWN0aW9ucyIsImJJc0dlbmVyYWxHcm91cE5hbWUiLCJzaG91bGRCcmVhayIsIm9NZXNzYWdlT2JqZWN0IiwiX2dldEdlbmVyYWxHcm91cFRleHQiLCJhQ29udHJvbHMiLCJnZXRDb250cm9sRnJvbU1lc3NhZ2VSZWxhdGluZ1RvU3ViU2VjdGlvbiIsIm9UYXJnZXRlZENvbnRyb2wiLCJwZXJzaXN0ZW50IiwiZ2V0R3JvdXBOYW1lIiwiX2ZpbmRUYXJnZXRGb3JNZXNzYWdlIiwidmlld1BhdGgiLCJtZXNzYWdlVGFyZ2V0UGF0aCIsImluY2x1ZGVzIiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsImNvbnRleHRQYXRoIiwiZ2V0TWV0YVBhdGgiLCJvQ29udGV4dFBhdGhNZXRhZGF0YSIsIiRraW5kIiwiX2ZuRW5hYmxlU3ViU2VjdGlvbkJpbmRpbmciLCJnZXRNb3JlQmxvY2tzIiwic3ViQmxvY2siLCJnZXRBY3Rpb25zIiwiYWN0aW9ucyIsImFTZWN0aW9ucyIsImlTZWN0aW9uIiwiaVN1YlNlY3Rpb24iLCJvQWxsQmxvY2tzIiwiX2ZpbmRNZXNzYWdlR3JvdXBBZnRlclJlYmluZGluZyIsImF0dGFjaERhdGFSZWNlaXZlZCIsInNDb250cm9sSWQiLCJvQ29udHJvbCIsIlZpZXciLCJfc2V0TG9uZ3RleHRVcmxEZXNjcmlwdGlvbiIsIm9EaWFnbm9zaXNUaXRsZSIsInNldEFzeW5jRGVzY3JpcHRpb25IYW5kbGVyIiwiY29uZmlnIiwic0xvbmdUZXh0VXJsIiwiZ2V0TG9uZ3RleHRVcmwiLCJqUXVlcnkiLCJhamF4IiwidXJsIiwic3VjY2VzcyIsImRhdGEiLCJzRGlhZ25vc2lzVGV4dCIsImdldEh0bWxUZXh0Iiwib2xkRGVzY3JpcHRpb24iLCJnZXREZXNjcmlwdGlvbiIsInNldERlc2NyaXB0aW9uIiwicHJvbWlzZSIsInNFcnJvciIsInJlamVjdCIsInByb2Nlc3NUYWJsZUNvbHVtblByb3BlcnRpZXMiLCJ0YWJsZUNvbFByb3BlcnR5Iiwicm93SW5mb3JtYXRpb24iLCJ0YWJsZUNvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb24iLCJnZXRUYWJsZUNvbEJpbmRpbmdDb250ZXh0Rm9yVGV4dEFubm90YXRpb24iLCJ0YWJsZUNvbFRleHRBbm5vdGF0aW9uUGF0aCIsInRhYmxlQ29sVGV4dEFycmFuZ2VtZW50IiwibGFiZWxXaXRoVmFsdWUiLCJnZXRUYWJsZUNvbFZhbHVlIiwiY29tcHV0ZUNvbHVtbkluZm8iLCJ0YWJsZVRhcmdldENvbE5hbWUiLCJtc2dPYmoiLCJjb2xGcm9tVGFibGVTZXR0aW5ncyIsImZldGNoQ29sdW1uSW5mbyIsImNvbHVtbkluZm8iLCJhdmFpbGFiaWxpdHkiLCJnZXRUeXBlIiwiam9pbiIsIl9uYXZpZ2F0aW9uQ29uZmlndXJlZCIsImdldFRhYmxlQ29sdW1uVmlzaWJpbGl0eUluZm8iLCJfcmVmIiwidmlzaWJpbGl0eSIsImZpZWxkc0FmZmVjdGVkVGl0bGUiLCJGb3JtYXR0ZWRUZXh0IiwiaHRtbFRleHQiLCJmaWVsZEFmZmVjdGVkVGV4dCIsIkFycmF5IiwiaXNBcnJheSIsImRpYWdub3Npc1RpdGxlIiwidUlNZXNzYWdlRGVzY3JpcHRpb24iLCJkZXNjcmlwdGlvbiIsImRpYWdub3Npc1RleHQiLCJtZXNzYWdlRGVzY3JpcHRpb25Db250ZW50IiwiaGFuZGxlTm9NZXNzYWdlcyIsInNldFZpc2libGUiLCJmaXJlRXZlbnQiLCJpTWVzc2FnZUxlbmd0aCIsImNsZWFyVGltZW91dCIsIl9zZXRNZXNzYWdlRGF0YVRpbWVvdXQiLCJzSWNvbiIsIm9NZXNzYWdlcyIsIm9NZXNzYWdlQ291bnQiLCJFcnJvciIsIldhcm5pbmciLCJTdWNjZXNzIiwiSW5mb3JtYXRpb24iLCJvUmVzb3VyY2VCdW5kbGUiLCJzQnV0dG9uVHlwZSIsIkJ1dHRvblR5cGUiLCJEZWZhdWx0IiwibWVzc2FnZUtleSIsIm1lc3NhZ2VUZXh0IiwidG9TdHJpbmciLCJNZXNzYWdlVHlwZSIsIk5lZ2F0aXZlIiwiQ3JpdGljYWwiLCJOZXV0cmFsIiwidG90YWxOdW1iZXJPZk1lc3NhZ2VzIiwic2V0VGV4dCIsIm1lc3NhZ2VDb3VudCIsIm1lc3NhZ2VLZXlzIiwic2luZ2xlVG9vbHRpcEtleSIsIm11bHRpcGxlVG9vbHRpcEtleSIsImVudHJpZXMiLCJtZXNzYWdlVHlwZSIsIm1lc3NhZ2VUeXBlQ291bnQiLCJNRVNTQUdFQlVUVE9OX1NIT1JUQ1VUIiwidG9vbFRpcCIsInNldFRvb2x0aXAiLCJzZXRJY29uIiwic2V0VHlwZSIsIm9QYWdlUmVhZHkiLCJnZXRDb250cm9sbGVyIiwicGFnZVJlYWR5Iiwid2FpdFBhZ2VSZWFkeSIsIm5hdmlnYXRlQmFjayIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsIm9JdGVtIiwiZ2V0UGFyYW1ldGVyIiwib01lc3NhZ2UiLCJiSXNCYWNrZW5kTWVzc2FnZSIsInNTZWN0aW9uVGl0bGUiLCJfZGVmYXVsdEZvY3VzIiwibWRjVGFibGUiLCJmb2N1c0luZm8iLCJwcmV2ZW50U2Nyb2xsIiwidGFyZ2V0SW5mbyIsImZvY3VzIiwic3ViU2VjdGlvbnMiLCJ2aXNpYmxlU2VjdGlvbnMiLCJjb250cm9scyIsIm9UYXJnZXRNZGNUYWJsZSIsImNvbnRyb2xJZHMiLCJjb250cm9sSWQiLCJjb250cm9sIiwicGFyZW50Q29udHJvbCIsInJlZHVjZSIsImFjYyIsInZhbCIsIl9yb3V0aW5nIiwibmF2aWdhdGVUb0NvbnRleHQiLCJfbmF2aWdhdGVGcm9tTWVzc2FnZVRvU2VjdGlvblRhYmxlSW5JY29uVGFiQmFyTW9kZSIsIm9SZWZFcnJvckNvbnRleHQiLCJvUmVmRXJyb3IiLCJfc2V0Rm9jdXNPblRhcmdldEZpZWxkIiwidGFyZ2V0TWRjVGFibGUiLCJpUm93SW5kZXgiLCJhVGFyZ2V0TWRjVGFibGVSb3ciLCJfZ2V0TWRjVGFibGVSb3dzIiwiaUZpcnN0VmlzaWJsZVJvdyIsIl9nZXRHcmlkVGFibGUiLCJnZXRGaXJzdFZpc2libGVSb3ciLCJvVGFyZ2V0Um93Iiwib1RhcmdldENlbGwiLCJnZXRUYXJnZXRDZWxsIiwic2V0Rm9jdXNUb0NvbnRyb2wiLCJlcnJvclByb3BlcnR5UGF0aCIsIm5hdmlnYXRlRm9yd2FyZFRvQ29udGV4dCIsInNjcm9sbFRvSW5kZXgiLCJmb2N1c09uVGFyZ2V0RmllbGQiLCJmb2N1c09uTWVzc2FnZVRhcmdldENvbnRyb2wiLCJzZWN0aW9ucyIsImdldFNlY3Rpb25zIiwic2VjdGlvbldpdGhUaGVDb250cm9sIiwiZmluZCIsIl9uYXZpZ2F0ZUZyb21NZXNzYWdlVG9TZWN0aW9uSW5JY29uVGFiQmFyTW9kZSIsImhhbmRsZU1lc3NhZ2VOYXZpZ2F0aW9uIiwiZ2V0Q29udHJvbElkcyIsImZpbmRTdWJTZWN0aW9uIiwic2V0TW9kZSIsImdyb3VwTmFtZXMiLCJmaW5kU3ViU2VjdGlvbkJ5VGl0bGVPckNvbnRyb2wiLCJ0aXRsZSIsImdldFRpdGxlIiwic29tZSIsInRhcmdldFJvdyIsImhhc05vbkVkaXRhYmxlRmllbGQiLCJnZXRFZGl0YWJsZSIsImlzQ29udHJvbEluVGFibGUiLCJlbGVtIiwiYUFsbFZpZXdFbGVtZW50cyIsImFFcnJvbmVvdXNDb250cm9scyIsImdldERvbVJlZiIsImFOb3RUYWJsZUVycm9uZW91c0NvbnRyb2xzIiwiQ29sdW1uTGlzdEl0ZW0iLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJvVGFyZ2V0RmllbGQiLCJnZXRDb250ZW50RWRpdCIsIl9nZXRNZXNzYWdlUmFuayIsImFFbGVtZW50cyIsImFBbGxFbGVtZW50cyIsInNlY3Rpb25SYW5rIiwiX2ZuRmlsdGVyVXBvbklkIiwiZ2V0Q29udHJvbElkIiwiZ2V0VmlzaWJsZSIsImhhc093blByb3BlcnR5Iiwic2VjdGlvbk5hbWUiLCJzdWJTZWN0aW9uTmFtZSIsImdldFBlcnNpc3RlbnQiLCJfZmlsdGVyT3V0TWVzc2FnZXNJbkRpYWxvZyIsImZuVGVzdCIsImFDb250cm9sSWRzIiwiaXNNZXNzYWdlT3V0T2ZQYXJhbWV0ZXJEaWFsb2ciLCJGaWx0ZXIiLCJwYXRoIiwiY2FzZVNlbnNpdGl2ZSIsIl9maWx0ZXJPdXRDb250ZXh0U3VjY2Vzc01lc3NhZ2VzIiwiYm91bmRDb250ZXh0U3VjY2Vzc01lc3NhZ2VzIiwiX2dldEZpbHRlclRvSGlkZUJhY2tlbmRNZXNzYWdlT25FcnJvclZhbGlkYXRpb24iLCJnZXRJZHNPZkZpZWxzZFdpdGhFcnJvclZhbGlkYXRpb24iLCJ2YWxpZGF0aW9uIiwibWF0Y2giLCJmaWx0ZXJzIiwib3BlcmF0b3IiLCJGaWx0ZXJPcGVyYXRvciIsIkVRIiwidmFsdWUxIiwiYW5kIiwib1ZhbGlkYXRpb25GaWx0ZXJzIiwiaGlkZGVuRHJhZnRGaWx0ZXIiLCJvVmFsaWRhdGlvbkFuZENvbnRleHRGaWx0ZXIiLCJvRmlsdGVycyIsInNQYXRoIiwib1NvcnRlciIsIm9EaWFsb2dGaWx0ZXIiLCJvYmplY3RQYWdlTGF5b3V0U2VjdGlvbnMiLCJhVXNlckRlZmluZWRGaWx0ZXIiLCJhQ3VzdG9tRmlsdGVycyIsInZhbHVlMiIsIm9CaW5kaW5nQ29udGV4dCIsIm1lc3NhZ2VCdXR0b25IZWxwZXIiLCJnZXRDaGVja0NvbnRyb2xJblZpZXdGaWx0ZXIiLCJvQ29udGV4dFN1Y2Nlc3NGaWx0ZXJzIiwiZmlsdGVyQXJyYXkiLCJ2aWV3Q29udGV4dCIsImVkaXRGbG93IiwiZ2V0Um9vdENvbnRleHQiLCJnZXRIaWRkZW5EcmFmdFVzZUNhc2VGaWx0ZXIiLCJ2YWxpZGF0aW9uQW5kSGlkZGVuRHJhZnRGaWx0ZXIiLCJTdGFydHNXaXRoIiwib1ZhbGlkYXRpb25Db250ZXh0RGlhbG9nRmlsdGVycyIsIlNvcnRlciIsIm9iajEiLCJvYmoyIiwicmFua0EiLCJyYW5rQiIsInNvcnQiLCJfZ2V0U2VjdGlvbkJ5U2VjdGlvblRpdGxlIiwiYlVzZUljb25UYWJCYXIiLCJnZXRVc2VJY29uVGFiQmFyIiwic1NlbGVjdGVkU2VjdGlvbklkIiwiZ2V0U2VsZWN0ZWRTZWN0aW9uIiwic2V0U2VsZWN0ZWRTZWN0aW9uIiwib1RhYmxlQ29udGV4dCIsIm9PUENvbnRleHQiLCJiU2hvdWxkV2FpdEZvclRhYmxlUmVmcmVzaCIsIm9FbGVtZW50Iiwib1BhcmVudEVsZW1lbnQiLCJvTWRjVGFibGUiLCJvVGFibGVSb3ciLCJnZXRUYWJsZSIsImZpbmRJbmRleCIsImdldFRhcmdldENlbGxJbmRleCIsImVsdCIsImdldENlbGxzIiwiY2VsbCIsImdldFRhcmdldENvbHVtbkluZGV4IiwidGFyZ2V0RWxlbWVudCIsInRhcmdldENlbGxJbmRleCIsInRhcmdldENlbGxJZCIsInRhYmxlQ29sdW1ucyIsImNvbHVtbiIsImdldENyZWF0aW9uVGVtcGxhdGUiLCJzZWFyY2giLCJjb21wb25lbnQiLCJzYXAiLCJ1aSIsInJlcXVpcmUiLCJuYXZPYmplY3QiLCJnZXRPd25lckNvbXBvbmVudEZvciIsImdldE5hdmlnYXRpb24iLCJzdWJPUENvbmZpZ3VyZWQiLCJuYXZDb25maWd1cmVkIiwiZGV0YWlsIiwicm91dGUiLCJnZXRSb3dTZXR0aW5ncyIsImdldFJvd0FjdGlvbnMiLCJtZXNzYWdlUG9wb3ZlciIsImZuRm9jdXMiLCJpc09wZW4iLCJmbk9uQ2xvc2UiLCJkZXRhY2hFdmVudCIsImF0dGFjaEV2ZW50IiwiY2xvc2UiLCJ3YXJuaW5nIiwiZXNjYXBlIiwiU3RyaW5nIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJNZXNzYWdlQnV0dG9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlV2l0aFVJNSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGFnZ3JlZ2F0aW9uLCBkZWZpbmVVSTVDbGFzcywgZXZlbnQgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSB7IFRhcmdldFRhYmxlSW5mb1R5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvbWVzc2FnZUhhbmRsZXIvbWVzc2FnZUhhbmRsaW5nXCI7XG5pbXBvcnQgbWVzc2FnZUhhbmRsaW5nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9tZXNzYWdlSGFuZGxlci9tZXNzYWdlSGFuZGxpbmdcIjtcbmltcG9ydCB0eXBlIHsgSGlkZGVuRHJhZnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyB0eXBlIE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgRmllbGQgZnJvbSBcInNhcC9mZS9tYWNyb3MvRmllbGRcIjtcbmltcG9ydCB0eXBlIEZpZWxkV3JhcHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jb250cm9scy9GaWVsZFdyYXBwZXJcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2VGaWx0ZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvbWVzc2FnZXMvTWVzc2FnZUZpbHRlclwiO1xuaW1wb3J0IE1lc3NhZ2VQb3BvdmVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL21lc3NhZ2VzL01lc3NhZ2VQb3BvdmVyXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IHR5cGUgeyBUYWJsZUNvbHVtblByb3BlcnRpZXMgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9PYmplY3RQYWdlQ29udHJvbGxlci5jb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBTdWJTZWN0aW9uQmxvY2sgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9jb250cm9scy9TdWJTZWN0aW9uQmxvY2tcIjtcbmltcG9ydCB0eXBlIHsgJEJ1dHRvblNldHRpbmdzIH0gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBCdXR0b24gfSBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgQ29sdW1uTGlzdEl0ZW0gZnJvbSBcInNhcC9tL0NvbHVtbkxpc3RJdGVtXCI7XG5pbXBvcnQgRm9ybWF0dGVkVGV4dCBmcm9tIFwic2FwL20vRm9ybWF0dGVkVGV4dFwiO1xuaW1wb3J0IHR5cGUgSEJveCBmcm9tIFwic2FwL20vSEJveFwiO1xuaW1wb3J0IHR5cGUgTGFiZWwgZnJvbSBcInNhcC9tL0xhYmVsXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlSXRlbSBmcm9tIFwic2FwL20vTWVzc2FnZUl0ZW1cIjtcbmltcG9ydCB0eXBlIHsgTWVzc2FnZVBvcG92ZXIkQWN0aXZlVGl0bGVQcmVzc0V2ZW50IH0gZnJvbSBcInNhcC9tL01lc3NhZ2VQb3BvdmVyXCI7XG5pbXBvcnQgdHlwZSBSZXNwb25zaXZlVGFibGUgZnJvbSBcInNhcC9tL1RhYmxlXCI7XG5pbXBvcnQgeyBCdXR0b25UeXBlIH0gZnJvbSBcInNhcC9tL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIENvcmVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDdXN0b21EYXRhIGZyb20gXCJzYXAvdWkvY29yZS9DdXN0b21EYXRhXCI7XG5pbXBvcnQgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IE1lc3NhZ2luZyBmcm9tIFwic2FwL3VpL2NvcmUvTWVzc2FnaW5nXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgdHlwZSBEeW5hbWljU2lkZUNvbnRlbnQgZnJvbSBcInNhcC91aS9sYXlvdXQvRHluYW1pY1NpZGVDb250ZW50XCI7XG5pbXBvcnQgdHlwZSBGb3JtRWxlbWVudCBmcm9tIFwic2FwL3VpL2xheW91dC9mb3JtL0Zvcm1FbGVtZW50XCI7XG5pbXBvcnQgdHlwZSBtZGNGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE1EQ1RhYmxlLCBkZWZhdWx0IGFzIFRhYmxlIH0gZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIENvbnRlbnQgZnJvbSBcInNhcC91aS9tZGMvdmFsdWVoZWxwL2Jhc2UvQ29udGVudFwiO1xuaW1wb3J0IHR5cGUgQmFzZUNvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgRmlsdGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyXCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IFNvcnRlciBmcm9tIFwic2FwL3VpL21vZGVsL1NvcnRlclwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIENvbHVtbiBmcm9tIFwic2FwL3VpL3RhYmxlL0NvbHVtblwiO1xuaW1wb3J0IHR5cGUgQ3JlYXRpb25Sb3cgZnJvbSBcInNhcC91aS90YWJsZS9DcmVhdGlvblJvd1wiO1xuaW1wb3J0IHR5cGUgUm93IGZyb20gXCJzYXAvdWkvdGFibGUvUm93XCI7XG5pbXBvcnQgdHlwZSBVSVRhYmxlIGZyb20gXCJzYXAvdWkvdGFibGUvVGFibGVcIjtcbmltcG9ydCBqUXVlcnkgZnJvbSBcInNhcC91aS90aGlyZHBhcnR5L2pxdWVyeVwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUxheW91dCBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUxheW91dFwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZVNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlU3ViU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVN1YlNlY3Rpb25cIjtcbmltcG9ydCB0eXBlIFN1YlNlY3Rpb24gZnJvbSBcIi4uL2NvbnRyb2xzL3NlY3Rpb24vU3ViU2VjdGlvblwiO1xuaW1wb3J0IG1lc3NhZ2VCdXR0b25IZWxwZXIgZnJvbSBcIi4vTWVzc2FnZUJ1dHRvbkhlbHBlclwiO1xuXG50eXBlIE1lc3NhZ2VDb3VudCA9IHtcblx0RXJyb3I6IG51bWJlcjtcblx0V2FybmluZzogbnVtYmVyO1xuXHRTdWNjZXNzOiBudW1iZXI7XG5cdEluZm9ybWF0aW9uOiBudW1iZXI7XG59O1xuXG50eXBlICRNZXNzYWdlQnV0dG9uU2V0dGluZ3MgPSAkQnV0dG9uU2V0dGluZ3MgJiB7XG5cdG1lc3NhZ2VDaGFuZ2U6IEZ1bmN0aW9uO1xufTtcblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLm1hY3Jvcy5tZXNzYWdlcy5NZXNzYWdlQnV0dG9uXCIpXG5jbGFzcyBNZXNzYWdlQnV0dG9uIGV4dGVuZHMgQnV0dG9uIHtcblx0Y29uc3RydWN0b3IoaWQ/OiBzdHJpbmcgfCAkTWVzc2FnZUJ1dHRvblNldHRpbmdzLCBzZXR0aW5ncz86ICRNZXNzYWdlQnV0dG9uU2V0dGluZ3MpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdHN1cGVyKGlkLCBzZXR0aW5ncyk7XG5cdH1cblxuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC5mZS5tYWNyb3MubWVzc2FnZXMuTWVzc2FnZUZpbHRlclwiLCBtdWx0aXBsZTogdHJ1ZSwgc2luZ3VsYXJOYW1lOiBcImN1c3RvbUZpbHRlclwiIH0pXG5cdGN1c3RvbUZpbHRlcnMhOiBNZXNzYWdlRmlsdGVyO1xuXG5cdEBldmVudCgpXG5cdG1lc3NhZ2VDaGFuZ2UhOiBGdW5jdGlvbjtcblxuXHRwdWJsaWMgb01lc3NhZ2VQb3BvdmVyITogTWVzc2FnZVBvcG92ZXI7XG5cblx0cHVibGljIG9JdGVtQmluZGluZyE6IE9EYXRhTGlzdEJpbmRpbmc7XG5cblx0cHJpdmF0ZSBvT2JqZWN0UGFnZUxheW91dDogT2JqZWN0UGFnZUxheW91dCB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIHNHZW5lcmFsR3JvdXBUZXh0ID0gXCJcIjtcblxuXHRwcml2YXRlIF9zZXRNZXNzYWdlRGF0YVRpbWVvdXQ6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIHNWaWV3SWQgPSBcIlwiO1xuXG5cdHByaXZhdGUgc0xhc3RBY3Rpb25UZXh0ID0gXCJcIjtcblxuXHRwdWJsaWMgaXNIaWRkZW5EcmFmdEVuYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cblx0aW5pdCgpOiB2b2lkIHtcblx0XHRCdXR0b24ucHJvdG90eXBlLmluaXQuYXBwbHkodGhpcyk7XG5cdFx0dGhpcy5pc0hpZGRlbkRyYWZ0RW5hYmxlZCA9IChcblx0XHRcdENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzKT8uZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKT8uZ2V0Q2FwYWJpbGl0aWVzKCk/LkhpZGRlbkRyYWZ0IGFzIEhpZGRlbkRyYWZ0XG5cdFx0KT8uZW5hYmxlZDtcblx0XHQvL3ByZXNzIGV2ZW50IGhhbmRsZXIgYXR0YWNoZWQgdG8gb3BlbiB0aGUgbWVzc2FnZSBwb3BvdmVyXG5cdFx0dGhpcy5hdHRhY2hQcmVzcyh0aGlzLmhhbmRsZU1lc3NhZ2VQb3BvdmVyUHJlc3MsIHRoaXMpO1xuXHRcdHRoaXMub01lc3NhZ2VQb3BvdmVyID0gbmV3IE1lc3NhZ2VQb3BvdmVyKCk7XG5cdFx0dGhpcy5vSXRlbUJpbmRpbmcgPSB0aGlzLm9NZXNzYWdlUG9wb3Zlci5nZXRCaW5kaW5nKFwiaXRlbXNcIikgYXMgT0RhdGFMaXN0QmluZGluZztcblx0XHR0aGlzLm9JdGVtQmluZGluZy5hdHRhY2hDaGFuZ2UodGhpcy5fc2V0TWVzc2FnZURhdGEsIHRoaXMpO1xuXHRcdGNvbnN0IG1lc3NhZ2VCdXR0b25JZCA9IHRoaXMuZ2V0SWQoKTtcblx0XHRpZiAobWVzc2FnZUJ1dHRvbklkKSB7XG5cdFx0XHR0aGlzLm9NZXNzYWdlUG9wb3Zlci5hZGRDdXN0b21EYXRhKG5ldyBDdXN0b21EYXRhKHsga2V5OiBcIm1lc3NhZ2VCdXR0b25JZFwiLCB2YWx1ZTogbWVzc2FnZUJ1dHRvbklkIH0pKTsgLy8gVE9ETyBjaGVjayBmb3IgY3VzdG9tIGRhdGEgdHlwZVxuXHRcdH1cblx0XHR0aGlzLmF0dGFjaE1vZGVsQ29udGV4dENoYW5nZSh0aGlzLl9hcHBseUZpbHRlcnNBbmRTb3J0LmJpbmQodGhpcykpO1xuXHRcdHRoaXMub01lc3NhZ2VQb3BvdmVyLmF0dGFjaEFjdGl2ZVRpdGxlUHJlc3ModGhpcy5fYWN0aXZlVGl0bGVQcmVzcy5iaW5kKHRoaXMpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbWV0aG9kIHRoYXQgaXMgY2FsbGVkIHdoZW4gYSB1c2VyIGNsaWNrcyBvbiB0aGUgTWVzc2FnZUJ1dHRvbiBjb250cm9sLlxuXHQgKiBAcGFyYW0gb0V2ZW50IEV2ZW50IG9iamVjdFxuXHQgKi9cblx0aGFuZGxlTWVzc2FnZVBvcG92ZXJQcmVzcyhvRXZlbnQ6IENvcmVFdmVudCk6IHZvaWQge1xuXHRcdHRoaXMub01lc3NhZ2VQb3BvdmVyLnRvZ2dsZShvRXZlbnQuZ2V0U291cmNlKCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBtZXRob2QgdGhhdCBncm91cHMgdGhlIG1lc3NhZ2VzIGJhc2VkIG9uIHRoZSBzZWN0aW9uIG9yIHN1YnNlY3Rpb24gdGhleSBiZWxvbmcgdG8uXG5cdCAqIFRoaXMgbWV0aG9kIGZvcmNlIHRoZSBsb2FkaW5nIG9mIGNvbnRleHRzIGZvciBhbGwgdGFibGVzIGJlZm9yZSB0byBhcHBseSB0aGUgZ3JvdXBpbmcuXG5cdCAqIEBwYXJhbSBvVmlldyBDdXJyZW50IHZpZXcuXG5cdCAqIEByZXR1cm5zIFJldHVybiBwcm9taXNlLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0YXN5bmMgX2FwcGx5R3JvdXBpbmdBc3luYyhvVmlldzogRkVWaWV3KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgYVdhaXRGb3JEYXRhOiBQcm9taXNlPHZvaWQ+W10gPSBbXTtcblx0XHRjb25zdCBvVmlld0JpbmRpbmdDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRjb25zdCBfZmluZFRhYmxlc1JlbGF0ZWRUb01lc3NhZ2VzID0gKHZpZXc6IFZpZXcpOiB7IHRhYmxlOiBNRENUYWJsZTsgc3Vic2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24gfVtdID0+IHtcblx0XHRcdGNvbnN0IG9SZXM6IHsgdGFibGU6IE1EQ1RhYmxlOyBzdWJzZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbiB9W10gPSBbXTtcblx0XHRcdGNvbnN0IGFNZXNzYWdlcyA9IHRoaXMub0l0ZW1CaW5kaW5nLmdldENvbnRleHRzKCkubWFwKGZ1bmN0aW9uIChvQ29udGV4dDogT0RhdGFWNENvbnRleHQpIHtcblx0XHRcdFx0cmV0dXJuIG9Db250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBvVmlld0NvbnRleHQgPSB2aWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0XHRpZiAob1ZpZXdDb250ZXh0KSB7XG5cdFx0XHRcdGNvbnN0IG9PYmplY3RQYWdlOiBDb250cm9sID0gdmlldy5nZXRDb250ZW50KClbMF07XG5cdFx0XHRcdG1lc3NhZ2VIYW5kbGluZy5nZXRWaXNpYmxlU2VjdGlvbnNGcm9tT2JqZWN0UGFnZUxheW91dChvT2JqZWN0UGFnZSkuZm9yRWFjaChmdW5jdGlvbiAob1NlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uKSB7XG5cdFx0XHRcdFx0b1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvU3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24pIHtcblx0XHRcdFx0XHRcdG9TdWJTZWN0aW9uLmZpbmRFbGVtZW50cyh0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChvRWxlbTogVUk1RWxlbWVudCkge1xuXHRcdFx0XHRcdFx0XHRpZiAob0VsZW0uaXNBPE1EQ1RhYmxlPihcInNhcC51aS5tZGMuVGFibGVcIikpIHtcblx0XHRcdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFNZXNzYWdlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb1Jvd0JpbmRpbmcgPSBvRWxlbS5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAob1Jvd0JpbmRpbmcpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgc0VsZW1lQmluZGluZ1BhdGggPSBgJHtvVmlld0NvbnRleHQuZ2V0UGF0aCgpfS8ke29FbGVtLmdldFJvd0JpbmRpbmcoKS5nZXRQYXRoKCl9YDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFNZXNzYWdlc1tpXS50YXJnZXQuaW5kZXhPZihzRWxlbWVCaW5kaW5nUGF0aCkgPT09IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvUmVzLnB1c2goeyB0YWJsZTogb0VsZW0sIHN1YnNlY3Rpb246IG9TdWJTZWN0aW9uIH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gb1Jlcztcblx0XHR9O1xuXHRcdC8vIFNlYXJjaCBmb3IgdGFibGUgcmVsYXRlZCB0byBNZXNzYWdlcyBhbmQgaW5pdGlhbGl6ZSB0aGUgYmluZGluZyBjb250ZXh0IG9mIHRoZSBwYXJlbnQgc3Vic2VjdGlvbiB0byByZXRyaWV2ZSB0aGUgZGF0YVxuXHRcdGNvbnN0IG9UYWJsZXMgPSBfZmluZFRhYmxlc1JlbGF0ZWRUb01lc3NhZ2VzLmJpbmQodGhpcykob1ZpZXcpO1xuXHRcdG9UYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAoX29UYWJsZSkge1xuXHRcdFx0Y29uc3Qgb01EQ1RhYmxlID0gX29UYWJsZS50YWJsZSxcblx0XHRcdFx0b1N1YnNlY3Rpb24gPSBfb1RhYmxlLnN1YnNlY3Rpb247XG5cdFx0XHRpZiAoIW9NRENUYWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpIHx8IG9NRENUYWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCkgIT09IG9WaWV3QmluZGluZ0NvbnRleHQ/LmdldFBhdGgoKSkge1xuXHRcdFx0XHRvU3Vic2VjdGlvbi5zZXRCaW5kaW5nQ29udGV4dChvVmlld0JpbmRpbmdDb250ZXh0KTtcblx0XHRcdFx0aWYgKCFvTURDVGFibGUuZ2V0Um93QmluZGluZygpLmlzTGVuZ3RoRmluYWwoKSkge1xuXHRcdFx0XHRcdGFXYWl0Rm9yRGF0YS5wdXNoKFxuXHRcdFx0XHRcdFx0bmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmU6IEZ1bmN0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdG9NRENUYWJsZS5nZXRSb3dCaW5kaW5nKCkuYXR0YWNoRXZlbnRPbmNlKFwiZGF0YVJlY2VpdmVkXCIsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Y29uc3Qgd2FpdEZvckdyb3VwaW5nQXBwbGllZCA9IG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbikgPT4ge1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuX2FwcGx5R3JvdXBpbmcoKTtcblx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0fSwgMCk7XG5cdFx0fSk7XG5cdFx0dHJ5IHtcblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKGFXYWl0Rm9yRGF0YSk7XG5cdFx0XHRvVmlldy5nZXRNb2RlbCgpLmNoZWNrTWVzc2FnZXMoKTtcblx0XHRcdGF3YWl0IHdhaXRGb3JHcm91cGluZ0FwcGxpZWQ7XG5cdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBncm91cGluZyB0aGUgbWVzc2FnZXMgaW4gdGhlIG1lc3NhZ2VQb3BPdmVyXCIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbWV0aG9kIHRoYXQgZ3JvdXBzIHRoZSBtZXNzYWdlcyBiYXNlZCBvbiB0aGUgc2VjdGlvbiBvciBzdWJzZWN0aW9uIHRoZXkgYmVsb25nIHRvLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2FwcGx5R3JvdXBpbmcoKTogdm9pZCB7XG5cdFx0dGhpcy5vT2JqZWN0UGFnZUxheW91dCA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXQodGhpcywgdGhpcy5vT2JqZWN0UGFnZUxheW91dCk7XG5cdFx0aWYgKCF0aGlzLm9PYmplY3RQYWdlTGF5b3V0KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IG1lc3NhZ2VzOiBNZXNzYWdlSXRlbVtdID0gdGhpcy5vTWVzc2FnZVBvcG92ZXIuZ2V0SXRlbXMoKTtcblx0XHRjb25zdCBzZWN0aW9uID0gbWVzc2FnZUhhbmRsaW5nLmdldFZpc2libGVTZWN0aW9uc0Zyb21PYmplY3RQYWdlTGF5b3V0KHRoaXMub09iamVjdFBhZ2VMYXlvdXQpO1xuXHRcdGNvbnN0IGVuYWJsZUJpbmRpbmcgPSB0aGlzLl9jaGVja0NvbnRyb2xJZEluU2VjdGlvbnMobWVzc2FnZXMsIGZhbHNlKTtcblx0XHRpZiAoZW5hYmxlQmluZGluZykge1xuXHRcdFx0dGhpcy5fZm5FbmFibGVCaW5kaW5ncyhzZWN0aW9uKTtcblx0XHR9XG5cdFx0Ly9DbGVhciBtZXNzYWdlVGFyZ2V0UHJvcGVydHlcblx0XHRjb25zdCB2aWV3SWQgPSB0aGlzLl9nZXRWaWV3SWQodGhpcy5nZXRJZCgpKTtcblx0XHRjb25zdCB2aWV3ID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZCh2aWV3SWQgYXMgc3RyaW5nKTtcblx0XHRjb25zdCB1SU1vZGVsID0gdmlldz8uZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0dUlNb2RlbD8uc2V0UHJvcGVydHkoXCIvbWVzc2FnZVRhcmdldFByb3BlcnR5UGF0aFwiLCB1bmRlZmluZWQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBtZXRob2QgcmV0cmlldmVzIHRoZSBiaW5kaW5nIGNvbnRleHQgZm9yIHRoZSByZWZFcnJvciBvYmplY3QuXG5cdCAqIFRoZSByZWZFcnJvciBjb250YWlucyBhIG1hcCB0byBzdG9yZSB0aGUgaW5kZXhlcyBvZiB0aGUgcm93cyB3aXRoIGVycm9ycy5cblx0ICogQHBhcmFtIG9UYWJsZSBUaGUgdGFibGUgZm9yIHdoaWNoIHdlIHdhbnQgdG8gZ2V0IHRoZSByZWZFcnJvciBPYmplY3QuXG5cdCAqIEByZXR1cm5zIENvbnRleHQgb2YgdGhlIHJlZkVycm9yLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2dldFRhYmxlUmVmRXJyb3JDb250ZXh0KG9UYWJsZTogTURDVGFibGUpOiBCYXNlQ29udGV4dCB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgb01vZGVsID0gb1RhYmxlLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsO1xuXHRcdC8vaW5pdGlhbGl6ZSB0aGUgcmVmRXJyb3IgcHJvcGVydHkgaWYgaXQgZG9lc24ndCBleGlzdFxuXHRcdGlmICghb1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwicmVmRXJyb3JcIikpIHtcblx0XHRcdG9Nb2RlbC5zZXRQcm9wZXJ0eShcInJlZkVycm9yXCIsIHt9LCBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSEpO1xuXHRcdH1cblx0XHRjb25zdCBzUmVmRXJyb3JDb250ZXh0UGF0aCA9XG5cdFx0XHRvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKT8uZ2V0UGF0aCgpICtcblx0XHRcdFwiL3JlZkVycm9yL1wiICtcblx0XHRcdG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCkucmVwbGFjZShcIi9cIiwgXCIkXCIpICtcblx0XHRcdFwiJFwiICtcblx0XHRcdG9UYWJsZS5nZXRSb3dCaW5kaW5nKCkuZ2V0UGF0aCgpLnJlcGxhY2UoXCIvXCIsIFwiJFwiKTtcblx0XHRjb25zdCBvQ29udGV4dCA9IG9Nb2RlbC5nZXRDb250ZXh0KHNSZWZFcnJvckNvbnRleHRQYXRoKTtcblx0XHRpZiAoIW9Db250ZXh0LmdldFByb3BlcnR5KFwiXCIpKSB7XG5cdFx0XHRvTW9kZWwuc2V0UHJvcGVydHkoXCJcIiwge30sIG9Db250ZXh0KTtcblx0XHR9XG5cdFx0cmV0dXJuIG9Db250ZXh0O1xuXHR9XG5cblx0X3VwZGF0ZUludGVybmFsTW9kZWwoXG5cdFx0dGFibGVSb3dDb250ZXh0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCxcblx0XHRyb3dJbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkLFxuXHRcdHRhYmxlVGFyZ2V0Q29sUHJvcGVydHk6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHR0YWJsZTogTURDVGFibGUsXG5cdFx0bWVzc2FnZU9iamVjdDogTWVzc2FnZSxcblx0XHRpc0NyZWF0aW9uUm93PzogYm9vbGVhblxuXHQpOiB2b2lkIHtcblx0XHRsZXQgdGVtcDtcblx0XHRpZiAoaXNDcmVhdGlvblJvdykge1xuXHRcdFx0dGVtcCA9IHtcblx0XHRcdFx0cm93SW5kZXg6IFwiQ3JlYXRpb25Sb3dcIixcblx0XHRcdFx0dGFyZ2V0Q29sUHJvcGVydHk6IHRhYmxlVGFyZ2V0Q29sUHJvcGVydHkgPyB0YWJsZVRhcmdldENvbFByb3BlcnR5IDogXCJcIlxuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGVtcCA9IHtcblx0XHRcdFx0cm93SW5kZXg6IHRhYmxlUm93Q29udGV4dCA/IHJvd0luZGV4IDogXCJcIixcblx0XHRcdFx0dGFyZ2V0Q29sUHJvcGVydHk6IHRhYmxlVGFyZ2V0Q29sUHJvcGVydHkgPyB0YWJsZVRhcmdldENvbFByb3BlcnR5IDogXCJcIlxuXHRcdFx0fTtcblx0XHR9XG5cdFx0Y29uc3QgbW9kZWwgPSB0YWJsZS5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbCxcblx0XHRcdGNvbnRleHQgPSB0aGlzLl9nZXRUYWJsZVJlZkVycm9yQ29udGV4dCh0YWJsZSk7XG5cdFx0Ly93ZSBmaXJzdCByZW1vdmUgdGhlIGVudHJpZXMgd2l0aCBvYnNvbGV0ZSBtZXNzYWdlIGlkcyBmcm9tIHRoZSBpbnRlcm5hbCBtb2RlbCBiZWZvcmUgaW5zZXJ0aW5nIHRoZSBuZXcgZXJyb3IgaW5mbyA6XG5cdFx0Y29uc3QgYVZhbGlkTWVzc2FnZUlkcyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKVxuXHRcdFx0LmdldERhdGEoKVxuXHRcdFx0Lm1hcChmdW5jdGlvbiAobWVzc2FnZTogTWVzc2FnZSkge1xuXHRcdFx0XHRyZXR1cm4gbWVzc2FnZS5nZXRJZCgpO1xuXHRcdFx0fSk7XG5cdFx0bGV0IGFPYnNvbGV0ZU1lc3NhZ2VsSWRzO1xuXHRcdGlmIChjb250ZXh0Py5nZXRQcm9wZXJ0eShcIlwiKSkge1xuXHRcdFx0YU9ic29sZXRlTWVzc2FnZWxJZHMgPSBPYmplY3Qua2V5cyhjb250ZXh0Py5nZXRQcm9wZXJ0eShcIlwiKSkuZmlsdGVyKGZ1bmN0aW9uIChpbnRlcm5hbE1lc3NhZ2VJZCkge1xuXHRcdFx0XHRyZXR1cm4gYVZhbGlkTWVzc2FnZUlkcy5pbmRleE9mKGludGVybmFsTWVzc2FnZUlkKSA9PT0gLTE7XG5cdFx0XHR9KTtcblx0XHRcdGFPYnNvbGV0ZU1lc3NhZ2VsSWRzLmZvckVhY2goZnVuY3Rpb24gKG9ic29sZXRlSWQpIHtcblx0XHRcdFx0ZGVsZXRlIGNvbnRleHQ/LmdldFByb3BlcnR5KFwiXCIpW29ic29sZXRlSWRdO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdG1vZGVsPy5zZXRQcm9wZXJ0eShcblx0XHRcdG1lc3NhZ2VPYmplY3QuZ2V0SWQoKSxcblx0XHRcdE9iamVjdC5hc3NpZ24oe30sIGNvbnRleHQ/LmdldFByb3BlcnR5KG1lc3NhZ2VPYmplY3QuZ2V0SWQoKSkgPyBjb250ZXh0LmdldFByb3BlcnR5KG1lc3NhZ2VPYmplY3QuZ2V0SWQoKSkgOiB7fSwgdGVtcCksXG5cdFx0XHRjb250ZXh0XG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbWV0aG9kIHRoYXQgc2V0cyBncm91cHMgZm9yIHRyYW5zaWVudCBtZXNzYWdlcy5cblx0ICogQHBhcmFtIG1lc3NhZ2UgVGhlIHRyYW5zaWVudCBtZXNzYWdlIGZvciB3aGljaCB3ZSB3YW50IHRvIGNvbXB1dGUgYW5kIHNldCBncm91cC5cblx0ICogQHBhcmFtIHNBY3Rpb25OYW1lIFRoZSBhY3Rpb24gbmFtZS5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9zZXRHcm91cExhYmVsRm9yVHJhbnNpZW50TXNnKG1lc3NhZ2U6IE1lc3NhZ2VJdGVtLCBzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XG5cdFx0dGhpcy5zTGFzdEFjdGlvblRleHQgPSB0aGlzLnNMYXN0QWN0aW9uVGV4dFxuXHRcdFx0PyB0aGlzLnNMYXN0QWN0aW9uVGV4dFxuXHRcdFx0OiBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLmdldFRleHQoXCJUX01FU1NBR0VfQlVUVE9OX1NBUEZFX01FU1NBR0VfR1JPVVBfTEFTVF9BQ1RJT05cIik7XG5cblx0XHRtZXNzYWdlLnNldEdyb3VwTmFtZShgJHt0aGlzLnNMYXN0QWN0aW9uVGV4dH06ICR7c0FjdGlvbk5hbWV9YCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIG1ldGhvZCB0aGF0IGdyb3VwcyBtZXNzYWdlcyBhbmQgYWRkcyB0aGUgc3VidGl0bGUuXG5cdCAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlIHdlIHVzZSB0byBjb21wdXRlIHRoZSBncm91cCBhbmQgc3VidGl0bGUuXG5cdCAqIEBwYXJhbSBzZWN0aW9uIFRoZSBzZWN0aW9uIGNvbnRhaW5pbmcgdGhlIGNvbnRyb2xzLlxuXHQgKiBAcGFyYW0gc3ViU2VjdGlvbiBUaGUgc3Vic2VjdGlvbiBjb250YWluaW5nIHRoZSBjb250cm9scy5cblx0ICogQHBhcmFtIGVsZW1lbnRzIExpc3Qgb2YgY29udHJvbHMgZnJvbSBhIHN1YnNlY3Rpb24gcmVsYXRlZCB0byBhIG1lc3NhZ2UuXG5cdCAqIEBwYXJhbSBoYXNNdWx0aXBsZVN1YlNlY3Rpb25zIFRydWUgaWYgdGhlcmUgaXMgbW9yZSB0aGFuIDEgc3Vic2VjdGlvbiBpbiB0aGUgc2VjdGlvbi5cblx0ICogQHBhcmFtIGFjdGlvbk5hbWUgVGhlIGFjdGlvbiBuYW1lLCBpZiBhbnkuXG5cdCAqIEByZXR1cm5zIFJldHVybiB0aGUgY29udHJvbCB0YXJnZXRlZCBieSB0aGUgbWVzc2FnZS5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9jb21wdXRlTWVzc2FnZUdyb3VwQW5kU3ViVGl0bGUoXG5cdFx0bWVzc2FnZTogTWVzc2FnZUl0ZW0sXG5cdFx0c2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24sXG5cdFx0c3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24sXG5cdFx0ZWxlbWVudHM6IFVJNUVsZW1lbnRbXSxcblx0XHRoYXNNdWx0aXBsZVN1YlNlY3Rpb25zOiBib29sZWFuLFxuXHRcdGFjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZFxuXHQpOiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gZ2V0UmVzb3VyY2VNb2RlbChzZWN0aW9uKTtcblx0XHR0aGlzLm9JdGVtQmluZGluZy5kZXRhY2hDaGFuZ2UodGhpcy5fc2V0TWVzc2FnZURhdGEsIHRoaXMpO1xuXHRcdGNvbnN0IG1lc3NhZ2VPYmplY3QgPSBtZXNzYWdlLmdldEJpbmRpbmdDb250ZXh0KFwibWVzc2FnZVwiKT8uZ2V0T2JqZWN0KCkgYXMgTWVzc2FnZTtcblx0XHRjb25zdCBzZXRTZWN0aW9uTmFtZUluR3JvdXAgPSB0cnVlO1xuXHRcdGxldCBlbGVtZW50OiBVSTVFbGVtZW50LFxuXHRcdFx0dGFibGU6IE1EQ1RhYmxlIHwgdW5kZWZpbmVkLFxuXHRcdFx0dGFyZ2V0VGFibGVJbmZvID0ge30gYXMgVGFyZ2V0VGFibGVJbmZvVHlwZSxcblx0XHRcdGwsXG5cdFx0XHRyb3dJbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkLFxuXHRcdFx0dGFyZ2V0ZWRDb250cm9sOiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkLFxuXHRcdFx0aXNDcmVhdGlvblJvdzogYm9vbGVhbjtcblx0XHRjb25zdCBpc0JhY2tFbmRNZXNzYWdlID0gbmV3IFJlZ0V4cChcIl4vXCIpLnRlc3QobWVzc2FnZU9iamVjdD8uZ2V0VGFyZ2V0cygpWzBdKTtcblx0XHRpZiAoaXNCYWNrRW5kTWVzc2FnZSkge1xuXHRcdFx0Zm9yIChsID0gMDsgbCA8IGVsZW1lbnRzLmxlbmd0aDsgbCsrKSB7XG5cdFx0XHRcdGVsZW1lbnQgPSBlbGVtZW50c1tsXTtcblx0XHRcdFx0dGFyZ2V0ZWRDb250cm9sID0gZWxlbWVudDtcblx0XHRcdFx0aWYgKGVsZW1lbnQuaXNBKFwic2FwLm0uVGFibGVcIikgfHwgKGVsZW1lbnQgYXMgVUk1RWxlbWVudCkuaXNBKFwic2FwLnVpLnRhYmxlLlRhYmxlXCIpKSB7XG5cdFx0XHRcdFx0dGFibGUgPSBlbGVtZW50LmdldFBhcmVudCgpIGFzIE1EQ1RhYmxlO1xuXHRcdFx0XHRcdGNvbnN0IHJvd0JpbmRpbmcgPSB0YWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0XHRcdFx0Y29uc3QgZm5DYWxsYmFja1NldEdyb3VwTmFtZSA9ICgpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdHRoaXMuX3NldEdyb3VwTGFiZWxGb3JUcmFuc2llbnRNc2cobWVzc2FnZSwgYWN0aW9uTmFtZSk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRpZiAocm93QmluZGluZyAmJiByb3dCaW5kaW5nLmlzTGVuZ3RoRmluYWwoKSAmJiB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvYmogPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VGFibGVDb2x1bW5EYXRhQW5kU2V0U3VidGlsZShcblx0XHRcdFx0XHRcdFx0bWVzc2FnZU9iamVjdCxcblx0XHRcdFx0XHRcdFx0dGFibGUsXG5cdFx0XHRcdFx0XHRcdGVsZW1lbnQsXG5cdFx0XHRcdFx0XHRcdHJvd0JpbmRpbmcsXG5cdFx0XHRcdFx0XHRcdGFjdGlvbk5hbWUsXG5cdFx0XHRcdFx0XHRcdHNldFNlY3Rpb25OYW1lSW5Hcm91cCxcblx0XHRcdFx0XHRcdFx0Zm5DYWxsYmFja1NldEdyb3VwTmFtZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHRhcmdldFRhYmxlSW5mbyA9IG9iai5vVGFyZ2V0VGFibGVJbmZvO1xuXHRcdFx0XHRcdFx0aWYgKG9iai5zdWJUaXRsZSkge1xuXHRcdFx0XHRcdFx0XHRtZXNzYWdlLnNldFN1YnRpdGxlKG9iai5zdWJUaXRsZSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdG1lc3NhZ2Uuc2V0QWN0aXZlVGl0bGUoXG5cdFx0XHRcdFx0XHRcdCEhdGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0NvbnRleHQgJiZcblx0XHRcdFx0XHRcdFx0XHQhdGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0NvbnRleHQ/LmlzSW5hY3RpdmUoKSAmJiAvLyBjaGVjayBpZiB0aGUgcm93Y29udGV4dCBpcyBhY3RpdmVcblx0XHRcdFx0XHRcdFx0XHR0YXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dC5nZXRQYXRoKCkgIT09XG5cdFx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlLmdldEJpbmRpbmdDb250ZXh0KFwibWVzc2FnZVwiKT8uZ2V0UHJvcGVydHkoXCJ0YXJnZXRcIikucmVwbGFjZSgvXFwvJC8sIFwiXCIpIC8vIGNoZWNrIGlmIHRoZSB0YXJnZXQgb2YgdGhlIG1lc3NhZ2UgaXMgbm90IHRoZSByb3cgaXRzZWxmIChyZW1vdmUgdGhlIGxhc3QgLyBpZiBwcmVzZW50cylcblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdGlmICh0YXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dCAmJiAhdGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0NvbnRleHQuaXNJbmFjdGl2ZSgpKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuX2Zvcm1hdE1lc3NhZ2VEZXNjcmlwdGlvbihcblx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlLFxuXHRcdFx0XHRcdFx0XHRcdHRhcmdldFRhYmxlSW5mby5vVGFibGVSb3dDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRcdHRhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xOYW1lLFxuXHRcdFx0XHRcdFx0XHRcdHRhYmxlXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyb3dJbmRleCA9IHRhcmdldFRhYmxlSW5mby5vVGFibGVSb3dDb250ZXh0ICYmIHRhcmdldFRhYmxlSW5mby5vVGFibGVSb3dDb250ZXh0LmdldEluZGV4KCk7XG5cdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVJbnRlcm5hbE1vZGVsKFxuXHRcdFx0XHRcdFx0XHR0YXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dCxcblx0XHRcdFx0XHRcdFx0cm93SW5kZXgsXG5cdFx0XHRcdFx0XHRcdHRhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSxcblx0XHRcdFx0XHRcdFx0dGFibGUsXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VPYmplY3Rcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG1lc3NhZ2Uuc2V0QWN0aXZlVGl0bGUodHJ1ZSk7XG5cblx0XHRcdFx0XHRpZiAobWVzc2FnZS5nZXRTdWJ0aXRsZSgpID09PSBcIlwiKSB7XG5cdFx0XHRcdFx0XHRsZXQgZm9ybUVsZW1lbnQ6IEZvcm1FbGVtZW50IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0bGV0IHBhcmVudCA9IHRhcmdldGVkQ29udHJvbC5nZXRQYXJlbnQoKTtcblx0XHRcdFx0XHRcdHdoaWxlIChwYXJlbnQpIHtcblx0XHRcdFx0XHRcdFx0aWYgKHBhcmVudCAmJiBwYXJlbnQuaXNBPEZvcm1FbGVtZW50PihcInNhcC51aS5sYXlvdXQuZm9ybS5Gb3JtRWxlbWVudFwiKSkge1xuXHRcdFx0XHRcdFx0XHRcdGZvcm1FbGVtZW50ID0gcGFyZW50O1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHBhcmVudCA9IHBhcmVudC5nZXRQYXJlbnQoKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKGZvcm1FbGVtZW50KSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGxhYmVsID0gZm9ybUVsZW1lbnQuZ2V0TGFiZWwoKTtcblx0XHRcdFx0XHRcdFx0bGV0IGxhYmVsVGV4dCA9IFwiXCI7XG5cblx0XHRcdFx0XHRcdFx0aWYgKHR5cGVvZiBsYWJlbCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdFx0XHRcdGxhYmVsVGV4dCA9IGxhYmVsO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGxhYmVsVGV4dCA9IChsYWJlbCBhcyBMYWJlbCkuZ2V0VGV4dCgpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2Uuc2V0U3VidGl0bGUobGFiZWxUZXh0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvL2NoZWNrIGlmIHRoZSB0YXJnZXRlZCBjb250cm9sIGlzIGEgY2hpbGQgb2Ygb25lIG9mIHRoZSBvdGhlciBjb250cm9sc1xuXHRcdFx0XHRcdGNvbnN0IGlzVGFyZ2V0ZWRDb250cm9sT3JwaGFuID0gbWVzc2FnZUhhbmRsaW5nLmJJc09ycGhhbkVsZW1lbnQodGFyZ2V0ZWRDb250cm9sLCBlbGVtZW50cyk7XG5cdFx0XHRcdFx0aWYgKGlzVGFyZ2V0ZWRDb250cm9sT3JwaGFuKSB7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly9UaGVyZSBpcyBvbmx5IG9uZSBlbHQgYXMgdGhpcyBpcyBhIGZyb250RW5kIG1lc3NhZ2Vcblx0XHRcdHRhcmdldGVkQ29udHJvbCA9IGVsZW1lbnRzWzBdO1xuXHRcdFx0dGFibGUgPSB0aGlzLl9nZXRNZGNUYWJsZSh0YXJnZXRlZENvbnRyb2wpO1xuXHRcdFx0dGFyZ2V0VGFibGVJbmZvID0ge30gYXMgVGFyZ2V0VGFibGVJbmZvVHlwZTtcblx0XHRcdGlmICh0YWJsZSkge1xuXHRcdFx0XHR0YXJnZXRUYWJsZUluZm8udGFibGVIZWFkZXIgPSB0YWJsZS5nZXRIZWFkZXIoKTtcblx0XHRcdFx0Y29uc3QgdGFyZ2V0Q29sdW1uSW5kZXggPSB0aGlzLl9nZXRUYWJsZUNvbHVtbkluZGV4KHRhcmdldGVkQ29udHJvbCk7XG5cdFx0XHRcdHRhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSA9XG5cdFx0XHRcdFx0dGFyZ2V0Q29sdW1uSW5kZXggIT09IHVuZGVmaW5lZCAmJiB0YXJnZXRDb2x1bW5JbmRleCA+IC0xXG5cdFx0XHRcdFx0XHQ/IHRhYmxlLmdldENvbHVtbnMoKVt0YXJnZXRDb2x1bW5JbmRleF0uZ2V0UHJvcGVydHlLZXkoKVxuXHRcdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cblx0XHRcdFx0dGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbE5hbWUgPVxuXHRcdFx0XHRcdHRhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSAmJiB0YXJnZXRDb2x1bW5JbmRleCAhPT0gdW5kZWZpbmVkICYmIHRhcmdldENvbHVtbkluZGV4ID4gLTFcblx0XHRcdFx0XHRcdD8gdGFibGUuZ2V0Q29sdW1ucygpW3RhcmdldENvbHVtbkluZGV4XS5nZXRIZWFkZXIoKVxuXHRcdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRcdGlzQ3JlYXRpb25Sb3cgPSB0aGlzLl9nZXRUYWJsZVJvdyh0YXJnZXRlZENvbnRyb2wpPy5pc0E8Q3JlYXRpb25Sb3c+KFwic2FwLnVpLnRhYmxlLkNyZWF0aW9uUm93XCIpID8/IGZhbHNlO1xuXHRcdFx0XHRpZiAoIWlzQ3JlYXRpb25Sb3cpIHtcblx0XHRcdFx0XHRyb3dJbmRleCA9IHRoaXMuX2dldFRhYmxlUm93SW5kZXgodGFyZ2V0ZWRDb250cm9sKTtcblx0XHRcdFx0XHR0YXJnZXRUYWJsZUluZm8ub1RhYmxlUm93QmluZGluZ0NvbnRleHRzID0gdGFibGUuZ2V0Um93QmluZGluZygpLmdldEN1cnJlbnRDb250ZXh0cygpO1xuXHRcdFx0XHRcdHRhcmdldFRhYmxlSW5mby5vVGFibGVSb3dDb250ZXh0ID1cblx0XHRcdFx0XHRcdHJvd0luZGV4ICE9PSB1bmRlZmluZWQgPyB0YXJnZXRUYWJsZUluZm8ub1RhYmxlUm93QmluZGluZ0NvbnRleHRzW3Jvd0luZGV4XSA6IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBtZXNzYWdlU3VidGl0bGUgPSBtZXNzYWdlSGFuZGxpbmcuZ2V0TWVzc2FnZVN1YnRpdGxlKFxuXHRcdFx0XHRcdG1lc3NhZ2VPYmplY3QsXG5cdFx0XHRcdFx0dGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0JpbmRpbmdDb250ZXh0cyxcblx0XHRcdFx0XHR0YXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dCxcblx0XHRcdFx0XHR0YXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZSxcblx0XHRcdFx0XHR0YWJsZSxcblx0XHRcdFx0XHRpc0NyZWF0aW9uUm93LFxuXHRcdFx0XHRcdHRhcmdldENvbHVtbkluZGV4ID09PSAwICYmICh0YXJnZXRlZENvbnRyb2wgYXMgbWRjRmllbGQpLmdldFZhbHVlU3RhdGUoKSA9PT0gXCJFcnJvclwiXG5cdFx0XHRcdFx0XHQ/ICh0YXJnZXRlZENvbnRyb2wgYXMgQ29udHJvbClcblx0XHRcdFx0XHRcdDogdW5kZWZpbmVkXG5cdFx0XHRcdCk7XG5cdFx0XHRcdC8vc2V0IHRoZSBzdWJ0aXRsZVxuXHRcdFx0XHRpZiAobWVzc2FnZVN1YnRpdGxlKSB7XG5cdFx0XHRcdFx0bWVzc2FnZS5zZXRTdWJ0aXRsZShtZXNzYWdlU3VidGl0bGUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG1lc3NhZ2Uuc2V0QWN0aXZlVGl0bGUoISF0YXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dCk7XG5cdFx0XHRcdGlmICh0YXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dCkge1xuXHRcdFx0XHRcdHRoaXMuX2Zvcm1hdE1lc3NhZ2VEZXNjcmlwdGlvbihtZXNzYWdlLCB0YXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dCwgdGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbE5hbWUsIHRhYmxlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLl91cGRhdGVJbnRlcm5hbE1vZGVsKFxuXHRcdFx0XHRcdHRhcmdldFRhYmxlSW5mby5vVGFibGVSb3dDb250ZXh0LFxuXHRcdFx0XHRcdHJvd0luZGV4LFxuXHRcdFx0XHRcdHRhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSxcblx0XHRcdFx0XHR0YWJsZSxcblx0XHRcdFx0XHRtZXNzYWdlT2JqZWN0LFxuXHRcdFx0XHRcdGlzQ3JlYXRpb25Sb3dcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoc2V0U2VjdGlvbk5hbWVJbkdyb3VwKSB7XG5cdFx0XHRjb25zdCBpbmNsdWRlVGFibGVHcm91cE5hbWUgPSB0aGlzLl9jaGVja01lcmdlTG9naWNGb3JNZXNzYWdlR3JvdXBpbmcoc2VjdGlvbiwgc3ViU2VjdGlvbiwgaGFzTXVsdGlwbGVTdWJTZWN0aW9ucyk7XG5cdFx0XHRjb25zdCBzZWN0aW9uQmFzZWRHcm91cE5hbWUgPSBtZXNzYWdlSGFuZGxpbmcuY3JlYXRlU2VjdGlvbkdyb3VwTmFtZShcblx0XHRcdFx0c2VjdGlvbixcblx0XHRcdFx0c3ViU2VjdGlvbixcblx0XHRcdFx0aGFzTXVsdGlwbGVTdWJTZWN0aW9ucyxcblx0XHRcdFx0dGFyZ2V0VGFibGVJbmZvLFxuXHRcdFx0XHRyZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRpbmNsdWRlVGFibGVHcm91cE5hbWVcblx0XHRcdCk7XG5cblx0XHRcdG1lc3NhZ2Uuc2V0R3JvdXBOYW1lKHNlY3Rpb25CYXNlZEdyb3VwTmFtZSk7XG5cdFx0XHRjb25zdCB2aWV3ID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLl9nZXRWaWV3SWQodGhpcy5nZXRJZCgpKSBhcyBzdHJpbmcpO1xuXHRcdFx0Y29uc3Qgdmlld0NvbnRleHRQYXRoID0gdmlldz8uZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpO1xuXHRcdFx0Y29uc3QgbWVzc2FnZVRhcmdldFByb3BlcnR5TmFtZSA9IG1lc3NhZ2VPYmplY3QuZ2V0VGFyZ2V0cygpWzBdPy5zcGxpdChcIi9cIikucG9wKCk7XG5cdFx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gdmlldz8uZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0XHRjb25zdCBpbnRlcm5hbE1vZGVsTWVzc2FnZVRhcmdldFByb3BlcnR5UGF0aCA9IGludGVybmFsTW9kZWw/LmdldFByb3BlcnR5KFwiL21lc3NhZ2VUYXJnZXRQcm9wZXJ0eVBhdGhcIik7XG5cdFx0XHRjb25zdCBpbnRlcm5hbE1vZGVsTWVzc2FnZVRhcmdldFByb3BlcnR5Q29udGV4dFBhdGggPSBpbnRlcm5hbE1vZGVsTWVzc2FnZVRhcmdldFByb3BlcnR5UGF0aD8uc3Vic3RyaW5nKFxuXHRcdFx0XHQwLFxuXHRcdFx0XHRpbnRlcm5hbE1vZGVsTWVzc2FnZVRhcmdldFByb3BlcnR5UGF0aC5sYXN0SW5kZXhPZihcIi9cIilcblx0XHRcdCk7XG5cdFx0XHQvLyBhY3RpdmVUaXRsZVByZXNzIHNob3VsZCBvbmx5IGJlIHRyaWdnZXJlZCBpbiBmb3J3YXJkIG5hdmlnYXRpb24gYW5kIG5vdCBpbiBiYWNrIG5hdmlnYXRpb25cblx0XHRcdGlmIChcblx0XHRcdFx0aW50ZXJuYWxNb2RlbE1lc3NhZ2VUYXJnZXRQcm9wZXJ0eUNvbnRleHRQYXRoICYmXG5cdFx0XHRcdG1lc3NhZ2VUYXJnZXRQcm9wZXJ0eU5hbWUgJiZcblx0XHRcdFx0dmlld0NvbnRleHRQYXRoICYmXG5cdFx0XHRcdG1lc3NhZ2VUYXJnZXRQcm9wZXJ0eU5hbWUgPT09IGludGVybmFsTW9kZWxNZXNzYWdlVGFyZ2V0UHJvcGVydHlQYXRoLnNwbGl0KFwiL1wiKS5wb3AoKSAmJlxuXHRcdFx0XHR2aWV3Q29udGV4dFBhdGgubGVuZ3RoID49IGludGVybmFsTW9kZWxNZXNzYWdlVGFyZ2V0UHJvcGVydHlDb250ZXh0UGF0aC5sZW5ndGggJiZcblx0XHRcdFx0dmlld0NvbnRleHRQYXRoLnN0YXJ0c1dpdGgoaW50ZXJuYWxNb2RlbE1lc3NhZ2VUYXJnZXRQcm9wZXJ0eUNvbnRleHRQYXRoKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHRoaXMub01lc3NhZ2VQb3BvdmVyLmZpcmVBY3RpdmVUaXRsZVByZXNzKHsgaXRlbTogbWVzc2FnZSB9KTtcblx0XHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9tZXNzYWdlVGFyZ2V0UHJvcGVydHlQYXRoXCIsIGZhbHNlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5vSXRlbUJpbmRpbmcuYXR0YWNoQ2hhbmdlKHRoaXMuX3NldE1lc3NhZ2VEYXRhLCB0aGlzKTtcblx0XHRyZXR1cm4gdGFyZ2V0ZWRDb250cm9sO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBtZXRob2QgdG8gY2hlY2sgaWYgdGhlIHNlY3Rpb24gYW5kIHN1YnNlY3Rpb24gaGFzIHNpbmdsZSB0YWJsZSBjb250cm9sLlxuXHQgKiBAcGFyYW0gc2VjdGlvbiBPYmplY3RQYWdlIHNlY3Rpb24uXG5cdCAqIEBwYXJhbSBzdWJTZWN0aW9uIE9iamVjdFBhZ2Ugc3ViIHNlY3Rpb24uXG5cdCAqIEBwYXJhbSBoYXNNdWx0aXBsZVN1YlNlY3Rpb25zIFRydWUgaWYgdGhlcmUgaXMgbW9yZSB0aGFuIDEgc3Vic2VjdGlvbiBpbiB0aGUgc2VjdGlvbi5cblx0ICogQHJldHVybnMgUmV0dXJucyBib29sZWFuIHZhbHVlIGZvciB0aGUgc2luZ2xlIGNvbnRyb2wgaW5zaWRlIHRoZSBzZWN0aW9uLCBieSBkZWZhdWx0IGl0IGlzIHRydWUuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfY2hlY2tNZXJnZUxvZ2ljRm9yTWVzc2FnZUdyb3VwaW5nKFxuXHRcdHNlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uLFxuXHRcdHN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLFxuXHRcdGhhc011bHRpcGxlU3ViU2VjdGlvbnM6IGJvb2xlYW5cblx0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3Qgdmlld0lkID0gdGhpcy5fZ2V0Vmlld0lkKHRoaXMuZ2V0SWQoKSk7XG5cdFx0Y29uc3QgdmlldyA9IHZpZXdJZCA/IChVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHZpZXdJZCkgYXMgVmlldykgOiB1bmRlZmluZWQ7XG5cdFx0bGV0IGJJbmNsdWRlVGFibGVHcm91cE5hbWUgPSB0cnVlO1xuXHRcdGNvbnN0IHNpbmdsZVN1YnNlY3Rpb25JblBhZ2VMYXlvdXQgPVxuXHRcdFx0IWhhc011bHRpcGxlU3ViU2VjdGlvbnMgJiYgKHZpZXc/LmdldFZpZXdEYXRhKCkgYXMgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3MpPy5zZWN0aW9uTGF5b3V0ID09PSBcIlBhZ2VcIjtcblx0XHRjb25zdCBtdWx0aVN1YnNlY3Rpb25JblRhYkxheW91dCA9XG5cdFx0XHRoYXNNdWx0aXBsZVN1YlNlY3Rpb25zICYmICh2aWV3Py5nZXRWaWV3RGF0YSgpIGFzIE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzKT8uc2VjdGlvbkxheW91dCA9PT0gXCJUYWJzXCI7XG5cdFx0aWYgKHNpbmdsZVN1YnNlY3Rpb25JblBhZ2VMYXlvdXQpIHtcblx0XHRcdGNvbnN0IGJsb2NrID0gc3ViU2VjdGlvbi5nZXRCbG9ja3MoKTtcblx0XHRcdGNvbnN0IGNvbnRlbnQgPSBibG9jay5sZW5ndGggPT09IDEgPyAoYmxvY2tbMF0uZ2V0QWdncmVnYXRpb24oXCJjb250ZW50XCIpIGFzIE1hbmFnZWRPYmplY3QpIDogdW5kZWZpbmVkO1xuXHRcdFx0aWYgKGNvbnRlbnQ/LmlzQShcInNhcC5mZS5tYWNyb3MudGFibGUuVGFibGVBUElcIikpIHtcblx0XHRcdFx0YkluY2x1ZGVUYWJsZUdyb3VwTmFtZSA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAobXVsdGlTdWJzZWN0aW9uSW5UYWJMYXlvdXQpIHtcblx0XHRcdGxldCBjb250ZW50O1xuXHRcdFx0Y29uc3QgYmxvY2tzID0gc3ViU2VjdGlvbi5nZXRCbG9ja3MoKTtcblx0XHRcdC8vIEluIGNhc2Ugb2YgUmVmZXJlbmNlIEZhY2V0LCB0aGUgZmlyc3QgYmxvY2sgd2lsbCBiZSBTdWJTZWN0aW9uQmxvY2tcblx0XHRcdGlmIChibG9ja3MubGVuZ3RoID09PSAxICYmIGJsb2Nrc1swXT8uaXNBPFN1YlNlY3Rpb25CbG9jaz4oXCJzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2UuY29udHJvbHMuU3ViU2VjdGlvbkJsb2NrXCIpKSB7XG5cdFx0XHRcdGNvbnRlbnQgPSBibG9ja3NbMF0uZ2V0QWdncmVnYXRpb24oXCJjb250ZW50XCIpIGFzIE1hbmFnZWRPYmplY3Q7XG5cdFx0XHRcdGlmIChjb250ZW50Py5pc0EoXCJzYXAuZmUubWFjcm9zLnRhYmxlLlRhYmxlQVBJXCIpKSB7XG5cdFx0XHRcdFx0YkluY2x1ZGVUYWJsZUdyb3VwTmFtZSA9IGZhbHNlO1xuXHRcdFx0XHR9IGVsc2UgaWYgKChjb250ZW50IGFzIER5bmFtaWNTaWRlQ29udGVudCk/LmlzQShcInNhcC51aS5sYXlvdXQuRHluYW1pY1NpZGVDb250ZW50XCIpKSB7XG5cdFx0XHRcdFx0Y29udGVudCA9XG5cdFx0XHRcdFx0XHQoY29udGVudCBhcyBEeW5hbWljU2lkZUNvbnRlbnQpLmdldE1haW5Db250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gJiZcblx0XHRcdFx0XHRcdChjb250ZW50IGFzIER5bmFtaWNTaWRlQ29udGVudCk/LmdldE1haW5Db250ZW50KCk7XG5cdFx0XHRcdFx0aWYgKGNvbnRlbnQgJiYgY29udGVudC5sZW5ndGggPT09IDEgJiYgY29udGVudFswXT8uaXNBKFwic2FwLmZlLm1hY3Jvcy50YWJsZS5UYWJsZUFQSVwiKSkge1xuXHRcdFx0XHRcdFx0YkluY2x1ZGVUYWJsZUdyb3VwTmFtZSA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYkluY2x1ZGVUYWJsZUdyb3VwTmFtZTtcblx0fVxuXG5cdF9jaGVja0NvbnRyb2xJZEluU2VjdGlvbnMobWVzc2FnZXM6IE1lc3NhZ2VJdGVtW10sIGVuYWJsZUJpbmRpbmc/OiBib29sZWFuKTogYm9vbGVhbiB8IHZvaWQge1xuXHRcdGxldCBzZWN0aW9uLCBhU3ViU2VjdGlvbnMsIG1lc3NhZ2UsIGksIGosIGs7XG5cdFx0dGhpcy5zR2VuZXJhbEdyb3VwVGV4dCA9IHRoaXMuc0dlbmVyYWxHcm91cFRleHRcblx0XHRcdD8gdGhpcy5zR2VuZXJhbEdyb3VwVGV4dFxuXHRcdFx0OiBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLmdldFRleHQoXCJUX01FU1NBR0VfQlVUVE9OX1NBUEZFX01FU1NBR0VfR1JPVVBfR0VORVJBTFwiKTtcblx0XHQvL0dldCBhbGwgc2VjdGlvbnMgZnJvbSB0aGUgb2JqZWN0IHBhZ2UgbGF5b3V0XG5cdFx0Y29uc3QgYVZpc2libGVTZWN0aW9ucyA9IG1lc3NhZ2VIYW5kbGluZy5nZXRWaXNpYmxlU2VjdGlvbnNGcm9tT2JqZWN0UGFnZUxheW91dCh0aGlzLm9PYmplY3RQYWdlTGF5b3V0ISk7XG5cdFx0aWYgKGFWaXNpYmxlU2VjdGlvbnMpIHtcblx0XHRcdGNvbnN0IHZpZXdJZCA9IHRoaXMuX2dldFZpZXdJZCh0aGlzLmdldElkKCkpO1xuXHRcdFx0Y29uc3Qgb1ZpZXcgPSB2aWV3SWQgPyAoVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZCh2aWV3SWQpIGFzIFZpZXcpIDogdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3Qgc0FjdGlvbk5hbWUgPSBvVmlldz8uZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKT8uZ2V0UHJvcGVydHkoXCJzQWN0aW9uTmFtZVwiKTtcblx0XHRcdGlmIChzQWN0aW9uTmFtZSkge1xuXHRcdFx0XHQob1ZpZXc/LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQpLnNldFByb3BlcnR5KFwic0FjdGlvbk5hbWVcIiwgbnVsbCk7XG5cdFx0XHR9XG5cdFx0XHRmb3IgKGkgPSBtZXNzYWdlcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuXHRcdFx0XHQvLyBMb29wIG92ZXIgYWxsIG1lc3NhZ2VzXG5cdFx0XHRcdG1lc3NhZ2UgPSBtZXNzYWdlc1tpXTtcblx0XHRcdFx0bGV0IGJJc0dlbmVyYWxHcm91cE5hbWUgPSB0cnVlO1xuXHRcdFx0XHRmb3IgKGogPSBhVmlzaWJsZVNlY3Rpb25zLmxlbmd0aCAtIDE7IGogPj0gMDsgLS1qKSB7XG5cdFx0XHRcdFx0bGV0IHNob3VsZEJyZWFrID0gZmFsc2U7XG5cdFx0XHRcdFx0Ly8gTG9vcCBvdmVyIGFsbCB2aXNpYmxlIHNlY3Rpb25zXG5cdFx0XHRcdFx0c2VjdGlvbiA9IGFWaXNpYmxlU2VjdGlvbnNbal07XG5cdFx0XHRcdFx0YVN1YlNlY3Rpb25zID0gc2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpO1xuXHRcdFx0XHRcdGZvciAoayA9IGFTdWJTZWN0aW9ucy5sZW5ndGggLSAxOyBrID49IDA7IC0taykge1xuXHRcdFx0XHRcdFx0Ly8gTG9vcCBvdmVyIGFsbCBzdWItc2VjdGlvbnNcblx0XHRcdFx0XHRcdGNvbnN0IHN1YlNlY3Rpb24gPSBhU3ViU2VjdGlvbnNba107XG5cdFx0XHRcdFx0XHRjb25zdCBvTWVzc2FnZU9iamVjdCA9IG1lc3NhZ2U/LmdldEJpbmRpbmdDb250ZXh0KFwibWVzc2FnZVwiKT8uZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0XHR0aGlzLnNHZW5lcmFsR3JvdXBUZXh0ID0gdGhpcy5fZ2V0R2VuZXJhbEdyb3VwVGV4dChvVmlldywgb01lc3NhZ2VPYmplY3QpO1xuXHRcdFx0XHRcdFx0Y29uc3QgYUNvbnRyb2xzID0gbWVzc2FnZUhhbmRsaW5nLmdldENvbnRyb2xGcm9tTWVzc2FnZVJlbGF0aW5nVG9TdWJTZWN0aW9uKHN1YlNlY3Rpb24sIG9NZXNzYWdlT2JqZWN0KTtcblx0XHRcdFx0XHRcdGlmIChhQ29udHJvbHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvVGFyZ2V0ZWRDb250cm9sID0gdGhpcy5fY29tcHV0ZU1lc3NhZ2VHcm91cEFuZFN1YlRpdGxlKFxuXHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2UsXG5cdFx0XHRcdFx0XHRcdFx0c2VjdGlvbixcblx0XHRcdFx0XHRcdFx0XHRzdWJTZWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdGFDb250cm9scyxcblx0XHRcdFx0XHRcdFx0XHRhU3ViU2VjdGlvbnMubGVuZ3RoID4gMSxcblx0XHRcdFx0XHRcdFx0XHRzQWN0aW9uTmFtZVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRiSXNHZW5lcmFsR3JvdXBOYW1lID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdC8vIGlmIHdlIGZvdW5kIHRhYmxlIHRoYXQgbWF0Y2hlcyB3aXRoIHRoZSBtZXNzYWdlLCB3ZSBkb24ndCBzdG9wIHRoZSBsb29wXG5cdFx0XHRcdFx0XHRcdC8vIGluIGNhc2Ugd2UgZmluZCBhbiBhZGRpdGlvbmFsIGNvbnRyb2wgKGVnIG1kYyBmaWVsZCkgdGhhdCBhbHNvIG1hdGNoIHdpdGggdGhlIG1lc3NhZ2Vcblx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdG9UYXJnZXRlZENvbnRyb2wgJiZcblx0XHRcdFx0XHRcdFx0XHQhb1RhcmdldGVkQ29udHJvbC5pc0EoXCJzYXAubS5UYWJsZVwiKSAmJlxuXHRcdFx0XHRcdFx0XHRcdCEob1RhcmdldGVkQ29udHJvbCBhcyBVSTVFbGVtZW50KS5pc0EoXCJzYXAudWkudGFibGUuVGFibGVcIilcblx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0c2hvdWxkQnJlYWsgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChzaG91bGRCcmVhaykge1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChiSXNHZW5lcmFsR3JvdXBOYW1lKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb01lc3NhZ2VPYmplY3QgPSBtZXNzYWdlLmdldEJpbmRpbmdDb250ZXh0KFwibWVzc2FnZVwiKT8uZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0aWYgKHRoaXMuaXNIaWRkZW5EcmFmdEVuYWJsZWQpIHtcblx0XHRcdFx0XHRcdG1lc3NhZ2Uuc2V0QWN0aXZlVGl0bGUodHJ1ZSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG1lc3NhZ2Uuc2V0QWN0aXZlVGl0bGUoZmFsc2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAob01lc3NhZ2VPYmplY3QucGVyc2lzdGVudCAmJiBzQWN0aW9uTmFtZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5fc2V0R3JvdXBMYWJlbEZvclRyYW5zaWVudE1zZyhtZXNzYWdlLCBzQWN0aW9uTmFtZSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG1lc3NhZ2Uuc2V0R3JvdXBOYW1lKHRoaXMuc0dlbmVyYWxHcm91cFRleHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIWVuYWJsZUJpbmRpbmcgJiYgbWVzc2FnZS5nZXRHcm91cE5hbWUoKSA9PT0gdGhpcy5zR2VuZXJhbEdyb3VwVGV4dCAmJiB0aGlzLl9maW5kVGFyZ2V0Rm9yTWVzc2FnZShtZXNzYWdlKSkge1xuXHRcdFx0XHRcdC8vIHdoZW4gdGhlIHNlY3Rpb24gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgdmlldyBwb3J0XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvL0ZldGNoZXMgdGhlIGdyb3VwIG5hbWUgb2YgdGhlIG1lc3NhZ2UgYmFzZWQgb24gZW5hYmxlZG1lbnQgb2YgaGlkZGVuIGRyYWZ0IGFuZCBwYWdlIHdoZXJlIGVycm9yIGlzIHByZXNlbnQoY3VycmVudCBwYWdlL290aGVyIHBhZ2UpXG5cdF9nZXRHZW5lcmFsR3JvdXBUZXh0KG9WaWV3OiBWaWV3IHwgdW5kZWZpbmVkLCBvTWVzc2FnZU9iamVjdDogTWVzc2FnZSk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgdmlld1BhdGggPSBvVmlldz8uZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IG1lc3NhZ2VUYXJnZXRQYXRoID0gb01lc3NhZ2VPYmplY3Q/LmdldFRhcmdldHMoKVswXTtcblx0XHRpZiAodGhpcy5pc0hpZGRlbkRyYWZ0RW5hYmxlZCAmJiB2aWV3UGF0aCAmJiAhbWVzc2FnZVRhcmdldFBhdGguaW5jbHVkZXModmlld1BhdGgpKSB7XG5cdFx0XHRyZXR1cm4gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpIS5nZXRUZXh0KFwiVF9NRVNTQUdFX0JVVFRPTl9TQVBGRV9NRVNTQUdFX0dST1VQX09USEVSX1BBR0VTXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpIS5nZXRUZXh0KFwiVF9NRVNTQUdFX0JVVFRPTl9TQVBGRV9NRVNTQUdFX0dST1VQX0dFTkVSQUxcIik7XG5cdFx0fVxuXHR9XG5cblx0X2ZpbmRUYXJnZXRGb3JNZXNzYWdlKG1lc3NhZ2U6IE1lc3NhZ2VJdGVtKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgbWVzc2FnZU9iamVjdCA9IG1lc3NhZ2UuZ2V0QmluZGluZ0NvbnRleHQoXCJtZXNzYWdlXCIpICYmIG1lc3NhZ2UuZ2V0QmluZGluZ0NvbnRleHQoXCJtZXNzYWdlXCIpPy5nZXRPYmplY3QoKTtcblx0XHRpZiAobWVzc2FnZU9iamVjdCAmJiBtZXNzYWdlT2JqZWN0LnRhcmdldCkge1xuXHRcdFx0Y29uc3Qgb01ldGFNb2RlbCA9IHRoaXMub09iamVjdFBhZ2VMYXlvdXQ/LmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0XHRjb250ZXh0UGF0aCA9IG9NZXRhTW9kZWwgJiYgb01ldGFNb2RlbC5nZXRNZXRhUGF0aChtZXNzYWdlT2JqZWN0LnRhcmdldCksXG5cdFx0XHRcdG9Db250ZXh0UGF0aE1ldGFkYXRhID0gb01ldGFNb2RlbCAmJiBvTWV0YU1vZGVsLmdldE9iamVjdChjb250ZXh0UGF0aCk7XG5cdFx0XHRpZiAob0NvbnRleHRQYXRoTWV0YWRhdGEgJiYgb0NvbnRleHRQYXRoTWV0YWRhdGEuJGtpbmQgPT09IFwiUHJvcGVydHlcIikge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEVuYWJsZSBiaW5kaW5ncyBvZiBzdWIgc2VjdGlvbiBjb250ZW50IChibG9ja3MsIG1vcmUgYmxvY2tzLCBhbmQgYWN0aW9ucykuXG5cdCAqIEBwYXJhbSBzdWJTZWN0aW9uIE9iamVjdCBwYWdlIHN1YiBzZWN0aW9uXG5cdCAqL1xuXHRfZm5FbmFibGVTdWJTZWN0aW9uQmluZGluZyhzdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbik6IHZvaWQge1xuXHRcdHN1YlNlY3Rpb24uZ2V0QmxvY2tzKCkuZm9yRWFjaCgoYmxvY2spID0+IGJsb2NrLnNldEJpbmRpbmdDb250ZXh0KHVuZGVmaW5lZCkpO1xuXHRcdHN1YlNlY3Rpb24uZ2V0TW9yZUJsb2NrcygpLmZvckVhY2goKHN1YkJsb2NrKSA9PiBzdWJCbG9jay5zZXRCaW5kaW5nQ29udGV4dCh1bmRlZmluZWQpKTtcblx0XHRzdWJTZWN0aW9uLmdldEFjdGlvbnMoKS5mb3JFYWNoKChhY3Rpb25zKSA9PiBhY3Rpb25zLnNldEJpbmRpbmdDb250ZXh0KHVuZGVmaW5lZCkpO1xuXHR9XG5cblx0X2ZuRW5hYmxlQmluZGluZ3MoYVNlY3Rpb25zOiBPYmplY3RQYWdlU2VjdGlvbltdKTogdm9pZCB7XG5cdFx0Zm9yIChsZXQgaVNlY3Rpb24gPSAwOyBpU2VjdGlvbiA8IGFTZWN0aW9ucy5sZW5ndGg7IGlTZWN0aW9uKyspIHtcblx0XHRcdGNvbnN0IG9TZWN0aW9uID0gYVNlY3Rpb25zW2lTZWN0aW9uXTtcblx0XHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCk7XG5cdFx0XHRmb3IgKGxldCBpU3ViU2VjdGlvbiA9IDA7IGlTdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgaVN1YlNlY3Rpb24rKykge1xuXHRcdFx0XHRjb25zdCBvU3ViU2VjdGlvbiA9IGFTdWJTZWN0aW9uc1tpU3ViU2VjdGlvbl07XG5cdFx0XHRcdGNvbnN0IG9BbGxCbG9ja3MgPSBvU3ViU2VjdGlvbi5nZXRCbG9ja3MoKTtcblx0XHRcdFx0aWYgKG9BbGxCbG9ja3MpIHtcblx0XHRcdFx0XHR0aGlzLl9mbkVuYWJsZVN1YlNlY3Rpb25CaW5kaW5nKG9TdWJTZWN0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob1N1YlNlY3Rpb24uZ2V0QmluZGluZ0NvbnRleHQoKSkge1xuXHRcdFx0XHRcdHRoaXMuX2ZpbmRNZXNzYWdlR3JvdXBBZnRlclJlYmluZGluZygpO1xuXHRcdFx0XHRcdChvU3ViU2VjdGlvbi5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0KVxuXHRcdFx0XHRcdFx0LmdldEJpbmRpbmcoKVxuXHRcdFx0XHRcdFx0LmF0dGFjaERhdGFSZWNlaXZlZCh0aGlzLl9maW5kTWVzc2FnZUdyb3VwQWZ0ZXJSZWJpbmRpbmcuYmluZCh0aGlzKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfZmluZE1lc3NhZ2VHcm91cEFmdGVyUmViaW5kaW5nKCk6IHZvaWQge1xuXHRcdGNvbnN0IGFNZXNzYWdlcyA9IHRoaXMub01lc3NhZ2VQb3BvdmVyLmdldEl0ZW1zKCk7XG5cdFx0dGhpcy5fY2hlY2tDb250cm9sSWRJblNlY3Rpb25zKGFNZXNzYWdlcywgdHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIG1ldGhvZCB0aGF0IHJldHJpZXZlcyB0aGUgdmlldyBJRCAoSFRNTFZpZXcvWE1MVmlldy9KU09Odmlldy9KU1ZpZXcvVGVtcGxhdGV2aWV3KSBvZiBhbnkgY29udHJvbC5cblx0ICogQHBhcmFtIHNDb250cm9sSWQgSUQgb2YgdGhlIGNvbnRyb2wgbmVlZGVkIHRvIHJldHJpZXZlIHRoZSB2aWV3IElEXG5cdCAqIEByZXR1cm5zIFRoZSB2aWV3IElEIG9mIHRoZSBjb250cm9sXG5cdCAqL1xuXHRfZ2V0Vmlld0lkKHNDb250cm9sSWQ6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IHNWaWV3SWQsXG5cdFx0XHRvQ29udHJvbDogTWFuYWdlZE9iamVjdCB8IHVuZGVmaW5lZCB8IG51bGwgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHNDb250cm9sSWQpO1xuXHRcdHdoaWxlIChvQ29udHJvbCkge1xuXHRcdFx0aWYgKG9Db250cm9sIGluc3RhbmNlb2YgVmlldykge1xuXHRcdFx0XHRzVmlld0lkID0gb0NvbnRyb2wuZ2V0SWQoKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRvQ29udHJvbCA9IG9Db250cm9sLmdldFBhcmVudCgpO1xuXHRcdH1cblx0XHRyZXR1cm4gc1ZpZXdJZDtcblx0fVxuXG5cdF9zZXRMb25ndGV4dFVybERlc2NyaXB0aW9uKG9EaWFnbm9zaXNUaXRsZTogRm9ybWF0dGVkVGV4dCk6IHZvaWQge1xuXHRcdHRoaXMub01lc3NhZ2VQb3BvdmVyLnNldEFzeW5jRGVzY3JpcHRpb25IYW5kbGVyKGZ1bmN0aW9uIChjb25maWc6IHtcblx0XHRcdGl0ZW06IE1lc3NhZ2VJdGVtO1xuXHRcdFx0cHJvbWlzZToge1xuXHRcdFx0XHRyZXNvbHZlOiBGdW5jdGlvbjtcblx0XHRcdFx0cmVqZWN0OiBGdW5jdGlvbjtcblx0XHRcdH07XG5cdFx0fSkge1xuXHRcdFx0Ly8gSGVyZSB3ZSBjYW4gZmV0Y2ggdGhlIGRhdGEgYW5kIGNvbmNhdGVuYXRlIGl0IHRvIHRoZSBvbGQgb25lXG5cdFx0XHQvLyBCeSBkZWZhdWx0LCB0aGUgbG9uZ3RleHRVcmwgZmV0Y2hpbmcgd2lsbCBvdmVyd3JpdGUgdGhlIGRlc2NyaXB0aW9uICh3aXRoIHRoZSBkZWZhdWx0IGJlaGF2aW91cilcblx0XHRcdC8vIEhlcmUgYXMgd2UgaGF2ZSBvdmVyd3JpdHRlbiB0aGUgZGVmYXVsdCBhc3luYyBoYW5kbGVyLCB3aGljaCBmZXRjaGVzIGFuZCByZXBsYWNlcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGl0ZW1cblx0XHRcdC8vIHdlIGNhbiBtYW51YWxseSBtb2RpZnkgaXQgdG8gaW5jbHVkZSB3aGF0ZXZlciBuZWVkZWQuXG5cdFx0XHRjb25zdCBzTG9uZ1RleHRVcmwgPSBjb25maWcuaXRlbS5nZXRMb25ndGV4dFVybCgpO1xuXHRcdFx0aWYgKHNMb25nVGV4dFVybCkge1xuXHRcdFx0XHRqUXVlcnkuYWpheCh7XG5cdFx0XHRcdFx0dHlwZTogXCJHRVRcIixcblx0XHRcdFx0XHR1cmw6IHNMb25nVGV4dFVybCxcblx0XHRcdFx0XHRzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YTogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzRGlhZ25vc2lzVGV4dCA9IG9EaWFnbm9zaXNUaXRsZS5nZXRIdG1sVGV4dCgpICsgZGF0YTtcblx0XHRcdFx0XHRcdGNvbnN0IG9sZERlc2NyaXB0aW9uID0gY29uZmlnLml0ZW0uZ2V0RGVzY3JpcHRpb24oKSA/PyBcIlwiO1xuXHRcdFx0XHRcdFx0Y29uZmlnLml0ZW0uc2V0RGVzY3JpcHRpb24oYCR7b2xkRGVzY3JpcHRpb259JHtzRGlhZ25vc2lzVGV4dH1gKTtcblx0XHRcdFx0XHRcdGNvbmZpZy5wcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGVycm9yOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzRXJyb3IgPSBgQSByZXF1ZXN0IGhhcyBmYWlsZWQgZm9yIGxvbmcgdGV4dCBkYXRhLiBVUkw6ICR7c0xvbmdUZXh0VXJsfWA7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3Ioc0Vycm9yKTtcblx0XHRcdFx0XHRcdGNvbmZpZy5wcm9taXNlLnJlamVjdChzRXJyb3IpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogSXQgZGlzcGxheXMgdGhlIHJvdyBpbmZvcm1hdGlvbiBvZiB0aGUgZXJyb3IgZXhpc3RpbmcgaW4gdGhlIHRhYmxlLlxuXHQgKiBAcGFyYW0gdGFibGVcblx0ICogQHBhcmFtIHRhYmxlUm93Q29udGV4dFxuXHQgKiBAcGFyYW0gdGFibGVDb2xQcm9wZXJ0eVxuXHQgKiBAcmV0dXJucyByb3dJbmZvcm1hdGlvblxuXHQgKi9cblxuXHRwcm9jZXNzVGFibGVDb2x1bW5Qcm9wZXJ0aWVzKHRhYmxlOiBUYWJsZSwgdGFibGVSb3dDb250ZXh0OiBPRGF0YVY0Q29udGV4dCwgdGFibGVDb2xQcm9wZXJ0eTogVGFibGVDb2x1bW5Qcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRsZXQgcm93SW5mb3JtYXRpb24gPSBcIlwiO1xuXG5cdFx0Y29uc3QgdGFibGVDb2xCaW5kaW5nQ29udGV4dFRleHRBbm5vdGF0aW9uID0gbWVzc2FnZUhhbmRsaW5nLmdldFRhYmxlQ29sQmluZGluZ0NvbnRleHRGb3JUZXh0QW5ub3RhdGlvbihcblx0XHRcdHRhYmxlLFxuXHRcdFx0dGFibGVSb3dDb250ZXh0LFxuXHRcdFx0dGFibGVDb2xQcm9wZXJ0eVxuXHRcdCk7XG5cdFx0Y29uc3QgdGFibGVDb2xUZXh0QW5ub3RhdGlvblBhdGggPSB0YWJsZUNvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb25cblx0XHRcdD8gdGFibGVDb2xCaW5kaW5nQ29udGV4dFRleHRBbm5vdGF0aW9uLmdldE9iamVjdChcIiRQYXRoXCIpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRjb25zdCB0YWJsZUNvbFRleHRBcnJhbmdlbWVudCA9XG5cdFx0XHR0YWJsZUNvbFRleHRBbm5vdGF0aW9uUGF0aCAmJiB0YWJsZUNvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb25cblx0XHRcdFx0PyB0YWJsZUNvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb24uZ2V0T2JqZWN0KFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudC8kRW51bU1lbWJlclwiKVxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRjb25zdCBsYWJlbFdpdGhWYWx1ZSA9ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSk/LmdldFRhYmxlQ29sVmFsdWUoXG5cdFx0XHR0YWJsZVJvd0NvbnRleHQsXG5cdFx0XHR0YWJsZUNvbFRleHRBbm5vdGF0aW9uUGF0aCxcblx0XHRcdHRhYmxlQ29sVGV4dEFycmFuZ2VtZW50LFxuXHRcdFx0dGFibGVDb2xQcm9wZXJ0eVxuXHRcdCk7XG5cdFx0cm93SW5mb3JtYXRpb24gKz0gYCR7bGFiZWxXaXRoVmFsdWV9YDtcblxuXHRcdHJldHVybiByb3dJbmZvcm1hdGlvbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBJdCBjb21wdXRlcyB0aGUgY29sdW1uIGluZm9ybWF0aW9uLlxuXHQgKiBAcGFyYW0gbWVzc2FnZVxuXHQgKiBAcGFyYW0gdGFibGVUYXJnZXRDb2xOYW1lXG5cdCAqIEBwYXJhbSByb3dJbmZvcm1hdGlvblxuXHQgKiBAcGFyYW0gdGFibGVcblx0ICogQHJldHVybnMgY29sdW1uSW5mb1xuXHQgKi9cblxuXHRjb21wdXRlQ29sdW1uSW5mbyhtZXNzYWdlOiBNZXNzYWdlSXRlbSwgdGFibGVUYXJnZXRDb2xOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsIHJvd0luZm9ybWF0aW9uOiBzdHJpbmdbXSwgdGFibGU6IFRhYmxlKTogc3RyaW5nIHtcblx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gZ2V0UmVzb3VyY2VNb2RlbCh0YWJsZSk7XG5cdFx0Y29uc3QgbXNnT2JqID0gbWVzc2FnZS5nZXRCaW5kaW5nQ29udGV4dChcIm1lc3NhZ2VcIik/LmdldE9iamVjdCgpO1xuXHRcdGNvbnN0IGNvbEZyb21UYWJsZVNldHRpbmdzID0gbWVzc2FnZUhhbmRsaW5nLmZldGNoQ29sdW1uSW5mbyhtc2dPYmosIHRhYmxlKTtcblx0XHRsZXQgY29sdW1uSW5mbyA9IFwiXCI7XG5cblx0XHRpZiAodGFibGVUYXJnZXRDb2xOYW1lKSB7XG5cdFx0XHQvLyBpZiBjb2x1bW4gaW4gcHJlc2VudCBpbiB0YWJsZSBkZWZpbml0aW9uXG5cdFx0XHRjb2x1bW5JbmZvID0gYCR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0dST1VQX0RFU0NSSVBUSU9OX1RBQkxFX0NPTFVNTlwiKX06ICR7dGFibGVUYXJnZXRDb2xOYW1lfWA7XG5cdFx0fSBlbHNlIGlmIChjb2xGcm9tVGFibGVTZXR0aW5ncykge1xuXHRcdFx0aWYgKGNvbEZyb21UYWJsZVNldHRpbmdzLmF2YWlsYWJpbGl0eSA9PT0gXCJIaWRkZW5cIikge1xuXHRcdFx0XHQvLyBpZiBjb2x1bW4gaW4gbmVpdGhlciBpbiB0YWJsZSBkZWZpbml0aW9uIG5vciBwZXJzb25hbGl6YXRpb25cblx0XHRcdFx0aWYgKG1lc3NhZ2UuZ2V0VHlwZSgpID09PSBcIkVycm9yXCIpIHtcblx0XHRcdFx0XHRjb2x1bW5JbmZvID1cblx0XHRcdFx0XHRcdHJvd0luZm9ybWF0aW9uLmxlbmd0aCA+IDBcblx0XHRcdFx0XHRcdFx0PyBgJHtyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0NPTFVNTl9BVkFJTEFCTEVfRElBR05PU0lTX01TR0RFU0NfRVJST1JcIil9ICR7cm93SW5mb3JtYXRpb24uam9pbihcIiwgXCIpfWAgKyBcIi5cIlxuXHRcdFx0XHRcdFx0XHQ6IGAke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfQ09MVU1OX0FWQUlMQUJMRV9ESUFHTk9TSVNfTVNHREVTQ19FUlJPUlwiKX1gICsgXCIuXCI7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29sdW1uSW5mbyA9XG5cdFx0XHRcdFx0XHRyb3dJbmZvcm1hdGlvbi5sZW5ndGggPiAwXG5cdFx0XHRcdFx0XHRcdD8gYCR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9DT0xVTU5fQVZBSUxBQkxFX0RJQUdOT1NJU19NU0dERVNDXCIpfSAke3Jvd0luZm9ybWF0aW9uLmpvaW4oXCIsIFwiKX1gICsgXCIuXCJcblx0XHRcdFx0XHRcdFx0OiBgJHtyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0NPTFVNTl9BVkFJTEFCTEVfRElBR05PU0lTX01TR0RFU0NcIil9YCArIFwiLlwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBpZiBjb2x1bW4gaXMgbm90IGluIHRhYmxlIGRlZmluaXRpb24gYnV0IGluIHBlcnNvbmFsaXphdGlvblxuXHRcdFx0XHQvL2lmIG5vIG5hdmlnYXRpb24gdG8gc3ViIG9wIHRoZW4gcmVtb3ZlIGxpbmsgdG8gZXJyb3IgZmllbGQgQkNQIDogMjI4MDE2ODg5OVxuXHRcdFx0XHRpZiAoIXRoaXMuX25hdmlnYXRpb25Db25maWd1cmVkKHRhYmxlKSkge1xuXHRcdFx0XHRcdG1lc3NhZ2Uuc2V0QWN0aXZlVGl0bGUoZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbHVtbkluZm8gPSBgJHtyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfREVTQ1JJUFRJT05fVEFCTEVfQ09MVU1OXCIpfTogJHtcblx0XHRcdFx0XHRjb2xGcm9tVGFibGVTZXR0aW5ncy5sYWJlbFxuXHRcdFx0XHR9ICgke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfQ09MVU1OX0lORElDQVRPUl9JTl9UQUJMRV9ERUZJTklUSU9OXCIpfSlgO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjb2x1bW5JbmZvO1xuXHR9XG5cblx0LyoqXG5cdCAqIEl0IGRpc3BsYXlzIHRoZSByb3cgaW5mb3JtYXRpb24gb2YgdGhlIGVycm9yIGV4aXN0aW5nIGluIHRoZSB0YWJsZS5cblx0ICogQHBhcmFtIG1lc3NhZ2Vcblx0ICogQHBhcmFtIHRhYmxlUm93Q29udGV4dFxuXHQgKiBAcGFyYW0gdGFibGVUYXJnZXRDb2xOYW1lXG5cdCAqIEBwYXJhbSB0YWJsZVxuXHQgKi9cblxuXHRfZm9ybWF0TWVzc2FnZURlc2NyaXB0aW9uKFxuXHRcdG1lc3NhZ2U6IE1lc3NhZ2VJdGVtLFxuXHRcdHRhYmxlUm93Q29udGV4dDogT0RhdGFWNENvbnRleHQsXG5cdFx0dGFibGVUYXJnZXRDb2xOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0dGFibGU6IE1EQ1RhYmxlXG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKHRhYmxlKTtcblx0XHRjb25zdCB0YWJsZUNvbFByb3BlcnR5ID0gKHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKT8uZ2V0VGFibGVDb2x1bW5WaXNpYmlsaXR5SW5mbyh0YWJsZVJvd0NvbnRleHQpO1xuXG5cdFx0Y29uc3Qgcm93SW5mb3JtYXRpb246IHN0cmluZ1tdID0gW107XG5cdFx0dGFibGVDb2xQcm9wZXJ0eT8uZm9yRWFjaCgoeyBrZXksIHZpc2liaWxpdHkgfSkgPT4ge1xuXHRcdFx0cm93SW5mb3JtYXRpb24ucHVzaCh0aGlzLnByb2Nlc3NUYWJsZUNvbHVtblByb3BlcnRpZXModGFibGUsIHRhYmxlUm93Q29udGV4dCwgW3sga2V5LCB2aXNpYmlsaXR5IH1dKSk7XG5cdFx0fSk7XG5cblx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5jb21wdXRlQ29sdW1uSW5mbyhtZXNzYWdlLCB0YWJsZVRhcmdldENvbE5hbWUsIHJvd0luZm9ybWF0aW9uLCB0YWJsZSk7XG5cblx0XHRjb25zdCBmaWVsZHNBZmZlY3RlZFRpdGxlID0gbmV3IEZvcm1hdHRlZFRleHQoe1xuXHRcdFx0aHRtbFRleHQ6IGA8aHRtbD48Ym9keT48c3Ryb25nPiR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9GSUVMRFNfQUZGRUNURURfVElUTEVcIil9PC9zdHJvbmc+PC9ib2R5PjwvaHRtbD48YnI+YFxuXHRcdH0pO1xuXHRcdGxldCBmaWVsZEFmZmVjdGVkVGV4dDogc3RyaW5nO1xuXHRcdGlmIChBcnJheS5pc0FycmF5KHJvd0luZm9ybWF0aW9uKSAmJiByb3dJbmZvcm1hdGlvbi5sZW5ndGggPiAwKSB7XG5cdFx0XHRpZiAocm93SW5mb3JtYXRpb24ubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdC8vIElmIHRoZXJl4oCZcyBvbmx5IG9uZSBjb2x1bW4gaW4gdGhlIHRhYmxlLCBkaXNwbGF5IGl0IGluIGEgc2luZ2xlIGxpbmUuXG5cdFx0XHRcdGZpZWxkQWZmZWN0ZWRUZXh0ID0gYCR7ZmllbGRzQWZmZWN0ZWRUaXRsZS5nZXRIdG1sVGV4dCgpfTxicj4ke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XHRcIlRfTUVTU0FHRV9HUk9VUF9USVRMRV9UQUJMRV9ERU5PTUlOQVRPUlwiXG5cdFx0XHRcdCl9OiAke3RhYmxlLmdldEhlYWRlcigpfTxicj4ke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XHRcIlRfTUVTU0FHRV9HUk9VUF9ERVNDUklQVElPTl9UQUJMRV9ST1dcIlxuXHRcdFx0XHQpfTogJHtyb3dJbmZvcm1hdGlvbn08YnI+JHtjb2x1bW5JbmZvfTxicj5gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gSWYgdGhlcmUgYXJlIG11bHRpcGxlIGNvbHVtbnMgaW4gdGhlIHRhYmxlLCBkaXNwbGF5IHRoZW0gaW4gbXVsdGlwbGUgbGluZXMuXG5cdFx0XHRcdGZpZWxkQWZmZWN0ZWRUZXh0ID0gYCR7ZmllbGRzQWZmZWN0ZWRUaXRsZS5nZXRIdG1sVGV4dCgpfTxicj4ke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XHRcIlRfTUVTU0FHRV9HUk9VUF9USVRMRV9UQUJMRV9ERU5PTUlOQVRPUlwiXG5cdFx0XHRcdCl9OiAke3RhYmxlLmdldEhlYWRlcigpfTxicj4ke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XHRcIlRfTUVTU0FHRV9HUk9VUF9ERVNDUklQVElPTl9UQUJMRV9ST1dcIlxuXHRcdFx0XHQpfTo8YnI+JmVtc3A7ICR7cm93SW5mb3JtYXRpb24uam9pbihcIjxicj4mZW1zcDsgXCIpfTxicj4ke2NvbHVtbkluZm99PGJyPmA7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChjb2x1bW5JbmZvID09IFwiXCIgfHwgIWNvbHVtbkluZm8pIHtcblx0XHRcdGZpZWxkQWZmZWN0ZWRUZXh0ID0gXCJcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZmllbGRBZmZlY3RlZFRleHQgPSBgJHtmaWVsZHNBZmZlY3RlZFRpdGxlLmdldEh0bWxUZXh0KCl9PGJyPiR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFxuXHRcdFx0XHRcIlRfTUVTU0FHRV9HUk9VUF9USVRMRV9UQUJMRV9ERU5PTUlOQVRPUlwiXG5cdFx0XHQpfTogJHt0YWJsZS5nZXRIZWFkZXIoKX08YnI+JHtjb2x1bW5JbmZvfTxicj5gO1xuXHRcdH1cblxuXHRcdGNvbnN0IGRpYWdub3Npc1RpdGxlID0gbmV3IEZvcm1hdHRlZFRleHQoe1xuXHRcdFx0aHRtbFRleHQ6IGA8aHRtbD48Ym9keT48c3Ryb25nPiR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9ESUFHTk9TSVNfVElUTEVcIil9PC9zdHJvbmc+PC9ib2R5PjwvaHRtbD48YnI+YFxuXHRcdH0pO1xuXHRcdC8vIGdldCB0aGUgVUkgbWVzc2FnZXMgZnJvbSB0aGUgbWVzc2FnZSBjb250ZXh0IHRvIHNldCBpdCB0byBEaWFnbm9zaXMgc2VjdGlvblxuXHRcdGNvbnN0IHVJTWVzc2FnZURlc2NyaXB0aW9uID0gbWVzc2FnZS5nZXRCaW5kaW5nQ29udGV4dChcIm1lc3NhZ2VcIik/LmdldE9iamVjdCgpLmRlc2NyaXB0aW9uO1xuXHRcdC8vc2V0IHRoZSBkZXNjcmlwdGlvbiB0byB1bmRlZmluZWQgdG8gcmVzZXQgaXQgYmVsb3dcblx0XHRtZXNzYWdlLnNldERlc2NyaXB0aW9uKHVuZGVmaW5lZCk7XG5cdFx0bGV0IGRpYWdub3Npc1RleHQgPSBcIlwiO1xuXHRcdGxldCBtZXNzYWdlRGVzY3JpcHRpb25Db250ZW50ID0gXCJcIjtcblx0XHRpZiAobWVzc2FnZS5nZXRMb25ndGV4dFVybCgpKSB7XG5cdFx0XHRtZXNzYWdlRGVzY3JpcHRpb25Db250ZW50ID0gZmllbGRBZmZlY3RlZFRleHQgPyBgJHtmaWVsZEFmZmVjdGVkVGV4dH08YnI+YCA6IFwiXCI7XG5cdFx0XHRtZXNzYWdlLnNldERlc2NyaXB0aW9uKG1lc3NhZ2VEZXNjcmlwdGlvbkNvbnRlbnQpO1xuXHRcdFx0dGhpcy5fc2V0TG9uZ3RleHRVcmxEZXNjcmlwdGlvbihkaWFnbm9zaXNUaXRsZSk7XG5cdFx0fSBlbHNlIGlmICh1SU1lc3NhZ2VEZXNjcmlwdGlvbikge1xuXHRcdFx0ZGlhZ25vc2lzVGV4dCA9IGAke2RpYWdub3Npc1RpdGxlLmdldEh0bWxUZXh0KCl9PGJyPiR7dUlNZXNzYWdlRGVzY3JpcHRpb259YDtcblx0XHRcdG1lc3NhZ2VEZXNjcmlwdGlvbkNvbnRlbnQgPSBgJHtmaWVsZEFmZmVjdGVkVGV4dH08YnI+JHtkaWFnbm9zaXNUZXh0fWA7XG5cdFx0XHRtZXNzYWdlLnNldERlc2NyaXB0aW9uKG1lc3NhZ2VEZXNjcmlwdGlvbkNvbnRlbnQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtZXNzYWdlLnNldERlc2NyaXB0aW9uKGZpZWxkQWZmZWN0ZWRUZXh0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogV2hlbiB0aGVyZSBhcmUgbm8gbWVzc2FnZXMgdG8gc2hvdyBpbiB0aGUgTWVzc2FnZSBCb3guXG5cdCAqL1xuXHRoYW5kbGVOb01lc3NhZ2VzKCk6IHZvaWQge1xuXHRcdHRoaXMuc2V0VmlzaWJsZShmYWxzZSk7XG5cdFx0dGhpcy5maXJlRXZlbnQoXCJtZXNzYWdlQ2hhbmdlXCIsIHtcblx0XHRcdGlNZXNzYWdlTGVuZ3RoOiAwXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHNldCB0aGUgYnV0dG9uIHRleHQsIGNvdW50IGFuZCBpY29uIHByb3BlcnR5IGJhc2VkIHVwb24gdGhlIG1lc3NhZ2UgaXRlbXNcblx0ICogQnV0dG9uVHlwZTogIFBvc3NpYmxlIHNldHRpbmdzIGZvciB3YXJuaW5nIGFuZCBlcnJvciBtZXNzYWdlcyBhcmUgJ2NyaXRpY2FsJyBhbmQgJ25lZ2F0aXZlJy5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9zZXRNZXNzYWdlRGF0YSgpOiB2b2lkIHtcblx0XHRjbGVhclRpbWVvdXQodGhpcy5fc2V0TWVzc2FnZURhdGFUaW1lb3V0KTtcblxuXHRcdHRoaXMuX3NldE1lc3NhZ2VEYXRhVGltZW91dCA9IHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuXHRcdFx0Y29uc3Qgc0ljb24gPSBcIlwiLFxuXHRcdFx0XHRvTWVzc2FnZXMgPSB0aGlzLm9NZXNzYWdlUG9wb3Zlci5nZXRJdGVtcygpLFxuXHRcdFx0XHRvTWVzc2FnZUNvdW50OiBNZXNzYWdlQ291bnQgPSB7IEVycm9yOiAwLCBXYXJuaW5nOiAwLCBTdWNjZXNzOiAwLCBJbmZvcm1hdGlvbjogMCB9LFxuXHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLFxuXHRcdFx0XHRpTWVzc2FnZUxlbmd0aCA9IG9NZXNzYWdlcy5sZW5ndGg7XG5cdFx0XHRsZXQgc0J1dHRvblR5cGUgPSBCdXR0b25UeXBlLkRlZmF1bHQsXG5cdFx0XHRcdG1lc3NhZ2VLZXkgPSBcIlwiLFxuXHRcdFx0XHRtZXNzYWdlVGV4dCA9IFwiXCI7XG5cdFx0XHRpZiAoaU1lc3NhZ2VMZW5ndGggPiAwKSB7XG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgaU1lc3NhZ2VMZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdGlmICghb01lc3NhZ2VzW2ldLmdldFR5cGUoKSB8fCBvTWVzc2FnZXNbaV0uZ2V0VHlwZSgpLnRvU3RyaW5nKCkgPT09IFwiXCIpIHtcblx0XHRcdFx0XHRcdCsrb01lc3NhZ2VDb3VudFtcIkluZm9ybWF0aW9uXCJdO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQrK29NZXNzYWdlQ291bnRbb01lc3NhZ2VzW2ldLmdldFR5cGUoKSBhcyBrZXlvZiBNZXNzYWdlQ291bnRdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5FcnJvcl0gPiAwKSB7XG5cdFx0XHRcdFx0c0J1dHRvblR5cGUgPSBCdXR0b25UeXBlLk5lZ2F0aXZlO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuV2FybmluZ10gPiAwKSB7XG5cdFx0XHRcdFx0c0J1dHRvblR5cGUgPSBCdXR0b25UeXBlLkNyaXRpY2FsO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuU3VjY2Vzc10gPiAwKSB7XG5cdFx0XHRcdFx0c0J1dHRvblR5cGUgPSBCdXR0b25UeXBlLlN1Y2Nlc3M7XG5cdFx0XHRcdH0gZWxzZSBpZiAob01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbl0gPiAwKSB7XG5cdFx0XHRcdFx0c0J1dHRvblR5cGUgPSBCdXR0b25UeXBlLk5ldXRyYWw7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCB0b3RhbE51bWJlck9mTWVzc2FnZXMgPVxuXHRcdFx0XHRcdG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuRXJyb3JdICtcblx0XHRcdFx0XHRvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLldhcm5pbmddICtcblx0XHRcdFx0XHRvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLlN1Y2Nlc3NdICtcblx0XHRcdFx0XHRvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLkluZm9ybWF0aW9uXTtcblxuXHRcdFx0XHR0aGlzLnNldFRleHQodG90YWxOdW1iZXJPZk1lc3NhZ2VzLnRvU3RyaW5nKCkpO1xuXHRcdFx0XHRsZXQgbWVzc2FnZUNvdW50ID0gMDtcblx0XHRcdFx0Y29uc3QgbWVzc2FnZUtleXMgPSB7XG5cdFx0XHRcdFx0RXJyb3I6IHtcblx0XHRcdFx0XHRcdHNpbmdsZVRvb2x0aXBLZXk6IFwiQ19DT01NT05fU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9FUlJPUlwiLFxuXHRcdFx0XHRcdFx0bXVsdGlwbGVUb29sdGlwS2V5OiBcIkNfQ09NTU9OX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfTVVMVElQTEVfRVJST1JfVE9PTFRJUFwiXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRXYXJuaW5nOiB7XG5cdFx0XHRcdFx0XHRzaW5nbGVUb29sdGlwS2V5OiBcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX1dBUk5JTkdcIixcblx0XHRcdFx0XHRcdG11bHRpcGxlVG9vbHRpcEtleTogXCJDX0NPTU1PTl9TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1dBUk5JTkdfVE9PTFRJUFwiXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRJbmZvcm1hdGlvbjoge1xuXHRcdFx0XHRcdFx0c2luZ2xlVG9vbHRpcEtleTogXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9JTkZPXCIsXG5cdFx0XHRcdFx0XHRtdWx0aXBsZVRvb2x0aXBLZXk6IFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVfSU5GT1wiXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRTdWNjZXNzOiB7XG5cdFx0XHRcdFx0XHRzaW5nbGVUb29sdGlwS2V5OiBcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX1NVQ0NFU1NcIixcblx0XHRcdFx0XHRcdG11bHRpcGxlVG9vbHRpcEtleTogXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9NVUxUSVBMRV9TVUNDRVNTX1RPT0xUSVBcIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhtZXNzYWdlS2V5cykpIHtcblx0XHRcdFx0XHRjb25zdCBtZXNzYWdlVHlwZSA9IGtleSBhcyBrZXlvZiBNZXNzYWdlQ291bnQ7XG5cdFx0XHRcdFx0Y29uc3QgbWVzc2FnZVR5cGVDb3VudCA9IG9NZXNzYWdlQ291bnRbbWVzc2FnZVR5cGVdO1xuXHRcdFx0XHRcdGlmIChtZXNzYWdlVHlwZUNvdW50ID4gMSkge1xuXHRcdFx0XHRcdFx0bWVzc2FnZUNvdW50ID0gbWVzc2FnZVR5cGVDb3VudDtcblx0XHRcdFx0XHRcdG1lc3NhZ2VLZXkgPSB2YWx1ZS5tdWx0aXBsZVRvb2x0aXBLZXk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9IGVsc2UgaWYgKG1lc3NhZ2VUeXBlQ291bnQgPT09IDEpIHtcblx0XHRcdFx0XHRcdG1lc3NhZ2VDb3VudCA9IG1lc3NhZ2VUeXBlQ291bnQ7XG5cdFx0XHRcdFx0XHRtZXNzYWdlS2V5ID0gdmFsdWUuc2luZ2xlVG9vbHRpcEtleTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAobWVzc2FnZUtleSkge1xuXHRcdFx0XHRcdG1lc3NhZ2VUZXh0ID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQobWVzc2FnZUtleSk7XG5cdFx0XHRcdFx0Y29uc3QgTUVTU0FHRUJVVFRPTl9TSE9SVENVVCA9IFwiQ3RybCtTaGlmdCtNXCI7XG5cdFx0XHRcdFx0Y29uc3QgdG9vbFRpcCA9IGAke29SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFxuXHRcdFx0XHRcdFx0XCJDX0NPTU1PTl9TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RPT0xUSVBcIlxuXHRcdFx0XHRcdCl9OiAke21lc3NhZ2VDb3VudH0gJHttZXNzYWdlVGV4dH0gKCR7TUVTU0FHRUJVVFRPTl9TSE9SVENVVH0pYDtcblx0XHRcdFx0XHR0aGlzLnNldFRvb2x0aXAodG9vbFRpcCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5zZXRJY29uKHNJY29uKTtcblx0XHRcdFx0dGhpcy5zZXRUeXBlKHNCdXR0b25UeXBlKTtcblx0XHRcdFx0dGhpcy5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdFx0XHRjb25zdCBvVmlldyA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5zVmlld0lkKSBhcyBGRVZpZXc7XG5cdFx0XHRcdGlmIChvVmlldykge1xuXHRcdFx0XHRcdGNvbnN0IG9QYWdlUmVhZHkgPSBvVmlldy5nZXRDb250cm9sbGVyKCkucGFnZVJlYWR5O1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRhd2FpdCBvUGFnZVJlYWR5LndhaXRQYWdlUmVhZHkoKTtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMuX2FwcGx5R3JvdXBpbmdBc3luYyhvVmlldyk7XG5cdFx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJmYWlsIGdyb3VwaW5nIG1lc3NhZ2VzXCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLmZpcmVFdmVudChcIm1lc3NhZ2VDaGFuZ2VcIiwge1xuXHRcdFx0XHRcdFx0aU1lc3NhZ2VMZW5ndGg6IGlNZXNzYWdlTGVuZ3RoXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGlNZXNzYWdlTGVuZ3RoID4gMSkge1xuXHRcdFx0XHRcdHRoaXMub01lc3NhZ2VQb3BvdmVyLm5hdmlnYXRlQmFjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmhhbmRsZU5vTWVzc2FnZXMoKTtcblx0XHRcdH1cblx0XHR9LCAxMDApIGFzIHVua25vd24gYXMgbnVtYmVyO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBtZXRob2QgdGhhdCBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgY2xpY2tzIG9uIHRoZSB0aXRsZSBvZiB0aGUgbWVzc2FnZS5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIG9FdmVudCBFdmVudCBvYmplY3QgcGFzc2VkIGZyb20gdGhlIGhhbmRsZXJcblx0ICovXG5cdGFzeW5jIF9hY3RpdmVUaXRsZVByZXNzKG9FdmVudDogTWVzc2FnZVBvcG92ZXIkQWN0aXZlVGl0bGVQcmVzc0V2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRCaW5kaW5nQ29udGV4dChcInBhZ2VJbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJlcnJvck5hdmlnYXRpb25TZWN0aW9uRmxhZ1wiLCB0cnVlKTtcblx0XHRjb25zdCBvSXRlbSA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJpdGVtXCIpLFxuXHRcdFx0b01lc3NhZ2UgPSBvSXRlbT8uZ2V0QmluZGluZ0NvbnRleHQoXCJtZXNzYWdlXCIpPy5nZXRPYmplY3QoKSxcblx0XHRcdGJJc0JhY2tlbmRNZXNzYWdlID0gbmV3IFJlZ0V4cChcIl4vXCIpLnRlc3Qob01lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdKSxcblx0XHRcdG9WaWV3ID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnNWaWV3SWQpIGFzIFZpZXc7XG5cdFx0aWYgKCFvSXRlbSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRsZXQgb0NvbnRyb2w6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQsIHNTZWN0aW9uVGl0bGU7XG5cdFx0Y29uc3QgX2RlZmF1bHRGb2N1cyA9IGZ1bmN0aW9uIChtZXNzYWdlOiBNZXNzYWdlLCBtZGNUYWJsZTogTURDVGFibGUpOiB2b2lkIHtcblx0XHRcdGNvbnN0IGZvY3VzSW5mbyA9IHsgcHJldmVudFNjcm9sbDogdHJ1ZSwgdGFyZ2V0SW5mbzogbWVzc2FnZSB9O1xuXHRcdFx0bWRjVGFibGUuZm9jdXMoZm9jdXNJbmZvKTtcblx0XHR9O1xuXG5cdFx0bGV0IGJJc0dlbmVyYWxHcm91cE5hbWUgPSB0cnVlO1xuXHRcdGxldCBzZWN0aW9uLCBzdWJTZWN0aW9ucywgbWVzc2FnZSwgaSwgaiwgaztcblx0XHRjb25zdCB2aXNpYmxlU2VjdGlvbnMgPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQodGhpcy5vT2JqZWN0UGFnZUxheW91dCEpO1xuXHRcdGlmICh2aXNpYmxlU2VjdGlvbnMpIHtcblx0XHRcdGNvbnN0IG1lc3NhZ2VzID0gdGhpcy5vTWVzc2FnZVBvcG92ZXIuZ2V0SXRlbXMoKTtcblx0XHRcdGZvciAoaSA9IG1lc3NhZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG5cdFx0XHRcdC8vIExvb3Agb3ZlciBhbGwgbWVzc2FnZXNcblx0XHRcdFx0bWVzc2FnZSA9IG1lc3NhZ2VzW2ldO1xuXHRcdFx0XHRmb3IgKGogPSB2aXNpYmxlU2VjdGlvbnMubGVuZ3RoIC0gMTsgaiA+PSAwOyAtLWopIHtcblx0XHRcdFx0XHQvLyBMb29wIG92ZXIgYWxsIHZpc2libGUgc2VjdGlvbnNcblx0XHRcdFx0XHRzZWN0aW9uID0gdmlzaWJsZVNlY3Rpb25zW2pdO1xuXHRcdFx0XHRcdHN1YlNlY3Rpb25zID0gc2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpO1xuXHRcdFx0XHRcdGZvciAoayA9IHN1YlNlY3Rpb25zLmxlbmd0aCAtIDE7IGsgPj0gMDsgLS1rKSB7XG5cdFx0XHRcdFx0XHQvLyBMb29wIG92ZXIgYWxsIHN1Yi1zZWN0aW9uc1xuXHRcdFx0XHRcdFx0Y29uc3Qgc3ViU2VjdGlvbiA9IHN1YlNlY3Rpb25zW2tdO1xuXHRcdFx0XHRcdFx0Y29uc3QgbWVzc2FnZU9iamVjdCA9IG1lc3NhZ2U/LmdldEJpbmRpbmdDb250ZXh0KFwibWVzc2FnZVwiKT8uZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0XHRjb25zdCBjb250cm9scyA9IG1lc3NhZ2VIYW5kbGluZy5nZXRDb250cm9sRnJvbU1lc3NhZ2VSZWxhdGluZ1RvU3ViU2VjdGlvbihzdWJTZWN0aW9uLCBtZXNzYWdlT2JqZWN0KTtcblx0XHRcdFx0XHRcdGlmIChjb250cm9scy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdGJJc0dlbmVyYWxHcm91cE5hbWUgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBvVGFyZ2V0TWRjVGFibGUgPSBvTWVzc2FnZS5jb250cm9sSWRzXG5cdFx0XHQubWFwKChjb250cm9sSWQ6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRjb25zdCBjb250cm9sID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChjb250cm9sSWQpO1xuXHRcdFx0XHRjb25zdCBwYXJlbnRDb250cm9sID0gY29udHJvbCAmJiBjb250cm9sLmdldFBhcmVudCgpO1xuXG5cdFx0XHRcdGlmICh0aGlzLmlzSGlkZGVuRHJhZnRFbmFibGVkKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHBhcmVudENvbnRyb2w/LmlzQShcInNhcC51aS5tZGMuVGFibGVcIikgPyBwYXJlbnRDb250cm9sIDogdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBwYXJlbnRDb250cm9sICYmXG5cdFx0XHRcdFx0cGFyZW50Q29udHJvbC5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpICYmXG5cdFx0XHRcdFx0b0l0ZW0uZ2V0R3JvdXBOYW1lKCkuaW5jbHVkZXMoKHBhcmVudENvbnRyb2wgYXMgVGFibGUpLmdldEhlYWRlcigpKVxuXHRcdFx0XHRcdD8gcGFyZW50Q29udHJvbFxuXHRcdFx0XHRcdDogbnVsbDtcblx0XHRcdH0pXG5cdFx0XHQucmVkdWNlKGZ1bmN0aW9uIChhY2M6IENvbnRyb2wsIHZhbDogQ29udHJvbCkge1xuXHRcdFx0XHRyZXR1cm4gdmFsID8gdmFsIDogYWNjO1xuXHRcdFx0fSk7XG5cblx0XHQvL2NoZWNrIGlmIHRoZSBwcmVzc2VkIGl0ZW0gaXMgcmVsYXRlZCB0byBhIHRhYmxlIGNvbnRyb2xcblx0XHRpZiAob1RhcmdldE1kY1RhYmxlKSB7XG5cdFx0XHRpZiAoYklzQmFja2VuZE1lc3NhZ2UpIHtcblx0XHRcdFx0c1NlY3Rpb25UaXRsZSA9IG9JdGVtLmdldEdyb3VwTmFtZSgpLnNwbGl0KFwiLCBcIilbMF07XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0aWYgKHRoaXMuaXNIaWRkZW5EcmFmdEVuYWJsZWQgJiYgKG9UYXJnZXRNZGNUYWJsZS5nZXRJZCgpICE9PSB0aGlzLnNWaWV3SWQgfHwgYklzR2VuZXJhbEdyb3VwTmFtZSkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHZpZXdJZCA9IHRoaXMuX2dldFZpZXdJZChvVGFyZ2V0TWRjVGFibGUuZ2V0SWQoKSk7XG5cdFx0XHRcdFx0XHQoKFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQodmlld0lkKSBhcyBWaWV3KS5nZXRDb250cm9sbGVyKCkgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXIpLl9yb3V0aW5nLm5hdmlnYXRlVG9Db250ZXh0KFxuXHRcdFx0XHRcdFx0XHRvVGFyZ2V0TWRjVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5fbmF2aWdhdGVGcm9tTWVzc2FnZVRvU2VjdGlvblRhYmxlSW5JY29uVGFiQmFyTW9kZShcblx0XHRcdFx0XHRcdFx0b1RhcmdldE1kY1RhYmxlLFxuXHRcdFx0XHRcdFx0XHR0aGlzLm9PYmplY3RQYWdlTGF5b3V0ISxcblx0XHRcdFx0XHRcdFx0c1NlY3Rpb25UaXRsZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3Qgb1JlZkVycm9yQ29udGV4dCA9IHRoaXMuX2dldFRhYmxlUmVmRXJyb3JDb250ZXh0KG9UYXJnZXRNZGNUYWJsZSk7XG5cdFx0XHRcdFx0Y29uc3Qgb1JlZkVycm9yID0gb1JlZkVycm9yQ29udGV4dD8uZ2V0UHJvcGVydHkob0l0ZW0uZ2V0QmluZGluZ0NvbnRleHQoXCJtZXNzYWdlXCIpPy5nZXRPYmplY3QoKS5nZXRJZCgpKTtcblx0XHRcdFx0XHRjb25zdCBfc2V0Rm9jdXNPblRhcmdldEZpZWxkID0gYXN5bmMgKHRhcmdldE1kY1RhYmxlOiBNRENUYWJsZSwgaVJvd0luZGV4OiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4gfCB1bmRlZmluZWQ+ID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGFUYXJnZXRNZGNUYWJsZVJvdyA9IHRoaXMuX2dldE1kY1RhYmxlUm93cyh0YXJnZXRNZGNUYWJsZSksXG5cdFx0XHRcdFx0XHRcdGlGaXJzdFZpc2libGVSb3cgPSB0aGlzLl9nZXRHcmlkVGFibGUodGFyZ2V0TWRjVGFibGUpPy5nZXRGaXJzdFZpc2libGVSb3coKSA/PyAwO1xuXHRcdFx0XHRcdFx0aWYgKGFUYXJnZXRNZGNUYWJsZVJvdy5sZW5ndGggPiAwICYmIGFUYXJnZXRNZGNUYWJsZVJvd1swXSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvVGFyZ2V0Um93ID0gYVRhcmdldE1kY1RhYmxlUm93W2lSb3dJbmRleCAtIGlGaXJzdFZpc2libGVSb3ddLFxuXHRcdFx0XHRcdFx0XHRcdG9UYXJnZXRDZWxsID0gdGhpcy5nZXRUYXJnZXRDZWxsKG9UYXJnZXRSb3csIG9NZXNzYWdlKTtcblx0XHRcdFx0XHRcdFx0aWYgKG9UYXJnZXRDZWxsKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zZXRGb2N1c1RvQ29udHJvbChvVGFyZ2V0Q2VsbCk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBjb250cm9sIG5vdCBmb3VuZCBvbiB0YWJsZVxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGVycm9yUHJvcGVydHlQYXRoID0gb01lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChlcnJvclByb3BlcnR5UGF0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0KG9WaWV3LmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsKS5zZXRQcm9wZXJ0eShcIi9tZXNzYWdlVGFyZ2V0UHJvcGVydHlQYXRoXCIsIGVycm9yUHJvcGVydHlQYXRoKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHRoaXMuX25hdmlnYXRpb25Db25maWd1cmVkKHRhcmdldE1kY1RhYmxlKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChvVmlldy5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLl9yb3V0aW5nLm5hdmlnYXRlRm9yd2FyZFRvQ29udGV4dChcblx0XHRcdFx0XHRcdFx0XHRcdFx0b1RhcmdldFJvdy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0aWYgKG9UYXJnZXRNZGNUYWJsZS5kYXRhKFwidGFibGVUeXBlXCIpID09PSBcIkdyaWRUYWJsZVwiICYmIG9SZWZFcnJvci5yb3dJbmRleCAhPT0gXCJcIikge1xuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0YXdhaXQgb1RhcmdldE1kY1RhYmxlLnNjcm9sbFRvSW5kZXgob1JlZkVycm9yLnJvd0luZGV4KTtcblx0XHRcdFx0XHRcdFx0c2V0VGltZW91dChhc3luYyBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgZm9jdXNPblRhcmdldEZpZWxkID0gYXdhaXQgX3NldEZvY3VzT25UYXJnZXRGaWVsZChvVGFyZ2V0TWRjVGFibGUsIG9SZWZFcnJvci5yb3dJbmRleCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGZvY3VzT25UYXJnZXRGaWVsZCA9PT0gZmFsc2UpIHtcblx0XHRcdFx0XHRcdFx0XHRcdF9kZWZhdWx0Rm9jdXMob01lc3NhZ2UsIG9UYXJnZXRNZGNUYWJsZSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9LCAwKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBmb2N1c2luZyBvbiBlcnJvclwiKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2UgaWYgKG9UYXJnZXRNZGNUYWJsZS5kYXRhKFwidGFibGVUeXBlXCIpID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiICYmIG9SZWZFcnJvcikge1xuXHRcdFx0XHRcdFx0Y29uc3QgZm9jdXNPbk1lc3NhZ2VUYXJnZXRDb250cm9sID0gYXdhaXQgdGhpcy5mb2N1c09uTWVzc2FnZVRhcmdldENvbnRyb2woXG5cdFx0XHRcdFx0XHRcdG9WaWV3LFxuXHRcdFx0XHRcdFx0XHRvTWVzc2FnZSxcblx0XHRcdFx0XHRcdFx0b1RhcmdldE1kY1RhYmxlLFxuXHRcdFx0XHRcdFx0XHRvUmVmRXJyb3Iucm93SW5kZXhcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRpZiAoZm9jdXNPbk1lc3NhZ2VUYXJnZXRDb250cm9sID09PSBmYWxzZSkge1xuXHRcdFx0XHRcdFx0XHRfZGVmYXVsdEZvY3VzKG9NZXNzYWdlLCBvVGFyZ2V0TWRjVGFibGUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aGlzLmZvY3VzT25NZXNzYWdlVGFyZ2V0Q29udHJvbChvVmlldywgb01lc3NhZ2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRmFpbCB0byBuYXZpZ2F0ZSB0byBFcnJvciBjb250cm9sXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvQ29udHJvbCA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQob01lc3NhZ2UuY29udHJvbElkc1swXSk7XG5cdFx0XHRcdGlmIChvQ29udHJvbCkge1xuXHRcdFx0XHRcdC8vSWYgdGhlIGNvbnRyb2wgdW5kZXJseWluZyB0aGUgZnJvbnRFbmQgbWVzc2FnZSBpcyBub3Qgd2l0aGluIHRoZSBjdXJyZW50IHNlY3Rpb24sIHdlIGZpcnN0IGdvIGludG8gdGhlIHRhcmdldCBzZWN0aW9uOlxuXHRcdFx0XHRcdGNvbnN0IHNlY3Rpb25zID0gKHRoaXMub09iamVjdFBhZ2VMYXlvdXQgYXMgT2JqZWN0UGFnZUxheW91dCkuZ2V0U2VjdGlvbnMoKTtcblx0XHRcdFx0XHRjb25zdCBzZWN0aW9uV2l0aFRoZUNvbnRyb2wgPSBzZWN0aW9ucy5maW5kKChzZWN0aW9uKSA9PiBzZWN0aW9uLmZpbmRFbGVtZW50cyh0cnVlKS5pbmNsdWRlcyhvQ29udHJvbCBhcyBVSTVFbGVtZW50KSk7XG5cdFx0XHRcdFx0aWYgKHNlY3Rpb25XaXRoVGhlQ29udHJvbCkge1xuXHRcdFx0XHRcdFx0c1NlY3Rpb25UaXRsZSA9IG9JdGVtLmdldEdyb3VwTmFtZSgpLnNwbGl0KFwiLCBcIilbMF07XG5cdFx0XHRcdFx0XHR0aGlzLl9uYXZpZ2F0ZUZyb21NZXNzYWdlVG9TZWN0aW9uSW5JY29uVGFiQmFyTW9kZSh0aGlzLm9PYmplY3RQYWdlTGF5b3V0ISwgc1NlY3Rpb25UaXRsZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuc2V0Rm9jdXNUb0NvbnRyb2wob0NvbnRyb2wpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBDYWxsIHRoZSBmdW5jdGlvbiB3aGVyZXZlciBuZWVkZWRcblx0XHRcdHRoaXMuaGFuZGxlTWVzc2FnZU5hdmlnYXRpb24ob0l0ZW0sIHZpc2libGVTZWN0aW9ucywgb01lc3NhZ2UsIG9WaWV3KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgbWVzc2FnZSBuYXZpZ2F0aW9uIGJ5IGZpbmRpbmcgdGhlIGFzc29jaWF0ZWQgc3Vic2VjdGlvbiwgZXhwYW5kaW5nIGl0LFxuXHQgKiBhbmQgbmF2aWdhdGluZyB0byB0aGUgY29ycmVjdCBzZWN0aW9uIGluIHRoZSBPYmplY3QgUGFnZSBMYXlvdXQuXG5cdCAqIEBwYXJhbSBvSXRlbSBUaGUgbWVzc2FnZSBpdGVtIGNvbnRhaW5pbmcgdGhlIGdyb3VwIG5hbWUuXG5cdCAqIEBwYXJhbSB2aXNpYmxlU2VjdGlvbnMgVGhlIGxpc3Qgb2YgdmlzaWJsZSBzZWN0aW9ucyBpbiB0aGUgT2JqZWN0IFBhZ2UuXG5cdCAqIEBwYXJhbSBvTWVzc2FnZSBUaGUgbWVzc2FnZSBvYmplY3QgY29udGFpbmluZyBjb250cm9sIElEcy5cblx0ICogQHBhcmFtIG9WaWV3IFRoZSBjdXJyZW50IFVJNSB2aWV3LlxuXHQgKi9cblx0aGFuZGxlTWVzc2FnZU5hdmlnYXRpb24ob0l0ZW06IE1lc3NhZ2VJdGVtLCB2aXNpYmxlU2VjdGlvbnM6IE9iamVjdFBhZ2VTZWN0aW9uW10sIG9NZXNzYWdlOiBNZXNzYWdlLCBvVmlldzogVmlldyk6IHZvaWQge1xuXHRcdC8vIEdldCBjb250cm9sIGlmIGl0IGlzIGluc2lkZSBhIGhpZGRlbiBzdWJzZWN0aW9uXG5cdFx0Y29uc3Qgb0NvbnRyb2wgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKG9NZXNzYWdlLmdldENvbnRyb2xJZHMoKVswXSk7XG5cdFx0Y29uc3Qgb1N1YlNlY3Rpb24gPSB0aGlzLmZpbmRTdWJTZWN0aW9uKG9JdGVtLCB2aXNpYmxlU2VjdGlvbnMsIG9Db250cm9sKTtcblxuXHRcdC8vIElmIHN1YnNlY3Rpb24gZm91bmQsIGV4cGFuZCBpdFxuXHRcdGlmIChvU3ViU2VjdGlvbikge1xuXHRcdFx0KG9TdWJTZWN0aW9uIGFzIFN1YlNlY3Rpb24pLnNldE1vZGUoXCJFeHBhbmRlZFwiKTtcblx0XHR9XG5cblx0XHQvLyBOYXZpZ2F0ZSB0byB0aGUgc2VjdGlvbiBiYXNlZCBvbiB0aGUgbWVzc2FnZSdzIGdyb3VwIG5hbWVcblx0XHRjb25zdCBzU2VjdGlvblRpdGxlID0gb0l0ZW0uZ2V0R3JvdXBOYW1lKCkuc3BsaXQoXCIsIFwiKVswXTtcblx0XHR0aGlzLl9uYXZpZ2F0ZUZyb21NZXNzYWdlVG9TZWN0aW9uSW5JY29uVGFiQmFyTW9kZSh0aGlzLm9PYmplY3RQYWdlTGF5b3V0ISwgc1NlY3Rpb25UaXRsZSk7XG5cblx0XHQvLyBGb2N1cyBvbiB0aGUgdGFyZ2V0IGNvbnRyb2xcblx0XHR0aGlzLmZvY3VzT25NZXNzYWdlVGFyZ2V0Q29udHJvbChvVmlldywgb01lc3NhZ2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZpbmRzIHRoZSBjb3JyZXNwb25kaW5nIHN1YnNlY3Rpb24gYmFzZWQgb24gdGhlIHByb3ZpZGVkIG1lc3NhZ2UgaXRlbSdzIGdyb3VwIG5hbWVcblx0ICogb3IgYnkgY2hlY2tpbmcgaWYgdGhlIGdpdmVuIGNvbnRyb2wgZXhpc3RzIGluc2lkZSB0aGUgc3Vic2VjdGlvbidzIE1vcmVCbG9ja3MuXG5cdCAqIEBwYXJhbSBvSXRlbSBUaGUgbWVzc2FnZSBpdGVtIGNvbnRhaW5pbmcgdGhlIGdyb3VwIG5hbWUuXG5cdCAqIEBwYXJhbSB2aXNpYmxlU2VjdGlvbnMgVGhlIGxpc3Qgb2YgdmlzaWJsZSBzZWN0aW9ucyBpbiB0aGUgT2JqZWN0IFBhZ2UuXG5cdCAqIEBwYXJhbSBvQ29udHJvbCBUaGUgVUk1IGNvbnRyb2wgdG8gY2hlY2sgZm9yIGluc2lkZSBNb3JlQmxvY2tzLlxuXHQgKiBAcmV0dXJucyAtIFRoZSBmb3VuZCBzdWJzZWN0aW9uLCBzZWN0aW9uLCBvciBudWxsIGlmIG5vdCBmb3VuZC5cblx0ICovXG5cdGZpbmRTdWJTZWN0aW9uKFxuXHRcdG9JdGVtOiBNZXNzYWdlSXRlbSxcblx0XHR2aXNpYmxlU2VjdGlvbnM6IE9iamVjdFBhZ2VTZWN0aW9uW10sXG5cdFx0b0NvbnRyb2w6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWRcblx0KTogU3ViU2VjdGlvbiB8IE9iamVjdFBhZ2VTZWN0aW9uIHwgdW5rbm93biB8IG51bGwge1xuXHRcdGNvbnN0IGdyb3VwTmFtZXMgPSBvSXRlbS5nZXRHcm91cE5hbWUoKS5zcGxpdChcIiwgXCIpO1xuXHRcdHJldHVybiB0aGlzLmZpbmRTdWJTZWN0aW9uQnlUaXRsZU9yQ29udHJvbCh2aXNpYmxlU2VjdGlvbnMsIGdyb3VwTmFtZXNbMV0sIG9Db250cm9sKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZWFyY2hlcyBmb3IgYSBzdWJzZWN0aW9uIGJhc2VkIG9uIHRoZSBnaXZlbiB0aXRsZSBvciBieSBjaGVja2luZ1xuXHQgKiBpZiB0aGUgc3BlY2lmaWVkIGNvbnRyb2wgaXMgcHJlc2VudCBpbnNpZGUgdGhlIHN1YnNlY3Rpb24ncyBNb3JlQmxvY2tzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0gdmlzaWJsZVNlY3Rpb25zIFRoZSBsaXN0IG9mIHZpc2libGUgc2VjdGlvbnMuXG5cdCAqIEBwYXJhbSB0aXRsZSBUaGUgdGl0bGUgdG8gbWF0Y2ggYWdhaW5zdCBzdWJzZWN0aW9uIHRpdGxlcy5cblx0ICogQHBhcmFtIG9Db250cm9sIFRoZSBVSTUgY29udHJvbCB0byBzZWFyY2ggZm9yIHdpdGhpbiBNb3JlQmxvY2tzLlxuXHQgKiBAcmV0dXJucyAtIFRoZSBmb3VuZCBzdWJzZWN0aW9uIG9yIG51bGwgaWYgbm8gbWF0Y2ggaXMgZm91bmQuXG5cdCAqL1xuXHRwcml2YXRlIGZpbmRTdWJTZWN0aW9uQnlUaXRsZU9yQ29udHJvbChcblx0XHR2aXNpYmxlU2VjdGlvbnM6IE9iamVjdFBhZ2VTZWN0aW9uW10sXG5cdFx0dGl0bGU6IHN0cmluZyxcblx0XHRvQ29udHJvbDogVUk1RWxlbWVudCB8IHVuZGVmaW5lZFxuXHQpOiBTdWJTZWN0aW9uIHwgbnVsbCB7XG5cdFx0Zm9yIChjb25zdCBzZWN0aW9uIG9mIHZpc2libGVTZWN0aW9ucykge1xuXHRcdFx0Zm9yIChjb25zdCBzdWJTZWN0aW9uIG9mIHNlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKSkge1xuXHRcdFx0XHQvLyBDaGVjayBpZiBzdWJzZWN0aW9uIHRpdGxlIG1hdGNoZXNcblx0XHRcdFx0aWYgKHN1YlNlY3Rpb24uZ2V0VGl0bGUoKSA9PT0gdGl0bGUpIHtcblx0XHRcdFx0XHRyZXR1cm4gc3ViU2VjdGlvbiBhcyBTdWJTZWN0aW9uO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2hlY2sgaWYgY29udHJvbCBleGlzdHMgaW5zaWRlIE1vcmVCbG9ja3Ncblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHN1YlNlY3Rpb25cblx0XHRcdFx0XHRcdC5nZXRNb3JlQmxvY2tzKClcblx0XHRcdFx0XHRcdC5zb21lKFxuXHRcdFx0XHRcdFx0XHQoYmxvY2spID0+XG5cdFx0XHRcdFx0XHRcdFx0KChibG9jayBhcyBWaWV3KS5nZXRDb250ZW50KCkgYXMgdW5rbm93biBhcyBDb250ZW50KT8uZmluZEVsZW1lbnRzKHRydWUpLmluY2x1ZGVzKG9Db250cm9sIGFzIFVJNUVsZW1lbnQpXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiBzdWJTZWN0aW9uIGFzIFN1YlNlY3Rpb247XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIGEgdGFibGUgY2VsbCB0YXJnZXRlZCBieSBhIG1lc3NhZ2UsIGVuc3VyaW5nIHRoZSBjZWxsIGlzIGVkaXRhYmxlLlxuXHQgKiBAcGFyYW0gdGFyZ2V0Um93IEEgdGFibGUgcm93XG5cdCAqIEBwYXJhbSBtZXNzYWdlIE1lc3NhZ2UgdGFyZ2V0aW5nIGEgY2VsbFxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBlZGl0YWJsZSBjZWxsIG9yIG51bGwvdW5kZWZpbmVkIGlmIG5vbmUgaXMgZm91bmRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGdldFRhcmdldENlbGwodGFyZ2V0Um93OiBVSTVFbGVtZW50LCBtZXNzYWdlOiBNZXNzYWdlKTogVUk1RWxlbWVudCB8IG51bGwgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGNvbnRyb2xJZHMgPSBtZXNzYWdlLmdldENvbnRyb2xJZHMoKTtcblx0XHRjb25zdCBoYXNOb25FZGl0YWJsZUZpZWxkID0gY29udHJvbElkcy5zb21lKChpZCkgPT4ge1xuXHRcdFx0Y29uc3QgY29udHJvbCA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpIGFzIEVuaGFuY2VXaXRoVUk1PEZpZWxkPjtcblx0XHRcdHJldHVybiBjb250cm9sPy5pc0EoXCJzYXAudWkubWRjLkZpZWxkXCIpICYmIGNvbnRyb2wuZ2V0RWRpdGFibGUgJiYgIWNvbnRyb2wuZ2V0RWRpdGFibGUoKTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBjb250cm9sSWRzLmxlbmd0aCA+IDBcblx0XHRcdD8gY29udHJvbElkc1xuXHRcdFx0XHRcdC5tYXAoZnVuY3Rpb24gKGNvbnRyb2xJZCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgaXNDb250cm9sSW5UYWJsZSA9IHRhcmdldFJvdy5maW5kRWxlbWVudHModHJ1ZSwgZnVuY3Rpb24gKGVsZW0pIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0uZ2V0SWQoKSA9PT0gY29udHJvbElkO1xuXHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdGlmIChpc0NvbnRyb2xJblRhYmxlLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgZWxlbWVudCA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29udHJvbElkKSBhcyBFbmhhbmNlV2l0aFVJNTxGaWVsZD47XG5cdFx0XHRcdFx0XHRcdGlmIChoYXNOb25FZGl0YWJsZUZpZWxkKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGVsZW1lbnQ/LmlzQShcInNhcC51aS5tZGMuRmllbGRcIikpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChlbGVtZW50LmdldEVkaXRhYmxlICYmICFlbGVtZW50LmdldEVkaXRhYmxlKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZWxlbWVudDtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LnJlZHVjZShmdW5jdGlvbiAoYWNjLCB2YWwpIHtcblx0XHRcdFx0XHRcdHJldHVybiB2YWwgPyB2YWwgOiBhY2M7XG5cdFx0XHRcdFx0fSwgbnVsbClcblx0XHRcdDogbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBGb2N1cyBvbiB0aGUgY29udHJvbCB0YXJnZXRlZCBieSBhIG1lc3NhZ2UuXG5cdCAqIEBwYXJhbSB2aWV3IFRoZSBjdXJyZW50IHZpZXdcblx0ICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdGFyZ2V0aW5nIHRoZSBjb250cm9sIG9uIHdoaWNoIHdlIHdhbnQgdG8gc2V0IHRoZSBmb2N1c1xuXHQgKiBAcGFyYW0gdGFyZ2V0TWRjVGFibGUgVGhlIHRhYmxlIHRhcmdldGVkIGJ5IHRoZSBtZXNzYWdlIChvcHRpb25hbClcblx0ICogQHBhcmFtIHJvd0luZGV4IFRoZSByb3cgaW5kZXggb2YgdGhlIHRhYmxlIHRhcmdldGVkIGJ5IHRoZSBtZXNzYWdlIChvcHRpb25hbClcblx0ICogQHJldHVybnMgUHJvbWlzZVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0YXN5bmMgZm9jdXNPbk1lc3NhZ2VUYXJnZXRDb250cm9sKFxuXHRcdHZpZXc6IFZpZXcsXG5cdFx0bWVzc2FnZTogTWVzc2FnZSxcblx0XHR0YXJnZXRNZGNUYWJsZT86IE1EQ1RhYmxlLFxuXHRcdHJvd0luZGV4PzogbnVtYmVyXG5cdCk6IFByb21pc2U8Ym9vbGVhbiB8IHVuZGVmaW5lZD4ge1xuXHRcdGNvbnN0IGFBbGxWaWV3RWxlbWVudHMgPSB2aWV3LmZpbmRFbGVtZW50cyh0cnVlKTtcblx0XHRjb25zdCBhRXJyb25lb3VzQ29udHJvbHMgPSBtZXNzYWdlXG5cdFx0XHQuZ2V0Q29udHJvbElkcygpXG5cdFx0XHQuZmlsdGVyKGZ1bmN0aW9uIChzQ29udHJvbElkOiBzdHJpbmcpIHtcblx0XHRcdFx0cmV0dXJuIGFBbGxWaWV3RWxlbWVudHMuc29tZShmdW5jdGlvbiAob0VsZW0pIHtcblx0XHRcdFx0XHRyZXR1cm4gb0VsZW0uZ2V0SWQoKSA9PT0gc0NvbnRyb2xJZCAmJiBvRWxlbS5nZXREb21SZWYoKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KVxuXHRcdFx0Lm1hcChmdW5jdGlvbiAoc0NvbnRyb2xJZDogc3RyaW5nKSB7XG5cdFx0XHRcdHJldHVybiBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHNDb250cm9sSWQpO1xuXHRcdFx0fSk7XG5cdFx0Y29uc3QgYU5vdFRhYmxlRXJyb25lb3VzQ29udHJvbHMgPSBhRXJyb25lb3VzQ29udHJvbHMuZmlsdGVyKGZ1bmN0aW9uIChvRWxlbTogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuICFvRWxlbT8uaXNBPFRhYmxlPihcInNhcC5tLlRhYmxlXCIpICYmICFvRWxlbT8uaXNBPFVJVGFibGU+KFwic2FwLnVpLnRhYmxlLlRhYmxlXCIpO1xuXHRcdH0pO1xuXHRcdC8vVGhlIGZvY3VzIGlzIHNldCBvbiBOb3QgVGFibGUgY29udHJvbCBpbiBwcmlvcml0eVxuXHRcdGlmIChhTm90VGFibGVFcnJvbmVvdXNDb250cm9scy5sZW5ndGggPiAwKSB7XG5cdFx0XHR0aGlzLnNldEZvY3VzVG9Db250cm9sKGFOb3RUYWJsZUVycm9uZW91c0NvbnRyb2xzWzBdKTtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIGlmIChhRXJyb25lb3VzQ29udHJvbHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgYVRhcmdldE1kY1RhYmxlUm93ID0gdGFyZ2V0TWRjVGFibGVcblx0XHRcdFx0PyB0YXJnZXRNZGNUYWJsZS5maW5kRWxlbWVudHMoXG5cdFx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdFx0KGVsZW06IENvbnRyb2wpID0+XG5cdFx0XHRcdFx0XHRcdGVsZW0uaXNBKENvbHVtbkxpc3RJdGVtLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpKSAmJiBlbGVtLmdldFBhcmVudCgpPy5nZXRQYXJlbnQoKSA9PT0gdGFyZ2V0TWRjVGFibGVcblx0XHRcdFx0ICApXG5cdFx0XHRcdDogW107XG5cdFx0XHRpZiAoYVRhcmdldE1kY1RhYmxlUm93Lmxlbmd0aCA+IDAgJiYgYVRhcmdldE1kY1RhYmxlUm93WzBdKSB7XG5cdFx0XHRcdGNvbnN0IG9UYXJnZXRSb3cgPSBhVGFyZ2V0TWRjVGFibGVSb3dbcm93SW5kZXggYXMgbnVtYmVyXTtcblx0XHRcdFx0Y29uc3Qgb1RhcmdldENlbGwgPSB0aGlzLmdldFRhcmdldENlbGwob1RhcmdldFJvdywgbWVzc2FnZSk7XG5cdFx0XHRcdGlmIChvVGFyZ2V0Q2VsbCkge1xuXHRcdFx0XHRcdGNvbnN0IG9UYXJnZXRGaWVsZCA9IG9UYXJnZXRDZWxsLmlzQTxGaWVsZD4oXCJzYXAuZmUubWFjcm9zLkZpZWxkXCIpXG5cdFx0XHRcdFx0XHQ/IChvVGFyZ2V0Q2VsbC5nZXRDb250ZW50KCkgYXMgRW5oYW5jZVdpdGhVSTU8RmllbGRXcmFwcGVyPikuZ2V0Q29udGVudEVkaXQoKVswXVxuXHRcdFx0XHRcdFx0OiAoKChvVGFyZ2V0Q2VsbCBhcyBIQm94KS5nZXRJdGVtcygpWzBdIGFzIEZpZWxkKS5nZXRDb250ZW50KCkgYXMgRW5oYW5jZVdpdGhVSTU8RmllbGRXcmFwcGVyPikuZ2V0Q29udGVudEVkaXQoKVswXTtcblx0XHRcdFx0XHR0aGlzLnNldEZvY3VzVG9Db250cm9sKG9UYXJnZXRGaWVsZCk7XG5cdFx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zdCBlcnJvclByb3BlcnR5UGF0aCA9IG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdO1xuXHRcdFx0XHRcdGlmIChlcnJvclByb3BlcnR5UGF0aCkge1xuXHRcdFx0XHRcdFx0KHZpZXcuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWwpLnNldFByb3BlcnR5KFwiL21lc3NhZ2VUYXJnZXRQcm9wZXJ0eVBhdGhcIiwgZXJyb3JQcm9wZXJ0eVBhdGgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAodGFyZ2V0TWRjVGFibGUgJiYgdGhpcy5fbmF2aWdhdGlvbkNvbmZpZ3VyZWQodGFyZ2V0TWRjVGFibGUpKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gKHZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5fcm91dGluZy5uYXZpZ2F0ZUZvcndhcmRUb0NvbnRleHQoXG5cdFx0XHRcdFx0XHRcdG9UYXJnZXRSb3cuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gb2JqIFRoZSBtZXNzYWdlIG9iamVjdFxuXHQgKiBAcGFyYW0gYVNlY3Rpb25zIFRoZSBhcnJheSBvZiBzZWN0aW9ucyBpbiB0aGUgb2JqZWN0IHBhZ2Vcblx0ICogQHJldHVybnMgVGhlIHJhbmsgb2YgdGhlIG1lc3NhZ2Vcblx0ICovXG5cdF9nZXRNZXNzYWdlUmFuayhvYmo6IE1lc3NhZ2UgJiB7IHNlY3Rpb25OYW1lOiBzdHJpbmc7IHN1YlNlY3Rpb25OYW1lOiBzdHJpbmcgfSwgYVNlY3Rpb25zOiBPYmplY3RQYWdlU2VjdGlvbltdIHwgdW5kZWZpbmVkKTogbnVtYmVyIHtcblx0XHRpZiAoYVNlY3Rpb25zKSB7XG5cdFx0XHRsZXQgc2VjdGlvbiwgYVN1YlNlY3Rpb25zLCBzdWJTZWN0aW9uLCBqLCBrLCBhRWxlbWVudHMsIGFBbGxFbGVtZW50cywgc2VjdGlvblJhbms7XG5cdFx0XHRmb3IgKGogPSBhU2VjdGlvbnMubGVuZ3RoIC0gMTsgaiA+PSAwOyAtLWopIHtcblx0XHRcdFx0Ly8gTG9vcCBvdmVyIGFsbCBzZWN0aW9uc1xuXHRcdFx0XHRzZWN0aW9uID0gYVNlY3Rpb25zW2pdO1xuXHRcdFx0XHRhU3ViU2VjdGlvbnMgPSBzZWN0aW9uLmdldFN1YlNlY3Rpb25zKCk7XG5cdFx0XHRcdGZvciAoayA9IGFTdWJTZWN0aW9ucy5sZW5ndGggLSAxOyBrID49IDA7IC0taykge1xuXHRcdFx0XHRcdC8vIExvb3Agb3ZlciBhbGwgc3ViLXNlY3Rpb25zXG5cdFx0XHRcdFx0c3ViU2VjdGlvbiA9IGFTdWJTZWN0aW9uc1trXTtcblx0XHRcdFx0XHRhQWxsRWxlbWVudHMgPSBzdWJTZWN0aW9uLmZpbmRFbGVtZW50cyh0cnVlKTsgLy8gR2V0IGFsbCBlbGVtZW50cyBpbnNpZGUgYSBzdWItc2VjdGlvblxuXHRcdFx0XHRcdC8vVHJ5IHRvIGZpbmQgdGhlIGNvbnRyb2wgMSBpbnNpZGUgdGhlIHN1YiBzZWN0aW9uXG5cdFx0XHRcdFx0YUVsZW1lbnRzID0gYUFsbEVsZW1lbnRzLmZpbHRlcih0aGlzLl9mbkZpbHRlclVwb25JZC5iaW5kKHRoaXMsIG9iai5nZXRDb250cm9sSWQoKSkpO1xuXHRcdFx0XHRcdHNlY3Rpb25SYW5rID0gaiArIDE7XG5cdFx0XHRcdFx0aWYgKGFFbGVtZW50cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRpZiAoc2VjdGlvbi5nZXRWaXNpYmxlKCkgJiYgc3ViU2VjdGlvbi5nZXRWaXNpYmxlKCkpIHtcblx0XHRcdFx0XHRcdFx0aWYgKCFvYmouaGFzT3duUHJvcGVydHkoXCJzZWN0aW9uTmFtZVwiKSkge1xuXHRcdFx0XHRcdFx0XHRcdG9iai5zZWN0aW9uTmFtZSA9IHNlY3Rpb24uZ2V0VGl0bGUoKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRpZiAoIW9iai5oYXNPd25Qcm9wZXJ0eShcInN1YlNlY3Rpb25OYW1lXCIpKSB7XG5cdFx0XHRcdFx0XHRcdFx0b2JqLnN1YlNlY3Rpb25OYW1lID0gc3ViU2VjdGlvbi5nZXRUaXRsZSgpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiBzZWN0aW9uUmFuayAqIDEwICsgKGsgKyAxKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdC8vIGlmIHNlY3Rpb24gb3Igc3Vic2VjdGlvbiBpcyBpbnZpc2libGUgdGhlbiBncm91cCBuYW1lIHdvdWxkIGJlIExhc3QgQWN0aW9uXG5cdFx0XHRcdFx0XHRcdC8vIHNvIHJhbmtpbmcgc2hvdWxkIGJlIGxvd2VyXG5cdFx0XHRcdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly9pZiBzdWIgc2VjdGlvbiB0aXRsZSBpcyBPdGhlciBtZXNzYWdlcywgd2UgcmV0dXJuIGEgaGlnaCBudW1iZXIocmFuayksIHdoaWNoIGVuc3VyZXNcblx0XHRcdC8vdGhhdCBtZXNzYWdlcyBiZWxvbmdpbmcgdG8gdGhpcyBzdWIgc2VjdGlvbiBhbHdheXMgY29tZSBsYXRlciBpbiBtZXNzYWdlUG9wb3ZlclxuXHRcdFx0aWYgKCFvYmouc2VjdGlvbk5hbWUgJiYgIW9iai5zdWJTZWN0aW9uTmFtZSAmJiBvYmouZ2V0UGVyc2lzdGVudCgpKSB7XG5cdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIDk5OTtcblx0XHR9XG5cdFx0cmV0dXJuIDk5OTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgRmlsdGVyIHRvIGhpZGUgbWVzc2FnZXMgZnJvbSB0aGUgZGlhbG9nLlxuXHQgKiBAcmV0dXJucyBGaWx0ZXJcblx0ICovXG5cdF9maWx0ZXJPdXRNZXNzYWdlc0luRGlhbG9nKCk6IEZpbHRlciB7XG5cdFx0Y29uc3QgZm5UZXN0ID0gKGFDb250cm9sSWRzOiBzdHJpbmdbXSk6IGJvb2xlYW4gPT4ge1xuXHRcdFx0cmV0dXJuIG1lc3NhZ2VIYW5kbGluZy5pc01lc3NhZ2VPdXRPZlBhcmFtZXRlckRpYWxvZyhhQ29udHJvbElkcyk7XG5cdFx0fTtcblx0XHRyZXR1cm4gbmV3IEZpbHRlcih7XG5cdFx0XHRwYXRoOiBcImNvbnRyb2xJZHNcIixcblx0XHRcdHRlc3Q6IGZuVGVzdCxcblx0XHRcdGNhc2VTZW5zaXRpdmU6IHRydWVcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJZiB0aGVyZSBpcyBvbmx5IG9uZSBzdWNjZXNzIG1lc3NhZ2UgYm91bmQgdG8gdGhlIGN1cnJlbnQgY29udGV4dCwgd2UgZG8gbm90IGZpbHRlciBpdCBvdXQuXG5cdCAqIEByZXR1cm5zIEJvb2xlYW4gaWYgdGhlIHNpbmdsZSBzdWNjZXNzIG1lc3NhZ2UgaXMgZm91bmRcblx0ICovXG5cdF9maWx0ZXJPdXRDb250ZXh0U3VjY2Vzc01lc3NhZ2VzKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGJvdW5kQ29udGV4dFN1Y2Nlc3NNZXNzYWdlcyA9IFtdO1xuXHRcdGNvbnN0IG1lc3NhZ2VzID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKTtcblx0XHRtZXNzYWdlcy5maWx0ZXIoKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IHtcblx0XHRcdGlmIChcblx0XHRcdFx0bWVzc2FnZS5nZXRUYXJnZXRzKCkubGVuZ3RoID09PSAxICYmXG5cdFx0XHRcdG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdID09PSB0aGlzLmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKSAmJlxuXHRcdFx0XHRtZXNzYWdlLmdldFBlcnNpc3RlbnQoKSA9PT0gdHJ1ZSAmJlxuXHRcdFx0XHRtZXNzYWdlLmdldFR5cGUoKSA9PT0gTWVzc2FnZVR5cGUuU3VjY2Vzc1xuXHRcdFx0KSB7XG5cdFx0XHRcdGJvdW5kQ29udGV4dFN1Y2Nlc3NNZXNzYWdlcy5wdXNoKG1lc3NhZ2UpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGlmIChib3VuZENvbnRleHRTdWNjZXNzTWVzc2FnZXMubGVuZ3RoID09PSAxICYmIG1lc3NhZ2VzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0Ly8gd2Ugd2FudCB0byBoaWRlIHN1Y2Nlc3MgbWVzc2FnZXMgb25seSBpZiB0aGV5IGFyZSBib3VuZCB0byB0aGUgY3VycmVudCBjb250ZXh0IGFuZCBzaW5nbGUgc3VjY2VzcyBtZXNzYWdlc1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGaWx0ZXIgZnVuY3Rpb24gdG8gaGlkZSBiYWNrLWVuZCBtZXNzYWdlcyBpZiB0aGUgY29udHJvbCBoYXMgZXJyb3IgdmFsaWRhdGlvbi5cblx0ICogQHJldHVybnMgRmlsdGVyXG5cdCAqL1xuXHRfZ2V0RmlsdGVyVG9IaWRlQmFja2VuZE1lc3NhZ2VPbkVycm9yVmFsaWRhdGlvbigpOiBGaWx0ZXIge1xuXHRcdGNvbnN0IGdldElkc09mRmllbHNkV2l0aEVycm9yVmFsaWRhdGlvbiA9IGZ1bmN0aW9uICgpOiBzdHJpbmdbXSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKClcblx0XHRcdFx0XHQuZ2V0RGF0YSgpXG5cdFx0XHRcdFx0LmZpbHRlcigobWVzc2FnZTogTWVzc2FnZSkgPT4gbWVzc2FnZS52YWxpZGF0aW9uID09PSB0cnVlICYmIG1lc3NhZ2UuZ2V0Q29udHJvbElkKCk/Lm1hdGNoKC9maWVsZC4qLWlubmVyJC9pKSlcblx0XHRcdFx0XHQvL3RoZSBlcnJvciBwb2ludCB0byB0aGUgaW5uZXIgY29udHJvbCwgc28gd2UgbmVlZCB0byByZW1vdmUgdGhlIC1pbm5lciB0byBnZXQgdGhlIGZpZWxkIGlkXG5cdFx0XHRcdFx0Lm1hcCgobWVzc2FnZTogTWVzc2FnZSkgPT4gbWVzc2FnZS5nZXRDb250cm9sSWQoKT8ucmVwbGFjZShcIi1pbm5lclwiLCBcIlwiKSlcblx0XHRcdCk7XG5cdFx0fTtcblxuXHRcdGNvbnN0IGZuVGVzdCA9IGZ1bmN0aW9uIChhQ29udHJvbElkczogc3RyaW5nW10pOiBib29sZWFuIHtcblx0XHRcdC8vIGZpbHRlcmluZyBvdXQgdGhlIGJhY2tlbmQgbWVzc2FnZXMgaWYgdGhlIGNvbnRyb2wgaGFzIGVycm9yIHZhbGlkYXRpb25cblx0XHRcdHJldHVybiAhYUNvbnRyb2xJZHMuc29tZSgoY29udHJvbElkOiBzdHJpbmcpID0+IGdldElkc09mRmllbHNkV2l0aEVycm9yVmFsaWRhdGlvbigpLmluY2x1ZGVzKGNvbnRyb2xJZCkpO1xuXHRcdH07XG5cdFx0cmV0dXJuIG5ldyBGaWx0ZXIoe1xuXHRcdFx0ZmlsdGVyczogW1xuXHRcdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0XHRmaWx0ZXJzOiBbXG5cdFx0XHRcdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0XHRcdFx0cGF0aDogXCJ2YWxpZGF0aW9uXCIsXG5cdFx0XHRcdFx0XHRcdG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5FUSxcblx0XHRcdFx0XHRcdFx0dmFsdWUxOiBmYWxzZVxuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0XHRcdFx0cGF0aDogXCJjb250cm9sSWRzXCIsXG5cdFx0XHRcdFx0XHRcdHRlc3Q6IGZuVGVzdCxcblx0XHRcdFx0XHRcdFx0Y2FzZVNlbnNpdGl2ZTogdHJ1ZVxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdGFuZDogdHJ1ZVxuXHRcdFx0XHR9KSxcblx0XHRcdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRcdFx0cGF0aDogXCJ2YWxpZGF0aW9uXCIsXG5cdFx0XHRcdFx0b3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLkVRLFxuXHRcdFx0XHRcdHZhbHVlMTogdHJ1ZVxuXHRcdFx0XHR9KVxuXHRcdFx0XSxcblx0XHRcdGFuZDogZmFsc2Vcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gc2V0IHRoZSBmaWx0ZXJzIGJhc2VkIHVwb24gdGhlIG1lc3NhZ2UgaXRlbXNcblx0ICogVGhlIGRlc2lyZWQgZmlsdGVyIG9wZXJhdGlvbiBpczpcblx0ICogKCBmaWx0ZXJzIHByb3ZpZGVkIGJ5IHVzZXIgJiYgKCB2YWxpZGF0aW9uID0gdHJ1ZSAmJiBDb250cm9sIHNob3VsZCBiZSBwcmVzZW50IGluIHZpZXcgKSB8fCBtZXNzYWdlcyBmb3IgdGhlIGN1cnJlbnQgbWF0Y2hpbmcgY29udGV4dCApLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0YXN5bmMgX2FwcGx5RmlsdGVyc0FuZFNvcnQoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0bGV0IG9WYWxpZGF0aW9uRmlsdGVycyxcblx0XHRcdGhpZGRlbkRyYWZ0RmlsdGVyLFxuXHRcdFx0b1ZhbGlkYXRpb25BbmRDb250ZXh0RmlsdGVyLFxuXHRcdFx0b0ZpbHRlcnMsXG5cdFx0XHRzUGF0aCxcblx0XHRcdG9Tb3J0ZXIsXG5cdFx0XHRvRGlhbG9nRmlsdGVyLFxuXHRcdFx0b2JqZWN0UGFnZUxheW91dFNlY3Rpb25zOiBPYmplY3RQYWdlU2VjdGlvbltdIHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGFVc2VyRGVmaW5lZEZpbHRlcjogRmlsdGVyW10gPSBbXTtcblxuXHRcdHRoaXMuc1ZpZXdJZCA9IHRoaXMuc1ZpZXdJZCA/IHRoaXMuc1ZpZXdJZCA6ICh0aGlzLl9nZXRWaWV3SWQodGhpcy5nZXRJZCgpKSBhcyBzdHJpbmcpO1xuXHRcdC8vQWRkIHRoZSBmaWx0ZXJzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyXG5cdFx0Y29uc3QgYUN1c3RvbUZpbHRlcnMgPSB0aGlzLmdldEFnZ3JlZ2F0aW9uKFwiY3VzdG9tRmlsdGVyc1wiKSBhcyBDb250cm9sW10gfCB1bmRlZmluZWQ7XG5cdFx0aWYgKGFDdXN0b21GaWx0ZXJzKSB7XG5cdFx0XHRhQ3VzdG9tRmlsdGVycy5mb3JFYWNoKGZ1bmN0aW9uIChmaWx0ZXI6IENvbnRyb2wpIHtcblx0XHRcdFx0YVVzZXJEZWZpbmVkRmlsdGVyLnB1c2goXG5cdFx0XHRcdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRcdFx0XHRwYXRoOiBmaWx0ZXIuZ2V0UHJvcGVydHkoXCJwYXRoXCIpLFxuXHRcdFx0XHRcdFx0b3BlcmF0b3I6IGZpbHRlci5nZXRQcm9wZXJ0eShcIm9wZXJhdG9yXCIpLFxuXHRcdFx0XHRcdFx0dmFsdWUxOiBmaWx0ZXIuZ2V0UHJvcGVydHkoXCJ2YWx1ZTFcIiksXG5cdFx0XHRcdFx0XHR2YWx1ZTI6IGZpbHRlci5nZXRQcm9wZXJ0eShcInZhbHVlMlwiKVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gdGhpcy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGlmICghb0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHR0aGlzLnNldFZpc2libGUoZmFsc2UpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzUGF0aCA9IG9CaW5kaW5nQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHQvL0ZpbHRlciBmb3IgZmlsdGVyaW5nIG91dCBvbmx5IHZhbGlkYXRpb24gbWVzc2FnZXMgd2hpY2ggYXJlIGN1cnJlbnRseSBwcmVzZW50IGluIHRoZSB2aWV3XG5cdFx0XHRvVmFsaWRhdGlvbkZpbHRlcnMgPSBuZXcgRmlsdGVyKHtcblx0XHRcdFx0ZmlsdGVyczogW1xuXHRcdFx0XHRcdG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRcdFx0cGF0aDogXCJ2YWxpZGF0aW9uXCIsXG5cdFx0XHRcdFx0XHRvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuRVEsXG5cdFx0XHRcdFx0XHR2YWx1ZTE6IHRydWVcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRtZXNzYWdlQnV0dG9uSGVscGVyLmdldENoZWNrQ29udHJvbEluVmlld0ZpbHRlcih0aGlzLnNWaWV3SWQpXG5cdFx0XHRcdF0sXG5cdFx0XHRcdGFuZDogdHJ1ZVxuXHRcdFx0fSk7XG5cblx0XHRcdG9EaWFsb2dGaWx0ZXIgPSBuZXcgRmlsdGVyKHtcblx0XHRcdFx0ZmlsdGVyczogW3RoaXMuX2ZpbHRlck91dE1lc3NhZ2VzSW5EaWFsb2coKV1cblx0XHRcdH0pO1xuXG5cdFx0XHRjb25zdCBvQ29udGV4dFN1Y2Nlc3NGaWx0ZXJzID0gbmV3IEZpbHRlcih7XG5cdFx0XHRcdHBhdGg6IFwidGFyZ2V0XCIsXG5cdFx0XHRcdHRlc3Q6IHRoaXMuX2ZpbHRlck91dENvbnRleHRTdWNjZXNzTWVzc2FnZXMuYmluZCh0aGlzKSxcblx0XHRcdFx0Y2FzZVNlbnNpdGl2ZTogdHJ1ZVxuXHRcdFx0fSk7XG5cblx0XHRcdGxldCBmaWx0ZXJBcnJheTtcblx0XHRcdGlmICh0aGlzLmlzSGlkZGVuRHJhZnRFbmFibGVkKSB7XG5cdFx0XHRcdGNvbnN0IHZpZXdJZCA9IHRoaXMuX2dldFZpZXdJZCh0aGlzLmdldElkKCkpO1xuXHRcdFx0XHRjb25zdCB2aWV3ID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZCh2aWV3SWQgYXMgc3RyaW5nKSBhcyBWaWV3O1xuXHRcdFx0XHRjb25zdCB2aWV3Q29udGV4dCA9IHZpZXc/LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQ7XG5cdFx0XHRcdGNvbnN0IGNvbnRleHRQYXRoID0gKGF3YWl0ICh2aWV3LmdldENvbnRyb2xsZXIoKSBhcyBPYmplY3RQYWdlQ29udHJvbGxlcik/LmVkaXRGbG93LmdldFJvb3RDb250ZXh0KHZpZXdDb250ZXh0KSk/LmdldFBhdGgoKTtcblx0XHRcdFx0aGlkZGVuRHJhZnRGaWx0ZXIgPSBtZXNzYWdlQnV0dG9uSGVscGVyLmdldEhpZGRlbkRyYWZ0VXNlQ2FzZUZpbHRlcihjb250ZXh0UGF0aCk7XG5cdFx0XHRcdGNvbnN0IHZhbGlkYXRpb25BbmRIaWRkZW5EcmFmdEZpbHRlciA9IG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRcdGZpbHRlcnM6IFtvVmFsaWRhdGlvbkZpbHRlcnMsIGhpZGRlbkRyYWZ0RmlsdGVyXSxcblx0XHRcdFx0XHRhbmQ6IGZhbHNlXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRmaWx0ZXJBcnJheSA9IFt2YWxpZGF0aW9uQW5kSGlkZGVuRHJhZnRGaWx0ZXIsIG9EaWFsb2dGaWx0ZXIsIHRoaXMuX2dldEZpbHRlclRvSGlkZUJhY2tlbmRNZXNzYWdlT25FcnJvclZhbGlkYXRpb24oKV07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvVmFsaWRhdGlvbkFuZENvbnRleHRGaWx0ZXIgPSBuZXcgRmlsdGVyKHtcblx0XHRcdFx0XHRmaWx0ZXJzOiBbXG5cdFx0XHRcdFx0XHRvVmFsaWRhdGlvbkZpbHRlcnMsXG5cdFx0XHRcdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0XHRcdFx0cGF0aDogXCJ0YXJnZXRcIixcblx0XHRcdFx0XHRcdFx0b3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLlN0YXJ0c1dpdGgsXG5cdFx0XHRcdFx0XHRcdHZhbHVlMTogc1BhdGhcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRhbmQ6IGZhbHNlXG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGZpbHRlckFycmF5ID0gW1xuXHRcdFx0XHRcdG9WYWxpZGF0aW9uQW5kQ29udGV4dEZpbHRlcixcblx0XHRcdFx0XHRvQ29udGV4dFN1Y2Nlc3NGaWx0ZXJzLFxuXHRcdFx0XHRcdG9EaWFsb2dGaWx0ZXIsXG5cdFx0XHRcdFx0dGhpcy5fZ2V0RmlsdGVyVG9IaWRlQmFja2VuZE1lc3NhZ2VPbkVycm9yVmFsaWRhdGlvbigpXG5cdFx0XHRcdF07XG5cdFx0XHRcdC8vRmlsdGVyIGZvciBmaWx0ZXJpbmcgb3V0IHRoZSBib3VuZCBtZXNzYWdlcyBpLmUgdGFyZ2V0IHN0YXJ0cyB3aXRoIHRoZSBjb250ZXh0IHBhdGhcblx0XHRcdH1cblx0XHRcdGNvbnN0IG9WYWxpZGF0aW9uQ29udGV4dERpYWxvZ0ZpbHRlcnMgPSBuZXcgRmlsdGVyKHtcblx0XHRcdFx0ZmlsdGVyczogZmlsdGVyQXJyYXksXG5cdFx0XHRcdGFuZDogdHJ1ZVxuXHRcdFx0fSk7XG5cdFx0XHQvLyBhbmQgZmluYWxseSAtIGlmIHRoZXJlIGFueSAtIGFkZCBjdXN0b20gZmlsdGVyICh2aWEgT1IpXG5cdFx0XHRpZiAoYVVzZXJEZWZpbmVkRmlsdGVyLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0b0ZpbHRlcnMgPSBuZXcgRmlsdGVyKHtcblx0XHRcdFx0XHRmaWx0ZXJzOiBbYVVzZXJEZWZpbmVkRmlsdGVyLCBvVmFsaWRhdGlvbkNvbnRleHREaWFsb2dGaWx0ZXJzXSBhcyB1bmtub3duIGFzIEZpbHRlcltdLCAvLyBUT0RPIGluY29ycmVjdCxcblx0XHRcdFx0XHRhbmQ6IGZhbHNlXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b0ZpbHRlcnMgPSBvVmFsaWRhdGlvbkNvbnRleHREaWFsb2dGaWx0ZXJzO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5vSXRlbUJpbmRpbmcuZmlsdGVyKG9GaWx0ZXJzKTtcblx0XHRcdHRoaXMub09iamVjdFBhZ2VMYXlvdXQgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0KHRoaXMsIHRoaXMub09iamVjdFBhZ2VMYXlvdXQpO1xuXHRcdFx0Ly8gV2Ugc3VwcG9ydCBzb3J0aW5nIG9ubHkgZm9yIE9iamVjdFBhZ2VMYXlvdXQgdXNlLWNhc2UuXG5cdFx0XHRpZiAodGhpcy5vT2JqZWN0UGFnZUxheW91dCkge1xuXHRcdFx0XHRvU29ydGVyID0gbmV3IFNvcnRlcihcblx0XHRcdFx0XHRcIlwiLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0KFxuXHRcdFx0XHRcdFx0b2JqMTogTWVzc2FnZSAmIHsgc2VjdGlvbk5hbWU6IHN0cmluZzsgc3ViU2VjdGlvbk5hbWU6IHN0cmluZyB9LFxuXHRcdFx0XHRcdFx0b2JqMjogTWVzc2FnZSAmIHsgc2VjdGlvbk5hbWU6IHN0cmluZzsgc3ViU2VjdGlvbk5hbWU6IHN0cmluZyB9XG5cdFx0XHRcdFx0KSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoIW9iamVjdFBhZ2VMYXlvdXRTZWN0aW9ucykge1xuXHRcdFx0XHRcdFx0XHRvYmplY3RQYWdlTGF5b3V0U2VjdGlvbnMgPSB0aGlzLm9PYmplY3RQYWdlTGF5b3V0ICYmIHRoaXMub09iamVjdFBhZ2VMYXlvdXQuZ2V0U2VjdGlvbnMoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNvbnN0IHJhbmtBID0gdGhpcy5fZ2V0TWVzc2FnZVJhbmsob2JqMSwgb2JqZWN0UGFnZUxheW91dFNlY3Rpb25zKTtcblx0XHRcdFx0XHRcdGNvbnN0IHJhbmtCID0gdGhpcy5fZ2V0TWVzc2FnZVJhbmsob2JqMiwgb2JqZWN0UGFnZUxheW91dFNlY3Rpb25zKTtcblx0XHRcdFx0XHRcdGlmIChyYW5rQSA8IHJhbmtCKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChyYW5rQSA+IHJhbmtCKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuIDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdFx0XHR0aGlzLm9JdGVtQmluZGluZy5zb3J0KG9Tb3J0ZXIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gc0NvbnRyb2xJZFxuXHQgKiBAcGFyYW0gb0l0ZW1cblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgY29udHJvbCBJRCBtYXRjaGVzIHRoZSBpdGVtIElEXG5cdCAqL1xuXHRfZm5GaWx0ZXJVcG9uSWQoc0NvbnRyb2xJZDogc3RyaW5nLCBvSXRlbTogVUk1RWxlbWVudCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBzQ29udHJvbElkID09PSBvSXRlbS5nZXRJZCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgc2VjdGlvbiBiYXNlZCBvbiBzZWN0aW9uIHRpdGxlIGFuZCB2aXNpYmlsaXR5LlxuXHQgKiBAcGFyYW0gb09iamVjdFBhZ2UgT2JqZWN0IHBhZ2UuXG5cdCAqIEBwYXJhbSBzU2VjdGlvblRpdGxlIFNlY3Rpb24gdGl0bGUuXG5cdCAqIEByZXR1cm5zIFRoZSBzZWN0aW9uXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0U2VjdGlvbkJ5U2VjdGlvblRpdGxlKG9PYmplY3RQYWdlOiBPYmplY3RQYWdlTGF5b3V0LCBzU2VjdGlvblRpdGxlOiBzdHJpbmcpOiBPYmplY3RQYWdlU2VjdGlvbiB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IG9TZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbiB8IHVuZGVmaW5lZDtcblx0XHRpZiAoc1NlY3Rpb25UaXRsZSkge1xuXHRcdFx0Y29uc3QgYVNlY3Rpb25zID0gb09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKTtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYVNlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChhU2VjdGlvbnNbaV0uZ2V0VmlzaWJsZSgpICYmIGFTZWN0aW9uc1tpXS5nZXRUaXRsZSgpID09PSBzU2VjdGlvblRpdGxlKSB7XG5cdFx0XHRcdFx0b1NlY3Rpb24gPSBhU2VjdGlvbnNbaV07XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG9TZWN0aW9uO1xuXHR9XG5cblx0LyoqXG5cdCAqIE5hdmlnYXRlcyB0byB0aGUgc2VjdGlvbiBpZiB0aGUgb2JqZWN0IHBhZ2UgdXNlcyBhbiBJY29uVGFiQmFyIGFuZCBpZiB0aGUgY3VycmVudCBzZWN0aW9uIGlzIG5vdCB0aGUgdGFyZ2V0IG9mIHRoZSBuYXZpZ2F0aW9uLlxuXHQgKiBAcGFyYW0gb09iamVjdFBhZ2UgT2JqZWN0IHBhZ2UuXG5cdCAqIEBwYXJhbSBzU2VjdGlvblRpdGxlIFNlY3Rpb24gdGl0bGUuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfbmF2aWdhdGVGcm9tTWVzc2FnZVRvU2VjdGlvbkluSWNvblRhYkJhck1vZGUob09iamVjdFBhZ2U6IE9iamVjdFBhZ2VMYXlvdXQsIHNTZWN0aW9uVGl0bGU6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IGJVc2VJY29uVGFiQmFyID0gb09iamVjdFBhZ2UuZ2V0VXNlSWNvblRhYkJhcigpO1xuXHRcdGlmIChiVXNlSWNvblRhYkJhcikge1xuXHRcdFx0Y29uc3Qgb1NlY3Rpb24gPSB0aGlzLl9nZXRTZWN0aW9uQnlTZWN0aW9uVGl0bGUob09iamVjdFBhZ2UsIHNTZWN0aW9uVGl0bGUpO1xuXHRcdFx0Y29uc3Qgc1NlbGVjdGVkU2VjdGlvbklkID0gb09iamVjdFBhZ2UuZ2V0U2VsZWN0ZWRTZWN0aW9uKCk7XG5cdFx0XHRpZiAob1NlY3Rpb24gJiYgc1NlbGVjdGVkU2VjdGlvbklkICE9PSBvU2VjdGlvbi5nZXRJZCgpKSB7XG5cdFx0XHRcdG9PYmplY3RQYWdlLnNldFNlbGVjdGVkU2VjdGlvbihvU2VjdGlvbi5nZXRJZCgpKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRhc3luYyBfbmF2aWdhdGVGcm9tTWVzc2FnZVRvU2VjdGlvblRhYmxlSW5JY29uVGFiQmFyTW9kZShcblx0XHRvVGFibGU6IFRhYmxlLFxuXHRcdG9PYmplY3RQYWdlOiBPYmplY3RQYWdlTGF5b3V0LFxuXHRcdHNTZWN0aW9uVGl0bGU6IHN0cmluZ1xuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBvUm93QmluZGluZyA9IG9UYWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0Y29uc3Qgb1RhYmxlQ29udGV4dCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IG9PUENvbnRleHQgPSBvT2JqZWN0UGFnZS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IGJTaG91bGRXYWl0Rm9yVGFibGVSZWZyZXNoID0gIShvVGFibGVDb250ZXh0ID09PSBvT1BDb250ZXh0KTtcblx0XHR0aGlzLl9uYXZpZ2F0ZUZyb21NZXNzYWdlVG9TZWN0aW9uSW5JY29uVGFiQmFyTW9kZShvT2JqZWN0UGFnZSwgc1NlY3Rpb25UaXRsZSk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlOiBGdW5jdGlvbikge1xuXHRcdFx0aWYgKGJTaG91bGRXYWl0Rm9yVGFibGVSZWZyZXNoKSB7XG5cdFx0XHRcdG9Sb3dCaW5kaW5nLmF0dGFjaEV2ZW50T25jZShcImNoYW5nZVwiLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIE1kY1RhYmxlIGlmIGl0IGlzIGZvdW5kIGFtb25nIGFueSBvZiB0aGUgcGFyZW50IGVsZW1lbnRzLlxuXHQgKiBAcGFyYW0gb0VsZW1lbnQgQ29udHJvbFxuXHQgKiBAcmV0dXJucyBNREMgdGFibGUgfHwgdW5kZWZpbmVkXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0TWRjVGFibGUob0VsZW1lbnQ6IFVJNUVsZW1lbnQpOiBNRENUYWJsZSB8IHVuZGVmaW5lZCB7XG5cdFx0Ly9jaGVjayBpZiB0aGUgZWxlbWVudCBoYXMgYSB0YWJsZSB3aXRoaW4gYW55IG9mIGl0cyBwYXJlbnRzXG5cdFx0bGV0IG9QYXJlbnRFbGVtZW50ID0gb0VsZW1lbnQuZ2V0UGFyZW50KCk7XG5cdFx0d2hpbGUgKG9QYXJlbnRFbGVtZW50ICYmICFvUGFyZW50RWxlbWVudC5pc0E8TURDVGFibGU+KFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0b1BhcmVudEVsZW1lbnQgPSBvUGFyZW50RWxlbWVudC5nZXRQYXJlbnQoKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9QYXJlbnRFbGVtZW50ICYmIG9QYXJlbnRFbGVtZW50LmlzQTxNRENUYWJsZT4oXCJzYXAudWkubWRjLlRhYmxlXCIpID8gb1BhcmVudEVsZW1lbnQgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHRfZ2V0R3JpZFRhYmxlKG9NZGNUYWJsZTogTURDVGFibGUpOiBVSVRhYmxlIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gb01kY1RhYmxlLmZpbmRFbGVtZW50cyh0cnVlLCBmdW5jdGlvbiAob0VsZW06IENvbnRyb2wpIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdG9FbGVtLmlzQTxVSVRhYmxlPihcInNhcC51aS50YWJsZS5UYWJsZVwiKSAmJlxuXHRcdFx0XHQvKiogV2UgY2hlY2sgdGhlIGVsZW1lbnQgYmVsb25ncyB0byB0aGUgTWRjVGFibGUgOiovXG5cdFx0XHRcdG9FbGVtLmdldFBhcmVudCgpID09PSBvTWRjVGFibGVcblx0XHRcdCk7XG5cdFx0fSlbMF0gYXMgVUlUYWJsZSB8IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIHRhYmxlIHJvdyAoaWYgYXZhaWxhYmxlKSBjb250YWluaW5nIHRoZSBlbGVtZW50LlxuXHQgKiBAcGFyYW0gb0VsZW1lbnQgQ29udHJvbFxuXHQgKiBAcmV0dXJucyBUYWJsZSByb3cgfHwgdW5kZWZpbmVkXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0VGFibGVSb3cob0VsZW1lbnQ6IFVJNUVsZW1lbnQpOiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkIHtcblx0XHRsZXQgb1BhcmVudEVsZW1lbnQgPSBvRWxlbWVudC5nZXRQYXJlbnQoKTtcblx0XHR3aGlsZSAoXG5cdFx0XHRvUGFyZW50RWxlbWVudCAmJlxuXHRcdFx0IW9QYXJlbnRFbGVtZW50LmlzQTxSb3c+KFwic2FwLnVpLnRhYmxlLlJvd1wiKSAmJlxuXHRcdFx0IW9QYXJlbnRFbGVtZW50LmlzQTxDcmVhdGlvblJvdz4oXCJzYXAudWkudGFibGUuQ3JlYXRpb25Sb3dcIikgJiZcblx0XHRcdCFvUGFyZW50RWxlbWVudC5pc0E8Q29sdW1uTGlzdEl0ZW0+KENvbHVtbkxpc3RJdGVtLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpKVxuXHRcdCkge1xuXHRcdFx0b1BhcmVudEVsZW1lbnQgPSBvUGFyZW50RWxlbWVudC5nZXRQYXJlbnQoKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9QYXJlbnRFbGVtZW50ICYmXG5cdFx0XHQob1BhcmVudEVsZW1lbnQuaXNBPFJvdz4oXCJzYXAudWkudGFibGUuUm93XCIpIHx8XG5cdFx0XHRcdG9QYXJlbnRFbGVtZW50LmlzQTxDcmVhdGlvblJvdz4oXCJzYXAudWkudGFibGUuQ3JlYXRpb25Sb3dcIikgfHxcblx0XHRcdFx0b1BhcmVudEVsZW1lbnQuaXNBPENvbHVtbkxpc3RJdGVtPihDb2x1bW5MaXN0SXRlbS5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKSkpXG5cdFx0XHQ/IChvUGFyZW50RWxlbWVudCBhcyBVSTVFbGVtZW50KVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBpbmRleCBvZiB0aGUgdGFibGUgcm93IGNvbnRhaW5pbmcgdGhlIGVsZW1lbnQuXG5cdCAqIEBwYXJhbSBvRWxlbWVudCBDb250cm9sXG5cdCAqIEByZXR1cm5zIFJvdyBpbmRleCB8fCB1bmRlZmluZWRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9nZXRUYWJsZVJvd0luZGV4KG9FbGVtZW50OiBVSTVFbGVtZW50KTogbnVtYmVyIHtcblx0XHRjb25zdCBvVGFibGVSb3cgPSB0aGlzLl9nZXRUYWJsZVJvdyhvRWxlbWVudCk7XG5cdFx0bGV0IGlSb3dJbmRleDtcblx0XHRpZiAob1RhYmxlUm93Py5pc0E8Um93PihcInNhcC51aS50YWJsZS5Sb3dcIikpIHtcblx0XHRcdGlSb3dJbmRleCA9IG9UYWJsZVJvdy5nZXRJbmRleCgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpUm93SW5kZXggPSAob1RhYmxlUm93IGFzIHsgZ2V0VGFibGU/OiAoKSA9PiBSZXNwb25zaXZlVGFibGUgfSlcblx0XHRcdFx0Py5nZXRUYWJsZT8uKClcblx0XHRcdFx0LmdldEl0ZW1zKClcblx0XHRcdFx0LmZpbmRJbmRleChmdW5jdGlvbiAoZWxlbWVudDogVUk1RWxlbWVudCkge1xuXHRcdFx0XHRcdHJldHVybiBlbGVtZW50LmdldElkKCkgPT09IG9UYWJsZVJvdz8uZ2V0SWQoKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBpUm93SW5kZXggPz8gLTE7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBpbmRleCBvZiB0aGUgdGFibGUgY29sdW1uIGNvbnRhaW5pbmcgdGhlIGVsZW1lbnQuXG5cdCAqIEBwYXJhbSBlbGVtZW50IENvbnRyb2xcblx0ICogQHJldHVybnMgQ29sdW1uIGluZGV4IHx8IHVuZGVmaW5lZFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2dldFRhYmxlQ29sdW1uSW5kZXgoZWxlbWVudDogVUk1RWxlbWVudCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgZ2V0VGFyZ2V0Q2VsbEluZGV4ID0gZnVuY3Rpb24gKGVsdDogVUk1RWxlbWVudCwgdGFyZ2V0Um93OiBSb3cgfCB1bmRlZmluZWQpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuXHRcdFx0cmV0dXJuIHRhcmdldFJvdz8uZ2V0Q2VsbHMoKS5maW5kSW5kZXgoZnVuY3Rpb24gKGNlbGw6IENvbnRyb2wpIHtcblx0XHRcdFx0cmV0dXJuIGNlbGwuZ2V0SWQoKSA9PT0gZWx0LmdldElkKCk7XG5cdFx0XHR9KTtcblx0XHR9O1xuXHRcdGNvbnN0IGdldFRhcmdldENvbHVtbkluZGV4ID0gZnVuY3Rpb24gKGVsdDogVUk1RWxlbWVudCwgdGFyZ2V0Um93OiBSb3cgfCB1bmRlZmluZWQpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuXHRcdFx0bGV0IHRhcmdldEVsZW1lbnQgPSBlbHQuZ2V0UGFyZW50KCkgYXMgVUk1RWxlbWVudCxcblx0XHRcdFx0dGFyZ2V0Q2VsbEluZGV4ID0gZ2V0VGFyZ2V0Q2VsbEluZGV4KHRhcmdldEVsZW1lbnQsIHRhcmdldFJvdyk7XG5cdFx0XHR3aGlsZSAodGFyZ2V0RWxlbWVudCAmJiB0YXJnZXRDZWxsSW5kZXggJiYgdGFyZ2V0Q2VsbEluZGV4IDwgMCkge1xuXHRcdFx0XHR0YXJnZXRFbGVtZW50ID0gdGFyZ2V0RWxlbWVudC5nZXRQYXJlbnQoKSBhcyBVSTVFbGVtZW50O1xuXHRcdFx0XHR0YXJnZXRDZWxsSW5kZXggPSBnZXRUYXJnZXRDZWxsSW5kZXgodGFyZ2V0RWxlbWVudCwgdGFyZ2V0Um93KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0YXJnZXRDZWxsSW5kZXg7XG5cdFx0fTtcblx0XHRjb25zdCB0YXJnZXRSb3cgPSB0aGlzLl9nZXRUYWJsZVJvdyhlbGVtZW50KSBhcyBSb3cgfCB1bmRlZmluZWQ7XG5cblx0XHRsZXQgdGFyZ2V0Q29sdW1uSW5kZXggPSBnZXRUYXJnZXRDb2x1bW5JbmRleChlbGVtZW50LCB0YXJnZXRSb3cpO1xuXHRcdGlmICh0YXJnZXRSb3c/LmlzQTxDcmVhdGlvblJvdz4oXCJzYXAudWkudGFibGUuQ3JlYXRpb25Sb3dcIikpIHtcblx0XHRcdGNvbnN0IHRhcmdldENlbGxJZCA9IHRhcmdldENvbHVtbkluZGV4ID8gdGFyZ2V0Um93LmdldENlbGxzKClbdGFyZ2V0Q29sdW1uSW5kZXhdLmdldElkKCkgOiB1bmRlZmluZWQsXG5cdFx0XHRcdHRhYmxlQ29sdW1ucyA9IHRhcmdldFJvdy5nZXRUYWJsZSgpPy5nZXRDb2x1bW5zKCk7XG5cdFx0XHR0YXJnZXRDb2x1bW5JbmRleCA9IHRhYmxlQ29sdW1ucz8uZmluZEluZGV4KGZ1bmN0aW9uIChjb2x1bW46IENvbHVtbikge1xuXHRcdFx0XHRpZiAoY29sdW1uLmdldENyZWF0aW9uVGVtcGxhdGUoKSAmJiB0YXJnZXRDZWxsSWQpIHtcblx0XHRcdFx0XHRyZXR1cm4gdGFyZ2V0Q2VsbElkLnNlYXJjaChjb2x1bW4uZ2V0Q3JlYXRpb25UZW1wbGF0ZSgpLmdldElkKCkpID4gLTEgPyB0cnVlIDogZmFsc2U7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRhcmdldENvbHVtbkluZGV4O1xuXHR9XG5cblx0X2dldE1kY1RhYmxlUm93cyhvTWRjVGFibGU6IE1EQ1RhYmxlKTogUm93W10ge1xuXHRcdHJldHVybiBvTWRjVGFibGUuZmluZEVsZW1lbnRzKHRydWUsIGZ1bmN0aW9uIChvRWxlbTogQ29udHJvbCkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0b0VsZW0uaXNBPFJvdz4oXCJzYXAudWkudGFibGUuUm93XCIpICYmXG5cdFx0XHRcdC8qKiBXZSBjaGVjayB0aGUgZWxlbWVudCBiZWxvbmdzIHRvIHRoZSBNZGMgVGFibGUgOiovXG5cdFx0XHRcdChvRWxlbSBhcyB7IGdldFRhYmxlPzogKCkgPT4gVUk1RWxlbWVudCB9KS5nZXRUYWJsZT8uKCkuZ2V0UGFyZW50KCkgPT09IG9NZGNUYWJsZVxuXHRcdFx0KTtcblx0XHR9KSBhcyBSb3dbXTtcblx0fVxuXG5cdF9nZXRPYmplY3RQYWdlTGF5b3V0KG9FbGVtZW50OiBNYW5hZ2VkT2JqZWN0IHwgdW5kZWZpbmVkLCBvT2JqZWN0UGFnZUxheW91dD86IE9iamVjdFBhZ2VMYXlvdXQpOiBPYmplY3RQYWdlTGF5b3V0IHwgdW5kZWZpbmVkIHtcblx0XHRpZiAob09iamVjdFBhZ2VMYXlvdXQpIHtcblx0XHRcdHJldHVybiBvT2JqZWN0UGFnZUxheW91dDtcblx0XHR9XG5cdFx0bGV0IHRhcmdldEVsZW1lbnQgPSBvRWxlbWVudDtcblx0XHQvL0l0ZXJhdGUgb3ZlciBwYXJlbnQgdGlsbCB5b3UgaGF2ZSBub3QgcmVhY2hlZCB0aGUgb2JqZWN0IHBhZ2UgbGF5b3V0XG5cdFx0d2hpbGUgKHRhcmdldEVsZW1lbnQgJiYgIXRhcmdldEVsZW1lbnQuaXNBPE9iamVjdFBhZ2VMYXlvdXQ+KFwic2FwLnV4YXAuT2JqZWN0UGFnZUxheW91dFwiKSkge1xuXHRcdFx0dGFyZ2V0RWxlbWVudCA9IHRhcmdldEVsZW1lbnQuZ2V0UGFyZW50KCkgPz8gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRyZXR1cm4gdGFyZ2V0RWxlbWVudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbWV0aG9kIHRoYXQgaXMgY2FsbGVkIHRvIGNoZWNrIGlmIGEgbmF2aWdhdGlvbiBpcyBjb25maWd1cmVkIGZyb20gdGhlIHRhYmxlIHRvIGEgc3ViIG9iamVjdCBwYWdlLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0gdGFibGUgTWRjVGFibGVcblx0ICogQHJldHVybnMgRWl0aGVyIHRydWUgb3IgZmFsc2Vcblx0ICovXG5cdF9uYXZpZ2F0aW9uQ29uZmlndXJlZCh0YWJsZTogVGFibGUpOiBib29sZWFuIHtcblx0XHQvLyBUT0RPOiB0aGlzIGxvZ2ljIHdvdWxkIGJlIG1vdmVkIHRvIGNoZWNrIHRoZSBzYW1lIGF0IHRoZSB0ZW1wbGF0ZSB0aW1lIHRvIGF2b2lkIHRoZSBzYW1lIGNoZWNrIGhhcHBlbmluZyBtdWx0aXBsZSB0aW1lcy5cblx0XHRjb25zdCBjb21wb25lbnQgPSBzYXAudWkucmVxdWlyZShcInNhcC91aS9jb3JlL0NvbXBvbmVudFwiKSxcblx0XHRcdG5hdk9iamVjdCA9IHRhYmxlICYmIGNvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcih0YWJsZSkgJiYgY29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKHRhYmxlKS5nZXROYXZpZ2F0aW9uKCk7XG5cdFx0bGV0IHN1Yk9QQ29uZmlndXJlZCA9IGZhbHNlLFxuXHRcdFx0bmF2Q29uZmlndXJlZCA9IGZhbHNlO1xuXHRcdGlmIChuYXZPYmplY3QgJiYgT2JqZWN0LmtleXMobmF2T2JqZWN0KS5pbmNsdWRlcyh0YWJsZS5nZXRSb3dCaW5kaW5nKCkuZ2V0UGF0aCgpKSkge1xuXHRcdFx0c3ViT1BDb25maWd1cmVkID1cblx0XHRcdFx0bmF2T2JqZWN0W3RhYmxlPy5nZXRSb3dCaW5kaW5nKCkuZ2V0UGF0aCgpXSAmJlxuXHRcdFx0XHRuYXZPYmplY3RbdGFibGU/LmdldFJvd0JpbmRpbmcoKS5nZXRQYXRoKCldLmRldGFpbCAmJlxuXHRcdFx0XHRuYXZPYmplY3RbdGFibGU/LmdldFJvd0JpbmRpbmcoKS5nZXRQYXRoKCldLmRldGFpbC5yb3V0ZVxuXHRcdFx0XHRcdD8gdHJ1ZVxuXHRcdFx0XHRcdDogZmFsc2U7XG5cdFx0fVxuXHRcdG5hdkNvbmZpZ3VyZWQgPVxuXHRcdFx0c3ViT1BDb25maWd1cmVkICYmXG5cdFx0XHR0YWJsZT8uZ2V0Um93U2V0dGluZ3MoKS5nZXRSb3dBY3Rpb25zKCkgJiZcblx0XHRcdHRhYmxlPy5nZXRSb3dTZXR0aW5ncygpLmdldFJvd0FjdGlvbnMoKVswXS5nZXRUeXBlKCkuaW5jbHVkZXMoXCJOYXZpZ2F0aW9uXCIpO1xuXHRcdHJldHVybiBuYXZDb25maWd1cmVkO1xuXHR9XG5cblx0c2V0Rm9jdXNUb0NvbnRyb2woY29udHJvbD86IFVJNUVsZW1lbnQpOiB2b2lkIHtcblx0XHRjb25zdCBtZXNzYWdlUG9wb3ZlciA9IHRoaXMub01lc3NhZ2VQb3BvdmVyO1xuXHRcdGlmIChtZXNzYWdlUG9wb3ZlciAmJiBjb250cm9sICYmIGNvbnRyb2wuZm9jdXMpIHtcblx0XHRcdGNvbnN0IGZuRm9jdXMgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdGNvbnRyb2wuZm9jdXMoKTtcblx0XHRcdH07XG5cdFx0XHRpZiAoIW1lc3NhZ2VQb3BvdmVyLmlzT3BlbigpKSB7XG5cdFx0XHRcdC8vIHdoZW4gbmF2aWdhdGluZyB0byBwYXJlbnQgcGFnZSB0byBjaGlsZCBwYWdlIChvbiBjbGljayBvZiBtZXNzYWdlKSwgdGhlIGNoaWxkIHBhZ2UgbWlnaHQgaGF2ZSBhIGZvY3VzIGxvZ2ljIHRoYXQgbWlnaHQgdXNlIGEgdGltZW91dC5cblx0XHRcdFx0Ly8gd2UgdXNlIHRoZSBiZWxvdyB0aW1lb3V0cyB0byBvdmVycmlkZSB0aGlzIGZvY3VzIHNvIHRoYXQgd2UgZm9jdXMgb24gdGhlIHRhcmdldCBjb250cm9sIG9mIHRoZSBtZXNzYWdlIGluIHRoZSBjaGlsZCBwYWdlLlxuXHRcdFx0XHRzZXRUaW1lb3V0KGZuRm9jdXMsIDApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZm5PbkNsb3NlID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdHNldFRpbWVvdXQoZm5Gb2N1cywgMCk7XG5cdFx0XHRcdFx0bWVzc2FnZVBvcG92ZXIuZGV0YWNoRXZlbnQoXCJhZnRlckNsb3NlXCIsIGZuT25DbG9zZSk7XG5cdFx0XHRcdH07XG5cdFx0XHRcdG1lc3NhZ2VQb3BvdmVyLmF0dGFjaEV2ZW50KFwiYWZ0ZXJDbG9zZVwiLCBmbk9uQ2xvc2UpO1xuXHRcdFx0XHRtZXNzYWdlUG9wb3Zlci5jbG9zZSgpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRMb2cud2FybmluZyhcIkZFIFY0IDogTWVzc2FnZUJ1dHRvbiA6IGVsZW1lbnQgZG9lc24ndCBoYXZlIGZvY3VzIG1ldGhvZCBmb3IgZm9jdXNpbmcuXCIpO1xuXHRcdH1cblx0fVxuXG5cdGVzY2FwZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gU3RyaW5nKHZhbHVlKVxuXHRcdFx0LnJlcGxhY2UoLyYvZywgXCImYW1wO1wiKVxuXHRcdFx0LnJlcGxhY2UoL1wiL2csIFwiJnF1b3Q7XCIpXG5cdFx0XHQucmVwbGFjZSgvJy9nLCBcIiYjMzk7XCIpXG5cdFx0XHQucmVwbGFjZSgvPC9nLCBcIiZsdDtcIilcblx0XHRcdC5yZXBsYWNlKC8+L2csIFwiJmd0O1wiKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBNZXNzYWdlQnV0dG9uO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7TUE0RU1BLGFBQWEsSUFBQUMsSUFBQSxHQURsQkMsY0FBYyxDQUFDLHNDQUFzQyxDQUFDLEVBQUFD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
|
|
1529
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNZXNzYWdlQnV0dG9uIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJhZ2dyZWdhdGlvbiIsInR5cGUiLCJtdWx0aXBsZSIsInNpbmd1bGFyTmFtZSIsIl9kZWMzIiwiZXZlbnQiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0J1dHRvbiIsImlkIiwic2V0dGluZ3MiLCJfdGhpcyIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwic0dlbmVyYWxHcm91cFRleHQiLCJzVmlld0lkIiwic0xhc3RBY3Rpb25UZXh0IiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJpbml0IiwiQnV0dG9uIiwiYXBwbHkiLCJpc0hpZGRlbkRyYWZ0RW5hYmxlZCIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJnZXRDYXBhYmlsaXRpZXMiLCJIaWRkZW5EcmFmdCIsImVuYWJsZWQiLCJhdHRhY2hQcmVzcyIsImhhbmRsZU1lc3NhZ2VQb3BvdmVyUHJlc3MiLCJvTWVzc2FnZVBvcG92ZXIiLCJNZXNzYWdlUG9wb3ZlciIsIm9JdGVtQmluZGluZyIsImdldEJpbmRpbmciLCJhdHRhY2hDaGFuZ2UiLCJfc2V0TWVzc2FnZURhdGEiLCJtZXNzYWdlQnV0dG9uSWQiLCJnZXRJZCIsImFkZEN1c3RvbURhdGEiLCJDdXN0b21EYXRhIiwia2V5IiwidmFsdWUiLCJhdHRhY2hNb2RlbENvbnRleHRDaGFuZ2UiLCJfYXBwbHlGaWx0ZXJzQW5kU29ydCIsImJpbmQiLCJhdHRhY2hBY3RpdmVUaXRsZVByZXNzIiwiX2FjdGl2ZVRpdGxlUHJlc3MiLCJvRXZlbnQiLCJ0b2dnbGUiLCJnZXRTb3VyY2UiLCJfYXBwbHlHcm91cGluZ0FzeW5jIiwib1ZpZXciLCJhV2FpdEZvckRhdGEiLCJvVmlld0JpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJfZmluZFRhYmxlc1JlbGF0ZWRUb01lc3NhZ2VzIiwidmlldyIsIm9SZXMiLCJhTWVzc2FnZXMiLCJnZXRDb250ZXh0cyIsIm1hcCIsIm9Db250ZXh0IiwiZ2V0T2JqZWN0Iiwib1ZpZXdDb250ZXh0Iiwib09iamVjdFBhZ2UiLCJnZXRDb250ZW50IiwibWVzc2FnZUhhbmRsaW5nIiwiZ2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQiLCJmb3JFYWNoIiwib1NlY3Rpb24iLCJnZXRTdWJTZWN0aW9ucyIsIm9TdWJTZWN0aW9uIiwiZmluZEVsZW1lbnRzIiwib0VsZW0iLCJpc0EiLCJpIiwibGVuZ3RoIiwib1Jvd0JpbmRpbmciLCJnZXRSb3dCaW5kaW5nIiwic0VsZW1lQmluZGluZ1BhdGgiLCJnZXRQYXRoIiwidGFyZ2V0IiwiaW5kZXhPZiIsInB1c2giLCJ0YWJsZSIsInN1YnNlY3Rpb24iLCJvVGFibGVzIiwiX29UYWJsZSIsIm9NRENUYWJsZSIsIm9TdWJzZWN0aW9uIiwic2V0QmluZGluZ0NvbnRleHQiLCJpc0xlbmd0aEZpbmFsIiwiUHJvbWlzZSIsInJlc29sdmUiLCJhdHRhY2hFdmVudE9uY2UiLCJ3YWl0Rm9yR3JvdXBpbmdBcHBsaWVkIiwic2V0VGltZW91dCIsIl9hcHBseUdyb3VwaW5nIiwiYWxsIiwiZ2V0TW9kZWwiLCJjaGVja01lc3NhZ2VzIiwiZXJyIiwiTG9nIiwiZXJyb3IiLCJvT2JqZWN0UGFnZUxheW91dCIsIl9nZXRPYmplY3RQYWdlTGF5b3V0IiwibWVzc2FnZXMiLCJnZXRJdGVtcyIsInNlY3Rpb24iLCJlbmFibGVCaW5kaW5nIiwiX2NoZWNrQ29udHJvbElkSW5TZWN0aW9ucyIsIl9mbkVuYWJsZUJpbmRpbmdzIiwidmlld0lkIiwiX2dldFZpZXdJZCIsIlVJNUVsZW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsInVJTW9kZWwiLCJzZXRQcm9wZXJ0eSIsInVuZGVmaW5lZCIsIl9nZXRUYWJsZVJlZkVycm9yQ29udGV4dCIsIm9UYWJsZSIsIm9Nb2RlbCIsImdldFByb3BlcnR5Iiwic1JlZkVycm9yQ29udGV4dFBhdGgiLCJyZXBsYWNlIiwiZ2V0Q29udGV4dCIsIl91cGRhdGVJbnRlcm5hbE1vZGVsIiwidGFibGVSb3dDb250ZXh0Iiwicm93SW5kZXgiLCJ0YWJsZVRhcmdldENvbFByb3BlcnR5IiwibWVzc2FnZU9iamVjdCIsImlzQ3JlYXRpb25Sb3ciLCJ0ZW1wIiwidGFyZ2V0Q29sUHJvcGVydHkiLCJtb2RlbCIsImNvbnRleHQiLCJhVmFsaWRNZXNzYWdlSWRzIiwiTWVzc2FnaW5nIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsIm1lc3NhZ2UiLCJhT2Jzb2xldGVNZXNzYWdlbElkcyIsIk9iamVjdCIsImtleXMiLCJmaWx0ZXIiLCJpbnRlcm5hbE1lc3NhZ2VJZCIsIm9ic29sZXRlSWQiLCJhc3NpZ24iLCJfc2V0R3JvdXBMYWJlbEZvclRyYW5zaWVudE1zZyIsInNBY3Rpb25OYW1lIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiZ2V0VGV4dCIsInNldEdyb3VwTmFtZSIsIl9jb21wdXRlTWVzc2FnZUdyb3VwQW5kU3ViVGl0bGUiLCJzdWJTZWN0aW9uIiwiZWxlbWVudHMiLCJoYXNNdWx0aXBsZVN1YlNlY3Rpb25zIiwiYWN0aW9uTmFtZSIsInJlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwiZGV0YWNoQ2hhbmdlIiwic2V0U2VjdGlvbk5hbWVJbkdyb3VwIiwiZWxlbWVudCIsInRhcmdldFRhYmxlSW5mbyIsImwiLCJ0YXJnZXRlZENvbnRyb2wiLCJpc0JhY2tFbmRNZXNzYWdlIiwiUmVnRXhwIiwidGVzdCIsImdldFRhcmdldHMiLCJnZXRQYXJlbnQiLCJyb3dCaW5kaW5nIiwiZm5DYWxsYmFja1NldEdyb3VwTmFtZSIsIm9iaiIsImdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGUiLCJvVGFyZ2V0VGFibGVJbmZvIiwic3ViVGl0bGUiLCJzZXRTdWJ0aXRsZSIsInNldEFjdGl2ZVRpdGxlIiwib1RhYmxlUm93Q29udGV4dCIsImlzSW5hY3RpdmUiLCJfZm9ybWF0TWVzc2FnZURlc2NyaXB0aW9uIiwic1RhYmxlVGFyZ2V0Q29sTmFtZSIsImdldEluZGV4Iiwic1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkiLCJnZXRTdWJ0aXRsZSIsImZvcm1FbGVtZW50IiwicGFyZW50IiwibGFiZWwiLCJnZXRMYWJlbCIsImxhYmVsVGV4dCIsImlzVGFyZ2V0ZWRDb250cm9sT3JwaGFuIiwiYklzT3JwaGFuRWxlbWVudCIsIl9nZXRNZGNUYWJsZSIsInRhYmxlSGVhZGVyIiwiZ2V0SGVhZGVyIiwidGFyZ2V0Q29sdW1uSW5kZXgiLCJfZ2V0VGFibGVDb2x1bW5JbmRleCIsImdldENvbHVtbnMiLCJnZXRQcm9wZXJ0eUtleSIsIl9nZXRUYWJsZVJvdyIsIl9nZXRUYWJsZVJvd0luZGV4Iiwib1RhYmxlUm93QmluZGluZ0NvbnRleHRzIiwiZ2V0Q3VycmVudENvbnRleHRzIiwibWVzc2FnZVN1YnRpdGxlIiwiZ2V0TWVzc2FnZVN1YnRpdGxlIiwiZ2V0VmFsdWVTdGF0ZSIsImluY2x1ZGVUYWJsZUdyb3VwTmFtZSIsIl9jaGVja01lcmdlTG9naWNGb3JNZXNzYWdlR3JvdXBpbmciLCJzZWN0aW9uQmFzZWRHcm91cE5hbWUiLCJjcmVhdGVTZWN0aW9uR3JvdXBOYW1lIiwidmlld0NvbnRleHRQYXRoIiwibWVzc2FnZVRhcmdldFByb3BlcnR5TmFtZSIsInNwbGl0IiwicG9wIiwiaW50ZXJuYWxNb2RlbCIsImludGVybmFsTW9kZWxNZXNzYWdlVGFyZ2V0UHJvcGVydHlQYXRoIiwiaW50ZXJuYWxNb2RlbE1lc3NhZ2VUYXJnZXRQcm9wZXJ0eUNvbnRleHRQYXRoIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJzdGFydHNXaXRoIiwiZmlyZUFjdGl2ZVRpdGxlUHJlc3MiLCJpdGVtIiwiYkluY2x1ZGVUYWJsZUdyb3VwTmFtZSIsInNpbmdsZVN1YnNlY3Rpb25JblBhZ2VMYXlvdXQiLCJnZXRWaWV3RGF0YSIsInNlY3Rpb25MYXlvdXQiLCJtdWx0aVN1YnNlY3Rpb25JblRhYkxheW91dCIsImJsb2NrIiwiZ2V0QmxvY2tzIiwiY29udGVudCIsImdldEFnZ3JlZ2F0aW9uIiwiYmxvY2tzIiwiZ2V0TWFpbkNvbnRlbnQiLCJGdW5jdGlvbiIsImFTdWJTZWN0aW9ucyIsImoiLCJrIiwiYVZpc2libGVTZWN0aW9ucyIsImJJc0dlbmVyYWxHcm91cE5hbWUiLCJzaG91bGRCcmVhayIsIm9NZXNzYWdlT2JqZWN0IiwiX2dldEdlbmVyYWxHcm91cFRleHQiLCJhQ29udHJvbHMiLCJnZXRDb250cm9sRnJvbU1lc3NhZ2VSZWxhdGluZ1RvU3ViU2VjdGlvbiIsIm9UYXJnZXRlZENvbnRyb2wiLCJwZXJzaXN0ZW50IiwiZ2V0R3JvdXBOYW1lIiwiX2ZpbmRUYXJnZXRGb3JNZXNzYWdlIiwidmlld1BhdGgiLCJtZXNzYWdlVGFyZ2V0UGF0aCIsImluY2x1ZGVzIiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsImNvbnRleHRQYXRoIiwiZ2V0TWV0YVBhdGgiLCJvQ29udGV4dFBhdGhNZXRhZGF0YSIsIiRraW5kIiwiX2ZuRW5hYmxlU3ViU2VjdGlvbkJpbmRpbmciLCJnZXRNb3JlQmxvY2tzIiwic3ViQmxvY2siLCJnZXRBY3Rpb25zIiwiYWN0aW9ucyIsImFTZWN0aW9ucyIsImlTZWN0aW9uIiwiaVN1YlNlY3Rpb24iLCJvQWxsQmxvY2tzIiwiX2ZpbmRNZXNzYWdlR3JvdXBBZnRlclJlYmluZGluZyIsImF0dGFjaERhdGFSZWNlaXZlZCIsInNDb250cm9sSWQiLCJvQ29udHJvbCIsIlZpZXciLCJfc2V0TG9uZ3RleHRVcmxEZXNjcmlwdGlvbiIsIm9EaWFnbm9zaXNUaXRsZSIsInNldEFzeW5jRGVzY3JpcHRpb25IYW5kbGVyIiwiY29uZmlnIiwic0xvbmdUZXh0VXJsIiwiZ2V0TG9uZ3RleHRVcmwiLCJqUXVlcnkiLCJhamF4IiwidXJsIiwic3VjY2VzcyIsImRhdGEiLCJzRGlhZ25vc2lzVGV4dCIsImdldEh0bWxUZXh0Iiwib2xkRGVzY3JpcHRpb24iLCJnZXREZXNjcmlwdGlvbiIsInNldERlc2NyaXB0aW9uIiwicHJvbWlzZSIsInNFcnJvciIsInJlamVjdCIsInByb2Nlc3NUYWJsZUNvbHVtblByb3BlcnRpZXMiLCJ0YWJsZUNvbFByb3BlcnR5Iiwicm93SW5mb3JtYXRpb24iLCJ0YWJsZUNvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb24iLCJnZXRUYWJsZUNvbEJpbmRpbmdDb250ZXh0Rm9yVGV4dEFubm90YXRpb24iLCJ0YWJsZUNvbFRleHRBbm5vdGF0aW9uUGF0aCIsInRhYmxlQ29sVGV4dEFycmFuZ2VtZW50IiwibGFiZWxXaXRoVmFsdWUiLCJnZXRUYWJsZUNvbFZhbHVlIiwiY29tcHV0ZUNvbHVtbkluZm8iLCJ0YWJsZVRhcmdldENvbE5hbWUiLCJtc2dPYmoiLCJjb2xGcm9tVGFibGVTZXR0aW5ncyIsImZldGNoQ29sdW1uSW5mbyIsImNvbHVtbkluZm8iLCJhdmFpbGFiaWxpdHkiLCJnZXRUeXBlIiwiam9pbiIsIl9uYXZpZ2F0aW9uQ29uZmlndXJlZCIsImdldFRhYmxlQ29sdW1uVmlzaWJpbGl0eUluZm8iLCJfcmVmIiwidmlzaWJpbGl0eSIsImZpZWxkc0FmZmVjdGVkVGl0bGUiLCJGb3JtYXR0ZWRUZXh0IiwiaHRtbFRleHQiLCJmaWVsZEFmZmVjdGVkVGV4dCIsIkFycmF5IiwiaXNBcnJheSIsImRpYWdub3Npc1RpdGxlIiwidUlNZXNzYWdlRGVzY3JpcHRpb24iLCJkZXNjcmlwdGlvbiIsImRpYWdub3Npc1RleHQiLCJtZXNzYWdlRGVzY3JpcHRpb25Db250ZW50IiwiaGFuZGxlTm9NZXNzYWdlcyIsInNldFZpc2libGUiLCJmaXJlRXZlbnQiLCJpTWVzc2FnZUxlbmd0aCIsImNsZWFyVGltZW91dCIsIl9zZXRNZXNzYWdlRGF0YVRpbWVvdXQiLCJnZXRTaG93Rm9vdGVyIiwiY2xvc2UiLCJzSWNvbiIsIm9NZXNzYWdlcyIsIm9NZXNzYWdlQ291bnQiLCJFcnJvciIsIldhcm5pbmciLCJTdWNjZXNzIiwiSW5mb3JtYXRpb24iLCJvUmVzb3VyY2VCdW5kbGUiLCJzQnV0dG9uVHlwZSIsIkJ1dHRvblR5cGUiLCJEZWZhdWx0IiwibWVzc2FnZUtleSIsIm1lc3NhZ2VUZXh0IiwidG9TdHJpbmciLCJNZXNzYWdlVHlwZSIsIk5lZ2F0aXZlIiwiQ3JpdGljYWwiLCJOZXV0cmFsIiwidG90YWxOdW1iZXJPZk1lc3NhZ2VzIiwic2V0VGV4dCIsIm1lc3NhZ2VDb3VudCIsIm1lc3NhZ2VLZXlzIiwic2luZ2xlVG9vbHRpcEtleSIsIm11bHRpcGxlVG9vbHRpcEtleSIsImVudHJpZXMiLCJtZXNzYWdlVHlwZSIsIm1lc3NhZ2VUeXBlQ291bnQiLCJNRVNTQUdFQlVUVE9OX1NIT1JUQ1VUIiwidG9vbFRpcCIsInNldFRvb2x0aXAiLCJzZXRJY29uIiwic2V0VHlwZSIsIm9QYWdlUmVhZHkiLCJnZXRDb250cm9sbGVyIiwicGFnZVJlYWR5Iiwid2FpdFBhZ2VSZWFkeSIsIm5hdmlnYXRlQmFjayIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsIm9JdGVtIiwiZ2V0UGFyYW1ldGVyIiwib01lc3NhZ2UiLCJiSXNCYWNrZW5kTWVzc2FnZSIsInNTZWN0aW9uVGl0bGUiLCJfZGVmYXVsdEZvY3VzIiwibWRjVGFibGUiLCJmb2N1c0luZm8iLCJwcmV2ZW50U2Nyb2xsIiwidGFyZ2V0SW5mbyIsImZvY3VzIiwic3ViU2VjdGlvbnMiLCJ2aXNpYmxlU2VjdGlvbnMiLCJjb250cm9scyIsIm9UYXJnZXRNZGNUYWJsZSIsImNvbnRyb2xJZHMiLCJjb250cm9sSWQiLCJjb250cm9sIiwicGFyZW50Q29udHJvbCIsInJlZHVjZSIsImFjYyIsInZhbCIsIl9yb3V0aW5nIiwibmF2aWdhdGVUb0NvbnRleHQiLCJfbmF2aWdhdGVGcm9tTWVzc2FnZVRvU2VjdGlvblRhYmxlSW5JY29uVGFiQmFyTW9kZSIsIm9SZWZFcnJvckNvbnRleHQiLCJvUmVmRXJyb3IiLCJfc2V0Rm9jdXNPblRhcmdldEZpZWxkIiwidGFyZ2V0TWRjVGFibGUiLCJpUm93SW5kZXgiLCJhVGFyZ2V0TWRjVGFibGVSb3ciLCJfZ2V0TWRjVGFibGVSb3dzIiwiaUZpcnN0VmlzaWJsZVJvdyIsIl9nZXRHcmlkVGFibGUiLCJnZXRGaXJzdFZpc2libGVSb3ciLCJvVGFyZ2V0Um93Iiwib1RhcmdldENlbGwiLCJnZXRUYXJnZXRDZWxsIiwic2V0Rm9jdXNUb0NvbnRyb2wiLCJlcnJvclByb3BlcnR5UGF0aCIsIm5hdmlnYXRlRm9yd2FyZFRvQ29udGV4dCIsInNjcm9sbFRvSW5kZXgiLCJmb2N1c09uVGFyZ2V0RmllbGQiLCJmb2N1c09uTWVzc2FnZVRhcmdldENvbnRyb2wiLCJzZWN0aW9ucyIsImdldFNlY3Rpb25zIiwic2VjdGlvbldpdGhUaGVDb250cm9sIiwiZmluZCIsIl9uYXZpZ2F0ZUZyb21NZXNzYWdlVG9TZWN0aW9uSW5JY29uVGFiQmFyTW9kZSIsImhhbmRsZU1lc3NhZ2VOYXZpZ2F0aW9uIiwiZ2V0Q29udHJvbElkcyIsImZpbmRTdWJTZWN0aW9uIiwic2V0TW9kZSIsImdyb3VwTmFtZXMiLCJmaW5kU3ViU2VjdGlvbkJ5VGl0bGVPckNvbnRyb2wiLCJ0aXRsZSIsImdldFRpdGxlIiwic29tZSIsInRhcmdldFJvdyIsImhhc05vbkVkaXRhYmxlRmllbGQiLCJnZXRFZGl0YWJsZSIsImlzQ29udHJvbEluVGFibGUiLCJlbGVtIiwiYUFsbFZpZXdFbGVtZW50cyIsImFFcnJvbmVvdXNDb250cm9scyIsImdldERvbVJlZiIsImFOb3RUYWJsZUVycm9uZW91c0NvbnRyb2xzIiwiQ29sdW1uTGlzdEl0ZW0iLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJvVGFyZ2V0RmllbGQiLCJnZXRDb250ZW50RWRpdCIsIl9nZXRNZXNzYWdlUmFuayIsImFFbGVtZW50cyIsImFBbGxFbGVtZW50cyIsInNlY3Rpb25SYW5rIiwiX2ZuRmlsdGVyVXBvbklkIiwiZ2V0Q29udHJvbElkIiwiZ2V0VmlzaWJsZSIsImhhc093blByb3BlcnR5Iiwic2VjdGlvbk5hbWUiLCJzdWJTZWN0aW9uTmFtZSIsImdldFBlcnNpc3RlbnQiLCJfZmlsdGVyT3V0TWVzc2FnZXNJbkRpYWxvZyIsImZuVGVzdCIsImFDb250cm9sSWRzIiwiaXNNZXNzYWdlT3V0T2ZQYXJhbWV0ZXJEaWFsb2ciLCJGaWx0ZXIiLCJwYXRoIiwiY2FzZVNlbnNpdGl2ZSIsIl9maWx0ZXJPdXRDb250ZXh0U3VjY2Vzc01lc3NhZ2VzIiwiYm91bmRDb250ZXh0U3VjY2Vzc01lc3NhZ2VzIiwiX2dldEZpbHRlclRvSGlkZUJhY2tlbmRNZXNzYWdlT25FcnJvclZhbGlkYXRpb24iLCJnZXRJZHNPZkZpZWxzZFdpdGhFcnJvclZhbGlkYXRpb24iLCJ2YWxpZGF0aW9uIiwibWF0Y2giLCJmaWx0ZXJzIiwib3BlcmF0b3IiLCJGaWx0ZXJPcGVyYXRvciIsIkVRIiwidmFsdWUxIiwiYW5kIiwib1ZhbGlkYXRpb25GaWx0ZXJzIiwiaGlkZGVuRHJhZnRGaWx0ZXIiLCJvVmFsaWRhdGlvbkFuZENvbnRleHRGaWx0ZXIiLCJvRmlsdGVycyIsInNQYXRoIiwib1NvcnRlciIsIm9EaWFsb2dGaWx0ZXIiLCJvYmplY3RQYWdlTGF5b3V0U2VjdGlvbnMiLCJhVXNlckRlZmluZWRGaWx0ZXIiLCJhQ3VzdG9tRmlsdGVycyIsInZhbHVlMiIsIm9CaW5kaW5nQ29udGV4dCIsIm1lc3NhZ2VCdXR0b25IZWxwZXIiLCJnZXRDaGVja0NvbnRyb2xJblZpZXdGaWx0ZXIiLCJvQ29udGV4dFN1Y2Nlc3NGaWx0ZXJzIiwiZmlsdGVyQXJyYXkiLCJ2aWV3Q29udGV4dCIsImVkaXRGbG93IiwiZ2V0Um9vdENvbnRleHQiLCJnZXRIaWRkZW5EcmFmdFVzZUNhc2VGaWx0ZXIiLCJ2YWxpZGF0aW9uQW5kSGlkZGVuRHJhZnRGaWx0ZXIiLCJTdGFydHNXaXRoIiwib1ZhbGlkYXRpb25Db250ZXh0RGlhbG9nRmlsdGVycyIsIlNvcnRlciIsIm9iajEiLCJvYmoyIiwicmFua0EiLCJyYW5rQiIsInNvcnQiLCJfZ2V0U2VjdGlvbkJ5U2VjdGlvblRpdGxlIiwiYlVzZUljb25UYWJCYXIiLCJnZXRVc2VJY29uVGFiQmFyIiwic1NlbGVjdGVkU2VjdGlvbklkIiwiZ2V0U2VsZWN0ZWRTZWN0aW9uIiwic2V0U2VsZWN0ZWRTZWN0aW9uIiwib1RhYmxlQ29udGV4dCIsIm9PUENvbnRleHQiLCJiU2hvdWxkV2FpdEZvclRhYmxlUmVmcmVzaCIsIm9FbGVtZW50Iiwib1BhcmVudEVsZW1lbnQiLCJvTWRjVGFibGUiLCJvVGFibGVSb3ciLCJnZXRUYWJsZSIsImZpbmRJbmRleCIsImdldFRhcmdldENlbGxJbmRleCIsImVsdCIsImdldENlbGxzIiwiY2VsbCIsImdldFRhcmdldENvbHVtbkluZGV4IiwidGFyZ2V0RWxlbWVudCIsInRhcmdldENlbGxJbmRleCIsInRhcmdldENlbGxJZCIsInRhYmxlQ29sdW1ucyIsImNvbHVtbiIsImdldENyZWF0aW9uVGVtcGxhdGUiLCJzZWFyY2giLCJjb21wb25lbnQiLCJzYXAiLCJ1aSIsInJlcXVpcmUiLCJuYXZPYmplY3QiLCJnZXRPd25lckNvbXBvbmVudEZvciIsImdldE5hdmlnYXRpb24iLCJzdWJPUENvbmZpZ3VyZWQiLCJuYXZDb25maWd1cmVkIiwiZGV0YWlsIiwicm91dGUiLCJnZXRSb3dTZXR0aW5ncyIsImdldFJvd0FjdGlvbnMiLCJtZXNzYWdlUG9wb3ZlciIsImZuRm9jdXMiLCJpc09wZW4iLCJmbk9uQ2xvc2UiLCJkZXRhY2hFdmVudCIsImF0dGFjaEV2ZW50Iiwid2FybmluZyIsImVzY2FwZSIsIlN0cmluZyIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiTWVzc2FnZUJ1dHRvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgRW5oYW5jZVdpdGhVSTUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBhZ2dyZWdhdGlvbiwgZGVmaW5lVUk1Q2xhc3MsIGV2ZW50IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyBUYXJnZXRUYWJsZUluZm9UeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL21lc3NhZ2VIYW5kbGVyL21lc3NhZ2VIYW5kbGluZ1wiO1xuaW1wb3J0IG1lc3NhZ2VIYW5kbGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvbWVzc2FnZUhhbmRsZXIvbWVzc2FnZUhhbmRsaW5nXCI7XG5pbXBvcnQgdHlwZSB7IEhpZGRlbkRyYWZ0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgdHlwZSBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIEZpZWxkIGZyb20gXCJzYXAvZmUvbWFjcm9zL0ZpZWxkXCI7XG5pbXBvcnQgdHlwZSBGaWVsZFdyYXBwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udHJvbHMvRmllbGRXcmFwcGVyXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlRmlsdGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL21lc3NhZ2VzL01lc3NhZ2VGaWx0ZXJcIjtcbmltcG9ydCBNZXNzYWdlUG9wb3ZlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9tZXNzYWdlcy9NZXNzYWdlUG9wb3ZlclwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCB0eXBlIHsgVGFibGVDb2x1bW5Qcm9wZXJ0aWVzIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvT2JqZWN0UGFnZUNvbnRyb2xsZXIuY29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgU3ViU2VjdGlvbkJsb2NrIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvY29udHJvbHMvU3ViU2VjdGlvbkJsb2NrXCI7XG5pbXBvcnQgdHlwZSB7ICRCdXR0b25TZXR0aW5ncyB9IGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgQnV0dG9uIH0gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IENvbHVtbkxpc3RJdGVtIGZyb20gXCJzYXAvbS9Db2x1bW5MaXN0SXRlbVwiO1xuaW1wb3J0IEZvcm1hdHRlZFRleHQgZnJvbSBcInNhcC9tL0Zvcm1hdHRlZFRleHRcIjtcbmltcG9ydCB0eXBlIEhCb3ggZnJvbSBcInNhcC9tL0hCb3hcIjtcbmltcG9ydCB0eXBlIExhYmVsIGZyb20gXCJzYXAvbS9MYWJlbFwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZUl0ZW0gZnJvbSBcInNhcC9tL01lc3NhZ2VJdGVtXCI7XG5pbXBvcnQgdHlwZSB7IE1lc3NhZ2VQb3BvdmVyJEFjdGl2ZVRpdGxlUHJlc3NFdmVudCB9IGZyb20gXCJzYXAvbS9NZXNzYWdlUG9wb3ZlclwiO1xuaW1wb3J0IHR5cGUgUmVzcG9uc2l2ZVRhYmxlIGZyb20gXCJzYXAvbS9UYWJsZVwiO1xuaW1wb3J0IHsgQnV0dG9uVHlwZSB9IGZyb20gXCJzYXAvbS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBDb3JlRXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgQ3VzdG9tRGF0YSBmcm9tIFwic2FwL3VpL2NvcmUvQ3VzdG9tRGF0YVwiO1xuaW1wb3J0IFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgTWVzc2FnZVR5cGUgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVR5cGVcIjtcbmltcG9ydCBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IHR5cGUgRHluYW1pY1NpZGVDb250ZW50IGZyb20gXCJzYXAvdWkvbGF5b3V0L0R5bmFtaWNTaWRlQ29udGVudFwiO1xuaW1wb3J0IHR5cGUgRm9ybUVsZW1lbnQgZnJvbSBcInNhcC91aS9sYXlvdXQvZm9ybS9Gb3JtRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgbWRjRmllbGQgZnJvbSBcInNhcC91aS9tZGMvRmllbGRcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBNRENUYWJsZSwgZGVmYXVsdCBhcyBUYWJsZSB9IGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBDb250ZW50IGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9iYXNlL0NvbnRlbnRcIjtcbmltcG9ydCB0eXBlIEJhc2VDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyT3BlcmF0b3JcIjtcbmltcG9ydCBTb3J0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9Tb3J0ZXJcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YVY0Q29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBDb2x1bW4gZnJvbSBcInNhcC91aS90YWJsZS9Db2x1bW5cIjtcbmltcG9ydCB0eXBlIENyZWF0aW9uUm93IGZyb20gXCJzYXAvdWkvdGFibGUvQ3JlYXRpb25Sb3dcIjtcbmltcG9ydCB0eXBlIFJvdyBmcm9tIFwic2FwL3VpL3RhYmxlL1Jvd1wiO1xuaW1wb3J0IHR5cGUgVUlUYWJsZSBmcm9tIFwic2FwL3VpL3RhYmxlL1RhYmxlXCI7XG5pbXBvcnQgalF1ZXJ5IGZyb20gXCJzYXAvdWkvdGhpcmRwYXJ0eS9qcXVlcnlcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VMYXlvdXQgZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VMYXlvdXRcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VTZWN0aW9uIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlU2VjdGlvblwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZVN1YlNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTdWJTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBTdWJTZWN0aW9uIGZyb20gXCIuLi9jb250cm9scy9zZWN0aW9uL1N1YlNlY3Rpb25cIjtcbmltcG9ydCBtZXNzYWdlQnV0dG9uSGVscGVyIGZyb20gXCIuL01lc3NhZ2VCdXR0b25IZWxwZXJcIjtcblxudHlwZSBNZXNzYWdlQ291bnQgPSB7XG5cdEVycm9yOiBudW1iZXI7XG5cdFdhcm5pbmc6IG51bWJlcjtcblx0U3VjY2VzczogbnVtYmVyO1xuXHRJbmZvcm1hdGlvbjogbnVtYmVyO1xufTtcblxudHlwZSAkTWVzc2FnZUJ1dHRvblNldHRpbmdzID0gJEJ1dHRvblNldHRpbmdzICYge1xuXHRtZXNzYWdlQ2hhbmdlOiBGdW5jdGlvbjtcbn07XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5tYWNyb3MubWVzc2FnZXMuTWVzc2FnZUJ1dHRvblwiKVxuY2xhc3MgTWVzc2FnZUJ1dHRvbiBleHRlbmRzIEJ1dHRvbiB7XG5cdGNvbnN0cnVjdG9yKGlkPzogc3RyaW5nIHwgJE1lc3NhZ2VCdXR0b25TZXR0aW5ncywgc2V0dGluZ3M/OiAkTWVzc2FnZUJ1dHRvblNldHRpbmdzKSB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRzdXBlcihpZCwgc2V0dGluZ3MpO1xuXHR9XG5cblx0QGFnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAuZmUubWFjcm9zLm1lc3NhZ2VzLk1lc3NhZ2VGaWx0ZXJcIiwgbXVsdGlwbGU6IHRydWUsIHNpbmd1bGFyTmFtZTogXCJjdXN0b21GaWx0ZXJcIiB9KVxuXHRjdXN0b21GaWx0ZXJzITogTWVzc2FnZUZpbHRlcjtcblxuXHRAZXZlbnQoKVxuXHRtZXNzYWdlQ2hhbmdlITogRnVuY3Rpb247XG5cblx0cHVibGljIG9NZXNzYWdlUG9wb3ZlciE6IE1lc3NhZ2VQb3BvdmVyO1xuXG5cdHB1YmxpYyBvSXRlbUJpbmRpbmchOiBPRGF0YUxpc3RCaW5kaW5nO1xuXG5cdHByaXZhdGUgb09iamVjdFBhZ2VMYXlvdXQ6IE9iamVjdFBhZ2VMYXlvdXQgfCB1bmRlZmluZWQ7XG5cblx0cHJpdmF0ZSBzR2VuZXJhbEdyb3VwVGV4dCA9IFwiXCI7XG5cblx0cHJpdmF0ZSBfc2V0TWVzc2FnZURhdGFUaW1lb3V0OiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cblx0cHJpdmF0ZSBzVmlld0lkID0gXCJcIjtcblxuXHRwcml2YXRlIHNMYXN0QWN0aW9uVGV4dCA9IFwiXCI7XG5cblx0cHVibGljIGlzSGlkZGVuRHJhZnRFbmFibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG5cdGluaXQoKTogdm9pZCB7XG5cdFx0QnV0dG9uLnByb3RvdHlwZS5pbml0LmFwcGx5KHRoaXMpO1xuXHRcdHRoaXMuaXNIaWRkZW5EcmFmdEVuYWJsZWQgPSAoXG5cdFx0XHRDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcyk/LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCk/LmdldENhcGFiaWxpdGllcygpPy5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdFxuXHRcdCk/LmVuYWJsZWQ7XG5cdFx0Ly9wcmVzcyBldmVudCBoYW5kbGVyIGF0dGFjaGVkIHRvIG9wZW4gdGhlIG1lc3NhZ2UgcG9wb3ZlclxuXHRcdHRoaXMuYXR0YWNoUHJlc3ModGhpcy5oYW5kbGVNZXNzYWdlUG9wb3ZlclByZXNzLCB0aGlzKTtcblx0XHR0aGlzLm9NZXNzYWdlUG9wb3ZlciA9IG5ldyBNZXNzYWdlUG9wb3ZlcigpO1xuXHRcdHRoaXMub0l0ZW1CaW5kaW5nID0gdGhpcy5vTWVzc2FnZVBvcG92ZXIuZ2V0QmluZGluZyhcIml0ZW1zXCIpIGFzIE9EYXRhTGlzdEJpbmRpbmc7XG5cdFx0dGhpcy5vSXRlbUJpbmRpbmcuYXR0YWNoQ2hhbmdlKHRoaXMuX3NldE1lc3NhZ2VEYXRhLCB0aGlzKTtcblx0XHRjb25zdCBtZXNzYWdlQnV0dG9uSWQgPSB0aGlzLmdldElkKCk7XG5cdFx0aWYgKG1lc3NhZ2VCdXR0b25JZCkge1xuXHRcdFx0dGhpcy5vTWVzc2FnZVBvcG92ZXIuYWRkQ3VzdG9tRGF0YShuZXcgQ3VzdG9tRGF0YSh7IGtleTogXCJtZXNzYWdlQnV0dG9uSWRcIiwgdmFsdWU6IG1lc3NhZ2VCdXR0b25JZCB9KSk7IC8vIFRPRE8gY2hlY2sgZm9yIGN1c3RvbSBkYXRhIHR5cGVcblx0XHR9XG5cdFx0dGhpcy5hdHRhY2hNb2RlbENvbnRleHRDaGFuZ2UodGhpcy5fYXBwbHlGaWx0ZXJzQW5kU29ydC5iaW5kKHRoaXMpKTtcblx0XHR0aGlzLm9NZXNzYWdlUG9wb3Zlci5hdHRhY2hBY3RpdmVUaXRsZVByZXNzKHRoaXMuX2FjdGl2ZVRpdGxlUHJlc3MuYmluZCh0aGlzKSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIG1ldGhvZCB0aGF0IGlzIGNhbGxlZCB3aGVuIGEgdXNlciBjbGlja3Mgb24gdGhlIE1lc3NhZ2VCdXR0b24gY29udHJvbC5cblx0ICogQHBhcmFtIG9FdmVudCBFdmVudCBvYmplY3Rcblx0ICovXG5cdGhhbmRsZU1lc3NhZ2VQb3BvdmVyUHJlc3Mob0V2ZW50OiBDb3JlRXZlbnQpOiB2b2lkIHtcblx0XHR0aGlzLm9NZXNzYWdlUG9wb3Zlci50b2dnbGUob0V2ZW50LmdldFNvdXJjZSgpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbWV0aG9kIHRoYXQgZ3JvdXBzIHRoZSBtZXNzYWdlcyBiYXNlZCBvbiB0aGUgc2VjdGlvbiBvciBzdWJzZWN0aW9uIHRoZXkgYmVsb25nIHRvLlxuXHQgKiBUaGlzIG1ldGhvZCBmb3JjZSB0aGUgbG9hZGluZyBvZiBjb250ZXh0cyBmb3IgYWxsIHRhYmxlcyBiZWZvcmUgdG8gYXBwbHkgdGhlIGdyb3VwaW5nLlxuXHQgKiBAcGFyYW0gb1ZpZXcgQ3VycmVudCB2aWV3LlxuXHQgKiBAcmV0dXJucyBSZXR1cm4gcHJvbWlzZS5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdGFzeW5jIF9hcHBseUdyb3VwaW5nQXN5bmMob1ZpZXc6IEZFVmlldyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGFXYWl0Rm9yRGF0YTogUHJvbWlzZTx2b2lkPltdID0gW107XG5cdFx0Y29uc3Qgb1ZpZXdCaW5kaW5nQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Y29uc3QgX2ZpbmRUYWJsZXNSZWxhdGVkVG9NZXNzYWdlcyA9ICh2aWV3OiBWaWV3KTogeyB0YWJsZTogTURDVGFibGU7IHN1YnNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uIH1bXSA9PiB7XG5cdFx0XHRjb25zdCBvUmVzOiB7IHRhYmxlOiBNRENUYWJsZTsgc3Vic2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24gfVtdID0gW107XG5cdFx0XHRjb25zdCBhTWVzc2FnZXMgPSB0aGlzLm9JdGVtQmluZGluZy5nZXRDb250ZXh0cygpLm1hcChmdW5jdGlvbiAob0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0KSB7XG5cdFx0XHRcdHJldHVybiBvQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3Qgb1ZpZXdDb250ZXh0ID0gdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdFx0aWYgKG9WaWV3Q29udGV4dCkge1xuXHRcdFx0XHRjb25zdCBvT2JqZWN0UGFnZTogQ29udHJvbCA9IHZpZXcuZ2V0Q29udGVudCgpWzBdO1xuXHRcdFx0XHRtZXNzYWdlSGFuZGxpbmcuZ2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQob09iamVjdFBhZ2UpLmZvckVhY2goZnVuY3Rpb24gKG9TZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbikge1xuXHRcdFx0XHRcdG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1N1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uKSB7XG5cdFx0XHRcdFx0XHRvU3ViU2VjdGlvbi5maW5kRWxlbWVudHModHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAob0VsZW06IFVJNUVsZW1lbnQpIHtcblx0XHRcdFx0XHRcdFx0aWYgKG9FbGVtLmlzQTxNRENUYWJsZT4oXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhTWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9Sb3dCaW5kaW5nID0gb0VsZW0uZ2V0Um93QmluZGluZygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKG9Sb3dCaW5kaW5nKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHNFbGVtZUJpbmRpbmdQYXRoID0gYCR7b1ZpZXdDb250ZXh0LmdldFBhdGgoKX0vJHtvRWxlbS5nZXRSb3dCaW5kaW5nKCkuZ2V0UGF0aCgpfWA7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChhTWVzc2FnZXNbaV0udGFyZ2V0LmluZGV4T2Yoc0VsZW1lQmluZGluZ1BhdGgpID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b1Jlcy5wdXNoKHsgdGFibGU6IG9FbGVtLCBzdWJzZWN0aW9uOiBvU3ViU2VjdGlvbiB9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG9SZXM7XG5cdFx0fTtcblx0XHQvLyBTZWFyY2ggZm9yIHRhYmxlIHJlbGF0ZWQgdG8gTWVzc2FnZXMgYW5kIGluaXRpYWxpemUgdGhlIGJpbmRpbmcgY29udGV4dCBvZiB0aGUgcGFyZW50IHN1YnNlY3Rpb24gdG8gcmV0cmlldmUgdGhlIGRhdGFcblx0XHRjb25zdCBvVGFibGVzID0gX2ZpbmRUYWJsZXNSZWxhdGVkVG9NZXNzYWdlcy5iaW5kKHRoaXMpKG9WaWV3KTtcblx0XHRvVGFibGVzLmZvckVhY2goZnVuY3Rpb24gKF9vVGFibGUpIHtcblx0XHRcdGNvbnN0IG9NRENUYWJsZSA9IF9vVGFibGUudGFibGUsXG5cdFx0XHRcdG9TdWJzZWN0aW9uID0gX29UYWJsZS5zdWJzZWN0aW9uO1xuXHRcdFx0aWYgKCFvTURDVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoKSB8fCBvTURDVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpICE9PSBvVmlld0JpbmRpbmdDb250ZXh0Py5nZXRQYXRoKCkpIHtcblx0XHRcdFx0b1N1YnNlY3Rpb24uc2V0QmluZGluZ0NvbnRleHQob1ZpZXdCaW5kaW5nQ29udGV4dCk7XG5cdFx0XHRcdGlmICghb01EQ1RhYmxlLmdldFJvd0JpbmRpbmcoKS5pc0xlbmd0aEZpbmFsKCkpIHtcblx0XHRcdFx0XHRhV2FpdEZvckRhdGEucHVzaChcblx0XHRcdFx0XHRcdG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlOiBGdW5jdGlvbikge1xuXHRcdFx0XHRcdFx0XHRvTURDVGFibGUuZ2V0Um93QmluZGluZygpLmF0dGFjaEV2ZW50T25jZShcImRhdGFSZWNlaXZlZFwiLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGNvbnN0IHdhaXRGb3JHcm91cGluZ0FwcGxpZWQgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24pID0+IHtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLl9hcHBseUdyb3VwaW5nKCk7XG5cdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdH0sIDApO1xuXHRcdH0pO1xuXHRcdHRyeSB7XG5cdFx0XHRhd2FpdCBQcm9taXNlLmFsbChhV2FpdEZvckRhdGEpO1xuXHRcdFx0b1ZpZXcuZ2V0TW9kZWwoKS5jaGVja01lc3NhZ2VzKCk7XG5cdFx0XHRhd2FpdCB3YWl0Rm9yR3JvdXBpbmdBcHBsaWVkO1xuXHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgZ3JvdXBpbmcgdGhlIG1lc3NhZ2VzIGluIHRoZSBtZXNzYWdlUG9wT3ZlclwiKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhlIG1ldGhvZCB0aGF0IGdyb3VwcyB0aGUgbWVzc2FnZXMgYmFzZWQgb24gdGhlIHNlY3Rpb24gb3Igc3Vic2VjdGlvbiB0aGV5IGJlbG9uZyB0by5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9hcHBseUdyb3VwaW5nKCk6IHZvaWQge1xuXHRcdHRoaXMub09iamVjdFBhZ2VMYXlvdXQgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0KHRoaXMsIHRoaXMub09iamVjdFBhZ2VMYXlvdXQpO1xuXHRcdGlmICghdGhpcy5vT2JqZWN0UGFnZUxheW91dCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBtZXNzYWdlczogTWVzc2FnZUl0ZW1bXSA9IHRoaXMub01lc3NhZ2VQb3BvdmVyLmdldEl0ZW1zKCk7XG5cdFx0Y29uc3Qgc2VjdGlvbiA9IG1lc3NhZ2VIYW5kbGluZy5nZXRWaXNpYmxlU2VjdGlvbnNGcm9tT2JqZWN0UGFnZUxheW91dCh0aGlzLm9PYmplY3RQYWdlTGF5b3V0KTtcblx0XHRjb25zdCBlbmFibGVCaW5kaW5nID0gdGhpcy5fY2hlY2tDb250cm9sSWRJblNlY3Rpb25zKG1lc3NhZ2VzLCBmYWxzZSk7XG5cdFx0aWYgKGVuYWJsZUJpbmRpbmcpIHtcblx0XHRcdHRoaXMuX2ZuRW5hYmxlQmluZGluZ3Moc2VjdGlvbik7XG5cdFx0fVxuXHRcdC8vQ2xlYXIgbWVzc2FnZVRhcmdldFByb3BlcnR5XG5cdFx0Y29uc3Qgdmlld0lkID0gdGhpcy5fZ2V0Vmlld0lkKHRoaXMuZ2V0SWQoKSk7XG5cdFx0Y29uc3QgdmlldyA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQodmlld0lkIGFzIHN0cmluZyk7XG5cdFx0Y29uc3QgdUlNb2RlbCA9IHZpZXc/LmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsO1xuXHRcdHVJTW9kZWw/LnNldFByb3BlcnR5KFwiL21lc3NhZ2VUYXJnZXRQcm9wZXJ0eVBhdGhcIiwgdW5kZWZpbmVkKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbWV0aG9kIHJldHJpZXZlcyB0aGUgYmluZGluZyBjb250ZXh0IGZvciB0aGUgcmVmRXJyb3Igb2JqZWN0LlxuXHQgKiBUaGUgcmVmRXJyb3IgY29udGFpbnMgYSBtYXAgdG8gc3RvcmUgdGhlIGluZGV4ZXMgb2YgdGhlIHJvd3Mgd2l0aCBlcnJvcnMuXG5cdCAqIEBwYXJhbSBvVGFibGUgVGhlIHRhYmxlIGZvciB3aGljaCB3ZSB3YW50IHRvIGdldCB0aGUgcmVmRXJyb3IgT2JqZWN0LlxuXHQgKiBAcmV0dXJucyBDb250ZXh0IG9mIHRoZSByZWZFcnJvci5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9nZXRUYWJsZVJlZkVycm9yQ29udGV4dChvVGFibGU6IE1EQ1RhYmxlKTogQmFzZUNvbnRleHQgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG9Nb2RlbCA9IG9UYWJsZS5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbDtcblx0XHQvL2luaXRpYWxpemUgdGhlIHJlZkVycm9yIHByb3BlcnR5IGlmIGl0IGRvZXNuJ3QgZXhpc3Rcblx0XHRpZiAoIW9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpPy5nZXRQcm9wZXJ0eShcInJlZkVycm9yXCIpKSB7XG5cdFx0XHRvTW9kZWwuc2V0UHJvcGVydHkoXCJyZWZFcnJvclwiLCB7fSwgb1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikhKTtcblx0XHR9XG5cdFx0Y29uc3Qgc1JlZkVycm9yQ29udGV4dFBhdGggPVxuXHRcdFx0b1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik/LmdldFBhdGgoKSArXG5cdFx0XHRcIi9yZWZFcnJvci9cIiArXG5cdFx0XHRvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpLnJlcGxhY2UoXCIvXCIsIFwiJFwiKSArXG5cdFx0XHRcIiRcIiArXG5cdFx0XHRvVGFibGUuZ2V0Um93QmluZGluZygpLmdldFBhdGgoKS5yZXBsYWNlKFwiL1wiLCBcIiRcIik7XG5cdFx0Y29uc3Qgb0NvbnRleHQgPSBvTW9kZWwuZ2V0Q29udGV4dChzUmVmRXJyb3JDb250ZXh0UGF0aCk7XG5cdFx0aWYgKCFvQ29udGV4dC5nZXRQcm9wZXJ0eShcIlwiKSkge1xuXHRcdFx0b01vZGVsLnNldFByb3BlcnR5KFwiXCIsIHt9LCBvQ29udGV4dCk7XG5cdFx0fVxuXHRcdHJldHVybiBvQ29udGV4dDtcblx0fVxuXG5cdF91cGRhdGVJbnRlcm5hbE1vZGVsKFxuXHRcdHRhYmxlUm93Q29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQsXG5cdFx0cm93SW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZCxcblx0XHR0YWJsZVRhcmdldENvbFByb3BlcnR5OiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0dGFibGU6IE1EQ1RhYmxlLFxuXHRcdG1lc3NhZ2VPYmplY3Q6IE1lc3NhZ2UsXG5cdFx0aXNDcmVhdGlvblJvdz86IGJvb2xlYW5cblx0KTogdm9pZCB7XG5cdFx0bGV0IHRlbXA7XG5cdFx0aWYgKGlzQ3JlYXRpb25Sb3cpIHtcblx0XHRcdHRlbXAgPSB7XG5cdFx0XHRcdHJvd0luZGV4OiBcIkNyZWF0aW9uUm93XCIsXG5cdFx0XHRcdHRhcmdldENvbFByb3BlcnR5OiB0YWJsZVRhcmdldENvbFByb3BlcnR5ID8gdGFibGVUYXJnZXRDb2xQcm9wZXJ0eSA6IFwiXCJcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRlbXAgPSB7XG5cdFx0XHRcdHJvd0luZGV4OiB0YWJsZVJvd0NvbnRleHQgPyByb3dJbmRleCA6IFwiXCIsXG5cdFx0XHRcdHRhcmdldENvbFByb3BlcnR5OiB0YWJsZVRhcmdldENvbFByb3BlcnR5ID8gdGFibGVUYXJnZXRDb2xQcm9wZXJ0eSA6IFwiXCJcblx0XHRcdH07XG5cdFx0fVxuXHRcdGNvbnN0IG1vZGVsID0gdGFibGUuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWwsXG5cdFx0XHRjb250ZXh0ID0gdGhpcy5fZ2V0VGFibGVSZWZFcnJvckNvbnRleHQodGFibGUpO1xuXHRcdC8vd2UgZmlyc3QgcmVtb3ZlIHRoZSBlbnRyaWVzIHdpdGggb2Jzb2xldGUgbWVzc2FnZSBpZHMgZnJvbSB0aGUgaW50ZXJuYWwgbW9kZWwgYmVmb3JlIGluc2VydGluZyB0aGUgbmV3IGVycm9yIGluZm8gOlxuXHRcdGNvbnN0IGFWYWxpZE1lc3NhZ2VJZHMgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKClcblx0XHRcdC5nZXREYXRhKClcblx0XHRcdC5tYXAoZnVuY3Rpb24gKG1lc3NhZ2U6IE1lc3NhZ2UpIHtcblx0XHRcdFx0cmV0dXJuIG1lc3NhZ2UuZ2V0SWQoKTtcblx0XHRcdH0pO1xuXHRcdGxldCBhT2Jzb2xldGVNZXNzYWdlbElkcztcblx0XHRpZiAoY29udGV4dD8uZ2V0UHJvcGVydHkoXCJcIikpIHtcblx0XHRcdGFPYnNvbGV0ZU1lc3NhZ2VsSWRzID0gT2JqZWN0LmtleXMoY29udGV4dD8uZ2V0UHJvcGVydHkoXCJcIikpLmZpbHRlcihmdW5jdGlvbiAoaW50ZXJuYWxNZXNzYWdlSWQpIHtcblx0XHRcdFx0cmV0dXJuIGFWYWxpZE1lc3NhZ2VJZHMuaW5kZXhPZihpbnRlcm5hbE1lc3NhZ2VJZCkgPT09IC0xO1xuXHRcdFx0fSk7XG5cdFx0XHRhT2Jzb2xldGVNZXNzYWdlbElkcy5mb3JFYWNoKGZ1bmN0aW9uIChvYnNvbGV0ZUlkKSB7XG5cdFx0XHRcdGRlbGV0ZSBjb250ZXh0Py5nZXRQcm9wZXJ0eShcIlwiKVtvYnNvbGV0ZUlkXTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRtb2RlbD8uc2V0UHJvcGVydHkoXG5cdFx0XHRtZXNzYWdlT2JqZWN0LmdldElkKCksXG5cdFx0XHRPYmplY3QuYXNzaWduKHt9LCBjb250ZXh0Py5nZXRQcm9wZXJ0eShtZXNzYWdlT2JqZWN0LmdldElkKCkpID8gY29udGV4dC5nZXRQcm9wZXJ0eShtZXNzYWdlT2JqZWN0LmdldElkKCkpIDoge30sIHRlbXApLFxuXHRcdFx0Y29udGV4dFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIG1ldGhvZCB0aGF0IHNldHMgZ3JvdXBzIGZvciB0cmFuc2llbnQgbWVzc2FnZXMuXG5cdCAqIEBwYXJhbSBtZXNzYWdlIFRoZSB0cmFuc2llbnQgbWVzc2FnZSBmb3Igd2hpY2ggd2Ugd2FudCB0byBjb21wdXRlIGFuZCBzZXQgZ3JvdXAuXG5cdCAqIEBwYXJhbSBzQWN0aW9uTmFtZSBUaGUgYWN0aW9uIG5hbWUuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfc2V0R3JvdXBMYWJlbEZvclRyYW5zaWVudE1zZyhtZXNzYWdlOiBNZXNzYWdlSXRlbSwgc0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuXHRcdHRoaXMuc0xhc3RBY3Rpb25UZXh0ID0gdGhpcy5zTGFzdEFjdGlvblRleHRcblx0XHRcdD8gdGhpcy5zTGFzdEFjdGlvblRleHRcblx0XHRcdDogTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpIS5nZXRUZXh0KFwiVF9NRVNTQUdFX0JVVFRPTl9TQVBGRV9NRVNTQUdFX0dST1VQX0xBU1RfQUNUSU9OXCIpO1xuXG5cdFx0bWVzc2FnZS5zZXRHcm91cE5hbWUoYCR7dGhpcy5zTGFzdEFjdGlvblRleHR9OiAke3NBY3Rpb25OYW1lfWApO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBtZXRob2QgdGhhdCBncm91cHMgbWVzc2FnZXMgYW5kIGFkZHMgdGhlIHN1YnRpdGxlLlxuXHQgKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZSB3ZSB1c2UgdG8gY29tcHV0ZSB0aGUgZ3JvdXAgYW5kIHN1YnRpdGxlLlxuXHQgKiBAcGFyYW0gc2VjdGlvbiBUaGUgc2VjdGlvbiBjb250YWluaW5nIHRoZSBjb250cm9scy5cblx0ICogQHBhcmFtIHN1YlNlY3Rpb24gVGhlIHN1YnNlY3Rpb24gY29udGFpbmluZyB0aGUgY29udHJvbHMuXG5cdCAqIEBwYXJhbSBlbGVtZW50cyBMaXN0IG9mIGNvbnRyb2xzIGZyb20gYSBzdWJzZWN0aW9uIHJlbGF0ZWQgdG8gYSBtZXNzYWdlLlxuXHQgKiBAcGFyYW0gaGFzTXVsdGlwbGVTdWJTZWN0aW9ucyBUcnVlIGlmIHRoZXJlIGlzIG1vcmUgdGhhbiAxIHN1YnNlY3Rpb24gaW4gdGhlIHNlY3Rpb24uXG5cdCAqIEBwYXJhbSBhY3Rpb25OYW1lIFRoZSBhY3Rpb24gbmFtZSwgaWYgYW55LlxuXHQgKiBAcmV0dXJucyBSZXR1cm4gdGhlIGNvbnRyb2wgdGFyZ2V0ZWQgYnkgdGhlIG1lc3NhZ2UuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfY29tcHV0ZU1lc3NhZ2VHcm91cEFuZFN1YlRpdGxlKFxuXHRcdG1lc3NhZ2U6IE1lc3NhZ2VJdGVtLFxuXHRcdHNlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uLFxuXHRcdHN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLFxuXHRcdGVsZW1lbnRzOiBVSTVFbGVtZW50W10sXG5cdFx0aGFzTXVsdGlwbGVTdWJTZWN0aW9uczogYm9vbGVhbixcblx0XHRhY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWRcblx0KTogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IGdldFJlc291cmNlTW9kZWwoc2VjdGlvbik7XG5cdFx0dGhpcy5vSXRlbUJpbmRpbmcuZGV0YWNoQ2hhbmdlKHRoaXMuX3NldE1lc3NhZ2VEYXRhLCB0aGlzKTtcblx0XHRjb25zdCBtZXNzYWdlT2JqZWN0ID0gbWVzc2FnZS5nZXRCaW5kaW5nQ29udGV4dChcIm1lc3NhZ2VcIik/LmdldE9iamVjdCgpIGFzIE1lc3NhZ2U7XG5cdFx0Y29uc3Qgc2V0U2VjdGlvbk5hbWVJbkdyb3VwID0gdHJ1ZTtcblx0XHRsZXQgZWxlbWVudDogVUk1RWxlbWVudCxcblx0XHRcdHRhYmxlOiBNRENUYWJsZSB8IHVuZGVmaW5lZCxcblx0XHRcdHRhcmdldFRhYmxlSW5mbyA9IHt9IGFzIFRhcmdldFRhYmxlSW5mb1R5cGUsXG5cdFx0XHRsLFxuXHRcdFx0cm93SW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZCxcblx0XHRcdHRhcmdldGVkQ29udHJvbDogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCxcblx0XHRcdGlzQ3JlYXRpb25Sb3c6IGJvb2xlYW47XG5cdFx0Y29uc3QgaXNCYWNrRW5kTWVzc2FnZSA9IG5ldyBSZWdFeHAoXCJeL1wiKS50ZXN0KG1lc3NhZ2VPYmplY3Q/LmdldFRhcmdldHMoKVswXSk7XG5cdFx0aWYgKGlzQmFja0VuZE1lc3NhZ2UpIHtcblx0XHRcdGZvciAobCA9IDA7IGwgPCBlbGVtZW50cy5sZW5ndGg7IGwrKykge1xuXHRcdFx0XHRlbGVtZW50ID0gZWxlbWVudHNbbF07XG5cdFx0XHRcdHRhcmdldGVkQ29udHJvbCA9IGVsZW1lbnQ7XG5cdFx0XHRcdGlmIChlbGVtZW50LmlzQShcInNhcC5tLlRhYmxlXCIpIHx8IChlbGVtZW50IGFzIFVJNUVsZW1lbnQpLmlzQShcInNhcC51aS50YWJsZS5UYWJsZVwiKSkge1xuXHRcdFx0XHRcdHRhYmxlID0gZWxlbWVudC5nZXRQYXJlbnQoKSBhcyBNRENUYWJsZTtcblx0XHRcdFx0XHRjb25zdCByb3dCaW5kaW5nID0gdGFibGUuZ2V0Um93QmluZGluZygpO1xuXHRcdFx0XHRcdGNvbnN0IGZuQ2FsbGJhY2tTZXRHcm91cE5hbWUgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLl9zZXRHcm91cExhYmVsRm9yVHJhbnNpZW50TXNnKG1lc3NhZ2UsIGFjdGlvbk5hbWUpO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0aWYgKHJvd0JpbmRpbmcgJiYgcm93QmluZGluZy5pc0xlbmd0aEZpbmFsKCkgJiYgdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoKSkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb2JqID0gbWVzc2FnZUhhbmRsaW5nLmdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGUoXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VPYmplY3QsXG5cdFx0XHRcdFx0XHRcdHRhYmxlLFxuXHRcdFx0XHRcdFx0XHRlbGVtZW50LFxuXHRcdFx0XHRcdFx0XHRyb3dCaW5kaW5nLFxuXHRcdFx0XHRcdFx0XHRhY3Rpb25OYW1lLFxuXHRcdFx0XHRcdFx0XHRzZXRTZWN0aW9uTmFtZUluR3JvdXAsXG5cdFx0XHRcdFx0XHRcdGZuQ2FsbGJhY2tTZXRHcm91cE5hbWVcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR0YXJnZXRUYWJsZUluZm8gPSBvYmoub1RhcmdldFRhYmxlSW5mbztcblx0XHRcdFx0XHRcdGlmIChvYmouc3ViVGl0bGUpIHtcblx0XHRcdFx0XHRcdFx0bWVzc2FnZS5zZXRTdWJ0aXRsZShvYmouc3ViVGl0bGUpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRtZXNzYWdlLnNldEFjdGl2ZVRpdGxlKFxuXHRcdFx0XHRcdFx0XHQhIXRhcmdldFRhYmxlSW5mby5vVGFibGVSb3dDb250ZXh0ICYmXG5cdFx0XHRcdFx0XHRcdFx0IXRhcmdldFRhYmxlSW5mby5vVGFibGVSb3dDb250ZXh0Py5pc0luYWN0aXZlKCkgJiYgLy8gY2hlY2sgaWYgdGhlIHJvd2NvbnRleHQgaXMgYWN0aXZlXG5cdFx0XHRcdFx0XHRcdFx0dGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0NvbnRleHQuZ2V0UGF0aCgpICE9PVxuXHRcdFx0XHRcdFx0XHRcdFx0bWVzc2FnZS5nZXRCaW5kaW5nQ29udGV4dChcIm1lc3NhZ2VcIik/LmdldFByb3BlcnR5KFwidGFyZ2V0XCIpLnJlcGxhY2UoL1xcLyQvLCBcIlwiKSAvLyBjaGVjayBpZiB0aGUgdGFyZ2V0IG9mIHRoZSBtZXNzYWdlIGlzIG5vdCB0aGUgcm93IGl0c2VsZiAocmVtb3ZlIHRoZSBsYXN0IC8gaWYgcHJlc2VudHMpXG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRpZiAodGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0NvbnRleHQgJiYgIXRhcmdldFRhYmxlSW5mby5vVGFibGVSb3dDb250ZXh0LmlzSW5hY3RpdmUoKSkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLl9mb3JtYXRNZXNzYWdlRGVzY3JpcHRpb24oXG5cdFx0XHRcdFx0XHRcdFx0bWVzc2FnZSxcblx0XHRcdFx0XHRcdFx0XHR0YXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dCxcblx0XHRcdFx0XHRcdFx0XHR0YXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZSxcblx0XHRcdFx0XHRcdFx0XHR0YWJsZVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cm93SW5kZXggPSB0YXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dCAmJiB0YXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dC5nZXRJbmRleCgpO1xuXHRcdFx0XHRcdFx0dGhpcy5fdXBkYXRlSW50ZXJuYWxNb2RlbChcblx0XHRcdFx0XHRcdFx0dGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0NvbnRleHQsXG5cdFx0XHRcdFx0XHRcdHJvd0luZGV4LFxuXHRcdFx0XHRcdFx0XHR0YXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHksXG5cdFx0XHRcdFx0XHRcdHRhYmxlLFxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlT2JqZWN0XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRtZXNzYWdlLnNldEFjdGl2ZVRpdGxlKHRydWUpO1xuXG5cdFx0XHRcdFx0aWYgKG1lc3NhZ2UuZ2V0U3VidGl0bGUoKSA9PT0gXCJcIikge1xuXHRcdFx0XHRcdFx0bGV0IGZvcm1FbGVtZW50OiBGb3JtRWxlbWVudCB8IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdGxldCBwYXJlbnQgPSB0YXJnZXRlZENvbnRyb2wuZ2V0UGFyZW50KCk7XG5cdFx0XHRcdFx0XHR3aGlsZSAocGFyZW50KSB7XG5cdFx0XHRcdFx0XHRcdGlmIChwYXJlbnQgJiYgcGFyZW50LmlzQTxGb3JtRWxlbWVudD4oXCJzYXAudWkubGF5b3V0LmZvcm0uRm9ybUVsZW1lbnRcIikpIHtcblx0XHRcdFx0XHRcdFx0XHRmb3JtRWxlbWVudCA9IHBhcmVudDtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRwYXJlbnQgPSBwYXJlbnQuZ2V0UGFyZW50KCk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChmb3JtRWxlbWVudCkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBsYWJlbCA9IGZvcm1FbGVtZW50LmdldExhYmVsKCk7XG5cdFx0XHRcdFx0XHRcdGxldCBsYWJlbFRleHQgPSBcIlwiO1xuXG5cdFx0XHRcdFx0XHRcdGlmICh0eXBlb2YgbGFiZWwgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRsYWJlbFRleHQgPSBsYWJlbDtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRsYWJlbFRleHQgPSAobGFiZWwgYXMgTGFiZWwpLmdldFRleHQoKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlLnNldFN1YnRpdGxlKGxhYmVsVGV4dCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly9jaGVjayBpZiB0aGUgdGFyZ2V0ZWQgY29udHJvbCBpcyBhIGNoaWxkIG9mIG9uZSBvZiB0aGUgb3RoZXIgY29udHJvbHNcblx0XHRcdFx0XHRjb25zdCBpc1RhcmdldGVkQ29udHJvbE9ycGhhbiA9IG1lc3NhZ2VIYW5kbGluZy5iSXNPcnBoYW5FbGVtZW50KHRhcmdldGVkQ29udHJvbCwgZWxlbWVudHMpO1xuXHRcdFx0XHRcdGlmIChpc1RhcmdldGVkQ29udHJvbE9ycGhhbikge1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vVGhlcmUgaXMgb25seSBvbmUgZWx0IGFzIHRoaXMgaXMgYSBmcm9udEVuZCBtZXNzYWdlXG5cdFx0XHR0YXJnZXRlZENvbnRyb2wgPSBlbGVtZW50c1swXTtcblx0XHRcdHRhYmxlID0gdGhpcy5fZ2V0TWRjVGFibGUodGFyZ2V0ZWRDb250cm9sKTtcblx0XHRcdHRhcmdldFRhYmxlSW5mbyA9IHt9IGFzIFRhcmdldFRhYmxlSW5mb1R5cGU7XG5cdFx0XHRpZiAodGFibGUpIHtcblx0XHRcdFx0dGFyZ2V0VGFibGVJbmZvLnRhYmxlSGVhZGVyID0gdGFibGUuZ2V0SGVhZGVyKCk7XG5cdFx0XHRcdGNvbnN0IHRhcmdldENvbHVtbkluZGV4ID0gdGhpcy5fZ2V0VGFibGVDb2x1bW5JbmRleCh0YXJnZXRlZENvbnRyb2wpO1xuXHRcdFx0XHR0YXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgPVxuXHRcdFx0XHRcdHRhcmdldENvbHVtbkluZGV4ICE9PSB1bmRlZmluZWQgJiYgdGFyZ2V0Q29sdW1uSW5kZXggPiAtMVxuXHRcdFx0XHRcdFx0PyB0YWJsZS5nZXRDb2x1bW5zKClbdGFyZ2V0Q29sdW1uSW5kZXhdLmdldFByb3BlcnR5S2V5KClcblx0XHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXG5cdFx0XHRcdHRhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xOYW1lID1cblx0XHRcdFx0XHR0YXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgJiYgdGFyZ2V0Q29sdW1uSW5kZXggIT09IHVuZGVmaW5lZCAmJiB0YXJnZXRDb2x1bW5JbmRleCA+IC0xXG5cdFx0XHRcdFx0XHQ/IHRhYmxlLmdldENvbHVtbnMoKVt0YXJnZXRDb2x1bW5JbmRleF0uZ2V0SGVhZGVyKClcblx0XHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0XHRpc0NyZWF0aW9uUm93ID0gdGhpcy5fZ2V0VGFibGVSb3codGFyZ2V0ZWRDb250cm9sKT8uaXNBPENyZWF0aW9uUm93PihcInNhcC51aS50YWJsZS5DcmVhdGlvblJvd1wiKSA/PyBmYWxzZTtcblx0XHRcdFx0aWYgKCFpc0NyZWF0aW9uUm93KSB7XG5cdFx0XHRcdFx0cm93SW5kZXggPSB0aGlzLl9nZXRUYWJsZVJvd0luZGV4KHRhcmdldGVkQ29udHJvbCk7XG5cdFx0XHRcdFx0dGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0JpbmRpbmdDb250ZXh0cyA9IHRhYmxlLmdldFJvd0JpbmRpbmcoKS5nZXRDdXJyZW50Q29udGV4dHMoKTtcblx0XHRcdFx0XHR0YXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dCA9XG5cdFx0XHRcdFx0XHRyb3dJbmRleCAhPT0gdW5kZWZpbmVkID8gdGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0JpbmRpbmdDb250ZXh0c1tyb3dJbmRleF0gOiB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgbWVzc2FnZVN1YnRpdGxlID0gbWVzc2FnZUhhbmRsaW5nLmdldE1lc3NhZ2VTdWJ0aXRsZShcblx0XHRcdFx0XHRtZXNzYWdlT2JqZWN0LFxuXHRcdFx0XHRcdHRhcmdldFRhYmxlSW5mby5vVGFibGVSb3dCaW5kaW5nQ29udGV4dHMsXG5cdFx0XHRcdFx0dGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0NvbnRleHQsXG5cdFx0XHRcdFx0dGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbE5hbWUsXG5cdFx0XHRcdFx0dGFibGUsXG5cdFx0XHRcdFx0aXNDcmVhdGlvblJvdyxcblx0XHRcdFx0XHR0YXJnZXRDb2x1bW5JbmRleCA9PT0gMCAmJiAodGFyZ2V0ZWRDb250cm9sIGFzIG1kY0ZpZWxkKS5nZXRWYWx1ZVN0YXRlKCkgPT09IFwiRXJyb3JcIlxuXHRcdFx0XHRcdFx0PyAodGFyZ2V0ZWRDb250cm9sIGFzIENvbnRyb2wpXG5cdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZFxuXHRcdFx0XHQpO1xuXHRcdFx0XHQvL3NldCB0aGUgc3VidGl0bGVcblx0XHRcdFx0aWYgKG1lc3NhZ2VTdWJ0aXRsZSkge1xuXHRcdFx0XHRcdG1lc3NhZ2Uuc2V0U3VidGl0bGUobWVzc2FnZVN1YnRpdGxlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRtZXNzYWdlLnNldEFjdGl2ZVRpdGxlKCEhdGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0NvbnRleHQpO1xuXHRcdFx0XHRpZiAodGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0NvbnRleHQpIHtcblx0XHRcdFx0XHR0aGlzLl9mb3JtYXRNZXNzYWdlRGVzY3JpcHRpb24obWVzc2FnZSwgdGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0NvbnRleHQsIHRhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xOYW1lLCB0YWJsZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5fdXBkYXRlSW50ZXJuYWxNb2RlbChcblx0XHRcdFx0XHR0YXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dCxcblx0XHRcdFx0XHRyb3dJbmRleCxcblx0XHRcdFx0XHR0YXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHksXG5cdFx0XHRcdFx0dGFibGUsXG5cdFx0XHRcdFx0bWVzc2FnZU9iamVjdCxcblx0XHRcdFx0XHRpc0NyZWF0aW9uUm93XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHNldFNlY3Rpb25OYW1lSW5Hcm91cCkge1xuXHRcdFx0Y29uc3QgaW5jbHVkZVRhYmxlR3JvdXBOYW1lID0gdGhpcy5fY2hlY2tNZXJnZUxvZ2ljRm9yTWVzc2FnZUdyb3VwaW5nKHNlY3Rpb24sIHN1YlNlY3Rpb24sIGhhc011bHRpcGxlU3ViU2VjdGlvbnMpO1xuXHRcdFx0Y29uc3Qgc2VjdGlvbkJhc2VkR3JvdXBOYW1lID0gbWVzc2FnZUhhbmRsaW5nLmNyZWF0ZVNlY3Rpb25Hcm91cE5hbWUoXG5cdFx0XHRcdHNlY3Rpb24sXG5cdFx0XHRcdHN1YlNlY3Rpb24sXG5cdFx0XHRcdGhhc011bHRpcGxlU3ViU2VjdGlvbnMsXG5cdFx0XHRcdHRhcmdldFRhYmxlSW5mbyxcblx0XHRcdFx0cmVzb3VyY2VNb2RlbCxcblx0XHRcdFx0aW5jbHVkZVRhYmxlR3JvdXBOYW1lXG5cdFx0XHQpO1xuXG5cdFx0XHRtZXNzYWdlLnNldEdyb3VwTmFtZShzZWN0aW9uQmFzZWRHcm91cE5hbWUpO1xuXHRcdFx0Y29uc3QgdmlldyA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5fZ2V0Vmlld0lkKHRoaXMuZ2V0SWQoKSkgYXMgc3RyaW5nKTtcblx0XHRcdGNvbnN0IHZpZXdDb250ZXh0UGF0aCA9IHZpZXc/LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKTtcblx0XHRcdGNvbnN0IG1lc3NhZ2VUYXJnZXRQcm9wZXJ0eU5hbWUgPSBtZXNzYWdlT2JqZWN0LmdldFRhcmdldHMoKVswXT8uc3BsaXQoXCIvXCIpLnBvcCgpO1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IHZpZXc/LmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsO1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxNb2RlbE1lc3NhZ2VUYXJnZXRQcm9wZXJ0eVBhdGggPSBpbnRlcm5hbE1vZGVsPy5nZXRQcm9wZXJ0eShcIi9tZXNzYWdlVGFyZ2V0UHJvcGVydHlQYXRoXCIpO1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxNb2RlbE1lc3NhZ2VUYXJnZXRQcm9wZXJ0eUNvbnRleHRQYXRoID0gaW50ZXJuYWxNb2RlbE1lc3NhZ2VUYXJnZXRQcm9wZXJ0eVBhdGg/LnN1YnN0cmluZyhcblx0XHRcdFx0MCxcblx0XHRcdFx0aW50ZXJuYWxNb2RlbE1lc3NhZ2VUYXJnZXRQcm9wZXJ0eVBhdGgubGFzdEluZGV4T2YoXCIvXCIpXG5cdFx0XHQpO1xuXHRcdFx0Ly8gYWN0aXZlVGl0bGVQcmVzcyBzaG91bGQgb25seSBiZSB0cmlnZ2VyZWQgaW4gZm9yd2FyZCBuYXZpZ2F0aW9uIGFuZCBub3QgaW4gYmFjayBuYXZpZ2F0aW9uXG5cdFx0XHRpZiAoXG5cdFx0XHRcdGludGVybmFsTW9kZWxNZXNzYWdlVGFyZ2V0UHJvcGVydHlDb250ZXh0UGF0aCAmJlxuXHRcdFx0XHRtZXNzYWdlVGFyZ2V0UHJvcGVydHlOYW1lICYmXG5cdFx0XHRcdHZpZXdDb250ZXh0UGF0aCAmJlxuXHRcdFx0XHRtZXNzYWdlVGFyZ2V0UHJvcGVydHlOYW1lID09PSBpbnRlcm5hbE1vZGVsTWVzc2FnZVRhcmdldFByb3BlcnR5UGF0aC5zcGxpdChcIi9cIikucG9wKCkgJiZcblx0XHRcdFx0dmlld0NvbnRleHRQYXRoLmxlbmd0aCA+PSBpbnRlcm5hbE1vZGVsTWVzc2FnZVRhcmdldFByb3BlcnR5Q29udGV4dFBhdGgubGVuZ3RoICYmXG5cdFx0XHRcdHZpZXdDb250ZXh0UGF0aC5zdGFydHNXaXRoKGludGVybmFsTW9kZWxNZXNzYWdlVGFyZ2V0UHJvcGVydHlDb250ZXh0UGF0aClcblx0XHRcdCkge1xuXHRcdFx0XHR0aGlzLm9NZXNzYWdlUG9wb3Zlci5maXJlQWN0aXZlVGl0bGVQcmVzcyh7IGl0ZW06IG1lc3NhZ2UgfSk7XG5cdFx0XHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvbWVzc2FnZVRhcmdldFByb3BlcnR5UGF0aFwiLCBmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMub0l0ZW1CaW5kaW5nLmF0dGFjaENoYW5nZSh0aGlzLl9zZXRNZXNzYWdlRGF0YSwgdGhpcyk7XG5cdFx0cmV0dXJuIHRhcmdldGVkQ29udHJvbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbWV0aG9kIHRvIGNoZWNrIGlmIHRoZSBzZWN0aW9uIGFuZCBzdWJzZWN0aW9uIGhhcyBzaW5nbGUgdGFibGUgY29udHJvbC5cblx0ICogQHBhcmFtIHNlY3Rpb24gT2JqZWN0UGFnZSBzZWN0aW9uLlxuXHQgKiBAcGFyYW0gc3ViU2VjdGlvbiBPYmplY3RQYWdlIHN1YiBzZWN0aW9uLlxuXHQgKiBAcGFyYW0gaGFzTXVsdGlwbGVTdWJTZWN0aW9ucyBUcnVlIGlmIHRoZXJlIGlzIG1vcmUgdGhhbiAxIHN1YnNlY3Rpb24gaW4gdGhlIHNlY3Rpb24uXG5cdCAqIEByZXR1cm5zIFJldHVybnMgYm9vbGVhbiB2YWx1ZSBmb3IgdGhlIHNpbmdsZSBjb250cm9sIGluc2lkZSB0aGUgc2VjdGlvbiwgYnkgZGVmYXVsdCBpdCBpcyB0cnVlLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2NoZWNrTWVyZ2VMb2dpY0Zvck1lc3NhZ2VHcm91cGluZyhcblx0XHRzZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbixcblx0XHRzdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbixcblx0XHRoYXNNdWx0aXBsZVN1YlNlY3Rpb25zOiBib29sZWFuXG5cdCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHZpZXdJZCA9IHRoaXMuX2dldFZpZXdJZCh0aGlzLmdldElkKCkpO1xuXHRcdGNvbnN0IHZpZXcgPSB2aWV3SWQgPyAoVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZCh2aWV3SWQpIGFzIFZpZXcpIDogdW5kZWZpbmVkO1xuXHRcdGxldCBiSW5jbHVkZVRhYmxlR3JvdXBOYW1lID0gdHJ1ZTtcblx0XHRjb25zdCBzaW5nbGVTdWJzZWN0aW9uSW5QYWdlTGF5b3V0ID1cblx0XHRcdCFoYXNNdWx0aXBsZVN1YlNlY3Rpb25zICYmICh2aWV3Py5nZXRWaWV3RGF0YSgpIGFzIE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzKT8uc2VjdGlvbkxheW91dCA9PT0gXCJQYWdlXCI7XG5cdFx0Y29uc3QgbXVsdGlTdWJzZWN0aW9uSW5UYWJMYXlvdXQgPVxuXHRcdFx0aGFzTXVsdGlwbGVTdWJTZWN0aW9ucyAmJiAodmlldz8uZ2V0Vmlld0RhdGEoKSBhcyBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncyk/LnNlY3Rpb25MYXlvdXQgPT09IFwiVGFic1wiO1xuXHRcdGlmIChzaW5nbGVTdWJzZWN0aW9uSW5QYWdlTGF5b3V0KSB7XG5cdFx0XHRjb25zdCBibG9jayA9IHN1YlNlY3Rpb24uZ2V0QmxvY2tzKCk7XG5cdFx0XHRjb25zdCBjb250ZW50ID0gYmxvY2subGVuZ3RoID09PSAxID8gKGJsb2NrWzBdLmdldEFnZ3JlZ2F0aW9uKFwiY29udGVudFwiKSBhcyBNYW5hZ2VkT2JqZWN0KSA6IHVuZGVmaW5lZDtcblx0XHRcdGlmIChjb250ZW50Py5pc0EoXCJzYXAuZmUubWFjcm9zLnRhYmxlLlRhYmxlQVBJXCIpKSB7XG5cdFx0XHRcdGJJbmNsdWRlVGFibGVHcm91cE5hbWUgPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKG11bHRpU3Vic2VjdGlvbkluVGFiTGF5b3V0KSB7XG5cdFx0XHRsZXQgY29udGVudDtcblx0XHRcdGNvbnN0IGJsb2NrcyA9IHN1YlNlY3Rpb24uZ2V0QmxvY2tzKCk7XG5cdFx0XHQvLyBJbiBjYXNlIG9mIFJlZmVyZW5jZSBGYWNldCwgdGhlIGZpcnN0IGJsb2NrIHdpbGwgYmUgU3ViU2VjdGlvbkJsb2NrXG5cdFx0XHRpZiAoYmxvY2tzLmxlbmd0aCA9PT0gMSAmJiBibG9ja3NbMF0/LmlzQTxTdWJTZWN0aW9uQmxvY2s+KFwic2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLmNvbnRyb2xzLlN1YlNlY3Rpb25CbG9ja1wiKSkge1xuXHRcdFx0XHRjb250ZW50ID0gYmxvY2tzWzBdLmdldEFnZ3JlZ2F0aW9uKFwiY29udGVudFwiKSBhcyBNYW5hZ2VkT2JqZWN0O1xuXHRcdFx0XHRpZiAoY29udGVudD8uaXNBKFwic2FwLmZlLm1hY3Jvcy50YWJsZS5UYWJsZUFQSVwiKSkge1xuXHRcdFx0XHRcdGJJbmNsdWRlVGFibGVHcm91cE5hbWUgPSBmYWxzZTtcblx0XHRcdFx0fSBlbHNlIGlmICgoY29udGVudCBhcyBEeW5hbWljU2lkZUNvbnRlbnQpPy5pc0EoXCJzYXAudWkubGF5b3V0LkR5bmFtaWNTaWRlQ29udGVudFwiKSkge1xuXHRcdFx0XHRcdGNvbnRlbnQgPVxuXHRcdFx0XHRcdFx0KGNvbnRlbnQgYXMgRHluYW1pY1NpZGVDb250ZW50KS5nZXRNYWluQ29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmXG5cdFx0XHRcdFx0XHQoY29udGVudCBhcyBEeW5hbWljU2lkZUNvbnRlbnQpPy5nZXRNYWluQ29udGVudCgpO1xuXHRcdFx0XHRcdGlmIChjb250ZW50ICYmIGNvbnRlbnQubGVuZ3RoID09PSAxICYmIGNvbnRlbnRbMF0/LmlzQShcInNhcC5mZS5tYWNyb3MudGFibGUuVGFibGVBUElcIikpIHtcblx0XHRcdFx0XHRcdGJJbmNsdWRlVGFibGVHcm91cE5hbWUgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGJJbmNsdWRlVGFibGVHcm91cE5hbWU7XG5cdH1cblxuXHRfY2hlY2tDb250cm9sSWRJblNlY3Rpb25zKG1lc3NhZ2VzOiBNZXNzYWdlSXRlbVtdLCBlbmFibGVCaW5kaW5nPzogYm9vbGVhbik6IGJvb2xlYW4gfCB2b2lkIHtcblx0XHRsZXQgc2VjdGlvbiwgYVN1YlNlY3Rpb25zLCBtZXNzYWdlLCBpLCBqLCBrO1xuXHRcdHRoaXMuc0dlbmVyYWxHcm91cFRleHQgPSB0aGlzLnNHZW5lcmFsR3JvdXBUZXh0XG5cdFx0XHQ/IHRoaXMuc0dlbmVyYWxHcm91cFRleHRcblx0XHRcdDogTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpIS5nZXRUZXh0KFwiVF9NRVNTQUdFX0JVVFRPTl9TQVBGRV9NRVNTQUdFX0dST1VQX0dFTkVSQUxcIik7XG5cdFx0Ly9HZXQgYWxsIHNlY3Rpb25zIGZyb20gdGhlIG9iamVjdCBwYWdlIGxheW91dFxuXHRcdGNvbnN0IGFWaXNpYmxlU2VjdGlvbnMgPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQodGhpcy5vT2JqZWN0UGFnZUxheW91dCEpO1xuXHRcdGlmIChhVmlzaWJsZVNlY3Rpb25zKSB7XG5cdFx0XHRjb25zdCB2aWV3SWQgPSB0aGlzLl9nZXRWaWV3SWQodGhpcy5nZXRJZCgpKTtcblx0XHRcdGNvbnN0IG9WaWV3ID0gdmlld0lkID8gKFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQodmlld0lkKSBhcyBWaWV3KSA6IHVuZGVmaW5lZDtcblx0XHRcdGNvbnN0IHNBY3Rpb25OYW1lID0gb1ZpZXc/LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwic0FjdGlvbk5hbWVcIik7XG5cdFx0XHRpZiAoc0FjdGlvbk5hbWUpIHtcblx0XHRcdFx0KG9WaWV3Py5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0KS5zZXRQcm9wZXJ0eShcInNBY3Rpb25OYW1lXCIsIG51bGwpO1xuXHRcdFx0fVxuXHRcdFx0Zm9yIChpID0gMDsgaSA8IG1lc3NhZ2VzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdG1lc3NhZ2UgPSBtZXNzYWdlc1tpXTtcblx0XHRcdFx0bGV0IGJJc0dlbmVyYWxHcm91cE5hbWUgPSB0cnVlO1xuXHRcdFx0XHRmb3IgKGogPSAwOyBqIDwgYVZpc2libGVTZWN0aW9ucy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdGxldCBzaG91bGRCcmVhayA9IGZhbHNlO1xuXHRcdFx0XHRcdC8vIExvb3Agb3ZlciBhbGwgdmlzaWJsZSBzZWN0aW9ucyBmcm9tIGhlYWRlciBzZWN0aW9uIHRvIGxhc3QgdmlzaWJsZSBzZWN0aW9uXG5cdFx0XHRcdFx0c2VjdGlvbiA9IGFWaXNpYmxlU2VjdGlvbnNbal07XG5cdFx0XHRcdFx0YVN1YlNlY3Rpb25zID0gc2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpO1xuXHRcdFx0XHRcdGZvciAoayA9IDA7IGsgPCBhU3ViU2VjdGlvbnMubGVuZ3RoOyBrKyspIHtcblx0XHRcdFx0XHRcdGNvbnN0IHN1YlNlY3Rpb24gPSBhU3ViU2VjdGlvbnNba107XG5cdFx0XHRcdFx0XHRjb25zdCBvTWVzc2FnZU9iamVjdCA9IG1lc3NhZ2U/LmdldEJpbmRpbmdDb250ZXh0KFwibWVzc2FnZVwiKT8uZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0XHR0aGlzLnNHZW5lcmFsR3JvdXBUZXh0ID0gdGhpcy5fZ2V0R2VuZXJhbEdyb3VwVGV4dChvVmlldywgb01lc3NhZ2VPYmplY3QpO1xuXHRcdFx0XHRcdFx0Y29uc3QgYUNvbnRyb2xzID0gbWVzc2FnZUhhbmRsaW5nLmdldENvbnRyb2xGcm9tTWVzc2FnZVJlbGF0aW5nVG9TdWJTZWN0aW9uKHN1YlNlY3Rpb24sIG9NZXNzYWdlT2JqZWN0KTtcblx0XHRcdFx0XHRcdGlmIChhQ29udHJvbHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvVGFyZ2V0ZWRDb250cm9sID0gdGhpcy5fY29tcHV0ZU1lc3NhZ2VHcm91cEFuZFN1YlRpdGxlKFxuXHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2UsXG5cdFx0XHRcdFx0XHRcdFx0c2VjdGlvbixcblx0XHRcdFx0XHRcdFx0XHRzdWJTZWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdGFDb250cm9scyxcblx0XHRcdFx0XHRcdFx0XHRhU3ViU2VjdGlvbnMubGVuZ3RoID4gMSxcblx0XHRcdFx0XHRcdFx0XHRzQWN0aW9uTmFtZVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRiSXNHZW5lcmFsR3JvdXBOYW1lID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdC8vIGlmIHdlIGZvdW5kIHRhYmxlIHRoYXQgbWF0Y2hlcyB3aXRoIHRoZSBtZXNzYWdlLCB3ZSBkb24ndCBzdG9wIHRoZSBsb29wXG5cdFx0XHRcdFx0XHRcdC8vIGluIGNhc2Ugd2UgZmluZCBhbiBhZGRpdGlvbmFsIGNvbnRyb2wgKGVnIG1kYyBmaWVsZCkgdGhhdCBhbHNvIG1hdGNoIHdpdGggdGhlIG1lc3NhZ2Vcblx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdG9UYXJnZXRlZENvbnRyb2wgJiZcblx0XHRcdFx0XHRcdFx0XHQhb1RhcmdldGVkQ29udHJvbC5pc0EoXCJzYXAubS5UYWJsZVwiKSAmJlxuXHRcdFx0XHRcdFx0XHRcdCEob1RhcmdldGVkQ29udHJvbCBhcyBVSTVFbGVtZW50KS5pc0EoXCJzYXAudWkudGFibGUuVGFibGVcIilcblx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0c2hvdWxkQnJlYWsgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChzaG91bGRCcmVhaykge1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChiSXNHZW5lcmFsR3JvdXBOYW1lKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb01lc3NhZ2VPYmplY3QgPSBtZXNzYWdlLmdldEJpbmRpbmdDb250ZXh0KFwibWVzc2FnZVwiKT8uZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0aWYgKHRoaXMuaXNIaWRkZW5EcmFmdEVuYWJsZWQpIHtcblx0XHRcdFx0XHRcdG1lc3NhZ2Uuc2V0QWN0aXZlVGl0bGUodHJ1ZSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG1lc3NhZ2Uuc2V0QWN0aXZlVGl0bGUoZmFsc2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAob01lc3NhZ2VPYmplY3QucGVyc2lzdGVudCAmJiBzQWN0aW9uTmFtZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5fc2V0R3JvdXBMYWJlbEZvclRyYW5zaWVudE1zZyhtZXNzYWdlLCBzQWN0aW9uTmFtZSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG1lc3NhZ2Uuc2V0R3JvdXBOYW1lKHRoaXMuc0dlbmVyYWxHcm91cFRleHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIWVuYWJsZUJpbmRpbmcgJiYgbWVzc2FnZS5nZXRHcm91cE5hbWUoKSA9PT0gdGhpcy5zR2VuZXJhbEdyb3VwVGV4dCAmJiB0aGlzLl9maW5kVGFyZ2V0Rm9yTWVzc2FnZShtZXNzYWdlKSkge1xuXHRcdFx0XHRcdC8vIHdoZW4gdGhlIHNlY3Rpb24gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgdmlldyBwb3J0XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvL0ZldGNoZXMgdGhlIGdyb3VwIG5hbWUgb2YgdGhlIG1lc3NhZ2UgYmFzZWQgb24gZW5hYmxlZG1lbnQgb2YgaGlkZGVuIGRyYWZ0IGFuZCBwYWdlIHdoZXJlIGVycm9yIGlzIHByZXNlbnQoY3VycmVudCBwYWdlL290aGVyIHBhZ2UpXG5cdF9nZXRHZW5lcmFsR3JvdXBUZXh0KG9WaWV3OiBWaWV3IHwgdW5kZWZpbmVkLCBvTWVzc2FnZU9iamVjdDogTWVzc2FnZSk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgdmlld1BhdGggPSBvVmlldz8uZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IG1lc3NhZ2VUYXJnZXRQYXRoID0gb01lc3NhZ2VPYmplY3Q/LmdldFRhcmdldHMoKVswXTtcblx0XHRpZiAodGhpcy5pc0hpZGRlbkRyYWZ0RW5hYmxlZCAmJiB2aWV3UGF0aCAmJiAhbWVzc2FnZVRhcmdldFBhdGguaW5jbHVkZXModmlld1BhdGgpKSB7XG5cdFx0XHRyZXR1cm4gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpIS5nZXRUZXh0KFwiVF9NRVNTQUdFX0JVVFRPTl9TQVBGRV9NRVNTQUdFX0dST1VQX09USEVSX1BBR0VTXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpIS5nZXRUZXh0KFwiVF9NRVNTQUdFX0JVVFRPTl9TQVBGRV9NRVNTQUdFX0dST1VQX0dFTkVSQUxcIik7XG5cdFx0fVxuXHR9XG5cblx0X2ZpbmRUYXJnZXRGb3JNZXNzYWdlKG1lc3NhZ2U6IE1lc3NhZ2VJdGVtKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgbWVzc2FnZU9iamVjdCA9IG1lc3NhZ2UuZ2V0QmluZGluZ0NvbnRleHQoXCJtZXNzYWdlXCIpICYmIG1lc3NhZ2UuZ2V0QmluZGluZ0NvbnRleHQoXCJtZXNzYWdlXCIpPy5nZXRPYmplY3QoKTtcblx0XHRpZiAobWVzc2FnZU9iamVjdCAmJiBtZXNzYWdlT2JqZWN0LnRhcmdldCkge1xuXHRcdFx0Y29uc3Qgb01ldGFNb2RlbCA9IHRoaXMub09iamVjdFBhZ2VMYXlvdXQ/LmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0XHRjb250ZXh0UGF0aCA9IG9NZXRhTW9kZWwgJiYgb01ldGFNb2RlbC5nZXRNZXRhUGF0aChtZXNzYWdlT2JqZWN0LnRhcmdldCksXG5cdFx0XHRcdG9Db250ZXh0UGF0aE1ldGFkYXRhID0gb01ldGFNb2RlbCAmJiBvTWV0YU1vZGVsLmdldE9iamVjdChjb250ZXh0UGF0aCk7XG5cdFx0XHRpZiAob0NvbnRleHRQYXRoTWV0YWRhdGEgJiYgb0NvbnRleHRQYXRoTWV0YWRhdGEuJGtpbmQgPT09IFwiUHJvcGVydHlcIikge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEVuYWJsZSBiaW5kaW5ncyBvZiBzdWIgc2VjdGlvbiBjb250ZW50IChibG9ja3MsIG1vcmUgYmxvY2tzLCBhbmQgYWN0aW9ucykuXG5cdCAqIEBwYXJhbSBzdWJTZWN0aW9uIE9iamVjdCBwYWdlIHN1YiBzZWN0aW9uXG5cdCAqL1xuXHRfZm5FbmFibGVTdWJTZWN0aW9uQmluZGluZyhzdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbik6IHZvaWQge1xuXHRcdHN1YlNlY3Rpb24uZ2V0QmxvY2tzKCkuZm9yRWFjaCgoYmxvY2spID0+IGJsb2NrLnNldEJpbmRpbmdDb250ZXh0KHVuZGVmaW5lZCkpO1xuXHRcdHN1YlNlY3Rpb24uZ2V0TW9yZUJsb2NrcygpLmZvckVhY2goKHN1YkJsb2NrKSA9PiBzdWJCbG9jay5zZXRCaW5kaW5nQ29udGV4dCh1bmRlZmluZWQpKTtcblx0XHRzdWJTZWN0aW9uLmdldEFjdGlvbnMoKS5mb3JFYWNoKChhY3Rpb25zKSA9PiBhY3Rpb25zLnNldEJpbmRpbmdDb250ZXh0KHVuZGVmaW5lZCkpO1xuXHR9XG5cblx0X2ZuRW5hYmxlQmluZGluZ3MoYVNlY3Rpb25zOiBPYmplY3RQYWdlU2VjdGlvbltdKTogdm9pZCB7XG5cdFx0Zm9yIChsZXQgaVNlY3Rpb24gPSAwOyBpU2VjdGlvbiA8IGFTZWN0aW9ucy5sZW5ndGg7IGlTZWN0aW9uKyspIHtcblx0XHRcdGNvbnN0IG9TZWN0aW9uID0gYVNlY3Rpb25zW2lTZWN0aW9uXTtcblx0XHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCk7XG5cdFx0XHRmb3IgKGxldCBpU3ViU2VjdGlvbiA9IDA7IGlTdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgaVN1YlNlY3Rpb24rKykge1xuXHRcdFx0XHRjb25zdCBvU3ViU2VjdGlvbiA9IGFTdWJTZWN0aW9uc1tpU3ViU2VjdGlvbl07XG5cdFx0XHRcdGNvbnN0IG9BbGxCbG9ja3MgPSBvU3ViU2VjdGlvbi5nZXRCbG9ja3MoKTtcblx0XHRcdFx0aWYgKG9BbGxCbG9ja3MpIHtcblx0XHRcdFx0XHR0aGlzLl9mbkVuYWJsZVN1YlNlY3Rpb25CaW5kaW5nKG9TdWJTZWN0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob1N1YlNlY3Rpb24uZ2V0QmluZGluZ0NvbnRleHQoKSkge1xuXHRcdFx0XHRcdHRoaXMuX2ZpbmRNZXNzYWdlR3JvdXBBZnRlclJlYmluZGluZygpO1xuXHRcdFx0XHRcdChvU3ViU2VjdGlvbi5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0KVxuXHRcdFx0XHRcdFx0LmdldEJpbmRpbmcoKVxuXHRcdFx0XHRcdFx0LmF0dGFjaERhdGFSZWNlaXZlZCh0aGlzLl9maW5kTWVzc2FnZUdyb3VwQWZ0ZXJSZWJpbmRpbmcuYmluZCh0aGlzKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfZmluZE1lc3NhZ2VHcm91cEFmdGVyUmViaW5kaW5nKCk6IHZvaWQge1xuXHRcdGNvbnN0IGFNZXNzYWdlcyA9IHRoaXMub01lc3NhZ2VQb3BvdmVyLmdldEl0ZW1zKCk7XG5cdFx0dGhpcy5fY2hlY2tDb250cm9sSWRJblNlY3Rpb25zKGFNZXNzYWdlcywgdHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIG1ldGhvZCB0aGF0IHJldHJpZXZlcyB0aGUgdmlldyBJRCAoSFRNTFZpZXcvWE1MVmlldy9KU09Odmlldy9KU1ZpZXcvVGVtcGxhdGV2aWV3KSBvZiBhbnkgY29udHJvbC5cblx0ICogQHBhcmFtIHNDb250cm9sSWQgSUQgb2YgdGhlIGNvbnRyb2wgbmVlZGVkIHRvIHJldHJpZXZlIHRoZSB2aWV3IElEXG5cdCAqIEByZXR1cm5zIFRoZSB2aWV3IElEIG9mIHRoZSBjb250cm9sXG5cdCAqL1xuXHRfZ2V0Vmlld0lkKHNDb250cm9sSWQ6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IHNWaWV3SWQsXG5cdFx0XHRvQ29udHJvbDogTWFuYWdlZE9iamVjdCB8IHVuZGVmaW5lZCB8IG51bGwgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHNDb250cm9sSWQpO1xuXHRcdHdoaWxlIChvQ29udHJvbCkge1xuXHRcdFx0aWYgKG9Db250cm9sIGluc3RhbmNlb2YgVmlldykge1xuXHRcdFx0XHRzVmlld0lkID0gb0NvbnRyb2wuZ2V0SWQoKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRvQ29udHJvbCA9IG9Db250cm9sLmdldFBhcmVudCgpO1xuXHRcdH1cblx0XHRyZXR1cm4gc1ZpZXdJZDtcblx0fVxuXG5cdF9zZXRMb25ndGV4dFVybERlc2NyaXB0aW9uKG9EaWFnbm9zaXNUaXRsZTogRm9ybWF0dGVkVGV4dCk6IHZvaWQge1xuXHRcdHRoaXMub01lc3NhZ2VQb3BvdmVyLnNldEFzeW5jRGVzY3JpcHRpb25IYW5kbGVyKGZ1bmN0aW9uIChjb25maWc6IHtcblx0XHRcdGl0ZW06IE1lc3NhZ2VJdGVtO1xuXHRcdFx0cHJvbWlzZToge1xuXHRcdFx0XHRyZXNvbHZlOiBGdW5jdGlvbjtcblx0XHRcdFx0cmVqZWN0OiBGdW5jdGlvbjtcblx0XHRcdH07XG5cdFx0fSkge1xuXHRcdFx0Ly8gSGVyZSB3ZSBjYW4gZmV0Y2ggdGhlIGRhdGEgYW5kIGNvbmNhdGVuYXRlIGl0IHRvIHRoZSBvbGQgb25lXG5cdFx0XHQvLyBCeSBkZWZhdWx0LCB0aGUgbG9uZ3RleHRVcmwgZmV0Y2hpbmcgd2lsbCBvdmVyd3JpdGUgdGhlIGRlc2NyaXB0aW9uICh3aXRoIHRoZSBkZWZhdWx0IGJlaGF2aW91cilcblx0XHRcdC8vIEhlcmUgYXMgd2UgaGF2ZSBvdmVyd3JpdHRlbiB0aGUgZGVmYXVsdCBhc3luYyBoYW5kbGVyLCB3aGljaCBmZXRjaGVzIGFuZCByZXBsYWNlcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGl0ZW1cblx0XHRcdC8vIHdlIGNhbiBtYW51YWxseSBtb2RpZnkgaXQgdG8gaW5jbHVkZSB3aGF0ZXZlciBuZWVkZWQuXG5cdFx0XHRjb25zdCBzTG9uZ1RleHRVcmwgPSBjb25maWcuaXRlbS5nZXRMb25ndGV4dFVybCgpO1xuXHRcdFx0aWYgKHNMb25nVGV4dFVybCkge1xuXHRcdFx0XHRqUXVlcnkuYWpheCh7XG5cdFx0XHRcdFx0dHlwZTogXCJHRVRcIixcblx0XHRcdFx0XHR1cmw6IHNMb25nVGV4dFVybCxcblx0XHRcdFx0XHRzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YTogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzRGlhZ25vc2lzVGV4dCA9IG9EaWFnbm9zaXNUaXRsZS5nZXRIdG1sVGV4dCgpICsgZGF0YTtcblx0XHRcdFx0XHRcdGNvbnN0IG9sZERlc2NyaXB0aW9uID0gY29uZmlnLml0ZW0uZ2V0RGVzY3JpcHRpb24oKSA/PyBcIlwiO1xuXHRcdFx0XHRcdFx0Y29uZmlnLml0ZW0uc2V0RGVzY3JpcHRpb24oYCR7b2xkRGVzY3JpcHRpb259JHtzRGlhZ25vc2lzVGV4dH1gKTtcblx0XHRcdFx0XHRcdGNvbmZpZy5wcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGVycm9yOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzRXJyb3IgPSBgQSByZXF1ZXN0IGhhcyBmYWlsZWQgZm9yIGxvbmcgdGV4dCBkYXRhLiBVUkw6ICR7c0xvbmdUZXh0VXJsfWA7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3Ioc0Vycm9yKTtcblx0XHRcdFx0XHRcdGNvbmZpZy5wcm9taXNlLnJlamVjdChzRXJyb3IpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogSXQgZGlzcGxheXMgdGhlIHJvdyBpbmZvcm1hdGlvbiBvZiB0aGUgZXJyb3IgZXhpc3RpbmcgaW4gdGhlIHRhYmxlLlxuXHQgKiBAcGFyYW0gdGFibGVcblx0ICogQHBhcmFtIHRhYmxlUm93Q29udGV4dFxuXHQgKiBAcGFyYW0gdGFibGVDb2xQcm9wZXJ0eVxuXHQgKiBAcmV0dXJucyByb3dJbmZvcm1hdGlvblxuXHQgKi9cblxuXHRwcm9jZXNzVGFibGVDb2x1bW5Qcm9wZXJ0aWVzKHRhYmxlOiBUYWJsZSwgdGFibGVSb3dDb250ZXh0OiBPRGF0YVY0Q29udGV4dCwgdGFibGVDb2xQcm9wZXJ0eTogVGFibGVDb2x1bW5Qcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRsZXQgcm93SW5mb3JtYXRpb24gPSBcIlwiO1xuXG5cdFx0Y29uc3QgdGFibGVDb2xCaW5kaW5nQ29udGV4dFRleHRBbm5vdGF0aW9uID0gbWVzc2FnZUhhbmRsaW5nLmdldFRhYmxlQ29sQmluZGluZ0NvbnRleHRGb3JUZXh0QW5ub3RhdGlvbihcblx0XHRcdHRhYmxlLFxuXHRcdFx0dGFibGVSb3dDb250ZXh0LFxuXHRcdFx0dGFibGVDb2xQcm9wZXJ0eVxuXHRcdCk7XG5cdFx0Y29uc3QgdGFibGVDb2xUZXh0QW5ub3RhdGlvblBhdGggPSB0YWJsZUNvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb25cblx0XHRcdD8gdGFibGVDb2xCaW5kaW5nQ29udGV4dFRleHRBbm5vdGF0aW9uLmdldE9iamVjdChcIiRQYXRoXCIpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRjb25zdCB0YWJsZUNvbFRleHRBcnJhbmdlbWVudCA9XG5cdFx0XHR0YWJsZUNvbFRleHRBbm5vdGF0aW9uUGF0aCAmJiB0YWJsZUNvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb25cblx0XHRcdFx0PyB0YWJsZUNvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb24uZ2V0T2JqZWN0KFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudC8kRW51bU1lbWJlclwiKVxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRjb25zdCBsYWJlbFdpdGhWYWx1ZSA9ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSk/LmdldFRhYmxlQ29sVmFsdWUoXG5cdFx0XHR0YWJsZVJvd0NvbnRleHQsXG5cdFx0XHR0YWJsZUNvbFRleHRBbm5vdGF0aW9uUGF0aCxcblx0XHRcdHRhYmxlQ29sVGV4dEFycmFuZ2VtZW50LFxuXHRcdFx0dGFibGVDb2xQcm9wZXJ0eVxuXHRcdCk7XG5cdFx0cm93SW5mb3JtYXRpb24gKz0gYCR7bGFiZWxXaXRoVmFsdWV9YDtcblxuXHRcdHJldHVybiByb3dJbmZvcm1hdGlvbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBJdCBjb21wdXRlcyB0aGUgY29sdW1uIGluZm9ybWF0aW9uLlxuXHQgKiBAcGFyYW0gbWVzc2FnZVxuXHQgKiBAcGFyYW0gdGFibGVUYXJnZXRDb2xOYW1lXG5cdCAqIEBwYXJhbSByb3dJbmZvcm1hdGlvblxuXHQgKiBAcGFyYW0gdGFibGVcblx0ICogQHJldHVybnMgY29sdW1uSW5mb1xuXHQgKi9cblxuXHRjb21wdXRlQ29sdW1uSW5mbyhtZXNzYWdlOiBNZXNzYWdlSXRlbSwgdGFibGVUYXJnZXRDb2xOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsIHJvd0luZm9ybWF0aW9uOiBzdHJpbmdbXSwgdGFibGU6IFRhYmxlKTogc3RyaW5nIHtcblx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gZ2V0UmVzb3VyY2VNb2RlbCh0YWJsZSk7XG5cdFx0Y29uc3QgbXNnT2JqID0gbWVzc2FnZS5nZXRCaW5kaW5nQ29udGV4dChcIm1lc3NhZ2VcIik/LmdldE9iamVjdCgpO1xuXHRcdGNvbnN0IGNvbEZyb21UYWJsZVNldHRpbmdzID0gbWVzc2FnZUhhbmRsaW5nLmZldGNoQ29sdW1uSW5mbyhtc2dPYmosIHRhYmxlKTtcblx0XHRsZXQgY29sdW1uSW5mbyA9IFwiXCI7XG5cblx0XHRpZiAodGFibGVUYXJnZXRDb2xOYW1lKSB7XG5cdFx0XHQvLyBpZiBjb2x1bW4gaW4gcHJlc2VudCBpbiB0YWJsZSBkZWZpbml0aW9uXG5cdFx0XHRjb2x1bW5JbmZvID0gYCR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0dST1VQX0RFU0NSSVBUSU9OX1RBQkxFX0NPTFVNTlwiKX06ICR7dGFibGVUYXJnZXRDb2xOYW1lfWA7XG5cdFx0fSBlbHNlIGlmIChjb2xGcm9tVGFibGVTZXR0aW5ncykge1xuXHRcdFx0aWYgKGNvbEZyb21UYWJsZVNldHRpbmdzLmF2YWlsYWJpbGl0eSA9PT0gXCJIaWRkZW5cIikge1xuXHRcdFx0XHQvLyBpZiBjb2x1bW4gaW4gbmVpdGhlciBpbiB0YWJsZSBkZWZpbml0aW9uIG5vciBwZXJzb25hbGl6YXRpb25cblx0XHRcdFx0aWYgKG1lc3NhZ2UuZ2V0VHlwZSgpID09PSBcIkVycm9yXCIpIHtcblx0XHRcdFx0XHRjb2x1bW5JbmZvID1cblx0XHRcdFx0XHRcdHJvd0luZm9ybWF0aW9uLmxlbmd0aCA+IDBcblx0XHRcdFx0XHRcdFx0PyBgJHtyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0NPTFVNTl9BVkFJTEFCTEVfRElBR05PU0lTX01TR0RFU0NfRVJST1JcIil9ICR7cm93SW5mb3JtYXRpb24uam9pbihcIiwgXCIpfWAgKyBcIi5cIlxuXHRcdFx0XHRcdFx0XHQ6IGAke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfQ09MVU1OX0FWQUlMQUJMRV9ESUFHTk9TSVNfTVNHREVTQ19FUlJPUlwiKX1gICsgXCIuXCI7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29sdW1uSW5mbyA9XG5cdFx0XHRcdFx0XHRyb3dJbmZvcm1hdGlvbi5sZW5ndGggPiAwXG5cdFx0XHRcdFx0XHRcdD8gYCR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9DT0xVTU5fQVZBSUxBQkxFX0RJQUdOT1NJU19NU0dERVNDXCIpfSAke3Jvd0luZm9ybWF0aW9uLmpvaW4oXCIsIFwiKX1gICsgXCIuXCJcblx0XHRcdFx0XHRcdFx0OiBgJHtyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0NPTFVNTl9BVkFJTEFCTEVfRElBR05PU0lTX01TR0RFU0NcIil9YCArIFwiLlwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBpZiBjb2x1bW4gaXMgbm90IGluIHRhYmxlIGRlZmluaXRpb24gYnV0IGluIHBlcnNvbmFsaXphdGlvblxuXHRcdFx0XHQvL2lmIG5vIG5hdmlnYXRpb24gdG8gc3ViIG9wIHRoZW4gcmVtb3ZlIGxpbmsgdG8gZXJyb3IgZmllbGQgQkNQIDogMjI4MDE2ODg5OVxuXHRcdFx0XHRpZiAoIXRoaXMuX25hdmlnYXRpb25Db25maWd1cmVkKHRhYmxlKSkge1xuXHRcdFx0XHRcdG1lc3NhZ2Uuc2V0QWN0aXZlVGl0bGUoZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbHVtbkluZm8gPSBgJHtyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfREVTQ1JJUFRJT05fVEFCTEVfQ09MVU1OXCIpfTogJHtcblx0XHRcdFx0XHRjb2xGcm9tVGFibGVTZXR0aW5ncy5sYWJlbFxuXHRcdFx0XHR9ICgke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfQ09MVU1OX0lORElDQVRPUl9JTl9UQUJMRV9ERUZJTklUSU9OXCIpfSlgO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjb2x1bW5JbmZvO1xuXHR9XG5cblx0LyoqXG5cdCAqIEl0IGRpc3BsYXlzIHRoZSByb3cgaW5mb3JtYXRpb24gb2YgdGhlIGVycm9yIGV4aXN0aW5nIGluIHRoZSB0YWJsZS5cblx0ICogQHBhcmFtIG1lc3NhZ2Vcblx0ICogQHBhcmFtIHRhYmxlUm93Q29udGV4dFxuXHQgKiBAcGFyYW0gdGFibGVUYXJnZXRDb2xOYW1lXG5cdCAqIEBwYXJhbSB0YWJsZVxuXHQgKi9cblxuXHRfZm9ybWF0TWVzc2FnZURlc2NyaXB0aW9uKFxuXHRcdG1lc3NhZ2U6IE1lc3NhZ2VJdGVtLFxuXHRcdHRhYmxlUm93Q29udGV4dDogT0RhdGFWNENvbnRleHQsXG5cdFx0dGFibGVUYXJnZXRDb2xOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0dGFibGU6IE1EQ1RhYmxlXG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKHRhYmxlKTtcblx0XHRjb25zdCB0YWJsZUNvbFByb3BlcnR5ID0gKHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKT8uZ2V0VGFibGVDb2x1bW5WaXNpYmlsaXR5SW5mbyh0YWJsZVJvd0NvbnRleHQpO1xuXG5cdFx0Y29uc3Qgcm93SW5mb3JtYXRpb246IHN0cmluZ1tdID0gW107XG5cdFx0dGFibGVDb2xQcm9wZXJ0eT8uZm9yRWFjaCgoeyBrZXksIHZpc2liaWxpdHkgfSkgPT4ge1xuXHRcdFx0cm93SW5mb3JtYXRpb24ucHVzaCh0aGlzLnByb2Nlc3NUYWJsZUNvbHVtblByb3BlcnRpZXModGFibGUsIHRhYmxlUm93Q29udGV4dCwgW3sga2V5LCB2aXNpYmlsaXR5IH1dKSk7XG5cdFx0fSk7XG5cblx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5jb21wdXRlQ29sdW1uSW5mbyhtZXNzYWdlLCB0YWJsZVRhcmdldENvbE5hbWUsIHJvd0luZm9ybWF0aW9uLCB0YWJsZSk7XG5cblx0XHRjb25zdCBmaWVsZHNBZmZlY3RlZFRpdGxlID0gbmV3IEZvcm1hdHRlZFRleHQoe1xuXHRcdFx0aHRtbFRleHQ6IGA8aHRtbD48Ym9keT48c3Ryb25nPiR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9GSUVMRFNfQUZGRUNURURfVElUTEVcIil9PC9zdHJvbmc+PC9ib2R5PjwvaHRtbD48YnI+YFxuXHRcdH0pO1xuXHRcdGxldCBmaWVsZEFmZmVjdGVkVGV4dDogc3RyaW5nO1xuXHRcdGlmIChBcnJheS5pc0FycmF5KHJvd0luZm9ybWF0aW9uKSAmJiByb3dJbmZvcm1hdGlvbi5sZW5ndGggPiAwKSB7XG5cdFx0XHRpZiAocm93SW5mb3JtYXRpb24ubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdC8vIElmIHRoZXJl4oCZcyBvbmx5IG9uZSBjb2x1bW4gaW4gdGhlIHRhYmxlLCBkaXNwbGF5IGl0IGluIGEgc2luZ2xlIGxpbmUuXG5cdFx0XHRcdGZpZWxkQWZmZWN0ZWRUZXh0ID0gYCR7ZmllbGRzQWZmZWN0ZWRUaXRsZS5nZXRIdG1sVGV4dCgpfTxicj4ke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XHRcIlRfTUVTU0FHRV9HUk9VUF9USVRMRV9UQUJMRV9ERU5PTUlOQVRPUlwiXG5cdFx0XHRcdCl9OiAke3RhYmxlLmdldEhlYWRlcigpfTxicj4ke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XHRcIlRfTUVTU0FHRV9HUk9VUF9ERVNDUklQVElPTl9UQUJMRV9ST1dcIlxuXHRcdFx0XHQpfTogJHtyb3dJbmZvcm1hdGlvbn08YnI+JHtjb2x1bW5JbmZvfTxicj5gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gSWYgdGhlcmUgYXJlIG11bHRpcGxlIGNvbHVtbnMgaW4gdGhlIHRhYmxlLCBkaXNwbGF5IHRoZW0gaW4gbXVsdGlwbGUgbGluZXMuXG5cdFx0XHRcdGZpZWxkQWZmZWN0ZWRUZXh0ID0gYCR7ZmllbGRzQWZmZWN0ZWRUaXRsZS5nZXRIdG1sVGV4dCgpfTxicj4ke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XHRcIlRfTUVTU0FHRV9HUk9VUF9USVRMRV9UQUJMRV9ERU5PTUlOQVRPUlwiXG5cdFx0XHRcdCl9OiAke3RhYmxlLmdldEhlYWRlcigpfTxicj4ke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XHRcIlRfTUVTU0FHRV9HUk9VUF9ERVNDUklQVElPTl9UQUJMRV9ST1dcIlxuXHRcdFx0XHQpfTo8YnI+JmVtc3A7ICR7cm93SW5mb3JtYXRpb24uam9pbihcIjxicj4mZW1zcDsgXCIpfTxicj4ke2NvbHVtbkluZm99PGJyPmA7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChjb2x1bW5JbmZvID09IFwiXCIgfHwgIWNvbHVtbkluZm8pIHtcblx0XHRcdGZpZWxkQWZmZWN0ZWRUZXh0ID0gXCJcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZmllbGRBZmZlY3RlZFRleHQgPSBgJHtmaWVsZHNBZmZlY3RlZFRpdGxlLmdldEh0bWxUZXh0KCl9PGJyPiR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFxuXHRcdFx0XHRcIlRfTUVTU0FHRV9HUk9VUF9USVRMRV9UQUJMRV9ERU5PTUlOQVRPUlwiXG5cdFx0XHQpfTogJHt0YWJsZS5nZXRIZWFkZXIoKX08YnI+JHtjb2x1bW5JbmZvfTxicj5gO1xuXHRcdH1cblxuXHRcdGNvbnN0IGRpYWdub3Npc1RpdGxlID0gbmV3IEZvcm1hdHRlZFRleHQoe1xuXHRcdFx0aHRtbFRleHQ6IGA8aHRtbD48Ym9keT48c3Ryb25nPiR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9ESUFHTk9TSVNfVElUTEVcIil9PC9zdHJvbmc+PC9ib2R5PjwvaHRtbD48YnI+YFxuXHRcdH0pO1xuXHRcdC8vIGdldCB0aGUgVUkgbWVzc2FnZXMgZnJvbSB0aGUgbWVzc2FnZSBjb250ZXh0IHRvIHNldCBpdCB0byBEaWFnbm9zaXMgc2VjdGlvblxuXHRcdGNvbnN0IHVJTWVzc2FnZURlc2NyaXB0aW9uID0gbWVzc2FnZS5nZXRCaW5kaW5nQ29udGV4dChcIm1lc3NhZ2VcIik/LmdldE9iamVjdCgpLmRlc2NyaXB0aW9uO1xuXHRcdC8vc2V0IHRoZSBkZXNjcmlwdGlvbiB0byB1bmRlZmluZWQgdG8gcmVzZXQgaXQgYmVsb3dcblx0XHRtZXNzYWdlLnNldERlc2NyaXB0aW9uKHVuZGVmaW5lZCk7XG5cdFx0bGV0IGRpYWdub3Npc1RleHQgPSBcIlwiO1xuXHRcdGxldCBtZXNzYWdlRGVzY3JpcHRpb25Db250ZW50ID0gXCJcIjtcblx0XHRpZiAobWVzc2FnZS5nZXRMb25ndGV4dFVybCgpKSB7XG5cdFx0XHRtZXNzYWdlRGVzY3JpcHRpb25Db250ZW50ID0gZmllbGRBZmZlY3RlZFRleHQgPyBgJHtmaWVsZEFmZmVjdGVkVGV4dH08YnI+YCA6IFwiXCI7XG5cdFx0XHRtZXNzYWdlLnNldERlc2NyaXB0aW9uKG1lc3NhZ2VEZXNjcmlwdGlvbkNvbnRlbnQpO1xuXHRcdFx0dGhpcy5fc2V0TG9uZ3RleHRVcmxEZXNjcmlwdGlvbihkaWFnbm9zaXNUaXRsZSk7XG5cdFx0fSBlbHNlIGlmICh1SU1lc3NhZ2VEZXNjcmlwdGlvbikge1xuXHRcdFx0ZGlhZ25vc2lzVGV4dCA9IGAke2RpYWdub3Npc1RpdGxlLmdldEh0bWxUZXh0KCl9PGJyPiR7dUlNZXNzYWdlRGVzY3JpcHRpb259YDtcblx0XHRcdG1lc3NhZ2VEZXNjcmlwdGlvbkNvbnRlbnQgPSBgJHtmaWVsZEFmZmVjdGVkVGV4dH08YnI+JHtkaWFnbm9zaXNUZXh0fWA7XG5cdFx0XHRtZXNzYWdlLnNldERlc2NyaXB0aW9uKG1lc3NhZ2VEZXNjcmlwdGlvbkNvbnRlbnQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtZXNzYWdlLnNldERlc2NyaXB0aW9uKGZpZWxkQWZmZWN0ZWRUZXh0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogV2hlbiB0aGVyZSBhcmUgbm8gbWVzc2FnZXMgdG8gc2hvdyBpbiB0aGUgTWVzc2FnZSBCb3guXG5cdCAqL1xuXHRoYW5kbGVOb01lc3NhZ2VzKCk6IHZvaWQge1xuXHRcdHRoaXMuc2V0VmlzaWJsZShmYWxzZSk7XG5cdFx0dGhpcy5maXJlRXZlbnQoXCJtZXNzYWdlQ2hhbmdlXCIsIHtcblx0XHRcdGlNZXNzYWdlTGVuZ3RoOiAwXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHNldCB0aGUgYnV0dG9uIHRleHQsIGNvdW50IGFuZCBpY29uIHByb3BlcnR5IGJhc2VkIHVwb24gdGhlIG1lc3NhZ2UgaXRlbXNcblx0ICogQnV0dG9uVHlwZTogIFBvc3NpYmxlIHNldHRpbmdzIGZvciB3YXJuaW5nIGFuZCBlcnJvciBtZXNzYWdlcyBhcmUgJ2NyaXRpY2FsJyBhbmQgJ25lZ2F0aXZlJy5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9zZXRNZXNzYWdlRGF0YSgpOiB2b2lkIHtcblx0XHRjbGVhclRpbWVvdXQodGhpcy5fc2V0TWVzc2FnZURhdGFUaW1lb3V0KTtcblxuXHRcdHRoaXMuX3NldE1lc3NhZ2VEYXRhVGltZW91dCA9IHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuXHRcdFx0Ly8gQ2xvc2UgbWVzc2FnZVBvcG92ZXIgaWYgb2JqZWN0UGFnZSBzaG93Rm9vdGVyIGlzIGZhbHNlXG5cdFx0XHRpZiAodGhpcy5vT2JqZWN0UGFnZUxheW91dCAmJiAhdGhpcy5vT2JqZWN0UGFnZUxheW91dC5nZXRTaG93Rm9vdGVyKCkpIHtcblx0XHRcdFx0dGhpcy5vTWVzc2FnZVBvcG92ZXIuY2xvc2UoKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgc0ljb24gPSBcIlwiLFxuXHRcdFx0XHRvTWVzc2FnZXMgPSB0aGlzLm9NZXNzYWdlUG9wb3Zlci5nZXRJdGVtcygpLFxuXHRcdFx0XHRvTWVzc2FnZUNvdW50OiBNZXNzYWdlQ291bnQgPSB7IEVycm9yOiAwLCBXYXJuaW5nOiAwLCBTdWNjZXNzOiAwLCBJbmZvcm1hdGlvbjogMCB9LFxuXHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLFxuXHRcdFx0XHRpTWVzc2FnZUxlbmd0aCA9IG9NZXNzYWdlcy5sZW5ndGg7XG5cdFx0XHRsZXQgc0J1dHRvblR5cGUgPSBCdXR0b25UeXBlLkRlZmF1bHQsXG5cdFx0XHRcdG1lc3NhZ2VLZXkgPSBcIlwiLFxuXHRcdFx0XHRtZXNzYWdlVGV4dCA9IFwiXCI7XG5cdFx0XHRpZiAoaU1lc3NhZ2VMZW5ndGggPiAwKSB7XG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgaU1lc3NhZ2VMZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdGlmICghb01lc3NhZ2VzW2ldLmdldFR5cGUoKSB8fCBvTWVzc2FnZXNbaV0uZ2V0VHlwZSgpLnRvU3RyaW5nKCkgPT09IFwiXCIpIHtcblx0XHRcdFx0XHRcdCsrb01lc3NhZ2VDb3VudFtcIkluZm9ybWF0aW9uXCJdO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQrK29NZXNzYWdlQ291bnRbb01lc3NhZ2VzW2ldLmdldFR5cGUoKSBhcyBrZXlvZiBNZXNzYWdlQ291bnRdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5FcnJvcl0gPiAwKSB7XG5cdFx0XHRcdFx0c0J1dHRvblR5cGUgPSBCdXR0b25UeXBlLk5lZ2F0aXZlO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuV2FybmluZ10gPiAwKSB7XG5cdFx0XHRcdFx0c0J1dHRvblR5cGUgPSBCdXR0b25UeXBlLkNyaXRpY2FsO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuU3VjY2Vzc10gPiAwKSB7XG5cdFx0XHRcdFx0c0J1dHRvblR5cGUgPSBCdXR0b25UeXBlLlN1Y2Nlc3M7XG5cdFx0XHRcdH0gZWxzZSBpZiAob01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbl0gPiAwKSB7XG5cdFx0XHRcdFx0c0J1dHRvblR5cGUgPSBCdXR0b25UeXBlLk5ldXRyYWw7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCB0b3RhbE51bWJlck9mTWVzc2FnZXMgPVxuXHRcdFx0XHRcdG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuRXJyb3JdICtcblx0XHRcdFx0XHRvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLldhcm5pbmddICtcblx0XHRcdFx0XHRvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLlN1Y2Nlc3NdICtcblx0XHRcdFx0XHRvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLkluZm9ybWF0aW9uXTtcblxuXHRcdFx0XHR0aGlzLnNldFRleHQodG90YWxOdW1iZXJPZk1lc3NhZ2VzLnRvU3RyaW5nKCkpO1xuXHRcdFx0XHRsZXQgbWVzc2FnZUNvdW50ID0gMDtcblx0XHRcdFx0Y29uc3QgbWVzc2FnZUtleXMgPSB7XG5cdFx0XHRcdFx0RXJyb3I6IHtcblx0XHRcdFx0XHRcdHNpbmdsZVRvb2x0aXBLZXk6IFwiQ19DT01NT05fU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9FUlJPUlwiLFxuXHRcdFx0XHRcdFx0bXVsdGlwbGVUb29sdGlwS2V5OiBcIkNfQ09NTU9OX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfTVVMVElQTEVfRVJST1JfVE9PTFRJUFwiXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRXYXJuaW5nOiB7XG5cdFx0XHRcdFx0XHRzaW5nbGVUb29sdGlwS2V5OiBcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX1dBUk5JTkdcIixcblx0XHRcdFx0XHRcdG11bHRpcGxlVG9vbHRpcEtleTogXCJDX0NPTU1PTl9TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1dBUk5JTkdfVE9PTFRJUFwiXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRJbmZvcm1hdGlvbjoge1xuXHRcdFx0XHRcdFx0c2luZ2xlVG9vbHRpcEtleTogXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9JTkZPXCIsXG5cdFx0XHRcdFx0XHRtdWx0aXBsZVRvb2x0aXBLZXk6IFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVfSU5GT1wiXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRTdWNjZXNzOiB7XG5cdFx0XHRcdFx0XHRzaW5nbGVUb29sdGlwS2V5OiBcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX1NVQ0NFU1NcIixcblx0XHRcdFx0XHRcdG11bHRpcGxlVG9vbHRpcEtleTogXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9NVUxUSVBMRV9TVUNDRVNTX1RPT0xUSVBcIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhtZXNzYWdlS2V5cykpIHtcblx0XHRcdFx0XHRjb25zdCBtZXNzYWdlVHlwZSA9IGtleSBhcyBrZXlvZiBNZXNzYWdlQ291bnQ7XG5cdFx0XHRcdFx0Y29uc3QgbWVzc2FnZVR5cGVDb3VudCA9IG9NZXNzYWdlQ291bnRbbWVzc2FnZVR5cGVdO1xuXHRcdFx0XHRcdGlmIChtZXNzYWdlVHlwZUNvdW50ID4gMSkge1xuXHRcdFx0XHRcdFx0bWVzc2FnZUNvdW50ID0gbWVzc2FnZVR5cGVDb3VudDtcblx0XHRcdFx0XHRcdG1lc3NhZ2VLZXkgPSB2YWx1ZS5tdWx0aXBsZVRvb2x0aXBLZXk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9IGVsc2UgaWYgKG1lc3NhZ2VUeXBlQ291bnQgPT09IDEpIHtcblx0XHRcdFx0XHRcdG1lc3NhZ2VDb3VudCA9IG1lc3NhZ2VUeXBlQ291bnQ7XG5cdFx0XHRcdFx0XHRtZXNzYWdlS2V5ID0gdmFsdWUuc2luZ2xlVG9vbHRpcEtleTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAobWVzc2FnZUtleSkge1xuXHRcdFx0XHRcdG1lc3NhZ2VUZXh0ID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQobWVzc2FnZUtleSk7XG5cdFx0XHRcdFx0Y29uc3QgTUVTU0FHRUJVVFRPTl9TSE9SVENVVCA9IFwiQ3RybCtTaGlmdCtNXCI7XG5cdFx0XHRcdFx0Y29uc3QgdG9vbFRpcCA9IGAke29SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFxuXHRcdFx0XHRcdFx0XCJDX0NPTU1PTl9TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RPT0xUSVBcIlxuXHRcdFx0XHRcdCl9OiAke21lc3NhZ2VDb3VudH0gJHttZXNzYWdlVGV4dH0gKCR7TUVTU0FHRUJVVFRPTl9TSE9SVENVVH0pYDtcblx0XHRcdFx0XHR0aGlzLnNldFRvb2x0aXAodG9vbFRpcCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5zZXRJY29uKHNJY29uKTtcblx0XHRcdFx0dGhpcy5zZXRUeXBlKHNCdXR0b25UeXBlKTtcblx0XHRcdFx0dGhpcy5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdFx0XHRjb25zdCBvVmlldyA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5zVmlld0lkKSBhcyBGRVZpZXc7XG5cdFx0XHRcdGlmIChvVmlldykge1xuXHRcdFx0XHRcdGNvbnN0IG9QYWdlUmVhZHkgPSBvVmlldy5nZXRDb250cm9sbGVyKCkucGFnZVJlYWR5O1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRhd2FpdCBvUGFnZVJlYWR5LndhaXRQYWdlUmVhZHkoKTtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMuX2FwcGx5R3JvdXBpbmdBc3luYyhvVmlldyk7XG5cdFx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJmYWlsIGdyb3VwaW5nIG1lc3NhZ2VzXCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLmZpcmVFdmVudChcIm1lc3NhZ2VDaGFuZ2VcIiwge1xuXHRcdFx0XHRcdFx0aU1lc3NhZ2VMZW5ndGg6IGlNZXNzYWdlTGVuZ3RoXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGlNZXNzYWdlTGVuZ3RoID4gMSkge1xuXHRcdFx0XHRcdHRoaXMub01lc3NhZ2VQb3BvdmVyLm5hdmlnYXRlQmFjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmhhbmRsZU5vTWVzc2FnZXMoKTtcblx0XHRcdH1cblx0XHR9LCAxMDApIGFzIHVua25vd24gYXMgbnVtYmVyO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBtZXRob2QgdGhhdCBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgY2xpY2tzIG9uIHRoZSB0aXRsZSBvZiB0aGUgbWVzc2FnZS5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIG9FdmVudCBFdmVudCBvYmplY3QgcGFzc2VkIGZyb20gdGhlIGhhbmRsZXJcblx0ICovXG5cdGFzeW5jIF9hY3RpdmVUaXRsZVByZXNzKG9FdmVudDogTWVzc2FnZVBvcG92ZXIkQWN0aXZlVGl0bGVQcmVzc0V2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRCaW5kaW5nQ29udGV4dChcInBhZ2VJbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJlcnJvck5hdmlnYXRpb25TZWN0aW9uRmxhZ1wiLCB0cnVlKTtcblx0XHRjb25zdCBvSXRlbSA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJpdGVtXCIpLFxuXHRcdFx0b01lc3NhZ2UgPSBvSXRlbT8uZ2V0QmluZGluZ0NvbnRleHQoXCJtZXNzYWdlXCIpPy5nZXRPYmplY3QoKSxcblx0XHRcdGJJc0JhY2tlbmRNZXNzYWdlID0gbmV3IFJlZ0V4cChcIl4vXCIpLnRlc3Qob01lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdKSxcblx0XHRcdG9WaWV3ID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnNWaWV3SWQpIGFzIFZpZXc7XG5cdFx0aWYgKCFvSXRlbSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRsZXQgb0NvbnRyb2w6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQsIHNTZWN0aW9uVGl0bGU7XG5cdFx0Y29uc3QgX2RlZmF1bHRGb2N1cyA9IGZ1bmN0aW9uIChtZXNzYWdlOiBNZXNzYWdlLCBtZGNUYWJsZTogTURDVGFibGUpOiB2b2lkIHtcblx0XHRcdGNvbnN0IGZvY3VzSW5mbyA9IHsgcHJldmVudFNjcm9sbDogdHJ1ZSwgdGFyZ2V0SW5mbzogbWVzc2FnZSB9O1xuXHRcdFx0bWRjVGFibGUuZm9jdXMoZm9jdXNJbmZvKTtcblx0XHR9O1xuXG5cdFx0bGV0IGJJc0dlbmVyYWxHcm91cE5hbWUgPSB0cnVlO1xuXHRcdGxldCBzZWN0aW9uLCBzdWJTZWN0aW9ucywgbWVzc2FnZSwgaSwgaiwgaztcblx0XHRjb25zdCB2aXNpYmxlU2VjdGlvbnMgPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQodGhpcy5vT2JqZWN0UGFnZUxheW91dCEpO1xuXHRcdGlmICh2aXNpYmxlU2VjdGlvbnMpIHtcblx0XHRcdGNvbnN0IG1lc3NhZ2VzID0gdGhpcy5vTWVzc2FnZVBvcG92ZXIuZ2V0SXRlbXMoKTtcblx0XHRcdGZvciAoaSA9IG1lc3NhZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG5cdFx0XHRcdC8vIExvb3Agb3ZlciBhbGwgbWVzc2FnZXNcblx0XHRcdFx0bWVzc2FnZSA9IG1lc3NhZ2VzW2ldO1xuXHRcdFx0XHRmb3IgKGogPSB2aXNpYmxlU2VjdGlvbnMubGVuZ3RoIC0gMTsgaiA+PSAwOyAtLWopIHtcblx0XHRcdFx0XHQvLyBMb29wIG92ZXIgYWxsIHZpc2libGUgc2VjdGlvbnNcblx0XHRcdFx0XHRzZWN0aW9uID0gdmlzaWJsZVNlY3Rpb25zW2pdO1xuXHRcdFx0XHRcdHN1YlNlY3Rpb25zID0gc2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpO1xuXHRcdFx0XHRcdGZvciAoayA9IHN1YlNlY3Rpb25zLmxlbmd0aCAtIDE7IGsgPj0gMDsgLS1rKSB7XG5cdFx0XHRcdFx0XHQvLyBMb29wIG92ZXIgYWxsIHN1Yi1zZWN0aW9uc1xuXHRcdFx0XHRcdFx0Y29uc3Qgc3ViU2VjdGlvbiA9IHN1YlNlY3Rpb25zW2tdO1xuXHRcdFx0XHRcdFx0Y29uc3QgbWVzc2FnZU9iamVjdCA9IG1lc3NhZ2U/LmdldEJpbmRpbmdDb250ZXh0KFwibWVzc2FnZVwiKT8uZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0XHRjb25zdCBjb250cm9scyA9IG1lc3NhZ2VIYW5kbGluZy5nZXRDb250cm9sRnJvbU1lc3NhZ2VSZWxhdGluZ1RvU3ViU2VjdGlvbihzdWJTZWN0aW9uLCBtZXNzYWdlT2JqZWN0KTtcblx0XHRcdFx0XHRcdGlmIChjb250cm9scy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdGJJc0dlbmVyYWxHcm91cE5hbWUgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBvVGFyZ2V0TWRjVGFibGUgPSBvTWVzc2FnZS5jb250cm9sSWRzXG5cdFx0XHQubWFwKChjb250cm9sSWQ6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRjb25zdCBjb250cm9sID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChjb250cm9sSWQpO1xuXHRcdFx0XHRjb25zdCBwYXJlbnRDb250cm9sID0gY29udHJvbCAmJiBjb250cm9sLmdldFBhcmVudCgpO1xuXG5cdFx0XHRcdGlmICh0aGlzLmlzSGlkZGVuRHJhZnRFbmFibGVkKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHBhcmVudENvbnRyb2w/LmlzQShcInNhcC51aS5tZGMuVGFibGVcIikgPyBwYXJlbnRDb250cm9sIDogdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBwYXJlbnRDb250cm9sICYmXG5cdFx0XHRcdFx0cGFyZW50Q29udHJvbC5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpICYmXG5cdFx0XHRcdFx0b0l0ZW0uZ2V0R3JvdXBOYW1lKCkuaW5jbHVkZXMoKHBhcmVudENvbnRyb2wgYXMgVGFibGUpLmdldEhlYWRlcigpKVxuXHRcdFx0XHRcdD8gcGFyZW50Q29udHJvbFxuXHRcdFx0XHRcdDogbnVsbDtcblx0XHRcdH0pXG5cdFx0XHQucmVkdWNlKGZ1bmN0aW9uIChhY2M6IENvbnRyb2wsIHZhbDogQ29udHJvbCkge1xuXHRcdFx0XHRyZXR1cm4gdmFsID8gdmFsIDogYWNjO1xuXHRcdFx0fSk7XG5cblx0XHQvL2NoZWNrIGlmIHRoZSBwcmVzc2VkIGl0ZW0gaXMgcmVsYXRlZCB0byBhIHRhYmxlIGNvbnRyb2xcblx0XHRpZiAob1RhcmdldE1kY1RhYmxlKSB7XG5cdFx0XHRpZiAoYklzQmFja2VuZE1lc3NhZ2UpIHtcblx0XHRcdFx0c1NlY3Rpb25UaXRsZSA9IG9JdGVtLmdldEdyb3VwTmFtZSgpLnNwbGl0KFwiLCBcIilbMF07XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0aWYgKHRoaXMuaXNIaWRkZW5EcmFmdEVuYWJsZWQgJiYgKG9UYXJnZXRNZGNUYWJsZS5nZXRJZCgpICE9PSB0aGlzLnNWaWV3SWQgfHwgYklzR2VuZXJhbEdyb3VwTmFtZSkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHZpZXdJZCA9IHRoaXMuX2dldFZpZXdJZChvVGFyZ2V0TWRjVGFibGUuZ2V0SWQoKSk7XG5cdFx0XHRcdFx0XHQoKFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQodmlld0lkKSBhcyBWaWV3KS5nZXRDb250cm9sbGVyKCkgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXIpLl9yb3V0aW5nLm5hdmlnYXRlVG9Db250ZXh0KFxuXHRcdFx0XHRcdFx0XHRvVGFyZ2V0TWRjVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5fbmF2aWdhdGVGcm9tTWVzc2FnZVRvU2VjdGlvblRhYmxlSW5JY29uVGFiQmFyTW9kZShcblx0XHRcdFx0XHRcdFx0b1RhcmdldE1kY1RhYmxlLFxuXHRcdFx0XHRcdFx0XHR0aGlzLm9PYmplY3RQYWdlTGF5b3V0ISxcblx0XHRcdFx0XHRcdFx0c1NlY3Rpb25UaXRsZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3Qgb1JlZkVycm9yQ29udGV4dCA9IHRoaXMuX2dldFRhYmxlUmVmRXJyb3JDb250ZXh0KG9UYXJnZXRNZGNUYWJsZSk7XG5cdFx0XHRcdFx0Y29uc3Qgb1JlZkVycm9yID0gb1JlZkVycm9yQ29udGV4dD8uZ2V0UHJvcGVydHkob0l0ZW0uZ2V0QmluZGluZ0NvbnRleHQoXCJtZXNzYWdlXCIpPy5nZXRPYmplY3QoKS5nZXRJZCgpKTtcblx0XHRcdFx0XHRjb25zdCBfc2V0Rm9jdXNPblRhcmdldEZpZWxkID0gYXN5bmMgKHRhcmdldE1kY1RhYmxlOiBNRENUYWJsZSwgaVJvd0luZGV4OiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4gfCB1bmRlZmluZWQ+ID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGFUYXJnZXRNZGNUYWJsZVJvdyA9IHRoaXMuX2dldE1kY1RhYmxlUm93cyh0YXJnZXRNZGNUYWJsZSksXG5cdFx0XHRcdFx0XHRcdGlGaXJzdFZpc2libGVSb3cgPSB0aGlzLl9nZXRHcmlkVGFibGUodGFyZ2V0TWRjVGFibGUpPy5nZXRGaXJzdFZpc2libGVSb3coKSA/PyAwO1xuXHRcdFx0XHRcdFx0aWYgKGFUYXJnZXRNZGNUYWJsZVJvdy5sZW5ndGggPiAwICYmIGFUYXJnZXRNZGNUYWJsZVJvd1swXSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvVGFyZ2V0Um93ID0gYVRhcmdldE1kY1RhYmxlUm93W2lSb3dJbmRleCAtIGlGaXJzdFZpc2libGVSb3ddLFxuXHRcdFx0XHRcdFx0XHRcdG9UYXJnZXRDZWxsID0gdGhpcy5nZXRUYXJnZXRDZWxsKG9UYXJnZXRSb3csIG9NZXNzYWdlKTtcblx0XHRcdFx0XHRcdFx0aWYgKG9UYXJnZXRDZWxsKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zZXRGb2N1c1RvQ29udHJvbChvVGFyZ2V0Q2VsbCk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBjb250cm9sIG5vdCBmb3VuZCBvbiB0YWJsZVxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGVycm9yUHJvcGVydHlQYXRoID0gb01lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChlcnJvclByb3BlcnR5UGF0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0KG9WaWV3LmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsKS5zZXRQcm9wZXJ0eShcIi9tZXNzYWdlVGFyZ2V0UHJvcGVydHlQYXRoXCIsIGVycm9yUHJvcGVydHlQYXRoKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHRoaXMuX25hdmlnYXRpb25Db25maWd1cmVkKHRhcmdldE1kY1RhYmxlKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChvVmlldy5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLl9yb3V0aW5nLm5hdmlnYXRlRm9yd2FyZFRvQ29udGV4dChcblx0XHRcdFx0XHRcdFx0XHRcdFx0b1RhcmdldFJvdy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0aWYgKG9UYXJnZXRNZGNUYWJsZS5kYXRhKFwidGFibGVUeXBlXCIpID09PSBcIkdyaWRUYWJsZVwiICYmIG9SZWZFcnJvci5yb3dJbmRleCAhPT0gXCJcIikge1xuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0YXdhaXQgb1RhcmdldE1kY1RhYmxlLnNjcm9sbFRvSW5kZXgob1JlZkVycm9yLnJvd0luZGV4KTtcblx0XHRcdFx0XHRcdFx0c2V0VGltZW91dChhc3luYyBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgZm9jdXNPblRhcmdldEZpZWxkID0gYXdhaXQgX3NldEZvY3VzT25UYXJnZXRGaWVsZChvVGFyZ2V0TWRjVGFibGUsIG9SZWZFcnJvci5yb3dJbmRleCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGZvY3VzT25UYXJnZXRGaWVsZCA9PT0gZmFsc2UpIHtcblx0XHRcdFx0XHRcdFx0XHRcdF9kZWZhdWx0Rm9jdXMob01lc3NhZ2UsIG9UYXJnZXRNZGNUYWJsZSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9LCAwKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBmb2N1c2luZyBvbiBlcnJvclwiKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2UgaWYgKG9UYXJnZXRNZGNUYWJsZS5kYXRhKFwidGFibGVUeXBlXCIpID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiICYmIG9SZWZFcnJvcikge1xuXHRcdFx0XHRcdFx0Y29uc3QgZm9jdXNPbk1lc3NhZ2VUYXJnZXRDb250cm9sID0gYXdhaXQgdGhpcy5mb2N1c09uTWVzc2FnZVRhcmdldENvbnRyb2woXG5cdFx0XHRcdFx0XHRcdG9WaWV3LFxuXHRcdFx0XHRcdFx0XHRvTWVzc2FnZSxcblx0XHRcdFx0XHRcdFx0b1RhcmdldE1kY1RhYmxlLFxuXHRcdFx0XHRcdFx0XHRvUmVmRXJyb3Iucm93SW5kZXhcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRpZiAoZm9jdXNPbk1lc3NhZ2VUYXJnZXRDb250cm9sID09PSBmYWxzZSkge1xuXHRcdFx0XHRcdFx0XHRfZGVmYXVsdEZvY3VzKG9NZXNzYWdlLCBvVGFyZ2V0TWRjVGFibGUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aGlzLmZvY3VzT25NZXNzYWdlVGFyZ2V0Q29udHJvbChvVmlldywgb01lc3NhZ2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRmFpbCB0byBuYXZpZ2F0ZSB0byBFcnJvciBjb250cm9sXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvQ29udHJvbCA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQob01lc3NhZ2UuY29udHJvbElkc1swXSk7XG5cdFx0XHRcdGlmIChvQ29udHJvbCkge1xuXHRcdFx0XHRcdC8vSWYgdGhlIGNvbnRyb2wgdW5kZXJseWluZyB0aGUgZnJvbnRFbmQgbWVzc2FnZSBpcyBub3Qgd2l0aGluIHRoZSBjdXJyZW50IHNlY3Rpb24sIHdlIGZpcnN0IGdvIGludG8gdGhlIHRhcmdldCBzZWN0aW9uOlxuXHRcdFx0XHRcdGNvbnN0IHNlY3Rpb25zID0gKHRoaXMub09iamVjdFBhZ2VMYXlvdXQgYXMgT2JqZWN0UGFnZUxheW91dCkuZ2V0U2VjdGlvbnMoKTtcblx0XHRcdFx0XHRjb25zdCBzZWN0aW9uV2l0aFRoZUNvbnRyb2wgPSBzZWN0aW9ucy5maW5kKChzZWN0aW9uKSA9PiBzZWN0aW9uLmZpbmRFbGVtZW50cyh0cnVlKS5pbmNsdWRlcyhvQ29udHJvbCBhcyBVSTVFbGVtZW50KSk7XG5cdFx0XHRcdFx0aWYgKHNlY3Rpb25XaXRoVGhlQ29udHJvbCkge1xuXHRcdFx0XHRcdFx0c1NlY3Rpb25UaXRsZSA9IG9JdGVtLmdldEdyb3VwTmFtZSgpLnNwbGl0KFwiLCBcIilbMF07XG5cdFx0XHRcdFx0XHR0aGlzLl9uYXZpZ2F0ZUZyb21NZXNzYWdlVG9TZWN0aW9uSW5JY29uVGFiQmFyTW9kZSh0aGlzLm9PYmplY3RQYWdlTGF5b3V0ISwgc1NlY3Rpb25UaXRsZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuc2V0Rm9jdXNUb0NvbnRyb2wob0NvbnRyb2wpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBDYWxsIHRoZSBmdW5jdGlvbiB3aGVyZXZlciBuZWVkZWRcblx0XHRcdHRoaXMuaGFuZGxlTWVzc2FnZU5hdmlnYXRpb24ob0l0ZW0sIHZpc2libGVTZWN0aW9ucywgb01lc3NhZ2UsIG9WaWV3KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgbWVzc2FnZSBuYXZpZ2F0aW9uIGJ5IGZpbmRpbmcgdGhlIGFzc29jaWF0ZWQgc3Vic2VjdGlvbiwgZXhwYW5kaW5nIGl0LFxuXHQgKiBhbmQgbmF2aWdhdGluZyB0byB0aGUgY29ycmVjdCBzZWN0aW9uIGluIHRoZSBPYmplY3QgUGFnZSBMYXlvdXQuXG5cdCAqIEBwYXJhbSBvSXRlbSBUaGUgbWVzc2FnZSBpdGVtIGNvbnRhaW5pbmcgdGhlIGdyb3VwIG5hbWUuXG5cdCAqIEBwYXJhbSB2aXNpYmxlU2VjdGlvbnMgVGhlIGxpc3Qgb2YgdmlzaWJsZSBzZWN0aW9ucyBpbiB0aGUgT2JqZWN0IFBhZ2UuXG5cdCAqIEBwYXJhbSBvTWVzc2FnZSBUaGUgbWVzc2FnZSBvYmplY3QgY29udGFpbmluZyBjb250cm9sIElEcy5cblx0ICogQHBhcmFtIG9WaWV3IFRoZSBjdXJyZW50IFVJNSB2aWV3LlxuXHQgKi9cblx0aGFuZGxlTWVzc2FnZU5hdmlnYXRpb24ob0l0ZW06IE1lc3NhZ2VJdGVtLCB2aXNpYmxlU2VjdGlvbnM6IE9iamVjdFBhZ2VTZWN0aW9uW10sIG9NZXNzYWdlOiBNZXNzYWdlLCBvVmlldzogVmlldyk6IHZvaWQge1xuXHRcdC8vIEdldCBjb250cm9sIGlmIGl0IGlzIGluc2lkZSBhIGhpZGRlbiBzdWJzZWN0aW9uXG5cdFx0Y29uc3Qgb0NvbnRyb2wgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKG9NZXNzYWdlLmdldENvbnRyb2xJZHMoKVswXSk7XG5cdFx0Y29uc3Qgb1N1YlNlY3Rpb24gPSB0aGlzLmZpbmRTdWJTZWN0aW9uKG9JdGVtLCB2aXNpYmxlU2VjdGlvbnMsIG9Db250cm9sKTtcblxuXHRcdC8vIElmIHN1YnNlY3Rpb24gZm91bmQsIGV4cGFuZCBpdFxuXHRcdGlmIChvU3ViU2VjdGlvbikge1xuXHRcdFx0KG9TdWJTZWN0aW9uIGFzIFN1YlNlY3Rpb24pLnNldE1vZGUoXCJFeHBhbmRlZFwiKTtcblx0XHR9XG5cblx0XHQvLyBOYXZpZ2F0ZSB0byB0aGUgc2VjdGlvbiBiYXNlZCBvbiB0aGUgbWVzc2FnZSdzIGdyb3VwIG5hbWVcblx0XHRjb25zdCBzU2VjdGlvblRpdGxlID0gb0l0ZW0uZ2V0R3JvdXBOYW1lKCkuc3BsaXQoXCIsIFwiKVswXTtcblx0XHR0aGlzLl9uYXZpZ2F0ZUZyb21NZXNzYWdlVG9TZWN0aW9uSW5JY29uVGFiQmFyTW9kZSh0aGlzLm9PYmplY3RQYWdlTGF5b3V0ISwgc1NlY3Rpb25UaXRsZSk7XG5cblx0XHQvLyBGb2N1cyBvbiB0aGUgdGFyZ2V0IGNvbnRyb2xcblx0XHR0aGlzLmZvY3VzT25NZXNzYWdlVGFyZ2V0Q29udHJvbChvVmlldywgb01lc3NhZ2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZpbmRzIHRoZSBjb3JyZXNwb25kaW5nIHN1YnNlY3Rpb24gYmFzZWQgb24gdGhlIHByb3ZpZGVkIG1lc3NhZ2UgaXRlbSdzIGdyb3VwIG5hbWVcblx0ICogb3IgYnkgY2hlY2tpbmcgaWYgdGhlIGdpdmVuIGNvbnRyb2wgZXhpc3RzIGluc2lkZSB0aGUgc3Vic2VjdGlvbidzIE1vcmVCbG9ja3MuXG5cdCAqIEBwYXJhbSBvSXRlbSBUaGUgbWVzc2FnZSBpdGVtIGNvbnRhaW5pbmcgdGhlIGdyb3VwIG5hbWUuXG5cdCAqIEBwYXJhbSB2aXNpYmxlU2VjdGlvbnMgVGhlIGxpc3Qgb2YgdmlzaWJsZSBzZWN0aW9ucyBpbiB0aGUgT2JqZWN0IFBhZ2UuXG5cdCAqIEBwYXJhbSBvQ29udHJvbCBUaGUgVUk1IGNvbnRyb2wgdG8gY2hlY2sgZm9yIGluc2lkZSBNb3JlQmxvY2tzLlxuXHQgKiBAcmV0dXJucyAtIFRoZSBmb3VuZCBzdWJzZWN0aW9uLCBzZWN0aW9uLCBvciBudWxsIGlmIG5vdCBmb3VuZC5cblx0ICovXG5cdGZpbmRTdWJTZWN0aW9uKFxuXHRcdG9JdGVtOiBNZXNzYWdlSXRlbSxcblx0XHR2aXNpYmxlU2VjdGlvbnM6IE9iamVjdFBhZ2VTZWN0aW9uW10sXG5cdFx0b0NvbnRyb2w6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWRcblx0KTogU3ViU2VjdGlvbiB8IE9iamVjdFBhZ2VTZWN0aW9uIHwgdW5rbm93biB8IG51bGwge1xuXHRcdGNvbnN0IGdyb3VwTmFtZXMgPSBvSXRlbS5nZXRHcm91cE5hbWUoKS5zcGxpdChcIiwgXCIpO1xuXHRcdHJldHVybiB0aGlzLmZpbmRTdWJTZWN0aW9uQnlUaXRsZU9yQ29udHJvbCh2aXNpYmxlU2VjdGlvbnMsIGdyb3VwTmFtZXNbMV0sIG9Db250cm9sKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZWFyY2hlcyBmb3IgYSBzdWJzZWN0aW9uIGJhc2VkIG9uIHRoZSBnaXZlbiB0aXRsZSBvciBieSBjaGVja2luZ1xuXHQgKiBpZiB0aGUgc3BlY2lmaWVkIGNvbnRyb2wgaXMgcHJlc2VudCBpbnNpZGUgdGhlIHN1YnNlY3Rpb24ncyBNb3JlQmxvY2tzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0gdmlzaWJsZVNlY3Rpb25zIFRoZSBsaXN0IG9mIHZpc2libGUgc2VjdGlvbnMuXG5cdCAqIEBwYXJhbSB0aXRsZSBUaGUgdGl0bGUgdG8gbWF0Y2ggYWdhaW5zdCBzdWJzZWN0aW9uIHRpdGxlcy5cblx0ICogQHBhcmFtIG9Db250cm9sIFRoZSBVSTUgY29udHJvbCB0byBzZWFyY2ggZm9yIHdpdGhpbiBNb3JlQmxvY2tzLlxuXHQgKiBAcmV0dXJucyAtIFRoZSBmb3VuZCBzdWJzZWN0aW9uIG9yIG51bGwgaWYgbm8gbWF0Y2ggaXMgZm91bmQuXG5cdCAqL1xuXHRwcml2YXRlIGZpbmRTdWJTZWN0aW9uQnlUaXRsZU9yQ29udHJvbChcblx0XHR2aXNpYmxlU2VjdGlvbnM6IE9iamVjdFBhZ2VTZWN0aW9uW10sXG5cdFx0dGl0bGU6IHN0cmluZyxcblx0XHRvQ29udHJvbDogVUk1RWxlbWVudCB8IHVuZGVmaW5lZFxuXHQpOiBTdWJTZWN0aW9uIHwgbnVsbCB7XG5cdFx0Zm9yIChjb25zdCBzZWN0aW9uIG9mIHZpc2libGVTZWN0aW9ucykge1xuXHRcdFx0Zm9yIChjb25zdCBzdWJTZWN0aW9uIG9mIHNlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKSkge1xuXHRcdFx0XHQvLyBDaGVjayBpZiBzdWJzZWN0aW9uIHRpdGxlIG1hdGNoZXNcblx0XHRcdFx0aWYgKHN1YlNlY3Rpb24uZ2V0VGl0bGUoKSA9PT0gdGl0bGUpIHtcblx0XHRcdFx0XHRyZXR1cm4gc3ViU2VjdGlvbiBhcyBTdWJTZWN0aW9uO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2hlY2sgaWYgY29udHJvbCBleGlzdHMgaW5zaWRlIE1vcmVCbG9ja3Ncblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHN1YlNlY3Rpb25cblx0XHRcdFx0XHRcdC5nZXRNb3JlQmxvY2tzKClcblx0XHRcdFx0XHRcdC5zb21lKFxuXHRcdFx0XHRcdFx0XHQoYmxvY2spID0+XG5cdFx0XHRcdFx0XHRcdFx0KChibG9jayBhcyBWaWV3KS5nZXRDb250ZW50KCkgYXMgdW5rbm93biBhcyBDb250ZW50KT8uZmluZEVsZW1lbnRzKHRydWUpLmluY2x1ZGVzKG9Db250cm9sIGFzIFVJNUVsZW1lbnQpXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiBzdWJTZWN0aW9uIGFzIFN1YlNlY3Rpb247XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIGEgdGFibGUgY2VsbCB0YXJnZXRlZCBieSBhIG1lc3NhZ2UsIGVuc3VyaW5nIHRoZSBjZWxsIGlzIGVkaXRhYmxlLlxuXHQgKiBAcGFyYW0gdGFyZ2V0Um93IEEgdGFibGUgcm93XG5cdCAqIEBwYXJhbSBtZXNzYWdlIE1lc3NhZ2UgdGFyZ2V0aW5nIGEgY2VsbFxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBlZGl0YWJsZSBjZWxsIG9yIG51bGwvdW5kZWZpbmVkIGlmIG5vbmUgaXMgZm91bmRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGdldFRhcmdldENlbGwodGFyZ2V0Um93OiBVSTVFbGVtZW50LCBtZXNzYWdlOiBNZXNzYWdlKTogVUk1RWxlbWVudCB8IG51bGwgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGNvbnRyb2xJZHMgPSBtZXNzYWdlLmdldENvbnRyb2xJZHMoKTtcblx0XHRjb25zdCBoYXNOb25FZGl0YWJsZUZpZWxkID0gY29udHJvbElkcy5zb21lKChpZCkgPT4ge1xuXHRcdFx0Y29uc3QgY29udHJvbCA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpIGFzIEVuaGFuY2VXaXRoVUk1PEZpZWxkPjtcblx0XHRcdHJldHVybiBjb250cm9sPy5pc0EoXCJzYXAudWkubWRjLkZpZWxkXCIpICYmIGNvbnRyb2wuZ2V0RWRpdGFibGUgJiYgIWNvbnRyb2wuZ2V0RWRpdGFibGUoKTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBjb250cm9sSWRzLmxlbmd0aCA+IDBcblx0XHRcdD8gY29udHJvbElkc1xuXHRcdFx0XHRcdC5tYXAoZnVuY3Rpb24gKGNvbnRyb2xJZCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgaXNDb250cm9sSW5UYWJsZSA9IHRhcmdldFJvdy5maW5kRWxlbWVudHModHJ1ZSwgZnVuY3Rpb24gKGVsZW0pIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0uZ2V0SWQoKSA9PT0gY29udHJvbElkO1xuXHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdGlmIChpc0NvbnRyb2xJblRhYmxlLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgZWxlbWVudCA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29udHJvbElkKSBhcyBFbmhhbmNlV2l0aFVJNTxGaWVsZD47XG5cdFx0XHRcdFx0XHRcdGlmIChoYXNOb25FZGl0YWJsZUZpZWxkKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGVsZW1lbnQ/LmlzQShcInNhcC51aS5tZGMuRmllbGRcIikpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChlbGVtZW50LmdldEVkaXRhYmxlICYmICFlbGVtZW50LmdldEVkaXRhYmxlKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZWxlbWVudDtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LnJlZHVjZShmdW5jdGlvbiAoYWNjLCB2YWwpIHtcblx0XHRcdFx0XHRcdHJldHVybiB2YWwgPyB2YWwgOiBhY2M7XG5cdFx0XHRcdFx0fSwgbnVsbClcblx0XHRcdDogbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBGb2N1cyBvbiB0aGUgY29udHJvbCB0YXJnZXRlZCBieSBhIG1lc3NhZ2UuXG5cdCAqIEBwYXJhbSB2aWV3IFRoZSBjdXJyZW50IHZpZXdcblx0ICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdGFyZ2V0aW5nIHRoZSBjb250cm9sIG9uIHdoaWNoIHdlIHdhbnQgdG8gc2V0IHRoZSBmb2N1c1xuXHQgKiBAcGFyYW0gdGFyZ2V0TWRjVGFibGUgVGhlIHRhYmxlIHRhcmdldGVkIGJ5IHRoZSBtZXNzYWdlIChvcHRpb25hbClcblx0ICogQHBhcmFtIHJvd0luZGV4IFRoZSByb3cgaW5kZXggb2YgdGhlIHRhYmxlIHRhcmdldGVkIGJ5IHRoZSBtZXNzYWdlIChvcHRpb25hbClcblx0ICogQHJldHVybnMgUHJvbWlzZVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0YXN5bmMgZm9jdXNPbk1lc3NhZ2VUYXJnZXRDb250cm9sKFxuXHRcdHZpZXc6IFZpZXcsXG5cdFx0bWVzc2FnZTogTWVzc2FnZSxcblx0XHR0YXJnZXRNZGNUYWJsZT86IE1EQ1RhYmxlLFxuXHRcdHJvd0luZGV4PzogbnVtYmVyXG5cdCk6IFByb21pc2U8Ym9vbGVhbiB8IHVuZGVmaW5lZD4ge1xuXHRcdGNvbnN0IGFBbGxWaWV3RWxlbWVudHMgPSB2aWV3LmZpbmRFbGVtZW50cyh0cnVlKTtcblx0XHRjb25zdCBhRXJyb25lb3VzQ29udHJvbHMgPSBtZXNzYWdlXG5cdFx0XHQuZ2V0Q29udHJvbElkcygpXG5cdFx0XHQuZmlsdGVyKGZ1bmN0aW9uIChzQ29udHJvbElkOiBzdHJpbmcpIHtcblx0XHRcdFx0cmV0dXJuIGFBbGxWaWV3RWxlbWVudHMuc29tZShmdW5jdGlvbiAob0VsZW0pIHtcblx0XHRcdFx0XHRyZXR1cm4gb0VsZW0uZ2V0SWQoKSA9PT0gc0NvbnRyb2xJZCAmJiBvRWxlbS5nZXREb21SZWYoKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KVxuXHRcdFx0Lm1hcChmdW5jdGlvbiAoc0NvbnRyb2xJZDogc3RyaW5nKSB7XG5cdFx0XHRcdHJldHVybiBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHNDb250cm9sSWQpO1xuXHRcdFx0fSk7XG5cdFx0Y29uc3QgYU5vdFRhYmxlRXJyb25lb3VzQ29udHJvbHMgPSBhRXJyb25lb3VzQ29udHJvbHMuZmlsdGVyKGZ1bmN0aW9uIChvRWxlbTogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuICFvRWxlbT8uaXNBPFRhYmxlPihcInNhcC5tLlRhYmxlXCIpICYmICFvRWxlbT8uaXNBPFVJVGFibGU+KFwic2FwLnVpLnRhYmxlLlRhYmxlXCIpO1xuXHRcdH0pO1xuXHRcdC8vVGhlIGZvY3VzIGlzIHNldCBvbiBOb3QgVGFibGUgY29udHJvbCBpbiBwcmlvcml0eVxuXHRcdGlmIChhTm90VGFibGVFcnJvbmVvdXNDb250cm9scy5sZW5ndGggPiAwKSB7XG5cdFx0XHR0aGlzLnNldEZvY3VzVG9Db250cm9sKGFOb3RUYWJsZUVycm9uZW91c0NvbnRyb2xzWzBdKTtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIGlmIChhRXJyb25lb3VzQ29udHJvbHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgYVRhcmdldE1kY1RhYmxlUm93ID0gdGFyZ2V0TWRjVGFibGVcblx0XHRcdFx0PyB0YXJnZXRNZGNUYWJsZS5maW5kRWxlbWVudHMoXG5cdFx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdFx0KGVsZW06IENvbnRyb2wpID0+XG5cdFx0XHRcdFx0XHRcdGVsZW0uaXNBKENvbHVtbkxpc3RJdGVtLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpKSAmJiBlbGVtLmdldFBhcmVudCgpPy5nZXRQYXJlbnQoKSA9PT0gdGFyZ2V0TWRjVGFibGVcblx0XHRcdFx0ICApXG5cdFx0XHRcdDogW107XG5cdFx0XHRpZiAoYVRhcmdldE1kY1RhYmxlUm93Lmxlbmd0aCA+IDAgJiYgYVRhcmdldE1kY1RhYmxlUm93WzBdKSB7XG5cdFx0XHRcdGNvbnN0IG9UYXJnZXRSb3cgPSBhVGFyZ2V0TWRjVGFibGVSb3dbcm93SW5kZXggYXMgbnVtYmVyXTtcblx0XHRcdFx0Y29uc3Qgb1RhcmdldENlbGwgPSB0aGlzLmdldFRhcmdldENlbGwob1RhcmdldFJvdywgbWVzc2FnZSk7XG5cdFx0XHRcdGlmIChvVGFyZ2V0Q2VsbCkge1xuXHRcdFx0XHRcdGNvbnN0IG9UYXJnZXRGaWVsZCA9IG9UYXJnZXRDZWxsLmlzQTxGaWVsZD4oXCJzYXAuZmUubWFjcm9zLkZpZWxkXCIpXG5cdFx0XHRcdFx0XHQ/IChvVGFyZ2V0Q2VsbC5nZXRDb250ZW50KCkgYXMgRW5oYW5jZVdpdGhVSTU8RmllbGRXcmFwcGVyPikuZ2V0Q29udGVudEVkaXQoKVswXVxuXHRcdFx0XHRcdFx0OiAoKChvVGFyZ2V0Q2VsbCBhcyBIQm94KS5nZXRJdGVtcygpWzBdIGFzIEZpZWxkKS5nZXRDb250ZW50KCkgYXMgRW5oYW5jZVdpdGhVSTU8RmllbGRXcmFwcGVyPikuZ2V0Q29udGVudEVkaXQoKVswXTtcblx0XHRcdFx0XHR0aGlzLnNldEZvY3VzVG9Db250cm9sKG9UYXJnZXRGaWVsZCk7XG5cdFx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zdCBlcnJvclByb3BlcnR5UGF0aCA9IG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdO1xuXHRcdFx0XHRcdGlmIChlcnJvclByb3BlcnR5UGF0aCkge1xuXHRcdFx0XHRcdFx0KHZpZXcuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWwpLnNldFByb3BlcnR5KFwiL21lc3NhZ2VUYXJnZXRQcm9wZXJ0eVBhdGhcIiwgZXJyb3JQcm9wZXJ0eVBhdGgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAodGFyZ2V0TWRjVGFibGUgJiYgdGhpcy5fbmF2aWdhdGlvbkNvbmZpZ3VyZWQodGFyZ2V0TWRjVGFibGUpKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gKHZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5fcm91dGluZy5uYXZpZ2F0ZUZvcndhcmRUb0NvbnRleHQoXG5cdFx0XHRcdFx0XHRcdG9UYXJnZXRSb3cuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gb2JqIFRoZSBtZXNzYWdlIG9iamVjdFxuXHQgKiBAcGFyYW0gYVNlY3Rpb25zIFRoZSBhcnJheSBvZiBzZWN0aW9ucyBpbiB0aGUgb2JqZWN0IHBhZ2Vcblx0ICogQHJldHVybnMgVGhlIHJhbmsgb2YgdGhlIG1lc3NhZ2Vcblx0ICovXG5cdF9nZXRNZXNzYWdlUmFuayhvYmo6IE1lc3NhZ2UgJiB7IHNlY3Rpb25OYW1lOiBzdHJpbmc7IHN1YlNlY3Rpb25OYW1lOiBzdHJpbmcgfSwgYVNlY3Rpb25zOiBPYmplY3RQYWdlU2VjdGlvbltdIHwgdW5kZWZpbmVkKTogbnVtYmVyIHtcblx0XHRpZiAoYVNlY3Rpb25zKSB7XG5cdFx0XHRsZXQgc2VjdGlvbiwgYVN1YlNlY3Rpb25zLCBzdWJTZWN0aW9uLCBqLCBrLCBhRWxlbWVudHMsIGFBbGxFbGVtZW50cywgc2VjdGlvblJhbms7XG5cdFx0XHRmb3IgKGogPSAwOyBqIDwgYVNlY3Rpb25zLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdC8vIExvb3Agb3ZlciBhbGwgc2VjdGlvbnMgZnJvbSBmaXJzdCB0byBsYXN0XG5cdFx0XHRcdHNlY3Rpb24gPSBhU2VjdGlvbnNbal07XG5cdFx0XHRcdGFTdWJTZWN0aW9ucyA9IHNlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKTtcblx0XHRcdFx0Zm9yIChrID0gMDsgayA8IGFTdWJTZWN0aW9ucy5sZW5ndGg7IGsrKykge1xuXHRcdFx0XHRcdC8vIExvb3Agb3ZlciBhbGwgc3ViLXNlY3Rpb25zIGZyb20gZmlyc3QgdG8gbGFzdFxuXHRcdFx0XHRcdHN1YlNlY3Rpb24gPSBhU3ViU2VjdGlvbnNba107XG5cdFx0XHRcdFx0YUFsbEVsZW1lbnRzID0gc3ViU2VjdGlvbi5maW5kRWxlbWVudHModHJ1ZSk7IC8vIEdldCBhbGwgZWxlbWVudHMgaW5zaWRlIGEgc3ViLXNlY3Rpb25cblx0XHRcdFx0XHQvL1RyeSB0byBmaW5kIHRoZSBjb250cm9sIDEgaW5zaWRlIHRoZSBzdWIgc2VjdGlvblxuXHRcdFx0XHRcdGFFbGVtZW50cyA9IGFBbGxFbGVtZW50cy5maWx0ZXIodGhpcy5fZm5GaWx0ZXJVcG9uSWQuYmluZCh0aGlzLCBvYmouZ2V0Q29udHJvbElkKCkpKTtcblx0XHRcdFx0XHRzZWN0aW9uUmFuayA9IGogKyAxO1xuXHRcdFx0XHRcdGlmIChhRWxlbWVudHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0aWYgKHNlY3Rpb24uZ2V0VmlzaWJsZSgpICYmIHN1YlNlY3Rpb24uZ2V0VmlzaWJsZSgpKSB7XG5cdFx0XHRcdFx0XHRcdGlmICghb2JqLmhhc093blByb3BlcnR5KFwic2VjdGlvbk5hbWVcIikpIHtcblx0XHRcdFx0XHRcdFx0XHRvYmouc2VjdGlvbk5hbWUgPSBzZWN0aW9uLmdldFRpdGxlKCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aWYgKCFvYmouaGFzT3duUHJvcGVydHkoXCJzdWJTZWN0aW9uTmFtZVwiKSkge1xuXHRcdFx0XHRcdFx0XHRcdG9iai5zdWJTZWN0aW9uTmFtZSA9IHN1YlNlY3Rpb24uZ2V0VGl0bGUoKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gc2VjdGlvblJhbmsgKiAxMCArIChrICsgMSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHQvLyBpZiBzZWN0aW9uIG9yIHN1YnNlY3Rpb24gaXMgaW52aXNpYmxlIHRoZW4gZ3JvdXAgbmFtZSB3b3VsZCBiZSBMYXN0IEFjdGlvblxuXHRcdFx0XHRcdFx0XHQvLyBzbyByYW5raW5nIHNob3VsZCBiZSBsb3dlclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vaWYgc3ViIHNlY3Rpb24gdGl0bGUgaXMgT3RoZXIgbWVzc2FnZXMsIHdlIHJldHVybiBhIGhpZ2ggbnVtYmVyKHJhbmspLCB3aGljaCBlbnN1cmVzXG5cdFx0XHQvL3RoYXQgbWVzc2FnZXMgYmVsb25naW5nIHRvIHRoaXMgc3ViIHNlY3Rpb24gYWx3YXlzIGNvbWUgbGF0ZXIgaW4gbWVzc2FnZVBvcG92ZXJcblx0XHRcdGlmICghb2JqLnNlY3Rpb25OYW1lICYmICFvYmouc3ViU2VjdGlvbk5hbWUgJiYgb2JqLmdldFBlcnNpc3RlbnQoKSkge1xuXHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdH1cblx0XHRcdHJldHVybiA5OTk7XG5cdFx0fVxuXHRcdHJldHVybiA5OTk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IEZpbHRlciB0byBoaWRlIG1lc3NhZ2VzIGZyb20gdGhlIGRpYWxvZy5cblx0ICogQHJldHVybnMgRmlsdGVyXG5cdCAqL1xuXHRfZmlsdGVyT3V0TWVzc2FnZXNJbkRpYWxvZygpOiBGaWx0ZXIge1xuXHRcdGNvbnN0IGZuVGVzdCA9IChhQ29udHJvbElkczogc3RyaW5nW10pOiBib29sZWFuID0+IHtcblx0XHRcdHJldHVybiBtZXNzYWdlSGFuZGxpbmcuaXNNZXNzYWdlT3V0T2ZQYXJhbWV0ZXJEaWFsb2coYUNvbnRyb2xJZHMpO1xuXHRcdH07XG5cdFx0cmV0dXJuIG5ldyBGaWx0ZXIoe1xuXHRcdFx0cGF0aDogXCJjb250cm9sSWRzXCIsXG5cdFx0XHR0ZXN0OiBmblRlc3QsXG5cdFx0XHRjYXNlU2Vuc2l0aXZlOiB0cnVlXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogSWYgdGhlcmUgaXMgb25seSBvbmUgc3VjY2VzcyBtZXNzYWdlIGJvdW5kIHRvIHRoZSBjdXJyZW50IGNvbnRleHQsIHdlIGRvIG5vdCBmaWx0ZXIgaXQgb3V0LlxuXHQgKiBAcmV0dXJucyBCb29sZWFuIGlmIHRoZSBzaW5nbGUgc3VjY2VzcyBtZXNzYWdlIGlzIGZvdW5kXG5cdCAqL1xuXHRfZmlsdGVyT3V0Q29udGV4dFN1Y2Nlc3NNZXNzYWdlcygpOiBib29sZWFuIHtcblx0XHRjb25zdCBib3VuZENvbnRleHRTdWNjZXNzTWVzc2FnZXMgPSBbXTtcblx0XHRjb25zdCBtZXNzYWdlcyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdFx0bWVzc2FnZXMuZmlsdGVyKChtZXNzYWdlOiBNZXNzYWdlKSA9PiB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG1lc3NhZ2UuZ2V0VGFyZ2V0cygpLmxlbmd0aCA9PT0gMSAmJlxuXHRcdFx0XHRtZXNzYWdlLmdldFRhcmdldHMoKVswXSA9PT0gdGhpcy5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCkgJiZcblx0XHRcdFx0bWVzc2FnZS5nZXRQZXJzaXN0ZW50KCkgPT09IHRydWUgJiZcblx0XHRcdFx0bWVzc2FnZS5nZXRUeXBlKCkgPT09IE1lc3NhZ2VUeXBlLlN1Y2Nlc3Ncblx0XHRcdCkge1xuXHRcdFx0XHRib3VuZENvbnRleHRTdWNjZXNzTWVzc2FnZXMucHVzaChtZXNzYWdlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRpZiAoYm91bmRDb250ZXh0U3VjY2Vzc01lc3NhZ2VzLmxlbmd0aCA9PT0gMSAmJiBtZXNzYWdlcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdC8vIHdlIHdhbnQgdG8gaGlkZSBzdWNjZXNzIG1lc3NhZ2VzIG9ubHkgaWYgdGhleSBhcmUgYm91bmQgdG8gdGhlIGN1cnJlbnQgY29udGV4dCBhbmQgc2luZ2xlIHN1Y2Nlc3MgbWVzc2FnZXNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogRmlsdGVyIGZ1bmN0aW9uIHRvIGhpZGUgYmFjay1lbmQgbWVzc2FnZXMgaWYgdGhlIGNvbnRyb2wgaGFzIGVycm9yIHZhbGlkYXRpb24uXG5cdCAqIEByZXR1cm5zIEZpbHRlclxuXHQgKi9cblx0X2dldEZpbHRlclRvSGlkZUJhY2tlbmRNZXNzYWdlT25FcnJvclZhbGlkYXRpb24oKTogRmlsdGVyIHtcblx0XHRjb25zdCBnZXRJZHNPZkZpZWxzZFdpdGhFcnJvclZhbGlkYXRpb24gPSBmdW5jdGlvbiAoKTogc3RyaW5nW10ge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0TWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpXG5cdFx0XHRcdFx0LmdldERhdGEoKVxuXHRcdFx0XHRcdC5maWx0ZXIoKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IG1lc3NhZ2UudmFsaWRhdGlvbiA9PT0gdHJ1ZSAmJiBtZXNzYWdlLmdldENvbnRyb2xJZCgpPy5tYXRjaCgvZmllbGQuKi1pbm5lciQvaSkpXG5cdFx0XHRcdFx0Ly90aGUgZXJyb3IgcG9pbnQgdG8gdGhlIGlubmVyIGNvbnRyb2wsIHNvIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSAtaW5uZXIgdG8gZ2V0IHRoZSBmaWVsZCBpZFxuXHRcdFx0XHRcdC5tYXAoKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IG1lc3NhZ2UuZ2V0Q29udHJvbElkKCk/LnJlcGxhY2UoXCItaW5uZXJcIiwgXCJcIikpXG5cdFx0XHQpO1xuXHRcdH07XG5cblx0XHRjb25zdCBmblRlc3QgPSBmdW5jdGlvbiAoYUNvbnRyb2xJZHM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG5cdFx0XHQvLyBmaWx0ZXJpbmcgb3V0IHRoZSBiYWNrZW5kIG1lc3NhZ2VzIGlmIHRoZSBjb250cm9sIGhhcyBlcnJvciB2YWxpZGF0aW9uXG5cdFx0XHRyZXR1cm4gIWFDb250cm9sSWRzLnNvbWUoKGNvbnRyb2xJZDogc3RyaW5nKSA9PiBnZXRJZHNPZkZpZWxzZFdpdGhFcnJvclZhbGlkYXRpb24oKS5pbmNsdWRlcyhjb250cm9sSWQpKTtcblx0XHR9O1xuXHRcdHJldHVybiBuZXcgRmlsdGVyKHtcblx0XHRcdGZpbHRlcnM6IFtcblx0XHRcdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRcdFx0ZmlsdGVyczogW1xuXHRcdFx0XHRcdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRcdFx0XHRcdHBhdGg6IFwidmFsaWRhdGlvblwiLFxuXHRcdFx0XHRcdFx0XHRvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuRVEsXG5cdFx0XHRcdFx0XHRcdHZhbHVlMTogZmFsc2Vcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRcdFx0XHRcdHBhdGg6IFwiY29udHJvbElkc1wiLFxuXHRcdFx0XHRcdFx0XHR0ZXN0OiBmblRlc3QsXG5cdFx0XHRcdFx0XHRcdGNhc2VTZW5zaXRpdmU6IHRydWVcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRhbmQ6IHRydWVcblx0XHRcdFx0fSksXG5cdFx0XHRcdG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRcdHBhdGg6IFwidmFsaWRhdGlvblwiLFxuXHRcdFx0XHRcdG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5FUSxcblx0XHRcdFx0XHR2YWx1ZTE6IHRydWVcblx0XHRcdFx0fSlcblx0XHRcdF0sXG5cdFx0XHRhbmQ6IGZhbHNlXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHNldCB0aGUgZmlsdGVycyBiYXNlZCB1cG9uIHRoZSBtZXNzYWdlIGl0ZW1zXG5cdCAqIFRoZSBkZXNpcmVkIGZpbHRlciBvcGVyYXRpb24gaXM6XG5cdCAqICggZmlsdGVycyBwcm92aWRlZCBieSB1c2VyICYmICggdmFsaWRhdGlvbiA9IHRydWUgJiYgQ29udHJvbCBzaG91bGQgYmUgcHJlc2VudCBpbiB2aWV3ICkgfHwgbWVzc2FnZXMgZm9yIHRoZSBjdXJyZW50IG1hdGNoaW5nIGNvbnRleHQgKS5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdGFzeW5jIF9hcHBseUZpbHRlcnNBbmRTb3J0KCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGxldCBvVmFsaWRhdGlvbkZpbHRlcnMsXG5cdFx0XHRoaWRkZW5EcmFmdEZpbHRlcixcblx0XHRcdG9WYWxpZGF0aW9uQW5kQ29udGV4dEZpbHRlcixcblx0XHRcdG9GaWx0ZXJzLFxuXHRcdFx0c1BhdGgsXG5cdFx0XHRvU29ydGVyLFxuXHRcdFx0b0RpYWxvZ0ZpbHRlcixcblx0XHRcdG9iamVjdFBhZ2VMYXlvdXRTZWN0aW9uczogT2JqZWN0UGFnZVNlY3Rpb25bXSB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBhVXNlckRlZmluZWRGaWx0ZXI6IEZpbHRlcltdID0gW107XG5cblx0XHR0aGlzLnNWaWV3SWQgPSB0aGlzLnNWaWV3SWQgPyB0aGlzLnNWaWV3SWQgOiAodGhpcy5fZ2V0Vmlld0lkKHRoaXMuZ2V0SWQoKSkgYXMgc3RyaW5nKTtcblxuXHRcdC8vIEluaXRpYWxpemUgT2JqZWN0UGFnZUxheW91dCBpZiBub3QgYWxyZWFkeSBkb25lXG5cdFx0dGhpcy5vT2JqZWN0UGFnZUxheW91dCA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXQodGhpcywgdGhpcy5vT2JqZWN0UGFnZUxheW91dCk7XG5cblx0XHQvLyBDbG9zZSBtZXNzYWdlUG9wb3ZlciBpZiBvYmplY3RQYWdlIHNob3dGb290ZXIgaXMgZmFsc2Vcblx0XHRpZiAodGhpcy5vT2JqZWN0UGFnZUxheW91dCAmJiAhdGhpcy5vT2JqZWN0UGFnZUxheW91dC5nZXRTaG93Rm9vdGVyKCkpIHtcblx0XHRcdHRoaXMub01lc3NhZ2VQb3BvdmVyLmNsb3NlKCk7XG5cdFx0fVxuXHRcdC8vQWRkIHRoZSBmaWx0ZXJzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyXG5cdFx0Y29uc3QgYUN1c3RvbUZpbHRlcnMgPSB0aGlzLmdldEFnZ3JlZ2F0aW9uKFwiY3VzdG9tRmlsdGVyc1wiKSBhcyBDb250cm9sW10gfCB1bmRlZmluZWQ7XG5cdFx0aWYgKGFDdXN0b21GaWx0ZXJzKSB7XG5cdFx0XHRhQ3VzdG9tRmlsdGVycy5mb3JFYWNoKGZ1bmN0aW9uIChmaWx0ZXI6IENvbnRyb2wpIHtcblx0XHRcdFx0YVVzZXJEZWZpbmVkRmlsdGVyLnB1c2goXG5cdFx0XHRcdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRcdFx0XHRwYXRoOiBmaWx0ZXIuZ2V0UHJvcGVydHkoXCJwYXRoXCIpLFxuXHRcdFx0XHRcdFx0b3BlcmF0b3I6IGZpbHRlci5nZXRQcm9wZXJ0eShcIm9wZXJhdG9yXCIpLFxuXHRcdFx0XHRcdFx0dmFsdWUxOiBmaWx0ZXIuZ2V0UHJvcGVydHkoXCJ2YWx1ZTFcIiksXG5cdFx0XHRcdFx0XHR2YWx1ZTI6IGZpbHRlci5nZXRQcm9wZXJ0eShcInZhbHVlMlwiKVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gdGhpcy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGlmICghb0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHR0aGlzLnNldFZpc2libGUoZmFsc2UpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzUGF0aCA9IG9CaW5kaW5nQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHQvL0ZpbHRlciBmb3IgZmlsdGVyaW5nIG91dCBvbmx5IHZhbGlkYXRpb24gbWVzc2FnZXMgd2hpY2ggYXJlIGN1cnJlbnRseSBwcmVzZW50IGluIHRoZSB2aWV3XG5cdFx0XHRvVmFsaWRhdGlvbkZpbHRlcnMgPSBuZXcgRmlsdGVyKHtcblx0XHRcdFx0ZmlsdGVyczogW1xuXHRcdFx0XHRcdG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRcdFx0cGF0aDogXCJ2YWxpZGF0aW9uXCIsXG5cdFx0XHRcdFx0XHRvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuRVEsXG5cdFx0XHRcdFx0XHR2YWx1ZTE6IHRydWVcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRtZXNzYWdlQnV0dG9uSGVscGVyLmdldENoZWNrQ29udHJvbEluVmlld0ZpbHRlcih0aGlzLnNWaWV3SWQpXG5cdFx0XHRcdF0sXG5cdFx0XHRcdGFuZDogdHJ1ZVxuXHRcdFx0fSk7XG5cblx0XHRcdG9EaWFsb2dGaWx0ZXIgPSBuZXcgRmlsdGVyKHtcblx0XHRcdFx0ZmlsdGVyczogW3RoaXMuX2ZpbHRlck91dE1lc3NhZ2VzSW5EaWFsb2coKV1cblx0XHRcdH0pO1xuXG5cdFx0XHRjb25zdCBvQ29udGV4dFN1Y2Nlc3NGaWx0ZXJzID0gbmV3IEZpbHRlcih7XG5cdFx0XHRcdHBhdGg6IFwidGFyZ2V0XCIsXG5cdFx0XHRcdHRlc3Q6IHRoaXMuX2ZpbHRlck91dENvbnRleHRTdWNjZXNzTWVzc2FnZXMuYmluZCh0aGlzKSxcblx0XHRcdFx0Y2FzZVNlbnNpdGl2ZTogdHJ1ZVxuXHRcdFx0fSk7XG5cblx0XHRcdGxldCBmaWx0ZXJBcnJheTtcblx0XHRcdGlmICh0aGlzLmlzSGlkZGVuRHJhZnRFbmFibGVkKSB7XG5cdFx0XHRcdGNvbnN0IHZpZXdJZCA9IHRoaXMuX2dldFZpZXdJZCh0aGlzLmdldElkKCkpO1xuXHRcdFx0XHRjb25zdCB2aWV3ID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZCh2aWV3SWQgYXMgc3RyaW5nKSBhcyBWaWV3O1xuXHRcdFx0XHRjb25zdCB2aWV3Q29udGV4dCA9IHZpZXc/LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQ7XG5cdFx0XHRcdGNvbnN0IGNvbnRleHRQYXRoID0gKGF3YWl0ICh2aWV3LmdldENvbnRyb2xsZXIoKSBhcyBPYmplY3RQYWdlQ29udHJvbGxlcik/LmVkaXRGbG93LmdldFJvb3RDb250ZXh0KHZpZXdDb250ZXh0KSk/LmdldFBhdGgoKTtcblx0XHRcdFx0aGlkZGVuRHJhZnRGaWx0ZXIgPSBtZXNzYWdlQnV0dG9uSGVscGVyLmdldEhpZGRlbkRyYWZ0VXNlQ2FzZUZpbHRlcihjb250ZXh0UGF0aCk7XG5cdFx0XHRcdGNvbnN0IHZhbGlkYXRpb25BbmRIaWRkZW5EcmFmdEZpbHRlciA9IG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRcdGZpbHRlcnM6IFtvVmFsaWRhdGlvbkZpbHRlcnMsIGhpZGRlbkRyYWZ0RmlsdGVyXSxcblx0XHRcdFx0XHRhbmQ6IGZhbHNlXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRmaWx0ZXJBcnJheSA9IFt2YWxpZGF0aW9uQW5kSGlkZGVuRHJhZnRGaWx0ZXIsIG9EaWFsb2dGaWx0ZXIsIHRoaXMuX2dldEZpbHRlclRvSGlkZUJhY2tlbmRNZXNzYWdlT25FcnJvclZhbGlkYXRpb24oKV07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvVmFsaWRhdGlvbkFuZENvbnRleHRGaWx0ZXIgPSBuZXcgRmlsdGVyKHtcblx0XHRcdFx0XHRmaWx0ZXJzOiBbXG5cdFx0XHRcdFx0XHRvVmFsaWRhdGlvbkZpbHRlcnMsXG5cdFx0XHRcdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0XHRcdFx0cGF0aDogXCJ0YXJnZXRcIixcblx0XHRcdFx0XHRcdFx0b3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLlN0YXJ0c1dpdGgsXG5cdFx0XHRcdFx0XHRcdHZhbHVlMTogc1BhdGhcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRhbmQ6IGZhbHNlXG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGZpbHRlckFycmF5ID0gW1xuXHRcdFx0XHRcdG9WYWxpZGF0aW9uQW5kQ29udGV4dEZpbHRlcixcblx0XHRcdFx0XHRvQ29udGV4dFN1Y2Nlc3NGaWx0ZXJzLFxuXHRcdFx0XHRcdG9EaWFsb2dGaWx0ZXIsXG5cdFx0XHRcdFx0dGhpcy5fZ2V0RmlsdGVyVG9IaWRlQmFja2VuZE1lc3NhZ2VPbkVycm9yVmFsaWRhdGlvbigpXG5cdFx0XHRcdF07XG5cdFx0XHRcdC8vRmlsdGVyIGZvciBmaWx0ZXJpbmcgb3V0IHRoZSBib3VuZCBtZXNzYWdlcyBpLmUgdGFyZ2V0IHN0YXJ0cyB3aXRoIHRoZSBjb250ZXh0IHBhdGhcblx0XHRcdH1cblx0XHRcdGNvbnN0IG9WYWxpZGF0aW9uQ29udGV4dERpYWxvZ0ZpbHRlcnMgPSBuZXcgRmlsdGVyKHtcblx0XHRcdFx0ZmlsdGVyczogZmlsdGVyQXJyYXksXG5cdFx0XHRcdGFuZDogdHJ1ZVxuXHRcdFx0fSk7XG5cdFx0XHQvLyBhbmQgZmluYWxseSAtIGlmIHRoZXJlIGFueSAtIGFkZCBjdXN0b20gZmlsdGVyICh2aWEgT1IpXG5cdFx0XHRpZiAoYVVzZXJEZWZpbmVkRmlsdGVyLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0b0ZpbHRlcnMgPSBuZXcgRmlsdGVyKHtcblx0XHRcdFx0XHRmaWx0ZXJzOiBbYVVzZXJEZWZpbmVkRmlsdGVyLCBvVmFsaWRhdGlvbkNvbnRleHREaWFsb2dGaWx0ZXJzXSBhcyB1bmtub3duIGFzIEZpbHRlcltdLCAvLyBUT0RPIGluY29ycmVjdCxcblx0XHRcdFx0XHRhbmQ6IGZhbHNlXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b0ZpbHRlcnMgPSBvVmFsaWRhdGlvbkNvbnRleHREaWFsb2dGaWx0ZXJzO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5vSXRlbUJpbmRpbmcuZmlsdGVyKG9GaWx0ZXJzKTtcblx0XHRcdC8vIFdlIHN1cHBvcnQgc29ydGluZyBvbmx5IGZvciBPYmplY3RQYWdlTGF5b3V0IHVzZS1jYXNlLlxuXHRcdFx0aWYgKHRoaXMub09iamVjdFBhZ2VMYXlvdXQpIHtcblx0XHRcdFx0b1NvcnRlciA9IG5ldyBTb3J0ZXIoXG5cdFx0XHRcdFx0XCJcIixcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdChcblx0XHRcdFx0XHRcdG9iajE6IE1lc3NhZ2UgJiB7IHNlY3Rpb25OYW1lOiBzdHJpbmc7IHN1YlNlY3Rpb25OYW1lOiBzdHJpbmcgfSxcblx0XHRcdFx0XHRcdG9iajI6IE1lc3NhZ2UgJiB7IHNlY3Rpb25OYW1lOiBzdHJpbmc7IHN1YlNlY3Rpb25OYW1lOiBzdHJpbmcgfVxuXHRcdFx0XHRcdCkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKCFvYmplY3RQYWdlTGF5b3V0U2VjdGlvbnMpIHtcblx0XHRcdFx0XHRcdFx0b2JqZWN0UGFnZUxheW91dFNlY3Rpb25zID0gdGhpcy5vT2JqZWN0UGFnZUxheW91dCAmJiB0aGlzLm9PYmplY3RQYWdlTGF5b3V0LmdldFNlY3Rpb25zKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjb25zdCByYW5rQSA9IHRoaXMuX2dldE1lc3NhZ2VSYW5rKG9iajEsIG9iamVjdFBhZ2VMYXlvdXRTZWN0aW9ucyk7XG5cdFx0XHRcdFx0XHRjb25zdCByYW5rQiA9IHRoaXMuX2dldE1lc3NhZ2VSYW5rKG9iajIsIG9iamVjdFBhZ2VMYXlvdXRTZWN0aW9ucyk7XG5cdFx0XHRcdFx0XHRpZiAocmFua0EgPCByYW5rQikge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAocmFua0EgPiByYW5rQikge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJldHVybiAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0KTtcblx0XHRcdFx0dGhpcy5vSXRlbUJpbmRpbmcuc29ydChvU29ydGVyKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHNDb250cm9sSWRcblx0ICogQHBhcmFtIG9JdGVtXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGNvbnRyb2wgSUQgbWF0Y2hlcyB0aGUgaXRlbSBJRFxuXHQgKi9cblx0X2ZuRmlsdGVyVXBvbklkKHNDb250cm9sSWQ6IHN0cmluZywgb0l0ZW06IFVJNUVsZW1lbnQpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gc0NvbnRyb2xJZCA9PT0gb0l0ZW0uZ2V0SWQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIHNlY3Rpb24gYmFzZWQgb24gc2VjdGlvbiB0aXRsZSBhbmQgdmlzaWJpbGl0eS5cblx0ICogQHBhcmFtIG9PYmplY3RQYWdlIE9iamVjdCBwYWdlLlxuXHQgKiBAcGFyYW0gc1NlY3Rpb25UaXRsZSBTZWN0aW9uIHRpdGxlLlxuXHQgKiBAcmV0dXJucyBUaGUgc2VjdGlvblxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2dldFNlY3Rpb25CeVNlY3Rpb25UaXRsZShvT2JqZWN0UGFnZTogT2JqZWN0UGFnZUxheW91dCwgc1NlY3Rpb25UaXRsZTogc3RyaW5nKTogT2JqZWN0UGFnZVNlY3Rpb24gfCB1bmRlZmluZWQge1xuXHRcdGxldCBvU2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24gfCB1bmRlZmluZWQ7XG5cdFx0aWYgKHNTZWN0aW9uVGl0bGUpIHtcblx0XHRcdGNvbnN0IGFTZWN0aW9ucyA9IG9PYmplY3RQYWdlLmdldFNlY3Rpb25zKCk7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFTZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAoYVNlY3Rpb25zW2ldLmdldFZpc2libGUoKSAmJiBhU2VjdGlvbnNbaV0uZ2V0VGl0bGUoKSA9PT0gc1NlY3Rpb25UaXRsZSkge1xuXHRcdFx0XHRcdG9TZWN0aW9uID0gYVNlY3Rpb25zW2ldO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvU2VjdGlvbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZXMgdG8gdGhlIHNlY3Rpb24gaWYgdGhlIG9iamVjdCBwYWdlIHVzZXMgYW4gSWNvblRhYkJhciBhbmQgaWYgdGhlIGN1cnJlbnQgc2VjdGlvbiBpcyBub3QgdGhlIHRhcmdldCBvZiB0aGUgbmF2aWdhdGlvbi5cblx0ICogQHBhcmFtIG9PYmplY3RQYWdlIE9iamVjdCBwYWdlLlxuXHQgKiBAcGFyYW0gc1NlY3Rpb25UaXRsZSBTZWN0aW9uIHRpdGxlLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X25hdmlnYXRlRnJvbU1lc3NhZ2VUb1NlY3Rpb25Jbkljb25UYWJCYXJNb2RlKG9PYmplY3RQYWdlOiBPYmplY3RQYWdlTGF5b3V0LCBzU2VjdGlvblRpdGxlOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zdCBiVXNlSWNvblRhYkJhciA9IG9PYmplY3RQYWdlLmdldFVzZUljb25UYWJCYXIoKTtcblx0XHRpZiAoYlVzZUljb25UYWJCYXIpIHtcblx0XHRcdGNvbnN0IG9TZWN0aW9uID0gdGhpcy5fZ2V0U2VjdGlvbkJ5U2VjdGlvblRpdGxlKG9PYmplY3RQYWdlLCBzU2VjdGlvblRpdGxlKTtcblx0XHRcdGNvbnN0IHNTZWxlY3RlZFNlY3Rpb25JZCA9IG9PYmplY3RQYWdlLmdldFNlbGVjdGVkU2VjdGlvbigpO1xuXHRcdFx0aWYgKG9TZWN0aW9uICYmIHNTZWxlY3RlZFNlY3Rpb25JZCAhPT0gb1NlY3Rpb24uZ2V0SWQoKSkge1xuXHRcdFx0XHRvT2JqZWN0UGFnZS5zZXRTZWxlY3RlZFNlY3Rpb24ob1NlY3Rpb24uZ2V0SWQoKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgX25hdmlnYXRlRnJvbU1lc3NhZ2VUb1NlY3Rpb25UYWJsZUluSWNvblRhYkJhck1vZGUoXG5cdFx0b1RhYmxlOiBUYWJsZSxcblx0XHRvT2JqZWN0UGFnZTogT2JqZWN0UGFnZUxheW91dCxcblx0XHRzU2VjdGlvblRpdGxlOiBzdHJpbmdcblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgb1Jvd0JpbmRpbmcgPSBvVGFibGUuZ2V0Um93QmluZGluZygpO1xuXHRcdGNvbnN0IG9UYWJsZUNvbnRleHQgPSBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRjb25zdCBvT1BDb250ZXh0ID0gb09iamVjdFBhZ2UuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRjb25zdCBiU2hvdWxkV2FpdEZvclRhYmxlUmVmcmVzaCA9ICEob1RhYmxlQ29udGV4dCA9PT0gb09QQ29udGV4dCk7XG5cdFx0dGhpcy5fbmF2aWdhdGVGcm9tTWVzc2FnZVRvU2VjdGlvbkluSWNvblRhYkJhck1vZGUob09iamVjdFBhZ2UsIHNTZWN0aW9uVGl0bGUpO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZTogRnVuY3Rpb24pIHtcblx0XHRcdGlmIChiU2hvdWxkV2FpdEZvclRhYmxlUmVmcmVzaCkge1xuXHRcdFx0XHRvUm93QmluZGluZy5hdHRhY2hFdmVudE9uY2UoXCJjaGFuZ2VcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBNZGNUYWJsZSBpZiBpdCBpcyBmb3VuZCBhbW9uZyBhbnkgb2YgdGhlIHBhcmVudCBlbGVtZW50cy5cblx0ICogQHBhcmFtIG9FbGVtZW50IENvbnRyb2xcblx0ICogQHJldHVybnMgTURDIHRhYmxlIHx8IHVuZGVmaW5lZFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2dldE1kY1RhYmxlKG9FbGVtZW50OiBVSTVFbGVtZW50KTogTURDVGFibGUgfCB1bmRlZmluZWQge1xuXHRcdC8vY2hlY2sgaWYgdGhlIGVsZW1lbnQgaGFzIGEgdGFibGUgd2l0aGluIGFueSBvZiBpdHMgcGFyZW50c1xuXHRcdGxldCBvUGFyZW50RWxlbWVudCA9IG9FbGVtZW50LmdldFBhcmVudCgpO1xuXHRcdHdoaWxlIChvUGFyZW50RWxlbWVudCAmJiAhb1BhcmVudEVsZW1lbnQuaXNBPE1EQ1RhYmxlPihcInNhcC51aS5tZGMuVGFibGVcIikpIHtcblx0XHRcdG9QYXJlbnRFbGVtZW50ID0gb1BhcmVudEVsZW1lbnQuZ2V0UGFyZW50KCk7XG5cdFx0fVxuXHRcdHJldHVybiBvUGFyZW50RWxlbWVudCAmJiBvUGFyZW50RWxlbWVudC5pc0E8TURDVGFibGU+KFwic2FwLnVpLm1kYy5UYWJsZVwiKSA/IG9QYXJlbnRFbGVtZW50IDogdW5kZWZpbmVkO1xuXHR9XG5cblx0X2dldEdyaWRUYWJsZShvTWRjVGFibGU6IE1EQ1RhYmxlKTogVUlUYWJsZSB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIG9NZGNUYWJsZS5maW5kRWxlbWVudHModHJ1ZSwgZnVuY3Rpb24gKG9FbGVtOiBDb250cm9sKSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRvRWxlbS5pc0E8VUlUYWJsZT4oXCJzYXAudWkudGFibGUuVGFibGVcIikgJiZcblx0XHRcdFx0LyoqIFdlIGNoZWNrIHRoZSBlbGVtZW50IGJlbG9uZ3MgdG8gdGhlIE1kY1RhYmxlIDoqL1xuXHRcdFx0XHRvRWxlbS5nZXRQYXJlbnQoKSA9PT0gb01kY1RhYmxlXG5cdFx0XHQpO1xuXHRcdH0pWzBdIGFzIFVJVGFibGUgfCB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSB0YWJsZSByb3cgKGlmIGF2YWlsYWJsZSkgY29udGFpbmluZyB0aGUgZWxlbWVudC5cblx0ICogQHBhcmFtIG9FbGVtZW50IENvbnRyb2xcblx0ICogQHJldHVybnMgVGFibGUgcm93IHx8IHVuZGVmaW5lZFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2dldFRhYmxlUm93KG9FbGVtZW50OiBVSTVFbGVtZW50KTogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IG9QYXJlbnRFbGVtZW50ID0gb0VsZW1lbnQuZ2V0UGFyZW50KCk7XG5cdFx0d2hpbGUgKFxuXHRcdFx0b1BhcmVudEVsZW1lbnQgJiZcblx0XHRcdCFvUGFyZW50RWxlbWVudC5pc0E8Um93PihcInNhcC51aS50YWJsZS5Sb3dcIikgJiZcblx0XHRcdCFvUGFyZW50RWxlbWVudC5pc0E8Q3JlYXRpb25Sb3c+KFwic2FwLnVpLnRhYmxlLkNyZWF0aW9uUm93XCIpICYmXG5cdFx0XHQhb1BhcmVudEVsZW1lbnQuaXNBPENvbHVtbkxpc3RJdGVtPihDb2x1bW5MaXN0SXRlbS5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKSlcblx0XHQpIHtcblx0XHRcdG9QYXJlbnRFbGVtZW50ID0gb1BhcmVudEVsZW1lbnQuZ2V0UGFyZW50KCk7XG5cdFx0fVxuXHRcdHJldHVybiBvUGFyZW50RWxlbWVudCAmJlxuXHRcdFx0KG9QYXJlbnRFbGVtZW50LmlzQTxSb3c+KFwic2FwLnVpLnRhYmxlLlJvd1wiKSB8fFxuXHRcdFx0XHRvUGFyZW50RWxlbWVudC5pc0E8Q3JlYXRpb25Sb3c+KFwic2FwLnVpLnRhYmxlLkNyZWF0aW9uUm93XCIpIHx8XG5cdFx0XHRcdG9QYXJlbnRFbGVtZW50LmlzQTxDb2x1bW5MaXN0SXRlbT4oQ29sdW1uTGlzdEl0ZW0uZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkpKVxuXHRcdFx0PyAob1BhcmVudEVsZW1lbnQgYXMgVUk1RWxlbWVudClcblx0XHRcdDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgaW5kZXggb2YgdGhlIHRhYmxlIHJvdyBjb250YWluaW5nIHRoZSBlbGVtZW50LlxuXHQgKiBAcGFyYW0gb0VsZW1lbnQgQ29udHJvbFxuXHQgKiBAcmV0dXJucyBSb3cgaW5kZXggfHwgdW5kZWZpbmVkXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0VGFibGVSb3dJbmRleChvRWxlbWVudDogVUk1RWxlbWVudCk6IG51bWJlciB7XG5cdFx0Y29uc3Qgb1RhYmxlUm93ID0gdGhpcy5fZ2V0VGFibGVSb3cob0VsZW1lbnQpO1xuXHRcdGxldCBpUm93SW5kZXg7XG5cdFx0aWYgKG9UYWJsZVJvdz8uaXNBPFJvdz4oXCJzYXAudWkudGFibGUuUm93XCIpKSB7XG5cdFx0XHRpUm93SW5kZXggPSBvVGFibGVSb3cuZ2V0SW5kZXgoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aVJvd0luZGV4ID0gKG9UYWJsZVJvdyBhcyB7IGdldFRhYmxlPzogKCkgPT4gUmVzcG9uc2l2ZVRhYmxlIH0pXG5cdFx0XHRcdD8uZ2V0VGFibGU/LigpXG5cdFx0XHRcdC5nZXRJdGVtcygpXG5cdFx0XHRcdC5maW5kSW5kZXgoZnVuY3Rpb24gKGVsZW1lbnQ6IFVJNUVsZW1lbnQpIHtcblx0XHRcdFx0XHRyZXR1cm4gZWxlbWVudC5nZXRJZCgpID09PSBvVGFibGVSb3c/LmdldElkKCk7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gaVJvd0luZGV4ID8/IC0xO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgaW5kZXggb2YgdGhlIHRhYmxlIGNvbHVtbiBjb250YWluaW5nIHRoZSBlbGVtZW50LlxuXHQgKiBAcGFyYW0gZWxlbWVudCBDb250cm9sXG5cdCAqIEByZXR1cm5zIENvbHVtbiBpbmRleCB8fCB1bmRlZmluZWRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9nZXRUYWJsZUNvbHVtbkluZGV4KGVsZW1lbnQ6IFVJNUVsZW1lbnQpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGdldFRhcmdldENlbGxJbmRleCA9IGZ1bmN0aW9uIChlbHQ6IFVJNUVsZW1lbnQsIHRhcmdldFJvdzogUm93IHwgdW5kZWZpbmVkKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcblx0XHRcdHJldHVybiB0YXJnZXRSb3c/LmdldENlbGxzKCkuZmluZEluZGV4KGZ1bmN0aW9uIChjZWxsOiBDb250cm9sKSB7XG5cdFx0XHRcdHJldHVybiBjZWxsLmdldElkKCkgPT09IGVsdC5nZXRJZCgpO1xuXHRcdFx0fSk7XG5cdFx0fTtcblx0XHRjb25zdCBnZXRUYXJnZXRDb2x1bW5JbmRleCA9IGZ1bmN0aW9uIChlbHQ6IFVJNUVsZW1lbnQsIHRhcmdldFJvdzogUm93IHwgdW5kZWZpbmVkKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcblx0XHRcdGxldCB0YXJnZXRFbGVtZW50ID0gZWx0LmdldFBhcmVudCgpIGFzIFVJNUVsZW1lbnQsXG5cdFx0XHRcdHRhcmdldENlbGxJbmRleCA9IGdldFRhcmdldENlbGxJbmRleCh0YXJnZXRFbGVtZW50LCB0YXJnZXRSb3cpO1xuXHRcdFx0d2hpbGUgKHRhcmdldEVsZW1lbnQgJiYgdGFyZ2V0Q2VsbEluZGV4ICYmIHRhcmdldENlbGxJbmRleCA8IDApIHtcblx0XHRcdFx0dGFyZ2V0RWxlbWVudCA9IHRhcmdldEVsZW1lbnQuZ2V0UGFyZW50KCkgYXMgVUk1RWxlbWVudDtcblx0XHRcdFx0dGFyZ2V0Q2VsbEluZGV4ID0gZ2V0VGFyZ2V0Q2VsbEluZGV4KHRhcmdldEVsZW1lbnQsIHRhcmdldFJvdyk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGFyZ2V0Q2VsbEluZGV4O1xuXHRcdH07XG5cdFx0Y29uc3QgdGFyZ2V0Um93ID0gdGhpcy5fZ2V0VGFibGVSb3coZWxlbWVudCkgYXMgUm93IHwgdW5kZWZpbmVkO1xuXG5cdFx0bGV0IHRhcmdldENvbHVtbkluZGV4ID0gZ2V0VGFyZ2V0Q29sdW1uSW5kZXgoZWxlbWVudCwgdGFyZ2V0Um93KTtcblx0XHRpZiAodGFyZ2V0Um93Py5pc0E8Q3JlYXRpb25Sb3c+KFwic2FwLnVpLnRhYmxlLkNyZWF0aW9uUm93XCIpKSB7XG5cdFx0XHRjb25zdCB0YXJnZXRDZWxsSWQgPSB0YXJnZXRDb2x1bW5JbmRleCA/IHRhcmdldFJvdy5nZXRDZWxscygpW3RhcmdldENvbHVtbkluZGV4XS5nZXRJZCgpIDogdW5kZWZpbmVkLFxuXHRcdFx0XHR0YWJsZUNvbHVtbnMgPSB0YXJnZXRSb3cuZ2V0VGFibGUoKT8uZ2V0Q29sdW1ucygpO1xuXHRcdFx0dGFyZ2V0Q29sdW1uSW5kZXggPSB0YWJsZUNvbHVtbnM/LmZpbmRJbmRleChmdW5jdGlvbiAoY29sdW1uOiBDb2x1bW4pIHtcblx0XHRcdFx0aWYgKGNvbHVtbi5nZXRDcmVhdGlvblRlbXBsYXRlKCkgJiYgdGFyZ2V0Q2VsbElkKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRhcmdldENlbGxJZC5zZWFyY2goY29sdW1uLmdldENyZWF0aW9uVGVtcGxhdGUoKS5nZXRJZCgpKSA+IC0xID8gdHJ1ZSA6IGZhbHNlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiB0YXJnZXRDb2x1bW5JbmRleDtcblx0fVxuXG5cdF9nZXRNZGNUYWJsZVJvd3Mob01kY1RhYmxlOiBNRENUYWJsZSk6IFJvd1tdIHtcblx0XHRyZXR1cm4gb01kY1RhYmxlLmZpbmRFbGVtZW50cyh0cnVlLCBmdW5jdGlvbiAob0VsZW06IENvbnRyb2wpIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdG9FbGVtLmlzQTxSb3c+KFwic2FwLnVpLnRhYmxlLlJvd1wiKSAmJlxuXHRcdFx0XHQvKiogV2UgY2hlY2sgdGhlIGVsZW1lbnQgYmVsb25ncyB0byB0aGUgTWRjIFRhYmxlIDoqL1xuXHRcdFx0XHQob0VsZW0gYXMgeyBnZXRUYWJsZT86ICgpID0+IFVJNUVsZW1lbnQgfSkuZ2V0VGFibGU/LigpLmdldFBhcmVudCgpID09PSBvTWRjVGFibGVcblx0XHRcdCk7XG5cdFx0fSkgYXMgUm93W107XG5cdH1cblxuXHRfZ2V0T2JqZWN0UGFnZUxheW91dChvRWxlbWVudDogTWFuYWdlZE9iamVjdCB8IHVuZGVmaW5lZCwgb09iamVjdFBhZ2VMYXlvdXQ/OiBPYmplY3RQYWdlTGF5b3V0KTogT2JqZWN0UGFnZUxheW91dCB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKG9PYmplY3RQYWdlTGF5b3V0KSB7XG5cdFx0XHRyZXR1cm4gb09iamVjdFBhZ2VMYXlvdXQ7XG5cdFx0fVxuXHRcdGxldCB0YXJnZXRFbGVtZW50ID0gb0VsZW1lbnQ7XG5cdFx0Ly9JdGVyYXRlIG92ZXIgcGFyZW50IHRpbGwgeW91IGhhdmUgbm90IHJlYWNoZWQgdGhlIG9iamVjdCBwYWdlIGxheW91dFxuXHRcdHdoaWxlICh0YXJnZXRFbGVtZW50ICYmICF0YXJnZXRFbGVtZW50LmlzQTxPYmplY3RQYWdlTGF5b3V0PihcInNhcC51eGFwLk9iamVjdFBhZ2VMYXlvdXRcIikpIHtcblx0XHRcdHRhcmdldEVsZW1lbnQgPSB0YXJnZXRFbGVtZW50LmdldFBhcmVudCgpID8/IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIHRhcmdldEVsZW1lbnQ7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIG1ldGhvZCB0aGF0IGlzIGNhbGxlZCB0byBjaGVjayBpZiBhIG5hdmlnYXRpb24gaXMgY29uZmlndXJlZCBmcm9tIHRoZSB0YWJsZSB0byBhIHN1YiBvYmplY3QgcGFnZS5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHRhYmxlIE1kY1RhYmxlXG5cdCAqIEByZXR1cm5zIEVpdGhlciB0cnVlIG9yIGZhbHNlXG5cdCAqL1xuXHRfbmF2aWdhdGlvbkNvbmZpZ3VyZWQodGFibGU6IFRhYmxlKTogYm9vbGVhbiB7XG5cdFx0Ly8gVE9ETzogdGhpcyBsb2dpYyB3b3VsZCBiZSBtb3ZlZCB0byBjaGVjayB0aGUgc2FtZSBhdCB0aGUgdGVtcGxhdGUgdGltZSB0byBhdm9pZCB0aGUgc2FtZSBjaGVjayBoYXBwZW5pbmcgbXVsdGlwbGUgdGltZXMuXG5cdFx0Y29uc3QgY29tcG9uZW50ID0gc2FwLnVpLnJlcXVpcmUoXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIiksXG5cdFx0XHRuYXZPYmplY3QgPSB0YWJsZSAmJiBjb21wb25lbnQuZ2V0T3duZXJDb21wb25lbnRGb3IodGFibGUpICYmIGNvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcih0YWJsZSkuZ2V0TmF2aWdhdGlvbigpO1xuXHRcdGxldCBzdWJPUENvbmZpZ3VyZWQgPSBmYWxzZSxcblx0XHRcdG5hdkNvbmZpZ3VyZWQgPSBmYWxzZTtcblx0XHRpZiAobmF2T2JqZWN0ICYmIE9iamVjdC5rZXlzKG5hdk9iamVjdCkuaW5jbHVkZXModGFibGUuZ2V0Um93QmluZGluZygpLmdldFBhdGgoKSkpIHtcblx0XHRcdHN1Yk9QQ29uZmlndXJlZCA9XG5cdFx0XHRcdG5hdk9iamVjdFt0YWJsZT8uZ2V0Um93QmluZGluZygpLmdldFBhdGgoKV0gJiZcblx0XHRcdFx0bmF2T2JqZWN0W3RhYmxlPy5nZXRSb3dCaW5kaW5nKCkuZ2V0UGF0aCgpXS5kZXRhaWwgJiZcblx0XHRcdFx0bmF2T2JqZWN0W3RhYmxlPy5nZXRSb3dCaW5kaW5nKCkuZ2V0UGF0aCgpXS5kZXRhaWwucm91dGVcblx0XHRcdFx0XHQ/IHRydWVcblx0XHRcdFx0XHQ6IGZhbHNlO1xuXHRcdH1cblx0XHRuYXZDb25maWd1cmVkID1cblx0XHRcdHN1Yk9QQ29uZmlndXJlZCAmJlxuXHRcdFx0dGFibGU/LmdldFJvd1NldHRpbmdzKCkuZ2V0Um93QWN0aW9ucygpICYmXG5cdFx0XHR0YWJsZT8uZ2V0Um93U2V0dGluZ3MoKS5nZXRSb3dBY3Rpb25zKClbMF0uZ2V0VHlwZSgpLmluY2x1ZGVzKFwiTmF2aWdhdGlvblwiKTtcblx0XHRyZXR1cm4gbmF2Q29uZmlndXJlZDtcblx0fVxuXG5cdHNldEZvY3VzVG9Db250cm9sKGNvbnRyb2w/OiBVSTVFbGVtZW50KTogdm9pZCB7XG5cdFx0Y29uc3QgbWVzc2FnZVBvcG92ZXIgPSB0aGlzLm9NZXNzYWdlUG9wb3Zlcjtcblx0XHRpZiAobWVzc2FnZVBvcG92ZXIgJiYgY29udHJvbCAmJiBjb250cm9sLmZvY3VzKSB7XG5cdFx0XHRjb25zdCBmbkZvY3VzID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRjb250cm9sLmZvY3VzKCk7XG5cdFx0XHR9O1xuXHRcdFx0aWYgKCFtZXNzYWdlUG9wb3Zlci5pc09wZW4oKSkge1xuXHRcdFx0XHQvLyB3aGVuIG5hdmlnYXRpbmcgdG8gcGFyZW50IHBhZ2UgdG8gY2hpbGQgcGFnZSAob24gY2xpY2sgb2YgbWVzc2FnZSksIHRoZSBjaGlsZCBwYWdlIG1pZ2h0IGhhdmUgYSBmb2N1cyBsb2dpYyB0aGF0IG1pZ2h0IHVzZSBhIHRpbWVvdXQuXG5cdFx0XHRcdC8vIHdlIHVzZSB0aGUgYmVsb3cgdGltZW91dHMgdG8gb3ZlcnJpZGUgdGhpcyBmb2N1cyBzbyB0aGF0IHdlIGZvY3VzIG9uIHRoZSB0YXJnZXQgY29udHJvbCBvZiB0aGUgbWVzc2FnZSBpbiB0aGUgY2hpbGQgcGFnZS5cblx0XHRcdFx0c2V0VGltZW91dChmbkZvY3VzLCAwKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGZuT25DbG9zZSA9ICgpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRzZXRUaW1lb3V0KGZuRm9jdXMsIDApO1xuXHRcdFx0XHRcdG1lc3NhZ2VQb3BvdmVyLmRldGFjaEV2ZW50KFwiYWZ0ZXJDbG9zZVwiLCBmbk9uQ2xvc2UpO1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRtZXNzYWdlUG9wb3Zlci5hdHRhY2hFdmVudChcImFmdGVyQ2xvc2VcIiwgZm5PbkNsb3NlKTtcblx0XHRcdFx0bWVzc2FnZVBvcG92ZXIuY2xvc2UoKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0TG9nLndhcm5pbmcoXCJGRSBWNCA6IE1lc3NhZ2VCdXR0b24gOiBlbGVtZW50IGRvZXNuJ3QgaGF2ZSBmb2N1cyBtZXRob2QgZm9yIGZvY3VzaW5nLlwiKTtcblx0XHR9XG5cdH1cblxuXHRlc2NhcGUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIFN0cmluZyh2YWx1ZSlcblx0XHRcdC5yZXBsYWNlKC8mL2csIFwiJmFtcDtcIilcblx0XHRcdC5yZXBsYWNlKC9cIi9nLCBcIiZxdW90O1wiKVxuXHRcdFx0LnJlcGxhY2UoLycvZywgXCImIzM5O1wiKVxuXHRcdFx0LnJlcGxhY2UoLzwvZywgXCImbHQ7XCIpXG5cdFx0XHQucmVwbGFjZSgvPi9nLCBcIiZndDtcIik7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTWVzc2FnZUJ1dHRvbjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BNEVNQSxhQUFhLElBQUFDLElBQUEsR0FEbEJDLGNBQWMsQ0FBQyxzQ0FBc0MsQ0FBQyxFQUFBQyxLQUFBLEdBUXJEQyxXQUFXLENBQUM7SUFBRUMsSUFBSSxFQUFFLHNDQUFzQztJQUFFQyxRQUFRLEVBQUUsSUFBSTtJQUFFQyxZQUFZLEVBQUU7RUFBZSxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUczR0MsS0FBSyxDQUFDLENBQUMsRUFBQVIsSUFBQSxDQUFBUyxNQUFBLElBQUFDLE9BQUEsMEJBQUFDLE9BQUE7SUFUUixTQUFBWixjQUFZYSxFQUFvQyxFQUFFQyxRQUFpQyxFQUFFO01BQUEsSUFBQUMsS0FBQTtNQUNwRjtNQUNBO01BQ0FBLEtBQUEsR0FBQUgsT0FBQSxDQUFBSSxJQUFBLE9BQU1ILEVBQUUsRUFBRUMsUUFBUSxDQUFDO01BQUNHLDBCQUFBLENBQUFGLEtBQUEsbUJBQUFHLFdBQUEsRUFBQUgsS0FBQTtNQUFBRSwwQkFBQSxDQUFBRixLQUFBLG1CQUFBSSxZQUFBLEVBQUFKLEtBQUE7TUFBQUEsS0FBQSxDQWViSyxpQkFBaUIsR0FBRyxFQUFFO01BQUFMLEtBQUEsQ0FJdEJNLE9BQU8sR0FBRyxFQUFFO01BQUFO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
|