@sapui5/sap.fe.macros 1.139.0 → 1.139.4
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/Chart.js +1 -1
- package/src/sap/fe/macros/Chart.tsx +1 -1
- package/src/sap/fe/macros/RichTextEditor.js +1 -2
- package/src/sap/fe/macros/RichTextEditor.tsx +0 -1
- package/src/sap/fe/macros/ValueHelp.js +4 -28
- package/src/sap/fe/macros/ValueHelp.tsx +2 -42
- package/src/sap/fe/macros/chart/MdcChartTemplate.js +2 -4
- package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +1 -4
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +5 -1
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +4 -0
- package/src/sap/fe/macros/controls/FilterBar.js +39 -3
- package/src/sap/fe/macros/controls/FilterBar.ts +42 -1
- package/src/sap/fe/macros/controls/Section.js +3 -2
- package/src/sap/fe/macros/controls/Section.ts +2 -1
- package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
- package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +8 -8
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +7 -7
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +2 -2
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +1 -1
- package/src/sap/fe/macros/field/FieldBaseDelegate.js +13 -7
- package/src/sap/fe/macros/field/FieldBaseDelegate.ts +12 -8
- package/src/sap/fe/macros/field/FieldRuntime.js +38 -8
- package/src/sap/fe/macros/field/FieldRuntime.ts +65 -7
- package/src/sap/fe/macros/filter/FilterUtils.js +7 -1
- package/src/sap/fe/macros/filter/FilterUtils.ts +7 -0
- package/src/sap/fe/macros/filterBar/FilterBarAPI.js +5 -3
- package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +13 -3
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +4 -3
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +3 -2
- package/src/sap/fe/macros/form/Form.block.js +6 -2
- package/src/sap/fe/macros/form/Form.block.ts +4 -1
- package/src/sap/fe/macros/form/FormDelegate.js +20 -1
- package/src/sap/fe/macros/form/FormDelegate.ts +25 -0
- package/src/sap/fe/macros/internal/field/DisplayStyle.js +4 -2
- package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +3 -1
- package/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +6 -2
- package/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +5 -1
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +3 -3
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +5 -1
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +4 -0
- package/src/sap/fe/macros/library.js +1 -1
- package/src/sap/fe/macros/mdc/adapter/StateHelper.js +15 -5
- package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +21 -5
- package/src/sap/fe/macros/table/MdcTableTemplate.js +3 -1
- package/src/sap/fe/macros/table/MdcTableTemplate.tsx +2 -1
- package/src/sap/fe/macros/table/Table.js +7 -1
- package/src/sap/fe/macros/table/Table.tsx +7 -1
- package/src/sap/fe/macros/table/TableAPI.js +8 -1
- package/src/sap/fe/macros/table/TableAPI.ts +15 -2
- package/src/sap/fe/macros/table/TableSizeHelper.js +3 -3
- package/src/sap/fe/macros/table/TableSizeHelper.ts +5 -2
- package/src/sap/fe/macros/table/TreeTable.js +7 -1
- package/src/sap/fe/macros/table/TreeTable.tsx +7 -1
- package/src/sap/fe/macros/table/delegates/TableDelegate.js +3 -2
- package/src/sap/fe/macros/table/delegates/TableDelegate.ts +10 -3
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +10 -10
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +11 -9
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +8 -8
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +7 -6
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +27 -3
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +28 -2
- package/src/sap/fe/macros/visualfilters/VisualFilter.js +20 -2
- package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +28 -6
|
@@ -280,7 +280,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
280
280
|
if (filterVariantApplied || useFLPDefaultValues) {
|
|
281
281
|
svToSet = await this._getAdjustedSV(sv, useFLPDefaultValues);
|
|
282
282
|
}
|
|
283
|
-
return filterBarAPI.setSelectionVariant(svToSet, true);
|
|
283
|
+
return filterBarAPI.setSelectionVariant(svToSet, true, true);
|
|
284
284
|
}
|
|
285
285
|
};
|
|
286
286
|
_proto2._enableFilterBar = function _enableFilterBar(filterBarControl, preventInitialSearch) {
|
|
@@ -856,11 +856,13 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
856
856
|
* Note: This method cannot set the search field text or any filter field condition that relies on a custom operator.
|
|
857
857
|
* @param selectionVariant The {@link sap.fe.navigation.SelectionVariant} to apply to the filter bar
|
|
858
858
|
* @param prefillDescriptions Optional. If true, we will use the associated text property values (if they're available in the selectionVariant) to display the filter value descriptions, instead of loading them from the backend
|
|
859
|
+
* @param fromNavigationParameters PRIVATE
|
|
859
860
|
* @returns A promise for asynchronous handling
|
|
860
861
|
* @public
|
|
861
862
|
*/;
|
|
862
863
|
_proto2.setSelectionVariant = async function setSelectionVariant(selectionVariant) {
|
|
863
864
|
let prefillDescriptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
865
|
+
let fromNavigationParameters = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
864
866
|
const content = this.getContent();
|
|
865
867
|
const isLiveMode = content && content?.getLiveMode?.();
|
|
866
868
|
let result;
|
|
@@ -868,7 +870,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
868
870
|
content.enableRequests(false);
|
|
869
871
|
}
|
|
870
872
|
try {
|
|
871
|
-
result = await stateHelper.setSelectionVariantToMdcControl(this.getContent(), selectionVariant, prefillDescriptions);
|
|
873
|
+
result = await stateHelper.setSelectionVariantToMdcControl(this.getContent(), selectionVariant, prefillDescriptions, fromNavigationParameters);
|
|
872
874
|
return result?.applyStateResult;
|
|
873
875
|
} catch (err) {
|
|
874
876
|
const message = err instanceof Error ? err.message : String(err);
|
|
@@ -1000,4 +1002,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
1000
1002
|
}), _applyDecoratedDescriptor(_class2.prototype, "handleSearch", [_dec16], Object.getOwnPropertyDescriptor(_class2.prototype, "handleSearch"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "handleFilterChanged", [_dec17], Object.getOwnPropertyDescriptor(_class2.prototype, "handleFilterChanged"), _class2.prototype), _class2)) || _class) || _class);
|
|
1001
1003
|
return FilterBarAPI;
|
|
1002
1004
|
}, false);
|
|
1003
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWx0ZXJCYXJUZWxlbWV0cnkiLCJmaWx0ZXJCYXJBUEkiLCJjb3VudEZpbHRlckFjdGlvbnMiLCJjb3VudFZhcmlhbnRGaWx0ZXJzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwib25GaWx0ZXJzQ2hhbmdlZCIsInJlYXNvbiIsIm9uU2VhcmNoIiwiZXZlbnRQYXJhbWV0ZXJzIiwiY29uZGl0aW9ucyIsImZpbHRlck5hbWVzIiwiZ2V0RmlsdGVyTmFtZXNGcm9tQ29uZGl0aW9ucyIsImdldFBhZ2VDb250cm9sbGVyIiwidGVsZW1ldHJ5Iiwic3RvcmVBY3Rpb24iLCJ0eXBlIiwicGFyYW1ldGVycyIsImNvdW50RmlsdGVycyIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJ2YXJpYW50TGF5ZXIiLCJnZXRWYXJpYW50IiwibGF5ZXIiLCJhdXRvTG9hZCIsInNlYXJjaFVzZWQiLCIkc2VhcmNoIiwiZm9yRWFjaCIsImNvbmRpdGlvbiIsIlZhcmlhbnRNYW5hZ2VtZW50VHlwZSIsIkRJU1BMQVlfQ1VSUkVOQ1lfUFJPUEVSVFlfTkFNRSIsIlBfRElTUExBWV9DVVJSRU5DWV9QUk9QRVJUWV9OQU1FIiwiRmlsdGVyQmFyQVBJIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwicmV0dXJuVHlwZXMiLCJfZGVjMiIsIm1peGluIiwiRmlsdGVyQmFyQVBJU3RhdGVIYW5kbGVyIiwiX2RlYzMiLCJwcm9wZXJ0eSIsIl9kZWM0IiwiZXhwZWN0ZWRBbm5vdGF0aW9ucyIsImV4cGVjdGVkVHlwZXMiLCJfZGVjNSIsIl9kZWM2IiwiZGVmYXVsdFZhbHVlIiwiX2RlYzciLCJfZGVjOCIsIl9kZWM5IiwiX2RlYzEwIiwiYWdncmVnYXRpb24iLCJtdWx0aXBsZSIsIl9kZWMxMSIsImV2ZW50IiwiX2RlYzEyIiwiX2RlYzEzIiwiX2RlYzE0IiwiX2RlYzE1IiwiX2RlYzE2IiwieG1sRXZlbnRIYW5kbGVyIiwiX2RlYzE3IiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9NYWNyb0FQSSIsInByb3BzIiwib3RoZXJzIiwiX3RoaXMiLCJjYWxsIiwiaW5pdGlhbENvbnRyb2xTdGF0ZSIsIl9pbml0aWFsU3RhdGVQcm9taXNlIiwiUHJvbWlzZUtlZXBlciIsIl9iU2VhcmNoVHJpZ2dlcmVkIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9kZXNjcmlwdG9yNCIsIl9kZXNjcmlwdG9yNSIsIl9kZXNjcmlwdG9yNiIsIl9kZXNjcmlwdG9yNyIsIl9kZXNjcmlwdG9yOCIsIl9kZXNjcmlwdG9yOSIsIl9kZXNjcmlwdG9yMTAiLCJfZGVzY3JpcHRvcjExIiwiX2Rlc2NyaXB0b3IxMiIsIl9kZXNjcmlwdG9yMTMiLCJhdHRhY2hTdGF0ZUNoYW5nZUhhbmRsZXIiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90bzIiLCJ3YWl0Rm9ySW5pdGlhbFN0YXRlIiwicHJvbWlzZSIsImdldENvbnRyb2xTdGF0ZSIsImNvbnRyb2xTdGF0ZSIsImZ1bGxTdGF0ZSIsImluaXRpYWxTdGF0ZSIsImlzU2VhcmNoVHJpZ2dlcmVkQnlJbml0aWFsTG9hZCIsIm5hdmlnYXRpb25UeXBlIiwiY29udHJvbGxlciIsInZpZXciLCJnZXRWaWV3Iiwidmlld0RhdGEiLCJnZXRWaWV3RGF0YSIsInZhcmlhbnRNYW5hZ2VtZW50IiwiQ29udHJvbCIsIl9nZXRGaWx0ZXJCYXJWYXJpYW50Q29udHJvbCIsImJ5SWQiLCJjdXJyZW50VmFyaWFudEtleSIsImdldEN1cnJlbnRWYXJpYW50S2V5IiwiTmF2VHlwZSIsInhBcHBTdGF0ZSIsImluaXRpYWxMb2FkIiwiSW5pdGlhbExvYWRNb2RlIiwiRW5hYmxlZCIsIl9zaG91bGRBdXRvVHJpZ2dlclNlYXJjaCIsIl9nZXRGaWx0ZXJCYXJWTSIsIl9nZXRBcHBseUF1dG9tYXRpY2FsbHlPblZhcmlhbnQiLCJfYXBwbHlTZWxlY3Rpb25WYXJpYW50IiwibmF2aWdhdGlvblBhcmFtZXRlciIsImZpbHRlclZhcmlhbnRBcHBsaWVkIiwiZmlsdGVyQmFyIiwiZ2V0Q29udGVudCIsInNlbGVjdGlvblZhcmlhbnQiLCJzdiIsInNlbGVjdGlvblZhcmlhbnREZWZhdWx0cyIsInN2RGVmYXVsdHMiLCJyZXF1aXJlc1N0YW5kYXJkVmFyaWFudCIsIlByb21pc2UiLCJyZXNvbHZlIiwic2hvdWxkQXBwbHlBcHBTdGF0ZSIsIl9hY3RpdmF0ZVZhcmlhbnRBbmREZXRlcm1pbmVBcHBseUFwcFN0YXRlIiwiX2FkZERlZmF1bHREaXNwbGF5Q3VycmVuY3lUb1NWIiwic3ZEZWZhdWx0c0FyZVByZXNlbnQiLCJnZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcyIsInN0ZFZhcmlhbnRJc0RlZmF1bHRWYXJpYW50IiwiZ2V0RGVmYXVsdFZhcmlhbnRLZXkiLCJnZXRTdGFuZGFyZFZhcmlhbnRLZXkiLCJ1c2VGTFBEZWZhdWx0VmFsdWVzIiwiZ2V0UGFyZW50Iiwic3ZUb1NldCIsIl9nZXRBZGp1c3RlZFNWIiwic2V0U2VsZWN0aW9uVmFyaWFudCIsIl9lbmFibGVGaWx0ZXJCYXIiLCJmaWx0ZXJCYXJDb250cm9sIiwicHJldmVudEluaXRpYWxTZWFyY2giLCJmbk9uU2VhcmNoIiwiZ2V0U3VzcGVuZFNlbGVjdGlvbiIsImF0dGFjaEV2ZW50T25jZSIsImVuYWJsZVJlcXVlc3RzIiwiYXBwU3RhdGVTViIsImFkanVzdGVkU1YiLCJTZWxlY3Rpb25WYXJpYW50IiwidG9KU09OT2JqZWN0IiwiYWxyZWFkeUFwcGxpZWRTViIsImdldFNlbGVjdGlvblZhcmlhbnQiLCJhcHBsaWVkU2VsT3B0TmFtZXMiLCJyZWR1Y2UiLCJzdkNvcHkiLCJzZWxPcHRpb25OYW1lIiwic3ZTZWxPcHRzIiwiZ2V0U2VsZWN0T3B0aW9uIiwic2VsZWN0T3B0aW9ucyIsIm1hc3NBZGRTZWxlY3RPcHRpb24iLCJfcHJldmVudEluaXRpYWxTZWFyY2giLCJhVmFyaWFudHMiLCJnZXRWYXJpYW50cyIsIm9DdXJyZW50VmFyaWFudCIsImZpbmQiLCJpdGVtIiwiZ2V0S2V5IiwiZXhlY3V0ZU9uU2VsZWN0IiwiaXNFbXB0eSIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiY29udGV4dFBhdGgiLCJlbnRpdHlTZXQiLCJtZXRhQ29udGV4dCIsImdldE1ldGFDb250ZXh0IiwiZGF0YU1vZGVsT2JqZWN0UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImRpc3BsYXlDdXJyZW5jeVByb3BlcnR5TmFtZSIsImdldERpc3BsYXlDdXJyZW5jeVByb3BlcnR5TmFtZSIsImRpc3BsYXlDdXJyZW5jeUlzTWFuZGF0b3J5IiwiX2NoZWNrSWZEaXNwbGF5Q3VycmVuY3lJc1JlcXVpcmVkIiwic3ZPcHRpb25zIiwiZGVmYXVsdFNWT3B0aW9ucyIsImRpc3BsYXlDdXJyZW5jeURlZmF1bHRFeGlzdHMiLCJub1NWRGlzcGxheUN1cnJlbmN5RXhpc3RzIiwiZGlzcGxheUN1cnJlbmN5U2VsZWN0T3B0aW9uIiwic2lnbiIsIm9wdGlvbiIsImxvdyIsImhpZ2giLCJhZGRTZWxlY3RPcHRpb24iLCJpc1BhcmFtZXRlcml6ZWQiLCJzdGFydGluZ0VudGl0eVNldCIsImVudGl0eVR5cGUiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIlJlc3VsdENvbnRleHQiLCJlbnRpdHlQcm9wZXJ0aWVzIiwic29tZSIsInBhcmFtZXRlciIsIm5hbWUiLCJfdHlwZSIsInVuZGVmaW5lZCIsInJlcXVpcmVkUHJvcGVydGllcyIsIkNhcGFiaWxpdGllcyIsIkZpbHRlclJlc3RyaWN0aW9ucyIsIlJlcXVpcmVkUHJvcGVydGllcyIsInJlcXVpcmVkUHJvcGVydHkiLCJ2YWx1ZSIsInJlcVN0ZFZhcmlhbnQiLCJ2YXJpYW50S2V5IiwiZ2V0SWQiLCJDb250cm9sVmFyaWFudEFwcGx5QVBJIiwiYWN0aXZhdGVWYXJpYW50IiwiZWxlbWVudCIsInZhcmlhbnRSZWZlcmVuY2UiLCJQYWdlIiwiZ2V0Q29udHJvbGxlciIsIk5vbmUiLCJoYW5kbGVWYXJpYW50SWRQYXNzZWRWaWFVUkxQYXJhbXMiLCJvVXJsUGFyYW1zIiwiYVBhZ2VWYXJpYW50SWQiLCJhRmlsdGVyQmFyVmFyaWFudElkIiwiYVRhYmxlVmFyaWFudElkIiwiYUNoYXJ0VmFyaWFudElkIiwib1ZhcmlhbnRJRHMiLCJzUGFnZVZhcmlhbnRJZCIsInNGaWx0ZXJCYXJWYXJpYW50SWQiLCJzVGFibGVWYXJpYW50SWQiLCJzQ2hhcnRWYXJpYW50SWQiLCJfaGFuZGxlQ29udHJvbFZhcmlhbnRJZCIsIm9WTSIsIm9WaWV3IiwiYVByb21pc2VzIiwic1ZhcmlhbnRNYW5hZ2VtZW50IiwiX2hhbmRsZVBhZ2VWYXJpYW50SWQiLCJfaGFuZGxlRmlsdGVyQmFyVmFyaWFudENvbnRyb2xJZCIsImFsbCIsIm9WYXJpYW50IiwiX2ZpbmRBbmRQdXNoVmFyaWFudFRvUHJvbWlzZSIsInNWYXJpYW50SWQiLCJiRmlsdGVyVmFyaWFudEFwcGxpZWQiLCJrZXkiLCJwdXNoIiwiX2FwcGx5Q29udHJvbFZhcmlhbnQiLCJzVmFyaWFudElEIiwiYXJndW1lbnRzIiwic1ZhcmlhbnRSZWZlcmVuY2UiLCJfY2hlY2tJZlZhcmlhbnRJZElzQXZhaWxhYmxlIiwidGhlbiIsImJJc0NvbnRyb2xTdGF0ZVZhcmlhbnRBdmFpbGFibGUiLCJTdGF0ZVV0aWwiLCJkZXRhY2hTdGF0ZUNoYW5nZSIsInN0YXRlQ2hhbmdlSGFuZGxlciIsImF0dGFjaFN0YXRlQ2hhbmdlIiwib0V2ZW50IiwiY29udHJvbCIsImdldFBhcmFtZXRlciIsImlzQSIsImhhbmRsZVN0YXRlQ2hhbmdlIiwiaGFuZGxlU2VhcmNoIiwib0ZpbHRlckJhciIsImdldFNvdXJjZSIsImdldFBhcmFtZXRlcnMiLCJnZXRGaWx0ZXJDb25kaXRpb25zIiwicHJlcGFyZWRFdmVudFBhcmFtZXRlcnMiLCJfcHJlcGFyZUV2ZW50UGFyYW1ldGVycyIsImZpcmVFdmVudCIsIm1lcmdlIiwiaGFuZGxlRmlsdGVyQ2hhbmdlZCIsIm9FdmVudFBhcmFtZXRlcnMiLCJvQ29uZGl0aW9ucyIsIl9nZXRGaWx0ZXJCYXJSZWFzb24iLCJfc1JlYXNvbiIsImZpbHRlcnMiLCJzZWFyY2giLCJGaWx0ZXJVdGlscyIsImdldEZpbHRlcnMiLCJzZXRGaWx0ZXJWYWx1ZXMiLCJzQ29uZGl0aW9uUGF0aCIsInNPcGVyYXRvciIsInZWYWx1ZXMiLCJjb250ZW50IiwiZ2V0QWN0aXZlRmlsdGVyc1RleHQiLCJnZXRBc3NpZ25lZEZpbHRlcnNUZXh0IiwiZmlsdGVyc1RleHQiLCJ0cmlnZ2VyU2VhcmNoIiwid2FpdEZvckluaXRpYWxpemF0aW9uIiwiZXJyIiwibWVzc2FnZSIsIkVycm9yIiwiU3RyaW5nIiwiTG9nIiwiZXJyb3IiLCJpc1NlbWFudGljRGF0ZUZpbHRlckFwcGxpZWQiLCJTZW1hbnRpY0RhdGVPcGVyYXRvcnMiLCJoYXNTZW1hbnRpY0RhdGVPcGVyYXRpb25zIiwiZ2V0Q29uZGl0aW9ucyIsInN0YXRlSGVscGVyIiwiYXBwQ29tcG9uZW50IiwiQ29tbW9uVXRpbHMiLCJnZXRBcHBDb21wb25lbnQiLCJuYXZpZ2F0aW9uU2VydmljZSIsImdldE5hdmlnYXRpb25TZXJ2aWNlIiwiZGF0YU1vZGVsT2JqZWN0IiwiZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGgiLCJtZXRhUGF0aCIsInRhcmdldEVudGl0eVNldCIsInNDb250ZXh0VXJsIiwiY29uc3RydWN0Q29udGV4dFVybCIsInNldEZpbHRlckNvbnRleHRVcmwiLCJnZXRNYW5kYXRvcnlGaWx0ZXJQcm9wZXJ0eU5hbWVzIiwiZ2V0UHJvcGVydHlJbmZvU2V0IiwiZmlsdGVyIiwiZmlsdGVyUHJvcCIsInJlcXVpcmVkIiwibWFwIiwicmVxdWlyZWRQcm9wIiwiY29uZGl0aW9uUGF0aCIsImRhdGEiLCJBcnJheSIsImlzQXJyYXkiLCJKU09OIiwicGFyc2UiLCJjdXJyZW50VmFyaWFudCIsInZhcmlhbnRNb2RlbCIsInZhcmlhbnRCYWNrUmVmZXJlbmNlIiwiZ2V0VmFyaWFudEJhY2tyZWZlcmVuY2UiLCJnZXRDdXJyZW50VmFyaWFudFJlZmVyZW5jZSIsImUiLCJkZWJ1ZyIsInNldEZpbHRlckZpZWxkVmlzaWJsZSIsInZpc2libGUiLCJhcHBseUV4dGVybmFsU3RhdGUiLCJpdGVtcyIsImdldEZpbHRlckZpZWxkVmlzaWJsZSIsInN0YXRlIiwicmV0cmlldmVFeHRlcm5hbFN0YXRlIiwiZ2V0VmFyaWFudE1hbmFnZW1lbnQiLCJ2YXJpYW50QmFja3JlZmVyZW5jZSIsIlVJNUVsZW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImlkIiwic2V0VmFyaWFudEJhY2tSZWZlcmVuY2UiLCJ2YXJpYW50IiwiaXNMaXZlTW9kZSIsImdldExpdmVNb2RlIiwic2V0VmFyaWFudEJhY2tyZWZlcmVuY2UiLCJzZXRDdXJyZW50VmFyaWFudEtleSIsInNldEZpbHRlckZpZWxkRW5hYmxlZCIsImVuYWJsZWQiLCJzZXREYXRhIiwiZmlsdGVyRmllbGRzIiwiZWRpdE1vZGUiLCJGaWVsZEVkaXRNb2RlIiwiRWRpdGFibGUiLCJEaXNhYmxlZCIsImdldEZpbHRlckZpZWxkRW5hYmxlZCIsImdldFByb3BlcnR5IiwiY29udmVydFNlbGVjdGlvblZhcmlhbnRUb1N0YXRlRmlsdGVycyIsInByZWZpbGxEZXNjcmlwdGlvbnMiLCJfY2xlYXJGaWx0ZXJWYWx1ZXNXaXRoT3B0aW9ucyIsIm9wdGlvbnMiLCJyZXN1bHQiLCJzZXRTZWxlY3Rpb25WYXJpYW50VG9NZGNDb250cm9sIiwiYXBwbHlTdGF0ZVJlc3VsdCIsImRpZmZTdGF0ZSIsImdldEV4dGVuc2lvbkFQSSIsInVwZGF0ZUFwcFN0YXRlIiwiZ2V0Q29uZGl0aW9uUGF0aCIsInByb3BlcnR5UGF0aCIsInByb3BlcnR5VGFyZ2V0T2JqZWN0UGF0aCIsImdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JQcm9wZXJ0eSIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJzaG93RmlsdGVyRmllbGQiLCJ0YXJnZXRGaWx0ZXJGaWVsZCIsIm9wZW5WYWx1ZUhlbHBGb3JGaWx0ZXJGaWVsZCIsImlucHV0VmFsdWUiLCJyZWplY3QiLCJmaWx0ZXJGaWVsZCIsImdldEZpbHRlckl0ZW1zIiwiZ2V0UHJvcGVydHlLZXkiLCJ2YWx1ZUhlbHAiLCJnZXRWYWx1ZUhlbHAiLCJfb0ZvY3VzSW5mbyIsInRhcmdldEluZm8iLCJzaWxlbnQiLCJvbmZvY3VzaW4iLCJqUXVlcnkiLCJFdmVudCIsInNldFRpbWVvdXQiLCJnZXRBZ2dyZWdhdGlvbiIsImZpcmVWYWx1ZUhlbHBSZXF1ZXN0IiwiZnJvbUtleWJvYXJkIiwiX3VzZXJJbnB1dFZhbHVlIiwiZ2V0Q29sbGFwc2VkRmlsdGVyc1RleHQiLCJNYWNyb0FQSSIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRmlsdGVyQmFyQVBJLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5U2V0LCBQcm9wZXJ0eSwgUHJvcGVydHlQYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0aWVzT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBhZ2dyZWdhdGlvbiwgZGVmaW5lVUk1Q2xhc3MsIGV2ZW50LCBtaXhpbiwgcHJvcGVydHksIHhtbEV2ZW50SGFuZGxlciB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgQ29udHJvbFN0YXRlLCBMZWdhY3lGaWx0ZXJCYXJTdGF0ZSwgTmF2aWdhdGlvblBhcmFtZXRlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9WaWV3U3RhdGVcIjtcbmltcG9ydCB7IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IFByb21pc2VLZWVwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUHJvbWlzZUtlZXBlclwiO1xuaW1wb3J0IHsgSW5pdGlhbExvYWRNb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgTWFjcm9BUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvTWFjcm9BUElcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jb250cm9scy9GaWx0ZXJCYXJcIjtcbmltcG9ydCB0eXBlIHsgSUZpbHRlckNvbnRyb2wgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvRmlsdGVyVXRpbHNcIjtcbmltcG9ydCBGaWx0ZXJVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvRmlsdGVyVXRpbHNcIjtcbmltcG9ydCB0eXBlIEZpbHRlckZpZWxkIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlckJhci9GaWx0ZXJGaWVsZFwiO1xuaW1wb3J0IFNlbWFudGljRGF0ZU9wZXJhdG9ycyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXJCYXIvU2VtYW50aWNEYXRlT3BlcmF0b3JzXCI7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2xQcm9wZXJ0eUluZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9tZGMvYWRhcHRlci9TdGF0ZUhlbHBlclwiO1xuaW1wb3J0IHN0YXRlSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL21kYy9hZGFwdGVyL1N0YXRlSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsQmluZGluZ0luZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9VdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBFeHRlcm5hbFN0YXRlVHlwZSB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL3ZhbHVlaGVscC9WYWx1ZUhlbHBEZWxlZ2F0ZVwiO1xuaW1wb3J0IFNlbGVjdGlvblZhcmlhbnQgZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL1NlbGVjdGlvblZhcmlhbnRcIjtcbmltcG9ydCB7IE5hdlR5cGUgfSBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIExpc3RSZXBvcnRDb250cm9sbGVyIH0gZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvTGlzdFJlcG9ydC9MaXN0UmVwb3J0Q29udHJvbGxlci5jb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBJbnB1dCBmcm9tIFwic2FwL20vSW5wdXRcIjtcbmltcG9ydCB0eXBlIHsgSW5wdXQkVmFsdWVIZWxwUmVxdWVzdEV2ZW50UGFyYW1ldGVycyB9IGZyb20gXCJzYXAvbS9JbnB1dFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIEV2ZW50LCBkZWZhdWx0IGFzIFVJNUV2ZW50IH0gZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSB7ICRDb250cm9sU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgQ29udHJvbFZhcmlhbnRBcHBseUFQSSBmcm9tIFwic2FwL3VpL2ZsL2FwcGx5L2FwaS9Db250cm9sVmFyaWFudEFwcGx5QVBJXCI7XG5pbXBvcnQgdHlwZSBWYXJpYW50TWFuYWdlbWVudCBmcm9tIFwic2FwL3VpL2ZsL3ZhcmlhbnRzL1ZhcmlhbnRNYW5hZ2VtZW50XCI7XG5pbXBvcnQgdHlwZSBWYXJpYW50TW9kZWwgZnJvbSBcInNhcC91aS9mbC92YXJpYW50cy9WYXJpYW50TW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgVmFyaWFudERhdGEgfSBmcm9tIFwic2FwL3VpL2ZsL3ZhcmlhbnRzL1ZhcmlhbnRNb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL21kYy9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBWYWx1ZUhlbHAgZnJvbSBcInNhcC91aS9tZGMvVmFsdWVIZWxwXCI7XG5pbXBvcnQgdHlwZSB7IENvbmRpdGlvbk9iamVjdCB9IGZyb20gXCJzYXAvdWkvbWRjL2NvbmRpdGlvbi9Db25kaXRpb25cIjtcbmltcG9ydCBGaWVsZEVkaXRNb2RlIGZyb20gXCJzYXAvdWkvbWRjL2VudW1zL0ZpZWxkRWRpdE1vZGVcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyQmFyQmFzZSRTZWFyY2hFdmVudCB9IGZyb20gXCJzYXAvdWkvbWRjL2ZpbHRlcmJhci9GaWx0ZXJCYXJCYXNlXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlciBhcyBTdGF0ZVV0aWxGaWx0ZXIgfSBmcm9tIFwic2FwL3VpL21kYy9wMTNuL1N0YXRlVXRpbFwiO1xuaW1wb3J0IFN0YXRlVXRpbCBmcm9tIFwic2FwL3VpL21kYy9wMTNuL1N0YXRlVXRpbFwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBNZXRhTW9kZWwsIGRlZmF1bHQgYXMgT0RhdGFNZXRhTW9kZWwgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgalF1ZXJ5IGZyb20gXCJzYXAvdWkvdGhpcmRwYXJ0eS9qcXVlcnlcIjtcbmltcG9ydCBGaWx0ZXJCYXJBUElTdGF0ZUhhbmRsZXIgZnJvbSBcIi4vbWl4aW4vRmlsdGVyQmFyQVBJU3RhdGVIYW5kbGVyXCI7XG5cbi8vIFRyYWNrIHRlbGVtZXRyeSBjb250ZW50IGZvciB0aGUgZmlsdGVyQmFyXG5jbGFzcyBGaWx0ZXJCYXJUZWxlbWV0cnkge1xuXHRwcml2YXRlIGNvdW50RmlsdGVyQWN0aW9ucyA9IDA7XG5cblx0cHJpdmF0ZSBjb3VudFZhcmlhbnRGaWx0ZXJzID0gMDtcblxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGZpbHRlckJhckFQSTogRmlsdGVyQmFyQVBJKSB7fVxuXG5cdG9uRmlsdGVyc0NoYW5nZWQocmVhc29uPzogc3RyaW5nKTogdm9pZCB7XG5cdFx0aWYgKHJlYXNvbiA9PT0gXCJWYXJpYW50XCIpIHtcblx0XHRcdHRoaXMuY291bnRWYXJpYW50RmlsdGVycysrO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmNvdW50RmlsdGVyQWN0aW9ucysrO1xuXHRcdH1cblx0fVxuXG5cdG9uU2VhcmNoKGV2ZW50UGFyYW1ldGVyczogeyByZWFzb24/OiBzdHJpbmcgfSwgY29uZGl0aW9uczogUmVjb3JkPHN0cmluZywgQ29uZGl0aW9uT2JqZWN0W10+KTogdm9pZCB7XG5cdFx0Y29uc3QgZmlsdGVyTmFtZXMgPSB0aGlzLmdldEZpbHRlck5hbWVzRnJvbUNvbmRpdGlvbnMoY29uZGl0aW9ucyk7XG5cdFx0dGhpcy5maWx0ZXJCYXJBUEkuZ2V0UGFnZUNvbnRyb2xsZXIoKT8udGVsZW1ldHJ5LnN0b3JlQWN0aW9uKHtcblx0XHRcdHR5cGU6IFwiRkUuRmlsdGVyQmFyU2VhcmNoXCIsXG5cdFx0XHRwYXJhbWV0ZXJzOiB7XG5cdFx0XHRcdGNvdW50RmlsdGVyQWN0aW9uczogdGhpcy5jb3VudEZpbHRlckFjdGlvbnMsIC8vICBIb3cgbWFueSBmaWx0ZXJDaGFuZ2VkIGFjdGlvbnMgYXJlIHBlcmZvcm1lZFxuXHRcdFx0XHRjb3VudEZpbHRlcnM6IE9iamVjdC5rZXlzKGNvbmRpdGlvbnMpLmxlbmd0aCwgLy8gSG93IG1hbnkgZGlmZmVyZW50IGZpbHRlcnMgYXJlIGFwcGxpZWRcblx0XHRcdFx0Y291bnRWYXJpYW50RmlsdGVyczogdGhpcy5jb3VudFZhcmlhbnRGaWx0ZXJzLCAvLyBIb3cgbWFueSBmaWx0ZXIgYmVsb25nIHRvIGEgdmFyaWFudFxuXHRcdFx0XHR2YXJpYW50TGF5ZXI6IHRoaXMuZmlsdGVyQmFyQVBJLmdldFZhcmlhbnQoKT8ubGF5ZXIgPz8gXCJOb25lXCIsIC8vIHwgXCJTQVBcIiB8IFwiQ3VzdG9tXCI7IC8vIFR5cGUgb2YgdmFyaWFudFxuXHRcdFx0XHRhdXRvTG9hZDogZXZlbnRQYXJhbWV0ZXJzLnJlYXNvbiA9PT0gXCJWYXJpYW50XCIsIC8vIElzIHRoZSBmaWx0ZXIgYXV0b21hdGljYWxseSBleGVjdXRlZFxuXHRcdFx0XHRzZWFyY2hVc2VkOiBjb25kaXRpb25zLiRzZWFyY2ggPyAhIU9iamVjdC5rZXlzKGNvbmRpdGlvbnMuJHNlYXJjaCkubGVuZ3RoIDogZmFsc2UsIC8vIFdhcyB0aGUgc2VhcmNoIGZpZWxkIGluIHRoZSBmaWx0ZXJiYXIgdXNlZD9cblx0XHRcdFx0ZmlsdGVyTmFtZXM6IGZpbHRlck5hbWVzIC8vIFByb3BlcnR5IG5hbWVzIG9mIHRoZSBmaWx0ZXJzXG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Ly8gUmVzZXQgdGhlIGNvdW50XG5cdFx0dGhpcy5jb3VudEZpbHRlckFjdGlvbnMgPSAwO1xuXHRcdHRoaXMuY291bnRWYXJpYW50RmlsdGVycyA9IDA7XG5cdH1cblxuXHRnZXRGaWx0ZXJOYW1lc0Zyb21Db25kaXRpb25zKGNvbmRpdGlvbnM6IFJlY29yZDxzdHJpbmcsIENvbmRpdGlvbk9iamVjdFtdPik6IHN0cmluZyB7XG5cdFx0bGV0IGZpbHRlck5hbWVzID0gXCJcIjtcblx0XHRPYmplY3Qua2V5cyhjb25kaXRpb25zKS5mb3JFYWNoKChjb25kaXRpb24pID0+IHtcblx0XHRcdGlmIChjb25kaXRpb24gIT0gXCIkc2VhcmNoXCIpIHtcblx0XHRcdFx0ZmlsdGVyTmFtZXMgKz0gY29uZGl0aW9uICsgXCI7XCI7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGZpbHRlck5hbWVzO1xuXHR9XG59XG5cbmV4cG9ydCB0eXBlIEZpbHRlckJhclN0YXRlID0ge1xuXHRpbm5lclN0YXRlPzoge1xuXHRcdGZpbHRlcj86IFJlY29yZDxzdHJpbmcsIENvbmRpdGlvbk9iamVjdFtdPjtcblx0XHRpbml0aWFsU3RhdGU/OiBMZWdhY3lGaWx0ZXJCYXJTdGF0ZTtcblx0XHRmdWxsU3RhdGU/OiBMZWdhY3lGaWx0ZXJCYXJTdGF0ZTtcblx0fTtcbn07XG5cbnR5cGUgVmFyaWFudElEcyA9IHtcblx0c1BhZ2VWYXJpYW50SWQ6IHN0cmluZztcblx0c0ZpbHRlckJhclZhcmlhbnRJZDogc3RyaW5nO1xuXHRzVGFibGVWYXJpYW50SWQ6IHN0cmluZztcblx0c0NoYXJ0VmFyaWFudElkOiBzdHJpbmc7XG59O1xuXG50eXBlIFZhcmlhbnRPYmplY3QgPSB7XG5cdGF1dGhvcjogc3RyaW5nO1xuXHRjaGFuZ2U6IGJvb2xlYW47XG5cdGNvbnRleHRzOiBvYmplY3Q7XG5cdGV4ZWN1dGVPblNlbGVjdDogYm9vbGVhbjtcblx0ZmF2b3JpdGU6IGJvb2xlYW47XG5cdGtleTogc3RyaW5nO1xuXHRvcmlnaW5hbENvbnRleHRzOiBvYmplY3Q7XG5cdG9yaWdpbmFsRXhlY3V0ZU9uU2VsZWN0OiBib29sZWFuO1xuXHRvcmlnaW5hbEZhdm9yaXRlOiBib29sZWFuO1xuXHRvcmlnaW5hbFRpdGxlOiBzdHJpbmc7XG5cdG9yaWdpbmFsVmlzaWJsZTogYm9vbGVhbjtcblx0cmVtb3ZlOiBib29sZWFuO1xuXHRyZW5hbWU6IGJvb2xlYW47XG5cdHNoYXJpbmc6IHN0cmluZztcblx0dGl0bGU6IHN0cmluZztcblx0dmlzaWJsZTogYm9vbGVhbjtcbn07XG5cbmVudW0gVmFyaWFudE1hbmFnZW1lbnRUeXBlIHtcblx0Q29udHJvbCA9IFwiQ29udHJvbFwiLFxuXHRQYWdlID0gXCJQYWdlXCIsXG5cdE5vbmUgPSBcIk5vbmVcIlxufVxuXG5jb25zdCBESVNQTEFZX0NVUlJFTkNZX1BST1BFUlRZX05BTUUgPSBcIkRpc3BsYXlDdXJyZW5jeVwiO1xuY29uc3QgUF9ESVNQTEFZX0NVUlJFTkNZX1BST1BFUlRZX05BTUUgPSBcIlBfRGlzcGxheUN1cnJlbmN5XCI7XG5cbnR5cGUgTFJWaWV3RGF0YSA9IHtcblx0Y29udHJvbENvbmZpZ3VyYXRpb24/OiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG5cdGVudGl0eVNldD86IHN0cmluZztcblx0Y29udGV4dFBhdGg/OiBzdHJpbmc7XG5cdHZhcmlhbnRNYW5hZ2VtZW50PzogYm9vbGVhbiB8IHN0cmluZztcbn07XG5cbmludGVyZmFjZSBGaWx0ZXJCYXJBUEkgZXh0ZW5kcyBGaWx0ZXJCYXJBUElTdGF0ZUhhbmRsZXIge31cblxuLyoqXG4gKiBCdWlsZGluZyBibG9jayBmb3IgY3JlYXRpbmcgYSBGaWx0ZXJCYXIgYmFzZWQgb24gdGhlIG1ldGFkYXRhIHByb3ZpZGVkIGJ5IE9EYXRhIFY0LlxuICoge0BsaW5rIGRlbW86c2FwL2ZlL2NvcmUvZnBtRXhwbG9yZXIvaW5kZXguaHRtbCMvYnVpbGRpbmdCbG9ja3MvZmlsdGVyQmFyL2ZpbHRlckJhckRlZmF1bHQgT3ZlcnZpZXcgb2YgQnVpbGRpbmcgQmxvY2tzfVxuICogPGJyPlxuICogVXN1YWxseSwgYSBTZWxlY3Rpb25GaWVsZHMgYW5ub3RhdGlvbiBpcyBleHBlY3RlZC5cbiAqXG4gKlxuICogVXNhZ2UgZXhhbXBsZTpcbiAqIDxwcmU+XG4gKiAmbHQ7bWFjcm9zOkZpbHRlckJhciBpZD1cIk15RmlsdGVyQmFyXCIgbWV0YVBhdGg9XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uRmllbGRzXCIgLyZndDtcbiAqIDwvcHJlPlxuICogQGFsaWFzIHNhcC5mZS5tYWNyb3MuRmlsdGVyQmFyXG4gKiBAcHVibGljXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5tYWNyb3MuZmlsdGVyQmFyLkZpbHRlckJhckFQSVwiLCB7XG5cdHJldHVyblR5cGVzOiBbXCJzYXAudWkuY29yZS5Db250cm9sXCJdXG59KVxuQG1peGluKEZpbHRlckJhckFQSVN0YXRlSGFuZGxlcilcbmNsYXNzIEZpbHRlckJhckFQSSBleHRlbmRzIE1hY3JvQVBJIHtcblx0aW5pdGlhbENvbnRyb2xTdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuXHRfaW5pdGlhbFN0YXRlUHJvbWlzZTogUHJvbWlzZUtlZXBlcjx2b2lkPiA9IG5ldyBQcm9taXNlS2VlcGVyKCk7XG5cblx0X2JTZWFyY2hUcmlnZ2VyZWQgPSBmYWxzZTtcblxuXHRhc3luYyB3YWl0Rm9ySW5pdGlhbFN0YXRlKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLl9pbml0aWFsU3RhdGVQcm9taXNlLnByb21pc2U7XG5cdH1cblxuXHRnZXRDb250cm9sU3RhdGUoY29udHJvbFN0YXRlOiBDb250cm9sU3RhdGUpOiBDb250cm9sU3RhdGUge1xuXHRcdGNvbnN0IGluaXRpYWxDb250cm9sU3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gdGhpcy5pbml0aWFsQ29udHJvbFN0YXRlO1xuXHRcdGlmIChjb250cm9sU3RhdGUpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGZ1bGxTdGF0ZTogY29udHJvbFN0YXRlIGFzIG9iamVjdCxcblx0XHRcdFx0aW5pdGlhbFN0YXRlOiBpbml0aWFsQ29udHJvbFN0YXRlIGFzIG9iamVjdFxuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbnRyb2xTdGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHdoZXRoZXIgU2VhcmNoIGNhbiBiZSB0cmlnZ2VyZWQgYXQgaW5pdGlhbCBsb2FkIG9mIHRoZSBhcHBsaWNhdGlvbiBvciBub3QuXG5cdCAqIEBwYXJhbSBuYXZpZ2F0aW9uVHlwZSBOYXZpZ2F0aW9uIFR5cGUgZHVyaW5nIHRoZSBsb2FkIG9mIHRoZSBhcHBsaWNhdGlvblxuXHQgKiBAcmV0dXJucyBBIEJvb2xlYW4gZGV0ZXJtaW5pbmcgd2hldGhlciBTZWFyY2ggY2FuIGJlIHRyaWdnZXJlZCBvciBub3Rcblx0ICovXG5cdGlzU2VhcmNoVHJpZ2dlcmVkQnlJbml0aWFsTG9hZChuYXZpZ2F0aW9uVHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgY29udHJvbGxlciA9IHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcixcblx0XHRcdHZpZXcgPSBjb250cm9sbGVyLmdldFZpZXcoKSxcblx0XHRcdHZpZXdEYXRhID0gdmlldy5nZXRWaWV3RGF0YSgpO1xuXHRcdGxldCBpc1NlYXJjaFRyaWdnZXJlZEJ5SW5pdGlhbExvYWQgPSBmYWxzZSxcblx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50O1xuXHRcdC8vIERldGVybWluaW5nIHdoZXRoZXIgaXQncyBDb250cm9sIHZhcmlhbnRNYW5hZ2VtZW50IG9yIFBhZ2UgdmFyaWFudE1hbmFnZW1lbnRcblx0XHRpZiAodmlld0RhdGEudmFyaWFudE1hbmFnZW1lbnQgPT09IFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Db250cm9sKSB7XG5cdFx0XHR2YXJpYW50TWFuYWdlbWVudCA9IGNvbnRyb2xsZXIuX2dldEZpbHRlckJhclZhcmlhbnRDb250cm9sKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50ID0gdmlldy5ieUlkKFwiZmU6OlBhZ2VWYXJpYW50TWFuYWdlbWVudFwiKSBhcyBWYXJpYW50TWFuYWdlbWVudDtcblx0XHR9XG5cdFx0Y29uc3QgY3VycmVudFZhcmlhbnRLZXkgPSB2YXJpYW50TWFuYWdlbWVudD8uZ2V0Q3VycmVudFZhcmlhbnRLZXkoKTtcblx0XHQvL1RoZSBjaGVjayBzaGFsbCBoYXBwZW4gZm9yICdpbnRpYWwgbG9hZCcgYW5kICdBcHBseSBBdXRvbWF0aWNhbGx5JyBmb3IgY29sbGFwc2luZyB0aGUgaGVhZGVyIG9yXG5cdFx0Ly8gYWx3YXlzIGJlIGNvbGxhcHNlZCBpZiBuYXZUeXBlIGlzIHhBcHBTdGF0ZVxuXHRcdC8vIGluaXRpYWxMb2FkIEF1dG8gb3IgRGlzYWJsZWRcblx0XHRpZiAobmF2aWdhdGlvblR5cGUgPT09IE5hdlR5cGUueEFwcFN0YXRlKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2UgaWYgKHZhcmlhbnRNYW5hZ2VtZW50ICYmIHZpZXdEYXRhLmluaXRpYWxMb2FkICE9PSBJbml0aWFsTG9hZE1vZGUuRW5hYmxlZCkge1xuXHRcdFx0Ly8gSGVhZGVyIGlzIGNvbGxhcHNlZCBpZiBwcmVzZXQgZmlsdGVycyBhcmUgc2V0IGZvciBpbml0aWFsIGxvYWQgQXV0bywgSGVhZGVyIHNoYWxsIHJlbWFpbiBleHBhbmRlZCBpZiBpbml0aWFsIGxvYWQgaXMgQXV0byB3aXRob3V0IHByZXNldCBmaWx0ZXJzIG9yIGludGlhbCBsb2FkIGlzIGRpc2FibGVkXG5cdFx0XHRpZiAoY29udHJvbGxlci5fc2hvdWxkQXV0b1RyaWdnZXJTZWFyY2godGhpcy5fZ2V0RmlsdGVyQmFyVk0odmlldykpKSB7XG5cdFx0XHRcdGlzU2VhcmNoVHJpZ2dlcmVkQnlJbml0aWFsTG9hZCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIGluaXRpYWxMb2FkIEVuYWJsZWRcblx0XHRlbHNlIGlmIChcblx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50ICYmXG5cdFx0XHR2aWV3RGF0YS5pbml0aWFsTG9hZCA9PT0gSW5pdGlhbExvYWRNb2RlLkVuYWJsZWQgJiZcblx0XHRcdGNvbnRyb2xsZXIuX2dldEFwcGx5QXV0b21hdGljYWxseU9uVmFyaWFudCh2YXJpYW50TWFuYWdlbWVudCwgY3VycmVudFZhcmlhbnRLZXkpXG5cdFx0KSB7XG5cdFx0XHRpc1NlYXJjaFRyaWdnZXJlZEJ5SW5pdGlhbExvYWQgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gaXNTZWFyY2hUcmlnZ2VyZWRCeUluaXRpYWxMb2FkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFwcGx5IFNlbGVjdGlvbiBWYXJpYW50IGZyb20gTmF2aWdhdGlvbiBQYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSB2aWV3IFZpZXcgb2YgdGhlIExSIGZpbHRlciBiYXJcblx0ICogQHBhcmFtIG5hdmlnYXRpb25QYXJhbWV0ZXIgU2VsZWN0aW9uIFZhcmlhbnQgdG8gYXBwbHkgZnJvbSBhcHBTdGF0ZVxuXHQgKiBAcGFyYW0gZmlsdGVyVmFyaWFudEFwcGxpZWQgSXMgYSBmaWx0ZXIgdmFyaWFudCBhbGFyZWFkeSBhcHBsaWVkXG5cdCAqIEByZXR1cm5zIFByb21pc2UgZm9yIGFzeW5jaHJvbm91cyBoYW5kbGluZ1xuXHQgKi9cblx0YXN5bmMgX2FwcGx5U2VsZWN0aW9uVmFyaWFudCh2aWV3OiBWaWV3LCBuYXZpZ2F0aW9uUGFyYW1ldGVyOiBOYXZpZ2F0aW9uUGFyYW1ldGVyLCBmaWx0ZXJWYXJpYW50QXBwbGllZDogYm9vbGVhbik6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuZ2V0Q29udGVudCgpIGFzIEZpbHRlckJhcjtcblx0XHRjb25zdCB7IHNlbGVjdGlvblZhcmlhbnQ6IHN2LCBzZWxlY3Rpb25WYXJpYW50RGVmYXVsdHM6IHN2RGVmYXVsdHMsIHJlcXVpcmVzU3RhbmRhcmRWYXJpYW50ID0gZmFsc2UgfSA9IG5hdmlnYXRpb25QYXJhbWV0ZXI7XG5cblx0XHRpZiAoIWZpbHRlckJhciB8fCAhc3YpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9XG5cdFx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQgPSB0aGlzLl9nZXRGaWx0ZXJCYXJWTSh2aWV3KSBhcyBWYXJpYW50TWFuYWdlbWVudDtcblx0XHRjb25zdCBzaG91bGRBcHBseUFwcFN0YXRlID0gYXdhaXQgdGhpcy5fYWN0aXZhdGVWYXJpYW50QW5kRGV0ZXJtaW5lQXBwbHlBcHBTdGF0ZShcblx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50LFxuXHRcdFx0cmVxdWlyZXNTdGFuZGFyZFZhcmlhbnQsXG5cdFx0XHRmaWx0ZXJWYXJpYW50QXBwbGllZFxuXHRcdCk7XG5cdFx0aWYgKHNob3VsZEFwcGx5QXBwU3RhdGUpIHtcblx0XHRcdHRoaXMuX2FkZERlZmF1bHREaXNwbGF5Q3VycmVuY3lUb1NWKHZpZXcsIHN2LCBzdkRlZmF1bHRzKTtcblxuXHRcdFx0Ly8gY2hlY2sgaWYgRkxQIGRlZmF1bHQgdmFsdWVzIGFyZSB0aGVyZSBhbmQgaXMgaXQgc3RhbmRhcmQgdmFyaWFudFxuXHRcdFx0Y29uc3Qgc3ZEZWZhdWx0c0FyZVByZXNlbnQgPSBzdkRlZmF1bHRzID8gc3ZEZWZhdWx0cy5nZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcygpLmxlbmd0aCA+IDAgOiBmYWxzZTtcblx0XHRcdGNvbnN0IHN0ZFZhcmlhbnRJc0RlZmF1bHRWYXJpYW50ID1cblx0XHRcdFx0dmFyaWFudE1hbmFnZW1lbnQgJiYgdmFyaWFudE1hbmFnZW1lbnQuZ2V0RGVmYXVsdFZhcmlhbnRLZXkoKSA9PT0gdmFyaWFudE1hbmFnZW1lbnQuZ2V0U3RhbmRhcmRWYXJpYW50S2V5KCk7XG5cdFx0XHRjb25zdCB1c2VGTFBEZWZhdWx0VmFsdWVzOiBib29sZWFuID0gc3ZEZWZhdWx0c0FyZVByZXNlbnQgJiYgKHN0ZFZhcmlhbnRJc0RlZmF1bHRWYXJpYW50IHx8ICF2YXJpYW50TWFuYWdlbWVudCk7XG5cblx0XHRcdGNvbnN0IGZpbHRlckJhckFQSSA9IGZpbHRlckJhci5nZXRQYXJlbnQoKSBhcyBGaWx0ZXJCYXJBUEk7XG5cdFx0XHRsZXQgc3ZUb1NldDogU2VsZWN0aW9uVmFyaWFudCA9IHN2O1xuXHRcdFx0aWYgKGZpbHRlclZhcmlhbnRBcHBsaWVkIHx8IHVzZUZMUERlZmF1bHRWYWx1ZXMpIHtcblx0XHRcdFx0c3ZUb1NldCA9IGF3YWl0IHRoaXMuX2dldEFkanVzdGVkU1Yoc3YsIHVzZUZMUERlZmF1bHRWYWx1ZXMpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZpbHRlckJhckFQSS5zZXRTZWxlY3Rpb25WYXJpYW50KHN2VG9TZXQsIHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdF9lbmFibGVGaWx0ZXJCYXIoZmlsdGVyQmFyQ29udHJvbDogRmlsdGVyQmFyLCBwcmV2ZW50SW5pdGlhbFNlYXJjaDogYm9vbGVhbik6IHZvaWQge1xuXHRcdGNvbnN0IGZpbHRlckJhckFQSSA9IGZpbHRlckJhckNvbnRyb2wuZ2V0UGFyZW50KCkgYXMgRmlsdGVyQmFyQVBJO1xuXHRcdGNvbnN0IGZuT25TZWFyY2ggPSAoKTogdm9pZCA9PiB7XG5cdFx0XHR0aGlzLl9iU2VhcmNoVHJpZ2dlcmVkID0gIXByZXZlbnRJbml0aWFsU2VhcmNoO1xuXHRcdH07XG5cblx0XHQvLyByZXNldCB0aGUgc3VzcGVuZCBzZWxlY3Rpb24gb24gZmlsdGVyIGJhciB0byBhbGxvdyBsb2FkaW5nIG9mIGRhdGEgd2hlbiBuZWVkZWQgKHdhcyBzZXQgb24gTFIgSW5pdClcblx0XHRpZiAoZmlsdGVyQmFyQ29udHJvbC5nZXRTdXNwZW5kU2VsZWN0aW9uKCkpIHtcblx0XHRcdC8vIE9ubHkgaWYgc2VhcmNoIGlzIGZpcmVkIHdlIHNldCBfYlNlYXJjaFRyaWdnZXJlZC5cblx0XHRcdC8vIElmIHRoZXJlIHdhcyBhbiBlcnJvciBkdWUgdG8gcmVxdWlyZWQgZmlsdGVyZmllbGRzIGVtcHR5IG9yIG90aGVyIGlzc3VlcyB3ZSBza2lwIHNldHRpbmcgX2JTZWFyY2hUcmlnZ2VyZWQuXG5cdFx0XHRmaWx0ZXJCYXJBUEkuYXR0YWNoRXZlbnRPbmNlKFwic2VhcmNoXCIsIGZuT25TZWFyY2gpO1xuXHRcdFx0ZmlsdGVyQmFyQ29udHJvbC5lbmFibGVSZXF1ZXN0cyh0cnVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gc2VhcmNoIG1pZ2h0IGFscmVhZHkgYmUgdHJpZ2dlcmVkLlxuXHRcdFx0Zm5PblNlYXJjaCgpO1xuXHRcdH1cblx0fVxuXG5cdGFzeW5jIF9nZXRBZGp1c3RlZFNWKGFwcFN0YXRlU1Y6IFNlbGVjdGlvblZhcmlhbnQsIHVzZUZMUERlZmF1bHRWYWx1ZXM6IGJvb2xlYW4pOiBQcm9taXNlPFNlbGVjdGlvblZhcmlhbnQ+IHtcblx0XHRsZXQgYWRqdXN0ZWRTViA9IG5ldyBTZWxlY3Rpb25WYXJpYW50KGFwcFN0YXRlU1YudG9KU09OT2JqZWN0KCkpO1xuXHRcdGNvbnN0IGFscmVhZHlBcHBsaWVkU1YgPSBhd2FpdCB0aGlzLmdldFNlbGVjdGlvblZhcmlhbnQoKTtcblx0XHRjb25zdCBhcHBsaWVkU2VsT3B0TmFtZXMgPSBhbHJlYWR5QXBwbGllZFNWPy5nZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcygpIHx8IFtdO1xuXHRcdGlmIChhcHBsaWVkU2VsT3B0TmFtZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly8gV2UgbWVyZ2UgJ2FwcGxpZWQgU1YnIGFuZCAnYXBwU3RhdGUgU1YnIGJhc2VkIG9uICd1c2VGTFBEZWZhdWx0VmFsdWVzJy5cblx0XHRcdGFkanVzdGVkU1YgPSBhcHBsaWVkU2VsT3B0TmFtZXMucmVkdWNlKChzdkNvcHk6IFNlbGVjdGlvblZhcmlhbnQsIHNlbE9wdGlvbk5hbWUpID0+IHtcblx0XHRcdFx0Ly8gKGFwcFN0YXRlU1YgPSBhZGp1c3RlZFNWID0gc3ZDb3B5KVxuXHRcdFx0XHRjb25zdCBzdlNlbE9wdHMgPSBzdkNvcHkuZ2V0U2VsZWN0T3B0aW9uKHNlbE9wdGlvbk5hbWUpO1xuXHRcdFx0XHQvLyBJZiB1c2VGTFBEZWZhdWx0VmFsdWVzID0gdHJ1ZSwgbWVhbnMgKGFwcFN0YXRlU1YgPSBzdkRlZmF1bHRzKVxuXHRcdFx0XHRpZiAoKHVzZUZMUERlZmF1bHRWYWx1ZXMgJiYgIXN2U2VsT3B0cz8ubGVuZ3RoKSB8fCAhdXNlRkxQRGVmYXVsdFZhbHVlcykge1xuXHRcdFx0XHRcdC8vIGlmIGRlZmF1bHQgU1YgbmVlZHMgdG8gYmUgdXNlZCwgdGhlbiBzZWxlY3Qgb3B0aW9ucyBmcm9tIGRlZmF1bHQgc2VsZWN0IG9wdGlvbnMgdGFrZSBwcmlvcml0eS5cblx0XHRcdFx0XHQvLyBlbHNlIHdlIG1lcmdlIGJvdGg6IGFscmVhZHkgYXBwbGllZCBTViBhbmQgU1YgZnJvbSBuYXZQYXJhbXMuXG5cdFx0XHRcdFx0Y29uc3Qgc2VsZWN0T3B0aW9ucyA9IGFscmVhZHlBcHBsaWVkU1YuZ2V0U2VsZWN0T3B0aW9uKHNlbE9wdGlvbk5hbWUpO1xuXHRcdFx0XHRcdHN2Q29weS5tYXNzQWRkU2VsZWN0T3B0aW9uKHNlbE9wdGlvbk5hbWUsIHNlbGVjdE9wdGlvbnMgfHwgW10pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBzdkNvcHk7XG5cdFx0XHR9LCBhZGp1c3RlZFNWKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYWRqdXN0ZWRTVjtcblx0fVxuXG5cdF9wcmV2ZW50SW5pdGlhbFNlYXJjaCh2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnQpOiBib29sZWFuIHtcblx0XHRpZiAoIXZhcmlhbnRNYW5hZ2VtZW50KSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0Y29uc3QgYVZhcmlhbnRzID0gdmFyaWFudE1hbmFnZW1lbnQuZ2V0VmFyaWFudHMoKTtcblx0XHRjb25zdCBvQ3VycmVudFZhcmlhbnQgPSBhVmFyaWFudHMuZmluZChmdW5jdGlvbiAoaXRlbSk6IGJvb2xlYW4ge1xuXHRcdFx0cmV0dXJuIGl0ZW0uZ2V0S2V5KCkgPT09IHZhcmlhbnRNYW5hZ2VtZW50LmdldEN1cnJlbnRWYXJpYW50S2V5KCk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuICFvQ3VycmVudFZhcmlhbnQuZXhlY3V0ZU9uU2VsZWN0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBEaXNwbGF5Q3VycmVuY3kgdG8gU1YgaWYgaXQgaXMgbWFuZGF0b3J5IGFuZCBleGlzdHMgaW4gU1YgZGVmYXVsdHMuXG5cdCAqIEBwYXJhbSB2aWV3IFZpZXcgb2YgdGhlIExSIGZpbHRlciBiYXJcblx0ICogQHBhcmFtIHN2IFNlbGVjdGlvbiBWYXJpYW50IHRvIGFwcGx5XG5cdCAqIEBwYXJhbSBzdkRlZmF1bHRzIFNlbGVjdGlvbiBWYXJpYW50IGRlZmF1bHRzXG5cdCAqL1xuXHRfYWRkRGVmYXVsdERpc3BsYXlDdXJyZW5jeVRvU1YodmlldzogVmlldywgc3Y6IFNlbGVjdGlvblZhcmlhbnQsIHN2RGVmYXVsdHM/OiBTZWxlY3Rpb25WYXJpYW50KTogdm9pZCB7XG5cdFx0aWYgKCFzdkRlZmF1bHRzIHx8IHN2RGVmYXVsdHM/LmlzRW1wdHkoKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHZpZXdEYXRhID0gdmlldy5nZXRWaWV3RGF0YSgpIGFzIExSVmlld0RhdGEsXG5cdFx0XHRtZXRhTW9kZWwgPSB2aWV3LmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0Y29udGV4dFBhdGggPSB2aWV3RGF0YS5jb250ZXh0UGF0aCB8fCBgLyR7dmlld0RhdGEuZW50aXR5U2V0fWAsXG5cdFx0XHRtZXRhQ29udGV4dCA9IG1ldGFNb2RlbC5nZXRNZXRhQ29udGV4dChjb250ZXh0UGF0aCksXG5cdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPE1ldGFNb2RlbD4gPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YUNvbnRleHQpO1xuXG5cdFx0Ly8gZ2V0RGlzcGxheUN1cnJlbmN5UHJvcGVydHlOYW1lIGFscmVhZHkgYXBwbGllcyB0aGUgaXNQYXJhbWV0ZXJpemVkIGxvZ2ljXG5cdFx0Y29uc3QgZGlzcGxheUN1cnJlbmN5UHJvcGVydHlOYW1lID0gdGhpcy5nZXREaXNwbGF5Q3VycmVuY3lQcm9wZXJ0eU5hbWUoZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdFx0Y29uc3QgZGlzcGxheUN1cnJlbmN5SXNNYW5kYXRvcnkgPSB0aGlzLl9jaGVja0lmRGlzcGxheUN1cnJlbmN5SXNSZXF1aXJlZChkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0XHRpZiAoIWRpc3BsYXlDdXJyZW5jeUlzTWFuZGF0b3J5KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc3ZPcHRpb25zID0gc3YuZ2V0U2VsZWN0T3B0aW9uKGRpc3BsYXlDdXJyZW5jeVByb3BlcnR5TmFtZSkgfHwgW10sXG5cdFx0XHRkZWZhdWx0U1ZPcHRpb25zID0gc3ZEZWZhdWx0cy5nZXRTZWxlY3RPcHRpb24oZGlzcGxheUN1cnJlbmN5UHJvcGVydHlOYW1lKSB8fCBbXSxcblx0XHRcdGRpc3BsYXlDdXJyZW5jeURlZmF1bHRFeGlzdHMgPSBkZWZhdWx0U1ZPcHRpb25zLmxlbmd0aCA+IDAsXG5cdFx0XHRub1NWRGlzcGxheUN1cnJlbmN5RXhpc3RzID0gc3ZPcHRpb25zLmxlbmd0aCA9PT0gMDtcblxuXHRcdGlmIChub1NWRGlzcGxheUN1cnJlbmN5RXhpc3RzICYmIGRpc3BsYXlDdXJyZW5jeURlZmF1bHRFeGlzdHMpIHtcblx0XHRcdGNvbnN0IGRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbiA9IGRlZmF1bHRTVk9wdGlvbnNbMF0sXG5cdFx0XHRcdHNpZ24gPSBkaXNwbGF5Q3VycmVuY3lTZWxlY3RPcHRpb25bXCJTaWduXCJdLFxuXHRcdFx0XHRvcHRpb24gPSBkaXNwbGF5Q3VycmVuY3lTZWxlY3RPcHRpb25bXCJPcHRpb25cIl0sXG5cdFx0XHRcdGxvdyA9IGRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbltcIkxvd1wiXSxcblx0XHRcdFx0aGlnaCA9IGRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbltcIkhpZ2hcIl07XG5cblx0XHRcdHN2LmFkZFNlbGVjdE9wdGlvbihkaXNwbGF5Q3VycmVuY3lQcm9wZXJ0eU5hbWUsIHNpZ24sIG9wdGlvbiwgbG93LCBoaWdoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBkYXRhIG1vZGVsIG9iamVjdCBwYXRoIGlzIHBhcmFtZXRlcml6ZWQuXG5cdCAqIExvb2tzIGZvciBhIFJlc3VsdENvbnRleHQgYW5ub3RhdGlvbiBpbiB0aGUgc3RhcnRpbmcgZW50aXR5J3MgdHlwZVxuXHQgKiBhbmQgZW5zdXJlcyB0aGVyZSdzIG5vIHRhcmdldCBlbnRpdHkgc2V0LlxuXHQgKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBUaGUgcGF0aCB0byBjaGVjay5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiBpdCdzIHBhcmFtZXRlcml6ZWQsIGZhbHNlIG90aGVyd2lzZS5cblx0ICovXG5cdHByaXZhdGUgaXNQYXJhbWV0ZXJpemVkKGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8TWV0YU1vZGVsPik6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAhIWRhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQuZW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uUmVzdWx0Q29udGV4dDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBkaXNwbGF5IGN1cnJlbmN5IHByb3BlcnR5IG5hbWUgYmFzZWQgb24gdGhlIGVudGl0eSB0eXBlJ3MgcGFyYW1ldGVyaXphdGlvbi5cblx0ICogVXNlcyB0aGUgaXNQYXJhbWV0ZXJpemVkIG1ldGhvZCB0byBkZWNpZGUgd2hpY2ggcHJvcGVydHkgbmFtZSB0byByZXR1cm4uXG5cdCAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxuXHQgKiBAcmV0dXJucyBUaGUgYXBwcm9wcmlhdGUgZGlzcGxheSBjdXJyZW5jeSBwcm9wZXJ0eSBuYW1lLlxuXHQgKi9cblx0Z2V0RGlzcGxheUN1cnJlbmN5UHJvcGVydHlOYW1lKGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8TWV0YU1vZGVsPik6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuaXNQYXJhbWV0ZXJpemVkKGRhdGFNb2RlbE9iamVjdFBhdGgpID8gUF9ESVNQTEFZX0NVUlJFTkNZX1BST1BFUlRZX05BTUUgOiBESVNQTEFZX0NVUlJFTkNZX1BST1BFUlRZX05BTUU7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIERpc3BsYXlDdXJyZW5jeSBpcyBtYW5kYXRvcnkgZm9yIGZpbHRlcmluZy5cblx0ICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGhcblx0ICogQHJldHVybnMgQm9vbGVhblxuXHQgKi9cblx0X2NoZWNrSWZEaXNwbGF5Q3VycmVuY3lJc1JlcXVpcmVkKGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8TWV0YU1vZGVsPik6IGJvb2xlYW4ge1xuXHRcdGxldCBkaXNwbGF5Q3VycmVuY3lJc01hbmRhdG9yeSA9IGZhbHNlO1xuXG5cdFx0aWYgKHRoaXMuaXNQYXJhbWV0ZXJpemVkKGRhdGFNb2RlbE9iamVjdFBhdGgpKSB7XG5cdFx0XHRkaXNwbGF5Q3VycmVuY3lJc01hbmRhdG9yeSA9IGRhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQuZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLnNvbWUoXG5cdFx0XHRcdChwYXJhbWV0ZXI6IFByb3BlcnR5KTogYm9vbGVhbiA9PiBwYXJhbWV0ZXIubmFtZSA9PT0gUF9ESVNQTEFZX0NVUlJFTkNZX1BST1BFUlRZX05BTUVcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGVudGl0eVNldDogRW50aXR5U2V0IHwgdW5kZWZpbmVkID1cblx0XHRcdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0Ll90eXBlID09PSBcIkVudGl0eVNldFwiID8gZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldCA6IHVuZGVmaW5lZCxcblx0XHRcdFx0cmVxdWlyZWRQcm9wZXJ0aWVzID0gZW50aXR5U2V0Py5hbm5vdGF0aW9ucy5DYXBhYmlsaXRpZXM/LkZpbHRlclJlc3RyaWN0aW9ucz8uUmVxdWlyZWRQcm9wZXJ0aWVzID8/IFtdO1xuXHRcdFx0ZGlzcGxheUN1cnJlbmN5SXNNYW5kYXRvcnkgPSByZXF1aXJlZFByb3BlcnRpZXMuc29tZShcblx0XHRcdFx0KHJlcXVpcmVkUHJvcGVydHk6IFByb3BlcnR5UGF0aCkgPT4gcmVxdWlyZWRQcm9wZXJ0eS52YWx1ZSA9PT0gRElTUExBWV9DVVJSRU5DWV9QUk9QRVJUWV9OQU1FXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gZGlzcGxheUN1cnJlbmN5SXNNYW5kYXRvcnk7XG5cdH1cblxuXHQvKipcblx0ICogQWN0aXZhdGUgdmFyaWFudCBmcm9tIHZhcmlhbnQgbWFuYWdlbWVudCBhbmQgcmV0dXJuIGlmIGFwcFN0YXRlIG5lZWRzIHRvIGJlIGFwcGxpZWQuXG5cdCAqIEBwYXJhbSB2YXJpYW50TWFuYWdlbWVudCBWYXJpYW50TWFuYWdlbWVudCB1c2VkIGJ5IGZpbHRlciBiYXJcblx0ICogQHBhcmFtIHJlcVN0ZFZhcmlhbnQgSWYgc3RhbmRhcmQgdmFyaWFudCBpcyByZXF1aXJlZCB0byBiZSB1c2VkXG5cdCAqIEBwYXJhbSBmaWx0ZXJWYXJpYW50QXBwbGllZCBJcyBhIGZpbHRlciB2YXJpYW50IGFscmVhZHkgYXBwbGllZFxuXHQgKiBAcmV0dXJucyBQcm9taXNlIGZvciBhc3luY2hyb25vdXMgaGFuZGxpbmdcblx0ICovXG5cdGFzeW5jIF9hY3RpdmF0ZVZhcmlhbnRBbmREZXRlcm1pbmVBcHBseUFwcFN0YXRlKFxuXHRcdHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudCB8IHVuZGVmaW5lZCxcblx0XHRyZXFTdGRWYXJpYW50OiBib29sZWFuLFxuXHRcdGZpbHRlclZhcmlhbnRBcHBsaWVkOiBib29sZWFuXG5cdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGlmICh2YXJpYW50TWFuYWdlbWVudCAmJiAhZmlsdGVyVmFyaWFudEFwcGxpZWQpIHtcblx0XHRcdGxldCB2YXJpYW50S2V5ID0gcmVxU3RkVmFyaWFudCA/IHZhcmlhbnRNYW5hZ2VtZW50LmdldFN0YW5kYXJkVmFyaWFudEtleSgpIDogdmFyaWFudE1hbmFnZW1lbnQuZ2V0RGVmYXVsdFZhcmlhbnRLZXkoKTtcblx0XHRcdGlmICh2YXJpYW50S2V5ID09PSBudWxsKSB7XG5cdFx0XHRcdHZhcmlhbnRLZXkgPSB2YXJpYW50TWFuYWdlbWVudC5nZXRJZCgpO1xuXHRcdFx0fVxuXHRcdFx0YXdhaXQgQ29udHJvbFZhcmlhbnRBcHBseUFQSS5hY3RpdmF0ZVZhcmlhbnQoe1xuXHRcdFx0XHRlbGVtZW50OiB2YXJpYW50TWFuYWdlbWVudCxcblx0XHRcdFx0dmFyaWFudFJlZmVyZW5jZTogdmFyaWFudEtleVxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gcmVxU3RkVmFyaWFudCB8fCB2YXJpYW50TWFuYWdlbWVudC5nZXREZWZhdWx0VmFyaWFudEtleSgpID09PSB2YXJpYW50TWFuYWdlbWVudC5nZXRTdGFuZGFyZFZhcmlhbnRLZXkoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBWYXJpYW50IG1hbmFnZW1lbnQgdXNlZCBieSBmaWx0ZXIgYmFyLlxuXHQgKiBAcGFyYW0gdmlldyBWaWV3IG9mIHRoZSBMUiBmaWx0ZXIgYmFyXG5cdCAqIEByZXR1cm5zIFZhcmlhbnRNYW5hZ2VtZW50IGlmIHVzZWRcblx0ICovXG5cdF9nZXRGaWx0ZXJCYXJWTSh2aWV3OiBWaWV3KTogVmFyaWFudE1hbmFnZW1lbnQgfCB1bmRlZmluZWQge1xuXHRcdGxldCB2YXJpYW50TWFuYWdlbWVudDtcblx0XHRjb25zdCB2aWV3RGF0YSA9IHZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBMUlZpZXdEYXRhO1xuXHRcdHN3aXRjaCAodmlld0RhdGEudmFyaWFudE1hbmFnZW1lbnQpIHtcblx0XHRcdGNhc2UgVmFyaWFudE1hbmFnZW1lbnRUeXBlLlBhZ2U6XG5cdFx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50ID0gdmlldy5ieUlkKFwiZmU6OlBhZ2VWYXJpYW50TWFuYWdlbWVudFwiKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Db250cm9sOlxuXHRcdFx0XHR2YXJpYW50TWFuYWdlbWVudCA9ICh2aWV3LmdldENvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcikuX2dldEZpbHRlckJhclZhcmlhbnRDb250cm9sKCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBWYXJpYW50TWFuYWdlbWVudFR5cGUuTm9uZTpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFyaWFudE1hbmFnZW1lbnQgYXMgVmFyaWFudE1hbmFnZW1lbnQgfCB1bmRlZmluZWQ7XG5cdH1cblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3JlcXVpcmUtYXdhaXRcblx0YXN5bmMgaGFuZGxlVmFyaWFudElkUGFzc2VkVmlhVVJMUGFyYW1zKG9VcmxQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRjb25zdCBhUGFnZVZhcmlhbnRJZCA9IG9VcmxQYXJhbXNbXCJzYXAtdWktZmUtdmFyaWFudC1pZFwiXSxcblx0XHRcdGFGaWx0ZXJCYXJWYXJpYW50SWQgPSBvVXJsUGFyYW1zW1wic2FwLXVpLWZlLWZpbHRlcmJhci12YXJpYW50LWlkXCJdLFxuXHRcdFx0YVRhYmxlVmFyaWFudElkID0gb1VybFBhcmFtc1tcInNhcC11aS1mZS10YWJsZS12YXJpYW50LWlkXCJdLFxuXHRcdFx0YUNoYXJ0VmFyaWFudElkID0gb1VybFBhcmFtc1tcInNhcC11aS1mZS1jaGFydC12YXJpYW50LWlkXCJdO1xuXHRcdGxldCBvVmFyaWFudElEczogVmFyaWFudElEcyB8IHVuZGVmaW5lZDtcblx0XHRpZiAoYVBhZ2VWYXJpYW50SWQgfHwgYUZpbHRlckJhclZhcmlhbnRJZCB8fCBhVGFibGVWYXJpYW50SWQgfHwgYUNoYXJ0VmFyaWFudElkKSB7XG5cdFx0XHRvVmFyaWFudElEcyA9IHtcblx0XHRcdFx0c1BhZ2VWYXJpYW50SWQ6IGFQYWdlVmFyaWFudElkICYmIGFQYWdlVmFyaWFudElkWzBdLFxuXHRcdFx0XHRzRmlsdGVyQmFyVmFyaWFudElkOiBhRmlsdGVyQmFyVmFyaWFudElkICYmIGFGaWx0ZXJCYXJWYXJpYW50SWRbMF0sXG5cdFx0XHRcdHNUYWJsZVZhcmlhbnRJZDogYVRhYmxlVmFyaWFudElkICYmIGFUYWJsZVZhcmlhbnRJZFswXSxcblx0XHRcdFx0c0NoYXJ0VmFyaWFudElkOiBhQ2hhcnRWYXJpYW50SWQgJiYgYUNoYXJ0VmFyaWFudElkWzBdXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5faGFuZGxlQ29udHJvbFZhcmlhbnRJZChvVmFyaWFudElEcyk7XG5cdH1cblxuXHRhc3luYyBfaGFuZGxlQ29udHJvbFZhcmlhbnRJZChvVmFyaWFudElEczogVmFyaWFudElEcyB8IHVuZGVmaW5lZCk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdGxldCBvVk06IFZhcmlhbnRNYW5hZ2VtZW50O1xuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRQYWdlQ29udHJvbGxlcigpPy5nZXRWaWV3KCksXG5cdFx0XHRhUHJvbWlzZXM6IFByb21pc2U8Ym9vbGVhbj5bXSA9IFtdO1xuXHRcdGNvbnN0IHNWYXJpYW50TWFuYWdlbWVudCA9IG9WaWV3LmdldFZpZXdEYXRhKCkudmFyaWFudE1hbmFnZW1lbnQ7XG5cdFx0aWYgKG9WYXJpYW50SURzICYmIG9WYXJpYW50SURzLnNQYWdlVmFyaWFudElkICYmIHNWYXJpYW50TWFuYWdlbWVudCA9PT0gXCJQYWdlXCIpIHtcblx0XHRcdG9WTSA9IG9WaWV3LmJ5SWQoXCJmZTo6UGFnZVZhcmlhbnRNYW5hZ2VtZW50XCIpIGFzIFZhcmlhbnRNYW5hZ2VtZW50O1xuXHRcdFx0dGhpcy5faGFuZGxlUGFnZVZhcmlhbnRJZChvVmFyaWFudElEcywgb1ZNLCBhUHJvbWlzZXMpO1xuXHRcdH0gZWxzZSBpZiAob1ZhcmlhbnRJRHMgJiYgc1ZhcmlhbnRNYW5hZ2VtZW50ID09PSBcIkNvbnRyb2xcIikge1xuXHRcdFx0aWYgKG9WYXJpYW50SURzLnNGaWx0ZXJCYXJWYXJpYW50SWQpIHtcblx0XHRcdFx0b1ZNID0gKG9WaWV3LmdldENvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcikuX2dldEZpbHRlckJhclZhcmlhbnRDb250cm9sKCkhO1xuXHRcdFx0XHR0aGlzLl9oYW5kbGVGaWx0ZXJCYXJWYXJpYW50Q29udHJvbElkKG9WYXJpYW50SURzLCBvVk0sIGFQcm9taXNlcyk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLmFsbChhUHJvbWlzZXMpO1xuXHR9XG5cblx0Lypcblx0ICogSGFuZGxlcyBwYWdlIGxldmVsIHZhcmlhbnQgYW5kIHBhc3NlcyB0aGUgdmFyaWFudCB0byB0aGUgZnVuY3Rpb24gdGhhdCBwdXNoZXMgdGhlIHByb21pc2UgdG8gdGhlIHByb21pc2UgYXJyYXlcblx0ICpcblx0ICogQHBhcmFtIG9WYXJpbmF0SURzIGNvbnRhaW5zIGFuIG9iamVjdCBvZiBhbGwgdmFyaWFudCBJRHNcblx0ICogQHBhcmFtIG9WTSBjb250YWlucyB0aGUgdmFpcmFudCBtYW5hZ2VtZW50IG9iamVjdCBmb3IgdGhlIHBhZ2UgdmFyaWFudFxuXHQgKiBAcGFyYW0gYVByb21pc2VzIGlzIGFuIGFycmF5IG9mIGFsbCBwcm9taXNlc1xuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2hhbmRsZVBhZ2VWYXJpYW50SWQob1ZhcmlhbnRJRHM6IFZhcmlhbnRJRHMsIG9WTTogVmFyaWFudE1hbmFnZW1lbnQsIGFQcm9taXNlczogUHJvbWlzZTxib29sZWFuPltdKTogdm9pZCB7XG5cdFx0b1ZNLmdldFZhcmlhbnRzKCk/LmZvckVhY2goKG9WYXJpYW50OiBWYXJpYW50T2JqZWN0KSA9PiB7XG5cdFx0XHR0aGlzLl9maW5kQW5kUHVzaFZhcmlhbnRUb1Byb21pc2Uob1ZhcmlhbnQsIG9WYXJpYW50SURzLnNQYWdlVmFyaWFudElkLCBvVk0sIGFQcm9taXNlcywgdHJ1ZSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKlxuXHQgKiBIYW5kbGVzIGNvbnRyb2wgbGV2ZWwgdmFyaWFudCBmb3IgZmlsdGVyIGJhciBhbmQgcGFzc2VzIHRoZSB2YXJpYW50IHRvIHRoZSBmdW5jdGlvbiB0aGF0IHB1c2hlcyB0aGUgcHJvbWlzZSB0byB0aGUgcHJvbWlzZSBhcnJheVxuXHQgKlxuXHQgKiBAcGFyYW0gb1ZhcmluYXRJRHMgY29udGFpbnMgYW4gb2JqZWN0IG9mIGFsbCB2YXJpYW50IElEc1xuXHQgKiBAcGFyYW0gb1ZNIGNvbnRhaW5zIHRoZSB2YWlyYW50IG1hbmFnZW1lbnQgb2JqZWN0IGZvciB0aGUgZmlsdGVyIGJhclxuXHQgKiBAcGFyYW0gYVByb21pc2VzIGlzIGFuIGFycmF5IG9mIGFsbCBwcm9taXNlc1xuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblxuXHRfaGFuZGxlRmlsdGVyQmFyVmFyaWFudENvbnRyb2xJZChvVmFyaWFudElEczogVmFyaWFudElEcywgb1ZNOiBWYXJpYW50TWFuYWdlbWVudCwgYVByb21pc2VzOiBQcm9taXNlPGJvb2xlYW4+W10pOiB2b2lkIHtcblx0XHRpZiAob1ZNKSB7XG5cdFx0XHRvVk0uZ2V0VmFyaWFudHMoKS5mb3JFYWNoKChvVmFyaWFudDogVmFyaWFudE9iamVjdCkgPT4ge1xuXHRcdFx0XHR0aGlzLl9maW5kQW5kUHVzaFZhcmlhbnRUb1Byb21pc2Uob1ZhcmlhbnQsIG9WYXJpYW50SURzLnNGaWx0ZXJCYXJWYXJpYW50SWQsIG9WTSwgYVByb21pc2VzLCB0cnVlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qXG5cdCAqIE1hdGNoZXMgdGhlIHZhcmlhbnQgSUQgcHJvdmlkZWQgaW4gdGhlIHVybCB0byB0aGUgYXZhaWxhYmxlIHZhaXJhbnQgSURzIGFuZCBwdXNoZXMgdGhlIGFwcHJvcHJpYXRlIHByb21pc2UgdG8gdGhlIHByb21pc2UgYXJyYXlcblx0ICpcblx0ICogQHBhcmFtIG9WYXJpYW50IGlzIGFuIG9iamVjdCBmb3IgYSBzcGVjaWZpYyB2YXJpYW50XG5cdCAqIEBwYXJhbSBzVmFyaWFudElkIGlzIHRoZSB2YXJpYW50IElEIHByb3ZpZGVkIGluIHRoZSB1cmxcblx0ICogQHBhcmFtIG9WTSBpcyB0aGUgdmFyaWFudCBtYW5hZ2VtZW50IG9iamVjdCBmb3IgdGhlIHNwZWNmaWMgdmFyaWFudFxuXHQgKiBAcGFyYW0gYVByb21pc2VzIGlzIGFuIGFycmF5IG9mIHByb21pc2VzXG5cdCAqIEBwYXJhbSBiRmlsdGVyVmFyaWFudEFwcGxpZWQgaXMgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIHdoaWNoIGlzIHNldCB0byB0dXJlIGluIGNhc2UgdGhlIGZpbHRlciB2YXJpYW50IGlzIGFwcGxpZWRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9maW5kQW5kUHVzaFZhcmlhbnRUb1Byb21pc2UoXG5cdFx0Ly9UaGlzIGZ1bmN0aW9uIGZpbmRzIHRoZSBzdWl0YWJsZSB2YXJpYW50IGZvciB0aGUgdmFyaWFudElEIHByb3ZpZGVkIGluIHRoZSB1cmwgYW5kIHB1c2hlcyB0aGVtIHRvIHRoZSBwcm9taXNlIGFycmF5XG5cdFx0b1ZhcmlhbnQ6IFZhcmlhbnRPYmplY3QsXG5cdFx0c1ZhcmlhbnRJZDogc3RyaW5nLFxuXHRcdG9WTTogVmFyaWFudE1hbmFnZW1lbnQsXG5cdFx0YVByb21pc2VzOiBQcm9taXNlPGJvb2xlYW4+W10sXG5cdFx0YkZpbHRlclZhcmlhbnRBcHBsaWVkPzogYm9vbGVhblxuXHQpOiB2b2lkIHtcblx0XHRpZiAob1ZhcmlhbnQua2V5ID09PSBzVmFyaWFudElkKSB7XG5cdFx0XHRhUHJvbWlzZXMucHVzaCh0aGlzLl9hcHBseUNvbnRyb2xWYXJpYW50KG9WTSwgc1ZhcmlhbnRJZCwgYkZpbHRlclZhcmlhbnRBcHBsaWVkKSk7XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgX2FwcGx5Q29udHJvbFZhcmlhbnQob1ZhcmlhbnQ6IFZhcmlhbnRNYW5hZ2VtZW50LCBzVmFyaWFudElEOiBzdHJpbmcsIGJGaWx0ZXJWYXJpYW50QXBwbGllZCA9IGZhbHNlKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0Y29uc3Qgc1ZhcmlhbnRSZWZlcmVuY2UgPSB0aGlzLl9jaGVja0lmVmFyaWFudElkSXNBdmFpbGFibGUob1ZhcmlhbnQsIHNWYXJpYW50SUQpID8gc1ZhcmlhbnRJRCA6IG9WYXJpYW50LmdldFN0YW5kYXJkVmFyaWFudEtleSgpO1xuXHRcdGNvbnN0IG9WTSA9IENvbnRyb2xWYXJpYW50QXBwbHlBUEkuYWN0aXZhdGVWYXJpYW50KHtcblx0XHRcdGVsZW1lbnQ6IG9WYXJpYW50LFxuXHRcdFx0dmFyaWFudFJlZmVyZW5jZTogc1ZhcmlhbnRSZWZlcmVuY2Vcblx0XHR9KTtcblx0XHRyZXR1cm4gb1ZNLnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIGJGaWx0ZXJWYXJpYW50QXBwbGllZDtcblx0XHR9KTtcblx0fVxuXG5cdF9jaGVja0lmVmFyaWFudElkSXNBdmFpbGFibGUob1ZNOiBWYXJpYW50TWFuYWdlbWVudCwgc1ZhcmlhbnRJZDogc3RyaW5nIHwgbnVsbCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGFWYXJpYW50cyA9IG9WTS5nZXRWYXJpYW50cygpO1xuXHRcdGxldCBiSXNDb250cm9sU3RhdGVWYXJpYW50QXZhaWxhYmxlID0gZmFsc2U7XG5cdFx0YVZhcmlhbnRzLmZvckVhY2goZnVuY3Rpb24gKG9WYXJpYW50KSB7XG5cdFx0XHRpZiAob1ZhcmlhbnQuZ2V0S2V5KCkgPT09IHNWYXJpYW50SWQpIHtcblx0XHRcdFx0YklzQ29udHJvbFN0YXRlVmFyaWFudEF2YWlsYWJsZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGJJc0NvbnRyb2xTdGF0ZVZhcmlhbnRBdmFpbGFibGU7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIEZpbHRlckJhciBjb250cm9sLlxuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRpZCE6IHN0cmluZztcblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgcmVsYXRpdmUgcGF0aCBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIG1ldGFtb2RlbCwgYmFzZWQgb24gdGhlIGN1cnJlbnQgY29udGV4dFBhdGguXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRleHBlY3RlZEFubm90YXRpb25zOiBbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25GaWVsZHNcIl0sXG5cdFx0ZXhwZWN0ZWRUeXBlczogW1wiRW50aXR5U2V0XCIsIFwiRW50aXR5VHlwZVwiXVxuXHR9KVxuXHRtZXRhUGF0aCE6IHN0cmluZztcblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgcGF0aCBvZiB0aGUgY29udGV4dCB1c2VkIGluIHRoZSBjdXJyZW50IHBhZ2Ugb3IgYmxvY2suXG5cdCAqIFRoaXMgc2V0dGluZyBpcyBkZWZpbmVkIGJ5IHRoZSBmcmFtZXdvcmsuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRleHBlY3RlZFR5cGVzOiBbXCJFbnRpdHlTZXRcIiwgXCJFbnRpdHlUeXBlXCIsIFwiTmF2aWdhdGlvblByb3BlcnR5XCJdXG5cdH0pXG5cdGNvbnRleHRQYXRoITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBJZiB0cnVlLCB0aGUgc2VhcmNoIGlzIHRyaWdnZXJlZCBhdXRvbWF0aWNhbGx5IHdoZW4gYSBmaWx0ZXIgdmFsdWUgaXMgY2hhbmdlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcblx0bGl2ZU1vZGU/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBQYXJhbWV0ZXIgd2hpY2ggc2V0cyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgRmlsdGVyQmFyIGJ1aWxkaW5nIGJsb2NrXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IHRydWUgfSlcblx0dmlzaWJsZT86IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIERpc3BsYXlzIHBvc3NpYmxlIGVycm9ycyBkdXJpbmcgdGhlIHNlYXJjaCBpbiBhIG1lc3NhZ2UgYm94XG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IHRydWUgfSlcblx0c2hvd01lc3NhZ2VzPzogYm9vbGVhbjtcblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgJ0NsZWFyJyBidXR0b24gb24gdGhlIEZpbHRlckJhci5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcblx0c2hvd0NsZWFyQnV0dG9uPzogYm9vbGVhbjtcblxuXHQvKipcblx0ICogQWdncmVnYXRlIGZpbHRlciBmaWVsZHMgb2YgdGhlIEZpbHRlckJhciBidWlsZGluZyBibG9ja1xuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC5mZS5tYWNyb3MuZmlsdGVyQmFyLkZpbHRlckZpZWxkXCIsIG11bHRpcGxlOiB0cnVlIH0pXG5cdGZpbHRlckZpZWxkcz86IEZpbHRlckZpZWxkW107XG5cblx0Y29udGVudCE6IEZpbHRlckJhcjtcblxuXHQvKipcblx0ICogVGhpcyBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSAnR28nIGJ1dHRvbiBpcyBwcmVzc2VkIG9yIGFmdGVyIGEgY29uZGl0aW9uIGNoYW5nZS5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGV2ZW50KClcblx0c2VhcmNoITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlICdHbycgYnV0dG9uIGlzIHByZXNzZWQgb3IgYWZ0ZXIgYSBjb25kaXRpb24gY2hhbmdlLiBUaGlzIGlzIG9ubHkgaW50ZXJuYWxseSB1c2VkIGJ5IHNhcC5mZSAoRmlvcmkgZWxlbWVudHMpIGFuZFxuXHQgKiBleHBvc2VzIHBhcmFtZXRlcnMgZnJvbSBpbnRlcm5hbCBNREMtRmlsdGVyQmFyIHNlYXJjaCBldmVudFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0QGV2ZW50KClcblx0aW50ZXJuYWxTZWFyY2ghOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgYWZ0ZXIgZWl0aGVyIGEgZmlsdGVyIHZhbHVlIG9yIHRoZSB2aXNpYmlsaXR5IG9mIGEgZmlsdGVyIGl0ZW0gaGFzIGJlZW4gY2hhbmdlZC4gVGhlIGV2ZW50IGNvbnRhaW5zIGNvbmRpdGlvbnMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycy5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGV2ZW50KClcblx0ZmlsdGVyQ2hhbmdlZCE6IHN0cmluZztcblxuXHQvKipcblx0ICogVGhpcyBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSAnQ2xlYXInIGJ1dHRvbiBpcyBwcmVzc2VkLiBUaGlzIGlzIG9ubHkgcG9zc2libGUgd2hlbiB0aGUgJ0NsZWFyJyBidXR0b24gaXMgZW5hYmxlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGV2ZW50KClcblx0YWZ0ZXJDbGVhciE6IHN0cmluZztcblxuXHQvKipcblx0ICogVGhpcyBldmVudCBpcyBmaXJlZCBhZnRlciBlaXRoZXIgYSBmaWx0ZXIgdmFsdWUgb3IgdGhlIHZpc2liaWxpdHkgb2YgYSBmaWx0ZXIgaXRlbSBoYXMgYmVlbiBjaGFuZ2VkLiBUaGUgZXZlbnQgY29udGFpbnMgY29uZGl0aW9ucyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzLlxuXHQgKiBUaGlzIGlzIHVzZWQgaW50ZXJuYWxseSBvbmx5IGJ5IHNhcC5mZSAoRmlvcmkgRWxlbWVudHMpLiBUaGlzIGV4cG9zZXMgcGFyYW1ldGVycyBmcm9tIHRoZSBNREMtRmlsdGVyQmFyIGZpbHRlckNoYW5nZWQgZXZlbnQgdGhhdCBpcyB1c2VkIGJ5IHNhcC5mZSBpbiBzb21lIGNhc2VzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0QGV2ZW50KClcblx0aW50ZXJuYWxGaWx0ZXJDaGFuZ2VkITogc3RyaW5nO1xuXG5cdHByaXZhdGUgdGVsZW1ldHJ5PzogRmlsdGVyQmFyVGVsZW1ldHJ5O1xuXG5cdGNvbnN0cnVjdG9yKHByb3BzPzogJENvbnRyb2xTZXR0aW5ncyAmIFByb3BlcnRpZXNPZjxGaWx0ZXJCYXJBUEk+LCBvdGhlcnM/OiAkQ29udHJvbFNldHRpbmdzKSB7XG5cdFx0c3VwZXIocHJvcHMsIG90aGVycyk7XG5cdFx0dGhpcy50ZWxlbWV0cnkgPSBuZXcgRmlsdGVyQmFyVGVsZW1ldHJ5KHRoaXMpO1xuXHRcdHRoaXMuYXR0YWNoU3RhdGVDaGFuZ2VIYW5kbGVyKCk7XG5cdH1cblxuXHRwcml2YXRlIGF0dGFjaFN0YXRlQ2hhbmdlSGFuZGxlcigpOiB2b2lkIHtcblx0XHRTdGF0ZVV0aWwuZGV0YWNoU3RhdGVDaGFuZ2UodGhpcy5zdGF0ZUNoYW5nZUhhbmRsZXIpO1xuXHRcdFN0YXRlVXRpbC5hdHRhY2hTdGF0ZUNoYW5nZSh0aGlzLnN0YXRlQ2hhbmdlSGFuZGxlcik7XG5cdH1cblxuXHRzdGF0ZUNoYW5nZUhhbmRsZXIob0V2ZW50OiBFdmVudDx7IGNvbnRyb2w6IENvbnRyb2wgfT4pOiB2b2lkIHtcblx0XHRjb25zdCBjb250cm9sID0gb0V2ZW50LmdldFBhcmFtZXRlcihcImNvbnRyb2xcIik7XG5cdFx0aWYgKGNvbnRyb2wuaXNBPEZpbHRlckJhcj4oXCJzYXAudWkubWRjLkZpbHRlckJhclwiKSkge1xuXHRcdFx0Y29uc3QgZmlsdGVyQmFyQVBJID0gY29udHJvbC5nZXRQYXJlbnQoKSBhcyB1bmtub3duIGFzIHsgaGFuZGxlU3RhdGVDaGFuZ2U/OiBGdW5jdGlvbiB9O1xuXHRcdFx0aWYgKGZpbHRlckJhckFQST8uaGFuZGxlU3RhdGVDaGFuZ2UpIHtcblx0XHRcdFx0ZmlsdGVyQmFyQVBJLmhhbmRsZVN0YXRlQ2hhbmdlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0QHhtbEV2ZW50SGFuZGxlcigpXG5cdGhhbmRsZVNlYXJjaChvRXZlbnQ6IEZpbHRlckJhckJhc2UkU2VhcmNoRXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCBvRmlsdGVyQmFyID0gb0V2ZW50LmdldFNvdXJjZSgpIGFzIEZpbHRlckJhciB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBldmVudFBhcmFtZXRlcnMgPSBvRXZlbnQuZ2V0UGFyYW1ldGVycygpO1xuXHRcdGlmIChvRmlsdGVyQmFyKSB7XG5cdFx0XHRjb25zdCBjb25kaXRpb25zID0gKG9GaWx0ZXJCYXIuZ2V0RmlsdGVyQ29uZGl0aW9ucygpID8/IHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCBDb25kaXRpb25PYmplY3RbXT47XG5cdFx0XHRjb25zdCBwcmVwYXJlZEV2ZW50UGFyYW1ldGVycyA9IHRoaXMuX3ByZXBhcmVFdmVudFBhcmFtZXRlcnMob0ZpbHRlckJhcik7XG5cdFx0XHR0aGlzLnRlbGVtZXRyeT8ub25TZWFyY2goZXZlbnRQYXJhbWV0ZXJzLCBjb25kaXRpb25zKTtcblx0XHRcdHRoaXMuZmlyZUV2ZW50KFwiaW50ZXJuYWxTZWFyY2hcIiwgbWVyZ2UoeyBjb25kaXRpb25zOiBjb25kaXRpb25zIH0sIGV2ZW50UGFyYW1ldGVycykpO1xuXHRcdFx0dGhpcy5maXJlRXZlbnQoXCJzZWFyY2hcIiwgbWVyZ2UoeyByZWFzb246IGV2ZW50UGFyYW1ldGVycy5yZWFzb24gfSwgcHJlcGFyZWRFdmVudFBhcmFtZXRlcnMpKTtcblx0XHR9XG5cdH1cblxuXHRAeG1sRXZlbnRIYW5kbGVyKClcblx0aGFuZGxlRmlsdGVyQ2hhbmdlZChvRXZlbnQ6IFVJNUV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3QgZmlsdGVyQmFyID0gb0V2ZW50LmdldFNvdXJjZSgpIGFzIEZpbHRlckJhciB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBvRXZlbnRQYXJhbWV0ZXJzID0gb0V2ZW50LmdldFBhcmFtZXRlcnMoKTtcblx0XHRpZiAoZmlsdGVyQmFyKSB7XG5cdFx0XHRjb25zdCBvQ29uZGl0aW9ucyA9IGZpbHRlckJhci5nZXRGaWx0ZXJDb25kaXRpb25zKCk7XG5cdFx0XHRjb25zdCBldmVudFBhcmFtZXRlcnM6IG9iamVjdCA9IHRoaXMuX3ByZXBhcmVFdmVudFBhcmFtZXRlcnMoZmlsdGVyQmFyKTtcblx0XHRcdHRoaXMudGVsZW1ldHJ5Py5vbkZpbHRlcnNDaGFuZ2VkKHRoaXMuX2dldEZpbHRlckJhclJlYXNvbihmaWx0ZXJCYXIpKTtcblx0XHRcdHRoaXMuZmlyZUV2ZW50KFwiaW50ZXJuYWxGaWx0ZXJDaGFuZ2VkXCIsIG1lcmdlKHsgY29uZGl0aW9uczogb0NvbmRpdGlvbnMgfSwgb0V2ZW50UGFyYW1ldGVycykpO1xuXHRcdFx0dGhpcy5maXJlRXZlbnQoXCJmaWx0ZXJDaGFuZ2VkXCIsIGV2ZW50UGFyYW1ldGVycyk7XG5cdFx0fVxuXHR9XG5cblx0X2dldEZpbHRlckJhclJlYXNvbihmaWx0ZXJCYXI6IEZpbHRlckJhciAmIHsgX3NSZWFzb24/OiBzdHJpbmcgfSk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGZpbHRlckJhcj8uX3NSZWFzb24gPz8gXCJcIjtcblx0fVxuXG5cdF9wcmVwYXJlRXZlbnRQYXJhbWV0ZXJzKG9GaWx0ZXJCYXI6IEZpbHRlckJhcik6IFBhcnRpYWw8SW50ZXJuYWxCaW5kaW5nSW5mbz4ge1xuXHRcdGNvbnN0IHsgcGFyYW1ldGVycywgZmlsdGVycywgc2VhcmNoIH0gPSBGaWx0ZXJVdGlscy5nZXRGaWx0ZXJzKG9GaWx0ZXJCYXIgYXMgdW5rbm93biBhcyBJRmlsdGVyQ29udHJvbCkgfHwge307XG5cblx0XHRyZXR1cm4geyBwYXJhbWV0ZXJzLCBmaWx0ZXJzLCBzZWFyY2ggfTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIGZpbHRlciB2YWx1ZXMgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eSBpbiB0aGUgZmlsdGVyIGJhci5cblx0ICogVGhlIGZpbHRlciB2YWx1ZXMgY2FuIGJlIGVpdGhlciBhIHNpbmdsZSB2YWx1ZSBvciBhbiBhcnJheSBvZiB2YWx1ZXMuXG5cdCAqIEVhY2ggZmlsdGVyIHZhbHVlIG11c3QgYmUgcmVwcmVzZW50ZWQgYXMgYSBwcmltaXRpdmUgdmFsdWUuXG5cdCAqIEBwYXJhbSBzQ29uZGl0aW9uUGF0aCBUaGUgcGF0aCB0byB0aGUgcHJvcGVydHkgYXMgYSBjb25kaXRpb24gcGF0aFxuXHQgKiBAcGFyYW0gW3NPcGVyYXRvcl0gVGhlIG9wZXJhdG9yIHRvIGJlIHVzZWQgKG9wdGlvbmFsKSAtIGlmIG5vdCBzZXQsIHRoZSBkZWZhdWx0IG9wZXJhdG9yIChFUSkgd2lsbCBiZSB1c2VkXG5cdCAqIEBwYXJhbSB2VmFsdWVzIFRoZSB2YWx1ZXMgdG8gYmUgYXBwbGllZFxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgZm9yIGFzeW5jaHJvbm91cyBoYW5kbGluZ1xuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhc3luYyBzZXRGaWx0ZXJWYWx1ZXMoXG5cdFx0c0NvbmRpdGlvblBhdGg6IHN0cmluZyxcblx0XHRzT3BlcmF0b3I6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHR2VmFsdWVzPzogdW5kZWZpbmVkIHwgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IHN0cmluZ1tdIHwgbnVtYmVyW10gfCBib29sZWFuW11cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuXHRcdFx0dlZhbHVlcyA9IHNPcGVyYXRvcjtcblx0XHRcdHJldHVybiBGaWx0ZXJVdGlscy5zZXRGaWx0ZXJWYWx1ZXModGhpcy5jb250ZW50LCBzQ29uZGl0aW9uUGF0aCwgdlZhbHVlcyk7XG5cdFx0fVxuXHRcdHJldHVybiBGaWx0ZXJVdGlscy5zZXRGaWx0ZXJWYWx1ZXModGhpcy5jb250ZW50LCBzQ29uZGl0aW9uUGF0aCwgc09wZXJhdG9yLCB2VmFsdWVzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIEFjdGl2ZSBGaWx0ZXJzIFRleHQgU3VtbWFyeSBmb3IgdGhlIGZpbHRlciBiYXIuXG5cdCAqIEByZXR1cm5zIEFjdGl2ZSBmaWx0ZXJzIHN1bW1hcnkgYXMgdGV4dFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRnZXRBY3RpdmVGaWx0ZXJzVGV4dCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLmNvbnRlbnQ/LmdldEFzc2lnbmVkRmlsdGVyc1RleHQoKT8uZmlsdGVyc1RleHQgfHwgXCJcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBQcm92aWRlcyBhbGwgdGhlIGZpbHRlcnMgdGhhdCBhcmUgY3VycmVudGx5IGFjdGl2ZVxuXHQgKiBhbG9uZyB3aXRoIHRoZSBzZWFyY2ggZXhwcmVzc2lvbi5cblx0ICogQHJldHVybnMgQW4gYXJyYXkgb2YgYWN0aXZlIGZpbHRlcnMgYW5kIHRoZSBzZWFyY2ggZXhwcmVzc2lvbi5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0Z2V0RmlsdGVycygpOiBvYmplY3Qge1xuXHRcdHJldHVybiBGaWx0ZXJVdGlscy5nZXRGaWx0ZXJzKHRoaXMuY29udGVudCBhcyBJRmlsdGVyQ29udHJvbCkgfHwge307XG5cdH1cblxuXHQvKipcblx0ICogVHJpZ2dlcnMgdGhlIEFQSSBzZWFyY2ggb24gdGhlIGZpbHRlciBiYXIuXG5cdCAqIEByZXR1cm5zIFJldHVybnMgYSBwcm9taXNlIHdoaWNoIHJlc29sdmVzIGlmIGZpbHRlciBnbyBpcyB0cmlnZ2VyZWQgc3VjY2Vzc2Z1bGx5OyBvdGhlcndpc2UgZ2V0cyByZWplY3RlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgdHJpZ2dlclNlYXJjaCgpOiBQcm9taXNlPG9iamVjdCB8IHVuZGVmaW5lZD4ge1xuXHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuY29udGVudDtcblx0XHR0cnkge1xuXHRcdFx0aWYgKGZpbHRlckJhcikge1xuXHRcdFx0XHRhd2FpdCBmaWx0ZXJCYXIud2FpdEZvckluaXRpYWxpemF0aW9uKCk7XG5cdFx0XHRcdHJldHVybiBhd2FpdCBmaWx0ZXJCYXIudHJpZ2dlclNlYXJjaCgpO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcblx0XHRcdExvZy5lcnJvcihgRkUgOiBCdWlsZGluZ2Jsb2NrIDogRmlsdGVyQmFyIDogJHttZXNzYWdlfWApO1xuXHRcdFx0dGhyb3cgRXJyb3IobWVzc2FnZSk7XG5cdFx0fVxuXHR9XG5cblx0aXNTZW1hbnRpY0RhdGVGaWx0ZXJBcHBsaWVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBTZW1hbnRpY0RhdGVPcGVyYXRvcnMuaGFzU2VtYW50aWNEYXRlT3BlcmF0aW9ucyh0aGlzLmNvbnRlbnQuZ2V0Q29uZGl0aW9ucygpLCBmYWxzZSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzZWxlY3Rpb24gdmFyaWFudCBmcm9tIHRoZSBmaWx0ZXIgYmFyLlxuXHQgKiBOb3RlOiBUaGlzIG1ldGhvZCByZXR1cm5zIGFsbCB0aGUgZmlsdGVyIHZhbHVlcyB0aGF0IGFyZSBzZXQgaW4gdGhlIGZpbHRlciBiYXIsIGluY2x1ZGluZyB0aGUgdGV4dCBmcm9tIHRoZSBzZWFyY2ggZmllbGQgKHdpdGggJHNlYXJjaCBhcyB0aGUgcHJvcGVydHkgbmFtZSkuIEhvd2V2ZXIsIGl0IGRvZXNuJ3QgcmV0dXJuIGFueSBmaWx0ZXIgZmllbGQgY29uZGl0aW9uIHRoYXQgdXNlcyBhIGN1c3RvbSBvcGVyYXRvci5cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHdoaWNoIHJlc29sdmVzIHdpdGggYSB7QGxpbmsgc2FwLmZlLm5hdmlnYXRpb24uU2VsZWN0aW9uVmFyaWFudH1cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgZ2V0U2VsZWN0aW9uVmFyaWFudCgpOiBQcm9taXNlPFNlbGVjdGlvblZhcmlhbnQ+IHtcblx0XHRjb25zdCBzZWxlY3Rpb25WYXJpYW50ID0gYXdhaXQgc3RhdGVIZWxwZXIuZ2V0U2VsZWN0aW9uVmFyaWFudCh0aGlzLmdldENvbnRlbnQoKSk7XG5cdFx0Y29uc3QgY29udHJvbGxlciA9IHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcjtcblx0XHRpZiAoY29udHJvbGxlciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCB2aWV3ID0gY29udHJvbGxlcj8uZ2V0VmlldygpLFxuXHRcdFx0XHRhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodmlldyksXG5cdFx0XHRcdG5hdmlnYXRpb25TZXJ2aWNlID0gYXBwQ29tcG9uZW50Py5nZXROYXZpZ2F0aW9uU2VydmljZSgpLFxuXHRcdFx0XHRkYXRhTW9kZWxPYmplY3QgPSB0aGlzLmdldERhdGFNb2RlbE9iamVjdEZvck1ldGFQYXRoKHRoaXMubWV0YVBhdGgpO1xuXHRcdFx0aWYgKGRhdGFNb2RlbE9iamVjdD8udGFyZ2V0RW50aXR5U2V0Py5uYW1lKSB7XG5cdFx0XHRcdGNvbnN0IHNDb250ZXh0VXJsID1cblx0XHRcdFx0XHRkYXRhTW9kZWxPYmplY3Q/LnRhcmdldEVudGl0eVNldD8ubmFtZSAmJlxuXHRcdFx0XHRcdG5hdmlnYXRpb25TZXJ2aWNlPy5jb25zdHJ1Y3RDb250ZXh0VXJsKGRhdGFNb2RlbE9iamVjdD8udGFyZ2V0RW50aXR5U2V0Py5uYW1lLCB2aWV3LmdldE1vZGVsKCkpO1xuXHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50LnNldEZpbHRlckNvbnRleHRVcmwoc0NvbnRleHRVcmwpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gc2VsZWN0aW9uVmFyaWFudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGxpc3Qgb2YgbWFuZGF0b3J5IGZpbHRlciBwcm9wZXJ0eSBuYW1lcy5cblx0ICogQHJldHVybnMgVGhlIGxpc3Qgb2YgbWFuZGF0b3J5IGZpbHRlciBwcm9wZXJ0eSBuYW1lc1xuXHQgKi9cblx0Z2V0TWFuZGF0b3J5RmlsdGVyUHJvcGVydHlOYW1lcygpOiBzdHJpbmdbXSB7XG5cdFx0cmV0dXJuICh0aGlzLmNvbnRlbnQuZ2V0UHJvcGVydHlJbmZvU2V0KCkgYXMgQ29udHJvbFByb3BlcnR5SW5mb1tdKVxuXHRcdFx0LmZpbHRlcihmdW5jdGlvbiAoZmlsdGVyUHJvcCkge1xuXHRcdFx0XHRyZXR1cm4gZmlsdGVyUHJvcC5yZXF1aXJlZDtcblx0XHRcdH0pXG5cdFx0XHQubWFwKGZ1bmN0aW9uIChyZXF1aXJlZFByb3ApIHtcblx0XHRcdFx0cmV0dXJuIHJlcXVpcmVkUHJvcC5jb25kaXRpb25QYXRoO1xuXHRcdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBmaWx0ZXIgYmFyIHBhcmFtZXRlcnMgZm9yIGEgcGFyYW1ldGVyaXplZCBzZXJ2aWNlLlxuXHQgKiBAcmV0dXJucyBBcnJheSBvZiBwYXJhbWV0ZXJzIGNvbmZpZ3VyZWQgaW4gYSBwYXJhbWV0ZXJpemVkIHNlcnZpY2Vcblx0ICovXG5cblx0Z2V0UGFyYW1ldGVycygpOiBzdHJpbmdbXSB7XG5cdFx0Y29uc3QgZmlsdGVyQmFyID0gdGhpcy5jb250ZW50O1xuXHRcdGNvbnN0IHBhcmFtZXRlcnMgPSBmaWx0ZXJCYXIuZGF0YShcInBhcmFtZXRlcnNcIik7XG5cdFx0aWYgKHBhcmFtZXRlcnMpIHtcblx0XHRcdHJldHVybiBBcnJheS5pc0FycmF5KHBhcmFtZXRlcnMpID8gcGFyYW1ldGVycyA6IEpTT04ucGFyc2UocGFyYW1ldGVycyk7XG5cdFx0fVxuXHRcdHJldHVybiBbXTtcblx0fVxuXG5cdGdldFZhcmlhbnQoKTogVmFyaWFudERhdGEgfCB1bmRlZmluZWQge1xuXHRcdGxldCBjdXJyZW50VmFyaWFudDtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgdmFyaWFudE1vZGVsID0gdGhpcy5nZXRNb2RlbChcIiRGbGV4VmFyaWFudHNcIikgYXMgVmFyaWFudE1vZGVsIHwgdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgdmFyaWFudEJhY2tSZWZlcmVuY2UgPSB0aGlzLmNvbnRlbnQuZ2V0VmFyaWFudEJhY2tyZWZlcmVuY2UoKTtcblxuXHRcdFx0aWYgKHZhcmlhbnRNb2RlbCAmJiB2YXJpYW50QmFja1JlZmVyZW5jZSkge1xuXHRcdFx0XHRjdXJyZW50VmFyaWFudCA9IHZhcmlhbnRNb2RlbC5nZXRWYXJpYW50KHZhcmlhbnRNb2RlbC5nZXRDdXJyZW50VmFyaWFudFJlZmVyZW5jZSh2YXJpYW50QmFja1JlZmVyZW5jZSkpO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdExvZy5kZWJ1ZyhcIkNvdWxkbid0IGZldGNoIHZhcmlhbnQgXCIsIGUgYXMgc3RyaW5nKTtcblx0XHR9XG5cdFx0cmV0dXJuIGN1cnJlbnRWYXJpYW50O1xuXHR9XG5cblx0LyoqXG5cdCAqIFNob3dzIG9yIGhpZGVzIGFueSBmaWx0ZXIgZmllbGQgZnJvbSB0aGUgZmlsdGVyIGJhci5cblx0ICogVGhlIHByb3BlcnR5IHdpbGwgbm90IGJlIGhpZGRlbiBpbnNpZGUgdGhlIGFkYXB0YXRpb24gZGlhbG9nIGFuZCBtYXkgYmUgcmUtYWRkZWQuXG5cdCAqIEBwYXJhbSBjb25kaXRpb25QYXRoIFRoZSBwYXRoIHRvIHRoZSBwcm9wZXJ0eSBhcyBhIGNvbmRpdGlvbiBwYXRoXG5cdCAqIEBwYXJhbSB2aXNpYmxlIFdoZXRoZXIgaXQgc2hvdWxkIGJlIHNob3duIG9yIGhpZGRlblxuXHQgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSByZXNvbHZpbmcgb25jZSB0aGUgY2hhbmdlIGluIHZpc2liaWxpdHkgd2FzIGFwcGxpZWRcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgc2V0RmlsdGVyRmllbGRWaXNpYmxlKGNvbmRpdGlvblBhdGg6IHN0cmluZywgdmlzaWJsZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGF3YWl0IFN0YXRlVXRpbC5hcHBseUV4dGVybmFsU3RhdGUodGhpcy5jb250ZW50LCB7IGl0ZW1zOiBbeyBuYW1lOiBjb25kaXRpb25QYXRoLCB2aXNpYmxlIH1dIH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHZpc2liaWxpdHkgb2YgYSBmaWx0ZXIgZmllbGQuXG5cdCAqIEBwYXJhbSBjb25kaXRpb25QYXRoIFRoZSBwYXRoIHRvIHRoZSBwcm9wZXJ0eSBhcyBhIGNvbmRpdGlvbiBwYXRoXG5cdCAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gY2hlY2sgd2hldGhlciB0aGUgZmlsdGVyIGZpZWxkIGlzIHZpc2libGUgb3Igbm90LlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhc3luYyBnZXRGaWx0ZXJGaWVsZFZpc2libGUoY29uZGl0aW9uUGF0aDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0Y29uc3Qgc3RhdGU6IEV4dGVybmFsU3RhdGVUeXBlID0gYXdhaXQgU3RhdGVVdGlsLnJldHJpZXZlRXh0ZXJuYWxTdGF0ZSh0aGlzLmNvbnRlbnQpO1xuXHRcdHJldHVybiAhIXN0YXRlLml0ZW1zLmZpbmQoKGl0ZW0pID0+IGl0ZW0ubmFtZSA9PT0gY29uZGl0aW9uUGF0aCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgYXNzb2NpYXRlZCB2YXJpYW50IG1hbmFnZW1lbnQuXG5cdCAqIEByZXR1cm5zIFRoZSB7QGxpbmsgc2FwLnVpLmZsLnZhcmlhbnRzLlZhcmlhbnRNYW5hZ2VtZW50fSBjb250cm9sIGFzc29jaWF0ZWQgd2l0aCB0aGUgZmlsdGVyIGJhci5cblx0ICovXG5cdGdldFZhcmlhbnRNYW5hZ2VtZW50KCk6IFZhcmlhbnRNYW5hZ2VtZW50IHtcblx0XHRjb25zdCB2YXJpYW50QmFja3JlZmVyZW5jZSA9IHRoaXMuY29udGVudC5nZXRWYXJpYW50QmFja3JlZmVyZW5jZSgpO1xuXHRcdGlmICh2YXJpYW50QmFja3JlZmVyZW5jZSkge1xuXHRcdFx0cmV0dXJuIFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQodmFyaWFudEJhY2tyZWZlcmVuY2UpIGFzIFZhcmlhbnRNYW5hZ2VtZW50O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYFZhcmlhbnQgYmFjayByZWZlcmVuY2Ugbm90IGRlZmluZWQgb24gdGhlIGZpbHRlciBiYXIgJHt0aGlzLmlkfWApO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSB2YXJpYW50IGJhY2sgcmVmZXJlbmNlIGFzc29jaWF0aW9uIGZvciB0aGlzIGluc3RhbmNlLlxuXHQgKiBAcGFyYW0gdmFyaWFudCBUaGUgYFZhcmlhbnRNYW5hZ2VtZW50YCBpbnN0YW5jZSB0byBzZXQgYXMgdGhlIGJhY2sgcmVmZXJlbmNlLlxuXHQgKi9cblx0c2V0VmFyaWFudEJhY2tSZWZlcmVuY2UodmFyaWFudDogVmFyaWFudE1hbmFnZW1lbnQpOiB2b2lkIHtcblx0XHRjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCkgYXMgRmlsdGVyQmFyO1xuXHRcdGNvbnN0IGlzTGl2ZU1vZGUgPSBjb250ZW50Py5nZXRMaXZlTW9kZT8uKCk7XG5cdFx0aWYgKCFpc0xpdmVNb2RlKSB7XG5cdFx0XHR0aGlzLmNvbnRlbnQuc2V0VmFyaWFudEJhY2tyZWZlcmVuY2UodmFyaWFudCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGtleSBvZiB0aGUgY3VycmVudCB2YXJpYW50IGluIHRoZSBhc3NvY2lhdGVkIHZhcmlhbnQgbWFuYWdlbWVudC5cblx0ICogQHJldHVybnMgS2V5IG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgdmFyaWFudC4gSW4gY2FzZSB0aGUgbW9kZWwgaXMgbm90IHlldCBzZXQsIGBudWxsYCB3aWxsIGJlIHJldHVybmVkLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRnZXRDdXJyZW50VmFyaWFudEtleSgpOiBzdHJpbmcgfCBudWxsIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWYXJpYW50TWFuYWdlbWVudCgpLmdldEN1cnJlbnRWYXJpYW50S2V5KCk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgbmV3IHNlbGVjdGVkIHZhcmlhbnQgaW4gdGhlIGFzc29jaWF0ZWQgdmFyaWFudCBtYW5hZ2VtZW50LlxuXHQgKiBAcGFyYW0ga2V5IEtleSBvZiB0aGUgdmFyaWFudCB0aGF0IHNob3VsZCBiZSBzZWxlY3RlZC4gSWYgdGhlIHBhc3NlZCBrZXkgZG9lc24ndCBpZGVudGlmeSBhIHZhcmlhbnQsIGl0IHdpbGwgYmUgaWdub3JlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0c2V0Q3VycmVudFZhcmlhbnRLZXkoa2V5OiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zdCB2YXJpYW50TWFuYWdlbWVudCA9IHRoaXMuZ2V0VmFyaWFudE1hbmFnZW1lbnQoKTtcblx0XHR2YXJpYW50TWFuYWdlbWVudC5zZXRDdXJyZW50VmFyaWFudEtleShrZXkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGVuYWJsZW1lbnQgb2YgdGhlIGZpZWxkLlxuXHQgKiBAcGFyYW0gbmFtZSBOYW1lIG9mIHRoZSBmaWVsZCB0aGF0IHNob3VsZCBiZSBlbmFibGVkIG9yIGRpc2FibGVkLlxuXHQgKiBAcGFyYW0gZW5hYmxlZCBXaGV0aGVyIHRoZSBmaWVsZCBzaG91bGQgYmUgZW5hYmxlZCBvciBkaXNhYmxlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0c2V0RmlsdGVyRmllbGRFbmFibGVkKG5hbWU6IHN0cmluZywgZW5hYmxlZDogYm9vbGVhbik6IHZvaWQge1xuXHRcdCh0aGlzLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsKS5zZXREYXRhKFxuXHRcdFx0e1xuXHRcdFx0XHRbdGhpcy5jb250ZW50LmRhdGEoXCJsb2NhbElkXCIpXToge1xuXHRcdFx0XHRcdGZpbHRlckZpZWxkczogeyBbbmFtZV06IHsgZWRpdE1vZGU6IGVuYWJsZWQgPyBGaWVsZEVkaXRNb2RlLkVkaXRhYmxlIDogRmllbGRFZGl0TW9kZS5EaXNhYmxlZCB9IH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHRydWVcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgd2hldGhlciB0aGUgZmllbGQgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC5cblx0ICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgZmllbGQuXG5cdCAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGZpbHRlckZpZWxkIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGdldEZpbHRlckZpZWxkRW5hYmxlZChuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gKHRoaXMuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWwpLmdldFByb3BlcnR5KGAvJHt0aGlzLmNvbnRlbnQuZGF0YShcImxvY2FsSWRcIil9L2ZpbHRlckZpZWxkcy8ke25hbWV9L2VkaXRNb2RlYCkgPT09XG5cdFx0XHRGaWVsZEVkaXRNb2RlLkRpc2FibGVkXG5cdFx0XHQ/IGZhbHNlXG5cdFx0XHQ6IHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydCB7QGxpbmsgc2FwLmZlLm5hdmlnYXRpb24uU2VsZWN0aW9uVmFyaWFudH0gdG8gY29uZGl0aW9ucy5cblx0ICogQHBhcmFtIHNlbGVjdGlvblZhcmlhbnQgVGhlIHNlbGVjdGlvbiB2YXJpYW50IHRvIGFwcGx5IHRvIHRoZSBmaWx0ZXIgYmFyLlxuXHQgKiBAcGFyYW0gcHJlZmlsbERlc2NyaXB0aW9ucyBJZiB0cnVlLCB3ZSB0cnkgdG8gZmluZCB0aGUgYXNzb2NpYXRlZCBUZXh0IHZhbHVlIGZvciBlYWNoIHByb3BlcnR5IGluIHRoZSBzZWxlY3Rpb25WYXJpYW50ICh0byBhdm9pZCBmZXRjaGluZyBpdCBmcm9tIHRoZSBzZXJ2ZXIpXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSByZXNvbHZpbmcgdG8gY29uZGl0aW9uc1xuXHQgKi9cblx0YXN5bmMgY29udmVydFNlbGVjdGlvblZhcmlhbnRUb1N0YXRlRmlsdGVycyhcblx0XHRzZWxlY3Rpb25WYXJpYW50OiBTZWxlY3Rpb25WYXJpYW50LFxuXHRcdHByZWZpbGxEZXNjcmlwdGlvbnM6IGJvb2xlYW5cblx0KTogUHJvbWlzZTxTdGF0ZVV0aWxGaWx0ZXI+IHtcblx0XHRyZXR1cm4gc3RhdGVIZWxwZXIuY29udmVydFNlbGVjdGlvblZhcmlhbnRUb1N0YXRlRmlsdGVycyhcblx0XHRcdHRoaXMuY29udGVudCxcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRwcmVmaWxsRGVzY3JpcHRpb25zLFxuXHRcdFx0dGhpcy5jb250ZW50Py5nZXRNb2RlbCgpXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhcnMgYWxsIGlucHV0IHZhbHVlcyBvZiB2aXNpYmxlIGZpbHRlciBmaWVsZHMgaW4gdGhlIGZpbHRlciBiYXIgd2l0aCBmbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgdG8gY2xlYXIgRWRpdCBGaWx0ZXIgb3Igbm90LlxuXHQgKiBAcGFyYW0gZmlsdGVyQmFyIFRoZSBmaWx0ZXIgYmFyIHRoYXQgY29udGFpbnMgdGhlIGZpbHRlciBmaWVsZFxuXHQgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciBmaWx0ZXJpbmcgb24gdGhlIGZpbHRlciBiYXJcblx0ICogQHBhcmFtIG9wdGlvbnMuY2xlYXJFZGl0RmlsdGVyIFdoZXRoZXIgdG8gY2xlYXIgdGhlIGVkaXQgZmlsdGVyIG9yIGxldCBpdCBiZSBkZWZhdWx0IHZhbHVlICdBbGwnIGluc3RlYWRcblx0ICovXG5cdGFzeW5jIF9jbGVhckZpbHRlclZhbHVlc1dpdGhPcHRpb25zKGZpbHRlckJhcjogRmlsdGVyQmFyLCBvcHRpb25zPzogeyBjbGVhckVkaXRGaWx0ZXI6IGJvb2xlYW4gfSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGF3YWl0IHN0YXRlSGVscGVyLl9jbGVhckZpbHRlclZhbHVlc1dpdGhPcHRpb25zKGZpbHRlckJhciwgb3B0aW9ucyk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB7QGxpbmsgc2FwLmZlLm5hdmlnYXRpb24uU2VsZWN0aW9uVmFyaWFudH0gdG8gdGhlIGZpbHRlciBiYXIuIE5vdGU6IHNldFNlbGVjdGlvblZhcmlhbnQgd2lsbCBjbGVhciBleGlzdGluZyBmaWx0ZXJzIGFuZCB0aGVuIGFwcGx5IHRoZSBTZWxlY3Rpb25WYXJpYW50IHZhbHVlcy5cblx0ICogTm90ZTogVGhpcyBtZXRob2QgY2Fubm90IHNldCB0aGUgc2VhcmNoIGZpZWxkIHRleHQgb3IgYW55IGZpbHRlciBmaWVsZCBjb25kaXRpb24gdGhhdCByZWxpZXMgb24gYSBjdXN0b20gb3BlcmF0b3IuXG5cdCAqIEBwYXJhbSBzZWxlY3Rpb25WYXJpYW50IFRoZSB7QGxpbmsgc2FwLmZlLm5hdmlnYXRpb24uU2VsZWN0aW9uVmFyaWFudH0gdG8gYXBwbHkgdG8gdGhlIGZpbHRlciBiYXJcblx0ICogQHBhcmFtIHByZWZpbGxEZXNjcmlwdGlvbnMgT3B0aW9uYWwuIElmIHRydWUsIHdlIHdpbGwgdXNlIHRoZSBhc3NvY2lhdGVkIHRleHQgcHJvcGVydHkgdmFsdWVzIChpZiB0aGV5J3JlIGF2YWlsYWJsZSBpbiB0aGUgc2VsZWN0aW9uVmFyaWFudCkgdG8gZGlzcGxheSB0aGUgZmlsdGVyIHZhbHVlIGRlc2NyaXB0aW9ucywgaW5zdGVhZCBvZiBsb2FkaW5nIHRoZW0gZnJvbSB0aGUgYmFja2VuZFxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgZm9yIGFzeW5jaHJvbm91cyBoYW5kbGluZ1xuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhc3luYyBzZXRTZWxlY3Rpb25WYXJpYW50KHNlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQsIHByZWZpbGxEZXNjcmlwdGlvbnMgPSBmYWxzZSk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSBhcyBGaWx0ZXJCYXIgfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgaXNMaXZlTW9kZSA9IGNvbnRlbnQgJiYgY29udGVudD8uZ2V0TGl2ZU1vZGU/LigpO1xuXHRcdGxldCByZXN1bHQ6IHsgZGlmZlN0YXRlOiBFeHRlcm5hbFN0YXRlVHlwZTsgYXBwbHlTdGF0ZVJlc3VsdDogdW5rbm93biB9IHwgdW5kZWZpbmVkO1xuXHRcdGlmIChpc0xpdmVNb2RlKSB7XG5cdFx0XHRjb250ZW50LmVuYWJsZVJlcXVlc3RzKGZhbHNlKTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJlc3VsdCA9IGF3YWl0IHN0YXRlSGVscGVyLnNldFNlbGVjdGlvblZhcmlhbnRUb01kY0NvbnRyb2wodGhpcy5nZXRDb250ZW50KCksIHNlbGVjdGlvblZhcmlhbnQsIHByZWZpbGxEZXNjcmlwdGlvbnMpO1xuXHRcdFx0cmV0dXJuIHJlc3VsdD8uYXBwbHlTdGF0ZVJlc3VsdDtcblx0XHR9IGNhdGNoIChlcnI6IHVua25vd24pIHtcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG5cdFx0XHRMb2cuZXJyb3IoYEZFIDogQnVpbGRpbmdibG9jayA6IEZpbHRlckJhciA6ICR7bWVzc2FnZX1gKTtcblx0XHRcdHRocm93IEVycm9yKG1lc3NhZ2UpO1xuXHRcdH0gZmluYWxseSB7XG5cdFx0XHRpZiAoaXNMaXZlTW9kZSkge1xuXHRcdFx0XHRjb250ZW50LmVuYWJsZVJlcXVlc3RzKHRydWUsIHJlc3VsdD8uZGlmZlN0YXRlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2FsbGVkIGJ5IHRoZSBNREMgc3RhdGUgdXRpbCB3aGVuIHRoZSBzdGF0ZSBmb3IgdGhpcyBjb250cm9sJ3MgY2hpbGQgaGFzIGNoYW5nZWQuXG5cdCAqL1xuXHRoYW5kbGVTdGF0ZUNoYW5nZSgpOiB2b2lkIHtcblx0XHR0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdH1cblxuXHRwcml2YXRlIGdldENvbmRpdGlvblBhdGgocHJvcGVydHlQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHByb3BlcnR5VGFyZ2V0T2JqZWN0UGF0aCA9IEZpbHRlclV0aWxzLmdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JQcm9wZXJ0eSh0aGlzLmNvbnRlbnQsIHByb3BlcnR5UGF0aCk7XG5cdFx0cmV0dXJuIChcblx0XHRcdChwcm9wZXJ0eVRhcmdldE9iamVjdFBhdGggPyBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKHByb3BlcnR5VGFyZ2V0T2JqZWN0UGF0aCwgZmFsc2UsIHRydWUpIDogdW5kZWZpbmVkKSA/P1xuXHRcdFx0cHJvcGVydHlQYXRoXG5cdFx0KTtcblx0fVxuXG5cdGFzeW5jIHNob3dGaWx0ZXJGaWVsZChuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzdGF0ZTogRXh0ZXJuYWxTdGF0ZVR5cGUgPSBhd2FpdCBTdGF0ZVV0aWwucmV0cmlldmVFeHRlcm5hbFN0YXRlKHRoaXMuY29udGVudCk7XG5cdFx0Y29uc3QgY29uZGl0aW9uUGF0aCA9IHRoaXMuZ2V0Q29uZGl0aW9uUGF0aChuYW1lKTtcblx0XHRjb25zdCB0YXJnZXRGaWx0ZXJGaWVsZCA9ICEhc3RhdGUuaXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5uYW1lID09PSBjb25kaXRpb25QYXRoKTtcblx0XHRpZiAoIXRhcmdldEZpbHRlckZpZWxkKSB7XG5cdFx0XHRzdGF0ZS5pdGVtcy5wdXNoKHsgbmFtZTogY29uZGl0aW9uUGF0aCB9KTtcblx0XHR9XG5cdFx0YXdhaXQgU3RhdGVVdGlsLmFwcGx5RXh0ZXJuYWxTdGF0ZSh0aGlzLmNvbnRlbnQsIHN0YXRlKTtcblx0fVxuXG5cdGFzeW5jIG9wZW5WYWx1ZUhlbHBGb3JGaWx0ZXJGaWVsZChuYW1lOiBzdHJpbmcsIGlucHV0VmFsdWU/OiBzdHJpbmcpOiBQcm9taXNlPENvbmRpdGlvbk9iamVjdFtdPiB7XG5cdFx0Y29uc3QgY29uZGl0aW9uUGF0aCA9IHRoaXMuZ2V0Q29uZGl0aW9uUGF0aChuYW1lKTtcblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCBmaWx0ZXJGaWVsZCA9IHRoaXMuY29udGVudC5nZXRGaWx0ZXJJdGVtcygpLmZpbmQoKGl0ZW0pID0+IGl0ZW0uZ2V0UHJvcGVydHlLZXkoKSA9PT0gY29uZGl0aW9uUGF0aCk7XG5cdFx0XHRjb25zdCB2YWx1ZUhlbHAgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKGZpbHRlckZpZWxkPy5nZXRWYWx1ZUhlbHAoKSkgYXMgVmFsdWVIZWxwIHwgdW5kZWZpbmVkO1xuXHRcdFx0aWYgKCF2YWx1ZUhlbHAgfHwgIWZpbHRlckZpZWxkKSB7XG5cdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoYFZhbHVlSGVscCBmb3IgZmlsdGVyIGZpZWxkICR7bmFtZX0gbm90IGZvdW5kYCkpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHZhbHVlSGVscC5hdHRhY2hFdmVudE9uY2UoXCJjbG9zZWRcIiwgKCkgPT4ge1xuXHRcdFx0XHRyZXNvbHZlKHZhbHVlSGVscC5nZXRDb25kaXRpb25zKCkgYXMgQ29uZGl0aW9uT2JqZWN0W10pO1xuXHRcdFx0fSk7XG5cblx0XHRcdChmaWx0ZXJGaWVsZCBhcyB1bmtub3duIGFzIHsgX29Gb2N1c0luZm86IG9iamVjdCB9KS5fb0ZvY3VzSW5mbyA9IHsgdGFyZ2V0SW5mbzogeyBzaWxlbnQ6IHRydWUgfSB9O1xuXHRcdFx0KGZpbHRlckZpZWxkIGFzIHVua25vd24gYXMgeyBvbmZvY3VzaW4/OiBGdW5jdGlvbiB9KS5vbmZvY3VzaW4/LihuZXcgalF1ZXJ5LkV2ZW50KFwiZm9jdXNpblwiKSk7XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0KGZpbHRlckZpZWxkLmdldEFnZ3JlZ2F0aW9uKFwiX2NvbnRlbnRcIikgYXMgSW5wdXRbXSlbMF0uZmlyZVZhbHVlSGVscFJlcXVlc3Qoe1xuXHRcdFx0XHRcdGZyb21LZXlib2FyZDogdHJ1ZSxcblx0XHRcdFx0XHRfdXNlcklucHV0VmFsdWU6IGlucHV0VmFsdWVcblx0XHRcdFx0fSBhcyB1bmtub3duIGFzIElucHV0JFZhbHVlSGVscFJlcXVlc3RFdmVudFBhcmFtZXRlcnMpO1xuXHRcdFx0fSwgMjAwKTtcblx0XHR9KTtcblx0fVxuXG5cdGdldENvbGxhcHNlZEZpbHRlcnNUZXh0KCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuY29udGVudD8uZ2V0QXNzaWduZWRGaWx0ZXJzVGV4dCgpPy5maWx0ZXJzVGV4dDtcblx0fVxufVxuZXhwb3J0IGRlZmF1bHQgRmlsdGVyQmFyQVBJO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQStDQTtFQUFBLElBQ01BLGtCQUFrQjtJQUt2QixTQUFBQSxtQkFBNkJDLFlBQTBCLEVBQUU7TUFBQSxLQUpqREMsa0JBQWtCLEdBQUcsQ0FBQztNQUFBLEtBRXRCQyxtQkFBbUIsR0FBRyxDQUFDO01BQUEsS0FFRkYsWUFBMEIsR0FBMUJBLFlBQTBC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
|
|
1005
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWx0ZXJCYXJUZWxlbWV0cnkiLCJmaWx0ZXJCYXJBUEkiLCJjb3VudEZpbHRlckFjdGlvbnMiLCJjb3VudFZhcmlhbnRGaWx0ZXJzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwib25GaWx0ZXJzQ2hhbmdlZCIsInJlYXNvbiIsIm9uU2VhcmNoIiwiZXZlbnRQYXJhbWV0ZXJzIiwiY29uZGl0aW9ucyIsImZpbHRlck5hbWVzIiwiZ2V0RmlsdGVyTmFtZXNGcm9tQ29uZGl0aW9ucyIsImdldFBhZ2VDb250cm9sbGVyIiwidGVsZW1ldHJ5Iiwic3RvcmVBY3Rpb24iLCJ0eXBlIiwicGFyYW1ldGVycyIsImNvdW50RmlsdGVycyIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJ2YXJpYW50TGF5ZXIiLCJnZXRWYXJpYW50IiwibGF5ZXIiLCJhdXRvTG9hZCIsInNlYXJjaFVzZWQiLCIkc2VhcmNoIiwiZm9yRWFjaCIsImNvbmRpdGlvbiIsIlZhcmlhbnRNYW5hZ2VtZW50VHlwZSIsIkRJU1BMQVlfQ1VSUkVOQ1lfUFJPUEVSVFlfTkFNRSIsIlBfRElTUExBWV9DVVJSRU5DWV9QUk9QRVJUWV9OQU1FIiwiRmlsdGVyQmFyQVBJIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwicmV0dXJuVHlwZXMiLCJfZGVjMiIsIm1peGluIiwiRmlsdGVyQmFyQVBJU3RhdGVIYW5kbGVyIiwiX2RlYzMiLCJwcm9wZXJ0eSIsIl9kZWM0IiwiZXhwZWN0ZWRBbm5vdGF0aW9ucyIsImV4cGVjdGVkVHlwZXMiLCJfZGVjNSIsIl9kZWM2IiwiZGVmYXVsdFZhbHVlIiwiX2RlYzciLCJfZGVjOCIsIl9kZWM5IiwiX2RlYzEwIiwiYWdncmVnYXRpb24iLCJtdWx0aXBsZSIsIl9kZWMxMSIsImV2ZW50IiwiX2RlYzEyIiwiX2RlYzEzIiwiX2RlYzE0IiwiX2RlYzE1IiwiX2RlYzE2IiwieG1sRXZlbnRIYW5kbGVyIiwiX2RlYzE3IiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9NYWNyb0FQSSIsInByb3BzIiwib3RoZXJzIiwiX3RoaXMiLCJjYWxsIiwiaW5pdGlhbENvbnRyb2xTdGF0ZSIsIl9pbml0aWFsU3RhdGVQcm9taXNlIiwiUHJvbWlzZUtlZXBlciIsIl9iU2VhcmNoVHJpZ2dlcmVkIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9kZXNjcmlwdG9yNCIsIl9kZXNjcmlwdG9yNSIsIl9kZXNjcmlwdG9yNiIsIl9kZXNjcmlwdG9yNyIsIl9kZXNjcmlwdG9yOCIsIl9kZXNjcmlwdG9yOSIsIl9kZXNjcmlwdG9yMTAiLCJfZGVzY3JpcHRvcjExIiwiX2Rlc2NyaXB0b3IxMiIsIl9kZXNjcmlwdG9yMTMiLCJhdHRhY2hTdGF0ZUNoYW5nZUhhbmRsZXIiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90bzIiLCJ3YWl0Rm9ySW5pdGlhbFN0YXRlIiwicHJvbWlzZSIsImdldENvbnRyb2xTdGF0ZSIsImNvbnRyb2xTdGF0ZSIsImZ1bGxTdGF0ZSIsImluaXRpYWxTdGF0ZSIsImlzU2VhcmNoVHJpZ2dlcmVkQnlJbml0aWFsTG9hZCIsIm5hdmlnYXRpb25UeXBlIiwiY29udHJvbGxlciIsInZpZXciLCJnZXRWaWV3Iiwidmlld0RhdGEiLCJnZXRWaWV3RGF0YSIsInZhcmlhbnRNYW5hZ2VtZW50IiwiQ29udHJvbCIsIl9nZXRGaWx0ZXJCYXJWYXJpYW50Q29udHJvbCIsImJ5SWQiLCJjdXJyZW50VmFyaWFudEtleSIsImdldEN1cnJlbnRWYXJpYW50S2V5IiwiTmF2VHlwZSIsInhBcHBTdGF0ZSIsImluaXRpYWxMb2FkIiwiSW5pdGlhbExvYWRNb2RlIiwiRW5hYmxlZCIsIl9zaG91bGRBdXRvVHJpZ2dlclNlYXJjaCIsIl9nZXRGaWx0ZXJCYXJWTSIsIl9nZXRBcHBseUF1dG9tYXRpY2FsbHlPblZhcmlhbnQiLCJfYXBwbHlTZWxlY3Rpb25WYXJpYW50IiwibmF2aWdhdGlvblBhcmFtZXRlciIsImZpbHRlclZhcmlhbnRBcHBsaWVkIiwiZmlsdGVyQmFyIiwiZ2V0Q29udGVudCIsInNlbGVjdGlvblZhcmlhbnQiLCJzdiIsInNlbGVjdGlvblZhcmlhbnREZWZhdWx0cyIsInN2RGVmYXVsdHMiLCJyZXF1aXJlc1N0YW5kYXJkVmFyaWFudCIsIlByb21pc2UiLCJyZXNvbHZlIiwic2hvdWxkQXBwbHlBcHBTdGF0ZSIsIl9hY3RpdmF0ZVZhcmlhbnRBbmREZXRlcm1pbmVBcHBseUFwcFN0YXRlIiwiX2FkZERlZmF1bHREaXNwbGF5Q3VycmVuY3lUb1NWIiwic3ZEZWZhdWx0c0FyZVByZXNlbnQiLCJnZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcyIsInN0ZFZhcmlhbnRJc0RlZmF1bHRWYXJpYW50IiwiZ2V0RGVmYXVsdFZhcmlhbnRLZXkiLCJnZXRTdGFuZGFyZFZhcmlhbnRLZXkiLCJ1c2VGTFBEZWZhdWx0VmFsdWVzIiwiZ2V0UGFyZW50Iiwic3ZUb1NldCIsIl9nZXRBZGp1c3RlZFNWIiwic2V0U2VsZWN0aW9uVmFyaWFudCIsIl9lbmFibGVGaWx0ZXJCYXIiLCJmaWx0ZXJCYXJDb250cm9sIiwicHJldmVudEluaXRpYWxTZWFyY2giLCJmbk9uU2VhcmNoIiwiZ2V0U3VzcGVuZFNlbGVjdGlvbiIsImF0dGFjaEV2ZW50T25jZSIsImVuYWJsZVJlcXVlc3RzIiwiYXBwU3RhdGVTViIsImFkanVzdGVkU1YiLCJTZWxlY3Rpb25WYXJpYW50IiwidG9KU09OT2JqZWN0IiwiYWxyZWFkeUFwcGxpZWRTViIsImdldFNlbGVjdGlvblZhcmlhbnQiLCJhcHBsaWVkU2VsT3B0TmFtZXMiLCJyZWR1Y2UiLCJzdkNvcHkiLCJzZWxPcHRpb25OYW1lIiwic3ZTZWxPcHRzIiwiZ2V0U2VsZWN0T3B0aW9uIiwic2VsZWN0T3B0aW9ucyIsIm1hc3NBZGRTZWxlY3RPcHRpb24iLCJfcHJldmVudEluaXRpYWxTZWFyY2giLCJhVmFyaWFudHMiLCJnZXRWYXJpYW50cyIsIm9DdXJyZW50VmFyaWFudCIsImZpbmQiLCJpdGVtIiwiZ2V0S2V5IiwiZXhlY3V0ZU9uU2VsZWN0IiwiaXNFbXB0eSIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiY29udGV4dFBhdGgiLCJlbnRpdHlTZXQiLCJtZXRhQ29udGV4dCIsImdldE1ldGFDb250ZXh0IiwiZGF0YU1vZGVsT2JqZWN0UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImRpc3BsYXlDdXJyZW5jeVByb3BlcnR5TmFtZSIsImdldERpc3BsYXlDdXJyZW5jeVByb3BlcnR5TmFtZSIsImRpc3BsYXlDdXJyZW5jeUlzTWFuZGF0b3J5IiwiX2NoZWNrSWZEaXNwbGF5Q3VycmVuY3lJc1JlcXVpcmVkIiwic3ZPcHRpb25zIiwiZGVmYXVsdFNWT3B0aW9ucyIsImRpc3BsYXlDdXJyZW5jeURlZmF1bHRFeGlzdHMiLCJub1NWRGlzcGxheUN1cnJlbmN5RXhpc3RzIiwiZGlzcGxheUN1cnJlbmN5U2VsZWN0T3B0aW9uIiwic2lnbiIsIm9wdGlvbiIsImxvdyIsImhpZ2giLCJhZGRTZWxlY3RPcHRpb24iLCJpc1BhcmFtZXRlcml6ZWQiLCJzdGFydGluZ0VudGl0eVNldCIsImVudGl0eVR5cGUiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIlJlc3VsdENvbnRleHQiLCJlbnRpdHlQcm9wZXJ0aWVzIiwic29tZSIsInBhcmFtZXRlciIsIm5hbWUiLCJfdHlwZSIsInVuZGVmaW5lZCIsInJlcXVpcmVkUHJvcGVydGllcyIsIkNhcGFiaWxpdGllcyIsIkZpbHRlclJlc3RyaWN0aW9ucyIsIlJlcXVpcmVkUHJvcGVydGllcyIsInJlcXVpcmVkUHJvcGVydHkiLCJ2YWx1ZSIsInJlcVN0ZFZhcmlhbnQiLCJ2YXJpYW50S2V5IiwiZ2V0SWQiLCJDb250cm9sVmFyaWFudEFwcGx5QVBJIiwiYWN0aXZhdGVWYXJpYW50IiwiZWxlbWVudCIsInZhcmlhbnRSZWZlcmVuY2UiLCJQYWdlIiwiZ2V0Q29udHJvbGxlciIsIk5vbmUiLCJoYW5kbGVWYXJpYW50SWRQYXNzZWRWaWFVUkxQYXJhbXMiLCJvVXJsUGFyYW1zIiwiYVBhZ2VWYXJpYW50SWQiLCJhRmlsdGVyQmFyVmFyaWFudElkIiwiYVRhYmxlVmFyaWFudElkIiwiYUNoYXJ0VmFyaWFudElkIiwib1ZhcmlhbnRJRHMiLCJzUGFnZVZhcmlhbnRJZCIsInNGaWx0ZXJCYXJWYXJpYW50SWQiLCJzVGFibGVWYXJpYW50SWQiLCJzQ2hhcnRWYXJpYW50SWQiLCJfaGFuZGxlQ29udHJvbFZhcmlhbnRJZCIsIm9WTSIsIm9WaWV3IiwiYVByb21pc2VzIiwic1ZhcmlhbnRNYW5hZ2VtZW50IiwiX2hhbmRsZVBhZ2VWYXJpYW50SWQiLCJfaGFuZGxlRmlsdGVyQmFyVmFyaWFudENvbnRyb2xJZCIsImFsbCIsIm9WYXJpYW50IiwiX2ZpbmRBbmRQdXNoVmFyaWFudFRvUHJvbWlzZSIsInNWYXJpYW50SWQiLCJiRmlsdGVyVmFyaWFudEFwcGxpZWQiLCJrZXkiLCJwdXNoIiwiX2FwcGx5Q29udHJvbFZhcmlhbnQiLCJzVmFyaWFudElEIiwiYXJndW1lbnRzIiwic1ZhcmlhbnRSZWZlcmVuY2UiLCJfY2hlY2tJZlZhcmlhbnRJZElzQXZhaWxhYmxlIiwidGhlbiIsImJJc0NvbnRyb2xTdGF0ZVZhcmlhbnRBdmFpbGFibGUiLCJTdGF0ZVV0aWwiLCJkZXRhY2hTdGF0ZUNoYW5nZSIsInN0YXRlQ2hhbmdlSGFuZGxlciIsImF0dGFjaFN0YXRlQ2hhbmdlIiwib0V2ZW50IiwiY29udHJvbCIsImdldFBhcmFtZXRlciIsImlzQSIsImhhbmRsZVN0YXRlQ2hhbmdlIiwiaGFuZGxlU2VhcmNoIiwib0ZpbHRlckJhciIsImdldFNvdXJjZSIsImdldFBhcmFtZXRlcnMiLCJnZXRGaWx0ZXJDb25kaXRpb25zIiwicHJlcGFyZWRFdmVudFBhcmFtZXRlcnMiLCJfcHJlcGFyZUV2ZW50UGFyYW1ldGVycyIsImZpcmVFdmVudCIsIm1lcmdlIiwiaGFuZGxlRmlsdGVyQ2hhbmdlZCIsIm9FdmVudFBhcmFtZXRlcnMiLCJvQ29uZGl0aW9ucyIsIl9nZXRGaWx0ZXJCYXJSZWFzb24iLCJfc1JlYXNvbiIsImZpbHRlcnMiLCJzZWFyY2giLCJGaWx0ZXJVdGlscyIsImdldEZpbHRlcnMiLCJzZXRGaWx0ZXJWYWx1ZXMiLCJzQ29uZGl0aW9uUGF0aCIsInNPcGVyYXRvciIsInZWYWx1ZXMiLCJjb250ZW50IiwiZ2V0QWN0aXZlRmlsdGVyc1RleHQiLCJnZXRBc3NpZ25lZEZpbHRlcnNUZXh0IiwiZmlsdGVyc1RleHQiLCJ0cmlnZ2VyU2VhcmNoIiwid2FpdEZvckluaXRpYWxpemF0aW9uIiwiZXJyIiwibWVzc2FnZSIsIkVycm9yIiwiU3RyaW5nIiwiTG9nIiwiZXJyb3IiLCJpc1NlbWFudGljRGF0ZUZpbHRlckFwcGxpZWQiLCJTZW1hbnRpY0RhdGVPcGVyYXRvcnMiLCJoYXNTZW1hbnRpY0RhdGVPcGVyYXRpb25zIiwiZ2V0Q29uZGl0aW9ucyIsInN0YXRlSGVscGVyIiwiYXBwQ29tcG9uZW50IiwiQ29tbW9uVXRpbHMiLCJnZXRBcHBDb21wb25lbnQiLCJuYXZpZ2F0aW9uU2VydmljZSIsImdldE5hdmlnYXRpb25TZXJ2aWNlIiwiZGF0YU1vZGVsT2JqZWN0IiwiZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGgiLCJtZXRhUGF0aCIsInRhcmdldEVudGl0eVNldCIsInNDb250ZXh0VXJsIiwiY29uc3RydWN0Q29udGV4dFVybCIsInNldEZpbHRlckNvbnRleHRVcmwiLCJnZXRNYW5kYXRvcnlGaWx0ZXJQcm9wZXJ0eU5hbWVzIiwiZ2V0UHJvcGVydHlJbmZvU2V0IiwiZmlsdGVyIiwiZmlsdGVyUHJvcCIsInJlcXVpcmVkIiwibWFwIiwicmVxdWlyZWRQcm9wIiwiY29uZGl0aW9uUGF0aCIsImRhdGEiLCJBcnJheSIsImlzQXJyYXkiLCJKU09OIiwicGFyc2UiLCJjdXJyZW50VmFyaWFudCIsInZhcmlhbnRNb2RlbCIsInZhcmlhbnRCYWNrUmVmZXJlbmNlIiwiZ2V0VmFyaWFudEJhY2tyZWZlcmVuY2UiLCJnZXRDdXJyZW50VmFyaWFudFJlZmVyZW5jZSIsImUiLCJkZWJ1ZyIsInNldEZpbHRlckZpZWxkVmlzaWJsZSIsInZpc2libGUiLCJhcHBseUV4dGVybmFsU3RhdGUiLCJpdGVtcyIsImdldEZpbHRlckZpZWxkVmlzaWJsZSIsInN0YXRlIiwicmV0cmlldmVFeHRlcm5hbFN0YXRlIiwiZ2V0VmFyaWFudE1hbmFnZW1lbnQiLCJ2YXJpYW50QmFja3JlZmVyZW5jZSIsIlVJNUVsZW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImlkIiwic2V0VmFyaWFudEJhY2tSZWZlcmVuY2UiLCJ2YXJpYW50IiwiaXNMaXZlTW9kZSIsImdldExpdmVNb2RlIiwic2V0VmFyaWFudEJhY2tyZWZlcmVuY2UiLCJzZXRDdXJyZW50VmFyaWFudEtleSIsInNldEZpbHRlckZpZWxkRW5hYmxlZCIsImVuYWJsZWQiLCJzZXREYXRhIiwiZmlsdGVyRmllbGRzIiwiZWRpdE1vZGUiLCJGaWVsZEVkaXRNb2RlIiwiRWRpdGFibGUiLCJEaXNhYmxlZCIsImdldEZpbHRlckZpZWxkRW5hYmxlZCIsImdldFByb3BlcnR5IiwiY29udmVydFNlbGVjdGlvblZhcmlhbnRUb1N0YXRlRmlsdGVycyIsInByZWZpbGxEZXNjcmlwdGlvbnMiLCJfY2xlYXJGaWx0ZXJWYWx1ZXNXaXRoT3B0aW9ucyIsIm9wdGlvbnMiLCJmcm9tTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJyZXN1bHQiLCJzZXRTZWxlY3Rpb25WYXJpYW50VG9NZGNDb250cm9sIiwiYXBwbHlTdGF0ZVJlc3VsdCIsImRpZmZTdGF0ZSIsImdldEV4dGVuc2lvbkFQSSIsInVwZGF0ZUFwcFN0YXRlIiwiZ2V0Q29uZGl0aW9uUGF0aCIsInByb3BlcnR5UGF0aCIsInByb3BlcnR5VGFyZ2V0T2JqZWN0UGF0aCIsImdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JQcm9wZXJ0eSIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJzaG93RmlsdGVyRmllbGQiLCJ0YXJnZXRGaWx0ZXJGaWVsZCIsIm9wZW5WYWx1ZUhlbHBGb3JGaWx0ZXJGaWVsZCIsImlucHV0VmFsdWUiLCJyZWplY3QiLCJmaWx0ZXJGaWVsZCIsImdldEZpbHRlckl0ZW1zIiwiZ2V0UHJvcGVydHlLZXkiLCJ2YWx1ZUhlbHAiLCJnZXRWYWx1ZUhlbHAiLCJfb0ZvY3VzSW5mbyIsInRhcmdldEluZm8iLCJzaWxlbnQiLCJvbmZvY3VzaW4iLCJqUXVlcnkiLCJFdmVudCIsInNldFRpbWVvdXQiLCJnZXRBZ2dyZWdhdGlvbiIsImZpcmVWYWx1ZUhlbHBSZXF1ZXN0IiwiZnJvbUtleWJvYXJkIiwiX3VzZXJJbnB1dFZhbHVlIiwiZ2V0Q29sbGFwc2VkRmlsdGVyc1RleHQiLCJNYWNyb0FQSSIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRmlsdGVyQmFyQVBJLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5U2V0LCBQcm9wZXJ0eSwgUHJvcGVydHlQYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0aWVzT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBhZ2dyZWdhdGlvbiwgZGVmaW5lVUk1Q2xhc3MsIGV2ZW50LCBtaXhpbiwgcHJvcGVydHksIHhtbEV2ZW50SGFuZGxlciB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgQ29udHJvbFN0YXRlLCBMZWdhY3lGaWx0ZXJCYXJTdGF0ZSwgTmF2aWdhdGlvblBhcmFtZXRlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9WaWV3U3RhdGVcIjtcbmltcG9ydCB7IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IFByb21pc2VLZWVwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUHJvbWlzZUtlZXBlclwiO1xuaW1wb3J0IHsgSW5pdGlhbExvYWRNb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgTWFjcm9BUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvTWFjcm9BUElcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jb250cm9scy9GaWx0ZXJCYXJcIjtcbmltcG9ydCB0eXBlIHsgSUZpbHRlckNvbnRyb2wgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvRmlsdGVyVXRpbHNcIjtcbmltcG9ydCBGaWx0ZXJVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvRmlsdGVyVXRpbHNcIjtcbmltcG9ydCB0eXBlIEZpbHRlckZpZWxkIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlckJhci9GaWx0ZXJGaWVsZFwiO1xuaW1wb3J0IFNlbWFudGljRGF0ZU9wZXJhdG9ycyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXJCYXIvU2VtYW50aWNEYXRlT3BlcmF0b3JzXCI7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2xQcm9wZXJ0eUluZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9tZGMvYWRhcHRlci9TdGF0ZUhlbHBlclwiO1xuaW1wb3J0IHN0YXRlSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL21kYy9hZGFwdGVyL1N0YXRlSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsQmluZGluZ0luZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9VdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBFeHRlcm5hbFN0YXRlVHlwZSB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL3ZhbHVlaGVscC9WYWx1ZUhlbHBEZWxlZ2F0ZVwiO1xuaW1wb3J0IFNlbGVjdGlvblZhcmlhbnQgZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL1NlbGVjdGlvblZhcmlhbnRcIjtcbmltcG9ydCB7IE5hdlR5cGUgfSBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIExpc3RSZXBvcnRDb250cm9sbGVyIH0gZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvTGlzdFJlcG9ydC9MaXN0UmVwb3J0Q29udHJvbGxlci5jb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBJbnB1dCBmcm9tIFwic2FwL20vSW5wdXRcIjtcbmltcG9ydCB0eXBlIHsgSW5wdXQkVmFsdWVIZWxwUmVxdWVzdEV2ZW50UGFyYW1ldGVycyB9IGZyb20gXCJzYXAvbS9JbnB1dFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIEV2ZW50LCBkZWZhdWx0IGFzIFVJNUV2ZW50IH0gZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSB7ICRDb250cm9sU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgQ29udHJvbFZhcmlhbnRBcHBseUFQSSBmcm9tIFwic2FwL3VpL2ZsL2FwcGx5L2FwaS9Db250cm9sVmFyaWFudEFwcGx5QVBJXCI7XG5pbXBvcnQgdHlwZSBWYXJpYW50TWFuYWdlbWVudCBmcm9tIFwic2FwL3VpL2ZsL3ZhcmlhbnRzL1ZhcmlhbnRNYW5hZ2VtZW50XCI7XG5pbXBvcnQgdHlwZSBWYXJpYW50TW9kZWwgZnJvbSBcInNhcC91aS9mbC92YXJpYW50cy9WYXJpYW50TW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgVmFyaWFudERhdGEgfSBmcm9tIFwic2FwL3VpL2ZsL3ZhcmlhbnRzL1ZhcmlhbnRNb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL21kYy9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBWYWx1ZUhlbHAgZnJvbSBcInNhcC91aS9tZGMvVmFsdWVIZWxwXCI7XG5pbXBvcnQgdHlwZSB7IENvbmRpdGlvbk9iamVjdCB9IGZyb20gXCJzYXAvdWkvbWRjL2NvbmRpdGlvbi9Db25kaXRpb25cIjtcbmltcG9ydCBGaWVsZEVkaXRNb2RlIGZyb20gXCJzYXAvdWkvbWRjL2VudW1zL0ZpZWxkRWRpdE1vZGVcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyQmFyQmFzZSRTZWFyY2hFdmVudCB9IGZyb20gXCJzYXAvdWkvbWRjL2ZpbHRlcmJhci9GaWx0ZXJCYXJCYXNlXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlciBhcyBTdGF0ZVV0aWxGaWx0ZXIgfSBmcm9tIFwic2FwL3VpL21kYy9wMTNuL1N0YXRlVXRpbFwiO1xuaW1wb3J0IFN0YXRlVXRpbCBmcm9tIFwic2FwL3VpL21kYy9wMTNuL1N0YXRlVXRpbFwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBNZXRhTW9kZWwsIGRlZmF1bHQgYXMgT0RhdGFNZXRhTW9kZWwgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgalF1ZXJ5IGZyb20gXCJzYXAvdWkvdGhpcmRwYXJ0eS9qcXVlcnlcIjtcbmltcG9ydCBGaWx0ZXJCYXJBUElTdGF0ZUhhbmRsZXIgZnJvbSBcIi4vbWl4aW4vRmlsdGVyQmFyQVBJU3RhdGVIYW5kbGVyXCI7XG5cbi8vIFRyYWNrIHRlbGVtZXRyeSBjb250ZW50IGZvciB0aGUgZmlsdGVyQmFyXG5jbGFzcyBGaWx0ZXJCYXJUZWxlbWV0cnkge1xuXHRwcml2YXRlIGNvdW50RmlsdGVyQWN0aW9ucyA9IDA7XG5cblx0cHJpdmF0ZSBjb3VudFZhcmlhbnRGaWx0ZXJzID0gMDtcblxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGZpbHRlckJhckFQSTogRmlsdGVyQmFyQVBJKSB7fVxuXG5cdG9uRmlsdGVyc0NoYW5nZWQocmVhc29uPzogc3RyaW5nKTogdm9pZCB7XG5cdFx0aWYgKHJlYXNvbiA9PT0gXCJWYXJpYW50XCIpIHtcblx0XHRcdHRoaXMuY291bnRWYXJpYW50RmlsdGVycysrO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmNvdW50RmlsdGVyQWN0aW9ucysrO1xuXHRcdH1cblx0fVxuXG5cdG9uU2VhcmNoKGV2ZW50UGFyYW1ldGVyczogeyByZWFzb24/OiBzdHJpbmcgfSwgY29uZGl0aW9uczogUmVjb3JkPHN0cmluZywgQ29uZGl0aW9uT2JqZWN0W10+KTogdm9pZCB7XG5cdFx0Y29uc3QgZmlsdGVyTmFtZXMgPSB0aGlzLmdldEZpbHRlck5hbWVzRnJvbUNvbmRpdGlvbnMoY29uZGl0aW9ucyk7XG5cdFx0dGhpcy5maWx0ZXJCYXJBUEkuZ2V0UGFnZUNvbnRyb2xsZXIoKT8udGVsZW1ldHJ5LnN0b3JlQWN0aW9uKHtcblx0XHRcdHR5cGU6IFwiRkUuRmlsdGVyQmFyU2VhcmNoXCIsXG5cdFx0XHRwYXJhbWV0ZXJzOiB7XG5cdFx0XHRcdGNvdW50RmlsdGVyQWN0aW9uczogdGhpcy5jb3VudEZpbHRlckFjdGlvbnMsIC8vICBIb3cgbWFueSBmaWx0ZXJDaGFuZ2VkIGFjdGlvbnMgYXJlIHBlcmZvcm1lZFxuXHRcdFx0XHRjb3VudEZpbHRlcnM6IE9iamVjdC5rZXlzKGNvbmRpdGlvbnMpLmxlbmd0aCwgLy8gSG93IG1hbnkgZGlmZmVyZW50IGZpbHRlcnMgYXJlIGFwcGxpZWRcblx0XHRcdFx0Y291bnRWYXJpYW50RmlsdGVyczogdGhpcy5jb3VudFZhcmlhbnRGaWx0ZXJzLCAvLyBIb3cgbWFueSBmaWx0ZXIgYmVsb25nIHRvIGEgdmFyaWFudFxuXHRcdFx0XHR2YXJpYW50TGF5ZXI6IHRoaXMuZmlsdGVyQmFyQVBJLmdldFZhcmlhbnQoKT8ubGF5ZXIgPz8gXCJOb25lXCIsIC8vIHwgXCJTQVBcIiB8IFwiQ3VzdG9tXCI7IC8vIFR5cGUgb2YgdmFyaWFudFxuXHRcdFx0XHRhdXRvTG9hZDogZXZlbnRQYXJhbWV0ZXJzLnJlYXNvbiA9PT0gXCJWYXJpYW50XCIsIC8vIElzIHRoZSBmaWx0ZXIgYXV0b21hdGljYWxseSBleGVjdXRlZFxuXHRcdFx0XHRzZWFyY2hVc2VkOiBjb25kaXRpb25zLiRzZWFyY2ggPyAhIU9iamVjdC5rZXlzKGNvbmRpdGlvbnMuJHNlYXJjaCkubGVuZ3RoIDogZmFsc2UsIC8vIFdhcyB0aGUgc2VhcmNoIGZpZWxkIGluIHRoZSBmaWx0ZXJiYXIgdXNlZD9cblx0XHRcdFx0ZmlsdGVyTmFtZXM6IGZpbHRlck5hbWVzIC8vIFByb3BlcnR5IG5hbWVzIG9mIHRoZSBmaWx0ZXJzXG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Ly8gUmVzZXQgdGhlIGNvdW50XG5cdFx0dGhpcy5jb3VudEZpbHRlckFjdGlvbnMgPSAwO1xuXHRcdHRoaXMuY291bnRWYXJpYW50RmlsdGVycyA9IDA7XG5cdH1cblxuXHRnZXRGaWx0ZXJOYW1lc0Zyb21Db25kaXRpb25zKGNvbmRpdGlvbnM6IFJlY29yZDxzdHJpbmcsIENvbmRpdGlvbk9iamVjdFtdPik6IHN0cmluZyB7XG5cdFx0bGV0IGZpbHRlck5hbWVzID0gXCJcIjtcblx0XHRPYmplY3Qua2V5cyhjb25kaXRpb25zKS5mb3JFYWNoKChjb25kaXRpb24pID0+IHtcblx0XHRcdGlmIChjb25kaXRpb24gIT0gXCIkc2VhcmNoXCIpIHtcblx0XHRcdFx0ZmlsdGVyTmFtZXMgKz0gY29uZGl0aW9uICsgXCI7XCI7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGZpbHRlck5hbWVzO1xuXHR9XG59XG5cbmV4cG9ydCB0eXBlIEZpbHRlckJhclN0YXRlID0ge1xuXHRpbm5lclN0YXRlPzoge1xuXHRcdGZpbHRlcj86IFJlY29yZDxzdHJpbmcsIENvbmRpdGlvbk9iamVjdFtdPjtcblx0XHRpbml0aWFsU3RhdGU/OiBMZWdhY3lGaWx0ZXJCYXJTdGF0ZTtcblx0XHRmdWxsU3RhdGU/OiBMZWdhY3lGaWx0ZXJCYXJTdGF0ZTtcblx0fTtcbn07XG5cbnR5cGUgVmFyaWFudElEcyA9IHtcblx0c1BhZ2VWYXJpYW50SWQ6IHN0cmluZztcblx0c0ZpbHRlckJhclZhcmlhbnRJZDogc3RyaW5nO1xuXHRzVGFibGVWYXJpYW50SWQ6IHN0cmluZztcblx0c0NoYXJ0VmFyaWFudElkOiBzdHJpbmc7XG59O1xuXG50eXBlIFZhcmlhbnRPYmplY3QgPSB7XG5cdGF1dGhvcjogc3RyaW5nO1xuXHRjaGFuZ2U6IGJvb2xlYW47XG5cdGNvbnRleHRzOiBvYmplY3Q7XG5cdGV4ZWN1dGVPblNlbGVjdDogYm9vbGVhbjtcblx0ZmF2b3JpdGU6IGJvb2xlYW47XG5cdGtleTogc3RyaW5nO1xuXHRvcmlnaW5hbENvbnRleHRzOiBvYmplY3Q7XG5cdG9yaWdpbmFsRXhlY3V0ZU9uU2VsZWN0OiBib29sZWFuO1xuXHRvcmlnaW5hbEZhdm9yaXRlOiBib29sZWFuO1xuXHRvcmlnaW5hbFRpdGxlOiBzdHJpbmc7XG5cdG9yaWdpbmFsVmlzaWJsZTogYm9vbGVhbjtcblx0cmVtb3ZlOiBib29sZWFuO1xuXHRyZW5hbWU6IGJvb2xlYW47XG5cdHNoYXJpbmc6IHN0cmluZztcblx0dGl0bGU6IHN0cmluZztcblx0dmlzaWJsZTogYm9vbGVhbjtcbn07XG5cbmVudW0gVmFyaWFudE1hbmFnZW1lbnRUeXBlIHtcblx0Q29udHJvbCA9IFwiQ29udHJvbFwiLFxuXHRQYWdlID0gXCJQYWdlXCIsXG5cdE5vbmUgPSBcIk5vbmVcIlxufVxuXG5jb25zdCBESVNQTEFZX0NVUlJFTkNZX1BST1BFUlRZX05BTUUgPSBcIkRpc3BsYXlDdXJyZW5jeVwiO1xuY29uc3QgUF9ESVNQTEFZX0NVUlJFTkNZX1BST1BFUlRZX05BTUUgPSBcIlBfRGlzcGxheUN1cnJlbmN5XCI7XG5cbnR5cGUgTFJWaWV3RGF0YSA9IHtcblx0Y29udHJvbENvbmZpZ3VyYXRpb24/OiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG5cdGVudGl0eVNldD86IHN0cmluZztcblx0Y29udGV4dFBhdGg/OiBzdHJpbmc7XG5cdHZhcmlhbnRNYW5hZ2VtZW50PzogYm9vbGVhbiB8IHN0cmluZztcbn07XG5cbmludGVyZmFjZSBGaWx0ZXJCYXJBUEkgZXh0ZW5kcyBGaWx0ZXJCYXJBUElTdGF0ZUhhbmRsZXIge31cblxuLyoqXG4gKiBCdWlsZGluZyBibG9jayBmb3IgY3JlYXRpbmcgYSBGaWx0ZXJCYXIgYmFzZWQgb24gdGhlIG1ldGFkYXRhIHByb3ZpZGVkIGJ5IE9EYXRhIFY0LlxuICoge0BsaW5rIGRlbW86c2FwL2ZlL2NvcmUvZnBtRXhwbG9yZXIvaW5kZXguaHRtbCMvYnVpbGRpbmdCbG9ja3MvZmlsdGVyQmFyL2ZpbHRlckJhckRlZmF1bHQgT3ZlcnZpZXcgb2YgQnVpbGRpbmcgQmxvY2tzfVxuICogPGJyPlxuICogVXN1YWxseSwgYSBTZWxlY3Rpb25GaWVsZHMgYW5ub3RhdGlvbiBpcyBleHBlY3RlZC5cbiAqXG4gKlxuICogVXNhZ2UgZXhhbXBsZTpcbiAqIDxwcmU+XG4gKiAmbHQ7bWFjcm9zOkZpbHRlckJhciBpZD1cIk15RmlsdGVyQmFyXCIgbWV0YVBhdGg9XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uRmllbGRzXCIgLyZndDtcbiAqIDwvcHJlPlxuICogQGFsaWFzIHNhcC5mZS5tYWNyb3MuRmlsdGVyQmFyXG4gKiBAcHVibGljXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5tYWNyb3MuZmlsdGVyQmFyLkZpbHRlckJhckFQSVwiLCB7XG5cdHJldHVyblR5cGVzOiBbXCJzYXAudWkuY29yZS5Db250cm9sXCJdXG59KVxuQG1peGluKEZpbHRlckJhckFQSVN0YXRlSGFuZGxlcilcbmNsYXNzIEZpbHRlckJhckFQSSBleHRlbmRzIE1hY3JvQVBJIHtcblx0aW5pdGlhbENvbnRyb2xTdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuXHRfaW5pdGlhbFN0YXRlUHJvbWlzZTogUHJvbWlzZUtlZXBlcjx2b2lkPiA9IG5ldyBQcm9taXNlS2VlcGVyKCk7XG5cblx0X2JTZWFyY2hUcmlnZ2VyZWQgPSBmYWxzZTtcblxuXHRhc3luYyB3YWl0Rm9ySW5pdGlhbFN0YXRlKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLl9pbml0aWFsU3RhdGVQcm9taXNlLnByb21pc2U7XG5cdH1cblxuXHRnZXRDb250cm9sU3RhdGUoY29udHJvbFN0YXRlOiBDb250cm9sU3RhdGUpOiBDb250cm9sU3RhdGUge1xuXHRcdGNvbnN0IGluaXRpYWxDb250cm9sU3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gdGhpcy5pbml0aWFsQ29udHJvbFN0YXRlO1xuXHRcdGlmIChjb250cm9sU3RhdGUpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGZ1bGxTdGF0ZTogY29udHJvbFN0YXRlIGFzIG9iamVjdCxcblx0XHRcdFx0aW5pdGlhbFN0YXRlOiBpbml0aWFsQ29udHJvbFN0YXRlIGFzIG9iamVjdFxuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbnRyb2xTdGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHdoZXRoZXIgU2VhcmNoIGNhbiBiZSB0cmlnZ2VyZWQgYXQgaW5pdGlhbCBsb2FkIG9mIHRoZSBhcHBsaWNhdGlvbiBvciBub3QuXG5cdCAqIEBwYXJhbSBuYXZpZ2F0aW9uVHlwZSBOYXZpZ2F0aW9uIFR5cGUgZHVyaW5nIHRoZSBsb2FkIG9mIHRoZSBhcHBsaWNhdGlvblxuXHQgKiBAcmV0dXJucyBBIEJvb2xlYW4gZGV0ZXJtaW5pbmcgd2hldGhlciBTZWFyY2ggY2FuIGJlIHRyaWdnZXJlZCBvciBub3Rcblx0ICovXG5cdGlzU2VhcmNoVHJpZ2dlcmVkQnlJbml0aWFsTG9hZChuYXZpZ2F0aW9uVHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgY29udHJvbGxlciA9IHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcixcblx0XHRcdHZpZXcgPSBjb250cm9sbGVyLmdldFZpZXcoKSxcblx0XHRcdHZpZXdEYXRhID0gdmlldy5nZXRWaWV3RGF0YSgpO1xuXHRcdGxldCBpc1NlYXJjaFRyaWdnZXJlZEJ5SW5pdGlhbExvYWQgPSBmYWxzZSxcblx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50O1xuXHRcdC8vIERldGVybWluaW5nIHdoZXRoZXIgaXQncyBDb250cm9sIHZhcmlhbnRNYW5hZ2VtZW50IG9yIFBhZ2UgdmFyaWFudE1hbmFnZW1lbnRcblx0XHRpZiAodmlld0RhdGEudmFyaWFudE1hbmFnZW1lbnQgPT09IFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Db250cm9sKSB7XG5cdFx0XHR2YXJpYW50TWFuYWdlbWVudCA9IGNvbnRyb2xsZXIuX2dldEZpbHRlckJhclZhcmlhbnRDb250cm9sKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50ID0gdmlldy5ieUlkKFwiZmU6OlBhZ2VWYXJpYW50TWFuYWdlbWVudFwiKSBhcyBWYXJpYW50TWFuYWdlbWVudDtcblx0XHR9XG5cdFx0Y29uc3QgY3VycmVudFZhcmlhbnRLZXkgPSB2YXJpYW50TWFuYWdlbWVudD8uZ2V0Q3VycmVudFZhcmlhbnRLZXkoKTtcblx0XHQvL1RoZSBjaGVjayBzaGFsbCBoYXBwZW4gZm9yICdpbnRpYWwgbG9hZCcgYW5kICdBcHBseSBBdXRvbWF0aWNhbGx5JyBmb3IgY29sbGFwc2luZyB0aGUgaGVhZGVyIG9yXG5cdFx0Ly8gYWx3YXlzIGJlIGNvbGxhcHNlZCBpZiBuYXZUeXBlIGlzIHhBcHBTdGF0ZVxuXHRcdC8vIGluaXRpYWxMb2FkIEF1dG8gb3IgRGlzYWJsZWRcblx0XHRpZiAobmF2aWdhdGlvblR5cGUgPT09IE5hdlR5cGUueEFwcFN0YXRlKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2UgaWYgKHZhcmlhbnRNYW5hZ2VtZW50ICYmIHZpZXdEYXRhLmluaXRpYWxMb2FkICE9PSBJbml0aWFsTG9hZE1vZGUuRW5hYmxlZCkge1xuXHRcdFx0Ly8gSGVhZGVyIGlzIGNvbGxhcHNlZCBpZiBwcmVzZXQgZmlsdGVycyBhcmUgc2V0IGZvciBpbml0aWFsIGxvYWQgQXV0bywgSGVhZGVyIHNoYWxsIHJlbWFpbiBleHBhbmRlZCBpZiBpbml0aWFsIGxvYWQgaXMgQXV0byB3aXRob3V0IHByZXNldCBmaWx0ZXJzIG9yIGludGlhbCBsb2FkIGlzIGRpc2FibGVkXG5cdFx0XHRpZiAoY29udHJvbGxlci5fc2hvdWxkQXV0b1RyaWdnZXJTZWFyY2godGhpcy5fZ2V0RmlsdGVyQmFyVk0odmlldykpKSB7XG5cdFx0XHRcdGlzU2VhcmNoVHJpZ2dlcmVkQnlJbml0aWFsTG9hZCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIGluaXRpYWxMb2FkIEVuYWJsZWRcblx0XHRlbHNlIGlmIChcblx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50ICYmXG5cdFx0XHR2aWV3RGF0YS5pbml0aWFsTG9hZCA9PT0gSW5pdGlhbExvYWRNb2RlLkVuYWJsZWQgJiZcblx0XHRcdGNvbnRyb2xsZXIuX2dldEFwcGx5QXV0b21hdGljYWxseU9uVmFyaWFudCh2YXJpYW50TWFuYWdlbWVudCwgY3VycmVudFZhcmlhbnRLZXkpXG5cdFx0KSB7XG5cdFx0XHRpc1NlYXJjaFRyaWdnZXJlZEJ5SW5pdGlhbExvYWQgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gaXNTZWFyY2hUcmlnZ2VyZWRCeUluaXRpYWxMb2FkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFwcGx5IFNlbGVjdGlvbiBWYXJpYW50IGZyb20gTmF2aWdhdGlvbiBQYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSB2aWV3IFZpZXcgb2YgdGhlIExSIGZpbHRlciBiYXJcblx0ICogQHBhcmFtIG5hdmlnYXRpb25QYXJhbWV0ZXIgU2VsZWN0aW9uIFZhcmlhbnQgdG8gYXBwbHkgZnJvbSBhcHBTdGF0ZVxuXHQgKiBAcGFyYW0gZmlsdGVyVmFyaWFudEFwcGxpZWQgSXMgYSBmaWx0ZXIgdmFyaWFudCBhbGFyZWFkeSBhcHBsaWVkXG5cdCAqIEByZXR1cm5zIFByb21pc2UgZm9yIGFzeW5jaHJvbm91cyBoYW5kbGluZ1xuXHQgKi9cblx0YXN5bmMgX2FwcGx5U2VsZWN0aW9uVmFyaWFudCh2aWV3OiBWaWV3LCBuYXZpZ2F0aW9uUGFyYW1ldGVyOiBOYXZpZ2F0aW9uUGFyYW1ldGVyLCBmaWx0ZXJWYXJpYW50QXBwbGllZDogYm9vbGVhbik6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuZ2V0Q29udGVudCgpIGFzIEZpbHRlckJhcjtcblx0XHRjb25zdCB7IHNlbGVjdGlvblZhcmlhbnQ6IHN2LCBzZWxlY3Rpb25WYXJpYW50RGVmYXVsdHM6IHN2RGVmYXVsdHMsIHJlcXVpcmVzU3RhbmRhcmRWYXJpYW50ID0gZmFsc2UgfSA9IG5hdmlnYXRpb25QYXJhbWV0ZXI7XG5cblx0XHRpZiAoIWZpbHRlckJhciB8fCAhc3YpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9XG5cdFx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQgPSB0aGlzLl9nZXRGaWx0ZXJCYXJWTSh2aWV3KSBhcyBWYXJpYW50TWFuYWdlbWVudDtcblx0XHRjb25zdCBzaG91bGRBcHBseUFwcFN0YXRlID0gYXdhaXQgdGhpcy5fYWN0aXZhdGVWYXJpYW50QW5kRGV0ZXJtaW5lQXBwbHlBcHBTdGF0ZShcblx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50LFxuXHRcdFx0cmVxdWlyZXNTdGFuZGFyZFZhcmlhbnQsXG5cdFx0XHRmaWx0ZXJWYXJpYW50QXBwbGllZFxuXHRcdCk7XG5cdFx0aWYgKHNob3VsZEFwcGx5QXBwU3RhdGUpIHtcblx0XHRcdHRoaXMuX2FkZERlZmF1bHREaXNwbGF5Q3VycmVuY3lUb1NWKHZpZXcsIHN2LCBzdkRlZmF1bHRzKTtcblxuXHRcdFx0Ly8gY2hlY2sgaWYgRkxQIGRlZmF1bHQgdmFsdWVzIGFyZSB0aGVyZSBhbmQgaXMgaXQgc3RhbmRhcmQgdmFyaWFudFxuXHRcdFx0Y29uc3Qgc3ZEZWZhdWx0c0FyZVByZXNlbnQgPSBzdkRlZmF1bHRzID8gc3ZEZWZhdWx0cy5nZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcygpLmxlbmd0aCA+IDAgOiBmYWxzZTtcblx0XHRcdGNvbnN0IHN0ZFZhcmlhbnRJc0RlZmF1bHRWYXJpYW50ID1cblx0XHRcdFx0dmFyaWFudE1hbmFnZW1lbnQgJiYgdmFyaWFudE1hbmFnZW1lbnQuZ2V0RGVmYXVsdFZhcmlhbnRLZXkoKSA9PT0gdmFyaWFudE1hbmFnZW1lbnQuZ2V0U3RhbmRhcmRWYXJpYW50S2V5KCk7XG5cdFx0XHRjb25zdCB1c2VGTFBEZWZhdWx0VmFsdWVzOiBib29sZWFuID0gc3ZEZWZhdWx0c0FyZVByZXNlbnQgJiYgKHN0ZFZhcmlhbnRJc0RlZmF1bHRWYXJpYW50IHx8ICF2YXJpYW50TWFuYWdlbWVudCk7XG5cblx0XHRcdGNvbnN0IGZpbHRlckJhckFQSSA9IGZpbHRlckJhci5nZXRQYXJlbnQoKSBhcyBGaWx0ZXJCYXJBUEk7XG5cdFx0XHRsZXQgc3ZUb1NldDogU2VsZWN0aW9uVmFyaWFudCA9IHN2O1xuXHRcdFx0aWYgKGZpbHRlclZhcmlhbnRBcHBsaWVkIHx8IHVzZUZMUERlZmF1bHRWYWx1ZXMpIHtcblx0XHRcdFx0c3ZUb1NldCA9IGF3YWl0IHRoaXMuX2dldEFkanVzdGVkU1Yoc3YsIHVzZUZMUERlZmF1bHRWYWx1ZXMpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZpbHRlckJhckFQSS5zZXRTZWxlY3Rpb25WYXJpYW50KHN2VG9TZXQsIHRydWUsIHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdF9lbmFibGVGaWx0ZXJCYXIoZmlsdGVyQmFyQ29udHJvbDogRmlsdGVyQmFyLCBwcmV2ZW50SW5pdGlhbFNlYXJjaDogYm9vbGVhbik6IHZvaWQge1xuXHRcdGNvbnN0IGZpbHRlckJhckFQSSA9IGZpbHRlckJhckNvbnRyb2wuZ2V0UGFyZW50KCkgYXMgRmlsdGVyQmFyQVBJO1xuXHRcdGNvbnN0IGZuT25TZWFyY2ggPSAoKTogdm9pZCA9PiB7XG5cdFx0XHR0aGlzLl9iU2VhcmNoVHJpZ2dlcmVkID0gIXByZXZlbnRJbml0aWFsU2VhcmNoO1xuXHRcdH07XG5cblx0XHQvLyByZXNldCB0aGUgc3VzcGVuZCBzZWxlY3Rpb24gb24gZmlsdGVyIGJhciB0byBhbGxvdyBsb2FkaW5nIG9mIGRhdGEgd2hlbiBuZWVkZWQgKHdhcyBzZXQgb24gTFIgSW5pdClcblx0XHRpZiAoZmlsdGVyQmFyQ29udHJvbC5nZXRTdXNwZW5kU2VsZWN0aW9uKCkpIHtcblx0XHRcdC8vIE9ubHkgaWYgc2VhcmNoIGlzIGZpcmVkIHdlIHNldCBfYlNlYXJjaFRyaWdnZXJlZC5cblx0XHRcdC8vIElmIHRoZXJlIHdhcyBhbiBlcnJvciBkdWUgdG8gcmVxdWlyZWQgZmlsdGVyZmllbGRzIGVtcHR5IG9yIG90aGVyIGlzc3VlcyB3ZSBza2lwIHNldHRpbmcgX2JTZWFyY2hUcmlnZ2VyZWQuXG5cdFx0XHRmaWx0ZXJCYXJBUEkuYXR0YWNoRXZlbnRPbmNlKFwic2VhcmNoXCIsIGZuT25TZWFyY2gpO1xuXHRcdFx0ZmlsdGVyQmFyQ29udHJvbC5lbmFibGVSZXF1ZXN0cyh0cnVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gc2VhcmNoIG1pZ2h0IGFscmVhZHkgYmUgdHJpZ2dlcmVkLlxuXHRcdFx0Zm5PblNlYXJjaCgpO1xuXHRcdH1cblx0fVxuXG5cdGFzeW5jIF9nZXRBZGp1c3RlZFNWKGFwcFN0YXRlU1Y6IFNlbGVjdGlvblZhcmlhbnQsIHVzZUZMUERlZmF1bHRWYWx1ZXM6IGJvb2xlYW4pOiBQcm9taXNlPFNlbGVjdGlvblZhcmlhbnQ+IHtcblx0XHRsZXQgYWRqdXN0ZWRTViA9IG5ldyBTZWxlY3Rpb25WYXJpYW50KGFwcFN0YXRlU1YudG9KU09OT2JqZWN0KCkpO1xuXHRcdGNvbnN0IGFscmVhZHlBcHBsaWVkU1YgPSBhd2FpdCB0aGlzLmdldFNlbGVjdGlvblZhcmlhbnQoKTtcblx0XHRjb25zdCBhcHBsaWVkU2VsT3B0TmFtZXMgPSBhbHJlYWR5QXBwbGllZFNWPy5nZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcygpIHx8IFtdO1xuXHRcdGlmIChhcHBsaWVkU2VsT3B0TmFtZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly8gV2UgbWVyZ2UgJ2FwcGxpZWQgU1YnIGFuZCAnYXBwU3RhdGUgU1YnIGJhc2VkIG9uICd1c2VGTFBEZWZhdWx0VmFsdWVzJy5cblx0XHRcdGFkanVzdGVkU1YgPSBhcHBsaWVkU2VsT3B0TmFtZXMucmVkdWNlKChzdkNvcHk6IFNlbGVjdGlvblZhcmlhbnQsIHNlbE9wdGlvbk5hbWUpID0+IHtcblx0XHRcdFx0Ly8gKGFwcFN0YXRlU1YgPSBhZGp1c3RlZFNWID0gc3ZDb3B5KVxuXHRcdFx0XHRjb25zdCBzdlNlbE9wdHMgPSBzdkNvcHkuZ2V0U2VsZWN0T3B0aW9uKHNlbE9wdGlvbk5hbWUpO1xuXHRcdFx0XHQvLyBJZiB1c2VGTFBEZWZhdWx0VmFsdWVzID0gdHJ1ZSwgbWVhbnMgKGFwcFN0YXRlU1YgPSBzdkRlZmF1bHRzKVxuXHRcdFx0XHRpZiAoKHVzZUZMUERlZmF1bHRWYWx1ZXMgJiYgIXN2U2VsT3B0cz8ubGVuZ3RoKSB8fCAhdXNlRkxQRGVmYXVsdFZhbHVlcykge1xuXHRcdFx0XHRcdC8vIGlmIGRlZmF1bHQgU1YgbmVlZHMgdG8gYmUgdXNlZCwgdGhlbiBzZWxlY3Qgb3B0aW9ucyBmcm9tIGRlZmF1bHQgc2VsZWN0IG9wdGlvbnMgdGFrZSBwcmlvcml0eS5cblx0XHRcdFx0XHQvLyBlbHNlIHdlIG1lcmdlIGJvdGg6IGFscmVhZHkgYXBwbGllZCBTViBhbmQgU1YgZnJvbSBuYXZQYXJhbXMuXG5cdFx0XHRcdFx0Y29uc3Qgc2VsZWN0T3B0aW9ucyA9IGFscmVhZHlBcHBsaWVkU1YuZ2V0U2VsZWN0T3B0aW9uKHNlbE9wdGlvbk5hbWUpO1xuXHRcdFx0XHRcdHN2Q29weS5tYXNzQWRkU2VsZWN0T3B0aW9uKHNlbE9wdGlvbk5hbWUsIHNlbGVjdE9wdGlvbnMgfHwgW10pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBzdkNvcHk7XG5cdFx0XHR9LCBhZGp1c3RlZFNWKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYWRqdXN0ZWRTVjtcblx0fVxuXG5cdF9wcmV2ZW50SW5pdGlhbFNlYXJjaCh2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnQpOiBib29sZWFuIHtcblx0XHRpZiAoIXZhcmlhbnRNYW5hZ2VtZW50KSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0Y29uc3QgYVZhcmlhbnRzID0gdmFyaWFudE1hbmFnZW1lbnQuZ2V0VmFyaWFudHMoKTtcblx0XHRjb25zdCBvQ3VycmVudFZhcmlhbnQgPSBhVmFyaWFudHMuZmluZChmdW5jdGlvbiAoaXRlbSk6IGJvb2xlYW4ge1xuXHRcdFx0cmV0dXJuIGl0ZW0uZ2V0S2V5KCkgPT09IHZhcmlhbnRNYW5hZ2VtZW50LmdldEN1cnJlbnRWYXJpYW50S2V5KCk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuICFvQ3VycmVudFZhcmlhbnQuZXhlY3V0ZU9uU2VsZWN0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBEaXNwbGF5Q3VycmVuY3kgdG8gU1YgaWYgaXQgaXMgbWFuZGF0b3J5IGFuZCBleGlzdHMgaW4gU1YgZGVmYXVsdHMuXG5cdCAqIEBwYXJhbSB2aWV3IFZpZXcgb2YgdGhlIExSIGZpbHRlciBiYXJcblx0ICogQHBhcmFtIHN2IFNlbGVjdGlvbiBWYXJpYW50IHRvIGFwcGx5XG5cdCAqIEBwYXJhbSBzdkRlZmF1bHRzIFNlbGVjdGlvbiBWYXJpYW50IGRlZmF1bHRzXG5cdCAqL1xuXHRfYWRkRGVmYXVsdERpc3BsYXlDdXJyZW5jeVRvU1YodmlldzogVmlldywgc3Y6IFNlbGVjdGlvblZhcmlhbnQsIHN2RGVmYXVsdHM/OiBTZWxlY3Rpb25WYXJpYW50KTogdm9pZCB7XG5cdFx0aWYgKCFzdkRlZmF1bHRzIHx8IHN2RGVmYXVsdHM/LmlzRW1wdHkoKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHZpZXdEYXRhID0gdmlldy5nZXRWaWV3RGF0YSgpIGFzIExSVmlld0RhdGEsXG5cdFx0XHRtZXRhTW9kZWwgPSB2aWV3LmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0Y29udGV4dFBhdGggPSB2aWV3RGF0YS5jb250ZXh0UGF0aCB8fCBgLyR7dmlld0RhdGEuZW50aXR5U2V0fWAsXG5cdFx0XHRtZXRhQ29udGV4dCA9IG1ldGFNb2RlbC5nZXRNZXRhQ29udGV4dChjb250ZXh0UGF0aCksXG5cdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPE1ldGFNb2RlbD4gPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YUNvbnRleHQpO1xuXG5cdFx0Ly8gZ2V0RGlzcGxheUN1cnJlbmN5UHJvcGVydHlOYW1lIGFscmVhZHkgYXBwbGllcyB0aGUgaXNQYXJhbWV0ZXJpemVkIGxvZ2ljXG5cdFx0Y29uc3QgZGlzcGxheUN1cnJlbmN5UHJvcGVydHlOYW1lID0gdGhpcy5nZXREaXNwbGF5Q3VycmVuY3lQcm9wZXJ0eU5hbWUoZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdFx0Y29uc3QgZGlzcGxheUN1cnJlbmN5SXNNYW5kYXRvcnkgPSB0aGlzLl9jaGVja0lmRGlzcGxheUN1cnJlbmN5SXNSZXF1aXJlZChkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0XHRpZiAoIWRpc3BsYXlDdXJyZW5jeUlzTWFuZGF0b3J5KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc3ZPcHRpb25zID0gc3YuZ2V0U2VsZWN0T3B0aW9uKGRpc3BsYXlDdXJyZW5jeVByb3BlcnR5TmFtZSkgfHwgW10sXG5cdFx0XHRkZWZhdWx0U1ZPcHRpb25zID0gc3ZEZWZhdWx0cy5nZXRTZWxlY3RPcHRpb24oZGlzcGxheUN1cnJlbmN5UHJvcGVydHlOYW1lKSB8fCBbXSxcblx0XHRcdGRpc3BsYXlDdXJyZW5jeURlZmF1bHRFeGlzdHMgPSBkZWZhdWx0U1ZPcHRpb25zLmxlbmd0aCA+IDAsXG5cdFx0XHRub1NWRGlzcGxheUN1cnJlbmN5RXhpc3RzID0gc3ZPcHRpb25zLmxlbmd0aCA9PT0gMDtcblxuXHRcdGlmIChub1NWRGlzcGxheUN1cnJlbmN5RXhpc3RzICYmIGRpc3BsYXlDdXJyZW5jeURlZmF1bHRFeGlzdHMpIHtcblx0XHRcdGNvbnN0IGRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbiA9IGRlZmF1bHRTVk9wdGlvbnNbMF0sXG5cdFx0XHRcdHNpZ24gPSBkaXNwbGF5Q3VycmVuY3lTZWxlY3RPcHRpb25bXCJTaWduXCJdLFxuXHRcdFx0XHRvcHRpb24gPSBkaXNwbGF5Q3VycmVuY3lTZWxlY3RPcHRpb25bXCJPcHRpb25cIl0sXG5cdFx0XHRcdGxvdyA9IGRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbltcIkxvd1wiXSxcblx0XHRcdFx0aGlnaCA9IGRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbltcIkhpZ2hcIl07XG5cblx0XHRcdHN2LmFkZFNlbGVjdE9wdGlvbihkaXNwbGF5Q3VycmVuY3lQcm9wZXJ0eU5hbWUsIHNpZ24sIG9wdGlvbiwgbG93LCBoaWdoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBkYXRhIG1vZGVsIG9iamVjdCBwYXRoIGlzIHBhcmFtZXRlcml6ZWQuXG5cdCAqIExvb2tzIGZvciBhIFJlc3VsdENvbnRleHQgYW5ub3RhdGlvbiBpbiB0aGUgc3RhcnRpbmcgZW50aXR5J3MgdHlwZVxuXHQgKiBhbmQgZW5zdXJlcyB0aGVyZSdzIG5vIHRhcmdldCBlbnRpdHkgc2V0LlxuXHQgKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBUaGUgcGF0aCB0byBjaGVjay5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiBpdCdzIHBhcmFtZXRlcml6ZWQsIGZhbHNlIG90aGVyd2lzZS5cblx0ICovXG5cdHByaXZhdGUgaXNQYXJhbWV0ZXJpemVkKGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8TWV0YU1vZGVsPik6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAhIWRhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQuZW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uUmVzdWx0Q29udGV4dDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBkaXNwbGF5IGN1cnJlbmN5IHByb3BlcnR5IG5hbWUgYmFzZWQgb24gdGhlIGVudGl0eSB0eXBlJ3MgcGFyYW1ldGVyaXphdGlvbi5cblx0ICogVXNlcyB0aGUgaXNQYXJhbWV0ZXJpemVkIG1ldGhvZCB0byBkZWNpZGUgd2hpY2ggcHJvcGVydHkgbmFtZSB0byByZXR1cm4uXG5cdCAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxuXHQgKiBAcmV0dXJucyBUaGUgYXBwcm9wcmlhdGUgZGlzcGxheSBjdXJyZW5jeSBwcm9wZXJ0eSBuYW1lLlxuXHQgKi9cblx0Z2V0RGlzcGxheUN1cnJlbmN5UHJvcGVydHlOYW1lKGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8TWV0YU1vZGVsPik6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuaXNQYXJhbWV0ZXJpemVkKGRhdGFNb2RlbE9iamVjdFBhdGgpID8gUF9ESVNQTEFZX0NVUlJFTkNZX1BST1BFUlRZX05BTUUgOiBESVNQTEFZX0NVUlJFTkNZX1BST1BFUlRZX05BTUU7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIERpc3BsYXlDdXJyZW5jeSBpcyBtYW5kYXRvcnkgZm9yIGZpbHRlcmluZy5cblx0ICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGhcblx0ICogQHJldHVybnMgQm9vbGVhblxuXHQgKi9cblx0X2NoZWNrSWZEaXNwbGF5Q3VycmVuY3lJc1JlcXVpcmVkKGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8TWV0YU1vZGVsPik6IGJvb2xlYW4ge1xuXHRcdGxldCBkaXNwbGF5Q3VycmVuY3lJc01hbmRhdG9yeSA9IGZhbHNlO1xuXG5cdFx0aWYgKHRoaXMuaXNQYXJhbWV0ZXJpemVkKGRhdGFNb2RlbE9iamVjdFBhdGgpKSB7XG5cdFx0XHRkaXNwbGF5Q3VycmVuY3lJc01hbmRhdG9yeSA9IGRhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQuZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLnNvbWUoXG5cdFx0XHRcdChwYXJhbWV0ZXI6IFByb3BlcnR5KTogYm9vbGVhbiA9PiBwYXJhbWV0ZXIubmFtZSA9PT0gUF9ESVNQTEFZX0NVUlJFTkNZX1BST1BFUlRZX05BTUVcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGVudGl0eVNldDogRW50aXR5U2V0IHwgdW5kZWZpbmVkID1cblx0XHRcdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0Ll90eXBlID09PSBcIkVudGl0eVNldFwiID8gZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldCA6IHVuZGVmaW5lZCxcblx0XHRcdFx0cmVxdWlyZWRQcm9wZXJ0aWVzID0gZW50aXR5U2V0Py5hbm5vdGF0aW9ucy5DYXBhYmlsaXRpZXM/LkZpbHRlclJlc3RyaWN0aW9ucz8uUmVxdWlyZWRQcm9wZXJ0aWVzID8/IFtdO1xuXHRcdFx0ZGlzcGxheUN1cnJlbmN5SXNNYW5kYXRvcnkgPSByZXF1aXJlZFByb3BlcnRpZXMuc29tZShcblx0XHRcdFx0KHJlcXVpcmVkUHJvcGVydHk6IFByb3BlcnR5UGF0aCkgPT4gcmVxdWlyZWRQcm9wZXJ0eS52YWx1ZSA9PT0gRElTUExBWV9DVVJSRU5DWV9QUk9QRVJUWV9OQU1FXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gZGlzcGxheUN1cnJlbmN5SXNNYW5kYXRvcnk7XG5cdH1cblxuXHQvKipcblx0ICogQWN0aXZhdGUgdmFyaWFudCBmcm9tIHZhcmlhbnQgbWFuYWdlbWVudCBhbmQgcmV0dXJuIGlmIGFwcFN0YXRlIG5lZWRzIHRvIGJlIGFwcGxpZWQuXG5cdCAqIEBwYXJhbSB2YXJpYW50TWFuYWdlbWVudCBWYXJpYW50TWFuYWdlbWVudCB1c2VkIGJ5IGZpbHRlciBiYXJcblx0ICogQHBhcmFtIHJlcVN0ZFZhcmlhbnQgSWYgc3RhbmRhcmQgdmFyaWFudCBpcyByZXF1aXJlZCB0byBiZSB1c2VkXG5cdCAqIEBwYXJhbSBmaWx0ZXJWYXJpYW50QXBwbGllZCBJcyBhIGZpbHRlciB2YXJpYW50IGFscmVhZHkgYXBwbGllZFxuXHQgKiBAcmV0dXJucyBQcm9taXNlIGZvciBhc3luY2hyb25vdXMgaGFuZGxpbmdcblx0ICovXG5cdGFzeW5jIF9hY3RpdmF0ZVZhcmlhbnRBbmREZXRlcm1pbmVBcHBseUFwcFN0YXRlKFxuXHRcdHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudCB8IHVuZGVmaW5lZCxcblx0XHRyZXFTdGRWYXJpYW50OiBib29sZWFuLFxuXHRcdGZpbHRlclZhcmlhbnRBcHBsaWVkOiBib29sZWFuXG5cdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGlmICh2YXJpYW50TWFuYWdlbWVudCAmJiAhZmlsdGVyVmFyaWFudEFwcGxpZWQpIHtcblx0XHRcdGxldCB2YXJpYW50S2V5ID0gcmVxU3RkVmFyaWFudCA/IHZhcmlhbnRNYW5hZ2VtZW50LmdldFN0YW5kYXJkVmFyaWFudEtleSgpIDogdmFyaWFudE1hbmFnZW1lbnQuZ2V0RGVmYXVsdFZhcmlhbnRLZXkoKTtcblx0XHRcdGlmICh2YXJpYW50S2V5ID09PSBudWxsKSB7XG5cdFx0XHRcdHZhcmlhbnRLZXkgPSB2YXJpYW50TWFuYWdlbWVudC5nZXRJZCgpO1xuXHRcdFx0fVxuXHRcdFx0YXdhaXQgQ29udHJvbFZhcmlhbnRBcHBseUFQSS5hY3RpdmF0ZVZhcmlhbnQoe1xuXHRcdFx0XHRlbGVtZW50OiB2YXJpYW50TWFuYWdlbWVudCxcblx0XHRcdFx0dmFyaWFudFJlZmVyZW5jZTogdmFyaWFudEtleVxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gcmVxU3RkVmFyaWFudCB8fCB2YXJpYW50TWFuYWdlbWVudC5nZXREZWZhdWx0VmFyaWFudEtleSgpID09PSB2YXJpYW50TWFuYWdlbWVudC5nZXRTdGFuZGFyZFZhcmlhbnRLZXkoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBWYXJpYW50IG1hbmFnZW1lbnQgdXNlZCBieSBmaWx0ZXIgYmFyLlxuXHQgKiBAcGFyYW0gdmlldyBWaWV3IG9mIHRoZSBMUiBmaWx0ZXIgYmFyXG5cdCAqIEByZXR1cm5zIFZhcmlhbnRNYW5hZ2VtZW50IGlmIHVzZWRcblx0ICovXG5cdF9nZXRGaWx0ZXJCYXJWTSh2aWV3OiBWaWV3KTogVmFyaWFudE1hbmFnZW1lbnQgfCB1bmRlZmluZWQge1xuXHRcdGxldCB2YXJpYW50TWFuYWdlbWVudDtcblx0XHRjb25zdCB2aWV3RGF0YSA9IHZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBMUlZpZXdEYXRhO1xuXHRcdHN3aXRjaCAodmlld0RhdGEudmFyaWFudE1hbmFnZW1lbnQpIHtcblx0XHRcdGNhc2UgVmFyaWFudE1hbmFnZW1lbnRUeXBlLlBhZ2U6XG5cdFx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50ID0gdmlldy5ieUlkKFwiZmU6OlBhZ2VWYXJpYW50TWFuYWdlbWVudFwiKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Db250cm9sOlxuXHRcdFx0XHR2YXJpYW50TWFuYWdlbWVudCA9ICh2aWV3LmdldENvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcikuX2dldEZpbHRlckJhclZhcmlhbnRDb250cm9sKCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBWYXJpYW50TWFuYWdlbWVudFR5cGUuTm9uZTpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFyaWFudE1hbmFnZW1lbnQgYXMgVmFyaWFudE1hbmFnZW1lbnQgfCB1bmRlZmluZWQ7XG5cdH1cblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3JlcXVpcmUtYXdhaXRcblx0YXN5bmMgaGFuZGxlVmFyaWFudElkUGFzc2VkVmlhVVJMUGFyYW1zKG9VcmxQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRjb25zdCBhUGFnZVZhcmlhbnRJZCA9IG9VcmxQYXJhbXNbXCJzYXAtdWktZmUtdmFyaWFudC1pZFwiXSxcblx0XHRcdGFGaWx0ZXJCYXJWYXJpYW50SWQgPSBvVXJsUGFyYW1zW1wic2FwLXVpLWZlLWZpbHRlcmJhci12YXJpYW50LWlkXCJdLFxuXHRcdFx0YVRhYmxlVmFyaWFudElkID0gb1VybFBhcmFtc1tcInNhcC11aS1mZS10YWJsZS12YXJpYW50LWlkXCJdLFxuXHRcdFx0YUNoYXJ0VmFyaWFudElkID0gb1VybFBhcmFtc1tcInNhcC11aS1mZS1jaGFydC12YXJpYW50LWlkXCJdO1xuXHRcdGxldCBvVmFyaWFudElEczogVmFyaWFudElEcyB8IHVuZGVmaW5lZDtcblx0XHRpZiAoYVBhZ2VWYXJpYW50SWQgfHwgYUZpbHRlckJhclZhcmlhbnRJZCB8fCBhVGFibGVWYXJpYW50SWQgfHwgYUNoYXJ0VmFyaWFudElkKSB7XG5cdFx0XHRvVmFyaWFudElEcyA9IHtcblx0XHRcdFx0c1BhZ2VWYXJpYW50SWQ6IGFQYWdlVmFyaWFudElkICYmIGFQYWdlVmFyaWFudElkWzBdLFxuXHRcdFx0XHRzRmlsdGVyQmFyVmFyaWFudElkOiBhRmlsdGVyQmFyVmFyaWFudElkICYmIGFGaWx0ZXJCYXJWYXJpYW50SWRbMF0sXG5cdFx0XHRcdHNUYWJsZVZhcmlhbnRJZDogYVRhYmxlVmFyaWFudElkICYmIGFUYWJsZVZhcmlhbnRJZFswXSxcblx0XHRcdFx0c0NoYXJ0VmFyaWFudElkOiBhQ2hhcnRWYXJpYW50SWQgJiYgYUNoYXJ0VmFyaWFudElkWzBdXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5faGFuZGxlQ29udHJvbFZhcmlhbnRJZChvVmFyaWFudElEcyk7XG5cdH1cblxuXHRhc3luYyBfaGFuZGxlQ29udHJvbFZhcmlhbnRJZChvVmFyaWFudElEczogVmFyaWFudElEcyB8IHVuZGVmaW5lZCk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdGxldCBvVk06IFZhcmlhbnRNYW5hZ2VtZW50O1xuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRQYWdlQ29udHJvbGxlcigpPy5nZXRWaWV3KCksXG5cdFx0XHRhUHJvbWlzZXM6IFByb21pc2U8Ym9vbGVhbj5bXSA9IFtdO1xuXHRcdGNvbnN0IHNWYXJpYW50TWFuYWdlbWVudCA9IG9WaWV3LmdldFZpZXdEYXRhKCkudmFyaWFudE1hbmFnZW1lbnQ7XG5cdFx0aWYgKG9WYXJpYW50SURzICYmIG9WYXJpYW50SURzLnNQYWdlVmFyaWFudElkICYmIHNWYXJpYW50TWFuYWdlbWVudCA9PT0gXCJQYWdlXCIpIHtcblx0XHRcdG9WTSA9IG9WaWV3LmJ5SWQoXCJmZTo6UGFnZVZhcmlhbnRNYW5hZ2VtZW50XCIpIGFzIFZhcmlhbnRNYW5hZ2VtZW50O1xuXHRcdFx0dGhpcy5faGFuZGxlUGFnZVZhcmlhbnRJZChvVmFyaWFudElEcywgb1ZNLCBhUHJvbWlzZXMpO1xuXHRcdH0gZWxzZSBpZiAob1ZhcmlhbnRJRHMgJiYgc1ZhcmlhbnRNYW5hZ2VtZW50ID09PSBcIkNvbnRyb2xcIikge1xuXHRcdFx0aWYgKG9WYXJpYW50SURzLnNGaWx0ZXJCYXJWYXJpYW50SWQpIHtcblx0XHRcdFx0b1ZNID0gKG9WaWV3LmdldENvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcikuX2dldEZpbHRlckJhclZhcmlhbnRDb250cm9sKCkhO1xuXHRcdFx0XHR0aGlzLl9oYW5kbGVGaWx0ZXJCYXJWYXJpYW50Q29udHJvbElkKG9WYXJpYW50SURzLCBvVk0sIGFQcm9taXNlcyk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLmFsbChhUHJvbWlzZXMpO1xuXHR9XG5cblx0Lypcblx0ICogSGFuZGxlcyBwYWdlIGxldmVsIHZhcmlhbnQgYW5kIHBhc3NlcyB0aGUgdmFyaWFudCB0byB0aGUgZnVuY3Rpb24gdGhhdCBwdXNoZXMgdGhlIHByb21pc2UgdG8gdGhlIHByb21pc2UgYXJyYXlcblx0ICpcblx0ICogQHBhcmFtIG9WYXJpbmF0SURzIGNvbnRhaW5zIGFuIG9iamVjdCBvZiBhbGwgdmFyaWFudCBJRHNcblx0ICogQHBhcmFtIG9WTSBjb250YWlucyB0aGUgdmFpcmFudCBtYW5hZ2VtZW50IG9iamVjdCBmb3IgdGhlIHBhZ2UgdmFyaWFudFxuXHQgKiBAcGFyYW0gYVByb21pc2VzIGlzIGFuIGFycmF5IG9mIGFsbCBwcm9taXNlc1xuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2hhbmRsZVBhZ2VWYXJpYW50SWQob1ZhcmlhbnRJRHM6IFZhcmlhbnRJRHMsIG9WTTogVmFyaWFudE1hbmFnZW1lbnQsIGFQcm9taXNlczogUHJvbWlzZTxib29sZWFuPltdKTogdm9pZCB7XG5cdFx0b1ZNLmdldFZhcmlhbnRzKCk/LmZvckVhY2goKG9WYXJpYW50OiBWYXJpYW50T2JqZWN0KSA9PiB7XG5cdFx0XHR0aGlzLl9maW5kQW5kUHVzaFZhcmlhbnRUb1Byb21pc2Uob1ZhcmlhbnQsIG9WYXJpYW50SURzLnNQYWdlVmFyaWFudElkLCBvVk0sIGFQcm9taXNlcywgdHJ1ZSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKlxuXHQgKiBIYW5kbGVzIGNvbnRyb2wgbGV2ZWwgdmFyaWFudCBmb3IgZmlsdGVyIGJhciBhbmQgcGFzc2VzIHRoZSB2YXJpYW50IHRvIHRoZSBmdW5jdGlvbiB0aGF0IHB1c2hlcyB0aGUgcHJvbWlzZSB0byB0aGUgcHJvbWlzZSBhcnJheVxuXHQgKlxuXHQgKiBAcGFyYW0gb1ZhcmluYXRJRHMgY29udGFpbnMgYW4gb2JqZWN0IG9mIGFsbCB2YXJpYW50IElEc1xuXHQgKiBAcGFyYW0gb1ZNIGNvbnRhaW5zIHRoZSB2YWlyYW50IG1hbmFnZW1lbnQgb2JqZWN0IGZvciB0aGUgZmlsdGVyIGJhclxuXHQgKiBAcGFyYW0gYVByb21pc2VzIGlzIGFuIGFycmF5IG9mIGFsbCBwcm9taXNlc1xuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblxuXHRfaGFuZGxlRmlsdGVyQmFyVmFyaWFudENvbnRyb2xJZChvVmFyaWFudElEczogVmFyaWFudElEcywgb1ZNOiBWYXJpYW50TWFuYWdlbWVudCwgYVByb21pc2VzOiBQcm9taXNlPGJvb2xlYW4+W10pOiB2b2lkIHtcblx0XHRpZiAob1ZNKSB7XG5cdFx0XHRvVk0uZ2V0VmFyaWFudHMoKS5mb3JFYWNoKChvVmFyaWFudDogVmFyaWFudE9iamVjdCkgPT4ge1xuXHRcdFx0XHR0aGlzLl9maW5kQW5kUHVzaFZhcmlhbnRUb1Byb21pc2Uob1ZhcmlhbnQsIG9WYXJpYW50SURzLnNGaWx0ZXJCYXJWYXJpYW50SWQsIG9WTSwgYVByb21pc2VzLCB0cnVlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qXG5cdCAqIE1hdGNoZXMgdGhlIHZhcmlhbnQgSUQgcHJvdmlkZWQgaW4gdGhlIHVybCB0byB0aGUgYXZhaWxhYmxlIHZhaXJhbnQgSURzIGFuZCBwdXNoZXMgdGhlIGFwcHJvcHJpYXRlIHByb21pc2UgdG8gdGhlIHByb21pc2UgYXJyYXlcblx0ICpcblx0ICogQHBhcmFtIG9WYXJpYW50IGlzIGFuIG9iamVjdCBmb3IgYSBzcGVjaWZpYyB2YXJpYW50XG5cdCAqIEBwYXJhbSBzVmFyaWFudElkIGlzIHRoZSB2YXJpYW50IElEIHByb3ZpZGVkIGluIHRoZSB1cmxcblx0ICogQHBhcmFtIG9WTSBpcyB0aGUgdmFyaWFudCBtYW5hZ2VtZW50IG9iamVjdCBmb3IgdGhlIHNwZWNmaWMgdmFyaWFudFxuXHQgKiBAcGFyYW0gYVByb21pc2VzIGlzIGFuIGFycmF5IG9mIHByb21pc2VzXG5cdCAqIEBwYXJhbSBiRmlsdGVyVmFyaWFudEFwcGxpZWQgaXMgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIHdoaWNoIGlzIHNldCB0byB0dXJlIGluIGNhc2UgdGhlIGZpbHRlciB2YXJpYW50IGlzIGFwcGxpZWRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9maW5kQW5kUHVzaFZhcmlhbnRUb1Byb21pc2UoXG5cdFx0Ly9UaGlzIGZ1bmN0aW9uIGZpbmRzIHRoZSBzdWl0YWJsZSB2YXJpYW50IGZvciB0aGUgdmFyaWFudElEIHByb3ZpZGVkIGluIHRoZSB1cmwgYW5kIHB1c2hlcyB0aGVtIHRvIHRoZSBwcm9taXNlIGFycmF5XG5cdFx0b1ZhcmlhbnQ6IFZhcmlhbnRPYmplY3QsXG5cdFx0c1ZhcmlhbnRJZDogc3RyaW5nLFxuXHRcdG9WTTogVmFyaWFudE1hbmFnZW1lbnQsXG5cdFx0YVByb21pc2VzOiBQcm9taXNlPGJvb2xlYW4+W10sXG5cdFx0YkZpbHRlclZhcmlhbnRBcHBsaWVkPzogYm9vbGVhblxuXHQpOiB2b2lkIHtcblx0XHRpZiAob1ZhcmlhbnQua2V5ID09PSBzVmFyaWFudElkKSB7XG5cdFx0XHRhUHJvbWlzZXMucHVzaCh0aGlzLl9hcHBseUNvbnRyb2xWYXJpYW50KG9WTSwgc1ZhcmlhbnRJZCwgYkZpbHRlclZhcmlhbnRBcHBsaWVkKSk7XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgX2FwcGx5Q29udHJvbFZhcmlhbnQob1ZhcmlhbnQ6IFZhcmlhbnRNYW5hZ2VtZW50LCBzVmFyaWFudElEOiBzdHJpbmcsIGJGaWx0ZXJWYXJpYW50QXBwbGllZCA9IGZhbHNlKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0Y29uc3Qgc1ZhcmlhbnRSZWZlcmVuY2UgPSB0aGlzLl9jaGVja0lmVmFyaWFudElkSXNBdmFpbGFibGUob1ZhcmlhbnQsIHNWYXJpYW50SUQpID8gc1ZhcmlhbnRJRCA6IG9WYXJpYW50LmdldFN0YW5kYXJkVmFyaWFudEtleSgpO1xuXHRcdGNvbnN0IG9WTSA9IENvbnRyb2xWYXJpYW50QXBwbHlBUEkuYWN0aXZhdGVWYXJpYW50KHtcblx0XHRcdGVsZW1lbnQ6IG9WYXJpYW50LFxuXHRcdFx0dmFyaWFudFJlZmVyZW5jZTogc1ZhcmlhbnRSZWZlcmVuY2Vcblx0XHR9KTtcblx0XHRyZXR1cm4gb1ZNLnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIGJGaWx0ZXJWYXJpYW50QXBwbGllZDtcblx0XHR9KTtcblx0fVxuXG5cdF9jaGVja0lmVmFyaWFudElkSXNBdmFpbGFibGUob1ZNOiBWYXJpYW50TWFuYWdlbWVudCwgc1ZhcmlhbnRJZDogc3RyaW5nIHwgbnVsbCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGFWYXJpYW50cyA9IG9WTS5nZXRWYXJpYW50cygpO1xuXHRcdGxldCBiSXNDb250cm9sU3RhdGVWYXJpYW50QXZhaWxhYmxlID0gZmFsc2U7XG5cdFx0YVZhcmlhbnRzLmZvckVhY2goZnVuY3Rpb24gKG9WYXJpYW50KSB7XG5cdFx0XHRpZiAob1ZhcmlhbnQuZ2V0S2V5KCkgPT09IHNWYXJpYW50SWQpIHtcblx0XHRcdFx0YklzQ29udHJvbFN0YXRlVmFyaWFudEF2YWlsYWJsZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGJJc0NvbnRyb2xTdGF0ZVZhcmlhbnRBdmFpbGFibGU7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIEZpbHRlckJhciBjb250cm9sLlxuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRpZCE6IHN0cmluZztcblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgcmVsYXRpdmUgcGF0aCBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIG1ldGFtb2RlbCwgYmFzZWQgb24gdGhlIGN1cnJlbnQgY29udGV4dFBhdGguXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRleHBlY3RlZEFubm90YXRpb25zOiBbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25GaWVsZHNcIl0sXG5cdFx0ZXhwZWN0ZWRUeXBlczogW1wiRW50aXR5U2V0XCIsIFwiRW50aXR5VHlwZVwiXVxuXHR9KVxuXHRtZXRhUGF0aCE6IHN0cmluZztcblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgcGF0aCBvZiB0aGUgY29udGV4dCB1c2VkIGluIHRoZSBjdXJyZW50IHBhZ2Ugb3IgYmxvY2suXG5cdCAqIFRoaXMgc2V0dGluZyBpcyBkZWZpbmVkIGJ5IHRoZSBmcmFtZXdvcmsuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRleHBlY3RlZFR5cGVzOiBbXCJFbnRpdHlTZXRcIiwgXCJFbnRpdHlUeXBlXCIsIFwiTmF2aWdhdGlvblByb3BlcnR5XCJdXG5cdH0pXG5cdGNvbnRleHRQYXRoITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBJZiB0cnVlLCB0aGUgc2VhcmNoIGlzIHRyaWdnZXJlZCBhdXRvbWF0aWNhbGx5IHdoZW4gYSBmaWx0ZXIgdmFsdWUgaXMgY2hhbmdlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcblx0bGl2ZU1vZGU/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBQYXJhbWV0ZXIgd2hpY2ggc2V0cyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgRmlsdGVyQmFyIGJ1aWxkaW5nIGJsb2NrXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IHRydWUgfSlcblx0dmlzaWJsZT86IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIERpc3BsYXlzIHBvc3NpYmxlIGVycm9ycyBkdXJpbmcgdGhlIHNlYXJjaCBpbiBhIG1lc3NhZ2UgYm94XG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IHRydWUgfSlcblx0c2hvd01lc3NhZ2VzPzogYm9vbGVhbjtcblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgJ0NsZWFyJyBidXR0b24gb24gdGhlIEZpbHRlckJhci5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcblx0c2hvd0NsZWFyQnV0dG9uPzogYm9vbGVhbjtcblxuXHQvKipcblx0ICogQWdncmVnYXRlIGZpbHRlciBmaWVsZHMgb2YgdGhlIEZpbHRlckJhciBidWlsZGluZyBibG9ja1xuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC5mZS5tYWNyb3MuZmlsdGVyQmFyLkZpbHRlckZpZWxkXCIsIG11bHRpcGxlOiB0cnVlIH0pXG5cdGZpbHRlckZpZWxkcz86IEZpbHRlckZpZWxkW107XG5cblx0Y29udGVudCE6IEZpbHRlckJhcjtcblxuXHQvKipcblx0ICogVGhpcyBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSAnR28nIGJ1dHRvbiBpcyBwcmVzc2VkIG9yIGFmdGVyIGEgY29uZGl0aW9uIGNoYW5nZS5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGV2ZW50KClcblx0c2VhcmNoITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlICdHbycgYnV0dG9uIGlzIHByZXNzZWQgb3IgYWZ0ZXIgYSBjb25kaXRpb24gY2hhbmdlLiBUaGlzIGlzIG9ubHkgaW50ZXJuYWxseSB1c2VkIGJ5IHNhcC5mZSAoRmlvcmkgZWxlbWVudHMpIGFuZFxuXHQgKiBleHBvc2VzIHBhcmFtZXRlcnMgZnJvbSBpbnRlcm5hbCBNREMtRmlsdGVyQmFyIHNlYXJjaCBldmVudFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0QGV2ZW50KClcblx0aW50ZXJuYWxTZWFyY2ghOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgYWZ0ZXIgZWl0aGVyIGEgZmlsdGVyIHZhbHVlIG9yIHRoZSB2aXNpYmlsaXR5IG9mIGEgZmlsdGVyIGl0ZW0gaGFzIGJlZW4gY2hhbmdlZC4gVGhlIGV2ZW50IGNvbnRhaW5zIGNvbmRpdGlvbnMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycy5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGV2ZW50KClcblx0ZmlsdGVyQ2hhbmdlZCE6IHN0cmluZztcblxuXHQvKipcblx0ICogVGhpcyBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSAnQ2xlYXInIGJ1dHRvbiBpcyBwcmVzc2VkLiBUaGlzIGlzIG9ubHkgcG9zc2libGUgd2hlbiB0aGUgJ0NsZWFyJyBidXR0b24gaXMgZW5hYmxlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGV2ZW50KClcblx0YWZ0ZXJDbGVhciE6IHN0cmluZztcblxuXHQvKipcblx0ICogVGhpcyBldmVudCBpcyBmaXJlZCBhZnRlciBlaXRoZXIgYSBmaWx0ZXIgdmFsdWUgb3IgdGhlIHZpc2liaWxpdHkgb2YgYSBmaWx0ZXIgaXRlbSBoYXMgYmVlbiBjaGFuZ2VkLiBUaGUgZXZlbnQgY29udGFpbnMgY29uZGl0aW9ucyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzLlxuXHQgKiBUaGlzIGlzIHVzZWQgaW50ZXJuYWxseSBvbmx5IGJ5IHNhcC5mZSAoRmlvcmkgRWxlbWVudHMpLiBUaGlzIGV4cG9zZXMgcGFyYW1ldGVycyBmcm9tIHRoZSBNREMtRmlsdGVyQmFyIGZpbHRlckNoYW5nZWQgZXZlbnQgdGhhdCBpcyB1c2VkIGJ5IHNhcC5mZSBpbiBzb21lIGNhc2VzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0QGV2ZW50KClcblx0aW50ZXJuYWxGaWx0ZXJDaGFuZ2VkITogc3RyaW5nO1xuXG5cdHByaXZhdGUgdGVsZW1ldHJ5PzogRmlsdGVyQmFyVGVsZW1ldHJ5O1xuXG5cdGNvbnN0cnVjdG9yKHByb3BzPzogJENvbnRyb2xTZXR0aW5ncyAmIFByb3BlcnRpZXNPZjxGaWx0ZXJCYXJBUEk+LCBvdGhlcnM/OiAkQ29udHJvbFNldHRpbmdzKSB7XG5cdFx0c3VwZXIocHJvcHMsIG90aGVycyk7XG5cdFx0dGhpcy50ZWxlbWV0cnkgPSBuZXcgRmlsdGVyQmFyVGVsZW1ldHJ5KHRoaXMpO1xuXHRcdHRoaXMuYXR0YWNoU3RhdGVDaGFuZ2VIYW5kbGVyKCk7XG5cdH1cblxuXHRwcml2YXRlIGF0dGFjaFN0YXRlQ2hhbmdlSGFuZGxlcigpOiB2b2lkIHtcblx0XHRTdGF0ZVV0aWwuZGV0YWNoU3RhdGVDaGFuZ2UodGhpcy5zdGF0ZUNoYW5nZUhhbmRsZXIpO1xuXHRcdFN0YXRlVXRpbC5hdHRhY2hTdGF0ZUNoYW5nZSh0aGlzLnN0YXRlQ2hhbmdlSGFuZGxlcik7XG5cdH1cblxuXHRzdGF0ZUNoYW5nZUhhbmRsZXIob0V2ZW50OiBFdmVudDx7IGNvbnRyb2w6IENvbnRyb2wgfT4pOiB2b2lkIHtcblx0XHRjb25zdCBjb250cm9sID0gb0V2ZW50LmdldFBhcmFtZXRlcihcImNvbnRyb2xcIik7XG5cdFx0aWYgKGNvbnRyb2wuaXNBPEZpbHRlckJhcj4oXCJzYXAudWkubWRjLkZpbHRlckJhclwiKSkge1xuXHRcdFx0Y29uc3QgZmlsdGVyQmFyQVBJID0gY29udHJvbC5nZXRQYXJlbnQoKSBhcyB1bmtub3duIGFzIHsgaGFuZGxlU3RhdGVDaGFuZ2U/OiBGdW5jdGlvbiB9O1xuXHRcdFx0aWYgKGZpbHRlckJhckFQST8uaGFuZGxlU3RhdGVDaGFuZ2UpIHtcblx0XHRcdFx0ZmlsdGVyQmFyQVBJLmhhbmRsZVN0YXRlQ2hhbmdlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0QHhtbEV2ZW50SGFuZGxlcigpXG5cdGhhbmRsZVNlYXJjaChvRXZlbnQ6IEZpbHRlckJhckJhc2UkU2VhcmNoRXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCBvRmlsdGVyQmFyID0gb0V2ZW50LmdldFNvdXJjZSgpIGFzIEZpbHRlckJhciB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBldmVudFBhcmFtZXRlcnMgPSBvRXZlbnQuZ2V0UGFyYW1ldGVycygpO1xuXHRcdGlmIChvRmlsdGVyQmFyKSB7XG5cdFx0XHRjb25zdCBjb25kaXRpb25zID0gKG9GaWx0ZXJCYXIuZ2V0RmlsdGVyQ29uZGl0aW9ucygpID8/IHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCBDb25kaXRpb25PYmplY3RbXT47XG5cdFx0XHRjb25zdCBwcmVwYXJlZEV2ZW50UGFyYW1ldGVycyA9IHRoaXMuX3ByZXBhcmVFdmVudFBhcmFtZXRlcnMob0ZpbHRlckJhcik7XG5cdFx0XHR0aGlzLnRlbGVtZXRyeT8ub25TZWFyY2goZXZlbnRQYXJhbWV0ZXJzLCBjb25kaXRpb25zKTtcblx0XHRcdHRoaXMuZmlyZUV2ZW50KFwiaW50ZXJuYWxTZWFyY2hcIiwgbWVyZ2UoeyBjb25kaXRpb25zOiBjb25kaXRpb25zIH0sIGV2ZW50UGFyYW1ldGVycykpO1xuXHRcdFx0dGhpcy5maXJlRXZlbnQoXCJzZWFyY2hcIiwgbWVyZ2UoeyByZWFzb246IGV2ZW50UGFyYW1ldGVycy5yZWFzb24gfSwgcHJlcGFyZWRFdmVudFBhcmFtZXRlcnMpKTtcblx0XHR9XG5cdH1cblxuXHRAeG1sRXZlbnRIYW5kbGVyKClcblx0aGFuZGxlRmlsdGVyQ2hhbmdlZChvRXZlbnQ6IFVJNUV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3QgZmlsdGVyQmFyID0gb0V2ZW50LmdldFNvdXJjZSgpIGFzIEZpbHRlckJhciB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBvRXZlbnRQYXJhbWV0ZXJzID0gb0V2ZW50LmdldFBhcmFtZXRlcnMoKTtcblx0XHRpZiAoZmlsdGVyQmFyKSB7XG5cdFx0XHRjb25zdCBvQ29uZGl0aW9ucyA9IGZpbHRlckJhci5nZXRGaWx0ZXJDb25kaXRpb25zKCk7XG5cdFx0XHRjb25zdCBldmVudFBhcmFtZXRlcnM6IG9iamVjdCA9IHRoaXMuX3ByZXBhcmVFdmVudFBhcmFtZXRlcnMoZmlsdGVyQmFyKTtcblx0XHRcdHRoaXMudGVsZW1ldHJ5Py5vbkZpbHRlcnNDaGFuZ2VkKHRoaXMuX2dldEZpbHRlckJhclJlYXNvbihmaWx0ZXJCYXIpKTtcblx0XHRcdHRoaXMuZmlyZUV2ZW50KFwiaW50ZXJuYWxGaWx0ZXJDaGFuZ2VkXCIsIG1lcmdlKHsgY29uZGl0aW9uczogb0NvbmRpdGlvbnMgfSwgb0V2ZW50UGFyYW1ldGVycykpO1xuXHRcdFx0dGhpcy5maXJlRXZlbnQoXCJmaWx0ZXJDaGFuZ2VkXCIsIGV2ZW50UGFyYW1ldGVycyk7XG5cdFx0fVxuXHR9XG5cblx0X2dldEZpbHRlckJhclJlYXNvbihmaWx0ZXJCYXI6IEZpbHRlckJhciAmIHsgX3NSZWFzb24/OiBzdHJpbmcgfSk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGZpbHRlckJhcj8uX3NSZWFzb24gPz8gXCJcIjtcblx0fVxuXG5cdF9wcmVwYXJlRXZlbnRQYXJhbWV0ZXJzKG9GaWx0ZXJCYXI6IEZpbHRlckJhcik6IFBhcnRpYWw8SW50ZXJuYWxCaW5kaW5nSW5mbz4ge1xuXHRcdGNvbnN0IHsgcGFyYW1ldGVycywgZmlsdGVycywgc2VhcmNoIH0gPSBGaWx0ZXJVdGlscy5nZXRGaWx0ZXJzKG9GaWx0ZXJCYXIgYXMgdW5rbm93biBhcyBJRmlsdGVyQ29udHJvbCkgfHwge307XG5cblx0XHRyZXR1cm4geyBwYXJhbWV0ZXJzLCBmaWx0ZXJzLCBzZWFyY2ggfTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIGZpbHRlciB2YWx1ZXMgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eSBpbiB0aGUgZmlsdGVyIGJhci5cblx0ICogVGhlIGZpbHRlciB2YWx1ZXMgY2FuIGJlIGVpdGhlciBhIHNpbmdsZSB2YWx1ZSBvciBhbiBhcnJheSBvZiB2YWx1ZXMuXG5cdCAqIEVhY2ggZmlsdGVyIHZhbHVlIG11c3QgYmUgcmVwcmVzZW50ZWQgYXMgYSBwcmltaXRpdmUgdmFsdWUuXG5cdCAqIEBwYXJhbSBzQ29uZGl0aW9uUGF0aCBUaGUgcGF0aCB0byB0aGUgcHJvcGVydHkgYXMgYSBjb25kaXRpb24gcGF0aFxuXHQgKiBAcGFyYW0gW3NPcGVyYXRvcl0gVGhlIG9wZXJhdG9yIHRvIGJlIHVzZWQgKG9wdGlvbmFsKSAtIGlmIG5vdCBzZXQsIHRoZSBkZWZhdWx0IG9wZXJhdG9yIChFUSkgd2lsbCBiZSB1c2VkXG5cdCAqIEBwYXJhbSB2VmFsdWVzIFRoZSB2YWx1ZXMgdG8gYmUgYXBwbGllZFxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgZm9yIGFzeW5jaHJvbm91cyBoYW5kbGluZ1xuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhc3luYyBzZXRGaWx0ZXJWYWx1ZXMoXG5cdFx0c0NvbmRpdGlvblBhdGg6IHN0cmluZyxcblx0XHRzT3BlcmF0b3I6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHR2VmFsdWVzPzogdW5kZWZpbmVkIHwgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IHN0cmluZ1tdIHwgbnVtYmVyW10gfCBib29sZWFuW11cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuXHRcdFx0dlZhbHVlcyA9IHNPcGVyYXRvcjtcblx0XHRcdHJldHVybiBGaWx0ZXJVdGlscy5zZXRGaWx0ZXJWYWx1ZXModGhpcy5jb250ZW50LCBzQ29uZGl0aW9uUGF0aCwgdlZhbHVlcyk7XG5cdFx0fVxuXHRcdHJldHVybiBGaWx0ZXJVdGlscy5zZXRGaWx0ZXJWYWx1ZXModGhpcy5jb250ZW50LCBzQ29uZGl0aW9uUGF0aCwgc09wZXJhdG9yLCB2VmFsdWVzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIEFjdGl2ZSBGaWx0ZXJzIFRleHQgU3VtbWFyeSBmb3IgdGhlIGZpbHRlciBiYXIuXG5cdCAqIEByZXR1cm5zIEFjdGl2ZSBmaWx0ZXJzIHN1bW1hcnkgYXMgdGV4dFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRnZXRBY3RpdmVGaWx0ZXJzVGV4dCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLmNvbnRlbnQ/LmdldEFzc2lnbmVkRmlsdGVyc1RleHQoKT8uZmlsdGVyc1RleHQgfHwgXCJcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBQcm92aWRlcyBhbGwgdGhlIGZpbHRlcnMgdGhhdCBhcmUgY3VycmVudGx5IGFjdGl2ZVxuXHQgKiBhbG9uZyB3aXRoIHRoZSBzZWFyY2ggZXhwcmVzc2lvbi5cblx0ICogQHJldHVybnMgQW4gYXJyYXkgb2YgYWN0aXZlIGZpbHRlcnMgYW5kIHRoZSBzZWFyY2ggZXhwcmVzc2lvbi5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0Z2V0RmlsdGVycygpOiBvYmplY3Qge1xuXHRcdHJldHVybiBGaWx0ZXJVdGlscy5nZXRGaWx0ZXJzKHRoaXMuY29udGVudCBhcyBJRmlsdGVyQ29udHJvbCkgfHwge307XG5cdH1cblxuXHQvKipcblx0ICogVHJpZ2dlcnMgdGhlIEFQSSBzZWFyY2ggb24gdGhlIGZpbHRlciBiYXIuXG5cdCAqIEByZXR1cm5zIFJldHVybnMgYSBwcm9taXNlIHdoaWNoIHJlc29sdmVzIGlmIGZpbHRlciBnbyBpcyB0cmlnZ2VyZWQgc3VjY2Vzc2Z1bGx5OyBvdGhlcndpc2UgZ2V0cyByZWplY3RlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgdHJpZ2dlclNlYXJjaCgpOiBQcm9taXNlPG9iamVjdCB8IHVuZGVmaW5lZD4ge1xuXHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuY29udGVudDtcblx0XHR0cnkge1xuXHRcdFx0aWYgKGZpbHRlckJhcikge1xuXHRcdFx0XHRhd2FpdCBmaWx0ZXJCYXIud2FpdEZvckluaXRpYWxpemF0aW9uKCk7XG5cdFx0XHRcdHJldHVybiBhd2FpdCBmaWx0ZXJCYXIudHJpZ2dlclNlYXJjaCgpO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcblx0XHRcdExvZy5lcnJvcihgRkUgOiBCdWlsZGluZ2Jsb2NrIDogRmlsdGVyQmFyIDogJHttZXNzYWdlfWApO1xuXHRcdFx0dGhyb3cgRXJyb3IobWVzc2FnZSk7XG5cdFx0fVxuXHR9XG5cblx0aXNTZW1hbnRpY0RhdGVGaWx0ZXJBcHBsaWVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBTZW1hbnRpY0RhdGVPcGVyYXRvcnMuaGFzU2VtYW50aWNEYXRlT3BlcmF0aW9ucyh0aGlzLmNvbnRlbnQuZ2V0Q29uZGl0aW9ucygpLCBmYWxzZSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzZWxlY3Rpb24gdmFyaWFudCBmcm9tIHRoZSBmaWx0ZXIgYmFyLlxuXHQgKiBOb3RlOiBUaGlzIG1ldGhvZCByZXR1cm5zIGFsbCB0aGUgZmlsdGVyIHZhbHVlcyB0aGF0IGFyZSBzZXQgaW4gdGhlIGZpbHRlciBiYXIsIGluY2x1ZGluZyB0aGUgdGV4dCBmcm9tIHRoZSBzZWFyY2ggZmllbGQgKHdpdGggJHNlYXJjaCBhcyB0aGUgcHJvcGVydHkgbmFtZSkuIEhvd2V2ZXIsIGl0IGRvZXNuJ3QgcmV0dXJuIGFueSBmaWx0ZXIgZmllbGQgY29uZGl0aW9uIHRoYXQgdXNlcyBhIGN1c3RvbSBvcGVyYXRvci5cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHdoaWNoIHJlc29sdmVzIHdpdGggYSB7QGxpbmsgc2FwLmZlLm5hdmlnYXRpb24uU2VsZWN0aW9uVmFyaWFudH1cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgZ2V0U2VsZWN0aW9uVmFyaWFudCgpOiBQcm9taXNlPFNlbGVjdGlvblZhcmlhbnQ+IHtcblx0XHRjb25zdCBzZWxlY3Rpb25WYXJpYW50ID0gYXdhaXQgc3RhdGVIZWxwZXIuZ2V0U2VsZWN0aW9uVmFyaWFudCh0aGlzLmdldENvbnRlbnQoKSk7XG5cdFx0Y29uc3QgY29udHJvbGxlciA9IHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcjtcblx0XHRpZiAoY29udHJvbGxlciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCB2aWV3ID0gY29udHJvbGxlcj8uZ2V0VmlldygpLFxuXHRcdFx0XHRhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodmlldyksXG5cdFx0XHRcdG5hdmlnYXRpb25TZXJ2aWNlID0gYXBwQ29tcG9uZW50Py5nZXROYXZpZ2F0aW9uU2VydmljZSgpLFxuXHRcdFx0XHRkYXRhTW9kZWxPYmplY3QgPSB0aGlzLmdldERhdGFNb2RlbE9iamVjdEZvck1ldGFQYXRoKHRoaXMubWV0YVBhdGgpO1xuXHRcdFx0aWYgKGRhdGFNb2RlbE9iamVjdD8udGFyZ2V0RW50aXR5U2V0Py5uYW1lKSB7XG5cdFx0XHRcdGNvbnN0IHNDb250ZXh0VXJsID1cblx0XHRcdFx0XHRkYXRhTW9kZWxPYmplY3Q/LnRhcmdldEVudGl0eVNldD8ubmFtZSAmJlxuXHRcdFx0XHRcdG5hdmlnYXRpb25TZXJ2aWNlPy5jb25zdHJ1Y3RDb250ZXh0VXJsKGRhdGFNb2RlbE9iamVjdD8udGFyZ2V0RW50aXR5U2V0Py5uYW1lLCB2aWV3LmdldE1vZGVsKCkpO1xuXHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50LnNldEZpbHRlckNvbnRleHRVcmwoc0NvbnRleHRVcmwpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gc2VsZWN0aW9uVmFyaWFudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGxpc3Qgb2YgbWFuZGF0b3J5IGZpbHRlciBwcm9wZXJ0eSBuYW1lcy5cblx0ICogQHJldHVybnMgVGhlIGxpc3Qgb2YgbWFuZGF0b3J5IGZpbHRlciBwcm9wZXJ0eSBuYW1lc1xuXHQgKi9cblx0Z2V0TWFuZGF0b3J5RmlsdGVyUHJvcGVydHlOYW1lcygpOiBzdHJpbmdbXSB7XG5cdFx0cmV0dXJuICh0aGlzLmNvbnRlbnQuZ2V0UHJvcGVydHlJbmZvU2V0KCkgYXMgQ29udHJvbFByb3BlcnR5SW5mb1tdKVxuXHRcdFx0LmZpbHRlcihmdW5jdGlvbiAoZmlsdGVyUHJvcCkge1xuXHRcdFx0XHRyZXR1cm4gZmlsdGVyUHJvcC5yZXF1aXJlZDtcblx0XHRcdH0pXG5cdFx0XHQubWFwKGZ1bmN0aW9uIChyZXF1aXJlZFByb3ApIHtcblx0XHRcdFx0cmV0dXJuIHJlcXVpcmVkUHJvcC5jb25kaXRpb25QYXRoO1xuXHRcdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBmaWx0ZXIgYmFyIHBhcmFtZXRlcnMgZm9yIGEgcGFyYW1ldGVyaXplZCBzZXJ2aWNlLlxuXHQgKiBAcmV0dXJucyBBcnJheSBvZiBwYXJhbWV0ZXJzIGNvbmZpZ3VyZWQgaW4gYSBwYXJhbWV0ZXJpemVkIHNlcnZpY2Vcblx0ICovXG5cblx0Z2V0UGFyYW1ldGVycygpOiBzdHJpbmdbXSB7XG5cdFx0Y29uc3QgZmlsdGVyQmFyID0gdGhpcy5jb250ZW50O1xuXHRcdGNvbnN0IHBhcmFtZXRlcnMgPSBmaWx0ZXJCYXIuZGF0YShcInBhcmFtZXRlcnNcIik7XG5cdFx0aWYgKHBhcmFtZXRlcnMpIHtcblx0XHRcdHJldHVybiBBcnJheS5pc0FycmF5KHBhcmFtZXRlcnMpID8gcGFyYW1ldGVycyA6IEpTT04ucGFyc2UocGFyYW1ldGVycyk7XG5cdFx0fVxuXHRcdHJldHVybiBbXTtcblx0fVxuXG5cdGdldFZhcmlhbnQoKTogVmFyaWFudERhdGEgfCB1bmRlZmluZWQge1xuXHRcdGxldCBjdXJyZW50VmFyaWFudDtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgdmFyaWFudE1vZGVsID0gdGhpcy5nZXRNb2RlbChcIiRGbGV4VmFyaWFudHNcIikgYXMgVmFyaWFudE1vZGVsIHwgdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgdmFyaWFudEJhY2tSZWZlcmVuY2UgPSB0aGlzLmNvbnRlbnQuZ2V0VmFyaWFudEJhY2tyZWZlcmVuY2UoKTtcblxuXHRcdFx0aWYgKHZhcmlhbnRNb2RlbCAmJiB2YXJpYW50QmFja1JlZmVyZW5jZSkge1xuXHRcdFx0XHRjdXJyZW50VmFyaWFudCA9IHZhcmlhbnRNb2RlbC5nZXRWYXJpYW50KHZhcmlhbnRNb2RlbC5nZXRDdXJyZW50VmFyaWFudFJlZmVyZW5jZSh2YXJpYW50QmFja1JlZmVyZW5jZSkpO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdExvZy5kZWJ1ZyhcIkNvdWxkbid0IGZldGNoIHZhcmlhbnQgXCIsIGUgYXMgc3RyaW5nKTtcblx0XHR9XG5cdFx0cmV0dXJuIGN1cnJlbnRWYXJpYW50O1xuXHR9XG5cblx0LyoqXG5cdCAqIFNob3dzIG9yIGhpZGVzIGFueSBmaWx0ZXIgZmllbGQgZnJvbSB0aGUgZmlsdGVyIGJhci5cblx0ICogVGhlIHByb3BlcnR5IHdpbGwgbm90IGJlIGhpZGRlbiBpbnNpZGUgdGhlIGFkYXB0YXRpb24gZGlhbG9nIGFuZCBtYXkgYmUgcmUtYWRkZWQuXG5cdCAqIEBwYXJhbSBjb25kaXRpb25QYXRoIFRoZSBwYXRoIHRvIHRoZSBwcm9wZXJ0eSBhcyBhIGNvbmRpdGlvbiBwYXRoXG5cdCAqIEBwYXJhbSB2aXNpYmxlIFdoZXRoZXIgaXQgc2hvdWxkIGJlIHNob3duIG9yIGhpZGRlblxuXHQgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSByZXNvbHZpbmcgb25jZSB0aGUgY2hhbmdlIGluIHZpc2liaWxpdHkgd2FzIGFwcGxpZWRcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgc2V0RmlsdGVyRmllbGRWaXNpYmxlKGNvbmRpdGlvblBhdGg6IHN0cmluZywgdmlzaWJsZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGF3YWl0IFN0YXRlVXRpbC5hcHBseUV4dGVybmFsU3RhdGUodGhpcy5jb250ZW50LCB7IGl0ZW1zOiBbeyBuYW1lOiBjb25kaXRpb25QYXRoLCB2aXNpYmxlIH1dIH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHZpc2liaWxpdHkgb2YgYSBmaWx0ZXIgZmllbGQuXG5cdCAqIEBwYXJhbSBjb25kaXRpb25QYXRoIFRoZSBwYXRoIHRvIHRoZSBwcm9wZXJ0eSBhcyBhIGNvbmRpdGlvbiBwYXRoXG5cdCAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gY2hlY2sgd2hldGhlciB0aGUgZmlsdGVyIGZpZWxkIGlzIHZpc2libGUgb3Igbm90LlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhc3luYyBnZXRGaWx0ZXJGaWVsZFZpc2libGUoY29uZGl0aW9uUGF0aDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0Y29uc3Qgc3RhdGU6IEV4dGVybmFsU3RhdGVUeXBlID0gYXdhaXQgU3RhdGVVdGlsLnJldHJpZXZlRXh0ZXJuYWxTdGF0ZSh0aGlzLmNvbnRlbnQpO1xuXHRcdHJldHVybiAhIXN0YXRlLml0ZW1zLmZpbmQoKGl0ZW0pID0+IGl0ZW0ubmFtZSA9PT0gY29uZGl0aW9uUGF0aCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgYXNzb2NpYXRlZCB2YXJpYW50IG1hbmFnZW1lbnQuXG5cdCAqIEByZXR1cm5zIFRoZSB7QGxpbmsgc2FwLnVpLmZsLnZhcmlhbnRzLlZhcmlhbnRNYW5hZ2VtZW50fSBjb250cm9sIGFzc29jaWF0ZWQgd2l0aCB0aGUgZmlsdGVyIGJhci5cblx0ICovXG5cdGdldFZhcmlhbnRNYW5hZ2VtZW50KCk6IFZhcmlhbnRNYW5hZ2VtZW50IHtcblx0XHRjb25zdCB2YXJpYW50QmFja3JlZmVyZW5jZSA9IHRoaXMuY29udGVudC5nZXRWYXJpYW50QmFja3JlZmVyZW5jZSgpO1xuXHRcdGlmICh2YXJpYW50QmFja3JlZmVyZW5jZSkge1xuXHRcdFx0cmV0dXJuIFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQodmFyaWFudEJhY2tyZWZlcmVuY2UpIGFzIFZhcmlhbnRNYW5hZ2VtZW50O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYFZhcmlhbnQgYmFjayByZWZlcmVuY2Ugbm90IGRlZmluZWQgb24gdGhlIGZpbHRlciBiYXIgJHt0aGlzLmlkfWApO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSB2YXJpYW50IGJhY2sgcmVmZXJlbmNlIGFzc29jaWF0aW9uIGZvciB0aGlzIGluc3RhbmNlLlxuXHQgKiBAcGFyYW0gdmFyaWFudCBUaGUgYFZhcmlhbnRNYW5hZ2VtZW50YCBpbnN0YW5jZSB0byBzZXQgYXMgdGhlIGJhY2sgcmVmZXJlbmNlLlxuXHQgKi9cblx0c2V0VmFyaWFudEJhY2tSZWZlcmVuY2UodmFyaWFudDogVmFyaWFudE1hbmFnZW1lbnQpOiB2b2lkIHtcblx0XHRjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCkgYXMgRmlsdGVyQmFyO1xuXHRcdGNvbnN0IGlzTGl2ZU1vZGUgPSBjb250ZW50Py5nZXRMaXZlTW9kZT8uKCk7XG5cdFx0aWYgKCFpc0xpdmVNb2RlKSB7XG5cdFx0XHR0aGlzLmNvbnRlbnQuc2V0VmFyaWFudEJhY2tyZWZlcmVuY2UodmFyaWFudCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGtleSBvZiB0aGUgY3VycmVudCB2YXJpYW50IGluIHRoZSBhc3NvY2lhdGVkIHZhcmlhbnQgbWFuYWdlbWVudC5cblx0ICogQHJldHVybnMgS2V5IG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgdmFyaWFudC4gSW4gY2FzZSB0aGUgbW9kZWwgaXMgbm90IHlldCBzZXQsIGBudWxsYCB3aWxsIGJlIHJldHVybmVkLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRnZXRDdXJyZW50VmFyaWFudEtleSgpOiBzdHJpbmcgfCBudWxsIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWYXJpYW50TWFuYWdlbWVudCgpLmdldEN1cnJlbnRWYXJpYW50S2V5KCk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgbmV3IHNlbGVjdGVkIHZhcmlhbnQgaW4gdGhlIGFzc29jaWF0ZWQgdmFyaWFudCBtYW5hZ2VtZW50LlxuXHQgKiBAcGFyYW0ga2V5IEtleSBvZiB0aGUgdmFyaWFudCB0aGF0IHNob3VsZCBiZSBzZWxlY3RlZC4gSWYgdGhlIHBhc3NlZCBrZXkgZG9lc24ndCBpZGVudGlmeSBhIHZhcmlhbnQsIGl0IHdpbGwgYmUgaWdub3JlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0c2V0Q3VycmVudFZhcmlhbnRLZXkoa2V5OiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zdCB2YXJpYW50TWFuYWdlbWVudCA9IHRoaXMuZ2V0VmFyaWFudE1hbmFnZW1lbnQoKTtcblx0XHR2YXJpYW50TWFuYWdlbWVudC5zZXRDdXJyZW50VmFyaWFudEtleShrZXkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGVuYWJsZW1lbnQgb2YgdGhlIGZpZWxkLlxuXHQgKiBAcGFyYW0gbmFtZSBOYW1lIG9mIHRoZSBmaWVsZCB0aGF0IHNob3VsZCBiZSBlbmFibGVkIG9yIGRpc2FibGVkLlxuXHQgKiBAcGFyYW0gZW5hYmxlZCBXaGV0aGVyIHRoZSBmaWVsZCBzaG91bGQgYmUgZW5hYmxlZCBvciBkaXNhYmxlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0c2V0RmlsdGVyRmllbGRFbmFibGVkKG5hbWU6IHN0cmluZywgZW5hYmxlZDogYm9vbGVhbik6IHZvaWQge1xuXHRcdCh0aGlzLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsKS5zZXREYXRhKFxuXHRcdFx0e1xuXHRcdFx0XHRbdGhpcy5jb250ZW50LmRhdGEoXCJsb2NhbElkXCIpXToge1xuXHRcdFx0XHRcdGZpbHRlckZpZWxkczogeyBbbmFtZV06IHsgZWRpdE1vZGU6IGVuYWJsZWQgPyBGaWVsZEVkaXRNb2RlLkVkaXRhYmxlIDogRmllbGRFZGl0TW9kZS5EaXNhYmxlZCB9IH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHRydWVcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgd2hldGhlciB0aGUgZmllbGQgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC5cblx0ICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgZmllbGQuXG5cdCAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGZpbHRlckZpZWxkIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGdldEZpbHRlckZpZWxkRW5hYmxlZChuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gKHRoaXMuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWwpLmdldFByb3BlcnR5KGAvJHt0aGlzLmNvbnRlbnQuZGF0YShcImxvY2FsSWRcIil9L2ZpbHRlckZpZWxkcy8ke25hbWV9L2VkaXRNb2RlYCkgPT09XG5cdFx0XHRGaWVsZEVkaXRNb2RlLkRpc2FibGVkXG5cdFx0XHQ/IGZhbHNlXG5cdFx0XHQ6IHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydCB7QGxpbmsgc2FwLmZlLm5hdmlnYXRpb24uU2VsZWN0aW9uVmFyaWFudH0gdG8gY29uZGl0aW9ucy5cblx0ICogQHBhcmFtIHNlbGVjdGlvblZhcmlhbnQgVGhlIHNlbGVjdGlvbiB2YXJpYW50IHRvIGFwcGx5IHRvIHRoZSBmaWx0ZXIgYmFyLlxuXHQgKiBAcGFyYW0gcHJlZmlsbERlc2NyaXB0aW9ucyBJZiB0cnVlLCB3ZSB0cnkgdG8gZmluZCB0aGUgYXNzb2NpYXRlZCBUZXh0IHZhbHVlIGZvciBlYWNoIHByb3BlcnR5IGluIHRoZSBzZWxlY3Rpb25WYXJpYW50ICh0byBhdm9pZCBmZXRjaGluZyBpdCBmcm9tIHRoZSBzZXJ2ZXIpXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSByZXNvbHZpbmcgdG8gY29uZGl0aW9uc1xuXHQgKi9cblx0YXN5bmMgY29udmVydFNlbGVjdGlvblZhcmlhbnRUb1N0YXRlRmlsdGVycyhcblx0XHRzZWxlY3Rpb25WYXJpYW50OiBTZWxlY3Rpb25WYXJpYW50LFxuXHRcdHByZWZpbGxEZXNjcmlwdGlvbnM6IGJvb2xlYW5cblx0KTogUHJvbWlzZTxTdGF0ZVV0aWxGaWx0ZXI+IHtcblx0XHRyZXR1cm4gc3RhdGVIZWxwZXIuY29udmVydFNlbGVjdGlvblZhcmlhbnRUb1N0YXRlRmlsdGVycyhcblx0XHRcdHRoaXMuY29udGVudCxcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRwcmVmaWxsRGVzY3JpcHRpb25zLFxuXHRcdFx0dGhpcy5jb250ZW50Py5nZXRNb2RlbCgpXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhcnMgYWxsIGlucHV0IHZhbHVlcyBvZiB2aXNpYmxlIGZpbHRlciBmaWVsZHMgaW4gdGhlIGZpbHRlciBiYXIgd2l0aCBmbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgdG8gY2xlYXIgRWRpdCBGaWx0ZXIgb3Igbm90LlxuXHQgKiBAcGFyYW0gZmlsdGVyQmFyIFRoZSBmaWx0ZXIgYmFyIHRoYXQgY29udGFpbnMgdGhlIGZpbHRlciBmaWVsZFxuXHQgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciBmaWx0ZXJpbmcgb24gdGhlIGZpbHRlciBiYXJcblx0ICogQHBhcmFtIG9wdGlvbnMuY2xlYXJFZGl0RmlsdGVyIFdoZXRoZXIgdG8gY2xlYXIgdGhlIGVkaXQgZmlsdGVyIG9yIGxldCBpdCBiZSBkZWZhdWx0IHZhbHVlICdBbGwnIGluc3RlYWRcblx0ICovXG5cdGFzeW5jIF9jbGVhckZpbHRlclZhbHVlc1dpdGhPcHRpb25zKGZpbHRlckJhcjogRmlsdGVyQmFyLCBvcHRpb25zPzogeyBjbGVhckVkaXRGaWx0ZXI6IGJvb2xlYW4gfSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGF3YWl0IHN0YXRlSGVscGVyLl9jbGVhckZpbHRlclZhbHVlc1dpdGhPcHRpb25zKGZpbHRlckJhciwgb3B0aW9ucyk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB7QGxpbmsgc2FwLmZlLm5hdmlnYXRpb24uU2VsZWN0aW9uVmFyaWFudH0gdG8gdGhlIGZpbHRlciBiYXIuIE5vdGU6IHNldFNlbGVjdGlvblZhcmlhbnQgd2lsbCBjbGVhciBleGlzdGluZyBmaWx0ZXJzIGFuZCB0aGVuIGFwcGx5IHRoZSBTZWxlY3Rpb25WYXJpYW50IHZhbHVlcy5cblx0ICogTm90ZTogVGhpcyBtZXRob2QgY2Fubm90IHNldCB0aGUgc2VhcmNoIGZpZWxkIHRleHQgb3IgYW55IGZpbHRlciBmaWVsZCBjb25kaXRpb24gdGhhdCByZWxpZXMgb24gYSBjdXN0b20gb3BlcmF0b3IuXG5cdCAqIEBwYXJhbSBzZWxlY3Rpb25WYXJpYW50IFRoZSB7QGxpbmsgc2FwLmZlLm5hdmlnYXRpb24uU2VsZWN0aW9uVmFyaWFudH0gdG8gYXBwbHkgdG8gdGhlIGZpbHRlciBiYXJcblx0ICogQHBhcmFtIHByZWZpbGxEZXNjcmlwdGlvbnMgT3B0aW9uYWwuIElmIHRydWUsIHdlIHdpbGwgdXNlIHRoZSBhc3NvY2lhdGVkIHRleHQgcHJvcGVydHkgdmFsdWVzIChpZiB0aGV5J3JlIGF2YWlsYWJsZSBpbiB0aGUgc2VsZWN0aW9uVmFyaWFudCkgdG8gZGlzcGxheSB0aGUgZmlsdGVyIHZhbHVlIGRlc2NyaXB0aW9ucywgaW5zdGVhZCBvZiBsb2FkaW5nIHRoZW0gZnJvbSB0aGUgYmFja2VuZFxuXHQgKiBAcGFyYW0gZnJvbU5hdmlnYXRpb25QYXJhbWV0ZXJzIFBSSVZBVEVcblx0ICogQHJldHVybnMgQSBwcm9taXNlIGZvciBhc3luY2hyb25vdXMgaGFuZGxpbmdcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgc2V0U2VsZWN0aW9uVmFyaWFudChcblx0XHRzZWxlY3Rpb25WYXJpYW50OiBTZWxlY3Rpb25WYXJpYW50LFxuXHRcdHByZWZpbGxEZXNjcmlwdGlvbnMgPSBmYWxzZSxcblx0XHRmcm9tTmF2aWdhdGlvblBhcmFtZXRlcnMgPSBmYWxzZVxuXHQpOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCkgYXMgRmlsdGVyQmFyIHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGlzTGl2ZU1vZGUgPSBjb250ZW50ICYmIGNvbnRlbnQ/LmdldExpdmVNb2RlPy4oKTtcblx0XHRsZXQgcmVzdWx0OiB7IGRpZmZTdGF0ZTogRXh0ZXJuYWxTdGF0ZVR5cGU7IGFwcGx5U3RhdGVSZXN1bHQ6IHVua25vd24gfSB8IHVuZGVmaW5lZDtcblx0XHRpZiAoaXNMaXZlTW9kZSkge1xuXHRcdFx0Y29udGVudC5lbmFibGVSZXF1ZXN0cyhmYWxzZSk7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRyZXN1bHQgPSBhd2FpdCBzdGF0ZUhlbHBlci5zZXRTZWxlY3Rpb25WYXJpYW50VG9NZGNDb250cm9sKFxuXHRcdFx0XHR0aGlzLmdldENvbnRlbnQoKSxcblx0XHRcdFx0c2VsZWN0aW9uVmFyaWFudCxcblx0XHRcdFx0cHJlZmlsbERlc2NyaXB0aW9ucyxcblx0XHRcdFx0ZnJvbU5hdmlnYXRpb25QYXJhbWV0ZXJzXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIHJlc3VsdD8uYXBwbHlTdGF0ZVJlc3VsdDtcblx0XHR9IGNhdGNoIChlcnI6IHVua25vd24pIHtcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG5cdFx0XHRMb2cuZXJyb3IoYEZFIDogQnVpbGRpbmdibG9jayA6IEZpbHRlckJhciA6ICR7bWVzc2FnZX1gKTtcblx0XHRcdHRocm93IEVycm9yKG1lc3NhZ2UpO1xuXHRcdH0gZmluYWxseSB7XG5cdFx0XHRpZiAoaXNMaXZlTW9kZSkge1xuXHRcdFx0XHRjb250ZW50LmVuYWJsZVJlcXVlc3RzKHRydWUsIHJlc3VsdD8uZGlmZlN0YXRlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2FsbGVkIGJ5IHRoZSBNREMgc3RhdGUgdXRpbCB3aGVuIHRoZSBzdGF0ZSBmb3IgdGhpcyBjb250cm9sJ3MgY2hpbGQgaGFzIGNoYW5nZWQuXG5cdCAqL1xuXHRoYW5kbGVTdGF0ZUNoYW5nZSgpOiB2b2lkIHtcblx0XHR0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdH1cblxuXHRwcml2YXRlIGdldENvbmRpdGlvblBhdGgocHJvcGVydHlQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHByb3BlcnR5VGFyZ2V0T2JqZWN0UGF0aCA9IEZpbHRlclV0aWxzLmdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JQcm9wZXJ0eSh0aGlzLmNvbnRlbnQsIHByb3BlcnR5UGF0aCk7XG5cdFx0cmV0dXJuIChcblx0XHRcdChwcm9wZXJ0eVRhcmdldE9iamVjdFBhdGggPyBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKHByb3BlcnR5VGFyZ2V0T2JqZWN0UGF0aCwgZmFsc2UsIHRydWUpIDogdW5kZWZpbmVkKSA/P1xuXHRcdFx0cHJvcGVydHlQYXRoXG5cdFx0KTtcblx0fVxuXG5cdGFzeW5jIHNob3dGaWx0ZXJGaWVsZChuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzdGF0ZTogRXh0ZXJuYWxTdGF0ZVR5cGUgPSBhd2FpdCBTdGF0ZVV0aWwucmV0cmlldmVFeHRlcm5hbFN0YXRlKHRoaXMuY29udGVudCk7XG5cdFx0Y29uc3QgY29uZGl0aW9uUGF0aCA9IHRoaXMuZ2V0Q29uZGl0aW9uUGF0aChuYW1lKTtcblx0XHRjb25zdCB0YXJnZXRGaWx0ZXJGaWVsZCA9ICEhc3RhdGUuaXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5uYW1lID09PSBjb25kaXRpb25QYXRoKTtcblx0XHRpZiAoIXRhcmdldEZpbHRlckZpZWxkKSB7XG5cdFx0XHRzdGF0ZS5pdGVtcy5wdXNoKHsgbmFtZTogY29uZGl0aW9uUGF0aCB9KTtcblx0XHR9XG5cdFx0YXdhaXQgU3RhdGVVdGlsLmFwcGx5RXh0ZXJuYWxTdGF0ZSh0aGlzLmNvbnRlbnQsIHN0YXRlKTtcblx0fVxuXG5cdGFzeW5jIG9wZW5WYWx1ZUhlbHBGb3JGaWx0ZXJGaWVsZChuYW1lOiBzdHJpbmcsIGlucHV0VmFsdWU/OiBzdHJpbmcpOiBQcm9taXNlPENvbmRpdGlvbk9iamVjdFtdPiB7XG5cdFx0Y29uc3QgY29uZGl0aW9uUGF0aCA9IHRoaXMuZ2V0Q29uZGl0aW9uUGF0aChuYW1lKTtcblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCBmaWx0ZXJGaWVsZCA9IHRoaXMuY29udGVudC5nZXRGaWx0ZXJJdGVtcygpLmZpbmQoKGl0ZW0pID0+IGl0ZW0uZ2V0UHJvcGVydHlLZXkoKSA9PT0gY29uZGl0aW9uUGF0aCk7XG5cdFx0XHRjb25zdCB2YWx1ZUhlbHAgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKGZpbHRlckZpZWxkPy5nZXRWYWx1ZUhlbHAoKSkgYXMgVmFsdWVIZWxwIHwgdW5kZWZpbmVkO1xuXHRcdFx0aWYgKCF2YWx1ZUhlbHAgfHwgIWZpbHRlckZpZWxkKSB7XG5cdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoYFZhbHVlSGVscCBmb3IgZmlsdGVyIGZpZWxkICR7bmFtZX0gbm90IGZvdW5kYCkpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHZhbHVlSGVscC5hdHRhY2hFdmVudE9uY2UoXCJjbG9zZWRcIiwgKCkgPT4ge1xuXHRcdFx0XHRyZXNvbHZlKHZhbHVlSGVscC5nZXRDb25kaXRpb25zKCkgYXMgQ29uZGl0aW9uT2JqZWN0W10pO1xuXHRcdFx0fSk7XG5cblx0XHRcdChmaWx0ZXJGaWVsZCBhcyB1bmtub3duIGFzIHsgX29Gb2N1c0luZm86IG9iamVjdCB9KS5fb0ZvY3VzSW5mbyA9IHsgdGFyZ2V0SW5mbzogeyBzaWxlbnQ6IHRydWUgfSB9O1xuXHRcdFx0KGZpbHRlckZpZWxkIGFzIHVua25vd24gYXMgeyBvbmZvY3VzaW4/OiBGdW5jdGlvbiB9KS5vbmZvY3VzaW4/LihuZXcgalF1ZXJ5LkV2ZW50KFwiZm9jdXNpblwiKSk7XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0KGZpbHRlckZpZWxkLmdldEFnZ3JlZ2F0aW9uKFwiX2NvbnRlbnRcIikgYXMgSW5wdXRbXSlbMF0uZmlyZVZhbHVlSGVscFJlcXVlc3Qoe1xuXHRcdFx0XHRcdGZyb21LZXlib2FyZDogdHJ1ZSxcblx0XHRcdFx0XHRfdXNlcklucHV0VmFsdWU6IGlucHV0VmFsdWVcblx0XHRcdFx0fSBhcyB1bmtub3duIGFzIElucHV0JFZhbHVlSGVscFJlcXVlc3RFdmVudFBhcmFtZXRlcnMpO1xuXHRcdFx0fSwgMjAwKTtcblx0XHR9KTtcblx0fVxuXG5cdGdldENvbGxhcHNlZEZpbHRlcnNUZXh0KCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuY29udGVudD8uZ2V0QXNzaWduZWRGaWx0ZXJzVGV4dCgpPy5maWx0ZXJzVGV4dDtcblx0fVxufVxuZXhwb3J0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QUEsc0JBQUE2QyxLQUFBO0lBQUFrVyxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQXJVLFlBQUEsR0FBQWlVLHlCQUFBLENBQUFuVixPQUFBLENBQUEzRCxTQUFBLG1CQUFBOEMsTUFBQTtJQUFBaVcsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUFwVSxZQUFBLEdBQUFnVSx5QkFBQSxDQUFBblYsT0FBQSxDQUFBM0QsU0FBQSxhQUFBaUQsTUFBQTtJQUFBOFYsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUFuVSxhQUFBLEdBQUErVCx5QkFBQSxDQUFBblYsT0FBQSxDQUFBM0QsU0FBQSxxQkFBQW1ELE1BQUE7SUFBQTRWLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBbFUsYUFBQSxHQUFBOFQseUJBQUEsQ0FBQW5WLE9BQUEsQ0FBQTNELFNBQUEsb0JBQUFvRCxNQUFBO0lBQUEyVixZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQWpVLGFBQUEsR0FBQTZULHlCQUFBLENBQUFuVixPQUFBLENBQUEzRCxTQUFBLGlCQUFBcUQsTUFBQTtJQUFBMFYsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUFoVSxhQUFBLEdBQUE0VCx5QkFBQSxDQUFBblYsT0FBQSxDQUFBM0QsU0FBQSw0QkFBQXNELE1BQUE7SUFBQXlWLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBSix5QkFBQSxDQUFBblYsT0FBQSxDQUFBM0QsU0FBQSxtQkFBQXVELE1BQUEsR0FBQXpDLE1BQUEsQ0FBQXFZLHdCQUFBLENBQUF4VixPQUFBLENBQUEzRCxTQUFBLG1CQUFBMkQsT0FBQSxDQUFBM0QsU0FBQSxHQUFBOFkseUJBQUEsQ0FBQW5WLE9BQUEsQ0FBQTNELFNBQUEsMEJBQUF5RCxNQUFBLEdBQUEzQyxNQUFBLENBQUFxWSx3QkFBQSxDQUFBeFYsT0FBQSxDQUFBM0QsU0FBQSwwQkFBQTJELE9BQUEsQ0FBQTNELFNBQUEsR0FBQTJELE9BQUEsTUFBQUQsTUFBQSxLQUFBQSxNQUFBO0VBQUEsT0E2NEJwQjlCLFlBQVk7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -257,7 +257,7 @@ class FilterBarAPI extends MacroAPI {
|
|
|
257
257
|
if (filterVariantApplied || useFLPDefaultValues) {
|
|
258
258
|
svToSet = await this._getAdjustedSV(sv, useFLPDefaultValues);
|
|
259
259
|
}
|
|
260
|
-
return filterBarAPI.setSelectionVariant(svToSet, true);
|
|
260
|
+
return filterBarAPI.setSelectionVariant(svToSet, true, true);
|
|
261
261
|
}
|
|
262
262
|
}
|
|
263
263
|
|
|
@@ -981,10 +981,15 @@ class FilterBarAPI extends MacroAPI {
|
|
|
981
981
|
* Note: This method cannot set the search field text or any filter field condition that relies on a custom operator.
|
|
982
982
|
* @param selectionVariant The {@link sap.fe.navigation.SelectionVariant} to apply to the filter bar
|
|
983
983
|
* @param prefillDescriptions Optional. If true, we will use the associated text property values (if they're available in the selectionVariant) to display the filter value descriptions, instead of loading them from the backend
|
|
984
|
+
* @param fromNavigationParameters PRIVATE
|
|
984
985
|
* @returns A promise for asynchronous handling
|
|
985
986
|
* @public
|
|
986
987
|
*/
|
|
987
|
-
async setSelectionVariant(
|
|
988
|
+
async setSelectionVariant(
|
|
989
|
+
selectionVariant: SelectionVariant,
|
|
990
|
+
prefillDescriptions = false,
|
|
991
|
+
fromNavigationParameters = false
|
|
992
|
+
): Promise<unknown> {
|
|
988
993
|
const content = this.getContent() as FilterBar | undefined;
|
|
989
994
|
const isLiveMode = content && content?.getLiveMode?.();
|
|
990
995
|
let result: { diffState: ExternalStateType; applyStateResult: unknown } | undefined;
|
|
@@ -992,7 +997,12 @@ class FilterBarAPI extends MacroAPI {
|
|
|
992
997
|
content.enableRequests(false);
|
|
993
998
|
}
|
|
994
999
|
try {
|
|
995
|
-
result = await stateHelper.setSelectionVariantToMdcControl(
|
|
1000
|
+
result = await stateHelper.setSelectionVariantToMdcControl(
|
|
1001
|
+
this.getContent(),
|
|
1002
|
+
selectionVariant,
|
|
1003
|
+
prefillDescriptions,
|
|
1004
|
+
fromNavigationParameters
|
|
1005
|
+
);
|
|
996
1006
|
return result?.applyStateResult;
|
|
997
1007
|
} catch (err: unknown) {
|
|
998
1008
|
const message = err instanceof Error ? err.message : String(err);
|