@sapui5/sap.fe.core 1.136.10 → 1.136.12

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 (60) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AppStateHandler.js +3 -2
  4. package/src/sap/fe/core/AppStateHandler.ts +4 -1
  5. package/src/sap/fe/core/PageController.controller.js +10 -0
  6. package/src/sap/fe/core/PageController.controller.ts +3 -0
  7. package/src/sap/fe/core/TemplateComponent.js +1 -1
  8. package/src/sap/fe/core/TemplateComponent.ts +1 -3
  9. package/src/sap/fe/core/controllerextensions/EditFlow.js +62 -20
  10. package/src/sap/fe/core/controllerextensions/EditFlow.ts +98 -38
  11. package/src/sap/fe/core/controllerextensions/InternalRouting.js +29 -16
  12. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +42 -18
  13. package/src/sap/fe/core/controllerextensions/MessageHandler.js +1 -1
  14. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +1 -0
  15. package/src/sap/fe/core/controllerextensions/Routing.js +6 -2
  16. package/src/sap/fe/core/controllerextensions/Routing.ts +4 -1
  17. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +8 -1
  18. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +8 -0
  19. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +2 -1
  20. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +1 -0
  21. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +11 -9
  22. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +22 -9
  23. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +2 -1
  24. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +1 -0
  25. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +29 -1
  26. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +32 -0
  27. package/src/sap/fe/core/converters/controls/Common/Action.js +17 -2
  28. package/src/sap/fe/core/converters/controls/Common/Action.ts +23 -2
  29. package/src/sap/fe/core/converters/controls/Common/Table.js +54 -46
  30. package/src/sap/fe/core/converters/controls/Common/Table.ts +65 -45
  31. package/src/sap/fe/core/converters/controls/Common/table/Columns.js +26 -6
  32. package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +32 -10
  33. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +14 -19
  34. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +17 -28
  35. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +5 -2
  36. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +7 -1
  37. package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +8 -3
  38. package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +7 -2
  39. package/src/sap/fe/core/formatters/FPMFormatter.js +2 -2
  40. package/src/sap/fe/core/formatters/FPMFormatter.ts +1 -1
  41. package/src/sap/fe/core/fpm/manifest.json +1 -1
  42. package/src/sap/fe/core/helpers/AppStartupHelper.js +75 -18
  43. package/src/sap/fe/core/helpers/AppStartupHelper.ts +79 -25
  44. package/src/sap/fe/core/helpers/MetaModelFunction.js +10 -3
  45. package/src/sap/fe/core/helpers/MetaModelFunction.ts +9 -3
  46. package/src/sap/fe/core/library.js +1 -1
  47. package/src/sap/fe/core/messagebundle_da.properties +1 -1
  48. package/src/sap/fe/core/messagebundle_es.properties +1 -1
  49. package/src/sap/fe/core/messagebundle_fr.properties +1 -1
  50. package/src/sap/fe/core/messagebundle_ko.properties +4 -4
  51. package/src/sap/fe/core/messagebundle_no.properties +2 -2
  52. package/src/sap/fe/core/messagebundle_uk.properties +2 -2
  53. package/src/sap/fe/core/messagebundle_vi.properties +4 -4
  54. package/src/sap/fe/core/rootView/Fcl.controller.js +1 -1
  55. package/src/sap/fe/core/rootView/Fcl.controller.ts +6 -1
  56. package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +17 -29
  57. package/src/sap/fe/core/services/CollaborationManagerServiceFactory.ts +23 -26
  58. package/src/sap/fe/core/services/RoutingServiceFactory.js +11 -5
  59. package/src/sap/fe/core/services/RoutingServiceFactory.ts +16 -7
  60. package/ui5.yaml +1 -0
@@ -24,6 +24,7 @@ import Library from "sap/ui/core/Lib";
24
24
  import type { RoutingTarget } from "sap/ui/core/Manifest";
25
25
  import ControllerExtension from "sap/ui/core/mvc/ControllerExtension";
26
26
  import OverrideExecution from "sap/ui/core/mvc/OverrideExecution";
27
+ import type View from "sap/ui/core/mvc/View";
27
28
  import type Router from "sap/ui/core/routing/Router";
28
29
  import type Binding from "sap/ui/model/Binding";
29
30
  import type Context from "sap/ui/model/odata/v4/Context";
@@ -293,8 +294,28 @@ class InternalRouting extends ControllerExtension {
293
294
  }
294
295
  }
295
296
 
296
- this.removeTransitionMessagesForPreviousContext();
297
- return this._oRoutingService.navigateToContext(context, parameters, this._oView.getViewData(), this._oTargetInformation);
297
+ if (parameters.reason !== NavigationReason.EditFlowAction) {
298
+ this.removeTransitionMessagesForPreviousContext();
299
+ }
300
+ let skipHashGuardCheck;
301
+ const hiddenDraftEnabled = (this._oAppComponent?.getEnvironmentCapabilities()?.getCapabilities()?.HiddenDraft as HiddenDraft)
302
+ ?.enabled;
303
+ const isDocumentModified = this._oAppComponent?.getModel("ui")?.getProperty(UiModelConstants.DocumentModified) ?? true;
304
+ if (
305
+ this._oAppComponent.getRootViewController().isFclEnabled() &&
306
+ this.getFCLLevel() === 0 &&
307
+ hiddenDraftEnabled &&
308
+ !isDocumentModified
309
+ ) {
310
+ skipHashGuardCheck = true;
311
+ }
312
+ return this._oRoutingService.navigateToContext(
313
+ context,
314
+ parameters,
315
+ this._oView.getViewData(),
316
+ this._oTargetInformation,
317
+ skipHashGuardCheck
318
+ );
298
319
  }
299
320
 
300
321
  /**
@@ -424,7 +445,10 @@ class InternalRouting extends ControllerExtension {
424
445
  */
425
446
  async navigateToMessagePage(sErrorMessage: string, mParameters: NavigationToErrorPageResult): Promise<boolean> {
426
447
  mParameters = mParameters || {};
427
- if (this._oRouterProxy.getHash().includes("i-action=create") || this._oRouterProxy.getHash().includes("i-action=autoCreate")) {
448
+ const navToCreateHash =
449
+ mParameters.showMessagePageOnCreateFailure !== true &&
450
+ (this._oRouterProxy.getHash().includes("i-action=create") || this._oRouterProxy.getHash().includes("i-action=autoCreate"));
451
+ if (navToCreateHash) {
428
452
  return this._oRouterProxy.navToHash(this._oRoutingService.getDefaultCreateHash());
429
453
  } else {
430
454
  return this._oAppComponent.getRootViewController().displayErrorPage(sErrorMessage, mParameters, this.getFCLLevel());
@@ -589,9 +613,7 @@ class InternalRouting extends ControllerExtension {
589
613
  if (this._oPageComponent && this._oPageComponent.createDeferredContext) {
590
614
  this._oPageComponent.createDeferredContext(
591
615
  targetPath,
592
- navigationParameters.createOnNavigateParameters?.listBinding,
593
- navigationParameters.createOnNavigateParameters?.parentContext,
594
- navigationParameters.createOnNavigateParameters?.data,
616
+ navigationParameters.createOnNavigateParameters ?? {},
595
617
  !!navigationParameters.bActionCreate
596
618
  );
597
619
  }
@@ -1048,22 +1070,24 @@ class InternalRouting extends ControllerExtension {
1048
1070
 
1049
1071
  /**
1050
1072
  * Sets the binding context of the page or the component.
1051
- * @param oContext The binding context
1073
+ * @param context The binding context
1052
1074
  */
1053
- _setBindingContext(oContext: Context | null): void {
1054
- let oPreviousContext, oTargetControl;
1075
+ _setBindingContext(context: Context | null): void {
1076
+ let previousContext: Context, targetControl: View | EnhanceWithUI5<TemplateComponent>;
1055
1077
  if (this._oPageComponent) {
1056
- oPreviousContext = this._oPageComponent.getBindingContext() as Context;
1057
- oTargetControl = this._oPageComponent;
1078
+ previousContext = this._oPageComponent.getBindingContext() as Context;
1079
+ targetControl = this._oPageComponent;
1058
1080
  } else {
1059
- oPreviousContext = this._oView.getBindingContext();
1060
- oTargetControl = this._oView;
1081
+ previousContext = this._oView.getBindingContext();
1082
+ targetControl = this._oView;
1061
1083
  }
1062
-
1063
- oTargetControl.setBindingContext(oContext);
1064
-
1065
- if (oPreviousContext?.isKeepAlive() && oPreviousContext !== oContext) {
1066
- this._setKeepAlive(oPreviousContext, false);
1084
+ targetControl.setBindingContext(context);
1085
+ if (previousContext?.isKeepAlive() && previousContext !== context) {
1086
+ const rootViewController = this._oAppComponent.getRootViewController();
1087
+ /* Before deleting the bindingContext, we ensure it's not also used in another page.*/
1088
+ if (!rootViewController.getInstancedViews().some((pageView: View) => pageView.getBindingContext?.() === previousContext)) {
1089
+ this._setKeepAlive(previousContext, false);
1090
+ }
1067
1091
  }
1068
1092
  }
1069
1093
 
@@ -465,4 +465,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/uid", "
465
465
  }(ControllerExtension), _applyDecoratedDescriptor(_class2.prototype, "onInit", [_dec2], Object.getOwnPropertyDescriptor(_class2.prototype, "onInit"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getShowBoundMessagesInMessageDialog", [_dec3, _dec4], Object.getOwnPropertyDescriptor(_class2.prototype, "getShowBoundMessagesInMessageDialog"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "filterContextBoundMessages", [_dec5, _dec6], Object.getOwnPropertyDescriptor(_class2.prototype, "filterContextBoundMessages"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "beforeShowMessageButton", [_dec7, _dec8], Object.getOwnPropertyDescriptor(_class2.prototype, "beforeShowMessageButton"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "showMessageDialog", [_dec9, _dec10], Object.getOwnPropertyDescriptor(_class2.prototype, "showMessageDialog"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "removeTransitionMessages", [_dec11], Object.getOwnPropertyDescriptor(_class2.prototype, "removeTransitionMessages"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "showMessages", [_dec12, _dec13], Object.getOwnPropertyDescriptor(_class2.prototype, "showMessages"), _class2.prototype), _class2)) || _class);
466
466
  return MessageHandler;
467
467
  }, false);
468
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNZXNzYWdlSGFuZGxlciIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwibWV0aG9kT3ZlcnJpZGUiLCJfZGVjMyIsInByaXZhdGVFeHRlbnNpb24iLCJfZGVjNCIsImV4dGVuc2libGUiLCJPdmVycmlkZUV4ZWN1dGlvbiIsIkluc3RlYWQiLCJfZGVjNSIsIl9kZWM2IiwiX2RlYzciLCJwdWJsaWNFeHRlbnNpb24iLCJfZGVjOCIsIl9kZWM5IiwiX2RlYzEwIiwiZmluYWxFeHRlbnNpb24iLCJfZGVjMTEiLCJfZGVjMTIiLCJfZGVjMTMiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0NvbnRyb2xsZXJFeHRlbnNpb24iLCJfdGhpcyIsImNhbGwiLCJzdHJpY3RXYXJuaW5nTWVzc2FnZXMiLCJob2xkS2V5cyIsImhvbGRNc2dzVG9TaG93IiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJvbkluaXQiLCJpbnRlcm5hbE1vZGVsIiwiYmFzZSIsImdldEFwcENvbXBvbmVudCIsImdldE1vZGVsIiwic2V0UHJvcGVydHkiLCJ1bmRlZmluZWQiLCJQcm9taXNlIiwicmVzb2x2ZSIsImFkZFdhcm5pbmdNZXNzYWdlc1RvTWVzc2FnZUhhbmRsZXIiLCJhTWVzc2FnZXMiLCJjb25jYXQiLCJpc1N0cmljdFdhcm5pbmdNZXNzYWdlIiwib01lc3NhZ2UiLCJmaW5kIiwibWVzc2FnZSIsImdldENvZGUiLCJnZXRNZXNzYWdlIiwiZ2V0VHlwZSIsImdldERlc2NyaXB0aW9uVXJsIiwiZGVlcEVxdWFsIiwiZ2V0VGFyZ2V0cyIsImdldFBlcnNpc3RlbnQiLCJjbGVhclN0cmljdFdhcm5pbmdNZXNzYWdlcyIsImZpbHRlckVycm9yTWVzc2FnZXMiLCJtZXNzYWdlcyIsImZpbHRlciIsIk1lc3NhZ2VUeXBlIiwiRXJyb3IiLCJnZXRTaG93Qm91bmRNZXNzYWdlc0luTWVzc2FnZURpYWxvZyIsImZpbHRlckNvbnRleHRCb3VuZE1lc3NhZ2VzIiwidHJhbnNpdGlvbk1lc3NhZ2VzIiwiY29udGV4dCIsImJlZm9yZVNob3dNZXNzYWdlQnV0dG9uIiwiX21lc3NhZ2VEZXRhaWxzIiwicmVnaXN0ZXJUb0hvbGRNZXNzYWdlcyIsImtleSIsInVuaXF1ZUtleSIsInVpZCIsImluY2x1ZGVzIiwicHVzaCIsInJlc2V0SG9sZEtleXMiLCJzaG93TWVzc2FnZURpYWxvZyIsIm1QYXJhbWV0ZXJzIiwiZ2V0UHJvcGVydHkiLCJtZXNzYWdlc0luTW9kZWwiLCJNZXNzYWdpbmciLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXREYXRhIiwiZHVwbGljYXRlV2FybmluZ01lc3NhZ2UiLCJyZW1vdmVNZXNzYWdlcyIsImN1c3RvbU1lc3NhZ2VzIiwib09QSW50ZXJuYWxCaW5kaW5nQ29udGV4dCIsImdldFZpZXciLCJnZXRCaW5kaW5nQ29udGV4dCIsInZpZXdUeXBlIiwiZ2V0Vmlld0RhdGEiLCJjb252ZXJ0ZXJUeXBlIiwiaXNPcGVyYXRpb25EaWFsb2dPcGVuIiwiYlNob3dCb3VuZE1lc3NhZ2VzIiwib0JpbmRpbmdDb250ZXh0IiwicmVqZWN0Iiwic2V0VGltZW91dCIsInByb2Nlc3NBbmRTaG93TWVzc2FnZXMiLCJiaW5kIiwicGFyYW1ldGVycyIsImJpbmRpbmdDb250ZXh0Iiwic2hvd0JvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwic3VjY2VzcyIsImZhaWx1cmUiLCJjb25jdXJyZW50RWRpdEZsYWciLCJjb250cm9sIiwic0FjdGlvbk5hbWUiLCJvbkJlZm9yZVNob3dNZXNzYWdlIiwidW5Ib2xkS2V5IiwiZm9yY2VTaG93VUlFbGVtZW50Iiwib3ZlcnJpZGVVSURlY2lzaW9uIiwic2hvd0JvdW5kU3RhdGVNZXNzYWdlcyIsIm5ld1VJRGVjaXNpb25zIiwibWVzc2FnZUhhbmRsaW5nIiwiZ2V0VUlEZWNpc2lvbnMiLCJnZXRSZXNvdXJjZU1vZGVsIiwidXBkYXRlVUlEZWNpc2lvbnMiLCJ1aUVsZW1lbnRJc0F2YWlsYWJsZSIsInRoZW4iLCJyZW1vdmVIb2xkS2V5IiwiZ2V0SWQiLCJzaG93TWVzc2FnZXNXaXRoQ29uZHRpb25zIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwic2hvd1VJRWxlbWVudCIsImNoZWNrVG9TaG93VUlFbGVtZW50IiwicmV0Iiwic2hvd01lc3NhZ2VzSW5VSSIsImVyciIsIkxvZyIsImVycm9yIiwiaW5mbyIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsImtlZXBCb3VuZE1lc3NhZ2UiLCJrZWVwVW5ib3VuZE1lc3NhZ2UiLCJzUGF0aFRvQmVSZW1vdmVkIiwicmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwiX2NoZWNrTmF2aWdhdGlvblRvRXJyb3JQYWdlIiwiYVVuYm91bmRNZXNzYWdlcyIsImdldE1lc3NhZ2VzIiwiYlNob3dCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsImFCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsImFDdXN0b21NZXNzYWdlcyIsImJJc1N0aWNreUVkaXRNb2RlIiwiQ29tbW9uVXRpbHMiLCJpc1N0aWNreUVkaXRNb2RlIiwibU1lc3NhZ2VQYWdlUGFyYW1ldGVycyIsImlzRGF0YVJlY2VpdmVkRXJyb3IiLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwibmF2aWdhdGVCYWNrVG9PcmlnaW4iLCJlcnJvclR5cGUiLCJpc0luaXRpYWxMb2FkNTAzRXJyb3IiLCJvVGVjaG5pY2FsRGV0YWlscyIsImdldFRlY2huaWNhbERldGFpbHMiLCJodHRwU3RhdHVzIiwiX2dldEhUVFA1MDNNZXNzYWdlUGFyYW1ldGVycyIsInRlY2huaWNhbERldGFpbHMiLCJtZXNzYWdlUGFnZVBhcmFtZXRlcnMiLCJzZWNvbmRzQmVmb3JlUmV0cnkiLCJyZXRyeUFmdGVyIiwiX2dldFNlY29uZHNCZWZvcmVSZXRyeUFmdGVyIiwicmV0cnlBZnRlck1lc3NhZ2UiLCJnZXRSZXRyeUFmdGVyTWVzc2FnZSIsImRSZXRyeUFmdGVyIiwiZEN1cnJlbnREYXRlVGltZSIsIkRhdGUiLCJpQ3VycmVudERhdGVUaW1lSW5NaWxsaVNlY29uZHMiLCJnZXRUaW1lIiwiaVJldHJ5QWZ0ZXJEYXRlVGltZUluTWlsbGlTZWNvbmRzIiwiaVNlY29uZHNCZWZvcmVSZXRyeSIsIm9sZFVJRGVjaXNpb25zIiwiYWxsTWVzc2FnZXNUb1Nob3ciLCJtZXJnZWRVSURlY2lzaW9uIiwibWVzc2FnZXNUb1Nob3ciLCJBcnJheSIsImZyb20iLCJTZXQiLCJlbGVtZW50cyIsInVpRWxlbWVudFRvVXNlIiwiY29udGV4dE5lZWRzRXRhZ1JlZnJlc2giLCJjb250YWluc0JvdW5kVHJhbnNpdGlvbiIsImluS2V5Iiwic3BsaWNlIiwiaW5kZXhPZiIsImhvbGRNZXNzYWdlc0ZvckNvbnRyb2wiLCJpZGVudGlmaWVyIiwicmVsZWFzZUhvbGRCeUNvbnRyb2wiLCJzaG93TWVzc2FnZXMiLCJtZXNzYWdlUGFnZU5hdmlnYXRpb25DYWxsYmFjayIsImhhbmRsZVNoZWxsQmFjayIsInNoZWxsQmFjayIsIm9SZXNvdXJjZUJ1bmRsZSIsIkxpYnJhcnkiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsIl9yb3V0aW5nIiwibmF2aWdhdGVUb01lc3NhZ2VQYWdlIiwiZ2V0VGV4dCIsImNhdGNoIiwiQ29udHJvbGxlckV4dGVuc2lvbiIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk1lc3NhZ2VIYW5kbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IGRlZXBFcXVhbCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwRXF1YWxcIjtcbmltcG9ydCB1aWQgZnJvbSBcInNhcC9iYXNlL3V0aWwvdWlkXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXh0ZW5zaWJsZSwgZmluYWxFeHRlbnNpb24sIG1ldGhvZE92ZXJyaWRlLCBwcml2YXRlRXh0ZW5zaW9uLCBwdWJsaWNFeHRlbnNpb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHtcblx0TWVzc2FnZVRlY2huaWNhbERldGFpbHMsXG5cdE1lc3NhZ2VVSURlY2lzaW9ucyxcblx0U2hvd01lc3NhZ2VQYXJhbWV0ZXJzLFxuXHRTdXBwb3J0ZWRVSUVsZW1lbnRcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL21lc3NhZ2VIYW5kbGVyL21lc3NhZ2VIYW5kbGluZ1wiO1xuaW1wb3J0IG1lc3NhZ2VIYW5kbGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvbWVzc2FnZUhhbmRsZXIvbWVzc2FnZUhhbmRsaW5nXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgTWVzc2FnaW5nIGZyb20gXCJzYXAvdWkvY29yZS9NZXNzYWdpbmdcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcbmltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCIuLi9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcblxudHlwZSBPYmplY3RXaXRoQ29udmVydGVyVHlwZSA9IG9iamVjdCAmIHtcblx0Y29udmVydGVyVHlwZTogc3RyaW5nO1xufTtcbnR5cGUgTmF2aWdhdGlvblRvRXJyb3JQYWdlUGFyYW1ldGVyID0ge1xuXHRjdXN0b21NZXNzYWdlcz86IEN1c3RvbU1lc3NhZ2VbXTtcblx0Y29uY3VycmVudEVkaXRGbGFnPzogYm9vbGVhbjtcblx0aXNEYXRhUmVjZWl2ZWRFcnJvcj86IGJvb2xlYW47XG5cdHRpdGxlPzogc3RyaW5nO1xuXHRkZXNjcmlwdGlvbj86IHN0cmluZztcblx0aXNJbml0aWFsTG9hZDUwM0Vycm9yPzogYm9vbGVhbjtcbn07XG5leHBvcnQgdHlwZSBOYXZpZ2F0aW9uVG9FcnJvclBhZ2VSZXN1bHQgPSB7XG5cdHRpdGxlPzogc3RyaW5nO1xuXHRkZXNjcmlwdGlvbj86IHN0cmluZztcblx0ZXJyb3JUeXBlPzogc3RyaW5nO1xuXHRuYXZpZ2F0ZUJhY2tUb09yaWdpbj86IGJvb2xlYW47XG5cdGhhbmRsZVNoZWxsQmFjaz86IGJvb2xlYW47XG59O1xuZXhwb3J0IHR5cGUgQ3VzdG9tTWVzc2FnZSA9IHtcblx0Y29kZTogc3RyaW5nO1xuXHR0ZXh0OiBzdHJpbmc7XG5cdHBlcnNpc3RlbnQ6IGJvb2xlYW47XG5cdHR5cGU6IE1lc3NhZ2VUeXBlO1xufTtcbmV4cG9ydCB0eXBlIFNob3dNZXNzYWdlRGlhbG9nUGFyYW1ldGVyID0ge1xuXHRjdXN0b21NZXNzYWdlcz86IEN1c3RvbU1lc3NhZ2VbXTtcblx0aXNPcGVyYXRpb25EaWFsb2dPcGVuPzogYm9vbGVhbjtcblx0Y29udGV4dD86IENvbnRleHQ7XG5cdGNvbmN1cnJlbnRFZGl0RmxhZz86IGJvb2xlYW47XG5cdGNvbnRyb2w/OiBDb250cm9sO1xuXHRzQWN0aW9uTmFtZT86IHN0cmluZztcblx0YVNlbGVjdGVkQ29udGV4dHM/OiBDb250ZXh0IHwgQ29udGV4dFtdIHwgbnVsbDtcblx0b25CZWZvcmVTaG93TWVzc2FnZT86IChtZXNzYWdlczogTWVzc2FnZVtdLCBzaG93TWVzc2FnZVBhcmFtZXRlcnM6IFNob3dNZXNzYWdlUGFyYW1ldGVycykgPT4gU2hvd01lc3NhZ2VQYXJhbWV0ZXJzO1xuXHR1bkhvbGRLZXk/OiBzdHJpbmc7XG5cdG92ZXJyaWRlVUlEZWNpc2lvbj86IGJvb2xlYW47XG5cdHNob3dCb3VuZFN0YXRlTWVzc2FnZXM/OiBib29sZWFuO1xuXHRib3VuZEFjdGlvbk5hbWU/OiBzdHJpbmc7XG5cdGVudGl0eVNldD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFNob3dNZXNzYWdlc1BhcmFtZXRlcnMgPSBTaG93TWVzc2FnZURpYWxvZ1BhcmFtZXRlciAmIHtcblx0bWVzc2FnZVBhZ2VOYXZpZ2F0aW9uQ2FsbGJhY2s/OiBGdW5jdGlvbjtcblx0c2hlbGxCYWNrPzogRnVuY3Rpb24gfCBib29sZWFuO1xuXHRpc0RhdGFSZWNlaXZlZEVycm9yPzogYm9vbGVhbjtcblx0aXNJbml0aWFsTG9hZDUwM0Vycm9yPzogYm9vbGVhbjtcblx0dGl0bGU/OiBzdHJpbmc7XG5cdGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufTtcbi8qKlxuICpcbiAqIERlZmluZXMgdGhlIG1lc3NhZ2UgZGV0YWlsIHJlbGV2YW50IGZvciB0aGUgTWVzc2FnZUJ1dHRvbiBidWlsZGluZyBibG9jayB0byBkaXNwbGF5IGEgcG9wb3Zlci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgTWVzc2FnZURldGFpbCA9IHtcblx0bWVzc2FnZTogTWVzc2FnZTtcblx0Z3JvdXBOYW1lPzogc3RyaW5nO1xuXHRhY3RpdmVUaXRsZUhhbmRsZXI/OiBGdW5jdGlvbjtcbn07XG5cbi8qKlxuICogQSBjb250cm9sbGVyIGV4dGVuc2lvbiBvZmZlcmluZyBtZXNzYWdlIGhhbmRsaW5nLlxuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHB1YmxpY1xuICogQGV4cGVyaW1lbnRhbCBBcyBvZiB2ZXJzaW9uIDEuOTAuMFxuICogQHNpbmNlIDEuOTAuMFxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5NZXNzYWdlSGFuZGxlclwiKVxuY2xhc3MgTWVzc2FnZUhhbmRsZXIgZXh0ZW5kcyBDb250cm9sbGVyRXh0ZW5zaW9uIHtcblx0cHJpdmF0ZSBzdHJpY3RXYXJuaW5nTWVzc2FnZXM6IE1lc3NhZ2VbXSA9IFtdO1xuXG5cdHByb3RlY3RlZCBiYXNlITogUGFnZUNvbnRyb2xsZXI7XG5cblx0cHJvdGVjdGVkIGhvbGRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdHByaXZhdGUgaG9sZE1zZ3NUb1Nob3cgPSBmYWxzZTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHR9XG5cblx0QG1ldGhvZE92ZXJyaWRlKClcblx0b25Jbml0KCk6IHZvaWQge1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9tZXNzYWdlVUlEZWNpc2lvblwiLCB1bmRlZmluZWQpO1xuXHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvbWVzc2FnZVVJRWxlbWVudElzQXZhaWxhYmxlXCIsIFByb21pc2UucmVzb2x2ZSgpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIHdhcm5pbmcgbWVzc2FnZXMgdG8gdGhlIG1lc3NhZ2UgaGFuZGxlci5cblx0ICogQHBhcmFtIGFNZXNzYWdlcyBUaGUgc3RyaWN0IHdhcm5pbmcgbWVzc2FnZXMgdG8gYmUgYWRkZWRcblx0ICovXG5cdGFkZFdhcm5pbmdNZXNzYWdlc1RvTWVzc2FnZUhhbmRsZXIoYU1lc3NhZ2VzOiBNZXNzYWdlW10pOiB2b2lkIHtcblx0XHR0aGlzLnN0cmljdFdhcm5pbmdNZXNzYWdlcyA9IHRoaXMuc3RyaWN0V2FybmluZ01lc3NhZ2VzLmNvbmNhdChhTWVzc2FnZXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgd2hldGhlciBvciBub3QgYSBtZXNzYWdlIGlzIGEgc3RyaWN0IHdhcm5pbmcgbWVzc2FnZSB0aGF0IHdhcyByZWNlaXZlZCBwcmV2aW91c2x5LlxuXHQgKiBAcGFyYW0gb01lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gYmUgY2hlY2tlZFxuXHQgKiBAcmV0dXJucyBXaGV0aGVyIG9yIG5vdCB0aGUgbWVzc2FnZSBpcyBhIHN0cmljdCB3YXJuaW5nIG1lc3NhZ2Vcblx0ICovXG5cdGlzU3RyaWN0V2FybmluZ01lc3NhZ2Uob01lc3NhZ2U6IE1lc3NhZ2UpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0dGhpcy5zdHJpY3RXYXJuaW5nTWVzc2FnZXMuZmluZCgobWVzc2FnZSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdG1lc3NhZ2UuZ2V0Q29kZSgpID09PSBvTWVzc2FnZS5nZXRDb2RlKCkgJiZcblx0XHRcdFx0XHRtZXNzYWdlLmdldE1lc3NhZ2UoKSA9PT0gb01lc3NhZ2UuZ2V0TWVzc2FnZSgpICYmXG5cdFx0XHRcdFx0bWVzc2FnZS5nZXRUeXBlKCkgPT09IG9NZXNzYWdlLmdldFR5cGUoKSAmJlxuXHRcdFx0XHRcdG1lc3NhZ2UuZ2V0RGVzY3JpcHRpb25VcmwoKSA9PT0gb01lc3NhZ2UuZ2V0RGVzY3JpcHRpb25VcmwoKSAmJlxuXHRcdFx0XHRcdGRlZXBFcXVhbChtZXNzYWdlLmdldFRhcmdldHMoKSwgb01lc3NhZ2UuZ2V0VGFyZ2V0cygpKSAmJlxuXHRcdFx0XHRcdG1lc3NhZ2UuZ2V0UGVyc2lzdGVudCgpID09PSBvTWVzc2FnZS5nZXRQZXJzaXN0ZW50KClcblx0XHRcdFx0KTtcblx0XHRcdH0pICE9PSB1bmRlZmluZWRcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENsZWFycyBhbGwgc3RyaWN0IHdhcm5pbmcgbWVzc2FnZXMgZnJvbSB0aGUgbWVzc2FnZSBoYW5kbGVyLlxuXHQgKi9cblx0Y2xlYXJTdHJpY3RXYXJuaW5nTWVzc2FnZXMoKTogdm9pZCB7XG5cdFx0dGhpcy5zdHJpY3RXYXJuaW5nTWVzc2FnZXMgPSBbXTtcblx0fVxuXG5cdGZpbHRlckVycm9yTWVzc2FnZXMobWVzc2FnZXM6IE1lc3NhZ2VbXSk6IE1lc3NhZ2VbXSB7XG5cdFx0cmV0dXJuIG1lc3NhZ2VzLmZpbHRlcigobWVzc2FnZSkgPT4gbWVzc2FnZS5nZXRUeXBlKCkgPT09IE1lc3NhZ2VUeXBlLkVycm9yKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IGJvdW5kIG1lc3NhZ2VzIGFyZSBzaG93biBpbiB0aGUgbWVzc2FnZSBkaWFsb2cuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5JbnN0ZWFkfS5cblx0ICpcblx0ICogSWYgdGhlIGJvdW5kIG1lc3NhZ2VzIGFyZSBzaG93biB0byB0aGUgdXNlciB3aXRoIGEgZGlmZmVyZW50IGNvbnRyb2wgbGlrZSB0aGUgKFRPRE86TGluaykgTWVzc2FnZUJ1dHRvblxuXHQgKiB0aGlzIG1ldGhvZCBoYXMgdG8gYmUgb3ZlcnJpZGRlbi5cblx0ICogQHJldHVybnMgRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCBib3VuZCBtZXNzYWdlcyBhcmUgc2hvd24gaW4gdGhlIG1lc3NhZ2UgZGlhbG9nLlxuXHQgKi9cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5JbnN0ZWFkKVxuXHRnZXRTaG93Qm91bmRNZXNzYWdlc0luTWVzc2FnZURpYWxvZygpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IGJvdW5kIG1lc3NhZ2VzIHNob3VsZCBiZSByZW1vdmVkIGZyb20gdGhlIGRpYWxvZy5cblx0ICpcblx0ICogRm9yIHRoZSBvYmplY3QgcGFnZSBpZiB0aGUgYm91bmQgbWVzc2FnZXMgYXJlIHNob3duIGluIHRoZSBtZXNzYWdlIHN0cmlwLCB0aGVuIHJlbW92ZSB0aGF0IGZyb20gdGhlIGRpYWxvZyB0byBhdm9pZCBkdXBsaWNhdGUgbWVzc2FnZXMuXG5cdCAqXG5cdCAqIE9ubHkgcmVtb3ZlIHRoZSBtZXNzYWdlcyBpZiBtb3JlIHRoYW4gb25lIG1lc3NhZ2UgaXMgcHJlc2VudCBpbiB0aGUgbWVzc2FnZSBtb2RlbC5cblx0ICogQHBhcmFtIHRyYW5zaXRpb25NZXNzYWdlcyBUaGUgbWVzc2FnZXMgdGhhdCBhcmUgc2hvd24gaW4gdGhlIG1lc3NhZ2UgZGlhbG9nLlxuXHQgKiBAcGFyYW0gY29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgbWVzc2FnZSBkaWFsb2cuXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdGhlIGJvdW5kIG1lc3NhZ2VzIHdoaWNoIHNob3VsZCBiZSBzaG93biBpbiB0aGUgbWVzc2FnZSBkaWFsb2cuXG5cdCAqL1xuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkluc3RlYWQpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0ZmlsdGVyQ29udGV4dEJvdW5kTWVzc2FnZXModHJhbnNpdGlvbk1lc3NhZ2VzOiBNZXNzYWdlW10sIGNvbnRleHQ6IENvbnRleHQpOiBNZXNzYWdlW10ge1xuXHRcdHJldHVybiB0cmFuc2l0aW9uTWVzc2FnZXM7XG5cdH1cblxuXHQvKipcblx0ICogQWxsb3dzIGNvbnN1bWVyIG9mIGEgbWVzc2FnZSBidXR0b24gQkIgdG8gZGVjaWRlIHdoaWNoIGJvdW5kIG1lc3NhZ2VzIHNob3VsZCBiZSBzaG93biBhbmQgaG93LlxuXHQgKlxuXHQgKiBUaGlzIGhvb2sgaXMgY2FsbGVkIHdoZW4gdGhlIG1lc3NhZ2UgYnV0dG9uIEJCIGRldGVjdHMgYSBjaGFuZ2UgaW4gdGhlIG1lc3NhZ2UgbW9kZWwuXG5cdCAqIFRoZSBob29rcyBhbGxvd3MgdG8gZGVmaW5lIGJlaGF2aW91ciBmb3IgbWVzc2FnZXMgaW4gdGhlIG1lc3NhZ2UgYnV0dG9uIEJCLlxuXHQgKlxuXHQgKiBDb25zdW1lcnMgd2lsbCBiZSBhYmxlIHRvIGRvIHRoZSBmb2xsb3dpbmcgd2l0aCB0aGlzIGhvb2suXG5cdCAqXG5cdCAqIDEuIEZpbHRlciBvdXQgbWVzc2FnZXMgc28gdGhhdCB0aGV5IGFyZSBub3Qgc2hvd24gb24gdGhlIG1lc3NhZ2UgYnV0dG9uLlxuXHQgKiAyLiBncm91cCB0aGUgbWVzc2FnZXMgYmFzZWQgb24gdGhlaXIgVUkuXG5cdCAqIDMuIHByb3ZpZGUgYSBwcmVzc2VyIGhhbmRsZXIgaW5jYXNlIHRoZSBtZXNzYWdlIHNob3VsZCBzaG93IGFzIGEgbGluay5cblx0ICogQHBhcmFtIF9tZXNzYWdlRGV0YWlscyBPYmplY3QgY29udGFpbmluZyB0aGUgZGV0YWlscyByZWxhdGVkIHRvIHRoZSBtZXNzYWdlLlxuXHQgKiBAcGFyYW0gX21lc3NhZ2VEZXRhaWxzLm1lc3NhZ2UgVGhlIG1lc3NhZ2UgZnJvbSB0aGUgbWVzc2FnZSBtb2RlbC5JZGVhbGx5LCBpdCBtdXN0IG5vdCBiZSBtb2RpZmllZCBkaXJlY3RseS5cblx0ICogQHBhcmFtIF9tZXNzYWdlRGV0YWlscy5ncm91cE5hbWUgVGhlIGdyb3VwIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IG1lc3NhZ2UuXG5cdCAqIEBwYXJhbSBfbWVzc2FnZURldGFpbHMuYWN0aXZlVGl0bGVIYW5kbGVyIEZ1bmN0aW9uIHRvIGhhbmRsZSB0aGUgY2xpY2sgZXZlbnQgb24gYSBtZXNzYWdlIGluIHRoZSBNZXNzYWdlQnV0dG9uIGJ1aWxkaW5nIGJsb2NrLlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCBtdXN0IGJlIHJldHVybmVkIGJ5IHRoZSBvdmVycmlkZGVuIG1ldGhvZC5cblx0ICogQHB1YmxpY1xuXHQgKiBAZXhwZXJpbWVudGFsXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoXCJBZnRlckFzeW5jXCIpXG5cdGFzeW5jIGJlZm9yZVNob3dNZXNzYWdlQnV0dG9uKF9tZXNzYWdlRGV0YWlsczogTWVzc2FnZURldGFpbFtdKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlZ2lzdGVyIHRvIGhvbGQgbWVzc2FnZXMgdW5pdGwgYSBwcm9jZXNzIGlzIGNvbXBsZXRlLlxuXHQgKlxuXHQgKiBUaGUgY2FsbGVyIGNhbiByZWdpc3RlciB0byBob2xkIHRoZSBtZXNzYWdlIGhhbmRsZXIgZnJvbSBzaG93aW5nIG1lc3NhZ2VzIHVudGlsIHRoZSBjYWxsZXIncyBwcm9jZXNzZXMgYXJlIGNvbXBsZXRlZC5cblx0ICogT24gcmVnaXN0ZXJpbmcgdGhlIGNhbGxlciBpcyByZXR1cm5lZCBhIHVuaXF1ZSBrZXkuXG5cdCAqIFRoZSBtZXNzYWdlcyB3aWxsIG5vdCBiZSBzaG93biBpbiB0aGUgVUkgd2l0aCBzdWJzZXF1ZW50ICdzaG93TWVzc2FnZURpYWxvZygpJyBjYWxscy5cblx0ICogVGhlIGNhbGxlciBuZWVkcyB0byB1c2UgJ3Nob3dNZXNzYWdlRGlhbG9nKDxrZXk+KScgYXQgdGhlIGVuZCBvZiBhbGwgaGlzIHByb2Nlc3NlcyB0byBzaG93IHRoZSBtZXNzYWdlcyBpbiB0aGUgVUkuXG5cdCAqXG5cdCAqIElmIG11bHRpcGxlIG93bmVycyByZWdpc3RlciBzaW11bHRhbmVvdXNseSwgdGhlbiBtZXNzYWdlcyBhcmUgc2hvd24gaW4gdGhlIFVJIG9ubHkgYWZ0ZXIgJ3Nob3dNZXNzYWdlRGlhbG9nKDxyZXNwZWN0aXZlX2tleT4pJyBpcyBjYWxsZWQgYnkgYWxsIHRoZSBwcm9jZXNzZXMnIG93bmVycy5cblx0ICogQHBhcmFtIGtleSBVbmlxdWUgaWRlbnRpZmllciB0byB1c2UsIElmIG5vdCBwcm92aWRlZCwgYSBVSUQgd291bGQgYmUgY3JlYXRlZCBhbmQgdXNlZCB0byByZWdpc3Rlci5cblx0ICogQHJldHVybnMgVW5pcXVlIEtleSB0byBiZSB1c2VkIGJ5IHRoZSBjYWxsZXIgdG8gc2hvdyBtZXNzYWdlcyBhdCBhIGxhdGVyIHBvaW50IG9mIHRpbWUuXG5cdCAqL1xuXHRyZWdpc3RlclRvSG9sZE1lc3NhZ2VzKGtleT86IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgdW5pcXVlS2V5ID0ga2V5ID8/IHVpZCgpO1xuXHRcdGlmICghdGhpcy5ob2xkS2V5cy5pbmNsdWRlcyh1bmlxdWVLZXkpKSB7XG5cdFx0XHR0aGlzLmhvbGRLZXlzLnB1c2godW5pcXVlS2V5KTtcblx0XHR9XG5cdFx0cmV0dXJuIHVuaXF1ZUtleTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhciBhbGwgZXhpc3RpbmcgaGVsZCBrZXlzLlxuXHQgKi9cblx0cmVzZXRIb2xkS2V5cygpOiB2b2lkIHtcblx0XHR0aGlzLmhvbGRLZXlzID0gW107XG5cdH1cblxuXHQvKipcblx0ICogU2hvd3MgYSBtZXNzYWdlIGRpYWxvZyB3aXRoIHRyYW5zaXRpb24gbWVzc2FnZXMgaWYgdGhlcmUgYXJlIGFueS5cblx0ICogVGhlIG1lc3NhZ2UgZGlhbG9nIGlzIHNob3duIGFzIGEgbW9kYWwgZGlhbG9nLiBPbmNlIHRoZSB1c2VyIGNvbmZpcm1zIHRoZSBkaWFsb2csIGFsbCB0cmFuc2l0aW9uIG1lc3NhZ2VzXG5cdCAqIGFyZSByZW1vdmVkIGZyb20gdGhlIG1lc3NhZ2UgbW9kZWwuIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgbWVzc2FnZSwgYSBsaXN0IG9mIG1lc3NhZ2VzIGlzIHNob3duLiBUaGUgdXNlclxuXHQgKiBjYW4gZmlsdGVyIG9uIG1lc3NhZ2UgdHlwZXMgYW5kIGNhbiBkaXNwbGF5IGRldGFpbHMgYXMgd2VsbCBhcyB0aGUgbG9uZyB0ZXh0LiBJZiB0aGVyZSBpcyBvbmUgbWVzc2FnZSxcblx0ICogdGhlIGRpYWxvZyBpbW1lZGlhdGVseSBzaG93cyB0aGUgZGV0YWlscyBvZiB0aGUgbWVzc2FnZS4gSWYgdGhlcmUgaXMganVzdCBvbmUgc3VjY2VzcyBtZXNzYWdlLCBhIG1lc3NhZ2Vcblx0ICogdG9hc3QgaXMgc2hvd24gaW5zdGVhZC5cblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzIFBSSVZBVEVcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgb25jZSB0aGUgdXNlciBjbG9zZXMgdGhlIGRpYWxvZy4gSWYgdGhlcmUgYXJlIG5vIG1lc3NhZ2VzXG5cdCAqIHRvIGJlIHNob3duLCB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZCBpbW1lZGlhdGVseVxuXHQgKiBAcHVibGljXG5cdCAqIEBleHBlcmltZW50YWwgQXMgb2YgdmVyc2lvbiAxLjkwLjBcblx0ICogQHNpbmNlIDEuOTAuMFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIHNob3dNZXNzYWdlRGlhbG9nKG1QYXJhbWV0ZXJzPzogU2hvd01lc3NhZ2VEaWFsb2dQYXJhbWV0ZXIpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gdGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsO1xuXHRcdC8vIHJlbW92ZSBzdHJpY3Qgd2FybmluZyBtZXNzYWdlcyBmcm9tIHRoZSBtZXNzYWdlIG1vZGVsIGJlZm9yZSBzaG93aW5nIHRoZSBtZXNzYWdlIGRpYWxvZ1xuXHRcdGF3YWl0IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvbWVzc2FnZVVJRWxlbWVudElzQXZhaWxhYmxlXCIpO1xuXG5cdFx0Y29uc3QgbWVzc2FnZXNJbk1vZGVsID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKTtcblx0XHRjb25zdCBkdXBsaWNhdGVXYXJuaW5nTWVzc2FnZSA9IG1lc3NhZ2VzSW5Nb2RlbC5maWx0ZXIoKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IHtcblx0XHRcdHJldHVybiB0aGlzLmlzU3RyaWN0V2FybmluZ01lc3NhZ2UobWVzc2FnZSk7XG5cdFx0fSk7XG5cdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKGR1cGxpY2F0ZVdhcm5pbmdNZXNzYWdlKTtcblxuXHRcdGNvbnN0IGN1c3RvbU1lc3NhZ2VzID0gbVBhcmFtZXRlcnMgJiYgbVBhcmFtZXRlcnMuY3VzdG9tTWVzc2FnZXMgPyBtUGFyYW1ldGVycy5jdXN0b21NZXNzYWdlcyA6IHVuZGVmaW5lZCxcblx0XHRcdG9PUEludGVybmFsQmluZGluZ0NvbnRleHQgPSB0aGlzLmJhc2UuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgdmlld1R5cGUgPSAodGhpcy5iYXNlLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIE9iamVjdFdpdGhDb252ZXJ0ZXJUeXBlKS5jb252ZXJ0ZXJUeXBlO1xuXHRcdC8vIHNldCBpc0FjdGlvblBhcmFtZXRlckRpYWxvZyBvcGVuIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgaW4gdGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIHRvIGRlY2lkZSB3aGV0aGVyIG1lc3NhZ2UgZGlhbG9nIHNob3VsZCBvcGVuIG9yIG5vdFxuXHRcdGlmIChtUGFyYW1ldGVycyAmJiBtUGFyYW1ldGVycy5pc09wZXJhdGlvbkRpYWxvZ09wZW4gJiYgb09QSW50ZXJuYWxCaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0b09QSW50ZXJuYWxCaW5kaW5nQ29udGV4dC5zZXRQcm9wZXJ0eShcImlzT3BlcmF0aW9uRGlhbG9nT3BlblwiLCB0cnVlKTtcblx0XHR9XG5cdFx0Y29uc3QgYlNob3dCb3VuZE1lc3NhZ2VzID0gdGhpcy5nZXRTaG93Qm91bmRNZXNzYWdlc0luTWVzc2FnZURpYWxvZygpO1xuXHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IChcblx0XHRcdG1QYXJhbWV0ZXJzICYmIG1QYXJhbWV0ZXJzLmNvbnRleHQgPyBtUGFyYW1ldGVycy5jb250ZXh0IDogdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKVxuXHRcdCkgYXMgT0RhdGFWNENvbnRleHQ7XG5cdFx0Ly9jb25zdCBiRXRhZ01lc3NhZ2UgPSBtUGFyYW1ldGVycyAmJiBtUGFyYW1ldGVycy5iSGFzRXRhZ01lc3NhZ2U7XG5cdFx0Ly8gcmVzZXQgIGlzT3BlcmF0aW9uRGlhbG9nT3BlblxuXHRcdC8vIGNhbm5vdCBkbyB0aGlzIG9wZXJhdGlvbnMuanMgc2luY2UgaXQgaXMgbm90IGF3YXJlIG9mIHRoZSB2aWV3XG5cdFx0aWYgKG9PUEludGVybmFsQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdG9PUEludGVybmFsQmluZGluZ0NvbnRleHQuc2V0UHJvcGVydHkoXCJpc09wZXJhdGlvbkRpYWxvZ09wZW5cIiwgZmFsc2UpO1xuXHRcdH1cblx0XHRyZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oXG5cdFx0XHRmdW5jdGlvbiAodGhpczogTWVzc2FnZUhhbmRsZXIsIHJlc29sdmU6ICgpID0+IHZvaWQsIHJlamVjdDogKCkgPT4gdm9pZCk6IHZvaWQge1xuXHRcdFx0XHQvLyB3ZSBoYXZlIHRvIHNldCBhIHRpbWVvdXQgdG8gYmUgYWJsZSB0byBhY2Nlc3MgdGhlIG1vc3QgcmVjZW50IG1lc3NhZ2VzXG5cdFx0XHRcdHNldFRpbWVvdXQoXG5cdFx0XHRcdFx0ZnVuY3Rpb24gKHRoaXM6IE1lc3NhZ2VIYW5kbGVyKTogdm9pZCB7XG5cdFx0XHRcdFx0XHQvLyBUT0RPOiBncmVhdCBBUEkgLSB3aWxsIGJlIGNoYW5nZWQgbGF0ZXJcblx0XHRcdFx0XHRcdHRoaXMucHJvY2Vzc0FuZFNob3dNZXNzYWdlcyhcblx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMgPz8ge30sXG5cdFx0XHRcdFx0XHRcdG9CaW5kaW5nQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0YlNob3dCb3VuZE1lc3NhZ2VzLFxuXHRcdFx0XHRcdFx0XHRjdXN0b21NZXNzYWdlcyA/PyBbXSxcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZSxcblx0XHRcdFx0XHRcdFx0cmVqZWN0LFxuXHRcdFx0XHRcdFx0XHR2aWV3VHlwZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9LmJpbmQodGhpcyksXG5cdFx0XHRcdFx0MFxuXHRcdFx0XHQpO1xuXHRcdFx0fS5iaW5kKHRoaXMpXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQcm9jZXNzIHRoZSBtZXNzYWdlcyBhbmQgc2hvdyB0aGVtIHdoZW4gZXhwZWN0ZWQuXG5cdCAqXG5cdCAqIFdlIGZpbHRlciB0aGUgbWVzc2FnZXMgdG8gc2hvdyBhbmQgaG9sZCB0aGVtIHVudGlsIGFsbCByZWdpc3RlcmVkIHByb2Nlc3NlcyBjYWxsIHNob3dNZXNzYWdlRGlhbG9nIHdpdGggdGhlaXIgcmVzcGVjdGl2ZSBoZWxkIGtleXMuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzIFBhcmFtZXRlcnMgdG8gc2hvdyBtZXNzYWdlIGRpYWxvZy5cblx0ICogQHBhcmFtIGJpbmRpbmdDb250ZXh0IEJpbmQgY29udGV4dCBvZiB0aGUgcGFnZS5cblx0ICogQHBhcmFtIHNob3dCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyBTaG91bGQgYm91bmQgbWVzc2FnZXMgYmUgc2hvd24uXG5cdCAqIEBwYXJhbSBjdXN0b21NZXNzYWdlcyBDdXN0b20gbWVzc2FnZXMgdG8gYWRkLlxuXHQgKiBAcGFyYW0gc3VjY2VzcyBTdWNjZXNzIGNhbGxiYWNrLlxuXHQgKiBAcGFyYW0gZmFpbHVyZSBGYWlsdXJlIGNhbGxiYWNrLlxuXHQgKiBAcGFyYW0gdmlld1R5cGUgVmlldyB0eXBlLCBsaXN0IHJlcG9ydCBvciBvYmplY3QgcGFnZS5cblx0ICovXG5cdHByb2Nlc3NBbmRTaG93TWVzc2FnZXMoXG5cdFx0cGFyYW1ldGVyczogU2hvd01lc3NhZ2VEaWFsb2dQYXJhbWV0ZXIsXG5cdFx0YmluZGluZ0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0LFxuXHRcdHNob3dCb3VuZFRyYW5zaXRpb25NZXNzYWdlczogYm9vbGVhbixcblx0XHRjdXN0b21NZXNzYWdlczogQ3VzdG9tTWVzc2FnZVtdLFxuXHRcdHN1Y2Nlc3M6ICgpID0+IHZvaWQsXG5cdFx0ZmFpbHVyZTogKCkgPT4gdm9pZCxcblx0XHR2aWV3VHlwZT86IHN0cmluZ1xuXHQpOiB2b2lkIHtcblx0XHRjb25zdCB7XG5cdFx0XHRjb25jdXJyZW50RWRpdEZsYWcsXG5cdFx0XHRjb250cm9sLFxuXHRcdFx0c0FjdGlvbk5hbWUsXG5cdFx0XHRvbkJlZm9yZVNob3dNZXNzYWdlLFxuXHRcdFx0dW5Ib2xkS2V5LFxuXHRcdFx0aXNPcGVyYXRpb25EaWFsb2dPcGVuOiBmb3JjZVNob3dVSUVsZW1lbnQgPSBmYWxzZSxcblx0XHRcdG92ZXJyaWRlVUlEZWNpc2lvbixcblx0XHRcdHNob3dCb3VuZFN0YXRlTWVzc2FnZXNcblx0XHR9ID0gcGFyYW1ldGVycztcblx0XHR0aGlzLmhvbGRNc2dzVG9TaG93ID0gdHJ1ZTtcblxuXHRcdC8vIENyZWF0ZSBhIFVJIGRlY2lzaW9uLlxuXHRcdGNvbnN0IG5ld1VJRGVjaXNpb25zID0gbWVzc2FnZUhhbmRsaW5nLmdldFVJRGVjaXNpb25zKFxuXHRcdFx0Y3VzdG9tTWVzc2FnZXMsXG5cdFx0XHRiaW5kaW5nQ29udGV4dCxcblx0XHRcdHNob3dCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyxcblx0XHRcdGNvbmN1cnJlbnRFZGl0RmxhZyxcblx0XHRcdGNvbnRyb2wsXG5cdFx0XHRzQWN0aW9uTmFtZSxcblx0XHRcdG9uQmVmb3JlU2hvd01lc3NhZ2UsXG5cdFx0XHR2aWV3VHlwZSxcblx0XHRcdHNob3dCb3VuZFN0YXRlTWVzc2FnZXMsXG5cdFx0XHRwYXJhbWV0ZXJzLFxuXHRcdFx0Z2V0UmVzb3VyY2VNb2RlbCh0aGlzLmdldFZpZXcoKSksXG5cdFx0XHR0aGlzXG5cdFx0KTtcblx0XHR0aGlzLnVwZGF0ZVVJRGVjaXNpb25zKG5ld1VJRGVjaXNpb25zLCBvdmVycmlkZVVJRGVjaXNpb24pO1xuXHRcdGNvbnN0IHVpRWxlbWVudElzQXZhaWxhYmxlID0gdGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLmdldE1vZGVsKFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwiL21lc3NhZ2VVSUVsZW1lbnRJc0F2YWlsYWJsZVwiKTtcblx0XHQodGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsKT8uc2V0UHJvcGVydHkoXG5cdFx0XHRcIi9tZXNzYWdlVUlFbGVtZW50SXNBdmFpbGFibGVcIixcblx0XHRcdHVpRWxlbWVudElzQXZhaWxhYmxlLnRoZW4oXG5cdFx0XHRcdGFzeW5jIGZ1bmN0aW9uICh0aGlzOiBNZXNzYWdlSGFuZGxlcik6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0XHRcdHRoaXMucmVtb3ZlSG9sZEtleSh1bkhvbGRLZXkgPz8gY29udHJvbD8uZ2V0SWQoKSk7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2hvd01lc3NhZ2VzV2l0aENvbmR0aW9ucyhmb3JjZVNob3dVSUVsZW1lbnQsIHN1Y2Nlc3MsIGZhaWx1cmUpO1xuXHRcdFx0XHR9LmJpbmQodGhpcylcblx0XHRcdClcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNob3cgTWVzc2FnZXMgaW4gdGhlIFVJIGJhc2VkIG9uIGNvbmRpdGlvbnMuXG5cdCAqIEBwYXJhbSBmb3JjZVNob3dVSUVsZW1lbnRcblx0ICogQHBhcmFtIHN1Y2Nlc3Ncblx0ICogQHBhcmFtIGZhaWx1cmVcblx0ICovXG5cdGFzeW5jIHNob3dNZXNzYWdlc1dpdGhDb25kdGlvbnMoXG5cdFx0Zm9yY2VTaG93VUlFbGVtZW50ID0gZmFsc2UsXG5cdFx0c3VjY2Vzcz86IChyZXQ/OiB1bmtub3duKSA9PiB2b2lkLFxuXHRcdGZhaWx1cmU/OiAoZXJyPzogdW5rbm93bikgPT4gdm9pZFxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzaG93VUlFbGVtZW50ID0gZm9yY2VTaG93VUlFbGVtZW50IHx8IHRoaXMuY2hlY2tUb1Nob3dVSUVsZW1lbnQoKTtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gdGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsO1xuXHRcdGlmIChzaG93VUlFbGVtZW50ICYmIGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvbWVzc2FnZVVJRGVjaXNpb25cIikpIHtcblx0XHRcdC8vIFNob3cgVUkgZWxlbWVudCBmb3IgdGhlIHByZXNlbnQgZGVjaXNpb24gYW5kIGNsZWFyIHRoZSBkZWNpc2lvbi5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IHJldCA9IGF3YWl0IG1lc3NhZ2VIYW5kbGluZy5zaG93TWVzc2FnZXNJblVJKGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvbWVzc2FnZVVJRGVjaXNpb25cIikpO1xuXHRcdFx0XHRzdWNjZXNzPy4ocmV0KTtcblx0XHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3IoYEZFIDogVjQgOiBNZXNzYWdlSGFuZGxlciA6IEVycm9yIG9uIHRyeWluZyB0byBzaG93IFVJIGVsZW1lbnQ6ICR7ZXJyfWApO1xuXHRcdFx0XHRmYWlsdXJlPy4oZXJyKTtcblx0XHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9tZXNzYWdlVUlFbGVtZW50SXNBdmFpbGFibGVcIiwgUHJvbWlzZS5yZXNvbHZlKCkpO1xuXHRcdFx0fVxuXHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9tZXNzYWdlVUlEZWNpc2lvblwiLCB1bmRlZmluZWQpO1xuXHRcdFx0dGhpcy5jbGVhclN0cmljdFdhcm5pbmdNZXNzYWdlcygpO1xuXHRcdFx0dGhpcy5ob2xkTXNnc1RvU2hvdyA9IGZhbHNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRMb2cuaW5mbyhcIkZFIDogVjQgOiBNZXNzYWdlSGFuZGxlciA6IEhvbGRpbmcgbWVzc2FnZXMgdW50aWwgYSByZWdpc3RlcmVkIHByb2Nlc3MgXCIpO1xuXHRcdFx0c3VjY2Vzcz8uKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFlvdSBjYW4gcmVtb3ZlIHRoZSBleGlzdGluZyB0cmFuc2l0aW9uIG1lc3NhZ2UgZnJvbSB0aGUgbWVzc2FnZSBtb2RlbCB3aXRoIHRoaXMgbWV0aG9kLlxuXHQgKiBXaXRoIGV2ZXJ5IHVzZXIgaW50ZXJhY3Rpb24gdGhhdCBjYXVzZXMgc2VydmVyIGNvbW11bmljYXRpb24gKGxpa2UgY2xpY2tpbmcgb24gYW4gYWN0aW9uLCBjaGFuZ2luZyBkYXRhKSxcblx0ICogdGhpcyBtZXRob2QgcmVtb3ZlcyB0aGUgZXhpc3RpbmcgdHJhbnNpdGlvbiBtZXNzYWdlcyBmcm9tIHRoZSBtZXNzYWdlIG1vZGVsLlxuXHQgKiBAcGFyYW0gW2tlZXBCb3VuZE1lc3NhZ2VdIENoZWNrcyBpZiB0aGUgYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBhcmUgbm90IHRvIGJlIHJlbW92ZWRcblx0ICogQHBhcmFtIGtlZXBVbmJvdW5kTWVzc2FnZVxuXHQgKiBAcGFyYW0gc1BhdGhUb0JlUmVtb3ZlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdHJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyhrZWVwQm91bmRNZXNzYWdlPzogYm9vbGVhbiwga2VlcFVuYm91bmRNZXNzYWdlPzogYm9vbGVhbiwgc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZyk6IHZvaWQge1xuXHRcdGlmICgha2VlcEJvdW5kTWVzc2FnZSkge1xuXHRcdFx0bWVzc2FnZUhhbmRsaW5nLnJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKHNQYXRoVG9CZVJlbW92ZWQpO1xuXHRcdH1cblx0XHRpZiAoIWtlZXBVbmJvdW5kTWVzc2FnZSkge1xuXHRcdFx0bWVzc2FnZUhhbmRsaW5nLnJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRoYXQgcmV0dXJucyBhbGwgdGhlIHBhcmFtZXRlcnMgbmVlZGVkIHRvIGhhbmRsZSB0aGUgbmF2aWdhdGlvbiB0byB0aGUgZXJyb3IgcGFnZS5cblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzXG5cdCAqIEByZXR1cm5zIFRoZSBwYXJhbWV0ZXJzIG5lY2Vzc2FyeSBmb3IgdGhlIG5hdmlnYXRpb24gdG8gdGhlIGVycm9yIHBhZ2Vcblx0ICovXG5cdF9jaGVja05hdmlnYXRpb25Ub0Vycm9yUGFnZShtUGFyYW1ldGVycz86IE5hdmlnYXRpb25Ub0Vycm9yUGFnZVBhcmFtZXRlcik6IE5hdmlnYXRpb25Ub0Vycm9yUGFnZVJlc3VsdCB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgYVVuYm91bmRNZXNzYWdlcyA9IG1lc3NhZ2VIYW5kbGluZy5nZXRNZXNzYWdlcygpO1xuXHRcdGNvbnN0IGJTaG93Qm91bmRUcmFuc2l0aW9uTWVzc2FnZXMgPSB0aGlzLmdldFNob3dCb3VuZE1lc3NhZ2VzSW5NZXNzYWdlRGlhbG9nKCk7XG5cdFx0Y29uc3QgYUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzID0gYlNob3dCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyA/IG1lc3NhZ2VIYW5kbGluZy5nZXRNZXNzYWdlcyh0cnVlLCB0cnVlKSA6IFtdO1xuXHRcdGNvbnN0IGFDdXN0b21NZXNzYWdlcyA9IG1QYXJhbWV0ZXJzICYmIG1QYXJhbWV0ZXJzLmN1c3RvbU1lc3NhZ2VzID8gbVBhcmFtZXRlcnMuY3VzdG9tTWVzc2FnZXMgOiBbXTtcblx0XHRjb25zdCBiSXNTdGlja3lFZGl0TW9kZSA9IENvbW1vblV0aWxzLmlzU3RpY2t5RWRpdE1vZGUodGhpcy5iYXNlLmdldFZpZXcoKSk7XG5cdFx0bGV0IG1NZXNzYWdlUGFnZVBhcmFtZXRlcnM6IE5hdmlnYXRpb25Ub0Vycm9yUGFnZVJlc3VsdCB8IHVuZGVmaW5lZDtcblxuXHRcdC8vIFRPRE86IFN0aWNrIG1vZGUgY2hlY2sgaXMgb2theSBhcyBsb25nIGFzIHRoZSBjb250cm9sbGVyIGV4dGVuc2lvbiBpcyB1c2VkIHdpdGggc2FwLmZlLmNvcmUgYW5kIHNhcC5mZS5jb3JlLkFwcENvbXBvbmVudC5cblx0XHQvLyBJdCBtaWdodCBiZSBiZXR0ZXIgdG8gcHJvdmlkZSBhbiBleHRlbnNpb24gdG8gdGhlIGNvbnN1bWVyIG9mIHRoZSBjb250cm9sbGVyIGV4dGVuc2lvbiB0byBwcm92aWRlIHRoaXMgdmFsdWUuXG5cblx0XHQvLyBUaGUgbWVzc2FnZSBwYWdlIGNhbiBvbmx5IHNob3cgMSBtZXNzYWdlIHRvZGF5LCBzbyB3ZSBuYXZpZ2F0ZSB0byBpdCB3aGVuIDpcblx0XHQvLyAxLiBUaGVyZSBhcmUgbm8gYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlcyB0byBzaG93LFxuXHRcdC8vIDIuIFRoZXJlIGFyZSBubyBjdXN0b20gbWVzc2FnZXMgdG8gc2hvdywgJlxuXHRcdC8vIDMuIFRoZXJlIGlzIGV4YWN0bHkgMSB1bmJvdW5kIG1lc3NhZ2UgaW4gdGhlIG1lc3NhZ2UgbW9kZWwgd2l0aCBzdGF0dXNDb2RlPTUwMyBhbmQgcmV0cnktQWZ0ZXIgYXZhaWxhYmxlXG5cdFx0Ly8gNC4gcmV0cnlBZnRlciBpcyBncmVhdGVyIHRoYW4gMTIwIHNlY29uZHNcblx0XHQvL1xuXHRcdC8vIEluIEFkZGl0aW9uLCBuYXZpZ2F0aW5nIGF3YXkgZnJvbSBhIHN0aWNreSBzZXNzaW9uIHdpbGwgZGVzdHJveSB0aGUgc2Vzc2lvbiBzbyB3ZSBkbyBub3QgbmF2aWdhdGUgdG8gbWVzc2FnZSBwYWdlIGZvciBub3cuXG5cdFx0Ly8gVE9ETzogY2hlY2sgaWYgbmF2aWdhdGlvbiBzaG91bGQgYmUgZG9uZSBpbiBzdGlja3kgZWRpdCBtb2RlLlxuXHRcdGlmIChtUGFyYW1ldGVycz8uaXNEYXRhUmVjZWl2ZWRFcnJvciA9PT0gdHJ1ZSkge1xuXHRcdFx0bU1lc3NhZ2VQYWdlUGFyYW1ldGVycyA9IHtcblx0XHRcdFx0dGl0bGU6IG1QYXJhbWV0ZXJzLnRpdGxlLFxuXHRcdFx0XHRkZXNjcmlwdGlvbjogbVBhcmFtZXRlcnMuZGVzY3JpcHRpb24sXG5cdFx0XHRcdG5hdmlnYXRlQmFja1RvT3JpZ2luOiB0cnVlLFxuXHRcdFx0XHRlcnJvclR5cGU6IFwiUGFnZU5vdEZvdW5kXCJcblx0XHRcdH07XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdCFiSXNTdGlja3lFZGl0TW9kZSAmJlxuXHRcdFx0IWFCb3VuZFRyYW5zaXRpb25NZXNzYWdlcy5sZW5ndGggJiZcblx0XHRcdCFhQ3VzdG9tTWVzc2FnZXMubGVuZ3RoICYmXG5cdFx0XHQoYVVuYm91bmRNZXNzYWdlcy5sZW5ndGggPT09IDEgfHwgbVBhcmFtZXRlcnM/LmlzSW5pdGlhbExvYWQ1MDNFcnJvciA9PT0gdHJ1ZSlcblx0XHQpIHtcblx0XHRcdGNvbnN0IG9NZXNzYWdlID0gYVVuYm91bmRNZXNzYWdlc1swXTtcblx0XHRcdGNvbnN0IG9UZWNobmljYWxEZXRhaWxzID0gb01lc3NhZ2UuZ2V0VGVjaG5pY2FsRGV0YWlscygpIGFzIE1lc3NhZ2VUZWNobmljYWxEZXRhaWxzIHwgdW5kZWZpbmVkO1xuXHRcdFx0aWYgKG9UZWNobmljYWxEZXRhaWxzPy5odHRwU3RhdHVzID09PSA1MDMpIHtcblx0XHRcdFx0bU1lc3NhZ2VQYWdlUGFyYW1ldGVycyA9IHRoaXMuX2dldEhUVFA1MDNNZXNzYWdlUGFyYW1ldGVycyhvTWVzc2FnZSwgb1RlY2huaWNhbERldGFpbHMpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gbU1lc3NhZ2VQYWdlUGFyYW1ldGVycztcblx0fVxuXG5cdF9nZXRIVFRQNTAzTWVzc2FnZVBhcmFtZXRlcnMobWVzc2FnZTogTWVzc2FnZSwgdGVjaG5pY2FsRGV0YWlsczogTWVzc2FnZVRlY2huaWNhbERldGFpbHMpOiBOYXZpZ2F0aW9uVG9FcnJvclBhZ2VSZXN1bHQgfCB1bmRlZmluZWQge1xuXHRcdGxldCBtZXNzYWdlUGFnZVBhcmFtZXRlcnM6IE5hdmlnYXRpb25Ub0Vycm9yUGFnZVJlc3VsdCB8IHVuZGVmaW5lZDtcblxuXHRcdGNvbnN0IHNlY29uZHNCZWZvcmVSZXRyeSA9XG5cdFx0XHR0ZWNobmljYWxEZXRhaWxzLnJldHJ5QWZ0ZXIgIT09IHVuZGVmaW5lZCA/IHRoaXMuX2dldFNlY29uZHNCZWZvcmVSZXRyeUFmdGVyKHRlY2huaWNhbERldGFpbHMucmV0cnlBZnRlcikgOiB1bmRlZmluZWQ7XG5cblx0XHRpZiAoc2Vjb25kc0JlZm9yZVJldHJ5ID09PSB1bmRlZmluZWQgfHwgc2Vjb25kc0JlZm9yZVJldHJ5ID4gMTIwKSB7XG5cdFx0XHRjb25zdCByZXRyeUFmdGVyTWVzc2FnZSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRSZXRyeUFmdGVyTWVzc2FnZShtZXNzYWdlKTtcblx0XHRcdG1lc3NhZ2VQYWdlUGFyYW1ldGVycyA9IHtcblx0XHRcdFx0ZGVzY3JpcHRpb246IHJldHJ5QWZ0ZXJNZXNzYWdlID8gYCR7cmV0cnlBZnRlck1lc3NhZ2V9ICR7bWVzc2FnZS5nZXRNZXNzYWdlKCl9YCA6IG1lc3NhZ2UuZ2V0TWVzc2FnZSgpLFxuXHRcdFx0XHRuYXZpZ2F0ZUJhY2tUb09yaWdpbjogdHJ1ZSxcblx0XHRcdFx0ZXJyb3JUeXBlOiBcIlVuYWJsZVRvTG9hZFwiXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHJldHVybiBtZXNzYWdlUGFnZVBhcmFtZXRlcnM7XG5cdH1cblxuXHRfZ2V0U2Vjb25kc0JlZm9yZVJldHJ5QWZ0ZXIoZFJldHJ5QWZ0ZXI6IERhdGUpOiBudW1iZXIge1xuXHRcdGNvbnN0IGRDdXJyZW50RGF0ZVRpbWUgPSBuZXcgRGF0ZSgpLFxuXHRcdFx0aUN1cnJlbnREYXRlVGltZUluTWlsbGlTZWNvbmRzID0gZEN1cnJlbnREYXRlVGltZS5nZXRUaW1lKCksXG5cdFx0XHRpUmV0cnlBZnRlckRhdGVUaW1lSW5NaWxsaVNlY29uZHMgPSBkUmV0cnlBZnRlci5nZXRUaW1lKCksXG5cdFx0XHRpU2Vjb25kc0JlZm9yZVJldHJ5ID0gKGlSZXRyeUFmdGVyRGF0ZVRpbWVJbk1pbGxpU2Vjb25kcyAtIGlDdXJyZW50RGF0ZVRpbWVJbk1pbGxpU2Vjb25kcykgLyAxMDAwO1xuXHRcdHJldHVybiBpU2Vjb25kc0JlZm9yZVJldHJ5O1xuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZSB0aGUgZXhpc3RpbmcgVUkgZGVjaXNpb25zIHdpdGggdGhlIG5ldyBvbmVzLlxuXHQgKiBAcGFyYW0gbmV3VUlEZWNpc2lvbnMgSW4gY29tbWluZyBVSSBkZWNpc2lvbnMuXG5cdCAqIEBwYXJhbSBvdmVycmlkZVVJRGVjaXNpb24gT3ZlcnJpZGUgdGhlIGV4aXN0aW5nIFVJIGRlY2lzaW9uIHRvIHNob3cgbWVzc2FnZXMgd2l0aCB0aGUgbmV3IG9uZS5cblx0ICpcblx0ICogJ292ZXJyaWRlVUlEZWNpc2lvbicsIFRoaXMgd291bGQgYmUgbmVlZGVkIHdoZW4gdGhlcmUgaXMgYSBjaGFuZ2UgaW4gcGFnZSBjb250ZXh0IGFuZCB0aGUgcGFyYW10ZXJzIHRvIGNyZWF0ZSB0aGUgbmV3IFVJIGRlY2lzaW9uIGFyZSBkaWZmZXJlbnQuXG5cdCAqL1xuXHR1cGRhdGVVSURlY2lzaW9ucyhuZXdVSURlY2lzaW9uczogTWVzc2FnZVVJRGVjaXNpb25zLCBvdmVycmlkZVVJRGVjaXNpb24gPSBmYWxzZSk6IHZvaWQge1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0Y29uc3Qgb2xkVUlEZWNpc2lvbnMgPSBpbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KFwiL21lc3NhZ2VVSURlY2lzaW9uXCIpIGFzIE1lc3NhZ2VVSURlY2lzaW9ucztcblx0XHRsZXQgYWxsTWVzc2FnZXNUb1Nob3c6IE1lc3NhZ2VbXSA9IFtdO1xuXHRcdGxldCBtZXJnZWRVSURlY2lzaW9uO1xuXHRcdGlmIChvbGRVSURlY2lzaW9ucyAmJiBvdmVycmlkZVVJRGVjaXNpb24gPT09IGZhbHNlKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG9sZFVJRGVjaXNpb25zLm1lc3NhZ2VzVG9TaG93Lmxlbmd0aCA9PT0gMSAmJlxuXHRcdFx0XHRuZXdVSURlY2lzaW9ucy5tZXNzYWdlc1RvU2hvdy5sZW5ndGggPT09IDEgJiZcblx0XHRcdFx0b2xkVUlEZWNpc2lvbnMubWVzc2FnZXNUb1Nob3dbMF0uZ2V0Q29kZSgpID09PSBcIkNfQ09NTU9OX1NVQ0NFU1NfTUVTU0FHRVwiICYmXG5cdFx0XHRcdG5ld1VJRGVjaXNpb25zLm1lc3NhZ2VzVG9TaG93WzBdLmdldENvZGUoKSA9PT0gXCJDX0NPTU1PTl9TVUNDRVNTX01FU1NBR0VcIlxuXHRcdFx0KSB7XG5cdFx0XHRcdC8vIENoZWNrIGlmIGJvdGggYXJlIGdlbmVyaWMgc3VjY2VzcyBtZXNzYWdlcywgdGhlbiB3ZSBzaG93IG9ubHkgb25lIG1lc3NhZ2UuXG5cdFx0XHRcdGFsbE1lc3NhZ2VzVG9TaG93ID0gb2xkVUlEZWNpc2lvbnMubWVzc2FnZXNUb1Nob3c7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhbGxNZXNzYWdlc1RvU2hvdyA9IEFycmF5LmZyb20obmV3IFNldChbLi4ub2xkVUlEZWNpc2lvbnMubWVzc2FnZXNUb1Nob3csIC4uLm5ld1VJRGVjaXNpb25zLm1lc3NhZ2VzVG9TaG93XSkpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgZWxlbWVudHMgPSBbb2xkVUlEZWNpc2lvbnMudWlFbGVtZW50VG9Vc2UsIG5ld1VJRGVjaXNpb25zLnVpRWxlbWVudFRvVXNlXTtcblx0XHRcdC8vIERlZmF1bHQgd2Ugc2hvdyBkaWFsb2dcblx0XHRcdGxldCB1aUVsZW1lbnRUb1VzZTogU3VwcG9ydGVkVUlFbGVtZW50ID0gYWxsTWVzc2FnZXNUb1Nob3cubGVuZ3RoID4gMCA/IFwiRGlhbG9nXCIgOiBcIk5vbmVcIjtcblxuXHRcdFx0aWYgKGFsbE1lc3NhZ2VzVG9TaG93Lmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHQvLyBTaW5nbGUgbWVzc2FnZSwgd2UgY2hlY2sgZm9yIHNwZWNpZmljIFVJIEVsZW1lbnQgdG8gdXNlLlxuXHRcdFx0XHRpZiAoZWxlbWVudHMuaW5jbHVkZXMoXCJUb2FzdFwiKSkge1xuXHRcdFx0XHRcdHVpRWxlbWVudFRvVXNlID0gXCJUb2FzdFwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGVsZW1lbnRzLmluY2x1ZGVzKFwiQm94XCIpKSB7XG5cdFx0XHRcdFx0dWlFbGVtZW50VG9Vc2UgPSBcIkJveFwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdG1lcmdlZFVJRGVjaXNpb24gPSB7XG5cdFx0XHRcdG1lc3NhZ2VzVG9TaG93OiBhbGxNZXNzYWdlc1RvU2hvdyxcblx0XHRcdFx0dWlFbGVtZW50VG9Vc2UsXG5cdFx0XHRcdGNvbnRleHROZWVkc0V0YWdSZWZyZXNoOiBvbGRVSURlY2lzaW9ucy5jb250ZXh0TmVlZHNFdGFnUmVmcmVzaCB8fCBuZXdVSURlY2lzaW9ucy5jb250ZXh0TmVlZHNFdGFnUmVmcmVzaCxcblx0XHRcdFx0Y29udGFpbnNCb3VuZFRyYW5zaXRpb246IG9sZFVJRGVjaXNpb25zLmNvbnRhaW5zQm91bmRUcmFuc2l0aW9uIHx8IG5ld1VJRGVjaXNpb25zLmNvbnRhaW5zQm91bmRUcmFuc2l0aW9uXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtZXJnZWRVSURlY2lzaW9uID0gbmV3VUlEZWNpc2lvbnM7XG5cdFx0fVxuXHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvbWVzc2FnZVVJRGVjaXNpb25cIiwgbWVyZ2VkVUlEZWNpc2lvbik7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlIGhlbGQga2V5LlxuXHQgKiBAcGFyYW0gaW5LZXkgS2V5IHRvIHJlbW92ZS5cblx0ICovXG5cdHJlbW92ZUhvbGRLZXkoaW5LZXk/OiBzdHJpbmcpOiB2b2lkIHtcblx0XHRpZiAoaW5LZXkgJiYgdGhpcy5ob2xkS2V5cy5pbmNsdWRlcyhpbktleSkpIHtcblx0XHRcdHRoaXMuaG9sZEtleXMuc3BsaWNlKHRoaXMuaG9sZEtleXMuaW5kZXhPZihpbktleSksIDEpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVjayBpZiBVSSBFbGVtZW50IHdpdGggbWVzc2FnZXMgc2hvdWxkIGJlIHNob3duLlxuXHQgKiBAcmV0dXJucyBCb29sZWFuXG5cdCAqL1xuXHRjaGVja1RvU2hvd1VJRWxlbWVudCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5ob2xkTXNnc1RvU2hvdyAmJiAodGhpcy5ob2xkS2V5cy5sZW5ndGggPiAwID8gZmFsc2UgOiB0cnVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIb2xkIG1lc3NhZ2VzIGZvciB0aGUgY29udHJvbC5cblx0ICogQHBhcmFtIGNvbnRyb2xcblx0ICovXG5cdGhvbGRNZXNzYWdlc0ZvckNvbnRyb2woY29udHJvbDogQ29udHJvbCk6IHZvaWQge1xuXHRcdGNvbnN0IGlkZW50aWZpZXIgPSBjb250cm9sLmdldElkKCk7XG5cdFx0dGhpcy5yZWdpc3RlclRvSG9sZE1lc3NhZ2VzKGlkZW50aWZpZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbGVhc2UgbWVzc2FnZSBob2xkIGJ5IGEgY29udHJvbC5cblx0ICogQHBhcmFtIGNvbnRyb2xcblx0ICovXG5cdGFzeW5jIHJlbGVhc2VIb2xkQnlDb250cm9sKGNvbnRyb2w/OiBDb250cm9sKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgaWRlbnRpZmllciA9IGNvbnRyb2w/LmdldElkKCk7XG5cdFx0dGhpcy5yZW1vdmVIb2xkS2V5KGlkZW50aWZpZXIpO1xuXHRcdGNvbnN0IHVpRWxlbWVudElzQXZhaWxhYmxlID0gdGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLmdldE1vZGVsKFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwiL21lc3NhZ2VVSUVsZW1lbnRJc0F2YWlsYWJsZVwiKTtcblx0XHQodGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsKT8uc2V0UHJvcGVydHkoXG5cdFx0XHRcIi9tZXNzYWdlVUlFbGVtZW50SXNBdmFpbGFibGVcIixcblx0XHRcdHVpRWxlbWVudElzQXZhaWxhYmxlPy50aGVuKFxuXHRcdFx0XHRhc3luYyBmdW5jdGlvbiAodGhpczogTWVzc2FnZUhhbmRsZXIpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5zaG93TWVzc2FnZXNXaXRoQ29uZHRpb25zKCk7XG5cdFx0XHRcdH0uYmluZCh0aGlzKVxuXHRcdFx0KVxuXHRcdCk7XG5cdFx0YXdhaXQgdGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLmdldE1vZGVsKFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwiL21lc3NhZ2VVSUVsZW1lbnRJc0F2YWlsYWJsZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTaG93cyBhIG1lc3NhZ2UgcGFnZSBvciBhIG1lc3NhZ2UgZGlhbG9nIGJhc2VkIG9uIHRoZSBtZXNzYWdlcyBpbiB0aGUgbWVzc2FnZSBkaWFsb2cuXG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVyc11cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgb25jZSB0aGUgdXNlciBjbG9zZXMgdGhlIG1lc3NhZ2UgZGlhbG9nIG9yIHdoZW4gbmF2aWdhdGlvbiB0byB0aGUgbWVzc2FnZSBwYWdlIGlzIGNvbXBsZXRlLiBJZiB0aGVyZSBhcmUgbm8gbWVzc2FnZXNcblx0ICogdG8gYmUgc2hvd24sIHRoZSBwcm9taXNlIGlzIHJlc29sdmVkIGltbWVkaWF0ZWx5XG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXN5bmMgc2hvd01lc3NhZ2VzKHBhcmFtZXRlcnM/OiBTaG93TWVzc2FnZXNQYXJhbWV0ZXJzKTogUHJvbWlzZTx2b2lkIHwgYm9vbGVhbiB8IERpYWxvZz4ge1xuXHRcdGNvbnN0IG1lc3NhZ2VQYWdlUGFyYW1ldGVycyA9IHRoaXMuX2NoZWNrTmF2aWdhdGlvblRvRXJyb3JQYWdlKHBhcmFtZXRlcnMpO1xuXG5cdFx0aWYgKG1lc3NhZ2VQYWdlUGFyYW1ldGVycykge1xuXHRcdFx0Ly8gbmF2aWdhdGUgdG8gbWVzc2FnZSBwYWdlLlxuXHRcdFx0Ly8gaGFuZGxlciBiZWZvcmUgcGFnZSBuYXZpZ2F0aW9uIGlzIHRyaWdnZXJlZCwgZm9yIGV4YW1wbGUgdG8gY2xvc2UgdGhlIGFjdGlvbiBwYXJhbWV0ZXIgZGlhbG9nXG5cdFx0XHRpZiAocGFyYW1ldGVycz8ubWVzc2FnZVBhZ2VOYXZpZ2F0aW9uQ2FsbGJhY2spIHtcblx0XHRcdFx0cGFyYW1ldGVycy5tZXNzYWdlUGFnZU5hdmlnYXRpb25DYWxsYmFjaygpO1xuXHRcdFx0fVxuXG5cdFx0XHRtZXNzYWdlUGFnZVBhcmFtZXRlcnMuaGFuZGxlU2hlbGxCYWNrID0gIXBhcmFtZXRlcnM/LnNoZWxsQmFjaztcblx0XHRcdHRoaXMucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0XHQvLyB3ZSBoYXZlIHRvIHNldCBhIHRpbWVvdXQgdG8gYmUgYWJsZSB0byBhY2Nlc3MgdGhlIG1vc3QgcmVjZW50IG1lc3NhZ2VzXG5cdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdC8vIGNsZWFyIGFsbCBob2xkIGtleXMgYXMgd2UgbmF2aWdhdGUgdG8gbWVzc2FnZSBwYWdlLlxuXHRcdFx0XHRcdHRoaXMucmVzZXRIb2xkS2V5cygpO1xuXG5cdFx0XHRcdFx0Ly8gVE9ETzogZ3JlYXQgQVBJIC0gd2lsbCBiZSBjaGFuZ2VkIGxhdGVyXG5cdFx0XHRcdFx0dGhpcy5iYXNlLl9yb3V0aW5nXG5cdFx0XHRcdFx0XHQubmF2aWdhdGVUb01lc3NhZ2VQYWdlKFxuXHRcdFx0XHRcdFx0XHRwYXJhbWV0ZXJzPy5pc0RhdGFSZWNlaXZlZEVycm9yID09PSB0cnVlXG5cdFx0XHRcdFx0XHRcdFx0PyBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0RBVEFfUkVDRUlWRURfRVJST1JcIilcblx0XHRcdFx0XHRcdFx0XHQ6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19USVRMRVwiKSxcblx0XHRcdFx0XHRcdFx0bWVzc2FnZVBhZ2VQYXJhbWV0ZXJzXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQudGhlbihyZXNvbHZlKVxuXHRcdFx0XHRcdFx0LmNhdGNoKHJlamVjdCk7XG5cdFx0XHRcdH0sIDApO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIG5hdmlnYXRlIHRvIG1lc3NhZ2UgZGlhbG9nXG5cdFx0XHRyZXR1cm4gdGhpcy5zaG93TWVzc2FnZURpYWxvZyhwYXJhbWV0ZXJzKTtcblx0XHR9XG5cdH1cbn1cbmV4cG9ydCBkZWZhdWx0IE1lc3NhZ2VIYW5kbGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7RUEyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTkEsSUFRTUEsY0FBYyxJQUFBQyxJQUFBLEdBRG5CQyxjQUFjLENBQUMsaURBQWlELENBQUMsRUFBQUMsS0FBQSxHQWNoRUMsY0FBYyxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQXdEaEJDLGdCQUFnQixDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUNsQkMsVUFBVSxDQUFDQyxpQkFBaUIsQ0FBQ0MsT0FBTyxDQUFDLEVBQUFDLEtBQUEsR0FlckNMLGdCQUFnQixDQUFDLENBQUMsRUFBQU0sS0FBQSxHQUNsQkosVUFBVSxDQUFDQyxpQkFBaUIsQ0FBQ0MsT0FBTyxDQUFDLEVBQUFHLEtBQUEsR0F5QnJDQyxlQUFlLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBQ2pCUCxVQUFVLENBQUMsWUFBWSxDQUFDLEVBQUFRLEtBQUEsR0E4Q3hCRixlQUFlLENBQUMsQ0FBQyxFQUFBRyxNQUFBLEdBQ2pCQyxjQUFjLENBQUMsQ0FBQyxFQUFBQyxNQUFBLEdBd0poQkwsZUFBZSxDQUFDLENBQUMsRUFBQU0sTUFBQSxHQXVMakJOLGVBQWUsQ0FBQyxDQUFDLEVBQUFPLE1BQUEsR0FDakJILGNBQWMsQ0FBQyxDQUFDLEVBQUFqQixJQUFBLENBQUFxQixNQUFBLElBQUFDLE9BQUEsMEJBQUFDLG9CQUFBO0lBdGVqQixTQUFBeEIsZUFBQSxFQUFjO01BQUEsSUFBQXlCLEtBQUE7TUFDYkEsS0FBQSxHQUFBRCxvQkFBQSxDQUFBRSxJQUFBLEtBQU0sQ0FBQztNQUFDRCxLQUFBLENBVERFLHFCQUFxQixHQUFjLEVBQUU7TUFBQUYsS0FBQSxDQUluQ0csUUFBUSxH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
468
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNZXNzYWdlSGFuZGxlciIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwibWV0aG9kT3ZlcnJpZGUiLCJfZGVjMyIsInByaXZhdGVFeHRlbnNpb24iLCJfZGVjNCIsImV4dGVuc2libGUiLCJPdmVycmlkZUV4ZWN1dGlvbiIsIkluc3RlYWQiLCJfZGVjNSIsIl9kZWM2IiwiX2RlYzciLCJwdWJsaWNFeHRlbnNpb24iLCJfZGVjOCIsIl9kZWM5IiwiX2RlYzEwIiwiZmluYWxFeHRlbnNpb24iLCJfZGVjMTEiLCJfZGVjMTIiLCJfZGVjMTMiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0NvbnRyb2xsZXJFeHRlbnNpb24iLCJfdGhpcyIsImNhbGwiLCJzdHJpY3RXYXJuaW5nTWVzc2FnZXMiLCJob2xkS2V5cyIsImhvbGRNc2dzVG9TaG93IiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJvbkluaXQiLCJpbnRlcm5hbE1vZGVsIiwiYmFzZSIsImdldEFwcENvbXBvbmVudCIsImdldE1vZGVsIiwic2V0UHJvcGVydHkiLCJ1bmRlZmluZWQiLCJQcm9taXNlIiwicmVzb2x2ZSIsImFkZFdhcm5pbmdNZXNzYWdlc1RvTWVzc2FnZUhhbmRsZXIiLCJhTWVzc2FnZXMiLCJjb25jYXQiLCJpc1N0cmljdFdhcm5pbmdNZXNzYWdlIiwib01lc3NhZ2UiLCJmaW5kIiwibWVzc2FnZSIsImdldENvZGUiLCJnZXRNZXNzYWdlIiwiZ2V0VHlwZSIsImdldERlc2NyaXB0aW9uVXJsIiwiZGVlcEVxdWFsIiwiZ2V0VGFyZ2V0cyIsImdldFBlcnNpc3RlbnQiLCJjbGVhclN0cmljdFdhcm5pbmdNZXNzYWdlcyIsImZpbHRlckVycm9yTWVzc2FnZXMiLCJtZXNzYWdlcyIsImZpbHRlciIsIk1lc3NhZ2VUeXBlIiwiRXJyb3IiLCJnZXRTaG93Qm91bmRNZXNzYWdlc0luTWVzc2FnZURpYWxvZyIsImZpbHRlckNvbnRleHRCb3VuZE1lc3NhZ2VzIiwidHJhbnNpdGlvbk1lc3NhZ2VzIiwiY29udGV4dCIsImJlZm9yZVNob3dNZXNzYWdlQnV0dG9uIiwiX21lc3NhZ2VEZXRhaWxzIiwicmVnaXN0ZXJUb0hvbGRNZXNzYWdlcyIsImtleSIsInVuaXF1ZUtleSIsInVpZCIsImluY2x1ZGVzIiwicHVzaCIsInJlc2V0SG9sZEtleXMiLCJzaG93TWVzc2FnZURpYWxvZyIsIm1QYXJhbWV0ZXJzIiwiZ2V0UHJvcGVydHkiLCJtZXNzYWdlc0luTW9kZWwiLCJNZXNzYWdpbmciLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXREYXRhIiwiZHVwbGljYXRlV2FybmluZ01lc3NhZ2UiLCJyZW1vdmVNZXNzYWdlcyIsImN1c3RvbU1lc3NhZ2VzIiwib09QSW50ZXJuYWxCaW5kaW5nQ29udGV4dCIsImdldFZpZXciLCJnZXRCaW5kaW5nQ29udGV4dCIsInZpZXdUeXBlIiwiZ2V0Vmlld0RhdGEiLCJjb252ZXJ0ZXJUeXBlIiwiaXNPcGVyYXRpb25EaWFsb2dPcGVuIiwiYlNob3dCb3VuZE1lc3NhZ2VzIiwib0JpbmRpbmdDb250ZXh0IiwicmVqZWN0Iiwic2V0VGltZW91dCIsInByb2Nlc3NBbmRTaG93TWVzc2FnZXMiLCJiaW5kIiwicGFyYW1ldGVycyIsImJpbmRpbmdDb250ZXh0Iiwic2hvd0JvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwic3VjY2VzcyIsImZhaWx1cmUiLCJjb25jdXJyZW50RWRpdEZsYWciLCJjb250cm9sIiwic0FjdGlvbk5hbWUiLCJvbkJlZm9yZVNob3dNZXNzYWdlIiwidW5Ib2xkS2V5IiwiZm9yY2VTaG93VUlFbGVtZW50Iiwib3ZlcnJpZGVVSURlY2lzaW9uIiwic2hvd0JvdW5kU3RhdGVNZXNzYWdlcyIsIm5ld1VJRGVjaXNpb25zIiwibWVzc2FnZUhhbmRsaW5nIiwiZ2V0VUlEZWNpc2lvbnMiLCJnZXRSZXNvdXJjZU1vZGVsIiwidXBkYXRlVUlEZWNpc2lvbnMiLCJ1aUVsZW1lbnRJc0F2YWlsYWJsZSIsInRoZW4iLCJyZW1vdmVIb2xkS2V5IiwiZ2V0SWQiLCJzaG93TWVzc2FnZXNXaXRoQ29uZHRpb25zIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwic2hvd1VJRWxlbWVudCIsImNoZWNrVG9TaG93VUlFbGVtZW50IiwicmV0Iiwic2hvd01lc3NhZ2VzSW5VSSIsImVyciIsIkxvZyIsImVycm9yIiwiaW5mbyIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsImtlZXBCb3VuZE1lc3NhZ2UiLCJrZWVwVW5ib3VuZE1lc3NhZ2UiLCJzUGF0aFRvQmVSZW1vdmVkIiwicmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwiX2NoZWNrTmF2aWdhdGlvblRvRXJyb3JQYWdlIiwiYVVuYm91bmRNZXNzYWdlcyIsImdldE1lc3NhZ2VzIiwiYlNob3dCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsImFCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsImFDdXN0b21NZXNzYWdlcyIsImJJc1N0aWNreUVkaXRNb2RlIiwiQ29tbW9uVXRpbHMiLCJpc1N0aWNreUVkaXRNb2RlIiwibU1lc3NhZ2VQYWdlUGFyYW1ldGVycyIsImlzRGF0YVJlY2VpdmVkRXJyb3IiLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwibmF2aWdhdGVCYWNrVG9PcmlnaW4iLCJlcnJvclR5cGUiLCJpc0luaXRpYWxMb2FkNTAzRXJyb3IiLCJvVGVjaG5pY2FsRGV0YWlscyIsImdldFRlY2huaWNhbERldGFpbHMiLCJodHRwU3RhdHVzIiwiX2dldEhUVFA1MDNNZXNzYWdlUGFyYW1ldGVycyIsInRlY2huaWNhbERldGFpbHMiLCJtZXNzYWdlUGFnZVBhcmFtZXRlcnMiLCJzZWNvbmRzQmVmb3JlUmV0cnkiLCJyZXRyeUFmdGVyIiwiX2dldFNlY29uZHNCZWZvcmVSZXRyeUFmdGVyIiwicmV0cnlBZnRlck1lc3NhZ2UiLCJnZXRSZXRyeUFmdGVyTWVzc2FnZSIsImRSZXRyeUFmdGVyIiwiZEN1cnJlbnREYXRlVGltZSIsIkRhdGUiLCJpQ3VycmVudERhdGVUaW1lSW5NaWxsaVNlY29uZHMiLCJnZXRUaW1lIiwiaVJldHJ5QWZ0ZXJEYXRlVGltZUluTWlsbGlTZWNvbmRzIiwiaVNlY29uZHNCZWZvcmVSZXRyeSIsIm9sZFVJRGVjaXNpb25zIiwiYWxsTWVzc2FnZXNUb1Nob3ciLCJtZXJnZWRVSURlY2lzaW9uIiwibWVzc2FnZXNUb1Nob3ciLCJBcnJheSIsImZyb20iLCJTZXQiLCJlbGVtZW50cyIsInVpRWxlbWVudFRvVXNlIiwiY29udGV4dE5lZWRzRXRhZ1JlZnJlc2giLCJjb250YWluc0JvdW5kVHJhbnNpdGlvbiIsImluS2V5Iiwic3BsaWNlIiwiaW5kZXhPZiIsImhvbGRNZXNzYWdlc0ZvckNvbnRyb2wiLCJpZGVudGlmaWVyIiwicmVsZWFzZUhvbGRCeUNvbnRyb2wiLCJzaG93TWVzc2FnZXMiLCJtZXNzYWdlUGFnZU5hdmlnYXRpb25DYWxsYmFjayIsImhhbmRsZVNoZWxsQmFjayIsInNoZWxsQmFjayIsIm9SZXNvdXJjZUJ1bmRsZSIsIkxpYnJhcnkiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsIl9yb3V0aW5nIiwibmF2aWdhdGVUb01lc3NhZ2VQYWdlIiwiZ2V0VGV4dCIsImNhdGNoIiwiQ29udHJvbGxlckV4dGVuc2lvbiIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk1lc3NhZ2VIYW5kbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IGRlZXBFcXVhbCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwRXF1YWxcIjtcbmltcG9ydCB1aWQgZnJvbSBcInNhcC9iYXNlL3V0aWwvdWlkXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXh0ZW5zaWJsZSwgZmluYWxFeHRlbnNpb24sIG1ldGhvZE92ZXJyaWRlLCBwcml2YXRlRXh0ZW5zaW9uLCBwdWJsaWNFeHRlbnNpb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHtcblx0TWVzc2FnZVRlY2huaWNhbERldGFpbHMsXG5cdE1lc3NhZ2VVSURlY2lzaW9ucyxcblx0U2hvd01lc3NhZ2VQYXJhbWV0ZXJzLFxuXHRTdXBwb3J0ZWRVSUVsZW1lbnRcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL21lc3NhZ2VIYW5kbGVyL21lc3NhZ2VIYW5kbGluZ1wiO1xuaW1wb3J0IG1lc3NhZ2VIYW5kbGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvbWVzc2FnZUhhbmRsZXIvbWVzc2FnZUhhbmRsaW5nXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgTWVzc2FnaW5nIGZyb20gXCJzYXAvdWkvY29yZS9NZXNzYWdpbmdcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcbmltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCIuLi9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcblxudHlwZSBPYmplY3RXaXRoQ29udmVydGVyVHlwZSA9IG9iamVjdCAmIHtcblx0Y29udmVydGVyVHlwZTogc3RyaW5nO1xufTtcbnR5cGUgTmF2aWdhdGlvblRvRXJyb3JQYWdlUGFyYW1ldGVyID0ge1xuXHRjdXN0b21NZXNzYWdlcz86IEN1c3RvbU1lc3NhZ2VbXTtcblx0Y29uY3VycmVudEVkaXRGbGFnPzogYm9vbGVhbjtcblx0aXNEYXRhUmVjZWl2ZWRFcnJvcj86IGJvb2xlYW47XG5cdHRpdGxlPzogc3RyaW5nO1xuXHRkZXNjcmlwdGlvbj86IHN0cmluZztcblx0aXNJbml0aWFsTG9hZDUwM0Vycm9yPzogYm9vbGVhbjtcbn07XG5leHBvcnQgdHlwZSBOYXZpZ2F0aW9uVG9FcnJvclBhZ2VSZXN1bHQgPSB7XG5cdHRpdGxlPzogc3RyaW5nO1xuXHRkZXNjcmlwdGlvbj86IHN0cmluZztcblx0ZXJyb3JUeXBlPzogc3RyaW5nO1xuXHRuYXZpZ2F0ZUJhY2tUb09yaWdpbj86IGJvb2xlYW47XG5cdGhhbmRsZVNoZWxsQmFjaz86IGJvb2xlYW47XG5cdHNob3dNZXNzYWdlUGFnZU9uQ3JlYXRlRmFpbHVyZT86IGJvb2xlYW47XG59O1xuZXhwb3J0IHR5cGUgQ3VzdG9tTWVzc2FnZSA9IHtcblx0Y29kZTogc3RyaW5nO1xuXHR0ZXh0OiBzdHJpbmc7XG5cdHBlcnNpc3RlbnQ6IGJvb2xlYW47XG5cdHR5cGU6IE1lc3NhZ2VUeXBlO1xufTtcbmV4cG9ydCB0eXBlIFNob3dNZXNzYWdlRGlhbG9nUGFyYW1ldGVyID0ge1xuXHRjdXN0b21NZXNzYWdlcz86IEN1c3RvbU1lc3NhZ2VbXTtcblx0aXNPcGVyYXRpb25EaWFsb2dPcGVuPzogYm9vbGVhbjtcblx0Y29udGV4dD86IENvbnRleHQ7XG5cdGNvbmN1cnJlbnRFZGl0RmxhZz86IGJvb2xlYW47XG5cdGNvbnRyb2w/OiBDb250cm9sO1xuXHRzQWN0aW9uTmFtZT86IHN0cmluZztcblx0YVNlbGVjdGVkQ29udGV4dHM/OiBDb250ZXh0IHwgQ29udGV4dFtdIHwgbnVsbDtcblx0b25CZWZvcmVTaG93TWVzc2FnZT86IChtZXNzYWdlczogTWVzc2FnZVtdLCBzaG93TWVzc2FnZVBhcmFtZXRlcnM6IFNob3dNZXNzYWdlUGFyYW1ldGVycykgPT4gU2hvd01lc3NhZ2VQYXJhbWV0ZXJzO1xuXHR1bkhvbGRLZXk/OiBzdHJpbmc7XG5cdG92ZXJyaWRlVUlEZWNpc2lvbj86IGJvb2xlYW47XG5cdHNob3dCb3VuZFN0YXRlTWVzc2FnZXM/OiBib29sZWFuO1xuXHRib3VuZEFjdGlvbk5hbWU/OiBzdHJpbmc7XG5cdGVudGl0eVNldD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFNob3dNZXNzYWdlc1BhcmFtZXRlcnMgPSBTaG93TWVzc2FnZURpYWxvZ1BhcmFtZXRlciAmIHtcblx0bWVzc2FnZVBhZ2VOYXZpZ2F0aW9uQ2FsbGJhY2s/OiBGdW5jdGlvbjtcblx0c2hlbGxCYWNrPzogRnVuY3Rpb24gfCBib29sZWFuO1xuXHRpc0RhdGFSZWNlaXZlZEVycm9yPzogYm9vbGVhbjtcblx0aXNJbml0aWFsTG9hZDUwM0Vycm9yPzogYm9vbGVhbjtcblx0dGl0bGU/OiBzdHJpbmc7XG5cdGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufTtcbi8qKlxuICpcbiAqIERlZmluZXMgdGhlIG1lc3NhZ2UgZGV0YWlsIHJlbGV2YW50IGZvciB0aGUgTWVzc2FnZUJ1dHRvbiBidWlsZGluZyBibG9jayB0byBkaXNwbGF5IGEgcG9wb3Zlci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgTWVzc2FnZURldGFpbCA9IHtcblx0bWVzc2FnZTogTWVzc2FnZTtcblx0Z3JvdXBOYW1lPzogc3RyaW5nO1xuXHRhY3RpdmVUaXRsZUhhbmRsZXI/OiBGdW5jdGlvbjtcbn07XG5cbi8qKlxuICogQSBjb250cm9sbGVyIGV4dGVuc2lvbiBvZmZlcmluZyBtZXNzYWdlIGhhbmRsaW5nLlxuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHB1YmxpY1xuICogQGV4cGVyaW1lbnRhbCBBcyBvZiB2ZXJzaW9uIDEuOTAuMFxuICogQHNpbmNlIDEuOTAuMFxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5NZXNzYWdlSGFuZGxlclwiKVxuY2xhc3MgTWVzc2FnZUhhbmRsZXIgZXh0ZW5kcyBDb250cm9sbGVyRXh0ZW5zaW9uIHtcblx0cHJpdmF0ZSBzdHJpY3RXYXJuaW5nTWVzc2FnZXM6IE1lc3NhZ2VbXSA9IFtdO1xuXG5cdHByb3RlY3RlZCBiYXNlITogUGFnZUNvbnRyb2xsZXI7XG5cblx0cHJvdGVjdGVkIGhvbGRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdHByaXZhdGUgaG9sZE1zZ3NUb1Nob3cgPSBmYWxzZTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHR9XG5cblx0QG1ldGhvZE92ZXJyaWRlKClcblx0b25Jbml0KCk6IHZvaWQge1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9tZXNzYWdlVUlEZWNpc2lvblwiLCB1bmRlZmluZWQpO1xuXHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvbWVzc2FnZVVJRWxlbWVudElzQXZhaWxhYmxlXCIsIFByb21pc2UucmVzb2x2ZSgpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIHdhcm5pbmcgbWVzc2FnZXMgdG8gdGhlIG1lc3NhZ2UgaGFuZGxlci5cblx0ICogQHBhcmFtIGFNZXNzYWdlcyBUaGUgc3RyaWN0IHdhcm5pbmcgbWVzc2FnZXMgdG8gYmUgYWRkZWRcblx0ICovXG5cdGFkZFdhcm5pbmdNZXNzYWdlc1RvTWVzc2FnZUhhbmRsZXIoYU1lc3NhZ2VzOiBNZXNzYWdlW10pOiB2b2lkIHtcblx0XHR0aGlzLnN0cmljdFdhcm5pbmdNZXNzYWdlcyA9IHRoaXMuc3RyaWN0V2FybmluZ01lc3NhZ2VzLmNvbmNhdChhTWVzc2FnZXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgd2hldGhlciBvciBub3QgYSBtZXNzYWdlIGlzIGEgc3RyaWN0IHdhcm5pbmcgbWVzc2FnZSB0aGF0IHdhcyByZWNlaXZlZCBwcmV2aW91c2x5LlxuXHQgKiBAcGFyYW0gb01lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gYmUgY2hlY2tlZFxuXHQgKiBAcmV0dXJucyBXaGV0aGVyIG9yIG5vdCB0aGUgbWVzc2FnZSBpcyBhIHN0cmljdCB3YXJuaW5nIG1lc3NhZ2Vcblx0ICovXG5cdGlzU3RyaWN0V2FybmluZ01lc3NhZ2Uob01lc3NhZ2U6IE1lc3NhZ2UpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0dGhpcy5zdHJpY3RXYXJuaW5nTWVzc2FnZXMuZmluZCgobWVzc2FnZSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdG1lc3NhZ2UuZ2V0Q29kZSgpID09PSBvTWVzc2FnZS5nZXRDb2RlKCkgJiZcblx0XHRcdFx0XHRtZXNzYWdlLmdldE1lc3NhZ2UoKSA9PT0gb01lc3NhZ2UuZ2V0TWVzc2FnZSgpICYmXG5cdFx0XHRcdFx0bWVzc2FnZS5nZXRUeXBlKCkgPT09IG9NZXNzYWdlLmdldFR5cGUoKSAmJlxuXHRcdFx0XHRcdG1lc3NhZ2UuZ2V0RGVzY3JpcHRpb25VcmwoKSA9PT0gb01lc3NhZ2UuZ2V0RGVzY3JpcHRpb25VcmwoKSAmJlxuXHRcdFx0XHRcdGRlZXBFcXVhbChtZXNzYWdlLmdldFRhcmdldHMoKSwgb01lc3NhZ2UuZ2V0VGFyZ2V0cygpKSAmJlxuXHRcdFx0XHRcdG1lc3NhZ2UuZ2V0UGVyc2lzdGVudCgpID09PSBvTWVzc2FnZS5nZXRQZXJzaXN0ZW50KClcblx0XHRcdFx0KTtcblx0XHRcdH0pICE9PSB1bmRlZmluZWRcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENsZWFycyBhbGwgc3RyaWN0IHdhcm5pbmcgbWVzc2FnZXMgZnJvbSB0aGUgbWVzc2FnZSBoYW5kbGVyLlxuXHQgKi9cblx0Y2xlYXJTdHJpY3RXYXJuaW5nTWVzc2FnZXMoKTogdm9pZCB7XG5cdFx0dGhpcy5zdHJpY3RXYXJuaW5nTWVzc2FnZXMgPSBbXTtcblx0fVxuXG5cdGZpbHRlckVycm9yTWVzc2FnZXMobWVzc2FnZXM6IE1lc3NhZ2VbXSk6IE1lc3NhZ2VbXSB7XG5cdFx0cmV0dXJuIG1lc3NhZ2VzLmZpbHRlcigobWVzc2FnZSkgPT4gbWVzc2FnZS5nZXRUeXBlKCkgPT09IE1lc3NhZ2VUeXBlLkVycm9yKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IGJvdW5kIG1lc3NhZ2VzIGFyZSBzaG93biBpbiB0aGUgbWVzc2FnZSBkaWFsb2cuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5JbnN0ZWFkfS5cblx0ICpcblx0ICogSWYgdGhlIGJvdW5kIG1lc3NhZ2VzIGFyZSBzaG93biB0byB0aGUgdXNlciB3aXRoIGEgZGlmZmVyZW50IGNvbnRyb2wgbGlrZSB0aGUgKFRPRE86TGluaykgTWVzc2FnZUJ1dHRvblxuXHQgKiB0aGlzIG1ldGhvZCBoYXMgdG8gYmUgb3ZlcnJpZGRlbi5cblx0ICogQHJldHVybnMgRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCBib3VuZCBtZXNzYWdlcyBhcmUgc2hvd24gaW4gdGhlIG1lc3NhZ2UgZGlhbG9nLlxuXHQgKi9cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5JbnN0ZWFkKVxuXHRnZXRTaG93Qm91bmRNZXNzYWdlc0luTWVzc2FnZURpYWxvZygpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IGJvdW5kIG1lc3NhZ2VzIHNob3VsZCBiZSByZW1vdmVkIGZyb20gdGhlIGRpYWxvZy5cblx0ICpcblx0ICogRm9yIHRoZSBvYmplY3QgcGFnZSBpZiB0aGUgYm91bmQgbWVzc2FnZXMgYXJlIHNob3duIGluIHRoZSBtZXNzYWdlIHN0cmlwLCB0aGVuIHJlbW92ZSB0aGF0IGZyb20gdGhlIGRpYWxvZyB0byBhdm9pZCBkdXBsaWNhdGUgbWVzc2FnZXMuXG5cdCAqXG5cdCAqIE9ubHkgcmVtb3ZlIHRoZSBtZXNzYWdlcyBpZiBtb3JlIHRoYW4gb25lIG1lc3NhZ2UgaXMgcHJlc2VudCBpbiB0aGUgbWVzc2FnZSBtb2RlbC5cblx0ICogQHBhcmFtIHRyYW5zaXRpb25NZXNzYWdlcyBUaGUgbWVzc2FnZXMgdGhhdCBhcmUgc2hvd24gaW4gdGhlIG1lc3NhZ2UgZGlhbG9nLlxuXHQgKiBAcGFyYW0gY29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgbWVzc2FnZSBkaWFsb2cuXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdGhlIGJvdW5kIG1lc3NhZ2VzIHdoaWNoIHNob3VsZCBiZSBzaG93biBpbiB0aGUgbWVzc2FnZSBkaWFsb2cuXG5cdCAqL1xuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkluc3RlYWQpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0ZmlsdGVyQ29udGV4dEJvdW5kTWVzc2FnZXModHJhbnNpdGlvbk1lc3NhZ2VzOiBNZXNzYWdlW10sIGNvbnRleHQ6IENvbnRleHQpOiBNZXNzYWdlW10ge1xuXHRcdHJldHVybiB0cmFuc2l0aW9uTWVzc2FnZXM7XG5cdH1cblxuXHQvKipcblx0ICogQWxsb3dzIGNvbnN1bWVyIG9mIGEgbWVzc2FnZSBidXR0b24gQkIgdG8gZGVjaWRlIHdoaWNoIGJvdW5kIG1lc3NhZ2VzIHNob3VsZCBiZSBzaG93biBhbmQgaG93LlxuXHQgKlxuXHQgKiBUaGlzIGhvb2sgaXMgY2FsbGVkIHdoZW4gdGhlIG1lc3NhZ2UgYnV0dG9uIEJCIGRldGVjdHMgYSBjaGFuZ2UgaW4gdGhlIG1lc3NhZ2UgbW9kZWwuXG5cdCAqIFRoZSBob29rcyBhbGxvd3MgdG8gZGVmaW5lIGJlaGF2aW91ciBmb3IgbWVzc2FnZXMgaW4gdGhlIG1lc3NhZ2UgYnV0dG9uIEJCLlxuXHQgKlxuXHQgKiBDb25zdW1lcnMgd2lsbCBiZSBhYmxlIHRvIGRvIHRoZSBmb2xsb3dpbmcgd2l0aCB0aGlzIGhvb2suXG5cdCAqXG5cdCAqIDEuIEZpbHRlciBvdXQgbWVzc2FnZXMgc28gdGhhdCB0aGV5IGFyZSBub3Qgc2hvd24gb24gdGhlIG1lc3NhZ2UgYnV0dG9uLlxuXHQgKiAyLiBncm91cCB0aGUgbWVzc2FnZXMgYmFzZWQgb24gdGhlaXIgVUkuXG5cdCAqIDMuIHByb3ZpZGUgYSBwcmVzc2VyIGhhbmRsZXIgaW5jYXNlIHRoZSBtZXNzYWdlIHNob3VsZCBzaG93IGFzIGEgbGluay5cblx0ICogQHBhcmFtIF9tZXNzYWdlRGV0YWlscyBPYmplY3QgY29udGFpbmluZyB0aGUgZGV0YWlscyByZWxhdGVkIHRvIHRoZSBtZXNzYWdlLlxuXHQgKiBAcGFyYW0gX21lc3NhZ2VEZXRhaWxzLm1lc3NhZ2UgVGhlIG1lc3NhZ2UgZnJvbSB0aGUgbWVzc2FnZSBtb2RlbC5JZGVhbGx5LCBpdCBtdXN0IG5vdCBiZSBtb2RpZmllZCBkaXJlY3RseS5cblx0ICogQHBhcmFtIF9tZXNzYWdlRGV0YWlscy5ncm91cE5hbWUgVGhlIGdyb3VwIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IG1lc3NhZ2UuXG5cdCAqIEBwYXJhbSBfbWVzc2FnZURldGFpbHMuYWN0aXZlVGl0bGVIYW5kbGVyIEZ1bmN0aW9uIHRvIGhhbmRsZSB0aGUgY2xpY2sgZXZlbnQgb24gYSBtZXNzYWdlIGluIHRoZSBNZXNzYWdlQnV0dG9uIGJ1aWxkaW5nIGJsb2NrLlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCBtdXN0IGJlIHJldHVybmVkIGJ5IHRoZSBvdmVycmlkZGVuIG1ldGhvZC5cblx0ICogQHB1YmxpY1xuXHQgKiBAZXhwZXJpbWVudGFsXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoXCJBZnRlckFzeW5jXCIpXG5cdGFzeW5jIGJlZm9yZVNob3dNZXNzYWdlQnV0dG9uKF9tZXNzYWdlRGV0YWlsczogTWVzc2FnZURldGFpbFtdKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlZ2lzdGVyIHRvIGhvbGQgbWVzc2FnZXMgdW5pdGwgYSBwcm9jZXNzIGlzIGNvbXBsZXRlLlxuXHQgKlxuXHQgKiBUaGUgY2FsbGVyIGNhbiByZWdpc3RlciB0byBob2xkIHRoZSBtZXNzYWdlIGhhbmRsZXIgZnJvbSBzaG93aW5nIG1lc3NhZ2VzIHVudGlsIHRoZSBjYWxsZXIncyBwcm9jZXNzZXMgYXJlIGNvbXBsZXRlZC5cblx0ICogT24gcmVnaXN0ZXJpbmcgdGhlIGNhbGxlciBpcyByZXR1cm5lZCBhIHVuaXF1ZSBrZXkuXG5cdCAqIFRoZSBtZXNzYWdlcyB3aWxsIG5vdCBiZSBzaG93biBpbiB0aGUgVUkgd2l0aCBzdWJzZXF1ZW50ICdzaG93TWVzc2FnZURpYWxvZygpJyBjYWxscy5cblx0ICogVGhlIGNhbGxlciBuZWVkcyB0byB1c2UgJ3Nob3dNZXNzYWdlRGlhbG9nKDxrZXk+KScgYXQgdGhlIGVuZCBvZiBhbGwgaGlzIHByb2Nlc3NlcyB0byBzaG93IHRoZSBtZXNzYWdlcyBpbiB0aGUgVUkuXG5cdCAqXG5cdCAqIElmIG11bHRpcGxlIG93bmVycyByZWdpc3RlciBzaW11bHRhbmVvdXNseSwgdGhlbiBtZXNzYWdlcyBhcmUgc2hvd24gaW4gdGhlIFVJIG9ubHkgYWZ0ZXIgJ3Nob3dNZXNzYWdlRGlhbG9nKDxyZXNwZWN0aXZlX2tleT4pJyBpcyBjYWxsZWQgYnkgYWxsIHRoZSBwcm9jZXNzZXMnIG93bmVycy5cblx0ICogQHBhcmFtIGtleSBVbmlxdWUgaWRlbnRpZmllciB0byB1c2UsIElmIG5vdCBwcm92aWRlZCwgYSBVSUQgd291bGQgYmUgY3JlYXRlZCBhbmQgdXNlZCB0byByZWdpc3Rlci5cblx0ICogQHJldHVybnMgVW5pcXVlIEtleSB0byBiZSB1c2VkIGJ5IHRoZSBjYWxsZXIgdG8gc2hvdyBtZXNzYWdlcyBhdCBhIGxhdGVyIHBvaW50IG9mIHRpbWUuXG5cdCAqL1xuXHRyZWdpc3RlclRvSG9sZE1lc3NhZ2VzKGtleT86IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgdW5pcXVlS2V5ID0ga2V5ID8/IHVpZCgpO1xuXHRcdGlmICghdGhpcy5ob2xkS2V5cy5pbmNsdWRlcyh1bmlxdWVLZXkpKSB7XG5cdFx0XHR0aGlzLmhvbGRLZXlzLnB1c2godW5pcXVlS2V5KTtcblx0XHR9XG5cdFx0cmV0dXJuIHVuaXF1ZUtleTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhciBhbGwgZXhpc3RpbmcgaGVsZCBrZXlzLlxuXHQgKi9cblx0cmVzZXRIb2xkS2V5cygpOiB2b2lkIHtcblx0XHR0aGlzLmhvbGRLZXlzID0gW107XG5cdH1cblxuXHQvKipcblx0ICogU2hvd3MgYSBtZXNzYWdlIGRpYWxvZyB3aXRoIHRyYW5zaXRpb24gbWVzc2FnZXMgaWYgdGhlcmUgYXJlIGFueS5cblx0ICogVGhlIG1lc3NhZ2UgZGlhbG9nIGlzIHNob3duIGFzIGEgbW9kYWwgZGlhbG9nLiBPbmNlIHRoZSB1c2VyIGNvbmZpcm1zIHRoZSBkaWFsb2csIGFsbCB0cmFuc2l0aW9uIG1lc3NhZ2VzXG5cdCAqIGFyZSByZW1vdmVkIGZyb20gdGhlIG1lc3NhZ2UgbW9kZWwuIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgbWVzc2FnZSwgYSBsaXN0IG9mIG1lc3NhZ2VzIGlzIHNob3duLiBUaGUgdXNlclxuXHQgKiBjYW4gZmlsdGVyIG9uIG1lc3NhZ2UgdHlwZXMgYW5kIGNhbiBkaXNwbGF5IGRldGFpbHMgYXMgd2VsbCBhcyB0aGUgbG9uZyB0ZXh0LiBJZiB0aGVyZSBpcyBvbmUgbWVzc2FnZSxcblx0ICogdGhlIGRpYWxvZyBpbW1lZGlhdGVseSBzaG93cyB0aGUgZGV0YWlscyBvZiB0aGUgbWVzc2FnZS4gSWYgdGhlcmUgaXMganVzdCBvbmUgc3VjY2VzcyBtZXNzYWdlLCBhIG1lc3NhZ2Vcblx0ICogdG9hc3QgaXMgc2hvd24gaW5zdGVhZC5cblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzIFBSSVZBVEVcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgb25jZSB0aGUgdXNlciBjbG9zZXMgdGhlIGRpYWxvZy4gSWYgdGhlcmUgYXJlIG5vIG1lc3NhZ2VzXG5cdCAqIHRvIGJlIHNob3duLCB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZCBpbW1lZGlhdGVseVxuXHQgKiBAcHVibGljXG5cdCAqIEBleHBlcmltZW50YWwgQXMgb2YgdmVyc2lvbiAxLjkwLjBcblx0ICogQHNpbmNlIDEuOTAuMFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIHNob3dNZXNzYWdlRGlhbG9nKG1QYXJhbWV0ZXJzPzogU2hvd01lc3NhZ2VEaWFsb2dQYXJhbWV0ZXIpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gdGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsO1xuXHRcdC8vIHJlbW92ZSBzdHJpY3Qgd2FybmluZyBtZXNzYWdlcyBmcm9tIHRoZSBtZXNzYWdlIG1vZGVsIGJlZm9yZSBzaG93aW5nIHRoZSBtZXNzYWdlIGRpYWxvZ1xuXHRcdGF3YWl0IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvbWVzc2FnZVVJRWxlbWVudElzQXZhaWxhYmxlXCIpO1xuXG5cdFx0Y29uc3QgbWVzc2FnZXNJbk1vZGVsID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKTtcblx0XHRjb25zdCBkdXBsaWNhdGVXYXJuaW5nTWVzc2FnZSA9IG1lc3NhZ2VzSW5Nb2RlbC5maWx0ZXIoKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IHtcblx0XHRcdHJldHVybiB0aGlzLmlzU3RyaWN0V2FybmluZ01lc3NhZ2UobWVzc2FnZSk7XG5cdFx0fSk7XG5cdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKGR1cGxpY2F0ZVdhcm5pbmdNZXNzYWdlKTtcblxuXHRcdGNvbnN0IGN1c3RvbU1lc3NhZ2VzID0gbVBhcmFtZXRlcnMgJiYgbVBhcmFtZXRlcnMuY3VzdG9tTWVzc2FnZXMgPyBtUGFyYW1ldGVycy5jdXN0b21NZXNzYWdlcyA6IHVuZGVmaW5lZCxcblx0XHRcdG9PUEludGVybmFsQmluZGluZ0NvbnRleHQgPSB0aGlzLmJhc2UuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgdmlld1R5cGUgPSAodGhpcy5iYXNlLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIE9iamVjdFdpdGhDb252ZXJ0ZXJUeXBlKS5jb252ZXJ0ZXJUeXBlO1xuXHRcdC8vIHNldCBpc0FjdGlvblBhcmFtZXRlckRpYWxvZyBvcGVuIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgaW4gdGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIHRvIGRlY2lkZSB3aGV0aGVyIG1lc3NhZ2UgZGlhbG9nIHNob3VsZCBvcGVuIG9yIG5vdFxuXHRcdGlmIChtUGFyYW1ldGVycyAmJiBtUGFyYW1ldGVycy5pc09wZXJhdGlvbkRpYWxvZ09wZW4gJiYgb09QSW50ZXJuYWxCaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0b09QSW50ZXJuYWxCaW5kaW5nQ29udGV4dC5zZXRQcm9wZXJ0eShcImlzT3BlcmF0aW9uRGlhbG9nT3BlblwiLCB0cnVlKTtcblx0XHR9XG5cdFx0Y29uc3QgYlNob3dCb3VuZE1lc3NhZ2VzID0gdGhpcy5nZXRTaG93Qm91bmRNZXNzYWdlc0luTWVzc2FnZURpYWxvZygpO1xuXHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IChcblx0XHRcdG1QYXJhbWV0ZXJzICYmIG1QYXJhbWV0ZXJzLmNvbnRleHQgPyBtUGFyYW1ldGVycy5jb250ZXh0IDogdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKVxuXHRcdCkgYXMgT0RhdGFWNENvbnRleHQ7XG5cdFx0Ly9jb25zdCBiRXRhZ01lc3NhZ2UgPSBtUGFyYW1ldGVycyAmJiBtUGFyYW1ldGVycy5iSGFzRXRhZ01lc3NhZ2U7XG5cdFx0Ly8gcmVzZXQgIGlzT3BlcmF0aW9uRGlhbG9nT3BlblxuXHRcdC8vIGNhbm5vdCBkbyB0aGlzIG9wZXJhdGlvbnMuanMgc2luY2UgaXQgaXMgbm90IGF3YXJlIG9mIHRoZSB2aWV3XG5cdFx0aWYgKG9PUEludGVybmFsQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdG9PUEludGVybmFsQmluZGluZ0NvbnRleHQuc2V0UHJvcGVydHkoXCJpc09wZXJhdGlvbkRpYWxvZ09wZW5cIiwgZmFsc2UpO1xuXHRcdH1cblx0XHRyZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oXG5cdFx0XHRmdW5jdGlvbiAodGhpczogTWVzc2FnZUhhbmRsZXIsIHJlc29sdmU6ICgpID0+IHZvaWQsIHJlamVjdDogKCkgPT4gdm9pZCk6IHZvaWQge1xuXHRcdFx0XHQvLyB3ZSBoYXZlIHRvIHNldCBhIHRpbWVvdXQgdG8gYmUgYWJsZSB0byBhY2Nlc3MgdGhlIG1vc3QgcmVjZW50IG1lc3NhZ2VzXG5cdFx0XHRcdHNldFRpbWVvdXQoXG5cdFx0XHRcdFx0ZnVuY3Rpb24gKHRoaXM6IE1lc3NhZ2VIYW5kbGVyKTogdm9pZCB7XG5cdFx0XHRcdFx0XHQvLyBUT0RPOiBncmVhdCBBUEkgLSB3aWxsIGJlIGNoYW5nZWQgbGF0ZXJcblx0XHRcdFx0XHRcdHRoaXMucHJvY2Vzc0FuZFNob3dNZXNzYWdlcyhcblx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMgPz8ge30sXG5cdFx0XHRcdFx0XHRcdG9CaW5kaW5nQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0YlNob3dCb3VuZE1lc3NhZ2VzLFxuXHRcdFx0XHRcdFx0XHRjdXN0b21NZXNzYWdlcyA/PyBbXSxcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZSxcblx0XHRcdFx0XHRcdFx0cmVqZWN0LFxuXHRcdFx0XHRcdFx0XHR2aWV3VHlwZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9LmJpbmQodGhpcyksXG5cdFx0XHRcdFx0MFxuXHRcdFx0XHQpO1xuXHRcdFx0fS5iaW5kKHRoaXMpXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQcm9jZXNzIHRoZSBtZXNzYWdlcyBhbmQgc2hvdyB0aGVtIHdoZW4gZXhwZWN0ZWQuXG5cdCAqXG5cdCAqIFdlIGZpbHRlciB0aGUgbWVzc2FnZXMgdG8gc2hvdyBhbmQgaG9sZCB0aGVtIHVudGlsIGFsbCByZWdpc3RlcmVkIHByb2Nlc3NlcyBjYWxsIHNob3dNZXNzYWdlRGlhbG9nIHdpdGggdGhlaXIgcmVzcGVjdGl2ZSBoZWxkIGtleXMuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzIFBhcmFtZXRlcnMgdG8gc2hvdyBtZXNzYWdlIGRpYWxvZy5cblx0ICogQHBhcmFtIGJpbmRpbmdDb250ZXh0IEJpbmQgY29udGV4dCBvZiB0aGUgcGFnZS5cblx0ICogQHBhcmFtIHNob3dCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyBTaG91bGQgYm91bmQgbWVzc2FnZXMgYmUgc2hvd24uXG5cdCAqIEBwYXJhbSBjdXN0b21NZXNzYWdlcyBDdXN0b20gbWVzc2FnZXMgdG8gYWRkLlxuXHQgKiBAcGFyYW0gc3VjY2VzcyBTdWNjZXNzIGNhbGxiYWNrLlxuXHQgKiBAcGFyYW0gZmFpbHVyZSBGYWlsdXJlIGNhbGxiYWNrLlxuXHQgKiBAcGFyYW0gdmlld1R5cGUgVmlldyB0eXBlLCBsaXN0IHJlcG9ydCBvciBvYmplY3QgcGFnZS5cblx0ICovXG5cdHByb2Nlc3NBbmRTaG93TWVzc2FnZXMoXG5cdFx0cGFyYW1ldGVyczogU2hvd01lc3NhZ2VEaWFsb2dQYXJhbWV0ZXIsXG5cdFx0YmluZGluZ0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0LFxuXHRcdHNob3dCb3VuZFRyYW5zaXRpb25NZXNzYWdlczogYm9vbGVhbixcblx0XHRjdXN0b21NZXNzYWdlczogQ3VzdG9tTWVzc2FnZVtdLFxuXHRcdHN1Y2Nlc3M6ICgpID0+IHZvaWQsXG5cdFx0ZmFpbHVyZTogKCkgPT4gdm9pZCxcblx0XHR2aWV3VHlwZT86IHN0cmluZ1xuXHQpOiB2b2lkIHtcblx0XHRjb25zdCB7XG5cdFx0XHRjb25jdXJyZW50RWRpdEZsYWcsXG5cdFx0XHRjb250cm9sLFxuXHRcdFx0c0FjdGlvbk5hbWUsXG5cdFx0XHRvbkJlZm9yZVNob3dNZXNzYWdlLFxuXHRcdFx0dW5Ib2xkS2V5LFxuXHRcdFx0aXNPcGVyYXRpb25EaWFsb2dPcGVuOiBmb3JjZVNob3dVSUVsZW1lbnQgPSBmYWxzZSxcblx0XHRcdG92ZXJyaWRlVUlEZWNpc2lvbixcblx0XHRcdHNob3dCb3VuZFN0YXRlTWVzc2FnZXNcblx0XHR9ID0gcGFyYW1ldGVycztcblx0XHR0aGlzLmhvbGRNc2dzVG9TaG93ID0gdHJ1ZTtcblxuXHRcdC8vIENyZWF0ZSBhIFVJIGRlY2lzaW9uLlxuXHRcdGNvbnN0IG5ld1VJRGVjaXNpb25zID0gbWVzc2FnZUhhbmRsaW5nLmdldFVJRGVjaXNpb25zKFxuXHRcdFx0Y3VzdG9tTWVzc2FnZXMsXG5cdFx0XHRiaW5kaW5nQ29udGV4dCxcblx0XHRcdHNob3dCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyxcblx0XHRcdGNvbmN1cnJlbnRFZGl0RmxhZyxcblx0XHRcdGNvbnRyb2wsXG5cdFx0XHRzQWN0aW9uTmFtZSxcblx0XHRcdG9uQmVmb3JlU2hvd01lc3NhZ2UsXG5cdFx0XHR2aWV3VHlwZSxcblx0XHRcdHNob3dCb3VuZFN0YXRlTWVzc2FnZXMsXG5cdFx0XHRwYXJhbWV0ZXJzLFxuXHRcdFx0Z2V0UmVzb3VyY2VNb2RlbCh0aGlzLmdldFZpZXcoKSksXG5cdFx0XHR0aGlzXG5cdFx0KTtcblx0XHR0aGlzLnVwZGF0ZVVJRGVjaXNpb25zKG5ld1VJRGVjaXNpb25zLCBvdmVycmlkZVVJRGVjaXNpb24pO1xuXHRcdGNvbnN0IHVpRWxlbWVudElzQXZhaWxhYmxlID0gdGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLmdldE1vZGVsKFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwiL21lc3NhZ2VVSUVsZW1lbnRJc0F2YWlsYWJsZVwiKTtcblx0XHQodGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsKT8uc2V0UHJvcGVydHkoXG5cdFx0XHRcIi9tZXNzYWdlVUlFbGVtZW50SXNBdmFpbGFibGVcIixcblx0XHRcdHVpRWxlbWVudElzQXZhaWxhYmxlLnRoZW4oXG5cdFx0XHRcdGFzeW5jIGZ1bmN0aW9uICh0aGlzOiBNZXNzYWdlSGFuZGxlcik6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0XHRcdHRoaXMucmVtb3ZlSG9sZEtleSh1bkhvbGRLZXkgPz8gY29udHJvbD8uZ2V0SWQoKSk7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2hvd01lc3NhZ2VzV2l0aENvbmR0aW9ucyhmb3JjZVNob3dVSUVsZW1lbnQsIHN1Y2Nlc3MsIGZhaWx1cmUpO1xuXHRcdFx0XHR9LmJpbmQodGhpcylcblx0XHRcdClcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNob3cgTWVzc2FnZXMgaW4gdGhlIFVJIGJhc2VkIG9uIGNvbmRpdGlvbnMuXG5cdCAqIEBwYXJhbSBmb3JjZVNob3dVSUVsZW1lbnRcblx0ICogQHBhcmFtIHN1Y2Nlc3Ncblx0ICogQHBhcmFtIGZhaWx1cmVcblx0ICovXG5cdGFzeW5jIHNob3dNZXNzYWdlc1dpdGhDb25kdGlvbnMoXG5cdFx0Zm9yY2VTaG93VUlFbGVtZW50ID0gZmFsc2UsXG5cdFx0c3VjY2Vzcz86IChyZXQ/OiB1bmtub3duKSA9PiB2b2lkLFxuXHRcdGZhaWx1cmU/OiAoZXJyPzogdW5rbm93bikgPT4gdm9pZFxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzaG93VUlFbGVtZW50ID0gZm9yY2VTaG93VUlFbGVtZW50IHx8IHRoaXMuY2hlY2tUb1Nob3dVSUVsZW1lbnQoKTtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gdGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsO1xuXHRcdGlmIChzaG93VUlFbGVtZW50ICYmIGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvbWVzc2FnZVVJRGVjaXNpb25cIikpIHtcblx0XHRcdC8vIFNob3cgVUkgZWxlbWVudCBmb3IgdGhlIHByZXNlbnQgZGVjaXNpb24gYW5kIGNsZWFyIHRoZSBkZWNpc2lvbi5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IHJldCA9IGF3YWl0IG1lc3NhZ2VIYW5kbGluZy5zaG93TWVzc2FnZXNJblVJKGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvbWVzc2FnZVVJRGVjaXNpb25cIikpO1xuXHRcdFx0XHRzdWNjZXNzPy4ocmV0KTtcblx0XHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3IoYEZFIDogVjQgOiBNZXNzYWdlSGFuZGxlciA6IEVycm9yIG9uIHRyeWluZyB0byBzaG93IFVJIGVsZW1lbnQ6ICR7ZXJyfWApO1xuXHRcdFx0XHRmYWlsdXJlPy4oZXJyKTtcblx0XHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9tZXNzYWdlVUlFbGVtZW50SXNBdmFpbGFibGVcIiwgUHJvbWlzZS5yZXNvbHZlKCkpO1xuXHRcdFx0fVxuXHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9tZXNzYWdlVUlEZWNpc2lvblwiLCB1bmRlZmluZWQpO1xuXHRcdFx0dGhpcy5jbGVhclN0cmljdFdhcm5pbmdNZXNzYWdlcygpO1xuXHRcdFx0dGhpcy5ob2xkTXNnc1RvU2hvdyA9IGZhbHNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRMb2cuaW5mbyhcIkZFIDogVjQgOiBNZXNzYWdlSGFuZGxlciA6IEhvbGRpbmcgbWVzc2FnZXMgdW50aWwgYSByZWdpc3RlcmVkIHByb2Nlc3MgXCIpO1xuXHRcdFx0c3VjY2Vzcz8uKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFlvdSBjYW4gcmVtb3ZlIHRoZSBleGlzdGluZyB0cmFuc2l0aW9uIG1lc3NhZ2UgZnJvbSB0aGUgbWVzc2FnZSBtb2RlbCB3aXRoIHRoaXMgbWV0aG9kLlxuXHQgKiBXaXRoIGV2ZXJ5IHVzZXIgaW50ZXJhY3Rpb24gdGhhdCBjYXVzZXMgc2VydmVyIGNvbW11bmljYXRpb24gKGxpa2UgY2xpY2tpbmcgb24gYW4gYWN0aW9uLCBjaGFuZ2luZyBkYXRhKSxcblx0ICogdGhpcyBtZXRob2QgcmVtb3ZlcyB0aGUgZXhpc3RpbmcgdHJhbnNpdGlvbiBtZXNzYWdlcyBmcm9tIHRoZSBtZXNzYWdlIG1vZGVsLlxuXHQgKiBAcGFyYW0gW2tlZXBCb3VuZE1lc3NhZ2VdIENoZWNrcyBpZiB0aGUgYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBhcmUgbm90IHRvIGJlIHJlbW92ZWRcblx0ICogQHBhcmFtIGtlZXBVbmJvdW5kTWVzc2FnZVxuXHQgKiBAcGFyYW0gc1BhdGhUb0JlUmVtb3ZlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdHJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyhrZWVwQm91bmRNZXNzYWdlPzogYm9vbGVhbiwga2VlcFVuYm91bmRNZXNzYWdlPzogYm9vbGVhbiwgc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZyk6IHZvaWQge1xuXHRcdGlmICgha2VlcEJvdW5kTWVzc2FnZSkge1xuXHRcdFx0bWVzc2FnZUhhbmRsaW5nLnJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKHNQYXRoVG9CZVJlbW92ZWQpO1xuXHRcdH1cblx0XHRpZiAoIWtlZXBVbmJvdW5kTWVzc2FnZSkge1xuXHRcdFx0bWVzc2FnZUhhbmRsaW5nLnJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRoYXQgcmV0dXJucyBhbGwgdGhlIHBhcmFtZXRlcnMgbmVlZGVkIHRvIGhhbmRsZSB0aGUgbmF2aWdhdGlvbiB0byB0aGUgZXJyb3IgcGFnZS5cblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzXG5cdCAqIEByZXR1cm5zIFRoZSBwYXJhbWV0ZXJzIG5lY2Vzc2FyeSBmb3IgdGhlIG5hdmlnYXRpb24gdG8gdGhlIGVycm9yIHBhZ2Vcblx0ICovXG5cdF9jaGVja05hdmlnYXRpb25Ub0Vycm9yUGFnZShtUGFyYW1ldGVycz86IE5hdmlnYXRpb25Ub0Vycm9yUGFnZVBhcmFtZXRlcik6IE5hdmlnYXRpb25Ub0Vycm9yUGFnZVJlc3VsdCB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgYVVuYm91bmRNZXNzYWdlcyA9IG1lc3NhZ2VIYW5kbGluZy5nZXRNZXNzYWdlcygpO1xuXHRcdGNvbnN0IGJTaG93Qm91bmRUcmFuc2l0aW9uTWVzc2FnZXMgPSB0aGlzLmdldFNob3dCb3VuZE1lc3NhZ2VzSW5NZXNzYWdlRGlhbG9nKCk7XG5cdFx0Y29uc3QgYUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzID0gYlNob3dCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyA/IG1lc3NhZ2VIYW5kbGluZy5nZXRNZXNzYWdlcyh0cnVlLCB0cnVlKSA6IFtdO1xuXHRcdGNvbnN0IGFDdXN0b21NZXNzYWdlcyA9IG1QYXJhbWV0ZXJzICYmIG1QYXJhbWV0ZXJzLmN1c3RvbU1lc3NhZ2VzID8gbVBhcmFtZXRlcnMuY3VzdG9tTWVzc2FnZXMgOiBbXTtcblx0XHRjb25zdCBiSXNTdGlja3lFZGl0TW9kZSA9IENvbW1vblV0aWxzLmlzU3RpY2t5RWRpdE1vZGUodGhpcy5iYXNlLmdldFZpZXcoKSk7XG5cdFx0bGV0IG1NZXNzYWdlUGFnZVBhcmFtZXRlcnM6IE5hdmlnYXRpb25Ub0Vycm9yUGFnZVJlc3VsdCB8IHVuZGVmaW5lZDtcblxuXHRcdC8vIFRPRE86IFN0aWNrIG1vZGUgY2hlY2sgaXMgb2theSBhcyBsb25nIGFzIHRoZSBjb250cm9sbGVyIGV4dGVuc2lvbiBpcyB1c2VkIHdpdGggc2FwLmZlLmNvcmUgYW5kIHNhcC5mZS5jb3JlLkFwcENvbXBvbmVudC5cblx0XHQvLyBJdCBtaWdodCBiZSBiZXR0ZXIgdG8gcHJvdmlkZSBhbiBleHRlbnNpb24gdG8gdGhlIGNvbnN1bWVyIG9mIHRoZSBjb250cm9sbGVyIGV4dGVuc2lvbiB0byBwcm92aWRlIHRoaXMgdmFsdWUuXG5cblx0XHQvLyBUaGUgbWVzc2FnZSBwYWdlIGNhbiBvbmx5IHNob3cgMSBtZXNzYWdlIHRvZGF5LCBzbyB3ZSBuYXZpZ2F0ZSB0byBpdCB3aGVuIDpcblx0XHQvLyAxLiBUaGVyZSBhcmUgbm8gYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlcyB0byBzaG93LFxuXHRcdC8vIDIuIFRoZXJlIGFyZSBubyBjdXN0b20gbWVzc2FnZXMgdG8gc2hvdywgJlxuXHRcdC8vIDMuIFRoZXJlIGlzIGV4YWN0bHkgMSB1bmJvdW5kIG1lc3NhZ2UgaW4gdGhlIG1lc3NhZ2UgbW9kZWwgd2l0aCBzdGF0dXNDb2RlPTUwMyBhbmQgcmV0cnktQWZ0ZXIgYXZhaWxhYmxlXG5cdFx0Ly8gNC4gcmV0cnlBZnRlciBpcyBncmVhdGVyIHRoYW4gMTIwIHNlY29uZHNcblx0XHQvL1xuXHRcdC8vIEluIEFkZGl0aW9uLCBuYXZpZ2F0aW5nIGF3YXkgZnJvbSBhIHN0aWNreSBzZXNzaW9uIHdpbGwgZGVzdHJveSB0aGUgc2Vzc2lvbiBzbyB3ZSBkbyBub3QgbmF2aWdhdGUgdG8gbWVzc2FnZSBwYWdlIGZvciBub3cuXG5cdFx0Ly8gVE9ETzogY2hlY2sgaWYgbmF2aWdhdGlvbiBzaG91bGQgYmUgZG9uZSBpbiBzdGlja3kgZWRpdCBtb2RlLlxuXHRcdGlmIChtUGFyYW1ldGVycz8uaXNEYXRhUmVjZWl2ZWRFcnJvciA9PT0gdHJ1ZSkge1xuXHRcdFx0bU1lc3NhZ2VQYWdlUGFyYW1ldGVycyA9IHtcblx0XHRcdFx0dGl0bGU6IG1QYXJhbWV0ZXJzLnRpdGxlLFxuXHRcdFx0XHRkZXNjcmlwdGlvbjogbVBhcmFtZXRlcnMuZGVzY3JpcHRpb24sXG5cdFx0XHRcdG5hdmlnYXRlQmFja1RvT3JpZ2luOiB0cnVlLFxuXHRcdFx0XHRlcnJvclR5cGU6IFwiUGFnZU5vdEZvdW5kXCJcblx0XHRcdH07XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdCFiSXNTdGlja3lFZGl0TW9kZSAmJlxuXHRcdFx0IWFCb3VuZFRyYW5zaXRpb25NZXNzYWdlcy5sZW5ndGggJiZcblx0XHRcdCFhQ3VzdG9tTWVzc2FnZXMubGVuZ3RoICYmXG5cdFx0XHQoYVVuYm91bmRNZXNzYWdlcy5sZW5ndGggPT09IDEgfHwgbVBhcmFtZXRlcnM/LmlzSW5pdGlhbExvYWQ1MDNFcnJvciA9PT0gdHJ1ZSlcblx0XHQpIHtcblx0XHRcdGNvbnN0IG9NZXNzYWdlID0gYVVuYm91bmRNZXNzYWdlc1swXTtcblx0XHRcdGNvbnN0IG9UZWNobmljYWxEZXRhaWxzID0gb01lc3NhZ2UuZ2V0VGVjaG5pY2FsRGV0YWlscygpIGFzIE1lc3NhZ2VUZWNobmljYWxEZXRhaWxzIHwgdW5kZWZpbmVkO1xuXHRcdFx0aWYgKG9UZWNobmljYWxEZXRhaWxzPy5odHRwU3RhdHVzID09PSA1MDMpIHtcblx0XHRcdFx0bU1lc3NhZ2VQYWdlUGFyYW1ldGVycyA9IHRoaXMuX2dldEhUVFA1MDNNZXNzYWdlUGFyYW1ldGVycyhvTWVzc2FnZSwgb1RlY2huaWNhbERldGFpbHMpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gbU1lc3NhZ2VQYWdlUGFyYW1ldGVycztcblx0fVxuXG5cdF9nZXRIVFRQNTAzTWVzc2FnZVBhcmFtZXRlcnMobWVzc2FnZTogTWVzc2FnZSwgdGVjaG5pY2FsRGV0YWlsczogTWVzc2FnZVRlY2huaWNhbERldGFpbHMpOiBOYXZpZ2F0aW9uVG9FcnJvclBhZ2VSZXN1bHQgfCB1bmRlZmluZWQge1xuXHRcdGxldCBtZXNzYWdlUGFnZVBhcmFtZXRlcnM6IE5hdmlnYXRpb25Ub0Vycm9yUGFnZVJlc3VsdCB8IHVuZGVmaW5lZDtcblxuXHRcdGNvbnN0IHNlY29uZHNCZWZvcmVSZXRyeSA9XG5cdFx0XHR0ZWNobmljYWxEZXRhaWxzLnJldHJ5QWZ0ZXIgIT09IHVuZGVmaW5lZCA/IHRoaXMuX2dldFNlY29uZHNCZWZvcmVSZXRyeUFmdGVyKHRlY2huaWNhbERldGFpbHMucmV0cnlBZnRlcikgOiB1bmRlZmluZWQ7XG5cblx0XHRpZiAoc2Vjb25kc0JlZm9yZVJldHJ5ID09PSB1bmRlZmluZWQgfHwgc2Vjb25kc0JlZm9yZVJldHJ5ID4gMTIwKSB7XG5cdFx0XHRjb25zdCByZXRyeUFmdGVyTWVzc2FnZSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRSZXRyeUFmdGVyTWVzc2FnZShtZXNzYWdlKTtcblx0XHRcdG1lc3NhZ2VQYWdlUGFyYW1ldGVycyA9IHtcblx0XHRcdFx0ZGVzY3JpcHRpb246IHJldHJ5QWZ0ZXJNZXNzYWdlID8gYCR7cmV0cnlBZnRlck1lc3NhZ2V9ICR7bWVzc2FnZS5nZXRNZXNzYWdlKCl9YCA6IG1lc3NhZ2UuZ2V0TWVzc2FnZSgpLFxuXHRcdFx0XHRuYXZpZ2F0ZUJhY2tUb09yaWdpbjogdHJ1ZSxcblx0XHRcdFx0ZXJyb3JUeXBlOiBcIlVuYWJsZVRvTG9hZFwiXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHJldHVybiBtZXNzYWdlUGFnZVBhcmFtZXRlcnM7XG5cdH1cblxuXHRfZ2V0U2Vjb25kc0JlZm9yZVJldHJ5QWZ0ZXIoZFJldHJ5QWZ0ZXI6IERhdGUpOiBudW1iZXIge1xuXHRcdGNvbnN0IGRDdXJyZW50RGF0ZVRpbWUgPSBuZXcgRGF0ZSgpLFxuXHRcdFx0aUN1cnJlbnREYXRlVGltZUluTWlsbGlTZWNvbmRzID0gZEN1cnJlbnREYXRlVGltZS5nZXRUaW1lKCksXG5cdFx0XHRpUmV0cnlBZnRlckRhdGVUaW1lSW5NaWxsaVNlY29uZHMgPSBkUmV0cnlBZnRlci5nZXRUaW1lKCksXG5cdFx0XHRpU2Vjb25kc0JlZm9yZVJldHJ5ID0gKGlSZXRyeUFmdGVyRGF0ZVRpbWVJbk1pbGxpU2Vjb25kcyAtIGlDdXJyZW50RGF0ZVRpbWVJbk1pbGxpU2Vjb25kcykgLyAxMDAwO1xuXHRcdHJldHVybiBpU2Vjb25kc0JlZm9yZVJldHJ5O1xuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZSB0aGUgZXhpc3RpbmcgVUkgZGVjaXNpb25zIHdpdGggdGhlIG5ldyBvbmVzLlxuXHQgKiBAcGFyYW0gbmV3VUlEZWNpc2lvbnMgSW4gY29tbWluZyBVSSBkZWNpc2lvbnMuXG5cdCAqIEBwYXJhbSBvdmVycmlkZVVJRGVjaXNpb24gT3ZlcnJpZGUgdGhlIGV4aXN0aW5nIFVJIGRlY2lzaW9uIHRvIHNob3cgbWVzc2FnZXMgd2l0aCB0aGUgbmV3IG9uZS5cblx0ICpcblx0ICogJ292ZXJyaWRlVUlEZWNpc2lvbicsIFRoaXMgd291bGQgYmUgbmVlZGVkIHdoZW4gdGhlcmUgaXMgYSBjaGFuZ2UgaW4gcGFnZSBjb250ZXh0IGFuZCB0aGUgcGFyYW10ZXJzIHRvIGNyZWF0ZSB0aGUgbmV3IFVJIGRlY2lzaW9uIGFyZSBkaWZmZXJlbnQuXG5cdCAqL1xuXHR1cGRhdGVVSURlY2lzaW9ucyhuZXdVSURlY2lzaW9uczogTWVzc2FnZVVJRGVjaXNpb25zLCBvdmVycmlkZVVJRGVjaXNpb24gPSBmYWxzZSk6IHZvaWQge1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0Y29uc3Qgb2xkVUlEZWNpc2lvbnMgPSBpbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KFwiL21lc3NhZ2VVSURlY2lzaW9uXCIpIGFzIE1lc3NhZ2VVSURlY2lzaW9ucztcblx0XHRsZXQgYWxsTWVzc2FnZXNUb1Nob3c6IE1lc3NhZ2VbXSA9IFtdO1xuXHRcdGxldCBtZXJnZWRVSURlY2lzaW9uO1xuXHRcdGlmIChvbGRVSURlY2lzaW9ucyAmJiBvdmVycmlkZVVJRGVjaXNpb24gPT09IGZhbHNlKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG9sZFVJRGVjaXNpb25zLm1lc3NhZ2VzVG9TaG93Lmxlbmd0aCA9PT0gMSAmJlxuXHRcdFx0XHRuZXdVSURlY2lzaW9ucy5tZXNzYWdlc1RvU2hvdy5sZW5ndGggPT09IDEgJiZcblx0XHRcdFx0b2xkVUlEZWNpc2lvbnMubWVzc2FnZXNUb1Nob3dbMF0uZ2V0Q29kZSgpID09PSBcIkNfQ09NTU9OX1NVQ0NFU1NfTUVTU0FHRVwiICYmXG5cdFx0XHRcdG5ld1VJRGVjaXNpb25zLm1lc3NhZ2VzVG9TaG93WzBdLmdldENvZGUoKSA9PT0gXCJDX0NPTU1PTl9TVUNDRVNTX01FU1NBR0VcIlxuXHRcdFx0KSB7XG5cdFx0XHRcdC8vIENoZWNrIGlmIGJvdGggYXJlIGdlbmVyaWMgc3VjY2VzcyBtZXNzYWdlcywgdGhlbiB3ZSBzaG93IG9ubHkgb25lIG1lc3NhZ2UuXG5cdFx0XHRcdGFsbE1lc3NhZ2VzVG9TaG93ID0gb2xkVUlEZWNpc2lvbnMubWVzc2FnZXNUb1Nob3c7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhbGxNZXNzYWdlc1RvU2hvdyA9IEFycmF5LmZyb20obmV3IFNldChbLi4ub2xkVUlEZWNpc2lvbnMubWVzc2FnZXNUb1Nob3csIC4uLm5ld1VJRGVjaXNpb25zLm1lc3NhZ2VzVG9TaG93XSkpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgZWxlbWVudHMgPSBbb2xkVUlEZWNpc2lvbnMudWlFbGVtZW50VG9Vc2UsIG5ld1VJRGVjaXNpb25zLnVpRWxlbWVudFRvVXNlXTtcblx0XHRcdC8vIERlZmF1bHQgd2Ugc2hvdyBkaWFsb2dcblx0XHRcdGxldCB1aUVsZW1lbnRUb1VzZTogU3VwcG9ydGVkVUlFbGVtZW50ID0gYWxsTWVzc2FnZXNUb1Nob3cubGVuZ3RoID4gMCA/IFwiRGlhbG9nXCIgOiBcIk5vbmVcIjtcblxuXHRcdFx0aWYgKGFsbE1lc3NhZ2VzVG9TaG93Lmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHQvLyBTaW5nbGUgbWVzc2FnZSwgd2UgY2hlY2sgZm9yIHNwZWNpZmljIFVJIEVsZW1lbnQgdG8gdXNlLlxuXHRcdFx0XHRpZiAoZWxlbWVudHMuaW5jbHVkZXMoXCJUb2FzdFwiKSkge1xuXHRcdFx0XHRcdHVpRWxlbWVudFRvVXNlID0gXCJUb2FzdFwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGVsZW1lbnRzLmluY2x1ZGVzKFwiQm94XCIpKSB7XG5cdFx0XHRcdFx0dWlFbGVtZW50VG9Vc2UgPSBcIkJveFwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdG1lcmdlZFVJRGVjaXNpb24gPSB7XG5cdFx0XHRcdG1lc3NhZ2VzVG9TaG93OiBhbGxNZXNzYWdlc1RvU2hvdyxcblx0XHRcdFx0dWlFbGVtZW50VG9Vc2UsXG5cdFx0XHRcdGNvbnRleHROZWVkc0V0YWdSZWZyZXNoOiBvbGRVSURlY2lzaW9ucy5jb250ZXh0TmVlZHNFdGFnUmVmcmVzaCB8fCBuZXdVSURlY2lzaW9ucy5jb250ZXh0TmVlZHNFdGFnUmVmcmVzaCxcblx0XHRcdFx0Y29udGFpbnNCb3VuZFRyYW5zaXRpb246IG9sZFVJRGVjaXNpb25zLmNvbnRhaW5zQm91bmRUcmFuc2l0aW9uIHx8IG5ld1VJRGVjaXNpb25zLmNvbnRhaW5zQm91bmRUcmFuc2l0aW9uXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtZXJnZWRVSURlY2lzaW9uID0gbmV3VUlEZWNpc2lvbnM7XG5cdFx0fVxuXHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvbWVzc2FnZVVJRGVjaXNpb25cIiwgbWVyZ2VkVUlEZWNpc2lvbik7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlIGhlbGQga2V5LlxuXHQgKiBAcGFyYW0gaW5LZXkgS2V5IHRvIHJlbW92ZS5cblx0ICovXG5cdHJlbW92ZUhvbGRLZXkoaW5LZXk/OiBzdHJpbmcpOiB2b2lkIHtcblx0XHRpZiAoaW5LZXkgJiYgdGhpcy5ob2xkS2V5cy5pbmNsdWRlcyhpbktleSkpIHtcblx0XHRcdHRoaXMuaG9sZEtleXMuc3BsaWNlKHRoaXMuaG9sZEtleXMuaW5kZXhPZihpbktleSksIDEpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVjayBpZiBVSSBFbGVtZW50IHdpdGggbWVzc2FnZXMgc2hvdWxkIGJlIHNob3duLlxuXHQgKiBAcmV0dXJucyBCb29sZWFuXG5cdCAqL1xuXHRjaGVja1RvU2hvd1VJRWxlbWVudCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5ob2xkTXNnc1RvU2hvdyAmJiAodGhpcy5ob2xkS2V5cy5sZW5ndGggPiAwID8gZmFsc2UgOiB0cnVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIb2xkIG1lc3NhZ2VzIGZvciB0aGUgY29udHJvbC5cblx0ICogQHBhcmFtIGNvbnRyb2xcblx0ICovXG5cdGhvbGRNZXNzYWdlc0ZvckNvbnRyb2woY29udHJvbDogQ29udHJvbCk6IHZvaWQge1xuXHRcdGNvbnN0IGlkZW50aWZpZXIgPSBjb250cm9sLmdldElkKCk7XG5cdFx0dGhpcy5yZWdpc3RlclRvSG9sZE1lc3NhZ2VzKGlkZW50aWZpZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbGVhc2UgbWVzc2FnZSBob2xkIGJ5IGEgY29udHJvbC5cblx0ICogQHBhcmFtIGNvbnRyb2xcblx0ICovXG5cdGFzeW5jIHJlbGVhc2VIb2xkQnlDb250cm9sKGNvbnRyb2w/OiBDb250cm9sKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgaWRlbnRpZmllciA9IGNvbnRyb2w/LmdldElkKCk7XG5cdFx0dGhpcy5yZW1vdmVIb2xkS2V5KGlkZW50aWZpZXIpO1xuXHRcdGNvbnN0IHVpRWxlbWVudElzQXZhaWxhYmxlID0gdGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLmdldE1vZGVsKFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwiL21lc3NhZ2VVSUVsZW1lbnRJc0F2YWlsYWJsZVwiKTtcblx0XHQodGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsKT8uc2V0UHJvcGVydHkoXG5cdFx0XHRcIi9tZXNzYWdlVUlFbGVtZW50SXNBdmFpbGFibGVcIixcblx0XHRcdHVpRWxlbWVudElzQXZhaWxhYmxlPy50aGVuKFxuXHRcdFx0XHRhc3luYyBmdW5jdGlvbiAodGhpczogTWVzc2FnZUhhbmRsZXIpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5zaG93TWVzc2FnZXNXaXRoQ29uZHRpb25zKCk7XG5cdFx0XHRcdH0uYmluZCh0aGlzKVxuXHRcdFx0KVxuXHRcdCk7XG5cdFx0YXdhaXQgdGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLmdldE1vZGVsKFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwiL21lc3NhZ2VVSUVsZW1lbnRJc0F2YWlsYWJsZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTaG93cyBhIG1lc3NhZ2UgcGFnZSBvciBhIG1lc3NhZ2UgZGlhbG9nIGJhc2VkIG9uIHRoZSBtZXNzYWdlcyBpbiB0aGUgbWVzc2FnZSBkaWFsb2cuXG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVyc11cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgb25jZSB0aGUgdXNlciBjbG9zZXMgdGhlIG1lc3NhZ2UgZGlhbG9nIG9yIHdoZW4gbmF2aWdhdGlvbiB0byB0aGUgbWVzc2FnZSBwYWdlIGlzIGNvbXBsZXRlLiBJZiB0aGVyZSBhcmUgbm8gbWVzc2FnZXNcblx0ICogdG8gYmUgc2hvd24sIHRoZSBwcm9taXNlIGlzIHJlc29sdmVkIGltbWVkaWF0ZWx5XG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXN5bmMgc2hvd01lc3NhZ2VzKHBhcmFtZXRlcnM/OiBTaG93TWVzc2FnZXNQYXJhbWV0ZXJzKTogUHJvbWlzZTx2b2lkIHwgYm9vbGVhbiB8IERpYWxvZz4ge1xuXHRcdGNvbnN0IG1lc3NhZ2VQYWdlUGFyYW1ldGVycyA9IHRoaXMuX2NoZWNrTmF2aWdhdGlvblRvRXJyb3JQYWdlKHBhcmFtZXRlcnMpO1xuXG5cdFx0aWYgKG1lc3NhZ2VQYWdlUGFyYW1ldGVycykge1xuXHRcdFx0Ly8gbmF2aWdhdGUgdG8gbWVzc2FnZSBwYWdlLlxuXHRcdFx0Ly8gaGFuZGxlciBiZWZvcmUgcGFnZSBuYXZpZ2F0aW9uIGlzIHRyaWdnZXJlZCwgZm9yIGV4YW1wbGUgdG8gY2xvc2UgdGhlIGFjdGlvbiBwYXJhbWV0ZXIgZGlhbG9nXG5cdFx0XHRpZiAocGFyYW1ldGVycz8ubWVzc2FnZVBhZ2VOYXZpZ2F0aW9uQ2FsbGJhY2spIHtcblx0XHRcdFx0cGFyYW1ldGVycy5tZXNzYWdlUGFnZU5hdmlnYXRpb25DYWxsYmFjaygpO1xuXHRcdFx0fVxuXG5cdFx0XHRtZXNzYWdlUGFnZVBhcmFtZXRlcnMuaGFuZGxlU2hlbGxCYWNrID0gIXBhcmFtZXRlcnM/LnNoZWxsQmFjaztcblx0XHRcdHRoaXMucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0XHQvLyB3ZSBoYXZlIHRvIHNldCBhIHRpbWVvdXQgdG8gYmUgYWJsZSB0byBhY2Nlc3MgdGhlIG1vc3QgcmVjZW50IG1lc3NhZ2VzXG5cdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdC8vIGNsZWFyIGFsbCBob2xkIGtleXMgYXMgd2UgbmF2aWdhdGUgdG8gbWVzc2FnZSBwYWdlLlxuXHRcdFx0XHRcdHRoaXMucmVzZXRIb2xkS2V5cygpO1xuXG5cdFx0XHRcdFx0Ly8gVE9ETzogZ3JlYXQgQVBJIC0gd2lsbCBiZSBjaGFuZ2VkIGxhdGVyXG5cdFx0XHRcdFx0dGhpcy5iYXNlLl9yb3V0aW5nXG5cdFx0XHRcdFx0XHQubmF2aWdhdGVUb01lc3NhZ2VQYWdlKFxuXHRcdFx0XHRcdFx0XHRwYXJhbWV0ZXJzPy5pc0RhdGFSZWNlaXZlZEVycm9yID09PSB0cnVlXG5cdFx0XHRcdFx0XHRcdFx0PyBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0RBVEFfUkVDRUlWRURfRVJST1JcIilcblx0XHRcdFx0XHRcdFx0XHQ6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19USVRMRVwiKSxcblx0XHRcdFx0XHRcdFx0bWVzc2FnZVBhZ2VQYXJhbWV0ZXJzXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQudGhlbihyZXNvbHZlKVxuXHRcdFx0XHRcdFx0LmNhdGNoKHJlamVjdCk7XG5cdFx0XHRcdH0sIDApO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIG5hdmlnYXRlIHRvIG1lc3NhZ2UgZGlhbG9nXG5cdFx0XHRyZXR1cm4gdGhpcy5zaG93TWVzc2FnZURpYWxvZyhwYXJhbWV0ZXJzKTtcblx0XHR9XG5cdH1cbn1cbmV4cG9ydCBkZWZhdWx0IE1lc3NhZ2VIYW5kbGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7RUE0RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTkEsSUFRTUEsY0FBYyxJQUFBQyxJQUFBLEdBRG5CQyxjQUFjLENBQUMsaURBQWlELENBQUMsRUFBQUMsS0FBQSxHQWNoRUMsY0FBYyxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQXdEaEJDLGdCQUFnQixDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUNsQkMsVUFBVSxDQUFDQyxpQkFBaUIsQ0FBQ0MsT0FBTyxDQUFDLEVBQUFDLEtBQUEsR0FlckNMLGdCQUFnQixDQUFDLENBQUMsRUFBQU0sS0FBQSxHQUNsQkosVUFBVSxDQUFDQyxpQkFBaUIsQ0FBQ0MsT0FBTyxDQUFDLEVBQUFHLEtBQUEsR0F5QnJDQyxlQUFlLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBQ2pCUCxVQUFVLENBQUMsWUFBWSxDQUFDLEVBQUFRLEtBQUEsR0E4Q3hCRixlQUFlLENBQUMsQ0FBQyxFQUFBRyxNQUFBLEdBQ2pCQyxjQUFjLENBQUMsQ0FBQyxFQUFBQyxNQUFBLEdBd0poQkwsZUFBZSxDQUFDLENBQUMsRUFBQU0sTUFBQSxHQXVMakJOLGVBQWUsQ0FBQyxDQUFDLEVBQUFPLE1BQUEsR0FDakJILGNBQWMsQ0FBQyxDQUFDLEVBQUFqQixJQUFBLENBQUFxQixNQUFBLElBQUFDLE9BQUEsMEJBQUFDLG9CQUFBO0lBdGVqQixTQUFBeEIsZUFBQSxFQUFjO01BQUEsSUFBQXlCLEtBQUE7TUFDYkEsS0FBQSxHQUFBRCxvQkFBQSxDQUFBRSxJQUFBLEtBQU0sQ0FBQztNQUFDRCxLQUFBLENB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
@@ -42,6 +42,7 @@ export type NavigationToErrorPageResult = {
42
42
  errorType?: string;
43
43
  navigateBackToOrigin?: boolean;
44
44
  handleShellBack?: boolean;
45
+ showMessagePageOnCreateFailure?: boolean;
45
46
  };
46
47
  export type CustomMessage = {
47
48
  code: string;
@@ -108,14 +108,18 @@ sap.ui.define(["sap/fe/base/ClassSupport", "sap/fe/core/controllerextensions/Bas
108
108
  _proto.navigateToRoute = async function navigateToRoute(sTargetRouteName, oParameters) {
109
109
  const oMetaModel = this.base.getModel().getMetaModel();
110
110
  const bIsStickyMode = ModelHelper.isStickySessionSupported(oMetaModel);
111
+ const isHiddenDraftEnabled = this.base.getAppComponent().getEnvironmentCapabilities().getCapabilities().HiddenDraft?.enabled || false;
111
112
  if (!oParameters) {
112
113
  oParameters = {};
113
114
  }
114
115
  oParameters.bIsStickyMode = bIsStickyMode;
115
- return this.base._routing.navigateToRoute(sTargetRouteName, oParameters);
116
+ return this.base._routing.navigateToRoute(sTargetRouteName, {
117
+ ...oParameters,
118
+ isHiddenDraftEnabled
119
+ });
116
120
  };
117
121
  return Routing;
118
122
  }(BaseControllerExtension), _applyDecoratedDescriptor(_class2.prototype, "onBeforeNavigation", [_dec2, _dec3], Object.getOwnPropertyDescriptor(_class2.prototype, "onBeforeNavigation"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "navigate", [_dec4, _dec5], Object.getOwnPropertyDescriptor(_class2.prototype, "navigate"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onBeforeBinding", [_dec6, _dec7], Object.getOwnPropertyDescriptor(_class2.prototype, "onBeforeBinding"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onAfterBinding", [_dec8, _dec9], Object.getOwnPropertyDescriptor(_class2.prototype, "onAfterBinding"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "navigateToRoute", [_dec10, _dec11], Object.getOwnPropertyDescriptor(_class2.prototype, "navigateToRoute"), _class2.prototype), _class2)) || _class);
119
123
  return Routing;
120
124
  }, false);
121
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSb3V0aW5nIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJwdWJsaWNFeHRlbnNpb24iLCJfZGVjMyIsImV4dGVuc2libGUiLCJfZGVjNCIsIl9kZWM1IiwiZmluYWxFeHRlbnNpb24iLCJfZGVjNiIsIl9kZWM3IiwiT3ZlcnJpZGVFeGVjdXRpb24iLCJBZnRlciIsIl9kZWM4IiwiX2RlYzkiLCJfZGVjMTAiLCJfZGVjMTEiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0Jhc2VDb250cm9sbGVyRXh0ZW5zIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsIm9uQmVmb3JlTmF2aWdhdGlvbiIsIm1OYXZpZ2F0aW9uUGFyYW1ldGVycyIsIlByb21pc2UiLCJyZXNvbHZlIiwibmF2aWdhdGUiLCJvQ29udGV4dCIsInBhcmFtZXRlcnMiLCJpbnRlcm5hbE1vZGVsIiwiYmFzZSIsImdldE1vZGVsIiwic2V0UHJvcGVydHkiLCJfcm91dGluZyIsIm5hdmlnYXRlVG9Db250ZXh0Iiwib25CZWZvcmVCaW5kaW5nIiwib25BZnRlckJpbmRpbmciLCJuYXZpZ2F0ZVRvUm91dGUiLCJzVGFyZ2V0Um91dGVOYW1lIiwib1BhcmFtZXRlcnMiLCJvTWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiYklzU3RpY2t5TW9kZSIsIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiQmFzZUNvbnRyb2xsZXJFeHRlbnNpb24iLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJSb3V0aW5nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBleHRlbnNpYmxlLCBmaW5hbEV4dGVuc2lvbiwgcHVibGljRXh0ZW5zaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQmFzZUNvbnRyb2xsZXJFeHRlbnNpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0Jhc2VDb250cm9sbGVyRXh0ZW5zaW9uXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcblxuLyoqXG4gKiBBIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIG9mZmVyaW5nIGhvb2tzIGludG8gdGhlIHJvdXRpbmcgZmxvdyBvZiB0aGUgYXBwbGljYXRpb25cbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBwdWJsaWNcbiAqIEBzaW5jZSAxLjg2LjBcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuUm91dGluZ1wiKVxuY2xhc3MgUm91dGluZyBleHRlbmRzIEJhc2VDb250cm9sbGVyRXh0ZW5zaW9uIHtcblx0cHJpdmF0ZSBiYXNlITogUGFnZUNvbnRyb2xsZXI7XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gaW50ZXJjZXB0IHRoZSByb3V0aW5nIGV2ZW50IGR1cmluZyB0aGUgbm9ybWFsIG5hdmlnYXRpb24gcHJvY2Vzcywgc3VjaCBhcyB3aGVuIGEgdGFibGUgcm93IGlzIGNsaWNrZWQgdG8gbmF2aWdhdGUsIHBhZ2luYXRpb24gYnV0dG9ucyBhcmUgdXNlZCwgdGhlIEFwcGx5IGJ1dHRvbiBpbiBhbiBvYmplY3QgcGFnZSBpcyBjbGlja2VkLCBvciBhIHN1Yi1vYmplY3QgcGFnZSBpbiBhIGZsZXhpYmxlIGNvbHVtbiBsYXlvdXQgaXMgY2xvc2VkLlxuXHQgKlxuXHQgKiBUaGUgZnVuY3Rpb24gaXMgTk9UIGNhbGxlZCBkdXJpbmcgb3RoZXIgbWVhbnMgb2YgZXh0ZXJuYWwgb3V0Ym91bmQgbmF2aWdhdGlvbiAobGlrZSBhIG5hdmlnYXRpb24gY29uZmlndXJlZCB2aWEgYSBsaW5rLCBvciBieSB1c2luZyBuYXZpZ2F0aW9uIGJ1dHRvbnMpLlxuXHQgKlxuXHQgKiBJZiBkZWNsYXJlZCBhcyBhbiBleHRlbnNpb24sIGl0IGFsbG93cyB5b3UgdG8gaW50ZXJjZXB0IGFuZCBjaGFuZ2UgdGhlIG5vcm1hbCBuYXZpZ2F0aW9uIGZsb3cuXG5cdCAqIElmIHlvdSBkZWNpZGUgdG8gZG8geW91ciBvd24gbmF2aWdhdGlvbiBwcm9jZXNzaW5nLCB5b3UgY2FuIHJldHVybiBgdHJ1ZWAgdG8gcHJldmVudCB0aGUgZGVmYXVsdCByb3V0aW5nIGJlaGF2aW9yLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKiBAcGFyYW0gbU5hdmlnYXRpb25QYXJhbWV0ZXJzIE9iamVjdCBjb250YWluaW5nIHJvdyBjb250ZXh0IGFuZCBwYWdlIGNvbnRleHRcblx0ICogQHBhcmFtIG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5iaW5kaW5nQ29udGV4dCBUaGUgdGFyZ2V0IG5hdmlnYXRpb24gY29udGV4dFxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgdG8gcHJldmVudCB0aGUgZGVmYXVsdCBleGVjdXRpb24sIGZhbHNlIHRvIGtlZXAgdGhlIHN0YW5kYXJkIGJlaGF2aW9yXG5cdCAqIEBwdWJsaWNcblx0ICogQHNpbmNlIDEuODYuMFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKFwiQWZ0ZXJBc3luY1wiKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdGFzeW5jIG9uQmVmb3JlTmF2aWdhdGlvbihtTmF2aWdhdGlvblBhcmFtZXRlcnM6IHsgYmluZGluZ0NvbnRleHQ6IENvbnRleHQgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRlbiBieSB0aGUgYXBwbGljYXRpb25cblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBbGxvd3MgbmF2aWdhdGlvbiB0byBhIHNwZWNpZmljIGNvbnRleHQuXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBPYmplY3QgY29udGFpbmluZyB0aGUgY29udGV4dCB0byBiZSBuYXZpZ2F0ZWQgdG9cblx0ICogQHBhcmFtIHBhcmFtZXRlcnMgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBuYXZpZ2F0aW9uXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLnByZXNlcnZlSGlzdG9yeSAgQnkgZGVmYXVsdCwgdGhlIGludGVybmFsIGFsZ29yaXRobSBkZWNpZGVzIHdoZXRoZXIgdGhlIG5hdmlnYXRpb24gcHJlc2VydmVzIHRoZSBwcmV2aW91cyBlbnRyeS4gVGhpcyBwYXJhbWV0ZXIgYWxsb3dzIHlvdSB0byBvdmVycmlkZSB0aGlzIGJlaGF2aW9yLlxuXHQgKiBAcHVibGljXG5cdCAqIEBzaW5jZSAxLjkwLjBcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRuYXZpZ2F0ZShvQ29udGV4dDogQ29udGV4dCwgcGFyYW1ldGVycz86IHsgcHJlc2VydmVIaXN0b3J5OiBib29sZWFuIH0pOiB2b2lkIHtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gdGhpcy5iYXNlLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsO1xuXHRcdC8vIFdlIGhhdmUgdG8gZGVsZXRlIHRoZSBpbnRlcm5hbCBtb2RlbCB2YWx1ZSBmb3IgXCJwYWdpbmF0b3JDdXJyZW50Q29udGV4dFwiIHRvIGVuc3VyZSBpdCBpcyByZS1ldmFsdWF0ZWQgYnkgdGhlIG5hdmlnYXRlVG9Db250ZXh0IGZ1bmN0aW9uXG5cdFx0Ly8gQkNQOiAyMjcwMTIzODIwXG5cdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9wYWdpbmF0b3JDdXJyZW50Q29udGV4dFwiLCBudWxsKTtcblx0XHR0aGlzLmJhc2UuX3JvdXRpbmcubmF2aWdhdGVUb0NvbnRleHQob0NvbnRleHQsIHBhcmFtZXRlcnMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBpbnRlcmNlcHQgdGhlIHJvdXRpbmcgZXZlbnQgYmVmb3JlIGJpbmRpbmcgYSBwYWdlLlxuXHQgKlxuXHQgKiBJZiBpdCBpcyBkZWNsYXJlZCBhcyBhbiBleHRlbnNpb24sIGl0IGFsbG93cyB5b3UgdG8gaW50ZXJjZXB0IGFuZCBjaGFuZ2UgdGhlIG5vcm1hbCBmbG93IG9mIGJpbmRpbmcuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbm90IGNhbGxlZCBkaXJlY3RseSwgYnV0IG92ZXJyaWRkZW4gc2VwYXJhdGVseSBieSBjb25zdW1pbmcgY29udHJvbGxlcnMuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKiBAcGFyYW0gb0NvbnRleHQgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNvbnRleHQgZm9yIHRoZSBuYXZpZ2F0aW9uXG5cdCAqIEBwdWJsaWNcblx0ICogQHNpbmNlIDEuOTAuMFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdG9uQmVmb3JlQmluZGluZyhvQ29udGV4dDogb2JqZWN0IHwgbnVsbCk6IHZvaWQge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRlbiBieSB0aGUgYXBwbGljYXRpb25cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gaW50ZXJjZXB0IHRoZSByb3V0aW5nIGV2ZW50IGFmdGVyIGJpbmRpbmcgYSBwYWdlLlxuXHQgKlxuXHQgKiBJZiBpdCBpcyBkZWNsYXJlZCBhcyBhbiBleHRlbnNpb24sIGl0IGFsbG93cyB5b3UgdG8gaW50ZXJjZXB0IGFuZCBjaGFuZ2UgdGhlIG5vcm1hbCBmbG93IG9mIGJpbmRpbmcuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbm90IGNhbGxlZCBkaXJlY3RseSwgYnV0IG92ZXJyaWRkZW4gc2VwYXJhdGVseSBieSBjb25zdW1pbmcgY29udHJvbGxlcnMuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKiBAcGFyYW0gb0NvbnRleHQgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNvbnRleHQgdG8gYmUgbmF2aWdhdGVkXG5cdCAqIEBwdWJsaWNcblx0ICogQHNpbmNlIDEuOTAuMFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdG9uQWZ0ZXJCaW5kaW5nKG9Db250ZXh0OiBvYmplY3QgfCBudWxsKTogdm9pZCB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGVuIGJ5IHRoZSBhcHBsaWNhdGlvblxuXHR9XG5cblx0LyoqXG5cdCAqIE5hdmlnYXRlIHRvIGFub3RoZXIgdGFyZ2V0LlxuXHQgKiBAcGFyYW0gc1RhcmdldFJvdXRlTmFtZSBOYW1lIG9mIHRoZSB0YXJnZXQgcm91dGVcblx0ICogQHBhcmFtIG9QYXJhbWV0ZXJzIFBhcmFtZXRlcnMgdG8gYmUgdXNlZCB3aXRoIHJvdXRlIHRvIGNyZWF0ZSB0aGUgdGFyZ2V0IGhhc2hcblx0ICogQHBhcmFtIG9QYXJhbWV0ZXJzLmJJc1N0aWNreU1vZGUgUFJJVkFURVxuXHQgKiBAcGFyYW0gb1BhcmFtZXRlcnMucHJlc2VydmVIaXN0b3J5IFBSSVZBVEVcblx0ICogQHJldHVybnMgUHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gdGhlIG5hdmlnYXRpb24gaXMgZmluYWxpemVkXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRhc3luYyBuYXZpZ2F0ZVRvUm91dGUoXG5cdFx0c1RhcmdldFJvdXRlTmFtZTogc3RyaW5nLFxuXHRcdG9QYXJhbWV0ZXJzPzogeyBiSXNTdGlja3lNb2RlPzogYm9vbGVhbjsgcHJlc2VydmVIaXN0b3J5PzogYm9vbGVhbiB9XG5cdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSB0aGlzLmJhc2UuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBiSXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG9NZXRhTW9kZWwpO1xuXHRcdGlmICghb1BhcmFtZXRlcnMpIHtcblx0XHRcdG9QYXJhbWV0ZXJzID0ge307XG5cdFx0fVxuXHRcdG9QYXJhbWV0ZXJzLmJJc1N0aWNreU1vZGUgPSBiSXNTdGlja3lNb2RlO1xuXHRcdHJldHVybiB0aGlzLmJhc2UuX3JvdXRpbmcubmF2aWdhdGVUb1JvdXRlKHNUYXJnZXRSb3V0ZU5hbWUsIG9QYXJhbWV0ZXJzKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBSb3V0aW5nO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7RUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFMQSxJQU9NQSxPQUFPLElBQUFDLElBQUEsR0FEWkMsY0FBYyxDQUFDLDBDQUEwQyxDQUFDLEVBQUFDLEtBQUEsR0FvQnpEQyxlQUFlLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBQ2pCQyxVQUFVLENBQUMsWUFBWSxDQUFDLEVBQUFDLEtBQUEsR0FleEJILGVBQWUsQ0FBQyxDQUFDLEVBQUFJLEtBQUEsR0FDakJDLGNBQWMsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FvQmhCTixlQUFlLENBQUMsQ0FBQyxFQUFBTyxLQUFBLEdBQ2pCTCxVQUFVLENBQUNNLGlCQUFpQixDQUFDQyxLQUFLLENBQUMsRUFBQUMsS0FBQSxHQWlCbkNWLGVBQWUsQ0FBQyxDQUFDLEVBQUFXLEtBQUEsR0FDakJULFVBQVUsQ0FBQ00saUJBQWlCLENBQUNDLEtBQUssQ0FBQyxFQUFBRyxNQUFBLEdBZW5DWixlQUFlLENBQUMsQ0FBQyxFQUFBYSxNQUFBLEdBQ2pCUixjQUFjLENBQUMsQ0FBQyxFQUFBUixJQUFBLENBQUFpQixNQUFBLElBQUFDLE9BQUEsMEJBQUFDLHFCQUFBO0lBQUEsU0FBQXBCLFFBQUE7TUFBQSxPQUFBb0IscUJBQUEsQ0FBQUMsS0FBQSxPQUFBQyxTQUFBO0lBQUE7SUFBQUMsY0FBQSxDQUFBdkIsT0FBQSxFQUFBb0IscUJBQUE7SUFBQSxJQUFBSSxNQUFBLEdBQUF4QixPQUFBLENBQUF5QixTQUFBO0lBeEZqQjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQWZDRCxNQUFBLENBbUJNRSxrQkFBa0IsR0FIeEIsZUFHTUEsa0JBQWtCQSxDQUFDQyxxQkFBa0QsRUFBb0I7TUFDOUY7TUFDQSxPQUFPQyxPQUFPLENBQUNDLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDOUI7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQVBDO0lBQUFMLE1BQUEsQ0FVQU0sUUFBUSxHQUZSLFNBRUFBLFFBQVFBLENBQUNDLFFBQWlCLEVBQUVDLFVBQXlDLEVBQVE7TUFDNUUsTUFBTUMsYUFBYSxHQUFHLElBQUksQ0FBQ0MsSUFBSSxDQUFDQyxRQUFRLENBQUMsVUFBVSxDQUFjO01BQ2pFO01BQ0E7TUFDQUYsYUFBYSxDQUFDRyxXQUFXLENBQUMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDO01BQzNELElBQUksQ0FBQ0YsSUFBSSxDQUFDRyxRQUFRLENBQUNDLGlCQUFpQixDQUFDUCxRQUFRLEVBQUVDLFVBQVUsQ0FBQztJQUMzRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BVkM7SUFBQVIsTUFBQTtJQWFBO0lBQ0FlLGVBQWUsR0FIZixTQUdBQSxlQUFlQSxDQUFDUixRQUF1QixFQUFRO01BQzlDO0lBQUE7O0lBR0Q7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQVZDO0lBQUFQLE1BQUE7SUFhQTtJQUNBZ0IsY0FBYyxHQUhkLFNBR0FBLGNBQWNBLENBQUNULFFBQXVCLEVBQVE7TUFDN0M7SUFBQTs7SUFHRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FSQztJQUFBUCxNQUFBLENBV01pQixlQUFlLEdBRnJCLGVBRU1BLGVBQWVBLENBQ3BCQyxnQkFBd0IsRUFDeEJDLFdBQW9FLEVBQ2pEO01BQ25CLE1BQU1DLFVBQVUsR0FBRyxJQUFJLENBQUNWLElBQUksQ0FBQ0MsUUFBUSxDQUFDLENBQUMsQ0FBQ1UsWUFBWSxDQUFDLENBQUM7TUFDdEQsTUFBTUMsYUFBYSxHQUFHQyxXQUFXLENBQUNDLHdCQUF3QixDQUFDSixVQUFVLENBQUM7TUFDdEUsSUFBSSxDQUFDRCxXQUFXLEVBQUU7UUFDakJBLFdBQVcsR0FBRyxDQUFDLENBQUM7TUFDakI7TUFDQUEsV0FBVyxDQUFDRyxhQUFhLEdBQUdBLGFBQWE7TUFDekMsT0FBTyxJQUFJLENBQUNaLElBQUksQ0FBQ0csUUFBUSxDQUFDSSxlQUFlLENBQUNDLGdCQUFnQixFQUFFQyxXQUFXLENBQUM7SUFDekUsQ0FBQztJQUFBLE9BQUEzQyxPQUFBO0VBQUEsRUF2R29CaUQsdUJBQXVCLEdBQUFDLHlCQUFBLENBQUEvQixPQUFBLENBQUFNLFNBQUEseUJBQUF0QixLQUFBLEVBQUFFLEtBQUEsR0FBQThDLE1BQUEsQ0FBQUMsd0JBQUEsQ0FBQWpDLE9BQUEsQ0FBQU0sU0FBQSx5QkFBQU4sT0FBQSxDQUFBTSxTQUFBLEdBQUF5Qix5QkFBQSxDQUFBL0IsT0FBQSxDQUFBTSxTQUFBLGVBQUFsQixLQUFBLEVBQUFDLEtBQUEsR0FBQTJDLE1BQUEsQ0FBQUMsd0JBQUEsQ0FBQWpDLE9BQUEsQ0FBQU0sU0FBQSxlQUFBTixPQUFBLENBQUFNLFNBQUEsR0FBQXlCLHlCQUFBLENBQUEvQixPQUFBLENBQUFNLFNBQUEsc0JBQUFmLEtBQUEsRUFBQUMsS0FBQSxHQUFBd0MsTUFBQSxDQUFBQyx3QkFBQSxDQUFBakMsT0FBQSxDQUFBTSxTQUFBLHNCQUFBTixPQUFBLENBQUFNLFNBQUEsR0FBQXlCLHlCQUFBLENBQUEvQixPQUFBLENBQUFNLFNBQUEscUJBQUFYLEtBQUEsRUFBQUMsS0FBQSxHQUFBb0MsTUFBQSxDQUFBQyx3QkFBQSxDQUFBakMsT0FBQSxDQUFBTSxTQUFBLHFCQUFBTixPQUFBLENBQUFNLFNBQUEsR0FBQXlCLHlCQUFBLENBQUEvQixPQUFBLENBQUFNLFNBQUEsc0JBQUFULE1BQUEsRUFBQUMsTUFBQSxHQUFBa0MsTUFBQSxDQUFBQyx3QkFBQSxDQUFBakMsT0FBQSxDQUFBTSxTQUFBLHNCQUFBTixPQUFBLENBQUFNLFNBQUEsR0FBQU4sT0FBQSxNQUFBRCxNQUFBO0VBQUEsT0EwRzlCbEIsT0FBTztBQUFBIiwiaWdub3JlTGlzdCI6W119
125
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSb3V0aW5nIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJwdWJsaWNFeHRlbnNpb24iLCJfZGVjMyIsImV4dGVuc2libGUiLCJfZGVjNCIsIl9kZWM1IiwiZmluYWxFeHRlbnNpb24iLCJfZGVjNiIsIl9kZWM3IiwiT3ZlcnJpZGVFeGVjdXRpb24iLCJBZnRlciIsIl9kZWM4IiwiX2RlYzkiLCJfZGVjMTAiLCJfZGVjMTEiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0Jhc2VDb250cm9sbGVyRXh0ZW5zIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsIm9uQmVmb3JlTmF2aWdhdGlvbiIsIm1OYXZpZ2F0aW9uUGFyYW1ldGVycyIsIlByb21pc2UiLCJyZXNvbHZlIiwibmF2aWdhdGUiLCJvQ29udGV4dCIsInBhcmFtZXRlcnMiLCJpbnRlcm5hbE1vZGVsIiwiYmFzZSIsImdldE1vZGVsIiwic2V0UHJvcGVydHkiLCJfcm91dGluZyIsIm5hdmlnYXRlVG9Db250ZXh0Iiwib25CZWZvcmVCaW5kaW5nIiwib25BZnRlckJpbmRpbmciLCJuYXZpZ2F0ZVRvUm91dGUiLCJzVGFyZ2V0Um91dGVOYW1lIiwib1BhcmFtZXRlcnMiLCJvTWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiYklzU3RpY2t5TW9kZSIsIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiaXNIaWRkZW5EcmFmdEVuYWJsZWQiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcyIsImdldENhcGFiaWxpdGllcyIsIkhpZGRlbkRyYWZ0IiwiZW5hYmxlZCIsIkJhc2VDb250cm9sbGVyRXh0ZW5zaW9uIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsIk9iamVjdCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiUm91dGluZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXh0ZW5zaWJsZSwgZmluYWxFeHRlbnNpb24sIHB1YmxpY0V4dGVuc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IEJhc2VDb250cm9sbGVyRXh0ZW5zaW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CYXNlQ29udHJvbGxlckV4dGVuc2lvblwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgT3ZlcnJpZGVFeGVjdXRpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9PdmVycmlkZUV4ZWN1dGlvblwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IEhpZGRlbkRyYWZ0IH0gZnJvbSBcIi4uL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuXG4vKipcbiAqIEEgY29udHJvbGxlciBleHRlbnNpb24gb2ZmZXJpbmcgaG9va3MgaW50byB0aGUgcm91dGluZyBmbG93IG9mIHRoZSBhcHBsaWNhdGlvblxuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHB1YmxpY1xuICogQHNpbmNlIDEuODYuMFxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5Sb3V0aW5nXCIpXG5jbGFzcyBSb3V0aW5nIGV4dGVuZHMgQmFzZUNvbnRyb2xsZXJFeHRlbnNpb24ge1xuXHRwcml2YXRlIGJhc2UhOiBQYWdlQ29udHJvbGxlcjtcblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBpbnRlcmNlcHQgdGhlIHJvdXRpbmcgZXZlbnQgZHVyaW5nIHRoZSBub3JtYWwgbmF2aWdhdGlvbiBwcm9jZXNzLCBzdWNoIGFzIHdoZW4gYSB0YWJsZSByb3cgaXMgY2xpY2tlZCB0byBuYXZpZ2F0ZSwgcGFnaW5hdGlvbiBidXR0b25zIGFyZSB1c2VkLCB0aGUgQXBwbHkgYnV0dG9uIGluIGFuIG9iamVjdCBwYWdlIGlzIGNsaWNrZWQsIG9yIGEgc3ViLW9iamVjdCBwYWdlIGluIGEgZmxleGlibGUgY29sdW1uIGxheW91dCBpcyBjbG9zZWQuXG5cdCAqXG5cdCAqIFRoZSBmdW5jdGlvbiBpcyBOT1QgY2FsbGVkIGR1cmluZyBvdGhlciBtZWFucyBvZiBleHRlcm5hbCBvdXRib3VuZCBuYXZpZ2F0aW9uIChsaWtlIGEgbmF2aWdhdGlvbiBjb25maWd1cmVkIHZpYSBhIGxpbmssIG9yIGJ5IHVzaW5nIG5hdmlnYXRpb24gYnV0dG9ucykuXG5cdCAqXG5cdCAqIElmIGRlY2xhcmVkIGFzIGFuIGV4dGVuc2lvbiwgaXQgYWxsb3dzIHlvdSB0byBpbnRlcmNlcHQgYW5kIGNoYW5nZSB0aGUgbm9ybWFsIG5hdmlnYXRpb24gZmxvdy5cblx0ICogSWYgeW91IGRlY2lkZSB0byBkbyB5b3VyIG93biBuYXZpZ2F0aW9uIHByb2Nlc3NpbmcsIHlvdSBjYW4gcmV0dXJuIGB0cnVlYCB0byBwcmV2ZW50IHRoZSBkZWZhdWx0IHJvdXRpbmcgYmVoYXZpb3IuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdCAqIEBwYXJhbSBtTmF2aWdhdGlvblBhcmFtZXRlcnMgT2JqZWN0IGNvbnRhaW5pbmcgcm93IGNvbnRleHQgYW5kIHBhZ2UgY29udGV4dFxuXHQgKiBAcGFyYW0gbU5hdmlnYXRpb25QYXJhbWV0ZXJzLmJpbmRpbmdDb250ZXh0IFRoZSB0YXJnZXQgbmF2aWdhdGlvbiBjb250ZXh0XG5cdCAqIEByZXR1cm5zIGB0cnVlYCB0byBwcmV2ZW50IHRoZSBkZWZhdWx0IGV4ZWN1dGlvbiwgZmFsc2UgdG8ga2VlcCB0aGUgc3RhbmRhcmQgYmVoYXZpb3Jcblx0ICogQHB1YmxpY1xuXHQgKiBAc2luY2UgMS44Ni4wXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoXCJBZnRlckFzeW5jXCIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0YXN5bmMgb25CZWZvcmVOYXZpZ2F0aW9uKG1OYXZpZ2F0aW9uUGFyYW1ldGVyczogeyBiaW5kaW5nQ29udGV4dDogQ29udGV4dCB9KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGVuIGJ5IHRoZSBhcHBsaWNhdGlvblxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFsbG93cyBuYXZpZ2F0aW9uIHRvIGEgc3BlY2lmaWMgY29udGV4dC5cblx0ICogQHBhcmFtIG9Db250ZXh0IE9iamVjdCBjb250YWluaW5nIHRoZSBjb250ZXh0IHRvIGJlIG5hdmlnYXRlZCB0b1xuXHQgKiBAcGFyYW0gcGFyYW1ldGVycyBPYmplY3QgY29udGFpbmluZyB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIG5hdmlnYXRpb25cblx0ICogQHBhcmFtIHBhcmFtZXRlcnMucHJlc2VydmVIaXN0b3J5ICBCeSBkZWZhdWx0LCB0aGUgaW50ZXJuYWwgYWxnb3JpdGhtIGRlY2lkZXMgd2hldGhlciB0aGUgbmF2aWdhdGlvbiBwcmVzZXJ2ZXMgdGhlIHByZXZpb3VzIGVudHJ5LiBUaGlzIHBhcmFtZXRlciBhbGxvd3MgeW91IHRvIG92ZXJyaWRlIHRoaXMgYmVoYXZpb3IuXG5cdCAqIEBwdWJsaWNcblx0ICogQHNpbmNlIDEuOTAuMFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdG5hdmlnYXRlKG9Db250ZXh0OiBDb250ZXh0LCBwYXJhbWV0ZXJzPzogeyBwcmVzZXJ2ZUhpc3Rvcnk6IGJvb2xlYW4gfSk6IHZvaWQge1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB0aGlzLmJhc2UuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0Ly8gV2UgaGF2ZSB0byBkZWxldGUgdGhlIGludGVybmFsIG1vZGVsIHZhbHVlIGZvciBcInBhZ2luYXRvckN1cnJlbnRDb250ZXh0XCIgdG8gZW5zdXJlIGl0IGlzIHJlLWV2YWx1YXRlZCBieSB0aGUgbmF2aWdhdGVUb0NvbnRleHQgZnVuY3Rpb25cblx0XHQvLyBCQ1A6IDIyNzAxMjM4MjBcblx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL3BhZ2luYXRvckN1cnJlbnRDb250ZXh0XCIsIG51bGwpO1xuXHRcdHRoaXMuYmFzZS5fcm91dGluZy5uYXZpZ2F0ZVRvQ29udGV4dChvQ29udGV4dCwgcGFyYW1ldGVycyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGludGVyY2VwdCB0aGUgcm91dGluZyBldmVudCBiZWZvcmUgYmluZGluZyBhIHBhZ2UuXG5cdCAqXG5cdCAqIElmIGl0IGlzIGRlY2xhcmVkIGFzIGFuIGV4dGVuc2lvbiwgaXQgYWxsb3dzIHlvdSB0byBpbnRlcmNlcHQgYW5kIGNoYW5nZSB0aGUgbm9ybWFsIGZsb3cgb2YgYmluZGluZy5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBub3QgY2FsbGVkIGRpcmVjdGx5LCBidXQgb3ZlcnJpZGRlbiBzZXBhcmF0ZWx5IGJ5IGNvbnN1bWluZyBjb250cm9sbGVycy5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBPYmplY3QgY29udGFpbmluZyB0aGUgY29udGV4dCBmb3IgdGhlIG5hdmlnYXRpb25cblx0ICogQHB1YmxpY1xuXHQgKiBAc2luY2UgMS45MC4wXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0b25CZWZvcmVCaW5kaW5nKG9Db250ZXh0OiBvYmplY3QgfCBudWxsKTogdm9pZCB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGVuIGJ5IHRoZSBhcHBsaWNhdGlvblxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBpbnRlcmNlcHQgdGhlIHJvdXRpbmcgZXZlbnQgYWZ0ZXIgYmluZGluZyBhIHBhZ2UuXG5cdCAqXG5cdCAqIElmIGl0IGlzIGRlY2xhcmVkIGFzIGFuIGV4dGVuc2lvbiwgaXQgYWxsb3dzIHlvdSB0byBpbnRlcmNlcHQgYW5kIGNoYW5nZSB0aGUgbm9ybWFsIGZsb3cgb2YgYmluZGluZy5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBub3QgY2FsbGVkIGRpcmVjdGx5LCBidXQgb3ZlcnJpZGRlbiBzZXBhcmF0ZWx5IGJ5IGNvbnN1bWluZyBjb250cm9sbGVycy5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBPYmplY3QgY29udGFpbmluZyB0aGUgY29udGV4dCB0byBiZSBuYXZpZ2F0ZWRcblx0ICogQHB1YmxpY1xuXHQgKiBAc2luY2UgMS45MC4wXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0b25BZnRlckJpbmRpbmcob0NvbnRleHQ6IG9iamVjdCB8IG51bGwpOiB2b2lkIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZW4gYnkgdGhlIGFwcGxpY2F0aW9uXG5cdH1cblxuXHQvKipcblx0ICogTmF2aWdhdGUgdG8gYW5vdGhlciB0YXJnZXQuXG5cdCAqIEBwYXJhbSBzVGFyZ2V0Um91dGVOYW1lIE5hbWUgb2YgdGhlIHRhcmdldCByb3V0ZVxuXHQgKiBAcGFyYW0gb1BhcmFtZXRlcnMgUGFyYW1ldGVycyB0byBiZSB1c2VkIHdpdGggcm91dGUgdG8gY3JlYXRlIHRoZSB0YXJnZXQgaGFzaFxuXHQgKiBAcGFyYW0gb1BhcmFtZXRlcnMuYklzU3RpY2t5TW9kZSBQUklWQVRFXG5cdCAqIEBwYXJhbSBvUGFyYW1ldGVycy5wcmVzZXJ2ZUhpc3RvcnkgUFJJVkFURVxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2hlbiB0aGUgbmF2aWdhdGlvbiBpcyBmaW5hbGl6ZWRcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIG5hdmlnYXRlVG9Sb3V0ZShcblx0XHRzVGFyZ2V0Um91dGVOYW1lOiBzdHJpbmcsXG5cdFx0b1BhcmFtZXRlcnM/OiB7IGJJc1N0aWNreU1vZGU/OiBib29sZWFuOyBwcmVzZXJ2ZUhpc3Rvcnk/OiBib29sZWFuIH1cblx0KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IHRoaXMuYmFzZS5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IGJJc1N0aWNreU1vZGUgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQob01ldGFNb2RlbCk7XG5cdFx0Y29uc3QgaXNIaWRkZW5EcmFmdEVuYWJsZWQgPVxuXHRcdFx0KHRoaXMuYmFzZS5nZXRBcHBDb21wb25lbnQoKS5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpLmdldENhcGFiaWxpdGllcygpLkhpZGRlbkRyYWZ0IGFzIEhpZGRlbkRyYWZ0KT8uZW5hYmxlZCB8fCBmYWxzZTtcblx0XHRpZiAoIW9QYXJhbWV0ZXJzKSB7XG5cdFx0XHRvUGFyYW1ldGVycyA9IHt9O1xuXHRcdH1cblx0XHRvUGFyYW1ldGVycy5iSXNTdGlja3lNb2RlID0gYklzU3RpY2t5TW9kZTtcblx0XHRyZXR1cm4gdGhpcy5iYXNlLl9yb3V0aW5nLm5hdmlnYXRlVG9Sb3V0ZShzVGFyZ2V0Um91dGVOYW1lLCB7IC4uLm9QYXJhbWV0ZXJzLCBpc0hpZGRlbkRyYWZ0RW5hYmxlZCB9KTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBSb3V0aW5nO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7RUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFMQSxJQU9NQSxPQUFPLElBQUFDLElBQUEsR0FEWkMsY0FBYyxDQUFDLDBDQUEwQyxDQUFDLEVBQUFDLEtBQUEsR0FvQnpEQyxlQUFlLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBQ2pCQyxVQUFVLENBQUMsWUFBWSxDQUFDLEVBQUFDLEtBQUEsR0FleEJILGVBQWUsQ0FBQyxDQUFDLEVBQUFJLEtBQUEsR0FDakJDLGNBQWMsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FvQmhCTixlQUFlLENBQUMsQ0FBQyxFQUFBTyxLQUFBLEdBQ2pCTCxVQUFVLENBQUNNLGlCQUFpQixDQUFDQyxLQUFLLENBQUMsRUFBQUMsS0FBQSxHQWlCbkNWLGVBQWUsQ0FBQyxDQUFDLEVBQUFXLEtBQUEs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
@@ -5,6 +5,7 @@ import ModelHelper from "sap/fe/core/helpers/ModelHelper";
5
5
  import OverrideExecution from "sap/ui/core/mvc/OverrideExecution";
6
6
  import type JSONModel from "sap/ui/model/json/JSONModel";
7
7
  import type Context from "sap/ui/model/odata/v4/Context";
8
+ import type { HiddenDraft } from "../converters/ManifestSettings";
8
9
 
9
10
  /**
10
11
  * A controller extension offering hooks into the routing flow of the application
@@ -111,11 +112,13 @@ class Routing extends BaseControllerExtension {
111
112
  ): Promise<boolean> {
112
113
  const oMetaModel = this.base.getModel().getMetaModel();
113
114
  const bIsStickyMode = ModelHelper.isStickySessionSupported(oMetaModel);
115
+ const isHiddenDraftEnabled =
116
+ (this.base.getAppComponent().getEnvironmentCapabilities().getCapabilities().HiddenDraft as HiddenDraft)?.enabled || false;
114
117
  if (!oParameters) {
115
118
  oParameters = {};
116
119
  }
117
120
  oParameters.bIsStickyMode = bIsStickyMode;
118
- return this.base._routing.navigateToRoute(sTargetRouteName, oParameters);
121
+ return this.base._routing.navigateToRoute(sTargetRouteName, { ...oParameters, isHiddenDraftEnabled });
119
122
  }
120
123
  }
121
124