@sapui5/sap.fe.core 1.136.9 → 1.136.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime.js +48 -23
  4. package/src/sap/fe/core/ActionRuntime.ts +61 -35
  5. package/src/sap/fe/core/AppStateHandler.js +4 -5
  6. package/src/sap/fe/core/AppStateHandler.ts +6 -5
  7. package/src/sap/fe/core/CommonUtils.js +3 -3
  8. package/src/sap/fe/core/CommonUtils.ts +2 -2
  9. package/src/sap/fe/core/PageController.controller.js +10 -0
  10. package/src/sap/fe/core/PageController.controller.ts +3 -0
  11. package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +4 -4
  12. package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +5 -2
  13. package/src/sap/fe/core/controllerextensions/InternalRouting.js +26 -16
  14. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +37 -16
  15. package/src/sap/fe/core/controllerextensions/MessageHandler.js +2 -2
  16. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +1 -1
  17. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +20 -10
  18. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +29 -13
  19. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +12 -2
  20. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +14 -7
  21. package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.js +5 -2
  22. package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.ts +4 -1
  23. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +2 -1
  24. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +1 -0
  25. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +7 -6
  26. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +8 -5
  27. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +2 -1
  28. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +1 -0
  29. package/src/sap/fe/core/converters/controls/Common/Action.js +15 -1
  30. package/src/sap/fe/core/converters/controls/Common/Action.ts +21 -1
  31. package/src/sap/fe/core/converters/controls/Common/Table.js +54 -46
  32. package/src/sap/fe/core/converters/controls/Common/Table.ts +65 -45
  33. package/src/sap/fe/core/converters/controls/Common/table/Columns.js +26 -6
  34. package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +32 -10
  35. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +12 -18
  36. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +13 -27
  37. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +5 -2
  38. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +7 -1
  39. package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +8 -3
  40. package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +7 -2
  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/helpers/ModelHelper.js +5 -2
  47. package/src/sap/fe/core/helpers/ModelHelper.ts +7 -3
  48. package/src/sap/fe/core/library.js +1 -1
  49. package/src/sap/fe/core/messagebundle_ar.properties +1 -1
  50. package/src/sap/fe/core/messagebundle_bg.properties +3 -3
  51. package/src/sap/fe/core/messagebundle_es.properties +1 -1
  52. package/src/sap/fe/core/messagebundle_fr.properties +1 -1
  53. package/src/sap/fe/core/messagebundle_ko.properties +1 -1
  54. package/src/sap/fe/core/messagebundle_no.properties +2 -2
  55. package/src/sap/fe/core/rootView/RootViewBaseController.js +3 -2
  56. package/src/sap/fe/core/rootView/RootViewBaseController.ts +2 -1
  57. package/src/sap/fe/core/services/RoutingServiceFactory.js +4 -2
  58. package/src/sap/fe/core/services/RoutingServiceFactory.ts +5 -2
  59. 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";
@@ -262,8 +263,8 @@ class InternalRouting extends ControllerExtension {
262
263
  // If we're navigating back, we need to find the "parent" context
263
264
  const backPath = this._oRoutingService.getPathToNavigateBack(context.getPath());
264
265
  // As we don't call the extension when navigating back to the LR, backPath is never empty so we can safely create a context
265
- hiddenBinding = context.getModel().bindContext(backPath);
266
- contextToNavigate = hiddenBinding.getBoundContext();
266
+ hiddenBinding = context.getModel()?.bindContext(backPath);
267
+ contextToNavigate = hiddenBinding?.getBoundContext();
267
268
  }
268
269
  const overrideNav = await this.base.getView().getController().routing.onBeforeNavigation({ bindingContext: contextToNavigate });
269
270
  hiddenBinding?.destroy();
@@ -294,7 +295,25 @@ class InternalRouting extends ControllerExtension {
294
295
  }
295
296
 
296
297
  this.removeTransitionMessagesForPreviousContext();
297
- return this._oRoutingService.navigateToContext(context, parameters, this._oView.getViewData(), this._oTargetInformation);
298
+ let skipHashGuardCheck;
299
+ const hiddenDraftEnabled = (this._oAppComponent?.getEnvironmentCapabilities()?.getCapabilities()?.HiddenDraft as HiddenDraft)
300
+ ?.enabled;
301
+ const isDocumentModified = this._oAppComponent?.getModel("ui")?.getProperty(UiModelConstants.DocumentModified) ?? true;
302
+ if (
303
+ this._oAppComponent.getRootViewController().isFclEnabled() &&
304
+ this.getFCLLevel() === 0 &&
305
+ hiddenDraftEnabled &&
306
+ !isDocumentModified
307
+ ) {
308
+ skipHashGuardCheck = true;
309
+ }
310
+ return this._oRoutingService.navigateToContext(
311
+ context,
312
+ parameters,
313
+ this._oView.getViewData(),
314
+ this._oTargetInformation,
315
+ skipHashGuardCheck
316
+ );
298
317
  }
299
318
 
300
319
  /**
@@ -1048,22 +1067,24 @@ class InternalRouting extends ControllerExtension {
1048
1067
 
1049
1068
  /**
1050
1069
  * Sets the binding context of the page or the component.
1051
- * @param oContext The binding context
1070
+ * @param context The binding context
1052
1071
  */
1053
- _setBindingContext(oContext: Context | null): void {
1054
- let oPreviousContext, oTargetControl;
1072
+ _setBindingContext(context: Context | null): void {
1073
+ let previousContext: Context, targetControl: View | EnhanceWithUI5<TemplateComponent>;
1055
1074
  if (this._oPageComponent) {
1056
- oPreviousContext = this._oPageComponent.getBindingContext() as Context;
1057
- oTargetControl = this._oPageComponent;
1075
+ previousContext = this._oPageComponent.getBindingContext() as Context;
1076
+ targetControl = this._oPageComponent;
1058
1077
  } else {
1059
- oPreviousContext = this._oView.getBindingContext();
1060
- oTargetControl = this._oView;
1078
+ previousContext = this._oView.getBindingContext();
1079
+ targetControl = this._oView;
1061
1080
  }
1062
-
1063
- oTargetControl.setBindingContext(oContext);
1064
-
1065
- if (oPreviousContext?.isKeepAlive() && oPreviousContext !== oContext) {
1066
- this._setKeepAlive(oPreviousContext, false);
1081
+ targetControl.setBindingContext(context);
1082
+ if (previousContext?.isKeepAlive() && previousContext !== context) {
1083
+ const rootViewController = this._oAppComponent.getRootViewController();
1084
+ /* Before deleting the bindingContext, we ensure it's not also used in another page.*/
1085
+ if (!rootViewController.getInstancedViews().some((pageView: View) => pageView.getBindingContext?.() === previousContext)) {
1086
+ this._setKeepAlive(previousContext, false);
1087
+ }
1067
1088
  }
1068
1089
  }
1069
1090
 
@@ -1166,7 +1187,7 @@ class InternalRouting extends ControllerExtension {
1166
1187
  const isHiddenDraftEnabled = (this._oAppComponent.getEnvironmentCapabilities()?.getCapabilities()?.HiddenDraft as HiddenDraft)
1167
1188
  .enabled;
1168
1189
 
1169
- if (!isDocumentModified && isHiddenDraftEnabled) {
1190
+ if (!isDocumentModified && isHiddenDraftEnabled && oViewData?.viewLevel === 1) {
1170
1191
  const mParameters = {
1171
1192
  skipDiscardPopover: true,
1172
1193
  skipBackNavigation: true
@@ -229,9 +229,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/uid", "
229
229
  // Create a UI decision.
230
230
  const newUIDecisions = messageHandling.getUIDecisions(customMessages, bindingContext, showBoundTransitionMessages, concurrentEditFlag, control, sActionName, onBeforeShowMessage, viewType, showBoundStateMessages, parameters, getResourceModel(this.getView()), this);
231
231
  this.updateUIDecisions(newUIDecisions, overrideUIDecision);
232
- this.removeHoldKey(unHoldKey ?? control?.getId());
233
232
  const uiElementIsAvailable = this.base.getAppComponent().getModel("internal")?.getProperty("/messageUIElementIsAvailable");
234
233
  this.base.getAppComponent().getModel("internal")?.setProperty("/messageUIElementIsAvailable", uiElementIsAvailable.then(async function () {
234
+ this.removeHoldKey(unHoldKey ?? control?.getId());
235
235
  return this.showMessagesWithCondtions(forceShowUIElement, success, failure);
236
236
  }.bind(this)));
237
237
  }
@@ -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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNZXNzYWdlSGFuZGxlciIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwibWV0aG9kT3ZlcnJpZGUiLCJfZGVjMyIsInByaXZhdGVFeHRlbnNpb24iLCJfZGVjNCIsImV4dGVuc2libGUiLCJPdmVycmlkZUV4ZWN1dGlvbiIsIkluc3RlYWQiLCJfZGVjNSIsIl9kZWM2IiwiX2RlYzciLCJwdWJsaWNFeHRlbnNpb24iLCJfZGVjOCIsIl9kZWM5IiwiX2RlYzEwIiwiZmluYWxFeHRlbnNpb24iLCJfZGVjMTEiLCJfZGVjMTIiLCJfZGVjMTMiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0NvbnRyb2xsZXJFeHRlbnNpb24iLCJfdGhpcyIsImNhbGwiLCJzdHJpY3RXYXJuaW5nTWVzc2FnZXMiLCJob2xkS2V5cyIsImhvbGRNc2dzVG9TaG93IiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJvbkluaXQiLCJpbnRlcm5hbE1vZGVsIiwiYmFzZSIsImdldEFwcENvbXBvbmVudCIsImdldE1vZGVsIiwic2V0UHJvcGVydHkiLCJ1bmRlZmluZWQiLCJQcm9taXNlIiwicmVzb2x2ZSIsImFkZFdhcm5pbmdNZXNzYWdlc1RvTWVzc2FnZUhhbmRsZXIiLCJhTWVzc2FnZXMiLCJjb25jYXQiLCJpc1N0cmljdFdhcm5pbmdNZXNzYWdlIiwib01lc3NhZ2UiLCJmaW5kIiwibWVzc2FnZSIsImdldENvZGUiLCJnZXRNZXNzYWdlIiwiZ2V0VHlwZSIsImdldERlc2NyaXB0aW9uVXJsIiwiZGVlcEVxdWFsIiwiZ2V0VGFyZ2V0cyIsImdldFBlcnNpc3RlbnQiLCJjbGVhclN0cmljdFdhcm5pbmdNZXNzYWdlcyIsImZpbHRlckVycm9yTWVzc2FnZXMiLCJtZXNzYWdlcyIsImZpbHRlciIsIk1lc3NhZ2VUeXBlIiwiRXJyb3IiLCJnZXRTaG93Qm91bmRNZXNzYWdlc0luTWVzc2FnZURpYWxvZyIsImZpbHRlckNvbnRleHRCb3VuZE1lc3NhZ2VzIiwidHJhbnNpdGlvbk1lc3NhZ2VzIiwiY29udGV4dCIsImJlZm9yZVNob3dNZXNzYWdlQnV0dG9uIiwiX21lc3NhZ2VEZXRhaWxzIiwicmVnaXN0ZXJUb0hvbGRNZXNzYWdlcyIsImtleSIsInVuaXF1ZUtleSIsInVpZCIsImluY2x1ZGVzIiwicHVzaCIsInJlc2V0SG9sZEtleXMiLCJzaG93TWVzc2FnZURpYWxvZyIsIm1QYXJhbWV0ZXJzIiwiZ2V0UHJvcGVydHkiLCJtZXNzYWdlc0luTW9kZWwiLCJNZXNzYWdpbmciLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXREYXRhIiwiZHVwbGljYXRlV2FybmluZ01lc3NhZ2UiLCJyZW1vdmVNZXNzYWdlcyIsImN1c3RvbU1lc3NhZ2VzIiwib09QSW50ZXJuYWxCaW5kaW5nQ29udGV4dCIsImdldFZpZXciLCJnZXRCaW5kaW5nQ29udGV4dCIsInZpZXdUeXBlIiwiZ2V0Vmlld0RhdGEiLCJjb252ZXJ0ZXJUeXBlIiwiaXNPcGVyYXRpb25EaWFsb2dPcGVuIiwiYlNob3dCb3VuZE1lc3NhZ2VzIiwib0JpbmRpbmdDb250ZXh0IiwicmVqZWN0Iiwic2V0VGltZW91dCIsInByb2Nlc3NBbmRTaG93TWVzc2FnZXMiLCJiaW5kIiwicGFyYW1ldGVycyIsImJpbmRpbmdDb250ZXh0Iiwic2hvd0JvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwic3VjY2VzcyIsImZhaWx1cmUiLCJjb25jdXJyZW50RWRpdEZsYWciLCJjb250cm9sIiwic0FjdGlvbk5hbWUiLCJvbkJlZm9yZVNob3dNZXNzYWdlIiwidW5Ib2xkS2V5IiwiZm9yY2VTaG93VUlFbGVtZW50Iiwib3ZlcnJpZGVVSURlY2lzaW9uIiwic2hvd0JvdW5kU3RhdGVNZXNzYWdlcyIsIm5ld1VJRGVjaXNpb25zIiwibWVzc2FnZUhhbmRsaW5nIiwiZ2V0VUlEZWNpc2lvbnMiLCJnZXRSZXNvdXJjZU1vZGVsIiwidXBkYXRlVUlEZWNpc2lvbnMiLCJyZW1vdmVIb2xkS2V5IiwiZ2V0SWQiLCJ1aUVsZW1lbnRJc0F2YWlsYWJsZSIsInRoZW4iLCJzaG93TWVzc2FnZXNXaXRoQ29uZHRpb25zIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwic2hvd1VJRWxlbWVudCIsImNoZWNrVG9TaG93VUlFbGVtZW50IiwicmV0Iiwic2hvd01lc3NhZ2VzSW5VSSIsImVyciIsIkxvZyIsImVycm9yIiwiaW5mbyIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsImtlZXBCb3VuZE1lc3NhZ2UiLCJrZWVwVW5ib3VuZE1lc3NhZ2UiLCJzUGF0aFRvQmVSZW1vdmVkIiwicmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwiX2NoZWNrTmF2aWdhdGlvblRvRXJyb3JQYWdlIiwiYVVuYm91bmRNZXNzYWdlcyIsImdldE1lc3NhZ2VzIiwiYlNob3dCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsImFCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsImFDdXN0b21NZXNzYWdlcyIsImJJc1N0aWNreUVkaXRNb2RlIiwiQ29tbW9uVXRpbHMiLCJpc1N0aWNreUVkaXRNb2RlIiwibU1lc3NhZ2VQYWdlUGFyYW1ldGVycyIsImlzRGF0YVJlY2VpdmVkRXJyb3IiLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwibmF2aWdhdGVCYWNrVG9PcmlnaW4iLCJlcnJvclR5cGUiLCJpc0luaXRpYWxMb2FkNTAzRXJyb3IiLCJvVGVjaG5pY2FsRGV0YWlscyIsImdldFRlY2huaWNhbERldGFpbHMiLCJodHRwU3RhdHVzIiwiX2dldEhUVFA1MDNNZXNzYWdlUGFyYW1ldGVycyIsInRlY2huaWNhbERldGFpbHMiLCJtZXNzYWdlUGFnZVBhcmFtZXRlcnMiLCJzZWNvbmRzQmVmb3JlUmV0cnkiLCJyZXRyeUFmdGVyIiwiX2dldFNlY29uZHNCZWZvcmVSZXRyeUFmdGVyIiwicmV0cnlBZnRlck1lc3NhZ2UiLCJnZXRSZXRyeUFmdGVyTWVzc2FnZSIsImRSZXRyeUFmdGVyIiwiZEN1cnJlbnREYXRlVGltZSIsIkRhdGUiLCJpQ3VycmVudERhdGVUaW1lSW5NaWxsaVNlY29uZHMiLCJnZXRUaW1lIiwiaVJldHJ5QWZ0ZXJEYXRlVGltZUluTWlsbGlTZWNvbmRzIiwiaVNlY29uZHNCZWZvcmVSZXRyeSIsIm9sZFVJRGVjaXNpb25zIiwiYWxsTWVzc2FnZXNUb1Nob3ciLCJtZXJnZWRVSURlY2lzaW9uIiwibWVzc2FnZXNUb1Nob3ciLCJBcnJheSIsImZyb20iLCJTZXQiLCJlbGVtZW50cyIsInVpRWxlbWVudFRvVXNlIiwiY29udGV4dE5lZWRzRXRhZ1JlZnJlc2giLCJjb250YWluc0JvdW5kVHJhbnNpdGlvbiIsImluS2V5Iiwic3BsaWNlIiwiaW5kZXhPZiIsImhvbGRNZXNzYWdlc0ZvckNvbnRyb2wiLCJpZGVudGlmaWVyIiwicmVsZWFzZUhvbGRCeUNvbnRyb2wiLCJzaG93TWVzc2FnZXMiLCJtZXNzYWdlUGFnZU5hdmlnYXRpb25DYWxsYmFjayIsImhhbmRsZVNoZWxsQmFjayIsInNoZWxsQmFjayIsIm9SZXNvdXJjZUJ1bmRsZSIsIkxpYnJhcnkiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsIl9yb3V0aW5nIiwibmF2aWdhdGVUb01lc3NhZ2VQYWdlIiwiZ2V0VGV4dCIsImNhdGNoIiwiQ29udHJvbGxlckV4dGVuc2lvbiIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk1lc3NhZ2VIYW5kbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IGRlZXBFcXVhbCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwRXF1YWxcIjtcbmltcG9ydCB1aWQgZnJvbSBcInNhcC9iYXNlL3V0aWwvdWlkXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXh0ZW5zaWJsZSwgZmluYWxFeHRlbnNpb24sIG1ldGhvZE92ZXJyaWRlLCBwcml2YXRlRXh0ZW5zaW9uLCBwdWJsaWNFeHRlbnNpb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHtcblx0TWVzc2FnZVRlY2huaWNhbERldGFpbHMsXG5cdE1lc3NhZ2VVSURlY2lzaW9ucyxcblx0U2hvd01lc3NhZ2VQYXJhbWV0ZXJzLFxuXHRTdXBwb3J0ZWRVSUVsZW1lbnRcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL21lc3NhZ2VIYW5kbGVyL21lc3NhZ2VIYW5kbGluZ1wiO1xuaW1wb3J0IG1lc3NhZ2VIYW5kbGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvbWVzc2FnZUhhbmRsZXIvbWVzc2FnZUhhbmRsaW5nXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgTWVzc2FnaW5nIGZyb20gXCJzYXAvdWkvY29yZS9NZXNzYWdpbmdcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcbmltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCIuLi9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcblxudHlwZSBPYmplY3RXaXRoQ29udmVydGVyVHlwZSA9IG9iamVjdCAmIHtcblx0Y29udmVydGVyVHlwZTogc3RyaW5nO1xufTtcbnR5cGUgTmF2aWdhdGlvblRvRXJyb3JQYWdlUGFyYW1ldGVyID0ge1xuXHRjdXN0b21NZXNzYWdlcz86IEN1c3RvbU1lc3NhZ2VbXTtcblx0Y29uY3VycmVudEVkaXRGbGFnPzogYm9vbGVhbjtcblx0aXNEYXRhUmVjZWl2ZWRFcnJvcj86IGJvb2xlYW47XG5cdHRpdGxlPzogc3RyaW5nO1xuXHRkZXNjcmlwdGlvbj86IHN0cmluZztcblx0aXNJbml0aWFsTG9hZDUwM0Vycm9yPzogYm9vbGVhbjtcbn07XG5leHBvcnQgdHlwZSBOYXZpZ2F0aW9uVG9FcnJvclBhZ2VSZXN1bHQgPSB7XG5cdHRpdGxlPzogc3RyaW5nO1xuXHRkZXNjcmlwdGlvbj86IHN0cmluZztcblx0ZXJyb3JUeXBlPzogc3RyaW5nO1xuXHRuYXZpZ2F0ZUJhY2tUb09yaWdpbj86IGJvb2xlYW47XG5cdGhhbmRsZVNoZWxsQmFjaz86IGJvb2xlYW47XG59O1xuZXhwb3J0IHR5cGUgQ3VzdG9tTWVzc2FnZSA9IHtcblx0Y29kZTogc3RyaW5nO1xuXHR0ZXh0OiBzdHJpbmc7XG5cdHBlcnNpc3RlbnQ6IGJvb2xlYW47XG5cdHR5cGU6IE1lc3NhZ2VUeXBlO1xufTtcbmV4cG9ydCB0eXBlIFNob3dNZXNzYWdlRGlhbG9nUGFyYW1ldGVyID0ge1xuXHRjdXN0b21NZXNzYWdlcz86IEN1c3RvbU1lc3NhZ2VbXTtcblx0aXNPcGVyYXRpb25EaWFsb2dPcGVuPzogYm9vbGVhbjtcblx0Y29udGV4dD86IENvbnRleHQ7XG5cdGNvbmN1cnJlbnRFZGl0RmxhZz86IGJvb2xlYW47XG5cdGNvbnRyb2w/OiBDb250cm9sO1xuXHRzQWN0aW9uTmFtZT86IHN0cmluZztcblx0YVNlbGVjdGVkQ29udGV4dHM/OiBDb250ZXh0IHwgQ29udGV4dFtdIHwgbnVsbDtcblx0b25CZWZvcmVTaG93TWVzc2FnZT86IChtZXNzYWdlczogTWVzc2FnZVtdLCBzaG93TWVzc2FnZVBhcmFtZXRlcnM6IFNob3dNZXNzYWdlUGFyYW1ldGVycykgPT4gU2hvd01lc3NhZ2VQYXJhbWV0ZXJzO1xuXHR1bkhvbGRLZXk/OiBzdHJpbmc7XG5cdG92ZXJyaWRlVUlEZWNpc2lvbj86IGJvb2xlYW47XG5cdHNob3dCb3VuZFN0YXRlTWVzc2FnZXM/OiBib29sZWFuO1xuXHRib3VuZEFjdGlvbk5hbWU/OiBzdHJpbmc7XG5cdGVudGl0eVNldD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFNob3dNZXNzYWdlc1BhcmFtZXRlcnMgPSBTaG93TWVzc2FnZURpYWxvZ1BhcmFtZXRlciAmIHtcblx0bWVzc2FnZVBhZ2VOYXZpZ2F0aW9uQ2FsbGJhY2s/OiBGdW5jdGlvbjtcblx0c2hlbGxCYWNrPzogRnVuY3Rpb24gfCBib29sZWFuO1xuXHRpc0RhdGFSZWNlaXZlZEVycm9yPzogYm9vbGVhbjtcblx0aXNJbml0aWFsTG9hZDUwM0Vycm9yPzogYm9vbGVhbjtcblx0dGl0bGU/OiBzdHJpbmc7XG5cdGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufTtcbi8qKlxuICpcbiAqIERlZmluZXMgdGhlIG1lc3NhZ2UgZGV0YWlsIHJlbGV2YW50IGZvciB0aGUgTWVzc2FnZUJ1dHRvbiBidWlsZGluZyBibG9jayB0byBkaXNwbGF5IGEgcG9wb3Zlci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgTWVzc2FnZURldGFpbCA9IHtcblx0bWVzc2FnZTogTWVzc2FnZTtcblx0Z3JvdXBOYW1lPzogc3RyaW5nO1xuXHRhY3RpdmVUaXRsZUhhbmRsZXI/OiBGdW5jdGlvbjtcbn07XG5cbi8qKlxuICogQSBjb250cm9sbGVyIGV4dGVuc2lvbiBvZmZlcmluZyBtZXNzYWdlIGhhbmRsaW5nLlxuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHB1YmxpY1xuICogQGV4cGVyaW1lbnRhbCBBcyBvZiB2ZXJzaW9uIDEuOTAuMFxuICogQHNpbmNlIDEuOTAuMFxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5NZXNzYWdlSGFuZGxlclwiKVxuY2xhc3MgTWVzc2FnZUhhbmRsZXIgZXh0ZW5kcyBDb250cm9sbGVyRXh0ZW5zaW9uIHtcblx0cHJpdmF0ZSBzdHJpY3RXYXJuaW5nTWVzc2FnZXM6IE1lc3NhZ2VbXSA9IFtdO1xuXG5cdHByb3RlY3RlZCBiYXNlITogUGFnZUNvbnRyb2xsZXI7XG5cblx0cHJvdGVjdGVkIGhvbGRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdHByaXZhdGUgaG9sZE1zZ3NUb1Nob3cgPSBmYWxzZTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHR9XG5cblx0QG1ldGhvZE92ZXJyaWRlKClcblx0b25Jbml0KCk6IHZvaWQge1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9tZXNzYWdlVUlEZWNpc2lvblwiLCB1bmRlZmluZWQpO1xuXHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvbWVzc2FnZVVJRWxlbWVudElzQXZhaWxhYmxlXCIsIFByb21pc2UucmVzb2x2ZSgpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIHdhcm5pbmcgbWVzc2FnZXMgdG8gdGhlIG1lc3NhZ2UgaGFuZGxlci5cblx0ICogQHBhcmFtIGFNZXNzYWdlcyBUaGUgc3RyaWN0IHdhcm5pbmcgbWVzc2FnZXMgdG8gYmUgYWRkZWRcblx0ICovXG5cdGFkZFdhcm5pbmdNZXNzYWdlc1RvTWVzc2FnZUhhbmRsZXIoYU1lc3NhZ2VzOiBNZXNzYWdlW10pOiB2b2lkIHtcblx0XHR0aGlzLnN0cmljdFdhcm5pbmdNZXNzYWdlcyA9IHRoaXMuc3RyaWN0V2FybmluZ01lc3NhZ2VzLmNvbmNhdChhTWVzc2FnZXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgd2hldGhlciBvciBub3QgYSBtZXNzYWdlIGlzIGEgc3RyaWN0IHdhcm5pbmcgbWVzc2FnZSB0aGF0IHdhcyByZWNlaXZlZCBwcmV2aW91c2x5LlxuXHQgKiBAcGFyYW0gb01lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gYmUgY2hlY2tlZFxuXHQgKiBAcmV0dXJucyBXaGV0aGVyIG9yIG5vdCB0aGUgbWVzc2FnZSBpcyBhIHN0cmljdCB3YXJuaW5nIG1lc3NhZ2Vcblx0ICovXG5cdGlzU3RyaWN0V2FybmluZ01lc3NhZ2Uob01lc3NhZ2U6IE1lc3NhZ2UpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0dGhpcy5zdHJpY3RXYXJuaW5nTWVzc2FnZXMuZmluZCgobWVzc2FnZSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdG1lc3NhZ2UuZ2V0Q29kZSgpID09PSBvTWVzc2FnZS5nZXRDb2RlKCkgJiZcblx0XHRcdFx0XHRtZXNzYWdlLmdldE1lc3NhZ2UoKSA9PT0gb01lc3NhZ2UuZ2V0TWVzc2FnZSgpICYmXG5cdFx0XHRcdFx0bWVzc2FnZS5nZXRUeXBlKCkgPT09IG9NZXNzYWdlLmdldFR5cGUoKSAmJlxuXHRcdFx0XHRcdG1lc3NhZ2UuZ2V0RGVzY3JpcHRpb25VcmwoKSA9PT0gb01lc3NhZ2UuZ2V0RGVzY3JpcHRpb25VcmwoKSAmJlxuXHRcdFx0XHRcdGRlZXBFcXVhbChtZXNzYWdlLmdldFRhcmdldHMoKSwgb01lc3NhZ2UuZ2V0VGFyZ2V0cygpKSAmJlxuXHRcdFx0XHRcdG1lc3NhZ2UuZ2V0UGVyc2lzdGVudCgpID09PSBvTWVzc2FnZS5nZXRQZXJzaXN0ZW50KClcblx0XHRcdFx0KTtcblx0XHRcdH0pICE9PSB1bmRlZmluZWRcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENsZWFycyBhbGwgc3RyaWN0IHdhcm5pbmcgbWVzc2FnZXMgZnJvbSB0aGUgbWVzc2FnZSBoYW5kbGVyLlxuXHQgKi9cblx0Y2xlYXJTdHJpY3RXYXJuaW5nTWVzc2FnZXMoKTogdm9pZCB7XG5cdFx0dGhpcy5zdHJpY3RXYXJuaW5nTWVzc2FnZXMgPSBbXTtcblx0fVxuXG5cdGZpbHRlckVycm9yTWVzc2FnZXMobWVzc2FnZXM6IE1lc3NhZ2VbXSk6IE1lc3NhZ2VbXSB7XG5cdFx0cmV0dXJuIG1lc3NhZ2VzLmZpbHRlcigobWVzc2FnZSkgPT4gbWVzc2FnZS5nZXRUeXBlKCkgPT09IE1lc3NhZ2VUeXBlLkVycm9yKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IGJvdW5kIG1lc3NhZ2VzIGFyZSBzaG93biBpbiB0aGUgbWVzc2FnZSBkaWFsb2cuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5JbnN0ZWFkfS5cblx0ICpcblx0ICogSWYgdGhlIGJvdW5kIG1lc3NhZ2VzIGFyZSBzaG93biB0byB0aGUgdXNlciB3aXRoIGEgZGlmZmVyZW50IGNvbnRyb2wgbGlrZSB0aGUgKFRPRE86TGluaykgTWVzc2FnZUJ1dHRvblxuXHQgKiB0aGlzIG1ldGhvZCBoYXMgdG8gYmUgb3ZlcnJpZGRlbi5cblx0ICogQHJldHVybnMgRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCBib3VuZCBtZXNzYWdlcyBhcmUgc2hvd24gaW4gdGhlIG1lc3NhZ2UgZGlhbG9nLlxuXHQgKi9cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5JbnN0ZWFkKVxuXHRnZXRTaG93Qm91bmRNZXNzYWdlc0luTWVzc2FnZURpYWxvZygpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IGJvdW5kIG1lc3NhZ2VzIHNob3VsZCBiZSByZW1vdmVkIGZyb20gdGhlIGRpYWxvZy5cblx0ICpcblx0ICogRm9yIHRoZSBvYmplY3QgcGFnZSBpZiB0aGUgYm91bmQgbWVzc2FnZXMgYXJlIHNob3duIGluIHRoZSBtZXNzYWdlIHN0cmlwLCB0aGVuIHJlbW92ZSB0aGF0IGZyb20gdGhlIGRpYWxvZyB0byBhdm9pZCBkdXBsaWNhdGUgbWVzc2FnZXMuXG5cdCAqXG5cdCAqIE9ubHkgcmVtb3ZlIHRoZSBtZXNzYWdlcyBpZiBtb3JlIHRoYW4gb25lIG1lc3NhZ2UgaXMgcHJlc2VudCBpbiB0aGUgbWVzc2FnZSBtb2RlbC5cblx0ICogQHBhcmFtIHRyYW5zaXRpb25NZXNzYWdlcyBUaGUgbWVzc2FnZXMgdGhhdCBhcmUgc2hvd24gaW4gdGhlIG1lc3NhZ2UgZGlhbG9nLlxuXHQgKiBAcGFyYW0gY29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgbWVzc2FnZSBkaWFsb2cuXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdGhlIGJvdW5kIG1lc3NhZ2VzIHdoaWNoIHNob3VsZCBiZSBzaG93biBpbiB0aGUgbWVzc2FnZSBkaWFsb2cuXG5cdCAqL1xuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkluc3RlYWQpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0ZmlsdGVyQ29udGV4dEJvdW5kTWVzc2FnZXModHJhbnNpdGlvbk1lc3NhZ2VzOiBNZXNzYWdlW10sIGNvbnRleHQ6IENvbnRleHQpOiBNZXNzYWdlW10ge1xuXHRcdHJldHVybiB0cmFuc2l0aW9uTWVzc2FnZXM7XG5cdH1cblxuXHQvKipcblx0ICogQWxsb3dzIGNvbnN1bWVyIG9mIGEgbWVzc2FnZSBidXR0b24gQkIgdG8gZGVjaWRlIHdoaWNoIGJvdW5kIG1lc3NhZ2VzIHNob3VsZCBiZSBzaG93biBhbmQgaG93LlxuXHQgKlxuXHQgKiBUaGlzIGhvb2sgaXMgY2FsbGVkIHdoZW4gdGhlIG1lc3NhZ2UgYnV0dG9uIEJCIGRldGVjdHMgYSBjaGFuZ2UgaW4gdGhlIG1lc3NhZ2UgbW9kZWwuXG5cdCAqIFRoZSBob29rcyBhbGxvd3MgdG8gZGVmaW5lIGJlaGF2aW91ciBmb3IgbWVzc2FnZXMgaW4gdGhlIG1lc3NhZ2UgYnV0dG9uIEJCLlxuXHQgKlxuXHQgKiBDb25zdW1lcnMgd2lsbCBiZSBhYmxlIHRvIGRvIHRoZSBmb2xsb3dpbmcgd2l0aCB0aGlzIGhvb2suXG5cdCAqXG5cdCAqIDEuIEZpbHRlciBvdXQgbWVzc2FnZXMgc28gdGhhdCB0aGV5IGFyZSBub3Qgc2hvd24gb24gdGhlIG1lc3NhZ2UgYnV0dG9uLlxuXHQgKiAyLiBncm91cCB0aGUgbWVzc2FnZXMgYmFzZWQgb24gdGhlaXIgVUkuXG5cdCAqIDMuIHByb3ZpZGUgYSBwcmVzc2VyIGhhbmRsZXIgaW5jYXNlIHRoZSBtZXNzYWdlIHNob3VsZCBzaG93IGFzIGEgbGluay5cblx0ICogQHBhcmFtIF9tZXNzYWdlRGV0YWlscyBPYmplY3QgY29udGFpbmluZyB0aGUgZGV0YWlscyByZWxhdGVkIHRvIHRoZSBtZXNzYWdlLlxuXHQgKiBAcGFyYW0gX21lc3NhZ2VEZXRhaWxzLm1lc3NhZ2UgVGhlIG1lc3NhZ2UgZnJvbSB0aGUgbWVzc2FnZSBtb2RlbC5JZGVhbGx5LCBpdCBtdXN0IG5vdCBiZSBtb2RpZmllZCBkaXJlY3RseS5cblx0ICogQHBhcmFtIF9tZXNzYWdlRGV0YWlscy5ncm91cE5hbWUgVGhlIGdyb3VwIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IG1lc3NhZ2UuXG5cdCAqIEBwYXJhbSBfbWVzc2FnZURldGFpbHMuYWN0aXZlVGl0bGVIYW5kbGVyIEZ1bmN0aW9uIHRvIGhhbmRsZSB0aGUgY2xpY2sgZXZlbnQgb24gYSBtZXNzYWdlIGluIHRoZSBNZXNzYWdlQnV0dG9uIGJ1aWxkaW5nIGJsb2NrLlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCBtdXN0IGJlIHJldHVybmVkIGJ5IHRoZSBvdmVycmlkZGVuIG1ldGhvZC5cblx0ICogQHB1YmxpY1xuXHQgKiBAZXhwZXJpbWVudGFsXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoXCJBZnRlckFzeW5jXCIpXG5cdGFzeW5jIGJlZm9yZVNob3dNZXNzYWdlQnV0dG9uKF9tZXNzYWdlRGV0YWlsczogTWVzc2FnZURldGFpbFtdKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlZ2lzdGVyIHRvIGhvbGQgbWVzc2FnZXMgdW5pdGwgYSBwcm9jZXNzIGlzIGNvbXBsZXRlLlxuXHQgKlxuXHQgKiBUaGUgY2FsbGVyIGNhbiByZWdpc3RlciB0byBob2xkIHRoZSBtZXNzYWdlIGhhbmRsZXIgZnJvbSBzaG93aW5nIG1lc3NhZ2VzIHVudGlsIHRoZSBjYWxsZXIncyBwcm9jZXNzZXMgYXJlIGNvbXBsZXRlZC5cblx0ICogT24gcmVnaXN0ZXJpbmcgdGhlIGNhbGxlciBpcyByZXR1cm5lZCBhIHVuaXF1ZSBrZXkuXG5cdCAqIFRoZSBtZXNzYWdlcyB3aWxsIG5vdCBiZSBzaG93biBpbiB0aGUgVUkgd2l0aCBzdWJzZXF1ZW50ICdzaG93TWVzc2FnZURpYWxvZygpJyBjYWxscy5cblx0ICogVGhlIGNhbGxlciBuZWVkcyB0byB1c2UgJ3Nob3dNZXNzYWdlRGlhbG9nKDxrZXk+KScgYXQgdGhlIGVuZCBvZiBhbGwgaGlzIHByb2Nlc3NlcyB0byBzaG93IHRoZSBtZXNzYWdlcyBpbiB0aGUgVUkuXG5cdCAqXG5cdCAqIElmIG11bHRpcGxlIG93bmVycyByZWdpc3RlciBzaW11bHRhbmVvdXNseSwgdGhlbiBtZXNzYWdlcyBhcmUgc2hvd24gaW4gdGhlIFVJIG9ubHkgYWZ0ZXIgJ3Nob3dNZXNzYWdlRGlhbG9nKDxyZXNwZWN0aXZlX2tleT4pJyBpcyBjYWxsZWQgYnkgYWxsIHRoZSBwcm9jZXNzZXMnIG93bmVycy5cblx0ICogQHBhcmFtIGtleSBVbmlxdWUgaWRlbnRpZmllciB0byB1c2UsIElmIG5vdCBwcm92aWRlZCwgYSBVSUQgd291bGQgYmUgY3JlYXRlZCBhbmQgdXNlZCB0byByZWdpc3Rlci5cblx0ICogQHJldHVybnMgVW5pcXVlIEtleSB0byBiZSB1c2VkIGJ5IHRoZSBjYWxsZXIgdG8gc2hvdyBtZXNzYWdlcyBhdCBhIGxhdGVyIHBvaW50IG9mIHRpbWUuXG5cdCAqL1xuXHRyZWdpc3RlclRvSG9sZE1lc3NhZ2VzKGtleT86IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgdW5pcXVlS2V5ID0ga2V5ID8/IHVpZCgpO1xuXHRcdGlmICghdGhpcy5ob2xkS2V5cy5pbmNsdWRlcyh1bmlxdWVLZXkpKSB7XG5cdFx0XHR0aGlzLmhvbGRLZXlzLnB1c2godW5pcXVlS2V5KTtcblx0XHR9XG5cdFx0cmV0dXJuIHVuaXF1ZUtleTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhciBhbGwgZXhpc3RpbmcgaGVsZCBrZXlzLlxuXHQgKi9cblx0cmVzZXRIb2xkS2V5cygpOiB2b2lkIHtcblx0XHR0aGlzLmhvbGRLZXlzID0gW107XG5cdH1cblxuXHQvKipcblx0ICogU2hvd3MgYSBtZXNzYWdlIGRpYWxvZyB3aXRoIHRyYW5zaXRpb24gbWVzc2FnZXMgaWYgdGhlcmUgYXJlIGFueS5cblx0ICogVGhlIG1lc3NhZ2UgZGlhbG9nIGlzIHNob3duIGFzIGEgbW9kYWwgZGlhbG9nLiBPbmNlIHRoZSB1c2VyIGNvbmZpcm1zIHRoZSBkaWFsb2csIGFsbCB0cmFuc2l0aW9uIG1lc3NhZ2VzXG5cdCAqIGFyZSByZW1vdmVkIGZyb20gdGhlIG1lc3NhZ2UgbW9kZWwuIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgbWVzc2FnZSwgYSBsaXN0IG9mIG1lc3NhZ2VzIGlzIHNob3duLiBUaGUgdXNlclxuXHQgKiBjYW4gZmlsdGVyIG9uIG1lc3NhZ2UgdHlwZXMgYW5kIGNhbiBkaXNwbGF5IGRldGFpbHMgYXMgd2VsbCBhcyB0aGUgbG9uZyB0ZXh0LiBJZiB0aGVyZSBpcyBvbmUgbWVzc2FnZSxcblx0ICogdGhlIGRpYWxvZyBpbW1lZGlhdGVseSBzaG93cyB0aGUgZGV0YWlscyBvZiB0aGUgbWVzc2FnZS4gSWYgdGhlcmUgaXMganVzdCBvbmUgc3VjY2VzcyBtZXNzYWdlLCBhIG1lc3NhZ2Vcblx0ICogdG9hc3QgaXMgc2hvd24gaW5zdGVhZC5cblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzIFBSSVZBVEVcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgb25jZSB0aGUgdXNlciBjbG9zZXMgdGhlIGRpYWxvZy4gSWYgdGhlcmUgYXJlIG5vIG1lc3NhZ2VzXG5cdCAqIHRvIGJlIHNob3duLCB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZCBpbW1lZGlhdGVseVxuXHQgKiBAcHVibGljXG5cdCAqIEBleHBlcmltZW50YWwgQXMgb2YgdmVyc2lvbiAxLjkwLjBcblx0ICogQHNpbmNlIDEuOTAuMFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIHNob3dNZXNzYWdlRGlhbG9nKG1QYXJhbWV0ZXJzPzogU2hvd01lc3NhZ2VEaWFsb2dQYXJhbWV0ZXIpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gdGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsO1xuXHRcdC8vIHJlbW92ZSBzdHJpY3Qgd2FybmluZyBtZXNzYWdlcyBmcm9tIHRoZSBtZXNzYWdlIG1vZGVsIGJlZm9yZSBzaG93aW5nIHRoZSBtZXNzYWdlIGRpYWxvZ1xuXHRcdGF3YWl0IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvbWVzc2FnZVVJRWxlbWVudElzQXZhaWxhYmxlXCIpO1xuXG5cdFx0Y29uc3QgbWVzc2FnZXNJbk1vZGVsID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKTtcblx0XHRjb25zdCBkdXBsaWNhdGVXYXJuaW5nTWVzc2FnZSA9IG1lc3NhZ2VzSW5Nb2RlbC5maWx0ZXIoKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IHtcblx0XHRcdHJldHVybiB0aGlzLmlzU3RyaWN0V2FybmluZ01lc3NhZ2UobWVzc2FnZSk7XG5cdFx0fSk7XG5cdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKGR1cGxpY2F0ZVdhcm5pbmdNZXNzYWdlKTtcblxuXHRcdGNvbnN0IGN1c3RvbU1lc3NhZ2VzID0gbVBhcmFtZXRlcnMgJiYgbVBhcmFtZXRlcnMuY3VzdG9tTWVzc2FnZXMgPyBtUGFyYW1ldGVycy5jdXN0b21NZXNzYWdlcyA6IHVuZGVmaW5lZCxcblx0XHRcdG9PUEludGVybmFsQmluZGluZ0NvbnRleHQgPSB0aGlzLmJhc2UuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgdmlld1R5cGUgPSAodGhpcy5iYXNlLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIE9iamVjdFdpdGhDb252ZXJ0ZXJUeXBlKS5jb252ZXJ0ZXJUeXBlO1xuXHRcdC8vIHNldCBpc0FjdGlvblBhcmFtZXRlckRpYWxvZyBvcGVuIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgaW4gdGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIHRvIGRlY2lkZSB3aGV0aGVyIG1lc3NhZ2UgZGlhbG9nIHNob3VsZCBvcGVuIG9yIG5vdFxuXHRcdGlmIChtUGFyYW1ldGVycyAmJiBtUGFyYW1ldGVycy5pc09wZXJhdGlvbkRpYWxvZ09wZW4gJiYgb09QSW50ZXJuYWxCaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0b09QSW50ZXJuYWxCaW5kaW5nQ29udGV4dC5zZXRQcm9wZXJ0eShcImlzT3BlcmF0aW9uRGlhbG9nT3BlblwiLCB0cnVlKTtcblx0XHR9XG5cdFx0Y29uc3QgYlNob3dCb3VuZE1lc3NhZ2VzID0gdGhpcy5nZXRTaG93Qm91bmRNZXNzYWdlc0luTWVzc2FnZURpYWxvZygpO1xuXHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IChcblx0XHRcdG1QYXJhbWV0ZXJzICYmIG1QYXJhbWV0ZXJzLmNvbnRleHQgPyBtUGFyYW1ldGVycy5jb250ZXh0IDogdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKVxuXHRcdCkgYXMgT0RhdGFWNENvbnRleHQ7XG5cdFx0Ly9jb25zdCBiRXRhZ01lc3NhZ2UgPSBtUGFyYW1ldGVycyAmJiBtUGFyYW1ldGVycy5iSGFzRXRhZ01lc3NhZ2U7XG5cdFx0Ly8gcmVzZXQgIGlzT3BlcmF0aW9uRGlhbG9nT3BlblxuXHRcdC8vIGNhbm5vdCBkbyB0aGlzIG9wZXJhdGlvbnMuanMgc2luY2UgaXQgaXMgbm90IGF3YXJlIG9mIHRoZSB2aWV3XG5cdFx0aWYgKG9PUEludGVybmFsQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdG9PUEludGVybmFsQmluZGluZ0NvbnRleHQuc2V0UHJvcGVydHkoXCJpc09wZXJhdGlvbkRpYWxvZ09wZW5cIiwgZmFsc2UpO1xuXHRcdH1cblx0XHRyZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oXG5cdFx0XHRmdW5jdGlvbiAodGhpczogTWVzc2FnZUhhbmRsZXIsIHJlc29sdmU6ICgpID0+IHZvaWQsIHJlamVjdDogKCkgPT4gdm9pZCk6IHZvaWQge1xuXHRcdFx0XHQvLyB3ZSBoYXZlIHRvIHNldCBhIHRpbWVvdXQgdG8gYmUgYWJsZSB0byBhY2Nlc3MgdGhlIG1vc3QgcmVjZW50IG1lc3NhZ2VzXG5cdFx0XHRcdHNldFRpbWVvdXQoXG5cdFx0XHRcdFx0ZnVuY3Rpb24gKHRoaXM6IE1lc3NhZ2VIYW5kbGVyKTogdm9pZCB7XG5cdFx0XHRcdFx0XHQvLyBUT0RPOiBncmVhdCBBUEkgLSB3aWxsIGJlIGNoYW5nZWQgbGF0ZXJcblx0XHRcdFx0XHRcdHRoaXMucHJvY2Vzc0FuZFNob3dNZXNzYWdlcyhcblx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMgPz8ge30sXG5cdFx0XHRcdFx0XHRcdG9CaW5kaW5nQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0YlNob3dCb3VuZE1lc3NhZ2VzLFxuXHRcdFx0XHRcdFx0XHRjdXN0b21NZXNzYWdlcyA/PyBbXSxcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZSxcblx0XHRcdFx0XHRcdFx0cmVqZWN0LFxuXHRcdFx0XHRcdFx0XHR2aWV3VHlwZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9LmJpbmQodGhpcyksXG5cdFx0XHRcdFx0MFxuXHRcdFx0XHQpO1xuXHRcdFx0fS5iaW5kKHRoaXMpXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQcm9jZXNzIHRoZSBtZXNzYWdlcyBhbmQgc2hvdyB0aGVtIHdoZW4gZXhwZWN0ZWQuXG5cdCAqXG5cdCAqIFdlIGZpbHRlciB0aGUgbWVzc2FnZXMgdG8gc2hvdyBhbmQgaG9sZCB0aGVtIHVudGlsIGFsbCByZWdpc3RlcmVkIHByb2Nlc3NlcyBjYWxsIHNob3dNZXNzYWdlRGlhbG9nIHdpdGggdGhlaXIgcmVzcGVjdGl2ZSBoZWxkIGtleXMuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzIFBhcmFtZXRlcnMgdG8gc2hvdyBtZXNzYWdlIGRpYWxvZy5cblx0ICogQHBhcmFtIGJpbmRpbmdDb250ZXh0IEJpbmQgY29udGV4dCBvZiB0aGUgcGFnZS5cblx0ICogQHBhcmFtIHNob3dCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyBTaG91bGQgYm91bmQgbWVzc2FnZXMgYmUgc2hvd24uXG5cdCAqIEBwYXJhbSBjdXN0b21NZXNzYWdlcyBDdXN0b20gbWVzc2FnZXMgdG8gYWRkLlxuXHQgKiBAcGFyYW0gc3VjY2VzcyBTdWNjZXNzIGNhbGxiYWNrLlxuXHQgKiBAcGFyYW0gZmFpbHVyZSBGYWlsdXJlIGNhbGxiYWNrLlxuXHQgKiBAcGFyYW0gdmlld1R5cGUgVmlldyB0eXBlLCBsaXN0IHJlcG9ydCBvciBvYmplY3QgcGFnZS5cblx0ICovXG5cdHByb2Nlc3NBbmRTaG93TWVzc2FnZXMoXG5cdFx0cGFyYW1ldGVyczogU2hvd01lc3NhZ2VEaWFsb2dQYXJhbWV0ZXIsXG5cdFx0YmluZGluZ0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0LFxuXHRcdHNob3dCb3VuZFRyYW5zaXRpb25NZXNzYWdlczogYm9vbGVhbixcblx0XHRjdXN0b21NZXNzYWdlczogQ3VzdG9tTWVzc2FnZVtdLFxuXHRcdHN1Y2Nlc3M6ICgpID0+IHZvaWQsXG5cdFx0ZmFpbHVyZTogKCkgPT4gdm9pZCxcblx0XHR2aWV3VHlwZT86IHN0cmluZ1xuXHQpOiB2b2lkIHtcblx0XHRjb25zdCB7XG5cdFx0XHRjb25jdXJyZW50RWRpdEZsYWcsXG5cdFx0XHRjb250cm9sLFxuXHRcdFx0c0FjdGlvbk5hbWUsXG5cdFx0XHRvbkJlZm9yZVNob3dNZXNzYWdlLFxuXHRcdFx0dW5Ib2xkS2V5LFxuXHRcdFx0aXNPcGVyYXRpb25EaWFsb2dPcGVuOiBmb3JjZVNob3dVSUVsZW1lbnQgPSBmYWxzZSxcblx0XHRcdG92ZXJyaWRlVUlEZWNpc2lvbixcblx0XHRcdHNob3dCb3VuZFN0YXRlTWVzc2FnZXNcblx0XHR9ID0gcGFyYW1ldGVycztcblx0XHR0aGlzLmhvbGRNc2dzVG9TaG93ID0gdHJ1ZTtcblxuXHRcdC8vIENyZWF0ZSBhIFVJIGRlY2lzaW9uLlxuXHRcdGNvbnN0IG5ld1VJRGVjaXNpb25zID0gbWVzc2FnZUhhbmRsaW5nLmdldFVJRGVjaXNpb25zKFxuXHRcdFx0Y3VzdG9tTWVzc2FnZXMsXG5cdFx0XHRiaW5kaW5nQ29udGV4dCxcblx0XHRcdHNob3dCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyxcblx0XHRcdGNvbmN1cnJlbnRFZGl0RmxhZyxcblx0XHRcdGNvbnRyb2wsXG5cdFx0XHRzQWN0aW9uTmFtZSxcblx0XHRcdG9uQmVmb3JlU2hvd01lc3NhZ2UsXG5cdFx0XHR2aWV3VHlwZSxcblx0XHRcdHNob3dCb3VuZFN0YXRlTWVzc2FnZXMsXG5cdFx0XHRwYXJhbWV0ZXJzLFxuXHRcdFx0Z2V0UmVzb3VyY2VNb2RlbCh0aGlzLmdldFZpZXcoKSksXG5cdFx0XHR0aGlzXG5cdFx0KTtcblx0XHR0aGlzLnVwZGF0ZVVJRGVjaXNpb25zKG5ld1VJRGVjaXNpb25zLCBvdmVycmlkZVVJRGVjaXNpb24pO1xuXHRcdHRoaXMucmVtb3ZlSG9sZEtleSh1bkhvbGRLZXkgPz8gY29udHJvbD8uZ2V0SWQoKSk7XG5cdFx0Y29uc3QgdWlFbGVtZW50SXNBdmFpbGFibGUgPSB0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKT8uZ2V0UHJvcGVydHkoXCIvbWVzc2FnZVVJRWxlbWVudElzQXZhaWxhYmxlXCIpO1xuXHRcdCh0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWwpPy5zZXRQcm9wZXJ0eShcblx0XHRcdFwiL21lc3NhZ2VVSUVsZW1lbnRJc0F2YWlsYWJsZVwiLFxuXHRcdFx0dWlFbGVtZW50SXNBdmFpbGFibGUudGhlbihcblx0XHRcdFx0YXN5bmMgZnVuY3Rpb24gKHRoaXM6IE1lc3NhZ2VIYW5kbGVyKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2hvd01lc3NhZ2VzV2l0aENvbmR0aW9ucyhmb3JjZVNob3dVSUVsZW1lbnQsIHN1Y2Nlc3MsIGZhaWx1cmUpO1xuXHRcdFx0XHR9LmJpbmQodGhpcylcblx0XHRcdClcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNob3cgTWVzc2FnZXMgaW4gdGhlIFVJIGJhc2VkIG9uIGNvbmRpdGlvbnMuXG5cdCAqIEBwYXJhbSBmb3JjZVNob3dVSUVsZW1lbnRcblx0ICogQHBhcmFtIHN1Y2Nlc3Ncblx0ICogQHBhcmFtIGZhaWx1cmVcblx0ICovXG5cdGFzeW5jIHNob3dNZXNzYWdlc1dpdGhDb25kdGlvbnMoXG5cdFx0Zm9yY2VTaG93VUlFbGVtZW50ID0gZmFsc2UsXG5cdFx0c3VjY2Vzcz86IChyZXQ/OiB1bmtub3duKSA9PiB2b2lkLFxuXHRcdGZhaWx1cmU/OiAoZXJyPzogdW5rbm93bikgPT4gdm9pZFxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzaG93VUlFbGVtZW50ID0gZm9yY2VTaG93VUlFbGVtZW50IHx8IHRoaXMuY2hlY2tUb1Nob3dVSUVsZW1lbnQoKTtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gdGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsO1xuXHRcdGlmIChzaG93VUlFbGVtZW50ICYmIGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvbWVzc2FnZVVJRGVjaXNpb25cIikpIHtcblx0XHRcdC8vIFNob3cgVUkgZWxlbWVudCBmb3IgdGhlIHByZXNlbnQgZGVjaXNpb24gYW5kIGNsZWFyIHRoZSBkZWNpc2lvbi5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IHJldCA9IGF3YWl0IG1lc3NhZ2VIYW5kbGluZy5zaG93TWVzc2FnZXNJblVJKGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvbWVzc2FnZVVJRGVjaXNpb25cIikpO1xuXHRcdFx0XHRzdWNjZXNzPy4ocmV0KTtcblx0XHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3IoYEZFIDogVjQgOiBNZXNzYWdlSGFuZGxlciA6IEVycm9yIG9uIHRyeWluZyB0byBzaG93IFVJIGVsZW1lbnQ6ICR7ZXJyfWApO1xuXHRcdFx0XHRmYWlsdXJlPy4oZXJyKTtcblx0XHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9tZXNzYWdlVUlFbGVtZW50SXNBdmFpbGFibGVcIiwgUHJvbWlzZS5yZXNvbHZlKCkpO1xuXHRcdFx0fVxuXHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9tZXNzYWdlVUlEZWNpc2lvblwiLCB1bmRlZmluZWQpO1xuXHRcdFx0dGhpcy5jbGVhclN0cmljdFdhcm5pbmdNZXNzYWdlcygpO1xuXHRcdFx0dGhpcy5ob2xkTXNnc1RvU2hvdyA9IGZhbHNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRMb2cuaW5mbyhcIkZFIDogVjQgOiBNZXNzYWdlSGFuZGxlciA6IEhvbGRpbmcgbWVzc2FnZXMgdW50aWwgYSByZWdpc3RlcmVkIHByb2Nlc3MgXCIpO1xuXHRcdFx0c3VjY2Vzcz8uKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFlvdSBjYW4gcmVtb3ZlIHRoZSBleGlzdGluZyB0cmFuc2l0aW9uIG1lc3NhZ2UgZnJvbSB0aGUgbWVzc2FnZSBtb2RlbCB3aXRoIHRoaXMgbWV0aG9kLlxuXHQgKiBXaXRoIGV2ZXJ5IHVzZXIgaW50ZXJhY3Rpb24gdGhhdCBjYXVzZXMgc2VydmVyIGNvbW11bmljYXRpb24gKGxpa2UgY2xpY2tpbmcgb24gYW4gYWN0aW9uLCBjaGFuZ2luZyBkYXRhKSxcblx0ICogdGhpcyBtZXRob2QgcmVtb3ZlcyB0aGUgZXhpc3RpbmcgdHJhbnNpdGlvbiBtZXNzYWdlcyBmcm9tIHRoZSBtZXNzYWdlIG1vZGVsLlxuXHQgKiBAcGFyYW0gW2tlZXBCb3VuZE1lc3NhZ2VdIENoZWNrcyBpZiB0aGUgYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBhcmUgbm90IHRvIGJlIHJlbW92ZWRcblx0ICogQHBhcmFtIGtlZXBVbmJvdW5kTWVzc2FnZVxuXHQgKiBAcGFyYW0gc1BhdGhUb0JlUmVtb3ZlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdHJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyhrZWVwQm91bmRNZXNzYWdlPzogYm9vbGVhbiwga2VlcFVuYm91bmRNZXNzYWdlPzogYm9vbGVhbiwgc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZyk6IHZvaWQge1xuXHRcdGlmICgha2VlcEJvdW5kTWVzc2FnZSkge1xuXHRcdFx0bWVzc2FnZUhhbmRsaW5nLnJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKHNQYXRoVG9CZVJlbW92ZWQpO1xuXHRcdH1cblx0XHRpZiAoIWtlZXBVbmJvdW5kTWVzc2FnZSkge1xuXHRcdFx0bWVzc2FnZUhhbmRsaW5nLnJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRoYXQgcmV0dXJucyBhbGwgdGhlIHBhcmFtZXRlcnMgbmVlZGVkIHRvIGhhbmRsZSB0aGUgbmF2aWdhdGlvbiB0byB0aGUgZXJyb3IgcGFnZS5cblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzXG5cdCAqIEByZXR1cm5zIFRoZSBwYXJhbWV0ZXJzIG5lY2Vzc2FyeSBmb3IgdGhlIG5hdmlnYXRpb24gdG8gdGhlIGVycm9yIHBhZ2Vcblx0ICovXG5cdF9jaGVja05hdmlnYXRpb25Ub0Vycm9yUGFnZShtUGFyYW1ldGVycz86IE5hdmlnYXRpb25Ub0Vycm9yUGFnZVBhcmFtZXRlcik6IE5hdmlnYXRpb25Ub0Vycm9yUGFnZVJlc3VsdCB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgYVVuYm91bmRNZXNzYWdlcyA9IG1lc3NhZ2VIYW5kbGluZy5nZXRNZXNzYWdlcygpO1xuXHRcdGNvbnN0IGJTaG93Qm91bmRUcmFuc2l0aW9uTWVzc2FnZXMgPSB0aGlzLmdldFNob3dCb3VuZE1lc3NhZ2VzSW5NZXNzYWdlRGlhbG9nKCk7XG5cdFx0Y29uc3QgYUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzID0gYlNob3dCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyA/IG1lc3NhZ2VIYW5kbGluZy5nZXRNZXNzYWdlcyh0cnVlLCB0cnVlKSA6IFtdO1xuXHRcdGNvbnN0IGFDdXN0b21NZXNzYWdlcyA9IG1QYXJhbWV0ZXJzICYmIG1QYXJhbWV0ZXJzLmN1c3RvbU1lc3NhZ2VzID8gbVBhcmFtZXRlcnMuY3VzdG9tTWVzc2FnZXMgOiBbXTtcblx0XHRjb25zdCBiSXNTdGlja3lFZGl0TW9kZSA9IENvbW1vblV0aWxzLmlzU3RpY2t5RWRpdE1vZGUodGhpcy5iYXNlLmdldFZpZXcoKSk7XG5cdFx0bGV0IG1NZXNzYWdlUGFnZVBhcmFtZXRlcnM6IE5hdmlnYXRpb25Ub0Vycm9yUGFnZVJlc3VsdCB8IHVuZGVmaW5lZDtcblxuXHRcdC8vIFRPRE86IFN0aWNrIG1vZGUgY2hlY2sgaXMgb2theSBhcyBsb25nIGFzIHRoZSBjb250cm9sbGVyIGV4dGVuc2lvbiBpcyB1c2VkIHdpdGggc2FwLmZlLmNvcmUgYW5kIHNhcC5mZS5jb3JlLkFwcENvbXBvbmVudC5cblx0XHQvLyBJdCBtaWdodCBiZSBiZXR0ZXIgdG8gcHJvdmlkZSBhbiBleHRlbnNpb24gdG8gdGhlIGNvbnN1bWVyIG9mIHRoZSBjb250cm9sbGVyIGV4dGVuc2lvbiB0byBwcm92aWRlIHRoaXMgdmFsdWUuXG5cblx0XHQvLyBUaGUgbWVzc2FnZSBwYWdlIGNhbiBvbmx5IHNob3cgMSBtZXNzYWdlIHRvZGF5LCBzbyB3ZSBuYXZpZ2F0ZSB0byBpdCB3aGVuIDpcblx0XHQvLyAxLiBUaGVyZSBhcmUgbm8gYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlcyB0byBzaG93LFxuXHRcdC8vIDIuIFRoZXJlIGFyZSBubyBjdXN0b20gbWVzc2FnZXMgdG8gc2hvdywgJlxuXHRcdC8vIDMuIFRoZXJlIGlzIGV4YWN0bHkgMSB1bmJvdW5kIG1lc3NhZ2UgaW4gdGhlIG1lc3NhZ2UgbW9kZWwgd2l0aCBzdGF0dXNDb2RlPTUwMyBhbmQgcmV0cnktQWZ0ZXIgYXZhaWxhYmxlXG5cdFx0Ly8gNC4gcmV0cnlBZnRlciBpcyBncmVhdGVyIHRoYW4gMTIwIHNlY29uZHNcblx0XHQvL1xuXHRcdC8vIEluIEFkZGl0aW9uLCBuYXZpZ2F0aW5nIGF3YXkgZnJvbSBhIHN0aWNreSBzZXNzaW9uIHdpbGwgZGVzdHJveSB0aGUgc2Vzc2lvbiBzbyB3ZSBkbyBub3QgbmF2aWdhdGUgdG8gbWVzc2FnZSBwYWdlIGZvciBub3cuXG5cdFx0Ly8gVE9ETzogY2hlY2sgaWYgbmF2aWdhdGlvbiBzaG91bGQgYmUgZG9uZSBpbiBzdGlja3kgZWRpdCBtb2RlLlxuXHRcdGlmIChtUGFyYW1ldGVycz8uaXNEYXRhUmVjZWl2ZWRFcnJvciA9PT0gdHJ1ZSkge1xuXHRcdFx0bU1lc3NhZ2VQYWdlUGFyYW1ldGVycyA9IHtcblx0XHRcdFx0dGl0bGU6IG1QYXJhbWV0ZXJzLnRpdGxlLFxuXHRcdFx0XHRkZXNjcmlwdGlvbjogbVBhcmFtZXRlcnMuZGVzY3JpcHRpb24sXG5cdFx0XHRcdG5hdmlnYXRlQmFja1RvT3JpZ2luOiB0cnVlLFxuXHRcdFx0XHRlcnJvclR5cGU6IFwiUGFnZU5vdEZvdW5kXCJcblx0XHRcdH07XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdCFiSXNTdGlja3lFZGl0TW9kZSAmJlxuXHRcdFx0IWFCb3VuZFRyYW5zaXRpb25NZXNzYWdlcy5sZW5ndGggJiZcblx0XHRcdCFhQ3VzdG9tTWVzc2FnZXMubGVuZ3RoICYmXG5cdFx0XHQoYVVuYm91bmRNZXNzYWdlcy5sZW5ndGggPT09IDEgfHwgbVBhcmFtZXRlcnM/LmlzSW5pdGlhbExvYWQ1MDNFcnJvciA9PT0gdHJ1ZSlcblx0XHQpIHtcblx0XHRcdGNvbnN0IG9NZXNzYWdlID0gYVVuYm91bmRNZXNzYWdlc1swXTtcblx0XHRcdGNvbnN0IG9UZWNobmljYWxEZXRhaWxzID0gb01lc3NhZ2UuZ2V0VGVjaG5pY2FsRGV0YWlscygpIGFzIE1lc3NhZ2VUZWNobmljYWxEZXRhaWxzIHwgdW5kZWZpbmVkO1xuXHRcdFx0aWYgKG9UZWNobmljYWxEZXRhaWxzPy5odHRwU3RhdHVzID09PSA1MDMpIHtcblx0XHRcdFx0bU1lc3NhZ2VQYWdlUGFyYW1ldGVycyA9IHRoaXMuX2dldEhUVFA1MDNNZXNzYWdlUGFyYW1ldGVycyhvTWVzc2FnZSwgb1RlY2huaWNhbERldGFpbHMpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gbU1lc3NhZ2VQYWdlUGFyYW1ldGVycztcblx0fVxuXG5cdF9nZXRIVFRQNTAzTWVzc2FnZVBhcmFtZXRlcnMobWVzc2FnZTogTWVzc2FnZSwgdGVjaG5pY2FsRGV0YWlsczogTWVzc2FnZVRlY2huaWNhbERldGFpbHMpOiBOYXZpZ2F0aW9uVG9FcnJvclBhZ2VSZXN1bHQgfCB1bmRlZmluZWQge1xuXHRcdGxldCBtZXNzYWdlUGFnZVBhcmFtZXRlcnM6IE5hdmlnYXRpb25Ub0Vycm9yUGFnZVJlc3VsdCB8IHVuZGVmaW5lZDtcblxuXHRcdGNvbnN0IHNlY29uZHNCZWZvcmVSZXRyeSA9XG5cdFx0XHR0ZWNobmljYWxEZXRhaWxzLnJldHJ5QWZ0ZXIgIT09IHVuZGVmaW5lZCA/IHRoaXMuX2dldFNlY29uZHNCZWZvcmVSZXRyeUFmdGVyKHRlY2huaWNhbERldGFpbHMucmV0cnlBZnRlcikgOiB1bmRlZmluZWQ7XG5cblx0XHRpZiAoc2Vjb25kc0JlZm9yZVJldHJ5ID09PSB1bmRlZmluZWQgfHwgc2Vjb25kc0JlZm9yZVJldHJ5ID4gMTIwKSB7XG5cdFx0XHRjb25zdCByZXRyeUFmdGVyTWVzc2FnZSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRSZXRyeUFmdGVyTWVzc2FnZShtZXNzYWdlKTtcblx0XHRcdG1lc3NhZ2VQYWdlUGFyYW1ldGVycyA9IHtcblx0XHRcdFx0ZGVzY3JpcHRpb246IHJldHJ5QWZ0ZXJNZXNzYWdlID8gYCR7cmV0cnlBZnRlck1lc3NhZ2V9ICR7bWVzc2FnZS5nZXRNZXNzYWdlKCl9YCA6IG1lc3NhZ2UuZ2V0TWVzc2FnZSgpLFxuXHRcdFx0XHRuYXZpZ2F0ZUJhY2tUb09yaWdpbjogdHJ1ZSxcblx0XHRcdFx0ZXJyb3JUeXBlOiBcIlVuYWJsZVRvTG9hZFwiXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHJldHVybiBtZXNzYWdlUGFnZVBhcmFtZXRlcnM7XG5cdH1cblxuXHRfZ2V0U2Vjb25kc0JlZm9yZVJldHJ5QWZ0ZXIoZFJldHJ5QWZ0ZXI6IERhdGUpOiBudW1iZXIge1xuXHRcdGNvbnN0IGRDdXJyZW50RGF0ZVRpbWUgPSBuZXcgRGF0ZSgpLFxuXHRcdFx0aUN1cnJlbnREYXRlVGltZUluTWlsbGlTZWNvbmRzID0gZEN1cnJlbnREYXRlVGltZS5nZXRUaW1lKCksXG5cdFx0XHRpUmV0cnlBZnRlckRhdGVUaW1lSW5NaWxsaVNlY29uZHMgPSBkUmV0cnlBZnRlci5nZXRUaW1lKCksXG5cdFx0XHRpU2Vjb25kc0JlZm9yZVJldHJ5ID0gKGlSZXRyeUFmdGVyRGF0ZVRpbWVJbk1pbGxpU2Vjb25kcyAtIGlDdXJyZW50RGF0ZVRpbWVJbk1pbGxpU2Vjb25kcykgLyAxMDAwO1xuXHRcdHJldHVybiBpU2Vjb25kc0JlZm9yZVJldHJ5O1xuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZSB0aGUgZXhpc3RpbmcgVUkgZGVjaXNpb25zIHdpdGggdGhlIG5ldyBvbmVzLlxuXHQgKiBAcGFyYW0gbmV3VUlEZWNpc2lvbnMgSW4gY29tbWluZyBVSSBkZWNpc2lvbnMuXG5cdCAqIEBwYXJhbSBvdmVycmlkZVVJRGVjaXNpb24gT3ZlcnJpZGUgdGhlIGV4aXN0aW5nIFVJIGRlY2lzaW9uIHRvIHNob3cgbWVzc2FnZXMgd2l0aCB0aGUgbmV3IG9uZS5cblx0ICpcblx0ICogJ292ZXJyaWRlVUlEZWNpc2lvbicsIFRoaXMgd291bGQgYmUgbmVlZGVkIHdoZW4gdGhlcmUgaXMgYSBjaGFuZ2UgaW4gcGFnZSBjb250ZXh0IGFuZCB0aGUgcGFyYW10ZXJzIHRvIGNyZWF0ZSB0aGUgbmV3IFVJIGRlY2lzaW9uIGFyZSBkaWZmZXJlbnQuXG5cdCAqL1xuXHR1cGRhdGVVSURlY2lzaW9ucyhuZXdVSURlY2lzaW9uczogTWVzc2FnZVVJRGVjaXNpb25zLCBvdmVycmlkZVVJRGVjaXNpb24gPSBmYWxzZSk6IHZvaWQge1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0Y29uc3Qgb2xkVUlEZWNpc2lvbnMgPSBpbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KFwiL21lc3NhZ2VVSURlY2lzaW9uXCIpIGFzIE1lc3NhZ2VVSURlY2lzaW9ucztcblx0XHRsZXQgYWxsTWVzc2FnZXNUb1Nob3c6IE1lc3NhZ2VbXSA9IFtdO1xuXHRcdGxldCBtZXJnZWRVSURlY2lzaW9uO1xuXHRcdGlmIChvbGRVSURlY2lzaW9ucyAmJiBvdmVycmlkZVVJRGVjaXNpb24gPT09IGZhbHNlKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG9sZFVJRGVjaXNpb25zLm1lc3NhZ2VzVG9TaG93Lmxlbmd0aCA9PT0gMSAmJlxuXHRcdFx0XHRuZXdVSURlY2lzaW9ucy5tZXNzYWdlc1RvU2hvdy5sZW5ndGggPT09IDEgJiZcblx0XHRcdFx0b2xkVUlEZWNpc2lvbnMubWVzc2FnZXNUb1Nob3dbMF0uZ2V0Q29kZSgpID09PSBcIkNfQ09NTU9OX1NVQ0NFU1NfTUVTU0FHRVwiICYmXG5cdFx0XHRcdG5ld1VJRGVjaXNpb25zLm1lc3NhZ2VzVG9TaG93WzBdLmdldENvZGUoKSA9PT0gXCJDX0NPTU1PTl9TVUNDRVNTX01FU1NBR0VcIlxuXHRcdFx0KSB7XG5cdFx0XHRcdC8vIENoZWNrIGlmIGJvdGggYXJlIGdlbmVyaWMgc3VjY2VzcyBtZXNzYWdlcywgdGhlbiB3ZSBzaG93IG9ubHkgb25lIG1lc3NhZ2UuXG5cdFx0XHRcdGFsbE1lc3NhZ2VzVG9TaG93ID0gb2xkVUlEZWNpc2lvbnMubWVzc2FnZXNUb1Nob3c7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhbGxNZXNzYWdlc1RvU2hvdyA9IEFycmF5LmZyb20obmV3IFNldChbLi4ub2xkVUlEZWNpc2lvbnMubWVzc2FnZXNUb1Nob3csIC4uLm5ld1VJRGVjaXNpb25zLm1lc3NhZ2VzVG9TaG93XSkpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgZWxlbWVudHMgPSBbb2xkVUlEZWNpc2lvbnMudWlFbGVtZW50VG9Vc2UsIG5ld1VJRGVjaXNpb25zLnVpRWxlbWVudFRvVXNlXTtcblx0XHRcdC8vIERlZmF1bHQgd2Ugc2hvdyBkaWFsb2dcblx0XHRcdGxldCB1aUVsZW1lbnRUb1VzZTogU3VwcG9ydGVkVUlFbGVtZW50ID0gYWxsTWVzc2FnZXNUb1Nob3cubGVuZ3RoID4gMCA/IFwiRGlhbG9nXCIgOiBcIk5vbmVcIjtcblxuXHRcdFx0aWYgKGFsbE1lc3NhZ2VzVG9TaG93Lmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHQvLyBTaW5nbGUgbWVzc2FnZSwgd2UgY2hlY2sgZm9yIHNwZWNpZmljIFVJIEVsZW1lbnQgdG8gdXNlLlxuXHRcdFx0XHRpZiAoZWxlbWVudHMuaW5jbHVkZXMoXCJUb2FzdFwiKSkge1xuXHRcdFx0XHRcdHVpRWxlbWVudFRvVXNlID0gXCJUb2FzdFwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGVsZW1lbnRzLmluY2x1ZGVzKFwiQm94XCIpKSB7XG5cdFx0XHRcdFx0dWlFbGVtZW50VG9Vc2UgPSBcIkJveFwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdG1lcmdlZFVJRGVjaXNpb24gPSB7XG5cdFx0XHRcdG1lc3NhZ2VzVG9TaG93OiBhbGxNZXNzYWdlc1RvU2hvdyxcblx0XHRcdFx0dWlFbGVtZW50VG9Vc2UsXG5cdFx0XHRcdGNvbnRleHROZWVkc0V0YWdSZWZyZXNoOiBvbGRVSURlY2lzaW9ucy5jb250ZXh0TmVlZHNFdGFnUmVmcmVzaCB8fCBuZXdVSURlY2lzaW9ucy5jb250ZXh0TmVlZHNFdGFnUmVmcmVzaCxcblx0XHRcdFx0Y29udGFpbnNCb3VuZFRyYW5zaXRpb246IG9sZFVJRGVjaXNpb25zLmNvbnRhaW5zQm91bmRUcmFuc2l0aW9uIHx8IG5ld1VJRGVjaXNpb25zLmNvbnRhaW5zQm91bmRUcmFuc2l0aW9uXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtZXJnZWRVSURlY2lzaW9uID0gbmV3VUlEZWNpc2lvbnM7XG5cdFx0fVxuXHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvbWVzc2FnZVVJRGVjaXNpb25cIiwgbWVyZ2VkVUlEZWNpc2lvbik7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlIGhlbGQga2V5LlxuXHQgKiBAcGFyYW0gaW5LZXkgS2V5IHRvIHJlbW92ZS5cblx0ICovXG5cdHJlbW92ZUhvbGRLZXkoaW5LZXk/OiBzdHJpbmcpOiB2b2lkIHtcblx0XHRpZiAoaW5LZXkgJiYgdGhpcy5ob2xkS2V5cy5pbmNsdWRlcyhpbktleSkpIHtcblx0XHRcdHRoaXMuaG9sZEtleXMuc3BsaWNlKHRoaXMuaG9sZEtleXMuaW5kZXhPZihpbktleSksIDEpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVjayBpZiBVSSBFbGVtZW50IHdpdGggbWVzc2FnZXMgc2hvdWxkIGJlIHNob3duLlxuXHQgKiBAcmV0dXJucyBCb29sZWFuXG5cdCAqL1xuXHRjaGVja1RvU2hvd1VJRWxlbWVudCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5ob2xkTXNnc1RvU2hvdyAmJiAodGhpcy5ob2xkS2V5cy5sZW5ndGggPiAwID8gZmFsc2UgOiB0cnVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIb2xkIG1lc3NhZ2VzIGZvciB0aGUgY29udHJvbC5cblx0ICogQHBhcmFtIGNvbnRyb2xcblx0ICovXG5cdGhvbGRNZXNzYWdlc0ZvckNvbnRyb2woY29udHJvbDogQ29udHJvbCk6IHZvaWQge1xuXHRcdGNvbnN0IGlkZW50aWZpZXIgPSBjb250cm9sLmdldElkKCk7XG5cdFx0dGhpcy5yZWdpc3RlclRvSG9sZE1lc3NhZ2VzKGlkZW50aWZpZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbGVhc2UgbWVzc2FnZSBob2xkIGJ5IGEgY29udHJvbC5cblx0ICogQHBhcmFtIGNvbnRyb2xcblx0ICovXG5cdGFzeW5jIHJlbGVhc2VIb2xkQnlDb250cm9sKGNvbnRyb2w/OiBDb250cm9sKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgaWRlbnRpZmllciA9IGNvbnRyb2w/LmdldElkKCk7XG5cdFx0dGhpcy5yZW1vdmVIb2xkS2V5KGlkZW50aWZpZXIpO1xuXHRcdGNvbnN0IHVpRWxlbWVudElzQXZhaWxhYmxlID0gdGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLmdldE1vZGVsKFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwiL21lc3NhZ2VVSUVsZW1lbnRJc0F2YWlsYWJsZVwiKTtcblx0XHQodGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsKT8uc2V0UHJvcGVydHkoXG5cdFx0XHRcIi9tZXNzYWdlVUlFbGVtZW50SXNBdmFpbGFibGVcIixcblx0XHRcdHVpRWxlbWVudElzQXZhaWxhYmxlPy50aGVuKFxuXHRcdFx0XHRhc3luYyBmdW5jdGlvbiAodGhpczogTWVzc2FnZUhhbmRsZXIpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5zaG93TWVzc2FnZXNXaXRoQ29uZHRpb25zKCk7XG5cdFx0XHRcdH0uYmluZCh0aGlzKVxuXHRcdFx0KVxuXHRcdCk7XG5cdFx0YXdhaXQgdGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLmdldE1vZGVsKFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwiL21lc3NhZ2VVSUVsZW1lbnRJc0F2YWlsYWJsZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTaG93cyBhIG1lc3NhZ2UgcGFnZSBvciBhIG1lc3NhZ2UgZGlhbG9nIGJhc2VkIG9uIHRoZSBtZXNzYWdlcyBpbiB0aGUgbWVzc2FnZSBkaWFsb2cuXG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVyc11cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgb25jZSB0aGUgdXNlciBjbG9zZXMgdGhlIG1lc3NhZ2UgZGlhbG9nIG9yIHdoZW4gbmF2aWdhdGlvbiB0byB0aGUgbWVzc2FnZSBwYWdlIGlzIGNvbXBsZXRlLiBJZiB0aGVyZSBhcmUgbm8gbWVzc2FnZXNcblx0ICogdG8gYmUgc2hvd24sIHRoZSBwcm9taXNlIGlzIHJlc29sdmVkIGltbWVkaWF0ZWx5XG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXN5bmMgc2hvd01lc3NhZ2VzKHBhcmFtZXRlcnM/OiBTaG93TWVzc2FnZXNQYXJhbWV0ZXJzKTogUHJvbWlzZTx2b2lkIHwgYm9vbGVhbiB8IERpYWxvZz4ge1xuXHRcdGNvbnN0IG1lc3NhZ2VQYWdlUGFyYW1ldGVycyA9IHRoaXMuX2NoZWNrTmF2aWdhdGlvblRvRXJyb3JQYWdlKHBhcmFtZXRlcnMpO1xuXG5cdFx0aWYgKG1lc3NhZ2VQYWdlUGFyYW1ldGVycykge1xuXHRcdFx0Ly8gbmF2aWdhdGUgdG8gbWVzc2FnZSBwYWdlLlxuXHRcdFx0Ly8gaGFuZGxlciBiZWZvcmUgcGFnZSBuYXZpZ2F0aW9uIGlzIHRyaWdnZXJlZCwgZm9yIGV4YW1wbGUgdG8gY2xvc2UgdGhlIGFjdGlvbiBwYXJhbWV0ZXIgZGlhbG9nXG5cdFx0XHRpZiAocGFyYW1ldGVycz8ubWVzc2FnZVBhZ2VOYXZpZ2F0aW9uQ2FsbGJhY2spIHtcblx0XHRcdFx0cGFyYW1ldGVycy5tZXNzYWdlUGFnZU5hdmlnYXRpb25DYWxsYmFjaygpO1xuXHRcdFx0fVxuXG5cdFx0XHRtZXNzYWdlUGFnZVBhcmFtZXRlcnMuaGFuZGxlU2hlbGxCYWNrID0gIXBhcmFtZXRlcnM/LnNoZWxsQmFjaztcblx0XHRcdHRoaXMucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0XHQvLyB3ZSBoYXZlIHRvIHNldCBhIHRpbWVvdXQgdG8gYmUgYWJsZSB0byBhY2Nlc3MgdGhlIG1vc3QgcmVjZW50IG1lc3NhZ2VzXG5cdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdC8vIGNsZWFyIGFsbCBob2xkIGtleXMgYXMgd2UgbmF2aWdhdGUgdG8gbWVzc2FnZSBwYWdlLlxuXHRcdFx0XHRcdHRoaXMucmVzZXRIb2xkS2V5cygpO1xuXG5cdFx0XHRcdFx0Ly8gVE9ETzogZ3JlYXQgQVBJIC0gd2lsbCBiZSBjaGFuZ2VkIGxhdGVyXG5cdFx0XHRcdFx0dGhpcy5iYXNlLl9yb3V0aW5nXG5cdFx0XHRcdFx0XHQubmF2aWdhdGVUb01lc3NhZ2VQYWdlKFxuXHRcdFx0XHRcdFx0XHRwYXJhbWV0ZXJzPy5pc0RhdGFSZWNlaXZlZEVycm9yID09PSB0cnVlXG5cdFx0XHRcdFx0XHRcdFx0PyBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0RBVEFfUkVDRUlWRURfRVJST1JcIilcblx0XHRcdFx0XHRcdFx0XHQ6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19USVRMRVwiKSxcblx0XHRcdFx0XHRcdFx0bWVzc2FnZVBhZ2VQYXJhbWV0ZXJzXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQudGhlbihyZXNvbHZlKVxuXHRcdFx0XHRcdFx0LmNhdGNoKHJlamVjdCk7XG5cdFx0XHRcdH0sIDApO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIG5hdmlnYXRlIHRvIG1lc3NhZ2UgZGlhbG9nXG5cdFx0XHRyZXR1cm4gdGhpcy5zaG93TWVzc2FnZURpYWxvZyhwYXJhbWV0ZXJzKTtcblx0XHR9XG5cdH1cbn1cbmV4cG9ydCBkZWZhdWx0IE1lc3NhZ2VIYW5kbGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7RUEyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTkEsSUFRTUEsY0FBYyxJQUFBQyxJQUFBLEdBRG5CQyxjQUFjLENBQUMsaURBQWlELENBQUMsRUFBQUMsS0FBQSxHQWNoRUMsY0FBYyxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQXdEaEJDLGdCQUFnQixDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUNsQkMsVUFBVSxDQUFDQyxpQkFBaUIsQ0FBQ0MsT0FBTyxDQUFDLEVBQUFDLEtBQUEsR0FlckNMLGdCQUFnQixDQUFDLENBQUMsRUFBQU0sS0FBQSxHQUNsQkosVUFBVSxDQUFDQyxpQkFBaUIsQ0FBQ0MsT0FBTyxDQUFDLEVBQUFHLEtBQUEsR0F5QnJDQyxlQUFlLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBQ2pCUCxVQUFVLENBQUMsWUFBWSxDQUFDLEVBQUFRLEtBQUEsR0E4Q3hCRixlQUFlLENBQUMsQ0FBQyxFQUFBRyxNQUFBLEdBQ2pCQyxjQUFjLENBQUMsQ0FBQyxFQUFBQyxNQUFBLEdBd0poQkwsZUFBZSxDQUFDLENBQUMsRUFBQU0sTUFBQSxHQXVMakJOLGVBQWUsQ0FBQyxDQUFDLEVBQUFPLE1BQUEsR0FDakJILGNBQWMsQ0FBQyxDQUFDLEVBQUFqQixJQUFBLENBQUFxQixNQUFBLElBQUFDLE9BQUEsMEJBQUFDLG9CQUFBO0lBdGVqQixTQUFBeEIsZUFBQSxFQUFjO01BQUEsSUFBQXlCLEtBQUE7TUFDYkEsS0FBQSxHQUFBRCxvQkFBQSxDQUFBRSxJQUFBLEtBQU0sQ0FBQztNQUFDRCxLQUFBLENBVERFLHFCQUFxQixHQUFjLEVBQUU7TUFBQUYsS0FBQSxDQUluQ0csUUFBUSxHQUFhLEVB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
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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
@@ -351,12 +351,12 @@ class MessageHandler extends ControllerExtension {
351
351
  this
352
352
  );
353
353
  this.updateUIDecisions(newUIDecisions, overrideUIDecision);
354
- this.removeHoldKey(unHoldKey ?? control?.getId());
355
354
  const uiElementIsAvailable = this.base.getAppComponent().getModel("internal")?.getProperty("/messageUIElementIsAvailable");
356
355
  (this.base.getAppComponent().getModel("internal") as JSONModel)?.setProperty(
357
356
  "/messageUIElementIsAvailable",
358
357
  uiElementIsAvailable.then(
359
358
  async function (this: MessageHandler): Promise<void> {
359
+ this.removeHoldKey(unHoldKey ?? control?.getId());
360
360
  return this.showMessagesWithCondtions(forceShowUIElement, success, failure);
361
361
  }.bind(this)
362
362
  )