@sapui5/sap.fe.templates 1.105.1 → 1.107.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/package.json +2 -2
  2. package/src/sap/fe/templates/.library +1 -1
  3. package/src/sap/fe/templates/AnalyticalListPage/chart/FEChartDelegate.js +2 -2
  4. package/src/sap/fe/templates/AnalyticalListPage/chart/FEChartDelegate.ts +1 -1
  5. package/src/sap/fe/templates/Feedback.js +1 -1
  6. package/src/sap/fe/templates/Feedback.ts +0 -3
  7. package/src/sap/fe/templates/ListReport/ListReport.view.xml +2 -12
  8. package/src/sap/fe/templates/ListReport/ListReportController.controller.js +52 -66
  9. package/src/sap/fe/templates/ListReport/ListReportController.controller.ts +46 -61
  10. package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.js +1 -13
  11. package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.ts +0 -9
  12. package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.js +2 -2
  13. package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.ts +1 -1
  14. package/src/sap/fe/templates/ListReport/overrides/Share.js +4 -23
  15. package/src/sap/fe/templates/ListReport/overrides/Share.ts +5 -26
  16. package/src/sap/fe/templates/ListReport/overrides/ViewState.js +5 -5
  17. package/src/sap/fe/templates/ListReport/overrides/ViewState.ts +4 -4
  18. package/src/sap/fe/templates/ListReport/view/fragments/CollectionVisualization.fragment.xml +6 -1
  19. package/src/sap/fe/templates/ObjectPage/ExtensionAPI.js +133 -4
  20. package/src/sap/fe/templates/ObjectPage/ExtensionAPI.ts +90 -3
  21. package/src/sap/fe/templates/ObjectPage/ObjectPage.view.xml +4 -23
  22. package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +38 -13
  23. package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +38 -14
  24. package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.js +29 -13
  25. package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.ts +27 -18
  26. package/src/sap/fe/templates/ObjectPage/overrides/MessageHandler.js +2 -2
  27. package/src/sap/fe/templates/ObjectPage/overrides/MessageHandler.ts +2 -1
  28. package/src/sap/fe/templates/ObjectPage/overrides/Share.js +2 -2
  29. package/src/sap/fe/templates/ObjectPage/overrides/Share.ts +1 -1
  30. package/src/sap/fe/templates/ObjectPage/view/fragments/Actions.fragment.xml +60 -48
  31. package/src/sap/fe/templates/ObjectPage/view/fragments/EditableHeaderFacet.fragment.xml +4 -4
  32. package/src/sap/fe/templates/ObjectPage/view/fragments/FormActionButtons.fragment.xml +5 -1
  33. package/src/sap/fe/templates/ObjectPage/view/fragments/HeadingContent.fragment.xml +30 -0
  34. package/src/sap/fe/templates/ObjectPage/view/fragments/HeadingTitle.fragment.xml +11 -8
  35. package/src/sap/fe/templates/RootContainer/controller/RootContainerBaseController.js +4 -4
  36. package/src/sap/fe/templates/RootContainer/controller/RootContainerBaseController.ts +3 -3
  37. package/src/sap/fe/templates/library.js +1 -1
@@ -7,11 +7,13 @@ import CommonUtils from "sap/fe/core/CommonUtils";
7
7
  import type { ConverterAction } from "sap/fe/core/converters/controls/Common/Action";
8
8
  import { Draft, Entity, UI } from "sap/fe/core/converters/helpers/BindingHelper";
9
9
  import type { ManifestAction } from "sap/fe/core/converters/ManifestSettings";
10
- import type { BindingToolkitExpression, CompiledBindingToolkitExpression } from "sap/fe/core/helpers/BindingToolkit";
11
10
  import {
12
11
  and,
12
+ BindingToolkitExpression,
13
+ CompiledBindingToolkitExpression,
13
14
  compileExpression,
14
15
  concat,
16
+ constant,
15
17
  getExpressionFromAnnotation,
16
18
  ifElse,
17
19
  isEmpty,
@@ -19,8 +21,10 @@ import {
19
21
  resolveBindingString
20
22
  } from "sap/fe/core/helpers/BindingToolkit";
21
23
  import type { DataModelObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
24
+ import { enhanceDataModelPath } from "sap/fe/core/templating/DataModelPathHelper";
22
25
  import CommonHelper from "sap/fe/macros/CommonHelper";
23
26
  import { addTextArrangementToBindingExpression, formatValueRecursively } from "sap/fe/macros/field/FieldTemplating";
27
+ import { getLabelForConnectedFields } from "sap/fe/macros/internal/form/FormTemplating";
24
28
  import mLibrary from "sap/m/library";
25
29
  import ManagedObject from "sap/ui/base/ManagedObject";
26
30
  import ODataModelAnnotationHelper from "sap/ui/model/odata/v4/AnnotationHelper";
@@ -77,33 +81,38 @@ export const getExpressionForTitle = function (
77
81
  const titleForActiveHeaderNoHeaderInfo = !oEmptyHeaderInfoTitle
78
82
  ? CommonUtils.getTranslatedText("T_ANNOTATION_HELPER_DEFAULT_OBJECT_PAGE_HEADER_TITLE_NO_HEADER_INFO", oViewData.resourceBundle)
79
83
  : "";
80
-
81
- let titleValueExpression = getExpressionFromAnnotation((oHeaderInfo?.Title as DataFieldTypes)?.Value);
82
- if ((oHeaderInfo?.Title as DataFieldTypes)?.Value?.$target?.annotations?.Common?.Text?.annotations?.UI?.TextArrangement) {
83
- // In case an explicit text arrangement was set we make use of it in the description as well
84
- titleValueExpression = addTextArrangementToBindingExpression(titleValueExpression, fullContextPath);
84
+ let titleValueExpression,
85
+ connectedFieldsPath,
86
+ titleIsEmpty: BindingToolkitExpression<boolean> = constant(true);
87
+ if (oHeaderInfo?.Title?.$Type === "com.sap.vocabularies.UI.v1.DataField") {
88
+ titleValueExpression = getExpressionFromAnnotation((oHeaderInfo?.Title as DataFieldTypes)?.Value);
89
+ if ((oHeaderInfo?.Title as DataFieldTypes)?.Value?.$target?.annotations?.Common?.Text?.annotations?.UI?.TextArrangement) {
90
+ // In case an explicit text arrangement was set we make use of it in the description as well
91
+ titleValueExpression = addTextArrangementToBindingExpression(titleValueExpression, fullContextPath);
92
+ }
93
+ titleValueExpression = formatValueRecursively(titleValueExpression, fullContextPath);
94
+ titleIsEmpty = isEmpty(titleValueExpression);
95
+ } else if (
96
+ oHeaderInfo?.Title?.$Type === "com.sap.vocabularies.UI.v1.DataFieldForAnnotation" &&
97
+ oHeaderInfo?.Title?.Target.$target.$Type === "com.sap.vocabularies.UI.v1.ConnectedFieldsType"
98
+ ) {
99
+ connectedFieldsPath = enhanceDataModelPath(fullContextPath, "$Type/@UI.HeaderInfo/Title/Target/$AnnotationPath");
100
+ titleValueExpression = getLabelForConnectedFields(connectedFieldsPath, false) as BindingToolkitExpression<string>;
101
+ titleIsEmpty = titleValueExpression ? isEmpty(titleValueExpression) : constant(true);
85
102
  }
86
103
 
87
- titleValueExpression = formatValueRecursively(titleValueExpression, fullContextPath);
88
-
89
104
  // If there is a TypeName defined, show the default title 'New + TypeName', otherwise show the custom title or the default 'New object'
90
105
  const createModeTitle = oHeaderInfo?.TypeName
91
- ? concat(titleWithHeaderInfo, ": ", getExpressionFromAnnotation(oHeaderInfo.TypeName.toString()))
106
+ ? concat(titleWithHeaderInfo, ": ", resolveBindingString(oHeaderInfo.TypeName.toString()))
92
107
  : titleNoHeaderInfo;
93
108
  const activeExpression = oDraftRoot ? Entity.IsActive : true;
94
-
95
109
  return compileExpression(
96
110
  ifElse(
97
- // If Create Mode && Empty expression
98
- and(or(UI.IsCreateModeSticky, UI.IsCreateMode), titleValueExpression && isEmpty(titleValueExpression)),
99
-
111
+ and(or(UI.IsCreateModeSticky, UI.IsCreateMode), titleIsEmpty),
100
112
  createModeTitle,
113
+
101
114
  // Otherwise show the default expression
102
- ifElse(
103
- and(activeExpression, titleValueExpression && isEmpty(titleValueExpression)),
104
- titleForActiveHeaderNoHeaderInfo,
105
- titleValueExpression
106
- )
115
+ ifElse(and(activeExpression, titleIsEmpty), titleForActiveHeaderNoHeaderInfo, titleValueExpression)
107
116
  )
108
117
  );
109
118
  };
@@ -8,9 +8,9 @@ sap.ui.define([], function () {
8
8
  var MessageHandlerExtension = {
9
9
  getShowBoundMessagesInMessageDialog: function () {
10
10
  // in case of edit mode we show the messages in the message popover
11
- return !this.base.getModel("ui").getProperty("/isEditable") || this.base.getView().getBindingContext("internal").getProperty("isActionParameterDialogOpen");
11
+ return !this.base.getModel("ui").getProperty("/isEditable") || this.base.getView().getBindingContext("internal").getProperty("isActionParameterDialogOpen") || this.base.getView().getBindingContext("internal").getProperty("getBoundMessagesForMassEdit");
12
12
  }
13
13
  };
14
14
  return MessageHandlerExtension;
15
15
  }, false);
16
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNZXNzYWdlSGFuZGxlckV4dGVuc2lvbiIsImdldFNob3dCb3VuZE1lc3NhZ2VzSW5NZXNzYWdlRGlhbG9nIiwiYmFzZSIsImdldE1vZGVsIiwiZ2V0UHJvcGVydHkiLCJnZXRWaWV3IiwiZ2V0QmluZGluZ0NvbnRleHQiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk1lc3NhZ2VIYW5kbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIE1lc3NhZ2VIYW5kbGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5cbmNvbnN0IE1lc3NhZ2VIYW5kbGVyRXh0ZW5zaW9uID0ge1xuXHRnZXRTaG93Qm91bmRNZXNzYWdlc0luTWVzc2FnZURpYWxvZzogZnVuY3Rpb24gKHRoaXM6IE1lc3NhZ2VIYW5kbGVyKSB7XG5cdFx0Ly8gaW4gY2FzZSBvZiBlZGl0IG1vZGUgd2Ugc2hvdyB0aGUgbWVzc2FnZXMgaW4gdGhlIG1lc3NhZ2UgcG9wb3ZlclxuXHRcdHJldHVybiAoXG5cdFx0XHQhdGhpcy5iYXNlLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKSB8fFxuXHRcdFx0KHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCkuZ2V0UHJvcGVydHkoXCJpc0FjdGlvblBhcmFtZXRlckRpYWxvZ09wZW5cIilcblx0XHQpO1xuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBNZXNzYWdlSGFuZGxlckV4dGVuc2lvbjtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7OztFQUdBLElBQU1BLHVCQUF1QixHQUFHO0lBQy9CQyxtQ0FBbUMsRUFBRSxZQUFnQztNQUNwRTtNQUNBLE9BQ0MsQ0FBQyxLQUFLQyxJQUFMLENBQVVDLFFBQVYsQ0FBbUIsSUFBbkIsRUFBeUJDLFdBQXpCLENBQXFDLGFBQXJDLENBQUQsSUFDQyxLQUFLRixJQUFMLENBQVVHLE9BQVYsR0FBb0JDLGlCQUFwQixDQUFzQyxVQUF0QyxDQUFELENBQTRFRixXQUE1RSxDQUF3Riw2QkFBeEYsQ0FGRDtJQUlBO0VBUDhCLENBQWhDO1NBVWVKLHVCIn0=
16
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNZXNzYWdlSGFuZGxlckV4dGVuc2lvbiIsImdldFNob3dCb3VuZE1lc3NhZ2VzSW5NZXNzYWdlRGlhbG9nIiwiYmFzZSIsImdldE1vZGVsIiwiZ2V0UHJvcGVydHkiLCJnZXRWaWV3IiwiZ2V0QmluZGluZ0NvbnRleHQiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk1lc3NhZ2VIYW5kbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIE1lc3NhZ2VIYW5kbGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5cbmNvbnN0IE1lc3NhZ2VIYW5kbGVyRXh0ZW5zaW9uID0ge1xuXHRnZXRTaG93Qm91bmRNZXNzYWdlc0luTWVzc2FnZURpYWxvZzogZnVuY3Rpb24gKHRoaXM6IE1lc3NhZ2VIYW5kbGVyKSB7XG5cdFx0Ly8gaW4gY2FzZSBvZiBlZGl0IG1vZGUgd2Ugc2hvdyB0aGUgbWVzc2FnZXMgaW4gdGhlIG1lc3NhZ2UgcG9wb3ZlclxuXHRcdHJldHVybiAoXG5cdFx0XHQhdGhpcy5iYXNlLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKSB8fFxuXHRcdFx0KHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCkuZ2V0UHJvcGVydHkoXCJpc0FjdGlvblBhcmFtZXRlckRpYWxvZ09wZW5cIikgfHxcblx0XHRcdCh0aGlzLmJhc2UuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQpLmdldFByb3BlcnR5KFwiZ2V0Qm91bmRNZXNzYWdlc0Zvck1hc3NFZGl0XCIpXG5cdFx0KTtcblx0fVxufTtcblxuZXhwb3J0IGRlZmF1bHQgTWVzc2FnZUhhbmRsZXJFeHRlbnNpb247XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7RUFHQSxJQUFNQSx1QkFBdUIsR0FBRztJQUMvQkMsbUNBQW1DLEVBQUUsWUFBZ0M7TUFDcEU7TUFDQSxPQUNDLENBQUMsS0FBS0MsSUFBTCxDQUFVQyxRQUFWLENBQW1CLElBQW5CLEVBQXlCQyxXQUF6QixDQUFxQyxhQUFyQyxDQUFELElBQ0MsS0FBS0YsSUFBTCxDQUFVRyxPQUFWLEdBQW9CQyxpQkFBcEIsQ0FBc0MsVUFBdEMsQ0FBRCxDQUE0RUYsV0FBNUUsQ0FBd0YsNkJBQXhGLENBREEsSUFFQyxLQUFLRixJQUFMLENBQVVHLE9BQVYsR0FBb0JDLGlCQUFwQixDQUFzQyxVQUF0QyxDQUFELENBQTRFRixXQUE1RSxDQUF3Riw2QkFBeEYsQ0FIRDtJQUtBO0VBUjhCLENBQWhDO1NBV2VKLHVCIn0=
@@ -6,7 +6,8 @@ const MessageHandlerExtension = {
6
6
  // in case of edit mode we show the messages in the message popover
7
7
  return (
8
8
  !this.base.getModel("ui").getProperty("/isEditable") ||
9
- (this.base.getView().getBindingContext("internal") as InternalModelContext).getProperty("isActionParameterDialogOpen")
9
+ (this.base.getView().getBindingContext("internal") as InternalModelContext).getProperty("isActionParameterDialogOpen") ||
10
+ (this.base.getView().getBindingContext("internal") as InternalModelContext).getProperty("getBoundMessagesForMassEdit")
10
11
  );
11
12
  }
12
13
  };
@@ -246,7 +246,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/h
246
246
  sShareUrl = sHash ? sBasePath + sHash : window.location.hash;
247
247
  }
248
248
 
249
- return sShareUrl;
249
+ return window.location.origin + window.location.pathname + sShareUrl;
250
250
  }
251
251
 
252
252
  function getShareEmailUrl() {
@@ -336,4 +336,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/h
336
336
  };
337
337
  return ShareExtensionOverride;
338
338
  }, false);
339
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJib2R5IiwicmVjb3ZlciIsInJlc3VsdCIsImUiLCJ0aGVuIiwiYkdsb2JhbElzU3RpY2t5U3VwcG9ydGVkIiwiY3JlYXRlRmlsdGVyVG9GZXRjaEFjdGl2ZUNvbnRleHQiLCJtS2V5VmFsdWVzIiwiYklzQWN0aXZlRW50aXR5RGVmaW5lZCIsImFLZXlzIiwiT2JqZWN0Iiwia2V5cyIsImFGaWx0ZXJzIiwibWFwIiwic0tleSIsInNWYWx1ZSIsInVuZGVmaW5lZCIsIkZpbHRlciIsIkZpbHRlck9wZXJhdG9yIiwiRVEiLCJvQWN0aXZlRmlsdGVyIiwiZmlsdGVycyIsImFuZCIsInB1c2giLCJnZXRBY3RpdmVDb250ZXh0UGF0aCIsIm9Db250cm9sbGVyIiwic1BhZ2VFbnRpdHlOYW1lIiwib0ZpbHRlciIsIm9MaXN0QmluZGluZyIsImdldFZpZXciLCJnZXRCaW5kaW5nQ29udGV4dCIsImdldE1vZGVsIiwiYmluZExpc3QiLCJyZXF1ZXN0Q29udGV4dHMiLCJvQ29udGV4dHMiLCJsZW5ndGgiLCJnZXRQYXRoIiwiZ2V0QWN0aXZlQ29udGV4dEluc3RhbmNlcyIsIm9Db250ZXh0Iiwib0VudGl0eVNldCIsImFBY3RpdmVDb250ZXh0cHJvbWlzZXMiLCJhUGFnZXMiLCJzTWV0YVBhdGgiLCJnZXRNZXRhTW9kZWwiLCJnZXRNZXRhUGF0aCIsImluZGV4T2YiLCJzdWJzdHJpbmciLCJhTWV0YVBhdGhBcnJheSIsInNwbGl0Iiwic0N1cnJlbnRIYXNoTm9QYXJhbXMiLCJIYXNoQ2hhbmdlciIsImdldEluc3RhbmNlIiwiZ2V0SGFzaCIsImFDdXJyZW50SGFzaEFycmF5Iiwib1BhZ2VNYXAiLCJhUGFnZUhhc2hBcnJheSIsImZvckVhY2giLCJzUGFnZUhhc2giLCJhS2V5VmFsdWVzIiwic1BhZ2VIYXNoTmFtZSIsImkiLCJzS2V5QXNzaWdubWVudCIsImFQYXJ0cyIsInNLZXlWYWx1ZSIsIm9NZXRhTW9kZWwiLCJhVGVjaG5pY2FsS2V5cyIsImdldE9iamVjdCIsImpvaW4iLCJsYXN0SW5kZXhPZiIsImRlY29kZVVSSUNvbXBvbmVudCIsIm9QYWdlRW50aXR5U2V0Iiwic05hdmlnYXRpb25QYXRoIiwib1BhZ2VJbmZvIiwic1BhZ2VFbnRpdHlTZXROYW1lIiwiJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmciLCJwYWdlRW50aXR5TmFtZSIsImdldEFjdGl2ZUNvbnRleHRQYXRocyIsInNSb290RW50aXR5TmFtZSIsInN1YnN0ciIsIm9QYWdlQ29udGV4dCIsIlByb21pc2UiLCJhbGwiLCJhRGF0YSIsImFBY3RpdmVDb250ZXh0UGF0aHMiLCJzQWN0aXZlQ29udGV4dFBhdGgiLCJzTmF2aWdhdGlvUHJvcGVydHkiLCJzRW50aXR5U2V0TmFtZSIsInZhbHVlcyIsInJlcGxhY2UiLCJjYXRjaCIsIm9FcnJvciIsIkxvZyIsImluZm8iLCJyZXNvbHZlIiwiZmV0Y2hBY3RpdmVDb250ZXh0UGF0aHMiLCJvUHJvbWlzZSIsImFTZW1hbnRpY0tleXMiLCJvTW9kZWwiLCJNb2RlbEhlbHBlciIsImlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsIlNlbWFudGljS2V5SGVscGVyIiwiZ2V0U2VtYW50aWNLZXlzIiwib1ZpZXdEYXRhIiwiZ2V0Vmlld0RhdGEiLCJ2aWV3TGV2ZWwiLCJnZXRTaGFyZVVybCIsImJJc0VkaXRhYmxlIiwiYklzU3RpY2t5U3VwcG9ydGVkIiwic1NoYXJlVXJsIiwic0hhc2giLCJzQmFzZVBhdGgiLCJocmVmRm9yQXBwU3BlY2lmaWNIYXNoIiwid2luZG93IiwibG9jYXRpb24iLCJoYXNoIiwiZ2V0U2hhcmVFbWFpbFVybCIsIm9VU2hlbGxDb250YWluZXIiLCJzYXAiLCJ1c2hlbGwiLCJDb250YWluZXIiLCJnZXRGTFBVcmxBc3luYyIsInNGTFBVcmwiLCJzRXJyb3IiLCJlcnJvciIsImRvY3VtZW50IiwiVVJMIiwiZ2V0SmFtVXJsIiwiYklzRWRpdE1vZGUiLCJzSmFtVXJsIiwicnVubmluZ0luSWZyYW1lIiwiZ2V0RkxQVXJsIiwic1VybCIsIm9yaWdpbiIsInBhdGhuYW1lIiwiU2hhcmVFeHRlbnNpb25PdmVycmlkZSIsImFkYXB0U2hhcmVNZXRhZGF0YSIsIm9TaGFyZU1ldGFkYXRhIiwiYmFzZSIsIm9VSU1vZGVsIiwiZ2V0UHJvcGVydHkiLCJnZXRDb250cm9sbGVyIiwib1BhZ2VUaXRsZUluZm8iLCJfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24iLCJvRGF0YSIsInNUaXRsZSIsInRpdGxlIiwic09iamVjdFN1YnRpdGxlIiwic3VidGl0bGUiLCJ0b1N0cmluZyIsInRpbGUiLCJlbWFpbCIsImphbSIsInVybCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiU2hhcmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBTaGFyZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvU2hhcmVcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IFNlbWFudGljS2V5SGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1NlbWFudGljS2V5SGVscGVyXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL09iamVjdFBhZ2VDb250cm9sbGVyLmNvbnRyb2xsZXJcIjtcbmltcG9ydCBIYXNoQ2hhbmdlciBmcm9tIFwic2FwL3VpL2NvcmUvcm91dGluZy9IYXNoQ2hhbmdlclwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyT3BlcmF0b3JcIjtcblxubGV0IGJHbG9iYWxJc1N0aWNreVN1cHBvcnRlZDogYm9vbGVhbjtcblxuZnVuY3Rpb24gY3JlYXRlRmlsdGVyVG9GZXRjaEFjdGl2ZUNvbnRleHQobUtleVZhbHVlczogYW55LCBiSXNBY3RpdmVFbnRpdHlEZWZpbmVkOiBhbnkpIHtcblx0Y29uc3QgYUtleXMgPSBPYmplY3Qua2V5cyhtS2V5VmFsdWVzKTtcblxuXHRjb25zdCBhRmlsdGVycyA9IGFLZXlzLm1hcChmdW5jdGlvbiAoc0tleTogc3RyaW5nKSB7XG5cdFx0Y29uc3Qgc1ZhbHVlID0gbUtleVZhbHVlc1tzS2V5XTtcblx0XHRpZiAoc1ZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiBuZXcgRmlsdGVyKHNLZXksIEZpbHRlck9wZXJhdG9yLkVRLCBzVmFsdWUpO1xuXHRcdH1cblx0fSk7XG5cblx0aWYgKGJJc0FjdGl2ZUVudGl0eURlZmluZWQpIHtcblx0XHRjb25zdCBvQWN0aXZlRmlsdGVyID0gbmV3IEZpbHRlcih7XG5cdFx0XHRmaWx0ZXJzOiBbbmV3IEZpbHRlcihcIlNpYmxpbmdFbnRpdHkvSXNBY3RpdmVFbnRpdHlcIiwgRmlsdGVyT3BlcmF0b3IuRVEsIHRydWUpXSxcblx0XHRcdGFuZDogZmFsc2Vcblx0XHR9KTtcblxuXHRcdGFGaWx0ZXJzLnB1c2gob0FjdGl2ZUZpbHRlcik7XG5cdH1cblxuXHRyZXR1cm4gbmV3IEZpbHRlcihhRmlsdGVycyBhcyBhbnksIHRydWUpO1xufVxuZnVuY3Rpb24gZ2V0QWN0aXZlQ29udGV4dFBhdGgob0NvbnRyb2xsZXI6IGFueSwgc1BhZ2VFbnRpdHlOYW1lOiBhbnksIG9GaWx0ZXI6IGFueSkge1xuXHRjb25zdCBvTGlzdEJpbmRpbmcgPSBvQ29udHJvbGxlclxuXHRcdC5nZXRWaWV3KClcblx0XHQuZ2V0QmluZGluZ0NvbnRleHQoKVxuXHRcdC5nZXRNb2RlbCgpXG5cdFx0LmJpbmRMaXN0KGAvJHtzUGFnZUVudGl0eU5hbWV9YCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIG9GaWx0ZXIsIHsgXCIkJGdyb3VwSWRcIjogXCIkYXV0by5IZXJvZXNcIiB9KTtcblx0cmV0dXJuIG9MaXN0QmluZGluZy5yZXF1ZXN0Q29udGV4dHMoMCwgMikudGhlbihmdW5jdGlvbiAob0NvbnRleHRzOiBhbnkpIHtcblx0XHRpZiAob0NvbnRleHRzICYmIG9Db250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdHJldHVybiBvQ29udGV4dHNbMF0uZ2V0UGF0aCgpO1xuXHRcdH1cblx0fSk7XG59XG5mdW5jdGlvbiBnZXRBY3RpdmVDb250ZXh0SW5zdGFuY2VzKG9Db250ZXh0OiBhbnksIG9Db250cm9sbGVyOiBhbnksIG9FbnRpdHlTZXQ6IGFueSkge1xuXHRjb25zdCBhQWN0aXZlQ29udGV4dHByb21pc2VzOiBhbnlbXSA9IFtdO1xuXHRjb25zdCBhUGFnZXM6IGFueVtdID0gW107XG5cdGxldCBzTWV0YVBhdGggPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLmdldE1ldGFQYXRoKG9Db250ZXh0LmdldFBhdGgoKSk7XG5cdGlmIChzTWV0YVBhdGguaW5kZXhPZihcIi9cIikgPT09IDApIHtcblx0XHRzTWV0YVBhdGggPSBzTWV0YVBhdGguc3Vic3RyaW5nKDEpO1xuXHR9XG5cdGNvbnN0IGFNZXRhUGF0aEFycmF5ID0gc01ldGFQYXRoLnNwbGl0KFwiL1wiKTtcblx0Y29uc3Qgc0N1cnJlbnRIYXNoTm9QYXJhbXMgPSBIYXNoQ2hhbmdlci5nZXRJbnN0YW5jZSgpLmdldEhhc2goKS5zcGxpdChcIj9cIilbMF07XG5cdGNvbnN0IGFDdXJyZW50SGFzaEFycmF5ID0gc0N1cnJlbnRIYXNoTm9QYXJhbXMuc3BsaXQoXCIvXCIpO1xuXG5cdC8vIG9QYWdlTWFwIC0gY3JlYXRpbmcgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgbWFwIG9mIG1ldGFwYXRoIG5hbWUgYW5kIGl0J3MgdGVjaG5pY2FsIGRldGFpbHNcblx0Ly8gd2hpY2ggaXMgcmVxdWlyZWQgdG8gY3JlYXRlIGEgZmlsdGVyIHRvIGZldGNoIHRoZSByZWxhdmFudC9jb3JyZWN0IGFjdGl2ZSBjb250ZXh0XG5cdC8vIEV4YW1wbGU6IHtTYWxlc09yZGVyTWFuYWdlOnt0ZWNobmljYWxJRDp0ZWNobmljYWxJRFZhbHVlfSwgX0l0ZW06e3RlY2huaWNhbElEOnRlY2huaWNhbElEVmFsdWV9fSBldGMuLFxuXHRjb25zdCBvUGFnZU1hcDogYW55ID0ge307XG5cdGNvbnN0IGFQYWdlSGFzaEFycmF5OiBhbnlbXSA9IFtdO1xuXHRhQ3VycmVudEhhc2hBcnJheS5mb3JFYWNoKGZ1bmN0aW9uIChzUGFnZUhhc2g6IGFueSkge1xuXHRcdGNvbnN0IGFLZXlWYWx1ZXMgPSBzUGFnZUhhc2guc3Vic3RyaW5nKHNQYWdlSGFzaC5pbmRleE9mKFwiKFwiKSArIDEsIHNQYWdlSGFzaC5sZW5ndGggLSAxKS5zcGxpdChcIixcIik7XG5cdFx0Y29uc3QgbUtleVZhbHVlczogYW55ID0ge307XG5cdFx0Y29uc3Qgc1BhZ2VIYXNoTmFtZSA9IHNQYWdlSGFzaC5zcGxpdChcIihcIilbMF07XG5cdFx0b1BhZ2VNYXBbc1BhZ2VIYXNoTmFtZV0gPSB7fTtcblx0XHRhUGFnZUhhc2hBcnJheS5wdXNoKHNQYWdlSGFzaE5hbWUpO1xuXHRcdG9QYWdlTWFwW3NQYWdlSGFzaE5hbWVdW1wiYklzQWN0aXZlRW50aXR5RGVmaW5lZFwiXSA9IHRydWU7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhS2V5VmFsdWVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBzS2V5QXNzaWdubWVudCA9IGFLZXlWYWx1ZXNbaV07XG5cdFx0XHRjb25zdCBhUGFydHMgPSBzS2V5QXNzaWdubWVudC5zcGxpdChcIj1cIik7XG5cdFx0XHRsZXQgc0tleVZhbHVlID0gYVBhcnRzWzFdO1xuXHRcdFx0bGV0IHNLZXkgPSBhUGFydHNbMF07XG5cdFx0XHQvLyBJbiBjYXNlIGlmIG9ubHkgb25lIHRlY2huaWNhbCBrZXkgaXMgZGVmaW5lZCB0aGVuIHRoZSB1cmwganVzdCBjb250YWlucyB0aGUgdGVjaG5pY2FsSURWYWx1ZSBidXQgbm90IHRoZSB0ZWNobmljYWxJRFxuXHRcdFx0Ly8gRXhhbXBsZTogU2FsZXNPcmRlck1hbmFnZShJRD0xMTExMTEyOS1hYWFhLWJiYmItY2NjYy1kZGRkZWVlZWZmZmYsSXNBY3RpdmVFbnRpdHk9ZmFsc2UpL19JdGVtKDExMTExMTI5LWFhYWEtYmJiYi1jY2NjLWRkZGRlZWVlZmZmZilcblx0XHRcdC8vIEluIGFib3ZlIGV4YW1wbGUgU2FsZXNPcmRlckl0ZW0gaGFzIG9ubHkgb25lIHRlY2huaWNhbCBrZXkgZGVmaW5lZCwgaGVuY2UgdGVjaG5pY2FsSUQgaW5mbyBpcyBub3QgcHJlc2VudCBpbiB0aGUgdXJsXG5cdFx0XHQvLyBIZW5jZSBpbiBzdWNoIGNhc2VzIHdlIGdldCB0ZWNobmljYWwga2V5IGFuZCB1c2UgdGhlbSB0byBmZXRjaCBhY3RpdmUgY29udGV4dFxuXHRcdFx0aWYgKHNLZXlBc3NpZ25tZW50LmluZGV4T2YoXCI9XCIpID09PSAtMSkge1xuXHRcdFx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdFx0Y29uc3QgYVRlY2huaWNhbEtleXMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgLyR7YVBhZ2VIYXNoQXJyYXkuam9pbihcIi9cIil9LyRUeXBlLyRLZXlgKTtcblx0XHRcdFx0c0tleVZhbHVlID0gYVBhcnRzWzBdO1xuXHRcdFx0XHRzS2V5ID0gYVRlY2huaWNhbEtleXNbMF07XG5cdFx0XHRcdG9QYWdlTWFwW3NQYWdlSGFzaC5zcGxpdChcIihcIilbMF1dW1wiYklzQWN0aXZlRW50aXR5RGVmaW5lZFwiXSA9IGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc0tleSAhPT0gXCJJc0FjdGl2ZUVudGl0eVwiKSB7XG5cdFx0XHRcdGlmIChzS2V5VmFsdWUuaW5kZXhPZihcIidcIikgPT09IDAgJiYgc0tleVZhbHVlLmxhc3RJbmRleE9mKFwiJ1wiKSA9PT0gc0tleVZhbHVlLmxlbmd0aCAtIDEpIHtcblx0XHRcdFx0XHQvLyBSZW1vdmUgdGhlIHF1b3RlcyBmcm9tIHRoZSB2YWx1ZSBhbmQgZGVjb2RlIHNwZWNpYWwgY2hhcnNcblx0XHRcdFx0XHRzS2V5VmFsdWUgPSBkZWNvZGVVUklDb21wb25lbnQoc0tleVZhbHVlLnN1YnN0cmluZygxLCBzS2V5VmFsdWUubGVuZ3RoIC0gMSkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG1LZXlWYWx1ZXNbc0tleV0gPSBzS2V5VmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdG9QYWdlTWFwW3NQYWdlSGFzaE5hbWVdLm1LZXlWYWx1ZXMgPSBtS2V5VmFsdWVzO1xuXHR9KTtcblxuXHRsZXQgb1BhZ2VFbnRpdHlTZXQgPSBvRW50aXR5U2V0O1xuXHRhTWV0YVBhdGhBcnJheS5mb3JFYWNoKGZ1bmN0aW9uIChzTmF2aWdhdGlvblBhdGg6IGFueSkge1xuXHRcdGNvbnN0IG9QYWdlSW5mbzogYW55ID0ge307XG5cdFx0Y29uc3Qgc1BhZ2VFbnRpdHlTZXROYW1lID0gb1BhZ2VFbnRpdHlTZXQuJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcgJiYgb1BhZ2VFbnRpdHlTZXQuJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdbc05hdmlnYXRpb25QYXRoXTtcblx0XHRpZiAoc1BhZ2VFbnRpdHlTZXROYW1lKSB7XG5cdFx0XHRvUGFnZUluZm8ucGFnZUVudGl0eU5hbWUgPSBvUGFnZUVudGl0eVNldC4kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1tzTmF2aWdhdGlvblBhdGhdO1xuXHRcdFx0b1BhZ2VFbnRpdHlTZXQgPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLmdldE9iamVjdChgLyR7c1BhZ2VFbnRpdHlTZXROYW1lfWApIHx8IG9FbnRpdHlTZXQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9QYWdlSW5mby5wYWdlRW50aXR5TmFtZSA9IHNOYXZpZ2F0aW9uUGF0aDtcblx0XHR9XG5cdFx0b1BhZ2VJbmZvLm1LZXlWYWx1ZXMgPSBvUGFnZU1hcFtzTmF2aWdhdGlvblBhdGhdLm1LZXlWYWx1ZXM7XG5cdFx0b1BhZ2VJbmZvLmJJc0FjdGl2ZUVudGl0eURlZmluZWQgPSBvUGFnZU1hcFtzTmF2aWdhdGlvblBhdGhdLmJJc0FjdGl2ZUVudGl0eURlZmluZWQ7XG5cdFx0YVBhZ2VzLnB1c2gob1BhZ2VJbmZvKTtcblx0fSk7XG5cblx0YVBhZ2VzLmZvckVhY2goZnVuY3Rpb24gKG9QYWdlSW5mbzogYW55KSB7XG5cdFx0Y29uc3Qgb0ZpbHRlciA9IGNyZWF0ZUZpbHRlclRvRmV0Y2hBY3RpdmVDb250ZXh0KG9QYWdlSW5mby5tS2V5VmFsdWVzLCBvUGFnZUluZm8uYklzQWN0aXZlRW50aXR5RGVmaW5lZCk7XG5cdFx0YUFjdGl2ZUNvbnRleHRwcm9taXNlcy5wdXNoKGdldEFjdGl2ZUNvbnRleHRQYXRoKG9Db250cm9sbGVyLCBvUGFnZUluZm8ucGFnZUVudGl0eU5hbWUsIG9GaWx0ZXIpKTtcblx0fSk7XG5cblx0cmV0dXJuIGFBY3RpdmVDb250ZXh0cHJvbWlzZXM7XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIGZldGNoIGFjdGl2ZSBjb250ZXh0IHBhdGgncy5cbiAqXG4gKiBAcGFyYW0gb0NvbnRleHQgVGhlIFBhZ2UgQ29udGV4dFxuICogQHBhcmFtIG9Db250cm9sbGVyXG4gKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIG9uY2UgdGhlIGFjdGl2ZSBjb250ZXh0J3MgYXJlIGZldGNoZWRcbiAqL1xuZnVuY3Rpb24gZ2V0QWN0aXZlQ29udGV4dFBhdGhzKG9Db250ZXh0OiBhbnksIG9Db250cm9sbGVyOiBhbnkpIHtcblx0Y29uc3Qgc0N1cnJlbnRIYXNoTm9QYXJhbXMgPSBIYXNoQ2hhbmdlci5nZXRJbnN0YW5jZSgpLmdldEhhc2goKS5zcGxpdChcIj9cIilbMF07XG5cdGxldCBzUm9vdEVudGl0eU5hbWUgPSBzQ3VycmVudEhhc2hOb1BhcmFtcyAmJiBzQ3VycmVudEhhc2hOb1BhcmFtcy5zdWJzdHIoMCwgc0N1cnJlbnRIYXNoTm9QYXJhbXMuaW5kZXhPZihcIihcIikpO1xuXHRpZiAoc1Jvb3RFbnRpdHlOYW1lLmluZGV4T2YoXCIvXCIpID09PSAwKSB7XG5cdFx0c1Jvb3RFbnRpdHlOYW1lID0gc1Jvb3RFbnRpdHlOYW1lLnN1YnN0cmluZygxKTtcblx0fVxuXHRjb25zdCBvRW50aXR5U2V0ID0gb0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKS5nZXRPYmplY3QoYC8ke3NSb290RW50aXR5TmFtZX1gKTtcblx0Y29uc3Qgb1BhZ2VDb250ZXh0ID0gb0NvbnRleHQ7XG5cdGNvbnN0IGFBY3RpdmVDb250ZXh0cHJvbWlzZXMgPSBnZXRBY3RpdmVDb250ZXh0SW5zdGFuY2VzKG9Db250ZXh0LCBvQ29udHJvbGxlciwgb0VudGl0eVNldCk7XG5cdGlmIChhQWN0aXZlQ29udGV4dHByb21pc2VzLmxlbmd0aCA+IDApIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoYUFjdGl2ZUNvbnRleHRwcm9taXNlcylcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChhRGF0YTogYW55W10pIHtcblx0XHRcdFx0Y29uc3QgYUFjdGl2ZUNvbnRleHRQYXRocyA9IFtdO1xuXHRcdFx0XHRsZXQgb1BhZ2VFbnRpdHlTZXQgPSBvRW50aXR5U2V0O1xuXHRcdFx0XHRpZiAoYURhdGFbMF0uaW5kZXhPZihcIi9cIikgPT09IDApIHtcblx0XHRcdFx0XHRhQWN0aXZlQ29udGV4dFBhdGhzLnB1c2goYURhdGFbMF0uc3Vic3RyaW5nKDEpKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhQWN0aXZlQ29udGV4dFBhdGhzLnB1c2goYURhdGFbMF0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIEluIHRoZSBhY3RpdmUgY29udGV4dCBwYXRocyBpZGVudGlmeSBhbmQgcmVwbGFjZSB0aGUgZW50aXR5U2V0IE5hbWUgd2l0aCBjb3JyZXNwb25kaW5nIG5hdmlnYXRpb24gcHJvcGVydHkgbmFtZVxuXHRcdFx0XHQvLyBSZXF1aXJlZCB0byBmb3JtIHRoZSB1cmwgcG9pbnRpbmcgdG8gYWN0aXZlIGNvbnRleHRcblx0XHRcdFx0Ly8gRXhhbXBsZSA6IFNhbGVzT3JkZXJJdGVtIC0tPiBfSXRlbSwgTWF0ZXJpYWxEZXRhaWxzIC0tPiBfTWF0ZXJpYWxEZXRhaWxzIGV0Yy4sXG5cdFx0XHRcdGZvciAobGV0IGkgPSAxOyBpIDwgYURhdGEubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRsZXQgc0FjdGl2ZUNvbnRleHRQYXRoID0gYURhdGFbaV07XG5cdFx0XHRcdFx0bGV0IHNOYXZpZ2F0aW9Qcm9wZXJ0eSA9IFwiXCI7XG5cdFx0XHRcdFx0bGV0IHNFbnRpdHlTZXROYW1lID0gc0FjdGl2ZUNvbnRleHRQYXRoICYmIHNBY3RpdmVDb250ZXh0UGF0aC5zdWJzdHIoMCwgc0FjdGl2ZUNvbnRleHRQYXRoLmluZGV4T2YoXCIoXCIpKTtcblx0XHRcdFx0XHRpZiAoc0VudGl0eVNldE5hbWUuaW5kZXhPZihcIi9cIikgPT09IDApIHtcblx0XHRcdFx0XHRcdHNFbnRpdHlTZXROYW1lID0gc0VudGl0eVNldE5hbWUuc3Vic3RyaW5nKDEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoc0FjdGl2ZUNvbnRleHRQYXRoLmluZGV4T2YoXCIvXCIpID09PSAwKSB7XG5cdFx0XHRcdFx0XHRzQWN0aXZlQ29udGV4dFBhdGggPSBzQWN0aXZlQ29udGV4dFBhdGguc3Vic3RyaW5nKDEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRzTmF2aWdhdGlvUHJvcGVydHkgPSBPYmplY3Qua2V5cyhvUGFnZUVudGl0eVNldC4kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZylbXG5cdFx0XHRcdFx0XHRPYmplY3QudmFsdWVzKG9QYWdlRW50aXR5U2V0LiROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nKS5pbmRleE9mKHNFbnRpdHlTZXROYW1lKVxuXHRcdFx0XHRcdF07XG5cdFx0XHRcdFx0aWYgKHNOYXZpZ2F0aW9Qcm9wZXJ0eSkge1xuXHRcdFx0XHRcdFx0YUFjdGl2ZUNvbnRleHRQYXRocy5wdXNoKHNBY3RpdmVDb250ZXh0UGF0aC5yZXBsYWNlKHNFbnRpdHlTZXROYW1lLCBzTmF2aWdhdGlvUHJvcGVydHkpKTtcblx0XHRcdFx0XHRcdG9QYWdlRW50aXR5U2V0ID0gb1BhZ2VDb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkuZ2V0T2JqZWN0KGAvJHtzRW50aXR5U2V0TmFtZX1gKSB8fCBvRW50aXR5U2V0O1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRhQWN0aXZlQ29udGV4dFBhdGhzLnB1c2goc0FjdGl2ZUNvbnRleHRQYXRoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGFBY3RpdmVDb250ZXh0UGF0aHM7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuaW5mbyhcIkZhaWxlZCB0byByZXRyaWV2ZSBvbmUgb3IgbW9yZSBhY3RpdmUgY29udGV4dCBwYXRoJ3NcIiwgb0Vycm9yKTtcblx0XHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0fVxufVxuZnVuY3Rpb24gZmV0Y2hBY3RpdmVDb250ZXh0UGF0aHMob0NvbnRleHQ6IGFueSwgb0NvbnRyb2xsZXI6IGFueSkge1xuXHRsZXQgb1Byb21pc2UsIGFTZW1hbnRpY0tleXM7XG5cdGNvbnN0IHNDdXJyZW50SGFzaE5vUGFyYW1zID0gSGFzaENoYW5nZXIuZ2V0SW5zdGFuY2UoKS5nZXRIYXNoKCkuc3BsaXQoXCI/XCIpWzBdO1xuXHRpZiAob0NvbnRleHQpIHtcblx0XHRjb25zdCBvTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpO1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Ykdsb2JhbElzU3RpY2t5U3VwcG9ydGVkID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG9NZXRhTW9kZWwpO1xuXHRcdGxldCBzUm9vdEVudGl0eU5hbWUgPSBzQ3VycmVudEhhc2hOb1BhcmFtcyAmJiBzQ3VycmVudEhhc2hOb1BhcmFtcy5zdWJzdHIoMCwgc0N1cnJlbnRIYXNoTm9QYXJhbXMuaW5kZXhPZihcIihcIikpO1xuXHRcdGlmIChzUm9vdEVudGl0eU5hbWUuaW5kZXhPZihcIi9cIikgPT09IDApIHtcblx0XHRcdHNSb290RW50aXR5TmFtZSA9IHNSb290RW50aXR5TmFtZS5zdWJzdHJpbmcoMSk7XG5cdFx0fVxuXHRcdGFTZW1hbnRpY0tleXMgPSBTZW1hbnRpY0tleUhlbHBlci5nZXRTZW1hbnRpY0tleXMob01ldGFNb2RlbCwgc1Jvb3RFbnRpdHlOYW1lKTtcblx0fVxuXHQvLyBGZXRjaCBhY3RpdmUgY29udGV4dCBkZXRhaWxzIGluY2FzZSBvZiBiZWxvdyBzY2VuYXJpbydzKHdoZXJlIHBhZ2UgaXMgbm90IHN0aWNreSBzdXBwb3J0ZWQod2UgZG8gbm90IGhhdmUgZHJhZnQgaW5zdGFuY2UpKVxuXHQvLyAxLiBJbiBjYXNlIG9mIGRyYWZ0IGVuYWJsZWQgT2JqZWN0IHBhZ2Ugd2hlcmUgc2VtYW50aWMga2V5IGJhc2VkIFVSTCBpcyBub3QgcG9zc2libGUobGlrZSBzZW1hbnRpYyBrZXlzIGFyZSBub3QgbW9kZWxlZCBpbiB0aGUgZW50aXR5IHNldClcblx0Ly8gMi4gSW4gY2FzZSBvZiBkcmFmdCBlbmFibGVkIFN1YiBPYmplY3QgUGFnZXMgKHdoZXJlIHNlbWFudGljIGJvb2ttYXJraW5nIGlzIG5vdCBzdXBwb3J0ZWQpXG5cdGNvbnN0IG9WaWV3RGF0YSA9IG9Db250cm9sbGVyLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpO1xuXHRpZiAob0NvbnRleHQgJiYgIWJHbG9iYWxJc1N0aWNreVN1cHBvcnRlZCAmJiAoKG9WaWV3RGF0YS52aWV3TGV2ZWwgPT09IDEgJiYgIWFTZW1hbnRpY0tleXMpIHx8IG9WaWV3RGF0YS52aWV3TGV2ZWwgPj0gMikpIHtcblx0XHRvUHJvbWlzZSA9IGdldEFjdGl2ZUNvbnRleHRQYXRocyhvQ29udGV4dCwgb0NvbnRyb2xsZXIpO1xuXHRcdHJldHVybiBvUHJvbWlzZTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH1cbn1cblxuLy8gLyoqXG4vLyAgKiBHZXQgc2hhcmUgVVJMLlxuLy8gICogQHBhcmFtIGJJc0VkaXRhYmxlXG4vLyAgKiBAcGFyYW0gYklzU3RpY2t5U3VwcG9ydGVkXG4vLyAgKiBAcGFyYW0gYUFjdGl2ZUNvbnRleHRQYXRoc1xuLy8gICogQHJldHVybnMge3N0cmluZ30gVGhlIHNoYXJlIFVSTFxuLy8gICogQHByb3RlY3RlZFxuLy8gICogQHN0YXRpY1xuLy8gICovXG5mdW5jdGlvbiBnZXRTaGFyZVVybChiSXNFZGl0YWJsZTogYW55LCBiSXNTdGlja3lTdXBwb3J0ZWQ6IGFueSwgYUFjdGl2ZUNvbnRleHRQYXRoczogYW55KSB7XG5cdGxldCBzU2hhcmVVcmw7XG5cdGNvbnN0IHNIYXNoID0gSGFzaENoYW5nZXIuZ2V0SW5zdGFuY2UoKS5nZXRIYXNoKCk7XG5cdGNvbnN0IHNCYXNlUGF0aCA9IChIYXNoQ2hhbmdlci5nZXRJbnN0YW5jZSgpIGFzIGFueSkuaHJlZkZvckFwcFNwZWNpZmljSGFzaFxuXHRcdD8gKEhhc2hDaGFuZ2VyLmdldEluc3RhbmNlKCkgYXMgYW55KS5ocmVmRm9yQXBwU3BlY2lmaWNIYXNoKFwiXCIpXG5cdFx0OiBcIlwiO1xuXHRpZiAoYklzRWRpdGFibGUgJiYgIWJJc1N0aWNreVN1cHBvcnRlZCAmJiBhQWN0aXZlQ29udGV4dFBhdGhzKSB7XG5cdFx0c1NoYXJlVXJsID0gc0Jhc2VQYXRoICsgYUFjdGl2ZUNvbnRleHRQYXRocy5qb2luKFwiL1wiKTtcblx0fSBlbHNlIHtcblx0XHRzU2hhcmVVcmwgPSBzSGFzaCA/IHNCYXNlUGF0aCArIHNIYXNoIDogd2luZG93LmxvY2F0aW9uLmhhc2g7XG5cdH1cblx0cmV0dXJuIHNTaGFyZVVybDtcbn1cbmZ1bmN0aW9uIGdldFNoYXJlRW1haWxVcmwoKSB7XG5cdGNvbnN0IG9VU2hlbGxDb250YWluZXIgPSBzYXAudXNoZWxsICYmIHNhcC51c2hlbGwuQ29udGFpbmVyO1xuXHRpZiAob1VTaGVsbENvbnRhaW5lcikge1xuXHRcdHJldHVybiBvVVNoZWxsQ29udGFpbmVyXG5cdFx0XHQuZ2V0RkxQVXJsQXN5bmModHJ1ZSlcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChzRkxQVXJsOiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIHNGTFBVcmw7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChzRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJDb3VsZCBub3QgcmV0cmlldmUgY0ZMUCBVUkwgZm9yIHRoZSBzaGFyaW5nIGRpYWxvZyAoZGlhbG9nIHdpbGwgbm90IGJlIG9wZW5lZClcIiwgc0Vycm9yKTtcblx0XHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZG9jdW1lbnQuVVJMKTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRKYW1VcmwoYklzRWRpdE1vZGU6IGJvb2xlYW4sIGJJc1N0aWNreVN1cHBvcnRlZDogYW55LCBhQWN0aXZlQ29udGV4dFBhdGhzOiBhbnkpIHtcblx0bGV0IHNKYW1Vcmw6IHN0cmluZztcblx0Y29uc3Qgc0hhc2ggPSBIYXNoQ2hhbmdlci5nZXRJbnN0YW5jZSgpLmdldEhhc2goKTtcblx0Y29uc3Qgc0Jhc2VQYXRoID0gKEhhc2hDaGFuZ2VyLmdldEluc3RhbmNlKCkgYXMgYW55KS5ocmVmRm9yQXBwU3BlY2lmaWNIYXNoXG5cdFx0PyAoSGFzaENoYW5nZXIuZ2V0SW5zdGFuY2UoKSBhcyBhbnkpLmhyZWZGb3JBcHBTcGVjaWZpY0hhc2goXCJcIilcblx0XHQ6IFwiXCI7XG5cdGlmIChiSXNFZGl0TW9kZSAmJiAhYklzU3RpY2t5U3VwcG9ydGVkICYmIGFBY3RpdmVDb250ZXh0UGF0aHMpIHtcblx0XHRzSmFtVXJsID0gc0Jhc2VQYXRoICsgYUFjdGl2ZUNvbnRleHRQYXRocy5qb2luKFwiL1wiKTtcblx0fSBlbHNlIHtcblx0XHRzSmFtVXJsID0gc0hhc2ggPyBzQmFzZVBhdGggKyBzSGFzaCA6IHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuXHR9XG5cdC8vIGluIGNhc2Ugd2UgYXJlIGluIGNGTFAgc2NlbmFyaW8sIHRoZSBhcHBsaWNhdGlvbiBpcyBydW5uaW5nXG5cdC8vIGluc2lkZSBhbiBpZnJhbWUsIGFuZCB0aGVyZSBmb3Igd2UgbmVlZCB0byBnZXQgdGhlIGNGTFAgVVJMXG5cdC8vIGFuZCBub3QgJ2RvY3VtZW50LlVSTCcgdGhhdCByZXByZXNlbnRzIHRoZSBpZnJhbWUgVVJMXG5cdGlmIChzYXAudXNoZWxsICYmIHNhcC51c2hlbGwuQ29udGFpbmVyICYmIHNhcC51c2hlbGwuQ29udGFpbmVyLnJ1bm5pbmdJbklmcmFtZSAmJiBzYXAudXNoZWxsLkNvbnRhaW5lci5ydW5uaW5nSW5JZnJhbWUoKSkge1xuXHRcdHNhcC51c2hlbGwuQ29udGFpbmVyLmdldEZMUFVybCh0cnVlKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKHNVcmw6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gc1VybC5zdWJzdHIoMCwgc1VybC5pbmRleE9mKFwiI1wiKSkgKyBzSmFtVXJsO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAoc0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiQ291bGQgbm90IHJldHJpZXZlIGNGTFAgVVJMIGZvciB0aGUgc2hhcmluZyBkaWFsb2cgKGRpYWxvZyB3aWxsIG5vdCBiZSBvcGVuZWQpXCIsIHNFcnJvcik7XG5cdFx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4gKyB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgKyBzSmFtVXJsKTtcblx0fVxufVxuXG5jb25zdCBTaGFyZUV4dGVuc2lvbk92ZXJyaWRlID0ge1xuXHRhZGFwdFNoYXJlTWV0YWRhdGE6IGFzeW5jIGZ1bmN0aW9uICh0aGlzOiBTaGFyZSwgb1NoYXJlTWV0YWRhdGE6IGFueSkge1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gdGhpcy5iYXNlLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IG9VSU1vZGVsID0gdGhpcy5iYXNlLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpO1xuXHRcdGNvbnN0IGJJc0VkaXRhYmxlID0gb1VJTW9kZWwuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKTtcblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBhQWN0aXZlQ29udGV4dFBhdGhzID0gYXdhaXQgZmV0Y2hBY3RpdmVDb250ZXh0UGF0aHMob0NvbnRleHQsIHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpKTtcblx0XHRcdGNvbnN0IG9QYWdlVGl0bGVJbmZvID0gKHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIE9iamVjdFBhZ2VDb250cm9sbGVyKS5fZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24oKTtcblx0XHRcdGNvbnN0IG9EYXRhID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuXHRcdFx0XHRnZXRKYW1VcmwoYklzRWRpdGFibGUsIGJHbG9iYWxJc1N0aWNreVN1cHBvcnRlZCwgYUFjdGl2ZUNvbnRleHRQYXRocyksXG5cdFx0XHRcdGdldFNoYXJlVXJsKGJJc0VkaXRhYmxlLCBiR2xvYmFsSXNTdGlja3lTdXBwb3J0ZWQsIGFBY3RpdmVDb250ZXh0UGF0aHMpLFxuXHRcdFx0XHRnZXRTaGFyZUVtYWlsVXJsKClcblx0XHRcdF0pO1xuXG5cdFx0XHRsZXQgc1RpdGxlID0gb1BhZ2VUaXRsZUluZm8udGl0bGU7XG5cdFx0XHRjb25zdCBzT2JqZWN0U3VidGl0bGUgPSBvUGFnZVRpdGxlSW5mby5zdWJ0aXRsZSA/IG9QYWdlVGl0bGVJbmZvLnN1YnRpdGxlLnRvU3RyaW5nKCkgOiBcIlwiO1xuXHRcdFx0aWYgKHNPYmplY3RTdWJ0aXRsZSkge1xuXHRcdFx0XHRzVGl0bGUgPSBgJHtzVGl0bGV9IC0gJHtzT2JqZWN0U3VidGl0bGV9YDtcblx0XHRcdH1cblx0XHRcdG9TaGFyZU1ldGFkYXRhLnRpbGUgPSB7XG5cdFx0XHRcdHRpdGxlOiBvUGFnZVRpdGxlSW5mby50aXRsZSxcblx0XHRcdFx0c3VidGl0bGU6IHNPYmplY3RTdWJ0aXRsZVxuXHRcdFx0fTtcblx0XHRcdG9TaGFyZU1ldGFkYXRhLmVtYWlsLnRpdGxlID0gc1RpdGxlO1xuXHRcdFx0b1NoYXJlTWV0YWRhdGEudGl0bGUgPSBzVGl0bGU7XG5cdFx0XHRvU2hhcmVNZXRhZGF0YS5qYW0udXJsID0gb0RhdGFbMF07XG5cdFx0XHRvU2hhcmVNZXRhZGF0YS51cmwgPSBvRGF0YVsxXTtcblx0XHRcdG9TaGFyZU1ldGFkYXRhLmVtYWlsLnVybCA9IG9EYXRhWzJdO1xuXHRcdH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcblx0XHRcdExvZy5lcnJvcihlcnJvcik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG9TaGFyZU1ldGFkYXRhO1xuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBTaGFyZUV4dGVuc2lvbk92ZXJyaWRlO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7O0VBa2pCTyxnQkFBZ0JBLElBQWhCLEVBQXNCQyxPQUF0QixFQUErQjtJQUNyQyxJQUFJO01BQ0gsSUFBSUMsTUFBTSxHQUFHRixJQUFJLEVBQWpCO0lBQ0EsQ0FGRCxDQUVFLE9BQU1HLENBQU4sRUFBUztNQUNWLE9BQU9GLE9BQU8sQ0FBQ0UsQ0FBRCxDQUFkO0lBQ0E7O0lBQ0QsSUFBSUQsTUFBTSxJQUFJQSxNQUFNLENBQUNFLElBQXJCLEVBQTJCO01BQzFCLE9BQU9GLE1BQU0sQ0FBQ0UsSUFBUCxDQUFZLEtBQUssQ0FBakIsRUFBb0JILE9BQXBCLENBQVA7SUFDQTs7SUFDRCxPQUFPQyxNQUFQO0VBQ0E7O0VBbmpCRCxJQUFJRyx3QkFBSjs7RUFFQSxTQUFTQyxnQ0FBVCxDQUEwQ0MsVUFBMUMsRUFBMkRDLHNCQUEzRCxF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
339
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJib2R5IiwicmVjb3ZlciIsInJlc3VsdCIsImUiLCJ0aGVuIiwiYkdsb2JhbElzU3RpY2t5U3VwcG9ydGVkIiwiY3JlYXRlRmlsdGVyVG9GZXRjaEFjdGl2ZUNvbnRleHQiLCJtS2V5VmFsdWVzIiwiYklzQWN0aXZlRW50aXR5RGVmaW5lZCIsImFLZXlzIiwiT2JqZWN0Iiwia2V5cyIsImFGaWx0ZXJzIiwibWFwIiwic0tleSIsInNWYWx1ZSIsInVuZGVmaW5lZCIsIkZpbHRlciIsIkZpbHRlck9wZXJhdG9yIiwiRVEiLCJvQWN0aXZlRmlsdGVyIiwiZmlsdGVycyIsImFuZCIsInB1c2giLCJnZXRBY3RpdmVDb250ZXh0UGF0aCIsIm9Db250cm9sbGVyIiwic1BhZ2VFbnRpdHlOYW1lIiwib0ZpbHRlciIsIm9MaXN0QmluZGluZyIsImdldFZpZXciLCJnZXRCaW5kaW5nQ29udGV4dCIsImdldE1vZGVsIiwiYmluZExpc3QiLCJyZXF1ZXN0Q29udGV4dHMiLCJvQ29udGV4dHMiLCJsZW5ndGgiLCJnZXRQYXRoIiwiZ2V0QWN0aXZlQ29udGV4dEluc3RhbmNlcyIsIm9Db250ZXh0Iiwib0VudGl0eVNldCIsImFBY3RpdmVDb250ZXh0cHJvbWlzZXMiLCJhUGFnZXMiLCJzTWV0YVBhdGgiLCJnZXRNZXRhTW9kZWwiLCJnZXRNZXRhUGF0aCIsImluZGV4T2YiLCJzdWJzdHJpbmciLCJhTWV0YVBhdGhBcnJheSIsInNwbGl0Iiwic0N1cnJlbnRIYXNoTm9QYXJhbXMiLCJIYXNoQ2hhbmdlciIsImdldEluc3RhbmNlIiwiZ2V0SGFzaCIsImFDdXJyZW50SGFzaEFycmF5Iiwib1BhZ2VNYXAiLCJhUGFnZUhhc2hBcnJheSIsImZvckVhY2giLCJzUGFnZUhhc2giLCJhS2V5VmFsdWVzIiwic1BhZ2VIYXNoTmFtZSIsImkiLCJzS2V5QXNzaWdubWVudCIsImFQYXJ0cyIsInNLZXlWYWx1ZSIsIm9NZXRhTW9kZWwiLCJhVGVjaG5pY2FsS2V5cyIsImdldE9iamVjdCIsImpvaW4iLCJsYXN0SW5kZXhPZiIsImRlY29kZVVSSUNvbXBvbmVudCIsIm9QYWdlRW50aXR5U2V0Iiwic05hdmlnYXRpb25QYXRoIiwib1BhZ2VJbmZvIiwic1BhZ2VFbnRpdHlTZXROYW1lIiwiJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmciLCJwYWdlRW50aXR5TmFtZSIsImdldEFjdGl2ZUNvbnRleHRQYXRocyIsInNSb290RW50aXR5TmFtZSIsInN1YnN0ciIsIm9QYWdlQ29udGV4dCIsIlByb21pc2UiLCJhbGwiLCJhRGF0YSIsImFBY3RpdmVDb250ZXh0UGF0aHMiLCJzQWN0aXZlQ29udGV4dFBhdGgiLCJzTmF2aWdhdGlvUHJvcGVydHkiLCJzRW50aXR5U2V0TmFtZSIsInZhbHVlcyIsInJlcGxhY2UiLCJjYXRjaCIsIm9FcnJvciIsIkxvZyIsImluZm8iLCJyZXNvbHZlIiwiZmV0Y2hBY3RpdmVDb250ZXh0UGF0aHMiLCJvUHJvbWlzZSIsImFTZW1hbnRpY0tleXMiLCJvTW9kZWwiLCJNb2RlbEhlbHBlciIsImlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsIlNlbWFudGljS2V5SGVscGVyIiwiZ2V0U2VtYW50aWNLZXlzIiwib1ZpZXdEYXRhIiwiZ2V0Vmlld0RhdGEiLCJ2aWV3TGV2ZWwiLCJnZXRTaGFyZVVybCIsImJJc0VkaXRhYmxlIiwiYklzU3RpY2t5U3VwcG9ydGVkIiwic1NoYXJlVXJsIiwic0hhc2giLCJzQmFzZVBhdGgiLCJocmVmRm9yQXBwU3BlY2lmaWNIYXNoIiwid2luZG93IiwibG9jYXRpb24iLCJoYXNoIiwib3JpZ2luIiwicGF0aG5hbWUiLCJnZXRTaGFyZUVtYWlsVXJsIiwib1VTaGVsbENvbnRhaW5lciIsInNhcCIsInVzaGVsbCIsIkNvbnRhaW5lciIsImdldEZMUFVybEFzeW5jIiwic0ZMUFVybCIsInNFcnJvciIsImVycm9yIiwiZG9jdW1lbnQiLCJVUkwiLCJnZXRKYW1VcmwiLCJiSXNFZGl0TW9kZSIsInNKYW1VcmwiLCJydW5uaW5nSW5JZnJhbWUiLCJnZXRGTFBVcmwiLCJzVXJsIiwiU2hhcmVFeHRlbnNpb25PdmVycmlkZSIsImFkYXB0U2hhcmVNZXRhZGF0YSIsIm9TaGFyZU1ldGFkYXRhIiwiYmFzZSIsIm9VSU1vZGVsIiwiZ2V0UHJvcGVydHkiLCJnZXRDb250cm9sbGVyIiwib1BhZ2VUaXRsZUluZm8iLCJfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24iLCJvRGF0YSIsInNUaXRsZSIsInRpdGxlIiwic09iamVjdFN1YnRpdGxlIiwic3VidGl0bGUiLCJ0b1N0cmluZyIsInRpbGUiLCJlbWFpbCIsImphbSIsInVybCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiU2hhcmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBTaGFyZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvU2hhcmVcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IFNlbWFudGljS2V5SGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1NlbWFudGljS2V5SGVscGVyXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL09iamVjdFBhZ2VDb250cm9sbGVyLmNvbnRyb2xsZXJcIjtcbmltcG9ydCBIYXNoQ2hhbmdlciBmcm9tIFwic2FwL3VpL2NvcmUvcm91dGluZy9IYXNoQ2hhbmdlclwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyT3BlcmF0b3JcIjtcblxubGV0IGJHbG9iYWxJc1N0aWNreVN1cHBvcnRlZDogYm9vbGVhbjtcblxuZnVuY3Rpb24gY3JlYXRlRmlsdGVyVG9GZXRjaEFjdGl2ZUNvbnRleHQobUtleVZhbHVlczogYW55LCBiSXNBY3RpdmVFbnRpdHlEZWZpbmVkOiBhbnkpIHtcblx0Y29uc3QgYUtleXMgPSBPYmplY3Qua2V5cyhtS2V5VmFsdWVzKTtcblxuXHRjb25zdCBhRmlsdGVycyA9IGFLZXlzLm1hcChmdW5jdGlvbiAoc0tleTogc3RyaW5nKSB7XG5cdFx0Y29uc3Qgc1ZhbHVlID0gbUtleVZhbHVlc1tzS2V5XTtcblx0XHRpZiAoc1ZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiBuZXcgRmlsdGVyKHNLZXksIEZpbHRlck9wZXJhdG9yLkVRLCBzVmFsdWUpO1xuXHRcdH1cblx0fSk7XG5cblx0aWYgKGJJc0FjdGl2ZUVudGl0eURlZmluZWQpIHtcblx0XHRjb25zdCBvQWN0aXZlRmlsdGVyID0gbmV3IEZpbHRlcih7XG5cdFx0XHRmaWx0ZXJzOiBbbmV3IEZpbHRlcihcIlNpYmxpbmdFbnRpdHkvSXNBY3RpdmVFbnRpdHlcIiwgRmlsdGVyT3BlcmF0b3IuRVEsIHRydWUpXSxcblx0XHRcdGFuZDogZmFsc2Vcblx0XHR9KTtcblxuXHRcdGFGaWx0ZXJzLnB1c2gob0FjdGl2ZUZpbHRlcik7XG5cdH1cblxuXHRyZXR1cm4gbmV3IEZpbHRlcihhRmlsdGVycyBhcyBhbnksIHRydWUpO1xufVxuZnVuY3Rpb24gZ2V0QWN0aXZlQ29udGV4dFBhdGgob0NvbnRyb2xsZXI6IGFueSwgc1BhZ2VFbnRpdHlOYW1lOiBhbnksIG9GaWx0ZXI6IGFueSkge1xuXHRjb25zdCBvTGlzdEJpbmRpbmcgPSBvQ29udHJvbGxlclxuXHRcdC5nZXRWaWV3KClcblx0XHQuZ2V0QmluZGluZ0NvbnRleHQoKVxuXHRcdC5nZXRNb2RlbCgpXG5cdFx0LmJpbmRMaXN0KGAvJHtzUGFnZUVudGl0eU5hbWV9YCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIG9GaWx0ZXIsIHsgXCIkJGdyb3VwSWRcIjogXCIkYXV0by5IZXJvZXNcIiB9KTtcblx0cmV0dXJuIG9MaXN0QmluZGluZy5yZXF1ZXN0Q29udGV4dHMoMCwgMikudGhlbihmdW5jdGlvbiAob0NvbnRleHRzOiBhbnkpIHtcblx0XHRpZiAob0NvbnRleHRzICYmIG9Db250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdHJldHVybiBvQ29udGV4dHNbMF0uZ2V0UGF0aCgpO1xuXHRcdH1cblx0fSk7XG59XG5mdW5jdGlvbiBnZXRBY3RpdmVDb250ZXh0SW5zdGFuY2VzKG9Db250ZXh0OiBhbnksIG9Db250cm9sbGVyOiBhbnksIG9FbnRpdHlTZXQ6IGFueSkge1xuXHRjb25zdCBhQWN0aXZlQ29udGV4dHByb21pc2VzOiBhbnlbXSA9IFtdO1xuXHRjb25zdCBhUGFnZXM6IGFueVtdID0gW107XG5cdGxldCBzTWV0YVBhdGggPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLmdldE1ldGFQYXRoKG9Db250ZXh0LmdldFBhdGgoKSk7XG5cdGlmIChzTWV0YVBhdGguaW5kZXhPZihcIi9cIikgPT09IDApIHtcblx0XHRzTWV0YVBhdGggPSBzTWV0YVBhdGguc3Vic3RyaW5nKDEpO1xuXHR9XG5cdGNvbnN0IGFNZXRhUGF0aEFycmF5ID0gc01ldGFQYXRoLnNwbGl0KFwiL1wiKTtcblx0Y29uc3Qgc0N1cnJlbnRIYXNoTm9QYXJhbXMgPSBIYXNoQ2hhbmdlci5nZXRJbnN0YW5jZSgpLmdldEhhc2goKS5zcGxpdChcIj9cIilbMF07XG5cdGNvbnN0IGFDdXJyZW50SGFzaEFycmF5ID0gc0N1cnJlbnRIYXNoTm9QYXJhbXMuc3BsaXQoXCIvXCIpO1xuXG5cdC8vIG9QYWdlTWFwIC0gY3JlYXRpbmcgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgbWFwIG9mIG1ldGFwYXRoIG5hbWUgYW5kIGl0J3MgdGVjaG5pY2FsIGRldGFpbHNcblx0Ly8gd2hpY2ggaXMgcmVxdWlyZWQgdG8gY3JlYXRlIGEgZmlsdGVyIHRvIGZldGNoIHRoZSByZWxhdmFudC9jb3JyZWN0IGFjdGl2ZSBjb250ZXh0XG5cdC8vIEV4YW1wbGU6IHtTYWxlc09yZGVyTWFuYWdlOnt0ZWNobmljYWxJRDp0ZWNobmljYWxJRFZhbHVlfSwgX0l0ZW06e3RlY2huaWNhbElEOnRlY2huaWNhbElEVmFsdWV9fSBldGMuLFxuXHRjb25zdCBvUGFnZU1hcDogYW55ID0ge307XG5cdGNvbnN0IGFQYWdlSGFzaEFycmF5OiBhbnlbXSA9IFtdO1xuXHRhQ3VycmVudEhhc2hBcnJheS5mb3JFYWNoKGZ1bmN0aW9uIChzUGFnZUhhc2g6IGFueSkge1xuXHRcdGNvbnN0IGFLZXlWYWx1ZXMgPSBzUGFnZUhhc2guc3Vic3RyaW5nKHNQYWdlSGFzaC5pbmRleE9mKFwiKFwiKSArIDEsIHNQYWdlSGFzaC5sZW5ndGggLSAxKS5zcGxpdChcIixcIik7XG5cdFx0Y29uc3QgbUtleVZhbHVlczogYW55ID0ge307XG5cdFx0Y29uc3Qgc1BhZ2VIYXNoTmFtZSA9IHNQYWdlSGFzaC5zcGxpdChcIihcIilbMF07XG5cdFx0b1BhZ2VNYXBbc1BhZ2VIYXNoTmFtZV0gPSB7fTtcblx0XHRhUGFnZUhhc2hBcnJheS5wdXNoKHNQYWdlSGFzaE5hbWUpO1xuXHRcdG9QYWdlTWFwW3NQYWdlSGFzaE5hbWVdW1wiYklzQWN0aXZlRW50aXR5RGVmaW5lZFwiXSA9IHRydWU7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhS2V5VmFsdWVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBzS2V5QXNzaWdubWVudCA9IGFLZXlWYWx1ZXNbaV07XG5cdFx0XHRjb25zdCBhUGFydHMgPSBzS2V5QXNzaWdubWVudC5zcGxpdChcIj1cIik7XG5cdFx0XHRsZXQgc0tleVZhbHVlID0gYVBhcnRzWzFdO1xuXHRcdFx0bGV0IHNLZXkgPSBhUGFydHNbMF07XG5cdFx0XHQvLyBJbiBjYXNlIGlmIG9ubHkgb25lIHRlY2huaWNhbCBrZXkgaXMgZGVmaW5lZCB0aGVuIHRoZSB1cmwganVzdCBjb250YWlucyB0aGUgdGVjaG5pY2FsSURWYWx1ZSBidXQgbm90IHRoZSB0ZWNobmljYWxJRFxuXHRcdFx0Ly8gRXhhbXBsZTogU2FsZXNPcmRlck1hbmFnZShJRD0xMTExMTEyOS1hYWFhLWJiYmItY2NjYy1kZGRkZWVlZWZmZmYsSXNBY3RpdmVFbnRpdHk9ZmFsc2UpL19JdGVtKDExMTExMTI5LWFhYWEtYmJiYi1jY2NjLWRkZGRlZWVlZmZmZilcblx0XHRcdC8vIEluIGFib3ZlIGV4YW1wbGUgU2FsZXNPcmRlckl0ZW0gaGFzIG9ubHkgb25lIHRlY2huaWNhbCBrZXkgZGVmaW5lZCwgaGVuY2UgdGVjaG5pY2FsSUQgaW5mbyBpcyBub3QgcHJlc2VudCBpbiB0aGUgdXJsXG5cdFx0XHQvLyBIZW5jZSBpbiBzdWNoIGNhc2VzIHdlIGdldCB0ZWNobmljYWwga2V5IGFuZCB1c2UgdGhlbSB0byBmZXRjaCBhY3RpdmUgY29udGV4dFxuXHRcdFx0aWYgKHNLZXlBc3NpZ25tZW50LmluZGV4T2YoXCI9XCIpID09PSAtMSkge1xuXHRcdFx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdFx0Y29uc3QgYVRlY2huaWNhbEtleXMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgLyR7YVBhZ2VIYXNoQXJyYXkuam9pbihcIi9cIil9LyRUeXBlLyRLZXlgKTtcblx0XHRcdFx0c0tleVZhbHVlID0gYVBhcnRzWzBdO1xuXHRcdFx0XHRzS2V5ID0gYVRlY2huaWNhbEtleXNbMF07XG5cdFx0XHRcdG9QYWdlTWFwW3NQYWdlSGFzaC5zcGxpdChcIihcIilbMF1dW1wiYklzQWN0aXZlRW50aXR5RGVmaW5lZFwiXSA9IGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc0tleSAhPT0gXCJJc0FjdGl2ZUVudGl0eVwiKSB7XG5cdFx0XHRcdGlmIChzS2V5VmFsdWUuaW5kZXhPZihcIidcIikgPT09IDAgJiYgc0tleVZhbHVlLmxhc3RJbmRleE9mKFwiJ1wiKSA9PT0gc0tleVZhbHVlLmxlbmd0aCAtIDEpIHtcblx0XHRcdFx0XHQvLyBSZW1vdmUgdGhlIHF1b3RlcyBmcm9tIHRoZSB2YWx1ZSBhbmQgZGVjb2RlIHNwZWNpYWwgY2hhcnNcblx0XHRcdFx0XHRzS2V5VmFsdWUgPSBkZWNvZGVVUklDb21wb25lbnQoc0tleVZhbHVlLnN1YnN0cmluZygxLCBzS2V5VmFsdWUubGVuZ3RoIC0gMSkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG1LZXlWYWx1ZXNbc0tleV0gPSBzS2V5VmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdG9QYWdlTWFwW3NQYWdlSGFzaE5hbWVdLm1LZXlWYWx1ZXMgPSBtS2V5VmFsdWVzO1xuXHR9KTtcblxuXHRsZXQgb1BhZ2VFbnRpdHlTZXQgPSBvRW50aXR5U2V0O1xuXHRhTWV0YVBhdGhBcnJheS5mb3JFYWNoKGZ1bmN0aW9uIChzTmF2aWdhdGlvblBhdGg6IGFueSkge1xuXHRcdGNvbnN0IG9QYWdlSW5mbzogYW55ID0ge307XG5cdFx0Y29uc3Qgc1BhZ2VFbnRpdHlTZXROYW1lID0gb1BhZ2VFbnRpdHlTZXQuJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcgJiYgb1BhZ2VFbnRpdHlTZXQuJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdbc05hdmlnYXRpb25QYXRoXTtcblx0XHRpZiAoc1BhZ2VFbnRpdHlTZXROYW1lKSB7XG5cdFx0XHRvUGFnZUluZm8ucGFnZUVudGl0eU5hbWUgPSBvUGFnZUVudGl0eVNldC4kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1tzTmF2aWdhdGlvblBhdGhdO1xuXHRcdFx0b1BhZ2VFbnRpdHlTZXQgPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLmdldE9iamVjdChgLyR7c1BhZ2VFbnRpdHlTZXROYW1lfWApIHx8IG9FbnRpdHlTZXQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9QYWdlSW5mby5wYWdlRW50aXR5TmFtZSA9IHNOYXZpZ2F0aW9uUGF0aDtcblx0XHR9XG5cdFx0b1BhZ2VJbmZvLm1LZXlWYWx1ZXMgPSBvUGFnZU1hcFtzTmF2aWdhdGlvblBhdGhdLm1LZXlWYWx1ZXM7XG5cdFx0b1BhZ2VJbmZvLmJJc0FjdGl2ZUVudGl0eURlZmluZWQgPSBvUGFnZU1hcFtzTmF2aWdhdGlvblBhdGhdLmJJc0FjdGl2ZUVudGl0eURlZmluZWQ7XG5cdFx0YVBhZ2VzLnB1c2gob1BhZ2VJbmZvKTtcblx0fSk7XG5cblx0YVBhZ2VzLmZvckVhY2goZnVuY3Rpb24gKG9QYWdlSW5mbzogYW55KSB7XG5cdFx0Y29uc3Qgb0ZpbHRlciA9IGNyZWF0ZUZpbHRlclRvRmV0Y2hBY3RpdmVDb250ZXh0KG9QYWdlSW5mby5tS2V5VmFsdWVzLCBvUGFnZUluZm8uYklzQWN0aXZlRW50aXR5RGVmaW5lZCk7XG5cdFx0YUFjdGl2ZUNvbnRleHRwcm9taXNlcy5wdXNoKGdldEFjdGl2ZUNvbnRleHRQYXRoKG9Db250cm9sbGVyLCBvUGFnZUluZm8ucGFnZUVudGl0eU5hbWUsIG9GaWx0ZXIpKTtcblx0fSk7XG5cblx0cmV0dXJuIGFBY3RpdmVDb250ZXh0cHJvbWlzZXM7XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIGZldGNoIGFjdGl2ZSBjb250ZXh0IHBhdGgncy5cbiAqXG4gKiBAcGFyYW0gb0NvbnRleHQgVGhlIFBhZ2UgQ29udGV4dFxuICogQHBhcmFtIG9Db250cm9sbGVyXG4gKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIG9uY2UgdGhlIGFjdGl2ZSBjb250ZXh0J3MgYXJlIGZldGNoZWRcbiAqL1xuZnVuY3Rpb24gZ2V0QWN0aXZlQ29udGV4dFBhdGhzKG9Db250ZXh0OiBhbnksIG9Db250cm9sbGVyOiBhbnkpIHtcblx0Y29uc3Qgc0N1cnJlbnRIYXNoTm9QYXJhbXMgPSBIYXNoQ2hhbmdlci5nZXRJbnN0YW5jZSgpLmdldEhhc2goKS5zcGxpdChcIj9cIilbMF07XG5cdGxldCBzUm9vdEVudGl0eU5hbWUgPSBzQ3VycmVudEhhc2hOb1BhcmFtcyAmJiBzQ3VycmVudEhhc2hOb1BhcmFtcy5zdWJzdHIoMCwgc0N1cnJlbnRIYXNoTm9QYXJhbXMuaW5kZXhPZihcIihcIikpO1xuXHRpZiAoc1Jvb3RFbnRpdHlOYW1lLmluZGV4T2YoXCIvXCIpID09PSAwKSB7XG5cdFx0c1Jvb3RFbnRpdHlOYW1lID0gc1Jvb3RFbnRpdHlOYW1lLnN1YnN0cmluZygxKTtcblx0fVxuXHRjb25zdCBvRW50aXR5U2V0ID0gb0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKS5nZXRPYmplY3QoYC8ke3NSb290RW50aXR5TmFtZX1gKTtcblx0Y29uc3Qgb1BhZ2VDb250ZXh0ID0gb0NvbnRleHQ7XG5cdGNvbnN0IGFBY3RpdmVDb250ZXh0cHJvbWlzZXMgPSBnZXRBY3RpdmVDb250ZXh0SW5zdGFuY2VzKG9Db250ZXh0LCBvQ29udHJvbGxlciwgb0VudGl0eVNldCk7XG5cdGlmIChhQWN0aXZlQ29udGV4dHByb21pc2VzLmxlbmd0aCA+IDApIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoYUFjdGl2ZUNvbnRleHRwcm9taXNlcylcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChhRGF0YTogYW55W10pIHtcblx0XHRcdFx0Y29uc3QgYUFjdGl2ZUNvbnRleHRQYXRocyA9IFtdO1xuXHRcdFx0XHRsZXQgb1BhZ2VFbnRpdHlTZXQgPSBvRW50aXR5U2V0O1xuXHRcdFx0XHRpZiAoYURhdGFbMF0uaW5kZXhPZihcIi9cIikgPT09IDApIHtcblx0XHRcdFx0XHRhQWN0aXZlQ29udGV4dFBhdGhzLnB1c2goYURhdGFbMF0uc3Vic3RyaW5nKDEpKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhQWN0aXZlQ29udGV4dFBhdGhzLnB1c2goYURhdGFbMF0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIEluIHRoZSBhY3RpdmUgY29udGV4dCBwYXRocyBpZGVudGlmeSBhbmQgcmVwbGFjZSB0aGUgZW50aXR5U2V0IE5hbWUgd2l0aCBjb3JyZXNwb25kaW5nIG5hdmlnYXRpb24gcHJvcGVydHkgbmFtZVxuXHRcdFx0XHQvLyBSZXF1aXJlZCB0byBmb3JtIHRoZSB1cmwgcG9pbnRpbmcgdG8gYWN0aXZlIGNvbnRleHRcblx0XHRcdFx0Ly8gRXhhbXBsZSA6IFNhbGVzT3JkZXJJdGVtIC0tPiBfSXRlbSwgTWF0ZXJpYWxEZXRhaWxzIC0tPiBfTWF0ZXJpYWxEZXRhaWxzIGV0Yy4sXG5cdFx0XHRcdGZvciAobGV0IGkgPSAxOyBpIDwgYURhdGEubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRsZXQgc0FjdGl2ZUNvbnRleHRQYXRoID0gYURhdGFbaV07XG5cdFx0XHRcdFx0bGV0IHNOYXZpZ2F0aW9Qcm9wZXJ0eSA9IFwiXCI7XG5cdFx0XHRcdFx0bGV0IHNFbnRpdHlTZXROYW1lID0gc0FjdGl2ZUNvbnRleHRQYXRoICYmIHNBY3RpdmVDb250ZXh0UGF0aC5zdWJzdHIoMCwgc0FjdGl2ZUNvbnRleHRQYXRoLmluZGV4T2YoXCIoXCIpKTtcblx0XHRcdFx0XHRpZiAoc0VudGl0eVNldE5hbWUuaW5kZXhPZihcIi9cIikgPT09IDApIHtcblx0XHRcdFx0XHRcdHNFbnRpdHlTZXROYW1lID0gc0VudGl0eVNldE5hbWUuc3Vic3RyaW5nKDEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoc0FjdGl2ZUNvbnRleHRQYXRoLmluZGV4T2YoXCIvXCIpID09PSAwKSB7XG5cdFx0XHRcdFx0XHRzQWN0aXZlQ29udGV4dFBhdGggPSBzQWN0aXZlQ29udGV4dFBhdGguc3Vic3RyaW5nKDEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRzTmF2aWdhdGlvUHJvcGVydHkgPSBPYmplY3Qua2V5cyhvUGFnZUVudGl0eVNldC4kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZylbXG5cdFx0XHRcdFx0XHRPYmplY3QudmFsdWVzKG9QYWdlRW50aXR5U2V0LiROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nKS5pbmRleE9mKHNFbnRpdHlTZXROYW1lKVxuXHRcdFx0XHRcdF07XG5cdFx0XHRcdFx0aWYgKHNOYXZpZ2F0aW9Qcm9wZXJ0eSkge1xuXHRcdFx0XHRcdFx0YUFjdGl2ZUNvbnRleHRQYXRocy5wdXNoKHNBY3RpdmVDb250ZXh0UGF0aC5yZXBsYWNlKHNFbnRpdHlTZXROYW1lLCBzTmF2aWdhdGlvUHJvcGVydHkpKTtcblx0XHRcdFx0XHRcdG9QYWdlRW50aXR5U2V0ID0gb1BhZ2VDb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkuZ2V0T2JqZWN0KGAvJHtzRW50aXR5U2V0TmFtZX1gKSB8fCBvRW50aXR5U2V0O1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRhQWN0aXZlQ29udGV4dFBhdGhzLnB1c2goc0FjdGl2ZUNvbnRleHRQYXRoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGFBY3RpdmVDb250ZXh0UGF0aHM7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuaW5mbyhcIkZhaWxlZCB0byByZXRyaWV2ZSBvbmUgb3IgbW9yZSBhY3RpdmUgY29udGV4dCBwYXRoJ3NcIiwgb0Vycm9yKTtcblx0XHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0fVxufVxuZnVuY3Rpb24gZmV0Y2hBY3RpdmVDb250ZXh0UGF0aHMob0NvbnRleHQ6IGFueSwgb0NvbnRyb2xsZXI6IGFueSkge1xuXHRsZXQgb1Byb21pc2UsIGFTZW1hbnRpY0tleXM7XG5cdGNvbnN0IHNDdXJyZW50SGFzaE5vUGFyYW1zID0gSGFzaENoYW5nZXIuZ2V0SW5zdGFuY2UoKS5nZXRIYXNoKCkuc3BsaXQoXCI/XCIpWzBdO1xuXHRpZiAob0NvbnRleHQpIHtcblx0XHRjb25zdCBvTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpO1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Ykdsb2JhbElzU3RpY2t5U3VwcG9ydGVkID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG9NZXRhTW9kZWwpO1xuXHRcdGxldCBzUm9vdEVudGl0eU5hbWUgPSBzQ3VycmVudEhhc2hOb1BhcmFtcyAmJiBzQ3VycmVudEhhc2hOb1BhcmFtcy5zdWJzdHIoMCwgc0N1cnJlbnRIYXNoTm9QYXJhbXMuaW5kZXhPZihcIihcIikpO1xuXHRcdGlmIChzUm9vdEVudGl0eU5hbWUuaW5kZXhPZihcIi9cIikgPT09IDApIHtcblx0XHRcdHNSb290RW50aXR5TmFtZSA9IHNSb290RW50aXR5TmFtZS5zdWJzdHJpbmcoMSk7XG5cdFx0fVxuXHRcdGFTZW1hbnRpY0tleXMgPSBTZW1hbnRpY0tleUhlbHBlci5nZXRTZW1hbnRpY0tleXMob01ldGFNb2RlbCwgc1Jvb3RFbnRpdHlOYW1lKTtcblx0fVxuXHQvLyBGZXRjaCBhY3RpdmUgY29udGV4dCBkZXRhaWxzIGluY2FzZSBvZiBiZWxvdyBzY2VuYXJpbydzKHdoZXJlIHBhZ2UgaXMgbm90IHN0aWNreSBzdXBwb3J0ZWQod2UgZG8gbm90IGhhdmUgZHJhZnQgaW5zdGFuY2UpKVxuXHQvLyAxLiBJbiBjYXNlIG9mIGRyYWZ0IGVuYWJsZWQgT2JqZWN0IHBhZ2Ugd2hlcmUgc2VtYW50aWMga2V5IGJhc2VkIFVSTCBpcyBub3QgcG9zc2libGUobGlrZSBzZW1hbnRpYyBrZXlzIGFyZSBub3QgbW9kZWxlZCBpbiB0aGUgZW50aXR5IHNldClcblx0Ly8gMi4gSW4gY2FzZSBvZiBkcmFmdCBlbmFibGVkIFN1YiBPYmplY3QgUGFnZXMgKHdoZXJlIHNlbWFudGljIGJvb2ttYXJraW5nIGlzIG5vdCBzdXBwb3J0ZWQpXG5cdGNvbnN0IG9WaWV3RGF0YSA9IG9Db250cm9sbGVyLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpO1xuXHRpZiAob0NvbnRleHQgJiYgIWJHbG9iYWxJc1N0aWNreVN1cHBvcnRlZCAmJiAoKG9WaWV3RGF0YS52aWV3TGV2ZWwgPT09IDEgJiYgIWFTZW1hbnRpY0tleXMpIHx8IG9WaWV3RGF0YS52aWV3TGV2ZWwgPj0gMikpIHtcblx0XHRvUHJvbWlzZSA9IGdldEFjdGl2ZUNvbnRleHRQYXRocyhvQ29udGV4dCwgb0NvbnRyb2xsZXIpO1xuXHRcdHJldHVybiBvUHJvbWlzZTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH1cbn1cblxuLy8gLyoqXG4vLyAgKiBHZXQgc2hhcmUgVVJMLlxuLy8gICogQHBhcmFtIGJJc0VkaXRhYmxlXG4vLyAgKiBAcGFyYW0gYklzU3RpY2t5U3VwcG9ydGVkXG4vLyAgKiBAcGFyYW0gYUFjdGl2ZUNvbnRleHRQYXRoc1xuLy8gICogQHJldHVybnMge3N0cmluZ30gVGhlIHNoYXJlIFVSTFxuLy8gICogQHByb3RlY3RlZFxuLy8gICogQHN0YXRpY1xuLy8gICovXG5mdW5jdGlvbiBnZXRTaGFyZVVybChiSXNFZGl0YWJsZTogYW55LCBiSXNTdGlja3lTdXBwb3J0ZWQ6IGFueSwgYUFjdGl2ZUNvbnRleHRQYXRoczogYW55KSB7XG5cdGxldCBzU2hhcmVVcmw7XG5cdGNvbnN0IHNIYXNoID0gSGFzaENoYW5nZXIuZ2V0SW5zdGFuY2UoKS5nZXRIYXNoKCk7XG5cdGNvbnN0IHNCYXNlUGF0aCA9IChIYXNoQ2hhbmdlci5nZXRJbnN0YW5jZSgpIGFzIGFueSkuaHJlZkZvckFwcFNwZWNpZmljSGFzaFxuXHRcdD8gKEhhc2hDaGFuZ2VyLmdldEluc3RhbmNlKCkgYXMgYW55KS5ocmVmRm9yQXBwU3BlY2lmaWNIYXNoKFwiXCIpXG5cdFx0OiBcIlwiO1xuXHRpZiAoYklzRWRpdGFibGUgJiYgIWJJc1N0aWNreVN1cHBvcnRlZCAmJiBhQWN0aXZlQ29udGV4dFBhdGhzKSB7XG5cdFx0c1NoYXJlVXJsID0gc0Jhc2VQYXRoICsgYUFjdGl2ZUNvbnRleHRQYXRocy5qb2luKFwiL1wiKTtcblx0fSBlbHNlIHtcblx0XHRzU2hhcmVVcmwgPSBzSGFzaCA/IHNCYXNlUGF0aCArIHNIYXNoIDogd2luZG93LmxvY2F0aW9uLmhhc2g7XG5cdH1cblx0cmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4gKyB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgKyBzU2hhcmVVcmw7XG59XG5mdW5jdGlvbiBnZXRTaGFyZUVtYWlsVXJsKCkge1xuXHRjb25zdCBvVVNoZWxsQ29udGFpbmVyID0gc2FwLnVzaGVsbCAmJiBzYXAudXNoZWxsLkNvbnRhaW5lcjtcblx0aWYgKG9VU2hlbGxDb250YWluZXIpIHtcblx0XHRyZXR1cm4gb1VTaGVsbENvbnRhaW5lclxuXHRcdFx0LmdldEZMUFVybEFzeW5jKHRydWUpXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoc0ZMUFVybDogYW55KSB7XG5cdFx0XHRcdHJldHVybiBzRkxQVXJsO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAoc0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiQ291bGQgbm90IHJldHJpZXZlIGNGTFAgVVJMIGZvciB0aGUgc2hhcmluZyBkaWFsb2cgKGRpYWxvZyB3aWxsIG5vdCBiZSBvcGVuZWQpXCIsIHNFcnJvcik7XG5cdFx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGRvY3VtZW50LlVSTCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0SmFtVXJsKGJJc0VkaXRNb2RlOiBib29sZWFuLCBiSXNTdGlja3lTdXBwb3J0ZWQ6IGFueSwgYUFjdGl2ZUNvbnRleHRQYXRoczogYW55KSB7XG5cdGxldCBzSmFtVXJsOiBzdHJpbmc7XG5cdGNvbnN0IHNIYXNoID0gSGFzaENoYW5nZXIuZ2V0SW5zdGFuY2UoKS5nZXRIYXNoKCk7XG5cdGNvbnN0IHNCYXNlUGF0aCA9IChIYXNoQ2hhbmdlci5nZXRJbnN0YW5jZSgpIGFzIGFueSkuaHJlZkZvckFwcFNwZWNpZmljSGFzaFxuXHRcdD8gKEhhc2hDaGFuZ2VyLmdldEluc3RhbmNlKCkgYXMgYW55KS5ocmVmRm9yQXBwU3BlY2lmaWNIYXNoKFwiXCIpXG5cdFx0OiBcIlwiO1xuXHRpZiAoYklzRWRpdE1vZGUgJiYgIWJJc1N0aWNreVN1cHBvcnRlZCAmJiBhQWN0aXZlQ29udGV4dFBhdGhzKSB7XG5cdFx0c0phbVVybCA9IHNCYXNlUGF0aCArIGFBY3RpdmVDb250ZXh0UGF0aHMuam9pbihcIi9cIik7XG5cdH0gZWxzZSB7XG5cdFx0c0phbVVybCA9IHNIYXNoID8gc0Jhc2VQYXRoICsgc0hhc2ggOiB3aW5kb3cubG9jYXRpb24uaGFzaDtcblx0fVxuXHQvLyBpbiBjYXNlIHdlIGFyZSBpbiBjRkxQIHNjZW5hcmlvLCB0aGUgYXBwbGljYXRpb24gaXMgcnVubmluZ1xuXHQvLyBpbnNpZGUgYW4gaWZyYW1lLCBhbmQgdGhlcmUgZm9yIHdlIG5lZWQgdG8gZ2V0IHRoZSBjRkxQIFVSTFxuXHQvLyBhbmQgbm90ICdkb2N1bWVudC5VUkwnIHRoYXQgcmVwcmVzZW50cyB0aGUgaWZyYW1lIFVSTFxuXHRpZiAoc2FwLnVzaGVsbCAmJiBzYXAudXNoZWxsLkNvbnRhaW5lciAmJiBzYXAudXNoZWxsLkNvbnRhaW5lci5ydW5uaW5nSW5JZnJhbWUgJiYgc2FwLnVzaGVsbC5Db250YWluZXIucnVubmluZ0luSWZyYW1lKCkpIHtcblx0XHRzYXAudXNoZWxsLkNvbnRhaW5lci5nZXRGTFBVcmwodHJ1ZSlcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChzVXJsOiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIHNVcmwuc3Vic3RyKDAsIHNVcmwuaW5kZXhPZihcIiNcIikpICsgc0phbVVybDtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKHNFcnJvcjogYW55KSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkNvdWxkIG5vdCByZXRyaWV2ZSBjRkxQIFVSTCBmb3IgdGhlIHNoYXJpbmcgZGlhbG9nIChkaWFsb2cgd2lsbCBub3QgYmUgb3BlbmVkKVwiLCBzRXJyb3IpO1xuXHRcdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh3aW5kb3cubG9jYXRpb24ub3JpZ2luICsgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lICsgc0phbVVybCk7XG5cdH1cbn1cblxuY29uc3QgU2hhcmVFeHRlbnNpb25PdmVycmlkZSA9IHtcblx0YWRhcHRTaGFyZU1ldGFkYXRhOiBhc3luYyBmdW5jdGlvbiAodGhpczogU2hhcmUsIG9TaGFyZU1ldGFkYXRhOiBhbnkpIHtcblx0XHRjb25zdCBvQ29udGV4dCA9IHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRjb25zdCBvVUlNb2RlbCA9IHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKTtcblx0XHRjb25zdCBiSXNFZGl0YWJsZSA9IG9VSU1vZGVsLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIik7XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgYUFjdGl2ZUNvbnRleHRQYXRocyA9IGF3YWl0IGZldGNoQWN0aXZlQ29udGV4dFBhdGhzKG9Db250ZXh0LCB0aGlzLmJhc2UuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSk7XG5cdFx0XHRjb25zdCBvUGFnZVRpdGxlSW5mbyA9ICh0aGlzLmJhc2UuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBPYmplY3RQYWdlQ29udHJvbGxlcikuX2dldFBhZ2VUaXRsZUluZm9ybWF0aW9uKCk7XG5cdFx0XHRjb25zdCBvRGF0YSA9IGF3YWl0IFByb21pc2UuYWxsKFtcblx0XHRcdFx0Z2V0SmFtVXJsKGJJc0VkaXRhYmxlLCBiR2xvYmFsSXNTdGlja3lTdXBwb3J0ZWQsIGFBY3RpdmVDb250ZXh0UGF0aHMpLFxuXHRcdFx0XHRnZXRTaGFyZVVybChiSXNFZGl0YWJsZSwgYkdsb2JhbElzU3RpY2t5U3VwcG9ydGVkLCBhQWN0aXZlQ29udGV4dFBhdGhzKSxcblx0XHRcdFx0Z2V0U2hhcmVFbWFpbFVybCgpXG5cdFx0XHRdKTtcblxuXHRcdFx0bGV0IHNUaXRsZSA9IG9QYWdlVGl0bGVJbmZvLnRpdGxlO1xuXHRcdFx0Y29uc3Qgc09iamVjdFN1YnRpdGxlID0gb1BhZ2VUaXRsZUluZm8uc3VidGl0bGUgPyBvUGFnZVRpdGxlSW5mby5zdWJ0aXRsZS50b1N0cmluZygpIDogXCJcIjtcblx0XHRcdGlmIChzT2JqZWN0U3VidGl0bGUpIHtcblx0XHRcdFx0c1RpdGxlID0gYCR7c1RpdGxlfSAtICR7c09iamVjdFN1YnRpdGxlfWA7XG5cdFx0XHR9XG5cdFx0XHRvU2hhcmVNZXRhZGF0YS50aWxlID0ge1xuXHRcdFx0XHR0aXRsZTogb1BhZ2VUaXRsZUluZm8udGl0bGUsXG5cdFx0XHRcdHN1YnRpdGxlOiBzT2JqZWN0U3VidGl0bGVcblx0XHRcdH07XG5cdFx0XHRvU2hhcmVNZXRhZGF0YS5lbWFpbC50aXRsZSA9IHNUaXRsZTtcblx0XHRcdG9TaGFyZU1ldGFkYXRhLnRpdGxlID0gc1RpdGxlO1xuXHRcdFx0b1NoYXJlTWV0YWRhdGEuamFtLnVybCA9IG9EYXRhWzBdO1xuXHRcdFx0b1NoYXJlTWV0YWRhdGEudXJsID0gb0RhdGFbMV07XG5cdFx0XHRvU2hhcmVNZXRhZGF0YS5lbWFpbC51cmwgPSBvRGF0YVsyXTtcblx0XHR9IGNhdGNoIChlcnJvcjogYW55KSB7XG5cdFx0XHRMb2cuZXJyb3IoZXJyb3IpO1xuXHRcdH1cblxuXHRcdHJldHVybiBvU2hhcmVNZXRhZGF0YTtcblx0fVxufTtcblxuZXhwb3J0IGRlZmF1bHQgU2hhcmVFeHRlbnNpb25PdmVycmlkZTtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7OztFQWtqQk8sZ0JBQWdCQSxJQUFoQixFQUFzQkMsT0FBdEIsRUFBK0I7SUFDckMsSUFBSTtNQUNILElBQUlDLE1BQU0sR0FBR0YsSUFBSSxFQUFqQjtJQUNBLENBRkQsQ0FFRSxPQUFNRyxDQUFOLEVBQVM7TUFDVixPQUFPRixPQUFPLENBQUNFLENBQUQsQ0FBZDtJQUNBOztJQUNELElBQUlELE1BQU0sSUFBSUEsTUFBTSxDQUFDRSxJQUFyQixFQUEyQjtNQUMxQixPQUFPRixNQUFNLENBQUNFLElBQVAsQ0FBWSxLQUFLLENBQWpCLEVBQW9CSCxPQUFwQixDQUFQO0lBQ0E7O0lBQ0QsT0FBT0MsTUFBUDtFQUNBOztFQW5qQkQsSUFBSUcsd0JBQUo7O0VBRUEsU0FBU0MsZ0NBQVQsQ0FBMENDLFVBQTFDLEVBQTJEQyxzQkFBM0QsRUFBd0Y7SUFDdkYsSUFBTUMsS0FBSyxHQUFHQyxNQUFNLENBQUNDLElBQVAsQ0FBWUosVUFBWixDQUFkO0lBRUEsSUFBTUssUUFBUSxHQUFHSCxLQUFLLENBQUNJLEdBQU4sQ0FBVSxVQUFVQyxJQUFWLEVBQXdCO01BQ2xELElBQU1DLE1BQU0sR0FBR1IsVUFBVSxDQUFDTyxJQUFELENBQXpCOztNQUNBLElBQUlDLE1BQU0sS0FBS0MsU0FBZixFQUEwQjtRQUN6QixPQUFPLElBQUlDLE1BQUosQ0FBV0gsSUFBWCxFQUFpQkksY0FBYyxDQUFDQyxFQUFoQyxFQUFvQ0osTUFBcEMsQ0FBUDtNQUNBO0lBQ0QsQ0FMZ0IsQ0FBakI7O0lBT0EsSUFBSVAsc0JBQUosRUFBNEI7TUFDM0IsSUFBTVksYUFBYSxHQUFHLElBQUlILE1BQUosQ0FBVztRQUNoQ0ksT0FBTyxFQUFFLENBQUMsSUFBSUosTUFBSixDQUFXLDhCQUFYLEVBQTJDQyxjQUFjLENBQUNDLEVBQTFELEVBQThELElBQTlELENBQUQsQ0FEdUI7UUFFaENHLEdBQUcsRUFBRTtNQUYyQixDQUFYLENBQXRCO01BS0FWLFFBQVEsQ0FBQ1csSUFBVCxDQUFjSCxhQUFkO0lBQ0E7O0lBRUQsT0FBTyxJQUFJSCxNQUFKLENBQVdMLFFBQVgsRUFBNEIsSUFBNUIsQ0FBUDtFQUNBOztFQUNELFNBQVNZLG9CQUFULENBQThCQyxXQUE5QixFQUFnREMsZUFBaEQsRUFBc0VDLE9BQXRFLEVBQW9GO0lBQ25GLElBQU1DLFlBQVksR0FBR0gsV0FBVyxDQUM5QkksT0FEbUIsR0FFbkJDLGlCQUZtQixHQUduQkMsUUFIbUIsR0FJbkJDLFFBSm1CLFlBSU5OLGVBSk0sR0FJYVYsU0FKYixFQUl3QkEsU0FKeEIsRUFJbUNXLE9BSm5DLEVBSTRDO01BQUUsYUFBYTtJQUFmLENBSjVDLENBQXJCO0lBS0EsT0FBT0MsWUFBWSxDQUFDSyxlQUFiLENBQTZCLENBQTdCLEVBQWdDLENBQWhDLEVBQW1DN0IsSUFBbkMsQ0FBd0MsVUFBVThCLFNBQVYsRUFBMEI7TUFDeEUsSUFBSUEsU0FBUyxJQUFJQSxTQUFTLENBQUNDLE1BQTNCLEVBQW1DO1FBQ2xDLE9BQU9ELFNBQVMsQ0FBQyxDQUFELENBQVQsQ0FBYUUsT0FBYixFQUFQO01BQ0E7SUFDRCxDQUpNLENBQVA7RUFLQTs7RUFDRCxTQUFTQyx5QkFBVCxDQUFtQ0MsUUFBbkMsRUFBa0RiLFdBQWxELEVBQW9FYyxVQUFwRSxFQUFxRjtJQUNwRixJQUFNQyxzQkFBNkIsR0FBRyxFQUF0QztJQUNBLElBQU1DLE1BQWEsR0FBRyxFQUF0QjtJQUNBLElBQUlDLFNBQVMsR0FBR0osUUFBUSxDQUFDUCxRQUFULEdBQW9CWSxZQUFwQixHQUFtQ0MsV0FBbkMsQ0FBK0NOLFFBQVEsQ0FBQ0YsT0FBVCxFQUEvQyxDQUFoQjs7SUFDQSxJQUFJTSxTQUFTLENBQUNHLE9BQVYsQ0FBa0IsR0FBbEIsTUFBMkIsQ0FBL0IsRUFBa0M7TUFDakNILFNBQVMsR0FBR0EsU0FBUyxDQUFDSSxTQUFWLENBQW9CLENBQXBCLENBQVo7SUFDQTs7SUFDRCxJQUFNQyxjQUFjLEdBQUdMLFNBQVMsQ0FBQ00sS0FBVixDQUFnQixHQUFoQixDQUF2QjtJQUNBLElBQU1DLG9CQUFvQixHQUFHQyxXQUFXLENBQUNDLFdBQVosR0FBMEJDLE9BQTFCLEdBQW9DSixLQUFwQyxDQUEwQyxHQUExQyxFQUErQyxDQUEvQyxDQUE3QjtJQUNBLElBQU1LLGlCQUFpQixHQUFHSixvQkFBb0IsQ0FBQ0QsS0FBckIsQ0FBMkIsR0FBM0IsQ0FBMUIsQ0FUb0YsQ0FXcEY7SUFDQTtJQUNBOztJQUNBLElBQU1NLFFBQWEsR0FBRyxFQUF0QjtJQUNBLElBQU1DLGNBQXFCLEdBQUcsRUFBOUI7SUFDQUYsaUJBQWlCLENBQUNHLE9BQWxCLENBQTBCLFVBQVVDLFNBQVYsRUFBMEI7TUFDbkQsSUFBTUMsVUFBVSxHQUFHRCxTQUFTLENBQUNYLFNBQVYsQ0FBb0JXLFNBQVMsQ0FBQ1osT0FBVixDQUFrQixHQUFsQixJQUF5QixDQUE3QyxFQUFnRFksU0FBUyxDQUFDdEIsTUFBVixHQUFtQixDQUFuRSxFQUFzRWEsS0FBdEUsQ0FBNEUsR0FBNUUsQ0FBbkI7TUFDQSxJQUFNekMsVUFBZSxHQUFHLEVBQXhCO01BQ0EsSUFBTW9ELGFBQWEsR0FBR0YsU0FBUyxDQUFDVCxLQUFWLENBQWdCLEdBQWhCLEVBQXFCLENBQXJCLENBQXRCO01BQ0FNLFFBQVEsQ0FBQ0ssYUFBRCxDQUFSLEdBQTBCLEVBQTFCO01BQ0FKLGNBQWMsQ0FBQ2hDLElBQWYsQ0FBb0JvQyxhQUFwQjtNQUNBTCxRQUFRLENBQUNLLGFBQUQsQ0FBUixDQUF3Qix3QkFBeEIsSUFBb0QsSUFBcEQ7O01BQ0EsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHRixVQUFVLENBQUN2QixNQUEvQixFQUF1Q3lCLENBQUMsRUFBeEMsRUFBNEM7UUFDM0MsSUFBTUMsY0FBYyxHQUFHSCxVQUFVLENBQUNFLENBQUQsQ0FBakM7UUFDQSxJQUFNRSxNQUFNLEdBQUdELGNBQWMsQ0FBQ2IsS0FBZixDQUFxQixHQUFyQixDQUFmO1FBQ0EsSUFBSWUsU0FBUyxHQUFHRCxNQUFNLENBQUMsQ0FBRCxDQUF0QjtRQUNBLElBQUloRCxJQUFJLEdBQUdnRCxNQUFNLENBQUMsQ0FBRCxDQUFqQixDQUoyQyxDQUszQztRQUNBO1FBQ0E7UUFDQTs7UUFDQSxJQUFJRCxjQUFjLENBQUNoQixPQUFmLENBQXVCLEdBQXZCLE1BQWdDLENBQUMsQ0FBckMsRUFBd0M7VUFDdkMsSUFBTW1CLFVBQVUsR0FBRzFCLFFBQVEsQ0FBQ1AsUUFBVCxHQUFvQlksWUFBcEIsRUFBbkI7VUFDQSxJQUFNc0IsY0FBYyxHQUFHRCxVQUFVLENBQUNFLFNBQVgsWUFBeUJYLGNBQWMsQ0FBQ1ksSUFBZixDQUFvQixHQUFwQixDQUF6QixpQkFBdkI7VUFDQUosU0FBUyxHQUFHRCxNQUFNLENBQUMsQ0FBRCxDQUFsQjtVQUNBaEQsSUFBSSxHQUFHbUQsY0FBYyxDQUFDLENBQUQsQ0FBckI7VUFDQVgsUUFBUSxDQUFDRyxTQUFTLENBQUNULEtBQVYsQ0FBZ0IsR0FBaEIsRUFBcUIsQ0FBckIsQ0FBRCxDQUFSLENBQWtDLHdCQUFsQyxJQUE4RCxLQUE5RDtRQUNBOztRQUVELElBQUlsQyxJQUFJLEtBQUssZ0JBQWIsRUFBK0I7VUFDOUIsSUFBSWlELFNBQVMsQ0FBQ2xCLE9BQVYsQ0FBa0IsR0FBbEIsTUFBMkIsQ0FBM0IsSUFBZ0NrQixTQUFTLENBQUNLLFdBQVYsQ0FBc0IsR0FBdEIsTUFBK0JMLFNBQVMsQ0FBQzVCLE1BQVYsR0FBbUIsQ0FBdEYsRUFBeUY7WUFDeEY7WUFDQTRCLFNBQVMsR0FBR00sa0JBQWtCLENBQUNOLFNBQVMsQ0FBQ2pCLFNBQVYsQ0FBb0IsQ0FBcEIsRUFBdUJpQixTQUFTLENBQUM1QixNQUFWLEdBQW1CLENBQTFDLENBQUQsQ0FBOUI7VUFDQTs7VUFDRDVCLFVBQVUsQ0FBQ08sSUFBRCxDQUFWLEdBQW1CaUQsU0FBbkI7UUFDQTtNQUNEOztNQUNEVCxRQUFRLENBQUNLLGFBQUQsQ0FBUixDQUF3QnBELFVBQXhCLEdBQXFDQSxVQUFyQztJQUNBLENBakNEO0lBbUNBLElBQUkrRCxjQUFjLEdBQUcvQixVQUFyQjtJQUNBUSxjQUFjLENBQUNTLE9BQWYsQ0FBdUIsVUFBVWUsZUFBVixFQUFnQztNQUN0RCxJQUFNQyxTQUFjLEdBQUcsRUFBdkI7TUFDQSxJQUFNQyxrQkFBa0IsR0FBR0gsY0FBYyxDQUFDSSwwQkFBZixJQUE2Q0osY0FBYyxDQUFDSSwwQkFBZixDQUEwQ0gsZUFBMUMsQ0FBeEU7O01BQ0EsSUFBSUUsa0JBQUosRUFBd0I7UUFDdkJELFNBQVMsQ0FBQ0csY0FBVixHQUEyQkwsY0FBYyxDQUFDSSwwQkFBZixDQUEwQ0gsZUFBMUMsQ0FBM0I7UUFDQUQsY0FBYyxHQUFHaEMsUUFBUSxDQUFDUCxRQUFULEdBQW9CWSxZQUFwQixHQUFtQ3VCLFNBQW5DLFlBQWlETyxrQkFBakQsTUFBMEVsQyxVQUEzRjtNQUNBLENBSEQsTUFHTztRQUNOaUMsU0FBUyxDQUFDRyxjQUFWLEdBQTJCSixlQUEzQjtNQUNBOztNQUNEQyxTQUFTLENBQUNqRSxVQUFWLEdBQXVCK0MsUUFBUSxDQUFDaUIsZUFBRCxDQUFSLENBQTBCaEUsVUFBakQ7TUFDQWlFLFNBQVMsQ0FBQ2hFLHNCQUFWLEdBQW1DOEMsUUFBUSxDQUFDaUIsZUFBRCxDQUFSLENBQTBCL0Qsc0JBQTdEO01BQ0FpQyxNQUFNLENBQUNsQixJQUFQLENBQVlpRCxTQUFaO0lBQ0EsQ0FaRDtJQWNBL0IsTUFBTSxDQUFDZSxPQUFQLENBQWUsVUFBVWdCLFNBQVYsRUFBMEI7TUFDeEMsSUFBTTdDLE9BQU8sR0FBR3JCLGdDQUFnQyxDQUFDa0UsU0FBUyxDQUFDakUsVUFBWCxFQUF1QmlFLFNBQVMsQ0FBQ2hFLHNCQUFqQyxDQUFoRDtNQUNBZ0Msc0JBQXNCLENBQUNqQixJQUF2QixDQUE0QkMsb0JBQW9CLENBQUNDLFdBQUQsRUFBYytDLFNBQVMsQ0FBQ0csY0FBeEIsRUFBd0NoRCxPQUF4QyxDQUFoRDtJQUNBLENBSEQ7SUFLQSxPQUFPYSxzQkFBUDtFQUNBO0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztFQUNBLFNBQVNvQyxxQkFBVCxDQUErQnRDLFFBQS9CLEVBQThDYixXQUE5QyxFQUFnRTtJQUMvRCxJQUFNd0Isb0JBQW9CLEdBQUdDLFdBQVcsQ0FBQ0MsV0FBWixHQUEwQkMsT0FBMUIsR0FBb0NKLEtBQXBDLENBQTBDLEdBQTFDLEVBQStDLENBQS9DLENBQTdCO0lBQ0EsSUFBSTZCLGVBQWUsR0FBRzVCLG9CQUFvQixJQUFJQSxvQkFBb0IsQ0FBQzZCLE1BQXJCLENBQTRCLENBQTVCLEVBQStCN0Isb0JBQW9CLENBQUNKLE9BQXJCLENBQTZCLEdBQTdCLENBQS9CLENBQTlDOztJQUNBLElBQUlnQyxlQUFlLENBQUNoQyxPQUFoQixDQUF3QixHQUF4QixNQUFpQyxDQUFyQyxFQUF3QztNQUN2Q2dDLGVBQWUsR0FBR0EsZUFBZSxDQUFDL0IsU0FBaEIsQ0FBMEIsQ0FBMUIsQ0FBbEI7SUFDQTs7SUFDRCxJQUFNUCxVQUFVLEdBQUdELFFBQVEsQ0FBQ1AsUUFBVCxHQUFvQlksWUFBcEIsR0FBbUN1QixTQUFuQyxZQUFpRFcsZUFBakQsRUFBbkI7SUFDQSxJQUFNRSxZQUFZLEdBQUd6QyxRQUFyQjtJQUNBLElBQU1FLHNCQUFzQixHQUFHSCx5QkFBeUIsQ0FBQ0MsUUFBRCxFQUFXYixXQUFYLEVBQXdCYyxVQUF4QixDQUF4RDs7SUFDQSxJQUFJQyxzQkFBc0IsQ0FBQ0wsTUFBdkIsR0FBZ0MsQ0FBcEMsRUFBdUM7TUFDdEMsT0FBTzZDLE9BQU8sQ0FBQ0MsR0FBUixDQUFZekMsc0JBQVosRUFDTHBDLElBREssQ0FDQSxVQUFVOEUsS0FBVixFQUF3QjtRQUM3QixJQUFNQyxtQkFBbUIsR0FBRyxFQUE1QjtRQUNBLElBQUliLGNBQWMsR0FBRy9CLFVBQXJCOztRQUNBLElBQUkyQyxLQUFLLENBQUMsQ0FBRCxDQUFMLENBQVNyQyxPQUFULENBQWlCLEdBQWpCLE1BQTBCLENBQTlCLEVBQWlDO1VBQ2hDc0MsbUJBQW1CLENBQUM1RCxJQUFwQixDQUF5QjJELEtBQUssQ0FBQyxDQUFELENBQUwsQ0FBU3BDLFNBQVQsQ0FBbUIsQ0FBbkIsQ0FBekI7UUFDQSxDQUZELE1BRU87VUFDTnFDLG1CQUFtQixDQUFDNUQsSUFBcEIsQ0FBeUIyRCxLQUFLLENBQUMsQ0FBRCxDQUE5QjtRQUNBLENBUDRCLENBUTdCO1FBQ0E7UUFDQTs7O1FBQ0EsS0FBSyxJQUFJdEIsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR3NCLEtBQUssQ0FBQy9DLE1BQTFCLEVBQWtDeUIsQ0FBQyxFQUFuQyxFQUF1QztVQUN0QyxJQUFJd0Isa0JBQWtCLEdBQUdGLEtBQUssQ0FBQ3RCLENBQUQsQ0FBOUI7VUFDQSxJQUFJeUIsa0JBQWtCLEdBQUcsRUFBekI7VUFDQSxJQUFJQyxjQUFjLEdBQUdGLGtCQUFrQixJQUFJQSxrQkFBa0IsQ0FBQ04sTUFBbkIsQ0FBMEIsQ0FBMUIsRUFBNkJNLGtCQUFrQixDQUFDdkMsT0FBbkIsQ0FBMkIsR0FBM0IsQ0FBN0IsQ0FBM0M7O1VBQ0EsSUFBSXlDLGNBQWMsQ0FBQ3pDLE9BQWYsQ0FBdUIsR0FBdkIsTUFBZ0MsQ0FBcEMsRUFBdUM7WUFDdEN5QyxjQUFjLEdBQUdBLGNBQWMsQ0FBQ3hDLFNBQWYsQ0FBeUIsQ0FBekIsQ0FBakI7VUFDQTs7VUFDRCxJQUFJc0Msa0JBQWtCLENBQUN2QyxPQUFuQixDQUEyQixHQUEzQixNQUFvQyxDQUF4QyxFQUEyQztZQUMxQ3VDLGtCQUFrQixHQUFHQSxrQkFBa0IsQ0FBQ3RDLFNBQW5CLENBQTZCLENBQTdCLENBQXJCO1VBQ0E7O1VBQ0R1QyxrQkFBa0IsR0FBRzNFLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZMkQsY0FBYyxDQUFDSSwwQkFBM0IsRUFDcEJoRSxNQUFNLENBQUM2RSxNQUFQLENBQWNqQixjQUFjLENBQUNJLDBCQUE3QixFQUF5RDdCLE9BQXpELENBQWlFeUMsY0FBakUsQ0FEb0IsQ0FBckI7O1VBR0EsSUFBSUQsa0JBQUosRUFBd0I7WUFDdkJGLG1CQUFtQixDQUFDNUQsSUFBcEIsQ0FBeUI2RCxrQkFBa0IsQ0FBQ0ksT0FBbkIsQ0FBMkJGLGNBQTNCLEVBQTJDRCxrQkFBM0MsQ0FBekI7WUFDQWYsY0FBYyxHQUFHUyxZQUFZLENBQUNoRCxRQUFiLEdBQXdCWSxZQUF4QixHQUF1Q3VCLFNBQXZDLFlBQXFEb0IsY0FBckQsTUFBMEUvQyxVQUEzRjtVQUNBLENBSEQsTUFHTztZQUNONEMsbUJBQW1CLENBQUM1RCxJQUFwQixDQUF5QjZELGtCQUF6QjtVQUNBO1FBQ0Q7O1FBQ0QsT0FBT0QsbUJBQVA7TUFDQSxDQWpDSyxFQWtDTE0sS0FsQ0ssQ0FrQ0MsVUFBVUMsTUFBVixFQUF1QjtRQUM3QkMsR0FBRyxDQUFDQyxJQUFKLENBQVMsc0RBQVQsRUFBaUVGLE1BQWpFO01BQ0EsQ0FwQ0ssQ0FBUDtJQXFDQSxDQXRDRCxNQXNDTztNQUNOLE9BQU9WLE9BQU8sQ0FBQ2EsT0FBUixFQUFQO0lBQ0E7RUFDRDs7RUFDRCxTQUFTQyx1QkFBVCxDQUFpQ3hELFFBQWpDLEVBQWdEYixXQUFoRCxFQUFrRTtJQUNqRSxJQUFJc0UsUUFBSixFQUFjQyxhQUFkO0lBQ0EsSUFBTS9DLG9CQUFvQixHQUFHQyxXQUFXLENBQUNDLFdBQVosR0FBMEJDLE9BQTFCLEdBQW9DSixLQUFwQyxDQUEwQyxHQUExQyxFQUErQyxDQUEvQyxDQUE3Qjs7SUFDQSxJQUFJVixRQUFKLEVBQWM7TUFDYixJQUFNMkQsTUFBTSxHQUFHM0QsUUFBUSxDQUFDUCxRQUFULEVBQWY7TUFDQSxJQUFNaUMsVUFBVSxHQUFHaUMsTUFBTSxDQUFDdEQsWUFBUCxFQUFuQjtNQUNBdEMsd0JBQXdCLEdBQUc2RixXQUFXLENBQUNDLHdCQUFaLENBQXFDbkMsVUFBckMsQ0FBM0I7TUFDQSxJQUFJYSxlQUFlLEdBQUc1QixvQkFBb0IsSUFBSUEsb0JBQW9CLENBQUM2QixNQUFyQixDQUE0QixDQUE1QixFQUErQjdCLG9CQUFvQixDQUFDSixPQUFyQixDQUE2QixHQUE3QixDQUEvQixDQUE5Qzs7TUFDQSxJQUFJZ0MsZUFBZSxDQUFDaEMsT0FBaEIsQ0FBd0IsR0FBeEIsTUFBaUMsQ0FBckMsRUFBd0M7UUFDdkNnQyxlQUFlLEdBQUdBLGVBQWUsQ0FBQy9CLFNBQWhCLENBQTBCLENBQTFCLENBQWxCO01BQ0E7O01BQ0RrRCxhQUFhLEdBQUdJLGlCQUFpQixDQUFDQyxlQUFsQixDQUFrQ3JDLFVBQWxDLEVBQThDYSxlQUE5QyxDQUFoQjtJQUNBLENBWmdFLENBYWpFO0lBQ0E7SUFDQTs7O0lBQ0EsSUFBTXlCLFNBQVMsR0FBRzdFLFdBQVcsQ0FBQ0ksT0FBWixHQUFzQjBFLFdBQXRCLEVBQWxCOztJQUNBLElBQUlqRSxRQUFRLElBQUksQ0FBQ2pDLHdCQUFiLEtBQTJDaUcsU0FBUyxDQUFDRSxTQUFWLEtBQXdCLENBQXhCLElBQTZCLENBQUNSLGFBQS9CLElBQWlETSxTQUFTLENBQUNFLFNBQVYsSUFBdUIsQ0FBbEgsQ0FBSixFQUEwSDtNQUN6SFQsUUFBUSxHQUFHbkIscUJBQXFCLENBQUN0QyxRQUFELEVBQVdiLFdBQVgsQ0FBaEM7TUFDQSxPQUFPc0UsUUFBUDtJQUNBLENBSEQsTUFHTztNQUNOLE9BQU9mLE9BQU8sQ0FBQ2EsT0FBUixFQUFQO0lBQ0E7RUFDRCxDLENBRUQ7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7RUFDQSxTQUFTWSxXQUFULENBQXFCQyxXQUFyQixFQUF1Q0Msa0JBQXZDLEVBQWdFeEIsbUJBQWhFLEVBQTBGO0lBQ3pGLElBQUl5QixTQUFKO0lBQ0EsSUFBTUMsS0FBSyxHQUFHM0QsV0FBVyxDQUFDQyxXQUFaLEdBQTBCQyxPQUExQixFQUFkO0lBQ0EsSUFBTTBELFNBQVMsR0FBSTVELFdBQVcsQ0FBQ0MsV0FBWixFQUFELENBQW1DNEQsc0JBQW5DLEdBQ2Q3RCxXQUFXLENBQUNDLFdBQVosRUFBRCxDQUFtQzRELHNCQUFuQyxDQUEwRCxFQUExRCxDQURlLEdBRWYsRUFGSDs7SUFHQSxJQUFJTCxXQUFXLElBQUksQ0FBQ0Msa0JBQWhCLElBQXNDeEIsbUJBQTFDLEVBQStEO01BQzlEeUIsU0FBUyxHQUFHRSxTQUFTLEdBQUczQixtQkFBbUIsQ0FBQ2hCLElBQXBCLENBQXlCLEdBQXpCLENBQXhCO0lBQ0EsQ0FGRCxNQUVPO01BQ055QyxTQUFTLEdBQUdDLEtBQUssR0FBR0MsU0FBUyxHQUFHRCxLQUFmLEdBQXVCRyxNQUFNLENBQUNDLFFBQVAsQ0FBZ0JDLElBQXhEO0lBQ0E7O0lBQ0QsT0FBT0YsTUFBTSxDQUFDQyxRQUFQLENBQWdCRSxNQUFoQixHQUF5QkgsTUFBTSxDQUFDQyxRQUFQLENBQWdCRyxRQUF6QyxHQUFvRFIsU0FBM0Q7RUFDQTs7RUFDRCxTQUFTUyxnQkFBVCxHQUE0QjtJQUMzQixJQUFNQyxnQkFBZ0IsR0FBR0MsR0FBRyxDQUFDQyxNQUFKLElBQWNELEdBQUcsQ0FBQ0MsTUFBSixDQUFXQyxTQUFsRDs7SUFDQSxJQUFJSCxnQkFBSixFQUFzQjtNQUNyQixPQUFPQSxnQkFBZ0IsQ0FDckJJLGNBREssQ0FDVSxJQURWLEVBRUx0SCxJQUZLLENBRUEsVUFBVXVILE9BQVYsRUFBd0I7UUFDN0IsT0FBT0EsT0FBUDtNQUNBLENBSkssRUFLTGxDLEtBTEssQ0FLQyxVQUFVbUMsTUFBVixFQUF1QjtRQUM3QmpDLEdBQUcsQ0FBQ2tDLEtBQUosQ0FBVSxnRkFBVixFQUE0RkQsTUFBNUY7TUFDQSxDQVBLLENBQVA7SUFRQSxDQVRELE1BU087TUFDTixPQUFPNUMsT0FBTyxDQUFDYSxPQUFSLENBQWdCaUMsUUFBUSxDQUFDQyxHQUF6QixDQUFQO0lBQ0E7RUFDRDs7RUFFRCxTQUFTQyxTQUFULENBQW1CQyxXQUFuQixFQUF5Q3RCLGtCQUF6QyxFQUFrRXhCLG1CQUFsRSxFQUE0RjtJQUMzRixJQUFJK0MsT0FBSjtJQUNBLElBQU1yQixLQUFLLEdBQUczRCxXQUFXLENBQUNDLFdBQVosR0FBMEJDLE9BQTFCLEVBQWQ7SUFDQSxJQUFNMEQsU0FBUyxHQUFJNUQsV0FBVyxDQUFDQyxXQUFaLEVBQUQsQ0FBbUM0RCxzQkFBbkMsR0FDZDdELFdBQVcsQ0FBQ0MsV0FBWixFQUFELENBQW1DNEQsc0JBQW5DLENBQTBELEVBQTFELENBRGUsR0FFZixFQUZIOztJQUdBLElBQUlrQixXQUFXLElBQUksQ0FBQ3RCLGtCQUFoQixJQUFzQ3hCLG1CQUExQyxFQUErRDtNQUM5RCtDLE9BQU8sR0FBR3BCLFNBQVMsR0FBRzNCLG1CQUFtQixDQUFDaEIsSUFBcEIsQ0FBeUIsR0FBekIsQ0FBdEI7SUFDQSxDQUZELE1BRU87TUFDTitELE9BQU8sR0FBR3JCLEtBQUssR0FBR0MsU0FBUyxHQUFHRCxLQUFmLEdBQXVCRyxNQUFNLENBQUNDLFFBQVAsQ0FBZ0JDLElBQXREO0lBQ0EsQ0FWMEYsQ0FXM0Y7SUFDQTtJQUNBOzs7SUFDQSxJQUFJSyxHQUFHLENBQUNDLE1BQUosSUFBY0QsR0FBRyxDQUFDQyxNQUFKLENBQVdDLFNBQXpCLElBQXNDRixHQUFHLENBQUNDLE1BQUosQ0FBV0MsU0FBWCxDQUFxQlUsZUFBM0QsSUFBOEVaLEdBQUcsQ0FBQ0MsTUFBSixDQUFXQyxTQUFYLENBQXFCVSxlQUFyQixFQUFsRixFQUEwSDtNQUN6SFosR0FBRyxDQUFDQyxNQUFKLENBQVdDLFNBQVgsQ0FBcUJXLFNBQXJCLENBQStCLElBQS9CLEVBQ0VoSSxJQURGLENBQ08sVUFBVWlJLElBQVYsRUFBcUI7UUFDMUIsT0FBT0EsSUFBSSxDQUFDdkQsTUFBTCxDQUFZLENBQVosRUFBZXVELElBQUksQ0FBQ3hGLE9BQUwsQ0FBYSxHQUFiLENBQWYsSUFBb0NxRixPQUEzQztNQUNBLENBSEYsRUFJRXpDLEtBSkYsQ0FJUSxVQUFVbUMsTUFBVixFQUF1QjtRQUM3QmpDLEdBQUcsQ0FBQ2tDLEtBQUosQ0FBVSxnRkFBVixFQUE0RkQsTUFBNUY7TUFDQSxDQU5GO0lBT0EsQ0FSRCxNQVFPO01BQ04sT0FBTzVDLE9BQU8sQ0FBQ2EsT0FBUixDQUFnQm1CLE1BQU0sQ0FBQ0MsUUFBUCxDQUFnQkUsTUFBaEIsR0FBeUJILE1BQU0sQ0FBQ0MsUUFBUCxDQUFnQkcsUUFBekMsR0FBb0RjLE9BQXBFLENBQVA7SUFDQTtFQUNEOztFQUVELElBQU1JLHNCQUFzQixHQUFHO0lBQzlCQyxrQkFBa0IsWUFBK0JDLGNBQS9CO01BQUEsSUFBb0Q7UUFBQSxhQUNwRCxJQURvRDs7UUFDckUsSUFBTWxHLFFBQVEsR0FBRyxPQUFLbUcsSUFBTCxDQUFVNUcsT0FBVixHQUFvQkMsaUJBQXBCLEVBQWpCOztRQUNBLElBQU00RyxRQUFRLEdBQUcsT0FBS0QsSUFBTCxDQUFVNUcsT0FBVixHQUFvQkUsUUFBcEIsQ0FBNkIsSUFBN0IsQ0FBakI7O1FBQ0EsSUFBTTJFLFdBQVcsR0FBR2dDLFFBQVEsQ0FBQ0MsV0FBVCxDQUFxQixhQUFyQixDQUFwQjs7UUFIcUUsZ0NBS2pFO1VBQUEsdUJBQytCN0MsdUJBQXVCLENBQUN4RCxRQUFELEVBQVcsT0FBS21HLElBQUwsQ0FBVTVHLE9BQVYsR0FBb0IrRyxhQUFwQixFQUFYLENBRHRELGlCQUNHekQsbUJBREg7WUFFSCxJQUFNMEQsY0FBYyxHQUFJLE9BQUtKLElBQUwsQ0FBVTVHLE9BQVYsR0FBb0IrRyxhQUFwQixFQUFELENBQThERSx3QkFBOUQsRUFBdkI7O1lBRkcsdUJBR2lCOUQsT0FBTyxDQUFDQyxHQUFSLENBQVksQ0FDL0IrQyxTQUFTLENBQUN0QixXQUFELEVBQWNyRyx3QkFBZCxFQUF3QzhFLG1CQUF4QyxDQURzQixFQUUvQnNCLFdBQVcsQ0FBQ0MsV0FBRCxFQUFjckcsd0JBQWQsRUFBd0M4RSxtQkFBeEMsQ0FGb0IsRUFHL0JrQyxnQkFBZ0IsRUFIZSxDQUFaLENBSGpCLGlCQUdHMEIsS0FISDtjQVNILElBQUlDLE1BQU0sR0FBR0gsY0FBYyxDQUFDSSxLQUE1QjtjQUNBLElBQU1DLGVBQWUsR0FBR0wsY0FBYyxDQUFDTSxRQUFmLEdBQTBCTixjQUFjLENBQUNNLFFBQWYsQ0FBd0JDLFFBQXhCLEVBQTFCLEdBQStELEVBQXZGOztjQUNBLElBQUlGLGVBQUosRUFBcUI7Z0JBQ3BCRixNQUFNLGFBQU1BLE1BQU4sZ0JBQWtCRSxlQUFsQixDQUFOO2NBQ0E7O2NBQ0RWLGNBQWMsQ0FBQ2EsSUFBZixHQUFzQjtnQkFDckJKLEtBQUssRUFBRUosY0FBYyxDQUFDSSxLQUREO2dCQUVyQkUsUUFBUSxFQUFFRDtjQUZXLENBQXRCO2NBSUFWLGNBQWMsQ0FBQ2MsS0FBZixDQUFxQkwsS0FBckIsR0FBNkJELE1BQTdCO2NBQ0FSLGNBQWMsQ0FBQ1MsS0FBZixHQUF1QkQsTUFBdkI7Y0FDQVIsY0FBYyxDQUFDZSxHQUFmLENBQW1CQyxHQUFuQixHQUF5QlQsS0FBSyxDQUFDLENBQUQsQ0FBOUI7Y0FDQVAsY0FBYyxDQUFDZ0IsR0FBZixHQUFxQlQsS0FBSyxDQUFDLENBQUQsQ0FBMUI7Y0FDQVAsY0FBYyxDQUFDYyxLQUFmLENBQXFCRSxHQUFyQixHQUEyQlQsS0FBSyxDQUFDLENBQUQsQ0FBaEM7WUF0Qkc7VUFBQTtRQXVCSCxDQTVCb0UsWUE0QjVEbEIsS0E1QjRELEVBNEJoRDtVQUNwQmxDLEdBQUcsQ0FBQ2tDLEtBQUosQ0FBVUEsS0FBVjtRQUNBLENBOUJvRTs7UUFBQTtVQWdDckUsT0FBT1csY0FBUDtRQWhDcUUsS0FnQzlEQSxjQWhDOEQ7TUFpQ3JFLENBakNpQjtRQUFBO01BQUE7SUFBQTtFQURZLENBQS9CO1NBcUNlRixzQiJ9
@@ -219,7 +219,7 @@ function getShareUrl(bIsEditable: any, bIsStickySupported: any, aActiveContextPa
219
219
  } else {
220
220
  sShareUrl = sHash ? sBasePath + sHash : window.location.hash;
221
221
  }
222
- return sShareUrl;
222
+ return window.location.origin + window.location.pathname + sShareUrl;
223
223
  }
224
224
  function getShareEmailUrl() {
225
225
  const oUShellContainer = sap.ushell && sap.ushell.Container;
@@ -13,7 +13,8 @@
13
13
  UI: 'sap/fe/core/templating/UIFormatters',
14
14
  CRIT: 'sap/fe/core/templating/CriticalityFormatters',
15
15
  COMMON: 'sap/fe/macros/CommonHelper',
16
- FIELD: 'sap/fe/macros/field/FieldHelper'
16
+ FIELD: 'sap/fe/macros/field/FieldHelper',
17
+ DEFAULTACTIONHANDLER: 'sap/fe/macros/internal/helpers/DefaultActionHandler'
17
18
  }"
18
19
  >
19
20
  <template:if test="{converterContext>header/actions}">
@@ -27,53 +28,64 @@
27
28
  <template:elseif test="{= OP.isManifestAction(${headerAction>}) }">
28
29
  <template:if test="{= ${headerAction>type} === 'Menu'}">
29
30
  <template:then>
30
- <MenuButton
31
- text="{headerAction>text}"
32
- menuPosition="BeginBottom"
33
- id="{= ID.generate(['fe',${headerAction>id}])}"
34
- visible="{headerAction>visible}"
35
- enabled="{headerAction>enabled}"
36
- >
37
- <menu>
38
- <Menu>
39
- <template:repeat list="{headerAction>menu}" var="menuItemAction">
40
- <template:with path="menuItemAction>annotationPath" var="dataField">
41
- <template:if test="{= ${menuItemAction>type} === 'ForAction'}">
42
- <template:then>
43
- <MenuItem
44
- id="{= ID.generate(['fe', ${dataField>}]) }"
45
- text="{dataField>Label}"
46
- press="{= ${menuItemAction>command} ? ('cmd:' + ${menuItemAction>command}) : OP.getPressExpressionForEdit(${dataField>}, ${entitySet>@sapui.name}, ${headerAction>}) }"
47
- visible="{menuItemAction>visible}"
48
- enabled="{menuItemAction>enabled}"
49
- />
50
- </template:then>
51
- <template:elseif test="{= ${menuItemAction>type} === 'ForNavigation'}">
52
- <MenuItem
53
- id="{= ID.generate(['fe', ${dataField>}]) }"
54
- text="{dataField>Label}"
55
- press="{= ${menuItemAction>command} ? ('cmd:' + ${menuItemAction>command}) : ${menuItemAction>press}}"
56
- enabled="{menuItemAction>enabled}"
57
- visible="{menuItemAction>visible}"
58
- macrodata:IBNData="{menuItemAction>customData}"
59
- />
60
- </template:elseif>
61
- <template:else>
62
- <MenuItem
63
- core:require="{FPM: 'sap/fe/core/helpers/FPMHelper'}"
64
- id="{= ID.generate(['fe',${menuItemAction>id}])}"
65
- text="{menuItemAction>text}"
66
- press="{= ${menuItemAction>command} ? ('cmd:' + ${menuItemAction>command}) : COMMON.buildActionWrapper(${menuItemAction>}, ${headerAction>})}"
67
- visible="{menuItemAction>visible}"
68
- enabled="{menuItemAction>enabled}"
69
- />
70
- </template:else>
71
- </template:if>
72
- </template:with>
73
- </template:repeat>
74
- </Menu>
75
- </menu>
76
- </MenuButton>
31
+ <template:with path="headerAction>defaultAction/annotationPath" var="dataFieldForDefaultAction">
32
+ <template:with
33
+ path="dataFieldForDefaultAction>Action"
34
+ helper="COMMON.getActionContext"
35
+ var="defaultActionContext"
36
+ >
37
+ <MenuButton
38
+ core:require="{FPM: 'sap/fe/core/helpers/FPMHelper'}"
39
+ text="{headerAction>text}"
40
+ menuPosition="BeginBottom"
41
+ id="{= ID.generate(['fe',${headerAction>id}])}"
42
+ visible="{headerAction>visible}"
43
+ enabled="{headerAction>enabled}"
44
+ useDefaultActionOnly="{= DEFAULTACTIONHANDLER.getUseDefaultActionOnly(${headerAction>})}"
45
+ buttonMode="{= DEFAULTACTIONHANDLER.getButtonMode(${headerAction>})}"
46
+ defaultAction="{= DEFAULTACTIONHANDLER.getDefaultActionHandler(${converterContext>header}, ${headerAction>}, ${dataFieldForDefaultAction>}, ${entitySet>@sapui.name}, 'ObjectPage')}"
47
+ >
48
+ <menu>
49
+ <Menu>
50
+ <template:repeat list="{headerAction>menu}" var="menuItemAction">
51
+ <template:with path="menuItemAction>annotationPath" var="dataField">
52
+ <template:if test="{= ${menuItemAction>type} === 'ForAction'}">
53
+ <template:then>
54
+ <MenuItem
55
+ id="{= ID.generate(['fe', ${dataField>}]) }"
56
+ text="{dataField>Label}"
57
+ press="{= ${menuItemAction>command} ? ('cmd:' + ${menuItemAction>command}) : OP.getPressExpressionForEdit(${dataField>}, ${entitySet>@sapui.name}, ${headerAction>}) }"
58
+ visible="{menuItemAction>visible}"
59
+ enabled="{menuItemAction>enabled}"
60
+ />
61
+ </template:then>
62
+ <template:elseif test="{= ${menuItemAction>type} === 'ForNavigation'}">
63
+ <MenuItem
64
+ id="{= ID.generate(['fe', ${dataField>}]) }"
65
+ text="{dataField>Label}"
66
+ press="{= ${menuItemAction>command} ? ('cmd:' + ${menuItemAction>command}) : ${menuItemAction>press}}"
67
+ enabled="{menuItemAction>enabled}"
68
+ visible="{menuItemAction>visible}"
69
+ macrodata:IBNData="{menuItemAction>customData}"
70
+ />
71
+ </template:elseif>
72
+ <template:else>
73
+ <MenuItem
74
+ id="{= ID.generate(['fe',${menuItemAction>id}])}"
75
+ text="{menuItemAction>text}"
76
+ press="{= ${menuItemAction>command} ? ('cmd:' + ${menuItemAction>command}) : COMMON.buildActionWrapper(${menuItemAction>}, ${headerAction>})}"
77
+ visible="{menuItemAction>visible}"
78
+ enabled="{menuItemAction>enabled}"
79
+ />
80
+ </template:else>
81
+ </template:if>
82
+ </template:with>
83
+ </template:repeat>
84
+ </Menu>
85
+ </menu>
86
+ </MenuButton>
87
+ </template:with>
88
+ </template:with>
77
89
  </template:then>
78
90
  <template:else>
79
91
  <Button
@@ -21,8 +21,8 @@
21
21
  >
22
22
  <f:Form
23
23
  fl:delegate='{
24
- "name": "sap/fe/macros/flexibility/FormDelegate",
25
- "delegateType": "writeonly"
24
+ "name": "sap/fe/macros/form/FormDelegate",
25
+ "delegateType": "complete"
26
26
  }'
27
27
  id="fe::EditableHeaderForm"
28
28
  editable="true"
@@ -111,7 +111,7 @@
111
111
  <template:with path="formContainer>entitySet" var="targetEntitySet">
112
112
  <macro:FormContainer
113
113
  id="{= ${formContainer>id} ? ID.generate(['fe', 'HeaderFacet', 'FormContainer', ${formContainer>id} ]) : undefined }"
114
- designtimeSettings="{= ${subSection>flexSettings/designtime} === 'Default' ? 'sap/fe/macros/FormContainer.designtime' : ${subSection>flexSettings/designtime}}"
114
+ designtimeSettings="{= ${subSection>flexSettings/designtime} === 'Default' ? 'sap/fe/macros/form/FormContainer.designtime' : ${subSection>flexSettings/designtime}}"
115
115
  title="{facet>@@MODEL.label}"
116
116
  titleLevel="H4"
117
117
  displayMode="Edit"
@@ -126,7 +126,7 @@
126
126
  <template:else>
127
127
  <macro:FormContainer
128
128
  id="{= ${formContainer>id} ? ID.generate(['fe', 'HeaderFacet', 'FormContainer', ${formContainer>id} ]) : undefined }"
129
- designtimeSettings="{= ${subSection>flexSettings/designtime} === 'Default' ? 'sap/fe/macros/FormContainer.designtime' : ${subSection>flexSettings/designtime}}"
129
+ designtimeSettings="{= ${subSection>flexSettings/designtime} === 'Default' ? 'sap/fe/macros/form/FormContainer.designtime' : ${subSection>flexSettings/designtime}}"
130
130
  title="{facet>@@MODEL.label}"
131
131
  titleLevel="H4"
132
132
  displayMode="Edit"
@@ -5,7 +5,8 @@
5
5
  xmlns:core="sap.ui.core"
6
6
  template:require="{
7
7
  ID: 'sap/fe/core/helpers/StableIdHelper',
8
- COMMON: 'sap/fe/macros/CommonHelper'
8
+ COMMON: 'sap/fe/macros/CommonHelper',
9
+ DEFAULTACTIONHANDLER: 'sap/fe/macros/internal/helpers/DefaultActionHandler'
9
10
  }"
10
11
  >
11
12
  <template:if test="{= ${action>type} === 'Menu'}">
@@ -17,6 +18,9 @@
17
18
  visible="{= COMMON.handleVisibilityOfMenuActions(${action>visible}) }"
18
19
  enabled="{action>enabled}"
19
20
  class="sapUiSmallMarginBegin"
21
+ useDefaultActionOnly="{= DEFAULTACTIONHANDLER.getUseDefaultActionOnly(${action>})}"
22
+ buttonMode="{= DEFAULTACTIONHANDLER.getButtonMode(${action>})}"
23
+ defaultAction="{= DEFAULTACTIONHANDLER.getDefaultActionHandler(undefined, ${action>}, undefined, undefined, 'Form')}"
20
24
  >
21
25
  <menu>
22
26
  <Menu>
@@ -0,0 +1,30 @@
1
+ <core:FragmentDefinition
2
+ xmlns="sap.m"
3
+ xmlns:core="sap.ui.core"
4
+ xmlns:uxap="sap.uxap"
5
+ xmlns:unittest="http://schemas.sap.com/sapui5/preprocessorextension/sap.fe.unittesting/1"
6
+ xmlns:template="http://schemas.sap.com/sapui5/extension/sap.ui.core.template/1"
7
+ template:require="{
8
+ OP: 'sap/fe/templates/ObjectPage/ObjectPageTemplating',
9
+ DATAFIELDHELPER : 'sap/fe/core/converters/helpers/DataFieldHelper'
10
+ }"
11
+ >
12
+ <FlexBox>
13
+ <template:if test="{entityType>@com.sap.vocabularies.UI.v1.HeaderInfo/Description}">
14
+ <template:if test="{= !DATAFIELDHELPER.isHeaderStaticallyHidden(${headerInfo>Description@@UI.getDataModelObjectPath})}">
15
+ <Label
16
+ text="{= OP.getExpressionForDescription(${headerInfo>@@UI.getConverterContext}, ${fullContextPath>@@UI.getDataModelObjectPath})}"
17
+ wrapping="true"
18
+ />
19
+ </template:if>
20
+ </template:if>
21
+ </FlexBox>
22
+ <MessageStrip
23
+ visible="{= ${internal>OPMessageStripVisibility} || false }"
24
+ text="{internal>OPMessageStripText}"
25
+ type="{internal>OPMessageStripType}"
26
+ showIcon="true"
27
+ showCloseButton="true"
28
+ class="sapUiSmallMarginTop"
29
+ />
30
+ </core:FragmentDefinition>
@@ -6,16 +6,19 @@
6
6
  xmlns:template="http://schemas.sap.com/sapui5/extension/sap.ui.core.template/1"
7
7
  template:require="{
8
8
  OP: 'sap/fe/templates/ObjectPage/ObjectPageTemplating',
9
- UI: 'sap/fe/core/templating/UIFormatters'
9
+ UI: 'sap/fe/core/templating/UIFormatters',
10
+ DATAFIELDHELPER : 'sap/fe/core/converters/helpers/DataFieldHelper'
10
11
  }"
11
12
  >
12
13
  <template:with path="entityType>@com.sap.vocabularies.UI.v1.HeaderInfo" var="headerInfo">
13
- <!-- <template:if test="{= !DATAFIELDHELPER.isReferencePropertyStaticallyHidden(${headerInfo>Description@@UI.getDataModelObjectPath})}"> -->
14
- <Title
15
- text="{= OP.getExpressionForTitle(${headerInfo>@@UI.getConverterContext}, ${viewData>}, ${fullContextPath>@@UI.getDataModelObjectPath}, ${entitySet>@com.sap.vocabularies.Common.v1.DraftRoot})}"
16
- wrapping="true"
17
- level="H2"
18
- />
19
- <!-- </template:if> -->
14
+ <template:if test="{entityType>@com.sap.vocabularies.UI.v1.HeaderInfo/Title}">
15
+ <template:if test="{= !DATAFIELDHELPER.isHeaderStaticallyHidden(${headerInfo>Title@@UI.getDataModelObjectPath})}">
16
+ <Title
17
+ text="{= OP.getExpressionForTitle(${headerInfo>@@UI.getConverterContext}, ${viewData>}, ${fullContextPath>@@UI.getDataModelObjectPath}, ${entitySet>@com.sap.vocabularies.Common.v1.DraftRoot})}"
18
+ wrapping="true"
19
+ level="H2"
20
+ />
21
+ </template:if>
22
+ </template:if>
20
23
  </template:with>
21
24
  </core:FragmentDefinition>