@sapui5/sap.fe.templates 1.142.11 → 1.142.13

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.
@@ -25,6 +25,7 @@ import NavigationReason from "sap/fe/core/controllerextensions/routing/Navigatio
25
25
  import type CommandExecution from "sap/fe/core/controls/CommandExecution";
26
26
  import { RecommendationDialogDecision } from "sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog";
27
27
  import type { HiddenDraft, MicroChartManifestConfiguration } from "sap/fe/core/converters/ManifestSettings";
28
+ import { CreationMode } from "sap/fe/core/converters/ManifestSettings";
28
29
  import type { InternalModelContext } from "sap/fe/core/helpers/ModelHelper";
29
30
  import ModelHelper from "sap/fe/core/helpers/ModelHelper";
30
31
  import { getResourceModel } from "sap/fe/core/helpers/ResourceModelHelper";
@@ -296,7 +297,9 @@ class ObjectPageController extends PageController {
296
297
  */
297
298
  private checkSectionsForNonResponsiveTable(subSections: ObjectPageSubSection[]): void {
298
299
  const changeClassForTables = (event: Event, visibleSubSection: ObjectPageSubSection): void => {
299
- const blocks = [...visibleSubSection.getBlocks(), ...visibleSubSection.getMoreBlocks()];
300
+ const blocks = [...visibleSubSection.getBlocks(), ...visibleSubSection.getMoreBlocks()].filter((block) =>
301
+ block.isA("sap.fe.templates.ObjectPage.controls.SubSectionBlock")
302
+ );
300
303
  if (blocks.length === 1) {
301
304
  const table = this.searchTableInBlock(blocks[0] as SubSectionBlock);
302
305
  if (!table) {
@@ -306,10 +309,13 @@ class ObjectPageController extends PageController {
306
309
  const tableAPI = table.getParent()?.isA<TableAPI>("sap.fe.macros.table.TableAPI")
307
310
  ? (table.getParent() as TableAPI)
308
311
  : undefined;
312
+ const tableControl = tableAPI?.getTableDefinition().control;
309
313
  if (
310
314
  tableType &&
311
315
  (tableType?.isA("sap.ui.mdc.table.GridTableType") || tableType?.isA("sap.ui.mdc.table.TreeTableType")) &&
312
- tableAPI?.getTableDefinition().control.rowCountMode === "Auto"
316
+ tableControl?.rowCountMode === "Auto" &&
317
+ // Exclude CreationRow mode unless sectionLayout is Tabs: the fit-container style creates whitespace in the subsection in edit mode when CreationRow is used in TableCreationOptions
318
+ (tableControl?.creationMode !== CreationMode.CreationRow || this.getView().getViewData().sectionLayout === "Tabs")
313
319
  ) {
314
320
  //In case there is only a single table in a subSection we fit that to the whole page so that the scrollbar comes only on table and not on page
315
321
  visibleSubSection.addStyleClass("sapUxAPObjectPageSubSectionFitContainer");
@@ -1030,6 +1036,15 @@ class ObjectPageController extends PageController {
1030
1036
  }
1031
1037
  });
1032
1038
 
1039
+ // The FCL Close button loses its DOM node between mousedown and mouseup when the Name
1040
+ // (EditableHeaderTitle) field has focus: blur triggers side effects → OData refresh →
1041
+ // OPDT re-renders navActionsToolbar, detaching the node before click fires.
1042
+ // Calling closeColumn() on mousedown captures the intent before the re-render.
1043
+ const fclCloseButton = oView.byId("fe::FCLStandardAction::Close") as Button;
1044
+ fclCloseButton?.attachBrowserEvent("mousedown", (): void => {
1045
+ this._routing.closeColumn();
1046
+ });
1047
+
1033
1048
  this.mergePatchDraft = true;
1034
1049
  }
1035
1050
  }
@@ -440,6 +440,9 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/ManifestSet
440
440
  */
441
441
  _exports.getBindingWithGroupIdFromConfig = getBindingWithGroupIdFromConfig;
442
442
  const createBindingForAlternateAndSecondaryKeys = function (dataModelObjectPath) {
443
+ if (!dataModelObjectPath?.navigationProperties?.length) {
444
+ return undefined;
445
+ }
443
446
  let binding;
444
447
  const alternateAndSecondaryKeys = ModelHelper.getAlternateAndSecondaryKeys(dataModelObjectPath?.targetEntityType, dataModelObjectPath?.targetEntitySet);
445
448
  if (alternateAndSecondaryKeys?.length) {
@@ -808,4 +811,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/ManifestSet
808
811
  _exports.getFormAriaText = getFormAriaText;
809
812
  return _exports;
810
813
  }, false);
811
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCdXR0b25UeXBlIiwibUxpYnJhcnkiLCJnZXRFeHByZXNzaW9uRm9yVGl0bGUiLCJmdWxsQ29udGV4dFBhdGgiLCJ2aWV3RGF0YSIsImhlYWRlckluZm8iLCJnZXRUaXRsZUJpbmRpbmdFeHByZXNzaW9uIiwiZ2V0VGV4dEJpbmRpbmdFeHByZXNzaW9uIiwidW5kZWZpbmVkIiwiX2V4cG9ydHMiLCJnZXRFeHByZXNzaW9uRm9yRGVzY3JpcHRpb24iLCJvSGVhZGVySW5mbyIsImRlc2NyaXB0aW9uQmluZGluZyIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsIkRlc2NyaXB0aW9uIiwiVmFsdWUiLCIkdGFyZ2V0IiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJUZXh0IiwiVUkiLCJUZXh0QXJyYW5nZW1lbnQiLCJhZGRUZXh0QXJyYW5nZW1lbnRUb0JpbmRpbmdFeHByZXNzaW9uIiwiZGVzY3JpcHRpb24iLCJjb21waWxlRXhwcmVzc2lvbiIsImZvcm1hdFZhbHVlUmVjdXJzaXZlbHkiLCJnZXRFeHByZXNzaW9uRm9yU2F2ZUJ1dHRvbiIsIm9WaWV3RGF0YSIsInNhdmVCdXR0b25UZXh0IiwicmVzb3VyY2VNb2RlbCIsImdldFRleHQiLCJjcmVhdGVCdXR0b25UZXh0Iiwic2F2ZUV4cHJlc3Npb24iLCJzdGFydGluZ0VudGl0eVNldCIsIlNlc3Npb24iLCJTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiaWZFbHNlIiwiSXNDcmVhdGVNb2RlIiwiRHJhZnQiLCJJc05ld09iamVjdCIsImdldEV4cHJlc3Npb25Gb3JMYWJlbE9uSGVhZGVyRm9ybSIsImxhYmVsIiwiaXNNYW5pZmVzdEFjdGlvbiIsImFjdGlvbiIsIm5vbk1hbmlmZXN0QWN0aW9ucyIsImluY2x1ZGVzIiwidHlwZSIsImJ1aWxkRW1waGFzaXplZEJ1dHRvbkV4cHJlc3Npb24iLCJkYXRhQ29udGV4dFBhdGgiLCJpZGVudGlmaWNhdGlvbiIsInRhcmdldEVudGl0eVR5cGUiLCJJZGVudGlmaWNhdGlvbiIsImRhdGFGaWVsZHNXaXRoQ3JpdGljYWxpdHkiLCJmaWx0ZXIiLCJkYXRhRmllbGQiLCIkVHlwZSIsIkNyaXRpY2FsaXR5IiwiZGF0YUZpZWxkc0JpbmRpbmdFeHByZXNzaW9ucyIsImxlbmd0aCIsIm1hcCIsImNyaXRpY2FsaXR5VmlzaWJsZUJpbmRpbmdFeHByZXNzaW9uIiwiYW5kIiwibm90IiwiZXF1YWwiLCJIaWRkZW4iLCJvciIsImNvbnN0YW50IiwiR2hvc3QiLCJFbXBoYXNpemVkIiwiZ2V0RWxlbWVudEJpbmRpbmciLCJzUGF0aCIsInNOYXZpZ2F0aW9uUGF0aCIsIk9EYXRhTW9kZWxBbm5vdGF0aW9uSGVscGVyIiwiZ2V0TmF2aWdhdGlvblBhdGgiLCJjaGVja0RyYWZ0U3RhdGUiLCJlbnRpdHlTZXQiLCJEcmFmdFJvb3QiLCJFZGl0QWN0aW9uIiwiY2hlY2tDb2xsYWJvcmF0aW9uRHJhZnRSb290IiwiU2hhcmVBY3Rpb24iLCJnZXRTd2l0Y2hUb0FjdGl2ZVZpc2liaWxpdHkiLCJwYXRoSW5Nb2RlbCIsIklzRWRpdGFibGUiLCJnZXRTd2l0Y2hUb0RyYWZ0VmlzaWJpbGl0eSIsImdldFN3aXRjaERyYWZ0QW5kQWN0aXZlVmlzaWJpbGl0eSIsIl9maW5kQWN0aW9uIiwiYUNvbnZlcnRlckNvbnRleHRIZWFkZXJBY3Rpb25zIiwic0FjdGlvblR5cGUiLCJvQWN0aW9uIiwiZmluZCIsIm9IZWFkZXJBY3Rpb24iLCJnZXREZWxldGVDb21tYW5kRXhlY3V0aW9uRW5hYmxlZCIsIm9EZWxldGVBY3Rpb24iLCJlbmFibGVkIiwiZ2V0RGVsZXRlQ29tbWFuZEV4ZWN1dGlvblZpc2libGUiLCJ2aXNpYmxlIiwiZ2V0RWRpdENvbW1hbmRFeGVjdXRpb25WaXNpYmxlIiwib0VkaXRBY3Rpb24iLCJnZXRFZGl0Q29tbWFuZEV4ZWN1dGlvbkVuYWJsZWQiLCJnZXRFZGl0QWN0aW9uIiwib0VudGl0eVNldCIsImdldFBhdGgiLCJhUGF0aHMiLCJzcGxpdCIsInJvb3RFbnRpdHlTZXRQYXRoIiwicm9vdEVudGl0eVNldEFubm5vdGF0aW9ucyIsImdldE9iamVjdCIsImJEcmFmdFJvb3QiLCJoYXNPd25Qcm9wZXJ0eSIsImJEcmFmdE5vZGUiLCJiU3RpY2t5U2Vzc2lvbiIsInNBY3Rpb25OYW1lIiwiaXNSZWFkT25seUZyb21TdGF0aWNBbm5vdGF0aW9ucyIsIm9Bbm5vdGF0aW9ucyIsIm9GaWVsZENvbnRyb2wiLCJiQ29tcHV0ZWQiLCJiSW1tdXRhYmxlIiwiYlJlYWRPbmx5IiwiQm9vbCIsInJlYWRPbmx5RXhwcmVzc2lvbkZyb21EeW5hbWljQW5ub3RhdGlvbnMiLCJzSXNGaWVsZENvbnRyb2xQYXRoUmVhZE9ubHkiLCJCaW5kaW5nSW5mbyIsInBhcnNlIiwiZ2V0RXhwcmVzc2lvbkZvck1pY3JvQ2hhcnRUaXRsZVByZXNzIiwib0NvbmZpZ3VyYXRpb24iLCJ0YXJnZXRBbm5vdGF0aW9uUGF0aCIsInRhcmdldEFubm90YXRpb25QYXRoRGF0TW9kZWxPYmplY3QiLCJvTWFuaWZlc3RPdXRib3VuZCIsInNDb2xsZWN0aW9uTmFtZSIsImdldE1pY3JvQ2hhcnRDb250cm9sQ29uZmlndXJhdGlvblBhdGgiLCJuYXZpZ2F0aW9uQ29uZmlndXJhdGlvbiIsIkpTT04iLCJzdHJpbmdpZnkiLCJnZXRNaWNyb0NoYXJ0VGl0bGVBc0xpbmsiLCJvQ29udHJvbENvbmZpZ3VyYXRpb24iLCJjb2xsZWN0aW9uTmFtZSIsInRhcmdldENvbnRyb2xDb25maWd1cmF0aW9uIiwidGFyZ2V0T2JqZWN0IiwiVmlzdWFsaXphdGlvbnMiLCJ2YWx1ZSIsImdldEdyb3VwSWRGcm9tQ29uZmlnIiwib0NvbmZpZ3VyYXRpb25zIiwic0Fubm90YXRpb25QYXRoIiwic0RlZmF1bHRHcm91cElkIiwiYUF1dG9QYXR0ZXJucyIsInNHcm91cElkIiwicmVxdWVzdEdyb3VwSWQiLCJzb21lIiwiYXV0b1BhdHRlcm4iLCJnZXRHcm91cElkRnJvbUNvbmZpZ0Zvck1pY3JvQ2hhcnQiLCJ0YXJnZXRBbm5vdGF0aW9uUGF0aERhdGFNb2RlbE9iamVjdCIsImdldEJpbmRpbmdXaXRoR3JvdXBJZEZyb21Db25maWciLCJzS2V5Iiwic0JpbmRpbmciLCJjcmVhdGVCaW5kaW5nRm9yQWx0ZXJuYXRlQW5kU2Vjb25kYXJ5S2V5cyIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJiaW5kaW5nIiwiYWx0ZXJuYXRlQW5kU2Vjb25kYXJ5S2V5cyIsIk1vZGVsSGVscGVyIiwiZ2V0QWx0ZXJuYXRlQW5kU2Vjb25kYXJ5S2V5cyIsInRhcmdldEVudGl0eVNldCIsInBhdGgiLCJwYXJhbWV0ZXJzIiwiJHNlbGVjdCIsImpvaW4iLCJkb2VzRmllbGRHcm91cENvbnRhaW5Pbmx5T25lTXVsdGlMaW5lRGF0YUZpZWxkIiwiYUZvcm1FbGVtZW50cyIsImlzVmFsdWVNdWx0aWxpbmVUZXh0IiwiZ2V0U2hhcmVCdXR0b25WaXNpYmlsaXR5IiwiaXNTaGFyZUJ1dHRvblZpc2libGVGb3JNeUluYm94Iiwic2hhcmVCdXR0b25WaXNpYmlsaXR5RXhwIiwiZmNsRW5hYmxlZCIsImdldFZpc2libGl0eU9mSGVhZGVySW5mbyIsIm9UaXRsZUFubm90YXRpb25zIiwib0Rlc2NyaXB0aW9uQW5ub3RhdGlvbnMiLCJvRmllbGRUaXRsZUZpZWxkQ29udHJvbCIsIm9GaWVsZERlc2NyaXB0aW9uRmllbGRDb250cm9sIiwiYklzVGl0bGVSZWFkT25seSIsInRpdGxlRXhwcmVzc2lvbiIsImJJc0Rlc2NyaXB0aW9uUmVhZE9ubHkiLCJkZXNjcmlwdGlvbkV4cHJlc3Npb24iLCJjb21iaW5lVGl0bGVBbmREZXNjcmlwdGlvbkV4cHJlc3Npb24iLCJvVGl0bGVGaWVsZENvbnRyb2wiLCJvRGVzY3JpcHRpb25GaWVsZENvbnRyb2wiLCJnZXRQcmVzc0V4cHJlc3Npb25Gb3JEZWxldGUiLCJkZWxldGFibGVDb250ZXh0cyIsInRpdGxlIiwicGFyYW1zIiwiQ29tbW9uSGVscGVyIiwiZ2VuZXJhdGVGdW5jdGlvbiIsIm9iamVjdFRvU3RyaW5nIiwiZ2V0UHJlc3NFeHByZXNzaW9uRm9yRWRpdCIsIm9EYXRhRmllbGQiLCJzRW50aXR5U2V0TmFtZSIsInNFZGl0YWJsZUNvbnRleHRzIiwiYWRkU2luZ2xlUXVvdGVzIiwiQWN0aW9uIiwic0RhdGFGaWVsZEVudW1NZW1iZXIiLCJJbnZvY2F0aW9uR3JvdXBpbmciLCJzSW52b2NhdGlvbkdyb3VwIiwib1BhcmFtcyIsImNvbnRleHRzIiwiZW50aXR5U2V0TmFtZSIsImludm9jYXRpb25Hcm91cGluZyIsIm1vZGVsIiwiTGFiZWwiLCJpc05hdmlnYWJsZSIsImRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbiIsImRpc2FibGVTdHJpY3RIYW5kbGluZyIsImdldFByZXNzRXhwcmVzc2lvbkZvckZvb3RlckFubm90YXRpb25BY3Rpb24iLCJkYXRhRmllbGRNb2RlbFBhdGgiLCJoZWFkZXJBY3Rpb24iLCJhY3Rpb25Db250ZXh0cyIsImdldFByZXNzRXhwcmVzc2lvbkZvclByaW1hcnlBY3Rpb24iLCJwb3NpdGl2ZUFjdGlvblZpc2libGUiLCJwb3NpdGl2ZUFjdGlvbkVuYWJsZWQiLCJlZGl0QWN0aW9uVmlzaWJsZSIsImVkaXRBY3Rpb25FbmFibGVkIiwic0FjdGlvbkNvbnRleHRzIiwidG9TdHJpbmciLCJvQ29uZGl0aW9ucyIsImdldFN0YXNoYWJsZUhCb3hCaW5kaW5nIiwib0hlYWRlckZhY2V0IiwiRmFjZXQiLCJ0YXJnZXRBbm5vdGF0aW9uVHlwZSIsInRhcmdldEFubm90YXRpb25WYWx1ZSIsImdldEhlYWRlckZvcm1IYm94UmVuZGVyVHlwZSIsImdldERlZmF1bHRBY3Rpb25IYW5kbGVyIiwib0N0eCIsIm9EYXRhRmllbGRGb3JEZWZhdWx0QWN0aW9uIiwiZGVmYXVsdEFjdGlvbkNvbnRleHRPckVudGl0eVNldCIsImRlZmF1bHRBY3Rpb24iLCJjb21tYW5kIiwicHJlc3MiLCJub1dyYXAiLCJidWlsZEFjdGlvbldyYXBwZXIiLCJpZCIsImlvRXgiLCJpc1Zpc3VhbGl6YXRpb25Jc1BhcnRPZlByZXZpZXciLCJzdWJTZWN0aW9uIiwiaXNQYXJ0T2ZQcmV2aWV3IiwicHJlc2VudGF0aW9uIiwidmlzdWFsaXphdGlvbnMiLCJnZXRGb290ZXJWaXNpYmlsaXR5RXhwcmVzc2lvbiIsImNvbnRleHQiLCJmb290ZXJBY3Rpb25zIiwibWV0YU1vZGVsIiwiZ2V0SW50ZXJmYWNlIiwiZ2V0TW9kZWwiLCJfZ2VuZXJhdGVCaW5kaW5nc0ZvckFjdGlvbnMiLCJhY3Rpb25zIiwicmVzb2x2ZUJpbmRpbmdTdHJpbmciLCJnZXRBY3Rpb25Nb2RlbFBhdGgiLCJhbm5vdGF0aW9uUGF0aCIsImFjdGlvbkNvbnRleHQiLCJnZXRDb250ZXh0IiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZGV0ZXJtaW5pbmdBY3Rpb25zIiwiQWN0aW9uVHlwZSIsIkRhdGFGaWVsZEZvckFjdGlvbiIsIm1hbmlmZXN0QWN0aW9uQmluZGluZ3MiLCJkZXRlcm1pbmluZ0FjdGlvbkJpbmRpbmdzIiwiaXNOb3RIaWRkZW5EZXRlcm1pbmluZ0FjdGlvbiIsImFjdGlvbkNvbnRleHRNb2RlbFBhdGgiLCJnZXRIZWFkZXJMZXZlbCIsImlzTW9yZUNvbnRlbnQiLCJzaG93U3ViU2VjdGlvblRpdGxlIiwibGV2ZWwiLCJkYXRhVmlzdWFsaXphdGlvblRpdGxlVmlzaWJsZSIsImdldEhlYWRlckZvcm1BcmlhTGFiZWxsZWRCeSIsImhlYWRlckZvcm1EYXRhIiwiZm9ybUVsZW1lbnRJZFByZWZpeCIsInRpdGxlSWQiLCJTdGFibGVJZEhlbHBlciIsImdlbmVyYXRlIiwibGFiZWxJZCIsImdldEZvcm1BcmlhVGV4dCIsInN1YlNlY3Rpb25UaXRsZSIsInJlc291cmNlQnVuZGxlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwicmVxdWlyZXNJQ29udGV4dCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiT2JqZWN0UGFnZVRlbXBsYXRpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gRm9ybWF0dGVycyBmb3IgdGhlIE9iamVjdCBQYWdlXG5pbXBvcnQgdHlwZSB7IEVudGl0eVNldCwgTmF2aWdhdGlvblByb3BlcnR5LCBQcm9wZXJ0eSwgU2luZ2xldG9uIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7XG5cdENoYXJ0LFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGREZWZhdWx0LFxuXHREYXRhRmllbGRGb3JBY3Rpb24sXG5cdERhdGFGaWVsZFR5cGVzLFxuXHRGYWNldCxcblx0SGVhZGVySW5mb1R5cGUsXG5cdFByZXNlbnRhdGlvblZhcmlhbnRcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIFBhdGhJbk1vZGVsRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHtcblx0YW5kLFxuXHRjb21waWxlRXhwcmVzc2lvbixcblx0Y29uc3RhbnQsXG5cdGVxdWFsLFxuXHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sXG5cdGlmRWxzZSxcblx0bm90LFxuXHRvcixcblx0cGF0aEluTW9kZWwsXG5cdHJlc29sdmVCaW5kaW5nU3RyaW5nXG59IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBNaWNyb0NoYXJ0TWFuaWZlc3RDb25maWd1cmF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgQWN0aW9uVHlwZSwgdHlwZSBDb250cm9sQ29uZmlndXJhdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsUHJvcGVydHlBbm5vdGF0aW9ucyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VBY3Rpb24sIEN1c3RvbUFjdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgQW5ub3RhdGlvbkZvcm1FbGVtZW50IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0Zvcm1cIjtcbmltcG9ydCB0eXBlIHsgRmllbGRHcm91cEZhY2V0LCBIZWFkZXJGb3JtRGF0YSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL09iamVjdFBhZ2UvSGVhZGVyRmFjZXRcIjtcbmltcG9ydCB0eXBlIHsgRGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvT2JqZWN0UGFnZS9TdWJTZWN0aW9uXCI7XG5pbXBvcnQgeyBEcmFmdCwgVUkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCAqIGFzIFN0YWJsZUlkSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRUaXRsZUJpbmRpbmdFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVGl0bGVIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgVmlld0RhdGEgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IHtcblx0YWRkVGV4dEFycmFuZ2VtZW50VG9CaW5kaW5nRXhwcmVzc2lvbixcblx0Zm9ybWF0VmFsdWVSZWN1cnNpdmVseSxcblx0Z2V0VGV4dEJpbmRpbmdFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkVGVtcGxhdGluZ1wiO1xuaW1wb3J0IG1MaWJyYXJ5IGZyb20gXCJzYXAvbS9saWJyYXJ5XCI7XG5pbXBvcnQgQmluZGluZ0luZm8gZnJvbSBcInNhcC91aS9iYXNlL0JpbmRpbmdJbmZvXCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgdHlwZSB7IE1hbmlmZXN0T3V0Ym91bmRFbnRyeSB9IGZyb20gXCJzYXAvdWkvY29yZS9NYW5pZmVzdFwiO1xuaW1wb3J0IHR5cGUgeyBJQ29udGV4dCB9IGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IE9EYXRhTW9kZWxBbm5vdGF0aW9uSGVscGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQW5ub3RhdGlvbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsVHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi8uLi90eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcblxuY29uc3QgQnV0dG9uVHlwZSA9IG1MaWJyYXJ5LkJ1dHRvblR5cGU7XG5cbmV4cG9ydCBjb25zdCBnZXRFeHByZXNzaW9uRm9yVGl0bGUgPSBmdW5jdGlvbiAoXG5cdGZ1bGxDb250ZXh0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHR2aWV3RGF0YTogVmlld0RhdGEsXG5cdGhlYWRlckluZm8/OiBIZWFkZXJJbmZvVHlwZVxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRyZXR1cm4gZ2V0VGl0bGVCaW5kaW5nRXhwcmVzc2lvbihcblx0XHRmdWxsQ29udGV4dFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdFx0Z2V0VGV4dEJpbmRpbmdFeHByZXNzaW9uLFxuXHRcdHVuZGVmaW5lZCxcblx0XHRoZWFkZXJJbmZvLFxuXHRcdHZpZXdEYXRhXG5cdCk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgZXhwcmVzc2lvbiBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mIGFuIG9iamVjdCBwYWdlLlxuICogQHBhcmFtIGZ1bGxDb250ZXh0UGF0aCBUaGUgZnVsbCBjb250ZXh0IHBhdGggdXNlZCB0byByZWFjaCB0aGF0IG9iamVjdCBwYWdlXG4gKiBAcGFyYW0gb0hlYWRlckluZm8gVGhlIEBVSS5IZWFkZXJJbmZvIGFubm90YXRpb24gY29udGVudFxuICogQHBhcmFtIG9IZWFkZXJJbmZvLkRlc2NyaXB0aW9uXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgb2JqZWN0IHBhZ2UgZGVzY3JpcHRpb25cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEV4cHJlc3Npb25Gb3JEZXNjcmlwdGlvbiA9IGZ1bmN0aW9uIChcblx0ZnVsbENvbnRleHRQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPEVudGl0eVNldD4sXG5cdG9IZWFkZXJJbmZvPzogSGVhZGVySW5mb1R5cGVcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0bGV0IGRlc2NyaXB0aW9uQmluZGluZyA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbigob0hlYWRlckluZm8/LkRlc2NyaXB0aW9uIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWUpO1xuXHRpZiAoKG9IZWFkZXJJbmZvPy5EZXNjcmlwdGlvbiBhcyBEYXRhRmllbGRUeXBlcyk/LlZhbHVlPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0Py5hbm5vdGF0aW9ucz8uVUk/LlRleHRBcnJhbmdlbWVudCkge1xuXHRcdC8vIEluIGNhc2UgYW4gZXhwbGljaXQgdGV4dCBhcnJhbmdlbWVudCB3YXMgc2V0IHdlIG1ha2UgdXNlIG9mIGl0IGluIHRoZSBkZXNjcmlwdGlvbiBhcyB3ZWxsXG5cdFx0ZGVzY3JpcHRpb25CaW5kaW5nID0gYWRkVGV4dEFycmFuZ2VtZW50VG9CaW5kaW5nRXhwcmVzc2lvbihkZXNjcmlwdGlvbkJpbmRpbmcsIGZ1bGxDb250ZXh0UGF0aCk7XG5cdH1cblx0Y29uc3QgZGVzY3JpcHRpb24gPSBjb21waWxlRXhwcmVzc2lvbihmb3JtYXRWYWx1ZVJlY3Vyc2l2ZWx5KGRlc2NyaXB0aW9uQmluZGluZywgZnVsbENvbnRleHRQYXRoKSk7XG5cdHJldHVybiBkZXNjcmlwdGlvbiA9PT0gXCJ1bmRlZmluZWRcIiA/IFwiXCIgOiBkZXNjcmlwdGlvbjtcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBleHByZXNzaW9uIGZvciB0aGUgc2F2ZSBidXR0b24uXG4gKiBAcGFyYW0gb1ZpZXdEYXRhIFRoZSBjdXJyZW50IHZpZXcgZGF0YVxuICogQHBhcmFtIGZ1bGxDb250ZXh0UGF0aCBUaGUgcGF0aCB1c2VkIHVwIHVudGlsIGhlcmVcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdGhhdCBzaG93cyB0aGUgcmlnaHQgc2F2ZSBidXR0b24gdGV4dFxuICovXG5leHBvcnQgY29uc3QgZ2V0RXhwcmVzc2lvbkZvclNhdmVCdXR0b24gPSBmdW5jdGlvbiAoXG5cdG9WaWV3RGF0YTogVmlld0RhdGEsXG5cdGZ1bGxDb250ZXh0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxFbnRpdHlTZXQ+XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IHNhdmVCdXR0b25UZXh0ID0gb1ZpZXdEYXRhLnJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfT1BfT0JKRUNUX1BBR0VfU0FWRVwiKTtcblx0Y29uc3QgY3JlYXRlQnV0dG9uVGV4dCA9IG9WaWV3RGF0YS5yZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX09QX09CSkVDVF9QQUdFX0NSRUFURVwiKTtcblx0bGV0IHNhdmVFeHByZXNzaW9uO1xuXG5cdGlmICgoZnVsbENvbnRleHRQYXRoLnN0YXJ0aW5nRW50aXR5U2V0IGFzIEVudGl0eVNldCkuYW5ub3RhdGlvbnMuU2Vzc2lvbj8uU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCkge1xuXHRcdC8vIElmIHdlJ3JlIGluIHN0aWNreSBtb2RlIEFORCB0aGUgdWkgaXMgaW4gY3JlYXRlIG1vZGUsIHNob3cgQ3JlYXRlLCBlbHNlIHNob3cgU2F2ZVxuXHRcdHNhdmVFeHByZXNzaW9uID0gaWZFbHNlKFVJLklzQ3JlYXRlTW9kZSwgY3JlYXRlQnV0dG9uVGV4dCwgc2F2ZUJ1dHRvblRleHQpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIElmIHdlJ3JlIGluIGRyYWZ0IEFORCB0aGUgZHJhZnQgaXMgYSBuZXcgb2JqZWN0ICghSXNBY3RpdmVFbnRpdHkgJiYgIUhhc0FjdGl2ZUVudGl0eSksIHNob3cgY3JlYXRlLCBlbHNlIHNob3cgc2F2ZVxuXHRcdHNhdmVFeHByZXNzaW9uID0gaWZFbHNlKERyYWZ0LklzTmV3T2JqZWN0LCBjcmVhdGVCdXR0b25UZXh0LCBzYXZlQnV0dG9uVGV4dCk7XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKHNhdmVFeHByZXNzaW9uKTtcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBleHByZXNzaW9uIG9mIHRoZSBsYWJlbCBmb3IgYSBmaWVsZCBpbnRvIGEgaGVhZGVyIGZvcm0uXG4gKiBAcGFyYW0gbGFiZWwgVGhlIGxhYmVsIG9mIHRoZSBoZWFkZXIgZm9ybSBpbiBhbiBvYmplY3QgcGFnZS5cbiAqIEBwYXJhbSB2aWV3RGF0YSBUaGUgY3VycmVudCB2aWV3IGRhdGEuXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgdHJhbnNsYXRlZCBsYWJlbCBvZiB0aGUgb2YgdGhlIGhlYWRlciBmb3JtIGluIGFuIG9iamVjdCBwYWdlLlxuICovXG5leHBvcnQgY29uc3QgZ2V0RXhwcmVzc2lvbkZvckxhYmVsT25IZWFkZXJGb3JtID0gZnVuY3Rpb24gKGxhYmVsOiBTdHJpbmcsIHZpZXdEYXRhOiBWaWV3RGF0YSk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0cmV0dXJuIHZpZXdEYXRhLnJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkhFQURFUl9GT1JNX0xBQkVMXCIsIFtsYWJlbF0pO1xufTtcblxuLyoqXG4gKiBNZXRob2QgcmV0dXJucyBXaGV0aGVyIHRoZSBhY3Rpb24gdHlwZSBpcyBtYW5pZmVzdCBvciBub3QuXG4gKiBAcGFyYW0gYWN0aW9uIFRoZSBhY3Rpb24gb2JqZWN0XG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgYWN0aW9uIGlzIGNvbWluZyBmcm9tIG1hbmlmZXN0LCBgZmFsc2VgIG90aGVyd2lzZVxuICovXG5leHBvcnQgY29uc3QgaXNNYW5pZmVzdEFjdGlvbiA9IGZ1bmN0aW9uIChhY3Rpb246IEJhc2VBY3Rpb24gfCBDdXN0b21BY3Rpb24pOiBhY3Rpb24gaXMgQ3VzdG9tQWN0aW9uIHtcblx0Y29uc3Qgbm9uTWFuaWZlc3RBY3Rpb25zID0gW1xuXHRcdFwiUHJpbWFyeVwiLFxuXHRcdFwiRGVmYXVsdEFwcGx5XCIsXG5cdFx0XCJTZWNvbmRhcnlcIixcblx0XHRcIkZvckFjdGlvblwiLFxuXHRcdFwiRm9yTmF2aWdhdGlvblwiLFxuXHRcdFwiU3dpdGNoVG9BY3RpdmVPYmplY3RcIixcblx0XHRcIlN3aXRjaFRvRHJhZnRPYmplY3RcIixcblx0XHRcIkRyYWZ0QWN0aW9uc1wiLFxuXHRcdFwiQ29weVwiLFxuXHRcdFwiU3RhbmRhcmRcIlxuXHRdO1xuXHRyZXR1cm4gIW5vbk1hbmlmZXN0QWN0aW9ucy5pbmNsdWRlcyhhY3Rpb24udHlwZSA/PyBcIlwiKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIGNvbXBpbGVkIGV4cHJlc3Npb24gdG8gZGV0ZXJtaW5lIEVtcGhhc2l6ZWQgIGJ1dHRvbiB0eXBlIGJhc2VkIG9uIENyaXRpY2FsaXR5IGFjcm9zcyBhbGwgYWN0aW9uc1xuICogSWYgY3JpdGljYWwgYWN0aW9uIGlzIHJlbmRlcmVkLCBpdHMgY29uc2lkZXJlZCB0byBiZSB0aGUgcHJpbWFyeSBhY3Rpb24uIEhlbmNlIHRlbXBsYXRlJ3MgZGVmYXVsdCBwcmltYXJ5IGFjdGlvbiBpcyBzZXQgYmFjayB0byBEZWZhdWx0LlxuICogQHBhcmFtIGRhdGFDb250ZXh0UGF0aCBUaGUgZGF0YU1vZGVsT2JqZWN0UGF0aCByZWxhdGVkIHRvIHRoZSBjb250ZXh0XG4gKiBAcmV0dXJucyBBbiBleHByZXNzaW9uIHRvIGRlZHVjZSBpZiBidXR0b24gdHlwZSBpcyBEZWZhdWx0IG9yIEVtcGhhc2l6ZWRcbiAqL1xuZXhwb3J0IGNvbnN0IGJ1aWxkRW1waGFzaXplZEJ1dHRvbkV4cHJlc3Npb24gPSBmdW5jdGlvbiAoXG5cdGRhdGFDb250ZXh0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHkgfCBTaW5nbGV0b24+XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IGlkZW50aWZpY2F0aW9uID0gZGF0YUNvbnRleHRQYXRoLnRhcmdldEVudGl0eVR5cGU/LmFubm90YXRpb25zPy5VST8uSWRlbnRpZmljYXRpb247XG5cdGNvbnN0IGRhdGFGaWVsZHNXaXRoQ3JpdGljYWxpdHkgPVxuXHRcdGlkZW50aWZpY2F0aW9uPy5maWx0ZXIoKGRhdGFGaWVsZCkgPT4gZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24gJiYgZGF0YUZpZWxkLkNyaXRpY2FsaXR5KSB8fCBbXTtcblxuXHRjb25zdCBkYXRhRmllbGRzQmluZGluZ0V4cHJlc3Npb25zID0gZGF0YUZpZWxkc1dpdGhDcml0aWNhbGl0eS5sZW5ndGhcblx0XHQ/IGRhdGFGaWVsZHNXaXRoQ3JpdGljYWxpdHkubWFwKChkYXRhRmllbGQpID0+IHtcblx0XHRcdFx0Y29uc3QgY3JpdGljYWxpdHlWaXNpYmxlQmluZGluZ0V4cHJlc3Npb24gPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkLkNyaXRpY2FsaXR5KTtcblx0XHRcdFx0cmV0dXJuIGFuZChcblx0XHRcdFx0XHRub3QoZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiksIHRydWUpKSxcblx0XHRcdFx0XHRvcihcblx0XHRcdFx0XHRcdGVxdWFsKGNyaXRpY2FsaXR5VmlzaWJsZUJpbmRpbmdFeHByZXNzaW9uLCBcIlVJLkNyaXRpY2FsaXR5VHlwZS9OZWdhdGl2ZVwiKSxcblx0XHRcdFx0XHRcdGVxdWFsKGNyaXRpY2FsaXR5VmlzaWJsZUJpbmRpbmdFeHByZXNzaW9uLCBcIjFcIiksXG5cdFx0XHRcdFx0XHRlcXVhbChjcml0aWNhbGl0eVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbiBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248bnVtYmVyPiwgMSksXG5cdFx0XHRcdFx0XHRlcXVhbChjcml0aWNhbGl0eVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbiwgXCJVSS5Dcml0aWNhbGl0eVR5cGUvUG9zaXRpdmVcIiksXG5cdFx0XHRcdFx0XHRlcXVhbChjcml0aWNhbGl0eVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbiwgXCIzXCIpLFxuXHRcdFx0XHRcdFx0ZXF1YWwoY3JpdGljYWxpdHlWaXNpYmxlQmluZGluZ0V4cHJlc3Npb24gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPG51bWJlcj4sIDMpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpO1xuXHRcdCAgfSlcblx0XHQ6IChbY29uc3RhbnQoZmFsc2UpXSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSk7XG5cblx0Ly8gSWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIHZpc2libGUgZGF0YUZpZWxkIHdpdGggY3JpdGljYWxpdHkgbmVnYXRpdmUgb3IgcG9zaXRpdmUsIHRoZSB0eXBlIGlzIHNldCBhcyBHaG9zdFxuXHQvLyBlbHNlIGl0IGlzIGVtcGhhc2l6ZWRcblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShvciguLi5kYXRhRmllbGRzQmluZGluZ0V4cHJlc3Npb25zKSwgQnV0dG9uVHlwZS5HaG9zdCwgQnV0dG9uVHlwZS5FbXBoYXNpemVkKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RWxlbWVudEJpbmRpbmcgPSBmdW5jdGlvbiAoc1BhdGg6IHN0cmluZyk6IHN0cmluZyB7XG5cdGNvbnN0IHNOYXZpZ2F0aW9uUGF0aCA9IE9EYXRhTW9kZWxBbm5vdGF0aW9uSGVscGVyLmdldE5hdmlnYXRpb25QYXRoKHNQYXRoKTtcblx0aWYgKHNOYXZpZ2F0aW9uUGF0aCkge1xuXHRcdHJldHVybiBcIntwYXRoOidcIiArIHNOYXZpZ2F0aW9uUGF0aCArIFwiJ31cIjtcblx0fSBlbHNlIHtcblx0XHQvL25vIG5hdmlnYXRpb24gcHJvcGVydHkgbmVlZHMgZW1wdHkgb2JqZWN0XG5cdFx0cmV0dXJuIFwie3BhdGg6ICcnfVwiO1xuXHR9XG59O1xuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGNoZWNrIGlmIGRyYWZ0IHBhdHRlcm4gaXMgc3VwcG9ydGVkLlxuICogQHBhcmFtIGVudGl0eVNldCBUaGUgY3VycmVudCBlbnRpdHkgc2V0LlxuICogQHJldHVybnMgUmV0dXJucyB0aGUgQm9vbGVhbiB2YWx1ZSBiYXNlZCBvbiBkcmFmdCBzdGF0ZVxuICovXG5leHBvcnQgY29uc3QgY2hlY2tEcmFmdFN0YXRlID0gZnVuY3Rpb24gKGVudGl0eVNldDogRW50aXR5U2V0KTogYm9vbGVhbiB7XG5cdGlmIChlbnRpdHlTZXQuYW5ub3RhdGlvbnM/LkNvbW1vbj8uRHJhZnRSb290Py5FZGl0QWN0aW9uKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSBlbnRpdHlTZXQgaXMgYSBkcmFmdCByb290IHRoYXQgc3VwcG9ydHMgY29sbGFib3JhdGlvbi5cbiAqIEBwYXJhbSBlbnRpdHlTZXQgVGhlIGN1cnJlbnQgZW50aXR5IHNldC5cbiAqIEByZXR1cm5zIFJldHVybnMgdGhlIEJvb2xlYW4gdmFsdWUgYmFzZWQgb24gZHJhZnQgc3RhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IGNoZWNrQ29sbGFib3JhdGlvbkRyYWZ0Um9vdCA9IGZ1bmN0aW9uIChlbnRpdHlTZXQ6IEVudGl0eVNldCk6IGJvb2xlYW4ge1xuXHRpZiAoZW50aXR5U2V0LmFubm90YXRpb25zPy5Db21tb24/LkRyYWZ0Um9vdD8uU2hhcmVBY3Rpb24pIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gZ2V0IHRoZSB2aXNpYmlsaXR5IGZvciB0aGUgU3dpdGNoVG9BY3RpdmUgYnV0dG9uIGluIHRoZSBvYmplY3QgcGFnZSBvciBzdWJvYmplY3QgcGFnZS5cbiAqIEBwYXJhbSBlbnRpdHlTZXQgVGhlIGN1cnJlbnQgZW50aXR5IHNldC5cbiAqIEByZXR1cm5zIFJldHVybnMgZXhwcmVzc2lvbiBiaW5kaW5nIG9yIEJvb2xlYW4gdmFsdWUgYmFzZWQgb24gdGhlIGRyYWZ0IHN0YXRlXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTd2l0Y2hUb0FjdGl2ZVZpc2liaWxpdHkgPSBmdW5jdGlvbiAoZW50aXR5U2V0OiBFbnRpdHlTZXQpOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IGJvb2xlYW4ge1xuXHRpZiAoY2hlY2tEcmFmdFN0YXRlKGVudGl0eVNldCkpIHtcblx0XHRpZiAoY2hlY2tDb2xsYWJvcmF0aW9uRHJhZnRSb290KGVudGl0eVNldCkpIHtcblx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihhbmQocGF0aEluTW9kZWwoXCJIYXNBY3RpdmVFbnRpdHlcIiksIFVJLklzRWRpdGFibGUpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRhbmQoZXF1YWwocGF0aEluTW9kZWwoXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9EcmFmdElzQ3JlYXRlZEJ5TWVcIiksIHRydWUpLCBVSS5Jc0VkaXRhYmxlLCBub3QoVUkuSXNDcmVhdGVNb2RlKSlcblx0XHRcdCk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcblxuLyoqXG4gKiBGdW5jdGlvbiB0byBnZXQgdGhlIHZpc2liaWxpdHkgZm9yIHRoZSBTd2l0Y2hUb0RyYWZ0IGJ1dHRvbiBpbiB0aGUgb2JqZWN0IHBhZ2Ugb3Igc3Vib2JqZWN0IHBhZ2UuXG4gKiBAcGFyYW0gZW50aXR5U2V0IFRoZSBjdXJyZW50IGVudGl0eSBzZXQuXG4gKiBAcmV0dXJucyBSZXR1cm5zIGV4cHJlc3Npb24gYmluZGluZyBvciBCb29sZWFuIHZhbHVlIGJhc2VkIG9uIHRoZSBkcmFmdCBzdGF0ZVxuICovXG5leHBvcnQgY29uc3QgZ2V0U3dpdGNoVG9EcmFmdFZpc2liaWxpdHkgPSBmdW5jdGlvbiAoZW50aXR5U2V0OiBFbnRpdHlTZXQpOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IGJvb2xlYW4ge1xuXHRpZiAoY2hlY2tEcmFmdFN0YXRlKGVudGl0eVNldCkpIHtcblx0XHRpZiAoY2hlY2tDb2xsYWJvcmF0aW9uRHJhZnRSb290KGVudGl0eVNldCkpIHtcblx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihhbmQocGF0aEluTW9kZWwoXCJIYXNEcmFmdEVudGl0eVwiKSwgbm90KFVJLklzRWRpdGFibGUpKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0YW5kKFxuXHRcdFx0XHRcdGVxdWFsKHBhdGhJbk1vZGVsKFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvRHJhZnRJc0NyZWF0ZWRCeU1lXCIpLCB0cnVlKSxcblx0XHRcdFx0XHRub3QoVUkuSXNFZGl0YWJsZSksXG5cdFx0XHRcdFx0bm90KFVJLklzQ3JlYXRlTW9kZSksXG5cdFx0XHRcdFx0cGF0aEluTW9kZWwoXCJIYXNEcmFmdEVudGl0eVwiKVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gZ2V0IHRoZSB2aXNpYmlsaXR5IGZvciB0aGUgU3dpdGNoRHJhZnRBbmRBY3RpdmUgYnV0dG9uIGluIHRoZSBvYmplY3QgcGFnZSBvciBzdWJvYmplY3QgcGFnZS5cbiAqIEBwYXJhbSBlbnRpdHlTZXQgVGhlIGN1cnJlbnQgZW50aXR5IHNldC5cbiAqIEByZXR1cm5zIFJldHVybnMgZXhwcmVzc2lvbiBiaW5kaW5nIG9yIEJvb2xlYW4gdmFsdWUgYmFzZWQgb24gdGhlIGRyYWZ0IHN0YXRlXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTd2l0Y2hEcmFmdEFuZEFjdGl2ZVZpc2liaWxpdHkgPSBmdW5jdGlvbiAoZW50aXR5U2V0OiBFbnRpdHlTZXQpOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IGJvb2xlYW4ge1xuXHRpZiAoY2hlY2tEcmFmdFN0YXRlKGVudGl0eVNldCkpIHtcblx0XHRpZiAoY2hlY2tDb2xsYWJvcmF0aW9uRHJhZnRSb290KGVudGl0eVNldCkpIHtcblx0XHRcdC8vIHNvbWVob3cgY2hlY2tpbmcgaGFzRHJhZnRFbnRpdHkgYW5kIGhhc0FjdGl2ZUVudGl0eSBkb2VzIG5vdCB3b3JrLCBzbyB3ZSBjaGVjayBJc0FjdGl2ZUVudGl0eSBmaXJzdFxuXHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShwYXRoSW5Nb2RlbChcIklzQWN0aXZlRW50aXR5XCIpLCBwYXRoSW5Nb2RlbChcIkhhc0RyYWZ0RW50aXR5XCIpLCBwYXRoSW5Nb2RlbChcIkhhc0FjdGl2ZUVudGl0eVwiKSkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oYW5kKGVxdWFsKHBhdGhJbk1vZGVsKFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvRHJhZnRJc0NyZWF0ZWRCeU1lXCIpLCB0cnVlKSwgbm90KFVJLklzQ3JlYXRlTW9kZSkpKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGZpbmQgYW4gYWN0aW9uIGZyb20gdGhlIGFycmF5IG9mIGhlYWRlciBhY3Rpb25zIGluIHRoZSBjb252ZXJ0ZXIgY29udGV4dC5cbiAqIEBwYXJhbSBhQ29udmVydGVyQ29udGV4dEhlYWRlckFjdGlvbnMgQXJyYXkgb2YgJ2hlYWRlcicgYWN0aW9ucyBvbiB0aGUgb2JqZWN0IHBhZ2UuXG4gKiBAcGFyYW0gc0FjdGlvblR5cGUgVGhlIGFjdGlvbiB0eXBlXG4gKiBAcmV0dXJucyBUaGUgYWN0aW9uIHdpdGggdGhlIG1hdGNoaW5nIGFjdGlvbiB0eXBlXG4gKi9cbmV4cG9ydCBjb25zdCBfZmluZEFjdGlvbiA9IGZ1bmN0aW9uIChhQ29udmVydGVyQ29udGV4dEhlYWRlckFjdGlvbnM6IEJhc2VBY3Rpb25bXSwgc0FjdGlvblR5cGU6IHN0cmluZyk6IEJhc2VBY3Rpb24gfCB1bmRlZmluZWQge1xuXHRsZXQgb0FjdGlvbjogQmFzZUFjdGlvbiB8IHVuZGVmaW5lZDtcblx0aWYgKGFDb252ZXJ0ZXJDb250ZXh0SGVhZGVyQWN0aW9ucyAmJiBhQ29udmVydGVyQ29udGV4dEhlYWRlckFjdGlvbnMubGVuZ3RoKSB7XG5cdFx0b0FjdGlvbiA9IGFDb252ZXJ0ZXJDb250ZXh0SGVhZGVyQWN0aW9ucy5maW5kKGZ1bmN0aW9uIChvSGVhZGVyQWN0aW9uOiBCYXNlQWN0aW9uKSB7XG5cdFx0XHRyZXR1cm4gb0hlYWRlckFjdGlvbi50eXBlID09PSBzQWN0aW9uVHlwZTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gb0FjdGlvbjtcbn07XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gZm9ybWF0IHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgZm9yIHRoZSBEZWxldGUgYnV0dG9uIG9uIHRoZSBvYmplY3QgcGFnZSBvciBzdWJvYmplY3QgcGFnZSBpbiBjYXNlIG9mIGEgQ29tbWFuZCBFeGVjdXRpb24uXG4gKiBAcGFyYW0gYUNvbnZlcnRlckNvbnRleHRIZWFkZXJBY3Rpb25zIEFycmF5IG9mIGhlYWRlciBhY3Rpb25zIG9uIHRoZSBvYmplY3QgcGFnZVxuICogQHJldHVybnMgUmV0dXJucyBleHByZXNzaW9uIGJpbmRpbmcgb3IgQm9vbGVhbiB2YWx1ZSBmcm9tIHRoZSBjb252ZXJ0ZXIgb3V0cHV0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXREZWxldGVDb21tYW5kRXhlY3V0aW9uRW5hYmxlZCA9IGZ1bmN0aW9uIChhQ29udmVydGVyQ29udGV4dEhlYWRlckFjdGlvbnM6IEJhc2VBY3Rpb25bXSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG9EZWxldGVBY3Rpb24gPSBfZmluZEFjdGlvbihhQ29udmVydGVyQ29udGV4dEhlYWRlckFjdGlvbnMsIFwiU2Vjb25kYXJ5XCIpO1xuXHRyZXR1cm4gb0RlbGV0ZUFjdGlvbiA/IG9EZWxldGVBY3Rpb24uZW5hYmxlZCA6IFwiZmFsc2VcIjtcbn07XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gZm9ybWF0IHRoZSAndmlzaWJsZScgcHJvcGVydHkgZm9yIHRoZSBEZWxldGUgYnV0dG9uIG9uIHRoZSBvYmplY3QgcGFnZSBvciBzdWJvYmplY3QgcGFnZSBpbiBjYXNlIG9mIGEgQ29tbWFuZCBFeGVjdXRpb24uXG4gKiBAcGFyYW0gYUNvbnZlcnRlckNvbnRleHRIZWFkZXJBY3Rpb25zIEFycmF5IG9mIGhlYWRlciBhY3Rpb25zIG9uIHRoZSBvYmplY3QgcGFnZVxuICogQHJldHVybnMgUmV0dXJucyBleHByZXNzaW9uIGJpbmRpbmcgb3IgQm9vbGVhbiB2YWx1ZSBmcm9tIHRoZSBjb252ZXJ0ZXIgb3V0cHV0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXREZWxldGVDb21tYW5kRXhlY3V0aW9uVmlzaWJsZSA9IGZ1bmN0aW9uIChhQ29udmVydGVyQ29udGV4dEhlYWRlckFjdGlvbnM6IEJhc2VBY3Rpb25bXSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG9EZWxldGVBY3Rpb24gPSBfZmluZEFjdGlvbihhQ29udmVydGVyQ29udGV4dEhlYWRlckFjdGlvbnMsIFwiU2Vjb25kYXJ5XCIpO1xuXHRyZXR1cm4gb0RlbGV0ZUFjdGlvbiA/IG9EZWxldGVBY3Rpb24udmlzaWJsZSA6IFwiZmFsc2VcIjtcbn07XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gZm9ybWF0IHRoZSAndmlzaWJsZScgcHJvcGVydHkgZm9yIHRoZSBFZGl0IGJ1dHRvbiBvbiB0aGUgb2JqZWN0IHBhZ2Ugb3Igc3Vib2JqZWN0IHBhZ2UgaW4gY2FzZSBvZiBhIENvbW1hbmQgRXhlY3V0aW9uLlxuICogQHBhcmFtIGFDb252ZXJ0ZXJDb250ZXh0SGVhZGVyQWN0aW9ucyBBcnJheSBvZiBoZWFkZXIgYWN0aW9ucyBvbiB0aGUgb2JqZWN0IHBhZ2VcbiAqIEByZXR1cm5zIFJldHVybnMgZXhwcmVzc2lvbiBiaW5kaW5nIG9yIEJvb2xlYW4gdmFsdWUgZnJvbSB0aGUgY29udmVydGVyIG91dHB1dFxuICovXG5leHBvcnQgY29uc3QgZ2V0RWRpdENvbW1hbmRFeGVjdXRpb25WaXNpYmxlID0gZnVuY3Rpb24gKGFDb252ZXJ0ZXJDb250ZXh0SGVhZGVyQWN0aW9uczogQmFzZUFjdGlvbltdKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgb0VkaXRBY3Rpb24gPSBfZmluZEFjdGlvbihhQ29udmVydGVyQ29udGV4dEhlYWRlckFjdGlvbnMsIFwiUHJpbWFyeVwiKTtcblx0cmV0dXJuIG9FZGl0QWN0aW9uID8gb0VkaXRBY3Rpb24udmlzaWJsZSA6IFwiZmFsc2VcIjtcbn07XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gZm9ybWF0IHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgZm9yIHRoZSBFZGl0IGJ1dHRvbiBvbiB0aGUgb2JqZWN0IHBhZ2Ugb3Igc3Vib2JqZWN0IHBhZ2UgaW4gY2FzZSBvZiBhIENvbW1hbmQgRXhlY3V0aW9uLlxuICogQHBhcmFtIGFDb252ZXJ0ZXJDb250ZXh0SGVhZGVyQWN0aW9ucyBBcnJheSBvZiBoZWFkZXIgYWN0aW9ucyBvbiB0aGUgb2JqZWN0IHBhZ2VcbiAqIEByZXR1cm5zIFJldHVybnMgZXhwcmVzc2lvbiBiaW5kaW5nIG9yIEJvb2xlYW4gdmFsdWUgZnJvbSB0aGUgY29udmVydGVyIG91dHB1dFxuICovXG5leHBvcnQgY29uc3QgZ2V0RWRpdENvbW1hbmRFeGVjdXRpb25FbmFibGVkID0gZnVuY3Rpb24gKGFDb252ZXJ0ZXJDb250ZXh0SGVhZGVyQWN0aW9uczogQmFzZUFjdGlvbltdKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgb0VkaXRBY3Rpb24gPSBfZmluZEFjdGlvbihhQ29udmVydGVyQ29udGV4dEhlYWRlckFjdGlvbnMsIFwiUHJpbWFyeVwiKTtcblx0cmV0dXJuIG9FZGl0QWN0aW9uID8gb0VkaXRBY3Rpb24uZW5hYmxlZCA6IFwiZmFsc2VcIjtcbn07XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gZ2V0IHRoZSBFZGl0QWN0aW9uIGZyb20gdGhlIGJhc2VkIG9uIGEgZHJhZnQtZW5hYmxlZCBhcHBsaWNhdGlvbiBvciBhIHN0aWNreSBhcHBsaWNhdGlvbi5cbiAqIEBwYXJhbSBbb0VudGl0eVNldF0gVGhlIHZhbHVlIGZyb20gdGhlIGV4cHJlc3Npb24uXG4gKiBAcmV0dXJucyBSZXR1cm5zIGV4cHJlc3Npb24gYmluZGluZyBvciBCb29sZWFuIHZhbHVlIGJhc2VkIG9uIHZSYXdWYWx1ZSAmIG9EcmFmdE5vZGVcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEVkaXRBY3Rpb24gPSBmdW5jdGlvbiAob0VudGl0eVNldDogQ29udGV4dCk6IHN0cmluZyB7XG5cdGNvbnN0IHNQYXRoID0gb0VudGl0eVNldC5nZXRQYXRoKCk7XG5cdGNvbnN0IGFQYXRocyA9IHNQYXRoLnNwbGl0KFwiL1wiKTtcblx0Y29uc3Qgcm9vdEVudGl0eVNldFBhdGggPSBcIi9cIiArIGFQYXRoc1sxXTtcblx0Ly8gZ2V0IHRoZSBlZGl0IGFjdGlvbiBmcm9tIHJvb3QgZW50aXR5IHNldHNcblx0Y29uc3Qgcm9vdEVudGl0eVNldEFubm5vdGF0aW9ucyA9IG9FbnRpdHlTZXQuZ2V0T2JqZWN0KHJvb3RFbnRpdHlTZXRQYXRoICsgXCJAXCIpO1xuXHRjb25zdCBiRHJhZnRSb290ID0gcm9vdEVudGl0eVNldEFubm5vdGF0aW9ucy5oYXNPd25Qcm9wZXJ0eShcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290XCIpO1xuXHRjb25zdCBiRHJhZnROb2RlID0gcm9vdEVudGl0eVNldEFubm5vdGF0aW9ucy5oYXNPd25Qcm9wZXJ0eShcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnROb2RlXCIpO1xuXHRjb25zdCBiU3RpY2t5U2Vzc2lvbiA9IHJvb3RFbnRpdHlTZXRBbm5ub3RhdGlvbnMuaGFzT3duUHJvcGVydHkoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuU2Vzc2lvbi52MS5TdGlja3lTZXNzaW9uU3VwcG9ydGVkXCIpO1xuXHRsZXQgc0FjdGlvbk5hbWU7XG5cdGlmIChiRHJhZnRSb290KSB7XG5cdFx0c0FjdGlvbk5hbWUgPSBvRW50aXR5U2V0LmdldE9iamVjdChgJHtyb290RW50aXR5U2V0UGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdC9FZGl0QWN0aW9uYCk7XG5cdH0gZWxzZSBpZiAoYkRyYWZ0Tm9kZSkge1xuXHRcdHNBY3Rpb25OYW1lID0gb0VudGl0eVNldC5nZXRPYmplY3QoYCR7cm9vdEVudGl0eVNldFBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdE5vZGUvRWRpdEFjdGlvbmApO1xuXHR9IGVsc2UgaWYgKGJTdGlja3lTZXNzaW9uKSB7XG5cdFx0c0FjdGlvbk5hbWUgPSBvRW50aXR5U2V0LmdldE9iamVjdChgJHtyb290RW50aXR5U2V0UGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuU2Vzc2lvbi52MS5TdGlja3lTZXNzaW9uU3VwcG9ydGVkL0VkaXRBY3Rpb25gKTtcblx0fVxuXHRyZXR1cm4gIXNBY3Rpb25OYW1lID8gc0FjdGlvbk5hbWUgOiBgJHtyb290RW50aXR5U2V0UGF0aH0vJHtzQWN0aW9uTmFtZX1gO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzUmVhZE9ubHlGcm9tU3RhdGljQW5ub3RhdGlvbnMgPSBmdW5jdGlvbiAob0Fubm90YXRpb25zPzogTWV0YU1vZGVsUHJvcGVydHlBbm5vdGF0aW9ucywgb0ZpZWxkQ29udHJvbD86IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRsZXQgYkNvbXB1dGVkLCBiSW1tdXRhYmxlLCBiUmVhZE9ubHk7XG5cblx0aWYgKG9Bbm5vdGF0aW9ucyAmJiBvQW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkNvcmUuVjEuQ29tcHV0ZWRcIl0pIHtcblx0XHRiQ29tcHV0ZWQgPSAob0Fubm90YXRpb25zW1wiQE9yZy5PRGF0YS5Db3JlLlYxLkNvbXB1dGVkXCJdIGFzIHsgQm9vbD86IHN0cmluZyB9KS5Cb29sXG5cdFx0XHQ/IChvQW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkNvcmUuVjEuQ29tcHV0ZWRcIl0gYXMgeyBCb29sPzogc3RyaW5nIH0pLkJvb2wgPT0gXCJ0cnVlXCJcblx0XHRcdDogdHJ1ZTtcblx0fVxuXHRpZiAob0Fubm90YXRpb25zICYmIG9Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ29yZS5WMS5JbW11dGFibGVcIl0pIHtcblx0XHRiSW1tdXRhYmxlID0gKG9Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ29yZS5WMS5JbW11dGFibGVcIl0gYXMgeyBCb29sPzogc3RyaW5nIH0pLkJvb2xcblx0XHRcdD8gKG9Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ29yZS5WMS5JbW11dGFibGVcIl0gYXMgeyBCb29sPzogc3RyaW5nIH0pLkJvb2wgPT0gXCJ0cnVlXCJcblx0XHRcdDogdHJ1ZTtcblx0fVxuXHRiUmVhZE9ubHkgPSBiQ29tcHV0ZWQgfHwgYkltbXV0YWJsZTtcblxuXHRpZiAob0ZpZWxkQ29udHJvbCkge1xuXHRcdGJSZWFkT25seSA9IGJSZWFkT25seSB8fCBvRmllbGRDb250cm9sID09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpZWxkQ29udHJvbFR5cGUvUmVhZE9ubHlcIjtcblx0fVxuXHRpZiAoYlJlYWRPbmx5KSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG5leHBvcnQgY29uc3QgcmVhZE9ubHlFeHByZXNzaW9uRnJvbUR5bmFtaWNBbm5vdGF0aW9ucyA9IGZ1bmN0aW9uIChvRmllbGRDb250cm9sPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0bGV0IHNJc0ZpZWxkQ29udHJvbFBhdGhSZWFkT25seTtcblx0aWYgKG9GaWVsZENvbnRyb2wpIHtcblx0XHRpZiAoQmluZGluZ0luZm8ucGFyc2Uob0ZpZWxkQ29udHJvbCkpIHtcblx0XHRcdHNJc0ZpZWxkQ29udHJvbFBhdGhSZWFkT25seSA9IFwiJVwiICsgb0ZpZWxkQ29udHJvbCArIFwiID09PSAxIFwiO1xuXHRcdH1cblx0fVxuXHRpZiAoc0lzRmllbGRDb250cm9sUGF0aFJlYWRPbmx5KSB7XG5cdFx0cmV0dXJuIFwiez0gXCIgKyBzSXNGaWVsZENvbnRyb2xQYXRoUmVhZE9ubHkgKyBcIj8gZmFsc2UgOiB0cnVlIH1cIjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG59O1xuXG4vKlxuICogRnVuY3Rpb24gdG8gZ2V0IHRoZSBleHByZXNzaW9uIGZvciBjaGFydCBUaXRsZSBQcmVzc1xuICpcbiAqIEBmdW5jdGlvbndcbiAqIEBwYXJhbSB7b0NvbmZpZ3VyYXRpb259IFtvQ29uZmlndXJhdGlvbnNdIGNvbnRyb2wgY29uZmlndXJhdGlvbiBmcm9tIG1hbmlmZXN0XG4gKiAgQHBhcmFtIHtvTWFuaWZlc3R9IFtvTWFuaWZlc3RdIE91dGJvdW5kcyBmcm9tIG1hbmlmZXN0XG4gKiByZXR1cm5zIHtTdHJpbmd9IFtzQ29sbGVjdGlvbk5hbWVdIENvbGxlY3Rpb24gTmFtZSBvZiB0aGUgTWljcm8gQ2hhcnRcbiAqXG4gKiByZXR1cm5zIHtTdHJpbmd9IFtFeHByZXNzaW9uXSBIYW5kbGVyIEV4cHJlc3Npb24gZm9yIHRoZSB0aXRsZSBwcmVzc1xuICpcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEV4cHJlc3Npb25Gb3JNaWNyb0NoYXJ0VGl0bGVQcmVzcyA9IGZ1bmN0aW9uIChcblx0b0NvbmZpZ3VyYXRpb246IENvbnRyb2xDb25maWd1cmF0aW9uLFxuXHR0YXJnZXRBbm5vdGF0aW9uUGF0aDogc3RyaW5nLFxuXHR0YXJnZXRBbm5vdGF0aW9uUGF0aERhdE1vZGVsT2JqZWN0OiBEYXRhTW9kZWxPYmplY3RQYXRoPENoYXJ0IHwgUHJlc2VudGF0aW9uVmFyaWFudD4sXG5cdG9NYW5pZmVzdE91dGJvdW5kOiBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdE91dGJvdW5kRW50cnk+LFxuXHRzQ29sbGVjdGlvbk5hbWU6IHN0cmluZ1xuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0dGFyZ2V0QW5ub3RhdGlvblBhdGggPSBnZXRNaWNyb0NoYXJ0Q29udHJvbENvbmZpZ3VyYXRpb25QYXRoKHRhcmdldEFubm90YXRpb25QYXRoLCB0YXJnZXRBbm5vdGF0aW9uUGF0aERhdE1vZGVsT2JqZWN0LCBzQ29sbGVjdGlvbk5hbWUpO1xuXHRjb25zdCBuYXZpZ2F0aW9uQ29uZmlndXJhdGlvbiA9IChvQ29uZmlndXJhdGlvbj8uW3RhcmdldEFubm90YXRpb25QYXRoXSBhcyBNaWNyb0NoYXJ0TWFuaWZlc3RDb25maWd1cmF0aW9uKT8uW1wibmF2aWdhdGlvblwiXTtcblx0aWYgKG5hdmlnYXRpb25Db25maWd1cmF0aW9uKSB7XG5cdFx0aWYgKFxuXHRcdFx0KG5hdmlnYXRpb25Db25maWd1cmF0aW9uW1widGFyZ2V0T3V0Ym91bmRcIl0gJiYgbmF2aWdhdGlvbkNvbmZpZ3VyYXRpb25bXCJ0YXJnZXRPdXRib3VuZFwiXVtcIm91dGJvdW5kXCJdKSB8fFxuXHRcdFx0KG5hdmlnYXRpb25Db25maWd1cmF0aW9uW1widGFyZ2V0T3V0Ym91bmRcIl0gJiZcblx0XHRcdFx0bmF2aWdhdGlvbkNvbmZpZ3VyYXRpb25bXCJ0YXJnZXRPdXRib3VuZFwiXVtcIm91dGJvdW5kXCJdICYmXG5cdFx0XHRcdG5hdmlnYXRpb25Db25maWd1cmF0aW9uW1widGFyZ2V0U2VjdGlvbnNcIl0pXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcIi5oYW5kbGVycy5vbkRhdGFQb2ludFRpdGxlUHJlc3NlZCgkY29udHJvbGxlciwgJHskc291cmNlPi99LCdcIiArXG5cdFx0XHRcdEpTT04uc3RyaW5naWZ5KG9NYW5pZmVzdE91dGJvdW5kKSArXG5cdFx0XHRcdFwiJywnXCIgK1xuXHRcdFx0XHRuYXZpZ2F0aW9uQ29uZmlndXJhdGlvbltcInRhcmdldE91dGJvdW5kXCJdW1wib3V0Ym91bmRcIl0gK1xuXHRcdFx0XHRcIicsJ1wiICtcblx0XHRcdFx0c0NvbGxlY3Rpb25OYW1lICtcblx0XHRcdFx0XCInIClcIlxuXHRcdFx0KTtcblx0XHR9IGVsc2UgaWYgKG5hdmlnYXRpb25Db25maWd1cmF0aW9uW1widGFyZ2V0U2VjdGlvbnNcIl0pIHtcblx0XHRcdHJldHVybiBcIi5oYW5kbGVycy5uYXZpZ2F0ZVRvU3ViU2VjdGlvbigkY29udHJvbGxlciwgJ1wiICsgSlNPTi5zdHJpbmdpZnkobmF2aWdhdGlvbkNvbmZpZ3VyYXRpb25bXCJ0YXJnZXRTZWN0aW9uc1wiXSkgKyBcIicpXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG59O1xuXG4vKlxuICogRnVuY3Rpb24gdG8gcmVuZGVyIENoYXJ0IFRpdGxlIGFzIExpbmtcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7b0NvbnRyb2xDb25maWd1cmF0aW9ufSBbb0NvbmZpZ3VyYXRpb25zXSBjb250cm9sIGNvbmZpZ3VyYXRpb24gZnJvbSBtYW5pZmVzdFxuICogcmV0dXJucyB7U3RyaW5nfSBbc0tleV0gRm9yIHRoZSBUYXJnZXRPdXRib3VuZCBhbmQgVGFyZ2V0U2VjdGlvblxuICpcbiAqL1xuZXhwb3J0IGNvbnN0IGdldE1pY3JvQ2hhcnRUaXRsZUFzTGluayA9IGZ1bmN0aW9uIChcblx0b0NvbnRyb2xDb25maWd1cmF0aW9uOiBDb250cm9sQ29uZmlndXJhdGlvbixcblx0dGFyZ2V0QW5ub3RhdGlvblBhdGg6IHN0cmluZyxcblx0dGFyZ2V0QW5ub3RhdGlvblBhdGhEYXRNb2RlbE9iamVjdDogRGF0YU1vZGVsT2JqZWN0UGF0aDxDaGFydCB8IFByZXNlbnRhdGlvblZhcmlhbnQ+LFxuXHRjb2xsZWN0aW9uTmFtZTogc3RyaW5nXG4pOiBzdHJpbmcge1xuXHR0YXJnZXRBbm5vdGF0aW9uUGF0aCA9IGdldE1pY3JvQ2hhcnRDb250cm9sQ29uZmlndXJhdGlvblBhdGgodGFyZ2V0QW5ub3RhdGlvblBhdGgsIHRhcmdldEFubm90YXRpb25QYXRoRGF0TW9kZWxPYmplY3QsIGNvbGxlY3Rpb25OYW1lKTtcblx0Y29uc3QgdGFyZ2V0Q29udHJvbENvbmZpZ3VyYXRpb24gPSAob0NvbnRyb2xDb25maWd1cmF0aW9uPy5bdGFyZ2V0QW5ub3RhdGlvblBhdGhdIGFzIE1pY3JvQ2hhcnRNYW5pZmVzdENvbmZpZ3VyYXRpb24pPy5bXCJuYXZpZ2F0aW9uXCJdO1xuXHRpZiAoXG5cdFx0dGFyZ2V0Q29udHJvbENvbmZpZ3VyYXRpb24gJiZcblx0XHQodGFyZ2V0Q29udHJvbENvbmZpZ3VyYXRpb25bXCJ0YXJnZXRPdXRib3VuZFwiXSB8fFxuXHRcdFx0KHRhcmdldENvbnRyb2xDb25maWd1cmF0aW9uW1widGFyZ2V0T3V0Ym91bmRcIl0gJiYgdGFyZ2V0Q29udHJvbENvbmZpZ3VyYXRpb25bXCJ0YXJnZXRTZWN0aW9uc1wiXSkpXG5cdCkge1xuXHRcdHJldHVybiBcIkV4dGVybmFsXCI7XG5cdH0gZWxzZSBpZiAodGFyZ2V0Q29udHJvbENvbmZpZ3VyYXRpb24gJiYgdGFyZ2V0Q29udHJvbENvbmZpZ3VyYXRpb25bXCJ0YXJnZXRTZWN0aW9uc1wiXSkge1xuXHRcdHJldHVybiBcIkluUGFnZVwiO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBcIk5vbmVcIjtcblx0fVxufTtcblxuZXhwb3J0IGNvbnN0IGdldE1pY3JvQ2hhcnRDb250cm9sQ29uZmlndXJhdGlvblBhdGggPSBmdW5jdGlvbiAoXG5cdHRhcmdldEFubm90YXRpb25QYXRoOiBzdHJpbmcsXG5cdHRhcmdldEFubm90YXRpb25QYXRoRGF0TW9kZWxPYmplY3Q6IERhdGFNb2RlbE9iamVjdFBhdGg8Q2hhcnQgfCBQcmVzZW50YXRpb25WYXJpYW50Pixcblx0Y29sbGVjdGlvbk5hbWU6IHN0cmluZ1xuKTogc3RyaW5nIHtcblx0aWYgKHRhcmdldEFubm90YXRpb25QYXRoRGF0TW9kZWxPYmplY3Q/LnRhcmdldE9iamVjdD8uJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUHJlc2VudGF0aW9uVmFyaWFudFR5cGVcIikge1xuXHRcdHRhcmdldEFubm90YXRpb25QYXRoID0gdGFyZ2V0QW5ub3RhdGlvblBhdGhEYXRNb2RlbE9iamVjdC50YXJnZXRPYmplY3Q/LlZpc3VhbGl6YXRpb25zWzBdPy52YWx1ZTtcblx0XHR0YXJnZXRBbm5vdGF0aW9uUGF0aCA9IGNvbGxlY3Rpb25OYW1lID8gYCR7Y29sbGVjdGlvbk5hbWV9LyR7dGFyZ2V0QW5ub3RhdGlvblBhdGh9YCA6IHRhcmdldEFubm90YXRpb25QYXRoO1xuXHR9XG5cdHJldHVybiB0YXJnZXRBbm5vdGF0aW9uUGF0aDtcbn07XG5cbi8qIEdldCBncm91cElkIGZyb20gY29udHJvbCBjb25maWd1cmF0aW9uXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gW29Db25maWd1cmF0aW9uc10gY29udHJvbCBjb25maWd1cmF0aW9uIGZyb20gbWFuaWZlc3RcbiAqIEBwYXJhbSB7U3RyaW5nfSBbc0Fubm90YXRpb25QYXRoXSBBbm5vdGF0aW9uIFBhdGggZm9yIHRoZSBjb25maWd1cmF0aW9uXG4gKiBAZGVzY3JpcHRpb24gVXNlZCB0byBnZXQgdGhlIGdyb3VwSWQgZm9yIERhdGFQb2ludHMgYW5kIE1pY3JvQ2hhcnRzIGluIHRoZSBIZWFkZXIuXG4gKlxuICovXG5leHBvcnQgY29uc3QgZ2V0R3JvdXBJZEZyb21Db25maWcgPSBmdW5jdGlvbiAoXG5cdG9Db25maWd1cmF0aW9uczogQ29udHJvbENvbmZpZ3VyYXRpb24sXG5cdHNBbm5vdGF0aW9uUGF0aDogc3RyaW5nLFxuXHRzRGVmYXVsdEdyb3VwSWQ/OiBzdHJpbmdcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG9Db25maWd1cmF0aW9uID0gb0NvbmZpZ3VyYXRpb25zW3NBbm5vdGF0aW9uUGF0aF0gYXMgTWljcm9DaGFydE1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0XHRhQXV0b1BhdHRlcm5zID0gW1wiSGVyb2VzXCIsIFwiRGVjb3JhdGlvblwiLCBcIldvcmtlcnNcIiwgXCJMb25nUnVubmVyc1wiXTtcblx0bGV0IHNHcm91cElkID0gc0RlZmF1bHRHcm91cElkO1xuXHRpZiAoXG5cdFx0b0NvbmZpZ3VyYXRpb24gJiZcblx0XHRvQ29uZmlndXJhdGlvbi5yZXF1ZXN0R3JvdXBJZCAmJlxuXHRcdGFBdXRvUGF0dGVybnMuc29tZShmdW5jdGlvbiAoYXV0b1BhdHRlcm46IHN0cmluZykge1xuXHRcdFx0cmV0dXJuIGF1dG9QYXR0ZXJuID09PSBvQ29uZmlndXJhdGlvbi5yZXF1ZXN0R3JvdXBJZDtcblx0XHR9KVxuXHQpIHtcblx0XHRzR3JvdXBJZCA9IFwiJGF1dG8uXCIgKyBvQ29uZmlndXJhdGlvbi5yZXF1ZXN0R3JvdXBJZDtcblx0fVxuXHRyZXR1cm4gc0dyb3VwSWQ7XG59O1xuXG4vKipcbiAqIEdldHMgZ3JvdXBJZCBmcm9tIGNvbnRyb2wgY29uZmlndXJhdGlvbiBmb3IgbWljcm8gY2hhcnQuXG4gKiBAcGFyYW0gb0NvbnRyb2xDb25maWd1cmF0aW9uIENvbnRyb2wgY29uZmlndXJhdGlvbiBmcm9tIG1hbmlmZXN0XG4gKiBAcGFyYW0gdGFyZ2V0QW5ub3RhdGlvblBhdGggQW5ub3RhdGlvbiBwYXRoIGZvciB0aGUgY29uZmlndXJhdGlvblxuICogQHBhcmFtIHRhcmdldEFubm90YXRpb25QYXRoRGF0YU1vZGVsT2JqZWN0IERhdGFNb2RlbE9iamVjdCBvZiBDaGFydCBvciBQcmVzZW50YXRpb25WYXJpYW50XG4gKiBAcGFyYW0gY29sbGVjdGlvbk5hbWUgQ29sbGVjdGlvbiBOYW1lXG4gKiBAcGFyYW0gc0RlZmF1bHRHcm91cElkIERlZmF1bHQgR3JvdXBJZFxuICogQHJldHVybnMgR3JvdXBJZCBmb3IgbWljcm8gY2hhcnRcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEdyb3VwSWRGcm9tQ29uZmlnRm9yTWljcm9DaGFydCA9IGZ1bmN0aW9uIChcblx0b0NvbnRyb2xDb25maWd1cmF0aW9uOiBDb250cm9sQ29uZmlndXJhdGlvbixcblx0dGFyZ2V0QW5ub3RhdGlvblBhdGg6IHN0cmluZyxcblx0dGFyZ2V0QW5ub3RhdGlvblBhdGhEYXRhTW9kZWxPYmplY3Q6IERhdGFNb2RlbE9iamVjdFBhdGg8Q2hhcnQgfCBQcmVzZW50YXRpb25WYXJpYW50Pixcblx0Y29sbGVjdGlvbk5hbWU6IHN0cmluZyxcblx0c0RlZmF1bHRHcm91cElkPzogc3RyaW5nXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHR0YXJnZXRBbm5vdGF0aW9uUGF0aCA9IGdldE1pY3JvQ2hhcnRDb250cm9sQ29uZmlndXJhdGlvblBhdGgodGFyZ2V0QW5ub3RhdGlvblBhdGgsIHRhcmdldEFubm90YXRpb25QYXRoRGF0YU1vZGVsT2JqZWN0LCBjb2xsZWN0aW9uTmFtZSk7XG5cdHJldHVybiBnZXRHcm91cElkRnJvbUNvbmZpZyhvQ29udHJvbENvbmZpZ3VyYXRpb24sIHRhcmdldEFubm90YXRpb25QYXRoLCBzRGVmYXVsdEdyb3VwSWQpO1xufTtcblxuLypcbiAqIEdldCBDb250ZXh0IEJpbmRpbmcgd2l0aCBncm91cElkIGZyb20gY29udHJvbCBjb25maWd1cmF0aW9uXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gW29Db25maWd1cmF0aW9uc10gY29udHJvbCBjb25maWd1cmF0aW9uIGZyb20gbWFuaWZlc3RcbiAqIEBwYXJhbSB7U3RyaW5nfSBbc0tleV0gQW5ub3RhdGlvbiBQYXRoIGZvciBvZiB0aGUgY29uZmlndXJhdGlvblxuICogQGRlc2NyaXB0aW9uIFVzZWQgdG8gZ2V0IHRoZSBiaW5kaW5nIGZvciBEYXRhUG9pbnRzIGluIHRoZSBIZWFkZXIuXG4gKlxuICovXG5leHBvcnQgY29uc3QgZ2V0QmluZGluZ1dpdGhHcm91cElkRnJvbUNvbmZpZyA9IGZ1bmN0aW9uIChvQ29uZmlndXJhdGlvbnM6IENvbnRyb2xDb25maWd1cmF0aW9uLCBzS2V5OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBzR3JvdXBJZCA9IGdldEdyb3VwSWRGcm9tQ29uZmlnKG9Db25maWd1cmF0aW9ucywgc0tleSk7XG5cdGxldCBzQmluZGluZztcblx0aWYgKHNHcm91cElkKSB7XG5cdFx0c0JpbmRpbmcgPSBcInsgcGF0aCA6ICcnLCBwYXJhbWV0ZXJzIDogeyAkJGdyb3VwSWQgOiAnXCIgKyBzR3JvdXBJZCArIFwiJyB9IH1cIjtcblx0fVxuXHRyZXR1cm4gc0JpbmRpbmc7XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgYmluZGluZyBleHByZXNzaW9uLlxuICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGggRGF0YU1vZGVsT2JqZWN0UGF0aCBvZiB0aGUgbmF2aWdhdGlvblBhdGhcbiAqIEByZXR1cm5zIFRoZSBCaW5kaW5nIGV4cHJlc3Npb24gaW5jbHVkaW5nIHBhdGggYW5kICRzZWxlY3QgcXVlcnkgYXMgcGFyYW1ldGVyIGRlcGVuZGluZyBvbiB0aGUgZnVuY3Rpb24gcGFyYW1ldGVyc1xuICovXG5leHBvcnQgY29uc3QgY3JlYXRlQmluZGluZ0ZvckFsdGVybmF0ZUFuZFNlY29uZGFyeUtleXMgPSBmdW5jdGlvbiAoZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxGYWNldD4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRsZXQgYmluZGluZzogUGFydGlhbDxQYXRoSW5Nb2RlbEV4cHJlc3Npb248dW5kZWZpbmVkPj4gfCB1bmRlZmluZWQ7XG5cdGNvbnN0IGFsdGVybmF0ZUFuZFNlY29uZGFyeUtleXMgPSBNb2RlbEhlbHBlci5nZXRBbHRlcm5hdGVBbmRTZWNvbmRhcnlLZXlzKFxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGg/LnRhcmdldEVudGl0eVR5cGUsXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aD8udGFyZ2V0RW50aXR5U2V0IGFzIEVudGl0eVNldFxuXHQpO1xuXG5cdGlmIChhbHRlcm5hdGVBbmRTZWNvbmRhcnlLZXlzPy5sZW5ndGgpIHtcblx0XHRiaW5kaW5nID0ge1xuXHRcdFx0cGF0aDogXCJcIlxuXHRcdH07XG5cdFx0YmluZGluZy5wYXJhbWV0ZXJzID0geyAkc2VsZWN0OiBhbHRlcm5hdGVBbmRTZWNvbmRhcnlLZXlzLmpvaW4oXCIsXCIpIHx8IFwiXCIgfTtcblx0fVxuXHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYmluZGluZyk7XG59O1xuXG4vKipcbiAqIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGEgRmllbGRHcm91cCBjb25zaXN0cyBvZiBvbmx5IDEgRGF0YUZpZWxkIHdpdGggTXVsdGlMaW5lIHRleHQgYW5ub3RhdGlvbi5cbiAqIEBwYXJhbSBhRm9ybUVsZW1lbnRzIEEgY29sbGVjdGlvbiBvZiBmb3JtIGVsZW1lbnRzIHVzZWQgaW4gdGhlIGN1cnJlbnQgZmllbGQgZ3JvdXBcbiAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiBvbmx5IDEgZGF0YSBmaWVsZCB3aXRoIE11bHRpbGluZSB0ZXh0IGFubm90YXRpb24gZXhpc3RzLlxuICovXG5leHBvcnQgY29uc3QgZG9lc0ZpZWxkR3JvdXBDb250YWluT25seU9uZU11bHRpTGluZURhdGFGaWVsZCA9IGZ1bmN0aW9uIChhRm9ybUVsZW1lbnRzOiBBbm5vdGF0aW9uRm9ybUVsZW1lbnRbXSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gYUZvcm1FbGVtZW50cyAmJiBhRm9ybUVsZW1lbnRzLmxlbmd0aCA9PT0gMSAmJiAhIWFGb3JtRWxlbWVudHNbMF0uaXNWYWx1ZU11bHRpbGluZVRleHQ7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gdmlld0RhdGEgU3BlY2lmaWVzIHRoZSBWaWV3RGF0YSBtb2RlbFxuICogQHJldHVybnMgRXhwcmVzc2lvbiBvciBCb29sZWFuIHZhbHVlXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTaGFyZUJ1dHRvblZpc2liaWxpdHkgPSBmdW5jdGlvbiAodmlld0RhdGE6IFZpZXdEYXRhKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRpZiAodmlld0RhdGEuaXNTaGFyZUJ1dHRvblZpc2libGVGb3JNeUluYm94ID09PSBmYWxzZSkge1xuXHRcdHJldHVybiBcImZhbHNlXCI7XG5cdH1cblx0Y29uc3Qgc2hhcmVCdXR0b25WaXNpYmlsaXR5RXhwID0gdmlld0RhdGEuZmNsRW5hYmxlZFxuXHRcdD8gYW5kKHBhdGhJbk1vZGVsKFwiL3Nob3dTaGFyZUljb25cIiwgXCJmY2xoZWxwZXJcIiksIG5vdChVSS5Jc0NyZWF0ZU1vZGUpKVxuXHRcdDogbm90KFVJLklzQ3JlYXRlTW9kZSk7XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihzaGFyZUJ1dHRvblZpc2liaWxpdHlFeHApO1xufTtcblxuLypcbiAqIEdldHMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGhlYWRlciBpbmZvIGluIGVkaXQgbW9kZVxuICpcbiAqIElmIGVpdGhlciB0aGUgdGl0bGUgb3IgZGVzY3JpcHRpb24gZmllbGQgZnJvbSB0aGUgaGVhZGVyIGFubm90YXRpb25zIGFyZSBlZGl0YWJsZSwgdGhlbiB0aGVcbiAqIGVkaXRhYmxlIGhlYWRlciBpbmZvIGlzIHZpc2libGUuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge29iamVjdH0gW29Bbm5vdGF0aW9uc10gQW5ub3RhdGlvbnMgb2JqZWN0IGZvciBnaXZlbiBlbnRpdHkgc2V0XG4gKiBAcGFyYW0ge29iamVjdH0gW29GaWVsZENvbnRyb2xdIGZpZWxkIGNvbnRyb2xcbiAqIHJldHVybnMgeyp9ICBiaW5kaW5nIGV4cHJlc3Npb24gb3IgYm9vbGVhbiB2YWx1ZSByZXNvbHZlZCBmb3JtIGZ1bmNpdG9ucyBpc1JlYWRPbmx5RnJvbVN0YXRpY0Fubm90YXRpb25zIGFuZCBpc1JlYWRPbmx5RnJvbUR5bmFtaWNBbm5vdGF0aW9uc1xuICovXG5leHBvcnQgY29uc3QgZ2V0VmlzaWJsaXR5T2ZIZWFkZXJJbmZvID0gZnVuY3Rpb24gKFxuXHRvVGl0bGVBbm5vdGF0aW9uczogTWV0YU1vZGVsUHJvcGVydHlBbm5vdGF0aW9ucyxcblx0b0Rlc2NyaXB0aW9uQW5ub3RhdGlvbnM6IE1ldGFNb2RlbFByb3BlcnR5QW5ub3RhdGlvbnMsXG5cdG9GaWVsZFRpdGxlRmllbGRDb250cm9sPzogc3RyaW5nLFxuXHRvRmllbGREZXNjcmlwdGlvbkZpZWxkQ29udHJvbD86IHN0cmluZ1xuKTogYm9vbGVhbiB8IHN0cmluZyB7XG5cdC8vIENoZWNrIEFubm90YXRpb25zIGZvciBUaXRsZSBGaWVsZFxuXHQvLyBTZXQgdG8gdHJ1ZSBhbmQgZG9uJ3QgdGFrZSBpbnRvIGFjY291bnQsIGlmIHRoZXJlIGFyZSBubyBhbm5vdGF0aW9ucywgaS5lLiBubyB0aXRsZSBleGlzdHNcblx0Y29uc3QgYklzVGl0bGVSZWFkT25seSA9IG9UaXRsZUFubm90YXRpb25zID8gaXNSZWFkT25seUZyb21TdGF0aWNBbm5vdGF0aW9ucyhvVGl0bGVBbm5vdGF0aW9ucywgb0ZpZWxkVGl0bGVGaWVsZENvbnRyb2wpIDogdHJ1ZTtcblx0Y29uc3QgdGl0bGVFeHByZXNzaW9uID0gcmVhZE9ubHlFeHByZXNzaW9uRnJvbUR5bmFtaWNBbm5vdGF0aW9ucyhvRmllbGRUaXRsZUZpZWxkQ29udHJvbCk7XG5cdC8vIFRoZXJlIGlzIG5vIGV4cHJlc3Npb24gYW5kIHRoZSB0aXRsZSBpcyBub3QgcmVhZHkgb25seSwgdGhpcyBpcyBzdWZmaWNpZW50IGZvciBhbiBlZGl0YWJsZSBoZWFkZXJcblx0aWYgKCFiSXNUaXRsZVJlYWRPbmx5ICYmICF0aXRsZUV4cHJlc3Npb24pIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8vIENoZWNrIEFubm90YXRpb25zIGZvciBEZXNjcmlwdGlvbiBGaWVsZFxuXHQvLyBTZXQgdG8gdHJ1ZSBhbmQgZG9uJ3QgdGFrZSBpbnRvIGFjY291bnQsIGlmIHRoZXJlIGFyZSBubyBhbm5vdGF0aW9ucywgaS5lLiBubyBkZXNjcmlwdGlvbiBleGlzdHNcblx0Y29uc3QgYklzRGVzY3JpcHRpb25SZWFkT25seSA9IG9EZXNjcmlwdGlvbkFubm90YXRpb25zXG5cdFx0PyBpc1JlYWRPbmx5RnJvbVN0YXRpY0Fubm90YXRpb25zKG9EZXNjcmlwdGlvbkFubm90YXRpb25zLCBvRmllbGREZXNjcmlwdGlvbkZpZWxkQ29udHJvbClcblx0XHQ6IHRydWU7XG5cdGNvbnN0IGRlc2NyaXB0aW9uRXhwcmVzc2lvbiA9IHJlYWRPbmx5RXhwcmVzc2lvbkZyb21EeW5hbWljQW5ub3RhdGlvbnMob0ZpZWxkRGVzY3JpcHRpb25GaWVsZENvbnRyb2wpO1xuXHQvLyBUaGVyZSBpcyBubyBleHByZXNzaW9uIGFuZCB0aGUgZGVzY3JpcHRpb24gaXMgbm90IHJlYWR5IG9ubHksIHRoaXMgaXMgc3VmZmljaWVudCBmb3IgYW4gZWRpdGFibGUgaGVhZGVyXG5cdGlmICghYklzRGVzY3JpcHRpb25SZWFkT25seSAmJiAhZGVzY3JpcHRpb25FeHByZXNzaW9uKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvLyBCb3RoIHRpdGxlIGFuZCBkZXNjcmlwdGlvbiBhcmUgbm90IGVkaXRhYmxlIGFuZCB0aGVyZSBhcmUgbm8gZHluYW1pYyBhbm5vdGF0aW9uc1xuXHRpZiAoYklzVGl0bGVSZWFkT25seSAmJiBiSXNEZXNjcmlwdGlvblJlYWRPbmx5ICYmICF0aXRsZUV4cHJlc3Npb24gJiYgIWRlc2NyaXB0aW9uRXhwcmVzc2lvbikge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIE5vdyBjb21iaW5lIGV4cHJlc3Npb25zXG5cdGlmICh0aXRsZUV4cHJlc3Npb24gJiYgIWRlc2NyaXB0aW9uRXhwcmVzc2lvbikge1xuXHRcdHJldHVybiB0aXRsZUV4cHJlc3Npb247XG5cdH0gZWxzZSBpZiAoIXRpdGxlRXhwcmVzc2lvbiAmJiBkZXNjcmlwdGlvbkV4cHJlc3Npb24pIHtcblx0XHRyZXR1cm4gZGVzY3JpcHRpb25FeHByZXNzaW9uO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjb21iaW5lVGl0bGVBbmREZXNjcmlwdGlvbkV4cHJlc3Npb24ob0ZpZWxkVGl0bGVGaWVsZENvbnRyb2wsIG9GaWVsZERlc2NyaXB0aW9uRmllbGRDb250cm9sKTtcblx0fVxufTtcblxuZXhwb3J0IGNvbnN0IGNvbWJpbmVUaXRsZUFuZERlc2NyaXB0aW9uRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChvVGl0bGVGaWVsZENvbnRyb2w/OiBzdHJpbmcsIG9EZXNjcmlwdGlvbkZpZWxkQ29udHJvbD86IHN0cmluZyk6IHN0cmluZyB7XG5cdC8vIElmIGJvdGggaGVhZGVyIGFuZCB0aXRsZSBmaWVsZCBhcmUgYmFzZWQgb24gZHlubWFpYyBmaWVsZCBjb250cm9sLCB0aGUgZWRpdGFibGUgaGVhZGVyXG5cdC8vIGlzIHZpc2libGUgaWYgYXQgbGVhc3Qgb25lIG9mIHRoZXNlIGlzIG5vdCByZWFkeSBvbmx5XG5cdHJldHVybiBcIns9ICVcIiArIG9UaXRsZUZpZWxkQ29udHJvbCArIFwiID09PSAxID8gKCAlXCIgKyBvRGVzY3JpcHRpb25GaWVsZENvbnRyb2wgKyBcIiA9PT0gMSA/IGZhbHNlIDogdHJ1ZSApIDogdHJ1ZSB9XCI7XG59O1xuXG4vKlxuICogR2V0IEV4cHJlc3Npb24gb2YgcHJlc3MgZXZlbnQgZm9yIHRoZSBkZWxldGUgYnV0dG9uLlxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIGVudGl0eVNldCBUaGUgY3VycmVudCBlbnRpdHkgc2V0XG4gKiBAcGFyYW0gY29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlIFRoZSBjdXJyZW50IHRlbXBsYXRpbmcgY29udGV4dFxuICogcmV0dXJucyBUaGUgZnVuY3Rpb24gc3RyaW5nIGdlbmVyYXRlZCBmcm9tIHRoZSBDb21tb25IZWxwZXIncyBtZXRob2QgZ2VuZXJhdGVGdW5jdGlvblxuICovXG5leHBvcnQgY29uc3QgZ2V0UHJlc3NFeHByZXNzaW9uRm9yRGVsZXRlID0gZnVuY3Rpb24gKCk6IHN0cmluZyB7XG5cdGNvbnN0IGRlbGV0YWJsZUNvbnRleHRzID0gXCIkeyR2aWV3Pi99LmdldEJpbmRpbmdDb250ZXh0KClcIixcblx0XHR0aXRsZSA9IFwiJHskdmlldz4vfS5ieUlkKCdmZTo6T2JqZWN0UGFnZScpLmRhdGEoJ09iamVjdFBhZ2VTdWJ0aXRsZScpXCIsXG5cdFx0ZGVzY3JpcHRpb24gPSBcIiR7JHZpZXc+L30uYnlJZCgnZmU6Ok9iamVjdFBhZ2UnKS5kYXRhKCdPYmplY3RQYWdlRGVzY3JpcHRpb24nKVwiO1xuXG5cdGNvbnN0IHBhcmFtcyA9IHtcblx0XHR0aXRsZTogdGl0bGUsXG5cdFx0ZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uXG5cdH07XG5cdHJldHVybiBDb21tb25IZWxwZXIuZ2VuZXJhdGVGdW5jdGlvbihcIi5lZGl0Rmxvdy5kZWxldGVEb2N1bWVudFwiLCBkZWxldGFibGVDb250ZXh0cywgQ29tbW9uSGVscGVyLm9iamVjdFRvU3RyaW5nKHBhcmFtcykpO1xufTtcblxuLypcbiAqIEdldCBFeHByZXNzaW9uIG9mIHByZXNzIGV2ZW50IG9mIEVkaXQgYnV0dG9uLlxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtvYmplY3R9IFtvRGF0YUZpZWxkXSBEYXRhIGZpZWxkIG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IFtzRW50aXR5U2V0TmFtZV0gRW50aXR5IHNldCBuYW1lXG4gKiBAcGFyYW0ge29iamVjdH0gW29IZWFkZXJBY3Rpb25dIEhlYWRlciBhY3Rpb24gb2JqZWN0XG4gKiByZXR1cm5zIHtzdHJpbmd9ICBiaW5kaW5nIGV4cHJlc3Npb24gLyBmdW5jdGlvbiBzdHJpbmcgZ2VuZXJhdGVkIGZyb20gY29tbWFuaGVscGVyJ3MgZnVuY3Rpb24gZ2VuZXJhdGVGdW5jdGlvblxuICovXG5leHBvcnQgY29uc3QgZ2V0UHJlc3NFeHByZXNzaW9uRm9yRWRpdCA9IGZ1bmN0aW9uIChcblx0b0RhdGFGaWVsZDogTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRGb3JBY3Rpb24+LFxuXHRzRW50aXR5U2V0TmFtZTogc3RyaW5nLFxuXHRvSGVhZGVyQWN0aW9uPzogQmFzZUFjdGlvblxuKTogc3RyaW5nIHtcblx0Y29uc3Qgc0VkaXRhYmxlQ29udGV4dHMgPSBDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKG9EYXRhRmllbGQgJiYgb0RhdGFGaWVsZC5BY3Rpb24hKSxcblx0XHRzRGF0YUZpZWxkRW51bU1lbWJlciA9XG5cdFx0XHRvRGF0YUZpZWxkICYmXG5cdFx0XHRvRGF0YUZpZWxkLkludm9jYXRpb25Hcm91cGluZyAmJlxuXHRcdFx0KG9EYXRhRmllbGQuSW52b2NhdGlvbkdyb3VwaW5nIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPilbXCIkRW51bU1lbWJlclwiXSxcblx0XHRzSW52b2NhdGlvbkdyb3VwID0gc0RhdGFGaWVsZEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuT3BlcmF0aW9uR3JvdXBpbmdUeXBlL0NoYW5nZVNldFwiID8gXCJDaGFuZ2VTZXRcIiA6IFwiSXNvbGF0ZWRcIjtcblx0Y29uc3Qgb1BhcmFtcyA9IHtcblx0XHRjb250ZXh0czogXCIkeyR2aWV3Pi99LmdldEJpbmRpbmdDb250ZXh0KClcIixcblx0XHRlbnRpdHlTZXROYW1lOiBDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKHNFbnRpdHlTZXROYW1lKSxcblx0XHRpbnZvY2F0aW9uR3JvdXBpbmc6IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXMoc0ludm9jYXRpb25Hcm91cCksXG5cdFx0bW9kZWw6IFwiJHskc291cmNlPi99LmdldE1vZGVsKClcIixcblx0XHRsYWJlbDogQ29tbW9uSGVscGVyLmFkZFNpbmdsZVF1b3RlcyhvRGF0YUZpZWxkICYmIG9EYXRhRmllbGQuTGFiZWwhLCB0cnVlKSxcblx0XHRpc05hdmlnYWJsZTogb0hlYWRlckFjdGlvbiAmJiBvSGVhZGVyQWN0aW9uLmlzTmF2aWdhYmxlLFxuXHRcdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbjpcblx0XHRcdG9IZWFkZXJBY3Rpb24gJiYgb0hlYWRlckFjdGlvbi5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24gPyBgJyR7b0hlYWRlckFjdGlvbi5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb259J2AgOiB1bmRlZmluZWQsXG5cdFx0ZGlzYWJsZVN0cmljdEhhbmRsaW5nOiBvSGVhZGVyQWN0aW9uPy5kaXNhYmxlU3RyaWN0SGFuZGxpbmdcblx0fTtcblx0cmV0dXJuIENvbW1vbkhlbHBlci5nZW5lcmF0ZUZ1bmN0aW9uKFwiLmhhbmRsZXJzLm9uQ2FsbEFjdGlvblwiLCBcIiR7JHZpZXc+L31cIiwgc0VkaXRhYmxlQ29udGV4dHMsIENvbW1vbkhlbHBlci5vYmplY3RUb1N0cmluZyhvUGFyYW1zKSk7XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIGV4cHJlc3Npb24gZm9yIHRoZSAncHJlc3MnIGV2ZW50IGluIHRoZSBmb290ZXIgYW5ub3RhdGlvbiBhY3Rpb25zLlxuICogQHBhcmFtIGRhdGFGaWVsZE1vZGVsUGF0aCBUaGUgZGF0YSBtb2RlbCBwYXRoIG9mIHRoZSBkYXRhIGZpZWxkXG4gKiBAcGFyYW0gZW50aXR5U2V0TmFtZSBUaGUgZW50aXR5IHNldCBuYW1lXG4gKiBAcGFyYW0gaGVhZGVyQWN0aW9uIFRoZSBoZWFkZXIgYWN0aW9uIG9iamVjdFxuICogQHJldHVybnMgIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gb3IgZnVuY3Rpb24gc3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRQcmVzc0V4cHJlc3Npb25Gb3JGb290ZXJBbm5vdGF0aW9uQWN0aW9uID0gZnVuY3Rpb24gKFxuXHRkYXRhRmllbGRNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkRm9yQWN0aW9uPixcblx0ZW50aXR5U2V0TmFtZTogc3RyaW5nLFxuXHRoZWFkZXJBY3Rpb246IEN1c3RvbUFjdGlvblxuKTogc3RyaW5nIHtcblx0Y29uc3QgZGF0YUZpZWxkID0gZGF0YUZpZWxkTW9kZWxQYXRoLnRhcmdldE9iamVjdCBhcyBEYXRhRmllbGRGb3JBY3Rpb247XG5cdGNvbnN0IGFjdGlvbkNvbnRleHRzID0gQ29tbW9uSGVscGVyLmFkZFNpbmdsZVF1b3RlcyhkYXRhRmllbGQuQWN0aW9uIGFzIHN0cmluZyk7XG5cdGNvbnN0IG9QYXJhbXMgPSB7XG5cdFx0Y29udGV4dHM6IFwiJHskdmlldz4vfS5nZXRCaW5kaW5nQ29udGV4dCgpXCIsXG5cdFx0ZW50aXR5U2V0TmFtZTogQ29tbW9uSGVscGVyLmFkZFNpbmdsZVF1b3RlcyhlbnRpdHlTZXROYW1lKSxcblx0XHRpbnZvY2F0aW9uR3JvdXBpbmc6IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXMoXG5cdFx0XHRkYXRhRmllbGQuSW52b2NhdGlvbkdyb3VwaW5nID09PSBcIlVJLk9wZXJhdGlvbkdyb3VwaW5nVHlwZS9DaGFuZ2VTZXRcIiA/IFwiQ2hhbmdlU2V0XCIgOiBcIklzb2xhdGVkXCJcblx0XHQpLFxuXHRcdG1vZGVsOiBcIiR7JHNvdXJjZT4vfS5nZXRNb2RlbCgpXCIsXG5cdFx0bGFiZWw6IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXMoZGF0YUZpZWxkLkxhYmVsIGFzIHN0cmluZywgdHJ1ZSksXG5cdFx0aXNOYXZpZ2FibGU6IGhlYWRlckFjdGlvbi5pc05hdmlnYWJsZSxcblx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb246IGhlYWRlckFjdGlvbi5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb25cblx0XHRcdD8gYCcke2hlYWRlckFjdGlvbi5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb259J2Bcblx0XHRcdDogdW5kZWZpbmVkXG5cdH07XG5cdHJldHVybiBDb21tb25IZWxwZXIuZ2VuZXJhdGVGdW5jdGlvbihcIi5oYW5kbGVycy5vbkNhbGxBY3Rpb25cIiwgXCIkeyR2aWV3Pi99XCIsIGFjdGlvbkNvbnRleHRzLCBDb21tb25IZWxwZXIub2JqZWN0VG9TdHJpbmcob1BhcmFtcykpO1xufTtcblxuLypcbiAqIEdldCBFeHByZXNzaW9uIGZvciBleGVjdXRpbmcgdGhlIGV2ZW50IGV4cHJlc3Npb24gb2YgdGhlIHByaW1hcnkgYWN0aW9uLlxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtvYmplY3R9IFtvRGF0YUZpZWxkXSBEYXRhIGZpZWxkIG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IFtzRW50aXR5U2V0TmFtZV0gRW50aXR5IHNldCBuYW1lXG4gKiBAcGFyYW0ge29iamVjdH0gW29IZWFkZXJBY3Rpb25dIEhlYWRlciBhY3Rpb24gb2JqZWN0XG4gKiBAcGFyYW0ge0NvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgc3RyaW5nfSBUaGUgdmlzaWJpbGl0eSBvZiBzZW1hdGljIHBvc2l0aXZlIGFjdGlvblxuICogQHBhcmFtIHtDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IHN0cmluZ30gVGhlIGVuYWJsZW1lbnQgb2Ygc2VtYW50aWMgcG9zaXRpdmUgYWN0aW9uXG4gKiBAcGFyYW0ge0NvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgc3RyaW5nfSBUaGUgRWRpdCBidXR0b24gdmlzaWJpbGl0eVxuICogQHBhcmFtIHtDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IHN0cmluZ30gVGhlIGVuYWJsZW1lbnQgb2YgRWRpdCBidXR0b25cbiAqIHJldHVybnMge3N0cmluZ30gIGJpbmRpbmcgZXhwcmVzc2lvbiAvIGZ1bmN0aW9uIHN0cmluZyBnZW5lcmF0ZWQgZnJvbSBjb21tYW5oZWxwZXIncyBmdW5jdGlvbiBnZW5lcmF0ZUZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRQcmVzc0V4cHJlc3Npb25Gb3JQcmltYXJ5QWN0aW9uID0gZnVuY3Rpb24gKFxuXHRvRGF0YUZpZWxkOiBEYXRhRmllbGRGb3JBY3Rpb24gfCB1bmRlZmluZWQsXG5cdHNFbnRpdHlTZXROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdG9IZWFkZXJBY3Rpb246IEJhc2VBY3Rpb24gfCBudWxsLFxuXHRwb3NpdGl2ZUFjdGlvblZpc2libGU6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgc3RyaW5nLFxuXHRwb3NpdGl2ZUFjdGlvbkVuYWJsZWQ6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgc3RyaW5nLFxuXHRlZGl0QWN0aW9uVmlzaWJsZTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBzdHJpbmcsXG5cdGVkaXRBY3Rpb25FbmFibGVkOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IHN0cmluZ1xuKTogc3RyaW5nIHtcblx0Y29uc3Qgc0FjdGlvbkNvbnRleHRzID0gQ29tbW9uSGVscGVyLmFkZFNpbmdsZVF1b3RlcyhvRGF0YUZpZWxkPy5BY3Rpb24udG9TdHJpbmcoKSA/PyBcIlwiKSxcblx0XHRzRGF0YUZpZWxkRW51bU1lbWJlciA9XG5cdFx0XHRvRGF0YUZpZWxkICYmXG5cdFx0XHRvRGF0YUZpZWxkLkludm9jYXRpb25Hcm91cGluZyAmJlxuXHRcdFx0KG9EYXRhRmllbGQuSW52b2NhdGlvbkdyb3VwaW5nIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPilbXCIkRW51bU1lbWJlclwiXSxcblx0XHRzSW52b2NhdGlvbkdyb3VwID0gc0RhdGFGaWVsZEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuT3BlcmF0aW9uR3JvdXBpbmdUeXBlL0NoYW5nZVNldFwiID8gXCJDaGFuZ2VTZXRcIiA6IFwiSXNvbGF0ZWRcIjtcblx0Y29uc3Qgb1BhcmFtcyA9IHtcblx0XHRjb250ZXh0czogXCIkeyR2aWV3Pi99LmdldEJpbmRpbmdDb250ZXh0KClcIixcblx0XHRlbnRpdHlTZXROYW1lOiBzRW50aXR5U2V0TmFtZSA/IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXMoc0VudGl0eVNldE5hbWUpIDogXCJcIixcblx0XHRpbnZvY2F0aW9uR3JvdXBpbmc6IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXMoc0ludm9jYXRpb25Hcm91cCksXG5cdFx0bW9kZWw6IFwiJHskc291cmNlPi99LmdldE1vZGVsKClcIixcblx0XHRsYWJlbDogQ29tbW9uSGVscGVyLmFkZFNpbmdsZVF1b3RlcyhvRGF0YUZpZWxkPy5MYWJlbD8udG9TdHJpbmcoKSA/PyBcIlwiLCB0cnVlKSxcblx0XHRpc05hdmlnYWJsZTogb0hlYWRlckFjdGlvbj8uaXNOYXZpZ2FibGUsXG5cdFx0ZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uOiBvSGVhZGVyQWN0aW9uPy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb25cblx0XHRcdD8gYCcke29IZWFkZXJBY3Rpb24uZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9ufSdgXG5cdFx0XHQ6IHVuZGVmaW5lZFxuXHR9O1xuXHRjb25zdCBvQ29uZGl0aW9ucyA9IHtcblx0XHRwb3NpdGl2ZUFjdGlvblZpc2libGUsXG5cdFx0cG9zaXRpdmVBY3Rpb25FbmFibGVkLFxuXHRcdGVkaXRBY3Rpb25WaXNpYmxlLFxuXHRcdGVkaXRBY3Rpb25FbmFibGVkXG5cdH07XG5cdHJldHVybiBDb21tb25IZWxwZXIuZ2VuZXJhdGVGdW5jdGlvbihcblx0XHRcIi5oYW5kbGVycy5vblByaW1hcnlBY3Rpb25cIixcblx0XHRcIiRjb250cm9sbGVyXCIsXG5cdFx0XCIkeyR2aWV3Pi99XCIsXG5cdFx0XCIkeyR2aWV3Pi99LmdldEJpbmRpbmdDb250ZXh0KClcIixcblx0XHRzQWN0aW9uQ29udGV4dHMsXG5cdFx0Q29tbW9uSGVscGVyLm9iamVjdFRvU3RyaW5nKG9QYXJhbXMpLFxuXHRcdENvbW1vbkhlbHBlci5vYmplY3RUb1N0cmluZyhvQ29uZGl0aW9ucylcblx0KTtcbn07XG5cbi8qXG4gKiBHZXRzIHRoZSBiaW5kaW5nIG9mIHRoZSBjb250YWluZXIgSEJveCBmb3IgdGhlIGhlYWRlciBmYWNldC5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7b2JqZWN0fSBbb0NvbnRyb2xDb25maWd1cmF0aW9uXSBUaGUgY29udHJvbCBjb25maWd1cmF0aW9uIGZvcm0gb2YgdGhlIHZpZXdEYXRhIG1vZGVsXG4gKiBAcGFyYW0ge29iamVjdH0gW29IZWFkZXJGYWNldF0gVGhlIG9iamVjdCBvZiB0aGUgaGVhZGVyIGZhY2V0XG4gKiByZXR1cm5zIHsqfSAgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmcm9tIGZ1bmN0aW9uIGdldEJpbmRpbmdXaXRoR3JvdXBJZEZyb21Db25maWcgb3IgdW5kZWZpbmVkLlxuICovXG5leHBvcnQgY29uc3QgZ2V0U3Rhc2hhYmxlSEJveEJpbmRpbmcgPSBmdW5jdGlvbiAoXG5cdG9Db250cm9sQ29uZmlndXJhdGlvbjogQ29udHJvbENvbmZpZ3VyYXRpb24sXG5cdG9IZWFkZXJGYWNldDogeyBGYWNldDogRmllbGRHcm91cEZhY2V0IH1cbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGlmIChvSGVhZGVyRmFjZXQgJiYgb0hlYWRlckZhY2V0LkZhY2V0ICYmIG9IZWFkZXJGYWNldC5GYWNldC50YXJnZXRBbm5vdGF0aW9uVHlwZSA9PT0gXCJEYXRhUG9pbnRcIikge1xuXHRcdHJldHVybiBnZXRCaW5kaW5nV2l0aEdyb3VwSWRGcm9tQ29uZmlnKG9Db250cm9sQ29uZmlndXJhdGlvbiwgb0hlYWRlckZhY2V0LkZhY2V0LnRhcmdldEFubm90YXRpb25WYWx1ZSEpO1xuXHR9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SGVhZGVyRm9ybUhib3hSZW5kZXJUeXBlID0gZnVuY3Rpb24gKGRhdGFGaWVsZDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGlmIChkYXRhRmllbGQ/LnRhcmdldE9iamVjdD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24pIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdHJldHVybiBcIkJhcmVcIjtcbn07XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgYWN0aW9uIGdyb3VwIGhhbmRsZXIgdGhhdCBpcyBpbnZva2VkIHdoZW4gYWRkaW5nIHRoZSBtZW51IGJ1dHRvbiBoYW5kbGluZyBhcHByb3ByaWF0ZWx5LlxuICogQHBhcmFtIG9DdHggVGhlIGN1cnJlbnQgY29udGV4dCBpbiB3aGljaCB0aGUgaGFuZGxlciBpcyBjYWxsZWRcbiAqIEBwYXJhbSBvQWN0aW9uIFRoZSBjdXJyZW50IGFjdGlvbiBjb250ZXh0XG4gKiBAcGFyYW0gb0RhdGFGaWVsZEZvckRlZmF1bHRBY3Rpb24gVGhlIGN1cnJlbnQgZGF0YUZpZWxkIGZvciB0aGUgZGVmYXVsdCBhY3Rpb25cbiAqIEBwYXJhbSBkZWZhdWx0QWN0aW9uQ29udGV4dE9yRW50aXR5U2V0IFRoZSBjdXJyZW50IGNvbnRleHQgZm9yIHRoZSBkZWZhdWx0IGFjdGlvblxuICogQHJldHVybnMgVGhlIGFwcHJvcHJpYXRlIGV4cHJlc3Npb24gc3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0QWN0aW9uSGFuZGxlcihcblx0b0N0eDogQ29udGV4dCxcblx0b0FjdGlvbjogQ3VzdG9tQWN0aW9uLFxuXHRvRGF0YUZpZWxkRm9yRGVmYXVsdEFjdGlvbjogTWV0YU1vZGVsVHlwZTxEYXRhRmllbGREZWZhdWx0Pixcblx0ZGVmYXVsdEFjdGlvbkNvbnRleHRPckVudGl0eVNldDogc3RyaW5nXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGlmIChvQWN0aW9uLmRlZmF1bHRBY3Rpb24pIHtcblx0XHRjb25zdCBkZWZhdWx0QWN0aW9uID0gb0FjdGlvbi5kZWZhdWx0QWN0aW9uIGFzIEN1c3RvbUFjdGlvbjtcblx0XHR0cnkge1xuXHRcdFx0c3dpdGNoIChkZWZhdWx0QWN0aW9uLnR5cGUpIHtcblx0XHRcdFx0Y2FzZSBcIkZvckFjdGlvblwiOiB7XG5cdFx0XHRcdFx0cmV0dXJuIGdldFByZXNzRXhwcmVzc2lvbkZvckVkaXQoXG5cdFx0XHRcdFx0XHRvRGF0YUZpZWxkRm9yRGVmYXVsdEFjdGlvbiBhcyBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZEZvckFjdGlvbj4sXG5cdFx0XHRcdFx0XHRkZWZhdWx0QWN0aW9uQ29udGV4dE9yRW50aXR5U2V0LFxuXHRcdFx0XHRcdFx0b0FjdGlvbi5kZWZhdWx0QWN0aW9uIGFzIEJhc2VBY3Rpb25cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNhc2UgXCJGb3JOYXZpZ2F0aW9uXCI6IHtcblx0XHRcdFx0XHRpZiAoZGVmYXVsdEFjdGlvbi5jb21tYW5kKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gXCJjbWQ6XCIgKyBkZWZhdWx0QWN0aW9uLmNvbW1hbmQ7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJldHVybiBkZWZhdWx0QWN0aW9uLnByZXNzO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRkZWZhdWx0OiB7XG5cdFx0XHRcdFx0aWYgKGRlZmF1bHRBY3Rpb24uY29tbWFuZCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIFwiY21kOlwiICsgZGVmYXVsdEFjdGlvbi5jb21tYW5kO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoZGVmYXVsdEFjdGlvbi5ub1dyYXApIHtcblx0XHRcdFx0XHRcdHJldHVybiBkZWZhdWx0QWN0aW9uLnByZXNzO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gQ29tbW9uSGVscGVyLmJ1aWxkQWN0aW9uV3JhcHBlcihkZWZhdWx0QWN0aW9uLCB7IGlkOiBcImZvclRoZU9iamVjdFBhZ2VcIiB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGNhdGNoIChpb0V4KSB7XG5cdFx0XHRyZXR1cm4gXCJiaW5kaW5nIGZvciB0aGUgZGVmYXVsdCBhY3Rpb24gaXMgbm90IHdvcmtpbmcgYXMgZXhwZWN0ZWRcIjtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgc3ViIHNlY3Rpb24gdmlzdWFsaXphdGlvbiBpcyBwYXJ0IG9mIHByZXZpZXcuXG4gKiBAcGFyYW0gc3ViU2VjdGlvbiBUaGUgc3ViIHNlY3Rpb24gdmlzdWFsaXphdGlvblxuICogQHJldHVybnMgQSBCb29sZWFuIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1Zpc3VhbGl6YXRpb25Jc1BhcnRPZlByZXZpZXcoc3ViU2VjdGlvbjogRGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uKTogYm9vbGVhbiB7XG5cdHJldHVybiBzdWJTZWN0aW9uLmlzUGFydE9mUHJldmlldyA9PT0gdHJ1ZSB8fCBzdWJTZWN0aW9uLnByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9uc1swXS50eXBlICE9PSBcIlRhYmxlXCI7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZXhwcmVzc2lvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgZm9vdGVyIG9mIHRoZSBvYmplY3QgcGFnZSBpcyB0byBiZSB2aXNpYmxlIG9yIG5vdC5cbiAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IGZvciB0aGUgZm9ybWF0dGVyLlxuICogQHBhcmFtIGZvb3RlckFjdGlvbnMgVGhlIGxpc3Qgb2YgZm9vdGVyIGFjdGlvbnMuXG4gKiBAcmV0dXJucyBBIGJpbmRpbmcgZXhwcmVzc2lvblxuICovXG5leHBvcnQgY29uc3QgZ2V0Rm9vdGVyVmlzaWJpbGl0eUV4cHJlc3Npb24gPSBmdW5jdGlvbiAoY29udGV4dDogSUNvbnRleHQsIGZvb3RlckFjdGlvbnM6IEJhc2VBY3Rpb25bXSk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0Y29uc3QgbWV0YU1vZGVsID0gY29udGV4dC5nZXRJbnRlcmZhY2UoMSkuZ2V0TW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbDtcblxuXHRjb25zdCBfZ2VuZXJhdGVCaW5kaW5nc0ZvckFjdGlvbnMgPSAoYWN0aW9uczogQmFzZUFjdGlvbltdKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10gPT4ge1xuXHRcdGlmIChhY3Rpb25zLmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIGFjdGlvbnMubWFwKChhY3Rpb24pID0+IHJlc29sdmVCaW5kaW5nU3RyaW5nKGFjdGlvbi52aXNpYmxlID8/IHRydWUsIFwiYm9vbGVhblwiKSkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W107XG5cdFx0fVxuXHRcdHJldHVybiBbY29uc3RhbnQoZmFsc2UpXTtcblx0fTtcblxuXHRjb25zdCBnZXRBY3Rpb25Nb2RlbFBhdGggPSAoYWN0aW9uOiBCYXNlQWN0aW9uKTogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRGb3JBY3Rpb24+IHwgdW5kZWZpbmVkID0+IHtcblx0XHRjb25zdCBhbm5vdGF0aW9uUGF0aCA9IGFjdGlvbi5hbm5vdGF0aW9uUGF0aDtcblx0XHRpZiAoYW5ub3RhdGlvblBhdGgpIHtcblx0XHRcdGNvbnN0IGFjdGlvbkNvbnRleHQgPSBtZXRhTW9kZWwuZ2V0Q29udGV4dChhbm5vdGF0aW9uUGF0aCk7XG5cdFx0XHRyZXR1cm4gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPERhdGFGaWVsZEZvckFjdGlvbj4oYWN0aW9uQ29udGV4dCk7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH07XG5cblx0Ly8gQWN0aW9ucyBhcmUgY29taW5nIGZyb20gdGhlIGNvbnZlcnRlciBzbyBvbmx5IGRldGVybWluaW5nIGFjdGlvbnMgYW5kIG5vdCBzdGF0aWNhbGx5IGhpZGRlbiBhcmUgbGlzdGVkXG5cdGNvbnN0IGRldGVybWluaW5nQWN0aW9ucyA9IGZvb3RlckFjdGlvbnMuZmlsdGVyKChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckFjdGlvbik7XG5cdGNvbnN0IG1hbmlmZXN0QWN0aW9uQmluZGluZ3MgPSBfZ2VuZXJhdGVCaW5kaW5nc0ZvckFjdGlvbnMoZm9vdGVyQWN0aW9ucy5maWx0ZXIoKGFjdGlvbikgPT4gaXNNYW5pZmVzdEFjdGlvbihhY3Rpb24pKSk7XG5cdGNvbnN0IGRldGVybWluaW5nQWN0aW9uQmluZGluZ3MgPSBfZ2VuZXJhdGVCaW5kaW5nc0ZvckFjdGlvbnMoZGV0ZXJtaW5pbmdBY3Rpb25zKTtcblxuXHRjb25zdCBpc05vdEhpZGRlbkRldGVybWluaW5nQWN0aW9uID0gISFkZXRlcm1pbmluZ0FjdGlvbnMuZmluZCgoYWN0aW9uKSA9PiB7XG5cdFx0Y29uc3QgYWN0aW9uQ29udGV4dE1vZGVsUGF0aCA9IGdldEFjdGlvbk1vZGVsUGF0aChhY3Rpb24pO1xuXHRcdHJldHVybiAhYWN0aW9uQ29udGV4dE1vZGVsUGF0aD8udGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbjtcblx0fSk7XG5cblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdG9yKFxuXHRcdFx0aXNOb3RIaWRkZW5EZXRlcm1pbmluZ0FjdGlvbixcblx0XHRcdG9yKC4uLm1hbmlmZXN0QWN0aW9uQmluZGluZ3MpLFxuXHRcdFx0YW5kKG9yKFVJLklzRWRpdGFibGUsIG9yKC4uLmRldGVybWluaW5nQWN0aW9uQmluZGluZ3MpKSwgbm90KHBhdGhJbk1vZGVsKFwiaXNDcmVhdGVEaWFsb2dPcGVuXCIsIFwiaW50ZXJuYWxcIikpKVxuXHRcdClcblx0KTtcbn07XG5cbi8qKlxuICogR2V0IHRoZSBzdWJzZWN0aW9uIGhlYWRlciBsZXZlbC5cbiAqIEBwYXJhbSBzdWJTZWN0aW9uIFRoZSBzdWJzZWN0aW9uIHZpc3VhbGl6YXRpb25cbiAqIEBwYXJhbSBpc01vcmVDb250ZW50XG4gKiBAcmV0dXJucyBBIFN0cmluZyB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGVhZGVyTGV2ZWwoc3ViU2VjdGlvbjogRGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uLCBpc01vcmVDb250ZW50OiBib29sZWFuKTogc3RyaW5nIHtcblx0aWYgKGlzTW9yZUNvbnRlbnQpIHtcblx0XHRpZiAoIXN1YlNlY3Rpb24uc2hvd1N1YlNlY3Rpb25UaXRsZSkge1xuXHRcdFx0Ly8gd2hlbmV2ZXIgdGl0bGUgaXMgbWVyZ2VkIGZvciBzdWItc2VjdGlvbiwgbGV2ZWwgc2hvdWxkIGJlIEg0XG5cdFx0XHRyZXR1cm4gXCJINFwiO1xuXHRcdH0gZWxzZSBpZiAoc3ViU2VjdGlvbi5sZXZlbCA9PT0gMiAmJiBzdWJTZWN0aW9uLmRhdGFWaXN1YWxpemF0aW9uVGl0bGVWaXNpYmxlID09PSBcInRydWVcIikge1xuXHRcdFx0Ly8gcmV0YWluIG9sZCBsb2dpY1xuXHRcdFx0cmV0dXJuIFwiSDZcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFwiSDVcIjsgLy8gcmV0YWluIG9sZCBsb2dpY1xuXHRcdH1cblx0fSBlbHNlIGlmICghc3ViU2VjdGlvbi5zaG93U3ViU2VjdGlvblRpdGxlKSB7XG5cdFx0Ly8gd2hlbmV2ZXIgdGl0bGUgaXMgbWVyZ2VkIGZvciBzZWN0aW9uLCBsZXZlbCBzaG91bGQgYmUgSDNcblx0XHRyZXR1cm4gXCJIM1wiO1xuXHR9IGVsc2UgaWYgKHN1YlNlY3Rpb24ubGV2ZWwgPT09IDIgJiYgc3ViU2VjdGlvbi5kYXRhVmlzdWFsaXphdGlvblRpdGxlVmlzaWJsZSA9PT0gXCJ0cnVlXCIpIHtcblx0XHQvLyByZXRhaW4gb2xkIGxvZ2ljXG5cdFx0cmV0dXJuIFwiSDVcIjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gXCJINFwiOyAvLyByZXRhaW4gb2xkIGxvZ2ljXG5cdH1cbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBhcmlhLWxhYmVsbGVkYnkgYXR0cmlidXRlIGZvciB0aGUgaGVhZGVyIGZvcm1lbGVtZW50LlxuICogQHBhcmFtIGhlYWRlckZvcm1EYXRhXG4gKiBAcGFyYW0gZm9ybUVsZW1lbnRJZFByZWZpeFxuICogQHJldHVybnMgVGhlIHN0cmluZyBmb3IgdGhlIGFyaWEtbGFiZWxsZWRieSBhdHRyaWJ1dGVcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEhlYWRlckZvcm1BcmlhTGFiZWxsZWRCeSA9IGZ1bmN0aW9uIChoZWFkZXJGb3JtRGF0YTogSGVhZGVyRm9ybURhdGEsIGZvcm1FbGVtZW50SWRQcmVmaXg6IHN0cmluZyk6IHN0cmluZyB7XG5cdGxldCB0aXRsZUlkID0gXCJcIjtcblx0aWYgKGhlYWRlckZvcm1EYXRhLmxhYmVsKSB7XG5cdFx0dGl0bGVJZCA9IFN0YWJsZUlkSGVscGVyLmdlbmVyYXRlKFtoZWFkZXJGb3JtRGF0YS5pZCwgXCJUaXRsZVwiXSk7XG5cdH1cblx0Y29uc3QgbGFiZWxJZCA9IFN0YWJsZUlkSGVscGVyLmdlbmVyYXRlKFtmb3JtRWxlbWVudElkUHJlZml4LCBcIkxhYmVsXCJdKTtcblx0cmV0dXJuIHRpdGxlSWQgPyBgJHt0aXRsZUlkfSwke2xhYmVsSWR9YCA6IGxhYmVsSWQ7XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIGFyaWEgdGV4dCBmb3IgZm9ybSByZWdpb25zIG9uIE9iamVjdCBQYWdlLlxuICogQHBhcmFtIHN1YlNlY3Rpb25UaXRsZSBUaGUgdGl0bGUgb2YgdGhlIHN1YnNlY3Rpb25cbiAqIEByZXR1cm5zIFRoZSBhcmlhIHRleHQgZm9yIHRoZSBmb3JtIHJlZ2lvblxuICovXG5leHBvcnQgY29uc3QgZ2V0Rm9ybUFyaWFUZXh0ID0gZnVuY3Rpb24gKHN1YlNlY3Rpb25UaXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgcmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXHRyZXR1cm4gc3ViU2VjdGlvblRpdGxlICE9PSB1bmRlZmluZWQgPyByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19GT1JNX0FSSUFfVEVYVFwiLCBbc3ViU2VjdGlvblRpdGxlXSkgOiB1bmRlZmluZWQ7XG59O1xuXG5nZXRGb290ZXJWaXNpYmlsaXR5RXhwcmVzc2lvbi5yZXF1aXJlc0lDb250ZXh0ID0gdHJ1ZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUF5REEsTUFBTUEsVUFBVSxHQUFHQyxRQUFRLENBQUNELFVBQVU7RUFFL0IsTUFBTUUscUJBQXFCLEdBQUcsU0FBQUEsQ0FDcENDLGVBQTJELEVBQzNEQyxRQUFrQixFQUNsQkMsVUFBMkIsRUFDUTtJQUNuQyxPQUFPQyx5QkFBeUIsQ0FDL0JILGVBQWUsRUFDZkksd0JBQXdCLEVBQ3hCQyxTQUFTLEVBQ1RILFVBQVUsRUFDVkQsUUFDRCxDQUFDO0VBQ0YsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQU5BSyxRQUFBLENBQUFQLHFCQUFBLEdBQUFBLHFCQUFBO0VBT08sTUFBTVEsMkJBQTJCLEdBQUcsU0FBQUEsQ0FDMUNQLGVBQStDLEVBQy9DUSxXQUE0QixFQUNPO0lBQ25DLElBQUlDLGtCQUFrQixHQUFHQywyQkFBMkIsQ0FBRUYsV0FBVyxFQUFFRyxXQUFXLEVBQXFCQyxLQUFLLENBQUM7SUFDekcsSUFBS0osV0FBVyxFQUFFRyxXQUFXLEVBQXFCQyxLQUFLLEVBQUVDLE9BQU8sRUFBRUMsV0FBVyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUYsV0FBVyxFQUFFRyxFQUFFLEVBQUVDLGVBQWUsRUFBRTtNQUM5SDtNQUNBVCxrQkFBa0IsR0FBR1UscUNBQXFDLENBQUNWLGtCQUFrQixFQUFF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
814
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCdXR0b25UeXBlIiwibUxpYnJhcnkiLCJnZXRFeHByZXNzaW9uRm9yVGl0bGUiLCJmdWxsQ29udGV4dFBhdGgiLCJ2aWV3RGF0YSIsImhlYWRlckluZm8iLCJnZXRUaXRsZUJpbmRpbmdFeHByZXNzaW9uIiwiZ2V0VGV4dEJpbmRpbmdFeHByZXNzaW9uIiwidW5kZWZpbmVkIiwiX2V4cG9ydHMiLCJnZXRFeHByZXNzaW9uRm9yRGVzY3JpcHRpb24iLCJvSGVhZGVySW5mbyIsImRlc2NyaXB0aW9uQmluZGluZyIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsIkRlc2NyaXB0aW9uIiwiVmFsdWUiLCIkdGFyZ2V0IiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJUZXh0IiwiVUkiLCJUZXh0QXJyYW5nZW1lbnQiLCJhZGRUZXh0QXJyYW5nZW1lbnRUb0JpbmRpbmdFeHByZXNzaW9uIiwiZGVzY3JpcHRpb24iLCJjb21waWxlRXhwcmVzc2lvbiIsImZvcm1hdFZhbHVlUmVjdXJzaXZlbHkiLCJnZXRFeHByZXNzaW9uRm9yU2F2ZUJ1dHRvbiIsIm9WaWV3RGF0YSIsInNhdmVCdXR0b25UZXh0IiwicmVzb3VyY2VNb2RlbCIsImdldFRleHQiLCJjcmVhdGVCdXR0b25UZXh0Iiwic2F2ZUV4cHJlc3Npb24iLCJzdGFydGluZ0VudGl0eVNldCIsIlNlc3Npb24iLCJTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiaWZFbHNlIiwiSXNDcmVhdGVNb2RlIiwiRHJhZnQiLCJJc05ld09iamVjdCIsImdldEV4cHJlc3Npb25Gb3JMYWJlbE9uSGVhZGVyRm9ybSIsImxhYmVsIiwiaXNNYW5pZmVzdEFjdGlvbiIsImFjdGlvbiIsIm5vbk1hbmlmZXN0QWN0aW9ucyIsImluY2x1ZGVzIiwidHlwZSIsImJ1aWxkRW1waGFzaXplZEJ1dHRvbkV4cHJlc3Npb24iLCJkYXRhQ29udGV4dFBhdGgiLCJpZGVudGlmaWNhdGlvbiIsInRhcmdldEVudGl0eVR5cGUiLCJJZGVudGlmaWNhdGlvbiIsImRhdGFGaWVsZHNXaXRoQ3JpdGljYWxpdHkiLCJmaWx0ZXIiLCJkYXRhRmllbGQiLCIkVHlwZSIsIkNyaXRpY2FsaXR5IiwiZGF0YUZpZWxkc0JpbmRpbmdFeHByZXNzaW9ucyIsImxlbmd0aCIsIm1hcCIsImNyaXRpY2FsaXR5VmlzaWJsZUJpbmRpbmdFeHByZXNzaW9uIiwiYW5kIiwibm90IiwiZXF1YWwiLCJIaWRkZW4iLCJvciIsImNvbnN0YW50IiwiR2hvc3QiLCJFbXBoYXNpemVkIiwiZ2V0RWxlbWVudEJpbmRpbmciLCJzUGF0aCIsInNOYXZpZ2F0aW9uUGF0aCIsIk9EYXRhTW9kZWxBbm5vdGF0aW9uSGVscGVyIiwiZ2V0TmF2aWdhdGlvblBhdGgiLCJjaGVja0RyYWZ0U3RhdGUiLCJlbnRpdHlTZXQiLCJEcmFmdFJvb3QiLCJFZGl0QWN0aW9uIiwiY2hlY2tDb2xsYWJvcmF0aW9uRHJhZnRSb290IiwiU2hhcmVBY3Rpb24iLCJnZXRTd2l0Y2hUb0FjdGl2ZVZpc2liaWxpdHkiLCJwYXRoSW5Nb2RlbCIsIklzRWRpdGFibGUiLCJnZXRTd2l0Y2hUb0RyYWZ0VmlzaWJpbGl0eSIsImdldFN3aXRjaERyYWZ0QW5kQWN0aXZlVmlzaWJpbGl0eSIsIl9maW5kQWN0aW9uIiwiYUNvbnZlcnRlckNvbnRleHRIZWFkZXJBY3Rpb25zIiwic0FjdGlvblR5cGUiLCJvQWN0aW9uIiwiZmluZCIsIm9IZWFkZXJBY3Rpb24iLCJnZXREZWxldGVDb21tYW5kRXhlY3V0aW9uRW5hYmxlZCIsIm9EZWxldGVBY3Rpb24iLCJlbmFibGVkIiwiZ2V0RGVsZXRlQ29tbWFuZEV4ZWN1dGlvblZpc2libGUiLCJ2aXNpYmxlIiwiZ2V0RWRpdENvbW1hbmRFeGVjdXRpb25WaXNpYmxlIiwib0VkaXRBY3Rpb24iLCJnZXRFZGl0Q29tbWFuZEV4ZWN1dGlvbkVuYWJsZWQiLCJnZXRFZGl0QWN0aW9uIiwib0VudGl0eVNldCIsImdldFBhdGgiLCJhUGF0aHMiLCJzcGxpdCIsInJvb3RFbnRpdHlTZXRQYXRoIiwicm9vdEVudGl0eVNldEFubm5vdGF0aW9ucyIsImdldE9iamVjdCIsImJEcmFmdFJvb3QiLCJoYXNPd25Qcm9wZXJ0eSIsImJEcmFmdE5vZGUiLCJiU3RpY2t5U2Vzc2lvbiIsInNBY3Rpb25OYW1lIiwiaXNSZWFkT25seUZyb21TdGF0aWNBbm5vdGF0aW9ucyIsIm9Bbm5vdGF0aW9ucyIsIm9GaWVsZENvbnRyb2wiLCJiQ29tcHV0ZWQiLCJiSW1tdXRhYmxlIiwiYlJlYWRPbmx5IiwiQm9vbCIsInJlYWRPbmx5RXhwcmVzc2lvbkZyb21EeW5hbWljQW5ub3RhdGlvbnMiLCJzSXNGaWVsZENvbnRyb2xQYXRoUmVhZE9ubHkiLCJCaW5kaW5nSW5mbyIsInBhcnNlIiwiZ2V0RXhwcmVzc2lvbkZvck1pY3JvQ2hhcnRUaXRsZVByZXNzIiwib0NvbmZpZ3VyYXRpb24iLCJ0YXJnZXRBbm5vdGF0aW9uUGF0aCIsInRhcmdldEFubm90YXRpb25QYXRoRGF0TW9kZWxPYmplY3QiLCJvTWFuaWZlc3RPdXRib3VuZCIsInNDb2xsZWN0aW9uTmFtZSIsImdldE1pY3JvQ2hhcnRDb250cm9sQ29uZmlndXJhdGlvblBhdGgiLCJuYXZpZ2F0aW9uQ29uZmlndXJhdGlvbiIsIkpTT04iLCJzdHJpbmdpZnkiLCJnZXRNaWNyb0NoYXJ0VGl0bGVBc0xpbmsiLCJvQ29udHJvbENvbmZpZ3VyYXRpb24iLCJjb2xsZWN0aW9uTmFtZSIsInRhcmdldENvbnRyb2xDb25maWd1cmF0aW9uIiwidGFyZ2V0T2JqZWN0IiwiVmlzdWFsaXphdGlvbnMiLCJ2YWx1ZSIsImdldEdyb3VwSWRGcm9tQ29uZmlnIiwib0NvbmZpZ3VyYXRpb25zIiwic0Fubm90YXRpb25QYXRoIiwic0RlZmF1bHRHcm91cElkIiwiYUF1dG9QYXR0ZXJucyIsInNHcm91cElkIiwicmVxdWVzdEdyb3VwSWQiLCJzb21lIiwiYXV0b1BhdHRlcm4iLCJnZXRHcm91cElkRnJvbUNvbmZpZ0Zvck1pY3JvQ2hhcnQiLCJ0YXJnZXRBbm5vdGF0aW9uUGF0aERhdGFNb2RlbE9iamVjdCIsImdldEJpbmRpbmdXaXRoR3JvdXBJZEZyb21Db25maWciLCJzS2V5Iiwic0JpbmRpbmciLCJjcmVhdGVCaW5kaW5nRm9yQWx0ZXJuYXRlQW5kU2Vjb25kYXJ5S2V5cyIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsImJpbmRpbmciLCJhbHRlcm5hdGVBbmRTZWNvbmRhcnlLZXlzIiwiTW9kZWxIZWxwZXIiLCJnZXRBbHRlcm5hdGVBbmRTZWNvbmRhcnlLZXlzIiwidGFyZ2V0RW50aXR5U2V0IiwicGF0aCIsInBhcmFtZXRlcnMiLCIkc2VsZWN0Iiwiam9pbiIsImRvZXNGaWVsZEdyb3VwQ29udGFpbk9ubHlPbmVNdWx0aUxpbmVEYXRhRmllbGQiLCJhRm9ybUVsZW1lbnRzIiwiaXNWYWx1ZU11bHRpbGluZVRleHQiLCJnZXRTaGFyZUJ1dHRvblZpc2liaWxpdHkiLCJpc1NoYXJlQnV0dG9uVmlzaWJsZUZvck15SW5ib3giLCJzaGFyZUJ1dHRvblZpc2liaWxpdHlFeHAiLCJmY2xFbmFibGVkIiwiZ2V0VmlzaWJsaXR5T2ZIZWFkZXJJbmZvIiwib1RpdGxlQW5ub3RhdGlvbnMiLCJvRGVzY3JpcHRpb25Bbm5vdGF0aW9ucyIsIm9GaWVsZFRpdGxlRmllbGRDb250cm9sIiwib0ZpZWxkRGVzY3JpcHRpb25GaWVsZENvbnRyb2wiLCJiSXNUaXRsZVJlYWRPbmx5IiwidGl0bGVFeHByZXNzaW9uIiwiYklzRGVzY3JpcHRpb25SZWFkT25seSIsImRlc2NyaXB0aW9uRXhwcmVzc2lvbiIsImNvbWJpbmVUaXRsZUFuZERlc2NyaXB0aW9uRXhwcmVzc2lvbiIsIm9UaXRsZUZpZWxkQ29udHJvbCIsIm9EZXNjcmlwdGlvbkZpZWxkQ29udHJvbCIsImdldFByZXNzRXhwcmVzc2lvbkZvckRlbGV0ZSIsImRlbGV0YWJsZUNvbnRleHRzIiwidGl0bGUiLCJwYXJhbXMiLCJDb21tb25IZWxwZXIiLCJnZW5lcmF0ZUZ1bmN0aW9uIiwib2JqZWN0VG9TdHJpbmciLCJnZXRQcmVzc0V4cHJlc3Npb25Gb3JFZGl0Iiwib0RhdGFGaWVsZCIsInNFbnRpdHlTZXROYW1lIiwic0VkaXRhYmxlQ29udGV4dHMiLCJhZGRTaW5nbGVRdW90ZXMiLCJBY3Rpb24iLCJzRGF0YUZpZWxkRW51bU1lbWJlciIsIkludm9jYXRpb25Hcm91cGluZyIsInNJbnZvY2F0aW9uR3JvdXAiLCJvUGFyYW1zIiwiY29udGV4dHMiLCJlbnRpdHlTZXROYW1lIiwiaW52b2NhdGlvbkdyb3VwaW5nIiwibW9kZWwiLCJMYWJlbCIsImlzTmF2aWdhYmxlIiwiZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uIiwiZGlzYWJsZVN0cmljdEhhbmRsaW5nIiwiZ2V0UHJlc3NFeHByZXNzaW9uRm9yRm9vdGVyQW5ub3RhdGlvbkFjdGlvbiIsImRhdGFGaWVsZE1vZGVsUGF0aCIsImhlYWRlckFjdGlvbiIsImFjdGlvbkNvbnRleHRzIiwiZ2V0UHJlc3NFeHByZXNzaW9uRm9yUHJpbWFyeUFjdGlvbiIsInBvc2l0aXZlQWN0aW9uVmlzaWJsZSIsInBvc2l0aXZlQWN0aW9uRW5hYmxlZCIsImVkaXRBY3Rpb25WaXNpYmxlIiwiZWRpdEFjdGlvbkVuYWJsZWQiLCJzQWN0aW9uQ29udGV4dHMiLCJ0b1N0cmluZyIsIm9Db25kaXRpb25zIiwiZ2V0U3Rhc2hhYmxlSEJveEJpbmRpbmciLCJvSGVhZGVyRmFjZXQiLCJGYWNldCIsInRhcmdldEFubm90YXRpb25UeXBlIiwidGFyZ2V0QW5ub3RhdGlvblZhbHVlIiwiZ2V0SGVhZGVyRm9ybUhib3hSZW5kZXJUeXBlIiwiZ2V0RGVmYXVsdEFjdGlvbkhhbmRsZXIiLCJvQ3R4Iiwib0RhdGFGaWVsZEZvckRlZmF1bHRBY3Rpb24iLCJkZWZhdWx0QWN0aW9uQ29udGV4dE9yRW50aXR5U2V0IiwiZGVmYXVsdEFjdGlvbiIsImNvbW1hbmQiLCJwcmVzcyIsIm5vV3JhcCIsImJ1aWxkQWN0aW9uV3JhcHBlciIsImlkIiwiaW9FeCIsImlzVmlzdWFsaXphdGlvbklzUGFydE9mUHJldmlldyIsInN1YlNlY3Rpb24iLCJpc1BhcnRPZlByZXZpZXciLCJwcmVzZW50YXRpb24iLCJ2aXN1YWxpemF0aW9ucyIsImdldEZvb3RlclZpc2liaWxpdHlFeHByZXNzaW9uIiwiY29udGV4dCIsImZvb3RlckFjdGlvbnMiLCJtZXRhTW9kZWwiLCJnZXRJbnRlcmZhY2UiLCJnZXRNb2RlbCIsIl9nZW5lcmF0ZUJpbmRpbmdzRm9yQWN0aW9ucyIsImFjdGlvbnMiLCJyZXNvbHZlQmluZGluZ1N0cmluZyIsImdldEFjdGlvbk1vZGVsUGF0aCIsImFubm90YXRpb25QYXRoIiwiYWN0aW9uQ29udGV4dCIsImdldENvbnRleHQiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJkZXRlcm1pbmluZ0FjdGlvbnMiLCJBY3Rpb25UeXBlIiwiRGF0YUZpZWxkRm9yQWN0aW9uIiwibWFuaWZlc3RBY3Rpb25CaW5kaW5ncyIsImRldGVybWluaW5nQWN0aW9uQmluZGluZ3MiLCJpc05vdEhpZGRlbkRldGVybWluaW5nQWN0aW9uIiwiYWN0aW9uQ29udGV4dE1vZGVsUGF0aCIsImdldEhlYWRlckxldmVsIiwiaXNNb3JlQ29udGVudCIsInNob3dTdWJTZWN0aW9uVGl0bGUiLCJsZXZlbCIsImRhdGFWaXN1YWxpemF0aW9uVGl0bGVWaXNpYmxlIiwiZ2V0SGVhZGVyRm9ybUFyaWFMYWJlbGxlZEJ5IiwiaGVhZGVyRm9ybURhdGEiLCJmb3JtRWxlbWVudElkUHJlZml4IiwidGl0bGVJZCIsIlN0YWJsZUlkSGVscGVyIiwiZ2VuZXJhdGUiLCJsYWJlbElkIiwiZ2V0Rm9ybUFyaWFUZXh0Iiwic3ViU2VjdGlvblRpdGxlIiwicmVzb3VyY2VCdW5kbGUiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJyZXF1aXJlc0lDb250ZXh0Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJPYmplY3RQYWdlVGVtcGxhdGluZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBGb3JtYXR0ZXJzIGZvciB0aGUgT2JqZWN0IFBhZ2VcbmltcG9ydCB0eXBlIHsgRW50aXR5U2V0LCBOYXZpZ2F0aW9uUHJvcGVydHksIFByb3BlcnR5LCBTaW5nbGV0b24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0Q2hhcnQsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZERlZmF1bHQsXG5cdERhdGFGaWVsZEZvckFjdGlvbixcblx0RGF0YUZpZWxkVHlwZXMsXG5cdEZhY2V0LFxuXHRIZWFkZXJJbmZvVHlwZSxcblx0UHJlc2VudGF0aW9uVmFyaWFudFxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgUGF0aEluTW9kZWxFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRhbmQsXG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRjb25zdGFudCxcblx0ZXF1YWwsXG5cdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbixcblx0aWZFbHNlLFxuXHRub3QsXG5cdG9yLFxuXHRwYXRoSW5Nb2RlbCxcblx0cmVzb2x2ZUJpbmRpbmdTdHJpbmdcbn0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IE1pY3JvQ2hhcnRNYW5pZmVzdENvbmZpZ3VyYXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBBY3Rpb25UeXBlLCB0eXBlIENvbnRyb2xDb25maWd1cmF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgeyBNZXRhTW9kZWxQcm9wZXJ0eUFubm90YXRpb25zIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgQmFzZUFjdGlvbiwgQ3VzdG9tQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uRm9ybUVsZW1lbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vRm9ybVwiO1xuaW1wb3J0IHR5cGUgeyBGaWVsZEdyb3VwRmFjZXQsIEhlYWRlckZvcm1EYXRhIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvT2JqZWN0UGFnZS9IZWFkZXJGYWNldFwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9PYmplY3RQYWdlL1N1YlNlY3Rpb25cIjtcbmltcG9ydCB7IERyYWZ0LCBVSSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0ICogYXMgU3RhYmxlSWRIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB7IGdldFRpdGxlQmluZGluZ0V4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UaXRsZUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBWaWV3RGF0YSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9UZW1wbGF0ZWRWaWV3U2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQge1xuXHRhZGRUZXh0QXJyYW5nZW1lbnRUb0JpbmRpbmdFeHByZXNzaW9uLFxuXHRmb3JtYXRWYWx1ZVJlY3Vyc2l2ZWx5LFxuXHRnZXRUZXh0QmluZGluZ0V4cHJlc3Npb25cbn0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRUZW1wbGF0aW5nXCI7XG5pbXBvcnQgbUxpYnJhcnkgZnJvbSBcInNhcC9tL2xpYnJhcnlcIjtcbmltcG9ydCBCaW5kaW5nSW5mbyBmcm9tIFwic2FwL3VpL2Jhc2UvQmluZGluZ0luZm9cIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB0eXBlIHsgTWFuaWZlc3RPdXRib3VuZEVudHJ5IH0gZnJvbSBcInNhcC91aS9jb3JlL01hbmlmZXN0XCI7XG5pbXBvcnQgdHlwZSB7IElDb250ZXh0IH0gZnJvbSBcInNhcC91aS9jb3JlL3V0aWwvWE1MUHJlcHJvY2Vzc29yXCI7XG5pbXBvcnQgT0RhdGFNb2RlbEFubm90YXRpb25IZWxwZXIgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Bbm5vdGF0aW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBNZXRhTW9kZWxUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3R5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuXG5jb25zdCBCdXR0b25UeXBlID0gbUxpYnJhcnkuQnV0dG9uVHlwZTtcblxuZXhwb3J0IGNvbnN0IGdldEV4cHJlc3Npb25Gb3JUaXRsZSA9IGZ1bmN0aW9uIChcblx0ZnVsbENvbnRleHRQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHZpZXdEYXRhOiBWaWV3RGF0YSxcblx0aGVhZGVySW5mbz86IEhlYWRlckluZm9UeXBlXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdHJldHVybiBnZXRUaXRsZUJpbmRpbmdFeHByZXNzaW9uKFxuXHRcdGZ1bGxDb250ZXh0UGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0XHRnZXRUZXh0QmluZGluZ0V4cHJlc3Npb24sXG5cdFx0dW5kZWZpbmVkLFxuXHRcdGhlYWRlckluZm8sXG5cdFx0dmlld0RhdGFcblx0KTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBleHByZXNzaW9uIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgYW4gb2JqZWN0IHBhZ2UuXG4gKiBAcGFyYW0gZnVsbENvbnRleHRQYXRoIFRoZSBmdWxsIGNvbnRleHQgcGF0aCB1c2VkIHRvIHJlYWNoIHRoYXQgb2JqZWN0IHBhZ2VcbiAqIEBwYXJhbSBvSGVhZGVySW5mbyBUaGUgQFVJLkhlYWRlckluZm8gYW5ub3RhdGlvbiBjb250ZW50XG4gKiBAcGFyYW0gb0hlYWRlckluZm8uRGVzY3JpcHRpb25cbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBvYmplY3QgcGFnZSBkZXNjcmlwdGlvblxuICovXG5leHBvcnQgY29uc3QgZ2V0RXhwcmVzc2lvbkZvckRlc2NyaXB0aW9uID0gZnVuY3Rpb24gKFxuXHRmdWxsQ29udGV4dFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RW50aXR5U2V0Pixcblx0b0hlYWRlckluZm8/OiBIZWFkZXJJbmZvVHlwZVxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRsZXQgZGVzY3JpcHRpb25CaW5kaW5nID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKChvSGVhZGVySW5mbz8uRGVzY3JpcHRpb24gYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZSk7XG5cdGlmICgob0hlYWRlckluZm8/LkRlc2NyaXB0aW9uIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LlRleHQ/LmFubm90YXRpb25zPy5VST8uVGV4dEFycmFuZ2VtZW50KSB7XG5cdFx0Ly8gSW4gY2FzZSBhbiBleHBsaWNpdCB0ZXh0IGFycmFuZ2VtZW50IHdhcyBzZXQgd2UgbWFrZSB1c2Ugb2YgaXQgaW4gdGhlIGRlc2NyaXB0aW9uIGFzIHdlbGxcblx0XHRkZXNjcmlwdGlvbkJpbmRpbmcgPSBhZGRUZXh0QXJyYW5nZW1lbnRUb0JpbmRpbmdFeHByZXNzaW9uKGRlc2NyaXB0aW9uQmluZGluZywgZnVsbENvbnRleHRQYXRoKTtcblx0fVxuXHRjb25zdCBkZXNjcmlwdGlvbiA9IGNvbXBpbGVFeHByZXNzaW9uKGZvcm1hdFZhbHVlUmVjdXJzaXZlbHkoZGVzY3JpcHRpb25CaW5kaW5nLCBmdWxsQ29udGV4dFBhdGgpKTtcblx0cmV0dXJuIGRlc2NyaXB0aW9uID09PSBcInVuZGVmaW5lZFwiID8gXCJcIiA6IGRlc2NyaXB0aW9uO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIGV4cHJlc3Npb24gZm9yIHRoZSBzYXZlIGJ1dHRvbi5cbiAqIEBwYXJhbSBvVmlld0RhdGEgVGhlIGN1cnJlbnQgdmlldyBkYXRhXG4gKiBAcGFyYW0gZnVsbENvbnRleHRQYXRoIFRoZSBwYXRoIHVzZWQgdXAgdW50aWwgaGVyZVxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB0aGF0IHNob3dzIHRoZSByaWdodCBzYXZlIGJ1dHRvbiB0ZXh0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFeHByZXNzaW9uRm9yU2F2ZUJ1dHRvbiA9IGZ1bmN0aW9uIChcblx0b1ZpZXdEYXRhOiBWaWV3RGF0YSxcblx0ZnVsbENvbnRleHRQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPEVudGl0eVNldD5cbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0Y29uc3Qgc2F2ZUJ1dHRvblRleHQgPSBvVmlld0RhdGEucmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9PUF9PQkpFQ1RfUEFHRV9TQVZFXCIpO1xuXHRjb25zdCBjcmVhdGVCdXR0b25UZXh0ID0gb1ZpZXdEYXRhLnJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfT1BfT0JKRUNUX1BBR0VfQ1JFQVRFXCIpO1xuXHRsZXQgc2F2ZUV4cHJlc3Npb247XG5cblx0aWYgKChmdWxsQ29udGV4dFBhdGguc3RhcnRpbmdFbnRpdHlTZXQgYXMgRW50aXR5U2V0KS5hbm5vdGF0aW9ucy5TZXNzaW9uPy5TdGlja3lTZXNzaW9uU3VwcG9ydGVkKSB7XG5cdFx0Ly8gSWYgd2UncmUgaW4gc3RpY2t5IG1vZGUgQU5EIHRoZSB1aSBpcyBpbiBjcmVhdGUgbW9kZSwgc2hvdyBDcmVhdGUsIGVsc2Ugc2hvdyBTYXZlXG5cdFx0c2F2ZUV4cHJlc3Npb24gPSBpZkVsc2UoVUkuSXNDcmVhdGVNb2RlLCBjcmVhdGVCdXR0b25UZXh0LCBzYXZlQnV0dG9uVGV4dCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gSWYgd2UncmUgaW4gZHJhZnQgQU5EIHRoZSBkcmFmdCBpcyBhIG5ldyBvYmplY3QgKCFJc0FjdGl2ZUVudGl0eSAmJiAhSGFzQWN0aXZlRW50aXR5KSwgc2hvdyBjcmVhdGUsIGVsc2Ugc2hvdyBzYXZlXG5cdFx0c2F2ZUV4cHJlc3Npb24gPSBpZkVsc2UoRHJhZnQuSXNOZXdPYmplY3QsIGNyZWF0ZUJ1dHRvblRleHQsIHNhdmVCdXR0b25UZXh0KTtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oc2F2ZUV4cHJlc3Npb24pO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIGV4cHJlc3Npb24gb2YgdGhlIGxhYmVsIGZvciBhIGZpZWxkIGludG8gYSBoZWFkZXIgZm9ybS5cbiAqIEBwYXJhbSBsYWJlbCBUaGUgbGFiZWwgb2YgdGhlIGhlYWRlciBmb3JtIGluIGFuIG9iamVjdCBwYWdlLlxuICogQHBhcmFtIHZpZXdEYXRhIFRoZSBjdXJyZW50IHZpZXcgZGF0YS5cbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSB0cmFuc2xhdGVkIGxhYmVsIG9mIHRoZSBvZiB0aGUgaGVhZGVyIGZvcm0gaW4gYW4gb2JqZWN0IHBhZ2UuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFeHByZXNzaW9uRm9yTGFiZWxPbkhlYWRlckZvcm0gPSBmdW5jdGlvbiAobGFiZWw6IFN0cmluZywgdmlld0RhdGE6IFZpZXdEYXRhKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRyZXR1cm4gdmlld0RhdGEucmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiSEVBREVSX0ZPUk1fTEFCRUxcIiwgW2xhYmVsXSk7XG59O1xuXG4vKipcbiAqIE1ldGhvZCByZXR1cm5zIFdoZXRoZXIgdGhlIGFjdGlvbiB0eXBlIGlzIG1hbmlmZXN0IG9yIG5vdC5cbiAqIEBwYXJhbSBhY3Rpb24gVGhlIGFjdGlvbiBvYmplY3RcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBhY3Rpb24gaXMgY29taW5nIGZyb20gbWFuaWZlc3QsIGBmYWxzZWAgb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBjb25zdCBpc01hbmlmZXN0QWN0aW9uID0gZnVuY3Rpb24gKGFjdGlvbjogQmFzZUFjdGlvbiB8IEN1c3RvbUFjdGlvbik6IGFjdGlvbiBpcyBDdXN0b21BY3Rpb24ge1xuXHRjb25zdCBub25NYW5pZmVzdEFjdGlvbnMgPSBbXG5cdFx0XCJQcmltYXJ5XCIsXG5cdFx0XCJEZWZhdWx0QXBwbHlcIixcblx0XHRcIlNlY29uZGFyeVwiLFxuXHRcdFwiRm9yQWN0aW9uXCIsXG5cdFx0XCJGb3JOYXZpZ2F0aW9uXCIsXG5cdFx0XCJTd2l0Y2hUb0FjdGl2ZU9iamVjdFwiLFxuXHRcdFwiU3dpdGNoVG9EcmFmdE9iamVjdFwiLFxuXHRcdFwiRHJhZnRBY3Rpb25zXCIsXG5cdFx0XCJDb3B5XCIsXG5cdFx0XCJTdGFuZGFyZFwiXG5cdF07XG5cdHJldHVybiAhbm9uTWFuaWZlc3RBY3Rpb25zLmluY2x1ZGVzKGFjdGlvbi50eXBlID8/IFwiXCIpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgY29tcGlsZWQgZXhwcmVzc2lvbiB0byBkZXRlcm1pbmUgRW1waGFzaXplZCAgYnV0dG9uIHR5cGUgYmFzZWQgb24gQ3JpdGljYWxpdHkgYWNyb3NzIGFsbCBhY3Rpb25zXG4gKiBJZiBjcml0aWNhbCBhY3Rpb24gaXMgcmVuZGVyZWQsIGl0cyBjb25zaWRlcmVkIHRvIGJlIHRoZSBwcmltYXJ5IGFjdGlvbi4gSGVuY2UgdGVtcGxhdGUncyBkZWZhdWx0IHByaW1hcnkgYWN0aW9uIGlzIHNldCBiYWNrIHRvIERlZmF1bHQuXG4gKiBAcGFyYW0gZGF0YUNvbnRleHRQYXRoIFRoZSBkYXRhTW9kZWxPYmplY3RQYXRoIHJlbGF0ZWQgdG8gdGhlIGNvbnRleHRcbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gdG8gZGVkdWNlIGlmIGJ1dHRvbiB0eXBlIGlzIERlZmF1bHQgb3IgRW1waGFzaXplZFxuICovXG5leHBvcnQgY29uc3QgYnVpbGRFbXBoYXNpemVkQnV0dG9uRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChcblx0ZGF0YUNvbnRleHRQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPEVudGl0eVNldCB8IE5hdmlnYXRpb25Qcm9wZXJ0eSB8IFNpbmdsZXRvbj5cbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0Y29uc3QgaWRlbnRpZmljYXRpb24gPSBkYXRhQ29udGV4dFBhdGgudGFyZ2V0RW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LlVJPy5JZGVudGlmaWNhdGlvbjtcblx0Y29uc3QgZGF0YUZpZWxkc1dpdGhDcml0aWNhbGl0eSA9XG5cdFx0aWRlbnRpZmljYXRpb24/LmZpbHRlcigoZGF0YUZpZWxkKSA9PiBkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbiAmJiBkYXRhRmllbGQuQ3JpdGljYWxpdHkpIHx8IFtdO1xuXG5cdGNvbnN0IGRhdGFGaWVsZHNCaW5kaW5nRXhwcmVzc2lvbnMgPSBkYXRhRmllbGRzV2l0aENyaXRpY2FsaXR5Lmxlbmd0aFxuXHRcdD8gZGF0YUZpZWxkc1dpdGhDcml0aWNhbGl0eS5tYXAoKGRhdGFGaWVsZCkgPT4ge1xuXHRcdFx0XHRjb25zdCBjcml0aWNhbGl0eVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbiA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhRmllbGQuQ3JpdGljYWxpdHkpO1xuXHRcdFx0XHRyZXR1cm4gYW5kKFxuXHRcdFx0XHRcdG5vdChlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpLFxuXHRcdFx0XHRcdG9yKFxuXHRcdFx0XHRcdFx0ZXF1YWwoY3JpdGljYWxpdHlWaXNpYmxlQmluZGluZ0V4cHJlc3Npb24sIFwiVUkuQ3JpdGljYWxpdHlUeXBlL05lZ2F0aXZlXCIpLFxuXHRcdFx0XHRcdFx0ZXF1YWwoY3JpdGljYWxpdHlWaXNpYmxlQmluZGluZ0V4cHJlc3Npb24sIFwiMVwiKSxcblx0XHRcdFx0XHRcdGVxdWFsKGNyaXRpY2FsaXR5VmlzaWJsZUJpbmRpbmdFeHByZXNzaW9uIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxudW1iZXI+LCAxKSxcblx0XHRcdFx0XHRcdGVxdWFsKGNyaXRpY2FsaXR5VmlzaWJsZUJpbmRpbmdFeHByZXNzaW9uLCBcIlVJLkNyaXRpY2FsaXR5VHlwZS9Qb3NpdGl2ZVwiKSxcblx0XHRcdFx0XHRcdGVxdWFsKGNyaXRpY2FsaXR5VmlzaWJsZUJpbmRpbmdFeHByZXNzaW9uLCBcIjNcIiksXG5cdFx0XHRcdFx0XHRlcXVhbChjcml0aWNhbGl0eVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbiBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248bnVtYmVyPiwgMylcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCk7XG5cdFx0ICB9KVxuXHRcdDogKFtjb25zdGFudChmYWxzZSldIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdKTtcblxuXHQvLyBJZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgdmlzaWJsZSBkYXRhRmllbGQgd2l0aCBjcml0aWNhbGl0eSBuZWdhdGl2ZSBvciBwb3NpdGl2ZSwgdGhlIHR5cGUgaXMgc2V0IGFzIEdob3N0XG5cdC8vIGVsc2UgaXQgaXMgZW1waGFzaXplZFxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oaWZFbHNlKG9yKC4uLmRhdGFGaWVsZHNCaW5kaW5nRXhwcmVzc2lvbnMpLCBCdXR0b25UeXBlLkdob3N0LCBCdXR0b25UeXBlLkVtcGhhc2l6ZWQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRFbGVtZW50QmluZGluZyA9IGZ1bmN0aW9uIChzUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3Qgc05hdmlnYXRpb25QYXRoID0gT0RhdGFNb2RlbEFubm90YXRpb25IZWxwZXIuZ2V0TmF2aWdhdGlvblBhdGgoc1BhdGgpO1xuXHRpZiAoc05hdmlnYXRpb25QYXRoKSB7XG5cdFx0cmV0dXJuIFwie3BhdGg6J1wiICsgc05hdmlnYXRpb25QYXRoICsgXCInfVwiO1xuXHR9IGVsc2Uge1xuXHRcdC8vbm8gbmF2aWdhdGlvbiBwcm9wZXJ0eSBuZWVkcyBlbXB0eSBvYmplY3Rcblx0XHRyZXR1cm4gXCJ7cGF0aDogJyd9XCI7XG5cdH1cbn07XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gY2hlY2sgaWYgZHJhZnQgcGF0dGVybiBpcyBzdXBwb3J0ZWQuXG4gKiBAcGFyYW0gZW50aXR5U2V0IFRoZSBjdXJyZW50IGVudGl0eSBzZXQuXG4gKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBCb29sZWFuIHZhbHVlIGJhc2VkIG9uIGRyYWZ0IHN0YXRlXG4gKi9cbmV4cG9ydCBjb25zdCBjaGVja0RyYWZ0U3RhdGUgPSBmdW5jdGlvbiAoZW50aXR5U2V0OiBFbnRpdHlTZXQpOiBib29sZWFuIHtcblx0aWYgKGVudGl0eVNldC5hbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdFJvb3Q/LkVkaXRBY3Rpb24pIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIGVudGl0eVNldCBpcyBhIGRyYWZ0IHJvb3QgdGhhdCBzdXBwb3J0cyBjb2xsYWJvcmF0aW9uLlxuICogQHBhcmFtIGVudGl0eVNldCBUaGUgY3VycmVudCBlbnRpdHkgc2V0LlxuICogQHJldHVybnMgUmV0dXJucyB0aGUgQm9vbGVhbiB2YWx1ZSBiYXNlZCBvbiBkcmFmdCBzdGF0ZVxuICovXG5leHBvcnQgY29uc3QgY2hlY2tDb2xsYWJvcmF0aW9uRHJhZnRSb290ID0gZnVuY3Rpb24gKGVudGl0eVNldDogRW50aXR5U2V0KTogYm9vbGVhbiB7XG5cdGlmIChlbnRpdHlTZXQuYW5ub3RhdGlvbnM/LkNvbW1vbj8uRHJhZnRSb290Py5TaGFyZUFjdGlvbikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcblxuLyoqXG4gKiBGdW5jdGlvbiB0byBnZXQgdGhlIHZpc2liaWxpdHkgZm9yIHRoZSBTd2l0Y2hUb0FjdGl2ZSBidXR0b24gaW4gdGhlIG9iamVjdCBwYWdlIG9yIHN1Ym9iamVjdCBwYWdlLlxuICogQHBhcmFtIGVudGl0eVNldCBUaGUgY3VycmVudCBlbnRpdHkgc2V0LlxuICogQHJldHVybnMgUmV0dXJucyBleHByZXNzaW9uIGJpbmRpbmcgb3IgQm9vbGVhbiB2YWx1ZSBiYXNlZCBvbiB0aGUgZHJhZnQgc3RhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFN3aXRjaFRvQWN0aXZlVmlzaWJpbGl0eSA9IGZ1bmN0aW9uIChlbnRpdHlTZXQ6IEVudGl0eVNldCk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgYm9vbGVhbiB7XG5cdGlmIChjaGVja0RyYWZ0U3RhdGUoZW50aXR5U2V0KSkge1xuXHRcdGlmIChjaGVja0NvbGxhYm9yYXRpb25EcmFmdFJvb3QoZW50aXR5U2V0KSkge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGFuZChwYXRoSW5Nb2RlbChcIkhhc0FjdGl2ZUVudGl0eVwiKSwgVUkuSXNFZGl0YWJsZSkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdGFuZChlcXVhbChwYXRoSW5Nb2RlbChcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0RyYWZ0SXNDcmVhdGVkQnlNZVwiKSwgdHJ1ZSksIFVJLklzRWRpdGFibGUsIG5vdChVSS5Jc0NyZWF0ZU1vZGUpKVxuXHRcdFx0KTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGdldCB0aGUgdmlzaWJpbGl0eSBmb3IgdGhlIFN3aXRjaFRvRHJhZnQgYnV0dG9uIGluIHRoZSBvYmplY3QgcGFnZSBvciBzdWJvYmplY3QgcGFnZS5cbiAqIEBwYXJhbSBlbnRpdHlTZXQgVGhlIGN1cnJlbnQgZW50aXR5IHNldC5cbiAqIEByZXR1cm5zIFJldHVybnMgZXhwcmVzc2lvbiBiaW5kaW5nIG9yIEJvb2xlYW4gdmFsdWUgYmFzZWQgb24gdGhlIGRyYWZ0IHN0YXRlXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTd2l0Y2hUb0RyYWZ0VmlzaWJpbGl0eSA9IGZ1bmN0aW9uIChlbnRpdHlTZXQ6IEVudGl0eVNldCk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgYm9vbGVhbiB7XG5cdGlmIChjaGVja0RyYWZ0U3RhdGUoZW50aXR5U2V0KSkge1xuXHRcdGlmIChjaGVja0NvbGxhYm9yYXRpb25EcmFmdFJvb3QoZW50aXR5U2V0KSkge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGFuZChwYXRoSW5Nb2RlbChcIkhhc0RyYWZ0RW50aXR5XCIpLCBub3QoVUkuSXNFZGl0YWJsZSkpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRhbmQoXG5cdFx0XHRcdFx0ZXF1YWwocGF0aEluTW9kZWwoXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9EcmFmdElzQ3JlYXRlZEJ5TWVcIiksIHRydWUpLFxuXHRcdFx0XHRcdG5vdChVSS5Jc0VkaXRhYmxlKSxcblx0XHRcdFx0XHRub3QoVUkuSXNDcmVhdGVNb2RlKSxcblx0XHRcdFx0XHRwYXRoSW5Nb2RlbChcIkhhc0RyYWZ0RW50aXR5XCIpXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcblxuLyoqXG4gKiBGdW5jdGlvbiB0byBnZXQgdGhlIHZpc2liaWxpdHkgZm9yIHRoZSBTd2l0Y2hEcmFmdEFuZEFjdGl2ZSBidXR0b24gaW4gdGhlIG9iamVjdCBwYWdlIG9yIHN1Ym9iamVjdCBwYWdlLlxuICogQHBhcmFtIGVudGl0eVNldCBUaGUgY3VycmVudCBlbnRpdHkgc2V0LlxuICogQHJldHVybnMgUmV0dXJucyBleHByZXNzaW9uIGJpbmRpbmcgb3IgQm9vbGVhbiB2YWx1ZSBiYXNlZCBvbiB0aGUgZHJhZnQgc3RhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFN3aXRjaERyYWZ0QW5kQWN0aXZlVmlzaWJpbGl0eSA9IGZ1bmN0aW9uIChlbnRpdHlTZXQ6IEVudGl0eVNldCk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgYm9vbGVhbiB7XG5cdGlmIChjaGVja0RyYWZ0U3RhdGUoZW50aXR5U2V0KSkge1xuXHRcdGlmIChjaGVja0NvbGxhYm9yYXRpb25EcmFmdFJvb3QoZW50aXR5U2V0KSkge1xuXHRcdFx0Ly8gc29tZWhvdyBjaGVja2luZyBoYXNEcmFmdEVudGl0eSBhbmQgaGFzQWN0aXZlRW50aXR5IGRvZXMgbm90IHdvcmssIHNvIHdlIGNoZWNrIElzQWN0aXZlRW50aXR5IGZpcnN0XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oaWZFbHNlKHBhdGhJbk1vZGVsKFwiSXNBY3RpdmVFbnRpdHlcIiksIHBhdGhJbk1vZGVsKFwiSGFzRHJhZnRFbnRpdHlcIiksIHBhdGhJbk1vZGVsKFwiSGFzQWN0aXZlRW50aXR5XCIpKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihhbmQoZXF1YWwocGF0aEluTW9kZWwoXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9EcmFmdElzQ3JlYXRlZEJ5TWVcIiksIHRydWUpLCBub3QoVUkuSXNDcmVhdGVNb2RlKSkpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gZmluZCBhbiBhY3Rpb24gZnJvbSB0aGUgYXJyYXkgb2YgaGVhZGVyIGFjdGlvbnMgaW4gdGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHBhcmFtIGFDb252ZXJ0ZXJDb250ZXh0SGVhZGVyQWN0aW9ucyBBcnJheSBvZiAnaGVhZGVyJyBhY3Rpb25zIG9uIHRoZSBvYmplY3QgcGFnZS5cbiAqIEBwYXJhbSBzQWN0aW9uVHlwZSBUaGUgYWN0aW9uIHR5cGVcbiAqIEByZXR1cm5zIFRoZSBhY3Rpb24gd2l0aCB0aGUgbWF0Y2hpbmcgYWN0aW9uIHR5cGVcbiAqL1xuZXhwb3J0IGNvbnN0IF9maW5kQWN0aW9uID0gZnVuY3Rpb24gKGFDb252ZXJ0ZXJDb250ZXh0SGVhZGVyQWN0aW9uczogQmFzZUFjdGlvbltdLCBzQWN0aW9uVHlwZTogc3RyaW5nKTogQmFzZUFjdGlvbiB8IHVuZGVmaW5lZCB7XG5cdGxldCBvQWN0aW9uOiBCYXNlQWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRpZiAoYUNvbnZlcnRlckNvbnRleHRIZWFkZXJBY3Rpb25zICYmIGFDb252ZXJ0ZXJDb250ZXh0SGVhZGVyQWN0aW9ucy5sZW5ndGgpIHtcblx0XHRvQWN0aW9uID0gYUNvbnZlcnRlckNvbnRleHRIZWFkZXJBY3Rpb25zLmZpbmQoZnVuY3Rpb24gKG9IZWFkZXJBY3Rpb246IEJhc2VBY3Rpb24pIHtcblx0XHRcdHJldHVybiBvSGVhZGVyQWN0aW9uLnR5cGUgPT09IHNBY3Rpb25UeXBlO1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBvQWN0aW9uO1xufTtcblxuLyoqXG4gKiBGdW5jdGlvbiB0byBmb3JtYXQgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBmb3IgdGhlIERlbGV0ZSBidXR0b24gb24gdGhlIG9iamVjdCBwYWdlIG9yIHN1Ym9iamVjdCBwYWdlIGluIGNhc2Ugb2YgYSBDb21tYW5kIEV4ZWN1dGlvbi5cbiAqIEBwYXJhbSBhQ29udmVydGVyQ29udGV4dEhlYWRlckFjdGlvbnMgQXJyYXkgb2YgaGVhZGVyIGFjdGlvbnMgb24gdGhlIG9iamVjdCBwYWdlXG4gKiBAcmV0dXJucyBSZXR1cm5zIGV4cHJlc3Npb24gYmluZGluZyBvciBCb29sZWFuIHZhbHVlIGZyb20gdGhlIGNvbnZlcnRlciBvdXRwdXRcbiAqL1xuZXhwb3J0IGNvbnN0IGdldERlbGV0ZUNvbW1hbmRFeGVjdXRpb25FbmFibGVkID0gZnVuY3Rpb24gKGFDb252ZXJ0ZXJDb250ZXh0SGVhZGVyQWN0aW9uczogQmFzZUFjdGlvbltdKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgb0RlbGV0ZUFjdGlvbiA9IF9maW5kQWN0aW9uKGFDb252ZXJ0ZXJDb250ZXh0SGVhZGVyQWN0aW9ucywgXCJTZWNvbmRhcnlcIik7XG5cdHJldHVybiBvRGVsZXRlQWN0aW9uID8gb0RlbGV0ZUFjdGlvbi5lbmFibGVkIDogXCJmYWxzZVwiO1xufTtcblxuLyoqXG4gKiBGdW5jdGlvbiB0byBmb3JtYXQgdGhlICd2aXNpYmxlJyBwcm9wZXJ0eSBmb3IgdGhlIERlbGV0ZSBidXR0b24gb24gdGhlIG9iamVjdCBwYWdlIG9yIHN1Ym9iamVjdCBwYWdlIGluIGNhc2Ugb2YgYSBDb21tYW5kIEV4ZWN1dGlvbi5cbiAqIEBwYXJhbSBhQ29udmVydGVyQ29udGV4dEhlYWRlckFjdGlvbnMgQXJyYXkgb2YgaGVhZGVyIGFjdGlvbnMgb24gdGhlIG9iamVjdCBwYWdlXG4gKiBAcmV0dXJucyBSZXR1cm5zIGV4cHJlc3Npb24gYmluZGluZyBvciBCb29sZWFuIHZhbHVlIGZyb20gdGhlIGNvbnZlcnRlciBvdXRwdXRcbiAqL1xuZXhwb3J0IGNvbnN0IGdldERlbGV0ZUNvbW1hbmRFeGVjdXRpb25WaXNpYmxlID0gZnVuY3Rpb24gKGFDb252ZXJ0ZXJDb250ZXh0SGVhZGVyQWN0aW9uczogQmFzZUFjdGlvbltdKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgb0RlbGV0ZUFjdGlvbiA9IF9maW5kQWN0aW9uKGFDb252ZXJ0ZXJDb250ZXh0SGVhZGVyQWN0aW9ucywgXCJTZWNvbmRhcnlcIik7XG5cdHJldHVybiBvRGVsZXRlQWN0aW9uID8gb0RlbGV0ZUFjdGlvbi52aXNpYmxlIDogXCJmYWxzZVwiO1xufTtcblxuLyoqXG4gKiBGdW5jdGlvbiB0byBmb3JtYXQgdGhlICd2aXNpYmxlJyBwcm9wZXJ0eSBmb3IgdGhlIEVkaXQgYnV0dG9uIG9uIHRoZSBvYmplY3QgcGFnZSBvciBzdWJvYmplY3QgcGFnZSBpbiBjYXNlIG9mIGEgQ29tbWFuZCBFeGVjdXRpb24uXG4gKiBAcGFyYW0gYUNvbnZlcnRlckNvbnRleHRIZWFkZXJBY3Rpb25zIEFycmF5IG9mIGhlYWRlciBhY3Rpb25zIG9uIHRoZSBvYmplY3QgcGFnZVxuICogQHJldHVybnMgUmV0dXJucyBleHByZXNzaW9uIGJpbmRpbmcgb3IgQm9vbGVhbiB2YWx1ZSBmcm9tIHRoZSBjb252ZXJ0ZXIgb3V0cHV0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFZGl0Q29tbWFuZEV4ZWN1dGlvblZpc2libGUgPSBmdW5jdGlvbiAoYUNvbnZlcnRlckNvbnRleHRIZWFkZXJBY3Rpb25zOiBCYXNlQWN0aW9uW10pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBvRWRpdEFjdGlvbiA9IF9maW5kQWN0aW9uKGFDb252ZXJ0ZXJDb250ZXh0SGVhZGVyQWN0aW9ucywgXCJQcmltYXJ5XCIpO1xuXHRyZXR1cm4gb0VkaXRBY3Rpb24gPyBvRWRpdEFjdGlvbi52aXNpYmxlIDogXCJmYWxzZVwiO1xufTtcblxuLyoqXG4gKiBGdW5jdGlvbiB0byBmb3JtYXQgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBmb3IgdGhlIEVkaXQgYnV0dG9uIG9uIHRoZSBvYmplY3QgcGFnZSBvciBzdWJvYmplY3QgcGFnZSBpbiBjYXNlIG9mIGEgQ29tbWFuZCBFeGVjdXRpb24uXG4gKiBAcGFyYW0gYUNvbnZlcnRlckNvbnRleHRIZWFkZXJBY3Rpb25zIEFycmF5IG9mIGhlYWRlciBhY3Rpb25zIG9uIHRoZSBvYmplY3QgcGFnZVxuICogQHJldHVybnMgUmV0dXJucyBleHByZXNzaW9uIGJpbmRpbmcgb3IgQm9vbGVhbiB2YWx1ZSBmcm9tIHRoZSBjb252ZXJ0ZXIgb3V0cHV0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFZGl0Q29tbWFuZEV4ZWN1dGlvbkVuYWJsZWQgPSBmdW5jdGlvbiAoYUNvbnZlcnRlckNvbnRleHRIZWFkZXJBY3Rpb25zOiBCYXNlQWN0aW9uW10pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBvRWRpdEFjdGlvbiA9IF9maW5kQWN0aW9uKGFDb252ZXJ0ZXJDb250ZXh0SGVhZGVyQWN0aW9ucywgXCJQcmltYXJ5XCIpO1xuXHRyZXR1cm4gb0VkaXRBY3Rpb24gPyBvRWRpdEFjdGlvbi5lbmFibGVkIDogXCJmYWxzZVwiO1xufTtcblxuLyoqXG4gKiBGdW5jdGlvbiB0byBnZXQgdGhlIEVkaXRBY3Rpb24gZnJvbSB0aGUgYmFzZWQgb24gYSBkcmFmdC1lbmFibGVkIGFwcGxpY2F0aW9uIG9yIGEgc3RpY2t5IGFwcGxpY2F0aW9uLlxuICogQHBhcmFtIFtvRW50aXR5U2V0XSBUaGUgdmFsdWUgZnJvbSB0aGUgZXhwcmVzc2lvbi5cbiAqIEByZXR1cm5zIFJldHVybnMgZXhwcmVzc2lvbiBiaW5kaW5nIG9yIEJvb2xlYW4gdmFsdWUgYmFzZWQgb24gdlJhd1ZhbHVlICYgb0RyYWZ0Tm9kZVxuICovXG5leHBvcnQgY29uc3QgZ2V0RWRpdEFjdGlvbiA9IGZ1bmN0aW9uIChvRW50aXR5U2V0OiBDb250ZXh0KTogc3RyaW5nIHtcblx0Y29uc3Qgc1BhdGggPSBvRW50aXR5U2V0LmdldFBhdGgoKTtcblx0Y29uc3QgYVBhdGhzID0gc1BhdGguc3BsaXQoXCIvXCIpO1xuXHRjb25zdCByb290RW50aXR5U2V0UGF0aCA9IFwiL1wiICsgYVBhdGhzWzFdO1xuXHQvLyBnZXQgdGhlIGVkaXQgYWN0aW9uIGZyb20gcm9vdCBlbnRpdHkgc2V0c1xuXHRjb25zdCByb290RW50aXR5U2V0QW5ubm90YXRpb25zID0gb0VudGl0eVNldC5nZXRPYmplY3Qocm9vdEVudGl0eVNldFBhdGggKyBcIkBcIik7XG5cdGNvbnN0IGJEcmFmdFJvb3QgPSByb290RW50aXR5U2V0QW5ubm90YXRpb25zLmhhc093blByb3BlcnR5KFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3RcIik7XG5cdGNvbnN0IGJEcmFmdE5vZGUgPSByb290RW50aXR5U2V0QW5ubm90YXRpb25zLmhhc093blByb3BlcnR5KFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdE5vZGVcIik7XG5cdGNvbnN0IGJTdGlja3lTZXNzaW9uID0gcm9vdEVudGl0eVNldEFubm5vdGF0aW9ucy5oYXNPd25Qcm9wZXJ0eShcIkBjb20uc2FwLnZvY2FidWxhcmllcy5TZXNzaW9uLnYxLlN0aWNreVNlc3Npb25TdXBwb3J0ZWRcIik7XG5cdGxldCBzQWN0aW9uTmFtZTtcblx0aWYgKGJEcmFmdFJvb3QpIHtcblx0XHRzQWN0aW9uTmFtZSA9IG9FbnRpdHlTZXQuZ2V0T2JqZWN0KGAke3Jvb3RFbnRpdHlTZXRQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290L0VkaXRBY3Rpb25gKTtcblx0fSBlbHNlIGlmIChiRHJhZnROb2RlKSB7XG5cdFx0c0FjdGlvbk5hbWUgPSBvRW50aXR5U2V0LmdldE9iamVjdChgJHtyb290RW50aXR5U2V0UGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Tm9kZS9FZGl0QWN0aW9uYCk7XG5cdH0gZWxzZSBpZiAoYlN0aWNreVNlc3Npb24pIHtcblx0XHRzQWN0aW9uTmFtZSA9IG9FbnRpdHlTZXQuZ2V0T2JqZWN0KGAke3Jvb3RFbnRpdHlTZXRQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5TZXNzaW9uLnYxLlN0aWNreVNlc3Npb25TdXBwb3J0ZWQvRWRpdEFjdGlvbmApO1xuXHR9XG5cdHJldHVybiAhc0FjdGlvbk5hbWUgPyBzQWN0aW9uTmFtZSA6IGAke3Jvb3RFbnRpdHlTZXRQYXRofS8ke3NBY3Rpb25OYW1lfWA7XG59O1xuXG5leHBvcnQgY29uc3QgaXNSZWFkT25seUZyb21TdGF0aWNBbm5vdGF0aW9ucyA9IGZ1bmN0aW9uIChvQW5ub3RhdGlvbnM/OiBNZXRhTW9kZWxQcm9wZXJ0eUFubm90YXRpb25zLCBvRmllbGRDb250cm9sPzogc3RyaW5nKTogYm9vbGVhbiB7XG5cdGxldCBiQ29tcHV0ZWQsIGJJbW11dGFibGUsIGJSZWFkT25seTtcblxuXHRpZiAob0Fubm90YXRpb25zICYmIG9Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ29yZS5WMS5Db21wdXRlZFwiXSkge1xuXHRcdGJDb21wdXRlZCA9IChvQW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkNvcmUuVjEuQ29tcHV0ZWRcIl0gYXMgeyBCb29sPzogc3RyaW5nIH0pLkJvb2xcblx0XHRcdD8gKG9Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ29yZS5WMS5Db21wdXRlZFwiXSBhcyB7IEJvb2w/OiBzdHJpbmcgfSkuQm9vbCA9PSBcInRydWVcIlxuXHRcdFx0OiB0cnVlO1xuXHR9XG5cdGlmIChvQW5ub3RhdGlvbnMgJiYgb0Fubm90YXRpb25zW1wiQE9yZy5PRGF0YS5Db3JlLlYxLkltbXV0YWJsZVwiXSkge1xuXHRcdGJJbW11dGFibGUgPSAob0Fubm90YXRpb25zW1wiQE9yZy5PRGF0YS5Db3JlLlYxLkltbXV0YWJsZVwiXSBhcyB7IEJvb2w/OiBzdHJpbmcgfSkuQm9vbFxuXHRcdFx0PyAob0Fubm90YXRpb25zW1wiQE9yZy5PRGF0YS5Db3JlLlYxLkltbXV0YWJsZVwiXSBhcyB7IEJvb2w/OiBzdHJpbmcgfSkuQm9vbCA9PSBcInRydWVcIlxuXHRcdFx0OiB0cnVlO1xuXHR9XG5cdGJSZWFkT25seSA9IGJDb21wdXRlZCB8fCBiSW1tdXRhYmxlO1xuXG5cdGlmIChvRmllbGRDb250cm9sKSB7XG5cdFx0YlJlYWRPbmx5ID0gYlJlYWRPbmx5IHx8IG9GaWVsZENvbnRyb2wgPT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sVHlwZS9SZWFkT25seVwiO1xuXHR9XG5cdGlmIChiUmVhZE9ubHkpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG5cbmV4cG9ydCBjb25zdCByZWFkT25seUV4cHJlc3Npb25Gcm9tRHluYW1pY0Fubm90YXRpb25zID0gZnVuY3Rpb24gKG9GaWVsZENvbnRyb2w/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRsZXQgc0lzRmllbGRDb250cm9sUGF0aFJlYWRPbmx5O1xuXHRpZiAob0ZpZWxkQ29udHJvbCkge1xuXHRcdGlmIChCaW5kaW5nSW5mby5wYXJzZShvRmllbGRDb250cm9sKSkge1xuXHRcdFx0c0lzRmllbGRDb250cm9sUGF0aFJlYWRPbmx5ID0gXCIlXCIgKyBvRmllbGRDb250cm9sICsgXCIgPT09IDEgXCI7XG5cdFx0fVxuXHR9XG5cdGlmIChzSXNGaWVsZENvbnRyb2xQYXRoUmVhZE9ubHkpIHtcblx0XHRyZXR1cm4gXCJ7PSBcIiArIHNJc0ZpZWxkQ29udHJvbFBhdGhSZWFkT25seSArIFwiPyBmYWxzZSA6IHRydWUgfVwiO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cbn07XG5cbi8qXG4gKiBGdW5jdGlvbiB0byBnZXQgdGhlIGV4cHJlc3Npb24gZm9yIGNoYXJ0IFRpdGxlIFByZXNzXG4gKlxuICogQGZ1bmN0aW9ud1xuICogQHBhcmFtIHtvQ29uZmlndXJhdGlvbn0gW29Db25maWd1cmF0aW9uc10gY29udHJvbCBjb25maWd1cmF0aW9uIGZyb20gbWFuaWZlc3RcbiAqICBAcGFyYW0ge29NYW5pZmVzdH0gW29NYW5pZmVzdF0gT3V0Ym91bmRzIGZyb20gbWFuaWZlc3RcbiAqIHJldHVybnMge1N0cmluZ30gW3NDb2xsZWN0aW9uTmFtZV0gQ29sbGVjdGlvbiBOYW1lIG9mIHRoZSBNaWNybyBDaGFydFxuICpcbiAqIHJldHVybnMge1N0cmluZ30gW0V4cHJlc3Npb25dIEhhbmRsZXIgRXhwcmVzc2lvbiBmb3IgdGhlIHRpdGxlIHByZXNzXG4gKlxuICovXG5leHBvcnQgY29uc3QgZ2V0RXhwcmVzc2lvbkZvck1pY3JvQ2hhcnRUaXRsZVByZXNzID0gZnVuY3Rpb24gKFxuXHRvQ29uZmlndXJhdGlvbjogQ29udHJvbENvbmZpZ3VyYXRpb24sXG5cdHRhcmdldEFubm90YXRpb25QYXRoOiBzdHJpbmcsXG5cdHRhcmdldEFubm90YXRpb25QYXRoRGF0TW9kZWxPYmplY3Q6IERhdGFNb2RlbE9iamVjdFBhdGg8Q2hhcnQgfCBQcmVzZW50YXRpb25WYXJpYW50Pixcblx0b01hbmlmZXN0T3V0Ym91bmQ6IFJlY29yZDxzdHJpbmcsIE1hbmlmZXN0T3V0Ym91bmRFbnRyeT4sXG5cdHNDb2xsZWN0aW9uTmFtZTogc3RyaW5nXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHR0YXJnZXRBbm5vdGF0aW9uUGF0aCA9IGdldE1pY3JvQ2hhcnRDb250cm9sQ29uZmlndXJhdGlvblBhdGgodGFyZ2V0QW5ub3RhdGlvblBhdGgsIHRhcmdldEFubm90YXRpb25QYXRoRGF0TW9kZWxPYmplY3QsIHNDb2xsZWN0aW9uTmFtZSk7XG5cdGNvbnN0IG5hdmlnYXRpb25Db25maWd1cmF0aW9uID0gKG9Db25maWd1cmF0aW9uPy5bdGFyZ2V0QW5ub3RhdGlvblBhdGhdIGFzIE1pY3JvQ2hhcnRNYW5pZmVzdENvbmZpZ3VyYXRpb24pPy5bXCJuYXZpZ2F0aW9uXCJdO1xuXHRpZiAobmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24pIHtcblx0XHRpZiAoXG5cdFx0XHQobmF2aWdhdGlvbkNvbmZpZ3VyYXRpb25bXCJ0YXJnZXRPdXRib3VuZFwiXSAmJiBuYXZpZ2F0aW9uQ29uZmlndXJhdGlvbltcInRhcmdldE91dGJvdW5kXCJdW1wib3V0Ym91bmRcIl0pIHx8XG5cdFx0XHQobmF2aWdhdGlvbkNvbmZpZ3VyYXRpb25bXCJ0YXJnZXRPdXRib3VuZFwiXSAmJlxuXHRcdFx0XHRuYXZpZ2F0aW9uQ29uZmlndXJhdGlvbltcInRhcmdldE91dGJvdW5kXCJdW1wib3V0Ym91bmRcIl0gJiZcblx0XHRcdFx0bmF2aWdhdGlvbkNvbmZpZ3VyYXRpb25bXCJ0YXJnZXRTZWN0aW9uc1wiXSlcblx0XHQpIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFwiLmhhbmRsZXJzLm9uRGF0YVBvaW50VGl0bGVQcmVzc2VkKCRjb250cm9sbGVyLCAkeyRzb3VyY2U+L30sJ1wiICtcblx0XHRcdFx0SlNPTi5zdHJpbmdpZnkob01hbmlmZXN0T3V0Ym91bmQpICtcblx0XHRcdFx0XCInLCdcIiArXG5cdFx0XHRcdG5hdmlnYXRpb25Db25maWd1cmF0aW9uW1widGFyZ2V0T3V0Ym91bmRcIl1bXCJvdXRib3VuZFwiXSArXG5cdFx0XHRcdFwiJywnXCIgK1xuXHRcdFx0XHRzQ29sbGVjdGlvbk5hbWUgK1xuXHRcdFx0XHRcIicgKVwiXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSBpZiAobmF2aWdhdGlvbkNvbmZpZ3VyYXRpb25bXCJ0YXJnZXRTZWN0aW9uc1wiXSkge1xuXHRcdFx0cmV0dXJuIFwiLmhhbmRsZXJzLm5hdmlnYXRlVG9TdWJTZWN0aW9uKCRjb250cm9sbGVyLCAnXCIgKyBKU09OLnN0cmluZ2lmeShuYXZpZ2F0aW9uQ29uZmlndXJhdGlvbltcInRhcmdldFNlY3Rpb25zXCJdKSArIFwiJylcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cbn07XG5cbi8qXG4gKiBGdW5jdGlvbiB0byByZW5kZXIgQ2hhcnQgVGl0bGUgYXMgTGlua1xuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtvQ29udHJvbENvbmZpZ3VyYXRpb259IFtvQ29uZmlndXJhdGlvbnNdIGNvbnRyb2wgY29uZmlndXJhdGlvbiBmcm9tIG1hbmlmZXN0XG4gKiByZXR1cm5zIHtTdHJpbmd9IFtzS2V5XSBGb3IgdGhlIFRhcmdldE91dGJvdW5kIGFuZCBUYXJnZXRTZWN0aW9uXG4gKlxuICovXG5leHBvcnQgY29uc3QgZ2V0TWljcm9DaGFydFRpdGxlQXNMaW5rID0gZnVuY3Rpb24gKFxuXHRvQ29udHJvbENvbmZpZ3VyYXRpb246IENvbnRyb2xDb25maWd1cmF0aW9uLFxuXHR0YXJnZXRBbm5vdGF0aW9uUGF0aDogc3RyaW5nLFxuXHR0YXJnZXRBbm5vdGF0aW9uUGF0aERhdE1vZGVsT2JqZWN0OiBEYXRhTW9kZWxPYmplY3RQYXRoPENoYXJ0IHwgUHJlc2VudGF0aW9uVmFyaWFudD4sXG5cdGNvbGxlY3Rpb25OYW1lOiBzdHJpbmdcbik6IHN0cmluZyB7XG5cdHRhcmdldEFubm90YXRpb25QYXRoID0gZ2V0TWljcm9DaGFydENvbnRyb2xDb25maWd1cmF0aW9uUGF0aCh0YXJnZXRBbm5vdGF0aW9uUGF0aCwgdGFyZ2V0QW5ub3RhdGlvblBhdGhEYXRNb2RlbE9iamVjdCwgY29sbGVjdGlvbk5hbWUpO1xuXHRjb25zdCB0YXJnZXRDb250cm9sQ29uZmlndXJhdGlvbiA9IChvQ29udHJvbENvbmZpZ3VyYXRpb24/Llt0YXJnZXRBbm5vdGF0aW9uUGF0aF0gYXMgTWljcm9DaGFydE1hbmlmZXN0Q29uZmlndXJhdGlvbik/LltcIm5hdmlnYXRpb25cIl07XG5cdGlmIChcblx0XHR0YXJnZXRDb250cm9sQ29uZmlndXJhdGlvbiAmJlxuXHRcdCh0YXJnZXRDb250cm9sQ29uZmlndXJhdGlvbltcInRhcmdldE91dGJvdW5kXCJdIHx8XG5cdFx0XHQodGFyZ2V0Q29udHJvbENvbmZpZ3VyYXRpb25bXCJ0YXJnZXRPdXRib3VuZFwiXSAmJiB0YXJnZXRDb250cm9sQ29uZmlndXJhdGlvbltcInRhcmdldFNlY3Rpb25zXCJdKSlcblx0KSB7XG5cdFx0cmV0dXJuIFwiRXh0ZXJuYWxcIjtcblx0fSBlbHNlIGlmICh0YXJnZXRDb250cm9sQ29uZmlndXJhdGlvbiAmJiB0YXJnZXRDb250cm9sQ29uZmlndXJhdGlvbltcInRhcmdldFNlY3Rpb25zXCJdKSB7XG5cdFx0cmV0dXJuIFwiSW5QYWdlXCI7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFwiTm9uZVwiO1xuXHR9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TWljcm9DaGFydENvbnRyb2xDb25maWd1cmF0aW9uUGF0aCA9IGZ1bmN0aW9uIChcblx0dGFyZ2V0QW5ub3RhdGlvblBhdGg6IHN0cmluZyxcblx0dGFyZ2V0QW5ub3RhdGlvblBhdGhEYXRNb2RlbE9iamVjdDogRGF0YU1vZGVsT2JqZWN0UGF0aDxDaGFydCB8IFByZXNlbnRhdGlvblZhcmlhbnQ+LFxuXHRjb2xsZWN0aW9uTmFtZTogc3RyaW5nXG4pOiBzdHJpbmcge1xuXHRpZiAodGFyZ2V0QW5ub3RhdGlvblBhdGhEYXRNb2RlbE9iamVjdD8udGFyZ2V0T2JqZWN0Py4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5QcmVzZW50YXRpb25WYXJpYW50VHlwZVwiKSB7XG5cdFx0dGFyZ2V0QW5ub3RhdGlvblBhdGggPSB0YXJnZXRBbm5vdGF0aW9uUGF0aERhdE1vZGVsT2JqZWN0LnRhcmdldE9iamVjdD8uVmlzdWFsaXphdGlvbnNbMF0/LnZhbHVlO1xuXHRcdHRhcmdldEFubm90YXRpb25QYXRoID0gY29sbGVjdGlvbk5hbWUgPyBgJHtjb2xsZWN0aW9uTmFtZX0vJHt0YXJnZXRBbm5vdGF0aW9uUGF0aH1gIDogdGFyZ2V0QW5ub3RhdGlvblBhdGg7XG5cdH1cblx0cmV0dXJuIHRhcmdldEFubm90YXRpb25QYXRoO1xufTtcblxuLyogR2V0IGdyb3VwSWQgZnJvbSBjb250cm9sIGNvbmZpZ3VyYXRpb25cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb0NvbmZpZ3VyYXRpb25zXSBjb250cm9sIGNvbmZpZ3VyYXRpb24gZnJvbSBtYW5pZmVzdFxuICogQHBhcmFtIHtTdHJpbmd9IFtzQW5ub3RhdGlvblBhdGhdIEFubm90YXRpb24gUGF0aCBmb3IgdGhlIGNvbmZpZ3VyYXRpb25cbiAqIEBkZXNjcmlwdGlvbiBVc2VkIHRvIGdldCB0aGUgZ3JvdXBJZCBmb3IgRGF0YVBvaW50cyBhbmQgTWljcm9DaGFydHMgaW4gdGhlIEhlYWRlci5cbiAqXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRHcm91cElkRnJvbUNvbmZpZyA9IGZ1bmN0aW9uIChcblx0b0NvbmZpZ3VyYXRpb25zOiBDb250cm9sQ29uZmlndXJhdGlvbixcblx0c0Fubm90YXRpb25QYXRoOiBzdHJpbmcsXG5cdHNEZWZhdWx0R3JvdXBJZD86IHN0cmluZ1xuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgb0NvbmZpZ3VyYXRpb24gPSBvQ29uZmlndXJhdGlvbnNbc0Fubm90YXRpb25QYXRoXSBhcyBNaWNyb0NoYXJ0TWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRcdGFBdXRvUGF0dGVybnMgPSBbXCJIZXJvZXNcIiwgXCJEZWNvcmF0aW9uXCIsIFwiV29ya2Vyc1wiLCBcIkxvbmdSdW5uZXJzXCJdO1xuXHRsZXQgc0dyb3VwSWQgPSBzRGVmYXVsdEdyb3VwSWQ7XG5cdGlmIChcblx0XHRvQ29uZmlndXJhdGlvbiAmJlxuXHRcdG9Db25maWd1cmF0aW9uLnJlcXVlc3RHcm91cElkICYmXG5cdFx0YUF1dG9QYXR0ZXJucy5zb21lKGZ1bmN0aW9uIChhdXRvUGF0dGVybjogc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gYXV0b1BhdHRlcm4gPT09IG9Db25maWd1cmF0aW9uLnJlcXVlc3RHcm91cElkO1xuXHRcdH0pXG5cdCkge1xuXHRcdHNHcm91cElkID0gXCIkYXV0by5cIiArIG9Db25maWd1cmF0aW9uLnJlcXVlc3RHcm91cElkO1xuXHR9XG5cdHJldHVybiBzR3JvdXBJZDtcbn07XG5cbi8qKlxuICogR2V0cyBncm91cElkIGZyb20gY29udHJvbCBjb25maWd1cmF0aW9uIGZvciBtaWNybyBjaGFydC5cbiAqIEBwYXJhbSBvQ29udHJvbENvbmZpZ3VyYXRpb24gQ29udHJvbCBjb25maWd1cmF0aW9uIGZyb20gbWFuaWZlc3RcbiAqIEBwYXJhbSB0YXJnZXRBbm5vdGF0aW9uUGF0aCBBbm5vdGF0aW9uIHBhdGggZm9yIHRoZSBjb25maWd1cmF0aW9uXG4gKiBAcGFyYW0gdGFyZ2V0QW5ub3RhdGlvblBhdGhEYXRhTW9kZWxPYmplY3QgRGF0YU1vZGVsT2JqZWN0IG9mIENoYXJ0IG9yIFByZXNlbnRhdGlvblZhcmlhbnRcbiAqIEBwYXJhbSBjb2xsZWN0aW9uTmFtZSBDb2xsZWN0aW9uIE5hbWVcbiAqIEBwYXJhbSBzRGVmYXVsdEdyb3VwSWQgRGVmYXVsdCBHcm91cElkXG4gKiBAcmV0dXJucyBHcm91cElkIGZvciBtaWNybyBjaGFydFxuICovXG5leHBvcnQgY29uc3QgZ2V0R3JvdXBJZEZyb21Db25maWdGb3JNaWNyb0NoYXJ0ID0gZnVuY3Rpb24gKFxuXHRvQ29udHJvbENvbmZpZ3VyYXRpb246IENvbnRyb2xDb25maWd1cmF0aW9uLFxuXHR0YXJnZXRBbm5vdGF0aW9uUGF0aDogc3RyaW5nLFxuXHR0YXJnZXRBbm5vdGF0aW9uUGF0aERhdGFNb2RlbE9iamVjdDogRGF0YU1vZGVsT2JqZWN0UGF0aDxDaGFydCB8IFByZXNlbnRhdGlvblZhcmlhbnQ+LFxuXHRjb2xsZWN0aW9uTmFtZTogc3RyaW5nLFxuXHRzRGVmYXVsdEdyb3VwSWQ/OiBzdHJpbmdcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdHRhcmdldEFubm90YXRpb25QYXRoID0gZ2V0TWljcm9DaGFydENvbnRyb2xDb25maWd1cmF0aW9uUGF0aCh0YXJnZXRBbm5vdGF0aW9uUGF0aCwgdGFyZ2V0QW5ub3RhdGlvblBhdGhEYXRhTW9kZWxPYmplY3QsIGNvbGxlY3Rpb25OYW1lKTtcblx0cmV0dXJuIGdldEdyb3VwSWRGcm9tQ29uZmlnKG9Db250cm9sQ29uZmlndXJhdGlvbiwgdGFyZ2V0QW5ub3RhdGlvblBhdGgsIHNEZWZhdWx0R3JvdXBJZCk7XG59O1xuXG4vKlxuICogR2V0IENvbnRleHQgQmluZGluZyB3aXRoIGdyb3VwSWQgZnJvbSBjb250cm9sIGNvbmZpZ3VyYXRpb25cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb0NvbmZpZ3VyYXRpb25zXSBjb250cm9sIGNvbmZpZ3VyYXRpb24gZnJvbSBtYW5pZmVzdFxuICogQHBhcmFtIHtTdHJpbmd9IFtzS2V5XSBBbm5vdGF0aW9uIFBhdGggZm9yIG9mIHRoZSBjb25maWd1cmF0aW9uXG4gKiBAZGVzY3JpcHRpb24gVXNlZCB0byBnZXQgdGhlIGJpbmRpbmcgZm9yIERhdGFQb2ludHMgaW4gdGhlIEhlYWRlci5cbiAqXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRCaW5kaW5nV2l0aEdyb3VwSWRGcm9tQ29uZmlnID0gZnVuY3Rpb24gKG9Db25maWd1cmF0aW9uczogQ29udHJvbENvbmZpZ3VyYXRpb24sIHNLZXk6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHNHcm91cElkID0gZ2V0R3JvdXBJZEZyb21Db25maWcob0NvbmZpZ3VyYXRpb25zLCBzS2V5KTtcblx0bGV0IHNCaW5kaW5nO1xuXHRpZiAoc0dyb3VwSWQpIHtcblx0XHRzQmluZGluZyA9IFwieyBwYXRoIDogJycsIHBhcmFtZXRlcnMgOiB7ICQkZ3JvdXBJZCA6ICdcIiArIHNHcm91cElkICsgXCInIH0gfVwiO1xuXHR9XG5cdHJldHVybiBzQmluZGluZztcbn07XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBEYXRhTW9kZWxPYmplY3RQYXRoIG9mIHRoZSBuYXZpZ2F0aW9uUGF0aFxuICogQHJldHVybnMgVGhlIEJpbmRpbmcgZXhwcmVzc2lvbiBpbmNsdWRpbmcgcGF0aCBhbmQgJHNlbGVjdCBxdWVyeSBhcyBwYXJhbWV0ZXIgZGVwZW5kaW5nIG9uIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVCaW5kaW5nRm9yQWx0ZXJuYXRlQW5kU2Vjb25kYXJ5S2V5cyA9IGZ1bmN0aW9uIChkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPEZhY2V0Pik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGlmICghZGF0YU1vZGVsT2JqZWN0UGF0aD8ubmF2aWdhdGlvblByb3BlcnRpZXM/Lmxlbmd0aCkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0bGV0IGJpbmRpbmc6IFBhcnRpYWw8UGF0aEluTW9kZWxFeHByZXNzaW9uPHVuZGVmaW5lZD4+IHwgdW5kZWZpbmVkO1xuXHRjb25zdCBhbHRlcm5hdGVBbmRTZWNvbmRhcnlLZXlzID0gTW9kZWxIZWxwZXIuZ2V0QWx0ZXJuYXRlQW5kU2Vjb25kYXJ5S2V5cyhcblx0XHRkYXRhTW9kZWxPYmplY3RQYXRoPy50YXJnZXRFbnRpdHlUeXBlLFxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGg/LnRhcmdldEVudGl0eVNldCBhcyBFbnRpdHlTZXRcblx0KTtcblxuXHRpZiAoYWx0ZXJuYXRlQW5kU2Vjb25kYXJ5S2V5cz8ubGVuZ3RoKSB7XG5cdFx0YmluZGluZyA9IHtcblx0XHRcdHBhdGg6IFwiXCJcblx0XHR9O1xuXHRcdGJpbmRpbmcucGFyYW1ldGVycyA9IHsgJHNlbGVjdDogYWx0ZXJuYXRlQW5kU2Vjb25kYXJ5S2V5cy5qb2luKFwiLFwiKSB8fCBcIlwiIH07XG5cdH1cblx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KGJpbmRpbmcpO1xufTtcblxuLyoqXG4gKiBNZXRob2QgdG8gY2hlY2sgd2hldGhlciBhIEZpZWxkR3JvdXAgY29uc2lzdHMgb2Ygb25seSAxIERhdGFGaWVsZCB3aXRoIE11bHRpTGluZSB0ZXh0IGFubm90YXRpb24uXG4gKiBAcGFyYW0gYUZvcm1FbGVtZW50cyBBIGNvbGxlY3Rpb24gb2YgZm9ybSBlbGVtZW50cyB1c2VkIGluIHRoZSBjdXJyZW50IGZpZWxkIGdyb3VwXG4gKiBAcmV0dXJucyBSZXR1cm5zIHRydWUgaWYgb25seSAxIGRhdGEgZmllbGQgd2l0aCBNdWx0aWxpbmUgdGV4dCBhbm5vdGF0aW9uIGV4aXN0cy5cbiAqL1xuZXhwb3J0IGNvbnN0IGRvZXNGaWVsZEdyb3VwQ29udGFpbk9ubHlPbmVNdWx0aUxpbmVEYXRhRmllbGQgPSBmdW5jdGlvbiAoYUZvcm1FbGVtZW50czogQW5ub3RhdGlvbkZvcm1FbGVtZW50W10pOiBib29sZWFuIHtcblx0cmV0dXJuIGFGb3JtRWxlbWVudHMgJiYgYUZvcm1FbGVtZW50cy5sZW5ndGggPT09IDEgJiYgISFhRm9ybUVsZW1lbnRzWzBdLmlzVmFsdWVNdWx0aWxpbmVUZXh0O1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHZpZXdEYXRhIFNwZWNpZmllcyB0aGUgVmlld0RhdGEgbW9kZWxcbiAqIEByZXR1cm5zIEV4cHJlc3Npb24gb3IgQm9vbGVhbiB2YWx1ZVxuICovXG5leHBvcnQgY29uc3QgZ2V0U2hhcmVCdXR0b25WaXNpYmlsaXR5ID0gZnVuY3Rpb24gKHZpZXdEYXRhOiBWaWV3RGF0YSk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0aWYgKHZpZXdEYXRhLmlzU2hhcmVCdXR0b25WaXNpYmxlRm9yTXlJbmJveCA9PT0gZmFsc2UpIHtcblx0XHRyZXR1cm4gXCJmYWxzZVwiO1xuXHR9XG5cdGNvbnN0IHNoYXJlQnV0dG9uVmlzaWJpbGl0eUV4cCA9IHZpZXdEYXRhLmZjbEVuYWJsZWRcblx0XHQ/IGFuZChwYXRoSW5Nb2RlbChcIi9zaG93U2hhcmVJY29uXCIsIFwiZmNsaGVscGVyXCIpLCBub3QoVUkuSXNDcmVhdGVNb2RlKSlcblx0XHQ6IG5vdChVSS5Jc0NyZWF0ZU1vZGUpO1xuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oc2hhcmVCdXR0b25WaXNpYmlsaXR5RXhwKTtcbn07XG5cbi8qXG4gKiBHZXRzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBoZWFkZXIgaW5mbyBpbiBlZGl0IG1vZGVcbiAqXG4gKiBJZiBlaXRoZXIgdGhlIHRpdGxlIG9yIGRlc2NyaXB0aW9uIGZpZWxkIGZyb20gdGhlIGhlYWRlciBhbm5vdGF0aW9ucyBhcmUgZWRpdGFibGUsIHRoZW4gdGhlXG4gKiBlZGl0YWJsZSBoZWFkZXIgaW5mbyBpcyB2aXNpYmxlLlxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtvYmplY3R9IFtvQW5ub3RhdGlvbnNdIEFubm90YXRpb25zIG9iamVjdCBmb3IgZ2l2ZW4gZW50aXR5IHNldFxuICogQHBhcmFtIHtvYmplY3R9IFtvRmllbGRDb250cm9sXSBmaWVsZCBjb250cm9sXG4gKiByZXR1cm5zIHsqfSAgYmluZGluZyBleHByZXNzaW9uIG9yIGJvb2xlYW4gdmFsdWUgcmVzb2x2ZWQgZm9ybSBmdW5jaXRvbnMgaXNSZWFkT25seUZyb21TdGF0aWNBbm5vdGF0aW9ucyBhbmQgaXNSZWFkT25seUZyb21EeW5hbWljQW5ub3RhdGlvbnNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFZpc2libGl0eU9mSGVhZGVySW5mbyA9IGZ1bmN0aW9uIChcblx0b1RpdGxlQW5ub3RhdGlvbnM6IE1ldGFNb2RlbFByb3BlcnR5QW5ub3RhdGlvbnMsXG5cdG9EZXNjcmlwdGlvbkFubm90YXRpb25zOiBNZXRhTW9kZWxQcm9wZXJ0eUFubm90YXRpb25zLFxuXHRvRmllbGRUaXRsZUZpZWxkQ29udHJvbD86IHN0cmluZyxcblx0b0ZpZWxkRGVzY3JpcHRpb25GaWVsZENvbnRyb2w/OiBzdHJpbmdcbik6IGJvb2xlYW4gfCBzdHJpbmcge1xuXHQvLyBDaGVjayBBbm5vdGF0aW9ucyBmb3IgVGl0bGUgRmllbGRcblx0Ly8gU2V0IHRvIHRydWUgYW5kIGRvbid0IHRha2UgaW50byBhY2NvdW50LCBpZiB0aGVyZSBhcmUgbm8gYW5ub3RhdGlvbnMsIGkuZS4gbm8gdGl0bGUgZXhpc3RzXG5cdGNvbnN0IGJJc1RpdGxlUmVhZE9ubHkgPSBvVGl0bGVBbm5vdGF0aW9ucyA/IGlzUmVhZE9ubHlGcm9tU3RhdGljQW5ub3RhdGlvbnMob1RpdGxlQW5ub3RhdGlvbnMsIG9GaWVsZFRpdGxlRmllbGRDb250cm9sKSA6IHRydWU7XG5cdGNvbnN0IHRpdGxlRXhwcmVzc2lvbiA9IHJlYWRPbmx5RXhwcmVzc2lvbkZyb21EeW5hbWljQW5ub3RhdGlvbnMob0ZpZWxkVGl0bGVGaWVsZENvbnRyb2wpO1xuXHQvLyBUaGVyZSBpcyBubyBleHByZXNzaW9uIGFuZCB0aGUgdGl0bGUgaXMgbm90IHJlYWR5IG9ubHksIHRoaXMgaXMgc3VmZmljaWVudCBmb3IgYW4gZWRpdGFibGUgaGVhZGVyXG5cdGlmICghYklzVGl0bGVSZWFkT25seSAmJiAhdGl0bGVFeHByZXNzaW9uKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvLyBDaGVjayBBbm5vdGF0aW9ucyBmb3IgRGVzY3JpcHRpb24gRmllbGRcblx0Ly8gU2V0IHRvIHRydWUgYW5kIGRvbid0IHRha2UgaW50byBhY2NvdW50LCBpZiB0aGVyZSBhcmUgbm8gYW5ub3RhdGlvbnMsIGkuZS4gbm8gZGVzY3JpcHRpb24gZXhpc3RzXG5cdGNvbnN0IGJJc0Rlc2NyaXB0aW9uUmVhZE9ubHkgPSBvRGVzY3JpcHRpb25Bbm5vdGF0aW9uc1xuXHRcdD8gaXNSZWFkT25seUZyb21TdGF0aWNBbm5vdGF0aW9ucyhvRGVzY3JpcHRpb25Bbm5vdGF0aW9ucywgb0ZpZWxkRGVzY3JpcHRpb25GaWVsZENvbnRyb2wpXG5cdFx0OiB0cnVlO1xuXHRjb25zdCBkZXNjcmlwdGlvbkV4cHJlc3Npb24gPSByZWFkT25seUV4cHJlc3Npb25Gcm9tRHluYW1pY0Fubm90YXRpb25zKG9GaWVsZERlc2NyaXB0aW9uRmllbGRDb250cm9sKTtcblx0Ly8gVGhlcmUgaXMgbm8gZXhwcmVzc2lvbiBhbmQgdGhlIGRlc2NyaXB0aW9uIGlzIG5vdCByZWFkeSBvbmx5LCB0aGlzIGlzIHN1ZmZpY2llbnQgZm9yIGFuIGVkaXRhYmxlIGhlYWRlclxuXHRpZiAoIWJJc0Rlc2NyaXB0aW9uUmVhZE9ubHkgJiYgIWRlc2NyaXB0aW9uRXhwcmVzc2lvbikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Ly8gQm90aCB0aXRsZSBhbmQgZGVzY3JpcHRpb24gYXJlIG5vdCBlZGl0YWJsZSBhbmQgdGhlcmUgYXJlIG5vIGR5bmFtaWMgYW5ub3RhdGlvbnNcblx0aWYgKGJJc1RpdGxlUmVhZE9ubHkgJiYgYklzRGVzY3JpcHRpb25SZWFkT25seSAmJiAhdGl0bGVFeHByZXNzaW9uICYmICFkZXNjcmlwdGlvbkV4cHJlc3Npb24pIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvLyBOb3cgY29tYmluZSBleHByZXNzaW9uc1xuXHRpZiAodGl0bGVFeHByZXNzaW9uICYmICFkZXNjcmlwdGlvbkV4cHJlc3Npb24pIHtcblx0XHRyZXR1cm4gdGl0bGVFeHByZXNzaW9uO1xuXHR9IGVsc2UgaWYgKCF0aXRsZUV4cHJlc3Npb24gJiYgZGVzY3JpcHRpb25FeHByZXNzaW9uKSB7XG5cdFx0cmV0dXJuIGRlc2NyaXB0aW9uRXhwcmVzc2lvbjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gY29tYmluZVRpdGxlQW5kRGVzY3JpcHRpb25FeHByZXNzaW9uKG9GaWVsZFRpdGxlRmllbGRDb250cm9sLCBvRmllbGREZXNjcmlwdGlvbkZpZWxkQ29udHJvbCk7XG5cdH1cbn07XG5cbmV4cG9ydCBjb25zdCBjb21iaW5lVGl0bGVBbmREZXNjcmlwdGlvbkV4cHJlc3Npb24gPSBmdW5jdGlvbiAob1RpdGxlRmllbGRDb250cm9sPzogc3RyaW5nLCBvRGVzY3JpcHRpb25GaWVsZENvbnRyb2w/OiBzdHJpbmcpOiBzdHJpbmcge1xuXHQvLyBJZiBib3RoIGhlYWRlciBhbmQgdGl0bGUgZmllbGQgYXJlIGJhc2VkIG9uIGR5bm1haWMgZmllbGQgY29udHJvbCwgdGhlIGVkaXRhYmxlIGhlYWRlclxuXHQvLyBpcyB2aXNpYmxlIGlmIGF0IGxlYXN0IG9uZSBvZiB0aGVzZSBpcyBub3QgcmVhZHkgb25seVxuXHRyZXR1cm4gXCJ7PSAlXCIgKyBvVGl0bGVGaWVsZENvbnRyb2wgKyBcIiA9PT0gMSA/ICggJVwiICsgb0Rlc2NyaXB0aW9uRmllbGRDb250cm9sICsgXCIgPT09IDEgPyBmYWxzZSA6IHRydWUgKSA6IHRydWUgfVwiO1xufTtcblxuLypcbiAqIEdldCBFeHByZXNzaW9uIG9mIHByZXNzIGV2ZW50IGZvciB0aGUgZGVsZXRlIGJ1dHRvbi5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSBlbnRpdHlTZXQgVGhlIGN1cnJlbnQgZW50aXR5IHNldFxuICogQHBhcmFtIGNvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSBUaGUgY3VycmVudCB0ZW1wbGF0aW5nIGNvbnRleHRcbiAqIHJldHVybnMgVGhlIGZ1bmN0aW9uIHN0cmluZyBnZW5lcmF0ZWQgZnJvbSB0aGUgQ29tbW9uSGVscGVyJ3MgbWV0aG9kIGdlbmVyYXRlRnVuY3Rpb25cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFByZXNzRXhwcmVzc2lvbkZvckRlbGV0ZSA9IGZ1bmN0aW9uICgpOiBzdHJpbmcge1xuXHRjb25zdCBkZWxldGFibGVDb250ZXh0cyA9IFwiJHskdmlldz4vfS5nZXRCaW5kaW5nQ29udGV4dCgpXCIsXG5cdFx0dGl0bGUgPSBcIiR7JHZpZXc+L30uYnlJZCgnZmU6Ok9iamVjdFBhZ2UnKS5kYXRhKCdPYmplY3RQYWdlU3VidGl0bGUnKVwiLFxuXHRcdGRlc2NyaXB0aW9uID0gXCIkeyR2aWV3Pi99LmJ5SWQoJ2ZlOjpPYmplY3RQYWdlJykuZGF0YSgnT2JqZWN0UGFnZURlc2NyaXB0aW9uJylcIjtcblxuXHRjb25zdCBwYXJhbXMgPSB7XG5cdFx0dGl0bGU6IHRpdGxlLFxuXHRcdGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvblxuXHR9O1xuXHRyZXR1cm4gQ29tbW9uSGVscGVyLmdlbmVyYXRlRnVuY3Rpb24oXCIuZWRpdEZsb3cuZGVsZXRlRG9jdW1lbnRcIiwgZGVsZXRhYmxlQ29udGV4dHMsIENvbW1vbkhlbHBlci5vYmplY3RUb1N0cmluZyhwYXJhbXMpKTtcbn07XG5cbi8qXG4gKiBHZXQgRXhwcmVzc2lvbiBvZiBwcmVzcyBldmVudCBvZiBFZGl0IGJ1dHRvbi5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7b2JqZWN0fSBbb0RhdGFGaWVsZF0gRGF0YSBmaWVsZCBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc0VudGl0eVNldE5hbWVdIEVudGl0eSBzZXQgbmFtZVxuICogQHBhcmFtIHtvYmplY3R9IFtvSGVhZGVyQWN0aW9uXSBIZWFkZXIgYWN0aW9uIG9iamVjdFxuICogcmV0dXJucyB7c3RyaW5nfSAgYmluZGluZyBleHByZXNzaW9uIC8gZnVuY3Rpb24gc3RyaW5nIGdlbmVyYXRlZCBmcm9tIGNvbW1hbmhlbHBlcidzIGZ1bmN0aW9uIGdlbmVyYXRlRnVuY3Rpb25cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFByZXNzRXhwcmVzc2lvbkZvckVkaXQgPSBmdW5jdGlvbiAoXG5cdG9EYXRhRmllbGQ6IE1ldGFNb2RlbFR5cGU8RGF0YUZpZWxkRm9yQWN0aW9uPixcblx0c0VudGl0eVNldE5hbWU6IHN0cmluZyxcblx0b0hlYWRlckFjdGlvbj86IEJhc2VBY3Rpb25cbik6IHN0cmluZyB7XG5cdGNvbnN0IHNFZGl0YWJsZUNvbnRleHRzID0gQ29tbW9uSGVscGVyLmFkZFNpbmdsZVF1b3RlcyhvRGF0YUZpZWxkICYmIG9EYXRhRmllbGQuQWN0aW9uISksXG5cdFx0c0RhdGFGaWVsZEVudW1NZW1iZXIgPVxuXHRcdFx0b0RhdGFGaWVsZCAmJlxuXHRcdFx0b0RhdGFGaWVsZC5JbnZvY2F0aW9uR3JvdXBpbmcgJiZcblx0XHRcdChvRGF0YUZpZWxkLkludm9jYXRpb25Hcm91cGluZyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4pW1wiJEVudW1NZW1iZXJcIl0sXG5cdFx0c0ludm9jYXRpb25Hcm91cCA9IHNEYXRhRmllbGRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLk9wZXJhdGlvbkdyb3VwaW5nVHlwZS9DaGFuZ2VTZXRcIiA/IFwiQ2hhbmdlU2V0XCIgOiBcIklzb2xhdGVkXCI7XG5cdGNvbnN0IG9QYXJhbXMgPSB7XG5cdFx0Y29udGV4dHM6IFwiJHskdmlldz4vfS5nZXRCaW5kaW5nQ29udGV4dCgpXCIsXG5cdFx0ZW50aXR5U2V0TmFtZTogQ29tbW9uSGVscGVyLmFkZFNpbmdsZVF1b3RlcyhzRW50aXR5U2V0TmFtZSksXG5cdFx0aW52b2NhdGlvbkdyb3VwaW5nOiBDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKHNJbnZvY2F0aW9uR3JvdXApLFxuXHRcdG1vZGVsOiBcIiR7JHNvdXJjZT4vfS5nZXRNb2RlbCgpXCIsXG5cdFx0bGFiZWw6IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXMob0RhdGFGaWVsZCAmJiBvRGF0YUZpZWxkLkxhYmVsISwgdHJ1ZSksXG5cdFx0aXNOYXZpZ2FibGU6IG9IZWFkZXJBY3Rpb24gJiYgb0hlYWRlckFjdGlvbi5pc05hdmlnYWJsZSxcblx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb246XG5cdFx0XHRvSGVhZGVyQWN0aW9uICYmIG9IZWFkZXJBY3Rpb24uZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uID8gYCcke29IZWFkZXJBY3Rpb24uZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9ufSdgIDogdW5kZWZpbmVkLFxuXHRcdGRpc2FibGVTdHJpY3RIYW5kbGluZzogb0hlYWRlckFjdGlvbj8uZGlzYWJsZVN0cmljdEhhbmRsaW5nXG5cdH07XG5cdHJldHVybiBDb21tb25IZWxwZXIuZ2VuZXJhdGVGdW5jdGlvbihcIi5oYW5kbGVycy5vbkNhbGxBY3Rpb25cIiwgXCIkeyR2aWV3Pi99XCIsIHNFZGl0YWJsZUNvbnRleHRzLCBDb21tb25IZWxwZXIub2JqZWN0VG9TdHJpbmcob1BhcmFtcykpO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBleHByZXNzaW9uIGZvciB0aGUgJ3ByZXNzJyBldmVudCBpbiB0aGUgZm9vdGVyIGFubm90YXRpb24gYWN0aW9ucy5cbiAqIEBwYXJhbSBkYXRhRmllbGRNb2RlbFBhdGggVGhlIGRhdGEgbW9kZWwgcGF0aCBvZiB0aGUgZGF0YSBmaWVsZFxuICogQHBhcmFtIGVudGl0eVNldE5hbWUgVGhlIGVudGl0eSBzZXQgbmFtZVxuICogQHBhcmFtIGhlYWRlckFjdGlvbiBUaGUgaGVhZGVyIGFjdGlvbiBvYmplY3RcbiAqIEByZXR1cm5zICBUaGUgYmluZGluZyBleHByZXNzaW9uIG9yIGZ1bmN0aW9uIHN0cmluZ1xuICovXG5leHBvcnQgY29uc3QgZ2V0UHJlc3NFeHByZXNzaW9uRm9yRm9vdGVyQW5ub3RhdGlvbkFjdGlvbiA9IGZ1bmN0aW9uIChcblx0ZGF0YUZpZWxkTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEZvckFjdGlvbj4sXG5cdGVudGl0eVNldE5hbWU6IHN0cmluZyxcblx0aGVhZGVyQWN0aW9uOiBDdXN0b21BY3Rpb25cbik6IHN0cmluZyB7XG5cdGNvbnN0IGRhdGFGaWVsZCA9IGRhdGFGaWVsZE1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgRGF0YUZpZWxkRm9yQWN0aW9uO1xuXHRjb25zdCBhY3Rpb25Db250ZXh0cyA9IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXMoZGF0YUZpZWxkLkFjdGlvbiBhcyBzdHJpbmcpO1xuXHRjb25zdCBvUGFyYW1zID0ge1xuXHRcdGNvbnRleHRzOiBcIiR7JHZpZXc+L30uZ2V0QmluZGluZ0NvbnRleHQoKVwiLFxuXHRcdGVudGl0eVNldE5hbWU6IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXMoZW50aXR5U2V0TmFtZSksXG5cdFx0aW52b2NhdGlvbkdyb3VwaW5nOiBDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKFxuXHRcdFx0ZGF0YUZpZWxkLkludm9jYXRpb25Hcm91cGluZyA9PT0gXCJVSS5PcGVyYXRpb25Hcm91cGluZ1R5cGUvQ2hhbmdlU2V0XCIgPyBcIkNoYW5nZVNldFwiIDogXCJJc29sYXRlZFwiXG5cdFx0KSxcblx0XHRtb2RlbDogXCIkeyRzb3VyY2U+L30uZ2V0TW9kZWwoKVwiLFxuXHRcdGxhYmVsOiBDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKGRhdGFGaWVsZC5MYWJlbCBhcyBzdHJpbmcsIHRydWUpLFxuXHRcdGlzTmF2aWdhYmxlOiBoZWFkZXJBY3Rpb24uaXNOYXZpZ2FibGUsXG5cdFx0ZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uOiBoZWFkZXJBY3Rpb24uZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uXG5cdFx0XHQ/IGAnJHtoZWFkZXJBY3Rpb24uZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9ufSdgXG5cdFx0XHQ6IHVuZGVmaW5lZFxuXHR9O1xuXHRyZXR1cm4gQ29tbW9uSGVscGVyLmdlbmVyYXRlRnVuY3Rpb24oXCIuaGFuZGxlcnMub25DYWxsQWN0aW9uXCIsIFwiJHskdmlldz4vfVwiLCBhY3Rpb25Db250ZXh0cywgQ29tbW9uSGVscGVyLm9iamVjdFRvU3RyaW5nKG9QYXJhbXMpKTtcbn07XG5cbi8qXG4gKiBHZXQgRXhwcmVzc2lvbiBmb3IgZXhlY3V0aW5nIHRoZSBldmVudCBleHByZXNzaW9uIG9mIHRoZSBwcmltYXJ5IGFjdGlvbi5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7b2JqZWN0fSBbb0RhdGFGaWVsZF0gRGF0YSBmaWVsZCBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc0VudGl0eVNldE5hbWVdIEVudGl0eSBzZXQgbmFtZVxuICogQHBhcmFtIHtvYmplY3R9IFtvSGVhZGVyQWN0aW9uXSBIZWFkZXIgYWN0aW9uIG9iamVjdFxuICogQHBhcmFtIHtDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IHN0cmluZ30gVGhlIHZpc2liaWxpdHkgb2Ygc2VtYXRpYyBwb3NpdGl2ZSBhY3Rpb25cbiAqIEBwYXJhbSB7Q29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBzdHJpbmd9IFRoZSBlbmFibGVtZW50IG9mIHNlbWFudGljIHBvc2l0aXZlIGFjdGlvblxuICogQHBhcmFtIHtDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IHN0cmluZ30gVGhlIEVkaXQgYnV0dG9uIHZpc2liaWxpdHlcbiAqIEBwYXJhbSB7Q29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBzdHJpbmd9IFRoZSBlbmFibGVtZW50IG9mIEVkaXQgYnV0dG9uXG4gKiByZXR1cm5zIHtzdHJpbmd9ICBiaW5kaW5nIGV4cHJlc3Npb24gLyBmdW5jdGlvbiBzdHJpbmcgZ2VuZXJhdGVkIGZyb20gY29tbWFuaGVscGVyJ3MgZnVuY3Rpb24gZ2VuZXJhdGVGdW5jdGlvblxuICovXG5leHBvcnQgY29uc3QgZ2V0UHJlc3NFeHByZXNzaW9uRm9yUHJpbWFyeUFjdGlvbiA9IGZ1bmN0aW9uIChcblx0b0RhdGFGaWVsZDogRGF0YUZpZWxkRm9yQWN0aW9uIHwgdW5kZWZpbmVkLFxuXHRzRW50aXR5U2V0TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRvSGVhZGVyQWN0aW9uOiBCYXNlQWN0aW9uIHwgbnVsbCxcblx0cG9zaXRpdmVBY3Rpb25WaXNpYmxlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IHN0cmluZyxcblx0cG9zaXRpdmVBY3Rpb25FbmFibGVkOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IHN0cmluZyxcblx0ZWRpdEFjdGlvblZpc2libGU6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgc3RyaW5nLFxuXHRlZGl0QWN0aW9uRW5hYmxlZDogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBzdHJpbmdcbik6IHN0cmluZyB7XG5cdGNvbnN0IHNBY3Rpb25Db250ZXh0cyA9IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXMob0RhdGFGaWVsZD8uQWN0aW9uLnRvU3RyaW5nKCkgPz8gXCJcIiksXG5cdFx0c0RhdGFGaWVsZEVudW1NZW1iZXIgPVxuXHRcdFx0b0RhdGFGaWVsZCAmJlxuXHRcdFx0b0RhdGFGaWVsZC5JbnZvY2F0aW9uR3JvdXBpbmcgJiZcblx0XHRcdChvRGF0YUZpZWxkLkludm9jYXRpb25Hcm91cGluZyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4pW1wiJEVudW1NZW1iZXJcIl0sXG5cdFx0c0ludm9jYXRpb25Hcm91cCA9IHNEYXRhRmllbGRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLk9wZXJhdGlvbkdyb3VwaW5nVHlwZS9DaGFuZ2VTZXRcIiA/IFwiQ2hhbmdlU2V0XCIgOiBcIklzb2xhdGVkXCI7XG5cdGNvbnN0IG9QYXJhbXMgPSB7XG5cdFx0Y29udGV4dHM6IFwiJHskdmlldz4vfS5nZXRCaW5kaW5nQ29udGV4dCgpXCIsXG5cdFx0ZW50aXR5U2V0TmFtZTogc0VudGl0eVNldE5hbWUgPyBDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKHNFbnRpdHlTZXROYW1lKSA6IFwiXCIsXG5cdFx0aW52b2NhdGlvbkdyb3VwaW5nOiBDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKHNJbnZvY2F0aW9uR3JvdXApLFxuXHRcdG1vZGVsOiBcIiR7JHNvdXJjZT4vfS5nZXRNb2RlbCgpXCIsXG5cdFx0bGFiZWw6IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXMob0RhdGFGaWVsZD8uTGFiZWw/LnRvU3RyaW5nKCkgPz8gXCJcIiwgdHJ1ZSksXG5cdFx0aXNOYXZpZ2FibGU6IG9IZWFkZXJBY3Rpb24/LmlzTmF2aWdhYmxlLFxuXHRcdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbjogb0hlYWRlckFjdGlvbj8uZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uXG5cdFx0XHQ/IGAnJHtvSGVhZGVyQWN0aW9uLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbn0nYFxuXHRcdFx0OiB1bmRlZmluZWRcblx0fTtcblx0Y29uc3Qgb0NvbmRpdGlvbnMgPSB7XG5cdFx0cG9zaXRpdmVBY3Rpb25WaXNpYmxlLFxuXHRcdHBvc2l0aXZlQWN0aW9uRW5hYmxlZCxcblx0XHRlZGl0QWN0aW9uVmlzaWJsZSxcblx0XHRlZGl0QWN0aW9uRW5hYmxlZFxuXHR9O1xuXHRyZXR1cm4gQ29tbW9uSGVscGVyLmdlbmVyYXRlRnVuY3Rpb24oXG5cdFx0XCIuaGFuZGxlcnMub25QcmltYXJ5QWN0aW9uXCIsXG5cdFx0XCIkY29udHJvbGxlclwiLFxuXHRcdFwiJHskdmlldz4vfVwiLFxuXHRcdFwiJHskdmlldz4vfS5nZXRCaW5kaW5nQ29udGV4dCgpXCIsXG5cdFx0c0FjdGlvbkNvbnRleHRzLFxuXHRcdENvbW1vbkhlbHBlci5vYmplY3RUb1N0cmluZyhvUGFyYW1zKSxcblx0XHRDb21tb25IZWxwZXIub2JqZWN0VG9TdHJpbmcob0NvbmRpdGlvbnMpXG5cdCk7XG59O1xuXG4vKlxuICogR2V0cyB0aGUgYmluZGluZyBvZiB0aGUgY29udGFpbmVyIEhCb3ggZm9yIHRoZSBoZWFkZXIgZmFjZXQuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge29iamVjdH0gW29Db250cm9sQ29uZmlndXJhdGlvbl0gVGhlIGNvbnRyb2wgY29uZmlndXJhdGlvbiBmb3JtIG9mIHRoZSB2aWV3RGF0YSBtb2RlbFxuICogQHBhcmFtIHtvYmplY3R9IFtvSGVhZGVyRmFjZXRdIFRoZSBvYmplY3Qgb2YgdGhlIGhlYWRlciBmYWNldFxuICogcmV0dXJucyB7Kn0gIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZnJvbSBmdW5jdGlvbiBnZXRCaW5kaW5nV2l0aEdyb3VwSWRGcm9tQ29uZmlnIG9yIHVuZGVmaW5lZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFN0YXNoYWJsZUhCb3hCaW5kaW5nID0gZnVuY3Rpb24gKFxuXHRvQ29udHJvbENvbmZpZ3VyYXRpb246IENvbnRyb2xDb25maWd1cmF0aW9uLFxuXHRvSGVhZGVyRmFjZXQ6IHsgRmFjZXQ6IEZpZWxkR3JvdXBGYWNldCB9XG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRpZiAob0hlYWRlckZhY2V0ICYmIG9IZWFkZXJGYWNldC5GYWNldCAmJiBvSGVhZGVyRmFjZXQuRmFjZXQudGFyZ2V0QW5ub3RhdGlvblR5cGUgPT09IFwiRGF0YVBvaW50XCIpIHtcblx0XHRyZXR1cm4gZ2V0QmluZGluZ1dpdGhHcm91cElkRnJvbUNvbmZpZyhvQ29udHJvbENvbmZpZ3VyYXRpb24sIG9IZWFkZXJGYWNldC5GYWNldC50YXJnZXRBbm5vdGF0aW9uVmFsdWUhKTtcblx0fVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEhlYWRlckZvcm1IYm94UmVuZGVyVHlwZSA9IGZ1bmN0aW9uIChkYXRhRmllbGQ6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcz4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRpZiAoZGF0YUZpZWxkPy50YXJnZXRPYmplY3Q/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRyZXR1cm4gXCJCYXJlXCI7XG59O1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IGFjdGlvbiBncm91cCBoYW5kbGVyIHRoYXQgaXMgaW52b2tlZCB3aGVuIGFkZGluZyB0aGUgbWVudSBidXR0b24gaGFuZGxpbmcgYXBwcm9wcmlhdGVseS5cbiAqIEBwYXJhbSBvQ3R4IFRoZSBjdXJyZW50IGNvbnRleHQgaW4gd2hpY2ggdGhlIGhhbmRsZXIgaXMgY2FsbGVkXG4gKiBAcGFyYW0gb0FjdGlvbiBUaGUgY3VycmVudCBhY3Rpb24gY29udGV4dFxuICogQHBhcmFtIG9EYXRhRmllbGRGb3JEZWZhdWx0QWN0aW9uIFRoZSBjdXJyZW50IGRhdGFGaWVsZCBmb3IgdGhlIGRlZmF1bHQgYWN0aW9uXG4gKiBAcGFyYW0gZGVmYXVsdEFjdGlvbkNvbnRleHRPckVudGl0eVNldCBUaGUgY3VycmVudCBjb250ZXh0IGZvciB0aGUgZGVmYXVsdCBhY3Rpb25cbiAqIEByZXR1cm5zIFRoZSBhcHByb3ByaWF0ZSBleHByZXNzaW9uIHN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdEFjdGlvbkhhbmRsZXIoXG5cdG9DdHg6IENvbnRleHQsXG5cdG9BY3Rpb246IEN1c3RvbUFjdGlvbixcblx0b0RhdGFGaWVsZEZvckRlZmF1bHRBY3Rpb246IE1ldGFNb2RlbFR5cGU8RGF0YUZpZWxkRGVmYXVsdD4sXG5cdGRlZmF1bHRBY3Rpb25Db250ZXh0T3JFbnRpdHlTZXQ6IHN0cmluZ1xuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRpZiAob0FjdGlvbi5kZWZhdWx0QWN0aW9uKSB7XG5cdFx0Y29uc3QgZGVmYXVsdEFjdGlvbiA9IG9BY3Rpb24uZGVmYXVsdEFjdGlvbiBhcyBDdXN0b21BY3Rpb247XG5cdFx0dHJ5IHtcblx0XHRcdHN3aXRjaCAoZGVmYXVsdEFjdGlvbi50eXBlKSB7XG5cdFx0XHRcdGNhc2UgXCJGb3JBY3Rpb25cIjoge1xuXHRcdFx0XHRcdHJldHVybiBnZXRQcmVzc0V4cHJlc3Npb25Gb3JFZGl0KFxuXHRcdFx0XHRcdFx0b0RhdGFGaWVsZEZvckRlZmF1bHRBY3Rpb24gYXMgTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRGb3JBY3Rpb24+LFxuXHRcdFx0XHRcdFx0ZGVmYXVsdEFjdGlvbkNvbnRleHRPckVudGl0eVNldCxcblx0XHRcdFx0XHRcdG9BY3Rpb24uZGVmYXVsdEFjdGlvbiBhcyBCYXNlQWN0aW9uXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjYXNlIFwiRm9yTmF2aWdhdGlvblwiOiB7XG5cdFx0XHRcdFx0aWYgKGRlZmF1bHRBY3Rpb24uY29tbWFuZCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIFwiY21kOlwiICsgZGVmYXVsdEFjdGlvbi5jb21tYW5kO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZGVmYXVsdEFjdGlvbi5wcmVzcztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGVmYXVsdDoge1xuXHRcdFx0XHRcdGlmIChkZWZhdWx0QWN0aW9uLmNvbW1hbmQpIHtcblx0XHRcdFx0XHRcdHJldHVybiBcImNtZDpcIiArIGRlZmF1bHRBY3Rpb24uY29tbWFuZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKGRlZmF1bHRBY3Rpb24ubm9XcmFwKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZGVmYXVsdEFjdGlvbi5wcmVzcztcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmV0dXJuIENvbW1vbkhlbHBlci5idWlsZEFjdGlvbldyYXBwZXIoZGVmYXVsdEFjdGlvbiwgeyBpZDogXCJmb3JUaGVPYmplY3RQYWdlXCIgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoaW9FeCkge1xuXHRcdFx0cmV0dXJuIFwiYmluZGluZyBmb3IgdGhlIGRlZmF1bHQgYWN0aW9uIGlzIG5vdCB3b3JraW5nIGFzIGV4cGVjdGVkXCI7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHN1YiBzZWN0aW9uIHZpc3VhbGl6YXRpb24gaXMgcGFydCBvZiBwcmV2aWV3LlxuICogQHBhcmFtIHN1YlNlY3Rpb24gVGhlIHN1YiBzZWN0aW9uIHZpc3VhbGl6YXRpb25cbiAqIEByZXR1cm5zIEEgQm9vbGVhbiB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWaXN1YWxpemF0aW9uSXNQYXJ0T2ZQcmV2aWV3KHN1YlNlY3Rpb246IERhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gc3ViU2VjdGlvbi5pc1BhcnRPZlByZXZpZXcgPT09IHRydWUgfHwgc3ViU2VjdGlvbi5wcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnNbMF0udHlwZSAhPT0gXCJUYWJsZVwiO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGV4cHJlc3Npb24gdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGZvb3RlciBvZiB0aGUgb2JqZWN0IHBhZ2UgaXMgdG8gYmUgdmlzaWJsZSBvciBub3QuXG4gKiBAcGFyYW0gY29udGV4dCBUaGUgY29udGV4dCBmb3IgdGhlIGZvcm1hdHRlci5cbiAqIEBwYXJhbSBmb290ZXJBY3Rpb25zIFRoZSBsaXN0IG9mIGZvb3RlciBhY3Rpb25zLlxuICogQHJldHVybnMgQSBiaW5kaW5nIGV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEZvb3RlclZpc2liaWxpdHlFeHByZXNzaW9uID0gZnVuY3Rpb24gKGNvbnRleHQ6IElDb250ZXh0LCBmb290ZXJBY3Rpb25zOiBCYXNlQWN0aW9uW10pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IG1ldGFNb2RlbCA9IGNvbnRleHQuZ2V0SW50ZXJmYWNlKDEpLmdldE1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWw7XG5cblx0Y29uc3QgX2dlbmVyYXRlQmluZGluZ3NGb3JBY3Rpb25zID0gKGFjdGlvbnM6IEJhc2VBY3Rpb25bXSk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdID0+IHtcblx0XHRpZiAoYWN0aW9ucy5sZW5ndGgpIHtcblx0XHRcdHJldHVybiBhY3Rpb25zLm1hcCgoYWN0aW9uKSA9PiByZXNvbHZlQmluZGluZ1N0cmluZyhhY3Rpb24udmlzaWJsZSA/PyB0cnVlLCBcImJvb2xlYW5cIikpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdO1xuXHRcdH1cblx0XHRyZXR1cm4gW2NvbnN0YW50KGZhbHNlKV07XG5cdH07XG5cblx0Y29uc3QgZ2V0QWN0aW9uTW9kZWxQYXRoID0gKGFjdGlvbjogQmFzZUFjdGlvbik6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkRm9yQWN0aW9uPiB8IHVuZGVmaW5lZCA9PiB7XG5cdFx0Y29uc3QgYW5ub3RhdGlvblBhdGggPSBhY3Rpb24uYW5ub3RhdGlvblBhdGg7XG5cdFx0aWYgKGFubm90YXRpb25QYXRoKSB7XG5cdFx0XHRjb25zdCBhY3Rpb25Db250ZXh0ID0gbWV0YU1vZGVsLmdldENvbnRleHQoYW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0cmV0dXJuIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxEYXRhRmllbGRGb3JBY3Rpb24+KGFjdGlvbkNvbnRleHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9O1xuXG5cdC8vIEFjdGlvbnMgYXJlIGNvbWluZyBmcm9tIHRoZSBjb252ZXJ0ZXIgc28gb25seSBkZXRlcm1pbmluZyBhY3Rpb25zIGFuZCBub3Qgc3RhdGljYWxseSBoaWRkZW4gYXJlIGxpc3RlZFxuXHRjb25zdCBkZXRlcm1pbmluZ0FjdGlvbnMgPSBmb290ZXJBY3Rpb25zLmZpbHRlcigoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb24pO1xuXHRjb25zdCBtYW5pZmVzdEFjdGlvbkJpbmRpbmdzID0gX2dlbmVyYXRlQmluZGluZ3NGb3JBY3Rpb25zKGZvb3RlckFjdGlvbnMuZmlsdGVyKChhY3Rpb24pID0+IGlzTWFuaWZlc3RBY3Rpb24oYWN0aW9uKSkpO1xuXHRjb25zdCBkZXRlcm1pbmluZ0FjdGlvbkJpbmRpbmdzID0gX2dlbmVyYXRlQmluZGluZ3NGb3JBY3Rpb25zKGRldGVybWluaW5nQWN0aW9ucyk7XG5cblx0Y29uc3QgaXNOb3RIaWRkZW5EZXRlcm1pbmluZ0FjdGlvbiA9ICEhZGV0ZXJtaW5pbmdBY3Rpb25zLmZpbmQoKGFjdGlvbikgPT4ge1xuXHRcdGNvbnN0IGFjdGlvbkNvbnRleHRNb2RlbFBhdGggPSBnZXRBY3Rpb25Nb2RlbFBhdGgoYWN0aW9uKTtcblx0XHRyZXR1cm4gIWFjdGlvbkNvbnRleHRNb2RlbFBhdGg/LnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW47XG5cdH0pO1xuXG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRvcihcblx0XHRcdGlzTm90SGlkZGVuRGV0ZXJtaW5pbmdBY3Rpb24sXG5cdFx0XHRvciguLi5tYW5pZmVzdEFjdGlvbkJpbmRpbmdzKSxcblx0XHRcdGFuZChvcihVSS5Jc0VkaXRhYmxlLCBvciguLi5kZXRlcm1pbmluZ0FjdGlvbkJpbmRpbmdzKSksIG5vdChwYXRoSW5Nb2RlbChcImlzQ3JlYXRlRGlhbG9nT3BlblwiLCBcImludGVybmFsXCIpKSlcblx0XHQpXG5cdCk7XG59O1xuXG4vKipcbiAqIEdldCB0aGUgc3Vic2VjdGlvbiBoZWFkZXIgbGV2ZWwuXG4gKiBAcGFyYW0gc3ViU2VjdGlvbiBUaGUgc3Vic2VjdGlvbiB2aXN1YWxpemF0aW9uXG4gKiBAcGFyYW0gaXNNb3JlQ29udGVudFxuICogQHJldHVybnMgQSBTdHJpbmcgdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEhlYWRlckxldmVsKHN1YlNlY3Rpb246IERhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbiwgaXNNb3JlQ29udGVudDogYm9vbGVhbik6IHN0cmluZyB7XG5cdGlmIChpc01vcmVDb250ZW50KSB7XG5cdFx0aWYgKCFzdWJTZWN0aW9uLnNob3dTdWJTZWN0aW9uVGl0bGUpIHtcblx0XHRcdC8vIHdoZW5ldmVyIHRpdGxlIGlzIG1lcmdlZCBmb3Igc3ViLXNlY3Rpb24sIGxldmVsIHNob3VsZCBiZSBINFxuXHRcdFx0cmV0dXJuIFwiSDRcIjtcblx0XHR9IGVsc2UgaWYgKHN1YlNlY3Rpb24ubGV2ZWwgPT09IDIgJiYgc3ViU2VjdGlvbi5kYXRhVmlzdWFsaXphdGlvblRpdGxlVmlzaWJsZSA9PT0gXCJ0cnVlXCIpIHtcblx0XHRcdC8vIHJldGFpbiBvbGQgbG9naWNcblx0XHRcdHJldHVybiBcIkg2XCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBcIkg1XCI7IC8vIHJldGFpbiBvbGQgbG9naWNcblx0XHR9XG5cdH0gZWxzZSBpZiAoIXN1YlNlY3Rpb24uc2hvd1N1YlNlY3Rpb25UaXRsZSkge1xuXHRcdC8vIHdoZW5ldmVyIHRpdGxlIGlzIG1lcmdlZCBmb3Igc2VjdGlvbiwgbGV2ZWwgc2hvdWxkIGJlIEgzXG5cdFx0cmV0dXJuIFwiSDNcIjtcblx0fSBlbHNlIGlmIChzdWJTZWN0aW9uLmxldmVsID09PSAyICYmIHN1YlNlY3Rpb24uZGF0YVZpc3VhbGl6YXRpb25UaXRsZVZpc2libGUgPT09IFwidHJ1ZVwiKSB7XG5cdFx0Ly8gcmV0YWluIG9sZCBsb2dpY1xuXHRcdHJldHVybiBcIkg1XCI7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFwiSDRcIjsgLy8gcmV0YWluIG9sZCBsb2dpY1xuXHR9XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYXJpYS1sYWJlbGxlZGJ5IGF0dHJpYnV0ZSBmb3IgdGhlIGhlYWRlciBmb3JtZWxlbWVudC5cbiAqIEBwYXJhbSBoZWFkZXJGb3JtRGF0YVxuICogQHBhcmFtIGZvcm1FbGVtZW50SWRQcmVmaXhcbiAqIEByZXR1cm5zIFRoZSBzdHJpbmcgZm9yIHRoZSBhcmlhLWxhYmVsbGVkYnkgYXR0cmlidXRlXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRIZWFkZXJGb3JtQXJpYUxhYmVsbGVkQnkgPSBmdW5jdGlvbiAoaGVhZGVyRm9ybURhdGE6IEhlYWRlckZvcm1EYXRhLCBmb3JtRWxlbWVudElkUHJlZml4OiBzdHJpbmcpOiBzdHJpbmcge1xuXHRsZXQgdGl0bGVJZCA9IFwiXCI7XG5cdGlmIChoZWFkZXJGb3JtRGF0YS5sYWJlbCkge1xuXHRcdHRpdGxlSWQgPSBTdGFibGVJZEhlbHBlci5nZW5lcmF0ZShbaGVhZGVyRm9ybURhdGEuaWQsIFwiVGl0bGVcIl0pO1xuXHR9XG5cdGNvbnN0IGxhYmVsSWQgPSBTdGFibGVJZEhlbHBlci5nZW5lcmF0ZShbZm9ybUVsZW1lbnRJZFByZWZpeCwgXCJMYWJlbFwiXSk7XG5cdHJldHVybiB0aXRsZUlkID8gYCR7dGl0bGVJZH0sJHtsYWJlbElkfWAgOiBsYWJlbElkO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBhcmlhIHRleHQgZm9yIGZvcm0gcmVnaW9ucyBvbiBPYmplY3QgUGFnZS5cbiAqIEBwYXJhbSBzdWJTZWN0aW9uVGl0bGUgVGhlIHRpdGxlIG9mIHRoZSBzdWJzZWN0aW9uXG4gKiBAcmV0dXJucyBUaGUgYXJpYSB0ZXh0IGZvciB0aGUgZm9ybSByZWdpb25cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEZvcm1BcmlhVGV4dCA9IGZ1bmN0aW9uIChzdWJTZWN0aW9uVGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHJlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblx0cmV0dXJuIHN1YlNlY3Rpb25UaXRsZSAhPT0gdW5kZWZpbmVkID8gcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfRk9STV9BUklBX1RFWFRcIiwgW3N1YlNlY3Rpb25UaXRsZV0pIDogdW5kZWZpbmVkO1xufTtcblxuZ2V0Rm9vdGVyVmlzaWJpbGl0eUV4cHJlc3Npb24ucmVxdWlyZXNJQ29udGV4dCA9IHRydWU7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBeURBLE1BQU1BLFVBQVUsR0FBR0MsUUFBUSxDQUFDRCxVQUFVO0VBRS9CLE1BQU1FLHFCQUFxQixHQUFHLFNBQUFBLENBQ3BDQyxlQUEyRCxFQUMzREMsUUFBa0IsRUFDbEJDLFVBQTJCLEVBQ1E7SUFDbkMsT0FBT0MseUJBQXlCLENBQy9CSCxlQUFlLEVBQ2ZJLHdCQUF3QixFQUN4QkMsU0FBUyxFQUNUSCxVQUFVLEVBQ1ZELFFBQ0QsQ0FBQztFQUNGLENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFOQUssUUFBQSxDQUFBUCxxQkFBQSxHQUFBQSxxQkFBQTtFQU9PLE1BQU1RLDJCQUEyQixHQUFHLFNBQUFBLENBQzFDUCxlQUErQyxFQUMvQ1EsV0FBNEIsRUFDTztJQUNuQyxJQUFJQyxrQkFBa0IsR0FBR0MsMkJBQTJCLENBQUVGLFdBQVcsRUFBRUcsV0FBVyxFQUFxQkMsS0FBSyxDQUFDO0lBQ3pHLElBQUtKLFdBQVcsRUFBRUcsV0FBVyxFQUFxQkMsS0FBSyxFQUFFQyxPQUFPLEVBQUVDLFdB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QU8sSUFBSSxDQUFDLENBQUM7TUFDZDtJQUNELENBQUMsTUFBTSxJQUFJLENBQUM3QixVQUFVLENBQUMyQixtQkFBbUIsRUFBRTtNQUMzQztNQUNBLE9BQU8sSUFBSTtJQUNaLENBQUMsTUFBTSxJQUFJM0IsVUFBVSxDQUFDNEIsS0FBSyxLQUFLLENBQUMsSUFBSTVCLFVBQVUsQ0FBQzZCLDZCQUE2QixLQUFLLE1BQU0sRUFBRTtNQUN6RjtNQUNBLE9BQU8sSUFBSTtJQUNaLENBQUMsTUFBTTtNQUNOLE9BQU8sSUFBSSxDQUFDLENBQUM7SUFDZDtFQUNEOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxBcFEsUUFBQSxDQUFBZ1EsY0FBQSxHQUFBQSxjQUFBO0VBTU8sTUFBTUssMkJBQTJCLEdBQUcsU0FBQUEsQ0FBVUMsY0FBOEIsRUFBRUMsbUJBQTJCLEVBQVU7SUFDekgsSUFBSUMsT0FBTyxHQUFHLEVBQUU7SUFDaEIsSUFBSUYsY0FBYyxDQUFDdE8sS0FBSyxFQUFFO01BQ3pCd08sT0FBTyxHQUFHQyxjQUFjLENBQUNDLFFBQVEsQ0FBQyxDQUFDSixjQUFjLENBQUNsQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDaEU7SUFDQSxNQUFNdUMsT0FBTyxHQUFHRixjQUFjLENBQUNDLFFBQVEsQ0FBQyxDQUFDSCxtQkFBbUIsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN2RSxPQUFPQyxPQUFPLEdBQUcsR0FBR0EsT0FBTyxJQUFJRyxPQUFPLEVBQUUsR0FBR0EsT0FBTztFQUNuRCxDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFKQTNRLFFBQUEsQ0FBQXFRLDJCQUFBLEdBQUFBLDJCQUFBO0VBS08sTUFBTU8sZUFBZSxHQUFHLFNBQUFBLENBQVVDLGVBQW1DLEVBQXNCO0lBQ2pHLE1BQU1DLGNBQWMsR0FBR0MsT0FBTyxDQUFDQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUU7SUFDbkUsT0FBT0gsZUFBZSxLQUFLOVEsU0FBUyxHQUFHK1EsY0FBYyxDQUFDelAsT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUN3UCxlQUFlLENBQUMsQ0FBQyxHQUFHOVEsU0FBUztFQUNqSCxDQUFDO0VBRUQ0Tyw2QkFBNkIsQ0FBQ3NDLGdCQUFnQixHQUFHLElBQUk7RUFBQ2pSLFFBQUEsQ0FBQTRRLGVBQUEsR0FBQUEsZUFBQTtFQUFBLE9BQUE1USxRQUFBO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -555,6 +555,9 @@ export const getBindingWithGroupIdFromConfig = function (oConfigurations: Contro
555
555
  * @returns The Binding expression including path and $select query as parameter depending on the function parameters
556
556
  */
557
557
  export const createBindingForAlternateAndSecondaryKeys = function (dataModelObjectPath: DataModelObjectPath<Facet>): string | undefined {
558
+ if (!dataModelObjectPath?.navigationProperties?.length) {
559
+ return undefined;
560
+ }
558
561
  let binding: Partial<PathInModelExpression<undefined>> | undefined;
559
562
  const alternateAndSecondaryKeys = ModelHelper.getAlternateAndSecondaryKeys(
560
563
  dataModelObjectPath?.targetEntityType,
@@ -2,10 +2,11 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/fe/base/ClassSupport", "sap/uxap/BlockBase", "sap/uxap/library"], function (ClassSupport, BlockBase, uxapLib) {
5
+ sap.ui.define(["sap/fe/base/ClassSupport", "sap/fe/core/CommonUtils", "sap/fe/core/converters/ManifestSettings", "sap/uxap/BlockBase", "sap/uxap/library"], function (ClassSupport, CommonUtils, ManifestSettings, BlockBase, uxapLib) {
6
6
  "use strict";
7
7
 
8
8
  var _dec, _dec2, _dec3, _class, _class2, _descriptor, _descriptor2;
9
+ var CreationMode = ManifestSettings.CreationMode;
9
10
  var property = ClassSupport.property;
10
11
  var defineUI5Class = ClassSupport.defineUI5Class;
11
12
  var aggregation = ClassSupport.aggregation;
@@ -49,6 +50,21 @@ sap.ui.define(["sap/fe/base/ClassSupport", "sap/uxap/BlockBase", "sap/uxap/libra
49
50
  this._adjustForm(oView, oFormAdjustmentFields);
50
51
  }
51
52
  };
53
+ _proto.onAfterRendering = function onAfterRendering(oEvent) {
54
+ const subSection = this._oParentObjectPageSubSection;
55
+ const subSectionBlocks = subSection.getBlocks().filter(block => block.isA("sap.fe.templates.ObjectPage.controls.SubSectionBlock"));
56
+ if (subSectionBlocks.length === 1 && this.content && this.content.isA("sap.fe.macros.Table")) {
57
+ const view = CommonUtils.getTargetView(this);
58
+ const sectionLayout = view?.getViewData()?.sectionLayout;
59
+ const tableControl = this.content.getTableDefinition().control;
60
+ if (tableControl.rowCountMode === "Auto" && (
61
+ // Exclude CreationRow mode unless sectionLayout is Tabs: the fit-container style creates whitespace in the subsection in display mode when CreationRow is used in TableCreationOptions
62
+ tableControl.creationMode !== CreationMode.CreationRow || sectionLayout === "Tabs") && !subSection.hasStyleClass("sapUxAPObjectPageSubSectionFitContainer")) {
63
+ subSection.addStyleClass("sapUxAPObjectPageSubSectionFitContainer");
64
+ }
65
+ }
66
+ return _BlockBase.prototype.onAfterRendering.call(this, oEvent);
67
+ };
52
68
  _proto.setMode = function setMode(sMode) {
53
69
  this.setProperty("mode", sMode);
54
70
  // OPTIONAL: this.internalModel.setProperty("/mode", sMode);
@@ -76,4 +92,4 @@ sap.ui.define(["sap/fe/base/ClassSupport", "sap/uxap/BlockBase", "sap/uxap/libra
76
92
  }), _class2)) || _class);
77
93
  return SubSectionBlock;
78
94
  }, false);
79
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCbG9ja0Jhc2VGb3JtQWRqdXN0bWVudCIsInV4YXBMaWIiLCJTdWJTZWN0aW9uQmxvY2siLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsInByb3BlcnR5IiwidHlwZSIsImdyb3VwIiwiZGVmYXVsdFZhbHVlIiwiX2RlYzMiLCJhZ2dyZWdhdGlvbiIsIm11bHRpcGxlIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9CbG9ja0Jhc2UiLCJfdGhpcyIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfZGVzY3JpcHRvcjIiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsImluaXQiLCJfYkNvbm5lY3RlZCIsIl9hcHBseUZvcm1BZGp1c3RtZW50Iiwic0Zvcm1BZGp1c3RtZW50IiwiZ2V0Rm9ybUFkanVzdG1lbnQiLCJvVmlldyIsIl9nZXRTZWxlY3RlZFZpZXdDb250ZW50Iiwib1BhcmVudCIsIl9vUGFyZW50T2JqZWN0UGFnZVN1YlNlY3Rpb24iLCJvRm9ybUFkanVzdG1lbnRGaWVsZHMiLCJOb25lIiwiX2NvbXB1dGVGb3JtQWRqdXN0bWVudEZpZWxkcyIsIl9vTGF5b3V0Q29uZmlnIiwiX2FkanVzdEZvcm0iLCJzZXRNb2RlIiwic01vZGUiLCJzZXRQcm9wZXJ0eSIsImNvbm5lY3RUb01vZGVscyIsImdldEFnZ3JlZ2F0aW9uIiwiQmxvY2tCYXNlIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJTdWJTZWN0aW9uQmxvY2sudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYWdncmVnYXRpb24sIGRlZmluZVVJNUNsYXNzLCBwcm9wZXJ0eSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBCbG9ja0Jhc2UgZnJvbSBcInNhcC91eGFwL0Jsb2NrQmFzZVwiO1xuaW1wb3J0IHR5cGUgeyBCbG9ja0Jhc2VDb2x1bW5MYXlvdXQgfSBmcm9tIFwic2FwL3V4YXAvbGlicmFyeVwiO1xuaW1wb3J0IHV4YXBMaWIgZnJvbSBcInNhcC91eGFwL2xpYnJhcnlcIjtcbmNvbnN0IEJsb2NrQmFzZUZvcm1BZGp1c3RtZW50ID0gdXhhcExpYi5CbG9ja0Jhc2VGb3JtQWRqdXN0bWVudDtcbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5jb250cm9scy5TdWJTZWN0aW9uQmxvY2tcIilcbmNsYXNzIFN1YlNlY3Rpb25CbG9jayBleHRlbmRzIEJsb2NrQmFzZSB7XG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic2FwLnV4YXAuQmxvY2tCYXNlQ29sdW1uTGF5b3V0XCIsIGdyb3VwOiBcIkJlaGF2aW9yXCIsIGRlZmF1bHRWYWx1ZTogXCI0XCIgfSlcblx0Y29sdW1uTGF5b3V0ITogQmxvY2tCYXNlQ29sdW1uTGF5b3V0O1xuXG5cdEBhZ2dyZWdhdGlvbih7IHR5cGU6IFwic2FwLnVpLmNvcmUuQ29udHJvbFwiLCBtdWx0aXBsZTogZmFsc2UgfSlcblx0Y29udGVudCE6IENvbnRyb2w7XG5cblx0cHJpdmF0ZSBfb1BhcmVudE9iamVjdFBhZ2VTdWJTZWN0aW9uITogeyBfb0xheW91dENvbmZpZzogdW5rbm93biB9O1xuXG5cdGluaXQoKTogdm9pZCB7XG5cdFx0c3VwZXIuaW5pdCgpO1xuXHRcdCh0aGlzIGFzIHVua25vd24gYXMgeyBfYkNvbm5lY3RlZDogYm9vbGVhbiB9KS5fYkNvbm5lY3RlZCA9IHRydWU7XG5cdH1cblxuXHRfYXBwbHlGb3JtQWRqdXN0bWVudCgpOiB2b2lkIHtcblx0XHRjb25zdCBzRm9ybUFkanVzdG1lbnQgPSB0aGlzLmdldEZvcm1BZGp1c3RtZW50KCksXG5cdFx0XHRvVmlldyA9IHRoaXMuX2dldFNlbGVjdGVkVmlld0NvbnRlbnQoKSxcblx0XHRcdG9QYXJlbnQgPSB0aGlzLl9vUGFyZW50T2JqZWN0UGFnZVN1YlNlY3Rpb247XG5cdFx0bGV0IG9Gb3JtQWRqdXN0bWVudEZpZWxkcztcblxuXHRcdGlmIChzRm9ybUFkanVzdG1lbnQgIT09IEJsb2NrQmFzZUZvcm1BZGp1c3RtZW50Lk5vbmUgJiYgb1ZpZXcgJiYgb1BhcmVudCkge1xuXHRcdFx0b0Zvcm1BZGp1c3RtZW50RmllbGRzID0gdGhpcy5fY29tcHV0ZUZvcm1BZGp1c3RtZW50RmllbGRzKHNGb3JtQWRqdXN0bWVudCwgb1BhcmVudC5fb0xheW91dENvbmZpZyk7XG5cblx0XHRcdHRoaXMuX2FkanVzdEZvcm0ob1ZpZXcsIG9Gb3JtQWRqdXN0bWVudEZpZWxkcyk7XG5cdFx0fVxuXHR9XG5cblx0c2V0TW9kZShzTW9kZTogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5zZXRQcm9wZXJ0eShcIm1vZGVcIiwgc01vZGUpO1xuXHRcdC8vIE9QVElPTkFMOiB0aGlzLmludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvbW9kZVwiLCBzTW9kZSk7XG5cdH1cblxuXHRjb25uZWN0VG9Nb2RlbHMoKTogdm9pZCB7XG5cdFx0Ly8gVmlldyBpcyBhbHJlYWR5IGNvbm5lY3RlZCB0byB0aGUgVUk1IG1vZGVsIHRyZWUsIGhlbmNlIG5vIGV4dHJhIGxvZ2ljIHJlcXVpcmVkIGhlcmVcblx0fVxuXG5cdC8vLyBTdWJTZWN0aW9uQmxvY2sgdXNlIGFnZ3JlZ2F0aW9uIGluc3RlYWQgb2YgYSB2aWV3LCBpLmUuIHJldHVybiB0aGF0IGFzIHRoZSB2aWV3IGNvbnRlbnRcblx0X2dldFNlbGVjdGVkVmlld0NvbnRlbnQoKTogTWFuYWdlZE9iamVjdCB8IE1hbmFnZWRPYmplY3RbXSB8IG51bGwge1xuXHRcdHJldHVybiB0aGlzLmdldEFnZ3JlZ2F0aW9uKFwiY29udGVudFwiKTtcblx0fVxufVxuXG5pbnRlcmZhY2UgU3ViU2VjdGlvbkJsb2NrIHtcblx0X2FkanVzdEZvcm0odmlldzogTWFuYWdlZE9iamVjdCB8IE1hbmFnZWRPYmplY3RbXSwgZm9ybUZpZWxkczogdW5rbm93bik6IHZvaWQ7XG5cdF9jb21wdXRlRm9ybUFkanVzdG1lbnRGaWVsZHMoc0Zvcm1BZGp1c3RtZW50OiBzdHJpbmcsIF9vTGF5b3V0Q29uZmlnOiB1bmtub3duKTogdW5rbm93bjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgU3ViU2VjdGlvbkJsb2NrO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0VBTUEsTUFBTUEsdUJBQXVCLEdBQUdDLE9BQU8sQ0FBQ0QsdUJBQXVCO0VBQUMsSUFFMURFLGVBQWUsSUFBQUMsSUFBQSxHQURwQkMsY0FBYyxDQUFDLHNEQUFzRCxDQUFDLEVBQUFDLEtBQUEsR0FFckVDLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUUsZ0NBQWdDO0lBQUVDLEtBQUssRUFBRSxVQUFVO0lBQUVDLFlBQVksRUFBRTtFQUFJLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBRzFGQyxXQUFXLENBQUM7SUFBRUosSUFBSSxFQUFFLHFCQUFxQjtJQUFFSyxRQUFRLEVBQUU7RUFBTSxDQUFDLENBQUMsRUFBQVQsSUFBQSxDQUFBVSxNQUFBLElBQUFDLE9BQUEsMEJBQUFDLFVBQUE7SUFBQSxTQUFBYixnQkFBQTtNQUFBLElBQUFjLEtBQUE7TUFBQSxTQUFBQyxJQUFBLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxFQUFBQyxJQUFBLE9BQUFDLEtBQUEsQ0FBQUosSUFBQSxHQUFBSyxJQUFBLE1BQUFBLElBQUEsR0FBQUwsSUFBQSxFQUFBSyxJQUFBO1FBQUFGLElBQUEsQ0FBQUUsSUFBQSxJQUFBSixTQUFBLENBQUFJLElBQUE7TUFBQTtNQUFBTixLQUFBLEdBQUFELFVBQUEsQ0FBQVEsSUFBQSxVQUFBSCxJQUFBO01BQUFJLDBCQUFBLENBQUFSLEtBQUEsa0JBQUFTLFdBQUEsRUFBQVQsS0FBQTtNQUFBUSwwQkFBQSxDQUFBUixLQUFBLGFBQUFVLFlBQUEsRUFBQVYsS0FBQTtNQUFBLE9BQUFBLEtBQUE7SUFBQTtJQUFBVyxjQUFBLENBQUF6QixlQUFBLEVBQUFhLFVBQUE7SUFBQSxJQUFBYSxNQUFBLEdBQUExQixlQUFBLENBQUEyQixTQUFBO0lBQUFELE1BQUEsQ0FLOURFLElBQUksR0FBSixTQUFBQSxJQUFJQSxDQUFBLEVBQVM7TUFDWmYsVUFBQSxDQUFBYyxTQUFBLENBQU1DLElBQUksQ0FBQVAsSUFBQTtNQUNULElBQUksQ0FBeUNRLFdBQVcsR0FBRyxJQUFJO0lBQ2pFLENBQUM7SUFBQUgsTUFBQSxDQUVESSxvQkFBb0IsR0FBcEIsU0FBQUEsb0JBQW9CQSxDQUFBLEVBQVM7TUFDNUIsTUFBTUMsZUFBZSxHQUFHLElBQUksQ0FBQ0MsaUJBQWlCLENBQUMsQ0FBQztRQUMvQ0MsS0FBSyxHQUFHLElBQUksQ0FBQ0MsdUJBQXVCLENBQUMsQ0FBQztRQUN0Q0MsT0FBTyxHQUFHLElBQUksQ0FBQ0MsNEJBQTRCO01BQzVDLElBQUlDLHFCQUFxQjtNQUV6QixJQUFJTixlQUFlLEtBQUtqQyx1QkFBdUIsQ0FBQ3dDLElBQUksSUFBSUwsS0FBSyxJQUFJRSxPQUFPLEVBQUU7UUFDekVFLHFCQUFxQixHQUFHLElBQUksQ0FBQ0UsNEJBQTRCLENBQUNSLGVBQWUsRUFBRUksT0FBTyxDQUFDSyxjQUFjLENBQUM7UUFFbEcsSUFBSSxDQUFDQyxXQUFXLENBQUNSLEtBQUssRUFBRUkscUJBQXFCLENBQUM7TUFDL0M7SUFDRCxDQUFDO0lBQUFYLE1BQUEsQ0FFRGdCLE9BQU8sR0FBUCxTQUFBQSxPQUFPQSxDQUFDQyxLQUFhLEVBQVE7TUFDNUIsSUFBSSxDQUFDQyxXQUFXLENBQUMsTUFBTSxFQUFFRCxLQUFLLENBQUM7TUFDL0I7SUFDRCxDQUFDO0lBQUFqQixNQUFBLENBRURtQixlQUFlLEdBQWYsU0FBQUEsZUFBZUEsQ0FBQSxFQUFTO01BQ3ZCO0lBQUE7O0lBR0Q7SUFBQTtJQUFBbkIsTUFBQSxDQUNBUSx1QkFBdUIsR0FBdkIsU0FBQUEsdUJBQXVCQSxDQUFBLEVBQTJDO01BQ2pFLE9BQU8sSUFBSSxDQUFDWSxjQUFjLENBQUMsU0FBUyxDQUFDO0lBQ3RDLENBQUM7SUFBQSxPQUFBOUMsZUFBQTtFQUFBLEVBdkM0QitDLFNBQVMsR0FBQXhCLFdBQUEsR0FBQXlCLHlCQUFBLENBQUFwQyxPQUFBLENBQUFlLFNBQUEsbUJBQUF4QixLQUFBO0lBQUE4QyxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQTVCLFlBQUEsR0FBQXdCLHlCQUFBLENBQUFwQyxPQUFBLENBQUFlLFNBQUEsY0FBQW5CLEtBQUE7SUFBQXlDLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBeEMsT0FBQSxNQUFBRCxNQUFBO0VBQUEsT0ErQ3hCWCxlQUFlO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
95
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCbG9ja0Jhc2VGb3JtQWRqdXN0bWVudCIsInV4YXBMaWIiLCJTdWJTZWN0aW9uQmxvY2siLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsInByb3BlcnR5IiwidHlwZSIsImdyb3VwIiwiZGVmYXVsdFZhbHVlIiwiX2RlYzMiLCJhZ2dyZWdhdGlvbiIsIm11bHRpcGxlIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9CbG9ja0Jhc2UiLCJfdGhpcyIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfZGVzY3JpcHRvcjIiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsImluaXQiLCJfYkNvbm5lY3RlZCIsIl9hcHBseUZvcm1BZGp1c3RtZW50Iiwic0Zvcm1BZGp1c3RtZW50IiwiZ2V0Rm9ybUFkanVzdG1lbnQiLCJvVmlldyIsIl9nZXRTZWxlY3RlZFZpZXdDb250ZW50Iiwib1BhcmVudCIsIl9vUGFyZW50T2JqZWN0UGFnZVN1YlNlY3Rpb24iLCJvRm9ybUFkanVzdG1lbnRGaWVsZHMiLCJOb25lIiwiX2NvbXB1dGVGb3JtQWRqdXN0bWVudEZpZWxkcyIsIl9vTGF5b3V0Q29uZmlnIiwiX2FkanVzdEZvcm0iLCJvbkFmdGVyUmVuZGVyaW5nIiwib0V2ZW50Iiwic3ViU2VjdGlvbiIsInN1YlNlY3Rpb25CbG9ja3MiLCJnZXRCbG9ja3MiLCJmaWx0ZXIiLCJibG9jayIsImlzQSIsImNvbnRlbnQiLCJ2aWV3IiwiQ29tbW9uVXRpbHMiLCJnZXRUYXJnZXRWaWV3Iiwic2VjdGlvbkxheW91dCIsImdldFZpZXdEYXRhIiwidGFibGVDb250cm9sIiwiZ2V0VGFibGVEZWZpbml0aW9uIiwiY29udHJvbCIsInJvd0NvdW50TW9kZSIsImNyZWF0aW9uTW9kZSIsIkNyZWF0aW9uTW9kZSIsIkNyZWF0aW9uUm93IiwiaGFzU3R5bGVDbGFzcyIsImFkZFN0eWxlQ2xhc3MiLCJzZXRNb2RlIiwic01vZGUiLCJzZXRQcm9wZXJ0eSIsImNvbm5lY3RUb01vZGVscyIsImdldEFnZ3JlZ2F0aW9uIiwiQmxvY2tCYXNlIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJTdWJTZWN0aW9uQmxvY2sudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYWdncmVnYXRpb24sIGRlZmluZVVJNUNsYXNzLCBwcm9wZXJ0eSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB7IENyZWF0aW9uTW9kZSwgdHlwZSBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB0eXBlIFN1YlNlY3Rpb24gZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udHJvbHMvc2VjdGlvbi9TdWJTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IEJsb2NrQmFzZSBmcm9tIFwic2FwL3V4YXAvQmxvY2tCYXNlXCI7XG5pbXBvcnQgdHlwZSB7IEJsb2NrQmFzZUNvbHVtbkxheW91dCB9IGZyb20gXCJzYXAvdXhhcC9saWJyYXJ5XCI7XG5pbXBvcnQgdXhhcExpYiBmcm9tIFwic2FwL3V4YXAvbGlicmFyeVwiO1xuY29uc3QgQmxvY2tCYXNlRm9ybUFkanVzdG1lbnQgPSB1eGFwTGliLkJsb2NrQmFzZUZvcm1BZGp1c3RtZW50O1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLmNvbnRyb2xzLlN1YlNlY3Rpb25CbG9ja1wiKVxuY2xhc3MgU3ViU2VjdGlvbkJsb2NrIGV4dGVuZHMgQmxvY2tCYXNlIHtcblx0QHByb3BlcnR5KHsgdHlwZTogXCJzYXAudXhhcC5CbG9ja0Jhc2VDb2x1bW5MYXlvdXRcIiwgZ3JvdXA6IFwiQmVoYXZpb3JcIiwgZGVmYXVsdFZhbHVlOiBcIjRcIiB9KVxuXHRjb2x1bW5MYXlvdXQhOiBCbG9ja0Jhc2VDb2x1bW5MYXlvdXQ7XG5cblx0QGFnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAudWkuY29yZS5Db250cm9sXCIsIG11bHRpcGxlOiBmYWxzZSB9KVxuXHRjb250ZW50ITogQ29udHJvbDtcblxuXHRwcml2YXRlIF9vUGFyZW50T2JqZWN0UGFnZVN1YlNlY3Rpb24hOiB7IF9vTGF5b3V0Q29uZmlnOiB1bmtub3duIH07XG5cblx0aW5pdCgpOiB2b2lkIHtcblx0XHRzdXBlci5pbml0KCk7XG5cdFx0KHRoaXMgYXMgdW5rbm93biBhcyB7IF9iQ29ubmVjdGVkOiBib29sZWFuIH0pLl9iQ29ubmVjdGVkID0gdHJ1ZTtcblx0fVxuXG5cdF9hcHBseUZvcm1BZGp1c3RtZW50KCk6IHZvaWQge1xuXHRcdGNvbnN0IHNGb3JtQWRqdXN0bWVudCA9IHRoaXMuZ2V0Rm9ybUFkanVzdG1lbnQoKSxcblx0XHRcdG9WaWV3ID0gdGhpcy5fZ2V0U2VsZWN0ZWRWaWV3Q29udGVudCgpLFxuXHRcdFx0b1BhcmVudCA9IHRoaXMuX29QYXJlbnRPYmplY3RQYWdlU3ViU2VjdGlvbjtcblx0XHRsZXQgb0Zvcm1BZGp1c3RtZW50RmllbGRzO1xuXG5cdFx0aWYgKHNGb3JtQWRqdXN0bWVudCAhPT0gQmxvY2tCYXNlRm9ybUFkanVzdG1lbnQuTm9uZSAmJiBvVmlldyAmJiBvUGFyZW50KSB7XG5cdFx0XHRvRm9ybUFkanVzdG1lbnRGaWVsZHMgPSB0aGlzLl9jb21wdXRlRm9ybUFkanVzdG1lbnRGaWVsZHMoc0Zvcm1BZGp1c3RtZW50LCBvUGFyZW50Ll9vTGF5b3V0Q29uZmlnKTtcblxuXHRcdFx0dGhpcy5fYWRqdXN0Rm9ybShvVmlldywgb0Zvcm1BZGp1c3RtZW50RmllbGRzKTtcblx0XHR9XG5cdH1cblxuXHRvbkFmdGVyUmVuZGVyaW5nKG9FdmVudDogalF1ZXJ5LkV2ZW50KTogdm9pZCB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgc3ViU2VjdGlvbiA9IHRoaXMuX29QYXJlbnRPYmplY3RQYWdlU3ViU2VjdGlvbiBhcyB1bmtub3duIGFzIFN1YlNlY3Rpb247XG5cdFx0Y29uc3Qgc3ViU2VjdGlvbkJsb2NrcyA9IHN1YlNlY3Rpb25cblx0XHRcdC5nZXRCbG9ja3MoKVxuXHRcdFx0LmZpbHRlcigoYmxvY2spID0+IGJsb2NrLmlzQShcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5jb250cm9scy5TdWJTZWN0aW9uQmxvY2tcIikpO1xuXHRcdGlmIChzdWJTZWN0aW9uQmxvY2tzLmxlbmd0aCA9PT0gMSAmJiB0aGlzLmNvbnRlbnQgJiYgdGhpcy5jb250ZW50LmlzQTxUYWJsZUFQST4oXCJzYXAuZmUubWFjcm9zLlRhYmxlXCIpKSB7XG5cdFx0XHRjb25zdCB2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0aGlzKTtcblx0XHRcdGNvbnN0IHNlY3Rpb25MYXlvdXQgPSAodmlldz8uZ2V0Vmlld0RhdGEoKSBhcyBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncyk/LnNlY3Rpb25MYXlvdXQ7XG5cdFx0XHRjb25zdCB0YWJsZUNvbnRyb2wgPSB0aGlzLmNvbnRlbnQuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbDtcblxuXHRcdFx0aWYgKFxuXHRcdFx0XHR0YWJsZUNvbnRyb2wucm93Q291bnRNb2RlID09PSBcIkF1dG9cIiAmJlxuXHRcdFx0XHQvLyBFeGNsdWRlIENyZWF0aW9uUm93IG1vZGUgdW5sZXNzIHNlY3Rpb25MYXlvdXQgaXMgVGFiczogdGhlIGZpdC1jb250YWluZXIgc3R5bGUgY3JlYXRlcyB3aGl0ZXNwYWNlIGluIHRoZSBzdWJzZWN0aW9uIGluIGRpc3BsYXkgbW9kZSB3aGVuIENyZWF0aW9uUm93IGlzIHVzZWQgaW4gVGFibGVDcmVhdGlvbk9wdGlvbnNcblx0XHRcdFx0KHRhYmxlQ29udHJvbC5jcmVhdGlvbk1vZGUgIT09IENyZWF0aW9uTW9kZS5DcmVhdGlvblJvdyB8fCBzZWN0aW9uTGF5b3V0ID09PSBcIlRhYnNcIikgJiZcblx0XHRcdFx0IXN1YlNlY3Rpb24uaGFzU3R5bGVDbGFzcyhcInNhcFV4QVBPYmplY3RQYWdlU3ViU2VjdGlvbkZpdENvbnRhaW5lclwiKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHN1YlNlY3Rpb24uYWRkU3R5bGVDbGFzcyhcInNhcFV4QVBPYmplY3RQYWdlU3ViU2VjdGlvbkZpdENvbnRhaW5lclwiKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHN1cGVyLm9uQWZ0ZXJSZW5kZXJpbmcob0V2ZW50KTtcblx0fVxuXG5cdHNldE1vZGUoc01vZGU6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMuc2V0UHJvcGVydHkoXCJtb2RlXCIsIHNNb2RlKTtcblx0XHQvLyBPUFRJT05BTDogdGhpcy5pbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL21vZGVcIiwgc01vZGUpO1xuXHR9XG5cblx0Y29ubmVjdFRvTW9kZWxzKCk6IHZvaWQge1xuXHRcdC8vIFZpZXcgaXMgYWxyZWFkeSBjb25uZWN0ZWQgdG8gdGhlIFVJNSBtb2RlbCB0cmVlLCBoZW5jZSBubyBleHRyYSBsb2dpYyByZXF1aXJlZCBoZXJlXG5cdH1cblxuXHQvLy8gU3ViU2VjdGlvbkJsb2NrIHVzZSBhZ2dyZWdhdGlvbiBpbnN0ZWFkIG9mIGEgdmlldywgaS5lLiByZXR1cm4gdGhhdCBhcyB0aGUgdmlldyBjb250ZW50XG5cdF9nZXRTZWxlY3RlZFZpZXdDb250ZW50KCk6IE1hbmFnZWRPYmplY3QgfCBNYW5hZ2VkT2JqZWN0W10gfCBudWxsIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRBZ2dyZWdhdGlvbihcImNvbnRlbnRcIik7XG5cdH1cbn1cblxuaW50ZXJmYWNlIFN1YlNlY3Rpb25CbG9jayB7XG5cdF9hZGp1c3RGb3JtKHZpZXc6IE1hbmFnZWRPYmplY3QgfCBNYW5hZ2VkT2JqZWN0W10sIGZvcm1GaWVsZHM6IHVua25vd24pOiB2b2lkO1xuXHRfY29tcHV0ZUZvcm1BZGp1c3RtZW50RmllbGRzKHNGb3JtQWRqdXN0bWVudDogc3RyaW5nLCBfb0xheW91dENvbmZpZzogdW5rbm93bik6IHVua25vd247XG59XG5cbmV4cG9ydCBkZWZhdWx0IFN1YlNlY3Rpb25CbG9jaztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFVQSxNQUFNQSx1QkFBdUIsR0FBR0MsT0FBTyxDQUFDRCx1QkFBdUI7RUFBQyxJQUUxREUsZUFBZSxJQUFBQyxJQUFBLEdBRHBCQyxjQUFjLENBQUMsc0RBQXNELENBQUMsRUFBQUMsS0FBQSxHQUVyRUMsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRSxnQ0FBZ0M7SUFBRUMsS0FBSyxFQUFFLFVBQVU7SUFBRUMsWUFBWSxFQUFFO0VBQUksQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHMUZDLFdBQVcsQ0FBQztJQUFFSixJQUFJLEVBQUUscUJBQXFCO0lBQUVLLFFBQVEsRUFBRTtFQUFNLENBQUMsQ0FBQyxFQUFBVCxJQUFBLENBQUFVLE1BQUEsSUFBQUMsT0FBQSwwQkFBQUMsVUFBQTtJQUFBLFNBQUFiLGdCQUFBO01BQUEsSUFBQWMsS0FBQTtNQUFBLFNBQUFDLElBQUEsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLEVBQUFDLElBQUEsT0FBQUMsS0FBQSxDQUFBSixJQUFBLEdBQUFLLElBQUEsTUFBQUEsSUFBQSxHQUFBTCxJQUFBLEVBQUFLLElBQUE7UUFBQUYsSUFBQSxDQUFBRSxJQUFB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