@sapui5/sap.fe.macros 1.142.0 → 1.142.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Field.js +5 -5
  4. package/src/sap/fe/macros/Field.ts +5 -3
  5. package/src/sap/fe/macros/FooterContent.js +3 -2
  6. package/src/sap/fe/macros/FooterContent.tsx +2 -10
  7. package/src/sap/fe/macros/MessageButton.js +3 -3
  8. package/src/sap/fe/macros/MessageButton.tsx +3 -2
  9. package/src/sap/fe/macros/Page.js +8 -4
  10. package/src/sap/fe/macros/Page.tsx +13 -4
  11. package/src/sap/fe/macros/RichTextEditor.js +12 -14
  12. package/src/sap/fe/macros/RichTextEditor.tsx +10 -13
  13. package/src/sap/fe/macros/ai/EasyFillDialog.js +2 -1
  14. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +1 -0
  15. package/src/sap/fe/macros/ai/SummarizationButton.js +6 -4
  16. package/src/sap/fe/macros/ai/SummarizationButton.tsx +5 -3
  17. package/src/sap/fe/macros/chart/Action.js +19 -7
  18. package/src/sap/fe/macros/chart/Action.ts +8 -0
  19. package/src/sap/fe/macros/chart/ChartDelegate.js +13 -2
  20. package/src/sap/fe/macros/chart/ChartDelegate.ts +20 -1
  21. package/src/sap/fe/macros/chart/MdcChartTemplate.js +8 -6
  22. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +13 -22
  23. package/src/sap/fe/macros/controls/FilterBar.js +1 -1
  24. package/src/sap/fe/macros/controls/FilterBar.ts +8 -1
  25. package/src/sap/fe/macros/controls/TextLink.js +15 -1
  26. package/src/sap/fe/macros/controls/TextLink.tsx +19 -0
  27. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +23 -18
  28. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +27 -25
  29. package/src/sap/fe/macros/field/FieldRuntimeHelper.js +4 -2
  30. package/src/sap/fe/macros/field/FieldRuntimeHelper.ts +7 -7
  31. package/src/sap/fe/macros/field/FieldTemplating.js +8 -3
  32. package/src/sap/fe/macros/field/FieldTemplating.ts +7 -2
  33. package/src/sap/fe/macros/filterBar/FilterBar.block.js +10 -1
  34. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +10 -0
  35. package/src/sap/fe/macros/form/FormContainer.block.js +9 -8
  36. package/src/sap/fe/macros/form/FormContainer.block.ts +10 -7
  37. package/src/sap/fe/macros/internal/field/EditStyle.js +11 -6
  38. package/src/sap/fe/macros/internal/field/EditStyle.tsx +7 -3
  39. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.js +36 -7
  40. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.ts +35 -6
  41. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.js +54 -1
  42. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.ts +59 -0
  43. package/src/sap/fe/macros/library.js +5 -6
  44. package/src/sap/fe/macros/{library.ts → library.tsx} +1 -1
  45. package/src/sap/fe/macros/messagebundle.properties +6 -0
  46. package/src/sap/fe/macros/messages/MessageButton.js +21 -12
  47. package/src/sap/fe/macros/messages/MessageButton.ts +21 -11
  48. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.js +4 -3
  49. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.ts +5 -2
  50. package/src/sap/fe/macros/quickView/QuickView.js +5 -4
  51. package/src/sap/fe/macros/quickView/QuickView.tsx +10 -3
  52. package/src/sap/fe/macros/table/ActionsTemplating.js +6 -5
  53. package/src/sap/fe/macros/table/ActionsTemplating.tsx +4 -4
  54. package/src/sap/fe/macros/table/MdcTableTemplate.js +27 -10
  55. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +31 -4
  56. package/src/sap/fe/macros/table/Table.block.js +3 -1
  57. package/src/sap/fe/macros/table/Table.block.tsx +7 -4
  58. package/src/sap/fe/macros/table/TableAPI.js +49 -28
  59. package/src/sap/fe/macros/table/TableAPI.ts +58 -32
  60. package/src/sap/fe/macros/table/TableEventHandlerProvider.js +6 -4
  61. package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +6 -3
  62. package/src/sap/fe/macros/table/delegates/TableDelegate.js +3 -3
  63. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +3 -4
  64. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +41 -15
  65. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +41 -22
  66. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +6 -6
  67. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +5 -5
  68. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +5 -3
  69. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +7 -4
@@ -82,7 +82,6 @@ import FileUploader from "sap/ui/unified/FileUploader";
82
82
  import FileUploaderHttpRequestMethod from "sap/ui/unified/FileUploaderHttpRequestMethod";
83
83
  import { displayMessageForFailedUpload, showFileSizeExceedDialog, showTypeMismatchDialog } from "../internal/helpers/Upload";
84
84
 
85
- import type { DataModelObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
86
85
  import { getValueBinding } from "sap/fe/macros/field/FieldTemplating";
87
86
  type ParameterDefaultValue = { paramName: string; value: unknown; latePropertyError?: boolean; noPossibleValue?: boolean };
88
87
 
@@ -239,7 +238,7 @@ export default class ActionParameterDialog {
239
238
  width="100%"
240
239
  multipleLines={parameter.annotations.UI?.MultiLineText?.valueOf() === true}
241
240
  required={compileExpression(isActionParameterRequiredExpression(parameter, this.action, convertTypes(this.metaModel)))}
242
- valueHelp={hasValueHelp(parameter) ? generate([this.actionName, parameter.name]) : undefined}
241
+ valueHelp={hasValueHelp(parameter) ? generate([this.actionName, parameter.name, "FieldValueHelp"]) : undefined}
243
242
  change={async (e): Promise<void> => this.handleFieldChange(e, parameter)}
244
243
  visible={compileExpression(not(equal(getExpressionFromAnnotation(parameter.annotations?.UI?.Hidden), true)))}
245
244
  ariaLabelledBy={[generate(["APD_", parameter.name, "Label"])]}
@@ -321,7 +320,7 @@ export default class ActionParameterDialog {
321
320
  let bindingValue;
322
321
  try {
323
322
  display = await FieldHelper.getAPDialogDisplayFormat(parameterContext.getObject(), { context: parameterContext });
324
- bindingValue = await this.getAPDialogBindingValue(parameter, parameterContext, { context: parameterContext });
323
+ bindingValue = await this.getAPDialogBindingValue(parameter, parameterContext);
325
324
  if (hasValueHelp(parameter)) {
326
325
  additionalValue = await this.getAdditionalValue({ context: parameterContext });
327
326
  }
@@ -342,7 +341,7 @@ export default class ActionParameterDialog {
342
341
  multipleLines={isMultiLineText(parameter)}
343
342
  required={compileExpression(isActionParameterRequiredExpression(parameter, this.action, convertTypes(this.metaModel)))}
344
343
  change={async (e): Promise<void> => this.handleFieldChange(e, parameter)}
345
- valueHelp={hasValueHelp(parameter) ? generate([this.actionName, parameter.name]) : undefined}
344
+ valueHelp={hasValueHelp(parameter) ? generate([this.actionName, parameter.name, "FieldValueHelp"]) : undefined}
346
345
  dependents={this.createParameterDialogValueHelp(parameter, parameterContext)}
347
346
  visible={compileExpression(
348
347
  ifElse(
@@ -369,7 +368,7 @@ export default class ActionParameterDialog {
369
368
  }
370
369
  return (
371
370
  <ValueHelp
372
- id={generate([this.actionName, parameter.name])}
371
+ id={generate([this.actionName, parameter.name, "FieldValueHelp"])}
373
372
  delegate={{
374
373
  name: "sap/fe/macros/valuehelp/ValueHelpDelegate",
375
374
  payload: {
@@ -786,8 +785,19 @@ export default class ActionParameterDialog {
786
785
  // File Uploader
787
786
  value = actionParameterInfos.value;
788
787
  } else {
789
- value = parameterContext?.getProperty(parameter.name);
788
+ // Regular field (non-collection, non-file)
789
+ //
790
+ // IMPORTANT: We prefer actionParameterInfos.value which represents the actual user input
791
+ // from the dialog field, validated and processed by handleFieldChange() over parameterContext.getProperty()
792
+ // because the parameterContext can contain more than just the action parameter itself.
793
+ // In ticket CS20250010966844 parameterContext.getProperty() returned the wrong value due
794
+ // to a name clash between the parameter and its text annotation target.
795
+ // Edge Case: If the user never interacted with the field (value is undefined),
796
+ // fall back to parameterContext which contains the default value set by
797
+ // setOperationDefaultValues() via setParameter() calls.
798
+ value = actionParameterInfos.value ?? parameterContext?.getProperty(parameter.name);
790
799
  }
800
+
791
801
  return { [parameter.name]: value };
792
802
  })
793
803
  ) as Record<string, PrimitiveType>;
@@ -1255,27 +1265,19 @@ export default class ActionParameterDialog {
1255
1265
  */
1256
1266
  private async getAPDialogBindingValue(
1257
1267
  parameter: ActionParameter,
1258
- parameterContext: Context,
1259
- oInterface: ComputedAnnotationInterface
1268
+ parameterContext: Context
1260
1269
  ): Promise<CompiledBindingToolkitExpression | string> {
1261
- const oModel = oInterface.context.getModel() as ODataMetaModel;
1262
- const sContextPath = oInterface.context.getPath();
1263
- const oActionParameterAnnotations = oModel.getObject(`${sContextPath}@`);
1264
- let propertyObjectPath: DataModelObjectPath<Property>;
1265
-
1266
- if (
1267
- oActionParameterAnnotations["@Org.OData.Measures.V1.ISOCurrency"] ||
1268
- oActionParameterAnnotations["@Org.OData.Measures.V1.Unit"]
1269
- ) {
1270
- const actionMetaPath = this.action.isBound
1271
- ? `${this.metaModel.getMetaPath(this.parameters.contexts[0].getPath())}/${convertTypes(this.metaModel).namespace}.${
1272
- this.action.name
1273
- }`
1274
- : `/${this.action.name}`;
1275
- const metaContext = this.metaModel.createBindingContext(`${actionMetaPath}/${parameter.name}`)!;
1276
- propertyObjectPath = getInvolvedDataModelObjects(metaContext);
1270
+ const actionMetaPath = this.action.isBound
1271
+ ? `${this.metaModel.getMetaPath(this.parameters.contexts[0].getPath())}/${convertTypes(this.metaModel).namespace}.${
1272
+ this.action.name
1273
+ }`
1274
+ : `/${this.action.name}`;
1275
+ const metaContext = this.metaModel.createBindingContext(`${actionMetaPath}/${parameter.name}`)!;
1276
+ try {
1277
+ const propertyObjectPath = getInvolvedDataModelObjects<ActionParameter>(metaContext);
1277
1278
  return getValueBinding(propertyObjectPath, {});
1278
- } else {
1279
+ } catch (error) {
1280
+ // Fallback to old approach until we can reach unbound actions
1279
1281
  return AnnotationHelper.format(parameterContext.getObject(), { context: parameterContext });
1280
1282
  }
1281
1283
  }
@@ -468,8 +468,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
468
468
  const viewData = view.getViewData();
469
469
  const draftRootPath = ModelHelper.getDraftRootPath(bindingContext) ?? bindingContext.getPath();
470
470
  let urlNavigation = await controller._routing.getHashForNavigation(bindingContext, navPath);
471
+ const isStickyMode = ModelHelper.isStickySessionSupported(bindingContext.getModel().getMetaModel()),
472
+ isHiddenDraftEnabled = controller.getAppComponent().getEnvironmentCapabilities().getCapabilities().HiddenDraft?.enabled || false;
471
473
  const navigateFn = () => {
472
- controller.getAppComponent().getRouterProxy().navToHash(urlNavigation, true, false, false, !ModelHelper.isStickySessionSupported(bindingContext.getModel().getMetaModel()));
474
+ controller.getAppComponent().getRouterProxy().navToHash(urlNavigation, true, false, false, isStickyMode || isHiddenDraftEnabled);
473
475
  };
474
476
 
475
477
  // To know if we're navigating on the same OP Entity
@@ -491,4 +493,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
491
493
  };
492
494
  return FieldRuntimeHelper;
493
495
  }, false);
494
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWVsZFJ1bnRpbWVIZWxwZXIiLCJ1cGxvYWRQcm9taXNlcyIsImNyZWF0aW5nSW5hY3RpdmVSb3ciLCJmZXRjaFJlY29tbWVuZGF0aW9ucyIsImZpZWxkIiwiY29udHJvbGxlciIsInZpZXciLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJmaWVsZEJpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJyZWNvbW1lbmRhdGlvbnNDb250ZXh0IiwiZmllbGRCaW5kaW5nIiwiZ2V0QmluZGluZyIsImlzQSIsImZlQ29udHJvbGxlciIsImdldEV4dGVuc2lvbkNvbnRyb2xsZXIiLCJ2YWx1ZUhlbHBJZCIsImdldFZhbHVlSGVscCIsIm1ldGFQYXRoIiwiTW9kZWxIZWxwZXIiLCJnZXRNZXRhUGF0aEZvckNvbnRleHQiLCJwcm9wZXJ0eVBhdGgiLCJkYXRhIiwicmVwbGFjZSIsImZpZWxkUGF0aCIsImdldFBhdGgiLCJzZWxlY3RlZFZhbHVlIiwiZ2V0VmFsdWUiLCJyZWNvbW1lbmRhdGlvbnMiLCJ1cGRhdGVUZWxlbWV0cnlEYXRhQmFzZWRPblVzZXJTZWxlY3Rpb24iLCJpbmNsdWRlcyIsInRhYmxlSWQiLCJzdWJzdHJpbmciLCJpbmRleE9mIiwidGFibGUiLCJieUlkIiwiY29udGV4dElkZW50aWZpZXIiLCJnZXRQYXJlbnQiLCJnZXRJZGVudGlmaWVyQ29sdW1uIiwiZmV0Y2hBbmRBcHBseVJlY29tbWVuZGF0aW9uc09uRmllbGRDaGFuZ2UiLCJjb250ZXh0Iiwib0NvbnRyb2xsZXIiLCJfY29udHJvbGxlciIsImdldEZpZWxkU3RhdGVPbkNoYW5nZSIsIm9FdmVudCIsIm9Tb3VyY2VGaWVsZCIsImdldFNvdXJjZSIsIm1GaWVsZFN0YXRlIiwiX2lzQmluZGluZ1N0YXRlTWVzc2FnZXMiLCJvQmluZGluZyIsImdldERhdGFTdGF0ZSIsImdldEludmFsaWRWYWx1ZSIsInVuZGVmaW5lZCIsImdldENvbnRlbnQiLCJGaWVsZFdyYXBwZXIiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJnZXRFZGl0TW9kZSIsImdldENvbnRlbnRFZGl0IiwiYklzVmFsaWQiLCJnZXRQYXJhbWV0ZXIiLCJnZXRNYXhDb25kaXRpb25zIiwib1ZhbHVlQmluZGluZ0luZm8iLCJnZXRCaW5kaW5nSW5mbyIsImJpbmRpbmciLCJnZXRQcm9wZXJ0eSIsImZpZWxkVmFsdWUiLCJ2YWxpZGl0eSIsInN0YXRlIiwicHJlc3NMaW5rIiwib1NvdXJjZSIsInNhcG1MaW5rIiwiZmluZEVsZW1lbnRzIiwiZWxlbSIsImdldERlcGVuZGVudHMiLCJsZW5ndGgiLCJvRmllbGRJbmZvIiwib3BlbkxpbmsiLCJtZGNMaW5rIiwiaFJlZiIsImdldFRyaWdnZXJIcmVmIiwiX3VzZURlbGVnYXRlSXRlbXMiLCJsaW5rSXRlbXMiLCJyZXRyaWV2ZUxpbmtJdGVtcyIsImdldFBheWxvYWQiLCJoYXNRdWlja1ZpZXdGYWNldHMiLCJwb3BvdmVyIiwiY3JlYXRlUG9wb3ZlcldpdGhOb1RhcmdldHMiLCJhZGREZXBlbmRlbnQiLCJvcGVuQnkiLCJvcGVuIiwiZXJyb3IiLCJMb2ciLCJhcHBDb21wb25lbnQiLCJnZXRBcHBDb21wb25lbnQiLCJzaGVsbFNlcnZpY2UiLCJnZXRTaGVsbFNlcnZpY2VzIiwic2hlbGxIYXNoIiwicGFyc2VTaGVsbEhhc2giLCJuYXZBcmdzIiwidGFyZ2V0Iiwic2VtYW50aWNPYmplY3QiLCJhY3Rpb24iLCJwYXJhbXMiLCJLZWVwQWxpdmVIZWxwZXIiLCJzdG9yZUNvbnRyb2xSZWZyZXNoU3RyYXRlZ3lGb3JIYXNoIiwiaXNTdGlja3lFZGl0TW9kZSIsIm5hdmlnYXRlIiwibmV3SHJlZiIsImhyZWZGb3JFeHRlcm5hbCIsIm9wZW5XaW5kb3ciLCJtZGNMaW5rSWQiLCJnZXRJZCIsImlsbHVzdHJhdGVkTWVzc2FnZVNldHRpbmdzIiwidGl0bGUiLCJnZXRSZXNvdXJjZU1vZGVsIiwiZ2V0VGV4dCIsImRlc2NyaXB0aW9uIiwiZW5hYmxlRm9ybWF0dGVkVGV4dCIsImlsbHVzdHJhdGlvblNpemUiLCJJbGx1c3RyYXRlZE1lc3NhZ2VTaXplIiwiRXh0cmFTbWFsbCIsImlsbHVzdHJhdGlvblR5cGUiLCJJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlIiwiTm9EYXRhIiwiaWxsdXN0cmF0ZWRNZXNzYWdlIiwiSWxsdXN0cmF0ZWRNZXNzYWdlIiwicG9wb3ZlclNldHRpbmdzIiwiaG9yaXpvbnRhbFNjcm9sbGluZyIsInNob3dIZWFkZXIiLCJEZXZpY2UiLCJzeXN0ZW0iLCJwaG9uZSIsInBsYWNlbWVudCIsIm1vYmlsZWxpYnJhcnkiLCJQbGFjZW1lbnRUeXBlIiwiQXV0byIsImNvbnRlbnQiLCJhZnRlckNsb3NlIiwiZXZlbnQiLCJkZXN0cm95IiwiUmVzcG9uc2l2ZVBvcG92ZXIiLCJoYW5kbGVUeXBlTWlzc21hdGNoIiwiZmlsZVVwbG9hZGVyIiwiZ2l2ZW5UeXBlIiwiYWNjZXB0ZWRUeXBlcyIsImdldE1pbWVUeXBlIiwic2hvd1R5cGVNaXNtYXRjaERpYWxvZyIsImhhbmRsZUZpbGVTaXplRXhjZWVkIiwic2hvd0ZpbGVTaXplRXhjZWVkRGlhbG9nIiwiZ2V0TWF4aW11bUZpbGVTaXplIiwidG9GaXhlZCIsImhhbmRsZVVwbG9hZENvbXBsZXRlIiwicHJvcGVydHlGaWxlTmFtZSIsInN0YXR1cyIsIk51bWJlciIsImZpbGVXcmFwcGVyIiwic2V0VUlCdXN5IiwiZGlzcGxheU1lc3NhZ2VGb3JGYWlsZWRVcGxvYWQiLCJyZWplY3QiLCJuZXdFVGFnIiwiZXRhZyIsInNldFByb3BlcnR5IiwicGF0aCIsImF2YXRhciIsInJlZnJlc2hBdmF0YXJDYWNoZUJ1c3RpbmciLCJfY2FsbFNpZGVFZmZlY3RzRm9yU3RyZWFtIiwicmVzb2x2ZSIsImZpcmVFdmVudCIsImlzQ29sbGFib3JhdGlvbkVuYWJsZWQiLCJjb2xsYWJvcmF0aXZlRHJhZnQiLCJpc0Nvbm5lY3RlZCIsIm5vdGlmaWNhdGlvbkRhdGEiLCJwdXNoIiwib1ZpZXciLCJoYXNQZW5kaW5nQ2hhbmdlcyIsImF0dGFjaEV2ZW50T25jZSIsInNlbmQiLCJBY3Rpdml0eSIsIkNoYW5nZSIsIlVubG9jayIsInJlbW92ZVN0cmVhbSIsImRlbGV0ZUJ1dHRvbiIsImJDb2xsYWJvcmF0aW9uRW5hYmxlZCIsIkxvY2siLCJvQ29udHJvbCIsIm9GRUNvbnRyb2xsZXIiLCJpc1RyYW5zaWVudCIsIl9zaWRlRWZmZWN0cyIsImhhbmRsZUZpZWxkQ2hhbmdlIiwidXBsb2FkU3RyZWFtIiwiRkVDb250cm9sbGVyIiwidXBsb2FkVXJsIiwiZ2V0VXBsb2FkVXJsIiwic2V0VXBsb2FkVXJsIiwiZmlsZXMiLCJmaWxlVHlwZSIsInR5cGUiLCJzZXRIZWFkZXJGaWVsZHMiLCJ1cGxvYWRQcm9taXNlIiwiUHJvbWlzZSIsInVwbG9hZCIsImVkaXRGbG93Iiwic3luY1Rhc2siLCJNZXNzYWdlQm94IiwiaGFuZGxlT3BlblVwbG9hZGVyIiwiX3NlbmRDb2xsYWJvcmF0aW9uTWVzc2FnZUZvckZpbGVVcGxvYWRlciIsImdldENvbnRyb2xsZXIiLCJiaW5kaW5nUGF0aCIsImZ1bGxQYXRoIiwiaGFuZGxlQ2xvc2VVcGxvYWRlciIsIm9wZW5FeHRlcm5hbExpbmsiLCJzb3VyY2UiLCJnZXRJY29uRm9yTWltZVR5cGUiLCJtaW1lVHlwZSIsIkljb25Qb29sIiwib25EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgiLCJuYXZQYXRoIiwiX3JvdXRpbmciLCJiaW5kaW5nQ29udGV4dCIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwidmlld0RhdGEiLCJnZXRWaWV3RGF0YSIsImRyYWZ0Um9vdFBhdGgiLCJnZXREcmFmdFJvb3RQYXRoIiwidXJsTmF2aWdhdGlvbiIsImdldEhhc2hGb3JOYXZpZ2F0aW9uIiwibmF2aWdhdGVGbiIsImdldFJvdXRlclByb3h5IiwibmF2VG9IYXNoIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwic3RhcnRzV2l0aCIsInNhbWVPUE5hdmlnYXRpb24iLCJjb252ZXJ0ZXJUeXBlIiwiZHJhZnQiLCJwcm9jZXNzRGF0YUxvc3NPckRyYWZ0RGlzY2FyZENvbmZpcm1hdGlvbiIsIkZ1bmN0aW9uIiwicHJvdG90eXBlIiwiTmF2aWdhdGlvblR5cGUiLCJGb3J3YXJkTmF2aWdhdGlvbiJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRmllbGRSdW50aW1lSGVscGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlV2l0aFVJNSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIEV4dGVuc2lvbkFQSSBmcm9tIFwic2FwL2ZlL2NvcmUvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB7IEFjdGl2aXR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vQ29sbGFib3JhdGlvbkNvbW1vblwiO1xuaW1wb3J0IGRyYWZ0IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9kcmFmdFwiO1xuaW1wb3J0IEtlZXBBbGl2ZUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9LZWVwQWxpdmVIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIFRleHRMaW5rIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL1RleHRMaW5rXCI7XG5pbXBvcnQgdHlwZSB7IExpbmtEZWxlZ2F0ZVBheWxvYWQgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9xdWlja1ZpZXcvUXVpY2tWaWV3RGVsZWdhdGVcIjtcbmltcG9ydCB0eXBlIHsgQnV0dG9uJFByZXNzRXZlbnQgfSBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5cbmltcG9ydCB0eXBlIENoZWNrQm94IGZyb20gXCJzYXAvbS9DaGVja0JveFwiO1xuaW1wb3J0IHR5cGUgeyBDaGVja0JveCRTZWxlY3RFdmVudFBhcmFtZXRlcnMgfSBmcm9tIFwic2FwL20vQ2hlY2tCb3hcIjtcbmltcG9ydCB0eXBlIHsgJElsbHVzdHJhdGVkTWVzc2FnZVNldHRpbmdzIH0gZnJvbSBcInNhcC9tL0lsbHVzdHJhdGVkTWVzc2FnZVwiO1xuaW1wb3J0IElsbHVzdHJhdGVkTWVzc2FnZSBmcm9tIFwic2FwL20vSWxsdXN0cmF0ZWRNZXNzYWdlXCI7XG5cbmltcG9ydCBJbGx1c3RyYXRlZE1lc3NhZ2VTaXplIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VTaXplXCI7XG5pbXBvcnQgSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZSBmcm9tIFwic2FwL20vSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZVwiO1xuaW1wb3J0IHR5cGUgSW5wdXRCYXNlIGZyb20gXCJzYXAvbS9JbnB1dEJhc2VcIjtcbmltcG9ydCB0eXBlIHsgSW5wdXRCYXNlJENoYW5nZUV2ZW50UGFyYW1ldGVycyB9IGZyb20gXCJzYXAvbS9JbnB1dEJhc2VcIjtcbmltcG9ydCB0eXBlIExpbmsgZnJvbSBcInNhcC9tL0xpbmtcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgdHlwZSBPYmplY3RJZGVudGlmaWVyIGZyb20gXCJzYXAvbS9PYmplY3RJZGVudGlmaWVyXCI7XG5pbXBvcnQgdHlwZSBSYXRpbmdJbmRpY2F0b3IgZnJvbSBcInNhcC9tL1JhdGluZ0luZGljYXRvclwiO1xuaW1wb3J0IHR5cGUgeyBSYXRpbmdJbmRpY2F0b3IkQ2hhbmdlRXZlbnRQYXJhbWV0ZXJzIH0gZnJvbSBcInNhcC9tL1JhdGluZ0luZGljYXRvclwiO1xuaW1wb3J0IHR5cGUgeyAkUmVzcG9uc2l2ZVBvcG92ZXJTZXR0aW5ncyB9IGZyb20gXCJzYXAvbS9SZXNwb25zaXZlUG9wb3ZlclwiO1xuaW1wb3J0IFJlc3BvbnNpdmVQb3BvdmVyIGZyb20gXCJzYXAvbS9SZXNwb25zaXZlUG9wb3ZlclwiO1xuaW1wb3J0IG1vYmlsZWxpYnJhcnkgZnJvbSBcInNhcC9tL2xpYnJhcnlcIjtcbmltcG9ydCBEZXZpY2UgZnJvbSBcInNhcC91aS9EZXZpY2VcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBFdmVudCwgZGVmYXVsdCBhcyBVSTVFdmVudCB9IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgRWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IEljb25Qb29sIGZyb20gXCJzYXAvdWkvY29yZS9JY29uUG9vbFwiO1xuaW1wb3J0IHR5cGUgeyBGaWVsZCRDaGFuZ2VFdmVudCwgRmllbGQkQ2hhbmdlRXZlbnRQYXJhbWV0ZXJzLCBkZWZhdWx0IGFzIG1kY0ZpZWxkIH0gZnJvbSBcInNhcC91aS9tZGMvRmllbGRcIjtcbmltcG9ydCB0eXBlIE1kY0xpbmsgZnJvbSBcInNhcC91aS9tZGMvTGlua1wiO1xuaW1wb3J0IHR5cGUgRGF0YVN0YXRlIGZyb20gXCJzYXAvdWkvbW9kZWwvRGF0YVN0YXRlXCI7XG5pbXBvcnQgdHlwZSBQcm9wZXJ0eUJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9Qcm9wZXJ0eUJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBGaWxlVXBsb2FkZXIgZnJvbSBcInNhcC91aS91bmlmaWVkL0ZpbGVVcGxvYWRlclwiO1xuaW1wb3J0IHR5cGUge1xuXHRGaWxlVXBsb2FkZXIkQ2hhbmdlRXZlbnQsXG5cdEZpbGVVcGxvYWRlciRGaWxlU2l6ZUV4Y2VlZEV2ZW50LFxuXHRGaWxlVXBsb2FkZXIkVHlwZU1pc3NtYXRjaEV2ZW50LFxuXHRGaWxlVXBsb2FkZXIkVXBsb2FkQ29tcGxldGVFdmVudFxufSBmcm9tIFwic2FwL3VpL3VuaWZpZWQvRmlsZVVwbG9hZGVyXCI7XG5pbXBvcnQgb3BlbldpbmRvdyBmcm9tIFwic2FwL3VpL3V0aWwvb3BlbldpbmRvd1wiO1xuaW1wb3J0IHR5cGUgRmllbGQgZnJvbSBcIi4uL0ZpZWxkXCI7XG5pbXBvcnQgRmllbGRXcmFwcGVyIGZyb20gXCIuLi9jb250cm9scy9GaWVsZFdyYXBwZXJcIjtcbmltcG9ydCB0eXBlIEZpbGVXcmFwcGVyIGZyb20gXCIuLi9jb250cm9scy9GaWxlV3JhcHBlclwiO1xuaW1wb3J0IHtcblx0ZGlzcGxheU1lc3NhZ2VGb3JGYWlsZWRVcGxvYWQsXG5cdHNldEhlYWRlckZpZWxkcyxcblx0c2hvd0ZpbGVTaXplRXhjZWVkRGlhbG9nLFxuXHRzaG93VHlwZU1pc21hdGNoRGlhbG9nXG59IGZyb20gXCIuLi9pbnRlcm5hbC9oZWxwZXJzL1VwbG9hZFwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcIi4uL3RhYmxlL1RhYmxlQVBJXCI7XG5cbnR5cGUgRmlsZSA9IHtcblx0dHlwZTogc3RyaW5nO1xufTtcblxuY29uc3QgRmllbGRSdW50aW1lSGVscGVyID0ge1xuXHR1cGxvYWRQcm9taXNlczoge30gYXMgUmVjb3JkPHN0cmluZywgeyByZXNvbHZlOiBGdW5jdGlvbjsgcmVqZWN0OiBGdW5jdGlvbiB9Pixcblx0Y3JlYXRpbmdJbmFjdGl2ZVJvdzogZmFsc2UsXG5cblx0ZmV0Y2hSZWNvbW1lbmRhdGlvbnM6IGZ1bmN0aW9uIChmaWVsZDogQ29udHJvbCwgY29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIgfCBFeHRlbnNpb25BUEkpOiB2b2lkIHtcblx0XHRjb25zdCB2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0VmlldyhmaWVsZCk7XG5cdFx0Y29uc3QgZmllbGRCaW5kaW5nQ29udGV4dCA9IGZpZWxkLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0bGV0IHJlY29tbWVuZGF0aW9uc0NvbnRleHQ6IENvbnRleHQ7XG5cblx0XHQvLyBkZXRlcm1pbmUgcmVjb21tZW5kYXRpb24gY29udGV4dCB0byB1c2Vcblx0XHRjb25zdCBmaWVsZEJpbmRpbmcgPSAoZmllbGRCaW5kaW5nQ29udGV4dCBhcyBDb250ZXh0KT8uZ2V0QmluZGluZygpO1xuXG5cdFx0aWYgKGZpZWxkQmluZGluZy5pc0EoXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFMaXN0QmluZGluZ1wiKSkge1xuXHRcdFx0Ly8gaW5zaWRlIGEgdGFibGUsIHVzZSB0aGUgcm93XG5cdFx0XHRyZWNvbW1lbmRhdGlvbnNDb250ZXh0ID0gZmllbGRCaW5kaW5nQ29udGV4dCBhcyBDb250ZXh0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBpbnNpZGUgYSBmb3JtIG5vd1xuXHRcdFx0Ly8gY2FuIGhhdmUgMS0xIG5hdmlnYXRpb24gcHJvcGVydHkvZGlyZWN0IHByb3BlcnR5IC0gdXNlIHZpZXcgY29udGV4dFxuXHRcdFx0cmVjb21tZW5kYXRpb25zQ29udGV4dCA9IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHR9XG5cdFx0Y29uc3QgZmVDb250cm9sbGVyID0gRmllbGRSdW50aW1lSGVscGVyLmdldEV4dGVuc2lvbkNvbnRyb2xsZXIoY29udHJvbGxlcik7XG5cdFx0Y29uc3QgdmFsdWVIZWxwSWQgPSBmaWVsZC5pc0E8bWRjRmllbGQ+KFwic2FwLnVpLm1kYy5GaWVsZFwiKSAmJiBmaWVsZC5nZXRWYWx1ZUhlbHAoKTtcblx0XHQvLyB1cGRhdGUgdGVsZW1ldHJ5IGRhdGEgYXMgcGVyIHVzZXIgc2VsZWN0aW9uXG5cdFx0Y29uc3QgbWV0YVBhdGggPSBNb2RlbEhlbHBlci5nZXRNZXRhUGF0aEZvckNvbnRleHQoZmllbGQuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0KTtcblx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSBmaWVsZC5kYXRhKFwic291cmNlUGF0aFwiKS5yZXBsYWNlKG1ldGFQYXRoLCBcIlwiKTtcblx0XHRjb25zdCBmaWVsZFBhdGggPSBgJHtmaWVsZC5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCl9JHtwcm9wZXJ0eVBhdGh9YDtcblx0XHRjb25zdCBzZWxlY3RlZFZhbHVlID0gZmllbGQuaXNBPG1kY0ZpZWxkPihcInNhcC51aS5tZGMuRmllbGRcIikgJiYgZmllbGQuZ2V0VmFsdWUoKTtcblx0XHRmZUNvbnRyb2xsZXIucmVjb21tZW5kYXRpb25zLnVwZGF0ZVRlbGVtZXRyeURhdGFCYXNlZE9uVXNlclNlbGVjdGlvbihmaWVsZFBhdGgsIHNlbGVjdGVkVmFsdWUpO1xuXG5cdFx0aWYgKHZhbHVlSGVscElkICYmIHZhbHVlSGVscElkLmluY2x1ZGVzKFwiOjpUYWJsZVZhbHVlSGVscDo6XCIpKSB7XG5cdFx0XHRjb25zdCB0YWJsZUlkID0gdmFsdWVIZWxwSWQuc3Vic3RyaW5nKDAsIHZhbHVlSGVscElkLmluZGV4T2YoXCI6OlRhYmxlVmFsdWVIZWxwOjpcIikpO1xuXHRcdFx0Y29uc3QgdGFibGUgPSB2aWV3LmJ5SWQodGFibGVJZCk7XG5cdFx0XHRjb25zdCBjb250ZXh0SWRlbnRpZmllciA9ICh0YWJsZT8uZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpPy5nZXRJZGVudGlmaWVyQ29sdW1uKCkgYXMgc3RyaW5nW107XG5cdFx0XHRmZUNvbnRyb2xsZXIucmVjb21tZW5kYXRpb25zLmZldGNoQW5kQXBwbHlSZWNvbW1lbmRhdGlvbnNPbkZpZWxkQ2hhbmdlKGZpZWxkLCB7XG5cdFx0XHRcdGNvbnRleHQ6IHJlY29tbWVuZGF0aW9uc0NvbnRleHQsXG5cdFx0XHRcdGNvbnRleHRJZGVudGlmaWVyXG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZmVDb250cm9sbGVyLnJlY29tbWVuZGF0aW9ucy5mZXRjaEFuZEFwcGx5UmVjb21tZW5kYXRpb25zT25GaWVsZENoYW5nZShmaWVsZCwgeyBjb250ZXh0OiByZWNvbW1lbmRhdGlvbnNDb250ZXh0IH0pO1xuXHRcdH1cblx0fSxcblxuXHRnZXRFeHRlbnNpb25Db250cm9sbGVyOiBmdW5jdGlvbiAob0NvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyIHwgRXh0ZW5zaW9uQVBJKTogUGFnZUNvbnRyb2xsZXIge1xuXHRcdHJldHVybiBvQ29udHJvbGxlci5pc0E8RXh0ZW5zaW9uQVBJPihcInNhcC5mZS5jb3JlLkV4dGVuc2lvbkFQSVwiKSA/IG9Db250cm9sbGVyLl9jb250cm9sbGVyIDogb0NvbnRyb2xsZXI7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGZpZWxkIHZhbHVlIGFuZCB2YWxpZGl0eSBvbiBhIGNoYW5nZSBldmVudC5cblx0ICogQHBhcmFtIG9FdmVudCBUaGUgZXZlbnQgb2JqZWN0IHBhc3NlZCBieSB0aGUgY2hhbmdlIGV2ZW50XG5cdCAqIEByZXR1cm5zIEZpZWxkIHZhbHVlIGFuZCB2YWxpZGl0eVxuXHQgKi9cblx0Z2V0RmllbGRTdGF0ZU9uQ2hhbmdlOiBmdW5jdGlvbiAoXG5cdFx0b0V2ZW50OiBVSTVFdmVudDxcblx0XHRcdHwgeyB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IHVuZGVmaW5lZDsgaXNWYWxpZDogYm9vbGVhbiB9XG5cdFx0XHR8IENoZWNrQm94JFNlbGVjdEV2ZW50UGFyYW1ldGVyc1xuXHRcdFx0fCBJbnB1dEJhc2UkQ2hhbmdlRXZlbnRQYXJhbWV0ZXJzXG5cdFx0XHR8IEZpZWxkJENoYW5nZUV2ZW50UGFyYW1ldGVyc1xuXHRcdFx0fCBSYXRpbmdJbmRpY2F0b3IkQ2hhbmdlRXZlbnRQYXJhbWV0ZXJzLFxuXHRcdFx0Q2hlY2tCb3ggfCBJbnB1dEJhc2UgfCBtZGNGaWVsZCB8IFJhdGluZ0luZGljYXRvciB8IEZpZWxkXG5cdFx0PlxuXHQpOiB7XG5cdFx0ZmllbGQ6IENvbnRyb2w7XG5cdFx0c3RhdGU6IHtcblx0XHRcdGZpZWxkVmFsdWU/OiB1bmtub3duO1xuXHRcdFx0dmFsaWRpdHk6IGJvb2xlYW47XG5cdFx0fTtcblx0fSB7XG5cdFx0bGV0IG9Tb3VyY2VGaWVsZCA9IG9FdmVudC5nZXRTb3VyY2UoKSxcblx0XHRcdG1GaWVsZFN0YXRlOiB7XG5cdFx0XHRcdGZpZWxkVmFsdWU/OiB1bmtub3duO1xuXHRcdFx0XHR2YWxpZGl0eTogYm9vbGVhbjtcblx0XHRcdH07XG5cdFx0Y29uc3QgX2lzQmluZGluZ1N0YXRlTWVzc2FnZXMgPSBmdW5jdGlvbiAob0JpbmRpbmc6IFByb3BlcnR5QmluZGluZyAmIHsgZ2V0RGF0YVN0YXRlOiAoKSA9PiBEYXRhU3RhdGUgfSk6IGJvb2xlYW4ge1xuXHRcdFx0cmV0dXJuIG9CaW5kaW5nICYmIG9CaW5kaW5nLmdldERhdGFTdGF0ZSgpID8gb0JpbmRpbmcuZ2V0RGF0YVN0YXRlKCkuZ2V0SW52YWxpZFZhbHVlKCkgPT09IHVuZGVmaW5lZCA6IHRydWU7XG5cdFx0fTtcblx0XHRpZiAob1NvdXJjZUZpZWxkLmlzQTxtZGNGaWVsZD4oXCJzYXAuZmUubWFjcm9zLmZpZWxkLkZpZWxkXCIpKSB7XG5cdFx0XHRvU291cmNlRmllbGQgPSBvU291cmNlRmllbGQuZ2V0Q29udGVudCgpIGFzIG1kY0ZpZWxkO1xuXHRcdH1cblx0XHRpZiAob1NvdXJjZUZpZWxkLmlzQTxFbmhhbmNlV2l0aFVJNTxGaWVsZD4+KFwic2FwLmZlLm1hY3Jvcy5GaWVsZFwiKSkge1xuXHRcdFx0b1NvdXJjZUZpZWxkID0gb1NvdXJjZUZpZWxkLmdldENvbnRlbnQoKSBhcyBtZGNGaWVsZDtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHRvU291cmNlRmllbGQuaXNBPEVuaGFuY2VXaXRoVUk1PEZpZWxkV3JhcHBlcj4+KEZpZWxkV3JhcHBlci5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKSkgJiZcblx0XHRcdG9Tb3VyY2VGaWVsZC5nZXRFZGl0TW9kZSgpID09PSBcIkVkaXRhYmxlXCJcblx0XHQpIHtcblx0XHRcdG9Tb3VyY2VGaWVsZCA9IChvU291cmNlRmllbGQgYXMgRW5oYW5jZVdpdGhVSTU8RmllbGRXcmFwcGVyPikuZ2V0Q29udGVudEVkaXQoKVswXSBhcyBtZGNGaWVsZDtcblx0XHR9XG5cblx0XHRpZiAob1NvdXJjZUZpZWxkPy5pc0E8bWRjRmllbGQ+KFwic2FwLnVpLm1kYy5GaWVsZFwiKSkge1xuXHRcdFx0bGV0IGJJc1ZhbGlkOiBib29sZWFuID1cblx0XHRcdFx0KG9FdmVudCBhcyBGaWVsZCRDaGFuZ2VFdmVudCkuZ2V0UGFyYW1ldGVyKFwidmFsaWRcIikgfHxcblx0XHRcdFx0KG9FdmVudCBhcyBVSTVFdmVudDx7IHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkOyBpc1ZhbGlkOiBib29sZWFuIH0sIG1kY0ZpZWxkPikuZ2V0UGFyYW1ldGVyKFwiaXNWYWxpZFwiKTtcblx0XHRcdGlmIChiSXNWYWxpZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGlmIChvU291cmNlRmllbGQuZ2V0TWF4Q29uZGl0aW9ucygpID09PSAxKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1ZhbHVlQmluZGluZ0luZm8gPSBvU291cmNlRmllbGQuZ2V0QmluZGluZ0luZm8oXCJ2YWx1ZVwiKTtcblx0XHRcdFx0XHRiSXNWYWxpZCA9IF9pc0JpbmRpbmdTdGF0ZU1lc3NhZ2VzKG9WYWx1ZUJpbmRpbmdJbmZvICYmIG9WYWx1ZUJpbmRpbmdJbmZvLmJpbmRpbmcpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvU291cmNlRmllbGQuZ2V0VmFsdWUoKSA9PT0gXCJcIiAmJiAhb1NvdXJjZUZpZWxkLmdldFByb3BlcnR5KFwicmVxdWlyZWRcIikpIHtcblx0XHRcdFx0XHRiSXNWYWxpZCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdG1GaWVsZFN0YXRlID0ge1xuXHRcdFx0XHRmaWVsZFZhbHVlOiBvU291cmNlRmllbGQuZ2V0VmFsdWUoKSxcblx0XHRcdFx0dmFsaWRpdHk6ICEhYklzVmFsaWRcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIG9Tb3VyY2VGaWVsZCBleHRlbmRzIGZyb20gYSBGaWxlVXBsb2FkZXIgfHwgSW5wdXQgfHwgaXMgYSBDaGVja0JveFxuXHRcdFx0Y29uc3Qgb0JpbmRpbmcgPVxuXHRcdFx0XHQob1NvdXJjZUZpZWxkIGFzIENvbnRyb2wpLmdldEJpbmRpbmcoXCJ1cGxvYWRVcmxcIikgfHxcblx0XHRcdFx0KG9Tb3VyY2VGaWVsZCBhcyBDb250cm9sKS5nZXRCaW5kaW5nKFwidmFsdWVcIikgfHxcblx0XHRcdFx0KG9Tb3VyY2VGaWVsZCBhcyBDb250cm9sKS5nZXRCaW5kaW5nKFwic2VsZWN0ZWRcIik7XG5cdFx0XHRtRmllbGRTdGF0ZSA9IHtcblx0XHRcdFx0ZmllbGRWYWx1ZTogb0JpbmRpbmcgJiYgKG9CaW5kaW5nIGFzIFByb3BlcnR5QmluZGluZykuZ2V0VmFsdWUoKSxcblx0XHRcdFx0dmFsaWRpdHk6IF9pc0JpbmRpbmdTdGF0ZU1lc3NhZ2VzKG9CaW5kaW5nIGFzIFByb3BlcnR5QmluZGluZyAmIHsgZ2V0RGF0YVN0YXRlOiAoKSA9PiBEYXRhU3RhdGUgfSlcblx0XHRcdH07XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHRmaWVsZDogb1NvdXJjZUZpZWxkLFxuXHRcdFx0c3RhdGU6IG1GaWVsZFN0YXRlXG5cdFx0fTtcblx0fSxcblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIHByZXNzIGV2ZW50IGZvciBhIGxpbmsuXG5cdCAqIEBwYXJhbSBvRXZlbnQgVGhlIHByZXNzIGV2ZW50XG5cdCAqIEByZXR1cm5zIFRoZSBwcmVzc2VkIGxpbmtcblx0ICovXG5cdHByZXNzTGluazogYXN5bmMgZnVuY3Rpb24gKG9FdmVudDogQnV0dG9uJFByZXNzRXZlbnQpOiBQcm9taXNlPExpbms+IHtcblx0XHRjb25zdCBvU291cmNlID0gb0V2ZW50LmdldFNvdXJjZSgpO1xuXHRcdGxldCBzYXBtTGluayA9IG9Tb3VyY2UuaXNBPE9iamVjdElkZW50aWZpZXI+KFwic2FwLm0uT2JqZWN0SWRlbnRpZmllclwiKVxuXHRcdFx0PyBvU291cmNlLmZpbmRFbGVtZW50cyhmYWxzZSwgKGVsZW06IEVsZW1lbnQpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gZWxlbS5pc0E8TGluaz4oXCJzYXAubS5MaW5rXCIpO1xuXHRcdFx0ICB9KVswXVxuXHRcdFx0OiBvU291cmNlO1xuXHRcdGlmIChvU291cmNlPy5pc0E8VGV4dExpbms+KFwic2FwLmZlLm1hY3Jvcy5jb250cm9scy5UZXh0TGlua1wiKSkge1xuXHRcdFx0Ly93aGVuIHRoZSBsaW5rIGlzIGluc2lkZSBhIFRleHRMaW5rIGNvbnRyb2wsIHRoZSBkZXBlbmRlbnQgd2lsbCBiZSBvbiB0aGUgVGV4dExpbmtcblx0XHRcdHNhcG1MaW5rID0gb1NvdXJjZS5nZXRDb250ZW50KCkgYXMgTGluaztcblx0XHR9XG5cblx0XHRpZiAob1NvdXJjZS5nZXREZXBlbmRlbnRzKCkgJiYgb1NvdXJjZS5nZXREZXBlbmRlbnRzKCkubGVuZ3RoID4gMCAmJiBzYXBtTGluay5nZXRQcm9wZXJ0eShcInRleHRcIikgIT09IFwiXCIpIHtcblx0XHRcdGNvbnN0IG9GaWVsZEluZm8gPSBvU291cmNlLmdldERlcGVuZGVudHMoKVswXTtcblx0XHRcdGlmIChvRmllbGRJbmZvICYmIG9GaWVsZEluZm8uaXNBPE1kY0xpbms+KFwic2FwLnVpLm1kYy5MaW5rXCIpKSB7XG5cdFx0XHRcdGF3YWl0IEZpZWxkUnVudGltZUhlbHBlci5vcGVuTGluayhvRmllbGRJbmZvLCBzYXBtTGluayBhcyBMaW5rKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHNhcG1MaW5rIGFzIExpbms7XG5cdH0sXG5cblx0b3Blbkxpbms6IGFzeW5jIGZ1bmN0aW9uIChtZGNMaW5rOiBNZGNMaW5rLCBzYXBtTGluazogTGluayk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBoUmVmID0gYXdhaXQgbWRjTGluay5nZXRUcmlnZ2VySHJlZigpO1xuXHRcdFx0aWYgKCFoUmVmKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0YXdhaXQgKG1kY0xpbmsgYXMgdW5rbm93biBhcyB7IF91c2VEZWxlZ2F0ZUl0ZW1zOiBGdW5jdGlvbiB9KS5fdXNlRGVsZWdhdGVJdGVtcygpO1xuXHRcdFx0XHRcdGNvbnN0IGxpbmtJdGVtcyA9IGF3YWl0IG1kY0xpbmsucmV0cmlldmVMaW5rSXRlbXMoKTtcblx0XHRcdFx0XHRpZiAobGlua0l0ZW1zPy5sZW5ndGggPT09IDAgJiYgKG1kY0xpbmsuZ2V0UGF5bG9hZCgpIGFzIExpbmtEZWxlZ2F0ZVBheWxvYWQpLmhhc1F1aWNrVmlld0ZhY2V0cyA9PT0gXCJmYWxzZVwiKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBwb3BvdmVyOiBSZXNwb25zaXZlUG9wb3ZlciA9IEZpZWxkUnVudGltZUhlbHBlci5jcmVhdGVQb3BvdmVyV2l0aE5vVGFyZ2V0cyhtZGNMaW5rKTtcblx0XHRcdFx0XHRcdG1kY0xpbmsuYWRkRGVwZW5kZW50KHBvcG92ZXIpO1xuXHRcdFx0XHRcdFx0cG9wb3Zlci5vcGVuQnkoc2FwbUxpbmsgYXMgdW5rbm93biBhcyBDb250cm9sKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdFx0XHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0XHRcdFx0YXdhaXQgbWRjTGluay5vcGVuKHNhcG1MaW5rIGFzIHVua25vd24gYXMgQ29udHJvbCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihgQ2Fubm90IHJldHJpZXZlIHRoZSBRdWlja1ZpZXcgUG9wb3ZlciBkaWFsb2c6ICR7ZXJyb3J9YCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHNhcG1MaW5rKTtcblx0XHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHZpZXcpO1xuXHRcdFx0XHRjb25zdCBzaGVsbFNlcnZpY2UgPSBhcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpO1xuXHRcdFx0XHRjb25zdCBzaGVsbEhhc2ggPSBzaGVsbFNlcnZpY2UucGFyc2VTaGVsbEhhc2goaFJlZik7XG5cdFx0XHRcdGNvbnN0IG5hdkFyZ3MgPSB7XG5cdFx0XHRcdFx0dGFyZ2V0OiB7XG5cdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogc2hlbGxIYXNoLnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0YWN0aW9uOiBzaGVsbEhhc2guYWN0aW9uXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRwYXJhbXM6IHNoZWxsSGFzaC5wYXJhbXNcblx0XHRcdFx0fTtcblx0XHRcdFx0S2VlcEFsaXZlSGVscGVyLnN0b3JlQ29udHJvbFJlZnJlc2hTdHJhdGVneUZvckhhc2godmlldywgc2hlbGxIYXNoKTtcblx0XHRcdFx0aWYgKENvbW1vblV0aWxzLmlzU3RpY2t5RWRpdE1vZGUoc2FwbUxpbmsgYXMgdW5rbm93biBhcyBDb250cm9sKSAhPT0gdHJ1ZSkge1xuXHRcdFx0XHRcdC8vVVJMIHBhcmFtcyBhbmQgeGFwcFN0YXRlIGhhcyBiZWVuIGdlbmVyYXRlZCBlYXJsaWVyIGhlbmNlIHVzaW5nIG5hdmlnYXRlXG5cdFx0XHRcdFx0YXdhaXQgc2hlbGxTZXJ2aWNlLm5hdmlnYXRlKG5hdkFyZ3MsIGFwcENvbXBvbmVudCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGNvbnN0IG5ld0hyZWYgPSBhd2FpdCBzaGVsbFNlcnZpY2UuaHJlZkZvckV4dGVybmFsKG5hdkFyZ3MsIGFwcENvbXBvbmVudCk7XG5cdFx0XHRcdFx0XHRvcGVuV2luZG93KG5ld0hyZWYpO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoYEVycm9yIHdoaWxlIHJldGlyZXZpbmcgaHJlZkZvckV4dGVybmFsIDogJHtlcnJvcn1gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TG9nLmVycm9yKGBFcnJvciB0cmlnZ2VyaW5nIGxpbmsgSHJlZjogJHtlcnJvcn1gKTtcblx0XHR9XG5cdH0sXG5cblx0Y3JlYXRlUG9wb3ZlcldpdGhOb1RhcmdldHM6IGZ1bmN0aW9uIChtZGNMaW5rOiBNZGNMaW5rKTogUmVzcG9uc2l2ZVBvcG92ZXIge1xuXHRcdGNvbnN0IG1kY0xpbmtJZCA9IG1kY0xpbmsuZ2V0SWQoKTtcblx0XHRjb25zdCBpbGx1c3RyYXRlZE1lc3NhZ2VTZXR0aW5nczogJElsbHVzdHJhdGVkTWVzc2FnZVNldHRpbmdzID0ge1xuXHRcdFx0dGl0bGU6IGdldFJlc291cmNlTW9kZWwobWRjTGluayBhcyB1bmtub3duIGFzIENvbnRyb2wpLmdldFRleHQoXCJNX0lMTFVTVFJBVEVETUVTU0FHRV9USVRMRVwiKSxcblx0XHRcdGRlc2NyaXB0aW9uOiBnZXRSZXNvdXJjZU1vZGVsKG1kY0xpbmsgYXMgdW5rbm93biBhcyBDb250cm9sKS5nZXRUZXh0KFwiTV9JTExVU1RSQVRFRE1FU1NBR0VfREVTQ1JJUFRJT05cIiksXG5cdFx0XHRlbmFibGVGb3JtYXR0ZWRUZXh0OiB0cnVlLFxuXHRcdFx0aWxsdXN0cmF0aW9uU2l6ZTogSWxsdXN0cmF0ZWRNZXNzYWdlU2l6ZS5FeHRyYVNtYWxsLFxuXHRcdFx0aWxsdXN0cmF0aW9uVHlwZTogSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5Ob0RhdGFcblx0XHR9O1xuXHRcdGNvbnN0IGlsbHVzdHJhdGVkTWVzc2FnZSA9IG5ldyBJbGx1c3RyYXRlZE1lc3NhZ2UoYCR7bWRjTGlua0lkfS1pbGx1c3RyYXRlZG1lc3NhZ2VgLCBpbGx1c3RyYXRlZE1lc3NhZ2VTZXR0aW5ncyk7XG5cdFx0Y29uc3QgcG9wb3ZlclNldHRpbmdzOiAkUmVzcG9uc2l2ZVBvcG92ZXJTZXR0aW5ncyA9IHtcblx0XHRcdGhvcml6b250YWxTY3JvbGxpbmc6IGZhbHNlLFxuXHRcdFx0c2hvd0hlYWRlcjogRGV2aWNlLnN5c3RlbS5waG9uZSxcblx0XHRcdHBsYWNlbWVudDogbW9iaWxlbGlicmFyeS5QbGFjZW1lbnRUeXBlLkF1dG8sXG5cdFx0XHRjb250ZW50OiBbaWxsdXN0cmF0ZWRNZXNzYWdlXSxcblx0XHRcdGFmdGVyQ2xvc2U6IGZ1bmN0aW9uIChldmVudCkge1xuXHRcdFx0XHRpZiAoZXZlbnQuZ2V0U291cmNlKCkpIHtcblx0XHRcdFx0XHRldmVudC5nZXRTb3VyY2UoKS5kZXN0cm95KCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHRcdHJldHVybiBuZXcgUmVzcG9uc2l2ZVBvcG92ZXIoYCR7bWRjTGlua0lkfS1wb3BvdmVyYCwgcG9wb3ZlclNldHRpbmdzKTtcblx0fSxcblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgdHlwZSBtaXNtYXRjaCBldmVudCBmb3IgYSBmaWxlIHVwbG9hZGVyLlxuXHQgKlxuXHQgKiBEaXNwbGF5cyBhIGRpYWxvZyB0byBpbmZvcm0gdGhlIHVzZXIgYWJvdXQgdGhlIHR5cGUgbWlzbWF0Y2guXG5cdCAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgb2JqZWN0IGNvbnRhaW5pbmcgZGV0YWlscyBhYm91dCB0aGUgdHlwZSBtaXNtYXRjaFxuXHQgKi9cblx0aGFuZGxlVHlwZU1pc3NtYXRjaDogZnVuY3Rpb24gKGV2ZW50OiBGaWxlVXBsb2FkZXIkVHlwZU1pc3NtYXRjaEV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3QgZmlsZVVwbG9hZGVyID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0Y29uc3QgZ2l2ZW5UeXBlID0gZXZlbnQuZ2V0UGFyYW1ldGVyKFwibWltZVR5cGVcIik7XG5cdFx0Y29uc3QgYWNjZXB0ZWRUeXBlcyA9IGZpbGVVcGxvYWRlci5nZXRNaW1lVHlwZSgpO1xuXHRcdGlmIChnaXZlblR5cGUpIHtcblx0XHRcdHNob3dUeXBlTWlzbWF0Y2hEaWFsb2coZmlsZVVwbG9hZGVyLCBnaXZlblR5cGUsIGFjY2VwdGVkVHlwZXMpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgZmlsZSBzaXplIGV4Y2VlZCBldmVudCBmb3IgYSBmaWxlIHVwbG9hZGVyLlxuXHQgKlxuXHQgKiBEaXNwbGF5cyBhIGRpYWxvZyB0byBpbmZvcm0gdGhlIHVzZXIgYWJvdXQgdGhlIGZpbGUgc2l6ZSBleGNlZWQuXG5cdCAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgb2JqZWN0IGNvbnRhaW5pbmcgZGV0YWlscyBhYm91dCB0aGUgZmlsZSBzaXplIGV4Y2VlZFxuXHQgKi9cblx0aGFuZGxlRmlsZVNpemVFeGNlZWQ6IGZ1bmN0aW9uIChldmVudDogRmlsZVVwbG9hZGVyJEZpbGVTaXplRXhjZWVkRXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCBmaWxlVXBsb2FkZXIgPSBldmVudC5nZXRTb3VyY2UoKTtcblx0XHRzaG93RmlsZVNpemVFeGNlZWREaWFsb2coZmlsZVVwbG9hZGVyLCBmaWxlVXBsb2FkZXIuZ2V0TWF4aW11bUZpbGVTaXplKCkudG9GaXhlZCgzKSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIHVwbG9hZCBjb21wbGV0ZSBldmVudCBmb3IgYSBmaWxlIHVwbG9hZGVyLlxuXHQgKlxuXHQgKiBEaXNwbGF5cyBhIG1lc3NhZ2UgZm9yIGEgZmFpbGVkIHVwbG9hZCBhbmQgcmVzb2x2ZXMgb3IgcmVqZWN0cyB0aGUgdXBsb2FkIHByb21pc2UuXG5cdCAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgb2JqZWN0IGNvbnRhaW5pbmcgZGV0YWlscyBhYm91dCB0aGUgdXBsb2FkXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eUZpbGVOYW1lIFRoZSBwcm9wZXJ0eSBuYW1lIGZvciB0aGUgZmlsZSBuYW1lXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIHByb3BlcnR5IHBhdGggZm9yIHRoZSBmaWxlXG5cdCAqIEBwYXJhbSBjb250cm9sbGVyIFRoZSBwYWdlIGNvbnRyb2xsZXJcblx0ICovXG5cdGhhbmRsZVVwbG9hZENvbXBsZXRlOiBmdW5jdGlvbiAoXG5cdFx0ZXZlbnQ6IEZpbGVVcGxvYWRlciRVcGxvYWRDb21wbGV0ZUV2ZW50LFxuXHRcdHByb3BlcnR5RmlsZU5hbWU6IHsgcGF0aDogc3RyaW5nIH0gfCB1bmRlZmluZWQsXG5cdFx0cHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdFx0Y29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXJcblx0KTogdm9pZCB7XG5cdFx0Y29uc3Qgc3RhdHVzID0gTnVtYmVyKGV2ZW50LmdldFBhcmFtZXRlcihcInN0YXR1c1wiKSksXG5cdFx0XHRmaWxlVXBsb2FkZXIgPSBldmVudC5nZXRTb3VyY2UoKSxcblx0XHRcdGZpbGVXcmFwcGVyID0gZmlsZVVwbG9hZGVyLmdldFBhcmVudCgpIGFzIHVua25vd24gYXMgRmlsZVdyYXBwZXIsXG5cdFx0XHRmaWVsZCA9IGZpbGVXcmFwcGVyLmdldFBhcmVudCgpO1xuXHRcdGZpbGVXcmFwcGVyLnNldFVJQnVzeShmYWxzZSk7XG5cblx0XHRjb25zdCBjb250ZXh0ID0gZmlsZVVwbG9hZGVyLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCB8IHVuZGVmaW5lZCB8IG51bGw7XG5cdFx0aWYgKHN0YXR1cyA9PT0gMCB8fCBzdGF0dXMgPj0gNDAwKSB7XG5cdFx0XHRjb25zdCBlcnJvciA9IChldmVudC5nZXRQYXJhbWV0ZXIoXCJyZXNwb25zZVJhd1wiKSB8fCBldmVudC5nZXRQYXJhbWV0ZXIoXCJyZXNwb25zZVwiKSkgYXMgc3RyaW5nO1xuXHRcdFx0ZGlzcGxheU1lc3NhZ2VGb3JGYWlsZWRVcGxvYWQoZmlsZVVwbG9hZGVyLCBlcnJvcik7XG5cdFx0XHRGaWVsZFJ1bnRpbWVIZWxwZXIudXBsb2FkUHJvbWlzZXNbZmlsZVVwbG9hZGVyLmdldElkKCldLnJlamVjdCgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBuZXdFVGFnID0gKGV2ZW50LmdldFBhcmFtZXRlcihcImhlYWRlcnNcIikgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pPy5ldGFnO1xuXG5cdFx0XHRpZiAobmV3RVRhZykge1xuXHRcdFx0XHQvLyBzZXQgbmV3IGV0YWcgZm9yIGZpbGVuYW1lIHVwZGF0ZSwgYnV0IHdpdGhvdXQgc2VuZGluZyBwYXRjaCByZXF1ZXN0XG5cdFx0XHRcdGNvbnRleHQ/LnNldFByb3BlcnR5KFwiQG9kYXRhLmV0YWdcIiwgbmV3RVRhZywgbnVsbCBhcyB1bmtub3duIGFzIHN0cmluZyk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIHNldCBmaWxlbmFtZSBmb3IgbGluayB0ZXh0XG5cdFx0XHRpZiAocHJvcGVydHlGaWxlTmFtZT8ucGF0aCkge1xuXHRcdFx0XHRjb250ZXh0Py5zZXRQcm9wZXJ0eShwcm9wZXJ0eUZpbGVOYW1lLnBhdGgsIGZpbGVVcGxvYWRlci5nZXRWYWx1ZSgpKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gZGVsZXRlIHRoZSBhdmF0YXIgY2FjaGUgdGhhdCBub3QgZ2V0cyB1cGRhdGVkIG90aGVyd2lzZVxuXHRcdFx0ZmlsZVdyYXBwZXIuYXZhdGFyPy5yZWZyZXNoQXZhdGFyQ2FjaGVCdXN0aW5nKCk7XG5cblx0XHRcdEZpZWxkUnVudGltZUhlbHBlci5fY2FsbFNpZGVFZmZlY3RzRm9yU3RyZWFtKFxuXHRcdFx0XHRldmVudCBhcyB1bmtub3duIGFzIEZpZWxkJENoYW5nZUV2ZW50ICYgRXZlbnQ8eyBpc1ZhbGlkOiBib29sZWFuIH0+LFxuXHRcdFx0XHRmaWxlV3JhcHBlcixcblx0XHRcdFx0Y29udHJvbGxlclxuXHRcdFx0KTtcblxuXHRcdFx0dGhpcy51cGxvYWRQcm9taXNlc1tmaWxlVXBsb2FkZXIuZ2V0SWQoKV0ucmVzb2x2ZSgpO1xuXHRcdFx0ZmllbGQ/LmZpcmVFdmVudChcImNoYW5nZVwiLCBldmVudCk7XG5cdFx0fVxuXG5cdFx0ZGVsZXRlIHRoaXMudXBsb2FkUHJvbWlzZXNbZmlsZVVwbG9hZGVyLmdldElkKCldO1xuXG5cdFx0Ly8gQ29sbGFib3JhdGlvbiBEcmFmdCBBY3Rpdml0eSBTeW5jXG5cdFx0Y29uc3QgaXNDb2xsYWJvcmF0aW9uRW5hYmxlZCA9IGNvbnRyb2xsZXIuY29sbGFib3JhdGl2ZURyYWZ0Py5pc0Nvbm5lY3RlZCgpO1xuXHRcdGlmICghaXNDb2xsYWJvcmF0aW9uRW5hYmxlZCB8fCAhY29udGV4dCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IG5vdGlmaWNhdGlvbkRhdGEgPSBbYCR7Y29udGV4dC5nZXRQYXRoKCl9LyR7cHJvcGVydHlQYXRofWBdO1xuXHRcdGlmIChwcm9wZXJ0eUZpbGVOYW1lPy5wYXRoKSB7XG5cdFx0XHRub3RpZmljYXRpb25EYXRhLnB1c2goYCR7Y29udGV4dC5nZXRQYXRoKCl9LyR7cHJvcGVydHlGaWxlTmFtZS5wYXRofWApO1xuXHRcdH1cblxuXHRcdGxldCBiaW5kaW5nID0gY29udGV4dC5nZXRCaW5kaW5nKCk7XG5cdFx0aWYgKCFiaW5kaW5nLmlzQShcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCIpKSB7XG5cdFx0XHRjb25zdCBvVmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcoZmlsZVVwbG9hZGVyKTtcblx0XHRcdGJpbmRpbmcgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpLmdldEJpbmRpbmcoKTtcblx0XHR9XG5cdFx0aWYgKGJpbmRpbmcuaGFzUGVuZGluZ0NoYW5nZXMoKSkge1xuXHRcdFx0YmluZGluZy5hdHRhY2hFdmVudE9uY2UoXCJwYXRjaENvbXBsZXRlZFwiLCAoKSA9PiB7XG5cdFx0XHRcdGNvbnRyb2xsZXIuY29sbGFib3JhdGl2ZURyYWZ0LnNlbmQoeyBhY3Rpb246IEFjdGl2aXR5LkNoYW5nZSwgY29udGVudDogbm90aWZpY2F0aW9uRGF0YSB9KTtcblx0XHRcdFx0Y29udHJvbGxlci5jb2xsYWJvcmF0aXZlRHJhZnQuc2VuZCh7IGFjdGlvbjogQWN0aXZpdHkuVW5sb2NrLCBjb250ZW50OiBub3RpZmljYXRpb25EYXRhIH0pO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnRyb2xsZXIuY29sbGFib3JhdGl2ZURyYWZ0LnNlbmQoeyBhY3Rpb246IEFjdGl2aXR5LkNoYW5nZSwgY29udGVudDogbm90aWZpY2F0aW9uRGF0YSB9KTtcblx0XHRcdGNvbnRyb2xsZXIuY29sbGFib3JhdGl2ZURyYWZ0LnNlbmQoeyBhY3Rpb246IEFjdGl2aXR5LlVubG9jaywgY29udGVudDogbm90aWZpY2F0aW9uRGF0YSB9KTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgYSBzdHJlYW0gZnJvbSBhIGZpbGUgcHJvcGVydHkuXG5cdCAqXG5cdCAqIFNldHMgdGhlIHByb3BlcnR5IHRvIG51bGwgYW5kIHRoZW4gdW5kZWZpbmVkIHRvIHJlY3JlYXRlIHRoZSB1cGxvYWQgVVJMLlxuXHQgKiBIYW5kbGVzIGNvbGxhYm9yYXRpb24gZHJhZnQgYWN0aXZpdHkgc3luYyBpZiBlbmFibGVkLlxuXHQgKiBAcGFyYW0gZXZlbnQgVGhlIGNoYW5nZSBldmVudCBvYmplY3Rcblx0ICogQHBhcmFtICBwcm9wZXJ0eUZpbGVOYW1lIFRoZSBwcm9wZXJ0eSBuYW1lIGZvciB0aGUgZmlsZSBuYW1lLlxuXHQgKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSBwcm9wZXJ0eSBwYXRoIGZvciB0aGUgZmlsZS5cblx0ICogQHBhcmFtIGNvbnRyb2xsZXIgVGhlIHBhZ2UgY29udHJvbGxlci5cblx0ICovXG5cdHJlbW92ZVN0cmVhbTogZnVuY3Rpb24gKFxuXHRcdGV2ZW50OiBGaWVsZCRDaGFuZ2VFdmVudCAmIEV2ZW50PHsgaXNWYWxpZDogYm9vbGVhbiB9Pixcblx0XHRwcm9wZXJ0eUZpbGVOYW1lOiB7IHBhdGg6IHN0cmluZyB9IHwgdW5kZWZpbmVkLFxuXHRcdHByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRcdGNvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyXG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IGRlbGV0ZUJ1dHRvbiA9IGV2ZW50LmdldFNvdXJjZSgpO1xuXHRcdGNvbnN0IGZpbGVXcmFwcGVyID0gZGVsZXRlQnV0dG9uLmdldFBhcmVudCgpIGFzIHVua25vd24gYXMgRmlsZVdyYXBwZXI7XG5cdFx0Y29uc3QgY29udGV4dCA9IGZpbGVXcmFwcGVyLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHRjb25zdCBmaWVsZCA9IGZpbGVXcmFwcGVyLmdldFBhcmVudCgpO1xuXG5cdFx0Ly8gc3RyZWFtcyBhcmUgcmVtb3ZlZCBieSBhc3NpZ25pbmcgdGhlIG51bGwgdmFsdWVcblx0XHRjb250ZXh0LnNldFByb3BlcnR5KHByb3BlcnR5UGF0aCwgbnVsbCk7XG5cdFx0Ly8gV2hlbiBzZXR0aW5nIHRoZSBwcm9wZXJ0eSB0byBudWxsLCB0aGUgdXBsb2FkVXJsIChAQE1PREVMLmZvcm1hdCkgaXMgc2V0IHRvIFwiXCIgYnkgdGhlIG1vZGVsXG5cdFx0Ly9cdHdpdGggdGhhdCBhbm90aGVyIHVwbG9hZCBpcyBub3QgcG9zc2libGUgYmVmb3JlIHJlZnJlc2hpbmcgdGhlIHBhZ2Vcblx0XHQvLyAocmVmcmVzaGluZyB0aGUgcGFnZSB3b3VsZCByZWNyZWF0ZSB0aGUgVVJMKVxuXHRcdC8vXHRUaGlzIGlzIHRoZSB3b3JrYXJvdW5kOlxuXHRcdC8vXHRXZSBzZXQgdGhlIHByb3BlcnR5IHRvIHVuZGVmaW5lZCBvbmx5IG9uIHRoZSBmcm9udGVuZCB3aGljaCB3aWxsIHJlY3JlYXRlIHRoZSB1cGxvYWRVcmxcblx0XHRjb250ZXh0LnNldFByb3BlcnR5KHByb3BlcnR5UGF0aCwgdW5kZWZpbmVkLCBudWxsIGFzIHVua25vd24gYXMgc3RyaW5nKTtcblxuXHRcdEZpZWxkUnVudGltZUhlbHBlci5fY2FsbFNpZGVFZmZlY3RzRm9yU3RyZWFtKGV2ZW50LCBmaWxlV3JhcHBlciwgY29udHJvbGxlcik7XG5cblx0XHQvLyBDb2xsYWJvcmF0aW9uIERyYWZ0IEFjdGl2aXR5IFN5bmNcblx0XHRjb25zdCBiQ29sbGFib3JhdGlvbkVuYWJsZWQgPSBjb250cm9sbGVyLmNvbGxhYm9yYXRpdmVEcmFmdD8uaXNDb25uZWN0ZWQoKTtcblx0XHRpZiAoYkNvbGxhYm9yYXRpb25FbmFibGVkKSB7XG5cdFx0XHRsZXQgYmluZGluZyA9IGNvbnRleHQuZ2V0QmluZGluZygpO1xuXHRcdFx0aWYgKCFiaW5kaW5nLmlzQShcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCIpKSB7XG5cdFx0XHRcdGNvbnN0IG9WaWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0VmlldyhkZWxldGVCdXR0b24pO1xuXHRcdFx0XHRiaW5kaW5nID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKS5nZXRCaW5kaW5nKCk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGRhdGEgPSBbYCR7Y29udGV4dC5nZXRQYXRoKCl9LyR7cHJvcGVydHlQYXRofWBdO1xuXHRcdFx0aWYgKHByb3BlcnR5RmlsZU5hbWU/LnBhdGgpIHtcblx0XHRcdFx0ZGF0YS5wdXNoKGAke2NvbnRleHQuZ2V0UGF0aCgpfS8ke3Byb3BlcnR5RmlsZU5hbWUucGF0aH1gKTtcblx0XHRcdH1cblx0XHRcdGNvbnRyb2xsZXIuY29sbGFib3JhdGl2ZURyYWZ0LnNlbmQoeyBhY3Rpb246IEFjdGl2aXR5LkxvY2ssIGNvbnRlbnQ6IGRhdGEgfSk7XG5cblx0XHRcdGJpbmRpbmcuYXR0YWNoRXZlbnRPbmNlKFwicGF0Y2hDb21wbGV0ZWRcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRjb250cm9sbGVyLmNvbGxhYm9yYXRpdmVEcmFmdC5zZW5kKHsgYWN0aW9uOiBBY3Rpdml0eS5DaGFuZ2UsIGNvbnRlbnQ6IGRhdGEgfSk7XG5cdFx0XHRcdGNvbnRyb2xsZXIuY29sbGFib3JhdGl2ZURyYWZ0LnNlbmQoeyBhY3Rpb246IEFjdGl2aXR5LlVubG9jaywgY29udGVudDogZGF0YSB9KTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRmaWVsZD8uZmlyZUV2ZW50KFwiY2hhbmdlXCIsIGV2ZW50KTtcblx0fSxcblxuXHRfY2FsbFNpZGVFZmZlY3RzRm9yU3RyZWFtOiBmdW5jdGlvbiAoXG5cdFx0b0V2ZW50OiBGaWVsZCRDaGFuZ2VFdmVudCAmIEV2ZW50PHsgaXNWYWxpZDogYm9vbGVhbiB9Pixcblx0XHRvQ29udHJvbDogQ29udHJvbCxcblx0XHRvQ29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXJcblx0KTogdm9pZCB7XG5cdFx0Y29uc3Qgb0ZFQ29udHJvbGxlciA9IEZpZWxkUnVudGltZUhlbHBlci5nZXRFeHRlbnNpb25Db250cm9sbGVyKG9Db250cm9sbGVyKTtcblx0XHRpZiAob0NvbnRyb2wgJiYgKG9Db250cm9sLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgdW5rbm93biBhcyB7IGlzVHJhbnNpZW50OiBGdW5jdGlvbiB9KS5pc1RyYW5zaWVudCgpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmIChvQ29udHJvbCkge1xuXHRcdFx0KG9FdmVudCBhcyB1bmtub3duIGFzIHsgb1NvdXJjZTogQ29udHJvbCB9KS5vU291cmNlID0gb0NvbnRyb2w7XG5cdFx0fVxuXHRcdG9GRUNvbnRyb2xsZXIuX3NpZGVFZmZlY3RzLmhhbmRsZUZpZWxkQ2hhbmdlKG9FdmVudCwgRmllbGRSdW50aW1lSGVscGVyLmdldEZpZWxkU3RhdGVPbkNoYW5nZShvRXZlbnQpLnN0YXRlW1widmFsaWRpdHlcIl0pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBVcGxvYWRzIGEgc3RyZWFtIHVzaW5nIHRoZSBmaWxlIHVwbG9hZGVyLlxuXHQgKlxuXHQgKiBTZXRzIHRoZSB1cGxvYWQgVVJMLCBzeW5jaHJvbml6ZXMgdGhlIHVwbG9hZCB3aXRoIG90aGVyIHJlcXVlc3RzLCBhbmQgaGFuZGxlcyBjb2xsYWJvcmF0aW9uIGRyYWZ0IGFjdGl2aXR5IHN5bmMgaWYgZW5hYmxlZC5cblx0ICogQHBhcmFtIGNvbnRyb2xsZXIgVGhlIHBhZ2UgY29udHJvbGxlci5cblx0ICogQHBhcmFtIGV2ZW50IFRoZSBjaGFuZ2UgZXZlbnQgb2JqZWN0IG9mIHRoZSBmaWxlIHVwbG9hZGVyLlxuXHQgKi9cblx0dXBsb2FkU3RyZWFtOiBmdW5jdGlvbiAoY29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsIGV2ZW50OiBGaWxlVXBsb2FkZXIkQ2hhbmdlRXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCBmaWxlVXBsb2FkZXIgPSBldmVudC5nZXRTb3VyY2UoKSxcblx0XHRcdEZFQ29udHJvbGxlciA9IEZpZWxkUnVudGltZUhlbHBlci5nZXRFeHRlbnNpb25Db250cm9sbGVyKGNvbnRyb2xsZXIpLFxuXHRcdFx0ZmlsZVdyYXBwZXIgPSBmaWxlVXBsb2FkZXIuZ2V0UGFyZW50KCkgYXMgdW5rbm93biBhcyBGaWxlV3JhcHBlcixcblx0XHRcdHVwbG9hZFVybCA9IGZpbGVXcmFwcGVyLmdldFVwbG9hZFVybCgpO1xuXG5cdFx0aWYgKHVwbG9hZFVybCAhPT0gXCJcIikge1xuXHRcdFx0ZmlsZVdyYXBwZXIuc2V0VUlCdXN5KHRydWUpO1xuXG5cdFx0XHQvLyB1c2UgdXBsb2FkVXJsIGZyb20gRmlsZVdyYXBwZXIgd2hpY2ggcmV0dXJucyBhIGNhbm9uaWNhbCBVUkxcblx0XHRcdGZpbGVVcGxvYWRlci5zZXRVcGxvYWRVcmwodXBsb2FkVXJsKTtcblxuXHRcdFx0Ly8gc2V0IHRoZSByZXF1ZXN0IGhlYWRlciBmb3IgdGhlIHVwbG9hZFxuXHRcdFx0Y29uc3QgZmlsZXMgPSBldmVudC5nZXRQYXJhbWV0ZXIoXCJmaWxlc1wiKTtcblx0XHRcdC8vIHRoZXJlIGlzIG9ubHkgb25lIGZpbGUgYXMgd2UgYWxsb3cgc2VsZWN0aW5nIG9ubHkgb25lXG5cdFx0XHRjb25zdCBmaWxlVHlwZSA9IChmaWxlcyAmJiAoZmlsZXNbMF0gYXMgRmlsZSkudHlwZSkgYXMgc3RyaW5nO1xuXHRcdFx0c2V0SGVhZGVyRmllbGRzKGZpbGVVcGxvYWRlciwgZmlsZVR5cGUpO1xuXG5cdFx0XHQvLyBzeW5jaHJvbml6ZSB1cGxvYWQgd2l0aCBvdGhlciByZXF1ZXN0c1xuXHRcdFx0Y29uc3QgdXBsb2FkUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xuXHRcdFx0XHR0aGlzLnVwbG9hZFByb21pc2VzID0gdGhpcy51cGxvYWRQcm9taXNlcyB8fCB7fTtcblx0XHRcdFx0dGhpcy51cGxvYWRQcm9taXNlc1tmaWxlVXBsb2FkZXIuZ2V0SWQoKV0gPSB7XG5cdFx0XHRcdFx0cmVzb2x2ZTogcmVzb2x2ZSxcblx0XHRcdFx0XHRyZWplY3Q6IHJlamVjdFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRmaWxlVXBsb2FkZXIudXBsb2FkKCk7XG5cdFx0XHR9KTtcblx0XHRcdEZFQ29udHJvbGxlci5lZGl0Rmxvdy5zeW5jVGFzayh1cGxvYWRQcm9taXNlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0TWVzc2FnZUJveC5lcnJvcihnZXRSZXNvdXJjZU1vZGVsKGNvbnRyb2xsZXIpLmdldFRleHQoXCJNX0ZJRUxEX0ZJTEVVUExPQURFUl9BQk9SVEVEX1RFWFRcIikpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogSGFuZGxlciB3aGVuIGEgRmlsZVVwbG9hZCBkaWFsb2cgaXMgb3BlbmVkLlxuXHQgKiBAcGFyYW0gZXZlbnRcblx0ICovXG5cdGhhbmRsZU9wZW5VcGxvYWRlcjogZnVuY3Rpb24gKGV2ZW50OiBFdmVudDx7fSwgRmlsZVVwbG9hZGVyPik6IHZvaWQge1xuXHRcdGNvbnN0IGZpbGVVcGxvYWRlciA9IGV2ZW50LmdldFNvdXJjZSgpO1xuXHRcdEZpZWxkUnVudGltZUhlbHBlci5fc2VuZENvbGxhYm9yYXRpb25NZXNzYWdlRm9yRmlsZVVwbG9hZGVyKGZpbGVVcGxvYWRlciwgQWN0aXZpdHkuTG9jayk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBzZW5kIGNvbGxhYm9yYXRpb24gbWVzc2FnZXMgZnJvbSBhIEZpbGVVcGxvYWRlci5cblx0ICogQHBhcmFtIGZpbGVVcGxvYWRlclxuXHQgKiBAcGFyYW0gYWN0aW9uXG5cdCAqL1xuXHRfc2VuZENvbGxhYm9yYXRpb25NZXNzYWdlRm9yRmlsZVVwbG9hZGVyKGZpbGVVcGxvYWRlcjogRmlsZVVwbG9hZGVyLCBhY3Rpb246IEFjdGl2aXR5KTogdm9pZCB7XG5cdFx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcoZmlsZVVwbG9hZGVyKTtcblx0XHRjb25zdCBjb2xsYWJvcmF0aXZlRHJhZnQgPSB2aWV3LmdldENvbnRyb2xsZXIoKS5jb2xsYWJvcmF0aXZlRHJhZnQ7XG5cdFx0aWYgKGNvbGxhYm9yYXRpdmVEcmFmdC5pc0Nvbm5lY3RlZCgpKSB7XG5cdFx0XHRjb25zdCBiaW5kaW5nUGF0aCA9IGZpbGVVcGxvYWRlci5nZXRQYXJlbnQoKT8uZ2V0UHJvcGVydHkoXCJwcm9wZXJ0eVBhdGhcIik7XG5cdFx0XHRjb25zdCBmdWxsUGF0aCA9IGAke2ZpbGVVcGxvYWRlci5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCl9LyR7YmluZGluZ1BhdGh9YDtcblx0XHRcdGNvbGxhYm9yYXRpdmVEcmFmdC5zZW5kKHsgYWN0aW9uLCBjb250ZW50OiBmdWxsUGF0aCB9KTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIEhhbmRsZXIgd2hlbiBhIEZpbGVVcGxvYWQgZGlhbG9nIGlzIGNsb3NlZC5cblx0ICogQHBhcmFtIGV2ZW50XG5cdCAqL1xuXHRoYW5kbGVDbG9zZVVwbG9hZGVyOiBmdW5jdGlvbiAoZXZlbnQ6IEV2ZW50PHt9LCBGaWxlVXBsb2FkZXI+KTogdm9pZCB7XG5cdFx0Y29uc3QgZmlsZVVwbG9hZGVyID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0RmllbGRSdW50aW1lSGVscGVyLl9zZW5kQ29sbGFib3JhdGlvbk1lc3NhZ2VGb3JGaWxlVXBsb2FkZXIoZmlsZVVwbG9hZGVyLCBBY3Rpdml0eS5VbmxvY2spO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBPcGVucyBhbiBleHRlcm5hbCBsaW5rIGluIHRoZSBzYW1lIHRhYi5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIFVSTCBmcm9tIHRoZSBsaW5rJ3MgZGF0YSBhbmQgb3BlbnMgaXQgaW4gdGhlIHNhbWUgdGFiLlxuXHQgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IG9iamVjdCBjb250YWluaW5nIGRldGFpbHMgYWJvdXQgdGhlIGxpbmsgY2xpY2suXG5cdCAqL1xuXHRvcGVuRXh0ZXJuYWxMaW5rOiBmdW5jdGlvbiAoZXZlbnQ6IEV2ZW50PHt9LCBMaW5rPik6IHZvaWQge1xuXHRcdGNvbnN0IHNvdXJjZSA9IGV2ZW50LmdldFNvdXJjZSgpO1xuXHRcdGlmIChzb3VyY2UuZGF0YShcInVybFwiKSAmJiBzb3VyY2UuZ2V0UHJvcGVydHkoXCJ0ZXh0XCIpICE9PSBcIlwiKSB7XG5cdFx0XHQvLyBUaGlzIG9wZW5zIHRoZSBsaW5rIGluIHRoZSBzYW1lIHRhYiBhcyB0aGUgbGluay4gSXQgd2FzIGRvbmUgdG8gYmUgbW9yZSBjb25zaXN0ZW50IHdpdGggb3RoZXIgdHlwZSBvZiBsaW5rcy5cblx0XHRcdG9wZW5XaW5kb3coc291cmNlLmRhdGEoXCJ1cmxcIiksIFwiX3NlbGZcIik7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGljb24gZm9yIGEgZ2l2ZW4gTUlNRSB0eXBlLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIGBJY29uUG9vbGAgdG8gZ2V0IHRoZSBhcHByb3ByaWF0ZSBpY29uIGZvciB0aGUgc3BlY2lmaWVkIE1JTUUgdHlwZS5cblx0ICogQHBhcmFtIG1pbWVUeXBlIFRoZSBNSU1FIHR5cGUgZm9yIHdoaWNoIHRoZSBpY29uIGlzIHRvIGJlIHJldHJpZXZlZFxuXHQgKiBAcmV0dXJucyBUaGUgaWNvbiBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBNSU1FIHR5cGVcblx0ICovXG5cdGdldEljb25Gb3JNaW1lVHlwZTogZnVuY3Rpb24gKG1pbWVUeXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdHJldHVybiBJY29uUG9vbC5nZXRJY29uRm9yTWltZVR5cGUobWltZVR5cGUpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBUcmlnZ2VycyBhbiBpbnRlcm5hbCBuYXZpZ2F0aW9uIG9uIHRoZSBsaW5rIHBlcnRhaW5pbmcgdG8gRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoLlxuXHQgKiBAcGFyYW0gc291cmNlIFNvdXJjZSBvZiB0aGUgcHJlc3MgZXZlbnRcblx0ICogQHBhcmFtIGNvbnRyb2xsZXIgSW5zdGFuY2Ugb2YgdGhlIGNvbnRyb2xsZXJcblx0ICogQHBhcmFtIG5hdlBhdGggVGhlIG5hdmlnYXRpb24gcGF0aFxuXHQgKi9cblx0b25EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6IGFzeW5jIGZ1bmN0aW9uIChzb3VyY2U6IENvbnRyb2wsIGNvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyLCBuYXZQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAoY29udHJvbGxlci5fcm91dGluZykge1xuXHRcdFx0Y29uc3QgYmluZGluZ0NvbnRleHQgPSBzb3VyY2UuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0O1xuXG5cdFx0XHRjb25zdCB2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyhzb3VyY2UpLFxuXHRcdFx0XHRtZXRhTW9kZWwgPSBiaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0Y29uc3Qgdmlld0RhdGEgPSB2aWV3LmdldFZpZXdEYXRhKCk7XG5cblx0XHRcdGNvbnN0IGRyYWZ0Um9vdFBhdGggPSBNb2RlbEhlbHBlci5nZXREcmFmdFJvb3RQYXRoKGJpbmRpbmdDb250ZXh0KSA/PyBiaW5kaW5nQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRsZXQgdXJsTmF2aWdhdGlvbiA9IGF3YWl0IGNvbnRyb2xsZXIuX3JvdXRpbmcuZ2V0SGFzaEZvck5hdmlnYXRpb24oYmluZGluZ0NvbnRleHQsIG5hdlBhdGgpO1xuXHRcdFx0Y29uc3QgbmF2aWdhdGVGbiA9ICgpOiB2b2lkID0+IHtcblx0XHRcdFx0Y29udHJvbGxlclxuXHRcdFx0XHRcdC5nZXRBcHBDb21wb25lbnQoKVxuXHRcdFx0XHRcdC5nZXRSb3V0ZXJQcm94eSgpXG5cdFx0XHRcdFx0Lm5hdlRvSGFzaChcblx0XHRcdFx0XHRcdHVybE5hdmlnYXRpb24sXG5cdFx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdCFNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQoYmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0fTtcblxuXHRcdFx0Ly8gVG8ga25vdyBpZiB3ZSdyZSBuYXZpZ2F0aW5nIG9uIHRoZSBzYW1lIE9QIEVudGl0eVxuXHRcdFx0aWYgKCF1cmxOYXZpZ2F0aW9uPy5zdGFydHNXaXRoKFwiL1wiKSkge1xuXHRcdFx0XHR1cmxOYXZpZ2F0aW9uID0gYC8ke3VybE5hdmlnYXRpb259YDtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHNhbWVPUE5hdmlnYXRpb24gPSB1cmxOYXZpZ2F0aW9uLnN0YXJ0c1dpdGgoZHJhZnRSb290UGF0aCk7XG5cblx0XHRcdC8vIFNob3cgZHJhZnQgbG9zcyBjb25maXJtYXRpb24gZGlhbG9nIGluIGNhc2Ugb2YgT2JqZWN0IHBhZ2Vcblx0XHRcdGlmICh2aWV3RGF0YS5jb252ZXJ0ZXJUeXBlID09PSBcIk9iamVjdFBhZ2VcIiAmJiAhTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG1ldGFNb2RlbCkgJiYgIXNhbWVPUE5hdmlnYXRpb24pIHtcblx0XHRcdFx0ZHJhZnQucHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24oXG5cdFx0XHRcdFx0bmF2aWdhdGVGbixcblx0XHRcdFx0XHRGdW5jdGlvbi5wcm90b3R5cGUsXG5cdFx0XHRcdFx0YmluZGluZ0NvbnRleHQsXG5cdFx0XHRcdFx0dmlldy5nZXRDb250cm9sbGVyKCksXG5cdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHRkcmFmdC5OYXZpZ2F0aW9uVHlwZS5Gb3J3YXJkTmF2aWdhdGlvblxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bmF2aWdhdGVGbigpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRMb2cuZXJyb3IoXG5cdFx0XHRcdFwiRmllbGRSdW50aW1lOiBObyByb3V0aW5nIGxpc3RlbmVyIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIGZvdW5kLiBJbnRlcm5hbCBuYXZpZ2F0aW9uIGFib3J0ZWQuXCIsXG5cdFx0XHRcdFwic2FwLmZlLm1hY3Jvcy5maWVsZC5GaWVsZFJ1bnRpbWVcIixcblx0XHRcdFx0XCJvbkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aFwiXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxufTtcblxuZXhwb3J0IGRlZmF1bHQgRmllbGRSdW50aW1lSGVscGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0VBZ0VBLE1BQU1BLGtCQUFrQixHQUFHO0lBQzFCQyxjQUFjLEVBQUUsQ0FBQyxDQUE0RDtJQUM3RUMsbUJBQW1CLEVBQUUsS0FBSztJQUUxQkMsb0JBQW9CLEVBQUUsU0FBQUEsQ0FBVUMsS0FBYyxFQUFFQyxVQUF5QyxFQUFRO01BQ2hHLE1BQU1DLElBQUksR0FBR0MsV0FBVyxDQUFDQyxhQUFhLENBQUNK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
496
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWVsZFJ1bnRpbWVIZWxwZXIiLCJ1cGxvYWRQcm9taXNlcyIsImNyZWF0aW5nSW5hY3RpdmVSb3ciLCJmZXRjaFJlY29tbWVuZGF0aW9ucyIsImZpZWxkIiwiY29udHJvbGxlciIsInZpZXciLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJmaWVsZEJpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJyZWNvbW1lbmRhdGlvbnNDb250ZXh0IiwiZmllbGRCaW5kaW5nIiwiZ2V0QmluZGluZyIsImlzQSIsImZlQ29udHJvbGxlciIsImdldEV4dGVuc2lvbkNvbnRyb2xsZXIiLCJ2YWx1ZUhlbHBJZCIsImdldFZhbHVlSGVscCIsIm1ldGFQYXRoIiwiTW9kZWxIZWxwZXIiLCJnZXRNZXRhUGF0aEZvckNvbnRleHQiLCJwcm9wZXJ0eVBhdGgiLCJkYXRhIiwicmVwbGFjZSIsImZpZWxkUGF0aCIsImdldFBhdGgiLCJzZWxlY3RlZFZhbHVlIiwiZ2V0VmFsdWUiLCJyZWNvbW1lbmRhdGlvbnMiLCJ1cGRhdGVUZWxlbWV0cnlEYXRhQmFzZWRPblVzZXJTZWxlY3Rpb24iLCJpbmNsdWRlcyIsInRhYmxlSWQiLCJzdWJzdHJpbmciLCJpbmRleE9mIiwidGFibGUiLCJieUlkIiwiY29udGV4dElkZW50aWZpZXIiLCJnZXRQYXJlbnQiLCJnZXRJZGVudGlmaWVyQ29sdW1uIiwiZmV0Y2hBbmRBcHBseVJlY29tbWVuZGF0aW9uc09uRmllbGRDaGFuZ2UiLCJjb250ZXh0Iiwib0NvbnRyb2xsZXIiLCJfY29udHJvbGxlciIsImdldEZpZWxkU3RhdGVPbkNoYW5nZSIsIm9FdmVudCIsIm9Tb3VyY2VGaWVsZCIsImdldFNvdXJjZSIsIm1GaWVsZFN0YXRlIiwiX2lzQmluZGluZ1N0YXRlTWVzc2FnZXMiLCJvQmluZGluZyIsImdldERhdGFTdGF0ZSIsImdldEludmFsaWRWYWx1ZSIsInVuZGVmaW5lZCIsImdldENvbnRlbnQiLCJGaWVsZFdyYXBwZXIiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJnZXRFZGl0TW9kZSIsImdldENvbnRlbnRFZGl0IiwiYklzVmFsaWQiLCJnZXRQYXJhbWV0ZXIiLCJnZXRNYXhDb25kaXRpb25zIiwib1ZhbHVlQmluZGluZ0luZm8iLCJnZXRCaW5kaW5nSW5mbyIsImJpbmRpbmciLCJnZXRQcm9wZXJ0eSIsImZpZWxkVmFsdWUiLCJ2YWxpZGl0eSIsInN0YXRlIiwicHJlc3NMaW5rIiwib1NvdXJjZSIsInNhcG1MaW5rIiwiZmluZEVsZW1lbnRzIiwiZWxlbSIsImdldERlcGVuZGVudHMiLCJsZW5ndGgiLCJvRmllbGRJbmZvIiwib3BlbkxpbmsiLCJtZGNMaW5rIiwiaFJlZiIsImdldFRyaWdnZXJIcmVmIiwiX3VzZURlbGVnYXRlSXRlbXMiLCJsaW5rSXRlbXMiLCJyZXRyaWV2ZUxpbmtJdGVtcyIsImdldFBheWxvYWQiLCJoYXNRdWlja1ZpZXdGYWNldHMiLCJwb3BvdmVyIiwiY3JlYXRlUG9wb3ZlcldpdGhOb1RhcmdldHMiLCJhZGREZXBlbmRlbnQiLCJvcGVuQnkiLCJvcGVuIiwiZXJyb3IiLCJMb2ciLCJhcHBDb21wb25lbnQiLCJnZXRBcHBDb21wb25lbnQiLCJzaGVsbFNlcnZpY2UiLCJnZXRTaGVsbFNlcnZpY2VzIiwic2hlbGxIYXNoIiwicGFyc2VTaGVsbEhhc2giLCJuYXZBcmdzIiwidGFyZ2V0Iiwic2VtYW50aWNPYmplY3QiLCJhY3Rpb24iLCJwYXJhbXMiLCJLZWVwQWxpdmVIZWxwZXIiLCJzdG9yZUNvbnRyb2xSZWZyZXNoU3RyYXRlZ3lGb3JIYXNoIiwiaXNTdGlja3lFZGl0TW9kZSIsIm5hdmlnYXRlIiwibmV3SHJlZiIsImhyZWZGb3JFeHRlcm5hbCIsIm9wZW5XaW5kb3ciLCJtZGNMaW5rSWQiLCJnZXRJZCIsImlsbHVzdHJhdGVkTWVzc2FnZVNldHRpbmdzIiwidGl0bGUiLCJnZXRSZXNvdXJjZU1vZGVsIiwiZ2V0VGV4dCIsImRlc2NyaXB0aW9uIiwiZW5hYmxlRm9ybWF0dGVkVGV4dCIsImlsbHVzdHJhdGlvblNpemUiLCJJbGx1c3RyYXRlZE1lc3NhZ2VTaXplIiwiRXh0cmFTbWFsbCIsImlsbHVzdHJhdGlvblR5cGUiLCJJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlIiwiTm9EYXRhIiwiaWxsdXN0cmF0ZWRNZXNzYWdlIiwiSWxsdXN0cmF0ZWRNZXNzYWdlIiwicG9wb3ZlclNldHRpbmdzIiwiaG9yaXpvbnRhbFNjcm9sbGluZyIsInNob3dIZWFkZXIiLCJEZXZpY2UiLCJzeXN0ZW0iLCJwaG9uZSIsInBsYWNlbWVudCIsIm1vYmlsZWxpYnJhcnkiLCJQbGFjZW1lbnRUeXBlIiwiQXV0byIsImNvbnRlbnQiLCJhZnRlckNsb3NlIiwiZXZlbnQiLCJkZXN0cm95IiwiUmVzcG9uc2l2ZVBvcG92ZXIiLCJoYW5kbGVUeXBlTWlzc21hdGNoIiwiZmlsZVVwbG9hZGVyIiwiZ2l2ZW5UeXBlIiwiYWNjZXB0ZWRUeXBlcyIsImdldE1pbWVUeXBlIiwic2hvd1R5cGVNaXNtYXRjaERpYWxvZyIsImhhbmRsZUZpbGVTaXplRXhjZWVkIiwic2hvd0ZpbGVTaXplRXhjZWVkRGlhbG9nIiwiZ2V0TWF4aW11bUZpbGVTaXplIiwidG9GaXhlZCIsImhhbmRsZVVwbG9hZENvbXBsZXRlIiwicHJvcGVydHlGaWxlTmFtZSIsInN0YXR1cyIsIk51bWJlciIsImZpbGVXcmFwcGVyIiwic2V0VUlCdXN5IiwiZGlzcGxheU1lc3NhZ2VGb3JGYWlsZWRVcGxvYWQiLCJyZWplY3QiLCJuZXdFVGFnIiwiZXRhZyIsInNldFByb3BlcnR5IiwicGF0aCIsImF2YXRhciIsInJlZnJlc2hBdmF0YXJDYWNoZUJ1c3RpbmciLCJfY2FsbFNpZGVFZmZlY3RzRm9yU3RyZWFtIiwicmVzb2x2ZSIsImZpcmVFdmVudCIsImlzQ29sbGFib3JhdGlvbkVuYWJsZWQiLCJjb2xsYWJvcmF0aXZlRHJhZnQiLCJpc0Nvbm5lY3RlZCIsIm5vdGlmaWNhdGlvbkRhdGEiLCJwdXNoIiwib1ZpZXciLCJoYXNQZW5kaW5nQ2hhbmdlcyIsImF0dGFjaEV2ZW50T25jZSIsInNlbmQiLCJBY3Rpdml0eSIsIkNoYW5nZSIsIlVubG9jayIsInJlbW92ZVN0cmVhbSIsImRlbGV0ZUJ1dHRvbiIsImJDb2xsYWJvcmF0aW9uRW5hYmxlZCIsIkxvY2siLCJvQ29udHJvbCIsIm9GRUNvbnRyb2xsZXIiLCJpc1RyYW5zaWVudCIsIl9zaWRlRWZmZWN0cyIsImhhbmRsZUZpZWxkQ2hhbmdlIiwidXBsb2FkU3RyZWFtIiwiRkVDb250cm9sbGVyIiwidXBsb2FkVXJsIiwiZ2V0VXBsb2FkVXJsIiwic2V0VXBsb2FkVXJsIiwiZmlsZXMiLCJmaWxlVHlwZSIsInR5cGUiLCJzZXRIZWFkZXJGaWVsZHMiLCJ1cGxvYWRQcm9taXNlIiwiUHJvbWlzZSIsInVwbG9hZCIsImVkaXRGbG93Iiwic3luY1Rhc2siLCJNZXNzYWdlQm94IiwiaGFuZGxlT3BlblVwbG9hZGVyIiwiX3NlbmRDb2xsYWJvcmF0aW9uTWVzc2FnZUZvckZpbGVVcGxvYWRlciIsImdldENvbnRyb2xsZXIiLCJiaW5kaW5nUGF0aCIsImZ1bGxQYXRoIiwiaGFuZGxlQ2xvc2VVcGxvYWRlciIsIm9wZW5FeHRlcm5hbExpbmsiLCJzb3VyY2UiLCJnZXRJY29uRm9yTWltZVR5cGUiLCJtaW1lVHlwZSIsIkljb25Qb29sIiwib25EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgiLCJuYXZQYXRoIiwiX3JvdXRpbmciLCJiaW5kaW5nQ29udGV4dCIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwidmlld0RhdGEiLCJnZXRWaWV3RGF0YSIsImRyYWZ0Um9vdFBhdGgiLCJnZXREcmFmdFJvb3RQYXRoIiwidXJsTmF2aWdhdGlvbiIsImdldEhhc2hGb3JOYXZpZ2F0aW9uIiwiaXNTdGlja3lNb2RlIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiaXNIaWRkZW5EcmFmdEVuYWJsZWQiLCJnZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcyIsImdldENhcGFiaWxpdGllcyIsIkhpZGRlbkRyYWZ0IiwiZW5hYmxlZCIsIm5hdmlnYXRlRm4iLCJnZXRSb3V0ZXJQcm94eSIsIm5hdlRvSGFzaCIsInN0YXJ0c1dpdGgiLCJzYW1lT1BOYXZpZ2F0aW9uIiwiY29udmVydGVyVHlwZSIsImRyYWZ0IiwicHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24iLCJGdW5jdGlvbiIsInByb3RvdHlwZSIsIk5hdmlnYXRpb25UeXBlIiwiRm9yd2FyZE5hdmlnYXRpb24iXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkZpZWxkUnVudGltZUhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgRW5oYW5jZVdpdGhVSTUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBFeHRlbnNpb25BUEkgZnJvbSBcInNhcC9mZS9jb3JlL0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgeyBBY3Rpdml0eSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9jb2xsYWJvcmF0aW9uL0NvbGxhYm9yYXRpb25Db21tb25cIjtcbmltcG9ydCBkcmFmdCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvZHJhZnRcIjtcbmltcG9ydCBLZWVwQWxpdmVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvS2VlcEFsaXZlSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdldFJlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBUZXh0TGluayBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jb250cm9scy9UZXh0TGlua1wiO1xuaW1wb3J0IHR5cGUgeyBMaW5rRGVsZWdhdGVQYXlsb2FkIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvcXVpY2tWaWV3L1F1aWNrVmlld0RlbGVnYXRlXCI7XG5pbXBvcnQgdHlwZSB7IEJ1dHRvbiRQcmVzc0V2ZW50IH0gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuXG5pbXBvcnQgdHlwZSBDaGVja0JveCBmcm9tIFwic2FwL20vQ2hlY2tCb3hcIjtcbmltcG9ydCB0eXBlIHsgQ2hlY2tCb3gkU2VsZWN0RXZlbnRQYXJhbWV0ZXJzIH0gZnJvbSBcInNhcC9tL0NoZWNrQm94XCI7XG5pbXBvcnQgdHlwZSB7ICRJbGx1c3RyYXRlZE1lc3NhZ2VTZXR0aW5ncyB9IGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VcIjtcbmltcG9ydCBJbGx1c3RyYXRlZE1lc3NhZ2UgZnJvbSBcInNhcC9tL0lsbHVzdHJhdGVkTWVzc2FnZVwiO1xuXG5pbXBvcnQgdHlwZSB7IEhpZGRlbkRyYWZ0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IElsbHVzdHJhdGVkTWVzc2FnZVNpemUgZnJvbSBcInNhcC9tL0lsbHVzdHJhdGVkTWVzc2FnZVNpemVcIjtcbmltcG9ydCBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgdHlwZSBJbnB1dEJhc2UgZnJvbSBcInNhcC9tL0lucHV0QmFzZVwiO1xuaW1wb3J0IHR5cGUgeyBJbnB1dEJhc2UkQ2hhbmdlRXZlbnRQYXJhbWV0ZXJzIH0gZnJvbSBcInNhcC9tL0lucHV0QmFzZVwiO1xuaW1wb3J0IHR5cGUgTGluayBmcm9tIFwic2FwL20vTGlua1wiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCB0eXBlIE9iamVjdElkZW50aWZpZXIgZnJvbSBcInNhcC9tL09iamVjdElkZW50aWZpZXJcIjtcbmltcG9ydCB0eXBlIFJhdGluZ0luZGljYXRvciBmcm9tIFwic2FwL20vUmF0aW5nSW5kaWNhdG9yXCI7XG5pbXBvcnQgdHlwZSB7IFJhdGluZ0luZGljYXRvciRDaGFuZ2VFdmVudFBhcmFtZXRlcnMgfSBmcm9tIFwic2FwL20vUmF0aW5nSW5kaWNhdG9yXCI7XG5pbXBvcnQgdHlwZSB7ICRSZXNwb25zaXZlUG9wb3ZlclNldHRpbmdzIH0gZnJvbSBcInNhcC9tL1Jlc3BvbnNpdmVQb3BvdmVyXCI7XG5pbXBvcnQgUmVzcG9uc2l2ZVBvcG92ZXIgZnJvbSBcInNhcC9tL1Jlc3BvbnNpdmVQb3BvdmVyXCI7XG5pbXBvcnQgbW9iaWxlbGlicmFyeSBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IERldmljZSBmcm9tIFwic2FwL3VpL0RldmljZVwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIEV2ZW50LCBkZWZhdWx0IGFzIFVJNUV2ZW50IH0gZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgSWNvblBvb2wgZnJvbSBcInNhcC91aS9jb3JlL0ljb25Qb29sXCI7XG5pbXBvcnQgdHlwZSB7IEZpZWxkJENoYW5nZUV2ZW50LCBGaWVsZCRDaGFuZ2VFdmVudFBhcmFtZXRlcnMsIGRlZmF1bHQgYXMgbWRjRmllbGQgfSBmcm9tIFwic2FwL3VpL21kYy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgTWRjTGluayBmcm9tIFwic2FwL3VpL21kYy9MaW5rXCI7XG5pbXBvcnQgdHlwZSBEYXRhU3RhdGUgZnJvbSBcInNhcC91aS9tb2RlbC9EYXRhU3RhdGVcIjtcbmltcG9ydCB0eXBlIFByb3BlcnR5QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL1Byb3BlcnR5QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIEZpbGVVcGxvYWRlciBmcm9tIFwic2FwL3VpL3VuaWZpZWQvRmlsZVVwbG9hZGVyXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEZpbGVVcGxvYWRlciRDaGFuZ2VFdmVudCxcblx0RmlsZVVwbG9hZGVyJEZpbGVTaXplRXhjZWVkRXZlbnQsXG5cdEZpbGVVcGxvYWRlciRUeXBlTWlzc21hdGNoRXZlbnQsXG5cdEZpbGVVcGxvYWRlciRVcGxvYWRDb21wbGV0ZUV2ZW50XG59IGZyb20gXCJzYXAvdWkvdW5pZmllZC9GaWxlVXBsb2FkZXJcIjtcbmltcG9ydCBvcGVuV2luZG93IGZyb20gXCJzYXAvdWkvdXRpbC9vcGVuV2luZG93XCI7XG5pbXBvcnQgdHlwZSBGaWVsZCBmcm9tIFwiLi4vRmllbGRcIjtcbmltcG9ydCBGaWVsZFdyYXBwZXIgZnJvbSBcIi4uL2NvbnRyb2xzL0ZpZWxkV3JhcHBlclwiO1xuaW1wb3J0IHR5cGUgRmlsZVdyYXBwZXIgZnJvbSBcIi4uL2NvbnRyb2xzL0ZpbGVXcmFwcGVyXCI7XG5pbXBvcnQge1xuXHRkaXNwbGF5TWVzc2FnZUZvckZhaWxlZFVwbG9hZCxcblx0c2V0SGVhZGVyRmllbGRzLFxuXHRzaG93RmlsZVNpemVFeGNlZWREaWFsb2csXG5cdHNob3dUeXBlTWlzbWF0Y2hEaWFsb2dcbn0gZnJvbSBcIi4uL2ludGVybmFsL2hlbHBlcnMvVXBsb2FkXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwiLi4vdGFibGUvVGFibGVBUElcIjtcblxudHlwZSBGaWxlID0ge1xuXHR0eXBlOiBzdHJpbmc7XG59O1xuXG5jb25zdCBGaWVsZFJ1bnRpbWVIZWxwZXIgPSB7XG5cdHVwbG9hZFByb21pc2VzOiB7fSBhcyBSZWNvcmQ8c3RyaW5nLCB7IHJlc29sdmU6IEZ1bmN0aW9uOyByZWplY3Q6IEZ1bmN0aW9uIH0+LFxuXHRjcmVhdGluZ0luYWN0aXZlUm93OiBmYWxzZSxcblxuXHRmZXRjaFJlY29tbWVuZGF0aW9uczogZnVuY3Rpb24gKGZpZWxkOiBDb250cm9sLCBjb250cm9sbGVyOiBQYWdlQ29udHJvbGxlciB8IEV4dGVuc2lvbkFQSSk6IHZvaWQge1xuXHRcdGNvbnN0IHZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KGZpZWxkKTtcblx0XHRjb25zdCBmaWVsZEJpbmRpbmdDb250ZXh0ID0gZmllbGQuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRsZXQgcmVjb21tZW5kYXRpb25zQ29udGV4dDogQ29udGV4dDtcblxuXHRcdC8vIGRldGVybWluZSByZWNvbW1lbmRhdGlvbiBjb250ZXh0IHRvIHVzZVxuXHRcdGNvbnN0IGZpZWxkQmluZGluZyA9IChmaWVsZEJpbmRpbmdDb250ZXh0IGFzIENvbnRleHQpPy5nZXRCaW5kaW5nKCk7XG5cblx0XHRpZiAoZmllbGRCaW5kaW5nLmlzQShcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCIpKSB7XG5cdFx0XHQvLyBpbnNpZGUgYSB0YWJsZSwgdXNlIHRoZSByb3dcblx0XHRcdHJlY29tbWVuZGF0aW9uc0NvbnRleHQgPSBmaWVsZEJpbmRpbmdDb250ZXh0IGFzIENvbnRleHQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGluc2lkZSBhIGZvcm0gbm93XG5cdFx0XHQvLyBjYW4gaGF2ZSAxLTEgbmF2aWdhdGlvbiBwcm9wZXJ0eS9kaXJlY3QgcHJvcGVydHkgLSB1c2UgdmlldyBjb250ZXh0XG5cdFx0XHRyZWNvbW1lbmRhdGlvbnNDb250ZXh0ID0gdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdH1cblx0XHRjb25zdCBmZUNvbnRyb2xsZXIgPSBGaWVsZFJ1bnRpbWVIZWxwZXIuZ2V0RXh0ZW5zaW9uQ29udHJvbGxlcihjb250cm9sbGVyKTtcblx0XHRjb25zdCB2YWx1ZUhlbHBJZCA9IGZpZWxkLmlzQTxtZGNGaWVsZD4oXCJzYXAudWkubWRjLkZpZWxkXCIpICYmIGZpZWxkLmdldFZhbHVlSGVscCgpO1xuXHRcdC8vIHVwZGF0ZSB0ZWxlbWV0cnkgZGF0YSBhcyBwZXIgdXNlciBzZWxlY3Rpb25cblx0XHRjb25zdCBtZXRhUGF0aCA9IE1vZGVsSGVscGVyLmdldE1ldGFQYXRoRm9yQ29udGV4dChmaWVsZC5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQpO1xuXHRcdGNvbnN0IHByb3BlcnR5UGF0aCA9IGZpZWxkLmRhdGEoXCJzb3VyY2VQYXRoXCIpLnJlcGxhY2UobWV0YVBhdGgsIFwiXCIpO1xuXHRcdGNvbnN0IGZpZWxkUGF0aCA9IGAke2ZpZWxkLmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKX0ke3Byb3BlcnR5UGF0aH1gO1xuXHRcdGNvbnN0IHNlbGVjdGVkVmFsdWUgPSBmaWVsZC5pc0E8bWRjRmllbGQ+KFwic2FwLnVpLm1kYy5GaWVsZFwiKSAmJiBmaWVsZC5nZXRWYWx1ZSgpO1xuXHRcdGZlQ29udHJvbGxlci5yZWNvbW1lbmRhdGlvbnMudXBkYXRlVGVsZW1ldHJ5RGF0YUJhc2VkT25Vc2VyU2VsZWN0aW9uKGZpZWxkUGF0aCwgc2VsZWN0ZWRWYWx1ZSk7XG5cblx0XHRpZiAodmFsdWVIZWxwSWQgJiYgdmFsdWVIZWxwSWQuaW5jbHVkZXMoXCI6OlRhYmxlVmFsdWVIZWxwOjpcIikpIHtcblx0XHRcdGNvbnN0IHRhYmxlSWQgPSB2YWx1ZUhlbHBJZC5zdWJzdHJpbmcoMCwgdmFsdWVIZWxwSWQuaW5kZXhPZihcIjo6VGFibGVWYWx1ZUhlbHA6OlwiKSk7XG5cdFx0XHRjb25zdCB0YWJsZSA9IHZpZXcuYnlJZCh0YWJsZUlkKTtcblx0XHRcdGNvbnN0IGNvbnRleHRJZGVudGlmaWVyID0gKHRhYmxlPy5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSk/LmdldElkZW50aWZpZXJDb2x1bW4oKSBhcyBzdHJpbmdbXTtcblx0XHRcdGZlQ29udHJvbGxlci5yZWNvbW1lbmRhdGlvbnMuZmV0Y2hBbmRBcHBseVJlY29tbWVuZGF0aW9uc09uRmllbGRDaGFuZ2UoZmllbGQsIHtcblx0XHRcdFx0Y29udGV4dDogcmVjb21tZW5kYXRpb25zQ29udGV4dCxcblx0XHRcdFx0Y29udGV4dElkZW50aWZpZXJcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRmZUNvbnRyb2xsZXIucmVjb21tZW5kYXRpb25zLmZldGNoQW5kQXBwbHlSZWNvbW1lbmRhdGlvbnNPbkZpZWxkQ2hhbmdlKGZpZWxkLCB7IGNvbnRleHQ6IHJlY29tbWVuZGF0aW9uc0NvbnRleHQgfSk7XG5cdFx0fVxuXHR9LFxuXG5cdGdldEV4dGVuc2lvbkNvbnRyb2xsZXI6IGZ1bmN0aW9uIChvQ29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIgfCBFeHRlbnNpb25BUEkpOiBQYWdlQ29udHJvbGxlciB7XG5cdFx0cmV0dXJuIG9Db250cm9sbGVyLmlzQTxFeHRlbnNpb25BUEk+KFwic2FwLmZlLmNvcmUuRXh0ZW5zaW9uQVBJXCIpID8gb0NvbnRyb2xsZXIuX2NvbnRyb2xsZXIgOiBvQ29udHJvbGxlcjtcblx0fSxcblxuXHQvKipcblx0ICogR2V0cyB0aGUgZmllbGQgdmFsdWUgYW5kIHZhbGlkaXR5IG9uIGEgY2hhbmdlIGV2ZW50LlxuXHQgKiBAcGFyYW0gb0V2ZW50IFRoZSBldmVudCBvYmplY3QgcGFzc2VkIGJ5IHRoZSBjaGFuZ2UgZXZlbnRcblx0ICogQHJldHVybnMgRmllbGQgdmFsdWUgYW5kIHZhbGlkaXR5XG5cdCAqL1xuXHRnZXRGaWVsZFN0YXRlT25DaGFuZ2U6IGZ1bmN0aW9uIChcblx0XHRvRXZlbnQ6IFVJNUV2ZW50PFxuXHRcdFx0fCB7IHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkOyBpc1ZhbGlkOiBib29sZWFuIH1cblx0XHRcdHwgQ2hlY2tCb3gkU2VsZWN0RXZlbnRQYXJhbWV0ZXJzXG5cdFx0XHR8IElucHV0QmFzZSRDaGFuZ2VFdmVudFBhcmFtZXRlcnNcblx0XHRcdHwgRmllbGQkQ2hhbmdlRXZlbnRQYXJhbWV0ZXJzXG5cdFx0XHR8IFJhdGluZ0luZGljYXRvciRDaGFuZ2VFdmVudFBhcmFtZXRlcnMsXG5cdFx0XHRDaGVja0JveCB8IElucHV0QmFzZSB8IG1kY0ZpZWxkIHwgUmF0aW5nSW5kaWNhdG9yIHwgRmllbGRcblx0XHQ+XG5cdCk6IHtcblx0XHRmaWVsZDogQ29udHJvbDtcblx0XHRzdGF0ZToge1xuXHRcdFx0ZmllbGRWYWx1ZT86IHVua25vd247XG5cdFx0XHR2YWxpZGl0eTogYm9vbGVhbjtcblx0XHR9O1xuXHR9IHtcblx0XHRsZXQgb1NvdXJjZUZpZWxkID0gb0V2ZW50LmdldFNvdXJjZSgpLFxuXHRcdFx0bUZpZWxkU3RhdGU6IHtcblx0XHRcdFx0ZmllbGRWYWx1ZT86IHVua25vd247XG5cdFx0XHRcdHZhbGlkaXR5OiBib29sZWFuO1xuXHRcdFx0fTtcblx0XHRjb25zdCBfaXNCaW5kaW5nU3RhdGVNZXNzYWdlcyA9IGZ1bmN0aW9uIChvQmluZGluZzogUHJvcGVydHlCaW5kaW5nICYgeyBnZXREYXRhU3RhdGU6ICgpID0+IERhdGFTdGF0ZSB9KTogYm9vbGVhbiB7XG5cdFx0XHRyZXR1cm4gb0JpbmRpbmcgJiYgb0JpbmRpbmcuZ2V0RGF0YVN0YXRlKCkgPyBvQmluZGluZy5nZXREYXRhU3RhdGUoKS5nZXRJbnZhbGlkVmFsdWUoKSA9PT0gdW5kZWZpbmVkIDogdHJ1ZTtcblx0XHR9O1xuXHRcdGlmIChvU291cmNlRmllbGQuaXNBPG1kY0ZpZWxkPihcInNhcC5mZS5tYWNyb3MuZmllbGQuRmllbGRcIikpIHtcblx0XHRcdG9Tb3VyY2VGaWVsZCA9IG9Tb3VyY2VGaWVsZC5nZXRDb250ZW50KCkgYXMgbWRjRmllbGQ7XG5cdFx0fVxuXHRcdGlmIChvU291cmNlRmllbGQuaXNBPEVuaGFuY2VXaXRoVUk1PEZpZWxkPj4oXCJzYXAuZmUubWFjcm9zLkZpZWxkXCIpKSB7XG5cdFx0XHRvU291cmNlRmllbGQgPSBvU291cmNlRmllbGQuZ2V0Q29udGVudCgpIGFzIG1kY0ZpZWxkO1xuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdG9Tb3VyY2VGaWVsZC5pc0E8RW5oYW5jZVdpdGhVSTU8RmllbGRXcmFwcGVyPj4oRmllbGRXcmFwcGVyLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpKSAmJlxuXHRcdFx0b1NvdXJjZUZpZWxkLmdldEVkaXRNb2RlKCkgPT09IFwiRWRpdGFibGVcIlxuXHRcdCkge1xuXHRcdFx0b1NvdXJjZUZpZWxkID0gKG9Tb3VyY2VGaWVsZCBhcyBFbmhhbmNlV2l0aFVJNTxGaWVsZFdyYXBwZXI+KS5nZXRDb250ZW50RWRpdCgpWzBdIGFzIG1kY0ZpZWxkO1xuXHRcdH1cblxuXHRcdGlmIChvU291cmNlRmllbGQ/LmlzQTxtZGNGaWVsZD4oXCJzYXAudWkubWRjLkZpZWxkXCIpKSB7XG5cdFx0XHRsZXQgYklzVmFsaWQ6IGJvb2xlYW4gPVxuXHRcdFx0XHQob0V2ZW50IGFzIEZpZWxkJENoYW5nZUV2ZW50KS5nZXRQYXJhbWV0ZXIoXCJ2YWxpZFwiKSB8fFxuXHRcdFx0XHQob0V2ZW50IGFzIFVJNUV2ZW50PHsgdmFsdWU6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCB1bmRlZmluZWQ7IGlzVmFsaWQ6IGJvb2xlYW4gfSwgbWRjRmllbGQ+KS5nZXRQYXJhbWV0ZXIoXCJpc1ZhbGlkXCIpO1xuXHRcdFx0aWYgKGJJc1ZhbGlkID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0aWYgKG9Tb3VyY2VGaWVsZC5nZXRNYXhDb25kaXRpb25zKCkgPT09IDEpIHtcblx0XHRcdFx0XHRjb25zdCBvVmFsdWVCaW5kaW5nSW5mbyA9IG9Tb3VyY2VGaWVsZC5nZXRCaW5kaW5nSW5mbyhcInZhbHVlXCIpO1xuXHRcdFx0XHRcdGJJc1ZhbGlkID0gX2lzQmluZGluZ1N0YXRlTWVzc2FnZXMob1ZhbHVlQmluZGluZ0luZm8gJiYgb1ZhbHVlQmluZGluZ0luZm8uYmluZGluZyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9Tb3VyY2VGaWVsZC5nZXRWYWx1ZSgpID09PSBcIlwiICYmICFvU291cmNlRmllbGQuZ2V0UHJvcGVydHkoXCJyZXF1aXJlZFwiKSkge1xuXHRcdFx0XHRcdGJJc1ZhbGlkID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0bUZpZWxkU3RhdGUgPSB7XG5cdFx0XHRcdGZpZWxkVmFsdWU6IG9Tb3VyY2VGaWVsZC5nZXRWYWx1ZSgpLFxuXHRcdFx0XHR2YWxpZGl0eTogISFiSXNWYWxpZFxuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gb1NvdXJjZUZpZWxkIGV4dGVuZHMgZnJvbSBhIEZpbGVVcGxvYWRlciB8fCBJbnB1dCB8fCBpcyBhIENoZWNrQm94XG5cdFx0XHRjb25zdCBvQmluZGluZyA9XG5cdFx0XHRcdChvU291cmNlRmllbGQgYXMgQ29udHJvbCkuZ2V0QmluZGluZyhcInVwbG9hZFVybFwiKSB8fFxuXHRcdFx0XHQob1NvdXJjZUZpZWxkIGFzIENvbnRyb2wpLmdldEJpbmRpbmcoXCJ2YWx1ZVwiKSB8fFxuXHRcdFx0XHQob1NvdXJjZUZpZWxkIGFzIENvbnRyb2wpLmdldEJpbmRpbmcoXCJzZWxlY3RlZFwiKTtcblx0XHRcdG1GaWVsZFN0YXRlID0ge1xuXHRcdFx0XHRmaWVsZFZhbHVlOiBvQmluZGluZyAmJiAob0JpbmRpbmcgYXMgUHJvcGVydHlCaW5kaW5nKS5nZXRWYWx1ZSgpLFxuXHRcdFx0XHR2YWxpZGl0eTogX2lzQmluZGluZ1N0YXRlTWVzc2FnZXMob0JpbmRpbmcgYXMgUHJvcGVydHlCaW5kaW5nICYgeyBnZXREYXRhU3RhdGU6ICgpID0+IERhdGFTdGF0ZSB9KVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdGZpZWxkOiBvU291cmNlRmllbGQsXG5cdFx0XHRzdGF0ZTogbUZpZWxkU3RhdGVcblx0XHR9O1xuXHR9LFxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgcHJlc3MgZXZlbnQgZm9yIGEgbGluay5cblx0ICogQHBhcmFtIG9FdmVudCBUaGUgcHJlc3MgZXZlbnRcblx0ICogQHJldHVybnMgVGhlIHByZXNzZWQgbGlua1xuXHQgKi9cblx0cHJlc3NMaW5rOiBhc3luYyBmdW5jdGlvbiAob0V2ZW50OiBCdXR0b24kUHJlc3NFdmVudCk6IFByb21pc2U8TGluaz4ge1xuXHRcdGNvbnN0IG9Tb3VyY2UgPSBvRXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0bGV0IHNhcG1MaW5rID0gb1NvdXJjZS5pc0E8T2JqZWN0SWRlbnRpZmllcj4oXCJzYXAubS5PYmplY3RJZGVudGlmaWVyXCIpXG5cdFx0XHQ/IG9Tb3VyY2UuZmluZEVsZW1lbnRzKGZhbHNlLCAoZWxlbTogRWxlbWVudCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBlbGVtLmlzQTxMaW5rPihcInNhcC5tLkxpbmtcIik7XG5cdFx0XHQgIH0pWzBdXG5cdFx0XHQ6IG9Tb3VyY2U7XG5cdFx0aWYgKG9Tb3VyY2U/LmlzQTxUZXh0TGluaz4oXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLlRleHRMaW5rXCIpKSB7XG5cdFx0XHQvL3doZW4gdGhlIGxpbmsgaXMgaW5zaWRlIGEgVGV4dExpbmsgY29udHJvbCwgdGhlIGRlcGVuZGVudCB3aWxsIGJlIG9uIHRoZSBUZXh0TGlua1xuXHRcdFx0c2FwbUxpbmsgPSBvU291cmNlLmdldENvbnRlbnQoKSBhcyBMaW5rO1xuXHRcdH1cblxuXHRcdGlmIChvU291cmNlLmdldERlcGVuZGVudHMoKSAmJiBvU291cmNlLmdldERlcGVuZGVudHMoKS5sZW5ndGggPiAwICYmIHNhcG1MaW5rLmdldFByb3BlcnR5KFwidGV4dFwiKSAhPT0gXCJcIikge1xuXHRcdFx0Y29uc3Qgb0ZpZWxkSW5mbyA9IG9Tb3VyY2UuZ2V0RGVwZW5kZW50cygpWzBdO1xuXHRcdFx0aWYgKG9GaWVsZEluZm8gJiYgb0ZpZWxkSW5mby5pc0E8TWRjTGluaz4oXCJzYXAudWkubWRjLkxpbmtcIikpIHtcblx0XHRcdFx0YXdhaXQgRmllbGRSdW50aW1lSGVscGVyLm9wZW5MaW5rKG9GaWVsZEluZm8sIHNhcG1MaW5rIGFzIExpbmspO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gc2FwbUxpbmsgYXMgTGluaztcblx0fSxcblxuXHRvcGVuTGluazogYXN5bmMgZnVuY3Rpb24gKG1kY0xpbms6IE1kY0xpbmssIHNhcG1MaW5rOiBMaW5rKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGhSZWYgPSBhd2FpdCBtZGNMaW5rLmdldFRyaWdnZXJIcmVmKCk7XG5cdFx0XHRpZiAoIWhSZWYpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRhd2FpdCAobWRjTGluayBhcyB1bmtub3duIGFzIHsgX3VzZURlbGVnYXRlSXRlbXM6IEZ1bmN0aW9uIH0pLl91c2VEZWxlZ2F0ZUl0ZW1zKCk7XG5cdFx0XHRcdFx0Y29uc3QgbGlua0l0ZW1zID0gYXdhaXQgbWRjTGluay5yZXRyaWV2ZUxpbmtJdGVtcygpO1xuXHRcdFx0XHRcdGlmIChsaW5rSXRlbXM/Lmxlbmd0aCA9PT0gMCAmJiAobWRjTGluay5nZXRQYXlsb2FkKCkgYXMgTGlua0RlbGVnYXRlUGF5bG9hZCkuaGFzUXVpY2tWaWV3RmFjZXRzID09PSBcImZhbHNlXCIpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHBvcG92ZXI6IFJlc3BvbnNpdmVQb3BvdmVyID0gRmllbGRSdW50aW1lSGVscGVyLmNyZWF0ZVBvcG92ZXJXaXRoTm9UYXJnZXRzKG1kY0xpbmspO1xuXHRcdFx0XHRcdFx0bWRjTGluay5hZGREZXBlbmRlbnQocG9wb3Zlcik7XG5cdFx0XHRcdFx0XHRwb3BvdmVyLm9wZW5CeShzYXBtTGluayBhcyB1bmtub3duIGFzIENvbnRyb2wpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG5cdFx0XHRcdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRcdFx0XHRhd2FpdCBtZGNMaW5rLm9wZW4oc2FwbUxpbmsgYXMgdW5rbm93biBhcyBDb250cm9sKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGBDYW5ub3QgcmV0cmlldmUgdGhlIFF1aWNrVmlldyBQb3BvdmVyIGRpYWxvZzogJHtlcnJvcn1gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcoc2FwbUxpbmspO1xuXHRcdFx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodmlldyk7XG5cdFx0XHRcdGNvbnN0IHNoZWxsU2VydmljZSA9IGFwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdFx0XHRcdGNvbnN0IHNoZWxsSGFzaCA9IHNoZWxsU2VydmljZS5wYXJzZVNoZWxsSGFzaChoUmVmKTtcblx0XHRcdFx0Y29uc3QgbmF2QXJncyA9IHtcblx0XHRcdFx0XHR0YXJnZXQ6IHtcblx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBzaGVsbEhhc2guc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRhY3Rpb246IHNoZWxsSGFzaC5hY3Rpb25cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHBhcmFtczogc2hlbGxIYXNoLnBhcmFtc1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRLZWVwQWxpdmVIZWxwZXIuc3RvcmVDb250cm9sUmVmcmVzaFN0cmF0ZWd5Rm9ySGFzaCh2aWV3LCBzaGVsbEhhc2gpO1xuXHRcdFx0XHRpZiAoQ29tbW9uVXRpbHMuaXNTdGlja3lFZGl0TW9kZShzYXBtTGluayBhcyB1bmtub3duIGFzIENvbnRyb2wpICE9PSB0cnVlKSB7XG5cdFx0XHRcdFx0Ly9VUkwgcGFyYW1zIGFuZCB4YXBwU3RhdGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGVhcmxpZXIgaGVuY2UgdXNpbmcgbmF2aWdhdGVcblx0XHRcdFx0XHRhd2FpdCBzaGVsbFNlcnZpY2UubmF2aWdhdGUobmF2QXJncywgYXBwQ29tcG9uZW50KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0Y29uc3QgbmV3SHJlZiA9IGF3YWl0IHNoZWxsU2VydmljZS5ocmVmRm9yRXh0ZXJuYWwobmF2QXJncywgYXBwQ29tcG9uZW50KTtcblx0XHRcdFx0XHRcdG9wZW5XaW5kb3cobmV3SHJlZik7XG5cdFx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihgRXJyb3Igd2hpbGUgcmV0aXJldmluZyBocmVmRm9yRXh0ZXJuYWwgOiAke2Vycm9yfWApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRMb2cuZXJyb3IoYEVycm9yIHRyaWdnZXJpbmcgbGluayBIcmVmOiAke2Vycm9yfWApO1xuXHRcdH1cblx0fSxcblxuXHRjcmVhdGVQb3BvdmVyV2l0aE5vVGFyZ2V0czogZnVuY3Rpb24gKG1kY0xpbms6IE1kY0xpbmspOiBSZXNwb25zaXZlUG9wb3ZlciB7XG5cdFx0Y29uc3QgbWRjTGlua0lkID0gbWRjTGluay5nZXRJZCgpO1xuXHRcdGNvbnN0IGlsbHVzdHJhdGVkTWVzc2FnZVNldHRpbmdzOiAkSWxsdXN0cmF0ZWRNZXNzYWdlU2V0dGluZ3MgPSB7XG5cdFx0XHR0aXRsZTogZ2V0UmVzb3VyY2VNb2RlbChtZGNMaW5rIGFzIHVua25vd24gYXMgQ29udHJvbCkuZ2V0VGV4dChcIk1fSUxMVVNUUkFURURNRVNTQUdFX1RJVExFXCIpLFxuXHRcdFx0ZGVzY3JpcHRpb246IGdldFJlc291cmNlTW9kZWwobWRjTGluayBhcyB1bmtub3duIGFzIENvbnRyb2wpLmdldFRleHQoXCJNX0lMTFVTVFJBVEVETUVTU0FHRV9ERVNDUklQVElPTlwiKSxcblx0XHRcdGVuYWJsZUZvcm1hdHRlZFRleHQ6IHRydWUsXG5cdFx0XHRpbGx1c3RyYXRpb25TaXplOiBJbGx1c3RyYXRlZE1lc3NhZ2VTaXplLkV4dHJhU21hbGwsXG5cdFx0XHRpbGx1c3RyYXRpb25UeXBlOiBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlLk5vRGF0YVxuXHRcdH07XG5cdFx0Y29uc3QgaWxsdXN0cmF0ZWRNZXNzYWdlID0gbmV3IElsbHVzdHJhdGVkTWVzc2FnZShgJHttZGNMaW5rSWR9LWlsbHVzdHJhdGVkbWVzc2FnZWAsIGlsbHVzdHJhdGVkTWVzc2FnZVNldHRpbmdzKTtcblx0XHRjb25zdCBwb3BvdmVyU2V0dGluZ3M6ICRSZXNwb25zaXZlUG9wb3ZlclNldHRpbmdzID0ge1xuXHRcdFx0aG9yaXpvbnRhbFNjcm9sbGluZzogZmFsc2UsXG5cdFx0XHRzaG93SGVhZGVyOiBEZXZpY2Uuc3lzdGVtLnBob25lLFxuXHRcdFx0cGxhY2VtZW50OiBtb2JpbGVsaWJyYXJ5LlBsYWNlbWVudFR5cGUuQXV0byxcblx0XHRcdGNvbnRlbnQ6IFtpbGx1c3RyYXRlZE1lc3NhZ2VdLFxuXHRcdFx0YWZ0ZXJDbG9zZTogZnVuY3Rpb24gKGV2ZW50KSB7XG5cdFx0XHRcdGlmIChldmVudC5nZXRTb3VyY2UoKSkge1xuXHRcdFx0XHRcdGV2ZW50LmdldFNvdXJjZSgpLmRlc3Ryb3koKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdFx0cmV0dXJuIG5ldyBSZXNwb25zaXZlUG9wb3ZlcihgJHttZGNMaW5rSWR9LXBvcG92ZXJgLCBwb3BvdmVyU2V0dGluZ3MpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSB0eXBlIG1pc21hdGNoIGV2ZW50IGZvciBhIGZpbGUgdXBsb2FkZXIuXG5cdCAqXG5cdCAqIERpc3BsYXlzIGEgZGlhbG9nIHRvIGluZm9ybSB0aGUgdXNlciBhYm91dCB0aGUgdHlwZSBtaXNtYXRjaC5cblx0ICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCBvYmplY3QgY29udGFpbmluZyBkZXRhaWxzIGFib3V0IHRoZSB0eXBlIG1pc21hdGNoXG5cdCAqL1xuXHRoYW5kbGVUeXBlTWlzc21hdGNoOiBmdW5jdGlvbiAoZXZlbnQ6IEZpbGVVcGxvYWRlciRUeXBlTWlzc21hdGNoRXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCBmaWxlVXBsb2FkZXIgPSBldmVudC5nZXRTb3VyY2UoKTtcblx0XHRjb25zdCBnaXZlblR5cGUgPSBldmVudC5nZXRQYXJhbWV0ZXIoXCJtaW1lVHlwZVwiKTtcblx0XHRjb25zdCBhY2NlcHRlZFR5cGVzID0gZmlsZVVwbG9hZGVyLmdldE1pbWVUeXBlKCk7XG5cdFx0aWYgKGdpdmVuVHlwZSkge1xuXHRcdFx0c2hvd1R5cGVNaXNtYXRjaERpYWxvZyhmaWxlVXBsb2FkZXIsIGdpdmVuVHlwZSwgYWNjZXB0ZWRUeXBlcyk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBmaWxlIHNpemUgZXhjZWVkIGV2ZW50IGZvciBhIGZpbGUgdXBsb2FkZXIuXG5cdCAqXG5cdCAqIERpc3BsYXlzIGEgZGlhbG9nIHRvIGluZm9ybSB0aGUgdXNlciBhYm91dCB0aGUgZmlsZSBzaXplIGV4Y2VlZC5cblx0ICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCBvYmplY3QgY29udGFpbmluZyBkZXRhaWxzIGFib3V0IHRoZSBmaWxlIHNpemUgZXhjZWVkXG5cdCAqL1xuXHRoYW5kbGVGaWxlU2l6ZUV4Y2VlZDogZnVuY3Rpb24gKGV2ZW50OiBGaWxlVXBsb2FkZXIkRmlsZVNpemVFeGNlZWRFdmVudCk6IHZvaWQge1xuXHRcdGNvbnN0IGZpbGVVcGxvYWRlciA9IGV2ZW50LmdldFNvdXJjZSgpO1xuXHRcdHNob3dGaWxlU2l6ZUV4Y2VlZERpYWxvZyhmaWxlVXBsb2FkZXIsIGZpbGVVcGxvYWRlci5nZXRNYXhpbXVtRmlsZVNpemUoKS50b0ZpeGVkKDMpKTtcblx0fSxcblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgdXBsb2FkIGNvbXBsZXRlIGV2ZW50IGZvciBhIGZpbGUgdXBsb2FkZXIuXG5cdCAqXG5cdCAqIERpc3BsYXlzIGEgbWVzc2FnZSBmb3IgYSBmYWlsZWQgdXBsb2FkIGFuZCByZXNvbHZlcyBvciByZWplY3RzIHRoZSB1cGxvYWQgcHJvbWlzZS5cblx0ICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCBvYmplY3QgY29udGFpbmluZyBkZXRhaWxzIGFib3V0IHRoZSB1cGxvYWRcblx0ICogQHBhcmFtIHByb3BlcnR5RmlsZU5hbWUgVGhlIHByb3BlcnR5IG5hbWUgZm9yIHRoZSBmaWxlIG5hbWVcblx0ICogQHBhcmFtIHByb3BlcnR5UGF0aCBUaGUgcHJvcGVydHkgcGF0aCBmb3IgdGhlIGZpbGVcblx0ICogQHBhcmFtIGNvbnRyb2xsZXIgVGhlIHBhZ2UgY29udHJvbGxlclxuXHQgKi9cblx0aGFuZGxlVXBsb2FkQ29tcGxldGU6IGZ1bmN0aW9uIChcblx0XHRldmVudDogRmlsZVVwbG9hZGVyJFVwbG9hZENvbXBsZXRlRXZlbnQsXG5cdFx0cHJvcGVydHlGaWxlTmFtZTogeyBwYXRoOiBzdHJpbmcgfSB8IHVuZGVmaW5lZCxcblx0XHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0XHRjb250cm9sbGVyOiBQYWdlQ29udHJvbGxlclxuXHQpOiB2b2lkIHtcblx0XHRjb25zdCBzdGF0dXMgPSBOdW1iZXIoZXZlbnQuZ2V0UGFyYW1ldGVyKFwic3RhdHVzXCIpKSxcblx0XHRcdGZpbGVVcGxvYWRlciA9IGV2ZW50LmdldFNvdXJjZSgpLFxuXHRcdFx0ZmlsZVdyYXBwZXIgPSBmaWxlVXBsb2FkZXIuZ2V0UGFyZW50KCkgYXMgdW5rbm93biBhcyBGaWxlV3JhcHBlcixcblx0XHRcdGZpZWxkID0gZmlsZVdyYXBwZXIuZ2V0UGFyZW50KCk7XG5cdFx0ZmlsZVdyYXBwZXIuc2V0VUlCdXN5KGZhbHNlKTtcblxuXHRcdGNvbnN0IGNvbnRleHQgPSBmaWxlVXBsb2FkZXIuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0IHwgdW5kZWZpbmVkIHwgbnVsbDtcblx0XHRpZiAoc3RhdHVzID09PSAwIHx8IHN0YXR1cyA+PSA0MDApIHtcblx0XHRcdGNvbnN0IGVycm9yID0gKGV2ZW50LmdldFBhcmFtZXRlcihcInJlc3BvbnNlUmF3XCIpIHx8IGV2ZW50LmdldFBhcmFtZXRlcihcInJlc3BvbnNlXCIpKSBhcyBzdHJpbmc7XG5cdFx0XHRkaXNwbGF5TWVzc2FnZUZvckZhaWxlZFVwbG9hZChmaWxlVXBsb2FkZXIsIGVycm9yKTtcblx0XHRcdEZpZWxkUnVudGltZUhlbHBlci51cGxvYWRQcm9taXNlc1tmaWxlVXBsb2FkZXIuZ2V0SWQoKV0ucmVqZWN0KCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IG5ld0VUYWcgPSAoZXZlbnQuZ2V0UGFyYW1ldGVyKFwiaGVhZGVyc1wiKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik/LmV0YWc7XG5cblx0XHRcdGlmIChuZXdFVGFnKSB7XG5cdFx0XHRcdC8vIHNldCBuZXcgZXRhZyBmb3IgZmlsZW5hbWUgdXBkYXRlLCBidXQgd2l0aG91dCBzZW5kaW5nIHBhdGNoIHJlcXVlc3Rcblx0XHRcdFx0Y29udGV4dD8uc2V0UHJvcGVydHkoXCJAb2RhdGEuZXRhZ1wiLCBuZXdFVGFnLCBudWxsIGFzIHVua25vd24gYXMgc3RyaW5nKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gc2V0IGZpbGVuYW1lIGZvciBsaW5rIHRleHRcblx0XHRcdGlmIChwcm9wZXJ0eUZpbGVOYW1lPy5wYXRoKSB7XG5cdFx0XHRcdGNvbnRleHQ/LnNldFByb3BlcnR5KHByb3BlcnR5RmlsZU5hbWUucGF0aCwgZmlsZVVwbG9hZGVyLmdldFZhbHVlKCkpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBkZWxldGUgdGhlIGF2YXRhciBjYWNoZSB0aGF0IG5vdCBnZXRzIHVwZGF0ZWQgb3RoZXJ3aXNlXG5cdFx0XHRmaWxlV3JhcHBlci5hdmF0YXI/LnJlZnJlc2hBdmF0YXJDYWNoZUJ1c3RpbmcoKTtcblxuXHRcdFx0RmllbGRSdW50aW1lSGVscGVyLl9jYWxsU2lkZUVmZmVjdHNGb3JTdHJlYW0oXG5cdFx0XHRcdGV2ZW50IGFzIHVua25vd24gYXMgRmllbGQkQ2hhbmdlRXZlbnQgJiBFdmVudDx7IGlzVmFsaWQ6IGJvb2xlYW4gfT4sXG5cdFx0XHRcdGZpbGVXcmFwcGVyLFxuXHRcdFx0XHRjb250cm9sbGVyXG5cdFx0XHQpO1xuXG5cdFx0XHR0aGlzLnVwbG9hZFByb21pc2VzW2ZpbGVVcGxvYWRlci5nZXRJZCgpXS5yZXNvbHZlKCk7XG5cdFx0XHRmaWVsZD8uZmlyZUV2ZW50KFwiY2hhbmdlXCIsIGV2ZW50KTtcblx0XHR9XG5cblx0XHRkZWxldGUgdGhpcy51cGxvYWRQcm9taXNlc1tmaWxlVXBsb2FkZXIuZ2V0SWQoKV07XG5cblx0XHQvLyBDb2xsYWJvcmF0aW9uIERyYWZ0IEFjdGl2aXR5IFN5bmNcblx0XHRjb25zdCBpc0NvbGxhYm9yYXRpb25FbmFibGVkID0gY29udHJvbGxlci5jb2xsYWJvcmF0aXZlRHJhZnQ/LmlzQ29ubmVjdGVkKCk7XG5cdFx0aWYgKCFpc0NvbGxhYm9yYXRpb25FbmFibGVkIHx8ICFjb250ZXh0KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qgbm90aWZpY2F0aW9uRGF0YSA9IFtgJHtjb250ZXh0LmdldFBhdGgoKX0vJHtwcm9wZXJ0eVBhdGh9YF07XG5cdFx0aWYgKHByb3BlcnR5RmlsZU5hbWU/LnBhdGgpIHtcblx0XHRcdG5vdGlmaWNhdGlvbkRhdGEucHVzaChgJHtjb250ZXh0LmdldFBhdGgoKX0vJHtwcm9wZXJ0eUZpbGVOYW1lLnBhdGh9YCk7XG5cdFx0fVxuXG5cdFx0bGV0IGJpbmRpbmcgPSBjb250ZXh0LmdldEJpbmRpbmcoKTtcblx0XHRpZiAoIWJpbmRpbmcuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIikpIHtcblx0XHRcdGNvbnN0IG9WaWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0VmlldyhmaWxlVXBsb2FkZXIpO1xuXHRcdFx0YmluZGluZyA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCkuZ2V0QmluZGluZygpO1xuXHRcdH1cblx0XHRpZiAoYmluZGluZy5oYXNQZW5kaW5nQ2hhbmdlcygpKSB7XG5cdFx0XHRiaW5kaW5nLmF0dGFjaEV2ZW50T25jZShcInBhdGNoQ29tcGxldGVkXCIsICgpID0+IHtcblx0XHRcdFx0Y29udHJvbGxlci5jb2xsYWJvcmF0aXZlRHJhZnQuc2VuZCh7IGFjdGlvbjogQWN0aXZpdHkuQ2hhbmdlLCBjb250ZW50OiBub3RpZmljYXRpb25EYXRhIH0pO1xuXHRcdFx0XHRjb250cm9sbGVyLmNvbGxhYm9yYXRpdmVEcmFmdC5zZW5kKHsgYWN0aW9uOiBBY3Rpdml0eS5VbmxvY2ssIGNvbnRlbnQ6IG5vdGlmaWNhdGlvbkRhdGEgfSk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29udHJvbGxlci5jb2xsYWJvcmF0aXZlRHJhZnQuc2VuZCh7IGFjdGlvbjogQWN0aXZpdHkuQ2hhbmdlLCBjb250ZW50OiBub3RpZmljYXRpb25EYXRhIH0pO1xuXHRcdFx0Y29udHJvbGxlci5jb2xsYWJvcmF0aXZlRHJhZnQuc2VuZCh7IGFjdGlvbjogQWN0aXZpdHkuVW5sb2NrLCBjb250ZW50OiBub3RpZmljYXRpb25EYXRhIH0pO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogUmVtb3ZlcyBhIHN0cmVhbSBmcm9tIGEgZmlsZSBwcm9wZXJ0eS5cblx0ICpcblx0ICogU2V0cyB0aGUgcHJvcGVydHkgdG8gbnVsbCBhbmQgdGhlbiB1bmRlZmluZWQgdG8gcmVjcmVhdGUgdGhlIHVwbG9hZCBVUkwuXG5cdCAqIEhhbmRsZXMgY29sbGFib3JhdGlvbiBkcmFmdCBhY3Rpdml0eSBzeW5jIGlmIGVuYWJsZWQuXG5cdCAqIEBwYXJhbSBldmVudCBUaGUgY2hhbmdlIGV2ZW50IG9iamVjdFxuXHQgKiBAcGFyYW0gIHByb3BlcnR5RmlsZU5hbWUgVGhlIHByb3BlcnR5IG5hbWUgZm9yIHRoZSBmaWxlIG5hbWUuXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIHByb3BlcnR5IHBhdGggZm9yIHRoZSBmaWxlLlxuXHQgKiBAcGFyYW0gY29udHJvbGxlciBUaGUgcGFnZSBjb250cm9sbGVyLlxuXHQgKi9cblx0cmVtb3ZlU3RyZWFtOiBmdW5jdGlvbiAoXG5cdFx0ZXZlbnQ6IEZpZWxkJENoYW5nZUV2ZW50ICYgRXZlbnQ8eyBpc1ZhbGlkOiBib29sZWFuIH0+LFxuXHRcdHByb3BlcnR5RmlsZU5hbWU6IHsgcGF0aDogc3RyaW5nIH0gfCB1bmRlZmluZWQsXG5cdFx0cHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdFx0Y29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXJcblx0KTogdm9pZCB7XG5cdFx0Y29uc3QgZGVsZXRlQnV0dG9uID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0Y29uc3QgZmlsZVdyYXBwZXIgPSBkZWxldGVCdXR0b24uZ2V0UGFyZW50KCkgYXMgdW5rbm93biBhcyBGaWxlV3JhcHBlcjtcblx0XHRjb25zdCBjb250ZXh0ID0gZmlsZVdyYXBwZXIuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0O1xuXHRcdGNvbnN0IGZpZWxkID0gZmlsZVdyYXBwZXIuZ2V0UGFyZW50KCk7XG5cblx0XHQvLyBzdHJlYW1zIGFyZSByZW1vdmVkIGJ5IGFzc2lnbmluZyB0aGUgbnVsbCB2YWx1ZVxuXHRcdGNvbnRleHQuc2V0UHJvcGVydHkocHJvcGVydHlQYXRoLCBudWxsKTtcblx0XHQvLyBXaGVuIHNldHRpbmcgdGhlIHByb3BlcnR5IHRvIG51bGwsIHRoZSB1cGxvYWRVcmwgKEBATU9ERUwuZm9ybWF0KSBpcyBzZXQgdG8gXCJcIiBieSB0aGUgbW9kZWxcblx0XHQvL1x0d2l0aCB0aGF0IGFub3RoZXIgdXBsb2FkIGlzIG5vdCBwb3NzaWJsZSBiZWZvcmUgcmVmcmVzaGluZyB0aGUgcGFnZVxuXHRcdC8vIChyZWZyZXNoaW5nIHRoZSBwYWdlIHdvdWxkIHJlY3JlYXRlIHRoZSBVUkwpXG5cdFx0Ly9cdFRoaXMgaXMgdGhlIHdvcmthcm91bmQ6XG5cdFx0Ly9cdFdlIHNldCB0aGUgcHJvcGVydHkgdG8gdW5kZWZpbmVkIG9ubHkgb24gdGhlIGZyb250ZW5kIHdoaWNoIHdpbGwgcmVjcmVhdGUgdGhlIHVwbG9hZFVybFxuXHRcdGNvbnRleHQuc2V0UHJvcGVydHkocHJvcGVydHlQYXRoLCB1bmRlZmluZWQsIG51bGwgYXMgdW5rbm93biBhcyBzdHJpbmcpO1xuXG5cdFx0RmllbGRSdW50aW1lSGVscGVyLl9jYWxsU2lkZUVmZmVjdHNGb3JTdHJlYW0oZXZlbnQsIGZpbGVXcmFwcGVyLCBjb250cm9sbGVyKTtcblxuXHRcdC8vIENvbGxhYm9yYXRpb24gRHJhZnQgQWN0aXZpdHkgU3luY1xuXHRcdGNvbnN0IGJDb2xsYWJvcmF0aW9uRW5hYmxlZCA9IGNvbnRyb2xsZXIuY29sbGFib3JhdGl2ZURyYWZ0Py5pc0Nvbm5lY3RlZCgpO1xuXHRcdGlmIChiQ29sbGFib3JhdGlvbkVuYWJsZWQpIHtcblx0XHRcdGxldCBiaW5kaW5nID0gY29udGV4dC5nZXRCaW5kaW5nKCk7XG5cdFx0XHRpZiAoIWJpbmRpbmcuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIikpIHtcblx0XHRcdFx0Y29uc3Qgb1ZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KGRlbGV0ZUJ1dHRvbik7XG5cdFx0XHRcdGJpbmRpbmcgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpLmdldEJpbmRpbmcoKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgZGF0YSA9IFtgJHtjb250ZXh0LmdldFBhdGgoKX0vJHtwcm9wZXJ0eVBhdGh9YF07XG5cdFx0XHRpZiAocHJvcGVydHlGaWxlTmFtZT8ucGF0aCkge1xuXHRcdFx0XHRkYXRhLnB1c2goYCR7Y29udGV4dC5nZXRQYXRoKCl9LyR7cHJvcGVydHlGaWxlTmFtZS5wYXRofWApO1xuXHRcdFx0fVxuXHRcdFx0Y29udHJvbGxlci5jb2xsYWJvcmF0aXZlRHJhZnQuc2VuZCh7IGFjdGlvbjogQWN0aXZpdHkuTG9jaywgY29udGVudDogZGF0YSB9KTtcblxuXHRcdFx0YmluZGluZy5hdHRhY2hFdmVudE9uY2UoXCJwYXRjaENvbXBsZXRlZFwiLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGNvbnRyb2xsZXIuY29sbGFib3JhdGl2ZURyYWZ0LnNlbmQoeyBhY3Rpb246IEFjdGl2aXR5LkNoYW5nZSwgY29udGVudDogZGF0YSB9KTtcblx0XHRcdFx0Y29udHJvbGxlci5jb2xsYWJvcmF0aXZlRHJhZnQuc2VuZCh7IGFjdGlvbjogQWN0aXZpdHkuVW5sb2NrLCBjb250ZW50OiBkYXRhIH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGZpZWxkPy5maXJlRXZlbnQoXCJjaGFuZ2VcIiwgZXZlbnQpO1xuXHR9LFxuXG5cdF9jYWxsU2lkZUVmZmVjdHNGb3JTdHJlYW06IGZ1bmN0aW9uIChcblx0XHRvRXZlbnQ6IEZpZWxkJENoYW5nZUV2ZW50ICYgRXZlbnQ8eyBpc1ZhbGlkOiBib29sZWFuIH0+LFxuXHRcdG9Db250cm9sOiBDb250cm9sLFxuXHRcdG9Db250cm9sbGVyOiBQYWdlQ29udHJvbGxlclxuXHQpOiB2b2lkIHtcblx0XHRjb25zdCBvRkVDb250cm9sbGVyID0gRmllbGRSdW50aW1lSGVscGVyLmdldEV4dGVuc2lvbkNvbnRyb2xsZXIob0NvbnRyb2xsZXIpO1xuXHRcdGlmIChvQ29udHJvbCAmJiAob0NvbnRyb2wuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyB1bmtub3duIGFzIHsgaXNUcmFuc2llbnQ6IEZ1bmN0aW9uIH0pLmlzVHJhbnNpZW50KCkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKG9Db250cm9sKSB7XG5cdFx0XHQob0V2ZW50IGFzIHVua25vd24gYXMgeyBvU291cmNlOiBDb250cm9sIH0pLm9Tb3VyY2UgPSBvQ29udHJvbDtcblx0XHR9XG5cdFx0b0ZFQ29udHJvbGxlci5fc2lkZUVmZmVjdHMuaGFuZGxlRmllbGRDaGFuZ2Uob0V2ZW50LCBGaWVsZFJ1bnRpbWVIZWxwZXIuZ2V0RmllbGRTdGF0ZU9uQ2hhbmdlKG9FdmVudCkuc3RhdGVbXCJ2YWxpZGl0eVwiXSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFVwbG9hZHMgYSBzdHJlYW0gdXNpbmcgdGhlIGZpbGUgdXBsb2FkZXIuXG5cdCAqXG5cdCAqIFNldHMgdGhlIHVwbG9hZCBVUkwsIHN5bmNocm9uaXplcyB0aGUgdXBsb2FkIHdpdGggb3RoZXIgcmVxdWVzdHMsIGFuZCBoYW5kbGVzIGNvbGxhYm9yYXRpb24gZHJhZnQgYWN0aXZpdHkgc3luYyBpZiBlbmFibGVkLlxuXHQgKiBAcGFyYW0gY29udHJvbGxlciBUaGUgcGFnZSBjb250cm9sbGVyLlxuXHQgKiBAcGFyYW0gZXZlbnQgVGhlIGNoYW5nZSBldmVudCBvYmplY3Qgb2YgdGhlIGZpbGUgdXBsb2FkZXIuXG5cdCAqL1xuXHR1cGxvYWRTdHJlYW06IGZ1bmN0aW9uIChjb250cm9sbGVyOiBQYWdlQ29udHJvbGxlciwgZXZlbnQ6IEZpbGVVcGxvYWRlciRDaGFuZ2VFdmVudCk6IHZvaWQge1xuXHRcdGNvbnN0IGZpbGVVcGxvYWRlciA9IGV2ZW50LmdldFNvdXJjZSgpLFxuXHRcdFx0RkVDb250cm9sbGVyID0gRmllbGRSdW50aW1lSGVscGVyLmdldEV4dGVuc2lvbkNvbnRyb2xsZXIoY29udHJvbGxlciksXG5cdFx0XHRmaWxlV3JhcHBlciA9IGZpbGVVcGxvYWRlci5nZXRQYXJlbnQoKSBhcyB1bmtub3duIGFzIEZpbGVXcmFwcGVyLFxuXHRcdFx0dXBsb2FkVXJsID0gZmlsZVdyYXBwZXIuZ2V0VXBsb2FkVXJsKCk7XG5cblx0XHRpZiAodXBsb2FkVXJsICE9PSBcIlwiKSB7XG5cdFx0XHRmaWxlV3JhcHBlci5zZXRVSUJ1c3kodHJ1ZSk7XG5cblx0XHRcdC8vIHVzZSB1cGxvYWRVcmwgZnJvbSBGaWxlV3JhcHBlciB3aGljaCByZXR1cm5zIGEgY2Fub25pY2FsIFVSTFxuXHRcdFx0ZmlsZVVwbG9hZGVyLnNldFVwbG9hZFVybCh1cGxvYWRVcmwpO1xuXG5cdFx0XHQvLyBzZXQgdGhlIHJlcXVlc3QgaGVhZGVyIGZvciB0aGUgdXBsb2FkXG5cdFx0XHRjb25zdCBmaWxlcyA9IGV2ZW50LmdldFBhcmFtZXRlcihcImZpbGVzXCIpO1xuXHRcdFx0Ly8gdGhlcmUgaXMgb25seSBvbmUgZmlsZSBhcyB3ZSBhbGxvdyBzZWxlY3Rpbmcgb25seSBvbmVcblx0XHRcdGNvbnN0IGZpbGVUeXBlID0gKGZpbGVzICYmIChmaWxlc1swXSBhcyBGaWxlKS50eXBlKSBhcyBzdHJpbmc7XG5cdFx0XHRzZXRIZWFkZXJGaWVsZHMoZmlsZVVwbG9hZGVyLCBmaWxlVHlwZSk7XG5cblx0XHRcdC8vIHN5bmNocm9uaXplIHVwbG9hZCB3aXRoIG90aGVyIHJlcXVlc3RzXG5cdFx0XHRjb25zdCB1cGxvYWRQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XG5cdFx0XHRcdHRoaXMudXBsb2FkUHJvbWlzZXMgPSB0aGlzLnVwbG9hZFByb21pc2VzIHx8IHt9O1xuXHRcdFx0XHR0aGlzLnVwbG9hZFByb21pc2VzW2ZpbGVVcGxvYWRlci5nZXRJZCgpXSA9IHtcblx0XHRcdFx0XHRyZXNvbHZlOiByZXNvbHZlLFxuXHRcdFx0XHRcdHJlamVjdDogcmVqZWN0XG5cdFx0XHRcdH07XG5cdFx0XHRcdGZpbGVVcGxvYWRlci51cGxvYWQoKTtcblx0XHRcdH0pO1xuXHRcdFx0RkVDb250cm9sbGVyLmVkaXRGbG93LnN5bmNUYXNrKHVwbG9hZFByb21pc2UpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRNZXNzYWdlQm94LmVycm9yKGdldFJlc291cmNlTW9kZWwoY29udHJvbGxlcikuZ2V0VGV4dChcIk1fRklFTERfRklMRVVQTE9BREVSX0FCT1JURURfVEVYVFwiKSk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIHdoZW4gYSBGaWxlVXBsb2FkIGRpYWxvZyBpcyBvcGVuZWQuXG5cdCAqIEBwYXJhbSBldmVudFxuXHQgKi9cblx0aGFuZGxlT3BlblVwbG9hZGVyOiBmdW5jdGlvbiAoZXZlbnQ6IEV2ZW50PHt9LCBGaWxlVXBsb2FkZXI+KTogdm9pZCB7XG5cdFx0Y29uc3QgZmlsZVVwbG9hZGVyID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0RmllbGRSdW50aW1lSGVscGVyLl9zZW5kQ29sbGFib3JhdGlvbk1lc3NhZ2VGb3JGaWxlVXBsb2FkZXIoZmlsZVVwbG9hZGVyLCBBY3Rpdml0eS5Mb2NrKTtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHNlbmQgY29sbGFib3JhdGlvbiBtZXNzYWdlcyBmcm9tIGEgRmlsZVVwbG9hZGVyLlxuXHQgKiBAcGFyYW0gZmlsZVVwbG9hZGVyXG5cdCAqIEBwYXJhbSBhY3Rpb25cblx0ICovXG5cdF9zZW5kQ29sbGFib3JhdGlvbk1lc3NhZ2VGb3JGaWxlVXBsb2FkZXIoZmlsZVVwbG9hZGVyOiBGaWxlVXBsb2FkZXIsIGFjdGlvbjogQWN0aXZpdHkpOiB2b2lkIHtcblx0XHRjb25zdCB2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0VmlldyhmaWxlVXBsb2FkZXIpO1xuXHRcdGNvbnN0IGNvbGxhYm9yYXRpdmVEcmFmdCA9IHZpZXcuZ2V0Q29udHJvbGxlcigpLmNvbGxhYm9yYXRpdmVEcmFmdDtcblx0XHRpZiAoY29sbGFib3JhdGl2ZURyYWZ0LmlzQ29ubmVjdGVkKCkpIHtcblx0XHRcdGNvbnN0IGJpbmRpbmdQYXRoID0gZmlsZVVwbG9hZGVyLmdldFBhcmVudCgpPy5nZXRQcm9wZXJ0eShcInByb3BlcnR5UGF0aFwiKTtcblx0XHRcdGNvbnN0IGZ1bGxQYXRoID0gYCR7ZmlsZVVwbG9hZGVyLmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKX0vJHtiaW5kaW5nUGF0aH1gO1xuXHRcdFx0Y29sbGFib3JhdGl2ZURyYWZ0LnNlbmQoeyBhY3Rpb24sIGNvbnRlbnQ6IGZ1bGxQYXRoIH0pO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogSGFuZGxlciB3aGVuIGEgRmlsZVVwbG9hZCBkaWFsb2cgaXMgY2xvc2VkLlxuXHQgKiBAcGFyYW0gZXZlbnRcblx0ICovXG5cdGhhbmRsZUNsb3NlVXBsb2FkZXI6IGZ1bmN0aW9uIChldmVudDogRXZlbnQ8e30sIEZpbGVVcGxvYWRlcj4pOiB2b2lkIHtcblx0XHRjb25zdCBmaWxlVXBsb2FkZXIgPSBldmVudC5nZXRTb3VyY2UoKTtcblx0XHRGaWVsZFJ1bnRpbWVIZWxwZXIuX3NlbmRDb2xsYWJvcmF0aW9uTWVzc2FnZUZvckZpbGVVcGxvYWRlcihmaWxlVXBsb2FkZXIsIEFjdGl2aXR5LlVubG9jayk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE9wZW5zIGFuIGV4dGVybmFsIGxpbmsgaW4gdGhlIHNhbWUgdGFiLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgVVJMIGZyb20gdGhlIGxpbmsncyBkYXRhIGFuZCBvcGVucyBpdCBpbiB0aGUgc2FtZSB0YWIuXG5cdCAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgb2JqZWN0IGNvbnRhaW5pbmcgZGV0YWlscyBhYm91dCB0aGUgbGluayBjbGljay5cblx0ICovXG5cdG9wZW5FeHRlcm5hbExpbms6IGZ1bmN0aW9uIChldmVudDogRXZlbnQ8e30sIExpbms+KTogdm9pZCB7XG5cdFx0Y29uc3Qgc291cmNlID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0aWYgKHNvdXJjZS5kYXRhKFwidXJsXCIpICYmIHNvdXJjZS5nZXRQcm9wZXJ0eShcInRleHRcIikgIT09IFwiXCIpIHtcblx0XHRcdC8vIFRoaXMgb3BlbnMgdGhlIGxpbmsgaW4gdGhlIHNhbWUgdGFiIGFzIHRoZSBsaW5rLiBJdCB3YXMgZG9uZSB0byBiZSBtb3JlIGNvbnNpc3RlbnQgd2l0aCBvdGhlciB0eXBlIG9mIGxpbmtzLlxuXHRcdFx0b3BlbldpbmRvdyhzb3VyY2UuZGF0YShcInVybFwiKSwgXCJfc2VsZlwiKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgaWNvbiBmb3IgYSBnaXZlbiBNSU1FIHR5cGUuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgYEljb25Qb29sYCB0byBnZXQgdGhlIGFwcHJvcHJpYXRlIGljb24gZm9yIHRoZSBzcGVjaWZpZWQgTUlNRSB0eXBlLlxuXHQgKiBAcGFyYW0gbWltZVR5cGUgVGhlIE1JTUUgdHlwZSBmb3Igd2hpY2ggdGhlIGljb24gaXMgdG8gYmUgcmV0cmlldmVkXG5cdCAqIEByZXR1cm5zIFRoZSBpY29uIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIE1JTUUgdHlwZVxuXHQgKi9cblx0Z2V0SWNvbkZvck1pbWVUeXBlOiBmdW5jdGlvbiAobWltZVR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIEljb25Qb29sLmdldEljb25Gb3JNaW1lVHlwZShtaW1lVHlwZSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFRyaWdnZXJzIGFuIGludGVybmFsIG5hdmlnYXRpb24gb24gdGhlIGxpbmsgcGVydGFpbmluZyB0byBEYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGguXG5cdCAqIEBwYXJhbSBzb3VyY2UgU291cmNlIG9mIHRoZSBwcmVzcyBldmVudFxuXHQgKiBAcGFyYW0gY29udHJvbGxlciBJbnN0YW5jZSBvZiB0aGUgY29udHJvbGxlclxuXHQgKiBAcGFyYW0gbmF2UGF0aCBUaGUgbmF2aWdhdGlvbiBwYXRoXG5cdCAqL1xuXHRvbkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDogYXN5bmMgZnVuY3Rpb24gKHNvdXJjZTogQ29udHJvbCwgY29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsIG5hdlBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmIChjb250cm9sbGVyLl9yb3V0aW5nKSB7XG5cdFx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IHNvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQ7XG5cblx0XHRcdGNvbnN0IHZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHNvdXJjZSksXG5cdFx0XHRcdG1ldGFNb2RlbCA9IGJpbmRpbmdDb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRjb25zdCB2aWV3RGF0YSA9IHZpZXcuZ2V0Vmlld0RhdGEoKTtcblxuXHRcdFx0Y29uc3QgZHJhZnRSb290UGF0aCA9IE1vZGVsSGVscGVyLmdldERyYWZ0Um9vdFBhdGgoYmluZGluZ0NvbnRleHQpID8/IGJpbmRpbmdDb250ZXh0LmdldFBhdGgoKTtcblx0XHRcdGxldCB1cmxOYXZpZ2F0aW9uID0gYXdhaXQgY29udHJvbGxlci5fcm91dGluZy5nZXRIYXNoRm9yTmF2aWdhdGlvbihiaW5kaW5nQ29udGV4dCwgbmF2UGF0aCk7XG5cdFx0XHRjb25zdCBpc1N0aWNreU1vZGUgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQoYmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSksXG5cdFx0XHRcdGlzSGlkZGVuRHJhZnRFbmFibGVkID1cblx0XHRcdFx0XHQoY29udHJvbGxlci5nZXRBcHBDb21wb25lbnQoKS5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpLmdldENhcGFiaWxpdGllcygpLkhpZGRlbkRyYWZ0IGFzIEhpZGRlbkRyYWZ0KT8uZW5hYmxlZCB8fFxuXHRcdFx0XHRcdGZhbHNlO1xuXG5cdFx0XHRjb25zdCBuYXZpZ2F0ZUZuID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRjb250cm9sbGVyXG5cdFx0XHRcdFx0LmdldEFwcENvbXBvbmVudCgpXG5cdFx0XHRcdFx0LmdldFJvdXRlclByb3h5KClcblx0XHRcdFx0XHQubmF2VG9IYXNoKHVybE5hdmlnYXRpb24sIHRydWUsIGZhbHNlLCBmYWxzZSwgaXNTdGlja3lNb2RlIHx8IGlzSGlkZGVuRHJhZnRFbmFibGVkKTtcblx0XHRcdH07XG5cblx0XHRcdC8vIFRvIGtub3cgaWYgd2UncmUgbmF2aWdhdGluZyBvbiB0aGUgc2FtZSBPUCBFbnRpdHlcblx0XHRcdGlmICghdXJsTmF2aWdhdGlvbj8uc3RhcnRzV2l0aChcIi9cIikpIHtcblx0XHRcdFx0dXJsTmF2aWdhdGlvbiA9IGAvJHt1cmxOYXZpZ2F0aW9ufWA7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBzYW1lT1BOYXZpZ2F0aW9uID0gdXJsTmF2aWdhdGlvbi5zdGFydHNXaXRoKGRyYWZ0Um9vdFBhdGgpO1xuXG5cdFx0XHQvLyBTaG93IGRyYWZ0IGxvc3MgY29uZmlybWF0aW9uIGRpYWxvZyBpbiBjYXNlIG9mIE9iamVjdCBwYWdlXG5cdFx0XHRpZiAodmlld0RhdGEuY29udmVydGVyVHlwZSA9PT0gXCJPYmplY3RQYWdlXCIgJiYgIU1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChtZXRhTW9kZWwpICYmICFzYW1lT1BOYXZpZ2F0aW9uKSB7XG5cdFx0XHRcdGRyYWZ0LnByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uKFxuXHRcdFx0XHRcdG5hdmlnYXRlRm4sXG5cdFx0XHRcdFx0RnVuY3Rpb24ucHJvdG90eXBlLFxuXHRcdFx0XHRcdGJpbmRpbmdDb250ZXh0LFxuXHRcdFx0XHRcdHZpZXcuZ2V0Q29udHJvbGxlcigpLFxuXHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0ZHJhZnQuTmF2aWdhdGlvblR5cGUuRm9yd2FyZE5hdmlnYXRpb25cblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG5hdmlnYXRlRm4oKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0TG9nLmVycm9yKFxuXHRcdFx0XHRcIkZpZWxkUnVudGltZTogTm8gcm91dGluZyBsaXN0ZW5lciBjb250cm9sbGVyIGV4dGVuc2lvbiBmb3VuZC4gSW50ZXJuYWwgbmF2aWdhdGlvbiBhYm9ydGVkLlwiLFxuXHRcdFx0XHRcInNhcC5mZS5tYWNyb3MuZmllbGQuRmllbGRSdW50aW1lXCIsXG5cdFx0XHRcdFwib25EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGhcIlxuXHRcdFx0KTtcblx0XHR9XG5cdH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEZpZWxkUnVudGltZUhlbHBlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztFQWlFQSxNQUFNQSxrQkFBa0IsR0FBRztJQUMxQkMsY0FBYyxFQUFFLENBQUMsQ0FBNEQ7SUFDN0VDLG1CQUFtQixFQUFFLEtBQUs7SUFFMUJDLG9CQUFvQixFQUFFLFNBQUFBLENBQVVDLEtBQWMsRUFBRUMsVUFBeUMsRUFBUTtNQUNoRyxNQUFNQyxJQUFJLEdBQUdDLFdBQVcsQ0FBQ0MsYUFBYSxDQUFDSixLQUFLLENBQUM7TUFDN0MsTUFBTUssbUJBQW1CLEdBQUdMLEtBQUssQ0FBQ00saUJBQWlCLENBQUMsQ0FBQztNQUNyRCxJQUFJQyxzQkFBK0I7O01BRW5DO01BQ0EsTUFBTUMsWUFBWSxHQUFJSCxtQkFBbUIsRUFBY0ksVUFBVSxDQUFDLENBQUM7TUFFbkUsSUFBSUQsWUFBWSxDQUFDRSxHQUFHLENBQUMsd0NBQXdDLENBQUMsRUFBRTtRQUMvRDtRQUNBSCxzQkFBc0IsR0FBR0YsbUJBQThCO01BQ3hELENBQUMsTUFBTTtRQUNOO1FBQ0E7UUFDQUUsc0JBQXNCLEdBQUdMLElBQUksQ0FBQ0ksaUJBQWlCLENBQUMsQ0FBQztNQUNsRDtNQUNBLE1BQU1LLFlBQVksR0FBR2Ysa0JBQWtCLENBQUNnQixzQkFBc0IsQ0FBQ1gsVUFBVSxDQUFDO01BQzFFLE1BQU1ZLFdBQVcsR0FBR2IsS0FBSyxDQUFDVSxHQUFHLENBQVcsa0JBQWtCLENBQUMsSUFBSVYsS0FBSyxDQUFDYyxZQUFZLENBQUMsQ0FBQztNQUNuRjtNQUNBLE1BQU1DLFFBQVEsR0FBR0MsV0FBVyxDQUFDQyxxQkFBcUIsQ0FBQ2pCLEtBQUssQ0FBQ00saUJBQWlCLENBQUMsQ0FBWSxDQUFDO01BQ3hGLE1BQU1Z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
@@ -17,6 +17,7 @@ import type { CheckBox$SelectEventParameters } from "sap/m/CheckBox";
17
17
  import type { $IllustratedMessageSettings } from "sap/m/IllustratedMessage";
18
18
  import IllustratedMessage from "sap/m/IllustratedMessage";
19
19
 
20
+ import type { HiddenDraft } from "sap/fe/core/converters/ManifestSettings";
20
21
  import IllustratedMessageSize from "sap/m/IllustratedMessageSize";
21
22
  import IllustratedMessageType from "sap/m/IllustratedMessageType";
22
23
  import type InputBase from "sap/m/InputBase";
@@ -574,17 +575,16 @@ const FieldRuntimeHelper = {
574
575
 
575
576
  const draftRootPath = ModelHelper.getDraftRootPath(bindingContext) ?? bindingContext.getPath();
576
577
  let urlNavigation = await controller._routing.getHashForNavigation(bindingContext, navPath);
578
+ const isStickyMode = ModelHelper.isStickySessionSupported(bindingContext.getModel().getMetaModel()),
579
+ isHiddenDraftEnabled =
580
+ (controller.getAppComponent().getEnvironmentCapabilities().getCapabilities().HiddenDraft as HiddenDraft)?.enabled ||
581
+ false;
582
+
577
583
  const navigateFn = (): void => {
578
584
  controller
579
585
  .getAppComponent()
580
586
  .getRouterProxy()
581
- .navToHash(
582
- urlNavigation,
583
- true,
584
- false,
585
- false,
586
- !ModelHelper.isStickySessionSupported(bindingContext.getModel().getMetaModel())
587
- );
587
+ .navToHash(urlNavigation, true, false, false, isStickyMode || isHiddenDraftEnabled);
588
588
  };
589
589
 
590
590
  // To know if we're navigating on the same OP Entity