@sapui5/sap.fe.core 1.136.10 → 1.136.11

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 (35) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/PageController.controller.js +10 -0
  4. package/src/sap/fe/core/PageController.controller.ts +3 -0
  5. package/src/sap/fe/core/controllerextensions/InternalRouting.js +23 -13
  6. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +34 -13
  7. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +7 -6
  8. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +8 -5
  9. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +2 -1
  10. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +1 -0
  11. package/src/sap/fe/core/converters/controls/Common/Action.js +15 -1
  12. package/src/sap/fe/core/converters/controls/Common/Action.ts +21 -1
  13. package/src/sap/fe/core/converters/controls/Common/Table.js +54 -46
  14. package/src/sap/fe/core/converters/controls/Common/Table.ts +65 -45
  15. package/src/sap/fe/core/converters/controls/Common/table/Columns.js +26 -6
  16. package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +32 -10
  17. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +12 -18
  18. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +13 -27
  19. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +5 -2
  20. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +7 -1
  21. package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +8 -3
  22. package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +7 -2
  23. package/src/sap/fe/core/fpm/manifest.json +1 -1
  24. package/src/sap/fe/core/helpers/AppStartupHelper.js +75 -18
  25. package/src/sap/fe/core/helpers/AppStartupHelper.ts +79 -25
  26. package/src/sap/fe/core/helpers/MetaModelFunction.js +10 -3
  27. package/src/sap/fe/core/helpers/MetaModelFunction.ts +9 -3
  28. package/src/sap/fe/core/library.js +1 -1
  29. package/src/sap/fe/core/messagebundle_es.properties +1 -1
  30. package/src/sap/fe/core/messagebundle_fr.properties +1 -1
  31. package/src/sap/fe/core/messagebundle_ko.properties +1 -1
  32. package/src/sap/fe/core/messagebundle_no.properties +2 -2
  33. package/src/sap/fe/core/services/RoutingServiceFactory.js +4 -2
  34. package/src/sap/fe/core/services/RoutingServiceFactory.ts +5 -2
  35. package/ui5.yaml +1 -0
@@ -11,6 +11,7 @@ import {
11
11
  greaterThan,
12
12
  ifElse,
13
13
  isConstant,
14
+ isExpressionStaticallyResolvable,
14
15
  isPathInModelExpression,
15
16
  length,
16
17
  lessOrEqual,
@@ -647,38 +648,23 @@ export function getDeleteVisibility(
647
648
  converterContext: ConverterContext<PageContextPathTarget>,
648
649
  standardActionsContext: StandardActionsContext
649
650
  ): BindingToolkitExpression<boolean> {
650
- const isDeleteHidden = standardActionsContext.hiddenAnnotation.delete;
651
- const pathDeletableExpression = standardActionsContext.restrictions.isDeletable.expression;
652
-
653
- //Delete Button is visible:
654
- // Prerequisites:
655
- // - If we're not on ALP
656
- // - If restrictions on deletable set to false -> not visible
657
- // - Analytical table not in a ListReport -> not visible
658
- // - Otherwise
659
- // - If UI.DeleteHidden is true -> not visible
660
- // - Otherwise
661
- // - If we're on OP -> depending if UI is editable and restrictions on deletable
662
- // - Otherwise
663
- // - If UI.DeleteHidden points to a property path -> provide a negated binding to this path
664
- // - Otherwise, delete is visible
665
-
651
+ let isDeleteHidden = standardActionsContext.hiddenAnnotation.delete;
652
+ let pathDeletableExpression = standardActionsContext.restrictions.isDeletable.expression;
653
+ //we check if there is no relative path dependent on the context
654
+ if (!isExpressionStaticallyResolvable(isDeleteHidden)) {
655
+ isDeleteHidden = constant(false);
656
+ }
657
+ if (!isExpressionStaticallyResolvable(pathDeletableExpression)) {
658
+ pathDeletableExpression = constant(true);
659
+ }
666
660
  return ifElse(
667
661
  converterContext.getTemplateType() === TemplateType.AnalyticalListPage ||
668
662
  hideCreateDeleteInAnalyticalTable(converterContext, standardActionsContext),
669
663
  false,
670
664
  ifElse(
671
- and(isConstant(pathDeletableExpression), equal(pathDeletableExpression, false)),
672
- false,
673
- ifElse(
674
- and(isConstant(isDeleteHidden), equal(isDeleteHidden, constant(true))),
675
- false,
676
- ifElse(
677
- converterContext.getTemplateType() !== TemplateType.ListReport,
678
- and(not(isDeleteHidden), UI.IsEditable),
679
- not(and(isPathInModelExpression(isDeleteHidden), isDeleteHidden))
680
- )
681
- )
665
+ converterContext.getTemplateType() !== TemplateType.ListReport,
666
+ and(not(isDeleteHidden), pathDeletableExpression, UI.IsEditable),
667
+ and(not(isDeleteHidden), pathDeletableExpression)
682
668
  )
683
669
  );
684
670
  }
@@ -20,6 +20,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/controls/Co
20
20
  var getSemanticObjectMapping = Action.getSemanticObjectMapping;
21
21
  var getEnabledForAnnotationActionExpression = Action.getEnabledForAnnotationActionExpression;
22
22
  var getEnabledForAnnotationAction = Action.getEnabledForAnnotationAction;
23
+ var getCreateNextButtonVisibility = Action.getCreateNextButtonVisibility;
23
24
  var getCopyAction = Action.getCopyAction;
24
25
  var dataFieldIsCopyAction = Action.dataFieldIsCopyAction;
25
26
  var ButtonType = Action.ButtonType;
@@ -367,9 +368,11 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/controls/Co
367
368
  return getDataFieldAnnotationAction(dataField, converterContext);
368
369
  });
369
370
  if (conditionCreateNext) {
371
+ const ifFCLEnabled = converterContext.getManifestWrapper().isFclEnabled();
370
372
  footerActions.push({
371
373
  type: ActionType.CreateNext,
372
- key: "CreateNextAction"
374
+ key: "CreateNextAction",
375
+ visible: compileExpression(getCreateNextButtonVisibility(!!conditionCreateNext, ifFCLEnabled))
373
376
  });
374
377
  }
375
378
  // Then the save action if it exists
@@ -459,4 +462,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/controls/Co
459
462
  }
460
463
  return _exports;
461
464
  }, false);
462
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRJZGVudGlmaWNhdGlvbkRhdGFGaWVsZEZvckFjdGlvbnMiLCJlbnRpdHlUeXBlIiwiaXNEZXRlcm1pbmluZ0FjdGlvbiIsImFubm90YXRpb25zIiwiVUkiLCJJZGVudGlmaWNhdGlvbiIsImZpbHRlciIsImlkZW50aWZpY2F0aW9uRGF0YUZpZWxkIiwiJFR5cGUiLCJCb29sZWFuIiwiRGV0ZXJtaW5pbmciLCJ2YWx1ZU9mIiwiQWN0aW9uVGFyZ2V0IiwiaXNCb3VuZCIsIkNvcmUiLCJPcGVyYXRpb25BdmFpbGFibGUiLCJfZXhwb3J0cyIsImdldElkZW50aWZpY2F0aW9uRGF0YUZpZWxkRm9yQWN0aW9uc09yR3JvdXBzIiwiZ2V0SWRlbnRpZmljYXRpb25EYXRhRmllbGRGb3JJQk5BY3Rpb25zIiwiSU1QT1JUQU5UX0NSSVRJQ0FMSVRJRVMiLCJnZXREZWxldGVCdXR0b25WaXNpYmlsaXR5IiwiY29udmVydGVyQ29udGV4dCIsImRlbGV0ZUhpZGRlbiIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwidmlzaXRlZE5hdmlnYXRpb25QYXRocyIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwibWFwIiwibmF2UHJvcCIsIm5hbWUiLCJkZWxldGVIaWRkZW5FeHByZXNzaW9uIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwicGF0aCIsInNpbmdsZXRvblBhdGhWaXNpdG9yIiwiZ2V0Q29udmVydGVkVHlwZXMiLCJtYW5pZmVzdFdyYXBwZXIiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJ2aWV3TGV2ZWwiLCJnZXRWaWV3TGV2ZWwiLCJlZGl0YWJsZUV4cHJlc3Npb24iLCJJc0VkaXRhYmxlIiwibm90IiwiaWZFbHNlIiwidW5kZWZpbmVkIiwiYW5kIiwiZXF1YWwiLCJnZXREZWxldGVCdXR0b25FbmFibGVkIiwiaXNEZWxldGFibGUiLCJpc1BhcmVudERlbGV0YWJsZSIsImVudGl0eVNldCIsImdldEVudGl0eVNldCIsImlzRHJhZnRSb290IiwiTW9kZWxIZWxwZXIiLCJyZXQiLCJjb25zdGFudCIsInBhdGhJbk1vZGVsIiwiZ2V0RWRpdEJ1dHRvblZpc2liaWxpdHkiLCJyb290VXBkYXRlSGlkZGVuIiwicm9vdENvbnZlcnRlckNvbnRleHQiLCJ1cGRhdGVIaWRkZW4iLCJjYXBhYmlsaXRpZXMiLCJyb290RW50aXR5U2V0IiwiaXNGQ0xFbmFibGVkIiwiaXNGY2xFbmFibGVkIiwiaXNEcmFmdEVuYWJsZWQiLCJyb290VXBkYXRlSGlkZGVuRXhwcmVzc2lvbiIsImdldEhpZGRlbkV4cHJlc3Npb24iLCJoaWRkZW5EcmFmdCIsIkhpZGRlbkRyYWZ0IiwiZW5hYmxlZCIsImlzRHJhZnROb2RlIiwidXBkYXRlSGlkZGVuRXhwcmVzc2lvbiIsIm5vdEVkaXRhYmxlRXhwcmVzc2lvbiIsInJlc3VsdGFudEV4cHJlc3Npb24iLCJEcmFmdCIsIkhhc05vRHJhZnRGb3JDdXJyZW50VXNlciIsImdldEVkaXRCdXR0b25FbmFibGVkRXhwcmVzc2lvbiIsInVwZGF0ZVJlc3RyaWN0aW9ucyIsImlzU3RpY2t5IiwiZWRpdEFjdGlvbk5hbWUiLCJpc0VudGl0eVNldCIsIkNvbW1vbiIsIkRyYWZ0Um9vdCIsIkVkaXRBY3Rpb24iLCJTZXNzaW9uIiwiU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsImVkaXRBY3Rpb25Bbm5vdGF0aW9uUGF0aCIsImdldEFic29sdXRlQW5ub3RhdGlvblBhdGgiLCJlZGl0QWN0aW9uIiwicmVzb2x2ZUFic29sdXRlUGF0aCIsInRhcmdldCIsImdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uRXhwcmVzc2lvbiIsImdldEVkaXRCdXR0b25FbmFibGVkIiwiY29tcGlsZUV4cHJlc3Npb24iLCJnZXRIZWFkZXJEZWZhdWx0QWN0aW9ucyIsInNDb250ZXh0UGF0aCIsImdldENvbnRleHRQYXRoIiwicm9vdEVudGl0eVNldFBhdGgiLCJnZXRSb290RW50aXR5U2V0UGF0aCIsImdldENvbnZlcnRlckNvbnRleHRGb3IiLCJnZXRFbnRpdHlUeXBlIiwicm9vdEVudGl0eVR5cGUiLCJzdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiZ2V0U3RpY2t5U2Vzc2lvbiIsImRyYWZ0Um9vdCIsImdldERyYWZ0Um9vdCIsImNvbGxhYm9yYXRpb25PblJvb3QiLCJpc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZEZyb21Db252ZXJ0ZXJDb250ZXh0IiwiZHJhZnROb2RlIiwiZ2V0RHJhZnROb2RlIiwiZW50aXR5RGVsZXRlUmVzdHJpY3Rpb25zIiwiQ2FwYWJpbGl0aWVzIiwiRGVsZXRlUmVzdHJpY3Rpb25zIiwiaXNVcGRhdGVIaWRkZW4iLCJpc1BhdGhEZWxldGFibGUiLCJwYXRoVmlzaXRvciIsIm5hdmlnYXRpb25QYXRocyIsInBhcmVudEVudGl0eVNldERlbGV0YWJsZSIsImlkZW50aWZpY2F0aW9uRGF0YUZpZWxkRm9yQWN0aW9ucyIsImNvcHlEYXRhRmllbGQiLCJnZXRDb3B5QWN0aW9uIiwiZGF0YUZpZWxkIiwiZGF0YUZpZWxkSXNDb3B5QWN0aW9uIiwiaGVhZGVyRGF0YUZpZWxkRm9yQWN0aW9ucyIsImhlYWRlckFjdGlvbnMiLCJwdXNoIiwidHlwZSIsIkFjdGlvblR5cGUiLCJEcmFmdEFjdGlvbnMiLCJrZXkiLCJ1cGRhdGFibGVQcm9wZXJ0eVBhdGgiLCJVcGRhdGVSZXN0cmljdGlvbnMiLCJVcGRhdGFibGUiLCJDb2xsYWJvcmF0aW9uQXZhdGFycyIsImNvbXB1dGVBY3Rpb25zQW5kQWN0aW9uR3JvdXBzIiwidmlzaWJsZSIsImhhc0NvbGxhYm9yYXRpb25BdXRob3JpemF0aW9uIiwiUHJpbWFyeSIsIkRlbGV0YWJsZSIsImdldERlbGV0ZUhpZGRlbiIsIlNlY29uZGFyeSIsInBhcmVudEVudGl0eURlbGV0ZUVuYWJsZWQiLCJnZXREYXRhRmllbGRBbm5vdGF0aW9uQWN0aW9uIiwiQ29weSIsInRleHQiLCJMYWJlbCIsInRvU3RyaW5nIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiZ2V0VGV4dCIsImhlYWRlckRhdGFGaWVsZEZvcklCTkFjdGlvbnMiLCJjcml0aWNhbGl0eSIsIkNyaXRpY2FsaXR5IiwiaW5jbHVkZXMiLCJmb3JFYWNoIiwiUmVxdWlyZXNDb250ZXh0IiwiRXJyb3IiLCJJbmxpbmUiLCJvTmF2aWdhdGlvblBhcmFtcyIsInNlbWFudGljT2JqZWN0TWFwcGluZyIsImdldFNlbWFudGljT2JqZWN0TWFwcGluZyIsIk1hcHBpbmciLCJEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJhbm5vdGF0aW9uUGF0aCIsImdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJidXR0b25UeXBlIiwiQnV0dG9uVHlwZSIsIkdob3N0IiwiSGlkZGVuIiwiTmF2aWdhdGlvbkF2YWlsYWJsZSIsIktleUhlbHBlciIsImdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZCIsImlzTmF2aWdhYmxlIiwicHJlc3MiLCJmbiIsIlNlbWFudGljT2JqZWN0IiwiQWN0aW9uIiwiY3VzdG9tRGF0YSIsInNlbWFudGljT2JqZWN0IiwiYWN0aW9uIiwiZ2V0SGlkZGVuSGVhZGVyQWN0aW9ucyIsImhpZGRlbkFjdGlvbnMiLCJEZWZhdWx0IiwiZ2V0Rm9vdGVyRGVmYXVsdEFjdGlvbnMiLCJlbnRpdHlTZXREcmFmdFJvb3QiLCJ0ZXJtIiwiY29uZGl0aW9uU2F2ZSIsIlNhdmVBY3Rpb24iLCJjb25kaXRpb25BcHBseSIsImNvbmRpdGlvbkNhbmNlbCIsIkRpc2NhcmRBY3Rpb24iLCJjb25kaXRpb25DcmVhdGVOZXh0IiwiaGlkZUNyZWF0ZU5leHQiLCJmb290ZXJEYXRhRmllbGRGb3JBY3Rpb25zIiwiZm9vdGVyQWN0aW9ucyIsIkNyZWF0ZU5leHQiLCJlbnRpdHlUeXBlTmFtZSIsIkRlZmF1bHRBcHBseSIsInBvc2l0aW9uIiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiRW5kIiwiaXNWaXNpYmxlRXhwIiwiaXNWaXNpYmxlIiwiRGF0YUZpZWxkRm9yQWN0aW9uIiwiZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24iLCJpc0FJT3BlcmF0aW9uIiwiaXNBY3Rpb25BSU9wZXJhdGlvbiIsInByaW9yaXRpemVDcml0aWNhbGl0eSIsImhlYWRlckRhdGFGaWVsZEZvckFjdGlvbnNPckdyb3VwcyIsIk1lbnUiLCJpZCIsIm1lbnUiLCJBY3Rpb25zIiwiaXNNZW51QUlPcGVyYXRpb24iXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkhlYWRlckFuZEZvb3RlckFjdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFjdGlvbiwgRW50aXR5VHlwZSwgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IENvbW1vbkFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgdHlwZSB7XG5cdERhdGFGaWVsZEZvckFjdGlvbixcblx0RGF0YUZpZWxkRm9yQWN0aW9uR3JvdXBUeXBlcyxcblx0RGF0YUZpZWxkRm9yQWN0aW9uVHlwZXMsXG5cdERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblR5cGVzLFxuXHREZWxldGVIaWRkZW4sXG5cdFVwZGF0ZUhpZGRlblxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHtcblx0YW5kLFxuXHRjb21waWxlRXhwcmVzc2lvbixcblx0Y29uc3RhbnQsXG5cdGVxdWFsLFxuXHRmbixcblx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLFxuXHRpZkVsc2UsXG5cdG5vdCxcblx0cGF0aEluTW9kZWxcbn0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IEhpZGRlbkRyYWZ0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uQWN0aW9uLCBCYXNlQWN0aW9uLCBEYXRhRmllbGRGb3JBY3Rpb25PckFjdGlvbkdyb3VwIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHtcblx0QnV0dG9uVHlwZSxcblx0ZGF0YUZpZWxkSXNDb3B5QWN0aW9uLFxuXHRnZXRDb3B5QWN0aW9uLFxuXHRnZXRFbmFibGVkRm9yQW5ub3RhdGlvbkFjdGlvbixcblx0Z2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb25FeHByZXNzaW9uLFxuXHRnZXRTZW1hbnRpY09iamVjdE1hcHBpbmcsXG5cdGlzQWN0aW9uQUlPcGVyYXRpb24sXG5cdGlzTWVudUFJT3BlcmF0aW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7IFBsYWNlbWVudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBLZXlIZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0tleVwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBpc0VudGl0eVNldCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB7IGlzUGF0aERlbGV0YWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGlzVmlzaWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHsgRHJhZnQsIFVJLCBzaW5nbGV0b25QYXRoVmlzaXRvciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgRW52aXJvbm1lbnRDYXBhYmlsaXRpZXMgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvRW52aXJvbm1lbnRTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHsgQWN0aW9uVHlwZSB9IGZyb20gXCIuLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5cbi8qKlxuICogUmV0cmlldmVzIGFsbCB0aGUgRGF0YUZpZWxkRm9yQWN0aW9ucyBmcm9tIHRoZSBJZGVudGlmaWNhdGlvbiBhbm5vdGF0aW9uXG4gKiBUaGV5IG11c3QgYmVcbiAqIC0gRWl0aGVyIGxpbmtlZCB0byBhbiB1bmJvdW5kIGFjdGlvbiBvciB0byBhbiBhY3Rpb24gd2hpY2ggaGFzIGFuIE9wZXJhdGlvbkF2YWlsYWJsZSB0aGF0IGlzIG5vdCBzZXQgdG8gZmFsc2Ugc3RhdGljYWxseS5cbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBjdXJyZW50IGVudGl0eSB0eXBlXG4gKiBAcGFyYW0gaXNEZXRlcm1pbmluZ0FjdGlvbiBUaGUgZmxhZyB3aGljaCBkZW5vdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBhY3Rpb24gaXMgYSBkZXRlcm1pbmluZyBhY3Rpb25cbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIERhdGFGaWVsZEZvckFjdGlvbiByZXNwZWN0aW5nIHRoZSBpbnB1dCBwYXJhbWV0ZXIgJ2lzRGV0ZXJtaW5pbmdBY3Rpb24nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJZGVudGlmaWNhdGlvbkRhdGFGaWVsZEZvckFjdGlvbnMoZW50aXR5VHlwZTogRW50aXR5VHlwZSwgaXNEZXRlcm1pbmluZ0FjdGlvbjogYm9vbGVhbik6IERhdGFGaWVsZEZvckFjdGlvblR5cGVzW10ge1xuXHRyZXR1cm4gKGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5JZGVudGlmaWNhdGlvbj8uZmlsdGVyKChpZGVudGlmaWNhdGlvbkRhdGFGaWVsZCkgPT4ge1xuXHRcdHJldHVybiBpZGVudGlmaWNhdGlvbkRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uICYmXG5cdFx0XHRCb29sZWFuKGlkZW50aWZpY2F0aW9uRGF0YUZpZWxkLkRldGVybWluaW5nPy52YWx1ZU9mKCkpID09PSBpc0RldGVybWluaW5nQWN0aW9uICYmXG5cdFx0XHQoaWRlbnRpZmljYXRpb25EYXRhRmllbGQuQWN0aW9uVGFyZ2V0Py5pc0JvdW5kPy52YWx1ZU9mKCkgIT09IHRydWUgfHxcblx0XHRcdFx0aWRlbnRpZmljYXRpb25EYXRhRmllbGQ/LkFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZT8udmFsdWVPZigpICE9PSBmYWxzZSlcblx0XHRcdD8gdHJ1ZVxuXHRcdFx0OiBmYWxzZTtcblx0fSkgfHwgW10pIGFzIERhdGFGaWVsZEZvckFjdGlvblR5cGVzW107XG59XG5cbi8qKlxuICogUmV0cmlldmVzIGFsbCB0aGUgZGF0YSBmaWVsZCBmb3IgYWN0aW9ucyBmb3IgdGhlIGlkZW50aWZpY2F0aW9uIGFubm90YXRpb25cbiAqIFRoZXkgbXVzdCBiZVxuICogLSBFaXRoZXIgbGlua2VkIHRvIGFuIFVuYm91bmQgYWN0aW9uIG9yIHRvIGFuIGFjdGlvbiB3aGljaCBoYXMgYW4gT3BlcmF0aW9uQXZhaWxhYmxlIHRoYXQgaXMgbm90IHNldCB0byBmYWxzZSBzdGF0aWNhbGx5LlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIGN1cnJlbnQgZW50aXR5IHR5cGVcbiAqIEBwYXJhbSBpc0RldGVybWluaW5nQWN0aW9uIFRoZSBmbGFnIHdoaWNoIGRlbm90ZXMgd2hldGhlciBvciBub3QgdGhlIGFjdGlvbiBpcyBhIGRldGVybWluaW5nIGFjdGlvblxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgRGF0YUZpZWxkIGZvciBhY3Rpb24gcmVzcGVjdGluZyB0aGUgaW5wdXQgcGFyYW1ldGVyICdpc0RldGVybWluaW5nQWN0aW9uJ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SWRlbnRpZmljYXRpb25EYXRhRmllbGRGb3JBY3Rpb25zT3JHcm91cHMoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGlzRGV0ZXJtaW5pbmdBY3Rpb246IGJvb2xlYW5cbik6IERhdGFGaWVsZEZvckFjdGlvbk9yQWN0aW9uR3JvdXBbXSB7XG5cdHJldHVybiAoZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LklkZW50aWZpY2F0aW9uPy5maWx0ZXIoKGlkZW50aWZpY2F0aW9uRGF0YUZpZWxkKSA9PiB7XG5cdFx0cmV0dXJuIChpZGVudGlmaWNhdGlvbkRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uICYmXG5cdFx0XHRCb29sZWFuKGlkZW50aWZpY2F0aW9uRGF0YUZpZWxkLkRldGVybWluaW5nPy52YWx1ZU9mKCkpID09PSBpc0RldGVybWluaW5nQWN0aW9uICYmXG5cdFx0XHQoaWRlbnRpZmljYXRpb25EYXRhRmllbGQuQWN0aW9uVGFyZ2V0Py5pc0JvdW5kPy52YWx1ZU9mKCkgIT09IHRydWUgfHxcblx0XHRcdFx0aWRlbnRpZmljYXRpb25EYXRhRmllbGQ/LkFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZT8udmFsdWVPZigpICE9PSBmYWxzZSkpIHx8XG5cdFx0XHRpZGVudGlmaWNhdGlvbkRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXBcblx0XHRcdD8gdHJ1ZVxuXHRcdFx0OiBmYWxzZTtcblx0fSkgfHwgW10pIGFzIERhdGFGaWVsZEZvckFjdGlvbk9yQWN0aW9uR3JvdXBbXTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZSBhbGwgdGhlIElCTiBhY3Rpb25zIGZvciB0aGUgaWRlbnRpZmljYXRpb24gYW5ub3RhdGlvbi5cbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBjdXJyZW50IGVudGl0eXR5cGVcbiAqIEBwYXJhbSBpc0RldGVybWluaW5nQWN0aW9uIFdoZXRoZXIgb3Igbm90IHRoZSBhY3Rpb24gc2hvdWxkIGJlIGRldGVybWluaW5nXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBkYXRhIGZpZWxkIGZvciBhY3Rpb24gcmVzcGVjdGluZyB0aGUgaXNEZXRlcm1pbmluZ0FjdGlvbiBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gZ2V0SWRlbnRpZmljYXRpb25EYXRhRmllbGRGb3JJQk5BY3Rpb25zKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRpc0RldGVybWluaW5nQWN0aW9uOiBib29sZWFuXG4pOiBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25UeXBlc1tdIHtcblx0cmV0dXJuIChlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uSWRlbnRpZmljYXRpb24/LmZpbHRlcigoaWRlbnRpZmljYXRpb25EYXRhRmllbGQpID0+IHtcblx0XHRyZXR1cm4gaWRlbnRpZmljYXRpb25EYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiAmJlxuXHRcdFx0Qm9vbGVhbihpZGVudGlmaWNhdGlvbkRhdGFGaWVsZC5EZXRlcm1pbmluZz8udmFsdWVPZigpKSA9PT0gaXNEZXRlcm1pbmluZ0FjdGlvblxuXHRcdFx0PyB0cnVlXG5cdFx0XHQ6IGZhbHNlO1xuXHR9KSB8fCBbXSkgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uVHlwZXNbXTtcbn1cblxuZXhwb3J0IGNvbnN0IElNUE9SVEFOVF9DUklUSUNBTElUSUVTID0gW1xuXHRcIlVJLkNyaXRpY2FsaXR5VHlwZS9WZXJ5UG9zaXRpdmVcIixcblx0XCJVSS5Dcml0aWNhbGl0eVR5cGUvUG9zaXRpdmVcIixcblx0XCJVSS5Dcml0aWNhbGl0eVR5cGUvTmVnYXRpdmVcIixcblx0XCJVSS5Dcml0aWNhbGl0eVR5cGUvVmVyeU5lZ2F0aXZlXCJcbl07XG5cbi8qKlxuICogTWV0aG9kIHRvIGRldGVybWluZSB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IGJpbmRpbmcgZm9yIHRoZSBEZWxldGUgYnV0dG9uIG9uIGFuIG9iamVjdCBwYWdlLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgSW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHBhcmFtIGRlbGV0ZUhpZGRlbiBUaGUgdmFsdWUgb2YgdGhlIFVJLkRlbGV0ZUhpZGRlbiBhbm5vdGF0aW9uIG9uIHRoZSBlbnRpdHkgc2V0IC8gdHlwZS5cbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlIERlbGV0ZSBidXR0b24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWxldGVCdXR0b25WaXNpYmlsaXR5KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGRlbGV0ZUhpZGRlbjogRGVsZXRlSGlkZGVuIHwgdW5kZWZpbmVkXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyA9IGRhdGFNb2RlbE9iamVjdFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXMubWFwKChuYXZQcm9wKSA9PiBuYXZQcm9wLm5hbWUpLFxuXHRcdC8vIFNldCBhYnNvbHV0ZSBiaW5kaW5nIHBhdGggZm9yIFNpbmdsZXRvbiByZWZlcmVuY2VzLCBvdGhlcndpc2UgdGhlIGNvbmZpZ3VyZWQgYW5ub3RhdGlvbiBwYXRoIGl0c2VsZi5cblx0XHQvLyBGb3IgZS5nLiAvY29tLnNhcC5uYW1lc3BhY2UuRW50aXR5Q29udGFpbmVyL1NpbmdsZXRvbi9Qcm9wZXJ0eSB0byAvU2luZ2xldG9uL1Byb3BlcnR5XG5cdFx0ZGVsZXRlSGlkZGVuRXhwcmVzc2lvbiA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkZWxldGVIaWRkZW4sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIGZhbHNlLCAocGF0aDogc3RyaW5nKSA9PlxuXHRcdFx0c2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZWRUeXBlcygpLCBbXSlcblx0XHQpLCAvLyBkZWZhdWx0IHRvIGZhbHNlXG5cdFx0bWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKSxcblx0XHR2aWV3TGV2ZWwgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0Vmlld0xldmVsKCksXG5cdFx0Ly8gRGVsZXRlIGJ1dHRvbiBpcyB2aXNpYmxlXG5cdFx0Ly8gSW4gT1AgXHRcdC0tPiAgd2hlbiBub3QgaW4gZWRpdCBtb2RlXG5cdFx0Ly8gSW4gc3ViLU9QIFx0LS0+ICB3aGVuIGluIGVkaXQgbW9kZVxuXHRcdGVkaXRhYmxlRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gdmlld0xldmVsID4gMSA/IFVJLklzRWRpdGFibGUgOiBub3QoVUkuSXNFZGl0YWJsZSk7XG5cblx0Ly8gSWYgVUkuRGVsZXRlSGlkZGVuIGFubm90YXRpb24gb24gZW50aXR5IHNldCBvciB0eXBlIGlzIGVpdGhlciBub3QgZGVmaW5lZCBvciBleHBsaWNpdGx5IHNldCB0byBmYWxzZSxcblx0Ly8gRGVsZXRlIGJ1dHRvbiBpcyB2aXNpYmxlIGJhc2VkIG9uIGVkaXRhYmxlRXhwcmVzc2lvbi5cblx0Ly8gZWxzZSxcblx0Ly8gRGVsZXRlIGJ1dHRvbiBpcyB2aXNpYmxlIGJhc2VkIG9uIGJvdGggYW5ub3RhdGlvbiBwYXRoIGFuZCBlZGl0YWJsZUV4cHJlc3Npb24uXG5cdHJldHVybiBpZkVsc2UoXG5cdFx0ZGVsZXRlSGlkZGVuID09PSB1bmRlZmluZWQgfHwgZGVsZXRlSGlkZGVuLnZhbHVlT2YoKSA9PT0gZmFsc2UsXG5cdFx0ZWRpdGFibGVFeHByZXNzaW9uLFxuXHRcdGFuZChlZGl0YWJsZUV4cHJlc3Npb24sIGVxdWFsKGRlbGV0ZUhpZGRlbkV4cHJlc3Npb24sIGZhbHNlKSlcblx0KTtcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gZGV0ZXJtaW5lIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgYmluZGluZyBmb3IgdGhlIERlbGV0ZSBidXR0b24gb24gYW4gb2JqZWN0IHBhZ2UuXG4gKiBAcGFyYW0gaXNEZWxldGFibGUgVGhlIGRlbGV0ZSByZXN0cmljdGlvbiBjb25maWd1cmVkXG4gKiBAcGFyYW0gaXNQYXJlbnREZWxldGFibGUgVGhlIGRlbGV0ZSByZXN0cmljdGlvbiBjb25maWd1cmVkIG9uIHRoZSBwYXJlbnQgZW50aXR5XG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgRGVsZXRlIGJ1dHRvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZXRlQnV0dG9uRW5hYmxlZChcblx0aXNEZWxldGFibGU6IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPEJvb2xlYW4+IHwgdW5kZWZpbmVkLFxuXHRpc1BhcmVudERlbGV0YWJsZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCksXG5cdFx0aXNEcmFmdFJvb3QgPSBNb2RlbEhlbHBlci5pc0RyYWZ0Um9vdChlbnRpdHlTZXQpO1xuXG5cdGxldCByZXQgPSBpZkVsc2UoXG5cdFx0aXNQYXJlbnREZWxldGFibGUgIT09IHVuZGVmaW5lZCxcblx0XHRpc1BhcmVudERlbGV0YWJsZSxcblx0XHRpZkVsc2UoaXNEZWxldGFibGUgIT09IHVuZGVmaW5lZCwgZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGlzRGVsZXRhYmxlKSwgdHJ1ZSksIGNvbnN0YW50KHRydWUpKVxuXHQpO1xuXG5cdC8vIGRlbGV0ZSBzaG91bGQgYmUgZGlzYWJsZWQgZm9yIExvY2tlZCBvYmplY3RzXG5cdHJldCA9IGlzRHJhZnRSb290ID8gYW5kKHJldCwgbm90KHBhdGhJbk1vZGVsKFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvSW5Qcm9jZXNzQnlVc2VyXCIpKSkgOiByZXQ7XG5cblx0cmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gZGV0ZXJtaW5lIHRoZSAndmlzaWJsZScgcHJvcGVydHkgYmluZGluZyBmb3IgdGhlIEVkaXQgYnV0dG9uIG9uIGFuIG9iamVjdCBwYWdlLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgSW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHBhcmFtIHJvb3RVcGRhdGVIaWRkZW4gVGhlIHZhbHVlIG9mIHRoZSBVSS5VcGRhdGVIaWRkZW4gYW5ub3RhdGlvbiBvbiB0aGUgZW50aXR5IHNldCAvIHR5cGUuXG4gKiBAcGFyYW0gcm9vdENvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSB1cGRhdGVIaWRkZW5cbiAqIEBwYXJhbSB2aWV3TGV2ZWxcbiAqIEBwYXJhbSBjYXBhYmlsaXRpZXNcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlIEVkaXQgYnV0dG9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWRpdEJ1dHRvblZpc2liaWxpdHkoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0cm9vdFVwZGF0ZUhpZGRlbjogVXBkYXRlSGlkZGVuIHwgdW5kZWZpbmVkLFxuXHRyb290Q29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHR1cGRhdGVIaWRkZW4/OiBVcGRhdGVIaWRkZW4gfCB1bmRlZmluZWQsXG5cdHZpZXdMZXZlbD86IG51bWJlciB8IHVuZGVmaW5lZCxcblx0Y2FwYWJpbGl0aWVzPzogRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IHJvb3RFbnRpdHlTZXQgPSByb290Q29udmVydGVyQ29udGV4dD8uZ2V0RW50aXR5U2V0KCksXG5cdFx0ZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSxcblx0XHRpc0ZDTEVuYWJsZWQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmlzRmNsRW5hYmxlZCgpO1xuXHRsZXQgaXNEcmFmdEVuYWJsZWQ7XG5cdGNvbnN0IHJvb3RVcGRhdGVIaWRkZW5FeHByZXNzaW9uID0gZ2V0SGlkZGVuRXhwcmVzc2lvbihyb290Q29udmVydGVyQ29udGV4dCwgcm9vdFVwZGF0ZUhpZGRlbik7XG5cdGNvbnN0IGhpZGRlbkRyYWZ0ID0gKGNhcGFiaWxpdGllcz8uSGlkZGVuRHJhZnQgYXMgSGlkZGVuRHJhZnQpPy5lbmFibGVkO1xuXHRpZiAodmlld0xldmVsICYmIHZpZXdMZXZlbCA+IDEpIHtcblx0XHQvLyBpZiB2aWV3bGV2ZWwgPiAxIGNoZWNrIGlmIG5vZGUgaXMgZHJhZnQgZW5hYmxlZFxuXHRcdGlzRHJhZnRFbmFibGVkID0gTW9kZWxIZWxwZXIuaXNEcmFmdE5vZGUoZW50aXR5U2V0KTtcblx0fSBlbHNlIHtcblx0XHRpc0RyYWZ0RW5hYmxlZCA9IE1vZGVsSGVscGVyLmlzRHJhZnRSb290KHJvb3RFbnRpdHlTZXQpO1xuXHR9XG5cdGNvbnN0IHVwZGF0ZUhpZGRlbkV4cHJlc3Npb24gPSBnZXRIaWRkZW5FeHByZXNzaW9uKHJvb3RDb252ZXJ0ZXJDb250ZXh0LCB1cGRhdGVIaWRkZW4pO1xuXG5cdGNvbnN0IG5vdEVkaXRhYmxlRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gbm90KFVJLklzRWRpdGFibGUpO1xuXG5cdC8vIElmIFVJLlVwZGF0ZUhpZGRlbiBhbm5vdGF0aW9uIG9uIGVudGl0eSBzZXQgb3IgdHlwZSBpcyBlaXRoZXIgbm90IGRlZmluZWQgb3IgZXhwbGljaXRseSBzZXQgdG8gZmFsc2UsXG5cdC8vIEVkaXQgYnV0dG9uIGlzIHZpc2libGUgaW4gZGlzcGxheSBtb2RlLlxuXHQvLyBlbHNlLFxuXHQvLyBFZGl0IGJ1dHRvbiBpcyB2aXNpYmxlIGJhc2VkIG9uIGJvdGggYW5ub3RhdGlvbiBwYXRoIGFuZCBpbiBkaXNwbGF5IG1vZGUuXG5cdGNvbnN0IHJlc3VsdGFudEV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IGlmRWxzZShcblx0XHQodmlld0xldmVsIGFzIG51bWJlcikgPiAxIHx8IGhpZGRlbkRyYWZ0LFxuXHRcdGlmRWxzZShcblx0XHRcdHVwZGF0ZUhpZGRlbiA9PT0gdW5kZWZpbmVkIHx8IHVwZGF0ZUhpZGRlbi52YWx1ZU9mKCkgPT09IGZhbHNlLFxuXHRcdFx0YW5kKFxuXHRcdFx0XHRub3RFZGl0YWJsZUV4cHJlc3Npb24sXG5cdFx0XHRcdGVxdWFsKHBhdGhJbk1vZGVsKFwicm9vdEVkaXRWaXNpYmxlXCIsIFwiaW50ZXJuYWxcIiksIHRydWUpLFxuXHRcdFx0XHRpZkVsc2UoaXNGQ0xFbmFibGVkLCBlcXVhbChwYXRoSW5Nb2RlbChcIi9zaG93RWRpdEJ1dHRvblwiLCBcImZjbGhlbHBlclwiKSwgdHJ1ZSksIHRydWUpXG5cdFx0XHQpLFxuXHRcdFx0YW5kKFxuXHRcdFx0XHRub3RFZGl0YWJsZUV4cHJlc3Npb24sXG5cdFx0XHRcdGVxdWFsKHVwZGF0ZUhpZGRlbkV4cHJlc3Npb24sIGZhbHNlKSxcblx0XHRcdFx0ZXF1YWwocGF0aEluTW9kZWwoXCJyb290RWRpdFZpc2libGVcIiwgXCJpbnRlcm5hbFwiKSwgdHJ1ZSksXG5cdFx0XHRcdGlmRWxzZShpc0ZDTEVuYWJsZWQsIGVxdWFsKHBhdGhJbk1vZGVsKFwiL3Nob3dFZGl0QnV0dG9uXCIsIFwiZmNsaGVscGVyXCIpLCB0cnVlKSwgdHJ1ZSlcblx0XHRcdClcblx0XHQpLFxuXHRcdGlmRWxzZShcblx0XHRcdHJvb3RVcGRhdGVIaWRkZW4gPT09IHVuZGVmaW5lZCB8fCByb290VXBkYXRlSGlkZGVuLnZhbHVlT2YoKSA9PT0gZmFsc2UsXG5cdFx0XHRub3RFZGl0YWJsZUV4cHJlc3Npb24sXG5cdFx0XHRhbmQobm90RWRpdGFibGVFeHByZXNzaW9uLCBlcXVhbChyb290VXBkYXRlSGlkZGVuRXhwcmVzc2lvbiwgZmFsc2UpKVxuXHRcdClcblx0KTtcblx0cmV0dXJuIGlmRWxzZShpc0RyYWZ0RW5hYmxlZCwgYW5kKHJlc3VsdGFudEV4cHJlc3Npb24sIERyYWZ0Lkhhc05vRHJhZnRGb3JDdXJyZW50VXNlciksIHJlc3VsdGFudEV4cHJlc3Npb24pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGlkZGVuRXhwcmVzc2lvbihcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHR1cGRhdGVIaWRkZW46IFVwZGF0ZUhpZGRlbiB8IHVuZGVmaW5lZFxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMgPSBkYXRhTW9kZWxPYmplY3RQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLm1hcCgobmF2UHJvcCkgPT4gbmF2UHJvcC5uYW1lKSxcblx0XHQvLyBTZXQgYWJzb2x1dGUgYmluZGluZyBwYXRoIGZvciBTaW5nbGV0b24gcmVmZXJlbmNlcywgb3RoZXJ3aXNlIHRoZSBjb25maWd1cmVkIGFubm90YXRpb24gcGF0aCBpdHNlbGYuXG5cdFx0Ly8gRm9yIGUuZy4gL2NvbS5zYXAubmFtZXNwYWNlLkVudGl0eUNvbnRhaW5lci9TaW5nbGV0b24vUHJvcGVydHkgdG8gL1NpbmdsZXRvbi9Qcm9wZXJ0eVxuXHRcdHVwZGF0ZUhpZGRlbkV4cHJlc3Npb24gPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odXBkYXRlSGlkZGVuLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBmYWxzZSwgKHBhdGg6IHN0cmluZykgPT5cblx0XHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocylcblx0XHQpO1xuXHRyZXR1cm4gdXBkYXRlSGlkZGVuRXhwcmVzc2lvbjtcbn1cbi8qKlxuICogTWV0aG9kIHRvIGRldGVybWluZSB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IGJpbmRpbmcgZm9yIHRoZSBFZGl0IGJ1dHRvbiBvbiBhbiBvYmplY3QgcGFnZS5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IEluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dC5cbiAqIEBwYXJhbSB1cGRhdGVSZXN0cmljdGlvbnNcbiAqIEBwYXJhbSB2aWV3TGV2ZWxcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlIEVkaXQgYnV0dG9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWRpdEJ1dHRvbkVuYWJsZWRFeHByZXNzaW9uKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHVwZGF0ZVJlc3RyaWN0aW9ucz86IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPEJvb2xlYW4+LFxuXHR2aWV3TGV2ZWw/OiBudW1iZXIgfCB1bmRlZmluZWRcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCksXG5cdFx0aXNEcmFmdFJvb3QgPSBNb2RlbEhlbHBlci5pc0RyYWZ0Um9vdChlbnRpdHlTZXQpLFxuXHRcdGlzU3RpY2t5ID0gTW9kZWxIZWxwZXIuaXNTdGlja3koZW50aXR5U2V0KTtcblx0bGV0IGVkaXRBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGlmIChpc0RyYWZ0Um9vdCAmJiBpc0VudGl0eVNldChlbnRpdHlTZXQpKSB7XG5cdFx0ZWRpdEFjdGlvbk5hbWUgPSBlbnRpdHlTZXQuYW5ub3RhdGlvbnMuQ29tbW9uPy5EcmFmdFJvb3Q/LkVkaXRBY3Rpb24gYXMgc3RyaW5nO1xuXHR9IGVsc2UgaWYgKGlzU3RpY2t5ICYmIGlzRW50aXR5U2V0KGVudGl0eVNldCkpIHtcblx0XHRlZGl0QWN0aW9uTmFtZSA9IGVudGl0eVNldC5hbm5vdGF0aW9ucy5TZXNzaW9uPy5TdGlja3lTZXNzaW9uU3VwcG9ydGVkPy5FZGl0QWN0aW9uIGFzIHN0cmluZztcblx0fVxuXHRpZiAoZWRpdEFjdGlvbk5hbWUpIHtcblx0XHRjb25zdCBlZGl0QWN0aW9uQW5ub3RhdGlvblBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgoZWRpdEFjdGlvbk5hbWUpO1xuXHRcdGNvbnN0IGVkaXRBY3Rpb24gPSBjb252ZXJ0ZXJDb250ZXh0LnJlc29sdmVBYnNvbHV0ZVBhdGgoZWRpdEFjdGlvbkFubm90YXRpb25QYXRoKS50YXJnZXQgYXMgQWN0aW9uIHwgbnVsbDtcblx0XHRpZiAoZWRpdEFjdGlvbj8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZSA9PT0gbnVsbCkge1xuXHRcdFx0Ly8gV2UgZGlzYWJsZWQgYWN0aW9uIGFkdmVydGlzZW1lbnQgYnV0IGtlcHQgaXQgaW4gdGhlIGNvZGUgZm9yIHRoZSB0aW1lIGJlaW5nXG5cdFx0XHQvL3JldHVybiBcIns9ICR7I1wiICsgZWRpdEFjdGlvbk5hbWUgKyBcIn0gPyB0cnVlIDogZmFsc2UgfVwiO1xuXHRcdH0gZWxzZSBpZiAoKHZpZXdMZXZlbCBhcyBudW1iZXIpID4gMSkge1xuXHRcdFx0Ly8gRWRpdCBidXR0b24gaXMgZW5hYmxlZCBiYXNlZCBvbiB0aGUgdXBkYXRlIHJlc3RyaWN0aW9ucyBvZiB0aGUgc3ViLU9QXG5cdFx0XHRpZiAodXBkYXRlUmVzdHJpY3Rpb25zICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuIGFuZChcblx0XHRcdFx0XHRlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odXBkYXRlUmVzdHJpY3Rpb25zKSwgdHJ1ZSksXG5cdFx0XHRcdFx0ZXF1YWwocGF0aEluTW9kZWwoXCJyb290RWRpdEVuYWJsZWRcIiwgXCJpbnRlcm5hbFwiKSwgdHJ1ZSlcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBlcXVhbChwYXRoSW5Nb2RlbChcInJvb3RFZGl0RW5hYmxlZFwiLCBcImludGVybmFsXCIpLCB0cnVlKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uRXhwcmVzc2lvbihjb252ZXJ0ZXJDb250ZXh0LCBlZGl0QWN0aW9uID8/IHVuZGVmaW5lZCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBjb25zdGFudCh0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVkaXRCdXR0b25FbmFibGVkKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHVwZGF0ZVJlc3RyaWN0aW9ucz86IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPEJvb2xlYW4+LFxuXHR2aWV3TGV2ZWw/OiBudW1iZXIgfCB1bmRlZmluZWRcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGdldEVkaXRCdXR0b25FbmFibGVkRXhwcmVzc2lvbihjb252ZXJ0ZXJDb250ZXh0LCB1cGRhdGVSZXN0cmljdGlvbnMsIHZpZXdMZXZlbCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGVhZGVyRGVmYXVsdEFjdGlvbnMoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0Y2FwYWJpbGl0aWVzPzogRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNcbik6IEJhc2VBY3Rpb25bXSB7XG5cdGNvbnN0IHNDb250ZXh0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKTtcblx0Y29uc3Qgcm9vdEVudGl0eVNldFBhdGggPSBNb2RlbEhlbHBlci5nZXRSb290RW50aXR5U2V0UGF0aChzQ29udGV4dFBhdGgpO1xuXHRjb25zdCByb290Q29udmVydGVyQ29udGV4dCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcjxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KFwiL1wiICsgcm9vdEVudGl0eVNldFBhdGgpO1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpLFxuXHRcdGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSxcblx0XHRyb290RW50aXR5U2V0ID0gcm9vdENvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCksXG5cdFx0cm9vdEVudGl0eVR5cGUgPSByb290Q29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksXG5cdFx0c3RpY2t5U2Vzc2lvblN1cHBvcnRlZCA9IE1vZGVsSGVscGVyLmdldFN0aWNreVNlc3Npb24ocm9vdEVudGl0eVNldCksIC8vZm9yIHN0aWNreSBhcHBcblx0XHRkcmFmdFJvb3QgPSBNb2RlbEhlbHBlci5nZXREcmFmdFJvb3Qocm9vdEVudGl0eVNldCksIC8vZW50aXR5U2V0ICYmIGVudGl0eVNldC5hbm5vdGF0aW9ucy5Db21tb24/LkRyYWZ0Um9vdCxcblx0XHRjb2xsYWJvcmF0aW9uT25Sb290ID0gTW9kZWxIZWxwZXIuaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWRGcm9tQ29udmVydGVyQ29udGV4dChjb252ZXJ0ZXJDb250ZXh0KSAmJiBkcmFmdFJvb3QsXG5cdFx0ZHJhZnROb2RlID0gTW9kZWxIZWxwZXIuZ2V0RHJhZnROb2RlKHJvb3RFbnRpdHlTZXQpLFxuXHRcdGVudGl0eURlbGV0ZVJlc3RyaWN0aW9ucyA9IGVudGl0eVNldCAmJiBlbnRpdHlTZXQuYW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllcz8uRGVsZXRlUmVzdHJpY3Rpb25zLFxuXHRcdHJvb3RVcGRhdGVIaWRkZW4gPSBNb2RlbEhlbHBlci5pc1VwZGF0ZUhpZGRlbihyb290RW50aXR5U2V0LCByb290RW50aXR5VHlwZSksXG5cdFx0dXBkYXRlSGlkZGVuID0gcm9vdEVudGl0eVNldCAmJiBpc0VudGl0eVNldChyb290RW50aXR5U2V0KSAmJiByb290VXBkYXRlSGlkZGVuPy52YWx1ZU9mKCksXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdGlzUGFyZW50RGVsZXRhYmxlID0gaXNQYXRoRGVsZXRhYmxlKGRhdGFNb2RlbE9iamVjdFBhdGgsIHtcblx0XHRcdHBhdGhWaXNpdG9yOiAocGF0aDogc3RyaW5nLCBuYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdKSA9PlxuXHRcdFx0XHRzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlZFR5cGVzKCksIG5hdmlnYXRpb25QYXRocylcblx0XHR9KSxcblx0XHRwYXJlbnRFbnRpdHlTZXREZWxldGFibGUgPSBpc1BhcmVudERlbGV0YWJsZSA/IGNvbXBpbGVFeHByZXNzaW9uKGlzUGFyZW50RGVsZXRhYmxlKSA6IGlzUGFyZW50RGVsZXRhYmxlLFxuXHRcdGlkZW50aWZpY2F0aW9uRGF0YUZpZWxkRm9yQWN0aW9ucyA9IGdldElkZW50aWZpY2F0aW9uRGF0YUZpZWxkRm9yQWN0aW9uc09yR3JvdXBzKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLCBmYWxzZSk7XG5cblx0Y29uc3QgY29weURhdGFGaWVsZCA9XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRWaWV3TGV2ZWwoKSA9PT0gMVxuXHRcdFx0PyBnZXRDb3B5QWN0aW9uKFxuXHRcdFx0XHRcdGlkZW50aWZpY2F0aW9uRGF0YUZpZWxkRm9yQWN0aW9ucy5maWx0ZXIoKGRhdGFGaWVsZCkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBkYXRhRmllbGRJc0NvcHlBY3Rpb24oZGF0YUZpZWxkKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KSBhcyBEYXRhRmllbGRGb3JBY3Rpb25bXVxuXHRcdFx0ICApXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblxuXHRjb25zdCBoZWFkZXJEYXRhRmllbGRGb3JBY3Rpb25zID0gaWRlbnRpZmljYXRpb25EYXRhRmllbGRGb3JBY3Rpb25zLmZpbHRlcigoZGF0YUZpZWxkKSA9PiB7XG5cdFx0cmV0dXJuICFkYXRhRmllbGRJc0NvcHlBY3Rpb24oZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckFjdGlvblR5cGVzKTtcblx0fSk7XG5cblx0Ly8gSW5pdGlhbGl6ZSBhY3Rpb25zIGFuZCBzdGFydCB3aXRoIGRyYWZ0IGFjdGlvbnMgaWYgYXZhaWxhYmxlIHNpbmNlIHRoZXkgc2hvdWxkIGFwcGVhciBpbiB0aGUgZmlyc3Rcblx0Ly8gbGVmdG1vc3QgcG9zaXRpb24gaW4gdGhlIGFjdGlvbnMgYXJlYSBvZiB0aGUgT1AgaGVhZGVyXG5cdC8vIFRoaXMgaXMgbW9yZSBsaWtlIGEgcGxhY2Vob2xkZXIgdGhhbiBhIHNpbmdsZSBhY3Rpb24sIHNpbmNlIHRoaXMgY29udHJvbHMgbm90IG9ubHkgdGhlIHRlbXBsYXRpbmcgb2Zcblx0Ly8gdGhlIGJ1dHRvbiBmb3Igc3dpdGNoaW5nIGJldHdlZW4gZHJhZnQgYW5kIGFjdGl2ZSBkb2N1bWVudCB2ZXJzaW9ucyBidXQgYWxzbyB0aGUgY29udHJvbHMgZm9yXG5cdC8vIHRoZSBjb2xsYWJvcmF0aXZlIGRyYWZ0IGZyYWdtZW50LlxuXHRjb25zdCBoZWFkZXJBY3Rpb25zOiBCYXNlQWN0aW9uW10gPSBbXTtcblx0aWYgKGlzRW50aXR5U2V0KGVudGl0eVNldCkgJiYgZHJhZnRSb290Py5FZGl0QWN0aW9uICYmIHVwZGF0ZUhpZGRlbiAhPT0gdHJ1ZSkge1xuXHRcdGhlYWRlckFjdGlvbnMucHVzaCh7IHR5cGU6IEFjdGlvblR5cGUuRHJhZnRBY3Rpb25zLCBrZXk6IFwiRHJhZnRBY3Rpb25zXCIgfSk7XG5cdH1cblxuXHRjb25zdCB2aWV3TGV2ZWwgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldFZpZXdMZXZlbCgpO1xuXHRjb25zdCB1cGRhdGFibGVQcm9wZXJ0eVBhdGggPSB2aWV3TGV2ZWwgPiAxID8gZW50aXR5U2V0Py5hbm5vdGF0aW9ucy5DYXBhYmlsaXRpZXM/LlVwZGF0ZVJlc3RyaWN0aW9ucz8uVXBkYXRhYmxlIDogdW5kZWZpbmVkO1xuXHRpZiAoZHJhZnRSb290IHx8IGRyYWZ0Tm9kZSkge1xuXHRcdGhlYWRlckFjdGlvbnMucHVzaCh7IHR5cGU6IEFjdGlvblR5cGUuQ29sbGFib3JhdGlvbkF2YXRhcnMsIGtleTogXCJDb2xsYWJvcmF0aW9uQXZhdGFyc1wiIH0pO1xuXHR9XG5cdC8vIFRoZW4gYWRkIHRoZSBcIkNyaXRpY2FsXCIgRGF0YUZpZWxkRm9yQWN0aW9ucyBhbmQgRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXBzXG5cdC8vIFByaW9yaXRpemVzIGFjdGlvbnMgYW5kIGFjdGlvbiBncm91cHMgdGhhdCBoYXZlIHRoZSBDcml0aWNhbGl0eSBhbm5vdGF0aW9uLCBwbGFjaW5nIHRoZW0gYmVmb3JlIHRob3NlIHdpdGhvdXQgdGhlIGFubm90YXRpb25cblx0Y29tcHV0ZUFjdGlvbnNBbmRBY3Rpb25Hcm91cHMoaGVhZGVyQWN0aW9ucywgdHJ1ZSwgaGVhZGVyRGF0YUZpZWxkRm9yQWN0aW9ucywgY29udmVydGVyQ29udGV4dCk7XG5cblx0Ly8gVGhlbiB0aGUgZWRpdCBhY3Rpb24gaWYgaXQgZXhpc3RzXG5cdGlmICgoZHJhZnRSb290Py5FZGl0QWN0aW9uIHx8IHN0aWNreVNlc3Npb25TdXBwb3J0ZWQ/LkVkaXRBY3Rpb24pICYmIHVwZGF0ZUhpZGRlbiAhPT0gdHJ1ZSkge1xuXHRcdGxldCB2aXNpYmxlID0gZ2V0RWRpdEJ1dHRvblZpc2liaWxpdHkoXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0cm9vdFVwZGF0ZUhpZGRlbixcblx0XHRcdHJvb3RDb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0TW9kZWxIZWxwZXIuaXNVcGRhdGVIaWRkZW4oZW50aXR5U2V0LCBlbnRpdHlUeXBlKSxcblx0XHRcdHZpZXdMZXZlbCxcblx0XHRcdGNhcGFiaWxpdGllc1xuXHRcdCk7XG5cdFx0aWYgKGNvbGxhYm9yYXRpb25PblJvb3QpIHtcblx0XHRcdHZpc2libGUgPSBhbmQodmlzaWJsZSwgbm90KGVxdWFsKFVJLmhhc0NvbGxhYm9yYXRpb25BdXRob3JpemF0aW9uLCBmYWxzZSkpKTtcblx0XHR9XG5cdFx0aGVhZGVyQWN0aW9ucy5wdXNoKHtcblx0XHRcdHR5cGU6IEFjdGlvblR5cGUuUHJpbWFyeSxcblx0XHRcdGtleTogXCJFZGl0QWN0aW9uXCIsXG5cdFx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbih2aXNpYmxlKSxcblx0XHRcdGVuYWJsZWQ6IGdldEVkaXRCdXR0b25FbmFibGVkKHJvb3RDb252ZXJ0ZXJDb250ZXh0LCB1cGRhdGFibGVQcm9wZXJ0eVBhdGgsIHZpZXdMZXZlbClcblx0XHR9KTtcblx0fVxuXHQvLyBUaGVuIHRoZSBkZWxldGUgYWN0aW9uIGlmIHdlJ3JlIG5vdCBzdGF0aWNhbGx5IG5vdCBkZWxldGFibGVcblx0aWYgKFxuXHRcdChwYXJlbnRFbnRpdHlTZXREZWxldGFibGUgJiYgcGFyZW50RW50aXR5U2V0RGVsZXRhYmxlICE9PSBcImZhbHNlXCIpIHx8XG5cdFx0KGVudGl0eURlbGV0ZVJlc3RyaWN0aW9ucz8uRGVsZXRhYmxlPy52YWx1ZU9mKCkgIT09IGZhbHNlICYmIHBhcmVudEVudGl0eVNldERlbGV0YWJsZSAhPT0gXCJmYWxzZVwiKVxuXHQpIHtcblx0XHRjb25zdCBkZWxldGVIaWRkZW4gPSBNb2RlbEhlbHBlci5nZXREZWxldGVIaWRkZW4oZW50aXR5U2V0LCBlbnRpdHlUeXBlKTtcblx0XHRsZXQgdmlzaWJsZSA9IGdldERlbGV0ZUJ1dHRvblZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgZGVsZXRlSGlkZGVuKTtcblx0XHRpZiAoY29sbGFib3JhdGlvbk9uUm9vdCkge1xuXHRcdFx0dmlzaWJsZSA9IGFuZCh2aXNpYmxlLCBub3QoZXF1YWwoVUkuaGFzQ29sbGFib3JhdGlvbkF1dGhvcml6YXRpb24sIGZhbHNlKSkpO1xuXHRcdH1cblx0XHRoZWFkZXJBY3Rpb25zLnB1c2goe1xuXHRcdFx0dHlwZTogQWN0aW9uVHlwZS5TZWNvbmRhcnksXG5cdFx0XHRrZXk6IFwiRGVsZXRlQWN0aW9uXCIsXG5cdFx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbih2aXNpYmxlKSxcblx0XHRcdGVuYWJsZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldERlbGV0ZUJ1dHRvbkVuYWJsZWQoZW50aXR5RGVsZXRlUmVzdHJpY3Rpb25zPy5EZWxldGFibGUsIGlzUGFyZW50RGVsZXRhYmxlLCBjb252ZXJ0ZXJDb250ZXh0KSksXG5cdFx0XHRwYXJlbnRFbnRpdHlEZWxldGVFbmFibGVkOiBwYXJlbnRFbnRpdHlTZXREZWxldGFibGVcblx0XHR9KTtcblx0fVxuXG5cdGlmIChjb3B5RGF0YUZpZWxkKSB7XG5cdFx0aGVhZGVyQWN0aW9ucy5wdXNoKHtcblx0XHRcdC4uLmdldERhdGFGaWVsZEFubm90YXRpb25BY3Rpb24oY29weURhdGFGaWVsZCwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkNvcHksXG5cdFx0XHR0ZXh0OiBjb3B5RGF0YUZpZWxkLkxhYmVsPy50b1N0cmluZygpID8/IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIkNfQ09NTU9OX0NPUFlcIilcblx0XHR9KTtcblx0fVxuXG5cdGNvbnN0IGhlYWRlckRhdGFGaWVsZEZvcklCTkFjdGlvbnMgPSBnZXRJZGVudGlmaWNhdGlvbkRhdGFGaWVsZEZvcklCTkFjdGlvbnMoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIGZhbHNlKTtcblxuXHRoZWFkZXJEYXRhRmllbGRGb3JJQk5BY3Rpb25zXG5cdFx0LmZpbHRlcigoZGF0YUZpZWxkKSA9PiB7XG5cdFx0XHRjb25zdCBjcml0aWNhbGl0eSA9IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhRmllbGQ/LkNyaXRpY2FsaXR5KSk7XG5cdFx0XHRyZXR1cm4gIUlNUE9SVEFOVF9DUklUSUNBTElUSUVTLmluY2x1ZGVzKGNyaXRpY2FsaXR5ISk7XG5cdFx0fSlcblx0XHQuZm9yRWFjaCgoZGF0YUZpZWxkKSA9PiB7XG5cdFx0XHRpZiAoZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dD8udmFsdWVPZigpID09PSB0cnVlKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgUmVxdWlyZXNDb250ZXh0IHByb3BlcnR5IHNob3VsZCBub3QgYmUgdHJ1ZSBmb3IgaGVhZGVyIElCTiBhY3Rpb24gOiAke2RhdGFGaWVsZC5MYWJlbH1gKTtcblx0XHRcdH1cblx0XHRcdGlmIChkYXRhRmllbGQuSW5saW5lPy52YWx1ZU9mKCkgPT09IHRydWUpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBJbmxpbmUgcHJvcGVydHkgc2hvdWxkIG5vdCBiZSB0cnVlIGZvciBoZWFkZXIgSUJOIGFjdGlvbiA6ICR7ZGF0YUZpZWxkLkxhYmVsfWApO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgb05hdmlnYXRpb25QYXJhbXMgPSB7XG5cdFx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZzogZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nKGRhdGFGaWVsZC5NYXBwaW5nKVxuXHRcdFx0fTtcblxuXHRcdFx0aGVhZGVyQWN0aW9ucy5wdXNoKHtcblx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdFx0XHRcdHRleHQ6IGRhdGFGaWVsZC5MYWJlbD8udG9TdHJpbmcoKSxcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0YnV0dG9uVHlwZTogQnV0dG9uVHlwZS5HaG9zdCxcblx0XHRcdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0YW5kKFxuXHRcdFx0XHRcdFx0bm90KGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4pLCB0cnVlKSksXG5cdFx0XHRcdFx0XHRub3QoZXF1YWwocGF0aEluTW9kZWwoXCJzaGVsbE5hdmlnYXRpb25Ob3RBdmFpbGFibGVcIiwgXCJpbnRlcm5hbFwiKSwgdHJ1ZSkpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRlbmFibGVkOlxuXHRcdFx0XHRcdGRhdGFGaWVsZC5OYXZpZ2F0aW9uQXZhaWxhYmxlICE9PSB1bmRlZmluZWRcblx0XHRcdFx0XHRcdD8gY29tcGlsZUV4cHJlc3Npb24oZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5OYXZpZ2F0aW9uQXZhaWxhYmxlKSwgdHJ1ZSkpXG5cdFx0XHRcdFx0XHQ6IHRydWUsXG5cdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpLFxuXHRcdFx0XHRpc05hdmlnYWJsZTogdHJ1ZSxcblx0XHRcdFx0cHJlc3M6IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdGZuKFwiLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGVcIiwgW1xuXHRcdFx0XHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5TZW1hbnRpY09iamVjdCksXG5cdFx0XHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkLkFjdGlvbiksXG5cdFx0XHRcdFx0XHRvTmF2aWdhdGlvblBhcmFtc1xuXHRcdFx0XHRcdF0pXG5cdFx0XHRcdCksXG5cdFx0XHRcdGN1c3RvbURhdGE6IGNvbXBpbGVFeHByZXNzaW9uKHtcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5TZW1hbnRpY09iamVjdCksXG5cdFx0XHRcdFx0YWN0aW9uOiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkLkFjdGlvbilcblx0XHRcdFx0fSlcblx0XHRcdH0gYXMgQW5ub3RhdGlvbkFjdGlvbik7XG5cdFx0fSk7XG5cdC8vIEZpbmFsbHkgdGhlIG5vbiBjcml0aWNhbCBEYXRhRmllbGRGb3JBY3Rpb25zIGFuZCBEYXRhRmllbGRGb3JBY3Rpb25Hcm91cHNcblx0Y29tcHV0ZUFjdGlvbnNBbmRBY3Rpb25Hcm91cHMoaGVhZGVyQWN0aW9ucywgZmFsc2UsIGhlYWRlckRhdGFGaWVsZEZvckFjdGlvbnMsIGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdHJldHVybiBoZWFkZXJBY3Rpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGlkZGVuSGVhZGVyQWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBCYXNlQWN0aW9uW10ge1xuXHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdGNvbnN0IGhpZGRlbkFjdGlvbnMgPSAoZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LklkZW50aWZpY2F0aW9uPy5maWx0ZXIoKGlkZW50aWZpY2F0aW9uRGF0YUZpZWxkKSA9PiB7XG5cdFx0cmV0dXJuIGlkZW50aWZpY2F0aW9uRGF0YUZpZWxkPy5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB0cnVlO1xuXHR9KSB8fCBbXSkgYXMgRGF0YUZpZWxkRm9yQWN0aW9uVHlwZXNbXTtcblx0cmV0dXJuIGhpZGRlbkFjdGlvbnMubWFwKChkYXRhRmllbGQpID0+IHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EZWZhdWx0LFxuXHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZClcblx0XHR9O1xuXHR9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvb3RlckRlZmF1bHRBY3Rpb25zKFxuXHR2aWV3TGV2ZWw6IG51bWJlcixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRjYXBhYmlsaXRpZXM/OiBFbnZpcm9ubWVudENhcGFiaWxpdGllc1xuKTogQmFzZUFjdGlvbltdIHtcblx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRjb25zdCBzdGlja3lTZXNzaW9uU3VwcG9ydGVkID0gTW9kZWxIZWxwZXIuZ2V0U3RpY2t5U2Vzc2lvbihlbnRpdHlTZXQpLCAvL2ZvciBzdGlja3kgYXBwXG5cdFx0ZW50aXR5U2V0RHJhZnRSb290ID1cblx0XHRcdGlzRW50aXR5U2V0KGVudGl0eVNldCkgJiZcblx0XHRcdChlbnRpdHlTZXQuYW5ub3RhdGlvbnMuQ29tbW9uPy5EcmFmdFJvb3Q/LnRlcm0gPz8gZW50aXR5U2V0LmFubm90YXRpb25zLlNlc3Npb24/LlN0aWNreVNlc3Npb25TdXBwb3J0ZWQ/LnRlcm0pLFxuXHRcdGNvbmRpdGlvblNhdmUgPSBCb29sZWFuKFxuXHRcdFx0ZW50aXR5U2V0RHJhZnRSb290ID09PSBDb21tb25Bbm5vdGF0aW9uVGVybXMuRHJhZnRSb290IHx8XG5cdFx0XHRcdChjYXBhYmlsaXRpZXM/LkhpZGRlbkRyYWZ0IGFzIEhpZGRlbkRyYWZ0KT8uZW5hYmxlZCB8fFxuXHRcdFx0XHQoc3RpY2t5U2Vzc2lvblN1cHBvcnRlZCAmJiBzdGlja3lTZXNzaW9uU3VwcG9ydGVkPy5TYXZlQWN0aW9uKVxuXHRcdCksXG5cdFx0Y29uZGl0aW9uQXBwbHkgPSB2aWV3TGV2ZWwgPiAxICYmICEoY2FwYWJpbGl0aWVzPy5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdCk/LmVuYWJsZWQsXG5cdFx0Y29uZGl0aW9uQ2FuY2VsID0gQm9vbGVhbihcblx0XHRcdGVudGl0eVNldERyYWZ0Um9vdCA9PT0gQ29tbW9uQW5ub3RhdGlvblRlcm1zLkRyYWZ0Um9vdCB8fFxuXHRcdFx0XHQoY2FwYWJpbGl0aWVzPy5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdCk/LmVuYWJsZWQgfHxcblx0XHRcdFx0KHN0aWNreVNlc3Npb25TdXBwb3J0ZWQgJiYgc3RpY2t5U2Vzc2lvblN1cHBvcnRlZD8uRGlzY2FyZEFjdGlvbilcblx0XHQpLFxuXHRcdGNvbmRpdGlvbkNyZWF0ZU5leHQgPVxuXHRcdFx0dmlld0xldmVsID4gMSAmJlxuXHRcdFx0KGNhcGFiaWxpdGllcz8uSGlkZGVuRHJhZnQgYXMgSGlkZGVuRHJhZnQpPy5lbmFibGVkICYmXG5cdFx0XHQhKGNhcGFiaWxpdGllcz8uSGlkZGVuRHJhZnQgYXMgSGlkZGVuRHJhZnQpPy5oaWRlQ3JlYXRlTmV4dDtcblxuXHQvLyBSZXRyaWV2ZSBhbGwgZGV0ZXJtaW5pbmcgYWN0aW9uc1xuXHRjb25zdCBmb290ZXJEYXRhRmllbGRGb3JBY3Rpb25zID0gZ2V0SWRlbnRpZmljYXRpb25EYXRhRmllbGRGb3JBY3Rpb25zKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLCB0cnVlKTtcblxuXHQvLyBGaXJzdCBhZGQgdGhlIFwiQ3JpdGljYWxcIiBEYXRhRmllbGRGb3JBY3Rpb25zXG5cdGNvbnN0IGZvb3RlckFjdGlvbnM6IEJhc2VBY3Rpb25bXSA9IGZvb3RlckRhdGFGaWVsZEZvckFjdGlvbnNcblx0XHQuZmlsdGVyKChkYXRhRmllbGQpID0+IHtcblx0XHRcdGNvbnN0IGNyaXRpY2FsaXR5ID0gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZD8uQ3JpdGljYWxpdHkpKTtcblx0XHRcdHJldHVybiBjcml0aWNhbGl0eSAmJiBJTVBPUlRBTlRfQ1JJVElDQUxJVElFUy5pbmNsdWRlcyhjcml0aWNhbGl0eSk7XG5cdFx0fSlcblx0XHQubWFwKChkYXRhRmllbGQpID0+IHtcblx0XHRcdHJldHVybiBnZXREYXRhRmllbGRBbm5vdGF0aW9uQWN0aW9uKGRhdGFGaWVsZCwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0fSk7XG5cdGlmIChjb25kaXRpb25DcmVhdGVOZXh0KSB7XG5cdFx0Zm9vdGVyQWN0aW9ucy5wdXNoKHsgdHlwZTogQWN0aW9uVHlwZS5DcmVhdGVOZXh0LCBrZXk6IFwiQ3JlYXRlTmV4dEFjdGlvblwiIH0pO1xuXHR9XG5cdC8vIFRoZW4gdGhlIHNhdmUgYWN0aW9uIGlmIGl0IGV4aXN0c1xuXHRpZiAoZW50aXR5U2V0Py5lbnRpdHlUeXBlTmFtZSA9PT0gZW50aXR5VHlwZT8uZnVsbHlRdWFsaWZpZWROYW1lICYmIGNvbmRpdGlvblNhdmUpIHtcblx0XHRmb290ZXJBY3Rpb25zLnB1c2goeyB0eXBlOiBBY3Rpb25UeXBlLlByaW1hcnksIGtleTogXCJTYXZlQWN0aW9uXCIgfSk7XG5cdH1cblxuXHQvLyBUaGVuIHRoZSBhcHBseSBhY3Rpb24gaWYgaXQgZXhpc3RzXG5cdGlmIChjb25kaXRpb25BcHBseSkge1xuXHRcdGZvb3RlckFjdGlvbnMucHVzaCh7IHR5cGU6IEFjdGlvblR5cGUuRGVmYXVsdEFwcGx5LCBrZXk6IFwiQXBwbHlBY3Rpb25cIiB9KTtcblx0fVxuXHQvLyBUaGVuIHRoZSBub24gY3JpdGljYWwgRGF0YUZpZWxkRm9yQWN0aW9uc1xuXHRmb290ZXJEYXRhRmllbGRGb3JBY3Rpb25zXG5cdFx0LmZpbHRlcigoZGF0YUZpZWxkKSA9PiB7XG5cdFx0XHRjb25zdCBjcml0aWNhbGl0eSA9IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhRmllbGQ/LkNyaXRpY2FsaXR5KSk7XG5cdFx0XHRyZXR1cm4gY3JpdGljYWxpdHkgJiYgIUlNUE9SVEFOVF9DUklUSUNBTElUSUVTLmluY2x1ZGVzKGNyaXRpY2FsaXR5KTtcblx0XHR9KVxuXHRcdC5mb3JFYWNoKChkYXRhRmllbGQpID0+IHtcblx0XHRcdGZvb3RlckFjdGlvbnMucHVzaChnZXREYXRhRmllbGRBbm5vdGF0aW9uQWN0aW9uKGRhdGFGaWVsZCwgY29udmVydGVyQ29udGV4dCkpO1xuXHRcdH0pO1xuXG5cdC8vIFRoZW4gdGhlIGNhbmNlbCBhY3Rpb24gaWYgaXQgZXhpc3RzXG5cdGlmIChjb25kaXRpb25DYW5jZWwpIHtcblx0XHRmb290ZXJBY3Rpb25zLnB1c2goe1xuXHRcdFx0dHlwZTogQWN0aW9uVHlwZS5TZWNvbmRhcnksXG5cdFx0XHRrZXk6IFwiQ2FuY2VsQWN0aW9uXCIsXG5cdFx0XHRwb3NpdGlvbjogeyBwbGFjZW1lbnQ6IFBsYWNlbWVudC5FbmQgfVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBmb290ZXJBY3Rpb25zO1xufVxuXG5mdW5jdGlvbiBnZXREYXRhRmllbGRBbm5vdGF0aW9uQWN0aW9uKFxuXHRkYXRhRmllbGQ6IERhdGFGaWVsZEZvckFjdGlvblR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEFubm90YXRpb25BY3Rpb24ge1xuXHRsZXQgaXNWaXNpYmxlRXhwID0gaXNWaXNpYmxlKGRhdGFGaWVsZCk7XG5cdGNvbnN0IGNvbGxhYm9yYXRpb25PblJvb3QgPVxuXHRcdE1vZGVsSGVscGVyLmlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkRnJvbUNvbnZlcnRlckNvbnRleHQoY29udmVydGVyQ29udGV4dCkgJiZcblx0XHRNb2RlbEhlbHBlci5nZXREcmFmdFJvb3QoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSk7XG5cdGlmIChjb2xsYWJvcmF0aW9uT25Sb290KSB7XG5cdFx0aXNWaXNpYmxlRXhwID0gYW5kKGlzVmlzaWJsZUV4cCwgbm90KGVxdWFsKFVJLmhhc0NvbGxhYm9yYXRpb25BdXRob3JpemF0aW9uLCBmYWxzZSkpKTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdHR5cGU6IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9yQWN0aW9uLFxuXHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oaXNWaXNpYmxlRXhwKSxcblx0XHRlbmFibGVkOiBnZXRFbmFibGVkRm9yQW5ub3RhdGlvbkFjdGlvbihjb252ZXJ0ZXJDb250ZXh0LCBkYXRhRmllbGQuQWN0aW9uVGFyZ2V0KSxcblx0XHRpc05hdmlnYWJsZTogdHJ1ZSxcblx0XHRpc0FJT3BlcmF0aW9uOiBpc0FjdGlvbkFJT3BlcmF0aW9uKGRhdGFGaWVsZCkgPT09IHRydWUgfHwgdW5kZWZpbmVkXG5cdH07XG59XG5cbi8qKlxuICogQWRkcyBhY3Rpb25zIGFuZCBhY3Rpb24gZ3JvdXBzIHRvIHRoZSBoZWFkZXJBY3Rpb25zIGFycmF5LCBwcmlvcml0aXppbmcgdGhlbSBhY2NvcmRpbmcgdG8gdGhlaXIgY3JpdGljYWxpdHkuXG4gKiBAcGFyYW0gaGVhZGVyQWN0aW9ucyBBcnJheSB3aXRoIGFsbCB0aGUgY3VycmVudCBoZWFkZXIgYWN0aW9ucyBpbiBpdFxuICogQHBhcmFtIHByaW9yaXRpemVDcml0aWNhbGl0eSBGbGFnIHRvIGRldGVybWluZSB0aGUgcHJpb3JpdHkgb2YgdGhlIGNyaXRpY2FsaXR5IGFjdGlvbiBvciBhY3Rpb25Hcm91cHMgaW5zaWRlIGhlYWRlckFjdGlvbnNcbiAqIEBwYXJhbSBoZWFkZXJEYXRhRmllbGRGb3JBY3Rpb25zT3JHcm91cHMgQWxsIGFjdGlvbnMgYW5kIGFjdGlvbiBncm91cHMgZnJvbSB0aGUgaWRlbnRpZmljYXRpb24gYW5ub3RhdGlvbiB3aXRoIENvcHlBY3Rpb24gZmlsdGVyZWQgb3V0XG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBJbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqL1xuZnVuY3Rpb24gY29tcHV0ZUFjdGlvbnNBbmRBY3Rpb25Hcm91cHMoXG5cdGhlYWRlckFjdGlvbnM6IEJhc2VBY3Rpb25bXSxcblx0cHJpb3JpdGl6ZUNyaXRpY2FsaXR5OiBib29sZWFuLFxuXHRoZWFkZXJEYXRhRmllbGRGb3JBY3Rpb25zT3JHcm91cHM6IChEYXRhRmllbGRGb3JBY3Rpb25UeXBlcyB8IERhdGFGaWVsZEZvckFjdGlvbkdyb3VwVHlwZXMpW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogdm9pZCB7XG5cdGhlYWRlckRhdGFGaWVsZEZvckFjdGlvbnNPckdyb3Vwc1xuXHRcdC5maWx0ZXIoKGRhdGFGaWVsZCkgPT4ge1xuXHRcdFx0Y29uc3QgY3JpdGljYWxpdHkgPSBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkPy5Dcml0aWNhbGl0eSkpO1xuXHRcdFx0cmV0dXJuIHByaW9yaXRpemVDcml0aWNhbGl0eSA/IElNUE9SVEFOVF9DUklUSUNBTElUSUVTLmluY2x1ZGVzKGNyaXRpY2FsaXR5ISkgOiAhSU1QT1JUQU5UX0NSSVRJQ0FMSVRJRVMuaW5jbHVkZXMoY3JpdGljYWxpdHkhKTtcblx0XHR9KVxuXHRcdC5mb3JFYWNoKChkYXRhRmllbGQpID0+IHtcblx0XHRcdGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbikge1xuXHRcdFx0XHRoZWFkZXJBY3Rpb25zLnB1c2goZ2V0RGF0YUZpZWxkQW5ub3RhdGlvbkFjdGlvbihkYXRhRmllbGQsIGNvbnZlcnRlckNvbnRleHQpKTtcblx0XHRcdH0gZWxzZSBpZiAoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb25Hcm91cCkge1xuXHRcdFx0XHRsZXQgaXNWaXNpYmxlRXhwID0gbm90KGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4pLCB0cnVlKSk7XG5cdFx0XHRcdGNvbnN0IGNvbGxhYm9yYXRpb25PblJvb3QgPVxuXHRcdFx0XHRcdE1vZGVsSGVscGVyLmlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkRnJvbUNvbnZlcnRlckNvbnRleHQoY29udmVydGVyQ29udGV4dCkgJiZcblx0XHRcdFx0XHRNb2RlbEhlbHBlci5nZXREcmFmdFJvb3QoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSk7XG5cdFx0XHRcdGlmIChjb2xsYWJvcmF0aW9uT25Sb290KSB7XG5cdFx0XHRcdFx0aXNWaXNpYmxlRXhwID0gYW5kKGlzVmlzaWJsZUV4cCwgbm90KGVxdWFsKFVJLmhhc0NvbGxhYm9yYXRpb25BdXRob3JpemF0aW9uLCBmYWxzZSkpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRoZWFkZXJBY3Rpb25zLnB1c2goe1xuXHRcdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuTWVudSxcblx0XHRcdFx0XHR0ZXh0OiBkYXRhRmllbGQuTGFiZWwgYXMgc3RyaW5nLFxuXHRcdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpLFxuXHRcdFx0XHRcdGlkOiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oaXNWaXNpYmxlRXhwKSxcblx0XHRcdFx0XHRtZW51OiBkYXRhRmllbGQuQWN0aW9ucy5tYXAoKGFjdGlvbikgPT5cblx0XHRcdFx0XHRcdGdldERhdGFGaWVsZEFubm90YXRpb25BY3Rpb24oYWN0aW9uIGFzIERhdGFGaWVsZEZvckFjdGlvblR5cGVzLCBjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0aXNBSU9wZXJhdGlvbjogaXNNZW51QUlPcGVyYXRpb24oZGF0YUZpZWxkLkFjdGlvbnMpID09PSB0cnVlIHx8IHVuZGVmaW5lZFxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQWdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sU0FBU0Esb0NBQW9DQSxDQUFDQyxVQUFzQixFQUFFQyxtQkFBNEIsRUFBNkI7SUFDckksT0FBUUQsVUFBVSxDQUFDRSxXQUFXLEVBQUVDLEVBQUUsRUFBRUMsY0FBYyxFQUFFQyxNQUFNLENBQUVDLHVCQUF1QixJQUFLO01BQ3ZGLE9BQU9BLHVCQUF1QixDQUFDQyxLQUFLLG9EQUF5QyxJQUM1RUMsT0FBTyxDQUFDRix1QkFBdUIsQ0FBQ0csV0FBVyxFQUFFQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUtULG1CQUFtQixLQUM5RUssdUJBQXVCLENBQUNLLFlBQVksRUFBRUMsT0FBTyxFQUFFRixPQUFPLENBQUMsQ0FBQyxLQUFLLElBQUksSUFDakVKLHVCQUF1QixFQUFFSyxZQUFZLEVBQUVULFdBQVcsRUFBRVcsSUFBSSxFQUFFQyxrQkFBa0IsRUFBRUosT0FBTyxDQUFDLENBQUMs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
465
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRJZGVudGlmaWNhdGlvbkRhdGFGaWVsZEZvckFjdGlvbnMiLCJlbnRpdHlUeXBlIiwiaXNEZXRlcm1pbmluZ0FjdGlvbiIsImFubm90YXRpb25zIiwiVUkiLCJJZGVudGlmaWNhdGlvbiIsImZpbHRlciIsImlkZW50aWZpY2F0aW9uRGF0YUZpZWxkIiwiJFR5cGUiLCJCb29sZWFuIiwiRGV0ZXJtaW5pbmciLCJ2YWx1ZU9mIiwiQWN0aW9uVGFyZ2V0IiwiaXNCb3VuZCIsIkNvcmUiLCJPcGVyYXRpb25BdmFpbGFibGUiLCJfZXhwb3J0cyIsImdldElkZW50aWZpY2F0aW9uRGF0YUZpZWxkRm9yQWN0aW9uc09yR3JvdXBzIiwiZ2V0SWRlbnRpZmljYXRpb25EYXRhRmllbGRGb3JJQk5BY3Rpb25zIiwiSU1QT1JUQU5UX0NSSVRJQ0FMSVRJRVMiLCJnZXREZWxldGVCdXR0b25WaXNpYmlsaXR5IiwiY29udmVydGVyQ29udGV4dCIsImRlbGV0ZUhpZGRlbiIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwidmlzaXRlZE5hdmlnYXRpb25QYXRocyIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwibWFwIiwibmF2UHJvcCIsIm5hbWUiLCJkZWxldGVIaWRkZW5FeHByZXNzaW9uIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwicGF0aCIsInNpbmdsZXRvblBhdGhWaXNpdG9yIiwiZ2V0Q29udmVydGVkVHlwZXMiLCJtYW5pZmVzdFdyYXBwZXIiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJ2aWV3TGV2ZWwiLCJnZXRWaWV3TGV2ZWwiLCJlZGl0YWJsZUV4cHJlc3Npb24iLCJJc0VkaXRhYmxlIiwibm90IiwiaWZFbHNlIiwidW5kZWZpbmVkIiwiYW5kIiwiZXF1YWwiLCJnZXREZWxldGVCdXR0b25FbmFibGVkIiwiaXNEZWxldGFibGUiLCJpc1BhcmVudERlbGV0YWJsZSIsImVudGl0eVNldCIsImdldEVudGl0eVNldCIsImlzRHJhZnRSb290IiwiTW9kZWxIZWxwZXIiLCJyZXQiLCJjb25zdGFudCIsInBhdGhJbk1vZGVsIiwiZ2V0RWRpdEJ1dHRvblZpc2liaWxpdHkiLCJyb290VXBkYXRlSGlkZGVuIiwicm9vdENvbnZlcnRlckNvbnRleHQiLCJ1cGRhdGVIaWRkZW4iLCJjYXBhYmlsaXRpZXMiLCJyb290RW50aXR5U2V0IiwiaXNGQ0xFbmFibGVkIiwiaXNGY2xFbmFibGVkIiwiaXNEcmFmdEVuYWJsZWQiLCJyb290VXBkYXRlSGlkZGVuRXhwcmVzc2lvbiIsImdldEhpZGRlbkV4cHJlc3Npb24iLCJoaWRkZW5EcmFmdCIsIkhpZGRlbkRyYWZ0IiwiZW5hYmxlZCIsImlzRHJhZnROb2RlIiwidXBkYXRlSGlkZGVuRXhwcmVzc2lvbiIsIm5vdEVkaXRhYmxlRXhwcmVzc2lvbiIsInJlc3VsdGFudEV4cHJlc3Npb24iLCJEcmFmdCIsIkhhc05vRHJhZnRGb3JDdXJyZW50VXNlciIsImdldEVkaXRCdXR0b25FbmFibGVkRXhwcmVzc2lvbiIsInVwZGF0ZVJlc3RyaWN0aW9ucyIsImlzU3RpY2t5IiwiZWRpdEFjdGlvbk5hbWUiLCJpc0VudGl0eVNldCIsIkNvbW1vbiIsIkRyYWZ0Um9vdCIsIkVkaXRBY3Rpb24iLCJTZXNzaW9uIiwiU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsImVkaXRBY3Rpb25Bbm5vdGF0aW9uUGF0aCIsImdldEFic29sdXRlQW5ub3RhdGlvblBhdGgiLCJlZGl0QWN0aW9uIiwicmVzb2x2ZUFic29sdXRlUGF0aCIsInRhcmdldCIsImdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uRXhwcmVzc2lvbiIsImdldEVkaXRCdXR0b25FbmFibGVkIiwiY29tcGlsZUV4cHJlc3Npb24iLCJnZXRIZWFkZXJEZWZhdWx0QWN0aW9ucyIsInNDb250ZXh0UGF0aCIsImdldENvbnRleHRQYXRoIiwicm9vdEVudGl0eVNldFBhdGgiLCJnZXRSb290RW50aXR5U2V0UGF0aCIsImdldENvbnZlcnRlckNvbnRleHRGb3IiLCJnZXRFbnRpdHlUeXBlIiwicm9vdEVudGl0eVR5cGUiLCJzdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiZ2V0U3RpY2t5U2Vzc2lvbiIsImRyYWZ0Um9vdCIsImdldERyYWZ0Um9vdCIsImNvbGxhYm9yYXRpb25PblJvb3QiLCJpc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZEZyb21Db252ZXJ0ZXJDb250ZXh0IiwiZHJhZnROb2RlIiwiZ2V0RHJhZnROb2RlIiwiZW50aXR5RGVsZXRlUmVzdHJpY3Rpb25zIiwiQ2FwYWJpbGl0aWVzIiwiRGVsZXRlUmVzdHJpY3Rpb25zIiwiaXNVcGRhdGVIaWRkZW4iLCJpc1BhdGhEZWxldGFibGUiLCJwYXRoVmlzaXRvciIsIm5hdmlnYXRpb25QYXRocyIsInBhcmVudEVudGl0eVNldERlbGV0YWJsZSIsImlkZW50aWZpY2F0aW9uRGF0YUZpZWxkRm9yQWN0aW9ucyIsImNvcHlEYXRhRmllbGQiLCJnZXRDb3B5QWN0aW9uIiwiZGF0YUZpZWxkIiwiZGF0YUZpZWxkSXNDb3B5QWN0aW9uIiwiaGVhZGVyRGF0YUZpZWxkRm9yQWN0aW9ucyIsImhlYWRlckFjdGlvbnMiLCJwdXNoIiwidHlwZSIsIkFjdGlvblR5cGUiLCJEcmFmdEFjdGlvbnMiLCJrZXkiLCJ1cGRhdGFibGVQcm9wZXJ0eVBhdGgiLCJVcGRhdGVSZXN0cmljdGlvbnMiLCJVcGRhdGFibGUiLCJDb2xsYWJvcmF0aW9uQXZhdGFycyIsImNvbXB1dGVBY3Rpb25zQW5kQWN0aW9uR3JvdXBzIiwidmlzaWJsZSIsImhhc0NvbGxhYm9yYXRpb25BdXRob3JpemF0aW9uIiwiUHJpbWFyeSIsIkRlbGV0YWJsZSIsImdldERlbGV0ZUhpZGRlbiIsIlNlY29uZGFyeSIsInBhcmVudEVudGl0eURlbGV0ZUVuYWJsZWQiLCJnZXREYXRhRmllbGRBbm5vdGF0aW9uQWN0aW9uIiwiQ29weSIsInRleHQiLCJMYWJlbCIsInRvU3RyaW5nIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiZ2V0VGV4dCIsImhlYWRlckRhdGFGaWVsZEZvcklCTkFjdGlvbnMiLCJjcml0aWNhbGl0eSIsIkNyaXRpY2FsaXR5IiwiaW5jbHVkZXMiLCJmb3JFYWNoIiwiUmVxdWlyZXNDb250ZXh0IiwiRXJyb3IiLCJJbmxpbmUiLCJvTmF2aWdhdGlvblBhcmFtcyIsInNlbWFudGljT2JqZWN0TWFwcGluZyIsImdldFNlbWFudGljT2JqZWN0TWFwcGluZyIsIk1hcHBpbmciLCJEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJhbm5vdGF0aW9uUGF0aCIsImdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJidXR0b25UeXBlIiwiQnV0dG9uVHlwZSIsIkdob3N0IiwiSGlkZGVuIiwiTmF2aWdhdGlvbkF2YWlsYWJsZSIsIktleUhlbHBlciIsImdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZCIsImlzTmF2aWdhYmxlIiwicHJlc3MiLCJmbiIsIlNlbWFudGljT2JqZWN0IiwiQWN0aW9uIiwiY3VzdG9tRGF0YSIsInNlbWFudGljT2JqZWN0IiwiYWN0aW9uIiwiZ2V0SGlkZGVuSGVhZGVyQWN0aW9ucyIsImhpZGRlbkFjdGlvbnMiLCJEZWZhdWx0IiwiZ2V0Rm9vdGVyRGVmYXVsdEFjdGlvbnMiLCJlbnRpdHlTZXREcmFmdFJvb3QiLCJ0ZXJtIiwiY29uZGl0aW9uU2F2ZSIsIlNhdmVBY3Rpb24iLCJjb25kaXRpb25BcHBseSIsImNvbmRpdGlvbkNhbmNlbCIsIkRpc2NhcmRBY3Rpb24iLCJjb25kaXRpb25DcmVhdGVOZXh0IiwiaGlkZUNyZWF0ZU5leHQiLCJmb290ZXJEYXRhRmllbGRGb3JBY3Rpb25zIiwiZm9vdGVyQWN0aW9ucyIsImlmRkNMRW5hYmxlZCIsIkNyZWF0ZU5leHQiLCJnZXRDcmVhdGVOZXh0QnV0dG9uVmlzaWJpbGl0eSIsImVudGl0eVR5cGVOYW1lIiwiRGVmYXVsdEFwcGx5IiwicG9zaXRpb24iLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnQiLCJFbmQiLCJpc1Zpc2libGVFeHAiLCJpc1Zpc2libGUiLCJEYXRhRmllbGRGb3JBY3Rpb24iLCJnZXRFbmFibGVkRm9yQW5ub3RhdGlvbkFjdGlvbiIsImlzQUlPcGVyYXRpb24iLCJpc0FjdGlvbkFJT3BlcmF0aW9uIiwicHJpb3JpdGl6ZUNyaXRpY2FsaXR5IiwiaGVhZGVyRGF0YUZpZWxkRm9yQWN0aW9uc09yR3JvdXBzIiwiTWVudSIsImlkIiwibWVudSIsIkFjdGlvbnMiLCJpc01lbnVBSU9wZXJhdGlvbiJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiSGVhZGVyQW5kRm9vdGVyQWN0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQWN0aW9uLCBFbnRpdHlUeXBlLCBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHsgQ29tbW9uQW5ub3RhdGlvblRlcm1zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25cIjtcbmltcG9ydCB0eXBlIHtcblx0RGF0YUZpZWxkRm9yQWN0aW9uLFxuXHREYXRhRmllbGRGb3JBY3Rpb25Hcm91cFR5cGVzLFxuXHREYXRhRmllbGRGb3JBY3Rpb25UeXBlcyxcblx0RGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uVHlwZXMsXG5cdERlbGV0ZUhpZGRlbixcblx0VXBkYXRlSGlkZGVuXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRhbmQsXG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRjb25zdGFudCxcblx0ZXF1YWwsXG5cdGZuLFxuXHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sXG5cdGlmRWxzZSxcblx0bm90LFxuXHRwYXRoSW5Nb2RlbFxufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgSGlkZGVuRHJhZnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25BY3Rpb24sIEJhc2VBY3Rpb24sIERhdGFGaWVsZEZvckFjdGlvbk9yQWN0aW9uR3JvdXAgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQge1xuXHRCdXR0b25UeXBlLFxuXHRkYXRhRmllbGRJc0NvcHlBY3Rpb24sXG5cdGdldENvcHlBY3Rpb24sXG5cdGdldENyZWF0ZU5leHRCdXR0b25WaXNpYmlsaXR5LFxuXHRnZXRFbmFibGVkRm9yQW5ub3RhdGlvbkFjdGlvbixcblx0Z2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb25FeHByZXNzaW9uLFxuXHRnZXRTZW1hbnRpY09iamVjdE1hcHBpbmcsXG5cdGlzQWN0aW9uQUlPcGVyYXRpb24sXG5cdGlzTWVudUFJT3BlcmF0aW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7IFBsYWNlbWVudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBLZXlIZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0tleVwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBpc0VudGl0eVNldCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB7IGlzUGF0aERlbGV0YWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGlzVmlzaWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHsgRHJhZnQsIFVJLCBzaW5nbGV0b25QYXRoVmlzaXRvciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgRW52aXJvbm1lbnRDYXBhYmlsaXRpZXMgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvRW52aXJvbm1lbnRTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHsgQWN0aW9uVHlwZSB9IGZyb20gXCIuLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5cbi8qKlxuICogUmV0cmlldmVzIGFsbCB0aGUgRGF0YUZpZWxkRm9yQWN0aW9ucyBmcm9tIHRoZSBJZGVudGlmaWNhdGlvbiBhbm5vdGF0aW9uXG4gKiBUaGV5IG11c3QgYmVcbiAqIC0gRWl0aGVyIGxpbmtlZCB0byBhbiB1bmJvdW5kIGFjdGlvbiBvciB0byBhbiBhY3Rpb24gd2hpY2ggaGFzIGFuIE9wZXJhdGlvbkF2YWlsYWJsZSB0aGF0IGlzIG5vdCBzZXQgdG8gZmFsc2Ugc3RhdGljYWxseS5cbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBjdXJyZW50IGVudGl0eSB0eXBlXG4gKiBAcGFyYW0gaXNEZXRlcm1pbmluZ0FjdGlvbiBUaGUgZmxhZyB3aGljaCBkZW5vdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBhY3Rpb24gaXMgYSBkZXRlcm1pbmluZyBhY3Rpb25cbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIERhdGFGaWVsZEZvckFjdGlvbiByZXNwZWN0aW5nIHRoZSBpbnB1dCBwYXJhbWV0ZXIgJ2lzRGV0ZXJtaW5pbmdBY3Rpb24nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJZGVudGlmaWNhdGlvbkRhdGFGaWVsZEZvckFjdGlvbnMoZW50aXR5VHlwZTogRW50aXR5VHlwZSwgaXNEZXRlcm1pbmluZ0FjdGlvbjogYm9vbGVhbik6IERhdGFGaWVsZEZvckFjdGlvblR5cGVzW10ge1xuXHRyZXR1cm4gKGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5JZGVudGlmaWNhdGlvbj8uZmlsdGVyKChpZGVudGlmaWNhdGlvbkRhdGFGaWVsZCkgPT4ge1xuXHRcdHJldHVybiBpZGVudGlmaWNhdGlvbkRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uICYmXG5cdFx0XHRCb29sZWFuKGlkZW50aWZpY2F0aW9uRGF0YUZpZWxkLkRldGVybWluaW5nPy52YWx1ZU9mKCkpID09PSBpc0RldGVybWluaW5nQWN0aW9uICYmXG5cdFx0XHQoaWRlbnRpZmljYXRpb25EYXRhRmllbGQuQWN0aW9uVGFyZ2V0Py5pc0JvdW5kPy52YWx1ZU9mKCkgIT09IHRydWUgfHxcblx0XHRcdFx0aWRlbnRpZmljYXRpb25EYXRhRmllbGQ/LkFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZT8udmFsdWVPZigpICE9PSBmYWxzZSlcblx0XHRcdD8gdHJ1ZVxuXHRcdFx0OiBmYWxzZTtcblx0fSkgfHwgW10pIGFzIERhdGFGaWVsZEZvckFjdGlvblR5cGVzW107XG59XG5cbi8qKlxuICogUmV0cmlldmVzIGFsbCB0aGUgZGF0YSBmaWVsZCBmb3IgYWN0aW9ucyBmb3IgdGhlIGlkZW50aWZpY2F0aW9uIGFubm90YXRpb25cbiAqIFRoZXkgbXVzdCBiZVxuICogLSBFaXRoZXIgbGlua2VkIHRvIGFuIFVuYm91bmQgYWN0aW9uIG9yIHRvIGFuIGFjdGlvbiB3aGljaCBoYXMgYW4gT3BlcmF0aW9uQXZhaWxhYmxlIHRoYXQgaXMgbm90IHNldCB0byBmYWxzZSBzdGF0aWNhbGx5LlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIGN1cnJlbnQgZW50aXR5IHR5cGVcbiAqIEBwYXJhbSBpc0RldGVybWluaW5nQWN0aW9uIFRoZSBmbGFnIHdoaWNoIGRlbm90ZXMgd2hldGhlciBvciBub3QgdGhlIGFjdGlvbiBpcyBhIGRldGVybWluaW5nIGFjdGlvblxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgRGF0YUZpZWxkIGZvciBhY3Rpb24gcmVzcGVjdGluZyB0aGUgaW5wdXQgcGFyYW1ldGVyICdpc0RldGVybWluaW5nQWN0aW9uJ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SWRlbnRpZmljYXRpb25EYXRhRmllbGRGb3JBY3Rpb25zT3JHcm91cHMoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGlzRGV0ZXJtaW5pbmdBY3Rpb246IGJvb2xlYW5cbik6IERhdGFGaWVsZEZvckFjdGlvbk9yQWN0aW9uR3JvdXBbXSB7XG5cdHJldHVybiAoZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LklkZW50aWZpY2F0aW9uPy5maWx0ZXIoKGlkZW50aWZpY2F0aW9uRGF0YUZpZWxkKSA9PiB7XG5cdFx0cmV0dXJuIChpZGVudGlmaWNhdGlvbkRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uICYmXG5cdFx0XHRCb29sZWFuKGlkZW50aWZpY2F0aW9uRGF0YUZpZWxkLkRldGVybWluaW5nPy52YWx1ZU9mKCkpID09PSBpc0RldGVybWluaW5nQWN0aW9uICYmXG5cdFx0XHQoaWRlbnRpZmljYXRpb25EYXRhRmllbGQuQWN0aW9uVGFyZ2V0Py5pc0JvdW5kPy52YWx1ZU9mKCkgIT09IHRydWUgfHxcblx0XHRcdFx0aWRlbnRpZmljYXRpb25EYXRhRmllbGQ/LkFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZT8udmFsdWVPZigpICE9PSBmYWxzZSkpIHx8XG5cdFx0XHRpZGVudGlmaWNhdGlvbkRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXBcblx0XHRcdD8gdHJ1ZVxuXHRcdFx0OiBmYWxzZTtcblx0fSkgfHwgW10pIGFzIERhdGFGaWVsZEZvckFjdGlvbk9yQWN0aW9uR3JvdXBbXTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZSBhbGwgdGhlIElCTiBhY3Rpb25zIGZvciB0aGUgaWRlbnRpZmljYXRpb24gYW5ub3RhdGlvbi5cbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBjdXJyZW50IGVudGl0eXR5cGVcbiAqIEBwYXJhbSBpc0RldGVybWluaW5nQWN0aW9uIFdoZXRoZXIgb3Igbm90IHRoZSBhY3Rpb24gc2hvdWxkIGJlIGRldGVybWluaW5nXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBkYXRhIGZpZWxkIGZvciBhY3Rpb24gcmVzcGVjdGluZyB0aGUgaXNEZXRlcm1pbmluZ0FjdGlvbiBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gZ2V0SWRlbnRpZmljYXRpb25EYXRhRmllbGRGb3JJQk5BY3Rpb25zKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRpc0RldGVybWluaW5nQWN0aW9uOiBib29sZWFuXG4pOiBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25UeXBlc1tdIHtcblx0cmV0dXJuIChlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uSWRlbnRpZmljYXRpb24/LmZpbHRlcigoaWRlbnRpZmljYXRpb25EYXRhRmllbGQpID0+IHtcblx0XHRyZXR1cm4gaWRlbnRpZmljYXRpb25EYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiAmJlxuXHRcdFx0Qm9vbGVhbihpZGVudGlmaWNhdGlvbkRhdGFGaWVsZC5EZXRlcm1pbmluZz8udmFsdWVPZigpKSA9PT0gaXNEZXRlcm1pbmluZ0FjdGlvblxuXHRcdFx0PyB0cnVlXG5cdFx0XHQ6IGZhbHNlO1xuXHR9KSB8fCBbXSkgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uVHlwZXNbXTtcbn1cblxuZXhwb3J0IGNvbnN0IElNUE9SVEFOVF9DUklUSUNBTElUSUVTID0gW1xuXHRcIlVJLkNyaXRpY2FsaXR5VHlwZS9WZXJ5UG9zaXRpdmVcIixcblx0XCJVSS5Dcml0aWNhbGl0eVR5cGUvUG9zaXRpdmVcIixcblx0XCJVSS5Dcml0aWNhbGl0eVR5cGUvTmVnYXRpdmVcIixcblx0XCJVSS5Dcml0aWNhbGl0eVR5cGUvVmVyeU5lZ2F0aXZlXCJcbl07XG5cbi8qKlxuICogTWV0aG9kIHRvIGRldGVybWluZSB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IGJpbmRpbmcgZm9yIHRoZSBEZWxldGUgYnV0dG9uIG9uIGFuIG9iamVjdCBwYWdlLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgSW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHBhcmFtIGRlbGV0ZUhpZGRlbiBUaGUgdmFsdWUgb2YgdGhlIFVJLkRlbGV0ZUhpZGRlbiBhbm5vdGF0aW9uIG9uIHRoZSBlbnRpdHkgc2V0IC8gdHlwZS5cbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlIERlbGV0ZSBidXR0b24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWxldGVCdXR0b25WaXNpYmlsaXR5KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGRlbGV0ZUhpZGRlbjogRGVsZXRlSGlkZGVuIHwgdW5kZWZpbmVkXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyA9IGRhdGFNb2RlbE9iamVjdFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXMubWFwKChuYXZQcm9wKSA9PiBuYXZQcm9wLm5hbWUpLFxuXHRcdC8vIFNldCBhYnNvbHV0ZSBiaW5kaW5nIHBhdGggZm9yIFNpbmdsZXRvbiByZWZlcmVuY2VzLCBvdGhlcndpc2UgdGhlIGNvbmZpZ3VyZWQgYW5ub3RhdGlvbiBwYXRoIGl0c2VsZi5cblx0XHQvLyBGb3IgZS5nLiAvY29tLnNhcC5uYW1lc3BhY2UuRW50aXR5Q29udGFpbmVyL1NpbmdsZXRvbi9Qcm9wZXJ0eSB0byAvU2luZ2xldG9uL1Byb3BlcnR5XG5cdFx0ZGVsZXRlSGlkZGVuRXhwcmVzc2lvbiA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkZWxldGVIaWRkZW4sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIGZhbHNlLCAocGF0aDogc3RyaW5nKSA9PlxuXHRcdFx0c2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZWRUeXBlcygpLCBbXSlcblx0XHQpLCAvLyBkZWZhdWx0IHRvIGZhbHNlXG5cdFx0bWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKSxcblx0XHR2aWV3TGV2ZWwgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0Vmlld0xldmVsKCksXG5cdFx0Ly8gRGVsZXRlIGJ1dHRvbiBpcyB2aXNpYmxlXG5cdFx0Ly8gSW4gT1AgXHRcdC0tPiAgd2hlbiBub3QgaW4gZWRpdCBtb2RlXG5cdFx0Ly8gSW4gc3ViLU9QIFx0LS0+ICB3aGVuIGluIGVkaXQgbW9kZVxuXHRcdGVkaXRhYmxlRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gdmlld0xldmVsID4gMSA/IFVJLklzRWRpdGFibGUgOiBub3QoVUkuSXNFZGl0YWJsZSk7XG5cblx0Ly8gSWYgVUkuRGVsZXRlSGlkZGVuIGFubm90YXRpb24gb24gZW50aXR5IHNldCBvciB0eXBlIGlzIGVpdGhlciBub3QgZGVmaW5lZCBvciBleHBsaWNpdGx5IHNldCB0byBmYWxzZSxcblx0Ly8gRGVsZXRlIGJ1dHRvbiBpcyB2aXNpYmxlIGJhc2VkIG9uIGVkaXRhYmxlRXhwcmVzc2lvbi5cblx0Ly8gZWxzZSxcblx0Ly8gRGVsZXRlIGJ1dHRvbiBpcyB2aXNpYmxlIGJhc2VkIG9uIGJvdGggYW5ub3RhdGlvbiBwYXRoIGFuZCBlZGl0YWJsZUV4cHJlc3Npb24uXG5cdHJldHVybiBpZkVsc2UoXG5cdFx0ZGVsZXRlSGlkZGVuID09PSB1bmRlZmluZWQgfHwgZGVsZXRlSGlkZGVuLnZhbHVlT2YoKSA9PT0gZmFsc2UsXG5cdFx0ZWRpdGFibGVFeHByZXNzaW9uLFxuXHRcdGFuZChlZGl0YWJsZUV4cHJlc3Npb24sIGVxdWFsKGRlbGV0ZUhpZGRlbkV4cHJlc3Npb24sIGZhbHNlKSlcblx0KTtcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gZGV0ZXJtaW5lIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgYmluZGluZyBmb3IgdGhlIERlbGV0ZSBidXR0b24gb24gYW4gb2JqZWN0IHBhZ2UuXG4gKiBAcGFyYW0gaXNEZWxldGFibGUgVGhlIGRlbGV0ZSByZXN0cmljdGlvbiBjb25maWd1cmVkXG4gKiBAcGFyYW0gaXNQYXJlbnREZWxldGFibGUgVGhlIGRlbGV0ZSByZXN0cmljdGlvbiBjb25maWd1cmVkIG9uIHRoZSBwYXJlbnQgZW50aXR5XG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgRGVsZXRlIGJ1dHRvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZXRlQnV0dG9uRW5hYmxlZChcblx0aXNEZWxldGFibGU6IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPEJvb2xlYW4+IHwgdW5kZWZpbmVkLFxuXHRpc1BhcmVudERlbGV0YWJsZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCksXG5cdFx0aXNEcmFmdFJvb3QgPSBNb2RlbEhlbHBlci5pc0RyYWZ0Um9vdChlbnRpdHlTZXQpO1xuXG5cdGxldCByZXQgPSBpZkVsc2UoXG5cdFx0aXNQYXJlbnREZWxldGFibGUgIT09IHVuZGVmaW5lZCxcblx0XHRpc1BhcmVudERlbGV0YWJsZSxcblx0XHRpZkVsc2UoaXNEZWxldGFibGUgIT09IHVuZGVmaW5lZCwgZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGlzRGVsZXRhYmxlKSwgdHJ1ZSksIGNvbnN0YW50KHRydWUpKVxuXHQpO1xuXG5cdC8vIGRlbGV0ZSBzaG91bGQgYmUgZGlzYWJsZWQgZm9yIExvY2tlZCBvYmplY3RzXG5cdHJldCA9IGlzRHJhZnRSb290ID8gYW5kKHJldCwgbm90KHBhdGhJbk1vZGVsKFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvSW5Qcm9jZXNzQnlVc2VyXCIpKSkgOiByZXQ7XG5cblx0cmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gZGV0ZXJtaW5lIHRoZSAndmlzaWJsZScgcHJvcGVydHkgYmluZGluZyBmb3IgdGhlIEVkaXQgYnV0dG9uIG9uIGFuIG9iamVjdCBwYWdlLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgSW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHBhcmFtIHJvb3RVcGRhdGVIaWRkZW4gVGhlIHZhbHVlIG9mIHRoZSBVSS5VcGRhdGVIaWRkZW4gYW5ub3RhdGlvbiBvbiB0aGUgZW50aXR5IHNldCAvIHR5cGUuXG4gKiBAcGFyYW0gcm9vdENvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSB1cGRhdGVIaWRkZW5cbiAqIEBwYXJhbSB2aWV3TGV2ZWxcbiAqIEBwYXJhbSBjYXBhYmlsaXRpZXNcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlIEVkaXQgYnV0dG9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWRpdEJ1dHRvblZpc2liaWxpdHkoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0cm9vdFVwZGF0ZUhpZGRlbjogVXBkYXRlSGlkZGVuIHwgdW5kZWZpbmVkLFxuXHRyb290Q29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHR1cGRhdGVIaWRkZW4/OiBVcGRhdGVIaWRkZW4gfCB1bmRlZmluZWQsXG5cdHZpZXdMZXZlbD86IG51bWJlciB8IHVuZGVmaW5lZCxcblx0Y2FwYWJpbGl0aWVzPzogRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IHJvb3RFbnRpdHlTZXQgPSByb290Q29udmVydGVyQ29udGV4dD8uZ2V0RW50aXR5U2V0KCksXG5cdFx0ZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSxcblx0XHRpc0ZDTEVuYWJsZWQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmlzRmNsRW5hYmxlZCgpO1xuXHRsZXQgaXNEcmFmdEVuYWJsZWQ7XG5cdGNvbnN0IHJvb3RVcGRhdGVIaWRkZW5FeHByZXNzaW9uID0gZ2V0SGlkZGVuRXhwcmVzc2lvbihyb290Q29udmVydGVyQ29udGV4dCwgcm9vdFVwZGF0ZUhpZGRlbik7XG5cdGNvbnN0IGhpZGRlbkRyYWZ0ID0gKGNhcGFiaWxpdGllcz8uSGlkZGVuRHJhZnQgYXMgSGlkZGVuRHJhZnQpPy5lbmFibGVkO1xuXHRpZiAodmlld0xldmVsICYmIHZpZXdMZXZlbCA+IDEpIHtcblx0XHQvLyBpZiB2aWV3bGV2ZWwgPiAxIGNoZWNrIGlmIG5vZGUgaXMgZHJhZnQgZW5hYmxlZFxuXHRcdGlzRHJhZnRFbmFibGVkID0gTW9kZWxIZWxwZXIuaXNEcmFmdE5vZGUoZW50aXR5U2V0KTtcblx0fSBlbHNlIHtcblx0XHRpc0RyYWZ0RW5hYmxlZCA9IE1vZGVsSGVscGVyLmlzRHJhZnRSb290KHJvb3RFbnRpdHlTZXQpO1xuXHR9XG5cdGNvbnN0IHVwZGF0ZUhpZGRlbkV4cHJlc3Npb24gPSBnZXRIaWRkZW5FeHByZXNzaW9uKHJvb3RDb252ZXJ0ZXJDb250ZXh0LCB1cGRhdGVIaWRkZW4pO1xuXG5cdGNvbnN0IG5vdEVkaXRhYmxlRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gbm90KFVJLklzRWRpdGFibGUpO1xuXG5cdC8vIElmIFVJLlVwZGF0ZUhpZGRlbiBhbm5vdGF0aW9uIG9uIGVudGl0eSBzZXQgb3IgdHlwZSBpcyBlaXRoZXIgbm90IGRlZmluZWQgb3IgZXhwbGljaXRseSBzZXQgdG8gZmFsc2UsXG5cdC8vIEVkaXQgYnV0dG9uIGlzIHZpc2libGUgaW4gZGlzcGxheSBtb2RlLlxuXHQvLyBlbHNlLFxuXHQvLyBFZGl0IGJ1dHRvbiBpcyB2aXNpYmxlIGJhc2VkIG9uIGJvdGggYW5ub3RhdGlvbiBwYXRoIGFuZCBpbiBkaXNwbGF5IG1vZGUuXG5cdGNvbnN0IHJlc3VsdGFudEV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IGlmRWxzZShcblx0XHQodmlld0xldmVsIGFzIG51bWJlcikgPiAxIHx8IGhpZGRlbkRyYWZ0LFxuXHRcdGlmRWxzZShcblx0XHRcdHVwZGF0ZUhpZGRlbiA9PT0gdW5kZWZpbmVkIHx8IHVwZGF0ZUhpZGRlbi52YWx1ZU9mKCkgPT09IGZhbHNlLFxuXHRcdFx0YW5kKFxuXHRcdFx0XHRub3RFZGl0YWJsZUV4cHJlc3Npb24sXG5cdFx0XHRcdGVxdWFsKHBhdGhJbk1vZGVsKFwicm9vdEVkaXRWaXNpYmxlXCIsIFwiaW50ZXJuYWxcIiksIHRydWUpLFxuXHRcdFx0XHRpZkVsc2UoaXNGQ0xFbmFibGVkLCBlcXVhbChwYXRoSW5Nb2RlbChcIi9zaG93RWRpdEJ1dHRvblwiLCBcImZjbGhlbHBlclwiKSwgdHJ1ZSksIHRydWUpXG5cdFx0XHQpLFxuXHRcdFx0YW5kKFxuXHRcdFx0XHRub3RFZGl0YWJsZUV4cHJlc3Npb24sXG5cdFx0XHRcdGVxdWFsKHVwZGF0ZUhpZGRlbkV4cHJlc3Npb24sIGZhbHNlKSxcblx0XHRcdFx0ZXF1YWwocGF0aEluTW9kZWwoXCJyb290RWRpdFZpc2libGVcIiwgXCJpbnRlcm5hbFwiKSwgdHJ1ZSksXG5cdFx0XHRcdGlmRWxzZShpc0ZDTEVuYWJsZWQsIGVxdWFsKHBhdGhJbk1vZGVsKFwiL3Nob3dFZGl0QnV0dG9uXCIsIFwiZmNsaGVscGVyXCIpLCB0cnVlKSwgdHJ1ZSlcblx0XHRcdClcblx0XHQpLFxuXHRcdGlmRWxzZShcblx0XHRcdHJvb3RVcGRhdGVIaWRkZW4gPT09IHVuZGVmaW5lZCB8fCByb290VXBkYXRlSGlkZGVuLnZhbHVlT2YoKSA9PT0gZmFsc2UsXG5cdFx0XHRub3RFZGl0YWJsZUV4cHJlc3Npb24sXG5cdFx0XHRhbmQobm90RWRpdGFibGVFeHByZXNzaW9uLCBlcXVhbChyb290VXBkYXRlSGlkZGVuRXhwcmVzc2lvbiwgZmFsc2UpKVxuXHRcdClcblx0KTtcblx0cmV0dXJuIGlmRWxzZShpc0RyYWZ0RW5hYmxlZCwgYW5kKHJlc3VsdGFudEV4cHJlc3Npb24sIERyYWZ0Lkhhc05vRHJhZnRGb3JDdXJyZW50VXNlciksIHJlc3VsdGFudEV4cHJlc3Npb24pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGlkZGVuRXhwcmVzc2lvbihcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHR1cGRhdGVIaWRkZW46IFVwZGF0ZUhpZGRlbiB8IHVuZGVmaW5lZFxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMgPSBkYXRhTW9kZWxPYmplY3RQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLm1hcCgobmF2UHJvcCkgPT4gbmF2UHJvcC5uYW1lKSxcblx0XHQvLyBTZXQgYWJzb2x1dGUgYmluZGluZyBwYXRoIGZvciBTaW5nbGV0b24gcmVmZXJlbmNlcywgb3RoZXJ3aXNlIHRoZSBjb25maWd1cmVkIGFubm90YXRpb24gcGF0aCBpdHNlbGYuXG5cdFx0Ly8gRm9yIGUuZy4gL2NvbS5zYXAubmFtZXNwYWNlLkVudGl0eUNvbnRhaW5lci9TaW5nbGV0b24vUHJvcGVydHkgdG8gL1NpbmdsZXRvbi9Qcm9wZXJ0eVxuXHRcdHVwZGF0ZUhpZGRlbkV4cHJlc3Npb24gPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odXBkYXRlSGlkZGVuLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBmYWxzZSwgKHBhdGg6IHN0cmluZykgPT5cblx0XHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocylcblx0XHQpO1xuXHRyZXR1cm4gdXBkYXRlSGlkZGVuRXhwcmVzc2lvbjtcbn1cbi8qKlxuICogTWV0aG9kIHRvIGRldGVybWluZSB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IGJpbmRpbmcgZm9yIHRoZSBFZGl0IGJ1dHRvbiBvbiBhbiBvYmplY3QgcGFnZS5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IEluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dC5cbiAqIEBwYXJhbSB1cGRhdGVSZXN0cmljdGlvbnNcbiAqIEBwYXJhbSB2aWV3TGV2ZWxcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlIEVkaXQgYnV0dG9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWRpdEJ1dHRvbkVuYWJsZWRFeHByZXNzaW9uKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHVwZGF0ZVJlc3RyaWN0aW9ucz86IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPEJvb2xlYW4+LFxuXHR2aWV3TGV2ZWw/OiBudW1iZXIgfCB1bmRlZmluZWRcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCksXG5cdFx0aXNEcmFmdFJvb3QgPSBNb2RlbEhlbHBlci5pc0RyYWZ0Um9vdChlbnRpdHlTZXQpLFxuXHRcdGlzU3RpY2t5ID0gTW9kZWxIZWxwZXIuaXNTdGlja3koZW50aXR5U2V0KTtcblx0bGV0IGVkaXRBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGlmIChpc0RyYWZ0Um9vdCAmJiBpc0VudGl0eVNldChlbnRpdHlTZXQpKSB7XG5cdFx0ZWRpdEFjdGlvbk5hbWUgPSBlbnRpdHlTZXQuYW5ub3RhdGlvbnMuQ29tbW9uPy5EcmFmdFJvb3Q/LkVkaXRBY3Rpb24gYXMgc3RyaW5nO1xuXHR9IGVsc2UgaWYgKGlzU3RpY2t5ICYmIGlzRW50aXR5U2V0KGVudGl0eVNldCkpIHtcblx0XHRlZGl0QWN0aW9uTmFtZSA9IGVudGl0eVNldC5hbm5vdGF0aW9ucy5TZXNzaW9uPy5TdGlja3lTZXNzaW9uU3VwcG9ydGVkPy5FZGl0QWN0aW9uIGFzIHN0cmluZztcblx0fVxuXHRpZiAoZWRpdEFjdGlvbk5hbWUpIHtcblx0XHRjb25zdCBlZGl0QWN0aW9uQW5ub3RhdGlvblBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgoZWRpdEFjdGlvbk5hbWUpO1xuXHRcdGNvbnN0IGVkaXRBY3Rpb24gPSBjb252ZXJ0ZXJDb250ZXh0LnJlc29sdmVBYnNvbHV0ZVBhdGgoZWRpdEFjdGlvbkFubm90YXRpb25QYXRoKS50YXJnZXQgYXMgQWN0aW9uIHwgbnVsbDtcblx0XHRpZiAoZWRpdEFjdGlvbj8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZSA9PT0gbnVsbCkge1xuXHRcdFx0Ly8gV2UgZGlzYWJsZWQgYWN0aW9uIGFkdmVydGlzZW1lbnQgYnV0IGtlcHQgaXQgaW4gdGhlIGNvZGUgZm9yIHRoZSB0aW1lIGJlaW5nXG5cdFx0XHQvL3JldHVybiBcIns9ICR7I1wiICsgZWRpdEFjdGlvbk5hbWUgKyBcIn0gPyB0cnVlIDogZmFsc2UgfVwiO1xuXHRcdH0gZWxzZSBpZiAoKHZpZXdMZXZlbCBhcyBudW1iZXIpID4gMSkge1xuXHRcdFx0Ly8gRWRpdCBidXR0b24gaXMgZW5hYmxlZCBiYXNlZCBvbiB0aGUgdXBkYXRlIHJlc3RyaWN0aW9ucyBvZiB0aGUgc3ViLU9QXG5cdFx0XHRpZiAodXBkYXRlUmVzdHJpY3Rpb25zICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuIGFuZChcblx0XHRcdFx0XHRlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odXBkYXRlUmVzdHJpY3Rpb25zKSwgdHJ1ZSksXG5cdFx0XHRcdFx0ZXF1YWwocGF0aEluTW9kZWwoXCJyb290RWRpdEVuYWJsZWRcIiwgXCJpbnRlcm5hbFwiKSwgdHJ1ZSlcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBlcXVhbChwYXRoSW5Nb2RlbChcInJvb3RFZGl0RW5hYmxlZFwiLCBcImludGVybmFsXCIpLCB0cnVlKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uRXhwcmVzc2lvbihjb252ZXJ0ZXJDb250ZXh0LCBlZGl0QWN0aW9uID8/IHVuZGVmaW5lZCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBjb25zdGFudCh0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVkaXRCdXR0b25FbmFibGVkKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHVwZGF0ZVJlc3RyaWN0aW9ucz86IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPEJvb2xlYW4+LFxuXHR2aWV3TGV2ZWw/OiBudW1iZXIgfCB1bmRlZmluZWRcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGdldEVkaXRCdXR0b25FbmFibGVkRXhwcmVzc2lvbihjb252ZXJ0ZXJDb250ZXh0LCB1cGRhdGVSZXN0cmljdGlvbnMsIHZpZXdMZXZlbCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGVhZGVyRGVmYXVsdEFjdGlvbnMoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0Y2FwYWJpbGl0aWVzPzogRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNcbik6IEJhc2VBY3Rpb25bXSB7XG5cdGNvbnN0IHNDb250ZXh0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKTtcblx0Y29uc3Qgcm9vdEVudGl0eVNldFBhdGggPSBNb2RlbEhlbHBlci5nZXRSb290RW50aXR5U2V0UGF0aChzQ29udGV4dFBhdGgpO1xuXHRjb25zdCByb290Q29udmVydGVyQ29udGV4dCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcjxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KFwiL1wiICsgcm9vdEVudGl0eVNldFBhdGgpO1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpLFxuXHRcdGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSxcblx0XHRyb290RW50aXR5U2V0ID0gcm9vdENvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCksXG5cdFx0cm9vdEVudGl0eVR5cGUgPSByb290Q29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksXG5cdFx0c3RpY2t5U2Vzc2lvblN1cHBvcnRlZCA9IE1vZGVsSGVscGVyLmdldFN0aWNreVNlc3Npb24ocm9vdEVudGl0eVNldCksIC8vZm9yIHN0aWNreSBhcHBcblx0XHRkcmFmdFJvb3QgPSBNb2RlbEhlbHBlci5nZXREcmFmdFJvb3Qocm9vdEVudGl0eVNldCksIC8vZW50aXR5U2V0ICYmIGVudGl0eVNldC5hbm5vdGF0aW9ucy5Db21tb24/LkRyYWZ0Um9vdCxcblx0XHRjb2xsYWJvcmF0aW9uT25Sb290ID0gTW9kZWxIZWxwZXIuaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWRGcm9tQ29udmVydGVyQ29udGV4dChjb252ZXJ0ZXJDb250ZXh0KSAmJiBkcmFmdFJvb3QsXG5cdFx0ZHJhZnROb2RlID0gTW9kZWxIZWxwZXIuZ2V0RHJhZnROb2RlKHJvb3RFbnRpdHlTZXQpLFxuXHRcdGVudGl0eURlbGV0ZVJlc3RyaWN0aW9ucyA9IGVudGl0eVNldCAmJiBlbnRpdHlTZXQuYW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllcz8uRGVsZXRlUmVzdHJpY3Rpb25zLFxuXHRcdHJvb3RVcGRhdGVIaWRkZW4gPSBNb2RlbEhlbHBlci5pc1VwZGF0ZUhpZGRlbihyb290RW50aXR5U2V0LCByb290RW50aXR5VHlwZSksXG5cdFx0dXBkYXRlSGlkZGVuID0gcm9vdEVudGl0eVNldCAmJiBpc0VudGl0eVNldChyb290RW50aXR5U2V0KSAmJiByb290VXBkYXRlSGlkZGVuPy52YWx1ZU9mKCksXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdGlzUGFyZW50RGVsZXRhYmxlID0gaXNQYXRoRGVsZXRhYmxlKGRhdGFNb2RlbE9iamVjdFBhdGgsIHtcblx0XHRcdHBhdGhWaXNpdG9yOiAocGF0aDogc3RyaW5nLCBuYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdKSA9PlxuXHRcdFx0XHRzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlZFR5cGVzKCksIG5hdmlnYXRpb25QYXRocylcblx0XHR9KSxcblx0XHRwYXJlbnRFbnRpdHlTZXREZWxldGFibGUgPSBpc1BhcmVudERlbGV0YWJsZSA/IGNvbXBpbGVFeHByZXNzaW9uKGlzUGFyZW50RGVsZXRhYmxlKSA6IGlzUGFyZW50RGVsZXRhYmxlLFxuXHRcdGlkZW50aWZpY2F0aW9uRGF0YUZpZWxkRm9yQWN0aW9ucyA9IGdldElkZW50aWZpY2F0aW9uRGF0YUZpZWxkRm9yQWN0aW9uc09yR3JvdXBzKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLCBmYWxzZSk7XG5cblx0Y29uc3QgY29weURhdGFGaWVsZCA9XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRWaWV3TGV2ZWwoKSA9PT0gMVxuXHRcdFx0PyBnZXRDb3B5QWN0aW9uKFxuXHRcdFx0XHRcdGlkZW50aWZpY2F0aW9uRGF0YUZpZWxkRm9yQWN0aW9ucy5maWx0ZXIoKGRhdGFGaWVsZCkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBkYXRhRmllbGRJc0NvcHlBY3Rpb24oZGF0YUZpZWxkKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KSBhcyBEYXRhRmllbGRGb3JBY3Rpb25bXVxuXHRcdFx0ICApXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblxuXHRjb25zdCBoZWFkZXJEYXRhRmllbGRGb3JBY3Rpb25zID0gaWRlbnRpZmljYXRpb25EYXRhRmllbGRGb3JBY3Rpb25zLmZpbHRlcigoZGF0YUZpZWxkKSA9PiB7XG5cdFx0cmV0dXJuICFkYXRhRmllbGRJc0NvcHlBY3Rpb24oZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckFjdGlvblR5cGVzKTtcblx0fSk7XG5cblx0Ly8gSW5pdGlhbGl6ZSBhY3Rpb25zIGFuZCBzdGFydCB3aXRoIGRyYWZ0IGFjdGlvbnMgaWYgYXZhaWxhYmxlIHNpbmNlIHRoZXkgc2hvdWxkIGFwcGVhciBpbiB0aGUgZmlyc3Rcblx0Ly8gbGVmdG1vc3QgcG9zaXRpb24gaW4gdGhlIGFjdGlvbnMgYXJlYSBvZiB0aGUgT1AgaGVhZGVyXG5cdC8vIFRoaXMgaXMgbW9yZSBsaWtlIGEgcGxhY2Vob2xkZXIgdGhhbiBhIHNpbmdsZSBhY3Rpb24sIHNpbmNlIHRoaXMgY29udHJvbHMgbm90IG9ubHkgdGhlIHRlbXBsYXRpbmcgb2Zcblx0Ly8gdGhlIGJ1dHRvbiBmb3Igc3dpdGNoaW5nIGJldHdlZW4gZHJhZnQgYW5kIGFjdGl2ZSBkb2N1bWVudCB2ZXJzaW9ucyBidXQgYWxzbyB0aGUgY29udHJvbHMgZm9yXG5cdC8vIHRoZSBjb2xsYWJvcmF0aXZlIGRyYWZ0IGZyYWdtZW50LlxuXHRjb25zdCBoZWFkZXJBY3Rpb25zOiBCYXNlQWN0aW9uW10gPSBbXTtcblx0aWYgKGlzRW50aXR5U2V0KGVudGl0eVNldCkgJiYgZHJhZnRSb290Py5FZGl0QWN0aW9uICYmIHVwZGF0ZUhpZGRlbiAhPT0gdHJ1ZSkge1xuXHRcdGhlYWRlckFjdGlvbnMucHVzaCh7IHR5cGU6IEFjdGlvblR5cGUuRHJhZnRBY3Rpb25zLCBrZXk6IFwiRHJhZnRBY3Rpb25zXCIgfSk7XG5cdH1cblxuXHRjb25zdCB2aWV3TGV2ZWwgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldFZpZXdMZXZlbCgpO1xuXHRjb25zdCB1cGRhdGFibGVQcm9wZXJ0eVBhdGggPSB2aWV3TGV2ZWwgPiAxID8gZW50aXR5U2V0Py5hbm5vdGF0aW9ucy5DYXBhYmlsaXRpZXM/LlVwZGF0ZVJlc3RyaWN0aW9ucz8uVXBkYXRhYmxlIDogdW5kZWZpbmVkO1xuXHRpZiAoZHJhZnRSb290IHx8IGRyYWZ0Tm9kZSkge1xuXHRcdGhlYWRlckFjdGlvbnMucHVzaCh7IHR5cGU6IEFjdGlvblR5cGUuQ29sbGFib3JhdGlvbkF2YXRhcnMsIGtleTogXCJDb2xsYWJvcmF0aW9uQXZhdGFyc1wiIH0pO1xuXHR9XG5cdC8vIFRoZW4gYWRkIHRoZSBcIkNyaXRpY2FsXCIgRGF0YUZpZWxkRm9yQWN0aW9ucyBhbmQgRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXBzXG5cdC8vIFByaW9yaXRpemVzIGFjdGlvbnMgYW5kIGFjdGlvbiBncm91cHMgdGhhdCBoYXZlIHRoZSBDcml0aWNhbGl0eSBhbm5vdGF0aW9uLCBwbGFjaW5nIHRoZW0gYmVmb3JlIHRob3NlIHdpdGhvdXQgdGhlIGFubm90YXRpb25cblx0Y29tcHV0ZUFjdGlvbnNBbmRBY3Rpb25Hcm91cHMoaGVhZGVyQWN0aW9ucywgdHJ1ZSwgaGVhZGVyRGF0YUZpZWxkRm9yQWN0aW9ucywgY29udmVydGVyQ29udGV4dCk7XG5cblx0Ly8gVGhlbiB0aGUgZWRpdCBhY3Rpb24gaWYgaXQgZXhpc3RzXG5cdGlmICgoZHJhZnRSb290Py5FZGl0QWN0aW9uIHx8IHN0aWNreVNlc3Npb25TdXBwb3J0ZWQ/LkVkaXRBY3Rpb24pICYmIHVwZGF0ZUhpZGRlbiAhPT0gdHJ1ZSkge1xuXHRcdGxldCB2aXNpYmxlID0gZ2V0RWRpdEJ1dHRvblZpc2liaWxpdHkoXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0cm9vdFVwZGF0ZUhpZGRlbixcblx0XHRcdHJvb3RDb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0TW9kZWxIZWxwZXIuaXNVcGRhdGVIaWRkZW4oZW50aXR5U2V0LCBlbnRpdHlUeXBlKSxcblx0XHRcdHZpZXdMZXZlbCxcblx0XHRcdGNhcGFiaWxpdGllc1xuXHRcdCk7XG5cdFx0aWYgKGNvbGxhYm9yYXRpb25PblJvb3QpIHtcblx0XHRcdHZpc2libGUgPSBhbmQodmlzaWJsZSwgbm90KGVxdWFsKFVJLmhhc0NvbGxhYm9yYXRpb25BdXRob3JpemF0aW9uLCBmYWxzZSkpKTtcblx0XHR9XG5cdFx0aGVhZGVyQWN0aW9ucy5wdXNoKHtcblx0XHRcdHR5cGU6IEFjdGlvblR5cGUuUHJpbWFyeSxcblx0XHRcdGtleTogXCJFZGl0QWN0aW9uXCIsXG5cdFx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbih2aXNpYmxlKSxcblx0XHRcdGVuYWJsZWQ6IGdldEVkaXRCdXR0b25FbmFibGVkKHJvb3RDb252ZXJ0ZXJDb250ZXh0LCB1cGRhdGFibGVQcm9wZXJ0eVBhdGgsIHZpZXdMZXZlbClcblx0XHR9KTtcblx0fVxuXHQvLyBUaGVuIHRoZSBkZWxldGUgYWN0aW9uIGlmIHdlJ3JlIG5vdCBzdGF0aWNhbGx5IG5vdCBkZWxldGFibGVcblx0aWYgKFxuXHRcdChwYXJlbnRFbnRpdHlTZXREZWxldGFibGUgJiYgcGFyZW50RW50aXR5U2V0RGVsZXRhYmxlICE9PSBcImZhbHNlXCIpIHx8XG5cdFx0KGVudGl0eURlbGV0ZVJlc3RyaWN0aW9ucz8uRGVsZXRhYmxlPy52YWx1ZU9mKCkgIT09IGZhbHNlICYmIHBhcmVudEVudGl0eVNldERlbGV0YWJsZSAhPT0gXCJmYWxzZVwiKVxuXHQpIHtcblx0XHRjb25zdCBkZWxldGVIaWRkZW4gPSBNb2RlbEhlbHBlci5nZXREZWxldGVIaWRkZW4oZW50aXR5U2V0LCBlbnRpdHlUeXBlKTtcblx0XHRsZXQgdmlzaWJsZSA9IGdldERlbGV0ZUJ1dHRvblZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgZGVsZXRlSGlkZGVuKTtcblx0XHRpZiAoY29sbGFib3JhdGlvbk9uUm9vdCkge1xuXHRcdFx0dmlzaWJsZSA9IGFuZCh2aXNpYmxlLCBub3QoZXF1YWwoVUkuaGFzQ29sbGFib3JhdGlvbkF1dGhvcml6YXRpb24sIGZhbHNlKSkpO1xuXHRcdH1cblx0XHRoZWFkZXJBY3Rpb25zLnB1c2goe1xuXHRcdFx0dHlwZTogQWN0aW9uVHlwZS5TZWNvbmRhcnksXG5cdFx0XHRrZXk6IFwiRGVsZXRlQWN0aW9uXCIsXG5cdFx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbih2aXNpYmxlKSxcblx0XHRcdGVuYWJsZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldERlbGV0ZUJ1dHRvbkVuYWJsZWQoZW50aXR5RGVsZXRlUmVzdHJpY3Rpb25zPy5EZWxldGFibGUsIGlzUGFyZW50RGVsZXRhYmxlLCBjb252ZXJ0ZXJDb250ZXh0KSksXG5cdFx0XHRwYXJlbnRFbnRpdHlEZWxldGVFbmFibGVkOiBwYXJlbnRFbnRpdHlTZXREZWxldGFibGVcblx0XHR9KTtcblx0fVxuXG5cdGlmIChjb3B5RGF0YUZpZWxkKSB7XG5cdFx0aGVhZGVyQWN0aW9ucy5wdXNoKHtcblx0XHRcdC4uLmdldERhdGFGaWVsZEFubm90YXRpb25BY3Rpb24oY29weURhdGFGaWVsZCwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkNvcHksXG5cdFx0XHR0ZXh0OiBjb3B5RGF0YUZpZWxkLkxhYmVsPy50b1N0cmluZygpID8/IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIkNfQ09NTU9OX0NPUFlcIilcblx0XHR9KTtcblx0fVxuXG5cdGNvbnN0IGhlYWRlckRhdGFGaWVsZEZvcklCTkFjdGlvbnMgPSBnZXRJZGVudGlmaWNhdGlvbkRhdGFGaWVsZEZvcklCTkFjdGlvbnMoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIGZhbHNlKTtcblxuXHRoZWFkZXJEYXRhRmllbGRGb3JJQk5BY3Rpb25zXG5cdFx0LmZpbHRlcigoZGF0YUZpZWxkKSA9PiB7XG5cdFx0XHRjb25zdCBjcml0aWNhbGl0eSA9IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhRmllbGQ/LkNyaXRpY2FsaXR5KSk7XG5cdFx0XHRyZXR1cm4gIUlNUE9SVEFOVF9DUklUSUNBTElUSUVTLmluY2x1ZGVzKGNyaXRpY2FsaXR5ISk7XG5cdFx0fSlcblx0XHQuZm9yRWFjaCgoZGF0YUZpZWxkKSA9PiB7XG5cdFx0XHRpZiAoZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dD8udmFsdWVPZigpID09PSB0cnVlKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgUmVxdWlyZXNDb250ZXh0IHByb3BlcnR5IHNob3VsZCBub3QgYmUgdHJ1ZSBmb3IgaGVhZGVyIElCTiBhY3Rpb24gOiAke2RhdGFGaWVsZC5MYWJlbH1gKTtcblx0XHRcdH1cblx0XHRcdGlmIChkYXRhRmllbGQuSW5saW5lPy52YWx1ZU9mKCkgPT09IHRydWUpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBJbmxpbmUgcHJvcGVydHkgc2hvdWxkIG5vdCBiZSB0cnVlIGZvciBoZWFkZXIgSUJOIGFjdGlvbiA6ICR7ZGF0YUZpZWxkLkxhYmVsfWApO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgb05hdmlnYXRpb25QYXJhbXMgPSB7XG5cdFx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZzogZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nKGRhdGFGaWVsZC5NYXBwaW5nKVxuXHRcdFx0fTtcblxuXHRcdFx0aGVhZGVyQWN0aW9ucy5wdXNoKHtcblx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdFx0XHRcdHRleHQ6IGRhdGFGaWVsZC5MYWJlbD8udG9TdHJpbmcoKSxcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0YnV0dG9uVHlwZTogQnV0dG9uVHlwZS5HaG9zdCxcblx0XHRcdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0YW5kKFxuXHRcdFx0XHRcdFx0bm90KGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4pLCB0cnVlKSksXG5cdFx0XHRcdFx0XHRub3QoZXF1YWwocGF0aEluTW9kZWwoXCJzaGVsbE5hdmlnYXRpb25Ob3RBdmFpbGFibGVcIiwgXCJpbnRlcm5hbFwiKSwgdHJ1ZSkpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRlbmFibGVkOlxuXHRcdFx0XHRcdGRhdGFGaWVsZC5OYXZpZ2F0aW9uQXZhaWxhYmxlICE9PSB1bmRlZmluZWRcblx0XHRcdFx0XHRcdD8gY29tcGlsZUV4cHJlc3Npb24oZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5OYXZpZ2F0aW9uQXZhaWxhYmxlKSwgdHJ1ZSkpXG5cdFx0XHRcdFx0XHQ6IHRydWUsXG5cdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpLFxuXHRcdFx0XHRpc05hdmlnYWJsZTogdHJ1ZSxcblx0XHRcdFx0cHJlc3M6IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdGZuKFwiLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGVcIiwgW1xuXHRcdFx0XHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5TZW1hbnRpY09iamVjdCksXG5cdFx0XHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkLkFjdGlvbiksXG5cdFx0XHRcdFx0XHRvTmF2aWdhdGlvblBhcmFtc1xuXHRcdFx0XHRcdF0pXG5cdFx0XHRcdCksXG5cdFx0XHRcdGN1c3RvbURhdGE6IGNvbXBpbGVFeHByZXNzaW9uKHtcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5TZW1hbnRpY09iamVjdCksXG5cdFx0XHRcdFx0YWN0aW9uOiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkLkFjdGlvbilcblx0XHRcdFx0fSlcblx0XHRcdH0gYXMgQW5ub3RhdGlvbkFjdGlvbik7XG5cdFx0fSk7XG5cdC8vIEZpbmFsbHkgdGhlIG5vbiBjcml0aWNhbCBEYXRhRmllbGRGb3JBY3Rpb25zIGFuZCBEYXRhRmllbGRGb3JBY3Rpb25Hcm91cHNcblx0Y29tcHV0ZUFjdGlvbnNBbmRBY3Rpb25Hcm91cHMoaGVhZGVyQWN0aW9ucywgZmFsc2UsIGhlYWRlckRhdGFGaWVsZEZvckFjdGlvbnMsIGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdHJldHVybiBoZWFkZXJBY3Rpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGlkZGVuSGVhZGVyQWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBCYXNlQWN0aW9uW10ge1xuXHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdGNvbnN0IGhpZGRlbkFjdGlvbnMgPSAoZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LklkZW50aWZpY2F0aW9uPy5maWx0ZXIoKGlkZW50aWZpY2F0aW9uRGF0YUZpZWxkKSA9PiB7XG5cdFx0cmV0dXJuIGlkZW50aWZpY2F0aW9uRGF0YUZpZWxkPy5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB0cnVlO1xuXHR9KSB8fCBbXSkgYXMgRGF0YUZpZWxkRm9yQWN0aW9uVHlwZXNbXTtcblx0cmV0dXJuIGhpZGRlbkFjdGlvbnMubWFwKChkYXRhRmllbGQpID0+IHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EZWZhdWx0LFxuXHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZClcblx0XHR9O1xuXHR9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvb3RlckRlZmF1bHRBY3Rpb25zKFxuXHR2aWV3TGV2ZWw6IG51bWJlcixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRjYXBhYmlsaXRpZXM/OiBFbnZpcm9ubWVudENhcGFiaWxpdGllc1xuKTogQmFzZUFjdGlvbltdIHtcblx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRjb25zdCBzdGlja3lTZXNzaW9uU3VwcG9ydGVkID0gTW9kZWxIZWxwZXIuZ2V0U3RpY2t5U2Vzc2lvbihlbnRpdHlTZXQpLCAvL2ZvciBzdGlja3kgYXBwXG5cdFx0ZW50aXR5U2V0RHJhZnRSb290ID1cblx0XHRcdGlzRW50aXR5U2V0KGVudGl0eVNldCkgJiZcblx0XHRcdChlbnRpdHlTZXQuYW5ub3RhdGlvbnMuQ29tbW9uPy5EcmFmdFJvb3Q/LnRlcm0gPz8gZW50aXR5U2V0LmFubm90YXRpb25zLlNlc3Npb24/LlN0aWNreVNlc3Npb25TdXBwb3J0ZWQ/LnRlcm0pLFxuXHRcdGNvbmRpdGlvblNhdmUgPSBCb29sZWFuKFxuXHRcdFx0ZW50aXR5U2V0RHJhZnRSb290ID09PSBDb21tb25Bbm5vdGF0aW9uVGVybXMuRHJhZnRSb290IHx8XG5cdFx0XHRcdChjYXBhYmlsaXRpZXM/LkhpZGRlbkRyYWZ0IGFzIEhpZGRlbkRyYWZ0KT8uZW5hYmxlZCB8fFxuXHRcdFx0XHQoc3RpY2t5U2Vzc2lvblN1cHBvcnRlZCAmJiBzdGlja3lTZXNzaW9uU3VwcG9ydGVkPy5TYXZlQWN0aW9uKVxuXHRcdCksXG5cdFx0Y29uZGl0aW9uQXBwbHkgPSB2aWV3TGV2ZWwgPiAxICYmICEoY2FwYWJpbGl0aWVzPy5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdCk/LmVuYWJsZWQsXG5cdFx0Y29uZGl0aW9uQ2FuY2VsID0gQm9vbGVhbihcblx0XHRcdGVudGl0eVNldERyYWZ0Um9vdCA9PT0gQ29tbW9uQW5ub3RhdGlvblRlcm1zLkRyYWZ0Um9vdCB8fFxuXHRcdFx0XHQoY2FwYWJpbGl0aWVzPy5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdCk/LmVuYWJsZWQgfHxcblx0XHRcdFx0KHN0aWNreVNlc3Npb25TdXBwb3J0ZWQgJiYgc3RpY2t5U2Vzc2lvblN1cHBvcnRlZD8uRGlzY2FyZEFjdGlvbilcblx0XHQpLFxuXHRcdGNvbmRpdGlvbkNyZWF0ZU5leHQgPVxuXHRcdFx0dmlld0xldmVsID4gMSAmJlxuXHRcdFx0KGNhcGFiaWxpdGllcz8uSGlkZGVuRHJhZnQgYXMgSGlkZGVuRHJhZnQpPy5lbmFibGVkICYmXG5cdFx0XHQhKGNhcGFiaWxpdGllcz8uSGlkZGVuRHJhZnQgYXMgSGlkZGVuRHJhZnQpPy5oaWRlQ3JlYXRlTmV4dDtcblxuXHQvLyBSZXRyaWV2ZSBhbGwgZGV0ZXJtaW5pbmcgYWN0aW9uc1xuXHRjb25zdCBmb290ZXJEYXRhRmllbGRGb3JBY3Rpb25zID0gZ2V0SWRlbnRpZmljYXRpb25EYXRhRmllbGRGb3JBY3Rpb25zKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLCB0cnVlKTtcblxuXHQvLyBGaXJzdCBhZGQgdGhlIFwiQ3JpdGljYWxcIiBEYXRhRmllbGRGb3JBY3Rpb25zXG5cdGNvbnN0IGZvb3RlckFjdGlvbnM6IEJhc2VBY3Rpb25bXSA9IGZvb3RlckRhdGFGaWVsZEZvckFjdGlvbnNcblx0XHQuZmlsdGVyKChkYXRhRmllbGQpID0+IHtcblx0XHRcdGNvbnN0IGNyaXRpY2FsaXR5ID0gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZD8uQ3JpdGljYWxpdHkpKTtcblx0XHRcdHJldHVybiBjcml0aWNhbGl0eSAmJiBJTVBPUlRBTlRfQ1JJVElDQUxJVElFUy5pbmNsdWRlcyhjcml0aWNhbGl0eSk7XG5cdFx0fSlcblx0XHQubWFwKChkYXRhRmllbGQpID0+IHtcblx0XHRcdHJldHVybiBnZXREYXRhRmllbGRBbm5vdGF0aW9uQWN0aW9uKGRhdGFGaWVsZCwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0fSk7XG5cdGlmIChjb25kaXRpb25DcmVhdGVOZXh0KSB7XG5cdFx0Y29uc3QgaWZGQ0xFbmFibGVkID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5pc0ZjbEVuYWJsZWQoKTtcblx0XHRmb290ZXJBY3Rpb25zLnB1c2goe1xuXHRcdFx0dHlwZTogQWN0aW9uVHlwZS5DcmVhdGVOZXh0LFxuXHRcdFx0a2V5OiBcIkNyZWF0ZU5leHRBY3Rpb25cIixcblx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKGdldENyZWF0ZU5leHRCdXR0b25WaXNpYmlsaXR5KCEhY29uZGl0aW9uQ3JlYXRlTmV4dCwgaWZGQ0xFbmFibGVkKSlcblx0XHR9KTtcblx0fVxuXHQvLyBUaGVuIHRoZSBzYXZlIGFjdGlvbiBpZiBpdCBleGlzdHNcblx0aWYgKGVudGl0eVNldD8uZW50aXR5VHlwZU5hbWUgPT09IGVudGl0eVR5cGU/LmZ1bGx5UXVhbGlmaWVkTmFtZSAmJiBjb25kaXRpb25TYXZlKSB7XG5cdFx0Zm9vdGVyQWN0aW9ucy5wdXNoKHsgdHlwZTogQWN0aW9uVHlwZS5QcmltYXJ5LCBrZXk6IFwiU2F2ZUFjdGlvblwiIH0pO1xuXHR9XG5cblx0Ly8gVGhlbiB0aGUgYXBwbHkgYWN0aW9uIGlmIGl0IGV4aXN0c1xuXHRpZiAoY29uZGl0aW9uQXBwbHkpIHtcblx0XHRmb290ZXJBY3Rpb25zLnB1c2goeyB0eXBlOiBBY3Rpb25UeXBlLkRlZmF1bHRBcHBseSwga2V5OiBcIkFwcGx5QWN0aW9uXCIgfSk7XG5cdH1cblx0Ly8gVGhlbiB0aGUgbm9uIGNyaXRpY2FsIERhdGFGaWVsZEZvckFjdGlvbnNcblx0Zm9vdGVyRGF0YUZpZWxkRm9yQWN0aW9uc1xuXHRcdC5maWx0ZXIoKGRhdGFGaWVsZCkgPT4ge1xuXHRcdFx0Y29uc3QgY3JpdGljYWxpdHkgPSBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkPy5Dcml0aWNhbGl0eSkpO1xuXHRcdFx0cmV0dXJuIGNyaXRpY2FsaXR5ICYmICFJTVBPUlRBTlRfQ1JJVElDQUxJVElFUy5pbmNsdWRlcyhjcml0aWNhbGl0eSk7XG5cdFx0fSlcblx0XHQuZm9yRWFjaCgoZGF0YUZpZWxkKSA9PiB7XG5cdFx0XHRmb290ZXJBY3Rpb25zLnB1c2goZ2V0RGF0YUZpZWxkQW5ub3RhdGlvbkFjdGlvbihkYXRhRmllbGQsIGNvbnZlcnRlckNvbnRleHQpKTtcblx0XHR9KTtcblxuXHQvLyBUaGVuIHRoZSBjYW5jZWwgYWN0aW9uIGlmIGl0IGV4aXN0c1xuXHRpZiAoY29uZGl0aW9uQ2FuY2VsKSB7XG5cdFx0Zm9vdGVyQWN0aW9ucy5wdXNoKHtcblx0XHRcdHR5cGU6IEFjdGlvblR5cGUuU2Vjb25kYXJ5LFxuXHRcdFx0a2V5OiBcIkNhbmNlbEFjdGlvblwiLFxuXHRcdFx0cG9zaXRpb246IHsgcGxhY2VtZW50OiBQbGFjZW1lbnQuRW5kIH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gZm9vdGVyQWN0aW9ucztcbn1cblxuZnVuY3Rpb24gZ2V0RGF0YUZpZWxkQW5ub3RhdGlvbkFjdGlvbihcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JBY3Rpb25UeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBBbm5vdGF0aW9uQWN0aW9uIHtcblx0bGV0IGlzVmlzaWJsZUV4cCA9IGlzVmlzaWJsZShkYXRhRmllbGQpO1xuXHRjb25zdCBjb2xsYWJvcmF0aW9uT25Sb290ID1cblx0XHRNb2RlbEhlbHBlci5pc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZEZyb21Db252ZXJ0ZXJDb250ZXh0KGNvbnZlcnRlckNvbnRleHQpICYmXG5cdFx0TW9kZWxIZWxwZXIuZ2V0RHJhZnRSb290KGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkpO1xuXHRpZiAoY29sbGFib3JhdGlvbk9uUm9vdCkge1xuXHRcdGlzVmlzaWJsZUV4cCA9IGFuZChpc1Zpc2libGVFeHAsIG5vdChlcXVhbChVSS5oYXNDb2xsYWJvcmF0aW9uQXV0aG9yaXphdGlvbiwgZmFsc2UpKSk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckFjdGlvbixcblx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGRhdGFGaWVsZC5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpLFxuXHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKGlzVmlzaWJsZUV4cCksXG5cdFx0ZW5hYmxlZDogZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24oY29udmVydGVyQ29udGV4dCwgZGF0YUZpZWxkLkFjdGlvblRhcmdldCksXG5cdFx0aXNOYXZpZ2FibGU6IHRydWUsXG5cdFx0aXNBSU9wZXJhdGlvbjogaXNBY3Rpb25BSU9wZXJhdGlvbihkYXRhRmllbGQpID09PSB0cnVlIHx8IHVuZGVmaW5lZFxuXHR9O1xufVxuXG4vKipcbiAqIEFkZHMgYWN0aW9ucyBhbmQgYWN0aW9uIGdyb3VwcyB0byB0aGUgaGVhZGVyQWN0aW9ucyBhcnJheSwgcHJpb3JpdGl6aW5nIHRoZW0gYWNjb3JkaW5nIHRvIHRoZWlyIGNyaXRpY2FsaXR5LlxuICogQHBhcmFtIGhlYWRlckFjdGlvbnMgQXJyYXkgd2l0aCBhbGwgdGhlIGN1cnJlbnQgaGVhZGVyIGFjdGlvbnMgaW4gaXRcbiAqIEBwYXJhbSBwcmlvcml0aXplQ3JpdGljYWxpdHkgRmxhZyB0byBkZXRlcm1pbmUgdGhlIHByaW9yaXR5IG9mIHRoZSBjcml0aWNhbGl0eSBhY3Rpb24gb3IgYWN0aW9uR3JvdXBzIGluc2lkZSBoZWFkZXJBY3Rpb25zXG4gKiBAcGFyYW0gaGVhZGVyRGF0YUZpZWxkRm9yQWN0aW9uc09yR3JvdXBzIEFsbCBhY3Rpb25zIGFuZCBhY3Rpb24gZ3JvdXBzIGZyb20gdGhlIGlkZW50aWZpY2F0aW9uIGFubm90YXRpb24gd2l0aCBDb3B5QWN0aW9uIGZpbHRlcmVkIG91dFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgSW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVBY3Rpb25zQW5kQWN0aW9uR3JvdXBzKFxuXHRoZWFkZXJBY3Rpb25zOiBCYXNlQWN0aW9uW10sXG5cdHByaW9yaXRpemVDcml0aWNhbGl0eTogYm9vbGVhbixcblx0aGVhZGVyRGF0YUZpZWxkRm9yQWN0aW9uc09yR3JvdXBzOiAoRGF0YUZpZWxkRm9yQWN0aW9uVHlwZXMgfCBEYXRhRmllbGRGb3JBY3Rpb25Hcm91cFR5cGVzKVtdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IHZvaWQge1xuXHRoZWFkZXJEYXRhRmllbGRGb3JBY3Rpb25zT3JHcm91cHNcblx0XHQuZmlsdGVyKChkYXRhRmllbGQpID0+IHtcblx0XHRcdGNvbnN0IGNyaXRpY2FsaXR5ID0gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZD8uQ3JpdGljYWxpdHkpKTtcblx0XHRcdHJldHVybiBwcmlvcml0aXplQ3JpdGljYWxpdHkgPyBJTVBPUlRBTlRfQ1JJVElDQUxJVElFUy5pbmNsdWRlcyhjcml0aWNhbGl0eSEpIDogIUlNUE9SVEFOVF9DUklUSUNBTElUSUVTLmluY2x1ZGVzKGNyaXRpY2FsaXR5ISk7XG5cdFx0fSlcblx0XHQuZm9yRWFjaCgoZGF0YUZpZWxkKSA9PiB7XG5cdFx0XHRpZiAoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24pIHtcblx0XHRcdFx0aGVhZGVyQWN0aW9ucy5wdXNoKGdldERhdGFGaWVsZEFubm90YXRpb25BY3Rpb24oZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KSk7XG5cdFx0XHR9IGVsc2UgaWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXApIHtcblx0XHRcdFx0bGV0IGlzVmlzaWJsZUV4cCA9IG5vdChlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpO1xuXHRcdFx0XHRjb25zdCBjb2xsYWJvcmF0aW9uT25Sb290ID1cblx0XHRcdFx0XHRNb2RlbEhlbHBlci5pc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZEZyb21Db252ZXJ0ZXJDb250ZXh0KGNvbnZlcnRlckNvbnRleHQpICYmXG5cdFx0XHRcdFx0TW9kZWxIZWxwZXIuZ2V0RHJhZnRSb290KGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkpO1xuXHRcdFx0XHRpZiAoY29sbGFib3JhdGlvbk9uUm9vdCkge1xuXHRcdFx0XHRcdGlzVmlzaWJsZUV4cCA9IGFuZChpc1Zpc2libGVFeHAsIG5vdChlcXVhbChVSS5oYXNDb2xsYWJvcmF0aW9uQXV0aG9yaXphdGlvbiwgZmFsc2UpKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aGVhZGVyQWN0aW9ucy5wdXNoKHtcblx0XHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLk1lbnUsXG5cdFx0XHRcdFx0dGV4dDogZGF0YUZpZWxkLkxhYmVsIGFzIHN0cmluZyxcblx0XHRcdFx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKSxcblx0XHRcdFx0XHRpZDogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpLFxuXHRcdFx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKGlzVmlzaWJsZUV4cCksXG5cdFx0XHRcdFx0bWVudTogZGF0YUZpZWxkLkFjdGlvbnMubWFwKChhY3Rpb24pID0+XG5cdFx0XHRcdFx0XHRnZXREYXRhRmllbGRBbm5vdGF0aW9uQWN0aW9uKGFjdGlvbiBhcyBEYXRhRmllbGRGb3JBY3Rpb25UeXBlcywgY29udmVydGVyQ29udGV4dClcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGlzQUlPcGVyYXRpb246IGlzTWVudUFJT3BlcmF0aW9uKGRhdGFGaWVsZC5BY3Rpb25zKSA9PT0gdHJ1ZSB8fCB1bmRlZmluZWRcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBaURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxTQUFTQSxvQ0FBb0NBLENBQUNDLFVBQXNCLEVBQUVDLG1CQUE0QixFQUE2QjtJQUNySSxPQUFRRCxVQUFVLENBQUNFLFdBQVcsRUFBRUMsRUFBRSxFQUFFQyxjQUFjLEVBQUVD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SUFBSztNQUN2QixJQUFJQSxTQUFTLENBQUNqSCxLQUFLLG9EQUF5QyxFQUFFO1FBQzdEb0gsYUFBYSxDQUFDQyxJQUFJLENBQUNpQiw0QkFBNEIsQ0FBQ3JCLFNBQVMsRUFBRXBHLGdCQUFnQixDQUFDLENBQUM7TUFDOUUsQ0FBQyxNQUFNLElBQUlvRyxTQUFTLENBQUNqSCxLQUFLLHlEQUE4QyxFQUFFO1FBQ3pFLElBQUlxTSxZQUFZLEdBQUdwSyxHQUFHLENBQUNJLEtBQUssQ0FBQ2QsMkJBQTJCLENBQUMwRixTQUFTLENBQUN0SCxXQUFXLEVBQUVDLEVBQUUsRUFBRXFLLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25HLE1BQU0vRCxtQkFBbUIsR0FDeEJ0RCxXQUFXLENBQUN1RCxpREFBaUQsQ0FBQ3RGLGdCQUFnQixDQUFDLElBQy9FK0IsV0FBVyxDQUFDcUQsWUFBWSxDQUFDcEYsZ0JBQWdCLENBQUM2QixZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQzFELElBQUl3RCxtQkFBbUIsRUFBRTtVQUN4Qm1HLFlBQVksR0FBR2pLLEdBQUcsQ0FBQ2lLLFlBQVksRUFBRXBLLEdBQUcsQ0FBQ0ksS0FBSyxDQUFDekMsRUFBRSxDQUFDb0ksNkJBQTZCLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN0RjtRQUNBWixhQUFhLENBQUNDLElBQUksQ0FBQztVQUNsQkMsSUFBSSxFQUFFQyxVQUFVLENBQUNzRixJQUFJO1VBQ3JCckUsSUFBSSxFQUFFdkIsU0FBUyxDQUFDd0IsS0FBZTtVQUMvQmhCLEdBQUcsRUFBRTBDLFNBQVMsQ0FBQ0Msd0JBQXdCLENBQUNuRCxTQUFTLENBQUM7VUFDbEQ2RixFQUFFLEVBQUUzQyxTQUFTLENBQUNDLHdCQUF3QixDQUFDbkQsU0FBUyxDQUFDO1VBQ2pEYyxPQUFPLEVBQUUxQyxpQkFBaUIsQ0FBQ2dILFlBQVksQ0FBQztVQUN4Q1UsSUFBSSxFQUFFOUYsU0FBUyxDQUFDK0YsT0FBTyxDQUFDN0wsR0FBRyxDQUFFeUosTUFBTSxJQUNsQ3RDLDRCQUE0QixDQUFDc0MsTUFBTSxFQUE2Qi9KLGdCQUFnQixDQUNqRixDQUFDO1VBQ0Q0TCxhQUFhLEVBQUVRLGlCQUFpQixDQUFDaEcsU0FBUyxDQUFDK0YsT0FBTyxDQUFDLEtBQUssSUFBSSxJQUFJN0s7UUFDakUsQ0FBQyxDQUFDO01BQ0g7SUFDRCxDQUFDLENBQUM7RUFDSjtFQUFDLE9BQUEzQixRQUFBO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -28,6 +28,7 @@ import {
28
28
  ButtonType,
29
29
  dataFieldIsCopyAction,
30
30
  getCopyAction,
31
+ getCreateNextButtonVisibility,
31
32
  getEnabledForAnnotationAction,
32
33
  getEnabledForAnnotationActionExpression,
33
34
  getSemanticObjectMapping,
@@ -517,7 +518,12 @@ export function getFooterDefaultActions(
517
518
  return getDataFieldAnnotationAction(dataField, converterContext);
518
519
  });
519
520
  if (conditionCreateNext) {
520
- footerActions.push({ type: ActionType.CreateNext, key: "CreateNextAction" });
521
+ const ifFCLEnabled = converterContext.getManifestWrapper().isFclEnabled();
522
+ footerActions.push({
523
+ type: ActionType.CreateNext,
524
+ key: "CreateNextAction",
525
+ visible: compileExpression(getCreateNextButtonVisibility(!!conditionCreateNext, ifFCLEnabled))
526
+ });
521
527
  }
522
528
  // Then the save action if it exists
523
529
  if (entitySet?.entityTypeName === entityType?.fullyQualifiedName && conditionSave) {
@@ -2,7 +2,7 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/base/Log", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers/MetaPath", "sap/ui/core/Component", "sap/ui/core/Lib", "sap/fe/core/templating/PropertyHelper", "sap/fe/core/CommonUtils", "sap/ui/rta/plugin/annotations/AnnotationTypes"], function (Log, MetaModelConverter, MetaPath, Component, Lib, PropertyHelper, CommonUtils, AnnotationTypes) {
5
+ sap.ui.define(["sap/base/Log", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers/MetaPath", "sap/ui/core/Component", "sap/ui/core/Lib", "sap/fe/core/CommonUtils", "sap/fe/core/templating/PropertyHelper", "sap/ui/rta/plugin/annotations/AnnotationTypes"], function (Log, MetaModelConverter, MetaPath, Component, Lib, CommonUtils, PropertyHelper, AnnotationTypes) {
6
6
  "use strict";
7
7
 
8
8
  var _exports = {};
@@ -63,7 +63,12 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/converters/MetaModelConverter", "sap
63
63
  buildingBlock = buildingBlock.getParent();
64
64
  }
65
65
  let metaPath = contextPathToUse;
66
- if (buildingBlock) {
66
+ if (control.getBindingContext()) {
67
+ const contextMetaPath = metaModel?.getMetaPath(control.getBindingContext()?.getPath() ?? "");
68
+ if (contextMetaPath) {
69
+ metaPath = contextMetaPath;
70
+ }
71
+ } else if (buildingBlock) {
67
72
  metaPath = buildingBlock.getProperty("metaPath") ?? contextPathToUse;
68
73
  }
69
74
  const properties = [];
@@ -181,4 +186,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/converters/MetaModelConverter", "sap
181
186
  _exports.getTextArrangementChangeAction = getTextArrangementChangeAction;
182
187
  return _exports;
183
188
  }, false);
184
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXNvdXJjZUJ1bmRsZURlc2lnbnRpbWUiLCJMaWIiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsImdldFRleHQiLCJrZXkiLCJfZXhwb3J0cyIsIlRFWFRfQVJSQU5HRU1FTlRfTEFCRUxTIiwiZmlsdGVyUHJvcGVydHlXaXRoVGV4dEFubm90YXRpb24iLCJwcm9wIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJUZXh0IiwidW5kZWZpbmVkIiwiaGFzQ3VycmVuY3kiLCJoYXNVbml0IiwiaXNDdXJyZW5jeSIsImlzVW5pdCIsIl9jb2xsZWN0UHJvcGVydGllcyIsImVudGl0eVR5cGUiLCJwcm9wZXJ0aWVzIiwiZmlsdGVyRm4iLCJ2aXNpdGVkRW50aXR5IiwiZnVsbHlRdWFsaWZpZWROYW1lIiwicHVzaCIsImVudGl0eVByb3BlcnRpZXMiLCJmaWx0ZXIiLCJVSSIsIkhpZGRlbiIsInZhbHVlT2YiLCJ0YXJnZXRUeXBlIiwibWFwIiwicHJvcGVydHkiLCJjb2xsZWN0UHJvcGVydGllcyIsInRlbXBsYXRlQ29tcG9uZW50IiwiY29udHJvbCIsIm1ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsImNvbnRleHRQYXRoVG9Vc2UiLCJnZXRGdWxsQ29udGV4dFBhdGgiLCJidWlsZGluZ0Jsb2NrIiwiaXNBIiwiZ2V0UGFyZW50IiwibWV0YVBhdGgiLCJnZXRQcm9wZXJ0eSIsInRhcmdldEVudGl0eSIsIk1ldGFQYXRoIiwiY29udmVydFR5cGVzIiwiZSIsIkxvZyIsIndhcm5pbmciLCJnZXRDbG9zZXN0RW50aXR5VHlwZSIsImdldFRhcmdldFByb3BlcnR5RnJvbUZvcm1FbGVtZW50Iiwib0NvbnRyb2wiLCJ0YXJnZXRQcm9wZXJ0eSIsImZpZWxkcyIsImdldEZpZWxkcyIsImxlbmd0aCIsInRhcmdldE9iamVjdCIsImdldE1haW5Qcm9wZXJ0eVJlbGF0aXZlUGF0aCIsImdldFJlbmFtZUFjdGlvbiIsImlzQXRFbGVtZW50TGV2ZWwiLCJhcmd1bWVudHMiLCJjaGFuZ2VUeXBlIiwidGl0bGUiLCJpY29uIiwic2luZ2xlUmVuYW1lIiwiY29udHJvbEJhc2VkUmVuYW1lQ2hhbmdlVHlwZSIsInR5cGUiLCJBbm5vdGF0aW9uVHlwZXMiLCJTdHJpbmdUeXBlIiwiZGVsZWdhdGUiLCJnZXRBbm5vdGF0aW9uc0NoYW5nZUluZm8iLCJfYW5ub3RhdGlvbiIsIkNvbXBvbmVudCIsImdldE93bmVyQ29tcG9uZW50Rm9yIiwidmlldyIsIkNvbW1vblV0aWxzIiwiZ2V0VGFyZ2V0VmlldyIsImdldENvbnRyb2xsZXIiLCJnZXRPd25lckNvbXBvbmVudCIsInRhcmdldFByb3BlcnR5UGF0aCIsImZpbmQiLCJuYW1lIiwic2VydmljZVVybCIsImdldE1vZGVsIiwiZ2V0U2VydmljZVVybCIsInByb3BlcnR5TmFtZSIsImFubm90YXRpb25QYXRoIiwiY3VycmVudFZhbHVlIiwiTGFiZWwiLCJ0b1N0cmluZyIsInBvc3NpYmxlVmFsdWVzIiwicHJlU2VsZWN0ZWRQcm9wZXJ0eSIsImdldFRleHRBcnJhbmdlbWVudENoYW5nZUFjdGlvbiIsIlZhbHVlTGlzdFR5cGUiLCJkZWZhdWx0VHlwZSIsIlRleHRBcnJhbmdlbWVudCIsIk9iamVjdCIsImtleXMiLCJzS2V5IiwidGV4dCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQW5ub3RhdGlvbkJhc2VkQ2hhbmdlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVR5cGUsIFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgeyBUZXh0QXJyYW5nZW1lbnRUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBUZW1wbGF0ZUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIEJ1aWxkaW5nQmxvY2sgZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL0J1aWxkaW5nQmxvY2tcIjtcbmltcG9ydCB7IGNvbnZlcnRUeXBlcyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IE1ldGFQYXRoIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01ldGFQYXRoXCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCBMaWIgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbi8vIE9LIHNpbmNlIHdlIGFyZSBpbiBkZXNpZ250aW1lIHdlIGNhbiBpZ25vcmUgdGhhdCBkZXBlbmRlbmN5XG5pbXBvcnQgeyBoYXNDdXJyZW5jeSwgaGFzVW5pdCwgaXNDdXJyZW5jeSwgaXNVbml0IH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCB0eXBlIEZpZWxkIGZyb20gXCJzYXAvZmUvbWFjcm9zL0ZpZWxkXCI7XG5pbXBvcnQgdHlwZSBGb3JtRWxlbWVudCBmcm9tIFwic2FwL3VpL2xheW91dC9mb3JtL0Zvcm1FbGVtZW50XCI7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlc3RyaWN0ZWQtaW1wb3J0c1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IEFubm90YXRpb25UeXBlcyBmcm9tIFwic2FwL3VpL3J0YS9wbHVnaW4vYW5ub3RhdGlvbnMvQW5ub3RhdGlvblR5cGVzXCI7XG5cbmNvbnN0IHJlc291cmNlQnVuZGxlRGVzaWdudGltZSA9IExpYi5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlLmRlc2lnbnRpbWVcIikhO1xuXG5leHBvcnQgY29uc3QgZ2V0VGV4dCA9IGZ1bmN0aW9uIChrZXk6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiByZXNvdXJjZUJ1bmRsZURlc2lnbnRpbWUuZ2V0VGV4dChrZXkpO1xufTtcblxudHlwZSBBbm5vdGF0aW9uQ2hhbmdlUmV0dXJuVHlwZSA9IHtcblx0c2VydmljZVVybDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRwcm9wZXJ0aWVzOiB7XG5cdFx0cHJvcGVydHlOYW1lOiBzdHJpbmc7XG5cdFx0YW5ub3RhdGlvblBhdGg6IHN0cmluZztcblx0XHRjdXJyZW50VmFsdWU6IHN0cmluZztcblx0fVtdO1xuXHRwb3NzaWJsZVZhbHVlczogeyBrZXk6IHN0cmluZzsgdGV4dDogc3RyaW5nIH1bXTtcblx0cHJlU2VsZWN0ZWRQcm9wZXJ0eTogc3RyaW5nOyAvLyBpZiB0aGUgYWN0aW9uIGlzIHRyaWdnZXJlZCBmcm9tIGEgY29udHJvbCB0aGF0IGNvcnJlc3BvbmRzIHRvIGEgcHJvcGVydHksIG9ubHkgdGhpcyBvbmUgd2lsbCBiZSBzaG93biBpbiB0aGUgRGlhbG9nIGluaXRpYWxseSAoc2VhcmNoIGZpZWxkIHBvcHVsYXRlZCB3aXRoIHRoaXMgc3RyaW5nKVxufTtcblxuY29uc3QgVEVYVF9BUlJBTkdFTUVOVF9MQUJFTFMgPSB7XG5cdFtUZXh0QXJyYW5nZW1lbnRUeXBlLlRleHRPbmx5XTogXCJUZXh0IE9ubHlcIixcblx0W1RleHRBcnJhbmdlbWVudFR5cGUuVGV4dEZpcnN0XTogXCJUZXh0IEZpcnN0XCIsXG5cdFtUZXh0QXJyYW5nZW1lbnRUeXBlLlRleHRMYXN0XTogXCJUZXh0IExhc3RcIixcblx0W1RleHRBcnJhbmdlbWVudFR5cGUuVGV4dFNlcGFyYXRlXTogXCJJRCBPbmx5XCJcbn07XG5cbmZ1bmN0aW9uIGZpbHRlclByb3BlcnR5V2l0aFRleHRBbm5vdGF0aW9uKHByb3A6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdHJldHVybiBwcm9wLmFubm90YXRpb25zLkNvbW1vbj8uVGV4dCAhPT0gdW5kZWZpbmVkICYmICFoYXNDdXJyZW5jeShwcm9wKSAmJiAhaGFzVW5pdChwcm9wKSAmJiAhaXNDdXJyZW5jeShwcm9wKSAmJiAhaXNVbml0KHByb3ApO1xufVxuXG4vKipcbiAqIENvbGxlY3RzIGFsbCBwcm9wZXJ0aWVzIHdpdGggYSBUZXh0IGFubm90YXRpb24gZnJvbSB0aGUgZ2l2ZW4gZW50aXR5IHR5cGUgYW5kIGl0cyBuYXZpZ2F0aW9uIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgZW50aXR5IHR5cGUgdG8gc3RhcnQgd2l0aFxuICogQHBhcmFtIHByb3BlcnRpZXMgVGhlIGFycmF5IHRvIGNvbGxlY3QgdGhlIHByb3BlcnRpZXMgaW5cbiAqIEBwYXJhbSBmaWx0ZXJGbiBBIGZpbHRlciBmdW5jdGlvbiB0byBkZXRlcm1pbmUgd2hpY2ggcHJvcGVydGllcyB0byBjb2xsZWN0XG4gKiBAcGFyYW0gdmlzaXRlZEVudGl0eSBBIG1hcCB0byBrZWVwIHRyYWNrIG9mIHZpc2l0ZWQgZW50aXRpZXNcbiAqL1xuZnVuY3Rpb24gX2NvbGxlY3RQcm9wZXJ0aWVzKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRwcm9wZXJ0aWVzOiB7IHByb3BlcnR5OiBQcm9wZXJ0eTsgZW50aXR5VHlwZTogRW50aXR5VHlwZSB9W10sXG5cdGZpbHRlckZuOiAocHJvcDogUHJvcGVydHkpID0+IGJvb2xlYW4sXG5cdHZpc2l0ZWRFbnRpdHk6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+XG4pOiB2b2lkIHtcblx0aWYgKHZpc2l0ZWRFbnRpdHlbZW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWVdKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdHZpc2l0ZWRFbnRpdHlbZW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWVdID0gdHJ1ZTtcblx0cHJvcGVydGllcy5wdXNoKFxuXHRcdC4uLmVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllc1xuXHRcdFx0LmZpbHRlcihmaWx0ZXJGbilcblx0XHRcdC5maWx0ZXIoKHByb3ApID0+IHtcblx0XHRcdFx0Ly8gQWx3YXlzIGZpbHRlciBvdXQgVUkuSGlkZGVuID0gdHJ1ZVxuXHRcdFx0XHQvLyBBbHdheXMgZmlsdGVyIG91dCBjb21wbGV4IHR5cGVcblx0XHRcdFx0aWYgKHByb3AuYW5ub3RhdGlvbnMuVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB0cnVlIHx8ICEhcHJvcC50YXJnZXRUeXBlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSlcblx0XHRcdC5tYXAoKHByb3A6IFByb3BlcnR5KSA9PiB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0cHJvcGVydHk6IHByb3AsXG5cdFx0XHRcdFx0ZW50aXR5VHlwZTogZW50aXR5VHlwZVxuXHRcdFx0XHR9O1xuXHRcdFx0fSlcblx0KTtcbn1cblxuZnVuY3Rpb24gY29sbGVjdFByb3BlcnRpZXMoXG5cdHRlbXBsYXRlQ29tcG9uZW50OiBUZW1wbGF0ZUNvbXBvbmVudCxcblx0Y29udHJvbDogTWFuYWdlZE9iamVjdCxcblx0ZmlsdGVyRm46IChwcm9wOiBQcm9wZXJ0eSkgPT4gYm9vbGVhblxuKTogeyBwcm9wZXJ0eTogUHJvcGVydHk7IGVudGl0eVR5cGU6IEVudGl0eVR5cGUgfVtdIHwgbnVsbCB7XG5cdGNvbnN0IG1ldGFNb2RlbCA9IHRlbXBsYXRlQ29tcG9uZW50LmdldE1ldGFNb2RlbCgpO1xuXHRjb25zdCBjb250ZXh0UGF0aFRvVXNlID0gdGVtcGxhdGVDb21wb25lbnQuZ2V0RnVsbENvbnRleHRQYXRoKCk7XG5cdC8vIEZpbmQgY2xvc2VzdCBidWlsZGluZyBibG9ja1xuXHRsZXQgYnVpbGRpbmdCbG9jazogTWFuYWdlZE9iamVjdCB8IG51bGwgPSBjb250cm9sO1xuXHR3aGlsZSAoYnVpbGRpbmdCbG9jayAmJiAhYnVpbGRpbmdCbG9jay5pc0E8QnVpbGRpbmdCbG9jaz4oXCJzYXAuZmUuY29yZS5idWlsZGluZ0Jsb2Nrcy5CdWlsZGluZ0Jsb2NrXCIpKSB7XG5cdFx0YnVpbGRpbmdCbG9jayA9IGJ1aWxkaW5nQmxvY2suZ2V0UGFyZW50KCk7XG5cdH1cblx0bGV0IG1ldGFQYXRoID0gY29udGV4dFBhdGhUb1VzZSE7XG5cdGlmIChidWlsZGluZ0Jsb2NrKSB7XG5cdFx0bWV0YVBhdGggPSBidWlsZGluZ0Jsb2NrLmdldFByb3BlcnR5KFwibWV0YVBhdGhcIikgPz8gY29udGV4dFBhdGhUb1VzZTtcblx0fVxuXHRjb25zdCBwcm9wZXJ0aWVzOiB7IHByb3BlcnR5OiBQcm9wZXJ0eTsgZW50aXR5VHlwZTogRW50aXR5VHlwZSB9W10gPSBbXTtcblx0aWYgKG1ldGFNb2RlbCAmJiBjb250ZXh0UGF0aFRvVXNlKSB7XG5cdFx0bGV0IHRhcmdldEVudGl0eTogTWV0YVBhdGg8RW50aXR5VHlwZT47XG5cdFx0dHJ5IHtcblx0XHRcdHRhcmdldEVudGl0eSA9IG5ldyBNZXRhUGF0aChjb252ZXJ0VHlwZXMobWV0YU1vZGVsKSwgbWV0YVBhdGgsIGNvbnRleHRQYXRoVG9Vc2UpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdExvZy53YXJuaW5nKGBObyBtZXRhbW9kZWwgb3IgbWV0YVBhdGggaXMgbm90IHJlYWNoYWJsZSB3aXRoICR7bWV0YVBhdGh9IGFuZCAke2NvbnRleHRQYXRoVG9Vc2V9YCk7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRjb25zdCB2aXNpdGVkRW50aXR5OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuXHRcdC8vIENvbGxlY3QgYWxsIHByb3BlcnRpZXMsIGRvbid0IGFwcGx5IGZpbHRlcnNcblx0XHRfY29sbGVjdFByb3BlcnRpZXModGFyZ2V0RW50aXR5LmdldENsb3Nlc3RFbnRpdHlUeXBlKCksIHByb3BlcnRpZXMsIGZpbHRlckZuLCB2aXNpdGVkRW50aXR5KTtcblx0fVxuXHRyZXR1cm4gcHJvcGVydGllcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhcmdldFByb3BlcnR5RnJvbUZvcm1FbGVtZW50KG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0bGV0IHRhcmdldFByb3BlcnR5O1xuXHRpZiAob0NvbnRyb2wuaXNBPEZvcm1FbGVtZW50PihcInNhcC51aS5sYXlvdXQuZm9ybS5Gb3JtRWxlbWVudFwiKSkge1xuXHRcdGNvbnN0IGZpZWxkcyA9IG9Db250cm9sLmdldEZpZWxkcygpO1xuXHRcdGlmIChmaWVsZHM/Lmxlbmd0aCA+IDAgJiYgZmllbGRzWzBdLmlzQTxGaWVsZD4oXCJzYXAuZmUubWFjcm9zLkZpZWxkXCIpKSB7XG5cdFx0XHRjb25zdCB0YXJnZXRPYmplY3QgPSBmaWVsZHNbMF07XG5cdFx0XHR0YXJnZXRQcm9wZXJ0eSA9IHRhcmdldE9iamVjdC5nZXRNYWluUHJvcGVydHlSZWxhdGl2ZVBhdGgoKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHRhcmdldFByb3BlcnR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVuYW1lQWN0aW9uKGlzQXRFbGVtZW50TGV2ZWwgPSBmYWxzZSk6IHtcblx0Y2hhbmdlVHlwZTogc3RyaW5nO1xuXHRzaW5nbGVSZW5hbWU6IGJvb2xlYW47XG5cdGNvbnRyb2xCYXNlZFJlbmFtZUNoYW5nZVR5cGU6IHN0cmluZztcblx0dGl0bGU6ICgpID0+IHN0cmluZztcblx0aWNvbjogc3RyaW5nO1xuXHR0eXBlOiBzdHJpbmc7XG5cdGRlbGVnYXRlOiB7IGdldEFubm90YXRpb25zQ2hhbmdlSW5mbzogKG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0LCBfYW5ub3RhdGlvbjogc3RyaW5nKSA9PiBBbm5vdGF0aW9uQ2hhbmdlUmV0dXJuVHlwZSB8IG51bGwgfTtcbn0ge1xuXHRyZXR1cm4ge1xuXHRcdGNoYW5nZVR5cGU6IFwicmVuYW1lTGFiZWxcIixcblx0XHR0aXRsZTogKCk6IHN0cmluZyA9PiAoaXNBdEVsZW1lbnRMZXZlbCA/IGdldFRleHQoXCJSVEFfQ09OVEVYVF9BQ1RJT05NRU5VX1JFTkFNRVwiKSA6IGdldFRleHQoXCJSVEFfQ09OVEVYVF9BQ1RJT05NRU5VX0NIQU5HRUxBQkVMU1wiKSksXG5cdFx0aWNvbjogXCJzYXAtaWNvbjovL2VkaXRcIixcblx0XHRzaW5nbGVSZW5hbWU6IGlzQXRFbGVtZW50TGV2ZWwsXG5cdFx0Y29udHJvbEJhc2VkUmVuYW1lQ2hhbmdlVHlwZTogXCJyZW5hbWVGaWVsZFwiLFxuXHRcdHR5cGU6IEFubm90YXRpb25UeXBlcy5TdHJpbmdUeXBlLFxuXHRcdGRlbGVnYXRlOiB7XG5cdFx0XHRnZXRBbm5vdGF0aW9uc0NoYW5nZUluZm86IChvQ29udHJvbDogTWFuYWdlZE9iamVjdCwgX2Fubm90YXRpb246IHN0cmluZyk6IEFubm90YXRpb25DaGFuZ2VSZXR1cm5UeXBlIHwgbnVsbCA9PiB7XG5cdFx0XHRcdGxldCB0ZW1wbGF0ZUNvbXBvbmVudCA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcihvQ29udHJvbCkgYXMgVGVtcGxhdGVDb21wb25lbnQgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdGlmICghdGVtcGxhdGVDb21wb25lbnQpIHtcblx0XHRcdFx0XHRjb25zdCB2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0VmlldyhvQ29udHJvbCk7XG5cdFx0XHRcdFx0dGVtcGxhdGVDb21wb25lbnQgPSB2aWV3Py5nZXRDb250cm9sbGVyKCkuZ2V0T3duZXJDb21wb25lbnQoKSBhcyBUZW1wbGF0ZUNvbXBvbmVudCB8IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodGVtcGxhdGVDb21wb25lbnQpIHtcblx0XHRcdFx0XHRsZXQgdGFyZ2V0UHJvcGVydHk6IFByb3BlcnR5IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRcdGNvbnN0IHByb3BlcnRpZXMgPSBjb2xsZWN0UHJvcGVydGllcyh0ZW1wbGF0ZUNvbXBvbmVudCwgb0NvbnRyb2wsICgpID0+IHRydWUpO1xuXHRcdFx0XHRcdGNvbnN0IHRhcmdldFByb3BlcnR5UGF0aCA9IGdldFRhcmdldFByb3BlcnR5RnJvbUZvcm1FbGVtZW50KG9Db250cm9sKTtcblx0XHRcdFx0XHRpZiAodGFyZ2V0UHJvcGVydHlQYXRoKSB7XG5cdFx0XHRcdFx0XHR0YXJnZXRQcm9wZXJ0eSA9IHByb3BlcnRpZXM/LmZpbmQoKHByb3ApID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHByb3AucHJvcGVydHkubmFtZSA9PT0gdGFyZ2V0UHJvcGVydHlQYXRoO1xuXHRcdFx0XHRcdFx0fSk/LnByb3BlcnR5O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChwcm9wZXJ0aWVzICYmIHByb3BlcnRpZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0c2VydmljZVVybDogKG9Db250cm9sLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCB8IHVuZGVmaW5lZCk/LmdldFNlcnZpY2VVcmwoKSxcblx0XHRcdFx0XHRcdFx0cHJvcGVydGllczogcHJvcGVydGllcy5tYXAoKHByb3A6IHsgcHJvcGVydHk6IFByb3BlcnR5OyBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlIH0pID0+IHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHJvcGVydHlOYW1lOiBgJHtwcm9wLnByb3BlcnR5Lm5hbWV9YCxcblx0XHRcdFx0XHRcdFx0XHRcdGFubm90YXRpb25QYXRoOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcIi9cIiArXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHByb3AuZW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWUgK1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcIi9cIiArXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHByb3AucHJvcGVydHkubmFtZSArXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5MYWJlbFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y3VycmVudFZhbHVlOiBwcm9wLnByb3BlcnR5LmFubm90YXRpb25zLkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKCkgPz8gcHJvcC5wcm9wZXJ0eS5uYW1lXG5cdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdHBvc3NpYmxlVmFsdWVzOiBbXSxcblx0XHRcdFx0XHRcdFx0cHJlU2VsZWN0ZWRQcm9wZXJ0eTogdGFyZ2V0UHJvcGVydHlcblx0XHRcdFx0XHRcdFx0XHQ/IFwiL1wiICsgdGFyZ2V0UHJvcGVydHkuZnVsbHlRdWFsaWZpZWROYW1lICsgXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxhYmVsXCJcblx0XHRcdFx0XHRcdFx0XHQ6IFwiXCIgLy8gaWYgdGhlIGFjdGlvbiBpcyB0cmlnZ2VyZWQgZnJvbSBhIGNvbnRyb2wgdGhhdCBjb3JyZXNwb25kcyB0byBhIHByb3BlcnR5LCBvbmx5IHRoaXMgb25lIHdpbGwgYmUgc2hvd24gaW4gdGhlIERpYWxvZyBpbml0aWFsbHkgKHNlYXJjaCBmaWVsZCBwb3B1bGF0ZWQgd2l0aCB0aGlzIHN0cmluZylcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRleHRBcnJhbmdlbWVudENoYW5nZUFjdGlvbihrZXkgPSBcIlJUQV9DT05URVhUX0FDVElPTk1FTlVfVEVYVEFSUkFOR0VcIik6IHtcblx0Y2hhbmdlVHlwZTogc3RyaW5nO1xuXHR0aXRsZTogKCkgPT4gc3RyaW5nO1xuXHR0eXBlOiBzdHJpbmc7XG5cdGRlbGVnYXRlOiB7IGdldEFubm90YXRpb25zQ2hhbmdlSW5mbzogKG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0LCBfYW5ub3RhdGlvbjogc3RyaW5nKSA9PiBBbm5vdGF0aW9uQ2hhbmdlUmV0dXJuVHlwZSB8IG51bGwgfTtcbn0ge1xuXHRyZXR1cm4ge1xuXHRcdGNoYW5nZVR5cGU6IFwidGV4dEFycmFuZ2VtZW50X1Rlc3RcIixcblx0XHR0aXRsZTogKCk6IHN0cmluZyA9PiBnZXRUZXh0KGtleSksXG5cdFx0dHlwZTogQW5ub3RhdGlvblR5cGVzLlZhbHVlTGlzdFR5cGUsXG5cdFx0ZGVsZWdhdGU6IHtcblx0XHRcdGdldEFubm90YXRpb25zQ2hhbmdlSW5mbzogKG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0LCBfYW5ub3RhdGlvbjogc3RyaW5nKTogQW5ub3RhdGlvbkNoYW5nZVJldHVyblR5cGUgfCBudWxsID0+IHtcblx0XHRcdFx0bGV0IHRlbXBsYXRlQ29tcG9uZW50ID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKG9Db250cm9sKSBhcyBUZW1wbGF0ZUNvbXBvbmVudCB8IHVuZGVmaW5lZDtcblx0XHRcdFx0aWYgKCF0ZW1wbGF0ZUNvbXBvbmVudCkge1xuXHRcdFx0XHRcdGNvbnN0IHZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KG9Db250cm9sKTtcblx0XHRcdFx0XHR0ZW1wbGF0ZUNvbXBvbmVudCA9IHZpZXc/LmdldENvbnRyb2xsZXIoKS5nZXRPd25lckNvbXBvbmVudCgpIGFzIFRlbXBsYXRlQ29tcG9uZW50IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0ZW1wbGF0ZUNvbXBvbmVudCkge1xuXHRcdFx0XHRcdGNvbnN0IHByb3BlcnRpZXMgPSBjb2xsZWN0UHJvcGVydGllcyh0ZW1wbGF0ZUNvbXBvbmVudCwgb0NvbnRyb2wsIGZpbHRlclByb3BlcnR5V2l0aFRleHRBbm5vdGF0aW9uKTtcblx0XHRcdFx0XHRpZiAocHJvcGVydGllcyAmJiBwcm9wZXJ0aWVzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdHNlcnZpY2VVcmw6IChvQ29udHJvbC5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwgfCB1bmRlZmluZWQpPy5nZXRTZXJ2aWNlVXJsKCksXG5cdFx0XHRcdFx0XHRcdHByb3BlcnRpZXM6IHByb3BlcnRpZXMubWFwKChwcm9wOiB7IHByb3BlcnR5OiBQcm9wZXJ0eTsgZW50aXR5VHlwZTogRW50aXR5VHlwZSB9KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgZGVmYXVsdFR5cGUgPVxuXHRcdFx0XHRcdFx0XHRcdFx0cHJvcC5lbnRpdHlUeXBlLmFubm90YXRpb25zLlVJPy5UZXh0QXJyYW5nZW1lbnQ/LnRvU3RyaW5nKCkgPz8gVGV4dEFycmFuZ2VtZW50VHlwZS5UZXh0Rmlyc3QudG9TdHJpbmcoKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHJvcGVydHlOYW1lOiBwcm9wLnByb3BlcnR5LmFubm90YXRpb25zLkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKCkgPz8gcHJvcC5wcm9wZXJ0eS5uYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwiL1wiICtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cHJvcC5lbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZSArXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwiL1wiICtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cHJvcC5wcm9wZXJ0eS5uYW1lICtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRjdXJyZW50VmFsdWU6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHByb3AucHJvcGVydHkuYW5ub3RhdGlvbnMuQ29tbW9uPy5UZXh0Py5hbm5vdGF0aW9ucz8uVUk/LlRleHRBcnJhbmdlbWVudD8udG9TdHJpbmcoKSA/PyBkZWZhdWx0VHlwZVxuXHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRwb3NzaWJsZVZhbHVlczogT2JqZWN0LmtleXMoVEVYVF9BUlJBTkdFTUVOVF9MQUJFTFMpLm1hcCgoc0tleSkgPT4gKHtcblx0XHRcdFx0XHRcdFx0XHRrZXk6IHNLZXksXG5cdFx0XHRcdFx0XHRcdFx0dGV4dDogVEVYVF9BUlJBTkdFTUVOVF9MQUJFTFNbc0tleSBhcyB1bmtub3duIGFzIGtleW9mIHR5cGVvZiBURVhUX0FSUkFOR0VNRU5UX0xBQkVMU11cblx0XHRcdFx0XHRcdFx0fSkpLFxuXHRcdFx0XHRcdFx0XHRwcmVTZWxlY3RlZFByb3BlcnR5OiBcIlwiIC8vIGlmIHRoZSBhY3Rpb24gaXMgdHJpZ2dlcmVkIGZyb20gYSBjb250cm9sIHRoYXQgY29ycmVzcG9uZHMgdG8gYSBwcm9wZXJ0eSwgb25seSB0aGlzIG9uZSB3aWxsIGJlIHNob3duIGluIHRoZSBEaWFsb2cgaW5pdGlhbGx5IChzZWFyY2ggZmllbGQgcG9wdWxhdGVkIHdpdGggdGhpcyBzdHJpbmcpXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7RUFXQTtFQUlBO0VBSUEsTUFBTUEsd0JBQXdCLEdBQUdDLEdBQUcsQ0FBQ0Msb0JBQW9CLENBQUMsd0JBQXdCLENBQUU7RUFFN0UsTUFBTUMsT0FBTyxHQUFHLFNBQUFBLENBQVVDLEdBQVcsRUFBVTtJQUNyRCxPQUFPSix3QkFBd0IsQ0FBQ0csT0FBTyxDQUFDQyxHQUFHLENBQUM7RUFDN0MsQ0FBQztFQUFDQyxRQUFBLENBQUFGLE9BQUEsR0FBQUEsT0FBQTtFQWFGLE1BQU1HLHVCQUF1QixHQUFHO0lBQy9CLHFD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RUFBRTtZQUN0QixNQUFNZCxVQUFVLEdBQUdhLGlCQUFpQixDQUFDQyxpQkFBaUIsRUFBRW1CLFFBQVEsRUFBRTdDLGdDQUFnQyxDQUFDO1lBQ25HLElBQUlZLFVBQVUsSUFBSUEsVUFBVSxDQUFDcUMsTUFBTSxHQUFHLENBQUMsRUFBRTtjQUN4QyxPQUFPO2dCQUNOMkIsVUFBVSxFQUFHL0IsUUFBUSxDQUFDZ0MsUUFBUSxDQUFDLENBQUMsRUFBNkJDLGFBQWEsQ0FBQyxDQUFDO2dCQUM1RWxFLFVBQVUsRUFBRUEsVUFBVSxDQUFDVyxHQUFHLENBQUV0QixJQUFvRCxJQUFLO2tCQUNwRixNQUFNdUYsV0FBVyxHQUNoQnZGLElBQUksQ0FBQ1UsVUFBVSxDQUFDVCxXQUFXLENBQUNpQixFQUFFLEVBQUVzRSxlQUFlLEVBQUVOLFFBQVEsQ0FBQyxDQUFDLElBQUksbUNBQThCQSxRQUFRLENBQUMsQ0FBQztrQkFDeEcsT0FBTztvQkFDTkosWUFBWSxFQUFFOUUsSUFBSSxDQUFDdUIsUUFBUSxDQUFDdEIsV0FBVyxDQUFDQyxNQUFNLEVBQUUrRSxLQUFLLEVBQUVDLFFBQVEsQ0FBQyxDQUFDLElBQUlsRixJQUFJLENBQUN1QixRQUFRLENBQUNtRCxJQUFJO29CQUN2RkssY0FBYyxFQUNiLEdBQUcsR0FDSC9FLElBQUksQ0FBQ1UsVUFBVSxDQUFDSSxrQkFBa0IsR0FDbEMsR0FBRyxHQUNIZCxJQUFJLENBQUN1QixRQUFRLENBQUNtRCxJQUFJLEdBQ2xCLGlGQUFpRjtvQkFDbEZNLFlBQVksRUFDWGhGLElBQUksQ0FBQ3VCLFFBQVEsQ0FBQ3RCLFdBQVcsQ0FBQ0MsTUFBTSxFQUFFQyxJQUFJLEVBQUVGLFdBQVcsRUFBRWlCLEVBQUUsRUFBRXNFLGVBQWUsRUFBRU4sUUFBUSxDQUFDLENBQUMsSUFBSUs7a0JBQzFGLENBQUM7Z0JBQ0YsQ0FBQyxDQUFDO2dCQUNGSixjQUFjLEVBQUVNLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDNUYsdUJBQXVCLENBQUMsQ0FBQ3dCLEdBQUcsQ0FBRXFFLElBQUksS0FBTTtrQkFDbkUvRixHQUFHLEVBQUUrRixJQUFJO2tCQUNUQyxJQUFJLEVBQUU5Rix1QkFBdUIsQ0FBQzZGLElBQUk7Z0JBQ25DLENBQUMsQ0FBQyxDQUFDO2dCQUNIUCxtQkFBbUIsRUFBRSxFQUFFLENBQUM7Y0FDekIsQ0FBQztZQUNGO1VBQ0Q7VUFDQSxPQUFPLElBQUk7UUFDWjtNQUNEO0lBQ0QsQ0FBQztFQUNGO0VBQUN2RixRQUFBLENBQUF3Riw4QkFBQSxHQUFBQSw4QkFBQTtFQUFBLE9BQUF4RixRQUFBO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
189
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXNvdXJjZUJ1bmRsZURlc2lnbnRpbWUiLCJMaWIiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsImdldFRleHQiLCJrZXkiLCJfZXhwb3J0cyIsIlRFWFRfQVJSQU5HRU1FTlRfTEFCRUxTIiwiZmlsdGVyUHJvcGVydHlXaXRoVGV4dEFubm90YXRpb24iLCJwcm9wIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJUZXh0IiwidW5kZWZpbmVkIiwiaGFzQ3VycmVuY3kiLCJoYXNVbml0IiwiaXNDdXJyZW5jeSIsImlzVW5pdCIsIl9jb2xsZWN0UHJvcGVydGllcyIsImVudGl0eVR5cGUiLCJwcm9wZXJ0aWVzIiwiZmlsdGVyRm4iLCJ2aXNpdGVkRW50aXR5IiwiZnVsbHlRdWFsaWZpZWROYW1lIiwicHVzaCIsImVudGl0eVByb3BlcnRpZXMiLCJmaWx0ZXIiLCJVSSIsIkhpZGRlbiIsInZhbHVlT2YiLCJ0YXJnZXRUeXBlIiwibWFwIiwicHJvcGVydHkiLCJjb2xsZWN0UHJvcGVydGllcyIsInRlbXBsYXRlQ29tcG9uZW50IiwiY29udHJvbCIsIm1ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsImNvbnRleHRQYXRoVG9Vc2UiLCJnZXRGdWxsQ29udGV4dFBhdGgiLCJidWlsZGluZ0Jsb2NrIiwiaXNBIiwiZ2V0UGFyZW50IiwibWV0YVBhdGgiLCJnZXRCaW5kaW5nQ29udGV4dCIsImNvbnRleHRNZXRhUGF0aCIsImdldE1ldGFQYXRoIiwiZ2V0UGF0aCIsImdldFByb3BlcnR5IiwidGFyZ2V0RW50aXR5IiwiTWV0YVBhdGgiLCJjb252ZXJ0VHlwZXMiLCJlIiwiTG9nIiwid2FybmluZyIsImdldENsb3Nlc3RFbnRpdHlUeXBlIiwiZ2V0VGFyZ2V0UHJvcGVydHlGcm9tRm9ybUVsZW1lbnQiLCJvQ29udHJvbCIsInRhcmdldFByb3BlcnR5IiwiZmllbGRzIiwiZ2V0RmllbGRzIiwibGVuZ3RoIiwidGFyZ2V0T2JqZWN0IiwiZ2V0TWFpblByb3BlcnR5UmVsYXRpdmVQYXRoIiwiZ2V0UmVuYW1lQWN0aW9uIiwiaXNBdEVsZW1lbnRMZXZlbCIsImFyZ3VtZW50cyIsImNoYW5nZVR5cGUiLCJ0aXRsZSIsImljb24iLCJzaW5nbGVSZW5hbWUiLCJjb250cm9sQmFzZWRSZW5hbWVDaGFuZ2VUeXBlIiwidHlwZSIsIkFubm90YXRpb25UeXBlcyIsIlN0cmluZ1R5cGUiLCJkZWxlZ2F0ZSIsImdldEFubm90YXRpb25zQ2hhbmdlSW5mbyIsIl9hbm5vdGF0aW9uIiwiQ29tcG9uZW50IiwiZ2V0T3duZXJDb21wb25lbnRGb3IiLCJ2aWV3IiwiQ29tbW9uVXRpbHMiLCJnZXRUYXJnZXRWaWV3IiwiZ2V0Q29udHJvbGxlciIsImdldE93bmVyQ29tcG9uZW50IiwidGFyZ2V0UHJvcGVydHlQYXRoIiwiZmluZCIsIm5hbWUiLCJzZXJ2aWNlVXJsIiwiZ2V0TW9kZWwiLCJnZXRTZXJ2aWNlVXJsIiwicHJvcGVydHlOYW1lIiwiYW5ub3RhdGlvblBhdGgiLCJjdXJyZW50VmFsdWUiLCJMYWJlbCIsInRvU3RyaW5nIiwicG9zc2libGVWYWx1ZXMiLCJwcmVTZWxlY3RlZFByb3BlcnR5IiwiZ2V0VGV4dEFycmFuZ2VtZW50Q2hhbmdlQWN0aW9uIiwiVmFsdWVMaXN0VHlwZSIsImRlZmF1bHRUeXBlIiwiVGV4dEFycmFuZ2VtZW50IiwiT2JqZWN0Iiwia2V5cyIsInNLZXkiLCJ0ZXh0Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJBbm5vdGF0aW9uQmFzZWRDaGFuZ2VzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5VHlwZSwgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IFRleHRBcnJhbmdlbWVudFR5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIFRlbXBsYXRlQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9UZW1wbGF0ZUNvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgQnVpbGRpbmdCbG9jayBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvQnVpbGRpbmdCbG9ja1wiO1xuaW1wb3J0IHsgY29udmVydFR5cGVzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgTWV0YVBhdGggZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTWV0YVBhdGhcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCBDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudFwiO1xuaW1wb3J0IExpYiBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuLy8gT0sgc2luY2Ugd2UgYXJlIGluIGRlc2lnbnRpbWUgd2UgY2FuIGlnbm9yZSB0aGF0IGRlcGVuZGVuY3lcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB7IGhhc0N1cnJlbmN5LCBoYXNVbml0LCBpc0N1cnJlbmN5LCBpc1VuaXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgRmllbGQgZnJvbSBcInNhcC9mZS9tYWNyb3MvRmllbGRcIjtcbmltcG9ydCB0eXBlIEZvcm1FbGVtZW50IGZyb20gXCJzYXAvdWkvbGF5b3V0L2Zvcm0vRm9ybUVsZW1lbnRcIjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVzdHJpY3RlZC1pbXBvcnRzXG5pbXBvcnQgQW5ub3RhdGlvblR5cGVzIGZyb20gXCJzYXAvdWkvcnRhL3BsdWdpbi9hbm5vdGF0aW9ucy9Bbm5vdGF0aW9uVHlwZXNcIjtcblxuY29uc3QgcmVzb3VyY2VCdW5kbGVEZXNpZ250aW1lID0gTGliLmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmUuZGVzaWdudGltZVwiKSE7XG5cbmV4cG9ydCBjb25zdCBnZXRUZXh0ID0gZnVuY3Rpb24gKGtleTogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIHJlc291cmNlQnVuZGxlRGVzaWdudGltZS5nZXRUZXh0KGtleSk7XG59O1xuXG50eXBlIEFubm90YXRpb25DaGFuZ2VSZXR1cm5UeXBlID0ge1xuXHRzZXJ2aWNlVXJsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHByb3BlcnRpZXM6IHtcblx0XHRwcm9wZXJ0eU5hbWU6IHN0cmluZztcblx0XHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHRcdGN1cnJlbnRWYWx1ZTogc3RyaW5nO1xuXHR9W107XG5cdHBvc3NpYmxlVmFsdWVzOiB7IGtleTogc3RyaW5nOyB0ZXh0OiBzdHJpbmcgfVtdO1xuXHRwcmVTZWxlY3RlZFByb3BlcnR5OiBzdHJpbmc7IC8vIGlmIHRoZSBhY3Rpb24gaXMgdHJpZ2dlcmVkIGZyb20gYSBjb250cm9sIHRoYXQgY29ycmVzcG9uZHMgdG8gYSBwcm9wZXJ0eSwgb25seSB0aGlzIG9uZSB3aWxsIGJlIHNob3duIGluIHRoZSBEaWFsb2cgaW5pdGlhbGx5IChzZWFyY2ggZmllbGQgcG9wdWxhdGVkIHdpdGggdGhpcyBzdHJpbmcpXG59O1xuXG5jb25zdCBURVhUX0FSUkFOR0VNRU5UX0xBQkVMUyA9IHtcblx0W1RleHRBcnJhbmdlbWVudFR5cGUuVGV4dE9ubHldOiBcIlRleHQgT25seVwiLFxuXHRbVGV4dEFycmFuZ2VtZW50VHlwZS5UZXh0Rmlyc3RdOiBcIlRleHQgRmlyc3RcIixcblx0W1RleHRBcnJhbmdlbWVudFR5cGUuVGV4dExhc3RdOiBcIlRleHQgTGFzdFwiLFxuXHRbVGV4dEFycmFuZ2VtZW50VHlwZS5UZXh0U2VwYXJhdGVdOiBcIklEIE9ubHlcIlxufTtcblxuZnVuY3Rpb24gZmlsdGVyUHJvcGVydHlXaXRoVGV4dEFubm90YXRpb24ocHJvcDogUHJvcGVydHkpOiBib29sZWFuIHtcblx0cmV0dXJuIHByb3AuYW5ub3RhdGlvbnMuQ29tbW9uPy5UZXh0ICE9PSB1bmRlZmluZWQgJiYgIWhhc0N1cnJlbmN5KHByb3ApICYmICFoYXNVbml0KHByb3ApICYmICFpc0N1cnJlbmN5KHByb3ApICYmICFpc1VuaXQocHJvcCk7XG59XG5cbi8qKlxuICogQ29sbGVjdHMgYWxsIHByb3BlcnRpZXMgd2l0aCBhIFRleHQgYW5ub3RhdGlvbiBmcm9tIHRoZSBnaXZlbiBlbnRpdHkgdHlwZSBhbmQgaXRzIG5hdmlnYXRpb24gcHJvcGVydGllcy5cbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBlbnRpdHkgdHlwZSB0byBzdGFydCB3aXRoXG4gKiBAcGFyYW0gcHJvcGVydGllcyBUaGUgYXJyYXkgdG8gY29sbGVjdCB0aGUgcHJvcGVydGllcyBpblxuICogQHBhcmFtIGZpbHRlckZuIEEgZmlsdGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSB3aGljaCBwcm9wZXJ0aWVzIHRvIGNvbGxlY3RcbiAqIEBwYXJhbSB2aXNpdGVkRW50aXR5IEEgbWFwIHRvIGtlZXAgdHJhY2sgb2YgdmlzaXRlZCBlbnRpdGllc1xuICovXG5mdW5jdGlvbiBfY29sbGVjdFByb3BlcnRpZXMoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdHByb3BlcnRpZXM6IHsgcHJvcGVydHk6IFByb3BlcnR5OyBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlIH1bXSxcblx0ZmlsdGVyRm46IChwcm9wOiBQcm9wZXJ0eSkgPT4gYm9vbGVhbixcblx0dmlzaXRlZEVudGl0eTogUmVjb3JkPHN0cmluZywgYm9vbGVhbj5cbik6IHZvaWQge1xuXHRpZiAodmlzaXRlZEVudGl0eVtlbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZV0pIHtcblx0XHRyZXR1cm47XG5cdH1cblx0dmlzaXRlZEVudGl0eVtlbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZV0gPSB0cnVlO1xuXHRwcm9wZXJ0aWVzLnB1c2goXG5cdFx0Li4uZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzXG5cdFx0XHQuZmlsdGVyKGZpbHRlckZuKVxuXHRcdFx0LmZpbHRlcigocHJvcCkgPT4ge1xuXHRcdFx0XHQvLyBBbHdheXMgZmlsdGVyIG91dCBVSS5IaWRkZW4gPSB0cnVlXG5cdFx0XHRcdC8vIEFsd2F5cyBmaWx0ZXIgb3V0IGNvbXBsZXggdHlwZVxuXHRcdFx0XHRpZiAocHJvcC5hbm5vdGF0aW9ucy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IHRydWUgfHwgISFwcm9wLnRhcmdldFR5cGUpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9KVxuXHRcdFx0Lm1hcCgocHJvcDogUHJvcGVydHkpID0+IHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRwcm9wZXJ0eTogcHJvcCxcblx0XHRcdFx0XHRlbnRpdHlUeXBlOiBlbnRpdHlUeXBlXG5cdFx0XHRcdH07XG5cdFx0XHR9KVxuXHQpO1xufVxuXG5mdW5jdGlvbiBjb2xsZWN0UHJvcGVydGllcyhcblx0dGVtcGxhdGVDb21wb25lbnQ6IFRlbXBsYXRlQ29tcG9uZW50LFxuXHRjb250cm9sOiBNYW5hZ2VkT2JqZWN0LFxuXHRmaWx0ZXJGbjogKHByb3A6IFByb3BlcnR5KSA9PiBib29sZWFuXG4pOiB7IHByb3BlcnR5OiBQcm9wZXJ0eTsgZW50aXR5VHlwZTogRW50aXR5VHlwZSB9W10gfCBudWxsIHtcblx0Y29uc3QgbWV0YU1vZGVsID0gdGVtcGxhdGVDb21wb25lbnQuZ2V0TWV0YU1vZGVsKCk7XG5cdGNvbnN0IGNvbnRleHRQYXRoVG9Vc2UgPSB0ZW1wbGF0ZUNvbXBvbmVudC5nZXRGdWxsQ29udGV4dFBhdGgoKTtcblx0Ly8gRmluZCBjbG9zZXN0IGJ1aWxkaW5nIGJsb2NrXG5cdGxldCBidWlsZGluZ0Jsb2NrOiBNYW5hZ2VkT2JqZWN0IHwgbnVsbCA9IGNvbnRyb2w7XG5cdHdoaWxlIChidWlsZGluZ0Jsb2NrICYmICFidWlsZGluZ0Jsb2NrLmlzQTxCdWlsZGluZ0Jsb2NrPihcInNhcC5mZS5jb3JlLmJ1aWxkaW5nQmxvY2tzLkJ1aWxkaW5nQmxvY2tcIikpIHtcblx0XHRidWlsZGluZ0Jsb2NrID0gYnVpbGRpbmdCbG9jay5nZXRQYXJlbnQoKTtcblx0fVxuXHRsZXQgbWV0YVBhdGggPSBjb250ZXh0UGF0aFRvVXNlITtcblx0aWYgKGNvbnRyb2wuZ2V0QmluZGluZ0NvbnRleHQoKSkge1xuXHRcdGNvbnN0IGNvbnRleHRNZXRhUGF0aCA9IG1ldGFNb2RlbD8uZ2V0TWV0YVBhdGgoY29udHJvbC5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCkgPz8gXCJcIik7XG5cdFx0aWYgKGNvbnRleHRNZXRhUGF0aCkge1xuXHRcdFx0bWV0YVBhdGggPSBjb250ZXh0TWV0YVBhdGg7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGJ1aWxkaW5nQmxvY2spIHtcblx0XHRtZXRhUGF0aCA9IGJ1aWxkaW5nQmxvY2suZ2V0UHJvcGVydHkoXCJtZXRhUGF0aFwiKSA/PyBjb250ZXh0UGF0aFRvVXNlO1xuXHR9XG5cdGNvbnN0IHByb3BlcnRpZXM6IHsgcHJvcGVydHk6IFByb3BlcnR5OyBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlIH1bXSA9IFtdO1xuXHRpZiAobWV0YU1vZGVsICYmIGNvbnRleHRQYXRoVG9Vc2UpIHtcblx0XHRsZXQgdGFyZ2V0RW50aXR5OiBNZXRhUGF0aDxFbnRpdHlUeXBlPjtcblx0XHR0cnkge1xuXHRcdFx0dGFyZ2V0RW50aXR5ID0gbmV3IE1ldGFQYXRoKGNvbnZlcnRUeXBlcyhtZXRhTW9kZWwpLCBtZXRhUGF0aCwgY29udGV4dFBhdGhUb1VzZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0TG9nLndhcm5pbmcoYE5vIG1ldGFtb2RlbCBvciBtZXRhUGF0aCBpcyBub3QgcmVhY2hhYmxlIHdpdGggJHttZXRhUGF0aH0gYW5kICR7Y29udGV4dFBhdGhUb1VzZX1gKTtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGNvbnN0IHZpc2l0ZWRFbnRpdHk6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG5cdFx0Ly8gQ29sbGVjdCBhbGwgcHJvcGVydGllcywgZG9uJ3QgYXBwbHkgZmlsdGVyc1xuXHRcdF9jb2xsZWN0UHJvcGVydGllcyh0YXJnZXRFbnRpdHkuZ2V0Q2xvc2VzdEVudGl0eVR5cGUoKSwgcHJvcGVydGllcywgZmlsdGVyRm4sIHZpc2l0ZWRFbnRpdHkpO1xuXHR9XG5cdHJldHVybiBwcm9wZXJ0aWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFyZ2V0UHJvcGVydHlGcm9tRm9ybUVsZW1lbnQob0NvbnRyb2w6IE1hbmFnZWRPYmplY3QpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRsZXQgdGFyZ2V0UHJvcGVydHk7XG5cdGlmIChvQ29udHJvbC5pc0E8Rm9ybUVsZW1lbnQ+KFwic2FwLnVpLmxheW91dC5mb3JtLkZvcm1FbGVtZW50XCIpKSB7XG5cdFx0Y29uc3QgZmllbGRzID0gb0NvbnRyb2wuZ2V0RmllbGRzKCk7XG5cdFx0aWYgKGZpZWxkcz8ubGVuZ3RoID4gMCAmJiBmaWVsZHNbMF0uaXNBPEZpZWxkPihcInNhcC5mZS5tYWNyb3MuRmllbGRcIikpIHtcblx0XHRcdGNvbnN0IHRhcmdldE9iamVjdCA9IGZpZWxkc1swXTtcblx0XHRcdHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0T2JqZWN0LmdldE1haW5Qcm9wZXJ0eVJlbGF0aXZlUGF0aCgpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdGFyZ2V0UHJvcGVydHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZW5hbWVBY3Rpb24oaXNBdEVsZW1lbnRMZXZlbCA9IGZhbHNlKToge1xuXHRjaGFuZ2VUeXBlOiBzdHJpbmc7XG5cdHNpbmdsZVJlbmFtZTogYm9vbGVhbjtcblx0Y29udHJvbEJhc2VkUmVuYW1lQ2hhbmdlVHlwZTogc3RyaW5nO1xuXHR0aXRsZTogKCkgPT4gc3RyaW5nO1xuXHRpY29uOiBzdHJpbmc7XG5cdHR5cGU6IHN0cmluZztcblx0ZGVsZWdhdGU6IHsgZ2V0QW5ub3RhdGlvbnNDaGFuZ2VJbmZvOiAob0NvbnRyb2w6IE1hbmFnZWRPYmplY3QsIF9hbm5vdGF0aW9uOiBzdHJpbmcpID0+IEFubm90YXRpb25DaGFuZ2VSZXR1cm5UeXBlIHwgbnVsbCB9O1xufSB7XG5cdHJldHVybiB7XG5cdFx0Y2hhbmdlVHlwZTogXCJyZW5hbWVMYWJlbFwiLFxuXHRcdHRpdGxlOiAoKTogc3RyaW5nID0+IChpc0F0RWxlbWVudExldmVsID8gZ2V0VGV4dChcIlJUQV9DT05URVhUX0FDVElPTk1FTlVfUkVOQU1FXCIpIDogZ2V0VGV4dChcIlJUQV9DT05URVhUX0FDVElPTk1FTlVfQ0hBTkdFTEFCRUxTXCIpKSxcblx0XHRpY29uOiBcInNhcC1pY29uOi8vZWRpdFwiLFxuXHRcdHNpbmdsZVJlbmFtZTogaXNBdEVsZW1lbnRMZXZlbCxcblx0XHRjb250cm9sQmFzZWRSZW5hbWVDaGFuZ2VUeXBlOiBcInJlbmFtZUZpZWxkXCIsXG5cdFx0dHlwZTogQW5ub3RhdGlvblR5cGVzLlN0cmluZ1R5cGUsXG5cdFx0ZGVsZWdhdGU6IHtcblx0XHRcdGdldEFubm90YXRpb25zQ2hhbmdlSW5mbzogKG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0LCBfYW5ub3RhdGlvbjogc3RyaW5nKTogQW5ub3RhdGlvbkNoYW5nZVJldHVyblR5cGUgfCBudWxsID0+IHtcblx0XHRcdFx0bGV0IHRlbXBsYXRlQ29tcG9uZW50ID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKG9Db250cm9sKSBhcyBUZW1wbGF0ZUNvbXBvbmVudCB8IHVuZGVmaW5lZDtcblx0XHRcdFx0aWYgKCF0ZW1wbGF0ZUNvbXBvbmVudCkge1xuXHRcdFx0XHRcdGNvbnN0IHZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KG9Db250cm9sKTtcblx0XHRcdFx0XHR0ZW1wbGF0ZUNvbXBvbmVudCA9IHZpZXc/LmdldENvbnRyb2xsZXIoKS5nZXRPd25lckNvbXBvbmVudCgpIGFzIFRlbXBsYXRlQ29tcG9uZW50IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0ZW1wbGF0ZUNvbXBvbmVudCkge1xuXHRcdFx0XHRcdGxldCB0YXJnZXRQcm9wZXJ0eTogUHJvcGVydHkgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0Y29uc3QgcHJvcGVydGllcyA9IGNvbGxlY3RQcm9wZXJ0aWVzKHRlbXBsYXRlQ29tcG9uZW50LCBvQ29udHJvbCwgKCkgPT4gdHJ1ZSk7XG5cdFx0XHRcdFx0Y29uc3QgdGFyZ2V0UHJvcGVydHlQYXRoID0gZ2V0VGFyZ2V0UHJvcGVydHlGcm9tRm9ybUVsZW1lbnQob0NvbnRyb2wpO1xuXHRcdFx0XHRcdGlmICh0YXJnZXRQcm9wZXJ0eVBhdGgpIHtcblx0XHRcdFx0XHRcdHRhcmdldFByb3BlcnR5ID0gcHJvcGVydGllcz8uZmluZCgocHJvcCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcHJvcC5wcm9wZXJ0eS5uYW1lID09PSB0YXJnZXRQcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdFx0XHR9KT8ucHJvcGVydHk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKHByb3BlcnRpZXMgJiYgcHJvcGVydGllcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRzZXJ2aWNlVXJsOiAob0NvbnRyb2wuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsIHwgdW5kZWZpbmVkKT8uZ2V0U2VydmljZVVybCgpLFxuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzLm1hcCgocHJvcDogeyBwcm9wZXJ0eTogUHJvcGVydHk7IGVudGl0eVR5cGU6IEVudGl0eVR5cGUgfSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0eU5hbWU6IGAke3Byb3AucHJvcGVydHkubmFtZX1gLFxuXHRcdFx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwiL1wiICtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cHJvcC5lbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZSArXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwiL1wiICtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cHJvcC5wcm9wZXJ0eS5uYW1lICtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxhYmVsXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRjdXJyZW50VmFsdWU6IHByb3AucHJvcGVydHkuYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKSA/PyBwcm9wLnByb3BlcnR5Lm5hbWVcblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0cG9zc2libGVWYWx1ZXM6IFtdLFxuXHRcdFx0XHRcdFx0XHRwcmVTZWxlY3RlZFByb3BlcnR5OiB0YXJnZXRQcm9wZXJ0eVxuXHRcdFx0XHRcdFx0XHRcdD8gXCIvXCIgKyB0YXJnZXRQcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWUgKyBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTGFiZWxcIlxuXHRcdFx0XHRcdFx0XHRcdDogXCJcIiAvLyBpZiB0aGUgYWN0aW9uIGlzIHRyaWdnZXJlZCBmcm9tIGEgY29udHJvbCB0aGF0IGNvcnJlc3BvbmRzIHRvIGEgcHJvcGVydHksIG9ubHkgdGhpcyBvbmUgd2lsbCBiZSBzaG93biBpbiB0aGUgRGlhbG9nIGluaXRpYWxseSAoc2VhcmNoIGZpZWxkIHBvcHVsYXRlZCB3aXRoIHRoaXMgc3RyaW5nKVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGV4dEFycmFuZ2VtZW50Q2hhbmdlQWN0aW9uKGtleSA9IFwiUlRBX0NPTlRFWFRfQUNUSU9OTUVOVV9URVhUQVJSQU5HRVwiKToge1xuXHRjaGFuZ2VUeXBlOiBzdHJpbmc7XG5cdHRpdGxlOiAoKSA9PiBzdHJpbmc7XG5cdHR5cGU6IHN0cmluZztcblx0ZGVsZWdhdGU6IHsgZ2V0QW5ub3RhdGlvbnNDaGFuZ2VJbmZvOiAob0NvbnRyb2w6IE1hbmFnZWRPYmplY3QsIF9hbm5vdGF0aW9uOiBzdHJpbmcpID0+IEFubm90YXRpb25DaGFuZ2VSZXR1cm5UeXBlIHwgbnVsbCB9O1xufSB7XG5cdHJldHVybiB7XG5cdFx0Y2hhbmdlVHlwZTogXCJ0ZXh0QXJyYW5nZW1lbnRfVGVzdFwiLFxuXHRcdHRpdGxlOiAoKTogc3RyaW5nID0+IGdldFRleHQoa2V5KSxcblx0XHR0eXBlOiBBbm5vdGF0aW9uVHlwZXMuVmFsdWVMaXN0VHlwZSxcblx0XHRkZWxlZ2F0ZToge1xuXHRcdFx0Z2V0QW5ub3RhdGlvbnNDaGFuZ2VJbmZvOiAob0NvbnRyb2w6IE1hbmFnZWRPYmplY3QsIF9hbm5vdGF0aW9uOiBzdHJpbmcpOiBBbm5vdGF0aW9uQ2hhbmdlUmV0dXJuVHlwZSB8IG51bGwgPT4ge1xuXHRcdFx0XHRsZXQgdGVtcGxhdGVDb21wb25lbnQgPSBDb21wb25lbnQuZ2V0T3duZXJDb21wb25lbnRGb3Iob0NvbnRyb2wpIGFzIFRlbXBsYXRlQ29tcG9uZW50IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRpZiAoIXRlbXBsYXRlQ29tcG9uZW50KSB7XG5cdFx0XHRcdFx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcob0NvbnRyb2wpO1xuXHRcdFx0XHRcdHRlbXBsYXRlQ29tcG9uZW50ID0gdmlldz8uZ2V0Q29udHJvbGxlcigpLmdldE93bmVyQ29tcG9uZW50KCkgYXMgVGVtcGxhdGVDb21wb25lbnQgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRlbXBsYXRlQ29tcG9uZW50KSB7XG5cdFx0XHRcdFx0Y29uc3QgcHJvcGVydGllcyA9IGNvbGxlY3RQcm9wZXJ0aWVzKHRlbXBsYXRlQ29tcG9uZW50LCBvQ29udHJvbCwgZmlsdGVyUHJvcGVydHlXaXRoVGV4dEFubm90YXRpb24pO1xuXHRcdFx0XHRcdGlmIChwcm9wZXJ0aWVzICYmIHByb3BlcnRpZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0c2VydmljZVVybDogKG9Db250cm9sLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCB8IHVuZGVmaW5lZCk/LmdldFNlcnZpY2VVcmwoKSxcblx0XHRcdFx0XHRcdFx0cHJvcGVydGllczogcHJvcGVydGllcy5tYXAoKHByb3A6IHsgcHJvcGVydHk6IFByb3BlcnR5OyBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlIH0pID0+IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBkZWZhdWx0VHlwZSA9XG5cdFx0XHRcdFx0XHRcdFx0XHRwcm9wLmVudGl0eVR5cGUuYW5ub3RhdGlvbnMuVUk/LlRleHRBcnJhbmdlbWVudD8udG9TdHJpbmcoKSA/PyBUZXh0QXJyYW5nZW1lbnRUeXBlLlRleHRGaXJzdC50b1N0cmluZygpO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0eU5hbWU6IHByb3AucHJvcGVydHkuYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKSA/PyBwcm9wLnByb3BlcnR5Lm5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCIvXCIgK1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRwcm9wLmVudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lICtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCIvXCIgK1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRwcm9wLnByb3BlcnR5Lm5hbWUgK1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dEBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRcIixcblx0XHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRWYWx1ZTpcblx0XHRcdFx0XHRcdFx0XHRcdFx0cHJvcC5wcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db21tb24/LlRleHQ/LmFubm90YXRpb25zPy5VST8uVGV4dEFycmFuZ2VtZW50Py50b1N0cmluZygpID8/IGRlZmF1bHRUeXBlXG5cdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdHBvc3NpYmxlVmFsdWVzOiBPYmplY3Qua2V5cyhURVhUX0FSUkFOR0VNRU5UX0xBQkVMUykubWFwKChzS2V5KSA9PiAoe1xuXHRcdFx0XHRcdFx0XHRcdGtleTogc0tleSxcblx0XHRcdFx0XHRcdFx0XHR0ZXh0OiBURVhUX0FSUkFOR0VNRU5UX0xBQkVMU1tzS2V5IGFzIHVua25vd24gYXMga2V5b2YgdHlwZW9mIFRFWFRfQVJSQU5HRU1FTlRfTEFCRUxTXVxuXHRcdFx0XHRcdFx0XHR9KSksXG5cdFx0XHRcdFx0XHRcdHByZVNlbGVjdGVkUHJvcGVydHk6IFwiXCIgLy8gaWYgdGhlIGFjdGlvbiBpcyB0cmlnZ2VyZWQgZnJvbSBhIGNvbnRyb2wgdGhhdCBjb3JyZXNwb25kcyB0byBhIHByb3BlcnR5LCBvbmx5IHRoaXMgb25lIHdpbGwgYmUgc2hvd24gaW4gdGhlIERpYWxvZyBpbml0aWFsbHkgKHNlYXJjaCBmaWVsZCBwb3B1bGF0ZWQgd2l0aCB0aGlzIHN0cmluZylcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxu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
@@ -10,11 +10,11 @@ import Component from "sap/ui/core/Component";
10
10
  import Lib from "sap/ui/core/Lib";
11
11
  import type ODataModel from "sap/ui/model/odata/v4/ODataModel";
12
12
  // OK since we are in designtime we can ignore that dependency
13
+ import CommonUtils from "sap/fe/core/CommonUtils";
13
14
  import { hasCurrency, hasUnit, isCurrency, isUnit } from "sap/fe/core/templating/PropertyHelper";
14
15
  import type Field from "sap/fe/macros/Field";
15
16
  import type FormElement from "sap/ui/layout/form/FormElement";
16
17
  // eslint-disable-next-line @typescript-eslint/no-restricted-imports
17
- import CommonUtils from "sap/fe/core/CommonUtils";
18
18
  import AnnotationTypes from "sap/ui/rta/plugin/annotations/AnnotationTypes";
19
19
 
20
20
  const resourceBundleDesigntime = Lib.getResourceBundleFor("sap.fe.core.designtime")!;
@@ -95,7 +95,12 @@ function collectProperties(
95
95
  buildingBlock = buildingBlock.getParent();
96
96
  }
97
97
  let metaPath = contextPathToUse!;
98
- if (buildingBlock) {
98
+ if (control.getBindingContext()) {
99
+ const contextMetaPath = metaModel?.getMetaPath(control.getBindingContext()?.getPath() ?? "");
100
+ if (contextMetaPath) {
101
+ metaPath = contextMetaPath;
102
+ }
103
+ } else if (buildingBlock) {
99
104
  metaPath = buildingBlock.getProperty("metaPath") ?? contextPathToUse;
100
105
  }
101
106
  const properties: { property: Property; entityType: EntityType }[] = [];
@@ -4,7 +4,7 @@
4
4
  "id": "sap.fe.core.fpm",
5
5
  "type": "component",
6
6
  "applicationVersion": {
7
- "version": "1.136.10"
7
+ "version": "1.136.11"
8
8
  },
9
9
  "title": "Object Page",
10
10
  "tags": {