@sapui5/sap.fe.templates 1.138.0 → 1.140.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/templates/.library +1 -1
  3. package/src/sap/fe/templates/AnalyticalListPage/manifest.json +1 -1
  4. package/src/sap/fe/templates/ListComponent.js +4 -1
  5. package/src/sap/fe/templates/ListComponent.ts +4 -0
  6. package/src/sap/fe/templates/ListReport/ListReport.view.xml +93 -62
  7. package/src/sap/fe/templates/ListReport/ListReportController.controller.js +57 -5
  8. package/src/sap/fe/templates/ListReport/ListReportController.controller.ts +58 -4
  9. package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.js +36 -8
  10. package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.ts +25 -11
  11. package/src/sap/fe/templates/ListReport/designtime/ListReport.designtime.js +3 -1
  12. package/src/sap/fe/templates/ListReport/designtime/ListReport.designtime.ts +2 -0
  13. package/src/sap/fe/templates/ListReport/manifest.json +1 -1
  14. package/src/sap/fe/templates/ObjectPage/Component.js +17 -22
  15. package/src/sap/fe/templates/ObjectPage/Component.ts +9 -9
  16. package/src/sap/fe/templates/ObjectPage/ObjectPage.view.xml +4 -5
  17. package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +11 -54
  18. package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +13 -56
  19. package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.js +21 -17
  20. package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.ts +19 -14
  21. package/src/sap/fe/templates/ObjectPage/card/BaseCardContentProvider.js +1 -2
  22. package/src/sap/fe/templates/ObjectPage/card/BaseCardContentProvider.ts +0 -1
  23. package/src/sap/fe/templates/ObjectPage/card/Generator.js +1 -2
  24. package/src/sap/fe/templates/ObjectPage/card/Generator.ts +0 -1
  25. package/src/sap/fe/templates/ObjectPage/card/facets/HeaderContent.js +1 -2
  26. package/src/sap/fe/templates/ObjectPage/card/facets/HeaderContent.ts +0 -1
  27. package/src/sap/fe/templates/ObjectPage/card/facets/HeaderTitle.js +1 -2
  28. package/src/sap/fe/templates/ObjectPage/card/facets/HeaderTitle.ts +0 -1
  29. package/src/sap/fe/templates/ObjectPage/components/CollaborationDraft.js +16 -6
  30. package/src/sap/fe/templates/ObjectPage/components/CollaborationDraft.tsx +15 -5
  31. package/src/sap/fe/templates/ObjectPage/components/DraftToggle.js +30 -15
  32. package/src/sap/fe/templates/ObjectPage/components/DraftToggle.tsx +14 -4
  33. package/src/sap/fe/templates/ObjectPage/designtime/ObjectPage.designtime.js +3 -1
  34. package/src/sap/fe/templates/ObjectPage/designtime/ObjectPage.designtime.ts +2 -0
  35. package/src/sap/fe/templates/ObjectPage/manifest.json +1 -1
  36. package/src/sap/fe/templates/ObjectPage/overrides/MessageHandler.js +15 -1
  37. package/src/sap/fe/templates/ObjectPage/overrides/MessageHandler.ts +16 -0
  38. package/src/sap/fe/templates/ObjectPage/view/fragments/Actions.fragment.xml +25 -6
  39. package/src/sap/fe/templates/ObjectPage/view/fragments/Heading.fragment.xml +2 -2
  40. package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderForm.fragment.xml +7 -2
  41. package/src/sap/fe/templates/library.js +1 -1
  42. package/src/sap/fe/templates/messagebundle.properties +5 -6
  43. package/src/sap/fe/templates/messagebundle_ar.properties +2 -2
  44. package/src/sap/fe/templates/messagebundle_bg.properties +2 -2
  45. package/src/sap/fe/templates/messagebundle_ca.properties +1 -1
  46. package/src/sap/fe/templates/messagebundle_cnr.properties +2 -2
  47. package/src/sap/fe/templates/messagebundle_cs.properties +1 -1
  48. package/src/sap/fe/templates/messagebundle_da.properties +2 -2
  49. package/src/sap/fe/templates/messagebundle_de.properties +1 -1
  50. package/src/sap/fe/templates/messagebundle_en.properties +2 -2
  51. package/src/sap/fe/templates/messagebundle_en_GB.properties +2 -2
  52. package/src/sap/fe/templates/messagebundle_en_US_saprigi.properties +2 -4
  53. package/src/sap/fe/templates/messagebundle_es.properties +2 -2
  54. package/src/sap/fe/templates/messagebundle_es_MX.properties +1 -1
  55. package/src/sap/fe/templates/messagebundle_et.properties +1 -1
  56. package/src/sap/fe/templates/messagebundle_fi.properties +2 -2
  57. package/src/sap/fe/templates/messagebundle_fr.properties +1 -1
  58. package/src/sap/fe/templates/messagebundle_fr_CA.properties +3 -3
  59. package/src/sap/fe/templates/messagebundle_hi.properties +1 -1
  60. package/src/sap/fe/templates/messagebundle_hr.properties +2 -2
  61. package/src/sap/fe/templates/messagebundle_hu.properties +2 -2
  62. package/src/sap/fe/templates/messagebundle_id.properties +1 -1
  63. package/src/sap/fe/templates/messagebundle_it.properties +2 -2
  64. package/src/sap/fe/templates/messagebundle_ja.properties +1 -1
  65. package/src/sap/fe/templates/messagebundle_kk.properties +1 -1
  66. package/src/sap/fe/templates/messagebundle_ko.properties +1 -1
  67. package/src/sap/fe/templates/messagebundle_lt.properties +1 -1
  68. package/src/sap/fe/templates/messagebundle_lv.properties +2 -2
  69. package/src/sap/fe/templates/messagebundle_mk.properties +1 -1
  70. package/src/sap/fe/templates/messagebundle_no.properties +1 -1
  71. package/src/sap/fe/templates/messagebundle_pl.properties +1 -1
  72. package/src/sap/fe/templates/messagebundle_pt.properties +1 -1
  73. package/src/sap/fe/templates/messagebundle_pt_PT.properties +1 -1
  74. package/src/sap/fe/templates/messagebundle_ro.properties +1 -1
  75. package/src/sap/fe/templates/messagebundle_sh.properties +2 -2
  76. package/src/sap/fe/templates/messagebundle_sk.properties +2 -2
  77. package/src/sap/fe/templates/messagebundle_sl.properties +1 -1
  78. package/src/sap/fe/templates/messagebundle_sr.properties +2 -2
  79. package/src/sap/fe/templates/messagebundle_sv.properties +1 -1
  80. package/src/sap/fe/templates/messagebundle_th.properties +2 -2
  81. package/src/sap/fe/templates/messagebundle_tr.properties +1 -1
  82. package/src/sap/fe/templates/messagebundle_uk.properties +1 -1
  83. package/src/sap/fe/templates/messagebundle_vi.properties +1 -1
  84. package/src/sap/fe/templates/messagebundle_zh_CN.properties +1 -1
  85. package/src/sap/fe/templates/messagebundle_zh_TW.properties +1 -1
@@ -2,7 +2,7 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonUtils", "sap/fe/core/PageController", "sap/fe/core/controllerextensions/BusyLocker", "sap/fe/core/controllerextensions/IntentBasedNavigation", "sap/fe/core/controllerextensions/InternalIntentBasedNavigation", "sap/fe/core/controllerextensions/InternalRouting", "sap/fe/core/controllerextensions/MessageHandler", "sap/fe/core/controllerextensions/PageReady", "sap/fe/core/controllerextensions/Paginator", "sap/fe/core/controllerextensions/Placeholder", "sap/fe/core/controllerextensions/Share", "sap/fe/core/controllerextensions/ViewState", "sap/fe/core/controllerextensions/cards/CollaborationManager", "sap/fe/core/controllerextensions/editFlow/draft", "sap/fe/core/controllerextensions/editFlow/editFlowConstants", "sap/fe/core/controllerextensions/routing/NavigationReason", "sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/ResourceModelHelper", "sap/fe/core/library", "sap/fe/macros/CommonHelper", "sap/fe/macros/table/TableHelper", "sap/fe/macros/table/Utils", "sap/fe/navigation/SelectionVariant", "sap/fe/templates/ObjectPage/ExtensionAPI", "sap/fe/templates/ObjectPage/components/CollaborationDiscardDialog", "sap/fe/templates/TableScroller", "sap/m/InstanceManager", "sap/m/Link", "sap/m/MessageBox", "sap/ui/Device", "sap/ui/core/Element", "sap/ui/core/Lib", "sap/ui/core/Messaging", "sap/ui/core/message/Message", "sap/ui/core/message/MessageType", "sap/ui/core/mvc/OverrideExecution", "./overrides/CollaborationManager", "./overrides/IntentBasedNavigation", "./overrides/InternalRouting", "./overrides/MessageHandler", "./overrides/Paginator", "./overrides/Share", "./overrides/ViewState"], function (Log, merge, ClassSupport, ActionRuntime, CommonUtils, PageController, BusyLocker, IntentBasedNavigation, InternalIntentBasedNavigation, InternalRouting, MessageHandler, PageReady, Paginator, Placeholder, Share, ViewState, CollaborationManager, draft, UiModelConstants, NavigationReason, ConfirmRecommendationDialog, ModelHelper, ResourceModelHelper, FELibrary, CommonHelper, TableHelper, TableUtils, SelectionVariant, ExtensionAPI, CollaborationDiscard, TableScroller, InstanceManager, Link, MessageBox, Device, UI5Element, Library, Messaging, Message, MessageType, OverrideExecution, CollaborationManagerOverride, IntentBasedNavigationOverride, InternalRoutingOverride, MessageHandlerOverride, PaginatorOverride, ShareOverrides, ViewStateOverrides) {
5
+ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonUtils", "sap/fe/core/PageController", "sap/fe/core/controllerextensions/BusyLocker", "sap/fe/core/controllerextensions/IntentBasedNavigation", "sap/fe/core/controllerextensions/InternalIntentBasedNavigation", "sap/fe/core/controllerextensions/InternalRouting", "sap/fe/core/controllerextensions/MessageHandler", "sap/fe/core/controllerextensions/PageReady", "sap/fe/core/controllerextensions/Paginator", "sap/fe/core/controllerextensions/Placeholder", "sap/fe/core/controllerextensions/Share", "sap/fe/core/controllerextensions/ViewState", "sap/fe/core/controllerextensions/cards/CollaborationManager", "sap/fe/core/controllerextensions/editFlow/draft", "sap/fe/core/controllerextensions/editFlow/editFlowConstants", "sap/fe/core/controllerextensions/routing/NavigationReason", "sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/ResourceModelHelper", "sap/fe/core/library", "sap/fe/macros/CommonHelper", "sap/fe/macros/table/TableHelper", "sap/fe/macros/table/Utils", "sap/fe/navigation/SelectionVariant", "sap/fe/templates/ObjectPage/ExtensionAPI", "sap/fe/templates/ObjectPage/components/CollaborationDiscardDialog", "sap/fe/templates/TableScroller", "sap/m/InstanceManager", "sap/m/MessageBox", "sap/ui/Device", "sap/ui/core/Element", "sap/ui/core/Lib", "sap/ui/core/Messaging", "sap/ui/core/message/Message", "sap/ui/core/message/MessageType", "sap/ui/core/mvc/OverrideExecution", "./overrides/CollaborationManager", "./overrides/IntentBasedNavigation", "./overrides/InternalRouting", "./overrides/MessageHandler", "./overrides/Paginator", "./overrides/Share", "./overrides/ViewState"], function (Log, merge, ClassSupport, ActionRuntime, CommonUtils, PageController, BusyLocker, IntentBasedNavigation, InternalIntentBasedNavigation, InternalRouting, MessageHandler, PageReady, Paginator, Placeholder, Share, ViewState, CollaborationManager, draft, UiModelConstants, NavigationReason, ConfirmRecommendationDialog, ModelHelper, ResourceModelHelper, FELibrary, CommonHelper, TableHelper, TableUtils, SelectionVariant, ExtensionAPI, CollaborationDiscard, TableScroller, InstanceManager, MessageBox, Device, UI5Element, Library, Messaging, Message, MessageType, OverrideExecution, CollaborationManagerOverride, IntentBasedNavigationOverride, InternalRoutingOverride, MessageHandlerOverride, PaginatorOverride, ShareOverrides, ViewStateOverrides) {
6
6
  "use strict";
7
7
 
8
8
  var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor10;
@@ -209,8 +209,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
209
209
  }
210
210
  },
211
211
  closeCollaborationStrip: function () {
212
- this.getView().byId("fe::ObjectPageDynamicHeaderTitle::SnappedCollaborationStrip")?.setVisible(false);
213
- this.getView().byId("fe::ObjectPageDynamicHeaderTitle::ExpandedCollaborationStrip")?.setVisible(false);
212
+ this.getView().getModel("ui").setProperty("/showCollaborationStrip", false);
214
213
  },
215
214
  closeOPMessageStrip: function () {
216
215
  const view = this.getView();
@@ -304,6 +303,10 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
304
303
  *
305
304
  */;
306
305
  _proto._fnShowOPMessage = function _fnShowOPMessage() {
306
+ if (this.getAppComponent().isSuspended()) {
307
+ // If the app is suspended, we do not show the messages (the MessageModel contains messages from the active app).
308
+ return;
309
+ }
307
310
  const extensionAPI = this.getExtensionAPI();
308
311
  const view = this.getView();
309
312
  const messages = Messaging?.getMessageModel().getData().filter(message => {
@@ -1143,6 +1146,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
1143
1146
  }).then(() => tableBinding));
1144
1147
  }
1145
1148
  });
1149
+ const isSkipBindingToView = skipBindingToView;
1150
+ const isStandardSave = isSkipBindingToView && typeof isSkipBindingToView == "object" && isSkipBindingToView.getSource().getCommand() === "Save";
1146
1151
  const bindings = await Promise.all(awaitCreateDocuments);
1147
1152
  // We need to either reject or resolve a promise here and return it since this save
1148
1153
  // function is not only called when pressing the save button in the footer, but also
@@ -1154,7 +1159,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
1154
1159
  bExecuteSideEffectsOnError: executeSideEffectsOnError,
1155
1160
  bindings: bindings,
1156
1161
  mergePatchDraft: this.mergePatchDraft,
1157
- skipBindingToView
1162
+ skipBindingToView,
1163
+ isStandardSave
1158
1164
  });
1159
1165
  } catch (error) {
1160
1166
  // If the saveDocument in editFlow returns errors we need
@@ -1428,55 +1434,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
1428
1434
  this.paginator.initialize(listBinding, context);
1429
1435
  }
1430
1436
  }
1431
- }
1432
-
1433
- /**
1434
- * Method to update the Breadcrumbs' links and the corresponding href when the context changes.
1435
- * @param source Breadcrumbs control
1436
- * @returns A Promise that is resolved when the Breadcrumbs content is filled properly
1437
- * @private
1438
- */;
1439
- _proto.setBreadcrumbLinks = async function setBreadcrumbLinks(source) {
1440
- const context = source.getBindingContext(),
1441
- appComponent = this.getAppComponent(),
1442
- promises = [],
1443
- newPath = context?.getPath(),
1444
- pathParts = newPath?.split("/") ?? [],
1445
- metaModel = appComponent && appComponent.getMetaModel();
1446
- let path = "";
1447
- try {
1448
- pathParts.shift();
1449
- pathParts.splice(-1, 1);
1450
- pathParts.forEach(function (pathPart) {
1451
- path += `/${pathPart}`;
1452
- if (!appComponent.getRouter().getRouteInfoByHash(path)) {
1453
- return;
1454
- }
1455
- const rootViewController = appComponent.getRootViewController();
1456
- const parameterPath = metaModel.getMetaPath(path);
1457
- const resultContext = metaModel.getObject(`${parameterPath}/@com.sap.vocabularies.Common.v1.ResultContext`);
1458
- if (resultContext) {
1459
- // We dont need to create a breadcrumb for Parameter path
1460
- return;
1461
- }
1462
- promises.push(rootViewController.getTitleInfoFromPath(path));
1463
- });
1464
- const titleHierarchyInfos = await Promise.all(promises);
1465
- let hierarchyPosition, link;
1466
- for (const titleHierarchyInfo of titleHierarchyInfos) {
1467
- hierarchyPosition = titleHierarchyInfos.indexOf(titleHierarchyInfo);
1468
- link = source.getLinks()[hierarchyPosition] ? source.getLinks()[hierarchyPosition] : new Link();
1469
- //sCurrentEntity is a fallback value in case of empty title
1470
- link.setText(titleHierarchyInfo.subtitle || titleHierarchyInfo.title);
1471
- //We apply an additional encodeURI in case of special characters (ie "/") used in the url through the semantic keys
1472
- link.setHref(encodeURI(titleHierarchyInfo.intent));
1473
- if (!source.getLinks()[hierarchyPosition]) {
1474
- source.addLink(link);
1475
- }
1476
- }
1477
- } catch (error) {
1478
- Log.error("Error while setting the breadcrumb links:" + error);
1479
- }
1480
1437
  };
1481
1438
  _proto._checkDataPointTitleForExternalNavigation = function _checkDataPointTitleForExternalNavigation() {
1482
1439
  const oView = this.getView();
@@ -1614,4 +1571,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
1614
1571
  }), _applyDecoratedDescriptor(_class2.prototype, "getExtensionAPI", [_dec12, _dec13], Object.getOwnPropertyDescriptor(_class2.prototype, "getExtensionAPI"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onPageReady", [_dec14, _dec15], Object.getOwnPropertyDescriptor(_class2.prototype, "onPageReady"), _class2.prototype), _class2)) || _class);
1615
1572
  return ObjectPageController;
1616
1573
  }, false);
1617
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQcm9ncmFtbWluZ01vZGVsIiwiRkVMaWJyYXJ5IiwiT2JqZWN0UGFnZUNvbnRyb2xsZXIiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsInVzaW5nRXh0ZW5zaW9uIiwiUGxhY2Vob2xkZXIiLCJfZGVjMyIsIlNoYXJlIiwib3ZlcnJpZGUiLCJTaGFyZU92ZXJyaWRlcyIsIl9kZWM0IiwiSW50ZXJuYWxSb3V0aW5nIiwiSW50ZXJuYWxSb3V0aW5nT3ZlcnJpZGUiLCJfZGVjNSIsIlBhZ2luYXRvciIsIlBhZ2luYXRvck92ZXJyaWRlIiwiX2RlYzYiLCJNZXNzYWdlSGFuZGxlciIsIk1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUiLCJfZGVjNyIsIkludGVudEJhc2VkTmF2aWdhdGlvbiIsIkludGVudEJhc2VkTmF2aWdhdGlvbk92ZXJyaWRlIiwiX2RlYzgiLCJDb2xsYWJvcmF0aW9uTWFuYWdlciIsIkNvbGxhYm9yYXRpb25NYW5hZ2VyT3ZlcnJpZGUiLCJfZGVjOSIsIkludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0TmF2aWdhdGlvbk1vZGUiLCJiSXNTdGlja3lFZGl0TW9kZSIsImdldFZpZXciLCJnZXRDb250cm9sbGVyIiwiZ2V0U3RpY2t5RWRpdE1vZGUiLCJ1bmRlZmluZWQiLCJfZGVjMTAiLCJWaWV3U3RhdGUiLCJWaWV3U3RhdGVPdmVycmlkZXMiLCJfZGVjMTEiLCJQYWdlUmVhZHkiLCJpc0NvbnRleHRFeHBlY3RlZCIsIl9kZWMxMiIsInB1YmxpY0V4dGVuc2lvbiIsIl9kZWMxMyIsImZpbmFsRXh0ZW5zaW9uIiwiX2RlYzE0IiwiX2RlYzE1IiwiZXh0ZW5zaWJsZSIsIk92ZXJyaWRlRXhlY3V0aW9uIiwiQWZ0ZXIiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX1BhZ2VDb250cm9sbGVyIiwiX3RoaXMiLCJfbGVuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiX2Rlc2NyaXB0b3I3IiwiX2Rlc2NyaXB0b3I4IiwiX2Rlc2NyaXB0b3I5IiwiX2Rlc2NyaXB0b3IxMCIsImNsZWFyVGl0bGVIaWVyYXJjaHlDYWNoZVNldFVwIiwibWVyZ2VQYXRjaERyYWZ0IiwiaGFuZGxlcnMiLCJvblByaW1hcnlBY3Rpb24iLCJvQ29udHJvbGxlciIsIm9WaWV3Iiwib0NvbnRleHQiLCJzQWN0aW9uTmFtZSIsIm1QYXJhbWV0ZXJzIiwibUNvbmRpdGlvbnMiLCJpVmlld0xldmVsIiwiZ2V0Vmlld0RhdGEiLCJ2aWV3TGV2ZWwiLCJwb3NpdGl2ZUFjdGlvblZpc2libGUiLCJwb3NpdGl2ZUFjdGlvbkVuYWJsZWQiLCJvbkNhbGxBY3Rpb24iLCJlZGl0QWN0aW9uVmlzaWJsZSIsImVkaXRBY3Rpb25FbmFibGVkIiwiX2VkaXREb2N1bWVudCIsIkNvbW1vblV0aWxzIiwiZ2V0SXNFZGl0YWJsZSIsIl9zYXZlRG9jdW1lbnQiLCJfYXBwbHlEb2N1bWVudCIsIm9uVGFibGVDb250ZXh0Q2hhbmdlIiwiZXZlbnQiLCJ0YWJsZUFQSSIsImdldFNvdXJjZSIsInRhYmxlIiwiY29udGVudCIsImN1cnJlbnRBY3Rpb25Qcm9taXNlIiwiZWRpdEZsb3ciLCJnZXRDdXJyZW50QWN0aW9uUHJvbWlzZSIsInRhYmxlQ29udGV4dHMiLCJfZ2V0VGFibGVCaW5kaW5nIiwiZ2V0Q3VycmVudENvbnRleHRzIiwiYWN0aW9uUmVzcG9uc2UiLCJjb250cm9sSWQiLCJnZXRJZCIsImFjdGlvbkRhdGEiLCJvRGF0YSIsImtleXMiLCJuZXdJdGVtIiwiZmluZEluZGV4IiwidGFibGVDb250ZXh0IiwidGFibGVEYXRhIiwiZ2V0T2JqZWN0IiwiZXZlcnkiLCJrZXkiLCJkaWFsb2ciLCJJbnN0YW5jZU1hbmFnZXIiLCJnZXRPcGVuRGlhbG9ncyIsImZpbmQiLCJkYXRhIiwiYXR0YWNoRXZlbnRPbmNlIiwiZm9jdXNSb3ciLCJkZWxldGVDdXJyZW50QWN0aW9uUHJvbWlzZSIsImUiLCJMb2ciLCJlcnJvciIsIm1lc3NhZ2VCdXR0b24iLCJmaXJlTW9kZWxDb250ZXh0Q2hhbmdlIiwic3luY1Rhc2siLCJpbnZva2VBY3Rpb24iLCJ0aGVuIiwiX3Nob3dNZXNzYWdlUG9wb3ZlciIsImJpbmQiLCJjYXRjaCIsIm9uRGF0YVBvaW50VGl0bGVQcmVzc2VkIiwib1NvdXJjZSIsIm9NYW5pZmVzdE91dGJvdW5kIiwic0NvbnRyb2xDb25maWciLCJzQ29sbGVjdGlvblBhdGgiLCJKU09OIiwicGFyc2UiLCJvVGFyZ2V0SW5mbyIsIm9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInNNZXRhUGF0aCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiZ2V0TWV0YVBhdGgiLCJnZXRQYXRoIiwiYVNlbWFudGljT2JqZWN0TWFwcGluZyIsImdldFNlbWFudGljT2JqZWN0TWFwcGluZyIsImFOYXZpZ2F0aW9uRGF0YSIsIl9nZXRDaGFydENvbnRleHREYXRhIiwiYWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzIiwibWFwIiwib05hdmlnYXRpb25EYXRhIiwibWV0YVBhdGgiLCJwYXJhbWV0ZXJzIiwib1BhcmFtcyIsIl9pbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJnZXRPdXRib3VuZFBhcmFtcyIsIk9iamVjdCIsImN1c3RvbURhdGEiLCJnZXRDdXN0b21EYXRhIiwiZ2V0S2V5IiwiX2dldEltcGxpY2l0U2VtYW50aWNPYmplY3RNYXBwaW5nRm9yRGF0YVBvaW50cyIsImdldFZhbHVlIiwic2VtYW50aWNPYmplY3QiLCJhY3Rpb24iLCJuYXZpZ2F0ZSIsIm5hdmlnYXRpb25Db250ZXh0cyIsInNlbWFudGljT2JqZWN0TWFwcGluZyIsIm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZCIsInNPdXRib3VuZFRhcmdldCIsInNDcmVhdGVQYXRoIiwib25OYXZpZ2F0ZUNoYW5nZSIsIm9FdmVudCIsImdldEV4dGVuc2lvbkFQSSIsInVwZGF0ZUFwcFN0YXRlIiwiYlNlY3Rpb25OYXZpZ2F0ZWQiLCJvSW50ZXJuYWxNb2RlbENvbnRleHQiLCJzZWN0aW9uTGF5b3V0IiwiZ2V0UHJvcGVydHkiLCJvU3ViU2VjdGlvbiIsImdldFBhcmFtZXRlciIsIl91cGRhdGVGb2N1c0luRWRpdE1vZGUiLCJvblZhcmlhbnRTZWxlY3RlZCIsIm9uVmFyaWFudFNhdmVkIiwic2V0VGltZW91dCIsIm5hdmlnYXRlVG9TdWJTZWN0aW9uIiwidkRldGFpbENvbmZpZyIsIm9EZXRhaWxDb25maWciLCJvT2JqZWN0UGFnZSIsImJ5SWQiLCJvU2VjdGlvbiIsInNlY3Rpb25JZCIsInN1YlNlY3Rpb25JZCIsImdldFN1YlNlY3Rpb25zIiwiZ2V0UGFyZW50IiwiZ2V0VmlzaWJsZSIsInNUaXRsZSIsImdldFJlc291cmNlTW9kZWwiLCJnZXRUZXh0IiwiZW50aXR5U2V0IiwiTWVzc2FnZUJveCIsInNldFNlbGVjdGVkU2VjdGlvbiIsImZpcmVOYXZpZ2F0ZSIsInNlY3Rpb24iLCJzdWJTZWN0aW9uIiwiY2xvc2VDb2xsYWJvcmF0aW9uU3RyaXAiLCJzZXRWaXNpYmxlIiwiY2xvc2VPUE1lc3NhZ2VTdHJpcCIsInZpZXciLCJiSXNJbkVkaXRNb2RlIiwiaW50ZXJuYWxNb2RlbCIsIm1lc3NhZ2VzdHJpcEludGVybmFsTW9kZWxDb250ZXh0IiwiYmluZENvbnRleHQiLCJfZ2V0TWVzc2FnZVN0cmlwQmluZGluZ0NvbnRleHRQYXRoIiwiZ2V0Qm91bmRDb250ZXh0IiwiY29udGV4dEJvdW5kTWVzc2FnZXMiLCJNZXNzYWdpbmciLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXREYXRhIiwiZmlsdGVyIiwibWVzc2FnZSIsImdldFRhcmdldHMiLCJnZXRQZXJzaXN0ZW50IiwicmVtb3ZlTWVzc2FnZXMiLCJzZXRQcm9wZXJ0eSIsImhpZGVNZXNzYWdlIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJzSWQiLCJtQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMiLCJFeHRlbnNpb25BUEkiLCJleHRlbnNpb25BUEkiLCJvbkluaXQiLCJfZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2wiLCJwYWdlIiwidmlzaWJpbGl0eSIsIml0ZW1zIiwiX2dldEJhdGNoR3JvdXBzRm9yVmlldyIsImdldEVuYWJsZUxhenlMb2FkaW5nIiwiYXR0YWNoRXZlbnQiLCJfaGFuZGxlU3ViU2VjdGlvbkVudGVyZWRWaWV3UG9ydCIsIm1lc3NhZ2VCaW5kaW5nIiwiYmluZExpc3QiLCJhdHRhY2hDaGFuZ2UiLCJfZm5TaG93T1BNZXNzYWdlIiwib25FeGl0IiwiZGVzdHJveSIsIm9NZXNzYWdlUG9wb3ZlciIsImlzT3BlbiIsImNsb3NlIiwiaXNLZWVwQWxpdmUiLCJzZXRLZWVwQWxpdmUiLCJjb2xsYWJvcmF0aXZlRHJhZnQiLCJkaXNjb25uZWN0IiwiZGV0YWNoQ2hhbmdlIiwibWVzc2FnZXMiLCJfc2hvd01lc3NhZ2VzIiwib1RhYmxlIiwiZ2V0Um93QmluZGluZyIsImNoZWNrU2VjdGlvbnNGb3JOb25SZXNwb25zaXZlVGFibGUiLCJzdWJTZWN0aW9ucyIsImNoYW5nZUNsYXNzRm9yVGFibGVzIiwibGFzdFZpc2libGVTdWJTZWN0aW9uIiwiYmxvY2tzIiwiZ2V0QmxvY2tzIiwiZ2V0TW9yZUJsb2NrcyIsInNlYXJjaFRhYmxlSW5CbG9jayIsInRhYmxlVHlwZSIsImlzQSIsImdldFR5cGUiLCJnZXRUYWJsZURlZmluaXRpb24iLCJjb250cm9sIiwicm93Q291bnRNb2RlIiwiYWRkU3R5bGVDbGFzcyIsImRldGFjaEV2ZW50Iiwic3ViU2VjdGlvbkluZGV4IiwiYmxvY2siLCJvbkJlZm9yZVJlbmRlcmluZyIsIlBhZ2VDb250cm9sbGVyIiwiYXBwbHkiLCJyZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IiwiQ29tbW9uSGVscGVyIiwic2V0TWV0YU1vZGVsIiwiZ2V0QXBwQ29tcG9uZW50Iiwib25BZnRlclJlbmRlcmluZyIsImdldFVzZUljb25UYWJCYXIiLCJzZWN0aW9ucyIsImdldFNlY3Rpb25zIiwiX2dldEFsbFN1YlNlY3Rpb25zIiwiX29uQmVmb3JlQmluZGluZyIsImFUYWJsZXMiLCJfZmluZFRhYmxlcyIsIm9JbnRlcm5hbE1vZGVsIiwiYUJhdGNoR3JvdXBzIiwib0Zhc3RDcmVhdGlvblJvdyIsInB1c2giLCJyZWFzb24iLCJOYXZpZ2F0aW9uUmVhc29uIiwiRWRpdEZsb3dBY3Rpb24iLCJfY2xvc2VTaWRlQ29udGVudCIsIm9wQ29udGV4dCIsImhhc1BlbmRpbmdDaGFuZ2VzIiwic29tZSIsImdldEJpbmRpbmciLCJyZXNldENoYW5nZXMiLCJpdGVtIiwiZ2V0Q3JlYXRpb25Sb3ciLCJzZXRCaW5kaW5nQ29udGV4dCIsImZuU2Nyb2xsVG9QcmVzZW50U2VjdGlvbiIsImlzRmlyc3RSZW5kZXJpbmciLCJiUGVyc2lzdE9QU2Nyb2xsIiwiZm5PUFJlbmRlcmluZ0xheW91dCIsImVkaXRhYmxlSGVhZGVyQ29udGVudCIsInJlbW92ZUV2ZW50RGVsZWdhdGUiLCJhZGRFdmVudERlbGVnYXRlIiwiX2luaXRpYWxpemVQYWdpbmF0aW9uIiwibGlzdEJpbmRpbmciLCJfZGlzYWJsZUJsb2Nrc0JpbmRpbmdzIiwicGxhY2Vob2xkZXIiLCJpc1BsYWNlaG9sZGVyRW5hYmxlZCIsInNob3dQbGFjZWhvbGRlciIsIm9OYXZDb250YWluZXIiLCJvQ29udGFpbmVyIiwiZW5hYmxlQW5pbWF0aW9uIiwiZ2V0Rmlyc3RFZGl0YWJsZUlucHV0IiwiZG9tRWRpdGFibGVFbGVtZW50IiwiX2dldEZpcnN0RWRpdGFibGVJbnB1dCIsIlVJNUVsZW1lbnQiLCJjbG9zZXN0VG8iLCJnZXRGaXJzdENsaWNrYWJsZUVsZW1lbnQiLCJvYmplY3RQYWdlIiwiZmlyc3RDbGlja2FibGVFbGVtZW50IiwiYWN0aW9ucyIsImdldEhlYWRlclRpdGxlIiwiZ2V0QWN0aW9ucyIsImdldEVuYWJsZWQiLCJhU2VjdGlvbnMiLCJiVXNlSWNvblRhYkJhciIsImlTa2lwIiwiYkVkaXRhYmxlSGVhZGVyIiwiaVNlY3Rpb24iLCJhU3ViU2VjdGlvbnMiLCJpU3ViU2VjdGlvbiIsImlzVmlzaWJpbGl0eUR5bmFtaWMiLCJmb3JFYWNoIiwic3ViQmxvY2siLCJfZ2V0Rmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkRnJvbVN1YlNlY3Rpb24iLCJhQmxvY2tzIiwiYmxvY2tDb250cm9sIiwiYUZvcm1Db250YWluZXJzIiwiZ2V0Rm9ybUNvbnRhaW5lcnMiLCJnZXRDb250ZW50IiwiZm9ybUNvbnRhaW5lciIsImFGb3JtRWxlbWVudHMiLCJnZXRGb3JtRWxlbWVudHMiLCJmb3JtRWxlbWVudCIsImFGaWVsZHMiLCJnZXRGaWVsZHMiLCJlbXB0eUZpZWxkIiwiZ2V0Rmlyc3RFbXB0eVJlcXVpcmVkRmllbGQiLCJmaWVsZHMiLCJnZXRSZXF1aXJlZCIsImlzRW1wdHkiLCJnZXRNdWx0aVZhbHVlRmllbGQiLCJnZXRJdGVtcyIsInZhbHVlIiwiZGVidWciLCJvTWFuZGF0b3J5RmllbGQiLCJvRmllbGRUb0ZvY3VzIiwiZ2V0Q29udGVudEVkaXQiLCJmb2N1c0luZm8iLCJnZXRGb2N1c0luZm8iLCJ0YXJnZXRJbmZvIiwic2lsZW50IiwiZm9jdXMiLCJfb25CYWNrTmF2aWdhdGlvbkluRHJhZnQiLCJtZXNzYWdlSGFuZGxlciIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsIm5hdkJhY2siLCJjdXJyZW50VVJMIiwiZG9jdW1lbnQiLCJVUkwiLCJoaXN0b3J5IiwiYmFjayIsIl9yb3V0aW5nIiwibmF2aWdhdGVCYWNrRnJvbUNvbnRleHQiLCJnZXRSb3V0ZXJQcm94eSIsImNoZWNrSWZCYWNrSGFzU2FtZUNvbnRleHQiLCJnZXRTaGVsbFNlcnZpY2VzIiwic2V0QmFja05hdmlnYXRpb24iLCJ3YXJuaW5nIiwiZHJhZnQiLCJwcm9jZXNzRGF0YUxvc3NPckRyYWZ0RGlzY2FyZENvbmZpcm1hdGlvbiIsIkZ1bmN0aW9uIiwiTmF2aWdhdGlvblR5cGUiLCJCYWNrTmF2aWdhdGlvbiIsIl9vbkFmdGVyQmluZGluZyIsImlucHV0QmluZGluZ0NvbnRleHQiLCJfc2lkZUVmZmVjdHMiLCJjbGVhckZpZWxkR3JvdXBzVmFsaWRpdHkiLCJiaW5kaW5nQ29udGV4dCIsImFJQk5BY3Rpb25zIiwiZ2V0SUJOQWN0aW9ucyIsIm9UYWJsZVJvd0JpbmRpbmciLCJNb2RlbEhlbHBlciIsImlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsInJlbW92ZUNhY2hlc0FuZE1lc3NhZ2VzIiwib0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsInRhYmxlRGVmaW5pdGlvbiIsIm9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsIkFjdGlvblJ1bnRpbWUiLCJzZXRBY3Rpb25FbmFibGVtZW50IiwiY2xlYXJTZWxlY3Rpb24iLCJvT2JqZWN0UGFnZVRpdGxlIiwiYUlCTkhlYWRlckFjdGlvbnMiLCJjb25jYXQiLCJ1cGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eSIsIm9Nb2RlbCIsIm9GaW5hbFVJU3RhdGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsImhhbmRsZVRhYmxlTW9kaWZpY2F0aW9ucyIsIm9CaW5kaW5nIiwiZm5IYW5kbGVUYWJsZVBhdGNoRXZlbnRzIiwiVGFibGVIZWxwZXIiLCJlbmFibGVGYXN0Q3JlYXRpb25Sb3ciLCJnZXRDb250ZXh0IiwiZm5IYW5kbGVDaGFuZ2UiLCJjb21wdXRlTW9kZWxzRm9yRWRpdE1vZGUiLCJfdXBkYXRlUmVsYXRlZEFwcHMiLCJjdXJyZW50QmluZGluZyIsImhhbmRsZVBhdGNoU2VudCIsIlRhYmxlVXRpbHMiLCJ3aGVuQm91bmQiLCJvRXJyb3IiLCJfdHJpZ2dlclZpc2libGVTdWJTZWN0aW9uc0V2ZW50cyIsInVwZGF0ZUVkaXRCdXR0b25WaXNpYmlsaXR5QW5kRW5hYmxlbWVudCIsInJlY29tbWVuZGF0aW9ucyIsImNsZWFyUmVjb21tZW5kYXRpb25zIiwiX3VwZGF0ZUF2YWlsYWJsZUNhcmRzIiwiZGlzcGxheUNvbGxhYm9yYXRpb25NZXNzYWdlIiwicmVkaXJlY3RlZFRvTm9uRHJhZnQiLCJfc2V0T1BNZXNzYWdlU3RyaXBJbnRlcm5hbENvbnRleHQiLCJhcHBseUFwcFN0YXRlIiwiZ2V0QXBwU3RhdGVIYW5kbGVyIiwicGFnZVJlYWR5Iiwid2FpdEZvciIsImNhcmRzIiwiY29sbGFib3JhdGlvbk1hbmFnZXIiLCJjb2xsZWN0QXZhaWxhYmxlQ2FyZHMiLCJjYXJkT2JqZWN0IiwidXBkYXRlQ2FyZHMiLCJwYXJlbnRBcHBJZCIsImdldENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSIsImFkZENhcmRzVG9Db2xsYWJvcmF0aW9uTWFuYWdlciIsInNoYXJlQXZhaWxhYmxlQ2FyZHMiLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsImZpbmRFbGVtZW50cyIsImVsZW0iLCJtZXNzYWdlU3RyaXAiLCJlbnRpdHlOYW1lIiwicmVzb3VyY2VCdW5kbGUiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJjb2xsYWJvcmF0aW9uTWVzc2FnZSIsIk1lc3NhZ2UiLCJ0eXBlIiwiTWVzc2FnZVR5cGUiLCJJbmZvcm1hdGlvbiIsInRhcmdldCIsImFkZE1lc3NhZ2VzIiwib25QYWdlUmVhZHkiLCJzZXRGb2N1cyIsImlzSW5EaXNwbGF5TW9kZSIsIm9GaXJzdENsaWNrYWJsZUVsZW1lbnQiLCJvU2VsZWN0ZWRTZWN0aW9uIiwiZ2V0RWxlbWVudEJ5SWQiLCJnZXRTZWxlY3RlZFNlY3Rpb24iLCJjdHh0Iiwib0JpbmRpbmdDb250ZXh0IiwiYklzU3RpY2t5TW9kZSIsIm9BcHBDb21wb25lbnQiLCJpc0VkaXRhYmxlIiwiZmV0Y2hBbmRBcHBseVJlY29tbWVuZGF0aW9ucyIsImNvbnRleHQiLCJmb3JjZUZvY3VzIiwiX2NoZWNrRGF0YVBvaW50VGl0bGVGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJEZXZpY2UiLCJzdXBwb3J0IiwidG91Y2giLCJzYXZlQnV0dG9uIiwiYXV0b1F1ZXVlVW5sb2NrIiwiYXV0b1F1ZXVlTG9jayIsImlzTG9ja2VkIiwidW5sb2NrIiwiZGV0YWNoQnJvd3NlckV2ZW50IiwiYXR0YWNoQnJvd3NlckV2ZW50IiwibG9jayIsIl9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbiIsIm9PYmplY3RQYWdlU3VidGl0bGUiLCJvQ3VzdG9tRGF0YSIsIm9iamVjdFBhZ2VEZXNjcmlwdGlvbiIsImFwcENvbXBvbmVudCIsInJvb3RWaWV3Q29udHJvbGxlciIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsImZuQ2xlYXJDYWNoZVRpdGxlIiwiY2xlYXJUaXRsZUhpZXJhcmNoeUNhY2hlIiwidGl0bGUiLCJzdWJ0aXRsZSIsImludGVudCIsImljb24iLCJkZXNjcmlwdGlvbiIsIl9leGVjdXRlSGVhZGVyU2hvcnRjdXQiLCJzQnV0dG9uSWQiLCJvQnV0dG9uIiwib0VsZW1lbnQiLCJmaXJlQnV0dG9uUHJlc3MiLCJfZXhlY3V0ZUZvb3RlclNob3J0Y3V0IiwiZ2V0Rm9vdGVyIiwiZ2V0TWV0YWRhdGEiLCJnZXROYW1lIiwiX2V4ZWN1dGVUYWJTaG9ydEN1dCIsIm9FeGVjdXRpb24iLCJpU2VjdGlvbkluZGV4TWF4Iiwic0NvbW1hbmQiLCJnZXRDb21tYW5kIiwibmV3U2VjdGlvbiIsImlTZWxlY3RlZFNlY3Rpb25JbmRleCIsImluZGV4T2ZTZWN0aW9uIiwiX2dldEZvb3RlclZpc2liaWxpdHkiLCJzVmlld0lkIiwiaXNIaWRkZW5EcmFmdEVuYWJsZWQiLCJnZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcyIsImdldENhcGFiaWxpdGllcyIsIkhpZGRlbkRyYWZ0IiwiZW5hYmxlZCIsIm9NZXNzYWdlIiwiaXNFcnJvck1lc3NhZ2UiLCJ2YWxpZGF0aW9uIiwibWVzc2FnZVZhbGlkYXRpb24iLCJpbmNsdWRlcyIsImVyciIsIm9SZXQiLCJpc0VkaXRNb2RlIiwiY3VycmVudFBhZ2VWaWV3IiwiaXNGY2xFbmFibGVkIiwiZ2V0UmlnaHRtb3N0VmlldyIsImdldFJvb3RDb250YWluZXIiLCJnZXRDdXJyZW50UGFnZSIsIm9NZXNzYWdlQnV0dG9uIiwib0l0ZW1CaW5kaW5nIiwiZ2V0TGVuZ3RoIiwib3BlbkJ5IiwiQnVzeUxvY2tlciIsImVkaXREb2N1bWVudCIsImZpbmFsbHkiLCJwcm9wZXJ0eVBhdGgiLCJMb2NhbFByb3BlcnR5IiwiJFByb3BlcnR5UGF0aCIsIlNlbWFudGljT2JqZWN0UHJvcGVydHkiLCJfdmFsaWRhdGVEb2N1bWVudCIsImdldEFjdGl2ZUVsZW1lbnQiLCJieVBhc3NTaWRlRWZmZWN0cyIsImlzVHJhbnNpZW50IiwiY3JlYXRlZCIsImhvbGRNZXNzYWdlc0ZvckNvbnRyb2wiLCJyZXQiLCJleGVjdXRlR2xvYmFsVmFsaWRhdGlvbiIsInNob3dNZXNzYWdlcyIsInNpZGVFZmZlY3RzU2VydmljZSIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsImVudGl0eVR5cGUiLCJnZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQiLCJnbG9iYWxTaWRlRWZmZWN0cyIsImdldEdsb2JhbE9EYXRhRW50aXR5U2lkZUVmZmVjdHMiLCJhbGwiLCJzaWRlRWZmZWN0cyIsInJlcXVlc3RTaWRlRWZmZWN0cyIsImRyYWZ0Um9vdENvbnRleHQiLCJjcmVhdGVSb290Q29udGV4dCIsIkRyYWZ0IiwiZXhlY3V0ZURyYWZ0VmFsaWRhdGlvbiIsImlzQ29ubmVjdGVkIiwic2tpcEJpbmRpbmdUb1ZpZXciLCJtb2RlbCIsImF3YWl0Q3JlYXRlRG9jdW1lbnRzIiwiZXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvciIsImlzQ29sbGFib3JhdGlvbkVuYWJsZWQiLCJkaWFsb2dBY3Rpb24iLCJDb2xsYWJvcmF0aW9uRGlzY2FyZCIsImdldFVzZXJBY3Rpb24iLCJjcmVhdGlvblJvdyIsInRhYmxlQmluZGluZyIsImNvbnRleHRLZXlzIiwic3RhcnRzV2l0aCIsImNyZWF0ZURvY3VtZW50IiwiY3JlYXRpb25Nb2RlIiwiY3JlYXRlQXRFbmQiLCJza2lwU2lkZUVmZmVjdHMiLCJiaW5kaW5ncyIsInNhdmVEb2N1bWVudCIsImJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yIiwiUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbiIsIkNvbnRpbnVlIiwiX2NhbmNlbERvY3VtZW50IiwiY2FuY2VsQnV0dG9uIiwibGFzdEZvY3VzZWRDb250cm9sSWQiLCJzaG91bGRTa2lwRGlzY2FyZFBvcG92ZXIiLCJpc0RvY3VtZW50TW9kaWZpZWQiLCJVaU1vZGVsQ29uc3RhbnRzIiwiRG9jdW1lbnRNb2RpZmllZCIsImFmdGVyQ2FuY2VsIiwicHJvbWlzZVJlc3VsdCIsImNhbmNlbERvY3VtZW50Iiwic2tpcERpc2NhcmRQb3BvdmVyIiwiYXBwbHlEb2N1bWVudCIsInNob3dSZWxhdGVkQXBwcyIsInVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyIsIl9maW5kQ29udHJvbEluU3ViU2VjdGlvbiIsImFQYXJlbnRFbGVtZW50IiwiYVN1YnNlY3Rpb24iLCJhQ29udHJvbHMiLCJiSXNDaGFydCIsIml0ZW0xIiwiZ2V0QWdncmVnYXRpb24iLCJjaGFydENvbnRyb2wiLCJnZXRDaGFydENvbnRyb2wiLCJvU3ViRWxlbWVudCIsImdldE1haW5Db250ZW50IiwiX2dldEFsbEJsb2NrcyIsIl9maW5kQ2hhcnRzIiwiYUNoYXJ0cyIsIm9CbG9jayIsIm9Db250ZW50Iiwic2V0U2hvd1NpZGVDb250ZW50Iiwib0NoYXJ0Q29udGV4dCIsInNDaGFydFBhdGgiLCJvQ29udGV4dERhdGEiLCJvQ2hhcnRDb250ZXh0RGF0YSIsIl9zY3JvbGxUYWJsZXNUb1JvdyIsInNSb3dQYXRoIiwiVGFibGVTY3JvbGxlciIsInNjcm9sbFRhYmxlVG9Sb3ciLCJfbWVyZ2VNdWx0aXBsZUNvbnRleHRzIiwib1BhZ2VDb250ZXh0IiwiYUxpbmVDb250ZXh0IiwiYUF0dHJpYnV0ZXMiLCJhUGFnZUF0dHJpYnV0ZXMiLCJzTWV0YVBhdGhMaW5lIiwic1BhdGhMaW5lIiwic1BhZ2VQYXRoIiwib01ldGFNb2RlbCIsInNNZXRhUGF0aFBhZ2UiLCJyZXBsYWNlIiwib1NpbmdsZUNvbnRleHQiLCJvU3ViQ2hhcnRDb250ZXh0RGF0YSIsImNvbnRleHREYXRhIiwicmVtb3ZlU2Vuc2l0aXZlRGF0YSIsIm9QYWdlTGV2ZWxTViIsImFkZFBhZ2VDb250ZXh0VG9TZWxlY3Rpb25WYXJpYW50IiwiU2VsZWN0aW9uVmFyaWFudCIsInNlbGVjdGlvblZhcmlhbnQiLCJhdHRyaWJ1dGVzIiwib1ZpZXdEYXRhIiwib0NvbmZpZ3VyYXRpb25zIiwiY29udHJvbENvbmZpZ3VyYXRpb24iLCJhQ29uZmlndXJhdGlvbnMiLCJzS2V5Iiwib0NvbmZpZ3VyYXRpb24iLCJyZXF1ZXN0R3JvdXBJZCIsInBhZ2luYXRvckN1cnJlbnRDb250ZXh0IiwiYmluZGluZ1RvVXNlIiwicGFnaW5hdG9yIiwiaW5pdGlhbGl6ZSIsInNldEJyZWFkY3J1bWJMaW5rcyIsInNvdXJjZSIsInByb21pc2VzIiwibmV3UGF0aCIsInBhdGhQYXJ0cyIsInNwbGl0IiwibWV0YU1vZGVsIiwicGF0aCIsInNoaWZ0Iiwic3BsaWNlIiwicGF0aFBhcnQiLCJnZXRSb3V0ZXIiLCJnZXRSb3V0ZUluZm9CeUhhc2giLCJwYXJhbWV0ZXJQYXRoIiwicmVzdWx0Q29udGV4dCIsImdldFRpdGxlSW5mb0Zyb21QYXRoIiwidGl0bGVIaWVyYXJjaHlJbmZvcyIsImhpZXJhcmNoeVBvc2l0aW9uIiwibGluayIsInRpdGxlSGllcmFyY2h5SW5mbyIsImluZGV4T2YiLCJnZXRMaW5rcyIsIkxpbmsiLCJzZXRUZXh0Iiwic2V0SHJlZiIsImVuY29kZVVSSSIsImFkZExpbmsiLCJvRGF0YVBvaW50cyIsImdldEhlYWRlckZhY2V0SXRlbUNvbmZpZ0ZvckV4dGVybmFsTmF2aWdhdGlvbiIsImdldFJvdXRpbmdTZXJ2aWNlIiwiZ2V0T3V0Ym91bmRzIiwib1NoZWxsU2VydmljZXMiLCJyZXF1ZXN0T2JqZWN0IiwiZm5HZXRMaW5rcyIsImZuT25FcnJvciIsImZuU2V0TGlua0VuYWJsZW1lbnQiLCJpZCIsImFTdXBwb3J0ZWRMaW5rcyIsInNMaW5rSWQiLCJzdXBwb3J0ZWQiLCJvU3ViRGF0YVBvaW50cyIsIm9QYWdlRGF0YSIsIm9EYXRhUG9pbnQiLCJvTGluayIsIm9MaW5rQ29udGV4dCIsIm9MaW5rRGF0YSIsIm9NaXhlZENvbnRleHQiLCJtZXJnZSIsIm9NYXBwaW5nIiwic01haW5Qcm9wZXJ0eSIsInNNYXBwZWRQcm9wZXJ0eSIsImhhc093blByb3BlcnR5Iiwib05ld01hcHBpbmciLCJpc05hdmlnYXRpb25TdXBwb3J0ZWQiLCJwYXJhbXMiLCJhTGlua3MiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk9iamVjdFBhZ2VDb250cm9sbGVyLmNvbnRyb2xsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25cIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IG1lcmdlIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VXaXRoVUk1IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIGV4dGVuc2libGUsIGZpbmFsRXh0ZW5zaW9uLCBwdWJsaWNFeHRlbnNpb24sIHVzaW5nRXh0ZW5zaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IEFjdGlvblJ1bnRpbWUgZnJvbSBcInNhcC9mZS9jb3JlL0FjdGlvblJ1bnRpbWVcIjtcbmltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvQnVzeUxvY2tlclwiO1xuaW1wb3J0IEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxSb3V0aW5nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbFJvdXRpbmdcIjtcbmltcG9ydCBNZXNzYWdlSGFuZGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCBQYWdlUmVhZHkgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BhZ2VSZWFkeVwiO1xuaW1wb3J0IFBhZ2luYXRvciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUGFnaW5hdG9yXCI7XG5pbXBvcnQgUGxhY2Vob2xkZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BsYWNlaG9sZGVyXCI7XG5pbXBvcnQgU2hhcmUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1NoYXJlXCI7XG5pbXBvcnQgVmlld1N0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9WaWV3U3RhdGVcIjtcbmltcG9ydCBDb2xsYWJvcmF0aW9uTWFuYWdlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvY2FyZHMvQ29sbGFib3JhdGlvbk1hbmFnZXJcIjtcbmltcG9ydCBkcmFmdCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvZHJhZnRcIjtcbmltcG9ydCBVaU1vZGVsQ29uc3RhbnRzIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9lZGl0Rmxvd0NvbnN0YW50c1wiO1xuaW1wb3J0IE5hdmlnYXRpb25SZWFzb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL3JvdXRpbmcvTmF2aWdhdGlvblJlYXNvblwiO1xuaW1wb3J0IHR5cGUgQ29tbWFuZEV4ZWN1dGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvQ29tbWFuZEV4ZWN1dGlvblwiO1xuaW1wb3J0IHsgUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9scy9SZWNvbW1lbmRhdGlvbnMvQ29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nXCI7XG5pbXBvcnQgdHlwZSB7IEhpZGRlbkRyYWZ0LCBNaWNyb0NoYXJ0TWFuaWZlc3RDb25maWd1cmF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdldFJlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgRkVMaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSB7IFRpdGxlSW5mb3JtYXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvcm9vdFZpZXcvUm9vdFZpZXdCYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IHsgdHlwZSBXcmFwcGVkQ2FyZCB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9Db2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSBDaGFydEJsb2NrIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NoYXJ0XCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgTWFjcm9BUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvTWFjcm9BUElcIjtcbmltcG9ydCB0eXBlIE11bHRpVmFsdWVGaWVsZEJsb2NrIGZyb20gXCJzYXAvZmUvbWFjcm9zL011bHRpVmFsdWVGaWVsZFwiO1xuaW1wb3J0IHR5cGUgRWFzeUZpbGxCdXR0b24gZnJvbSBcInNhcC9mZS9tYWNyb3MvYWkvRWFzeUZpbGxCdXR0b25cIjtcbmltcG9ydCB0eXBlIFN1bW1hcml6YXRpb25CdXR0b24gZnJvbSBcInNhcC9mZS9tYWNyb3MvYWkvU3VtbWFyaXphdGlvbkJ1dHRvblwiO1xuaW1wb3J0IHR5cGUgRm9ybUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9mb3JtL0Zvcm1BUElcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2VCdXR0b24gZnJvbSBcInNhcC9mZS9tYWNyb3MvbWVzc2FnZXMvTWVzc2FnZUJ1dHRvblwiO1xuaW1wb3J0IHR5cGUgU2hhcmVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3Mvc2hhcmUvU2hhcmVBUElcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgVGFibGVIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVIZWxwZXJcIjtcbmltcG9ydCBUYWJsZVV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1V0aWxzXCI7XG5pbXBvcnQgU2VsZWN0aW9uVmFyaWFudCBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vU2VsZWN0aW9uVmFyaWFudFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9iamVjdFBhZ2VFeHRlbnNpb25BUEkgfSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBFeHRlbnNpb25BUEkgfSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IENvbGxhYm9yYXRpb25EaXNjYXJkIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvY29tcG9uZW50cy9Db2xsYWJvcmF0aW9uRGlzY2FyZERpYWxvZ1wiO1xuaW1wb3J0IHR5cGUgU3ViU2VjdGlvbkJsb2NrIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvY29udHJvbHMvU3ViU2VjdGlvbkJsb2NrXCI7XG5pbXBvcnQgVGFibGVTY3JvbGxlciBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9UYWJsZVNjcm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IHR5cGUgSW5wdXRCYXNlIGZyb20gXCJzYXAvbS9JbnB1dEJhc2VcIjtcbmltcG9ydCBJbnN0YW5jZU1hbmFnZXIgZnJvbSBcInNhcC9tL0luc3RhbmNlTWFuYWdlclwiO1xuaW1wb3J0IExpbmsgZnJvbSBcInNhcC9tL0xpbmtcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlU3RyaXAgZnJvbSBcInNhcC9tL01lc3NhZ2VTdHJpcFwiO1xuaW1wb3J0IHR5cGUgTmF2Q29udGFpbmVyIGZyb20gXCJzYXAvbS9OYXZDb250YWluZXJcIjtcbmltcG9ydCB0eXBlIE92ZXJmbG93VG9vbGJhciBmcm9tIFwic2FwL20vT3ZlcmZsb3dUb29sYmFyXCI7XG5pbXBvcnQgdHlwZSBQb3BvdmVyIGZyb20gXCJzYXAvbS9Qb3BvdmVyXCI7XG5pbXBvcnQgdHlwZSBUb29sYmFyU3BhY2VyIGZyb20gXCJzYXAvbS9Ub29sYmFyU3BhY2VyXCI7XG5pbXBvcnQgRGV2aWNlIGZyb20gXCJzYXAvdWkvRGV2aWNlXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgdHlwZSBJbnZpc2libGVUZXh0IGZyb20gXCJzYXAvdWkvY29yZS9JbnZpc2libGVUZXh0XCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgdHlwZSB7IE1hbmlmZXN0T3V0Ym91bmRFbnRyeSB9IGZyb20gXCJzYXAvdWkvY29yZS9NYW5pZmVzdFwiO1xuaW1wb3J0IE1lc3NhZ2luZyBmcm9tIFwic2FwL3VpL2NvcmUvTWVzc2FnaW5nXCI7XG5pbXBvcnQgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgTWVzc2FnZVR5cGUgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVR5cGVcIjtcbmltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBEeW5hbWljU2lkZUNvbnRlbnQgZnJvbSBcInNhcC91aS9sYXlvdXQvRHluYW1pY1NpZGVDb250ZW50XCI7XG5pbXBvcnQgdHlwZSBGb3JtIGZyb20gXCJzYXAvdWkvbGF5b3V0L2Zvcm0vRm9ybVwiO1xuaW1wb3J0IHR5cGUgQ2hhcnQgZnJvbSBcInNhcC91aS9tZGMvQ2hhcnRcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBUYWJsZVR5cGVCYXNlIGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL1RhYmxlVHlwZUJhc2VcIjtcbmltcG9ydCB0eXBlIEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9CaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9MaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFDb250ZXh0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgQnJlYWRDcnVtYnMgZnJvbSBcInNhcC91eGFwL0JyZWFkQ3J1bWJzXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlTGF5b3V0IGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlTGF5b3V0XCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVNlY3Rpb25cIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VTdWJTZWN0aW9uIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlU3ViU2VjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBNZXRhTW9kZWxUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3R5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuaW1wb3J0IHR5cGUgQ29sbGFib3JhdGlvbkRyYWZ0IGZyb20gXCIuL2NvbXBvbmVudHMvQ29sbGFib3JhdGlvbkRyYWZ0XCI7XG5pbXBvcnQgQ29sbGFib3JhdGlvbk1hbmFnZXJPdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvQ29sbGFib3JhdGlvbk1hbmFnZXJcIjtcbmltcG9ydCBJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxSb3V0aW5nT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL0ludGVybmFsUm91dGluZ1wiO1xuaW1wb3J0IE1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgUGFnaW5hdG9yT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL1BhZ2luYXRvclwiO1xuaW1wb3J0IFNoYXJlT3ZlcnJpZGVzIGZyb20gXCIuL292ZXJyaWRlcy9TaGFyZVwiO1xuaW1wb3J0IFZpZXdTdGF0ZU92ZXJyaWRlcyBmcm9tIFwiLi9vdmVycmlkZXMvVmlld1N0YXRlXCI7XG5cbmV4cG9ydCB0eXBlIEJpbmRpbmdQYXJhbXMgPSB7XG5cdHJlZGlyZWN0ZWRUb05vbkRyYWZ0Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRyZWFzb24/OiBOYXZpZ2F0aW9uUmVhc29uO1xuXHRiUGVyc2lzdE9QU2Nyb2xsPzogYm9vbGVhbjtcblx0bGlzdEJpbmRpbmc/OiBPRGF0YUxpc3RCaW5kaW5nO1xuXHRzaG93UGxhY2Vob2xkZXI/OiBib29sZWFuO1xufTtcblxuY29uc3QgUHJvZ3JhbW1pbmdNb2RlbCA9IEZFTGlicmFyeS5Qcm9ncmFtbWluZ01vZGVsO1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLk9iamVjdFBhZ2VDb250cm9sbGVyXCIpXG5jbGFzcyBPYmplY3RQYWdlQ29udHJvbGxlciBleHRlbmRzIFBhZ2VDb250cm9sbGVyIHtcblx0b1ZpZXchOiBGRVZpZXc7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFBsYWNlaG9sZGVyKVxuXHRwbGFjZWhvbGRlciE6IFBsYWNlaG9sZGVyO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihTaGFyZS5vdmVycmlkZShTaGFyZU92ZXJyaWRlcykpXG5cdHNoYXJlITogU2hhcmU7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKEludGVybmFsUm91dGluZy5vdmVycmlkZShJbnRlcm5hbFJvdXRpbmdPdmVycmlkZSkpXG5cdF9yb3V0aW5nITogSW50ZXJuYWxSb3V0aW5nO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihQYWdpbmF0b3Iub3ZlcnJpZGUoUGFnaW5hdG9yT3ZlcnJpZGUpKVxuXHRwYWdpbmF0b3IhOiBQYWdpbmF0b3I7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKE1lc3NhZ2VIYW5kbGVyLm92ZXJyaWRlKE1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUpKVxuXHRtZXNzYWdlSGFuZGxlciE6IE1lc3NhZ2VIYW5kbGVyO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihJbnRlbnRCYXNlZE5hdmlnYXRpb24ub3ZlcnJpZGUoSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUpKVxuXHRpbnRlbnRCYXNlZE5hdmlnYXRpb24hOiBJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cblx0QHVzaW5nRXh0ZW5zaW9uKENvbGxhYm9yYXRpb25NYW5hZ2VyLm92ZXJyaWRlKENvbGxhYm9yYXRpb25NYW5hZ2VyT3ZlcnJpZGUpKVxuXHRjb2xsYWJvcmF0aW9uTWFuYWdlciE6IENvbGxhYm9yYXRpb25NYW5hZ2VyO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihcblx0XHRJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbi5vdmVycmlkZSh7XG5cdFx0XHRnZXROYXZpZ2F0aW9uTW9kZTogZnVuY3Rpb24gKHRoaXM6IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IGJJc1N0aWNreUVkaXRNb2RlID1cblx0XHRcdFx0XHQodGhpcy5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIE9iamVjdFBhZ2VDb250cm9sbGVyKS5nZXRTdGlja3lFZGl0TW9kZSAmJlxuXHRcdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXIpLmdldFN0aWNreUVkaXRNb2RlKCk7XG5cdFx0XHRcdHJldHVybiBiSXNTdGlja3lFZGl0TW9kZSA/IFwiZXhwbGFjZVwiIDogdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdH0pXG5cdClcblx0X2ludGVudEJhc2VkTmF2aWdhdGlvbiE6IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihWaWV3U3RhdGUub3ZlcnJpZGUoVmlld1N0YXRlT3ZlcnJpZGVzKSlcblx0dmlld1N0YXRlITogVmlld1N0YXRlO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihcblx0XHRQYWdlUmVhZHkub3ZlcnJpZGUoe1xuXHRcdFx0aXNDb250ZXh0RXhwZWN0ZWQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHRwYWdlUmVhZHkhOiBQYWdlUmVhZHk7XG5cblx0cHJpdmF0ZSBtQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXM/OiBSZWNvcmQ8c3RyaW5nLCBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJPjtcblxuXHRwcm90ZWN0ZWQgZXh0ZW5zaW9uQVBJPzogT2JqZWN0UGFnZUV4dGVuc2lvbkFQSTtcblxuXHRwcml2YXRlIGJTZWN0aW9uTmF2aWdhdGVkPzogYm9vbGVhbjtcblxuXHRwcml2YXRlIGNsZWFyVGl0bGVIaWVyYXJjaHlDYWNoZVNldFVwID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBzd2l0Y2hEcmFmdEFuZEFjdGl2ZVBvcE92ZXI/OiBQb3BvdmVyO1xuXG5cdHByaXZhdGUgY3VycmVudEJpbmRpbmc/OiBCaW5kaW5nO1xuXG5cdHByaXZhdGUgbWVzc2FnZUJ1dHRvbiE6IE1lc3NhZ2VCdXR0b247XG5cblx0cHJpdmF0ZSBjb2xsYWJvcmF0aW9uTWVzc2FnZT86IE1lc3NhZ2U7XG5cblx0cHJpdmF0ZSBtZXJnZVBhdGNoRHJhZnQgPSBmYWxzZTtcblxuXHRwcml2YXRlIGF1dG9RdWV1ZUxvY2s6IFJldHVyblR5cGU8T0RhdGFNb2RlbFtcImxvY2tcIl0+IHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgbWVzc2FnZUJpbmRpbmc/OiBCaW5kaW5nO1xuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRFeHRlbnNpb25BUEkoc0lkPzogc3RyaW5nKTogRXh0ZW5zaW9uQVBJIHtcblx0XHRpZiAoc0lkKSB7XG5cdFx0XHQvLyB0byBhbGxvdyBsb2NhbCBJRCB1c2FnZSBmb3IgY3VzdG9tIHBhZ2VzIHdlJ2xsIGNyZWF0ZS9yZXR1cm4gb3duIGluc3RhbmNlcyBmb3IgY3VzdG9tIHNlY3Rpb25zXG5cdFx0XHR0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcyA9IHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzIHx8IHt9O1xuXG5cdFx0XHRpZiAoIXRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF0pIHtcblx0XHRcdFx0dGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXSA9IG5ldyBFeHRlbnNpb25BUEkodGhpcywgc0lkKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIXRoaXMuZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHRcdHRoaXMuZXh0ZW5zaW9uQVBJID0gbmV3IEV4dGVuc2lvbkFQSSh0aGlzKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLmV4dGVuc2lvbkFQSTtcblx0XHR9XG5cdH1cblxuXHRvbkluaXQoKTogdm9pZCB7XG5cdFx0c3VwZXIub25Jbml0KCk7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXG5cdFx0Ly8gU2V0dGluZyBkZWZhdWx0cyBvZiBpbnRlcm5hbCBtb2RlbCBjb250ZXh0XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiZXh0ZXJuYWxOYXZpZ2F0aW9uQ29udGV4dFwiLCB7IHBhZ2U6IHRydWUgfSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcInJlbGF0ZWRBcHBzXCIsIHtcblx0XHRcdHZpc2liaWxpdHk6IGZhbHNlLFxuXHRcdFx0aXRlbXM6IG51bGxcblx0XHR9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiYmF0Y2hHcm91cHNcIiwgdGhpcy5fZ2V0QmF0Y2hHcm91cHNGb3JWaWV3KCkpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJlcnJvck5hdmlnYXRpb25TZWN0aW9uRmxhZ1wiLCBmYWxzZSk7XG5cdFx0aWYgKG9PYmplY3RQYWdlLmdldEVuYWJsZUxhenlMb2FkaW5nKCkpIHtcblx0XHRcdC8vQXR0YWNoaW5nIHRoZSBldmVudCB0byBtYWtlIHRoZSBzdWJzZWN0aW9uIGNvbnRleHQgYmluZGluZyBhY3RpdmUgd2hlbiBpdCBpcyB2aXNpYmxlLlxuXHRcdFx0b09iamVjdFBhZ2UuYXR0YWNoRXZlbnQoXCJzdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0XCIsIHRoaXMuX2hhbmRsZVN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnQuYmluZCh0aGlzKSk7XG5cdFx0fVxuXHRcdHRoaXMubWVzc2FnZUJ1dHRvbiA9IHRoaXMuZ2V0VmlldygpLmJ5SWQoXCJmZTo6Rm9vdGVyQmFyOjpNZXNzYWdlQnV0dG9uXCIpIGFzIE1lc3NhZ2VCdXR0b247XG5cdFx0dGhpcy5tZXNzYWdlQmluZGluZyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5iaW5kTGlzdChcIi9cIik7XG5cdFx0dGhpcy5tZXNzYWdlQmluZGluZz8uYXR0YWNoQ2hhbmdlKHRoaXMuX2ZuU2hvd09QTWVzc2FnZSwgdGhpcyk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcInJvb3RFZGl0RW5hYmxlZFwiLCB0cnVlKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwicm9vdEVkaXRWaXNpYmxlXCIsIHRydWUpO1xuXHR9XG5cblx0b25FeGl0KCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcykge1xuXHRcdFx0Zm9yIChjb25zdCBzSWQgb2YgT2JqZWN0LmtleXModGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMpKSB7XG5cdFx0XHRcdGlmICh0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdKSB7XG5cdFx0XHRcdFx0dGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXS5kZXN0cm95KCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGRlbGV0ZSB0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcztcblx0XHR9XG5cdFx0aWYgKHRoaXMuZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHR0aGlzLmV4dGVuc2lvbkFQSS5kZXN0cm95KCk7XG5cdFx0fVxuXHRcdGRlbGV0ZSB0aGlzLmV4dGVuc2lvbkFQSTtcblxuXHRcdGNvbnN0IG9NZXNzYWdlUG9wb3ZlciA9IHRoaXMubWVzc2FnZUJ1dHRvbiA/IHRoaXMubWVzc2FnZUJ1dHRvbi5vTWVzc2FnZVBvcG92ZXIgOiBudWxsO1xuXHRcdGlmIChvTWVzc2FnZVBvcG92ZXIgJiYgb01lc3NhZ2VQb3BvdmVyLmlzT3BlbigpKSB7XG5cdFx0XHRvTWVzc2FnZVBvcG92ZXIuY2xvc2UoKTtcblx0XHR9XG5cdFx0Ly93aGVuIGV4aXRpbmcgd2Ugc2V0IGtlZXBBbGl2ZSBjb250ZXh0IHRvIGZhbHNlXG5cdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGlmIChvQ29udGV4dCAmJiBvQ29udGV4dC5pc0tlZXBBbGl2ZSgpKSB7XG5cdFx0XHRvQ29udGV4dC5zZXRLZWVwQWxpdmUoZmFsc2UpO1xuXHRcdH1cblxuXHRcdHRoaXMuY29sbGFib3JhdGl2ZURyYWZ0LmRpc2Nvbm5lY3QoKTsgLy8gQ2xlYW51cCBjb2xsYWJvcmF0aW9uIGNvbm5lY3Rpb24gd2hlbiBsZWF2aW5nIHRoZSBhcHBcblxuXHRcdHRoaXMubWVzc2FnZUJpbmRpbmc/LmRldGFjaENoYW5nZSh0aGlzLl9mblNob3dPUE1lc3NhZ2UsIHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBzaG93IHRoZSBtZXNzYWdlIHN0cmlwIG9uIHRoZSBvYmplY3QgcGFnZS5cblx0ICpcblx0ICovXG5cdF9mblNob3dPUE1lc3NhZ2UoKTogdm9pZCB7XG5cdFx0Y29uc3QgZXh0ZW5zaW9uQVBJID0gdGhpcy5nZXRFeHRlbnNpb25BUEkoKTtcblx0XHRjb25zdCB2aWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0Y29uc3QgbWVzc2FnZXMgPSBNZXNzYWdpbmc/LmdldE1lc3NhZ2VNb2RlbCgpXG5cdFx0XHQuZ2V0RGF0YSgpXG5cdFx0XHQuZmlsdGVyKChtZXNzYWdlOiBNZXNzYWdlKSA9PiB7XG5cdFx0XHRcdHJldHVybiBtZXNzYWdlLmdldFRhcmdldHMoKVswXSA9PT0gdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCk7XG5cdFx0XHR9KTtcblxuXHRcdGlmIChleHRlbnNpb25BUEkpIHtcblx0XHRcdGV4dGVuc2lvbkFQSS5fc2hvd01lc3NhZ2VzKG1lc3NhZ2VzLCBcIkJhY2tlbmRcIik7XG5cdFx0fVxuXHR9XG5cblx0X2dldFRhYmxlQmluZGluZyhvVGFibGU6IFRhYmxlKTogT0RhdGFMaXN0QmluZGluZyB7XG5cdFx0cmV0dXJuIG9UYWJsZSAmJiBvVGFibGUuZ2V0Um93QmluZGluZygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZpbmQgdGhlIGxhc3QgdmlzaWJsZSBzdWJzZWN0aW9uIGFuZCBhZGQgdGhlIHNhcFV4QVBPYmplY3RQYWdlU3ViU2VjdGlvbkZpdENvbnRhaW5lciBDU1MgY2xhc3MgaWYgaXQgY29udGFpbnMgb25seSBhIEdyaWRUYWJsZSBvciBhIFRyZWVUYWJsZS5cblx0ICogQHBhcmFtIHN1YlNlY3Rpb25zIFRoZSBzdWIgc2VjdGlvbnMgdG8gbG9vayBmb3Jcblx0ICovXG5cdHByaXZhdGUgY2hlY2tTZWN0aW9uc0Zvck5vblJlc3BvbnNpdmVUYWJsZShzdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSk6IHZvaWQge1xuXHRcdGNvbnN0IGNoYW5nZUNsYXNzRm9yVGFibGVzID0gKGV2ZW50OiBFdmVudCwgbGFzdFZpc2libGVTdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbik6IHZvaWQgPT4ge1xuXHRcdFx0Y29uc3QgYmxvY2tzID0gWy4uLmxhc3RWaXNpYmxlU3ViU2VjdGlvbi5nZXRCbG9ja3MoKSwgLi4ubGFzdFZpc2libGVTdWJTZWN0aW9uLmdldE1vcmVCbG9ja3MoKV07XG5cdFx0XHRpZiAoYmxvY2tzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHRjb25zdCB0YWJsZSA9IHRoaXMuc2VhcmNoVGFibGVJbkJsb2NrKGJsb2Nrc1swXSBhcyBTdWJTZWN0aW9uQmxvY2spO1xuXHRcdFx0XHRpZiAoIXRhYmxlKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHRhYmxlVHlwZSA9IHRhYmxlLmlzQTxUYWJsZT4oXCJzYXAudWkubWRjLlRhYmxlXCIpICYmICh0YWJsZS5nZXRUeXBlKCkgYXMgVGFibGVUeXBlQmFzZSk7XG5cdFx0XHRcdGNvbnN0IHRhYmxlQVBJID0gdGFibGUuZ2V0UGFyZW50KCk/LmlzQTxUYWJsZUFQST4oXCJzYXAuZmUubWFjcm9zLnRhYmxlLlRhYmxlQVBJXCIpXG5cdFx0XHRcdFx0PyAodGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHR0YWJsZVR5cGUgJiZcblx0XHRcdFx0XHQodGFibGVUeXBlPy5pc0EoXCJzYXAudWkubWRjLnRhYmxlLkdyaWRUYWJsZVR5cGVcIikgfHwgdGFibGVUeXBlPy5pc0EoXCJzYXAudWkubWRjLnRhYmxlLlRyZWVUYWJsZVR5cGVcIikpICYmXG5cdFx0XHRcdFx0dGFibGVBUEk/LmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wucm93Q291bnRNb2RlID09PSBcIkF1dG9cIlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHQvL0luIGNhc2UgdGhlcmUgaXMgb25seSBhIHNpbmdsZSB0YWJsZSBpbiBhIHN1YlNlY3Rpb24gd2UgZml0IHRoYXQgdG8gdGhlIHdob2xlIHBhZ2Ugc28gdGhhdCB0aGUgc2Nyb2xsYmFyIGNvbWVzIG9ubHkgb24gdGFibGUgYW5kIG5vdCBvbiBwYWdlXG5cdFx0XHRcdFx0bGFzdFZpc2libGVTdWJTZWN0aW9uLmFkZFN0eWxlQ2xhc3MoXCJzYXBVeEFQT2JqZWN0UGFnZVN1YlNlY3Rpb25GaXRDb250YWluZXJcIik7XG5cdFx0XHRcdFx0bGFzdFZpc2libGVTdWJTZWN0aW9uLmRldGFjaEV2ZW50KFwibW9kZWxDb250ZXh0Q2hhbmdlXCIsIGNoYW5nZUNsYXNzRm9yVGFibGVzLCB0aGlzKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdFx0Zm9yIChsZXQgc3ViU2VjdGlvbkluZGV4ID0gc3ViU2VjdGlvbnMubGVuZ3RoIC0gMTsgc3ViU2VjdGlvbkluZGV4ID49IDA7IHN1YlNlY3Rpb25JbmRleC0tKSB7XG5cdFx0XHRpZiAoc3ViU2VjdGlvbnNbc3ViU2VjdGlvbkluZGV4XS5nZXRWaXNpYmxlKCkpIHtcblx0XHRcdFx0Y29uc3QgbGFzdFZpc2libGVTdWJTZWN0aW9uID0gc3ViU2VjdGlvbnNbc3ViU2VjdGlvbkluZGV4XTtcblx0XHRcdFx0Ly8gV2UgbmVlZCB0byBhdHRhY2ggdGhpcyBldmVudCBpbiBvcmRlciB0byBtYW5hZ2UgdGhlIE9iamVjdCBQYWdlIExhenkgTG9hZGluZyBtZWNoYW5pc21cblx0XHRcdFx0bGFzdFZpc2libGVTdWJTZWN0aW9uLmF0dGFjaEV2ZW50KFwibW9kZWxDb250ZXh0Q2hhbmdlXCIsIGxhc3RWaXNpYmxlU3ViU2VjdGlvbiwgY2hhbmdlQ2xhc3NGb3JUYWJsZXMsIHRoaXMpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRmluZCBhIHRhYmxlIGluIGJsb2NrcyBvZiBzZWN0aW9uLlxuXHQgKiBAcGFyYW0gYmxvY2sgT25lIHN1YiBzZWN0aW9uIGJsb2NrXG5cdCAqIEByZXR1cm5zIFRhYmxlIGlmIGV4aXN0c1xuXHQgKi9cblx0cHJpdmF0ZSBzZWFyY2hUYWJsZUluQmxvY2soYmxvY2s6IFN1YlNlY3Rpb25CbG9jayk6IFRhYmxlIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBjb250cm9sID0gYmxvY2suY29udGVudDtcblx0XHRsZXQgdGFibGVBUEk6IFRhYmxlQVBJIHwgdW5kZWZpbmVkO1xuXHRcdGlmIChibG9jay5pc0EoXCJzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2UuY29udHJvbHMuU3ViU2VjdGlvbkJsb2NrXCIpKSB7XG5cdFx0XHQvLyBUaGUgdGFibGUgbWF5IGN1cnJlbnRseSBiZSBzaG93biBpbiBhIGZ1bGwgc2NyZWVuIGRpYWxvZywgd2UgY2FuIHRoZW4gZ2V0IHRoZSByZWZlcmVuY2UgdG8gdGhlIFRhYmxlQVBJXG5cdFx0XHQvLyBjb250cm9sIGZyb20gdGhlIGN1c3RvbSBkYXRhIG9mIHRoZSBwbGFjZSBob2xkZXIgcGFuZWxcblx0XHRcdGlmIChjb250cm9sLmlzQShcInNhcC5tLlBhbmVsXCIpICYmIGNvbnRyb2wuZGF0YShcIkZ1bGxTY3JlZW5UYWJsZVBsYWNlSG9sZGVyXCIpKSB7XG5cdFx0XHRcdHRhYmxlQVBJID0gY29udHJvbC5kYXRhKFwidGFibGVBUElyZWZlcmVuY2VcIik7XG5cdFx0XHR9IGVsc2UgaWYgKGNvbnRyb2wuaXNBKFwic2FwLmZlLm1hY3Jvcy50YWJsZS5UYWJsZUFQSVwiKSkge1xuXHRcdFx0XHR0YWJsZUFQSSA9IGNvbnRyb2wgYXMgVGFibGVBUEk7XG5cdFx0XHR9XG5cdFx0XHRpZiAodGFibGVBUEkpIHtcblx0XHRcdFx0cmV0dXJuIHRhYmxlQVBJLmNvbnRlbnQ7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRvbkJlZm9yZVJlbmRlcmluZygpOiB2b2lkIHtcblx0XHRQYWdlQ29udHJvbGxlci5wcm90b3R5cGUub25CZWZvcmVSZW5kZXJpbmcuYXBwbHkodGhpcyk7XG5cdFx0Ly8gSW4gdGhlIHJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3Qgc2NlbmFyaW8gd2UgbmVlZCB0byBlbnN1cmUgaW4gY2FzZSBvZiByZWxvYWQvcmVmcmVzaCB0aGF0IHRoZSBtZXRhIG1vZGVsIGluIHRoZSBtZXRob2RlIHJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3Qgb2YgdGhlIEZpZWxkUnVudGltZSBpcyBhdmFpbGFibGVcblx0XHRpZiAodGhpcy5vVmlldy5nZXRWaWV3RGF0YSgpPy5yZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0ICYmIENvbW1vbkhlbHBlci5nZXRNZXRhTW9kZWwoKSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRDb21tb25IZWxwZXIuc2V0TWV0YU1vZGVsKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdH1cblx0fVxuXG5cdG9uQWZ0ZXJSZW5kZXJpbmcoKTogdm9pZCB7XG5cdFx0bGV0IHN1YlNlY3Rpb25zOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdO1xuXHRcdGlmICh0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLmdldFVzZUljb25UYWJCYXIoKSkge1xuXHRcdFx0Y29uc3Qgc2VjdGlvbnMgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLmdldFNlY3Rpb25zKCk7XG5cdFx0XHRmb3IgKGNvbnN0IHNlY3Rpb24gb2Ygc2VjdGlvbnMpIHtcblx0XHRcdFx0c3ViU2VjdGlvbnMgPSBzZWN0aW9uLmdldFN1YlNlY3Rpb25zKCk7XG5cdFx0XHRcdHRoaXMuY2hlY2tTZWN0aW9uc0Zvck5vblJlc3BvbnNpdmVUYWJsZShzdWJTZWN0aW9ucyk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHN1YlNlY3Rpb25zID0gdGhpcy5fZ2V0QWxsU3ViU2VjdGlvbnMoKTtcblx0XHRcdHRoaXMuY2hlY2tTZWN0aW9uc0Zvck5vblJlc3BvbnNpdmVUYWJsZShzdWJTZWN0aW9ucyk7XG5cdFx0fVxuXHR9XG5cblx0X29uQmVmb3JlQmluZGluZyhvQ29udGV4dDogT0RhdGFWNENvbnRleHQsIG1QYXJhbWV0ZXJzOiBCaW5kaW5nUGFyYW1zID0ge30pOiB2b2lkIHtcblx0XHQvLyBUT0RPOiB3ZSBzaG91bGQgY2hlY2sgaG93IHRoaXMgY29tZXMgdG9nZXRoZXIgd2l0aCB0aGUgdHJhbnNhY3Rpb24gaGVscGVyLCBzYW1lIHRvIHRoZSBjaGFuZ2UgaW4gdGhlIGFmdGVyQmluZGluZ1xuXHRcdGNvbnN0IGFUYWJsZXMgPSB0aGlzLl9maW5kVGFibGVzKCksXG5cdFx0XHRvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCksXG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0b0ludGVybmFsTW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcImludGVybmFsXCIpLFxuXHRcdFx0YUJhdGNoR3JvdXBzID0gb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiYmF0Y2hHcm91cHNcIik7XG5cdFx0bGV0IG9GYXN0Q3JlYXRpb25Sb3c7XG5cdFx0YUJhdGNoR3JvdXBzLnB1c2goXCIkYXV0b1wiKTtcblx0XHRpZiAobVBhcmFtZXRlcnMucmVhc29uICE9PSBOYXZpZ2F0aW9uUmVhc29uLkVkaXRGbG93QWN0aW9uKSB7XG5cdFx0XHR0aGlzLl9jbG9zZVNpZGVDb250ZW50KCk7XG5cdFx0fVxuXHRcdGNvbnN0IG9wQ29udGV4dCA9IG9PYmplY3RQYWdlLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQ7XG5cdFx0aWYgKFxuXHRcdFx0b3BDb250ZXh0ICYmXG5cdFx0XHRvcENvbnRleHQuaGFzUGVuZGluZ0NoYW5nZXMoKSAmJlxuXHRcdFx0IWFCYXRjaEdyb3Vwcy5zb21lKG9wQ29udGV4dC5nZXRNb2RlbCgpLmhhc1BlbmRpbmdDaGFuZ2VzLmJpbmQob3BDb250ZXh0LmdldE1vZGVsKCkpKVxuXHRcdCkge1xuXHRcdFx0LyogXHRJbiBjYXNlIHRoZXJlIGFyZSBwZW5kaW5nIGNoYW5nZXMgZm9yIHRoZSBjcmVhdGlvbiByb3cgYW5kIG5vIG90aGVycyB3ZSBuZWVkIHRvIHJlc2V0IHRoZSBjaGFuZ2VzXG5cdFx0XHRcdFx0XHRcdFx0VE9ETzogdGhpcyBpcyBqdXN0IGEgcXVpY2sgc29sdXRpb24sIHRoaXMgbmVlZHMgdG8gYmUgcmV3b3JrZWRcblx0XHRcdFx0XHRcdFx0XHQqL1xuXG5cdFx0XHRvcENvbnRleHQuZ2V0QmluZGluZygpLnJlc2V0Q2hhbmdlcygpO1xuXHRcdH1cblxuXHRcdC8vIEZvciBub3cgd2UgaGF2ZSB0byBzZXQgdGhlIGJpbmRpbmcgY29udGV4dCB0byBudWxsIGZvciBldmVyeSBmYXN0IGNyZWF0aW9uIHJvd1xuXHRcdC8vIFRPRE86IEdldCByaWQgb2YgdGhpcyBjb2Rpbmcgb3IgbW92ZSBpdCB0byBhbm90aGVyIGxheWVyIC0gdG8gYmUgZGlzY3Vzc2VkIHdpdGggTURDIGFuZCBtb2RlbFxuXHRcdGZvciAoY29uc3QgaXRlbSBvZiBhVGFibGVzKSB7XG5cdFx0XHRvRmFzdENyZWF0aW9uUm93ID0gaXRlbS5nZXRDcmVhdGlvblJvdygpO1xuXHRcdFx0aWYgKG9GYXN0Q3JlYXRpb25Sb3cpIHtcblx0XHRcdFx0b0Zhc3RDcmVhdGlvblJvdy5zZXRCaW5kaW5nQ29udGV4dChudWxsKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBTY3JvbGwgdG8gcHJlc2VudCBTZWN0aW9uIHNvIHRoYXQgYmluZGluZ3MgYXJlIGVuYWJsZWQgZHVyaW5nIG5hdmlnYXRpb24gdGhyb3VnaCBwYWdpbmF0b3IgYnV0dG9ucywgYXMgdGhlcmUgaXMgbm8gdmlldyByZXJlbmRlcmluZy9yZWJpbmRcblx0XHRjb25zdCBmblNjcm9sbFRvUHJlc2VudFNlY3Rpb24gPSBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRpZiAoIShvT2JqZWN0UGFnZSBhcyB7IGlzRmlyc3RSZW5kZXJpbmc/OiAoKSA9PiBib29sZWFuIH0pLmlzRmlyc3RSZW5kZXJpbmc/LigpICYmICFtUGFyYW1ldGVycy5iUGVyc2lzdE9QU2Nyb2xsKSB7XG5cdFx0XHRcdG9PYmplY3RQYWdlLnNldFNlbGVjdGVkU2VjdGlvbihudWxsIGFzIHVua25vd24gYXMgc3RyaW5nKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdG9PYmplY3RQYWdlLmF0dGFjaEV2ZW50T25jZShcIm1vZGVsQ29udGV4dENoYW5nZVwiLCBmblNjcm9sbFRvUHJlc2VudFNlY3Rpb24pO1xuXG5cdFx0Y29uc3QgZm5PUFJlbmRlcmluZ0xheW91dCA9IHtcblx0XHRcdG9uQWZ0ZXJSZW5kZXJpbmc6ICgpOiB2b2lkID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCk/LmVkaXRhYmxlSGVhZGVyQ29udGVudCkge1xuXHRcdFx0XHRcdGZuU2Nyb2xsVG9QcmVzZW50U2VjdGlvbigpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9PYmplY3RQYWdlLnJlbW92ZUV2ZW50RGVsZWdhdGUoZm5PUFJlbmRlcmluZ0xheW91dCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRvT2JqZWN0UGFnZS5hZGRFdmVudERlbGVnYXRlKGZuT1BSZW5kZXJpbmdMYXlvdXQpO1xuXG5cdFx0Ly9TZXQgdGhlIEJpbmRpbmcgZm9yIFBhZ2luYXRvcnMgdXNpbmcgTGlzdEJpbmRpbmcgSURcblx0XHR0aGlzLl9pbml0aWFsaXplUGFnaW5hdGlvbihvQ29udGV4dCwgb0ludGVybmFsTW9kZWwsIG1QYXJhbWV0ZXJzPy5saXN0QmluZGluZyk7XG5cblx0XHRpZiAob09iamVjdFBhZ2UuZ2V0RW5hYmxlTGF6eUxvYWRpbmcoKSkge1xuXHRcdFx0dGhpcy5fZGlzYWJsZUJsb2Nrc0JpbmRpbmdzKG9PYmplY3RQYWdlKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5wbGFjZWhvbGRlci5pc1BsYWNlaG9sZGVyRW5hYmxlZCgpICYmIG1QYXJhbWV0ZXJzLnNob3dQbGFjZWhvbGRlcikge1xuXHRcdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRcdGNvbnN0IG9OYXZDb250YWluZXIgPSAob1ZpZXcuZ2V0UGFyZW50KCkgYXMgdW5rbm93biBhcyB7IG9Db250YWluZXI6IENvbnRyb2wgfSkub0NvbnRhaW5lci5nZXRQYXJlbnQoKTtcblx0XHRcdGlmIChvTmF2Q29udGFpbmVyKSB7XG5cdFx0XHRcdHRoaXMucGxhY2Vob2xkZXIuZW5hYmxlQW5pbWF0aW9uKCk7XG5cdFx0XHRcdChvTmF2Q29udGFpbmVyIGFzIHVua25vd24gYXMgeyBzaG93UGxhY2Vob2xkZXI6IEZ1bmN0aW9uIH0pLnNob3dQbGFjZWhvbGRlcih7fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBnZXRGaXJzdEVkaXRhYmxlSW5wdXQoKTogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgZG9tRWRpdGFibGVFbGVtZW50ID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKS5fZ2V0Rmlyc3RFZGl0YWJsZUlucHV0KCk7XG5cdFx0cmV0dXJuIGRvbUVkaXRhYmxlRWxlbWVudCA/IFVJNUVsZW1lbnQuY2xvc2VzdFRvKGRvbUVkaXRhYmxlRWxlbWVudCkgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBmaXJzdCBjbGlja2FibGUgZWxlbWVudCBpbiB0aGUgaGVhZGVyIG9mIHRoZSBvYmplY3QgcGFnZS5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIG9iamVjdFBhZ2UgT2JqZWN0IFBhZ2UgTGF5b3V0IGNvbnRyb2xcblx0ICogQHJldHVybnMgVGhlIGZpcnN0IGNsaWNrYWJsZSBlbGVtZW50IGZvdW5kIGluIHRoZSBoZWFkZXJcblx0ICovXG5cdHByaXZhdGUgZ2V0Rmlyc3RDbGlja2FibGVFbGVtZW50KG9iamVjdFBhZ2U6IE9iamVjdFBhZ2VMYXlvdXQpOiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkIHtcblx0XHRsZXQgZmlyc3RDbGlja2FibGVFbGVtZW50O1xuXHRcdGNvbnN0IGFjdGlvbnMgPSBvYmplY3RQYWdlLmdldEhlYWRlclRpdGxlKCkgJiYgKG9iamVjdFBhZ2UuZ2V0SGVhZGVyVGl0bGUoKSBhcyBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlKS5nZXRBY3Rpb25zKCk7XG5cdFx0aWYgKGFjdGlvbnM/Lmxlbmd0aCkge1xuXHRcdFx0Zmlyc3RDbGlja2FibGVFbGVtZW50ID0gYWN0aW9ucy5maW5kKGZ1bmN0aW9uIChhY3Rpb246IENvbnRyb2wpIHtcblx0XHRcdFx0Ly8gRHVlIHRvIHRoZSBsZWZ0IGFsaWdubWVudCBvZiB0aGUgRHJhZnQgc3dpdGNoIGFuZCB0aGUgY29sbGFib3JhdGl2ZSBkcmFmdCBhdmF0YXIgY29udHJvbHNcblx0XHRcdFx0Ly8gdGhlcmUgaXMgYSBUb29sYmFyU3BhY2VyIGluIHRoZSBhY3Rpb25zIGFnZ3JlZ2F0aW9uIHdoaWNoIHdlIG5lZWQgdG8gZXhjbHVkZSBoZXJlIVxuXHRcdFx0XHQvLyBEdWUgdG8gdGhlIEFDQyByZXBvcnQsIHdlIGFsc28gbmVlZCBub3QgdG8gY2hlY2sgZm9yIHRoZSBJbnZpc2libGVUZXh0IGVsZW1lbnRzXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRhY3Rpb24uaXNBPFNoYXJlQVBJPihcInNhcC5mZS5tYWNyb3Muc2hhcmUuU2hhcmVBUElcIikgfHxcblx0XHRcdFx0XHRhY3Rpb24uaXNBPFN1bW1hcml6YXRpb25CdXR0b24+KFwic2FwLmZlLm1hY3Jvcy5haS5TdW1tYXJpemF0aW9uQnV0dG9uXCIpIHx8XG5cdFx0XHRcdFx0YWN0aW9uLmlzQTxFYXN5RmlsbEJ1dHRvbj4oXCJzYXAuZmUubWFjcm9zLmFpLkVhc3lGaWxsQnV0dG9uXCIpIHx8XG5cdFx0XHRcdFx0YWN0aW9uLmlzQTxDb2xsYWJvcmF0aW9uRHJhZnQ+KFwic2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLmNvbXBvbmVudHMuQ29sbGFib3JhdGlvbkRyYWZ0XCIpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdC8vIHNpbmNlIFNoYXJlQVBJLCBzdW1tYXJpemUgYW5kIENvbGxhYm9yYXRpb25EcmFmdCBkb2VzIG5vdCBoYXZlIGEgZGlzYWJsZSBwcm9wZXJ0eVxuXHRcdFx0XHRcdC8vIGhlbmNlIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2hlY2sgaWYgaXQgaXMgZGlzYmFsZWQgb3Igbm90XG5cdFx0XHRcdFx0cmV0dXJuIGFjdGlvbi5nZXRWaXNpYmxlKCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIWFjdGlvbi5pc0E8SW52aXNpYmxlVGV4dD4oXCJzYXAudWkuY29yZS5JbnZpc2libGVUZXh0XCIpICYmICFhY3Rpb24uaXNBPFRvb2xiYXJTcGFjZXI+KFwic2FwLm0uVG9vbGJhclNwYWNlclwiKSkge1xuXHRcdFx0XHRcdHJldHVybiBhY3Rpb24uZ2V0VmlzaWJsZSgpICYmIChhY3Rpb24gYXMgQnV0dG9uKS5nZXRFbmFibGVkKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gZmlyc3RDbGlja2FibGVFbGVtZW50O1xuXHR9XG5cblx0LyoqXG5cdCAqIERpc2FibGUgdGhlIGJpbmRpbmdzIG9mIGJsb2NrcyBpbiBPYmplY3QgUGFnZSBMYXlvdXQgYmFzZWQgb24gdGhlIGl0cyBvdmVyYWxsIGNvbnRlbnQuXG5cdCAqIEBwYXJhbSBvYmplY3RQYWdlIE9iamVjdCBQYWdlIExheW91dCBjb250cm9sXG5cdCAqL1xuXHRfZGlzYWJsZUJsb2Nrc0JpbmRpbmdzKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyLCBvYmplY3RQYWdlOiBPYmplY3RQYWdlTGF5b3V0KTogdm9pZCB7XG5cdFx0Y29uc3QgYVNlY3Rpb25zID0gb2JqZWN0UGFnZS5nZXRTZWN0aW9ucygpO1xuXHRcdGNvbnN0IGJVc2VJY29uVGFiQmFyID0gb2JqZWN0UGFnZS5nZXRVc2VJY29uVGFiQmFyKCk7XG5cdFx0bGV0IGlTa2lwID0gMzsgLy8gMyBzZWN0aW9ucy9zdWJzZWN0aW9ucyBhcmUgbG9hZGVkIGluaXRpYWxseSwgdGhlIG90aGVycyBhcmUgbG9hZGVkIGxhemlseVxuXHRcdGNvbnN0IGJJc0luRWRpdE1vZGUgPSBDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKHRoaXMuZ2V0VmlldygpKTtcblx0XHRjb25zdCBiRWRpdGFibGVIZWFkZXIgPSB0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpLmVkaXRhYmxlSGVhZGVyQ29udGVudDtcblx0XHRmb3IgKGxldCBpU2VjdGlvbiA9IDA7IGlTZWN0aW9uIDwgYVNlY3Rpb25zLmxlbmd0aDsgaVNlY3Rpb24rKykge1xuXHRcdFx0Y29uc3Qgb1NlY3Rpb24gPSBhU2VjdGlvbnNbaVNlY3Rpb25dO1xuXHRcdFx0Y29uc3QgYVN1YlNlY3Rpb25zID0gb1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKTtcblx0XHRcdGZvciAobGV0IGlTdWJTZWN0aW9uID0gMDsgaVN1YlNlY3Rpb24gPCBhU3ViU2VjdGlvbnMubGVuZ3RoOyBpU3ViU2VjdGlvbisrLCBpU2tpcC0tKSB7XG5cdFx0XHRcdC8vIEluIEljb25UYWJCYXIgbW9kZSBrZWVwIHRoZSBzZWNvbmQgc2VjdGlvbiBib3VuZCBpZiB0aGVyZSBpcyBhbiBlZGl0YWJsZSBoZWFkZXIgYW5kIHdlIGFyZSBzd2l0Y2hpbmcgdG8gZGlzcGxheSBtb2RlXG5cdFx0XHRcdGlmIChpU2tpcCA8IDEgfHwgKGJVc2VJY29uVGFiQmFyICYmIChpU2VjdGlvbiA+IDEgfHwgKGlTZWN0aW9uID09PSAxICYmICFiRWRpdGFibGVIZWFkZXIgJiYgIWJJc0luRWRpdE1vZGUpKSkpIHtcblx0XHRcdFx0XHRjb25zdCBvU3ViU2VjdGlvbiA9IGFTdWJTZWN0aW9uc1tpU3ViU2VjdGlvbl07XG5cdFx0XHRcdFx0aWYgKG9TdWJTZWN0aW9uLmRhdGEoKS5pc1Zpc2liaWxpdHlEeW5hbWljICE9PSBcInRydWVcIikge1xuXHRcdFx0XHRcdFx0Ly8gU3ViU2VjdGlvbidzIGJpbmRpbmcgaXMgZW5hYmxlZC5cblx0XHRcdFx0XHRcdG9TdWJTZWN0aW9uLnNldEJpbmRpbmdDb250ZXh0KHVuZGVmaW5lZCk7XG5cdFx0XHRcdFx0XHRjb25zdCBibG9ja3MgPSBvU3ViU2VjdGlvbi5nZXRCbG9ja3MoKSBhcyBTdWJTZWN0aW9uQmxvY2tbXTtcblx0XHRcdFx0XHRcdC8vIFN1YlNlY3Rpb24ncyBjb250ZW50cyBiaW5kaW5nIGlzIGRpc2FibGVkLlxuXHRcdFx0XHRcdFx0YmxvY2tzLmZvckVhY2goKGJsb2NrKSA9PiBibG9jay5zZXRCaW5kaW5nQ29udGV4dChudWxsKSk7XG5cdFx0XHRcdFx0XHRvU3ViU2VjdGlvbi5nZXRNb3JlQmxvY2tzKCkuZm9yRWFjaCgoc3ViQmxvY2spID0+IHN1YkJsb2NrLnNldEJpbmRpbmdDb250ZXh0KG51bGwpKTtcblx0XHRcdFx0XHRcdG9TdWJTZWN0aW9uLmdldEFjdGlvbnMoKS5mb3JFYWNoKChhY3Rpb25zKSA9PiBhY3Rpb25zLnNldEJpbmRpbmdDb250ZXh0KG51bGwpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfZ2V0Rmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkRnJvbVN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdKTogSW5wdXRCYXNlIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoYVN1YlNlY3Rpb25zKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHN1YlNlY3Rpb24gb2YgYVN1YlNlY3Rpb25zKSB7XG5cdFx0XHRcdGNvbnN0IGFCbG9ja3MgPSBzdWJTZWN0aW9uLmdldEJsb2NrcygpIGFzIChGb3JtIHwgRm9ybUFQSSlbXTtcblxuXHRcdFx0XHRpZiAoYUJsb2Nrcykge1xuXHRcdFx0XHRcdGZvciAoY29uc3QgYmxvY2tDb250cm9sIG9mIGFCbG9ja3MpIHtcblx0XHRcdFx0XHRcdGxldCBhRm9ybUNvbnRhaW5lcnM7XG5cblx0XHRcdFx0XHRcdGlmIChibG9ja0NvbnRyb2wuaXNBPEZvcm0+KFwic2FwLnVpLmxheW91dC5mb3JtLkZvcm1cIikpIHtcblx0XHRcdFx0XHRcdFx0YUZvcm1Db250YWluZXJzID0gYmxvY2tDb250cm9sLmdldEZvcm1Db250YWluZXJzKCk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGJsb2NrQ29udHJvbC5nZXRDb250ZW50ICYmIGJsb2NrQ29udHJvbC5nZXRDb250ZW50KCk/LmlzQTxGb3JtPihcInNhcC51aS5sYXlvdXQuZm9ybS5Gb3JtXCIpKSB7XG5cdFx0XHRcdFx0XHRcdGFGb3JtQ29udGFpbmVycyA9IChibG9ja0NvbnRyb2wuZ2V0Q29udGVudCgpIGFzIEZvcm0pLmdldEZvcm1Db250YWluZXJzKCk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGJsb2NrQ29udHJvbD8uZ2V0Q29udGVudD8uKCk/LmlzQTxGb3JtQVBJPihcInNhcC5mZS5tYWNyb3MuZm9ybS5Gb3JtQVBJXCIpKSB7XG5cdFx0XHRcdFx0XHRcdGFGb3JtQ29udGFpbmVycyA9ICgoYmxvY2tDb250cm9sLmdldENvbnRlbnQoKSBhcyBGb3JtQVBJKS5nZXRDb250ZW50KCkgYXMgRm9ybSkuZ2V0Rm9ybUNvbnRhaW5lcnMoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChhRm9ybUNvbnRhaW5lcnMpIHtcblx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBmb3JtQ29udGFpbmVyIG9mIGFGb3JtQ29udGFpbmVycykge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFGb3JtRWxlbWVudHMgPSBmb3JtQ29udGFpbmVyLmdldEZvcm1FbGVtZW50cygpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChhRm9ybUVsZW1lbnRzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGZvcm1FbGVtZW50IG9mIGFGb3JtRWxlbWVudHMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgYUZpZWxkcyA9IGZvcm1FbGVtZW50LmdldEZpZWxkcygpIGFzIElucHV0QmFzZVtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBlbXB0eUZpZWxkID0gdGhpcy5nZXRGaXJzdEVtcHR5UmVxdWlyZWRGaWVsZChhRmllbGRzKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGVtcHR5RmllbGQpIHJldHVybiBlbXB0eUZpZWxkO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIFZlcmlmeSBpZiB0aGUgZmlyc3QgZmllbGQgaXMgZW1wdHkgYW5kIHJlcXVpcmVkLlxuXHQgKiBAcGFyYW0gZmllbGRzIFRoZSBmaWVsZHMgdG8gY2hlY2tcblx0ICogQHJldHVybnMgVGhlIGZpcnN0IGVtcHR5IHJlcXVpcmVkIGZpZWxkIG9yIHVuZGVmaW5lZCBpZiBubyBzdWNoIGZpZWxkIGV4aXN0c1xuXHQgKi9cblx0Z2V0Rmlyc3RFbXB0eVJlcXVpcmVkRmllbGQoZmllbGRzOiBJbnB1dEJhc2VbXSk6IElucHV0QmFzZSB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKCFmaWVsZHMgfHwgZmllbGRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG5cdFx0aWYgKCFmaWVsZHNbMF0uZ2V0UmVxdWlyZWQ/LigpKSByZXR1cm47XG5cblx0XHRsZXQgaXNFbXB0eSA9IGZhbHNlO1xuXG5cdFx0dHJ5IHtcblx0XHRcdGlmIChmaWVsZHNbMF0uaXNBKFwic2FwLmZlLm1hY3Jvcy5NdWx0aVZhbHVlRmllbGRcIikpIHtcblx0XHRcdFx0Y29uc3QgaXRlbXMgPSAoZmllbGRzWzBdIGFzIHVua25vd24gYXMgTXVsdGlWYWx1ZUZpZWxkQmxvY2spLmdldE11bHRpVmFsdWVGaWVsZCgpLmdldEl0ZW1zKCk7XG5cdFx0XHRcdGlzRW1wdHkgPSBpdGVtcy5sZW5ndGggPT09IDA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCB2YWx1ZSA9IChmaWVsZHNbMF0gYXMgSW5wdXRCYXNlKS5nZXRWYWx1ZSgpO1xuXHRcdFx0XHRpc0VtcHR5ID0gIXZhbHVlO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRMb2cuZGVidWcoYEVycm9yIHdoZW4gY2hlY2tpbmcgZmllbGQgcHJvcGVydGllczogJHtlcnJvcn1gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gaXNFbXB0eSA/IGZpZWxkc1swXSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIGluaXRpYWwgZm9jdXMgaW4gZWRpdCBtb2RlLlxuXHQgKiBAcGFyYW0gYVN1YlNlY3Rpb25zIE9iamVjdCBwYWdlIHN1YiBzZWN0aW9uc1xuXHQgKi9cblx0X3VwZGF0ZUZvY3VzSW5FZGl0TW9kZShhU3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10pOiB2b2lkIHtcblx0XHRzZXRUaW1lb3V0KFxuXHRcdFx0ZnVuY3Rpb24gKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKTogdm9pZCB7XG5cdFx0XHRcdC8vIFdlIHNldCB0aGUgZm9jdXMgaW4gYSB0aW1lZW91dCwgb3RoZXJ3aXNlIHRoZSBmb2N1cyBzb21ldGltZXMgZ29lcyB0byB0aGUgVGFiQmFyXG5cdFx0XHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRcdFx0Y29uc3Qgb01hbmRhdG9yeUZpZWxkID0gdGhpcy5fZ2V0Rmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkRnJvbVN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zKTtcblx0XHRcdFx0bGV0IG9GaWVsZFRvRm9jdXM7XG5cdFx0XHRcdGlmIChvTWFuZGF0b3J5RmllbGQpIHtcblx0XHRcdFx0XHRpZiAob01hbmRhdG9yeUZpZWxkLmlzQShcInNhcC5mZS5tYWNyb3MuTXVsdGlWYWx1ZUZpZWxkXCIpKSB7XG5cdFx0XHRcdFx0XHRvRmllbGRUb0ZvY3VzID0gKG9NYW5kYXRvcnlGaWVsZCBhcyB1bmtub3duIGFzIE11bHRpVmFsdWVGaWVsZEJsb2NrKS5nZXRNdWx0aVZhbHVlRmllbGQoKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0b0ZpZWxkVG9Gb2N1cyA9IChcblx0XHRcdFx0XHRcdFx0b01hbmRhdG9yeUZpZWxkIGFzIHVua25vd24gYXMgeyBjb250ZW50OiB7IGdldENvbnRlbnRFZGl0OiBGdW5jdGlvbiB9IH1cblx0XHRcdFx0XHRcdCkuY29udGVudC5nZXRDb250ZW50RWRpdCgpWzBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRvRmllbGRUb0ZvY3VzID0gdGhpcy5nZXRGaXJzdEVkaXRhYmxlSW5wdXQoKSA/PyB0aGlzLmdldEZpcnN0Q2xpY2thYmxlRWxlbWVudChvT2JqZWN0UGFnZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9GaWVsZFRvRm9jdXMpIHtcblx0XHRcdFx0XHRjb25zdCBmb2N1c0luZm8gPSBvRmllbGRUb0ZvY3VzLmdldEZvY3VzSW5mbygpIGFzIHsgdGFyZ2V0SW5mbzogb2JqZWN0IH07XG5cdFx0XHRcdFx0Zm9jdXNJbmZvLnRhcmdldEluZm8gPSB7IHNpbGVudDogdHJ1ZSB9O1xuXHRcdFx0XHRcdGlmIChvRmllbGRUb0ZvY3VzLmlzQShcInNhcC51aS5tZGMuZmllbGQuRmllbGRJbnB1dFwiKSkge1xuXHRcdFx0XHRcdFx0b0ZpZWxkVG9Gb2N1cyA9IG9GaWVsZFRvRm9jdXMuZ2V0UGFyZW50KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG9GaWVsZFRvRm9jdXMuZm9jdXMoZm9jdXNJbmZvKTtcblx0XHRcdFx0fVxuXHRcdFx0fS5iaW5kKHRoaXMpLFxuXHRcdFx0MFxuXHRcdCk7XG5cdH1cblxuXHRfaGFuZGxlU3ViU2VjdGlvbkVudGVyZWRWaWV3UG9ydChvRXZlbnQ6IFVJNUV2ZW50PHsgc3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24gfT4pOiB2b2lkIHtcblx0XHRjb25zdCBvU3ViU2VjdGlvbiA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJzdWJTZWN0aW9uXCIpO1xuXHRcdGNvbnN0IGJsb2NrcyA9IG9TdWJTZWN0aW9uLmdldEJsb2NrcygpIGFzIFN1YlNlY3Rpb25CbG9ja1tdO1xuXHRcdGJsb2Nrcy5mb3JFYWNoKChibG9jaykgPT4gYmxvY2suc2V0QmluZGluZ0NvbnRleHQodW5kZWZpbmVkKSk7XG5cdFx0b1N1YlNlY3Rpb24uZ2V0TW9yZUJsb2NrcygpLmZvckVhY2goKHN1YkJsb2NrKSA9PiBzdWJCbG9jay5zZXRCaW5kaW5nQ29udGV4dCh1bmRlZmluZWQpKTtcblx0XHRvU3ViU2VjdGlvbi5nZXRBY3Rpb25zKCkuZm9yRWFjaCgoYWN0aW9ucykgPT4gYWN0aW9ucy5zZXRCaW5kaW5nQ29udGV4dCh1bmRlZmluZWQpKTtcblx0fVxuXG5cdF9vbkJhY2tOYXZpZ2F0aW9uSW5EcmFmdChvQ29udGV4dDogT0RhdGFWNENvbnRleHQpOiB2b2lkIHtcblx0XHR0aGlzLm1lc3NhZ2VIYW5kbGVyLnJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcygpO1xuXG5cdFx0Ly8gRnVuY3Rpb24gdG8gbmF2aWdhdGUgYmFjaywgb3IgZGlzcGxheSB0aGUgbGF1bmNocGFkIGlmIHdlJ3JlIG9uIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBoaXN0b3J5XG5cdFx0Y29uc3QgbmF2QmFjayA9ICgpOiB2b2lkID0+IHtcblx0XHRcdGNvbnN0IGN1cnJlbnRVUkwgPSBkb2N1bWVudC5VUkw7XG5cdFx0XHRoaXN0b3J5LmJhY2soKTtcblx0XHRcdC8vIEluIGNhc2UgdGhlcmUgaXMgbm8gcHJldmlvdXMgcGFnZSBpbiB0aGUgaGlzdG9yeSwgaGlzdG9yeS5iYWNrIGRvZXMgbm90aGluZy5cblx0XHRcdC8vIEluIHRoaXMgY2FzZSwgd2UgbmVlZCB0byB1c2UgbmF2aWdhdGVCYWNrRnJvbUNvbnRleHQsIHRoYXQgd2lsbCBkaXNwbGF5IHRoZSBob21lIHBhZ2Vcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRpZiAoZG9jdW1lbnQuVVJMID09PSBjdXJyZW50VVJMKSB7XG5cdFx0XHRcdFx0dGhpcy5fcm91dGluZy5uYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dChvQ29udGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sIDEwMCk7XG5cdFx0fTtcblxuXHRcdGlmICh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRlclByb3h5KCkuY2hlY2tJZkJhY2tIYXNTYW1lQ29udGV4dCgpKSB7XG5cdFx0XHQvLyBCYWNrIG5hdiB3aWxsIGtlZXAgdGhlIHNhbWUgY29udGV4dCAtLT4gbm8gbmVlZCB0byBkaXNwbGF5IHRoZSBkaWFsb2dcblx0XHRcdGhpc3RvcnkuYmFjaygpO1xuXHRcdH0gZWxzZSBpZiAoIXRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCkpIHtcblx0XHRcdC8vIFRoaXMgb2JqZWN0IHBhZ2UgZG9lc24ndCBoYXZlIGEgYmluZGluZyBjb250ZXh0LCBidXQgc3RpbGwgaGFuZGxlcyB0aGUgc2hlbGwgYmFjayBuYXZpZ2F0aW9uIC0tPiBwZm9ybSB0aGUgbmF2IGJhY2sgYW5kIHJlbW92ZSB0aGUgbmF2YmFjayBoYW5kbGVyIGFzIGl0IG1ha2VzIG5vIHNlbnNlIGFueSBsb25nZXJcblx0XHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KClcblx0XHRcdFx0LmdldFNoZWxsU2VydmljZXMoKVxuXHRcdFx0XHQuc2V0QmFja05hdmlnYXRpb24odW5kZWZpbmVkKVxuXHRcdFx0XHQudGhlbihuYXZCYWNrKVxuXHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRMb2cud2FybmluZyhcIkVycm9yIHdoaWxlIHNldHRpbmcgYmFjayBuYXZpZ2F0aW9uXCIsIGUpO1xuXHRcdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZHJhZnQucHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24oXG5cdFx0XHRcdG5hdkJhY2ssXG5cdFx0XHRcdEZ1bmN0aW9uLnByb3RvdHlwZSxcblx0XHRcdFx0b0NvbnRleHQsXG5cdFx0XHRcdHRoaXMsXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdGRyYWZ0Lk5hdmlnYXRpb25UeXBlLkJhY2tOYXZpZ2F0aW9uXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0X29uQWZ0ZXJCaW5kaW5nKGlucHV0QmluZGluZ0NvbnRleHQ6IENvbnRleHQgfCB1bmRlZmluZWQsIG1QYXJhbWV0ZXJzOiBCaW5kaW5nUGFyYW1zIHwgdW5kZWZpbmVkKTogdm9pZCB7XG5cdFx0Y29uc3QgdmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IHZpZXdMZXZlbCA9IHZpZXc/LmdldFZpZXdEYXRhKCk/LnZpZXdMZXZlbDtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2ZpbmRUYWJsZXMoKTtcblxuXHRcdHRoaXMuX3NpZGVFZmZlY3RzLmNsZWFyRmllbGRHcm91cHNWYWxpZGl0eSgpO1xuXG5cdFx0Ly8gVE9ETzogdGhpcyBpcyBvbmx5IGEgdGVtcCBzb2x1dGlvbiBhcyBsb25nIGFzIHRoZSBtb2RlbCBmaXggdGhlIGNhY2hlIGlzc3VlIGFuZCB3ZSB1c2UgdGhpcyBhZGRpdGlvbmFsXG5cdFx0Ly8gYmluZGluZyB3aXRoIG93blJlcXVlc3Rcblx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IG9PYmplY3RQYWdlLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQ7XG5cblx0XHRsZXQgYUlCTkFjdGlvbnM6IFVJNUVsZW1lbnRbXSA9IFtdO1xuXHRcdG9PYmplY3RQYWdlLmdldFNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1NlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uKSB7XG5cdFx0XHRvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpLmZvckVhY2goZnVuY3Rpb24gKG9TdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbikge1xuXHRcdFx0XHRhSUJOQWN0aW9ucyA9IENvbW1vblV0aWxzLmdldElCTkFjdGlvbnMob1N1YlNlY3Rpb24sIGFJQk5BY3Rpb25zKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0Ly8gQXNzaWduIGludGVybmFsIGJpbmRpbmcgY29udGV4dHMgdG8gb0Zvcm1Db250YWluZXI6XG5cdFx0Ly8gMS4gSXQgaXMgbm90IHBvc3NpYmxlIHRvIGFzc2lnbiB0aGUgaW50ZXJuYWwgYmluZGluZyBjb250ZXh0IHRvIHRoZSBYTUwgZnJhZ21lbnRcblx0XHQvLyAoRm9ybUNvbnRhaW5lci5mcmFnbWVudC54bWwpIHlldCAtIGl0IGlzIHVzZWQgYWxyZWFkeSBmb3IgdGhlIGRhdGEtc3RydWN0dXJlLlxuXHRcdC8vIDIuIEFub3RoZXIgcHJvYmxlbSBpcywgdGhhdCBGb3JtQ29udGFpbmVycyBhc3NpZ25lZCB0byBhICdNb3JlQmxvY2snIGRvZXMgbm90IGhhdmUgYW5cblx0XHQvLyBpbnRlcm5hbCBtb2RlbCBjb250ZXh0IGF0IGFsbC5cblxuXHRcdGFUYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSkge1xuXHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0XHRpZiAob0ludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImNyZWF0aW9uUm93RmllbGRWYWxpZGl0eVwiLCB7fSk7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImNyZWF0aW9uUm93Q3VzdG9tVmFsaWRpdHlcIiwge30pO1xuXG5cdFx0XHRcdGFJQk5BY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0SUJOQWN0aW9ucyhvVGFibGUsIGFJQk5BY3Rpb25zKTtcblxuXHRcdFx0XHQvLyB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3IgQkNQOiAyMDgwMjE4MDA0XG5cdFx0XHRcdC8vIE5lZWQgdG8gZml4IHdpdGggQkxJOiBGSU9SSVRFQ0hQMS0xNTI3NFxuXHRcdFx0XHQvLyBvbmx5IGZvciBlZGl0IG1vZGUsIHdlIGNsZWFyIHRoZSB0YWJsZSBjYWNoZVxuXHRcdFx0XHQvLyBXb3JrYXJvdW5kIHN0YXJ0cyBoZXJlISFcblx0XHRcdFx0Y29uc3Qgb1RhYmxlUm93QmluZGluZyA9IG9UYWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0XHRcdGlmIChvVGFibGVSb3dCaW5kaW5nKSB7XG5cdFx0XHRcdFx0aWYgKE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChvVGFibGVSb3dCaW5kaW5nLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkpKSB7XG5cdFx0XHRcdFx0XHQvLyBhcHBseSBmb3IgYm90aCBlZGl0IGFuZCBkaXNwbGF5IG1vZGUgaW4gc3RpY2t5XG5cdFx0XHRcdFx0XHQob1RhYmxlUm93QmluZGluZyBhcyB1bmtub3duIGFzIHsgcmVtb3ZlQ2FjaGVzQW5kTWVzc2FnZXM6IEZ1bmN0aW9uIH0pLnJlbW92ZUNhY2hlc0FuZE1lc3NhZ2VzKFwiXCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBXb3JrYXJvdW5kIGVuZHMgaGVyZSEhXG5cblx0XHRcdFx0Ly8gQ2xlYXIgdGhlIHNlbGVjdGlvbiBpbiB0aGUgdGFibGUgYW5kIHVwZGF0ZSBhY3Rpb24gZW5hYmxlbWVudCBhY2NvcmRpbmdseVxuXHRcdFx0XHQvLyBXaWxsIHRvIGJlIGZpeGVkIHdpdGggQkxJOiBGSU9SSVRFQ0hQMS0yNDMxOFxuXHRcdFx0XHRjb25zdCB0YWJsZUFQSSA9IG9UYWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRcdFx0Y29uc3Qgb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IHRhYmxlQVBJID8gSlNPTi5wYXJzZSh0YWJsZUFQSS50YWJsZURlZmluaXRpb24ub3BlcmF0aW9uQXZhaWxhYmxlTWFwKSA6IHt9O1xuXG5cdFx0XHRcdEFjdGlvblJ1bnRpbWUuc2V0QWN0aW9uRW5hYmxlbWVudChvSW50ZXJuYWxNb2RlbENvbnRleHQsIG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAsIFtdLCBcInRhYmxlXCIpO1xuXG5cdFx0XHRcdG9UYWJsZS5jbGVhclNlbGVjdGlvbigpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdC8vUmV0cmlldmUgT2JqZWN0IFBhZ2UgaGVhZGVyIGFjdGlvbnMgZnJvbSBPYmplY3QgUGFnZSB0aXRsZSBjb250cm9sXG5cdFx0Y29uc3Qgb09iamVjdFBhZ2VUaXRsZSA9IG9PYmplY3RQYWdlLmdldEhlYWRlclRpdGxlKCkgYXMgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZTtcblx0XHRsZXQgYUlCTkhlYWRlckFjdGlvbnM6IFVJNUVsZW1lbnRbXSA9IFtdO1xuXHRcdGFJQk5IZWFkZXJBY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0SUJOQWN0aW9ucyhvT2JqZWN0UGFnZVRpdGxlLCBhSUJOSGVhZGVyQWN0aW9ucyk7XG5cdFx0YUlCTkFjdGlvbnMgPSBhSUJOQWN0aW9ucy5jb25jYXQoYUlCTkhlYWRlckFjdGlvbnMpO1xuXHRcdENvbW1vblV0aWxzLnVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5KGFJQk5BY3Rpb25zLCB0aGlzLmdldFZpZXcoKSk7XG5cblx0XHRsZXQgb01vZGVsOiBPRGF0YU1vZGVsLFxuXHRcdFx0b0ZpbmFsVUlTdGF0ZTogUHJvbWlzZTx1bmtub3duPiA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG5cdFx0Ly8gdGhpcyBzaG91bGQgbm90IGJlIG5lZWRlZCBhdCB0aGUgYWxsXG5cdFx0LyoqXG5cdFx0ICogQHBhcmFtIG9UYWJsZVxuXHRcdCAqL1xuXHRcdGNvbnN0IGhhbmRsZVRhYmxlTW9kaWZpY2F0aW9ucyA9IChvVGFibGU6IFRhYmxlKTogdm9pZCA9PiB7XG5cdFx0XHRjb25zdCBvQmluZGluZyA9IHRoaXMuX2dldFRhYmxlQmluZGluZyhvVGFibGUpLFxuXHRcdFx0XHRmbkhhbmRsZVRhYmxlUGF0Y2hFdmVudHMgPSBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdFx0VGFibGVIZWxwZXIuZW5hYmxlRmFzdENyZWF0aW9uUm93KFxuXHRcdFx0XHRcdFx0b1RhYmxlLmdldENyZWF0aW9uUm93KCksXG5cdFx0XHRcdFx0XHRvQmluZGluZy5nZXRQYXRoKCksXG5cdFx0XHRcdFx0XHRvQmluZGluZy5nZXRDb250ZXh0KCksXG5cdFx0XHRcdFx0XHRvTW9kZWwsXG5cdFx0XHRcdFx0XHRvRmluYWxVSVN0YXRlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fTtcblxuXHRcdFx0aWYgKCFvQmluZGluZykge1xuXHRcdFx0XHRMb2cuZXJyb3IoYEV4cGVjdGVkIGJpbmRpbmcgbWlzc2luZyBmb3IgdGFibGU6ICR7b1RhYmxlLmdldElkKCl9YCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG9CaW5kaW5nLmdldENvbnRleHQoKSkge1xuXHRcdFx0XHRmbkhhbmRsZVRhYmxlUGF0Y2hFdmVudHMoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGZuSGFuZGxlQ2hhbmdlID0gZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0XHRcdGlmIChvQmluZGluZy5nZXRDb250ZXh0KCkpIHtcblx0XHRcdFx0XHRcdGZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cygpO1xuXHRcdFx0XHRcdFx0b0JpbmRpbmcuZGV0YWNoQ2hhbmdlKGZuSGFuZGxlQ2hhbmdlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHRcdG9CaW5kaW5nLmF0dGFjaENoYW5nZShmbkhhbmRsZUNoYW5nZSk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGlmIChiaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0b01vZGVsID0gYmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKTtcblxuXHRcdFx0Ly8gQ29tcHV0ZSBFZGl0IE1vZGVcblx0XHRcdG9GaW5hbFVJU3RhdGUgPSB0aGlzLmVkaXRGbG93LmNvbXB1dGVNb2RlbHNGb3JFZGl0TW9kZShiaW5kaW5nQ29udGV4dCk7XG5cblx0XHRcdC8vIHVwZGF0ZSByZWxhdGVkIGFwcHNcblx0XHRcdHRoaXMuX3VwZGF0ZVJlbGF0ZWRBcHBzKCk7XG5cblx0XHRcdC8vQXR0YWNoIHRoZSBwYXRjaCBzZW50IGFuZCBwYXRjaCBjb21wbGV0ZWQgZXZlbnQgdG8gdGhlIG9iamVjdCBwYWdlIGJpbmRpbmcgc28gdGhhdCB3ZSBjYW4gcmVhY3Rcblx0XHRcdGNvbnN0IG9CaW5kaW5nID0gKGJpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcgJiYgYmluZGluZ0NvbnRleHQuZ2V0QmluZGluZygpKSB8fCBiaW5kaW5nQ29udGV4dDtcblxuXHRcdFx0Ly8gQXR0YWNoIHRoZSBldmVudCBoYW5kbGVyIG9ubHkgb25jZSB0byB0aGUgc2FtZSBiaW5kaW5nXG5cdFx0XHRpZiAodGhpcy5jdXJyZW50QmluZGluZyAhPT0gb0JpbmRpbmcpIHtcblx0XHRcdFx0b0JpbmRpbmcuYXR0YWNoRXZlbnQoXCJwYXRjaFNlbnRcIiwge30sIHRoaXMuZWRpdEZsb3cuaGFuZGxlUGF0Y2hTZW50LCB0aGlzKTtcblx0XHRcdFx0dGhpcy5jdXJyZW50QmluZGluZyA9IG9CaW5kaW5nO1xuXHRcdFx0fVxuXG5cdFx0XHRhVGFibGVzLmZvckVhY2goZnVuY3Rpb24gKG9UYWJsZTogVGFibGUpOiB2b2lkIHtcblx0XHRcdFx0Ly8gYWNjZXNzIGJpbmRpbmcgb25seSBhZnRlciB0YWJsZSBpcyBib3VuZFxuXHRcdFx0XHRUYWJsZVV0aWxzLndoZW5Cb3VuZChvVGFibGUpXG5cdFx0XHRcdFx0LnRoZW4oaGFuZGxlVGFibGVNb2RpZmljYXRpb25zKVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSB3YWl0aW5nIGZvciB0aGUgdGFibGUgdG8gYmUgYm91bmRcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIGJpbmRpbmcgaXMgcmVhZHkgaGVuY2UgY2FsbGluZyBpdCBpbiBvbkFmdGVyQmluZGluZ1xuXHRcdFx0KG9PYmplY3RQYWdlIGFzIHVua25vd24gYXMgeyBfdHJpZ2dlclZpc2libGVTdWJTZWN0aW9uc0V2ZW50czogRnVuY3Rpb24gfSkuX3RyaWdnZXJWaXNpYmxlU3ViU2VjdGlvbnNFdmVudHMoKTtcblxuXHRcdFx0Ly9UbyBDb21wdXRlIHRoZSBFZGl0IEJpbmRpbmcgb2YgdGhlIHN1Yk9iamVjdCBwYWdlIHVzaW5nIHJvb3Qgb2JqZWN0IHBhZ2UsIGNyZWF0ZSBhIGNvbnRleHQgZm9yIGRyYWZ0IHJvb3QgYW5kIHVwZGF0ZSB0aGUgZWRpdCBidXR0b24gaW4gc3ViIE9QIHVzaW5nIHRoZSBjb250ZXh0XG5cdFx0XHRBY3Rpb25SdW50aW1lLnVwZGF0ZUVkaXRCdXR0b25WaXNpYmlsaXR5QW5kRW5hYmxlbWVudCh0aGlzLmdldFZpZXcoKSk7XG5cdFx0fVxuXHRcdC8vIHdlIGFyZSBjbGVhcmluZyBhbnkgcHJldmlvdXMgZGF0YSBmcm9tIHJlY29tbWVuZGF0aW9ucyBldmVyeSB0aW1lIHdlIGNvbWUgdG8gbmV3IE9QXG5cdFx0Ly8gc28gdGhhdCBjYWNoZWQgcmVjb21tZW5kYXRpb25zIGFyZSBub3Qgc2hvd24gdG8gdXNlclxuXHRcdGlmICh2aWV3TGV2ZWwgJiYgdmlld0xldmVsID09PSAxKSB7XG5cdFx0XHRvRmluYWxVSVN0YXRlPy50aGVuKCgpID0+IHtcblx0XHRcdFx0dGhpcy5yZWNvbW1lbmRhdGlvbnMuY2xlYXJSZWNvbW1lbmRhdGlvbnMoKTtcblxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0dGhpcy5fdXBkYXRlQXZhaWxhYmxlQ2FyZHMoW10pO1xuXHRcdHRoaXMuZGlzcGxheUNvbGxhYm9yYXRpb25NZXNzYWdlKG1QYXJhbWV0ZXJzPy5yZWRpcmVjdGVkVG9Ob25EcmFmdCk7XG5cdFx0dGhpcy5fc2V0T1BNZXNzYWdlU3RyaXBJbnRlcm5hbENvbnRleHQoKTtcblxuXHRcdGNvbnN0IGFwcGx5QXBwU3RhdGUgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldEFwcFN0YXRlSGFuZGxlcigpLmFwcGx5QXBwU3RhdGUodmlldy5nZXRJZCgpLCB2aWV3KTtcblx0XHR0aGlzLnBhZ2VSZWFkeS53YWl0Rm9yKGFwcGx5QXBwU3RhdGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZSB0aGUgY2FyZHMgd2hlbiB0aGUgYmluZGluZyBpcyByZWZyZXNoZWQuXG5cdCAqIEBwYXJhbSBjYXJkcyBBcnJheSBvZiBjYXJkcyB0byBiZSB1cGRhdGVkXG5cdCAqL1xuXHRhc3luYyBfdXBkYXRlQXZhaWxhYmxlQ2FyZHMoY2FyZHM6IFdyYXBwZWRDYXJkW10pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRhd2FpdCB0aGlzLmNvbGxhYm9yYXRpb25NYW5hZ2VyLmNvbGxlY3RBdmFpbGFibGVDYXJkcyhjYXJkcyk7XG5cdFx0aWYgKGNhcmRzLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IGNhcmRPYmplY3QgPSB0aGlzLmNvbGxhYm9yYXRpb25NYW5hZ2VyLnVwZGF0ZUNhcmRzKGNhcmRzKTtcblx0XHRcdGNvbnN0IHBhcmVudEFwcElkID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRJZCgpO1xuXHRcdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UoKS5hZGRDYXJkc1RvQ29sbGFib3JhdGlvbk1hbmFnZXIoY2FyZE9iamVjdCwgcGFyZW50QXBwSWQpO1xuXHRcdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UoKS5zaGFyZUF2YWlsYWJsZUNhcmRzKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgaW50ZXJuYWwgYmluZGluZyBjb250ZXh0IG9mIHRoZSBNZXNzYWdlc3RyaXAgT1AuXG5cdCAqL1xuXHRfc2V0T1BNZXNzYWdlU3RyaXBJbnRlcm5hbENvbnRleHQoKTogdm9pZCB7XG5cdFx0Y29uc3QgdmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsQ29udGV4dCA9IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJNZXNzYWdlU3RyaXBcIiwgeyAuLi5pbnRlcm5hbE1vZGVsQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJNZXNzYWdlU3RyaXBcIikgfSk7XG5cdFx0aWYgKGludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHQob09iamVjdFBhZ2UuZ2V0SGVhZGVyVGl0bGUoKSBhcyB1bmtub3duIGFzIENvbnRyb2wpXG5cdFx0XHRcdD8uZmluZEVsZW1lbnRzKHRydWUsIChlbGVtOiBDb250cm9sKSA9PiBlbGVtLmlzQShcInNhcC5tLk1lc3NhZ2VTdHJpcFwiKSlcblx0XHRcdFx0LmZvckVhY2goKG1lc3NhZ2VTdHJpcDogVUk1RWxlbWVudCkgPT4ge1xuXHRcdFx0XHRcdG1lc3NhZ2VTdHJpcC5zZXRCaW5kaW5nQ29udGV4dChcblx0XHRcdFx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0XG5cdFx0XHRcdFx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHRcdFx0XHRcdC5iaW5kQ29udGV4dCh0aGlzLmdldEV4dGVuc2lvbkFQSSgpLl9nZXRNZXNzYWdlU3RyaXBCaW5kaW5nQ29udGV4dFBhdGgoKSlcblx0XHRcdFx0XHRcdFx0LmdldEJvdW5kQ29udGV4dCgpISxcblx0XHRcdFx0XHRcdFwiaW50ZXJuYWxcIlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0Ly8gSWYgdGhlIHZpZXcncyBiaW5kaW5nIGNvbnRleHQgYWxyZWFkeSBoYWQgbWVzc2FnZXMgdGhhdCB3ZXJlIG5vdCBjbGVhcmVkLCB3ZSB3b3VsZCBuZWVkIHRvIHJlLWV2YWx1YXRlIHRvIHNob3cgdGhlIG1lc3NhZ2Ugc3RyaXAuXG5cdFx0XHR0aGlzLl9mblNob3dPUE1lc3NhZ2UoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2hvdyBhIG1lc3NhZ2Ugc3RyaXAgaWYgYSByZWRpcmVjdGlvbiB0byBhIG5vbi1kcmFmdCBlbGVtZW50IGhhcyBiZWVuIGRvbmUuXG5cdCAqIFJlbW92ZSB0aGUgbWVzc2FnZSBzdHJpcCBpbiBjYXNlIHdlIG5hdmlnYXRlIHRvIGFub3RoZXIgb2JqZWN0IHBhZ2UuXG5cdCAqIEBwYXJhbSBlbnRpdHlOYW1lIE5hbWUgb2YgdGhlIEVudGl0eSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIG1lc3NhZ2Vcblx0ICovXG5cdGRpc3BsYXlDb2xsYWJvcmF0aW9uTWVzc2FnZShlbnRpdHlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHRjb25zdCByZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSE7XG5cblx0XHRpZiAodGhpcy5jb2xsYWJvcmF0aW9uTWVzc2FnZSkge1xuXHRcdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKFt0aGlzLmNvbGxhYm9yYXRpb25NZXNzYWdlXSk7XG5cdFx0XHRkZWxldGUgdGhpcy5jb2xsYWJvcmF0aW9uTWVzc2FnZTtcblx0XHR9XG5cblx0XHRpZiAoZW50aXR5TmFtZSkge1xuXHRcdFx0dGhpcy5jb2xsYWJvcmF0aW9uTWVzc2FnZSA9IG5ldyBNZXNzYWdlKHtcblx0XHRcdFx0bWVzc2FnZTogcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIlJFUk9VVEVEX05BVklHQVRJT05fVE9fU0FWRURfVkVSU0lPTlwiLCBbZW50aXR5TmFtZV0pLFxuXHRcdFx0XHR0eXBlOiBNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbixcblx0XHRcdFx0dGFyZ2V0OiB0aGlzLmdldFZpZXcoKT8uZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpXG5cdFx0XHR9KTtcblx0XHRcdE1lc3NhZ2luZy5hZGRNZXNzYWdlcyhbdGhpcy5jb2xsYWJvcmF0aW9uTWVzc2FnZV0pO1xuXHRcdH1cblx0fVxuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0YXN5bmMgb25QYWdlUmVhZHkobVBhcmFtZXRlcnM6IHsgZm9yY2VGb2N1czogYm9vbGVhbiB9IHwgdW5kZWZpbmVkKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgc2V0Rm9jdXMgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHQvLyBTZXQgdGhlIGZvY3VzIHRvIHRoZSBmaXJzdCBhY3Rpb24gYnV0dG9uLCBvciB0byB0aGUgZmlyc3QgZWRpdGFibGUgaW5wdXQgaWYgaW4gZWRpdGFibGUgbW9kZVxuXHRcdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdFx0Y29uc3QgaXNJbkRpc3BsYXlNb2RlID0gIUNvbW1vblV0aWxzLmdldElzRWRpdGFibGUodGhpcy5nZXRWaWV3KCkpO1xuXG5cdFx0XHRpZiAoaXNJbkRpc3BsYXlNb2RlKSB7XG5cdFx0XHRcdGNvbnN0IG9GaXJzdENsaWNrYWJsZUVsZW1lbnQgPSB0aGlzLmdldEZpcnN0Q2xpY2thYmxlRWxlbWVudChvT2JqZWN0UGFnZSk7XG5cdFx0XHRcdGlmIChvRmlyc3RDbGlja2FibGVFbGVtZW50KSB7XG5cdFx0XHRcdFx0b0ZpcnN0Q2xpY2thYmxlRWxlbWVudC5mb2N1cygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBvU2VsZWN0ZWRTZWN0aW9uID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChvT2JqZWN0UGFnZS5nZXRTZWxlY3RlZFNlY3Rpb24oKSkgYXMgT2JqZWN0UGFnZVNlY3Rpb24gfCB1bmRlZmluZWQ7XG5cdFx0XHRcdGlmIChvU2VsZWN0ZWRTZWN0aW9uKSB7XG5cdFx0XHRcdFx0dGhpcy5fdXBkYXRlRm9jdXNJbkVkaXRNb2RlKG9TZWxlY3RlZFNlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHRcdGNvbnN0IGN0eHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdC8vIHNldHRpbmcgdGhpcyBtb2RlbCBkYXRhIHRvIGJlIHVzZWQgZm9yIHJlY29tbWVuZGF0aW9ucyBiaW5kaW5nXG5cdFx0dGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKS5zZXRQcm9wZXJ0eShcIi9jdXJyZW50Q3R4dFwiLCBjdHh0KTtcblxuXHRcdC8vIEFwcGx5IGFwcCBzdGF0ZSBvbmx5IGFmdGVyIHRoZSBwYWdlIGlzIHJlYWR5IHdpdGggdGhlIGZpcnN0IHNlY3Rpb24gc2VsZWN0ZWRcblx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHQvL1Nob3cgcG9wdXAgd2hpbGUgbmF2aWdhdGluZyBiYWNrIGZyb20gb2JqZWN0IHBhZ2UgaW4gY2FzZSBvZiBkcmFmdFxuXHRcdGlmIChvQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdGNvbnN0IGJJc1N0aWNreU1vZGUgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQob0JpbmRpbmdDb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdFx0aWYgKCFiSXNTdGlja3lNb2RlKSB7XG5cdFx0XHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQob1ZpZXcpO1xuXHRcdFx0XHRhd2FpdCBvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKS5zZXRCYWNrTmF2aWdhdGlvbigoKSA9PiB0aGlzLl9vbkJhY2tOYXZpZ2F0aW9uSW5EcmFmdChvQmluZGluZ0NvbnRleHQpKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gZG8gbm90IHJlcXVlc3QgcmVjb21tZW5kYXRpb25zIGFjdGlvbiBpZiB3ZSBhcmUgaW4gRGlzcGxheSBtb2RlXG5cdFx0Y29uc3QgaXNFZGl0YWJsZSA9IENvbW1vblV0aWxzLmdldElzRWRpdGFibGUodGhpcy5nZXRWaWV3KCkpO1xuXHRcdGlmIChpc0VkaXRhYmxlICYmIG9CaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0YXdhaXQgdGhpcy5yZWNvbW1lbmRhdGlvbnMuZmV0Y2hBbmRBcHBseVJlY29tbWVuZGF0aW9ucyhbeyBjb250ZXh0OiBvQmluZGluZ0NvbnRleHQgfV0pO1xuXHRcdH1cblxuXHRcdGlmIChtUGFyYW1ldGVycz8uZm9yY2VGb2N1cykge1xuXHRcdFx0c2V0Rm9jdXMoKTtcblx0XHR9XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZXJyb3JOYXZpZ2F0aW9uU2VjdGlvbkZsYWdcIiwgZmFsc2UpO1xuXHRcdHRoaXMuX2NoZWNrRGF0YVBvaW50VGl0bGVGb3JFeHRlcm5hbE5hdmlnYXRpb24oKTtcblxuXHRcdC8vVGhlIGZvbGxvd2luZyBjb2RpbmcgaXMgZG9uZSB0byBtZXJnZSBhbiBvcGVuIFBBVENIIGFuZCB0aGUgZHJhZnRwcmVwYXJlL2RyYWZ0YWN0aXZhdGVcblx0XHQvL3JlcXVlc3QgaW50byBvbmUgJGJhdGNoIHJlcXVlc3Rcblx0XHQvL1RvIGFjaGlldmUgdGhpcyB0aGUgJGF1dG8gcXVldWUgaXMgbG9ja2VkIGF0IHRoZSBtb3VzZWRvd24gZXZlbnQgKGJlZm9yZSBmb2N1c291dCkgaW5cblx0XHQvL29yZGVyIHRvIHdhaXQgZm9yIHRoZSBkcmFmdCByZXF1ZXN0IGlzc3VlZCBpbiB0aGUgc2F2ZSBidXR0b25zIHByZXNzIGV2ZW50IGhhbmRsZXIuXG5cdFx0Ly9UaGUgcXVldWUgaXMgcmVsZWFzZWQgYWdhaW4gZHVyaW5nIG1vdXNldXAgKGJlZm9yZSBwcmVzcykuXG5cdFx0Ly9UaGlzIGlzIG9ubHkgcG9zc2libGUgb24gbm9uIHRvdWNoIGRldmljZXMgYmVjYXVzZSBvbiB0b3VjaCBkZXZpY2VzIHRoZSBmb2N1c291dCBhbmQgcHJlc3Ncblx0XHQvL2V2ZW50cyBhcmUgYm90aCBpbml0aWF0ZWQgYXQgdG91Y2hlbmQgYnkgc2FwLm0uQnV0dG9uLlxuXHRcdC8vbW91c2VIYW5kbGVyU2V0IGlzIHVzZWQgdG8gZW5zdXJlcyB0aGF0IHRoZSBldmVudCBoYW5kbGVycyBhcmUgYXR0YWNoZWQgb25seSBvbmUgdGltZS5cblx0XHQvL1RoZXJlIGNhbiBiZSBtdWx0aXBsZSBvblBhZ2VSZWFkeSBlLmcuIHdoZW4gc3dpdGNoaW5nIGJldHdlZW4gZWRpdC9kaXNwbGF5IG1vZGVcblx0XHRpZiAoIXRoaXMubWVyZ2VQYXRjaERyYWZ0ICYmICFEZXZpY2Uuc3VwcG9ydC50b3VjaCkge1xuXHRcdFx0Y29uc3Qgc2F2ZUJ1dHRvbiA9IG9WaWV3LmJ5SWQoXCJmZTo6Rm9vdGVyQmFyOjpTdGFuZGFyZEFjdGlvbjo6U2F2ZVwiKSBhcyBCdXR0b247XG5cdFx0XHRjb25zdCBhdXRvUXVldWVVbmxvY2sgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmF1dG9RdWV1ZUxvY2s/LmlzTG9ja2VkKCkpIHtcblx0XHRcdFx0XHR0aGlzLmF1dG9RdWV1ZUxvY2sudW5sb2NrKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0c2F2ZUJ1dHRvbi5kZXRhY2hCcm93c2VyRXZlbnQoXCJtb3VzZXVwXCIsIGF1dG9RdWV1ZVVubG9jayk7XG5cdFx0XHRcdHNhdmVCdXR0b24uZGV0YWNoQnJvd3NlckV2ZW50KFwiYmx1clwiLCBhdXRvUXVldWVVbmxvY2spO1xuXHRcdFx0fTtcblxuXHRcdFx0c2F2ZUJ1dHRvbj8uYXR0YWNoQnJvd3NlckV2ZW50KFwibW91c2Vkb3duXCIsICgpOiB2b2lkID0+IHtcblx0XHRcdFx0aWYgKCF0aGlzLmF1dG9RdWV1ZUxvY2s/LmlzTG9ja2VkKCkpIHtcblx0XHRcdFx0XHR0aGlzLmF1dG9RdWV1ZUxvY2sgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbCgpLmxvY2soXCIkYXV0b1wiKTtcblx0XHRcdFx0XHQvL3doZW4gdGhlIG1vdXNlIGlzIGRyYWdnZWQgYXdheSBmcm9tIHRoZSBzYXZlIGJ1dHRvbiB3aGlsZSBwcmVzc2VkIHRoZW4gdGhlcmUgd2lsbCBiZSBub1xuXHRcdFx0XHRcdC8vbW91c2V1cCBldmVudCBvbiB0aGUgc2F2ZSBidXR0b24uIFRoZXJlZm9yZSwgdGhlIHVubG9ja2luZyBpcyBkb25lIG9uIFwibW91c2V1cFwiIGFuZCBcImJsdXJcIlxuXHRcdFx0XHRcdHNhdmVCdXR0b24uYXR0YWNoQnJvd3NlckV2ZW50KFwibW91c2V1cFwiLCBhdXRvUXVldWVVbmxvY2spO1xuXHRcdFx0XHRcdHNhdmVCdXR0b24uYXR0YWNoQnJvd3NlckV2ZW50KFwiYmx1clwiLCBhdXRvUXVldWVVbmxvY2spO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5tZXJnZVBhdGNoRHJhZnQgPSB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHN0YXR1cyBvZiBlZGl0IG1vZGUgZm9yIHN0aWNreSBzZXNzaW9uLlxuXHQgKiBAcmV0dXJucyBUaGUgc3RhdHVzIG9mIGVkaXQgbW9kZSBmb3Igc3RpY2t5IHNlc3Npb25cblx0ICovXG5cdGdldFN0aWNreUVkaXRNb2RlKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0ICYmIHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0bGV0IGJJc1N0aWNreUVkaXRNb2RlID0gZmFsc2U7XG5cdFx0aWYgKG9CaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0Y29uc3QgYklzU3RpY2t5TW9kZSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChvQmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0XHRpZiAoYklzU3RpY2t5TW9kZSkge1xuXHRcdFx0XHRiSXNTdGlja3lFZGl0TW9kZSA9IENvbW1vblV0aWxzLmdldElzRWRpdGFibGUodGhpcy5nZXRWaWV3KCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYklzU3RpY2t5RWRpdE1vZGU7XG5cdH1cblxuXHRfZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTogT2JqZWN0UGFnZUxheW91dCB7XG5cdFx0cmV0dXJuIHRoaXMuYnlJZChcImZlOjpPYmplY3RQYWdlXCIpIGFzIE9iamVjdFBhZ2VMYXlvdXQ7XG5cdH1cblxuXHRfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24oKTogeyB0aXRsZTogc3RyaW5nOyBzdWJ0aXRsZTogc3RyaW5nOyBpbnRlbnQ6IHN0cmluZzsgaWNvbjogc3RyaW5nOyBkZXNjcmlwdGlvbjogc3RyaW5nIH0ge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBvT2JqZWN0UGFnZVN1YnRpdGxlID0gb09iamVjdFBhZ2UuZ2V0Q3VzdG9tRGF0YSgpLmZpbmQoZnVuY3Rpb24gKG9DdXN0b21EYXRhKSB7XG5cdFx0XHRyZXR1cm4gb0N1c3RvbURhdGEuZ2V0S2V5KCkgPT09IFwiT2JqZWN0UGFnZVN1YnRpdGxlXCI7XG5cdFx0fSk7XG5cdFx0Y29uc3Qgb2JqZWN0UGFnZURlc2NyaXB0aW9uID0gb09iamVjdFBhZ2UuZGF0YShcIk9iamVjdFBhZ2VEZXNjcmlwdGlvblwiKTtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdGNvbnN0IHJvb3RWaWV3Q29udHJvbGxlciA9IGFwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblx0XHRjb25zdCBmbkNsZWFyQ2FjaGVUaXRsZSA9ICgpOiB2b2lkID0+IHtcblx0XHRcdHJvb3RWaWV3Q29udHJvbGxlci5jbGVhclRpdGxlSGllcmFyY2h5Q2FjaGUob09iamVjdFBhZ2UuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpIGFzIHN0cmluZyk7XG5cdFx0fTtcblx0XHRpZiAob09iamVjdFBhZ2VTdWJ0aXRsZSAmJiAhdGhpcy5jbGVhclRpdGxlSGllcmFyY2h5Q2FjaGVTZXRVcCkge1xuXHRcdFx0b09iamVjdFBhZ2VTdWJ0aXRsZS5nZXRCaW5kaW5nKFwidmFsdWVcIik/LmF0dGFjaENoYW5nZShmbkNsZWFyQ2FjaGVUaXRsZSwgdGhpcyk7XG5cdFx0XHR0aGlzLmNsZWFyVGl0bGVIaWVyYXJjaHlDYWNoZVNldFVwID0gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRpdGxlOiBvT2JqZWN0UGFnZS5kYXRhKFwiT2JqZWN0UGFnZVRpdGxlXCIpIHx8IFwiXCIsXG5cdFx0XHRzdWJ0aXRsZTogb09iamVjdFBhZ2VTdWJ0aXRsZSAmJiBvT2JqZWN0UGFnZVN1YnRpdGxlLmdldFZhbHVlKCksXG5cdFx0XHRpbnRlbnQ6IFwiXCIsXG5cdFx0XHRpY29uOiBcIlwiLFxuXHRcdFx0ZGVzY3JpcHRpb246IG9iamVjdFBhZ2VEZXNjcmlwdGlvblxuXHRcdH07XG5cdH1cblxuXHRfZXhlY3V0ZUhlYWRlclNob3J0Y3V0KHNJZDogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3Qgc0J1dHRvbklkID0gYCR7dGhpcy5nZXRWaWV3KCkuZ2V0SWQoKX0tLSR7c0lkfWAsXG5cdFx0XHRvQnV0dG9uID0gKHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuZ2V0SGVhZGVyVGl0bGUoKSBhcyBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlKVxuXHRcdFx0XHQuZ2V0QWN0aW9ucygpXG5cdFx0XHRcdC5maW5kKChvRWxlbWVudCkgPT4gb0VsZW1lbnQuZ2V0SWQoKSA9PT0gc0J1dHRvbklkKTtcblx0XHRpZiAob0J1dHRvbikge1xuXHRcdFx0Q29tbW9uVXRpbHMuZmlyZUJ1dHRvblByZXNzKG9CdXR0b24pO1xuXHRcdH1cblx0fVxuXG5cdF9leGVjdXRlRm9vdGVyU2hvcnRjdXQoc0lkOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zdCBzQnV0dG9uSWQgPSBgJHt0aGlzLmdldFZpZXcoKS5nZXRJZCgpfS0tJHtzSWR9YCxcblx0XHRcdG9CdXR0b24gPSAodGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKS5nZXRGb290ZXIoKSBhcyBPdmVyZmxvd1Rvb2xiYXIpLmdldENvbnRlbnQoKS5maW5kKGZ1bmN0aW9uIChcblx0XHRcdFx0b0VsZW1lbnQ6IFVJNUVsZW1lbnRcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gb0VsZW1lbnQuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkgPT09IFwic2FwLm0uQnV0dG9uXCIgJiYgb0VsZW1lbnQuZ2V0SWQoKSA9PT0gc0J1dHRvbklkO1xuXHRcdFx0fSk7XG5cdFx0Q29tbW9uVXRpbHMuZmlyZUJ1dHRvblByZXNzKG9CdXR0b24pO1xuXHR9XG5cblx0X2V4ZWN1dGVUYWJTaG9ydEN1dChvRXhlY3V0aW9uOiBVSTVFdmVudCk6IHZvaWQge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKSxcblx0XHRcdGFTZWN0aW9ucyA9IG9PYmplY3RQYWdlLmdldFNlY3Rpb25zKCksXG5cdFx0XHRpU2VjdGlvbkluZGV4TWF4ID0gYVNlY3Rpb25zLmxlbmd0aCAtIDEsXG5cdFx0XHRzQ29tbWFuZCA9IChvRXhlY3V0aW9uLmdldFNvdXJjZSgpIGFzIHVua25vd24gYXMgQ29tbWFuZEV4ZWN1dGlvbikuZ2V0Q29tbWFuZCgpO1xuXHRcdGxldCBuZXdTZWN0aW9uLFxuXHRcdFx0aVNlbGVjdGVkU2VjdGlvbkluZGV4ID0gb09iamVjdFBhZ2UuaW5kZXhPZlNlY3Rpb24odGhpcy5ieUlkKG9PYmplY3RQYWdlLmdldFNlbGVjdGVkU2VjdGlvbigpISkgYXMgT2JqZWN0UGFnZVNlY3Rpb24pO1xuXHRcdGlmIChpU2VsZWN0ZWRTZWN0aW9uSW5kZXggIT09IC0xICYmIGlTZWN0aW9uSW5kZXhNYXggPiAwKSB7XG5cdFx0XHRpZiAoc0NvbW1hbmQgPT09IFwiTmV4dFRhYlwiKSB7XG5cdFx0XHRcdGlmIChpU2VsZWN0ZWRTZWN0aW9uSW5kZXggPD0gaVNlY3Rpb25JbmRleE1heCAtIDEpIHtcblx0XHRcdFx0XHRuZXdTZWN0aW9uID0gYVNlY3Rpb25zWysraVNlbGVjdGVkU2VjdGlvbkluZGV4XTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChpU2VsZWN0ZWRTZWN0aW9uSW5kZXggIT09IDApIHtcblx0XHRcdFx0Ly8gUHJldmlvdXNUYWJcblx0XHRcdFx0bmV3U2VjdGlvbiA9IGFTZWN0aW9uc1stLWlTZWxlY3RlZFNlY3Rpb25JbmRleF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChuZXdTZWN0aW9uKSB7XG5cdFx0XHRcdG9PYmplY3RQYWdlLnNldFNlbGVjdGVkU2VjdGlvbihuZXdTZWN0aW9uKTtcblx0XHRcdFx0bmV3U2VjdGlvbi5mb2N1cygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9nZXRGb290ZXJWaXNpYmlsaXR5KCk6IHZvaWQge1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgc1ZpZXdJZCA9IHRoaXMuZ2V0VmlldygpLmdldElkKCk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwibWVzc2FnZUZvb3RlckNvbnRhaW5zRXJyb3JzXCIsIGZhbHNlKTtcblx0XHRjb25zdCBpc0hpZGRlbkRyYWZ0RW5hYmxlZCA9ICh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCkuZ2V0Q2FwYWJpbGl0aWVzKCkuSGlkZGVuRHJhZnQgYXMgSGlkZGVuRHJhZnQpXG5cdFx0XHQ/LmVuYWJsZWQ7XG5cdFx0TWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpXG5cdFx0XHQuZ2V0RGF0YSgpXG5cdFx0XHQuZm9yRWFjaChmdW5jdGlvbiAob01lc3NhZ2U6IE1lc3NhZ2UpOiB2b2lkIHtcblx0XHRcdFx0Y29uc3QgaXNFcnJvck1lc3NhZ2UgPSBvTWVzc2FnZS52YWxpZGF0aW9uICYmIG9NZXNzYWdlLmdldFR5cGUoKSA9PT0gXCJFcnJvclwiO1xuXHRcdFx0XHRjb25zdCBtZXNzYWdlVmFsaWRhdGlvbiA9IGlzSGlkZGVuRHJhZnRFbmFibGVkXG5cdFx0XHRcdFx0PyBpc0Vycm9yTWVzc2FnZVxuXHRcdFx0XHRcdDogaXNFcnJvck1lc3NhZ2UgJiYgb01lc3NhZ2UuZ2V0VGFyZ2V0cygpLnNvbWUoKHRhcmdldCkgPT4gdGFyZ2V0LmluY2x1ZGVzKHNWaWV3SWQpKTtcblx0XHRcdFx0aWYgKG1lc3NhZ2VWYWxpZGF0aW9uKSB7XG5cdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwibWVzc2FnZUZvb3RlckNvbnRhaW5zRXJyb3JzXCIsIHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0fVxuXG5cdF9zaG93TWVzc2FnZVBvcG92ZXIoZXJyPzogc3RyaW5nLCBvUmV0PzogdW5rbm93bik6IHVua25vd24ge1xuXHRcdGlmIChlcnIpIHtcblx0XHRcdExvZy5lcnJvcihlcnIpO1xuXHRcdH1cblx0XHRjb25zdCBpc0VkaXRNb2RlID0gQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZSh0aGlzLmdldFZpZXcoKSk7XG5cdFx0Y29uc3Qgcm9vdFZpZXdDb250cm9sbGVyID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblx0XHRjb25zdCBjdXJyZW50UGFnZVZpZXcgPSByb290Vmlld0NvbnRyb2xsZXIuaXNGY2xFbmFibGVkKClcblx0XHRcdD8gcm9vdFZpZXdDb250cm9sbGVyLmdldFJpZ2h0bW9zdFZpZXcoKVxuXHRcdFx0OiAodGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb290Q29udGFpbmVyKCkgYXMgTmF2Q29udGFpbmVyKS5nZXRDdXJyZW50UGFnZSgpO1xuXHRcdGlmIChpc0VkaXRNb2RlICYmICFjdXJyZW50UGFnZVZpZXcuaXNBKFwic2FwLm0uTWVzc2FnZVBhZ2VcIikpIHtcblx0XHRcdGNvbnN0IG9NZXNzYWdlQnV0dG9uID0gdGhpcy5tZXNzYWdlQnV0dG9uLFxuXHRcdFx0XHRvTWVzc2FnZVBvcG92ZXIgPSBvTWVzc2FnZUJ1dHRvbi5vTWVzc2FnZVBvcG92ZXIsXG5cdFx0XHRcdG9JdGVtQmluZGluZyA9IG9NZXNzYWdlUG9wb3Zlci5nZXRCaW5kaW5nKFwiaXRlbXNcIikgYXMgTGlzdEJpbmRpbmc7XG5cblx0XHRcdGlmIChvSXRlbUJpbmRpbmcuZ2V0TGVuZ3RoKCkgPiAwICYmICFvTWVzc2FnZVBvcG92ZXIuaXNPcGVuKCkpIHtcblx0XHRcdFx0b01lc3NhZ2VCdXR0b24uc2V0VmlzaWJsZSh0cnVlKTtcblx0XHRcdFx0Ly8gd29ya2Fyb3VuZCB0byBlbnN1cmUgdGhhdCBvTWVzc2FnZUJ1dHRvbiBpcyByZW5kZXJlZCB3aGVuIG9wZW5CeSBpcyBjYWxsZWRcblx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0b01lc3NhZ2VQb3BvdmVyLm9wZW5CeShvTWVzc2FnZUJ1dHRvbik7XG5cdFx0XHRcdH0sIDApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb1JldDtcblx0fVxuXG5cdGFzeW5jIF9lZGl0RG9jdW1lbnQoKTogUHJvbWlzZTx2b2lkIHwgQ29udGV4dD4ge1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRjb25zdCBvTW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpO1xuXHRcdEJ1c3lMb2NrZXIubG9jayhvTW9kZWwpO1xuXHRcdHJldHVybiB0aGlzLmVkaXRGbG93LmVkaXREb2N1bWVudC5hcHBseSh0aGlzLmVkaXRGbG93LCBbb0NvbnRleHRdKS5maW5hbGx5KGZ1bmN0aW9uICgpIHtcblx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKG9Nb2RlbCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgZGVmYXVsdCBzZW1hbnRpYyBvYmplY3QgbWFwcGluZyBvYmplY3QuXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIHZhbHVlIG9mIHRoZSBkYXRhIHBvaW50IHByb3BlcnR5IHBhdGhcblx0ICogQHBhcmFtIHNlbWFudGljT2JqZWN0IFRoZSBzZW1hbnRpYyBvYmplY3Rcblx0ICogQHJldHVybnMgVGhlIGFycmF5IG9mIHRoZSBkZWZhdWx0IHNlbWFudGljIG9iamVjdCBtYXBwaW5nIG9iamVjdFxuXHQgKi9cblx0X2dldEltcGxpY2l0U2VtYW50aWNPYmplY3RNYXBwaW5nRm9yRGF0YVBvaW50cyhcblx0XHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0XHRzZW1hbnRpY09iamVjdDogc3RyaW5nXG5cdCk6IE1ldGFNb2RlbFR5cGU8U2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZT5bXSB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdHtcblx0XHRcdFx0TG9jYWxQcm9wZXJ0eToge1xuXHRcdFx0XHRcdCRQcm9wZXJ0eVBhdGg6IHByb3BlcnR5UGF0aFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRTZW1hbnRpY09iamVjdFByb3BlcnR5OiBzZW1hbnRpY09iamVjdFxuXHRcdFx0fVxuXHRcdF07XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZXMgdGhlIHZhbGlkYXRpb24gb2YgdGhlIGRvY3VtZW50XG5cdCAqIE9uZSBvZiB0aGUgZm9sbG93aW5nIGFjdGlvbnMgaXMgdHJpZ2dlcmVkIG9uIHRoZSBkcmFmdCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudDpcblx0ICogLSBvbiBhIHRyYW5zaWVudCBjb250ZXh0OlxuXHQgKiAtIGlmIHRoZSBjb250ZXh0IGdldHMgZGF0YSwgd2FpdCBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBjb250ZXh0IGFuZCBleGVjdXRlIHRoZSBnbG9iYWwgdmFsaWRhdGlvblxuXHQgKiAtIGlmIG5vIGRhdGEgaXMgZm91bmQgb24gdGhpcyBjb250ZXh0LCBvbmx5IHRoZSBwcmVwYXJlQWN0aW9uIGlzIHJlcXVlc3RlZFxuXHQgKiAtIG9uIGEgcmVndWxhciBjb250ZXh0LCB0aGUgZ2xvYmFsIHZhbGlkYXRpb24gaXMgcmVxdWVzdGVkLlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIG9mIHRoZSBnbG9iYWwgdmFsaWRhdGlvbiBvciB1bmRlZmluZWQgaWYgbm90IGV4ZWN1dGVkXG5cdCAqL1xuXHRhc3luYyBfdmFsaWRhdGVEb2N1bWVudCgpOiBQcm9taXNlPHZvaWQgfCB1bmtub3duW10gfCBPRGF0YUNvbnRleHRCaW5kaW5nPiB7XG5cdFx0Y29uc3QgY29udHJvbCA9IFVJNUVsZW1lbnQuZ2V0QWN0aXZlRWxlbWVudCgpIGFzIENvbnRyb2w7XG5cdFx0Y29uc3QgY29udGV4dCA9IGNvbnRyb2w/LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ7XG5cblx0XHRpZiAoIWNvbnRyb2wgfHwgIWNvbnRleHQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGxldCBieVBhc3NTaWRlRWZmZWN0cyA9IGZhbHNlO1xuXHRcdGlmIChjb250ZXh0LmlzVHJhbnNpZW50KCkpIHtcblx0XHRcdGlmIChjb250ZXh0Lmhhc1BlbmRpbmdDaGFuZ2VzKCkpIHtcblx0XHRcdFx0YXdhaXQgY29udGV4dC5jcmVhdGVkKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRieVBhc3NTaWRlRWZmZWN0cyA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMubWVzc2FnZUhhbmRsZXIuaG9sZE1lc3NhZ2VzRm9yQ29udHJvbChjb250cm9sKTtcblx0XHRjb25zdCByZXQgPSBhd2FpdCB0aGlzLmV4ZWN1dGVHbG9iYWxWYWxpZGF0aW9uKGNvbnRleHQsIGJ5UGFzc1NpZGVFZmZlY3RzKTtcblx0XHR0aGlzLm1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlcyh7IGNvbnRyb2wgfSk7XG5cdFx0cmV0dXJuIHJldDtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgZ2xvYmFsIHZhbGlkYXRpb24gb2YgdGhlIGRyYWZ0XG5cdCAqIE9uZSBvZiB0aGUgZm9sbG93aW5nIGFjdGlvbnMgaXMgdHJpZ2dlcmVkIG9uIHRoZSBkcmFmdCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudDpcblx0ICogLSB0aGUgZ2xvYmFsIHNpZGUgZWZmZWN0cyBhcmUgZXhlY3V0ZWQgaWYgdGhlc2Ugc2lkZSBlZmZlY3RzIGFyZSBkZWZpbmVkIGluIHRoZSBjb250ZXh0XG5cdCAqIC0gdGhlIGRyYWZ0IFZhbGlkYXRpb24gb24gdGhlIERyYWZ0Um9vdCBjb250ZXh0LlxuXHQgKiBAcGFyYW0gY29udGV4dCBUaGUgQ29udGV4dFxuXHQgKiBAcGFyYW0gYnlQYXNzU2lkZUVmZmVjdHMgT25seSB0aGUgZHJhZnQgVmFsaWRhdGlvbiBzdGVwIGlzIGV4ZWN1dGVkXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugb2YgdGhlIGdsb2JhbCB2YWxpZGF0aW9uXG5cdCAqL1xuXHRhc3luYyBleGVjdXRlR2xvYmFsVmFsaWRhdGlvbihjb250ZXh0OiBPRGF0YVY0Q29udGV4dCwgYnlQYXNzU2lkZUVmZmVjdHMgPSBmYWxzZSk6IFByb21pc2U8dm9pZCB8IHVua25vd25bXSB8IE9EYXRhQ29udGV4dEJpbmRpbmc+IHtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdC8vIHRoZSBkcmFmdCB2YWxpZGF0aW9uIGlzIHRyZWF0ZWQgYXMgYSB1c2VyIGludGVyYWN0aW9uLCBhbmQgdGhlIHNlcnZpY2UgbXVzdCByZXR1cm4gdHJhbnNpdGlvbiBtZXNzYWdlcyBhZ2FpbiBpZiBzdGlsbCB2YWxpZFxuXHRcdHRoaXMubWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0aWYgKCFieVBhc3NTaWRlRWZmZWN0cykge1xuXHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNTZXJ2aWNlID0gYXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdFx0Y29uc3QgZW50aXR5VHlwZSA9IHNpZGVFZmZlY3RzU2VydmljZS5nZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQoY29udGV4dCk7XG5cdFx0XHRjb25zdCBnbG9iYWxTaWRlRWZmZWN0cyA9IGVudGl0eVR5cGUgPyBzaWRlRWZmZWN0c1NlcnZpY2UuZ2V0R2xvYmFsT0RhdGFFbnRpdHlTaWRlRWZmZWN0cyhlbnRpdHlUeXBlKSA6IFtdO1xuXHRcdFx0Ly8gSWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGdsb2JhbCBTaWRlRWZmZWN0cyBmb3IgdGhlIHJlbGF0ZWQgZW50aXR5LCBleGVjdXRlIGl0L3RoZW1cblx0XHRcdGlmIChnbG9iYWxTaWRlRWZmZWN0cy5sZW5ndGgpIHtcblx0XHRcdFx0YXdhaXQgdGhpcy5lZGl0Rmxvdy5zeW5jVGFzaygpO1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoXG5cdFx0XHRcdFx0Z2xvYmFsU2lkZUVmZmVjdHMubWFwKGFzeW5jIChzaWRlRWZmZWN0cykgPT4gdGhpcy5fc2lkZUVmZmVjdHMucmVxdWVzdFNpZGVFZmZlY3RzKHNpZGVFZmZlY3RzLCBjb250ZXh0KSlcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBkcmFmdFJvb3RDb250ZXh0ID0gKGF3YWl0IENvbW1vblV0aWxzLmNyZWF0ZVJvb3RDb250ZXh0KFxuXHRcdFx0UHJvZ3JhbW1pbmdNb2RlbC5EcmFmdCxcblx0XHRcdHRoaXMuZ2V0VmlldygpLFxuXHRcdFx0YXBwQ29tcG9uZW50XG5cdFx0KSkgYXMgT0RhdGFWNENvbnRleHQ7XG5cdFx0Ly9FeGVjdXRlIHRoZSBkcmFmdFZhbGlkYXRpb24gaWYgdGhlcmUgaXMgbm8gZ2xvYmFsU2lkZUVmZmVjdHMgKGlnbm9yZSBFVGFncyBpbiBjb2xsYWJvcmF0aW9uIGRyYWZ0KVxuXHRcdGlmIChkcmFmdFJvb3RDb250ZXh0KSB7XG5cdFx0XHRhd2FpdCB0aGlzLmVkaXRGbG93LnN5bmNUYXNrKCk7XG5cdFx0XHRyZXR1cm4gZHJhZnQuZXhlY3V0ZURyYWZ0VmFsaWRhdGlvbihkcmFmdFJvb3RDb250ZXh0LCBhcHBDb21wb25lbnQsIHRoaXMuY29sbGFib3JhdGl2ZURyYWZ0LmlzQ29ubmVjdGVkKCkpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTYXZlcyB0aGUgZHJhZnQgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnRcblx0ICogSWYgZGF0YSBoYXMgYmVlbiBwcm92aWRlZCBvbiB0aGUgY3JlYXRpb24gcm93cywgdGhlIHJlbGF0ZWQgZG9jdW1lbnRzIGFyZSBjcmVhdGVkXG5cdCAqIGJlZm9yZSBzYXZpbmcgdGhlIGRyYWZ0IHZlcnNpb24uXG5cdCAqIEBwYXJhbSBza2lwQmluZGluZ1RvVmlldyBJbmRpY2F0ZXMgaWYgdGhlIGJpbmRpbmcgdG8gdGhlIHZpZXcgc2hvdWxkIGJlIHNraXBwZWRcblx0ICogQHJldHVybnMgUHJvbWlzZVxuXHQgKi9cblx0YXN5bmMgX3NhdmVEb2N1bWVudChza2lwQmluZGluZ1RvVmlldz86IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRjb25zdCBtb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIiksXG5cdFx0XHRhd2FpdENyZWF0ZURvY3VtZW50czogUHJvbWlzZTx2b2lkIHwgT0RhdGFMaXN0QmluZGluZz5bXSA9IFtdO1xuXHRcdC8vIGluZGljYXRlcyBpZiB3ZSBhcmUgY3JlYXRpbmcgYSBuZXcgcm93IGluIHRoZSBPUFxuXHRcdGxldCBleGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yID0gZmFsc2U7XG5cdFx0QnVzeUxvY2tlci5sb2NrKG1vZGVsKTtcblx0XHR0cnkge1xuXHRcdFx0aWYgKHRoaXMuY29sbGFib3JhdGl2ZURyYWZ0LmlzQ29sbGFib3JhdGlvbkVuYWJsZWQoKSkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGNvbnN0IGRpYWxvZ0FjdGlvbiA9IGF3YWl0IG5ldyBDb2xsYWJvcmF0aW9uRGlzY2FyZCh0aGlzLmdldFZpZXcoKSwgdHJ1ZSkuZ2V0VXNlckFjdGlvbigpO1xuXHRcdFx0XHRcdC8vIFdlIGNhbmNlbCB0aGUgYWN0aW9uXG5cdFx0XHRcdFx0aWYgKGRpYWxvZ0FjdGlvbiA9PT0gXCJjYW5jZWxcIikge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBXZSBrZWVwIHRoZSBkcmFmdCBhbmQgbGVhdmUgZm9yIExSXG5cdFx0XHRcdFx0aWYgKGRpYWxvZ0FjdGlvbiA9PT0gXCJrZWVwRHJhZnRcIikge1xuXHRcdFx0XHRcdFx0dGhpcy5jb2xsYWJvcmF0aXZlRHJhZnQuZGlzY29ubmVjdCgpO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5fcm91dGluZy5uYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dChjb250ZXh0KTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihgU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCBjb2xsYWJvcmF0aW9uIGRpc2NhcmQ6ICR7ZXJyfWApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGF3YWl0IHRoaXMuZWRpdEZsb3cuc3luY1Rhc2soKTtcblx0XHRcdHRoaXMuX2ZpbmRUYWJsZXMoKS5mb3JFYWNoKCh0YWJsZTogVGFibGUpID0+IHtcblx0XHRcdFx0Y29uc3QgY3JlYXRpb25Sb3cgPSB0YWJsZS5nZXRDcmVhdGlvblJvdygpO1xuXHRcdFx0XHRjb25zdCB0YWJsZUJpbmRpbmcgPSB0aGlzLl9nZXRUYWJsZUJpbmRpbmcodGFibGUpO1xuXHRcdFx0XHRjb25zdCBjb250ZXh0S2V5cyA9IE9iamVjdC5rZXlzKChjcmVhdGlvblJvdz8uZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCk/LmdldE9iamVjdCgpIHx8IHt9KTtcblx0XHRcdFx0aWYgKGNvbnRleHRLZXlzLmZpbHRlcigoa2V5KSA9PiAha2V5LnN0YXJ0c1dpdGgoXCJAJHVpNS5cIikpLmxlbmd0aCkge1xuXHRcdFx0XHRcdGV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IgPSB0cnVlO1xuXHRcdFx0XHRcdGF3YWl0Q3JlYXRlRG9jdW1lbnRzLnB1c2goXG5cdFx0XHRcdFx0XHR0aGlzLmVkaXRGbG93XG5cdFx0XHRcdFx0XHRcdC5jcmVhdGVEb2N1bWVudCh0YWJsZUJpbmRpbmcsIHtcblx0XHRcdFx0XHRcdFx0XHRjcmVhdGlvbk1vZGU6IHRhYmxlLmRhdGEoXCJjcmVhdGlvbk1vZGVcIiksXG5cdFx0XHRcdFx0XHRcdFx0Y3JlYXRpb25Sb3c6IGNyZWF0aW9uUm93LFxuXHRcdFx0XHRcdFx0XHRcdGNyZWF0ZUF0RW5kOiB0YWJsZS5kYXRhKFwiY3JlYXRlQXRFbmRcIikgPT09IFwidHJ1ZVwiLFxuXHRcdFx0XHRcdFx0XHRcdHNraXBTaWRlRWZmZWN0czogdHJ1ZSAvLyB0aGUgc2tpcFNpZGVFZmZlY3RzIGlzIGEgcGFyYW1ldGVyIGNyZWF0ZWQgd2hlbiB3ZSBjbGljayB0aGUgc2F2ZSBrZXkuIElmIHdlIHByZXNzIHRoaXMga2V5LCB3ZSBkb24ndCBleGVjdXRlIHRoZSBoYW5kbGVTaWRlRWZmZWN0cyBmdW5jaXRvbiB0byBhdm9pZCBiYXRjaCByZWR1bmRhbmN5XG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdC50aGVuKCgpID0+IHRhYmxlQmluZGluZylcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0Y29uc3QgYmluZGluZ3MgPSBhd2FpdCBQcm9taXNlLmFsbChhd2FpdENyZWF0ZURvY3VtZW50cyk7XG5cdFx0XHQvLyBXZSBuZWVkIHRvIGVpdGhlciByZWplY3Qgb3IgcmVzb2x2ZSBhIHByb21pc2UgaGVyZSBhbmQgcmV0dXJuIGl0IHNpbmNlIHRoaXMgc2F2ZVxuXHRcdFx0Ly8gZnVuY3Rpb24gaXMgbm90IG9ubHkgY2FsbGVkIHdoZW4gcHJlc3NpbmcgdGhlIHNhdmUgYnV0dG9uIGluIHRoZSBmb290ZXIsIGJ1dCBhbHNvXG5cdFx0XHQvLyB3aGVuIHRoZSB1c2VyIHNlbGVjdHMgY3JlYXRlIG9yIHNhdmUgaW4gYSBkYXRhbG9zcyBwb3B1cC5cblx0XHRcdC8vIFRoZSBsb2dpYyBvZiB0aGUgZGF0YWxvc3MgcG9wdXAgbmVlZHMgdG8gZGV0ZWN0IGlmIHRoZSBzYXZlIGhhZCBlcnJvcnMgb3Igbm90IGluIG9yZGVyXG5cdFx0XHQvLyB0byBkZWNpZGUgaWYgdGhlIHN1YnNlcXVlbnQgYWN0aW9uIC0gbGlrZSBhIGJhY2sgbmF2aWdhdGlvbiAtIGhhcyB0byBiZSBleGVjdXRlZCBvciBub3QuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRhd2FpdCB0aGlzLmVkaXRGbG93LnNhdmVEb2N1bWVudChjb250ZXh0LCB7XG5cdFx0XHRcdFx0YkV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3I6IGV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IsXG5cdFx0XHRcdFx0YmluZGluZ3M6IGJpbmRpbmdzIGFzIHVua25vd24gYXMgT0RhdGFMaXN0QmluZGluZ1tdLFxuXHRcdFx0XHRcdG1lcmdlUGF0Y2hEcmFmdDogdGhpcy5tZXJnZVBhdGNoRHJhZnQsXG5cdFx0XHRcdFx0c2tpcEJpbmRpbmdUb1ZpZXdcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHQvLyBJZiB0aGUgc2F2ZURvY3VtZW50IGluIGVkaXRGbG93IHJldHVybnMgZXJyb3JzIHdlIG5lZWRcblx0XHRcdFx0Ly8gdG8gc2hvdyB0aGUgbWVzc2FnZSBwb3BvdmVyIGhlcmUgYW5kIGVuc3VyZSB0aGF0IHRoZVxuXHRcdFx0XHQvLyBkYXRhbG9zcyBsb2dpYyBkb2VzIG5vdCBwZXJmb3JtIHRoZSBmb2xsb3cgdXAgZnVuY3Rpb25cblx0XHRcdFx0Ly8gbGlrZSBlLmcuIGEgYmFjayBuYXZpZ2F0aW9uIGhlbmNlIHdlIHJldHVybiBhIHByb21pc2UgYW5kIHJlamVjdCBpdFxuXHRcdFx0XHRpZiAoZXJyb3IgIT09IFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24uQ29udGludWUpIHtcblx0XHRcdFx0XHR0aGlzLl9zaG93TWVzc2FnZVBvcG92ZXIoZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aHJvdyBlcnJvcjtcblx0XHRcdH1cblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0aWYgKEJ1c3lMb2NrZXIuaXNMb2NrZWQobW9kZWwpKSB7XG5cdFx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKG1vZGVsKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRhc3luYyBfY2FuY2VsRG9jdW1lbnQobVBhcmFtZXRlcnM6IHsgY2FuY2VsQnV0dG9uOiBzdHJpbmcgfSk6IFByb21pc2U8Q29udGV4dCB8IHZvaWQ+IHtcblx0XHRjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRWaWV3KCk/LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Y29uc3QgY2FuY2VsQnV0dG9uID0gdGhpcy5nZXRWaWV3KCkuYnlJZChtUGFyYW1ldGVycy5jYW5jZWxCdXR0b24pIGFzIEJ1dHRvbiB8IHVuZGVmaW5lZDsgLy90byBnZXQgdGhlIHJlZmVyZW5jZSBvZiB0aGUgY2FuY2VsIGJ1dHRvbiBmcm9tIGNvbW1hbmQgZXhlY3V0aW9uXG5cdFx0Y29uc3QgbGFzdEZvY3VzZWRDb250cm9sSWQgPSBVSTVFbGVtZW50LmdldEFjdGl2ZUVsZW1lbnQoKT8uZ2V0SWQoKTtcblx0XHRsZXQgc2hvdWxkU2tpcERpc2NhcmRQb3BvdmVyID0gZmFsc2U7XG5cdFx0aWYgKHRoaXMuY29sbGFib3JhdGl2ZURyYWZ0LmlzQ29sbGFib3JhdGlvbkVuYWJsZWQoKSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgZGlhbG9nQWN0aW9uID0gYXdhaXQgbmV3IENvbGxhYm9yYXRpb25EaXNjYXJkKHRoaXMuZ2V0VmlldygpLCBmYWxzZSkuZ2V0VXNlckFjdGlvbigpO1xuXHRcdFx0XHQvLyBXZSBjYW5jZWwgdGhlIGFjdGlvblxuXHRcdFx0XHRpZiAoZGlhbG9nQWN0aW9uID09PSBcImNhbmNlbFwiKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIFdlIGtlZXAgdGhlIGRyYWZ0IGFuZCBsZWF2ZSBmb3IgTFJcblx0XHRcdFx0aWYgKGRpYWxvZ0FjdGlvbiA9PT0gXCJrZWVwRHJhZnRcIikge1xuXHRcdFx0XHRcdHRoaXMuY29sbGFib3JhdGl2ZURyYWZ0LmRpc2Nvbm5lY3QoKTtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLl9yb3V0aW5nLm5hdmlnYXRlQmFja0Zyb21Db250ZXh0KGNvbnRleHQpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBXZSBoYXZlIGRpc3BsYXllZCB0aGUgZGlhbG9nIGFuZCB0aGUgdXNlciBjb25maXJtZWQgdGhlIGRpc2NhcmQgLT4gV2Ugc2tpcCB0aGUgZGlzY2FyZCBjb25maXJtYXRpb25cblx0XHRcdFx0aWYgKGRpYWxvZ0FjdGlvbiA9PT0gXCJkaXNjYXJkQ29uZmlybWVkXCIpIHtcblx0XHRcdFx0XHRzaG91bGRTa2lwRGlzY2FyZFBvcG92ZXIgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IGdldCBjb2xsYWJvcmF0aXZlIHVzZXJzXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCBpc0RvY3VtZW50TW9kaWZpZWQgPVxuXHRcdFx0ISF0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFVpTW9kZWxDb25zdGFudHMuRG9jdW1lbnRNb2RpZmllZCkgfHwgIWNvbnRleHQuZ2V0UHJvcGVydHkoXCJIYXNBY3RpdmVFbnRpdHlcIik7XG5cdFx0Y29uc3QgYWZ0ZXJDYW5jZWw6IEZ1bmN0aW9uID0gKHByb21pc2VSZXN1bHQ6IE9EYXRhVjRDb250ZXh0KSA9PiB7XG5cdFx0XHQvLyBmb2N1cyBpcyByZXRhaW5lZCBvbiB0aGUgbGFzdCBmb2N1c2VkIGVsZW1lbnRcblx0XHRcdGlmIChsYXN0Rm9jdXNlZENvbnRyb2xJZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQobGFzdEZvY3VzZWRDb250cm9sSWQpPy5mb2N1cygpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHByb21pc2VSZXN1bHQ7XG5cdFx0fTtcblx0XHRpZiAoXG5cdFx0XHQodGhpcy5nZXRBcHBDb21wb25lbnQoKT8uZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKT8uZ2V0Q2FwYWJpbGl0aWVzKCk/LkhpZGRlbkRyYWZ0IGFzIEhpZGRlbkRyYWZ0KT8uZW5hYmxlZCAmJlxuXHRcdFx0aXNEb2N1bWVudE1vZGlmaWVkXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gZHJhZnQucHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24oXG5cdFx0XHRcdGFmdGVyQ2FuY2VsLFxuXHRcdFx0XHRGdW5jdGlvbi5wcm90b3R5cGUsXG5cdFx0XHRcdGNvbnRleHQsXG5cdFx0XHRcdHRoaXMsXG5cdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRkcmFmdC5OYXZpZ2F0aW9uVHlwZS5CYWNrTmF2aWdhdGlvbixcblx0XHRcdFx0dHJ1ZVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZWRpdEZsb3dcblx0XHRcdC5jYW5jZWxEb2N1bWVudChjb250ZXh0LCB7IGNvbnRyb2w6IGNhbmNlbEJ1dHRvbiwgc2tpcERpc2NhcmRQb3BvdmVyOiBzaG91bGRTa2lwRGlzY2FyZFBvcG92ZXIgfSlcblx0XHRcdC50aGVuKChwcm9taXNlUmVzdWx0KSA9PiB7XG5cdFx0XHRcdHJldHVybiBhZnRlckNhbmNlbChwcm9taXNlUmVzdWx0KTtcblx0XHRcdH0pO1xuXHR9XG5cblx0YXN5bmMgX2FwcGx5RG9jdW1lbnQob0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIHRoaXMuZWRpdEZsb3cuYXBwbHlEb2N1bWVudChvQ29udGV4dCkuY2F0Y2goKCkgPT4ge1xuXHRcdFx0dGhpcy5fc2hvd01lc3NhZ2VQb3BvdmVyKCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fSk7XG5cdH1cblxuXHRfdXBkYXRlUmVsYXRlZEFwcHMoKTogdm9pZCB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGNvbnN0IHNob3dSZWxhdGVkQXBwcyA9IG9PYmplY3RQYWdlLmRhdGEoXCJzaG93UmVsYXRlZEFwcHNcIik7XG5cdFx0aWYgKHNob3dSZWxhdGVkQXBwcyA9PT0gXCJ0cnVlXCIgfHwgc2hvd1JlbGF0ZWRBcHBzID09PSB0cnVlKSB7XG5cdFx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5nZXRWaWV3KCkpO1xuXHRcdFx0Q29tbW9uVXRpbHMudXBkYXRlUmVsYXRlZEFwcHNEZXRhaWxzKG9PYmplY3RQYWdlLCBhcHBDb21wb25lbnQpO1xuXHRcdH1cblx0fVxuXG5cdF9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhUGFyZW50RWxlbWVudDogQ29udHJvbFtdLCBhU3Vic2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24sIGFDb250cm9sczogQ29udHJvbFtdLCBiSXNDaGFydD86IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IGl0ZW0xIG9mIGFQYXJlbnRFbGVtZW50KSB7XG5cdFx0XHRsZXQgb0VsZW1lbnQgPSAoaXRlbTEgYXMgTWFjcm9BUEkpLmdldENvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbiA/IChpdGVtMSBhcyBNYWNyb0FQSSkuZ2V0Q29udGVudCgpIDogdW5kZWZpbmVkO1xuXHRcdFx0aWYgKGJJc0NoYXJ0KSB7XG5cdFx0XHRcdGlmIChvRWxlbWVudD8uZ2V0QWdncmVnYXRpb24oXCJpdGVtc1wiKSkge1xuXHRcdFx0XHRcdGNvbnN0IGl0ZW1zID0gb0VsZW1lbnQuZ2V0QWdncmVnYXRpb24oXCJpdGVtc1wiKSBhcyBDb250cm9sW107XG5cdFx0XHRcdFx0aXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbTogQ29udHJvbCkge1xuXHRcdFx0XHRcdFx0aWYgKGl0ZW0uaXNBPENoYXJ0QmxvY2s+KFwic2FwLmZlLm1hY3Jvcy5DaGFydFwiKSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBjaGFydENvbnRyb2wgPSBpdGVtLmdldENoYXJ0Q29udHJvbCgpO1xuXHRcdFx0XHRcdFx0XHRhQ29udHJvbHMucHVzaChjaGFydENvbnRyb2wpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQuaXNBICYmIG9FbGVtZW50LmlzQTxEeW5hbWljU2lkZUNvbnRlbnQ+KFwic2FwLnVpLmxheW91dC5EeW5hbWljU2lkZUNvbnRlbnRcIikpIHtcblx0XHRcdFx0XHRjb25zdCBvU3ViRWxlbWVudCA9IG9FbGVtZW50LmdldE1haW5Db250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gPyBvRWxlbWVudC5nZXRNYWluQ29udGVudCgpIDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdGlmIChvU3ViRWxlbWVudCAmJiBvU3ViRWxlbWVudC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRvRWxlbWVudCA9IG9TdWJFbGVtZW50WzBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBUaGUgdGFibGUgbWF5IGN1cnJlbnRseSBiZSBzaG93biBpbiBhIGZ1bGwgc2NyZWVuIGRpYWxvZywgd2UgY2FuIHRoZW4gZ2V0IHRoZSByZWZlcmVuY2UgdG8gdGhlIFRhYmxlQVBJXG5cdFx0XHRcdC8vIGNvbnRyb2wgZnJvbSB0aGUgY3VzdG9tIGRhdGEgb2YgdGhlIHBsYWNlIGhvbGRlciBwYW5lbFxuXHRcdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQuaXNBICYmIG9FbGVtZW50LmlzQShcInNhcC5tLlBhbmVsXCIpICYmIG9FbGVtZW50LmRhdGEoXCJGdWxsU2NyZWVuVGFibGVQbGFjZUhvbGRlclwiKSkge1xuXHRcdFx0XHRcdG9FbGVtZW50ID0gb0VsZW1lbnQuZGF0YShcInRhYmxlQVBJcmVmZXJlbmNlXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5pc0EgJiYgb0VsZW1lbnQuaXNBPFRhYmxlQVBJPihcInNhcC5mZS5tYWNyb3MudGFibGUuVGFibGVBUElcIikpIHtcblx0XHRcdFx0XHRjb25zdCBvU3ViRWxlbWVudCA9IG9FbGVtZW50LmdldENvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbiA/IG9FbGVtZW50LmdldENvbnRlbnQoKSA6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRpZiAob1N1YkVsZW1lbnQgJiYgb1N1YkVsZW1lbnQuaXNBICYmIG9TdWJFbGVtZW50LmlzQTxUYWJsZT4oXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHRcdFx0XHRhQ29udHJvbHMucHVzaChvU3ViRWxlbWVudCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X2dldEFsbFN1YlNlY3Rpb25zKCk6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10ge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRsZXQgYVN1YlNlY3Rpb25zOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdID0gW107XG5cdFx0b09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvU2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24pIHtcblx0XHRcdGFTdWJTZWN0aW9ucyA9IGFTdWJTZWN0aW9ucy5jb25jYXQob1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGFTdWJTZWN0aW9ucztcblx0fVxuXG5cdF9nZXRBbGxCbG9ja3MoKTogRW5oYW5jZVdpdGhVSTU8U3ViU2VjdGlvbkJsb2NrPltdIHtcblx0XHRsZXQgYUJsb2NrczogRW5oYW5jZVdpdGhVSTU8U3ViU2VjdGlvbkJsb2NrPltdID0gW107XG5cdFx0dGhpcy5fZ2V0QWxsU3ViU2VjdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvU3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24pIHtcblx0XHRcdGFCbG9ja3MgPSBhQmxvY2tzLmNvbmNhdChvU3ViU2VjdGlvbi5nZXRCbG9ja3MoKSBhcyBFbmhhbmNlV2l0aFVJNTxTdWJTZWN0aW9uQmxvY2s+W10pO1xuXHRcdH0pO1xuXHRcdHJldHVybiBhQmxvY2tzO1xuXHR9XG5cblx0X2ZpbmRUYWJsZXMoKTogVGFibGVbXSB7XG5cdFx0Y29uc3QgYVN1YlNlY3Rpb25zID0gdGhpcy5fZ2V0QWxsU3ViU2VjdGlvbnMoKTtcblx0XHRjb25zdCBhVGFibGVzOiBUYWJsZVtdID0gW107XG5cdFx0Zm9yIChsZXQgc3ViU2VjdGlvbiA9IDA7IHN1YlNlY3Rpb24gPCBhU3ViU2VjdGlvbnMubGVuZ3RoOyBzdWJTZWN0aW9uKyspIHtcblx0XHRcdHRoaXMuX2ZpbmRDb250cm9sSW5TdWJTZWN0aW9uKGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXS5nZXRCbG9ja3MoKSwgYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLCBhVGFibGVzKTtcblx0XHRcdHRoaXMuX2ZpbmRDb250cm9sSW5TdWJTZWN0aW9uKGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXS5nZXRNb3JlQmxvY2tzKCksIGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXSwgYVRhYmxlcyk7XG5cdFx0fVxuXHRcdHJldHVybiBhVGFibGVzO1xuXHR9XG5cblx0X2ZpbmRDaGFydHMoKTogQ2hhcnRbXSB7XG5cdFx0Y29uc3QgYVN1YlNlY3Rpb25zID0gdGhpcy5fZ2V0QWxsU3ViU2VjdGlvbnMoKTtcblx0XHRjb25zdCBhQ2hhcnRzOiBDaGFydFtdID0gW107XG5cdFx0Zm9yIChsZXQgc3ViU2VjdGlvbiA9IDA7IHN1YlNlY3Rpb24gPCBhU3ViU2VjdGlvbnMubGVuZ3RoOyBzdWJTZWN0aW9uKyspIHtcblx0XHRcdHRoaXMuX2ZpbmRDb250cm9sSW5TdWJTZWN0aW9uKGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXS5nZXRCbG9ja3MoKSwgYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLCBhQ2hhcnRzLCB0cnVlKTtcblx0XHRcdHRoaXMuX2ZpbmRDb250cm9sSW5TdWJTZWN0aW9uKGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXS5nZXRNb3JlQmxvY2tzKCksIGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXSwgYUNoYXJ0cywgdHJ1ZSk7XG5cdFx0fVxuXHRcdHJldHVybiBhQ2hhcnRzO1xuXHR9XG5cblx0X2Nsb3NlU2lkZUNvbnRlbnQoKTogdm9pZCB7XG5cdFx0dGhpcy5fZ2V0QWxsQmxvY2tzKCkuZm9yRWFjaChmdW5jdGlvbiAob0Jsb2NrOiBFbmhhbmNlV2l0aFVJNTxTdWJTZWN0aW9uQmxvY2s+KTogdm9pZCB7XG5cdFx0XHRjb25zdCBvQ29udGVudCA9IG9CbG9jay5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgb0Jsb2NrLmdldENvbnRlbnQoKTtcblx0XHRcdGlmIChvQ29udGVudCAmJiBvQ29udGVudC5pc0EgJiYgb0NvbnRlbnQuaXNBPER5bmFtaWNTaWRlQ29udGVudD4oXCJzYXAudWkubGF5b3V0LkR5bmFtaWNTaWRlQ29udGVudFwiKSkge1xuXHRcdFx0XHRpZiAob0NvbnRlbnQuc2V0U2hvd1NpZGVDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcblx0XHRcdFx0XHRvQ29udGVudC5zZXRTaG93U2lkZUNvbnRlbnQoZmFsc2UsIGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoYXJ0IENvbnRleHQgaXMgcmVzb2x2ZWQgZm9yIDE6biBtaWNyb2NoYXJ0cy5cblx0ICogQHBhcmFtIG9DaGFydENvbnRleHQgVGhlIENvbnRleHQgb2YgdGhlIE1pY3JvQ2hhcnRcblx0ICogQHBhcmFtIHNDaGFydFBhdGggVGhlIGNvbGxlY3Rpb25QYXRoIG9mIHRoZSB0aGUgY2hhcnRcblx0ICogQHJldHVybnMgQXJyYXkgb2YgQXR0cmlidXRlcyBvZiB0aGUgY2hhcnQgQ29udGV4dFxuXHQgKi9cblx0X2dldENoYXJ0Q29udGV4dERhdGEob0NoYXJ0Q29udGV4dDogQ29udGV4dCwgc0NoYXJ0UGF0aDogc3RyaW5nKTogdW5rbm93bltdIHtcblx0XHRjb25zdCBvQ29udGV4dERhdGEgPSBvQ2hhcnRDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdGxldCBvQ2hhcnRDb250ZXh0RGF0YSA9IFtvQ29udGV4dERhdGFdO1xuXHRcdGlmIChvQ2hhcnRDb250ZXh0ICYmIHNDaGFydFBhdGgpIHtcblx0XHRcdGlmIChvQ29udGV4dERhdGFbc0NoYXJ0UGF0aF0pIHtcblx0XHRcdFx0b0NoYXJ0Q29udGV4dERhdGEgPSBvQ29udGV4dERhdGFbc0NoYXJ0UGF0aF07XG5cdFx0XHRcdGRlbGV0ZSBvQ29udGV4dERhdGFbc0NoYXJ0UGF0aF07XG5cdFx0XHRcdG9DaGFydENvbnRleHREYXRhLnB1c2gob0NvbnRleHREYXRhKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG9DaGFydENvbnRleHREYXRhO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNjcm9sbCB0aGUgdGFibGVzIHRvIHRoZSByb3cgd2l0aCB0aGUgc1BhdGhcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNSb3dQYXRoICdzUGF0aCBvZiB0aGUgdGFibGUgcm93J1xuXHQgKi9cblxuXHRfc2Nyb2xsVGFibGVzVG9Sb3coc1Jvd1BhdGg6IHN0cmluZyk6IHZvaWQge1xuXHRcdGlmICh0aGlzLl9maW5kVGFibGVzICYmIHRoaXMuX2ZpbmRUYWJsZXMoKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCBhVGFibGVzID0gdGhpcy5fZmluZFRhYmxlcygpO1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtIG9mIGFUYWJsZXMpIHtcblx0XHRcdFx0VGFibGVTY3JvbGxlci5zY3JvbGxUYWJsZVRvUm93KGl0ZW0sIHNSb3dQYXRoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIG1lcmdlIHNlbGVjdGVkIGNvbnRleHRzIGFuZCBmaWx0ZXJzLlxuXHQgKiBAcGFyYW0gb1BhZ2VDb250ZXh0IFBhZ2UgY29udGV4dFxuXHQgKiBAcGFyYW0gYUxpbmVDb250ZXh0IFNlbGVjdGVkIENvbnRleHRzXG5cdCAqIEBwYXJhbSBzQ2hhcnRQYXRoIENvbGxlY3Rpb24gbmFtZSBvZiB0aGUgY2hhcnRcblx0ICogQHJldHVybnMgU2VsZWN0aW9uIFZhcmlhbnQgT2JqZWN0XG5cdCAqL1xuXHRfbWVyZ2VNdWx0aXBsZUNvbnRleHRzKFxuXHRcdG9QYWdlQ29udGV4dDogQ29udGV4dCxcblx0XHRhTGluZUNvbnRleHQ6IE9EYXRhVjRDb250ZXh0W10sXG5cdFx0c0NoYXJ0UGF0aDogc3RyaW5nXG5cdCk6IHsgc2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudDsgYXR0cmlidXRlczogdW5rbm93bltdIH0ge1xuXHRcdGxldCBhQXR0cmlidXRlczogdW5rbm93bltdID0gW10sXG5cdFx0XHRhUGFnZUF0dHJpYnV0ZXMgPSBbXSxcblx0XHRcdG9Db250ZXh0LFxuXHRcdFx0c01ldGFQYXRoTGluZTogc3RyaW5nLFxuXHRcdFx0c1BhdGhMaW5lO1xuXG5cdFx0Y29uc3Qgc1BhZ2VQYXRoID0gb1BhZ2VDb250ZXh0LmdldFBhdGgoKTtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb1BhZ2VDb250ZXh0ICYmIG9QYWdlQ29udGV4dC5nZXRNb2RlbCgpICYmIG9QYWdlQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IHNNZXRhUGF0aFBhZ2UgPSBvTWV0YU1vZGVsICYmIG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoc1BhZ2VQYXRoKS5yZXBsYWNlKC9eXFwvKi8sIFwiXCIpO1xuXG5cdFx0Ly8gR2V0IHNpbmdsZSBsaW5lIGNvbnRleHQgaWYgbmVjZXNzYXJ5XG5cdFx0aWYgKGFMaW5lQ29udGV4dCAmJiBhTGluZUNvbnRleHQubGVuZ3RoKSB7XG5cdFx0XHRvQ29udGV4dCA9IGFMaW5lQ29udGV4dFswXTtcblx0XHRcdHNQYXRoTGluZSA9IG9Db250ZXh0LmdldFBhdGgoKTtcblx0XHRcdHNNZXRhUGF0aExpbmUgPSBvTWV0YU1vZGVsICYmIG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoc1BhdGhMaW5lKS5yZXBsYWNlKC9eXFwvKi8sIFwiXCIpO1xuXG5cdFx0XHRhTGluZUNvbnRleHQuZm9yRWFjaCgob1NpbmdsZUNvbnRleHQ6IE9EYXRhVjRDb250ZXh0KTogdm9pZCA9PiB7XG5cdFx0XHRcdGlmIChzQ2hhcnRQYXRoKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb0NoYXJ0Q29udGV4dERhdGEgPSB0aGlzLl9nZXRDaGFydENvbnRleHREYXRhKG9TaW5nbGVDb250ZXh0LCBzQ2hhcnRQYXRoKTtcblx0XHRcdFx0XHRpZiAob0NoYXJ0Q29udGV4dERhdGEpIHtcblx0XHRcdFx0XHRcdGFBdHRyaWJ1dGVzID0gb0NoYXJ0Q29udGV4dERhdGEubWFwKGZ1bmN0aW9uIChvU3ViQ2hhcnRDb250ZXh0RGF0YTogdW5rbm93bikge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnRleHREYXRhOiBvU3ViQ2hhcnRDb250ZXh0RGF0YSxcblx0XHRcdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IGAke3NNZXRhUGF0aFBhZ2V9LyR7c0NoYXJ0UGF0aH1gXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YUF0dHJpYnV0ZXMucHVzaCh7XG5cdFx0XHRcdFx0XHRjb250ZXh0RGF0YTogb1NpbmdsZUNvbnRleHQuZ2V0T2JqZWN0KCksXG5cdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IHNNZXRhUGF0aExpbmVcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGFQYWdlQXR0cmlidXRlcy5wdXNoKHtcblx0XHRcdGNvbnRleHREYXRhOiBvUGFnZUNvbnRleHQuZ2V0T2JqZWN0KCksXG5cdFx0XHRlbnRpdHlTZXQ6IHNNZXRhUGF0aFBhZ2Vcblx0XHR9KTtcblx0XHQvLyBBZGRpbmcgUGFnZSBDb250ZXh0IHRvIHNlbGVjdGlvbiB2YXJpYW50XG5cdFx0YVBhZ2VBdHRyaWJ1dGVzID0gdGhpcy5faW50ZW50QmFzZWROYXZpZ2F0aW9uLnJlbW92ZVNlbnNpdGl2ZURhdGEoYVBhZ2VBdHRyaWJ1dGVzLCBzTWV0YVBhdGhQYWdlKTtcblx0XHRjb25zdCBvUGFnZUxldmVsU1YgPSBDb21tb25VdGlscy5hZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudChuZXcgU2VsZWN0aW9uVmFyaWFudCgpLCBhUGFnZUF0dHJpYnV0ZXMsIHRoaXMuZ2V0VmlldygpKTtcblx0XHRhQXR0cmlidXRlcyA9IHRoaXMuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5yZW1vdmVTZW5zaXRpdmVEYXRhKGFBdHRyaWJ1dGVzLCBzTWV0YVBhdGhQYWdlKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VsZWN0aW9uVmFyaWFudDogb1BhZ2VMZXZlbFNWLFxuXHRcdFx0YXR0cmlidXRlczogYUF0dHJpYnV0ZXNcblx0XHR9O1xuXHR9XG5cblx0X2dldEJhdGNoR3JvdXBzRm9yVmlldygpOiBzdHJpbmdbXSB7XG5cdFx0Y29uc3Qgb1ZpZXdEYXRhID0gdGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSxcblx0XHRcdG9Db25maWd1cmF0aW9ucyA9IG9WaWV3RGF0YS5jb250cm9sQ29uZmlndXJhdGlvbixcblx0XHRcdGFDb25maWd1cmF0aW9ucyA9IG9Db25maWd1cmF0aW9ucyAmJiBPYmplY3Qua2V5cyhvQ29uZmlndXJhdGlvbnMpLFxuXHRcdFx0YUJhdGNoR3JvdXBzID0gW1wiJGF1dG8uSGVyb2VzXCIsIFwiJGF1dG8uRGVjb3JhdGlvblwiLCBcIiRhdXRvLldvcmtlcnNcIl07XG5cblx0XHRpZiAoYUNvbmZpZ3VyYXRpb25zICYmIGFDb25maWd1cmF0aW9ucy5sZW5ndGggPiAwKSB7XG5cdFx0XHRhQ29uZmlndXJhdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoc0tleSkge1xuXHRcdFx0XHRjb25zdCBvQ29uZmlndXJhdGlvbiA9IG9Db25maWd1cmF0aW9uc1tzS2V5XSBhcyBNaWNyb0NoYXJ0TWFuaWZlc3RDb25maWd1cmF0aW9uO1xuXHRcdFx0XHRpZiAob0NvbmZpZ3VyYXRpb24ucmVxdWVzdEdyb3VwSWQgPT09IFwiTG9uZ1J1bm5lcnNcIikge1xuXHRcdFx0XHRcdGFCYXRjaEdyb3Vwcy5wdXNoKFwiJGF1dG8uTG9uZ1J1bm5lcnNcIik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gYUJhdGNoR3JvdXBzO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBpbml0aWFsaXplIHBhZ2luYXRpb24uXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHQgb2Ygb2JqZWN0IHBhZ2Vcblx0ICogQHBhcmFtIGludGVybmFsTW9kZWwgSW50ZXJuYWwgbW9kZWxcblx0ICogQHBhcmFtIGxpc3RCaW5kaW5nIFBhcmVudCBsaXN0IGJpbmRpbmcgdG8gdXNlXG5cdCAqL1xuXHRfaW5pdGlhbGl6ZVBhZ2luYXRpb24oY29udGV4dDogT0RhdGFWNENvbnRleHQsIGludGVybmFsTW9kZWw6IEpTT05Nb2RlbCwgbGlzdEJpbmRpbmc/OiBPRGF0YUxpc3RCaW5kaW5nKTogdm9pZCB7XG5cdFx0Y29uc3Qgdmlld0xldmVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS52aWV3TGV2ZWw7XG5cdFx0aWYgKHZpZXdMZXZlbCA+IDEpIHtcblx0XHRcdGNvbnN0IHBhZ2luYXRvckN1cnJlbnRDb250ZXh0ID0gaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShcIi9wYWdpbmF0b3JDdXJyZW50Q29udGV4dFwiKTtcblx0XHRcdGlmIChwYWdpbmF0b3JDdXJyZW50Q29udGV4dCkge1xuXHRcdFx0XHRjb25zdCBiaW5kaW5nVG9Vc2UgPSBwYWdpbmF0b3JDdXJyZW50Q29udGV4dC5nZXRCaW5kaW5nKCk7XG5cdFx0XHRcdHRoaXMucGFnaW5hdG9yLmluaXRpYWxpemUoYmluZGluZ1RvVXNlLCBwYWdpbmF0b3JDdXJyZW50Q29udGV4dCk7XG5cdFx0XHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvcGFnaW5hdG9yQ3VycmVudENvbnRleHRcIiwgbnVsbCk7XG5cdFx0XHR9IGVsc2UgaWYgKGxpc3RCaW5kaW5nKSB7XG5cdFx0XHRcdHRoaXMucGFnaW5hdG9yLmluaXRpYWxpemUobGlzdEJpbmRpbmcsIGNvbnRleHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gdXBkYXRlIHRoZSBCcmVhZGNydW1icycgbGlua3MgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGhyZWYgd2hlbiB0aGUgY29udGV4dCBjaGFuZ2VzLlxuXHQgKiBAcGFyYW0gc291cmNlIEJyZWFkY3J1bWJzIGNvbnRyb2xcblx0ICogQHJldHVybnMgQSBQcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2hlbiB0aGUgQnJlYWRjcnVtYnMgY29udGVudCBpcyBmaWxsZWQgcHJvcGVybHlcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGFzeW5jIHNldEJyZWFkY3J1bWJMaW5rcyhzb3VyY2U6IEJyZWFkQ3J1bWJzKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgY29udGV4dCA9IHNvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpLFxuXHRcdFx0YXBwQ29tcG9uZW50ID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKSxcblx0XHRcdHByb21pc2VzOiBQcm9taXNlPFRpdGxlSW5mb3JtYXRpb24+W10gPSBbXSxcblx0XHRcdG5ld1BhdGggPSBjb250ZXh0Py5nZXRQYXRoKCksXG5cdFx0XHRwYXRoUGFydHMgPSBuZXdQYXRoPy5zcGxpdChcIi9cIikgPz8gW10sXG5cdFx0XHRtZXRhTW9kZWwgPSBhcHBDb21wb25lbnQgJiYgYXBwQ29tcG9uZW50LmdldE1ldGFNb2RlbCgpO1xuXHRcdGxldCBwYXRoID0gXCJcIjtcblx0XHR0cnkge1xuXHRcdFx0cGF0aFBhcnRzLnNoaWZ0KCk7XG5cdFx0XHRwYXRoUGFydHMuc3BsaWNlKC0xLCAxKTtcblx0XHRcdHBhdGhQYXJ0cy5mb3JFYWNoKGZ1bmN0aW9uIChwYXRoUGFydDogc3RyaW5nKSB7XG5cdFx0XHRcdHBhdGggKz0gYC8ke3BhdGhQYXJ0fWA7XG5cdFx0XHRcdGlmICghYXBwQ29tcG9uZW50LmdldFJvdXRlcigpLmdldFJvdXRlSW5mb0J5SGFzaChwYXRoKSkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCByb290Vmlld0NvbnRyb2xsZXIgPSBhcHBDb21wb25lbnQuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCk7XG5cdFx0XHRcdGNvbnN0IHBhcmFtZXRlclBhdGggPSBtZXRhTW9kZWwuZ2V0TWV0YVBhdGgocGF0aCk7XG5cdFx0XHRcdGNvbnN0IHJlc3VsdENvbnRleHQgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3BhcmFtZXRlclBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVzdWx0Q29udGV4dGApO1xuXHRcdFx0XHRpZiAocmVzdWx0Q29udGV4dCkge1xuXHRcdFx0XHRcdC8vIFdlIGRvbnQgbmVlZCB0byBjcmVhdGUgYSBicmVhZGNydW1iIGZvciBQYXJhbWV0ZXIgcGF0aFxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRwcm9taXNlcy5wdXNoKHJvb3RWaWV3Q29udHJvbGxlci5nZXRUaXRsZUluZm9Gcm9tUGF0aChwYXRoKSk7XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IHRpdGxlSGllcmFyY2h5SW5mb3M6IFRpdGxlSW5mb3JtYXRpb25bXSA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcblx0XHRcdGxldCBoaWVyYXJjaHlQb3NpdGlvbiwgbGluaztcblx0XHRcdGZvciAoY29uc3QgdGl0bGVIaWVyYXJjaHlJbmZvIG9mIHRpdGxlSGllcmFyY2h5SW5mb3MpIHtcblx0XHRcdFx0aGllcmFyY2h5UG9zaXRpb24gPSB0aXRsZUhpZXJhcmNoeUluZm9zLmluZGV4T2YodGl0bGVIaWVyYXJjaHlJbmZvKTtcblx0XHRcdFx0bGluayA9IHNvdXJjZS5nZXRMaW5rcygpW2hpZXJhcmNoeVBvc2l0aW9uXSA/IHNvdXJjZS5nZXRMaW5rcygpW2hpZXJhcmNoeVBvc2l0aW9uXSA6IG5ldyBMaW5rKCk7XG5cdFx0XHRcdC8vc0N1cnJlbnRFbnRpdHkgaXMgYSBmYWxsYmFjayB2YWx1ZSBpbiBjYXNlIG9mIGVtcHR5IHRpdGxlXG5cdFx0XHRcdGxpbmsuc2V0VGV4dCh0aXRsZUhpZXJhcmNoeUluZm8uc3VidGl0bGUgfHwgdGl0bGVIaWVyYXJjaHlJbmZvLnRpdGxlKTtcblx0XHRcdFx0Ly9XZSBhcHBseSBhbiBhZGRpdGlvbmFsIGVuY29kZVVSSSBpbiBjYXNlIG9mIHNwZWNpYWwgY2hhcmFjdGVycyAoaWUgXCIvXCIpIHVzZWQgaW4gdGhlIHVybCB0aHJvdWdoIHRoZSBzZW1hbnRpYyBrZXlzXG5cdFx0XHRcdGxpbmsuc2V0SHJlZihlbmNvZGVVUkkodGl0bGVIaWVyYXJjaHlJbmZvLmludGVudCEpKTtcblx0XHRcdFx0aWYgKCFzb3VyY2UuZ2V0TGlua3MoKVtoaWVyYXJjaHlQb3NpdGlvbl0pIHtcblx0XHRcdFx0XHRzb3VyY2UuYWRkTGluayhsaW5rKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBzZXR0aW5nIHRoZSBicmVhZGNydW1iIGxpbmtzOlwiICsgZXJyb3IpO1xuXHRcdH1cblx0fVxuXG5cdF9jaGVja0RhdGFQb2ludFRpdGxlRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKCk6IHZvaWQge1xuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBvRGF0YVBvaW50cyA9IENvbW1vblV0aWxzLmdldEhlYWRlckZhY2V0SXRlbUNvbmZpZ0ZvckV4dGVybmFsTmF2aWdhdGlvbihcblx0XHRcdG9WaWV3LmdldFZpZXdEYXRhKCkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdFx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRpbmdTZXJ2aWNlKCkuZ2V0T3V0Ym91bmRzKClcblx0XHQpO1xuXHRcdGNvbnN0IG9TaGVsbFNlcnZpY2VzID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdFx0Y29uc3Qgb1BhZ2VDb250ZXh0ID0gb1ZpZXcgJiYgb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJpc0hlYWRlckRQTGlua1Zpc2libGVcIiwge30pO1xuXHRcdGlmIChvUGFnZUNvbnRleHQpIHtcblx0XHRcdG9QYWdlQ29udGV4dFxuXHRcdFx0XHQucmVxdWVzdE9iamVjdCgpXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChvRGF0YTogb2JqZWN0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZuR2V0TGlua3Mob0RhdGFQb2ludHMsIG9EYXRhKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgcmV0cmlldmUgdGhlIGxpbmtzIGZyb20gdGhlIHNoZWxsIHNlcnZpY2VcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSBvRXJyb3Jcblx0XHQgKi9cblx0XHRmdW5jdGlvbiBmbk9uRXJyb3Iob0Vycm9yOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRcdExvZy5lcnJvcihvRXJyb3IpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGZuU2V0TGlua0VuYWJsZW1lbnQoaWQ6IHN0cmluZywgYVN1cHBvcnRlZExpbmtzOiB7IHN1cHBvcnRlZD86IGJvb2xlYW4gfVtdKTogdm9pZCB7XG5cdFx0XHRjb25zdCBzTGlua0lkID0gaWQ7XG5cdFx0XHQvLyBwcm9jZXNzIHZpYWJsZSBsaW5rcyBmcm9tIGdldExpbmtzIGZvciBhbGwgZGF0YXBvaW50cyBoYXZpbmcgb3V0Ym91bmRcblx0XHRcdGlmIChhU3VwcG9ydGVkTGlua3MgJiYgYVN1cHBvcnRlZExpbmtzLmxlbmd0aCA9PT0gMSAmJiBhU3VwcG9ydGVkTGlua3NbMF0uc3VwcG9ydGVkKSB7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgaXNIZWFkZXJEUExpbmtWaXNpYmxlLyR7c0xpbmtJZH1gLCB0cnVlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBAcGFyYW0gb1N1YkRhdGFQb2ludHNcblx0XHQgKiBAcGFyYW0gb1BhZ2VEYXRhXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gZm5HZXRMaW5rcyhcblx0XHRcdG9TdWJEYXRhUG9pbnRzOiBSZWNvcmQ8XG5cdFx0XHRcdHN0cmluZyxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBzdHJpbmc7XG5cdFx0XHRcdFx0YWN0aW9uOiBzdHJpbmc7XG5cdFx0XHRcdFx0c2VtYW50aWNPYmplY3RNYXBwaW5nOiBNZXRhTW9kZWxUeXBlPFNlbWFudGljT2JqZWN0TWFwcGluZ1R5cGU+W107XG5cdFx0XHRcdH1cblx0XHRcdD4sXG5cdFx0XHRvUGFnZURhdGE6IG9iamVjdFxuXHRcdCk6IHZvaWQge1xuXHRcdFx0Zm9yIChjb25zdCBzSWQgaW4gb1N1YkRhdGFQb2ludHMpIHtcblx0XHRcdFx0Y29uc3Qgb0RhdGFQb2ludCA9IG9TdWJEYXRhUG9pbnRzW3NJZF07XG5cdFx0XHRcdGNvbnN0IG9QYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cdFx0XHRcdGNvbnN0IG9MaW5rID0gb1ZpZXcuYnlJZChzSWQpO1xuXHRcdFx0XHRpZiAoIW9MaW5rKSB7XG5cdFx0XHRcdFx0Ly8gZm9yIGRhdGEgcG9pbnRzIGNvbmZpZ3VyZWQgaW4gYXBwIGRlc2NyaXB0b3IgYnV0IG5vdCBhbm5vdGF0ZWQgaW4gdGhlIGhlYWRlclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IG9MaW5rQ29udGV4dCA9IG9MaW5rLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0XHRcdGNvbnN0IG9MaW5rRGF0YTogb2JqZWN0ID0gb0xpbmtDb250ZXh0ICYmIG9MaW5rQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0bGV0IG9NaXhlZENvbnRleHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gbWVyZ2Uoe30sIG9QYWdlRGF0YSwgb0xpbmtEYXRhKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0XHRcdFx0Ly8gcHJvY2VzcyBzZW1hbnRpYyBvYmplY3QgbWFwcGluZ3Ncblx0XHRcdFx0aWYgKG9EYXRhUG9pbnQuc2VtYW50aWNPYmplY3RNYXBwaW5nKSB7XG5cdFx0XHRcdFx0Y29uc3QgYVNlbWFudGljT2JqZWN0TWFwcGluZyA9IG9EYXRhUG9pbnQuc2VtYW50aWNPYmplY3RNYXBwaW5nO1xuXHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbSBpbiBhU2VtYW50aWNPYmplY3RNYXBwaW5nKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvTWFwcGluZyA9IGFTZW1hbnRpY09iamVjdE1hcHBpbmdbaXRlbV07XG5cdFx0XHRcdFx0XHRjb25zdCBzTWFpblByb3BlcnR5ID0gb01hcHBpbmdbXCJMb2NhbFByb3BlcnR5XCJdIVtcIiRQcm9wZXJ0eVBhdGhcIl07XG5cdFx0XHRcdFx0XHRjb25zdCBzTWFwcGVkUHJvcGVydHkgPSBvTWFwcGluZ1tcIlNlbWFudGljT2JqZWN0UHJvcGVydHlcIl0hO1xuXHRcdFx0XHRcdFx0aWYgKHNNYWluUHJvcGVydHkgIT09IHNNYXBwZWRQcm9wZXJ0eSkge1xuXHRcdFx0XHRcdFx0XHRpZiAob01peGVkQ29udGV4dC5oYXNPd25Qcm9wZXJ0eShzTWFpblByb3BlcnR5KSkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9OZXdNYXBwaW5nOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXHRcdFx0XHRcdFx0XHRcdG9OZXdNYXBwaW5nW3NNYXBwZWRQcm9wZXJ0eV0gPSBvTWl4ZWRDb250ZXh0W3NNYWluUHJvcGVydHldO1xuXHRcdFx0XHRcdFx0XHRcdG9NaXhlZENvbnRleHQgPSBtZXJnZSh7fSwgb01peGVkQ29udGV4dCwgb05ld01hcHBpbmcpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBvTWl4ZWRDb250ZXh0W3NNYWluUHJvcGVydHldO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKG9NaXhlZENvbnRleHQpIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHNLZXkgaW4gb01peGVkQ29udGV4dCkge1xuXHRcdFx0XHRcdFx0aWYgKCFzS2V5LnN0YXJ0c1dpdGgoXCJfXCIpICYmICFzS2V5LmluY2x1ZGVzKFwib2RhdGEuY29udGV4dFwiKSkge1xuXHRcdFx0XHRcdFx0XHRvUGFyYW1zW3NLZXldID0gb01peGVkQ29udGV4dFtzS2V5XTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gdmFsaWRhdGUgaWYgYSBsaW5rIG11c3QgYmUgcmVuZGVyZWRcblx0XHRcdFx0b1NoZWxsU2VydmljZXNcblx0XHRcdFx0XHQuaXNOYXZpZ2F0aW9uU3VwcG9ydGVkKFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0OiB7XG5cdFx0XHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IG9EYXRhUG9pbnQuc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRcdFx0YWN0aW9uOiBvRGF0YVBvaW50LmFjdGlvblxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRwYXJhbXM6IG9QYXJhbXNcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdKVxuXHRcdFx0XHRcdC50aGVuKChhTGlua3MpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBmblNldExpbmtFbmFibGVtZW50KHNJZCwgYUxpbmtzKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmbk9uRXJyb3IpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGhhbmRsZXJzID0ge1xuXHRcdG9uUHJpbWFyeUFjdGlvbihcblx0XHRcdG9Db250cm9sbGVyOiBPYmplY3RQYWdlQ29udHJvbGxlcixcblx0XHRcdG9WaWV3OiBGRVZpZXcsXG5cdFx0XHRvQ29udGV4dDogT0RhdGFWNENvbnRleHQsXG5cdFx0XHRzQWN0aW9uTmFtZTogc3RyaW5nLFxuXHRcdFx0bVBhcmFtZXRlcnM6IHtcblx0XHRcdFx0cGFyYW1ldGVyVmFsdWVzPzogeyBuYW1lOiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH1bXTtcblx0XHRcdFx0c2tpcFBhcmFtZXRlckRpYWxvZz86IGJvb2xlYW47XG5cdFx0XHRcdGNvbnRleHRzPzogT0RhdGFWNENvbnRleHQgfCBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdFx0XHRtb2RlbD86IE9EYXRhTW9kZWw7XG5cdFx0XHRcdHJlcXVpcmVzTmF2aWdhdGlvbj86IGJvb2xlYW47XG5cdFx0XHRcdGxhYmVsPzogc3RyaW5nO1xuXHRcdFx0XHRpc05hdmlnYWJsZT86IGJvb2xlYW47XG5cdFx0XHRcdGVudGl0eVNldE5hbWU/OiBzdHJpbmc7XG5cdFx0XHRcdGludm9jYXRpb25Hcm91cGluZz86IHN0cmluZztcblx0XHRcdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwPzogc3RyaW5nO1xuXHRcdFx0XHRjb250cm9sSWQ/OiBzdHJpbmc7XG5cdFx0XHRcdGJTdGF0aWNBY3Rpb24/OiBib29sZWFuO1xuXHRcdFx0XHRhcHBsaWNhYmxlQ29udGV4dHM/OiBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdFx0XHRub3RBcHBsaWNhYmxlQ29udGV4dHM/OiBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdFx0XHRlbmFibGVBdXRvU2Nyb2xsPzogYm9vbGVhbjtcblx0XHRcdFx0ZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uPzogc3RyaW5nO1xuXHRcdFx0fSxcblx0XHRcdG1Db25kaXRpb25zOiB7XG5cdFx0XHRcdHBvc2l0aXZlQWN0aW9uVmlzaWJsZTogYm9vbGVhbjtcblx0XHRcdFx0cG9zaXRpdmVBY3Rpb25FbmFibGVkOiBib29sZWFuO1xuXHRcdFx0XHRlZGl0QWN0aW9uVmlzaWJsZTogYm9vbGVhbjtcblx0XHRcdFx0ZWRpdEFjdGlvbkVuYWJsZWQ6IGJvb2xlYW47XG5cdFx0XHR9XG5cdFx0KTogdm9pZCB7XG5cdFx0XHQvKipcblx0XHRcdCAqIEludm9rZXMgdGhlIHBhZ2UgcHJpbWFyeSBhY3Rpb24gb24gcHJlc3Mgb2YgQ3RybCtFbnRlci5cblx0XHRcdCAqL1xuXHRcdFx0Y29uc3QgaVZpZXdMZXZlbCA9IG9Db250cm9sbGVyLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpLnZpZXdMZXZlbDtcblx0XHRcdGlmIChtQ29uZGl0aW9ucy5wb3NpdGl2ZUFjdGlvblZpc2libGUpIHtcblx0XHRcdFx0aWYgKG1Db25kaXRpb25zLnBvc2l0aXZlQWN0aW9uRW5hYmxlZCkge1xuXHRcdFx0XHRcdG9Db250cm9sbGVyLmhhbmRsZXJzLm9uQ2FsbEFjdGlvbihvVmlldywgc0FjdGlvbk5hbWUsIG1QYXJhbWV0ZXJzKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChtQ29uZGl0aW9ucy5lZGl0QWN0aW9uVmlzaWJsZSkge1xuXHRcdFx0XHRpZiAobUNvbmRpdGlvbnMuZWRpdEFjdGlvbkVuYWJsZWQpIHtcblx0XHRcdFx0XHRvQ29udHJvbGxlci5fZWRpdERvY3VtZW50KCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoaVZpZXdMZXZlbCA9PT0gMSAmJiBDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKG9WaWV3KSkge1xuXHRcdFx0XHRvQ29udHJvbGxlci5fc2F2ZURvY3VtZW50KCk7XG5cdFx0XHR9IGVsc2UgaWYgKENvbW1vblV0aWxzLmdldElzRWRpdGFibGUob1ZpZXcpKSB7XG5cdFx0XHRcdG9Db250cm9sbGVyLl9hcHBseURvY3VtZW50KG9Db250ZXh0KTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogTWFuYWdlcyB0aGUgY29udGV4dCBjaGFuZ2UgZXZlbnQgb24gdGhlIHRhYmxlcy5cblx0XHQgKiBUaGUgZm9jdXMgaXMgc2V0IGlmIHRoaXMgY2hhbmdlIGlzIHJlbGF0ZWQgdG8gYW4gZWRpdEZsb3cgYWN0aW9uIGFuZFxuXHRcdCAqIGFuIGV2ZW50IGlzIGZpcmVkIG9uIHRoZSBvYmplY3RQYWdlIG1lc3NhZ2VCdXR0b24uXG5cdFx0ICogQHBhcmFtIHRoaXMgVGhlIG9iamVjdFBhZ2UgY29udHJvbGxlclxuXHRcdCAqIEBwYXJhbSBldmVudCBUaGUgVUk1IGV2ZW50XG5cdFx0ICovXG5cdFx0YXN5bmMgb25UYWJsZUNvbnRleHRDaGFuZ2UodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIGV2ZW50OiBVSTVFdmVudDx7fSwgVGFibGVBUEk+KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0XHRjb25zdCB0YWJsZUFQSSA9IGV2ZW50LmdldFNvdXJjZSgpO1xuXHRcdFx0Y29uc3QgdGFibGUgPSB0YWJsZUFQSS5jb250ZW50O1xuXHRcdFx0Y29uc3QgY3VycmVudEFjdGlvblByb21pc2UgPSB0aGlzLmVkaXRGbG93LmdldEN1cnJlbnRBY3Rpb25Qcm9taXNlKCk7XG5cdFx0XHRjb25zdCB0YWJsZUNvbnRleHRzID0gdGhpcy5fZ2V0VGFibGVCaW5kaW5nKHRhYmxlKT8uZ2V0Q3VycmVudENvbnRleHRzKCk7XG5cblx0XHRcdGlmIChjdXJyZW50QWN0aW9uUHJvbWlzZSAmJiB0YWJsZUNvbnRleHRzPy5sZW5ndGgpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRjb25zdCBhY3Rpb25SZXNwb25zZSA9IGF3YWl0IGN1cnJlbnRBY3Rpb25Qcm9taXNlO1xuXHRcdFx0XHRcdGlmIChhY3Rpb25SZXNwb25zZT8uY29udHJvbElkID09PSB0YWJsZS5nZXRJZCgpKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBhY3Rpb25EYXRhID0gYWN0aW9uUmVzcG9uc2Uub0RhdGE7XG5cdFx0XHRcdFx0XHRjb25zdCBrZXlzID0gYWN0aW9uUmVzcG9uc2Uua2V5cztcblx0XHRcdFx0XHRcdGNvbnN0IG5ld0l0ZW0gPSB0YWJsZUNvbnRleHRzLmZpbmRJbmRleCgodGFibGVDb250ZXh0OiBDb250ZXh0KSA9PiB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHRhYmxlRGF0YSA9IHRhYmxlQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGtleXMuZXZlcnkoKGtleTogc3RyaW5nKSA9PiB0YWJsZURhdGFba2V5XSA9PT0gYWN0aW9uRGF0YVtrZXldKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0aWYgKG5ld0l0ZW0gIT09IC0xKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGRpYWxvZyA9IEluc3RhbmNlTWFuYWdlci5nZXRPcGVuRGlhbG9ncygpLmZpbmQoKGRpYWxvZykgPT4gZGlhbG9nLmRhdGEoXCJGdWxsU2NyZWVuRGlhbG9nXCIpICE9PSB0cnVlKTtcblx0XHRcdFx0XHRcdFx0aWYgKGRpYWxvZykge1xuXHRcdFx0XHRcdFx0XHRcdC8vIGJ5IGRlc2lnbiwgYSBzYXAubS5kaWFsb2cgc2V0IHRoZSBmb2N1cyB0byB0aGUgcHJldmlvdXMgZm9jdXNlZCBlbGVtZW50IHdoZW4gY2xvc2luZy5cblx0XHRcdFx0XHRcdFx0XHQvLyB3ZSBzaG91bGQgd2FpdCBmb3IgdGhlIGRpYWxvZyB0byBiZSBjbG9zZWQgYmVmb3JlIHNldCB0aGUgZm9jdXMgdG8gYW5vdGhlciBlbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0ZGlhbG9nLmF0dGFjaEV2ZW50T25jZShcImFmdGVyQ2xvc2VcIiwgKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0dGFibGUuZm9jdXNSb3cobmV3SXRlbSwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0dGFibGUuZm9jdXNSb3cobmV3SXRlbSwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0dGhpcy5lZGl0Rmxvdy5kZWxldGVDdXJyZW50QWN0aW9uUHJvbWlzZSgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdExvZy5lcnJvcihgQW4gZXJyb3Igb2NjdXJzIHdoaWxlIHNjcm9sbGluZyB0byB0aGUgbmV3bHkgY3JlYXRlZCBJdGVtOiAke2V9YCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIGZpcmUgTW9kZWxDb250ZXh0Q2hhbmdlIG9uIHRoZSBtZXNzYWdlIGJ1dHRvbiB3aGVuZXZlciB0aGUgdGFibGUgY29udGV4dCBjaGFuZ2VzXG5cdFx0XHR0aGlzLm1lc3NhZ2VCdXR0b24uZmlyZU1vZGVsQ29udGV4dENoYW5nZSgpO1xuXHRcdH0sXG5cblx0XHRhc3luYyBvbkNhbGxBY3Rpb24oXG5cdFx0XHRvVmlldzogRkVWaWV3LFxuXHRcdFx0c0FjdGlvbk5hbWU6IHN0cmluZyxcblx0XHRcdG1QYXJhbWV0ZXJzOiB7XG5cdFx0XHRcdHBhcmFtZXRlclZhbHVlcz86IHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogdW5rbm93biB9W107XG5cdFx0XHRcdHNraXBQYXJhbWV0ZXJEaWFsb2c/OiBib29sZWFuO1xuXHRcdFx0XHRjb250ZXh0cz86IE9EYXRhVjRDb250ZXh0IHwgT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0bW9kZWw/OiBPRGF0YU1vZGVsO1xuXHRcdFx0XHRyZXF1aXJlc05hdmlnYXRpb24/OiBib29sZWFuO1xuXHRcdFx0XHRsYWJlbD86IHN0cmluZztcblx0XHRcdFx0aXNOYXZpZ2FibGU/OiBib29sZWFuO1xuXHRcdFx0XHRlbnRpdHlTZXROYW1lPzogc3RyaW5nO1xuXHRcdFx0XHRpbnZvY2F0aW9uR3JvdXBpbmc/OiBzdHJpbmc7XG5cdFx0XHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcD86IHN0cmluZztcblx0XHRcdFx0Y29udHJvbElkPzogc3RyaW5nO1xuXHRcdFx0XHRiU3RhdGljQWN0aW9uPzogYm9vbGVhbjtcblx0XHRcdFx0YXBwbGljYWJsZUNvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0bm90QXBwbGljYWJsZUNvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0ZW5hYmxlQXV0b1Njcm9sbD86IGJvb2xlYW47XG5cdFx0XHRcdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbj86IHN0cmluZztcblx0XHRcdH1cblx0XHQpOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRcdGNvbnN0IG9Db250cm9sbGVyID0gb1ZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIE9iamVjdFBhZ2VDb250cm9sbGVyO1xuXG5cdFx0XHQvLyBXYWl0IGZvciBWSCB2YWx1ZXMgdG8gYmUgcmVzb2x2ZWQgYmVmb3JlIGNhbGxpbmcgdGhlIGFjdGlvblxuXHRcdFx0YXdhaXQgb0NvbnRyb2xsZXIuZWRpdEZsb3cuc3luY1Rhc2soKTtcblxuXHRcdFx0cmV0dXJuIG9Db250cm9sbGVyLmVkaXRGbG93XG5cdFx0XHRcdC5pbnZva2VBY3Rpb24oc0FjdGlvbk5hbWUsIG1QYXJhbWV0ZXJzKVxuXHRcdFx0XHQudGhlbihvQ29udHJvbGxlci5fc2hvd01lc3NhZ2VQb3BvdmVyLmJpbmQob0NvbnRyb2xsZXIsIHVuZGVmaW5lZCkpXG5cdFx0XHRcdC5jYXRjaChvQ29udHJvbGxlci5fc2hvd01lc3NhZ2VQb3BvdmVyLmJpbmQob0NvbnRyb2xsZXIpKTtcblx0XHR9LFxuXHRcdG9uRGF0YVBvaW50VGl0bGVQcmVzc2VkKFxuXHRcdFx0b0NvbnRyb2xsZXI6IE9iamVjdFBhZ2VDb250cm9sbGVyLFxuXHRcdFx0b1NvdXJjZTogQ29udHJvbCxcblx0XHRcdG9NYW5pZmVzdE91dGJvdW5kOiBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdE91dGJvdW5kRW50cnk+LFxuXHRcdFx0c0NvbnRyb2xDb25maWc6IHN0cmluZyxcblx0XHRcdHNDb2xsZWN0aW9uUGF0aDogc3RyaW5nXG5cdFx0KTogdm9pZCB7XG5cdFx0XHRvTWFuaWZlc3RPdXRib3VuZCA9IHR5cGVvZiBvTWFuaWZlc3RPdXRib3VuZCA9PT0gXCJzdHJpbmdcIiA/IEpTT04ucGFyc2Uob01hbmlmZXN0T3V0Ym91bmQpIDogb01hbmlmZXN0T3V0Ym91bmQ7XG5cdFx0XHRjb25zdCBvVGFyZ2V0SW5mbyA9IG9NYW5pZmVzdE91dGJvdW5kW3NDb250cm9sQ29uZmlnXSxcblx0XHRcdFx0b0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dCA9IG9Tb3VyY2UuZ2V0QmluZGluZ0NvbnRleHQoKSEsXG5cdFx0XHRcdHNNZXRhUGF0aCA9IG9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHRcblx0XHRcdFx0XHQuZ2V0TW9kZWwoKVxuXHRcdFx0XHRcdC5nZXRNZXRhTW9kZWwoKVxuXHRcdFx0XHRcdC5nZXRNZXRhUGF0aChvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0LmdldFBhdGgoKSk7XG5cdFx0XHRsZXQgYVNlbWFudGljT2JqZWN0TWFwcGluZyA9IENvbW1vblV0aWxzLmdldFNlbWFudGljT2JqZWN0TWFwcGluZyhvVGFyZ2V0SW5mbyksXG5cdFx0XHRcdGFOYXZpZ2F0aW9uRGF0YSA9IG9Db250cm9sbGVyLl9nZXRDaGFydENvbnRleHREYXRhKG9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHQsIHNDb2xsZWN0aW9uUGF0aCksXG5cdFx0XHRcdGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVycztcblxuXHRcdFx0YU5hdmlnYXRpb25EYXRhID0gYU5hdmlnYXRpb25EYXRhLm1hcChmdW5jdGlvbiAob05hdmlnYXRpb25EYXRhOiB1bmtub3duKSB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0ZGF0YTogb05hdmlnYXRpb25EYXRhLFxuXHRcdFx0XHRcdG1ldGFQYXRoOiBzTWV0YVBhdGggKyAoc0NvbGxlY3Rpb25QYXRoID8gYC8ke3NDb2xsZWN0aW9uUGF0aH1gIDogXCJcIilcblx0XHRcdFx0fTtcblx0XHRcdH0pO1xuXHRcdFx0aWYgKG9UYXJnZXRJbmZvICYmIG9UYXJnZXRJbmZvLnBhcmFtZXRlcnMpIHtcblx0XHRcdFx0Y29uc3Qgb1BhcmFtcyA9IG9UYXJnZXRJbmZvLnBhcmFtZXRlcnMgJiYgb0NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5nZXRPdXRib3VuZFBhcmFtcyhvVGFyZ2V0SW5mby5wYXJhbWV0ZXJzKTtcblx0XHRcdFx0aWYgKE9iamVjdC5rZXlzKG9QYXJhbXMpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnMgPSBvUGFyYW1zO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyBDaGVjayBpZiBpbXBsaWNpdCBzZW1hbnRpYyBvYmplY3QgbWFwcGluZyBpcyBuZWVkZWRcblx0XHRcdGlmIChhU2VtYW50aWNPYmplY3RNYXBwaW5nLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRjb25zdCBjdXN0b21EYXRhID0gb1NvdXJjZS5nZXRDdXN0b21EYXRhKCkuZmluZCgoZGF0YSkgPT4gZGF0YS5nZXRLZXkoKSA9PT0gXCJWYWx1ZVByb3BlcnR5UGF0aFwiKTtcblx0XHRcdFx0aWYgKGN1c3RvbURhdGEpIHtcblx0XHRcdFx0XHRhU2VtYW50aWNPYmplY3RNYXBwaW5nID0gb0NvbnRyb2xsZXIuX2dldEltcGxpY2l0U2VtYW50aWNPYmplY3RNYXBwaW5nRm9yRGF0YVBvaW50cyhcblx0XHRcdFx0XHRcdGN1c3RvbURhdGEuZ2V0VmFsdWUoKSxcblx0XHRcdFx0XHRcdG9UYXJnZXRJbmZvLnNlbWFudGljT2JqZWN0XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAob1RhcmdldEluZm8gJiYgb1RhcmdldEluZm8uc2VtYW50aWNPYmplY3QgJiYgb1RhcmdldEluZm8uYWN0aW9uKSB7XG5cdFx0XHRcdG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGUob1RhcmdldEluZm8uc2VtYW50aWNPYmplY3QsIG9UYXJnZXRJbmZvLmFjdGlvbiwge1xuXHRcdFx0XHRcdG5hdmlnYXRpb25Db250ZXh0czogYU5hdmlnYXRpb25EYXRhLFxuXHRcdFx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZzogYVNlbWFudGljT2JqZWN0TWFwcGluZyxcblx0XHRcdFx0XHRhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnM6IGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVyc1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogVHJpZ2dlcnMgYW4gb3V0Ym91bmQgbmF2aWdhdGlvbiB3aGVuIGEgdXNlciBjaG9vc2VzIHRoZSBjaGV2cm9uLlxuXHRcdCAqIEBwYXJhbSBvQ29udHJvbGxlclxuXHRcdCAqIEBwYXJhbSBzT3V0Ym91bmRUYXJnZXQgTmFtZSBvZiB0aGUgb3V0Ym91bmQgdGFyZ2V0IChuZWVkcyB0byBiZSBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdClcblx0XHQgKiBAcGFyYW0gb0NvbnRleHQgVGhlIGNvbnRleHQgdGhhdCBjb250YWlucyB0aGUgZGF0YSBmb3IgdGhlIHRhcmdldCBhcHBcblx0XHQgKiBAcGFyYW0gc0NyZWF0ZVBhdGggQ3JlYXRlIHBhdGggd2hlbiB0aGUgY2hldnJvbiBpcyBjcmVhdGVkLlxuXHRcdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggaXMgcmVzb2x2ZWQgb25jZSB0aGUgbmF2aWdhdGlvbiBpcyB0cmlnZ2VyZWQgKD8/PyBtYXliZSBvbmx5IG9uY2UgZmluaXNoZWQ/KVxuXHRcdCAqIEBmaW5hbFxuXHRcdCAqL1xuXHRcdGFzeW5jIG9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZChcblx0XHRcdG9Db250cm9sbGVyOiBPYmplY3RQYWdlQ29udHJvbGxlcixcblx0XHRcdHNPdXRib3VuZFRhcmdldDogc3RyaW5nLFxuXHRcdFx0b0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0LFxuXHRcdFx0c0NyZWF0ZVBhdGg6IHN0cmluZ1xuXHRcdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0cmV0dXJuIG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ub25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKG9Db250cm9sbGVyLCBzT3V0Ym91bmRUYXJnZXQsIG9Db250ZXh0LCBzQ3JlYXRlUGF0aCk7XG5cdFx0fSxcblxuXHRcdG9uTmF2aWdhdGVDaGFuZ2UodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIG9FdmVudDogVUk1RXZlbnQ8eyBzdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbiB9Pik6IHZvaWQge1xuXHRcdFx0Ly93aWxsIGJlIGNhbGxlZCBhbHdheXMgd2hlbiB3ZSBjbGljayBvbiBhIHNlY3Rpb24gdGFiXG5cdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0XHR0aGlzLmJTZWN0aW9uTmF2aWdhdGVkID0gdHJ1ZTtcblxuXHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdGlmIChcblx0XHRcdFx0Q29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZSh0aGlzLmdldFZpZXcoKSkgJiZcblx0XHRcdFx0dGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS5zZWN0aW9uTGF5b3V0ID09PSBcIlRhYnNcIiAmJlxuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJlcnJvck5hdmlnYXRpb25TZWN0aW9uRmxhZ1wiKSA9PT0gZmFsc2Vcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCBvU3ViU2VjdGlvbiA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJzdWJTZWN0aW9uXCIpO1xuXHRcdFx0XHR0aGlzLl91cGRhdGVGb2N1c0luRWRpdE1vZGUoW29TdWJTZWN0aW9uXSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRvblZhcmlhbnRTZWxlY3RlZDogZnVuY3Rpb24gKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKTogdm9pZCB7XG5cdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0fSxcblx0XHRvblZhcmlhbnRTYXZlZDogZnVuY3Rpb24gKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKTogdm9pZCB7XG5cdFx0XHQvL1RPRE86IFNob3VsZCByZW1vdmUgdGhpcyBzZXRUaW1lT3V0IG9uY2UgVmFyaWFudCBNYW5hZ2VtZW50IHByb3ZpZGVzIGFuIGFwaSB0byBmZXRjaCB0aGUgY3VycmVudCB2YXJpYW50IGtleSBvbiBzYXZlXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0fSwgMjAwMCk7XG5cdFx0fSxcblx0XHRuYXZpZ2F0ZVRvU3ViU2VjdGlvbjogZnVuY3Rpb24gKG9Db250cm9sbGVyOiBPYmplY3RQYWdlQ29udHJvbGxlciwgdkRldGFpbENvbmZpZzogc3RyaW5nIHwgb2JqZWN0KTogdm9pZCB7XG5cdFx0XHRjb25zdCBvRGV0YWlsQ29uZmlnID0gdHlwZW9mIHZEZXRhaWxDb25maWcgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKHZEZXRhaWxDb25maWcpIDogdkRldGFpbENvbmZpZztcblx0XHRcdGNvbnN0IG9PYmplY3RQYWdlID0gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmJ5SWQoXCJmZTo6T2JqZWN0UGFnZVwiKSBhcyBPYmplY3RQYWdlTGF5b3V0O1xuXHRcdFx0bGV0IG9TZWN0aW9uO1xuXHRcdFx0bGV0IG9TdWJTZWN0aW9uO1xuXHRcdFx0aWYgKG9EZXRhaWxDb25maWcuc2VjdGlvbklkKSB7XG5cdFx0XHRcdG9TZWN0aW9uID0gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmJ5SWQob0RldGFpbENvbmZpZy5zZWN0aW9uSWQpIGFzIE9iamVjdFBhZ2VTZWN0aW9uO1xuXHRcdFx0XHRvU3ViU2VjdGlvbiA9IChcblx0XHRcdFx0XHRvRGV0YWlsQ29uZmlnLnN1YlNlY3Rpb25JZFxuXHRcdFx0XHRcdFx0PyBvQ29udHJvbGxlci5nZXRWaWV3KCkuYnlJZChvRGV0YWlsQ29uZmlnLnN1YlNlY3Rpb25JZClcblx0XHRcdFx0XHRcdDogb1NlY3Rpb24gJiYgb1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKSAmJiBvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpWzBdXG5cdFx0XHRcdCkgYXMgT2JqZWN0UGFnZVN1YlNlY3Rpb247XG5cdFx0XHR9IGVsc2UgaWYgKG9EZXRhaWxDb25maWcuc3ViU2VjdGlvbklkKSB7XG5cdFx0XHRcdG9TdWJTZWN0aW9uID0gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmJ5SWQob0RldGFpbENvbmZpZy5zdWJTZWN0aW9uSWQpIGFzIE9iamVjdFBhZ2VTdWJTZWN0aW9uO1xuXHRcdFx0XHRvU2VjdGlvbiA9IG9TdWJTZWN0aW9uICYmIChvU3ViU2VjdGlvbi5nZXRQYXJlbnQoKSBhcyBPYmplY3RQYWdlU2VjdGlvbik7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIW9TZWN0aW9uIHx8ICFvU3ViU2VjdGlvbiB8fCAhb1NlY3Rpb24uZ2V0VmlzaWJsZSgpIHx8ICFvU3ViU2VjdGlvbi5nZXRWaXNpYmxlKCkpIHtcblx0XHRcdFx0Y29uc3Qgc1RpdGxlID0gZ2V0UmVzb3VyY2VNb2RlbChvQ29udHJvbGxlcikuZ2V0VGV4dChcblx0XHRcdFx0XHRcIkNfUk9VVElOR19OQVZJR0FUSU9OX0RJU0FCTEVEX1RJVExFXCIsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdG9Db250cm9sbGVyLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpLmVudGl0eVNldFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRMb2cuZXJyb3Ioc1RpdGxlKTtcblx0XHRcdFx0TWVzc2FnZUJveC5lcnJvcihzVGl0bGUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b09iamVjdFBhZ2Uuc2V0U2VsZWN0ZWRTZWN0aW9uKG9TdWJTZWN0aW9uLmdldElkKCkpO1xuXHRcdFx0XHQvLyB0cmlnZ2VyIGlhcHAgc3RhdGUgY2hhbmdlXG5cdFx0XHRcdG9PYmplY3RQYWdlLmZpcmVOYXZpZ2F0ZSh7XG5cdFx0XHRcdFx0c2VjdGlvbjogb1NlY3Rpb24sXG5cdFx0XHRcdFx0c3ViU2VjdGlvbjogb1N1YlNlY3Rpb25cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGNsb3NlQ29sbGFib3JhdGlvblN0cmlwOiBmdW5jdGlvbiAodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIpOiB2b2lkIHtcblx0XHRcdCh0aGlzLmdldFZpZXcoKS5ieUlkKFwiZmU6Ok9iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGU6OlNuYXBwZWRDb2xsYWJvcmF0aW9uU3RyaXBcIikgYXMgTWVzc2FnZVN0cmlwKT8uc2V0VmlzaWJsZShmYWxzZSk7XG5cdFx0XHQodGhpcy5nZXRWaWV3KCkuYnlJZChcImZlOjpPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlOjpFeHBhbmRlZENvbGxhYm9yYXRpb25TdHJpcFwiKSBhcyBNZXNzYWdlU3RyaXApPy5zZXRWaXNpYmxlKGZhbHNlKTtcblx0XHR9LFxuXG5cdFx0Y2xvc2VPUE1lc3NhZ2VTdHJpcDogZnVuY3Rpb24gKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKTogdm9pZCB7XG5cdFx0XHRjb25zdCB2aWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0XHRjb25zdCBiSXNJbkVkaXRNb2RlID0gQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZSh2aWV3KTtcblx0XHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB2aWV3LmdldE1vZGVsKFwiaW50ZXJuYWxcIik7XG5cdFx0XHRjb25zdCBtZXNzYWdlc3RyaXBJbnRlcm5hbE1vZGVsQ29udGV4dCA9IGludGVybmFsTW9kZWxcblx0XHRcdFx0LmJpbmRDb250ZXh0KHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkuX2dldE1lc3NhZ2VTdHJpcEJpbmRpbmdDb250ZXh0UGF0aCgpKVxuXHRcdFx0XHQuZ2V0Qm91bmRDb250ZXh0KCkhO1xuXHRcdFx0Ly8gUmVtb3ZlIGNvbnRleHQgYm91bmQgbWVzc2FnZXMgYW5kIHNldCB0aGUgcHJvcGVydHkgdG8gZmFsc2UgZm9yIHRoZSBiYWNrZW5kIHRyYW5zaXRpb24gbWVzc2FnZXMgaW4gZWRpdCBtb2RlLlxuXHRcdFx0aWYgKCFiSXNJbkVkaXRNb2RlICYmIG1lc3NhZ2VzdHJpcEludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiT1BCYWNrZW5kTWVzc2FnZVZpc2libGVcIikgPT09IHRydWUpIHtcblx0XHRcdFx0Y29uc3QgY29udGV4dEJvdW5kTWVzc2FnZXMgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKClcblx0XHRcdFx0XHQuZ2V0RGF0YSgpXG5cdFx0XHRcdFx0LmZpbHRlcihcblx0XHRcdFx0XHRcdChtZXNzYWdlOiBNZXNzYWdlKSA9PlxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlLmdldFRhcmdldHMoKVswXSA9PT0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpICYmIG1lc3NhZ2UuZ2V0UGVyc2lzdGVudCgpID09PSB0cnVlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKGNvbnRleHRCb3VuZE1lc3NhZ2VzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhjb250ZXh0Qm91bmRNZXNzYWdlcyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdG1lc3NhZ2VzdHJpcEludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiT1BCYWNrZW5kTWVzc2FnZVZpc2libGVcIiwgZmFsc2UpO1xuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS5oaWRlTWVzc2FnZSgpO1xuXHRcdH1cblx0fTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgT2JqZWN0UGFnZUNvbnRyb2xsZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBMkdBLE1BQU1BLGdCQUFnQixHQUFHQyxTQUFTLENBQUNELGdCQUFnQjtFQUFDLElBRTlDRSxvQkFBb0IsSUFBQUMsSUFBQSxHQUR6QkMsY0FBYyxDQUFDLGtEQUFrRCxDQUFDLEVBQUFDLEtBQUEsR0FJakVDLGNBQWMsQ0FBQ0MsV0FBVyxDQUFDLEVBQUFDLEtBQUEsR0FHM0JGLGNBQWMsQ0FBQ0csS0FBSyxDQUFDQyxRQUFRLENBQUNDLGNBQWMsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHOUNOLGNBQWMsQ0FBQ08sZUFBZSxDQUFDSCxRQUFRLENBQUNJLHVCQUF1QixDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUdqRVQsY0FBYyxDQUFDVSxTQUFTLENBQUNOLFFBQVEsQ0FBQ08saUJBQWlCLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBR3JEWixjQUFjLENBQUNhLGNBQWMsQ0FBQ1QsUUFBUSxDQUFDVSxzQkFBc0IsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHL0RmLGNBQWMsQ0FBQ2dCLHFCQUFxQixDQUFDWixRQUFRLENBQUNhLDZCQUE2QixDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUc3RWxCLGNBQWMsQ0FBQ21CLG9CQUFvQixDQUFDZixRQUFRLENBQUNnQiw0QkFBNEIsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHM0VyQixjQUFjLENBQ2RzQiw2QkFBNkIsQ0FBQ2xCLFFBQVEsQ0FBQztJQUN0Q21CLGlCQUFpQixFQUFFLFNBQUFBLENBQUEsRUFBK0M7TUFDakUsTUFBTUMsaUJBQWlCLEdBQ3JCLElBQUks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
1574
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQcm9ncmFtbWluZ01vZGVsIiwiRkVMaWJyYXJ5IiwiT2JqZWN0UGFnZUNvbnRyb2xsZXIiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsInVzaW5nRXh0ZW5zaW9uIiwiUGxhY2Vob2xkZXIiLCJfZGVjMyIsIlNoYXJlIiwib3ZlcnJpZGUiLCJTaGFyZU92ZXJyaWRlcyIsIl9kZWM0IiwiSW50ZXJuYWxSb3V0aW5nIiwiSW50ZXJuYWxSb3V0aW5nT3ZlcnJpZGUiLCJfZGVjNSIsIlBhZ2luYXRvciIsIlBhZ2luYXRvck92ZXJyaWRlIiwiX2RlYzYiLCJNZXNzYWdlSGFuZGxlciIsIk1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUiLCJfZGVjNyIsIkludGVudEJhc2VkTmF2aWdhdGlvbiIsIkludGVudEJhc2VkTmF2aWdhdGlvbk92ZXJyaWRlIiwiX2RlYzgiLCJDb2xsYWJvcmF0aW9uTWFuYWdlciIsIkNvbGxhYm9yYXRpb25NYW5hZ2VyT3ZlcnJpZGUiLCJfZGVjOSIsIkludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0TmF2aWdhdGlvbk1vZGUiLCJiSXNTdGlja3lFZGl0TW9kZSIsImdldFZpZXciLCJnZXRDb250cm9sbGVyIiwiZ2V0U3RpY2t5RWRpdE1vZGUiLCJ1bmRlZmluZWQiLCJfZGVjMTAiLCJWaWV3U3RhdGUiLCJWaWV3U3RhdGVPdmVycmlkZXMiLCJfZGVjMTEiLCJQYWdlUmVhZHkiLCJpc0NvbnRleHRFeHBlY3RlZCIsIl9kZWMxMiIsInB1YmxpY0V4dGVuc2lvbiIsIl9kZWMxMyIsImZpbmFsRXh0ZW5zaW9uIiwiX2RlYzE0IiwiX2RlYzE1IiwiZXh0ZW5zaWJsZSIsIk92ZXJyaWRlRXhlY3V0aW9uIiwiQWZ0ZXIiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX1BhZ2VDb250cm9sbGVyIiwiX3RoaXMiLCJfbGVuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiX2Rlc2NyaXB0b3I3IiwiX2Rlc2NyaXB0b3I4IiwiX2Rlc2NyaXB0b3I5IiwiX2Rlc2NyaXB0b3IxMCIsImNsZWFyVGl0bGVIaWVyYXJjaHlDYWNoZVNldFVwIiwibWVyZ2VQYXRjaERyYWZ0IiwiaGFuZGxlcnMiLCJvblByaW1hcnlBY3Rpb24iLCJvQ29udHJvbGxlciIsIm9WaWV3Iiwib0NvbnRleHQiLCJzQWN0aW9uTmFtZSIsIm1QYXJhbWV0ZXJzIiwibUNvbmRpdGlvbnMiLCJpVmlld0xldmVsIiwiZ2V0Vmlld0RhdGEiLCJ2aWV3TGV2ZWwiLCJwb3NpdGl2ZUFjdGlvblZpc2libGUiLCJwb3NpdGl2ZUFjdGlvbkVuYWJsZWQiLCJvbkNhbGxBY3Rpb24iLCJlZGl0QWN0aW9uVmlzaWJsZSIsImVkaXRBY3Rpb25FbmFibGVkIiwiX2VkaXREb2N1bWVudCIsIkNvbW1vblV0aWxzIiwiZ2V0SXNFZGl0YWJsZSIsIl9zYXZlRG9jdW1lbnQiLCJfYXBwbHlEb2N1bWVudCIsIm9uVGFibGVDb250ZXh0Q2hhbmdlIiwiZXZlbnQiLCJ0YWJsZUFQSSIsImdldFNvdXJjZSIsInRhYmxlIiwiY29udGVudCIsImN1cnJlbnRBY3Rpb25Qcm9taXNlIiwiZWRpdEZsb3ciLCJnZXRDdXJyZW50QWN0aW9uUHJvbWlzZSIsInRhYmxlQ29udGV4dHMiLCJfZ2V0VGFibGVCaW5kaW5nIiwiZ2V0Q3VycmVudENvbnRleHRzIiwiYWN0aW9uUmVzcG9uc2UiLCJjb250cm9sSWQiLCJnZXRJZCIsImFjdGlvbkRhdGEiLCJvRGF0YSIsImtleXMiLCJuZXdJdGVtIiwiZmluZEluZGV4IiwidGFibGVDb250ZXh0IiwidGFibGVEYXRhIiwiZ2V0T2JqZWN0IiwiZXZlcnkiLCJrZXkiLCJkaWFsb2ciLCJJbnN0YW5jZU1hbmFnZXIiLCJnZXRPcGVuRGlhbG9ncyIsImZpbmQiLCJkYXRhIiwiYXR0YWNoRXZlbnRPbmNlIiwiZm9jdXNSb3ciLCJkZWxldGVDdXJyZW50QWN0aW9uUHJvbWlzZSIsImUiLCJMb2ciLCJlcnJvciIsIm1lc3NhZ2VCdXR0b24iLCJmaXJlTW9kZWxDb250ZXh0Q2hhbmdlIiwic3luY1Rhc2siLCJpbnZva2VBY3Rpb24iLCJ0aGVuIiwiX3Nob3dNZXNzYWdlUG9wb3ZlciIsImJpbmQiLCJjYXRjaCIsIm9uRGF0YVBvaW50VGl0bGVQcmVzc2VkIiwib1NvdXJjZSIsIm9NYW5pZmVzdE91dGJvdW5kIiwic0NvbnRyb2xDb25maWciLCJzQ29sbGVjdGlvblBhdGgiLCJKU09OIiwicGFyc2UiLCJvVGFyZ2V0SW5mbyIsIm9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInNNZXRhUGF0aCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiZ2V0TWV0YVBhdGgiLCJnZXRQYXRoIiwiYVNlbWFudGljT2JqZWN0TWFwcGluZyIsImdldFNlbWFudGljT2JqZWN0TWFwcGluZyIsImFOYXZpZ2F0aW9uRGF0YSIsIl9nZXRDaGFydENvbnRleHREYXRhIiwiYWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzIiwibWFwIiwib05hdmlnYXRpb25EYXRhIiwibWV0YVBhdGgiLCJwYXJhbWV0ZXJzIiwib1BhcmFtcyIsIl9pbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJnZXRPdXRib3VuZFBhcmFtcyIsIk9iamVjdCIsImN1c3RvbURhdGEiLCJnZXRDdXN0b21EYXRhIiwiZ2V0S2V5IiwiX2dldEltcGxpY2l0U2VtYW50aWNPYmplY3RNYXBwaW5nRm9yRGF0YVBvaW50cyIsImdldFZhbHVlIiwic2VtYW50aWNPYmplY3QiLCJhY3Rpb24iLCJuYXZpZ2F0ZSIsIm5hdmlnYXRpb25Db250ZXh0cyIsInNlbWFudGljT2JqZWN0TWFwcGluZyIsIm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZCIsInNPdXRib3VuZFRhcmdldCIsInNDcmVhdGVQYXRoIiwib25OYXZpZ2F0ZUNoYW5nZSIsIm9FdmVudCIsImdldEV4dGVuc2lvbkFQSSIsInVwZGF0ZUFwcFN0YXRlIiwiYlNlY3Rpb25OYXZpZ2F0ZWQiLCJvSW50ZXJuYWxNb2RlbENvbnRleHQiLCJzZWN0aW9uTGF5b3V0IiwiZ2V0UHJvcGVydHkiLCJvU3ViU2VjdGlvbiIsImdldFBhcmFtZXRlciIsIl91cGRhdGVGb2N1c0luRWRpdE1vZGUiLCJvblZhcmlhbnRTZWxlY3RlZCIsIm9uVmFyaWFudFNhdmVkIiwic2V0VGltZW91dCIsIm5hdmlnYXRlVG9TdWJTZWN0aW9uIiwidkRldGFpbENvbmZpZyIsIm9EZXRhaWxDb25maWciLCJvT2JqZWN0UGFnZSIsImJ5SWQiLCJvU2VjdGlvbiIsInNlY3Rpb25JZCIsInN1YlNlY3Rpb25JZCIsImdldFN1YlNlY3Rpb25zIiwiZ2V0UGFyZW50IiwiZ2V0VmlzaWJsZSIsInNUaXRsZSIsImdldFJlc291cmNlTW9kZWwiLCJnZXRUZXh0IiwiZW50aXR5U2V0IiwiTWVzc2FnZUJveCIsInNldFNlbGVjdGVkU2VjdGlvbiIsImZpcmVOYXZpZ2F0ZSIsInNlY3Rpb24iLCJzdWJTZWN0aW9uIiwiY2xvc2VDb2xsYWJvcmF0aW9uU3RyaXAiLCJzZXRQcm9wZXJ0eSIsImNsb3NlT1BNZXNzYWdlU3RyaXAiLCJ2aWV3IiwiYklzSW5FZGl0TW9kZSIsImludGVybmFsTW9kZWwiLCJtZXNzYWdlc3RyaXBJbnRlcm5hbE1vZGVsQ29udGV4dCIsImJpbmRDb250ZXh0IiwiX2dldE1lc3NhZ2VTdHJpcEJpbmRpbmdDb250ZXh0UGF0aCIsImdldEJvdW5kQ29udGV4dCIsImNvbnRleHRCb3VuZE1lc3NhZ2VzIiwiTWVzc2FnaW5nIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsImZpbHRlciIsIm1lc3NhZ2UiLCJnZXRUYXJnZXRzIiwiZ2V0UGVyc2lzdGVudCIsInJlbW92ZU1lc3NhZ2VzIiwiaGlkZU1lc3NhZ2UiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsInNJZCIsIm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcyIsIkV4dGVuc2lvbkFQSSIsImV4dGVuc2lvbkFQSSIsIm9uSW5pdCIsIl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCIsInBhZ2UiLCJ2aXNpYmlsaXR5IiwiaXRlbXMiLCJfZ2V0QmF0Y2hHcm91cHNGb3JWaWV3IiwiZ2V0RW5hYmxlTGF6eUxvYWRpbmciLCJhdHRhY2hFdmVudCIsIl9oYW5kbGVTdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0IiwibWVzc2FnZUJpbmRpbmciLCJiaW5kTGlzdCIsImF0dGFjaENoYW5nZSIsIl9mblNob3dPUE1lc3NhZ2UiLCJvbkV4aXQiLCJkZXN0cm95Iiwib01lc3NhZ2VQb3BvdmVyIiwiaXNPcGVuIiwiY2xvc2UiLCJpc0tlZXBBbGl2ZSIsInNldEtlZXBBbGl2ZSIsImNvbGxhYm9yYXRpdmVEcmFmdCIsImRpc2Nvbm5lY3QiLCJkZXRhY2hDaGFuZ2UiLCJnZXRBcHBDb21wb25lbnQiLCJpc1N1c3BlbmRlZCIsIm1lc3NhZ2VzIiwiX3Nob3dNZXNzYWdlcyIsIm9UYWJsZSIsImdldFJvd0JpbmRpbmciLCJjaGVja1NlY3Rpb25zRm9yTm9uUmVzcG9uc2l2ZVRhYmxlIiwic3ViU2VjdGlvbnMiLCJjaGFuZ2VDbGFzc0ZvclRhYmxlcyIsImxhc3RWaXNpYmxlU3ViU2VjdGlvbiIsImJsb2NrcyIsImdldEJsb2NrcyIsImdldE1vcmVCbG9ja3MiLCJzZWFyY2hUYWJsZUluQmxvY2siLCJ0YWJsZVR5cGUiLCJpc0EiLCJnZXRUeXBlIiwiZ2V0VGFibGVEZWZpbml0aW9uIiwiY29udHJvbCIsInJvd0NvdW50TW9kZSIsImFkZFN0eWxlQ2xhc3MiLCJkZXRhY2hFdmVudCIsInN1YlNlY3Rpb25JbmRleCIsImJsb2NrIiwib25CZWZvcmVSZW5kZXJpbmciLCJQYWdlQ29udHJvbGxlciIsImFwcGx5IiwicmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCIsIkNvbW1vbkhlbHBlciIsInNldE1ldGFNb2RlbCIsIm9uQWZ0ZXJSZW5kZXJpbmciLCJnZXRVc2VJY29uVGFiQmFyIiwic2VjdGlvbnMiLCJnZXRTZWN0aW9ucyIsIl9nZXRBbGxTdWJTZWN0aW9ucyIsIl9vbkJlZm9yZUJpbmRpbmciLCJhVGFibGVzIiwiX2ZpbmRUYWJsZXMiLCJvSW50ZXJuYWxNb2RlbCIsImFCYXRjaEdyb3VwcyIsIm9GYXN0Q3JlYXRpb25Sb3ciLCJwdXNoIiwicmVhc29uIiwiTmF2aWdhdGlvblJlYXNvbiIsIkVkaXRGbG93QWN0aW9uIiwiX2Nsb3NlU2lkZUNvbnRlbnQiLCJvcENvbnRleHQiLCJoYXNQZW5kaW5nQ2hhbmdlcyIsInNvbWUiLCJnZXRCaW5kaW5nIiwicmVzZXRDaGFuZ2VzIiwiaXRlbSIsImdldENyZWF0aW9uUm93Iiwic2V0QmluZGluZ0NvbnRleHQiLCJmblNjcm9sbFRvUHJlc2VudFNlY3Rpb24iLCJpc0ZpcnN0UmVuZGVyaW5nIiwiYlBlcnNpc3RPUFNjcm9sbCIsImZuT1BSZW5kZXJpbmdMYXlvdXQiLCJlZGl0YWJsZUhlYWRlckNvbnRlbnQiLCJyZW1vdmVFdmVudERlbGVnYXRlIiwiYWRkRXZlbnREZWxlZ2F0ZSIsIl9pbml0aWFsaXplUGFnaW5hdGlvbiIsImxpc3RCaW5kaW5nIiwiX2Rpc2FibGVCbG9ja3NCaW5kaW5ncyIsInBsYWNlaG9sZGVyIiwiaXNQbGFjZWhvbGRlckVuYWJsZWQiLCJzaG93UGxhY2Vob2xkZXIiLCJvTmF2Q29udGFpbmVyIiwib0NvbnRhaW5lciIsImVuYWJsZUFuaW1hdGlvbiIsImdldEZpcnN0RWRpdGFibGVJbnB1dCIsImRvbUVkaXRhYmxlRWxlbWVudCIsIl9nZXRGaXJzdEVkaXRhYmxlSW5wdXQiLCJVSTVFbGVtZW50IiwiY2xvc2VzdFRvIiwiZ2V0Rmlyc3RDbGlja2FibGVFbGVtZW50Iiwib2JqZWN0UGFnZSIsImZpcnN0Q2xpY2thYmxlRWxlbWVudCIsImFjdGlvbnMiLCJnZXRIZWFkZXJUaXRsZSIsImdldEFjdGlvbnMiLCJnZXRFbmFibGVkIiwiYVNlY3Rpb25zIiwiYlVzZUljb25UYWJCYXIiLCJpU2tpcCIsImJFZGl0YWJsZUhlYWRlciIsImlTZWN0aW9uIiwiYVN1YlNlY3Rpb25zIiwiaVN1YlNlY3Rpb24iLCJpc1Zpc2liaWxpdHlEeW5hbWljIiwiZm9yRWFjaCIsInN1YkJsb2NrIiwiX2dldEZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZEZyb21TdWJTZWN0aW9uIiwiYUJsb2NrcyIsImJsb2NrQ29udHJvbCIsImFGb3JtQ29udGFpbmVycyIsImdldEZvcm1Db250YWluZXJzIiwiZ2V0Q29udGVudCIsImZvcm1Db250YWluZXIiLCJhRm9ybUVsZW1lbnRzIiwiZ2V0Rm9ybUVsZW1lbnRzIiwiZm9ybUVsZW1lbnQiLCJhRmllbGRzIiwiZ2V0RmllbGRzIiwiZW1wdHlGaWVsZCIsImdldEZpcnN0RW1wdHlSZXF1aXJlZEZpZWxkIiwiZmllbGRzIiwiZ2V0UmVxdWlyZWQiLCJpc0VtcHR5IiwiZ2V0TXVsdGlWYWx1ZUZpZWxkIiwiZ2V0SXRlbXMiLCJ2YWx1ZSIsImRlYnVnIiwib01hbmRhdG9yeUZpZWxkIiwib0ZpZWxkVG9Gb2N1cyIsImdldENvbnRlbnRFZGl0IiwiZm9jdXNJbmZvIiwiZ2V0Rm9jdXNJbmZvIiwidGFyZ2V0SW5mbyIsInNpbGVudCIsImZvY3VzIiwiX29uQmFja05hdmlnYXRpb25JbkRyYWZ0IiwibWVzc2FnZUhhbmRsZXIiLCJyZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMiLCJuYXZCYWNrIiwiY3VycmVudFVSTCIsImRvY3VtZW50IiwiVVJMIiwiaGlzdG9yeSIsImJhY2siLCJfcm91dGluZyIsIm5hdmlnYXRlQmFja0Zyb21Db250ZXh0IiwiZ2V0Um91dGVyUHJveHkiLCJjaGVja0lmQmFja0hhc1NhbWVDb250ZXh0IiwiZ2V0U2hlbGxTZXJ2aWNlcyIsInNldEJhY2tOYXZpZ2F0aW9uIiwid2FybmluZyIsImRyYWZ0IiwicHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24iLCJGdW5jdGlvbiIsIk5hdmlnYXRpb25UeXBlIiwiQmFja05hdmlnYXRpb24iLCJfb25BZnRlckJpbmRpbmciLCJpbnB1dEJpbmRpbmdDb250ZXh0IiwiX3NpZGVFZmZlY3RzIiwiY2xlYXJGaWVsZEdyb3Vwc1ZhbGlkaXR5IiwiYmluZGluZ0NvbnRleHQiLCJhSUJOQWN0aW9ucyIsImdldElCTkFjdGlvbnMiLCJvVGFibGVSb3dCaW5kaW5nIiwiTW9kZWxIZWxwZXIiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJyZW1vdmVDYWNoZXNBbmRNZXNzYWdlcyIsIm9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAiLCJ0YWJsZURlZmluaXRpb24iLCJvcGVyYXRpb25BdmFpbGFibGVNYXAiLCJBY3Rpb25SdW50aW1lIiwic2V0QWN0aW9uRW5hYmxlbWVudCIsImNsZWFyU2VsZWN0aW9uIiwib09iamVjdFBhZ2VUaXRsZSIsImFJQk5IZWFkZXJBY3Rpb25zIiwiY29uY2F0IiwidXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkiLCJvTW9kZWwiLCJvRmluYWxVSVN0YXRlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJoYW5kbGVUYWJsZU1vZGlmaWNhdGlvbnMiLCJvQmluZGluZyIsImZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cyIsIlRhYmxlSGVscGVyIiwiZW5hYmxlRmFzdENyZWF0aW9uUm93IiwiZ2V0Q29udGV4dCIsImZuSGFuZGxlQ2hhbmdlIiwiY29tcHV0ZU1vZGVsc0ZvckVkaXRNb2RlIiwiX3VwZGF0ZVJlbGF0ZWRBcHBzIiwiY3VycmVudEJpbmRpbmciLCJoYW5kbGVQYXRjaFNlbnQiLCJUYWJsZVV0aWxzIiwid2hlbkJvdW5kIiwib0Vycm9yIiwiX3RyaWdnZXJWaXNpYmxlU3ViU2VjdGlvbnNFdmVudHMiLCJ1cGRhdGVFZGl0QnV0dG9uVmlzaWJpbGl0eUFuZEVuYWJsZW1lbnQiLCJyZWNvbW1lbmRhdGlvbnMiLCJjbGVhclJlY29tbWVuZGF0aW9ucyIsIl91cGRhdGVBdmFpbGFibGVDYXJkcyIsImRpc3BsYXlDb2xsYWJvcmF0aW9uTWVzc2FnZSIsInJlZGlyZWN0ZWRUb05vbkRyYWZ0IiwiX3NldE9QTWVzc2FnZVN0cmlwSW50ZXJuYWxDb250ZXh0IiwiYXBwbHlBcHBTdGF0ZSIsImdldEFwcFN0YXRlSGFuZGxlciIsInBhZ2VSZWFkeSIsIndhaXRGb3IiLCJjYXJkcyIsImNvbGxhYm9yYXRpb25NYW5hZ2VyIiwiY29sbGVjdEF2YWlsYWJsZUNhcmRzIiwiY2FyZE9iamVjdCIsInVwZGF0ZUNhcmRzIiwicGFyZW50QXBwSWQiLCJnZXRDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UiLCJhZGRDYXJkc1RvQ29sbGFib3JhdGlvbk1hbmFnZXIiLCJzaGFyZUF2YWlsYWJsZUNhcmRzIiwiaW50ZXJuYWxNb2RlbENvbnRleHQiLCJmaW5kRWxlbWVudHMiLCJlbGVtIiwibWVzc2FnZVN0cmlwIiwiZW50aXR5TmFtZSIsInJlc291cmNlQnVuZGxlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiY29sbGFib3JhdGlvbk1lc3NhZ2UiLCJNZXNzYWdlIiwidHlwZSIsIk1lc3NhZ2VUeXBlIiwiSW5mb3JtYXRpb24iLCJ0YXJnZXQiLCJhZGRNZXNzYWdlcyIsIm9uUGFnZVJlYWR5Iiwic2V0Rm9jdXMiLCJpc0luRGlzcGxheU1vZGUiLCJvRmlyc3RDbGlja2FibGVFbGVtZW50Iiwib1NlbGVjdGVkU2VjdGlvbiIsImdldEVsZW1lbnRCeUlkIiwiZ2V0U2VsZWN0ZWRTZWN0aW9uIiwiY3R4dCIsIm9CaW5kaW5nQ29udGV4dCIsImJJc1N0aWNreU1vZGUiLCJvQXBwQ29tcG9uZW50IiwiaXNFZGl0YWJsZSIsImZldGNoQW5kQXBwbHlSZWNvbW1lbmRhdGlvbnMiLCJjb250ZXh0IiwiZm9yY2VGb2N1cyIsIl9jaGVja0RhdGFQb2ludFRpdGxlRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uIiwiRGV2aWNlIiwic3VwcG9ydCIsInRvdWNoIiwic2F2ZUJ1dHRvbiIsImF1dG9RdWV1ZVVubG9jayIsImF1dG9RdWV1ZUxvY2siLCJpc0xvY2tlZCIsInVubG9jayIsImRldGFjaEJyb3dzZXJFdmVudCIsImF0dGFjaEJyb3dzZXJFdmVudCIsImxvY2siLCJfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24iLCJvT2JqZWN0UGFnZVN1YnRpdGxlIiwib0N1c3RvbURhdGEiLCJvYmplY3RQYWdlRGVzY3JpcHRpb24iLCJhcHBDb21wb25lbnQiLCJyb290Vmlld0NvbnRyb2xsZXIiLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJmbkNsZWFyQ2FjaGVUaXRsZSIsImNsZWFyVGl0bGVIaWVyYXJjaHlDYWNoZSIsInRpdGxlIiwic3VidGl0bGUiLCJpbnRlbnQiLCJpY29uIiwiZGVzY3JpcHRpb24iLCJfZXhlY3V0ZUhlYWRlclNob3J0Y3V0Iiwic0J1dHRvbklkIiwib0J1dHRvbiIsIm9FbGVtZW50IiwiZmlyZUJ1dHRvblByZXNzIiwiX2V4ZWN1dGVGb290ZXJTaG9ydGN1dCIsImdldEZvb3RlciIsImdldE1ldGFkYXRhIiwiZ2V0TmFtZSIsIl9leGVjdXRlVGFiU2hvcnRDdXQiLCJvRXhlY3V0aW9uIiwiaVNlY3Rpb25JbmRleE1heCIsInNDb21tYW5kIiwiZ2V0Q29tbWFuZCIsIm5ld1NlY3Rpb24iLCJpU2VsZWN0ZWRTZWN0aW9uSW5kZXgiLCJpbmRleE9mU2VjdGlvbiIsIl9nZXRGb290ZXJWaXNpYmlsaXR5Iiwic1ZpZXdJZCIsImlzSGlkZGVuRHJhZnRFbmFibGVkIiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJnZXRDYXBhYmlsaXRpZXMiLCJIaWRkZW5EcmFmdCIsImVuYWJsZWQiLCJvTWVzc2FnZSIsImlzRXJyb3JNZXNzYWdlIiwidmFsaWRhdGlvbiIsIm1lc3NhZ2VWYWxpZGF0aW9uIiwiaW5jbHVkZXMiLCJlcnIiLCJvUmV0IiwiaXNFZGl0TW9kZSIsImN1cnJlbnRQYWdlVmlldyIsImlzRmNsRW5hYmxlZCIsImdldFJpZ2h0bW9zdFZpZXciLCJnZXRSb290Q29udGFpbmVyIiwiZ2V0Q3VycmVudFBhZ2UiLCJvTWVzc2FnZUJ1dHRvbiIsIm9JdGVtQmluZGluZyIsImdldExlbmd0aCIsInNldFZpc2libGUiLCJvcGVuQnkiLCJCdXN5TG9ja2VyIiwiZWRpdERvY3VtZW50IiwiZmluYWxseSIsInByb3BlcnR5UGF0aCIsIkxvY2FsUHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwiU2VtYW50aWNPYmplY3RQcm9wZXJ0eSIsIl92YWxpZGF0ZURvY3VtZW50IiwiZ2V0QWN0aXZlRWxlbWVudCIsImJ5UGFzc1NpZGVFZmZlY3RzIiwiaXNUcmFuc2llbnQiLCJjcmVhdGVkIiwiaG9sZE1lc3NhZ2VzRm9yQ29udHJvbCIsInJldCIsImV4ZWN1dGVHbG9iYWxWYWxpZGF0aW9uIiwic2hvd01lc3NhZ2VzIiwic2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZW50aXR5VHlwZSIsImdldEVudGl0eVR5cGVGcm9tQ29udGV4dCIsImdsb2JhbFNpZGVFZmZlY3RzIiwiZ2V0R2xvYmFsT0RhdGFFbnRpdHlTaWRlRWZmZWN0cyIsImFsbCIsInNpZGVFZmZlY3RzIiwicmVxdWVzdFNpZGVFZmZlY3RzIiwiZHJhZnRSb290Q29udGV4dCIsImNyZWF0ZVJvb3RDb250ZXh0IiwiRHJhZnQiLCJleGVjdXRlRHJhZnRWYWxpZGF0aW9uIiwiaXNDb25uZWN0ZWQiLCJza2lwQmluZGluZ1RvVmlldyIsIm1vZGVsIiwiYXdhaXRDcmVhdGVEb2N1bWVudHMiLCJleGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yIiwiaXNDb2xsYWJvcmF0aW9uRW5hYmxlZCIsImRpYWxvZ0FjdGlvbiIsIkNvbGxhYm9yYXRpb25EaXNjYXJkIiwiZ2V0VXNlckFjdGlvbiIsImNyZWF0aW9uUm93IiwidGFibGVCaW5kaW5nIiwiY29udGV4dEtleXMiLCJzdGFydHNXaXRoIiwiY3JlYXRlRG9jdW1lbnQiLCJjcmVhdGlvbk1vZGUiLCJjcmVhdGVBdEVuZCIsInNraXBTaWRlRWZmZWN0cyIsImlzU2tpcEJpbmRpbmdUb1ZpZXciLCJpc1N0YW5kYXJkU2F2ZSIsImJpbmRpbmdzIiwic2F2ZURvY3VtZW50IiwiYkV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IiLCJSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uIiwiQ29udGludWUiLCJfY2FuY2VsRG9jdW1lbnQiLCJjYW5jZWxCdXR0b24iLCJsYXN0Rm9jdXNlZENvbnRyb2xJZCIsInNob3VsZFNraXBEaXNjYXJkUG9wb3ZlciIsImlzRG9jdW1lbnRNb2RpZmllZCIsIlVpTW9kZWxDb25zdGFudHMiLCJEb2N1bWVudE1vZGlmaWVkIiwiYWZ0ZXJDYW5jZWwiLCJwcm9taXNlUmVzdWx0IiwiY2FuY2VsRG9jdW1lbnQiLCJza2lwRGlzY2FyZFBvcG92ZXIiLCJhcHBseURvY3VtZW50Iiwic2hvd1JlbGF0ZWRBcHBzIiwidXBkYXRlUmVsYXRlZEFwcHNEZXRhaWxzIiwiX2ZpbmRDb250cm9sSW5TdWJTZWN0aW9uIiwiYVBhcmVudEVsZW1lbnQiLCJhU3Vic2VjdGlvbiIsImFDb250cm9scyIsImJJc0NoYXJ0IiwiaXRlbTEiLCJnZXRBZ2dyZWdhdGlvbiIsImNoYXJ0Q29udHJvbCIsImdldENoYXJ0Q29udHJvbCIsIm9TdWJFbGVtZW50IiwiZ2V0TWFpbkNvbnRlbnQiLCJfZ2V0QWxsQmxvY2tzIiwiX2ZpbmRDaGFydHMiLCJhQ2hhcnRzIiwib0Jsb2NrIiwib0NvbnRlbnQiLCJzZXRTaG93U2lkZUNvbnRlbnQiLCJvQ2hhcnRDb250ZXh0Iiwic0NoYXJ0UGF0aCIsIm9Db250ZXh0RGF0YSIsIm9DaGFydENvbnRleHREYXRhIiwiX3Njcm9sbFRhYmxlc1RvUm93Iiwic1Jvd1BhdGgiLCJUYWJsZVNjcm9sbGVyIiwic2Nyb2xsVGFibGVUb1JvdyIsIl9tZXJnZU11bHRpcGxlQ29udGV4dHMiLCJvUGFnZUNvbnRleHQiLCJhTGluZUNvbnRleHQiLCJhQXR0cmlidXRlcyIsImFQYWdlQXR0cmlidXRlcyIsInNNZXRhUGF0aExpbmUiLCJzUGF0aExpbmUiLCJzUGFnZVBhdGgiLCJvTWV0YU1vZGVsIiwic01ldGFQYXRoUGFnZSIsInJlcGxhY2UiLCJvU2luZ2xlQ29udGV4dCIsIm9TdWJDaGFydENvbnRleHREYXRhIiwiY29udGV4dERhdGEiLCJyZW1vdmVTZW5zaXRpdmVEYXRhIiwib1BhZ2VMZXZlbFNWIiwiYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQiLCJTZWxlY3Rpb25WYXJpYW50Iiwic2VsZWN0aW9uVmFyaWFudCIsImF0dHJpYnV0ZXMiLCJvVmlld0RhdGEiLCJvQ29uZmlndXJhdGlvbnMiLCJjb250cm9sQ29uZmlndXJhdGlvbiIsImFDb25maWd1cmF0aW9ucyIsInNLZXkiLCJvQ29uZmlndXJhdGlvbiIsInJlcXVlc3RHcm91cElkIiwicGFnaW5hdG9yQ3VycmVudENvbnRleHQiLCJiaW5kaW5nVG9Vc2UiLCJwYWdpbmF0b3IiLCJpbml0aWFsaXplIiwib0RhdGFQb2ludHMiLCJnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJnZXRSb3V0aW5nU2VydmljZSIsImdldE91dGJvdW5kcyIsIm9TaGVsbFNlcnZpY2VzIiwicmVxdWVzdE9iamVjdCIsImZuR2V0TGlua3MiLCJmbk9uRXJyb3IiLCJmblNldExpbmtFbmFibGVtZW50IiwiaWQiLCJhU3VwcG9ydGVkTGlua3MiLCJzTGlua0lkIiwic3VwcG9ydGVkIiwib1N1YkRhdGFQb2ludHMiLCJvUGFnZURhdGEiLCJvRGF0YVBvaW50Iiwib0xpbmsiLCJvTGlua0NvbnRleHQiLCJvTGlua0RhdGEiLCJvTWl4ZWRDb250ZXh0IiwibWVyZ2UiLCJvTWFwcGluZyIsInNNYWluUHJvcGVydHkiLCJzTWFwcGVkUHJvcGVydHkiLCJoYXNPd25Qcm9wZXJ0eSIsIm9OZXdNYXBwaW5nIiwiaXNOYXZpZ2F0aW9uU3VwcG9ydGVkIiwicGFyYW1zIiwiYUxpbmtzIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJPYmplY3RQYWdlQ29udHJvbGxlci5jb250cm9sbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlV2l0aFVJNSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBleHRlbnNpYmxlLCBmaW5hbEV4dGVuc2lvbiwgcHVibGljRXh0ZW5zaW9uLCB1c2luZ0V4dGVuc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBBY3Rpb25SdW50aW1lIGZyb20gXCJzYXAvZmUvY29yZS9BY3Rpb25SdW50aW1lXCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IEJ1c3lMb2NrZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0J1c3lMb2NrZXJcIjtcbmltcG9ydCBJbnRlbnRCYXNlZE5hdmlnYXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsUm91dGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxSb3V0aW5nXCI7XG5pbXBvcnQgTWVzc2FnZUhhbmRsZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgUGFnZVJlYWR5IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QYWdlUmVhZHlcIjtcbmltcG9ydCBQYWdpbmF0b3IgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BhZ2luYXRvclwiO1xuaW1wb3J0IFBsYWNlaG9sZGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QbGFjZWhvbGRlclwiO1xuaW1wb3J0IFNoYXJlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9TaGFyZVwiO1xuaW1wb3J0IFZpZXdTdGF0ZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvVmlld1N0YXRlXCI7XG5pbXBvcnQgQ29sbGFib3JhdGlvbk1hbmFnZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NhcmRzL0NvbGxhYm9yYXRpb25NYW5hZ2VyXCI7XG5pbXBvcnQgZHJhZnQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L2RyYWZ0XCI7XG5pbXBvcnQgVWlNb2RlbENvbnN0YW50cyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvZWRpdEZsb3dDb25zdGFudHNcIjtcbmltcG9ydCBOYXZpZ2F0aW9uUmVhc29uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9yb3V0aW5nL05hdmlnYXRpb25SZWFzb25cIjtcbmltcG9ydCB0eXBlIENvbW1hbmRFeGVjdXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL0NvbW1hbmRFeGVjdXRpb25cIjtcbmltcG9ydCB7IFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvUmVjb21tZW5kYXRpb25zL0NvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1wiO1xuaW1wb3J0IHR5cGUgeyBIaWRkZW5EcmFmdCwgTWljcm9DaGFydE1hbmlmZXN0Q29uZmlndXJhdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IEZFTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHsgdHlwZSBXcmFwcGVkQ2FyZCB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9Db2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSBDaGFydEJsb2NrIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NoYXJ0XCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgTWFjcm9BUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvTWFjcm9BUElcIjtcbmltcG9ydCB0eXBlIE11bHRpVmFsdWVGaWVsZEJsb2NrIGZyb20gXCJzYXAvZmUvbWFjcm9zL011bHRpVmFsdWVGaWVsZFwiO1xuaW1wb3J0IHR5cGUgRWFzeUZpbGxCdXR0b24gZnJvbSBcInNhcC9mZS9tYWNyb3MvYWkvRWFzeUZpbGxCdXR0b25cIjtcbmltcG9ydCB0eXBlIFN1bW1hcml6YXRpb25CdXR0b24gZnJvbSBcInNhcC9mZS9tYWNyb3MvYWkvU3VtbWFyaXphdGlvbkJ1dHRvblwiO1xuaW1wb3J0IHR5cGUgRm9ybUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9mb3JtL0Zvcm1BUElcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2VCdXR0b24gZnJvbSBcInNhcC9mZS9tYWNyb3MvbWVzc2FnZXMvTWVzc2FnZUJ1dHRvblwiO1xuaW1wb3J0IHR5cGUgU2hhcmVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3Mvc2hhcmUvU2hhcmVBUElcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgVGFibGVIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVIZWxwZXJcIjtcbmltcG9ydCBUYWJsZVV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1V0aWxzXCI7XG5pbXBvcnQgU2VsZWN0aW9uVmFyaWFudCBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vU2VsZWN0aW9uVmFyaWFudFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9iamVjdFBhZ2VFeHRlbnNpb25BUEkgfSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBFeHRlbnNpb25BUEkgfSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IENvbGxhYm9yYXRpb25EaXNjYXJkIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvY29tcG9uZW50cy9Db2xsYWJvcmF0aW9uRGlzY2FyZERpYWxvZ1wiO1xuaW1wb3J0IHR5cGUgU3ViU2VjdGlvbkJsb2NrIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvY29udHJvbHMvU3ViU2VjdGlvbkJsb2NrXCI7XG5pbXBvcnQgVGFibGVTY3JvbGxlciBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9UYWJsZVNjcm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IHR5cGUgSW5wdXRCYXNlIGZyb20gXCJzYXAvbS9JbnB1dEJhc2VcIjtcbmltcG9ydCBJbnN0YW5jZU1hbmFnZXIgZnJvbSBcInNhcC9tL0luc3RhbmNlTWFuYWdlclwiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCB0eXBlIE5hdkNvbnRhaW5lciBmcm9tIFwic2FwL20vTmF2Q29udGFpbmVyXCI7XG5pbXBvcnQgdHlwZSBPdmVyZmxvd1Rvb2xiYXIgZnJvbSBcInNhcC9tL092ZXJmbG93VG9vbGJhclwiO1xuaW1wb3J0IHR5cGUgUG9wb3ZlciBmcm9tIFwic2FwL20vUG9wb3ZlclwiO1xuaW1wb3J0IHR5cGUgVG9vbGJhclNwYWNlciBmcm9tIFwic2FwL20vVG9vbGJhclNwYWNlclwiO1xuaW1wb3J0IERldmljZSBmcm9tIFwic2FwL3VpL0RldmljZVwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSB7IENvbW1hbmRFeGVjdXRpb24kRXhlY3V0ZUV2ZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbW1hbmRFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgdHlwZSBJbnZpc2libGVUZXh0IGZyb20gXCJzYXAvdWkvY29yZS9JbnZpc2libGVUZXh0XCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgdHlwZSB7IE1hbmlmZXN0T3V0Ym91bmRFbnRyeSB9IGZyb20gXCJzYXAvdWkvY29yZS9NYW5pZmVzdFwiO1xuaW1wb3J0IE1lc3NhZ2luZyBmcm9tIFwic2FwL3VpL2NvcmUvTWVzc2FnaW5nXCI7XG5pbXBvcnQgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgTWVzc2FnZVR5cGUgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVR5cGVcIjtcbmltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBEeW5hbWljU2lkZUNvbnRlbnQgZnJvbSBcInNhcC91aS9sYXlvdXQvRHluYW1pY1NpZGVDb250ZW50XCI7XG5pbXBvcnQgdHlwZSBGb3JtIGZyb20gXCJzYXAvdWkvbGF5b3V0L2Zvcm0vRm9ybVwiO1xuaW1wb3J0IHR5cGUgQ2hhcnQgZnJvbSBcInNhcC91aS9tZGMvQ2hhcnRcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBUYWJsZVR5cGVCYXNlIGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL1RhYmxlVHlwZUJhc2VcIjtcbmltcG9ydCB0eXBlIEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9CaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9MaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFDb250ZXh0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZSBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZVwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUxheW91dCBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUxheW91dFwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZVNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlU3ViU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVN1YlNlY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsVHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi8uLi90eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcbmltcG9ydCB0eXBlIENvbGxhYm9yYXRpb25EcmFmdCBmcm9tIFwiLi9jb21wb25lbnRzL0NvbGxhYm9yYXRpb25EcmFmdFwiO1xuaW1wb3J0IENvbGxhYm9yYXRpb25NYW5hZ2VyT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL0NvbGxhYm9yYXRpb25NYW5hZ2VyXCI7XG5pbXBvcnQgSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL0ludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsUm91dGluZ092ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9JbnRlcm5hbFJvdXRpbmdcIjtcbmltcG9ydCBNZXNzYWdlSGFuZGxlck92ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IFBhZ2luYXRvck92ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9QYWdpbmF0b3JcIjtcbmltcG9ydCBTaGFyZU92ZXJyaWRlcyBmcm9tIFwiLi9vdmVycmlkZXMvU2hhcmVcIjtcbmltcG9ydCBWaWV3U3RhdGVPdmVycmlkZXMgZnJvbSBcIi4vb3ZlcnJpZGVzL1ZpZXdTdGF0ZVwiO1xuXG5leHBvcnQgdHlwZSBCaW5kaW5nUGFyYW1zID0ge1xuXHRyZWRpcmVjdGVkVG9Ob25EcmFmdD86IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0cmVhc29uPzogTmF2aWdhdGlvblJlYXNvbjtcblx0YlBlcnNpc3RPUFNjcm9sbD86IGJvb2xlYW47XG5cdGxpc3RCaW5kaW5nPzogT0RhdGFMaXN0QmluZGluZztcblx0c2hvd1BsYWNlaG9sZGVyPzogYm9vbGVhbjtcbn07XG5cbmNvbnN0IFByb2dyYW1taW5nTW9kZWwgPSBGRUxpYnJhcnkuUHJvZ3JhbW1pbmdNb2RlbDtcblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLk9iamVjdFBhZ2VDb250cm9sbGVyXCIpXG5jbGFzcyBPYmplY3RQYWdlQ29udHJvbGxlciBleHRlbmRzIFBhZ2VDb250cm9sbGVyIHtcblx0b1ZpZXchOiBGRVZpZXc7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFBsYWNlaG9sZGVyKVxuXHRwbGFjZWhvbGRlciE6IFBsYWNlaG9sZGVyO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihTaGFyZS5vdmVycmlkZShTaGFyZU92ZXJyaWRlcykpXG5cdHNoYXJlITogU2hhcmU7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKEludGVybmFsUm91dGluZy5vdmVycmlkZShJbnRlcm5hbFJvdXRpbmdPdmVycmlkZSkpXG5cdF9yb3V0aW5nITogSW50ZXJuYWxSb3V0aW5nO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihQYWdpbmF0b3Iub3ZlcnJpZGUoUGFnaW5hdG9yT3ZlcnJpZGUpKVxuXHRwYWdpbmF0b3IhOiBQYWdpbmF0b3I7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKE1lc3NhZ2VIYW5kbGVyLm92ZXJyaWRlKE1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUpKVxuXHRtZXNzYWdlSGFuZGxlciE6IE1lc3NhZ2VIYW5kbGVyO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihJbnRlbnRCYXNlZE5hdmlnYXRpb24ub3ZlcnJpZGUoSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUpKVxuXHRpbnRlbnRCYXNlZE5hdmlnYXRpb24hOiBJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cblx0QHVzaW5nRXh0ZW5zaW9uKENvbGxhYm9yYXRpb25NYW5hZ2VyLm92ZXJyaWRlKENvbGxhYm9yYXRpb25NYW5hZ2VyT3ZlcnJpZGUpKVxuXHRjb2xsYWJvcmF0aW9uTWFuYWdlciE6IENvbGxhYm9yYXRpb25NYW5hZ2VyO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihcblx0XHRJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbi5vdmVycmlkZSh7XG5cdFx0XHRnZXROYXZpZ2F0aW9uTW9kZTogZnVuY3Rpb24gKHRoaXM6IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IGJJc1N0aWNreUVkaXRNb2RlID1cblx0XHRcdFx0XHQodGhpcy5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIE9iamVjdFBhZ2VDb250cm9sbGVyKS5nZXRTdGlja3lFZGl0TW9kZSAmJlxuXHRcdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXIpLmdldFN0aWNreUVkaXRNb2RlKCk7XG5cdFx0XHRcdHJldHVybiBiSXNTdGlja3lFZGl0TW9kZSA/IFwiZXhwbGFjZVwiIDogdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdH0pXG5cdClcblx0X2ludGVudEJhc2VkTmF2aWdhdGlvbiE6IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihWaWV3U3RhdGUub3ZlcnJpZGUoVmlld1N0YXRlT3ZlcnJpZGVzKSlcblx0dmlld1N0YXRlITogVmlld1N0YXRlO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihcblx0XHRQYWdlUmVhZHkub3ZlcnJpZGUoe1xuXHRcdFx0aXNDb250ZXh0RXhwZWN0ZWQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHRwYWdlUmVhZHkhOiBQYWdlUmVhZHk7XG5cblx0cHJpdmF0ZSBtQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXM/OiBSZWNvcmQ8c3RyaW5nLCBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJPjtcblxuXHRwcm90ZWN0ZWQgZXh0ZW5zaW9uQVBJPzogT2JqZWN0UGFnZUV4dGVuc2lvbkFQSTtcblxuXHRwcml2YXRlIGJTZWN0aW9uTmF2aWdhdGVkPzogYm9vbGVhbjtcblxuXHRwcml2YXRlIGNsZWFyVGl0bGVIaWVyYXJjaHlDYWNoZVNldFVwID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBzd2l0Y2hEcmFmdEFuZEFjdGl2ZVBvcE92ZXI/OiBQb3BvdmVyO1xuXG5cdHByaXZhdGUgY3VycmVudEJpbmRpbmc/OiBCaW5kaW5nO1xuXG5cdHByaXZhdGUgbWVzc2FnZUJ1dHRvbiE6IE1lc3NhZ2VCdXR0b247XG5cblx0cHJpdmF0ZSBjb2xsYWJvcmF0aW9uTWVzc2FnZT86IE1lc3NhZ2U7XG5cblx0cHJpdmF0ZSBtZXJnZVBhdGNoRHJhZnQgPSBmYWxzZTtcblxuXHRwcml2YXRlIGF1dG9RdWV1ZUxvY2s6IFJldHVyblR5cGU8T0RhdGFNb2RlbFtcImxvY2tcIl0+IHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgbWVzc2FnZUJpbmRpbmc/OiBCaW5kaW5nO1xuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRFeHRlbnNpb25BUEkoc0lkPzogc3RyaW5nKTogRXh0ZW5zaW9uQVBJIHtcblx0XHRpZiAoc0lkKSB7XG5cdFx0XHQvLyB0byBhbGxvdyBsb2NhbCBJRCB1c2FnZSBmb3IgY3VzdG9tIHBhZ2VzIHdlJ2xsIGNyZWF0ZS9yZXR1cm4gb3duIGluc3RhbmNlcyBmb3IgY3VzdG9tIHNlY3Rpb25zXG5cdFx0XHR0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcyA9IHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzIHx8IHt9O1xuXG5cdFx0XHRpZiAoIXRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF0pIHtcblx0XHRcdFx0dGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXSA9IG5ldyBFeHRlbnNpb25BUEkodGhpcywgc0lkKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIXRoaXMuZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHRcdHRoaXMuZXh0ZW5zaW9uQVBJID0gbmV3IEV4dGVuc2lvbkFQSSh0aGlzKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLmV4dGVuc2lvbkFQSTtcblx0XHR9XG5cdH1cblxuXHRvbkluaXQoKTogdm9pZCB7XG5cdFx0c3VwZXIub25Jbml0KCk7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXG5cdFx0Ly8gU2V0dGluZyBkZWZhdWx0cyBvZiBpbnRlcm5hbCBtb2RlbCBjb250ZXh0XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiZXh0ZXJuYWxOYXZpZ2F0aW9uQ29udGV4dFwiLCB7IHBhZ2U6IHRydWUgfSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcInJlbGF0ZWRBcHBzXCIsIHtcblx0XHRcdHZpc2liaWxpdHk6IGZhbHNlLFxuXHRcdFx0aXRlbXM6IG51bGxcblx0XHR9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiYmF0Y2hHcm91cHNcIiwgdGhpcy5fZ2V0QmF0Y2hHcm91cHNGb3JWaWV3KCkpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJlcnJvck5hdmlnYXRpb25TZWN0aW9uRmxhZ1wiLCBmYWxzZSk7XG5cdFx0aWYgKG9PYmplY3RQYWdlLmdldEVuYWJsZUxhenlMb2FkaW5nKCkpIHtcblx0XHRcdC8vQXR0YWNoaW5nIHRoZSBldmVudCB0byBtYWtlIHRoZSBzdWJzZWN0aW9uIGNvbnRleHQgYmluZGluZyBhY3RpdmUgd2hlbiBpdCBpcyB2aXNpYmxlLlxuXHRcdFx0b09iamVjdFBhZ2UuYXR0YWNoRXZlbnQoXCJzdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0XCIsIHRoaXMuX2hhbmRsZVN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnQuYmluZCh0aGlzKSk7XG5cdFx0fVxuXHRcdHRoaXMubWVzc2FnZUJ1dHRvbiA9IHRoaXMuZ2V0VmlldygpLmJ5SWQoXCJmZTo6Rm9vdGVyQmFyOjpNZXNzYWdlQnV0dG9uXCIpIGFzIE1lc3NhZ2VCdXR0b247XG5cdFx0dGhpcy5tZXNzYWdlQmluZGluZyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5iaW5kTGlzdChcIi9cIik7XG5cdFx0dGhpcy5tZXNzYWdlQmluZGluZz8uYXR0YWNoQ2hhbmdlKHRoaXMuX2ZuU2hvd09QTWVzc2FnZSwgdGhpcyk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcInJvb3RFZGl0RW5hYmxlZFwiLCB0cnVlKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwicm9vdEVkaXRWaXNpYmxlXCIsIHRydWUpO1xuXHR9XG5cblx0b25FeGl0KCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcykge1xuXHRcdFx0Zm9yIChjb25zdCBzSWQgb2YgT2JqZWN0LmtleXModGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMpKSB7XG5cdFx0XHRcdGlmICh0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdKSB7XG5cdFx0XHRcdFx0dGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXS5kZXN0cm95KCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGRlbGV0ZSB0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcztcblx0XHR9XG5cdFx0aWYgKHRoaXMuZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHR0aGlzLmV4dGVuc2lvbkFQSS5kZXN0cm95KCk7XG5cdFx0fVxuXHRcdGRlbGV0ZSB0aGlzLmV4dGVuc2lvbkFQSTtcblxuXHRcdGNvbnN0IG9NZXNzYWdlUG9wb3ZlciA9IHRoaXMubWVzc2FnZUJ1dHRvbiA/IHRoaXMubWVzc2FnZUJ1dHRvbi5vTWVzc2FnZVBvcG92ZXIgOiBudWxsO1xuXHRcdGlmIChvTWVzc2FnZVBvcG92ZXIgJiYgb01lc3NhZ2VQb3BvdmVyLmlzT3BlbigpKSB7XG5cdFx0XHRvTWVzc2FnZVBvcG92ZXIuY2xvc2UoKTtcblx0XHR9XG5cdFx0Ly93aGVuIGV4aXRpbmcgd2Ugc2V0IGtlZXBBbGl2ZSBjb250ZXh0IHRvIGZhbHNlXG5cdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGlmIChvQ29udGV4dCAmJiBvQ29udGV4dC5pc0tlZXBBbGl2ZSgpKSB7XG5cdFx0XHRvQ29udGV4dC5zZXRLZWVwQWxpdmUoZmFsc2UpO1xuXHRcdH1cblxuXHRcdHRoaXMuY29sbGFib3JhdGl2ZURyYWZ0LmRpc2Nvbm5lY3QoKTsgLy8gQ2xlYW51cCBjb2xsYWJvcmF0aW9uIGNvbm5lY3Rpb24gd2hlbiBsZWF2aW5nIHRoZSBhcHBcblxuXHRcdHRoaXMubWVzc2FnZUJpbmRpbmc/LmRldGFjaENoYW5nZSh0aGlzLl9mblNob3dPUE1lc3NhZ2UsIHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBzaG93IHRoZSBtZXNzYWdlIHN0cmlwIG9uIHRoZSBvYmplY3QgcGFnZS5cblx0ICpcblx0ICovXG5cdF9mblNob3dPUE1lc3NhZ2UoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuaXNTdXNwZW5kZWQoKSkge1xuXHRcdFx0Ly8gSWYgdGhlIGFwcCBpcyBzdXNwZW5kZWQsIHdlIGRvIG5vdCBzaG93IHRoZSBtZXNzYWdlcyAodGhlIE1lc3NhZ2VNb2RlbCBjb250YWlucyBtZXNzYWdlcyBmcm9tIHRoZSBhY3RpdmUgYXBwKS5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBleHRlbnNpb25BUEkgPSB0aGlzLmdldEV4dGVuc2lvbkFQSSgpO1xuXHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCBtZXNzYWdlcyA9IE1lc3NhZ2luZz8uZ2V0TWVzc2FnZU1vZGVsKClcblx0XHRcdC5nZXREYXRhKClcblx0XHRcdC5maWx0ZXIoKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IHtcblx0XHRcdFx0cmV0dXJuIG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdID09PSB2aWV3LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKTtcblx0XHRcdH0pO1xuXG5cdFx0aWYgKGV4dGVuc2lvbkFQSSkge1xuXHRcdFx0ZXh0ZW5zaW9uQVBJLl9zaG93TWVzc2FnZXMobWVzc2FnZXMsIFwiQmFja2VuZFwiKTtcblx0XHR9XG5cdH1cblxuXHRfZ2V0VGFibGVCaW5kaW5nKG9UYWJsZTogVGFibGUpOiBPRGF0YUxpc3RCaW5kaW5nIHtcblx0XHRyZXR1cm4gb1RhYmxlICYmIG9UYWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdH1cblxuXHQvKipcblx0ICogRmluZCB0aGUgbGFzdCB2aXNpYmxlIHN1YnNlY3Rpb24gYW5kIGFkZCB0aGUgc2FwVXhBUE9iamVjdFBhZ2VTdWJTZWN0aW9uRml0Q29udGFpbmVyIENTUyBjbGFzcyBpZiBpdCBjb250YWlucyBvbmx5IGEgR3JpZFRhYmxlIG9yIGEgVHJlZVRhYmxlLlxuXHQgKiBAcGFyYW0gc3ViU2VjdGlvbnMgVGhlIHN1YiBzZWN0aW9ucyB0byBsb29rIGZvclxuXHQgKi9cblx0cHJpdmF0ZSBjaGVja1NlY3Rpb25zRm9yTm9uUmVzcG9uc2l2ZVRhYmxlKHN1YlNlY3Rpb25zOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdKTogdm9pZCB7XG5cdFx0Y29uc3QgY2hhbmdlQ2xhc3NGb3JUYWJsZXMgPSAoZXZlbnQ6IEV2ZW50LCBsYXN0VmlzaWJsZVN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uKTogdm9pZCA9PiB7XG5cdFx0XHRjb25zdCBibG9ja3MgPSBbLi4ubGFzdFZpc2libGVTdWJTZWN0aW9uLmdldEJsb2NrcygpLCAuLi5sYXN0VmlzaWJsZVN1YlNlY3Rpb24uZ2V0TW9yZUJsb2NrcygpXTtcblx0XHRcdGlmIChibG9ja3MubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdGNvbnN0IHRhYmxlID0gdGhpcy5zZWFyY2hUYWJsZUluQmxvY2soYmxvY2tzWzBdIGFzIFN1YlNlY3Rpb25CbG9jayk7XG5cdFx0XHRcdGlmICghdGFibGUpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgdGFibGVUeXBlID0gdGFibGUuaXNBPFRhYmxlPihcInNhcC51aS5tZGMuVGFibGVcIikgJiYgKHRhYmxlLmdldFR5cGUoKSBhcyBUYWJsZVR5cGVCYXNlKTtcblx0XHRcdFx0Y29uc3QgdGFibGVBUEkgPSB0YWJsZS5nZXRQYXJlbnQoKT8uaXNBPFRhYmxlQVBJPihcInNhcC5mZS5tYWNyb3MudGFibGUuVGFibGVBUElcIilcblx0XHRcdFx0XHQ/ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSlcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHRhYmxlVHlwZSAmJlxuXHRcdFx0XHRcdCh0YWJsZVR5cGU/LmlzQShcInNhcC51aS5tZGMudGFibGUuR3JpZFRhYmxlVHlwZVwiKSB8fCB0YWJsZVR5cGU/LmlzQShcInNhcC51aS5tZGMudGFibGUuVHJlZVRhYmxlVHlwZVwiKSkgJiZcblx0XHRcdFx0XHR0YWJsZUFQST8uZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC5yb3dDb3VudE1vZGUgPT09IFwiQXV0b1wiXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdC8vSW4gY2FzZSB0aGVyZSBpcyBvbmx5IGEgc2luZ2xlIHRhYmxlIGluIGEgc3ViU2VjdGlvbiB3ZSBmaXQgdGhhdCB0byB0aGUgd2hvbGUgcGFnZSBzbyB0aGF0IHRoZSBzY3JvbGxiYXIgY29tZXMgb25seSBvbiB0YWJsZSBhbmQgbm90IG9uIHBhZ2Vcblx0XHRcdFx0XHRsYXN0VmlzaWJsZVN1YlNlY3Rpb24uYWRkU3R5bGVDbGFzcyhcInNhcFV4QVBPYmplY3RQYWdlU3ViU2VjdGlvbkZpdENvbnRhaW5lclwiKTtcblx0XHRcdFx0XHRsYXN0VmlzaWJsZVN1YlNlY3Rpb24uZGV0YWNoRXZlbnQoXCJtb2RlbENvbnRleHRDaGFuZ2VcIiwgY2hhbmdlQ2xhc3NGb3JUYWJsZXMsIHRoaXMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRmb3IgKGxldCBzdWJTZWN0aW9uSW5kZXggPSBzdWJTZWN0aW9ucy5sZW5ndGggLSAxOyBzdWJTZWN0aW9uSW5kZXggPj0gMDsgc3ViU2VjdGlvbkluZGV4LS0pIHtcblx0XHRcdGlmIChzdWJTZWN0aW9uc1tzdWJTZWN0aW9uSW5kZXhdLmdldFZpc2libGUoKSkge1xuXHRcdFx0XHRjb25zdCBsYXN0VmlzaWJsZVN1YlNlY3Rpb24gPSBzdWJTZWN0aW9uc1tzdWJTZWN0aW9uSW5kZXhdO1xuXHRcdFx0XHQvLyBXZSBuZWVkIHRvIGF0dGFjaCB0aGlzIGV2ZW50IGluIG9yZGVyIHRvIG1hbmFnZSB0aGUgT2JqZWN0IFBhZ2UgTGF6eSBMb2FkaW5nIG1lY2hhbmlzbVxuXHRcdFx0XHRsYXN0VmlzaWJsZVN1YlNlY3Rpb24uYXR0YWNoRXZlbnQoXCJtb2RlbENvbnRleHRDaGFuZ2VcIiwgbGFzdFZpc2libGVTdWJTZWN0aW9uLCBjaGFuZ2VDbGFzc0ZvclRhYmxlcywgdGhpcyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBGaW5kIGEgdGFibGUgaW4gYmxvY2tzIG9mIHNlY3Rpb24uXG5cdCAqIEBwYXJhbSBibG9jayBPbmUgc3ViIHNlY3Rpb24gYmxvY2tcblx0ICogQHJldHVybnMgVGFibGUgaWYgZXhpc3RzXG5cdCAqL1xuXHRwcml2YXRlIHNlYXJjaFRhYmxlSW5CbG9jayhibG9jazogU3ViU2VjdGlvbkJsb2NrKTogVGFibGUgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGNvbnRyb2wgPSBibG9jay5jb250ZW50O1xuXHRcdGxldCB0YWJsZUFQSTogVGFibGVBUEkgfCB1bmRlZmluZWQ7XG5cdFx0aWYgKGJsb2NrLmlzQShcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5jb250cm9scy5TdWJTZWN0aW9uQmxvY2tcIikpIHtcblx0XHRcdC8vIFRoZSB0YWJsZSBtYXkgY3VycmVudGx5IGJlIHNob3duIGluIGEgZnVsbCBzY3JlZW4gZGlhbG9nLCB3ZSBjYW4gdGhlbiBnZXQgdGhlIHJlZmVyZW5jZSB0byB0aGUgVGFibGVBUElcblx0XHRcdC8vIGNvbnRyb2wgZnJvbSB0aGUgY3VzdG9tIGRhdGEgb2YgdGhlIHBsYWNlIGhvbGRlciBwYW5lbFxuXHRcdFx0aWYgKGNvbnRyb2wuaXNBKFwic2FwLm0uUGFuZWxcIikgJiYgY29udHJvbC5kYXRhKFwiRnVsbFNjcmVlblRhYmxlUGxhY2VIb2xkZXJcIikpIHtcblx0XHRcdFx0dGFibGVBUEkgPSBjb250cm9sLmRhdGEoXCJ0YWJsZUFQSXJlZmVyZW5jZVwiKTtcblx0XHRcdH0gZWxzZSBpZiAoY29udHJvbC5pc0EoXCJzYXAuZmUubWFjcm9zLnRhYmxlLlRhYmxlQVBJXCIpKSB7XG5cdFx0XHRcdHRhYmxlQVBJID0gY29udHJvbCBhcyBUYWJsZUFQSTtcblx0XHRcdH1cblx0XHRcdGlmICh0YWJsZUFQSSkge1xuXHRcdFx0XHRyZXR1cm4gdGFibGVBUEkuY29udGVudDtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdG9uQmVmb3JlUmVuZGVyaW5nKCk6IHZvaWQge1xuXHRcdFBhZ2VDb250cm9sbGVyLnByb3RvdHlwZS5vbkJlZm9yZVJlbmRlcmluZy5hcHBseSh0aGlzKTtcblx0XHQvLyBJbiB0aGUgcmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCBzY2VuYXJpbyB3ZSBuZWVkIHRvIGVuc3VyZSBpbiBjYXNlIG9mIHJlbG9hZC9yZWZyZXNoIHRoYXQgdGhlIG1ldGEgbW9kZWwgaW4gdGhlIG1ldGhvZGUgcmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCBvZiB0aGUgRmllbGRSdW50aW1lIGlzIGF2YWlsYWJsZVxuXHRcdGlmICh0aGlzLm9WaWV3LmdldFZpZXdEYXRhKCk/LnJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QgJiYgQ29tbW9uSGVscGVyLmdldE1ldGFNb2RlbCgpID09PSB1bmRlZmluZWQpIHtcblx0XHRcdENvbW1vbkhlbHBlci5zZXRNZXRhTW9kZWwodGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0fVxuXHR9XG5cblx0b25BZnRlclJlbmRlcmluZygpOiB2b2lkIHtcblx0XHRsZXQgc3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW107XG5cdFx0aWYgKHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuZ2V0VXNlSWNvblRhYkJhcigpKSB7XG5cdFx0XHRjb25zdCBzZWN0aW9ucyA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuZ2V0U2VjdGlvbnMoKTtcblx0XHRcdGZvciAoY29uc3Qgc2VjdGlvbiBvZiBzZWN0aW9ucykge1xuXHRcdFx0XHRzdWJTZWN0aW9ucyA9IHNlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKTtcblx0XHRcdFx0dGhpcy5jaGVja1NlY3Rpb25zRm9yTm9uUmVzcG9uc2l2ZVRhYmxlKHN1YlNlY3Rpb25zKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0c3ViU2VjdGlvbnMgPSB0aGlzLl9nZXRBbGxTdWJTZWN0aW9ucygpO1xuXHRcdFx0dGhpcy5jaGVja1NlY3Rpb25zRm9yTm9uUmVzcG9uc2l2ZVRhYmxlKHN1YlNlY3Rpb25zKTtcblx0XHR9XG5cdH1cblxuXHRfb25CZWZvcmVCaW5kaW5nKG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCwgbVBhcmFtZXRlcnM6IEJpbmRpbmdQYXJhbXMgPSB7fSk6IHZvaWQge1xuXHRcdC8vIFRPRE86IHdlIHNob3VsZCBjaGVjayBob3cgdGhpcyBjb21lcyB0b2dldGhlciB3aXRoIHRoZSB0cmFuc2FjdGlvbiBoZWxwZXIsIHNhbWUgdG8gdGhlIGNoYW5nZSBpbiB0aGUgYWZ0ZXJCaW5kaW5nXG5cdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2ZpbmRUYWJsZXMoKSxcblx0XHRcdG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKSxcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRvSW50ZXJuYWxNb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwiaW50ZXJuYWxcIiksXG5cdFx0XHRhQmF0Y2hHcm91cHMgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJiYXRjaEdyb3Vwc1wiKTtcblx0XHRsZXQgb0Zhc3RDcmVhdGlvblJvdztcblx0XHRhQmF0Y2hHcm91cHMucHVzaChcIiRhdXRvXCIpO1xuXHRcdGlmIChtUGFyYW1ldGVycy5yZWFzb24gIT09IE5hdmlnYXRpb25SZWFzb24uRWRpdEZsb3dBY3Rpb24pIHtcblx0XHRcdHRoaXMuX2Nsb3NlU2lkZUNvbnRlbnQoKTtcblx0XHR9XG5cdFx0Y29uc3Qgb3BDb250ZXh0ID0gb09iamVjdFBhZ2UuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dDtcblx0XHRpZiAoXG5cdFx0XHRvcENvbnRleHQgJiZcblx0XHRcdG9wQ29udGV4dC5oYXNQZW5kaW5nQ2hhbmdlcygpICYmXG5cdFx0XHQhYUJhdGNoR3JvdXBzLnNvbWUob3BDb250ZXh0LmdldE1vZGVsKCkuaGFzUGVuZGluZ0NoYW5nZXMuYmluZChvcENvbnRleHQuZ2V0TW9kZWwoKSkpXG5cdFx0KSB7XG5cdFx0XHQvKiBcdEluIGNhc2UgdGhlcmUgYXJlIHBlbmRpbmcgY2hhbmdlcyBmb3IgdGhlIGNyZWF0aW9uIHJvdyBhbmQgbm8gb3RoZXJzIHdlIG5lZWQgdG8gcmVzZXQgdGhlIGNoYW5nZXNcblx0XHRcdFx0XHRcdFx0XHRUT0RPOiB0aGlzIGlzIGp1c3QgYSBxdWljayBzb2x1dGlvbiwgdGhpcyBuZWVkcyB0byBiZSByZXdvcmtlZFxuXHRcdFx0XHRcdFx0XHRcdCovXG5cblx0XHRcdG9wQ29udGV4dC5nZXRCaW5kaW5nKCkucmVzZXRDaGFuZ2VzKCk7XG5cdFx0fVxuXG5cdFx0Ly8gRm9yIG5vdyB3ZSBoYXZlIHRvIHNldCB0aGUgYmluZGluZyBjb250ZXh0IHRvIG51bGwgZm9yIGV2ZXJ5IGZhc3QgY3JlYXRpb24gcm93XG5cdFx0Ly8gVE9ETzogR2V0IHJpZCBvZiB0aGlzIGNvZGluZyBvciBtb3ZlIGl0IHRvIGFub3RoZXIgbGF5ZXIgLSB0byBiZSBkaXNjdXNzZWQgd2l0aCBNREMgYW5kIG1vZGVsXG5cdFx0Zm9yIChjb25zdCBpdGVtIG9mIGFUYWJsZXMpIHtcblx0XHRcdG9GYXN0Q3JlYXRpb25Sb3cgPSBpdGVtLmdldENyZWF0aW9uUm93KCk7XG5cdFx0XHRpZiAob0Zhc3RDcmVhdGlvblJvdykge1xuXHRcdFx0XHRvRmFzdENyZWF0aW9uUm93LnNldEJpbmRpbmdDb250ZXh0KG51bGwpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFNjcm9sbCB0byBwcmVzZW50IFNlY3Rpb24gc28gdGhhdCBiaW5kaW5ncyBhcmUgZW5hYmxlZCBkdXJpbmcgbmF2aWdhdGlvbiB0aHJvdWdoIHBhZ2luYXRvciBidXR0b25zLCBhcyB0aGVyZSBpcyBubyB2aWV3IHJlcmVuZGVyaW5nL3JlYmluZFxuXHRcdGNvbnN0IGZuU2Nyb2xsVG9QcmVzZW50U2VjdGlvbiA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdGlmICghKG9PYmplY3RQYWdlIGFzIHsgaXNGaXJzdFJlbmRlcmluZz86ICgpID0+IGJvb2xlYW4gfSkuaXNGaXJzdFJlbmRlcmluZz8uKCkgJiYgIW1QYXJhbWV0ZXJzLmJQZXJzaXN0T1BTY3JvbGwpIHtcblx0XHRcdFx0b09iamVjdFBhZ2Uuc2V0U2VsZWN0ZWRTZWN0aW9uKG51bGwgYXMgdW5rbm93biBhcyBzdHJpbmcpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0b09iamVjdFBhZ2UuYXR0YWNoRXZlbnRPbmNlKFwibW9kZWxDb250ZXh0Q2hhbmdlXCIsIGZuU2Nyb2xsVG9QcmVzZW50U2VjdGlvbik7XG5cblx0XHRjb25zdCBmbk9QUmVuZGVyaW5nTGF5b3V0ID0ge1xuXHRcdFx0b25BZnRlclJlbmRlcmluZzogKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKT8uZWRpdGFibGVIZWFkZXJDb250ZW50KSB7XG5cdFx0XHRcdFx0Zm5TY3JvbGxUb1ByZXNlbnRTZWN0aW9uKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0b09iamVjdFBhZ2UucmVtb3ZlRXZlbnREZWxlZ2F0ZShmbk9QUmVuZGVyaW5nTGF5b3V0KTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdG9PYmplY3RQYWdlLmFkZEV2ZW50RGVsZWdhdGUoZm5PUFJlbmRlcmluZ0xheW91dCk7XG5cblx0XHQvL1NldCB0aGUgQmluZGluZyBmb3IgUGFnaW5hdG9ycyB1c2luZyBMaXN0QmluZGluZyBJRFxuXHRcdHRoaXMuX2luaXRpYWxpemVQYWdpbmF0aW9uKG9Db250ZXh0LCBvSW50ZXJuYWxNb2RlbCwgbVBhcmFtZXRlcnM/Lmxpc3RCaW5kaW5nKTtcblxuXHRcdGlmIChvT2JqZWN0UGFnZS5nZXRFbmFibGVMYXp5TG9hZGluZygpKSB7XG5cdFx0XHR0aGlzLl9kaXNhYmxlQmxvY2tzQmluZGluZ3Mob09iamVjdFBhZ2UpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnBsYWNlaG9sZGVyLmlzUGxhY2Vob2xkZXJFbmFibGVkKCkgJiYgbVBhcmFtZXRlcnMuc2hvd1BsYWNlaG9sZGVyKSB7XG5cdFx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdFx0Y29uc3Qgb05hdkNvbnRhaW5lciA9IChvVmlldy5nZXRQYXJlbnQoKSBhcyB1bmtub3duIGFzIHsgb0NvbnRhaW5lcjogQ29udHJvbCB9KS5vQ29udGFpbmVyLmdldFBhcmVudCgpO1xuXHRcdFx0aWYgKG9OYXZDb250YWluZXIpIHtcblx0XHRcdFx0dGhpcy5wbGFjZWhvbGRlci5lbmFibGVBbmltYXRpb24oKTtcblx0XHRcdFx0KG9OYXZDb250YWluZXIgYXMgdW5rbm93biBhcyB7IHNob3dQbGFjZWhvbGRlcjogRnVuY3Rpb24gfSkuc2hvd1BsYWNlaG9sZGVyKHt9KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGdldEZpcnN0RWRpdGFibGVJbnB1dCgpOiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBkb21FZGl0YWJsZUVsZW1lbnQgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLl9nZXRGaXJzdEVkaXRhYmxlSW5wdXQoKTtcblx0XHRyZXR1cm4gZG9tRWRpdGFibGVFbGVtZW50ID8gVUk1RWxlbWVudC5jbG9zZXN0VG8oZG9tRWRpdGFibGVFbGVtZW50KSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGZpcnN0IGNsaWNrYWJsZSBlbGVtZW50IGluIHRoZSBoZWFkZXIgb2YgdGhlIG9iamVjdCBwYWdlLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0gb2JqZWN0UGFnZSBPYmplY3QgUGFnZSBMYXlvdXQgY29udHJvbFxuXHQgKiBAcmV0dXJucyBUaGUgZmlyc3QgY2xpY2thYmxlIGVsZW1lbnQgZm91bmQgaW4gdGhlIGhlYWRlclxuXHQgKi9cblx0cHJpdmF0ZSBnZXRGaXJzdENsaWNrYWJsZUVsZW1lbnQob2JqZWN0UGFnZTogT2JqZWN0UGFnZUxheW91dCk6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQge1xuXHRcdGxldCBmaXJzdENsaWNrYWJsZUVsZW1lbnQ7XG5cdFx0Y29uc3QgYWN0aW9ucyA9IG9iamVjdFBhZ2UuZ2V0SGVhZGVyVGl0bGUoKSAmJiAob2JqZWN0UGFnZS5nZXRIZWFkZXJUaXRsZSgpIGFzIE9iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGUpLmdldEFjdGlvbnMoKTtcblx0XHRpZiAoYWN0aW9ucz8ubGVuZ3RoKSB7XG5cdFx0XHRmaXJzdENsaWNrYWJsZUVsZW1lbnQgPSBhY3Rpb25zLmZpbmQoZnVuY3Rpb24gKGFjdGlvbjogQ29udHJvbCkge1xuXHRcdFx0XHQvLyBEdWUgdG8gdGhlIGxlZnQgYWxpZ25tZW50IG9mIHRoZSBEcmFmdCBzd2l0Y2ggYW5kIHRoZSBjb2xsYWJvcmF0aXZlIGRyYWZ0IGF2YXRhciBjb250cm9sc1xuXHRcdFx0XHQvLyB0aGVyZSBpcyBhIFRvb2xiYXJTcGFjZXIgaW4gdGhlIGFjdGlvbnMgYWdncmVnYXRpb24gd2hpY2ggd2UgbmVlZCB0byBleGNsdWRlIGhlcmUhXG5cdFx0XHRcdC8vIER1ZSB0byB0aGUgQUNDIHJlcG9ydCwgd2UgYWxzbyBuZWVkIG5vdCB0byBjaGVjayBmb3IgdGhlIEludmlzaWJsZVRleHQgZWxlbWVudHNcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGFjdGlvbi5pc0E8U2hhcmVBUEk+KFwic2FwLmZlLm1hY3Jvcy5zaGFyZS5TaGFyZUFQSVwiKSB8fFxuXHRcdFx0XHRcdGFjdGlvbi5pc0E8U3VtbWFyaXphdGlvbkJ1dHRvbj4oXCJzYXAuZmUubWFjcm9zLmFpLlN1bW1hcml6YXRpb25CdXR0b25cIikgfHxcblx0XHRcdFx0XHRhY3Rpb24uaXNBPEVhc3lGaWxsQnV0dG9uPihcInNhcC5mZS5tYWNyb3MuYWkuRWFzeUZpbGxCdXR0b25cIikgfHxcblx0XHRcdFx0XHRhY3Rpb24uaXNBPENvbGxhYm9yYXRpb25EcmFmdD4oXCJzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2UuY29tcG9uZW50cy5Db2xsYWJvcmF0aW9uRHJhZnRcIilcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Ly8gc2luY2UgU2hhcmVBUEksIHN1bW1hcml6ZSBhbmQgQ29sbGFib3JhdGlvbkRyYWZ0IGRvZXMgbm90IGhhdmUgYSBkaXNhYmxlIHByb3BlcnR5XG5cdFx0XHRcdFx0Ly8gaGVuY2UgdGhlcmUgaXMgbm8gbmVlZCB0byBjaGVjayBpZiBpdCBpcyBkaXNiYWxlZCBvciBub3Rcblx0XHRcdFx0XHRyZXR1cm4gYWN0aW9uLmdldFZpc2libGUoKTtcblx0XHRcdFx0fSBlbHNlIGlmICghYWN0aW9uLmlzQTxJbnZpc2libGVUZXh0PihcInNhcC51aS5jb3JlLkludmlzaWJsZVRleHRcIikgJiYgIWFjdGlvbi5pc0E8VG9vbGJhclNwYWNlcj4oXCJzYXAubS5Ub29sYmFyU3BhY2VyXCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGFjdGlvbi5nZXRWaXNpYmxlKCkgJiYgKGFjdGlvbiBhcyBCdXR0b24pLmdldEVuYWJsZWQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBmaXJzdENsaWNrYWJsZUVsZW1lbnQ7XG5cdH1cblxuXHQvKipcblx0ICogRGlzYWJsZSB0aGUgYmluZGluZ3Mgb2YgYmxvY2tzIGluIE9iamVjdCBQYWdlIExheW91dCBiYXNlZCBvbiB0aGUgaXRzIG92ZXJhbGwgY29udGVudC5cblx0ICogQHBhcmFtIG9iamVjdFBhZ2UgT2JqZWN0IFBhZ2UgTGF5b3V0IGNvbnRyb2xcblx0ICovXG5cdF9kaXNhYmxlQmxvY2tzQmluZGluZ3ModGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIG9iamVjdFBhZ2U6IE9iamVjdFBhZ2VMYXlvdXQpOiB2b2lkIHtcblx0XHRjb25zdCBhU2VjdGlvbnMgPSBvYmplY3RQYWdlLmdldFNlY3Rpb25zKCk7XG5cdFx0Y29uc3QgYlVzZUljb25UYWJCYXIgPSBvYmplY3RQYWdlLmdldFVzZUljb25UYWJCYXIoKTtcblx0XHRsZXQgaVNraXAgPSAzOyAvLyAzIHNlY3Rpb25zL3N1YnNlY3Rpb25zIGFyZSBsb2FkZWQgaW5pdGlhbGx5LCB0aGUgb3RoZXJzIGFyZSBsb2FkZWQgbGF6aWx5XG5cdFx0Y29uc3QgYklzSW5FZGl0TW9kZSA9IENvbW1vblV0aWxzLmdldElzRWRpdGFibGUodGhpcy5nZXRWaWV3KCkpO1xuXHRcdGNvbnN0IGJFZGl0YWJsZUhlYWRlciA9IHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkuZWRpdGFibGVIZWFkZXJDb250ZW50O1xuXHRcdGZvciAobGV0IGlTZWN0aW9uID0gMDsgaVNlY3Rpb24gPCBhU2VjdGlvbnMubGVuZ3RoOyBpU2VjdGlvbisrKSB7XG5cdFx0XHRjb25zdCBvU2VjdGlvbiA9IGFTZWN0aW9uc1tpU2VjdGlvbl07XG5cdFx0XHRjb25zdCBhU3ViU2VjdGlvbnMgPSBvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpO1xuXHRcdFx0Zm9yIChsZXQgaVN1YlNlY3Rpb24gPSAwOyBpU3ViU2VjdGlvbiA8IGFTdWJTZWN0aW9ucy5sZW5ndGg7IGlTdWJTZWN0aW9uKyssIGlTa2lwLS0pIHtcblx0XHRcdFx0Ly8gSW4gSWNvblRhYkJhciBtb2RlIGtlZXAgdGhlIHNlY29uZCBzZWN0aW9uIGJvdW5kIGlmIHRoZXJlIGlzIGFuIGVkaXRhYmxlIGhlYWRlciBhbmQgd2UgYXJlIHN3aXRjaGluZyB0byBkaXNwbGF5IG1vZGVcblx0XHRcdFx0aWYgKGlTa2lwIDwgMSB8fCAoYlVzZUljb25UYWJCYXIgJiYgKGlTZWN0aW9uID4gMSB8fCAoaVNlY3Rpb24gPT09IDEgJiYgIWJFZGl0YWJsZUhlYWRlciAmJiAhYklzSW5FZGl0TW9kZSkpKSkge1xuXHRcdFx0XHRcdGNvbnN0IG9TdWJTZWN0aW9uID0gYVN1YlNlY3Rpb25zW2lTdWJTZWN0aW9uXTtcblx0XHRcdFx0XHRpZiAob1N1YlNlY3Rpb24uZGF0YSgpLmlzVmlzaWJpbGl0eUR5bmFtaWMgIT09IFwidHJ1ZVwiKSB7XG5cdFx0XHRcdFx0XHQvLyBTdWJTZWN0aW9uJ3MgYmluZGluZyBpcyBlbmFibGVkLlxuXHRcdFx0XHRcdFx0b1N1YlNlY3Rpb24uc2V0QmluZGluZ0NvbnRleHQodW5kZWZpbmVkKTtcblx0XHRcdFx0XHRcdGNvbnN0IGJsb2NrcyA9IG9TdWJTZWN0aW9uLmdldEJsb2NrcygpIGFzIFN1YlNlY3Rpb25CbG9ja1tdO1xuXHRcdFx0XHRcdFx0Ly8gU3ViU2VjdGlvbidzIGNvbnRlbnRzIGJpbmRpbmcgaXMgZGlzYWJsZWQuXG5cdFx0XHRcdFx0XHRibG9ja3MuZm9yRWFjaCgoYmxvY2spID0+IGJsb2NrLnNldEJpbmRpbmdDb250ZXh0KG51bGwpKTtcblx0XHRcdFx0XHRcdG9TdWJTZWN0aW9uLmdldE1vcmVCbG9ja3MoKS5mb3JFYWNoKChzdWJCbG9jaykgPT4gc3ViQmxvY2suc2V0QmluZGluZ0NvbnRleHQobnVsbCkpO1xuXHRcdFx0XHRcdFx0b1N1YlNlY3Rpb24uZ2V0QWN0aW9ucygpLmZvckVhY2goKGFjdGlvbnMpID0+IGFjdGlvbnMuc2V0QmluZGluZ0NvbnRleHQobnVsbCkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9nZXRGaXJzdEVtcHR5TWFuZGF0b3J5RmllbGRGcm9tU3ViU2VjdGlvbihhU3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10pOiBJbnB1dEJhc2UgfCB1bmRlZmluZWQge1xuXHRcdGlmIChhU3ViU2VjdGlvbnMpIHtcblx0XHRcdGZvciAoY29uc3Qgc3ViU2VjdGlvbiBvZiBhU3ViU2VjdGlvbnMpIHtcblx0XHRcdFx0Y29uc3QgYUJsb2NrcyA9IHN1YlNlY3Rpb24uZ2V0QmxvY2tzKCkgYXMgKEZvcm0gfCBGb3JtQVBJKVtdO1xuXG5cdFx0XHRcdGlmIChhQmxvY2tzKSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBibG9ja0NvbnRyb2wgb2YgYUJsb2Nrcykge1xuXHRcdFx0XHRcdFx0bGV0IGFGb3JtQ29udGFpbmVycztcblxuXHRcdFx0XHRcdFx0aWYgKGJsb2NrQ29udHJvbC5pc0E8Rm9ybT4oXCJzYXAudWkubGF5b3V0LmZvcm0uRm9ybVwiKSkge1xuXHRcdFx0XHRcdFx0XHRhRm9ybUNvbnRhaW5lcnMgPSBibG9ja0NvbnRyb2wuZ2V0Rm9ybUNvbnRhaW5lcnMoKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoYmxvY2tDb250cm9sLmdldENvbnRlbnQgJiYgYmxvY2tDb250cm9sLmdldENvbnRlbnQoKT8uaXNBPEZvcm0+KFwic2FwLnVpLmxheW91dC5mb3JtLkZvcm1cIikpIHtcblx0XHRcdFx0XHRcdFx0YUZvcm1Db250YWluZXJzID0gKGJsb2NrQ29udHJvbC5nZXRDb250ZW50KCkgYXMgRm9ybSkuZ2V0Rm9ybUNvbnRhaW5lcnMoKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoYmxvY2tDb250cm9sPy5nZXRDb250ZW50Py4oKT8uaXNBPEZvcm1BUEk+KFwic2FwLmZlLm1hY3Jvcy5mb3JtLkZvcm1BUElcIikpIHtcblx0XHRcdFx0XHRcdFx0YUZvcm1Db250YWluZXJzID0gKChibG9ja0NvbnRyb2wuZ2V0Q29udGVudCgpIGFzIEZvcm1BUEkpLmdldENvbnRlbnQoKSBhcyBGb3JtKS5nZXRGb3JtQ29udGFpbmVycygpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKGFGb3JtQ29udGFpbmVycykge1xuXHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGZvcm1Db250YWluZXIgb2YgYUZvcm1Db250YWluZXJzKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgYUZvcm1FbGVtZW50cyA9IGZvcm1Db250YWluZXIuZ2V0Rm9ybUVsZW1lbnRzKCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGFGb3JtRWxlbWVudHMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGZvciAoY29uc3QgZm9ybUVsZW1lbnQgb2YgYUZvcm1FbGVtZW50cykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhRmllbGRzID0gZm9ybUVsZW1lbnQuZ2V0RmllbGRzKCkgYXMgSW5wdXRCYXNlW107XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGVtcHR5RmllbGQgPSB0aGlzLmdldEZpcnN0RW1wdHlSZXF1aXJlZEZpZWxkKGFGaWVsZHMpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoZW1wdHlGaWVsZCkgcmV0dXJuIGVtcHR5RmllbGQ7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogVmVyaWZ5IGlmIHRoZSBmaXJzdCBmaWVsZCBpcyBlbXB0eSBhbmQgcmVxdWlyZWQuXG5cdCAqIEBwYXJhbSBmaWVsZHMgVGhlIGZpZWxkcyB0byBjaGVja1xuXHQgKiBAcmV0dXJucyBUaGUgZmlyc3QgZW1wdHkgcmVxdWlyZWQgZmllbGQgb3IgdW5kZWZpbmVkIGlmIG5vIHN1Y2ggZmllbGQgZXhpc3RzXG5cdCAqL1xuXHRnZXRGaXJzdEVtcHR5UmVxdWlyZWRGaWVsZChmaWVsZHM6IElucHV0QmFzZVtdKTogSW5wdXRCYXNlIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIWZpZWxkcyB8fCBmaWVsZHMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cblx0XHRpZiAoIWZpZWxkc1swXS5nZXRSZXF1aXJlZD8uKCkpIHJldHVybjtcblxuXHRcdGxldCBpc0VtcHR5ID0gZmFsc2U7XG5cblx0XHR0cnkge1xuXHRcdFx0aWYgKGZpZWxkc1swXS5pc0EoXCJzYXAuZmUubWFjcm9zLk11bHRpVmFsdWVGaWVsZFwiKSkge1xuXHRcdFx0XHRjb25zdCBpdGVtcyA9IChmaWVsZHNbMF0gYXMgdW5rbm93biBhcyBNdWx0aVZhbHVlRmllbGRCbG9jaykuZ2V0TXVsdGlWYWx1ZUZpZWxkKCkuZ2V0SXRlbXMoKTtcblx0XHRcdFx0aXNFbXB0eSA9IGl0ZW1zLmxlbmd0aCA9PT0gMDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gKGZpZWxkc1swXSBhcyBJbnB1dEJhc2UpLmdldFZhbHVlKCk7XG5cdFx0XHRcdGlzRW1wdHkgPSAhdmFsdWU7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdExvZy5kZWJ1ZyhgRXJyb3Igd2hlbiBjaGVja2luZyBmaWVsZCBwcm9wZXJ0aWVzOiAke2Vycm9yfWApO1xuXHRcdH1cblxuXHRcdHJldHVybiBpc0VtcHR5ID8gZmllbGRzWzBdIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgaW5pdGlhbCBmb2N1cyBpbiBlZGl0IG1vZGUuXG5cdCAqIEBwYXJhbSBhU3ViU2VjdGlvbnMgT2JqZWN0IHBhZ2Ugc3ViIHNlY3Rpb25zXG5cdCAqL1xuXHRfdXBkYXRlRm9jdXNJbkVkaXRNb2RlKGFTdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSk6IHZvaWQge1xuXHRcdHNldFRpbWVvdXQoXG5cdFx0XHRmdW5jdGlvbiAodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIpOiB2b2lkIHtcblx0XHRcdFx0Ly8gV2Ugc2V0IHRoZSBmb2N1cyBpbiBhIHRpbWVlb3V0LCBvdGhlcndpc2UgdGhlIGZvY3VzIHNvbWV0aW1lcyBnb2VzIHRvIHRoZSBUYWJCYXJcblx0XHRcdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdFx0XHRjb25zdCBvTWFuZGF0b3J5RmllbGQgPSB0aGlzLl9nZXRGaXJzdEVtcHR5TWFuZGF0b3J5RmllbGRGcm9tU3ViU2VjdGlvbihhU3ViU2VjdGlvbnMpO1xuXHRcdFx0XHRsZXQgb0ZpZWxkVG9Gb2N1cztcblx0XHRcdFx0aWYgKG9NYW5kYXRvcnlGaWVsZCkge1xuXHRcdFx0XHRcdGlmIChvTWFuZGF0b3J5RmllbGQuaXNBKFwic2FwLmZlLm1hY3Jvcy5NdWx0aVZhbHVlRmllbGRcIikpIHtcblx0XHRcdFx0XHRcdG9GaWVsZFRvRm9jdXMgPSAob01hbmRhdG9yeUZpZWxkIGFzIHVua25vd24gYXMgTXVsdGlWYWx1ZUZpZWxkQmxvY2spLmdldE11bHRpVmFsdWVGaWVsZCgpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvRmllbGRUb0ZvY3VzID0gKFxuXHRcdFx0XHRcdFx0XHRvTWFuZGF0b3J5RmllbGQgYXMgdW5rbm93biBhcyB7IGNvbnRlbnQ6IHsgZ2V0Q29udGVudEVkaXQ6IEZ1bmN0aW9uIH0gfVxuXHRcdFx0XHRcdFx0KS5jb250ZW50LmdldENvbnRlbnRFZGl0KClbMF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG9GaWVsZFRvRm9jdXMgPSB0aGlzLmdldEZpcnN0RWRpdGFibGVJbnB1dCgpID8/IHRoaXMuZ2V0Rmlyc3RDbGlja2FibGVFbGVtZW50KG9PYmplY3RQYWdlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob0ZpZWxkVG9Gb2N1cykge1xuXHRcdFx0XHRcdGNvbnN0IGZvY3VzSW5mbyA9IG9GaWVsZFRvRm9jdXMuZ2V0Rm9jdXNJbmZvKCkgYXMgeyB0YXJnZXRJbmZvOiBvYmplY3QgfTtcblx0XHRcdFx0XHRmb2N1c0luZm8udGFyZ2V0SW5mbyA9IHsgc2lsZW50OiB0cnVlIH07XG5cdFx0XHRcdFx0aWYgKG9GaWVsZFRvRm9jdXMuaXNBKFwic2FwLnVpLm1kYy5maWVsZC5GaWVsZElucHV0XCIpKSB7XG5cdFx0XHRcdFx0XHRvRmllbGRUb0ZvY3VzID0gb0ZpZWxkVG9Gb2N1cy5nZXRQYXJlbnQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0b0ZpZWxkVG9Gb2N1cy5mb2N1cyhmb2N1c0luZm8pO1xuXHRcdFx0XHR9XG5cdFx0XHR9LmJpbmQodGhpcyksXG5cdFx0XHQwXG5cdFx0KTtcblx0fVxuXG5cdF9oYW5kbGVTdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0KG9FdmVudDogVUk1RXZlbnQ8eyBzdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbiB9Pik6IHZvaWQge1xuXHRcdGNvbnN0IG9TdWJTZWN0aW9uID0gb0V2ZW50LmdldFBhcmFtZXRlcihcInN1YlNlY3Rpb25cIik7XG5cdFx0Y29uc3QgYmxvY2tzID0gb1N1YlNlY3Rpb24uZ2V0QmxvY2tzKCkgYXMgU3ViU2VjdGlvbkJsb2NrW107XG5cdFx0YmxvY2tzLmZvckVhY2goKGJsb2NrKSA9PiBibG9jay5zZXRCaW5kaW5nQ29udGV4dCh1bmRlZmluZWQpKTtcblx0XHRvU3ViU2VjdGlvbi5nZXRNb3JlQmxvY2tzKCkuZm9yRWFjaCgoc3ViQmxvY2spID0+IHN1YkJsb2NrLnNldEJpbmRpbmdDb250ZXh0KHVuZGVmaW5lZCkpO1xuXHRcdG9TdWJTZWN0aW9uLmdldEFjdGlvbnMoKS5mb3JFYWNoKChhY3Rpb25zKSA9PiBhY3Rpb25zLnNldEJpbmRpbmdDb250ZXh0KHVuZGVmaW5lZCkpO1xuXHR9XG5cblx0X29uQmFja05hdmlnYXRpb25JbkRyYWZ0KG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IHZvaWQge1xuXHRcdHRoaXMubWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cblx0XHQvLyBGdW5jdGlvbiB0byBuYXZpZ2F0ZSBiYWNrLCBvciBkaXNwbGF5IHRoZSBsYXVuY2hwYWQgaWYgd2UncmUgb24gdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIGhpc3Rvcnlcblx0XHRjb25zdCBuYXZCYWNrID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0Y29uc3QgY3VycmVudFVSTCA9IGRvY3VtZW50LlVSTDtcblx0XHRcdGhpc3RvcnkuYmFjaygpO1xuXHRcdFx0Ly8gSW4gY2FzZSB0aGVyZSBpcyBubyBwcmV2aW91cyBwYWdlIGluIHRoZSBoaXN0b3J5LCBoaXN0b3J5LmJhY2sgZG9lcyBub3RoaW5nLlxuXHRcdFx0Ly8gSW4gdGhpcyBjYXNlLCB3ZSBuZWVkIHRvIHVzZSBuYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dCwgdGhhdCB3aWxsIGRpc3BsYXkgdGhlIGhvbWUgcGFnZVxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdGlmIChkb2N1bWVudC5VUkwgPT09IGN1cnJlbnRVUkwpIHtcblx0XHRcdFx0XHR0aGlzLl9yb3V0aW5nLm5hdmlnYXRlQmFja0Zyb21Db250ZXh0KG9Db250ZXh0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgMTAwKTtcblx0XHR9O1xuXG5cdFx0aWYgKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um91dGVyUHJveHkoKS5jaGVja0lmQmFja0hhc1NhbWVDb250ZXh0KCkpIHtcblx0XHRcdC8vIEJhY2sgbmF2IHdpbGwga2VlcCB0aGUgc2FtZSBjb250ZXh0IC0tPiBubyBuZWVkIHRvIGRpc3BsYXkgdGhlIGRpYWxvZ1xuXHRcdFx0aGlzdG9yeS5iYWNrKCk7XG5cdFx0fSBlbHNlIGlmICghdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKSkge1xuXHRcdFx0Ly8gVGhpcyBvYmplY3QgcGFnZSBkb2Vzbid0IGhhdmUgYSBiaW5kaW5nIGNvbnRleHQsIGJ1dCBzdGlsbCBoYW5kbGVzIHRoZSBzaGVsbCBiYWNrIG5hdmlnYXRpb24gLS0+IHBmb3JtIHRoZSBuYXYgYmFjayBhbmQgcmVtb3ZlIHRoZSBuYXZiYWNrIGhhbmRsZXIgYXMgaXQgbWFrZXMgbm8gc2Vuc2UgYW55IGxvbmdlclxuXHRcdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKVxuXHRcdFx0XHQuZ2V0U2hlbGxTZXJ2aWNlcygpXG5cdFx0XHRcdC5zZXRCYWNrTmF2aWdhdGlvbih1bmRlZmluZWQpXG5cdFx0XHRcdC50aGVuKG5hdkJhY2spXG5cdFx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdExvZy53YXJuaW5nKFwiRXJyb3Igd2hpbGUgc2V0dGluZyBiYWNrIG5hdmlnYXRpb25cIiwgZSk7XG5cdFx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkcmFmdC5wcm9jZXNzRGF0YUxvc3NPckRyYWZ0RGlzY2FyZENvbmZpcm1hdGlvbihcblx0XHRcdFx0bmF2QmFjayxcblx0XHRcdFx0RnVuY3Rpb24ucHJvdG90eXBlLFxuXHRcdFx0XHRvQ29udGV4dCxcblx0XHRcdFx0dGhpcyxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0ZHJhZnQuTmF2aWdhdGlvblR5cGUuQmFja05hdmlnYXRpb25cblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRfb25BZnRlckJpbmRpbmcoaW5wdXRCaW5kaW5nQ29udGV4dDogQ29udGV4dCB8IHVuZGVmaW5lZCwgbVBhcmFtZXRlcnM6IEJpbmRpbmdQYXJhbXMgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHRjb25zdCB2aWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0Y29uc3Qgdmlld0xldmVsID0gdmlldz8uZ2V0Vmlld0RhdGEoKT8udmlld0xldmVsO1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBhVGFibGVzID0gdGhpcy5fZmluZFRhYmxlcygpO1xuXG5cdFx0dGhpcy5fc2lkZUVmZmVjdHMuY2xlYXJGaWVsZEdyb3Vwc1ZhbGlkaXR5KCk7XG5cblx0XHQvLyBUT0RPOiB0aGlzIGlzIG9ubHkgYSB0ZW1wIHNvbHV0aW9uIGFzIGxvbmcgYXMgdGhlIG1vZGVsIGZpeCB0aGUgY2FjaGUgaXNzdWUgYW5kIHdlIHVzZSB0aGlzIGFkZGl0aW9uYWxcblx0XHQvLyBiaW5kaW5nIHdpdGggb3duUmVxdWVzdFxuXHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0ID0gb09iamVjdFBhZ2UuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dDtcblxuXHRcdGxldCBhSUJOQWN0aW9uczogVUk1RWxlbWVudFtdID0gW107XG5cdFx0b09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvU2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24pIHtcblx0XHRcdG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1N1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uKSB7XG5cdFx0XHRcdGFJQk5BY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0SUJOQWN0aW9ucyhvU3ViU2VjdGlvbiwgYUlCTkFjdGlvbnMpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHQvLyBBc3NpZ24gaW50ZXJuYWwgYmluZGluZyBjb250ZXh0cyB0byBvRm9ybUNvbnRhaW5lcjpcblx0XHQvLyAxLiBJdCBpcyBub3QgcG9zc2libGUgdG8gYXNzaWduIHRoZSBpbnRlcm5hbCBiaW5kaW5nIGNvbnRleHQgdG8gdGhlIFhNTCBmcmFnbWVudFxuXHRcdC8vIChGb3JtQ29udGFpbmVyLmZyYWdtZW50LnhtbCkgeWV0IC0gaXQgaXMgdXNlZCBhbHJlYWR5IGZvciB0aGUgZGF0YS1zdHJ1Y3R1cmUuXG5cdFx0Ly8gMi4gQW5vdGhlciBwcm9ibGVtIGlzLCB0aGF0IEZvcm1Db250YWluZXJzIGFzc2lnbmVkIHRvIGEgJ01vcmVCbG9jaycgZG9lcyBub3QgaGF2ZSBhblxuXHRcdC8vIGludGVybmFsIG1vZGVsIGNvbnRleHQgYXQgYWxsLlxuXG5cdFx0YVRhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlKSB7XG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRcdGlmIChvSW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3JlYXRpb25Sb3dGaWVsZFZhbGlkaXR5XCIsIHt9KTtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3JlYXRpb25Sb3dDdXN0b21WYWxpZGl0eVwiLCB7fSk7XG5cblx0XHRcdFx0YUlCTkFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9UYWJsZSwgYUlCTkFjdGlvbnMpO1xuXG5cdFx0XHRcdC8vIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciBCQ1A6IDIwODAyMTgwMDRcblx0XHRcdFx0Ly8gTmVlZCB0byBmaXggd2l0aCBCTEk6IEZJT1JJVEVDSFAxLTE1Mjc0XG5cdFx0XHRcdC8vIG9ubHkgZm9yIGVkaXQgbW9kZSwgd2UgY2xlYXIgdGhlIHRhYmxlIGNhY2hlXG5cdFx0XHRcdC8vIFdvcmthcm91bmQgc3RhcnRzIGhlcmUhIVxuXHRcdFx0XHRjb25zdCBvVGFibGVSb3dCaW5kaW5nID0gb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdFx0aWYgKG9UYWJsZVJvd0JpbmRpbmcpIHtcblx0XHRcdFx0XHRpZiAoTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG9UYWJsZVJvd0JpbmRpbmcuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSkpIHtcblx0XHRcdFx0XHRcdC8vIGFwcGx5IGZvciBib3RoIGVkaXQgYW5kIGRpc3BsYXkgbW9kZSBpbiBzdGlja3lcblx0XHRcdFx0XHRcdChvVGFibGVSb3dCaW5kaW5nIGFzIHVua25vd24gYXMgeyByZW1vdmVDYWNoZXNBbmRNZXNzYWdlczogRnVuY3Rpb24gfSkucmVtb3ZlQ2FjaGVzQW5kTWVzc2FnZXMoXCJcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIFdvcmthcm91bmQgZW5kcyBoZXJlISFcblxuXHRcdFx0XHQvLyBDbGVhciB0aGUgc2VsZWN0aW9uIGluIHRoZSB0YWJsZSBhbmQgdXBkYXRlIGFjdGlvbiBlbmFibGVtZW50IGFjY29yZGluZ2x5XG5cdFx0XHRcdC8vIFdpbGwgdG8gYmUgZml4ZWQgd2l0aCBCTEk6IEZJT1JJVEVDSFAxLTI0MzE4XG5cdFx0XHRcdGNvbnN0IHRhYmxlQVBJID0gb1RhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdFx0XHRjb25zdCBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gdGFibGVBUEkgPyBKU09OLnBhcnNlKHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5vcGVyYXRpb25BdmFpbGFibGVNYXApIDoge307XG5cblx0XHRcdFx0QWN0aW9uUnVudGltZS5zZXRBY3Rpb25FbmFibGVtZW50KG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCwgW10sIFwidGFibGVcIik7XG5cblx0XHRcdFx0b1RhYmxlLmNsZWFyU2VsZWN0aW9uKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Ly9SZXRyaWV2ZSBPYmplY3QgUGFnZSBoZWFkZXIgYWN0aW9ucyBmcm9tIE9iamVjdCBQYWdlIHRpdGxlIGNvbnRyb2xcblx0XHRjb25zdCBvT2JqZWN0UGFnZVRpdGxlID0gb09iamVjdFBhZ2UuZ2V0SGVhZGVyVGl0bGUoKSBhcyBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlO1xuXHRcdGxldCBhSUJOSGVhZGVyQWN0aW9uczogVUk1RWxlbWVudFtdID0gW107XG5cdFx0YUlCTkhlYWRlckFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9PYmplY3RQYWdlVGl0bGUsIGFJQk5IZWFkZXJBY3Rpb25zKTtcblx0XHRhSUJOQWN0aW9ucyA9IGFJQk5BY3Rpb25zLmNvbmNhdChhSUJOSGVhZGVyQWN0aW9ucyk7XG5cdFx0Q29tbW9uVXRpbHMudXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkoYUlCTkFjdGlvbnMsIHRoaXMuZ2V0VmlldygpKTtcblxuXHRcdGxldCBvTW9kZWw6IE9EYXRhTW9kZWwsXG5cdFx0XHRvRmluYWxVSVN0YXRlOiBQcm9taXNlPHVua25vd24+ID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cblx0XHQvLyB0aGlzIHNob3VsZCBub3QgYmUgbmVlZGVkIGF0IHRoZSBhbGxcblx0XHQvKipcblx0XHQgKiBAcGFyYW0gb1RhYmxlXG5cdFx0ICovXG5cdFx0Y29uc3QgaGFuZGxlVGFibGVNb2RpZmljYXRpb25zID0gKG9UYWJsZTogVGFibGUpOiB2b2lkID0+IHtcblx0XHRcdGNvbnN0IG9CaW5kaW5nID0gdGhpcy5fZ2V0VGFibGVCaW5kaW5nKG9UYWJsZSksXG5cdFx0XHRcdGZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cyA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRUYWJsZUhlbHBlci5lbmFibGVGYXN0Q3JlYXRpb25Sb3coXG5cdFx0XHRcdFx0XHRvVGFibGUuZ2V0Q3JlYXRpb25Sb3coKSxcblx0XHRcdFx0XHRcdG9CaW5kaW5nLmdldFBhdGgoKSxcblx0XHRcdFx0XHRcdG9CaW5kaW5nLmdldENvbnRleHQoKSxcblx0XHRcdFx0XHRcdG9Nb2RlbCxcblx0XHRcdFx0XHRcdG9GaW5hbFVJU3RhdGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRpZiAoIW9CaW5kaW5nKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgRXhwZWN0ZWQgYmluZGluZyBtaXNzaW5nIGZvciB0YWJsZTogJHtvVGFibGUuZ2V0SWQoKX1gKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAob0JpbmRpbmcuZ2V0Q29udGV4dCgpKSB7XG5cdFx0XHRcdGZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZm5IYW5kbGVDaGFuZ2UgPSBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdFx0aWYgKG9CaW5kaW5nLmdldENvbnRleHQoKSkge1xuXHRcdFx0XHRcdFx0Zm5IYW5kbGVUYWJsZVBhdGNoRXZlbnRzKCk7XG5cdFx0XHRcdFx0XHRvQmluZGluZy5kZXRhY2hDaGFuZ2UoZm5IYW5kbGVDaGFuZ2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdFx0b0JpbmRpbmcuYXR0YWNoQ2hhbmdlKGZuSGFuZGxlQ2hhbmdlKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0aWYgKGJpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRvTW9kZWwgPSBiaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpO1xuXG5cdFx0XHQvLyBDb21wdXRlIEVkaXQgTW9kZVxuXHRcdFx0b0ZpbmFsVUlTdGF0ZSA9IHRoaXMuZWRpdEZsb3cuY29tcHV0ZU1vZGVsc0ZvckVkaXRNb2RlKGJpbmRpbmdDb250ZXh0KTtcblxuXHRcdFx0Ly8gdXBkYXRlIHJlbGF0ZWQgYXBwc1xuXHRcdFx0dGhpcy5fdXBkYXRlUmVsYXRlZEFwcHMoKTtcblxuXHRcdFx0Ly9BdHRhY2ggdGhlIHBhdGNoIHNlbnQgYW5kIHBhdGNoIGNvbXBsZXRlZCBldmVudCB0byB0aGUgb2JqZWN0IHBhZ2UgYmluZGluZyBzbyB0aGF0IHdlIGNhbiByZWFjdFxuXHRcdFx0Y29uc3Qgb0JpbmRpbmcgPSAoYmluZGluZ0NvbnRleHQuZ2V0QmluZGluZyAmJiBiaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nKCkpIHx8IGJpbmRpbmdDb250ZXh0O1xuXG5cdFx0XHQvLyBBdHRhY2ggdGhlIGV2ZW50IGhhbmRsZXIgb25seSBvbmNlIHRvIHRoZSBzYW1lIGJpbmRpbmdcblx0XHRcdGlmICh0aGlzLmN1cnJlbnRCaW5kaW5nICE9PSBvQmluZGluZykge1xuXHRcdFx0XHRvQmluZGluZy5hdHRhY2hFdmVudChcInBhdGNoU2VudFwiLCB7fSwgdGhpcy5lZGl0Rmxvdy5oYW5kbGVQYXRjaFNlbnQsIHRoaXMpO1xuXHRcdFx0XHR0aGlzLmN1cnJlbnRCaW5kaW5nID0gb0JpbmRpbmc7XG5cdFx0XHR9XG5cblx0XHRcdGFUYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSk6IHZvaWQge1xuXHRcdFx0XHQvLyBhY2Nlc3MgYmluZGluZyBvbmx5IGFmdGVyIHRhYmxlIGlzIGJvdW5kXG5cdFx0XHRcdFRhYmxlVXRpbHMud2hlbkJvdW5kKG9UYWJsZSlcblx0XHRcdFx0XHQudGhlbihoYW5kbGVUYWJsZU1vZGlmaWNhdGlvbnMpXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSB0YWJsZSB0byBiZSBib3VuZFwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgYmluZGluZyBpcyByZWFkeSBoZW5jZSBjYWxsaW5nIGl0IGluIG9uQWZ0ZXJCaW5kaW5nXG5cdFx0XHQob09iamVjdFBhZ2UgYXMgdW5rbm93biBhcyB7IF90cmlnZ2VyVmlzaWJsZVN1YlNlY3Rpb25zRXZlbnRzOiBGdW5jdGlvbiB9KS5fdHJpZ2dlclZpc2libGVTdWJTZWN0aW9uc0V2ZW50cygpO1xuXG5cdFx0XHQvL1RvIENvbXB1dGUgdGhlIEVkaXQgQmluZGluZyBvZiB0aGUgc3ViT2JqZWN0IHBhZ2UgdXNpbmcgcm9vdCBvYmplY3QgcGFnZSwgY3JlYXRlIGEgY29udGV4dCBmb3IgZHJhZnQgcm9vdCBhbmQgdXBkYXRlIHRoZSBlZGl0IGJ1dHRvbiBpbiBzdWIgT1AgdXNpbmcgdGhlIGNvbnRleHRcblx0XHRcdEFjdGlvblJ1bnRpbWUudXBkYXRlRWRpdEJ1dHRvblZpc2liaWxpdHlBbmRFbmFibGVtZW50KHRoaXMuZ2V0VmlldygpKTtcblx0XHR9XG5cdFx0Ly8gd2UgYXJlIGNsZWFyaW5nIGFueSBwcmV2aW91cyBkYXRhIGZyb20gcmVjb21tZW5kYXRpb25zIGV2ZXJ5IHRpbWUgd2UgY29tZSB0byBuZXcgT1Bcblx0XHQvLyBzbyB0aGF0IGNhY2hlZCByZWNvbW1lbmRhdGlvbnMgYXJlIG5vdCBzaG93biB0byB1c2VyXG5cdFx0aWYgKHZpZXdMZXZlbCAmJiB2aWV3TGV2ZWwgPT09IDEpIHtcblx0XHRcdG9GaW5hbFVJU3RhdGU/LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHR0aGlzLnJlY29tbWVuZGF0aW9ucy5jbGVhclJlY29tbWVuZGF0aW9ucygpO1xuXG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHR0aGlzLl91cGRhdGVBdmFpbGFibGVDYXJkcyhbXSk7XG5cdFx0dGhpcy5kaXNwbGF5Q29sbGFib3JhdGlvbk1lc3NhZ2UobVBhcmFtZXRlcnM/LnJlZGlyZWN0ZWRUb05vbkRyYWZ0KTtcblx0XHR0aGlzLl9zZXRPUE1lc3NhZ2VTdHJpcEludGVybmFsQ29udGV4dCgpO1xuXG5cdFx0Y29uc3QgYXBwbHlBcHBTdGF0ZSA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0QXBwU3RhdGVIYW5kbGVyKCkuYXBwbHlBcHBTdGF0ZSh2aWV3LmdldElkKCksIHZpZXcpO1xuXHRcdHRoaXMucGFnZVJlYWR5LndhaXRGb3IoYXBwbHlBcHBTdGF0ZSk7XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlIHRoZSBjYXJkcyB3aGVuIHRoZSBiaW5kaW5nIGlzIHJlZnJlc2hlZC5cblx0ICogQHBhcmFtIGNhcmRzIEFycmF5IG9mIGNhcmRzIHRvIGJlIHVwZGF0ZWRcblx0ICovXG5cdGFzeW5jIF91cGRhdGVBdmFpbGFibGVDYXJkcyhjYXJkczogV3JhcHBlZENhcmRbXSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGF3YWl0IHRoaXMuY29sbGFib3JhdGlvbk1hbmFnZXIuY29sbGVjdEF2YWlsYWJsZUNhcmRzKGNhcmRzKTtcblx0XHRpZiAoY2FyZHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgY2FyZE9iamVjdCA9IHRoaXMuY29sbGFib3JhdGlvbk1hbmFnZXIudXBkYXRlQ2FyZHMoY2FyZHMpO1xuXHRcdFx0Y29uc3QgcGFyZW50QXBwSWQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldElkKCk7XG5cdFx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSgpLmFkZENhcmRzVG9Db2xsYWJvcmF0aW9uTWFuYWdlcihjYXJkT2JqZWN0LCBwYXJlbnRBcHBJZCk7XG5cdFx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSgpLnNoYXJlQXZhaWxhYmxlQ2FyZHMoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHRoZSBpbnRlcm5hbCBiaW5kaW5nIGNvbnRleHQgb2YgdGhlIE1lc3NhZ2VzdHJpcCBPUC5cblx0ICovXG5cdF9zZXRPUE1lc3NhZ2VTdHJpcEludGVybmFsQ29udGV4dCgpOiB2b2lkIHtcblx0XHRjb25zdCB2aWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWxDb250ZXh0ID0gdmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdGludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcIk1lc3NhZ2VTdHJpcFwiLCB7IC4uLmludGVybmFsTW9kZWxDb250ZXh0Py5nZXRQcm9wZXJ0eShcIk1lc3NhZ2VTdHJpcFwiKSB9KTtcblx0XHRpZiAoaW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRcdChvT2JqZWN0UGFnZS5nZXRIZWFkZXJUaXRsZSgpIGFzIHVua25vd24gYXMgQ29udHJvbClcblx0XHRcdFx0Py5maW5kRWxlbWVudHModHJ1ZSwgKGVsZW06IENvbnRyb2wpID0+IGVsZW0uaXNBKFwic2FwLm0uTWVzc2FnZVN0cmlwXCIpKVxuXHRcdFx0XHQuZm9yRWFjaCgobWVzc2FnZVN0cmlwOiBVSTVFbGVtZW50KSA9PiB7XG5cdFx0XHRcdFx0bWVzc2FnZVN0cmlwLnNldEJpbmRpbmdDb250ZXh0KFxuXHRcdFx0XHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHRcblx0XHRcdFx0XHRcdFx0LmdldE1vZGVsKClcblx0XHRcdFx0XHRcdFx0LmJpbmRDb250ZXh0KHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkuX2dldE1lc3NhZ2VTdHJpcEJpbmRpbmdDb250ZXh0UGF0aCgpKVxuXHRcdFx0XHRcdFx0XHQuZ2V0Qm91bmRDb250ZXh0KCkhLFxuXHRcdFx0XHRcdFx0XCJpbnRlcm5hbFwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSk7XG5cdFx0XHQvLyBJZiB0aGUgdmlldydzIGJpbmRpbmcgY29udGV4dCBhbHJlYWR5IGhhZCBtZXNzYWdlcyB0aGF0IHdlcmUgbm90IGNsZWFyZWQsIHdlIHdvdWxkIG5lZWQgdG8gcmUtZXZhbHVhdGUgdG8gc2hvdyB0aGUgbWVzc2FnZSBzdHJpcC5cblx0XHRcdHRoaXMuX2ZuU2hvd09QTWVzc2FnZSgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTaG93IGEgbWVzc2FnZSBzdHJpcCBpZiBhIHJlZGlyZWN0aW9uIHRvIGEgbm9uLWRyYWZ0IGVsZW1lbnQgaGFzIGJlZW4gZG9uZS5cblx0ICogUmVtb3ZlIHRoZSBtZXNzYWdlIHN0cmlwIGluIGNhc2Ugd2UgbmF2aWdhdGUgdG8gYW5vdGhlciBvYmplY3QgcGFnZS5cblx0ICogQHBhcmFtIGVudGl0eU5hbWUgTmFtZSBvZiB0aGUgRW50aXR5IHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgbWVzc2FnZVxuXHQgKi9cblx0ZGlzcGxheUNvbGxhYm9yYXRpb25NZXNzYWdlKGVudGl0eU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuXHRcdGNvbnN0IHJlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblxuXHRcdGlmICh0aGlzLmNvbGxhYm9yYXRpb25NZXNzYWdlKSB7XG5cdFx0XHRNZXNzYWdpbmcucmVtb3ZlTWVzc2FnZXMoW3RoaXMuY29sbGFib3JhdGlvbk1lc3NhZ2VdKTtcblx0XHRcdGRlbGV0ZSB0aGlzLmNvbGxhYm9yYXRpb25NZXNzYWdlO1xuXHRcdH1cblxuXHRcdGlmIChlbnRpdHlOYW1lKSB7XG5cdFx0XHR0aGlzLmNvbGxhYm9yYXRpb25NZXNzYWdlID0gbmV3IE1lc3NhZ2Uoe1xuXHRcdFx0XHRtZXNzYWdlOiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiUkVST1VURURfTkFWSUdBVElPTl9UT19TQVZFRF9WRVJTSU9OXCIsIFtlbnRpdHlOYW1lXSksXG5cdFx0XHRcdHR5cGU6IE1lc3NhZ2VUeXBlLkluZm9ybWF0aW9uLFxuXHRcdFx0XHR0YXJnZXQ6IHRoaXMuZ2V0VmlldygpPy5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKClcblx0XHRcdH0pO1xuXHRcdFx0TWVzc2FnaW5nLmFkZE1lc3NhZ2VzKFt0aGlzLmNvbGxhYm9yYXRpb25NZXNzYWdlXSk7XG5cdFx0fVxuXHR9XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRhc3luYyBvblBhZ2VSZWFkeShtUGFyYW1ldGVyczogeyBmb3JjZUZvY3VzOiBib29sZWFuIH0gfCB1bmRlZmluZWQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzZXRGb2N1cyA9ICgpOiB2b2lkID0+IHtcblx0XHRcdC8vIFNldCB0aGUgZm9jdXMgdG8gdGhlIGZpcnN0IGFjdGlvbiBidXR0b24sIG9yIHRvIHRoZSBmaXJzdCBlZGl0YWJsZSBpbnB1dCBpZiBpbiBlZGl0YWJsZSBtb2RlXG5cdFx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0XHRjb25zdCBpc0luRGlzcGxheU1vZGUgPSAhQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZSh0aGlzLmdldFZpZXcoKSk7XG5cblx0XHRcdGlmIChpc0luRGlzcGxheU1vZGUpIHtcblx0XHRcdFx0Y29uc3Qgb0ZpcnN0Q2xpY2thYmxlRWxlbWVudCA9IHRoaXMuZ2V0Rmlyc3RDbGlja2FibGVFbGVtZW50KG9PYmplY3RQYWdlKTtcblx0XHRcdFx0aWYgKG9GaXJzdENsaWNrYWJsZUVsZW1lbnQpIHtcblx0XHRcdFx0XHRvRmlyc3RDbGlja2FibGVFbGVtZW50LmZvY3VzKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IG9TZWxlY3RlZFNlY3Rpb24gPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKG9PYmplY3RQYWdlLmdldFNlbGVjdGVkU2VjdGlvbigpKSBhcyBPYmplY3RQYWdlU2VjdGlvbiB8IHVuZGVmaW5lZDtcblx0XHRcdFx0aWYgKG9TZWxlY3RlZFNlY3Rpb24pIHtcblx0XHRcdFx0XHR0aGlzLl91cGRhdGVGb2N1c0luRWRpdE1vZGUob1NlbGVjdGVkU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdFx0Y29uc3QgY3R4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Ly8gc2V0dGluZyB0aGlzIG1vZGVsIGRhdGEgdG8gYmUgdXNlZCBmb3IgcmVjb21tZW5kYXRpb25zIGJpbmRpbmdcblx0XHR0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcImludGVybmFsXCIpLnNldFByb3BlcnR5KFwiL2N1cnJlbnRDdHh0XCIsIGN0eHQpO1xuXG5cdFx0Ly8gQXBwbHkgYXBwIHN0YXRlIG9ubHkgYWZ0ZXIgdGhlIHBhZ2UgaXMgcmVhZHkgd2l0aCB0aGUgZmlyc3Qgc2VjdGlvbiBzZWxlY3RlZFxuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdC8vU2hvdyBwb3B1cCB3aGlsZSBuYXZpZ2F0aW5nIGJhY2sgZnJvbSBvYmplY3QgcGFnZSBpbiBjYXNlIG9mIGRyYWZ0XG5cdFx0aWYgKG9CaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0Y29uc3QgYklzU3RpY2t5TW9kZSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChvQmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0XHRpZiAoIWJJc1N0aWNreU1vZGUpIHtcblx0XHRcdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChvVmlldyk7XG5cdFx0XHRcdGF3YWl0IG9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpLnNldEJhY2tOYXZpZ2F0aW9uKCgpID0+IHRoaXMuX29uQmFja05hdmlnYXRpb25JbkRyYWZ0KG9CaW5kaW5nQ29udGV4dCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyBkbyBub3QgcmVxdWVzdCByZWNvbW1lbmRhdGlvbnMgYWN0aW9uIGlmIHdlIGFyZSBpbiBEaXNwbGF5IG1vZGVcblx0XHRjb25zdCBpc0VkaXRhYmxlID0gQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZSh0aGlzLmdldFZpZXcoKSk7XG5cdFx0aWYgKGlzRWRpdGFibGUgJiYgb0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRhd2FpdCB0aGlzLnJlY29tbWVuZGF0aW9ucy5mZXRjaEFuZEFwcGx5UmVjb21tZW5kYXRpb25zKFt7IGNvbnRleHQ6IG9CaW5kaW5nQ29udGV4dCB9XSk7XG5cdFx0fVxuXG5cdFx0aWYgKG1QYXJhbWV0ZXJzPy5mb3JjZUZvY3VzKSB7XG5cdFx0XHRzZXRGb2N1cygpO1xuXHRcdH1cblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJlcnJvck5hdmlnYXRpb25TZWN0aW9uRmxhZ1wiLCBmYWxzZSk7XG5cdFx0dGhpcy5fY2hlY2tEYXRhUG9pbnRUaXRsZUZvckV4dGVybmFsTmF2aWdhdGlvbigpO1xuXG5cdFx0Ly9UaGUgZm9sbG93aW5nIGNvZGluZyBpcyBkb25lIHRvIG1lcmdlIGFuIG9wZW4gUEFUQ0ggYW5kIHRoZSBkcmFmdHByZXBhcmUvZHJhZnRhY3RpdmF0ZVxuXHRcdC8vcmVxdWVzdCBpbnRvIG9uZSAkYmF0Y2ggcmVxdWVzdFxuXHRcdC8vVG8gYWNoaWV2ZSB0aGlzIHRoZSAkYXV0byBxdWV1ZSBpcyBsb2NrZWQgYXQgdGhlIG1vdXNlZG93biBldmVudCAoYmVmb3JlIGZvY3Vzb3V0KSBpblxuXHRcdC8vb3JkZXIgdG8gd2FpdCBmb3IgdGhlIGRyYWZ0IHJlcXVlc3QgaXNzdWVkIGluIHRoZSBzYXZlIGJ1dHRvbnMgcHJlc3MgZXZlbnQgaGFuZGxlci5cblx0XHQvL1RoZSBxdWV1ZSBpcyByZWxlYXNlZCBhZ2FpbiBkdXJpbmcgbW91c2V1cCAoYmVmb3JlIHByZXNzKS5cblx0XHQvL1RoaXMgaXMgb25seSBwb3NzaWJsZSBvbiBub24gdG91Y2ggZGV2aWNlcyBiZWNhdXNlIG9uIHRvdWNoIGRldmljZXMgdGhlIGZvY3Vzb3V0IGFuZCBwcmVzc1xuXHRcdC8vZXZlbnRzIGFyZSBib3RoIGluaXRpYXRlZCBhdCB0b3VjaGVuZCBieSBzYXAubS5CdXR0b24uXG5cdFx0Ly9tb3VzZUhhbmRsZXJTZXQgaXMgdXNlZCB0byBlbnN1cmVzIHRoYXQgdGhlIGV2ZW50IGhhbmRsZXJzIGFyZSBhdHRhY2hlZCBvbmx5IG9uZSB0aW1lLlxuXHRcdC8vVGhlcmUgY2FuIGJlIG11bHRpcGxlIG9uUGFnZVJlYWR5IGUuZy4gd2hlbiBzd2l0Y2hpbmcgYmV0d2VlbiBlZGl0L2Rpc3BsYXkgbW9kZVxuXHRcdGlmICghdGhpcy5tZXJnZVBhdGNoRHJhZnQgJiYgIURldmljZS5zdXBwb3J0LnRvdWNoKSB7XG5cdFx0XHRjb25zdCBzYXZlQnV0dG9uID0gb1ZpZXcuYnlJZChcImZlOjpGb290ZXJCYXI6OlN0YW5kYXJkQWN0aW9uOjpTYXZlXCIpIGFzIEJ1dHRvbjtcblx0XHRcdGNvbnN0IGF1dG9RdWV1ZVVubG9jayA9ICgpOiB2b2lkID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuYXV0b1F1ZXVlTG9jaz8uaXNMb2NrZWQoKSkge1xuXHRcdFx0XHRcdHRoaXMuYXV0b1F1ZXVlTG9jay51bmxvY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRzYXZlQnV0dG9uLmRldGFjaEJyb3dzZXJFdmVudChcIm1vdXNldXBcIiwgYXV0b1F1ZXVlVW5sb2NrKTtcblx0XHRcdFx0c2F2ZUJ1dHRvbi5kZXRhY2hCcm93c2VyRXZlbnQoXCJibHVyXCIsIGF1dG9RdWV1ZVVubG9jayk7XG5cdFx0XHR9O1xuXG5cdFx0XHRzYXZlQnV0dG9uPy5hdHRhY2hCcm93c2VyRXZlbnQoXCJtb3VzZWRvd25cIiwgKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRpZiAoIXRoaXMuYXV0b1F1ZXVlTG9jaz8uaXNMb2NrZWQoKSkge1xuXHRcdFx0XHRcdHRoaXMuYXV0b1F1ZXVlTG9jayA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKCkubG9jayhcIiRhdXRvXCIpO1xuXHRcdFx0XHRcdC8vd2hlbiB0aGUgbW91c2UgaXMgZHJhZ2dlZCBhd2F5IGZyb20gdGhlIHNhdmUgYnV0dG9uIHdoaWxlIHByZXNzZWQgdGhlbiB0aGVyZSB3aWxsIGJlIG5vXG5cdFx0XHRcdFx0Ly9tb3VzZXVwIGV2ZW50IG9uIHRoZSBzYXZlIGJ1dHRvbi4gVGhlcmVmb3JlLCB0aGUgdW5sb2NraW5nIGlzIGRvbmUgb24gXCJtb3VzZXVwXCIgYW5kIFwiYmx1clwiXG5cdFx0XHRcdFx0c2F2ZUJ1dHRvbi5hdHRhY2hCcm93c2VyRXZlbnQoXCJtb3VzZXVwXCIsIGF1dG9RdWV1ZVVubG9jayk7XG5cdFx0XHRcdFx0c2F2ZUJ1dHRvbi5hdHRhY2hCcm93c2VyRXZlbnQoXCJibHVyXCIsIGF1dG9RdWV1ZVVubG9jayk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLm1lcmdlUGF0Y2hEcmFmdCA9IHRydWU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgc3RhdHVzIG9mIGVkaXQgbW9kZSBmb3Igc3RpY2t5IHNlc3Npb24uXG5cdCAqIEByZXR1cm5zIFRoZSBzdGF0dXMgb2YgZWRpdCBtb2RlIGZvciBzdGlja3kgc2Vzc2lvblxuXHQgKi9cblx0Z2V0U3RpY2t5RWRpdE1vZGUoKTogYm9vbGVhbiB7XG5cdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQgJiYgdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRsZXQgYklzU3RpY2t5RWRpdE1vZGUgPSBmYWxzZTtcblx0XHRpZiAob0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRjb25zdCBiSXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG9CaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpKTtcblx0XHRcdGlmIChiSXNTdGlja3lNb2RlKSB7XG5cdFx0XHRcdGJJc1N0aWNreUVkaXRNb2RlID0gQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZSh0aGlzLmdldFZpZXcoKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBiSXNTdGlja3lFZGl0TW9kZTtcblx0fVxuXG5cdF9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpOiBPYmplY3RQYWdlTGF5b3V0IHtcblx0XHRyZXR1cm4gdGhpcy5ieUlkKFwiZmU6Ok9iamVjdFBhZ2VcIikgYXMgT2JqZWN0UGFnZUxheW91dDtcblx0fVxuXG5cdF9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbigpOiB7IHRpdGxlOiBzdHJpbmc7IHN1YnRpdGxlOiBzdHJpbmc7IGludGVudDogc3RyaW5nOyBpY29uOiBzdHJpbmc7IGRlc2NyaXB0aW9uOiBzdHJpbmcgfSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlU3VidGl0bGUgPSBvT2JqZWN0UGFnZS5nZXRDdXN0b21EYXRhKCkuZmluZChmdW5jdGlvbiAob0N1c3RvbURhdGEpIHtcblx0XHRcdHJldHVybiBvQ3VzdG9tRGF0YS5nZXRLZXkoKSA9PT0gXCJPYmplY3RQYWdlU3VidGl0bGVcIjtcblx0XHR9KTtcblx0XHRjb25zdCBvYmplY3RQYWdlRGVzY3JpcHRpb24gPSBvT2JqZWN0UGFnZS5kYXRhKFwiT2JqZWN0UGFnZURlc2NyaXB0aW9uXCIpO1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0Y29uc3Qgcm9vdFZpZXdDb250cm9sbGVyID0gYXBwQ29tcG9uZW50LmdldFJvb3RWaWV3Q29udHJvbGxlcigpO1xuXHRcdGNvbnN0IGZuQ2xlYXJDYWNoZVRpdGxlID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0cm9vdFZpZXdDb250cm9sbGVyLmNsZWFyVGl0bGVIaWVyYXJjaHlDYWNoZShvT2JqZWN0UGFnZS5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCkgYXMgc3RyaW5nKTtcblx0XHR9O1xuXHRcdGlmIChvT2JqZWN0UGFnZVN1YnRpdGxlICYmICF0aGlzLmNsZWFyVGl0bGVIaWVyYXJjaHlDYWNoZVNldFVwKSB7XG5cdFx0XHRvT2JqZWN0UGFnZVN1YnRpdGxlLmdldEJpbmRpbmcoXCJ2YWx1ZVwiKT8uYXR0YWNoQ2hhbmdlKGZuQ2xlYXJDYWNoZVRpdGxlLCB0aGlzKTtcblx0XHRcdHRoaXMuY2xlYXJUaXRsZUhpZXJhcmNoeUNhY2hlU2V0VXAgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4ge1xuXHRcdFx0dGl0bGU6IG9PYmplY3RQYWdlLmRhdGEoXCJPYmplY3RQYWdlVGl0bGVcIikgfHwgXCJcIixcblx0XHRcdHN1YnRpdGxlOiBvT2JqZWN0UGFnZVN1YnRpdGxlICYmIG9PYmplY3RQYWdlU3VidGl0bGUuZ2V0VmFsdWUoKSxcblx0XHRcdGludGVudDogXCJcIixcblx0XHRcdGljb246IFwiXCIsXG5cdFx0XHRkZXNjcmlwdGlvbjogb2JqZWN0UGFnZURlc2NyaXB0aW9uXG5cdFx0fTtcblx0fVxuXG5cdF9leGVjdXRlSGVhZGVyU2hvcnRjdXQoc0lkOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zdCBzQnV0dG9uSWQgPSBgJHt0aGlzLmdldFZpZXcoKS5nZXRJZCgpfS0tJHtzSWR9YCxcblx0XHRcdG9CdXR0b24gPSAodGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKS5nZXRIZWFkZXJUaXRsZSgpIGFzIE9iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGUpXG5cdFx0XHRcdC5nZXRBY3Rpb25zKClcblx0XHRcdFx0LmZpbmQoKG9FbGVtZW50KSA9PiBvRWxlbWVudC5nZXRJZCgpID09PSBzQnV0dG9uSWQpO1xuXHRcdGlmIChvQnV0dG9uKSB7XG5cdFx0XHRDb21tb25VdGlscy5maXJlQnV0dG9uUHJlc3Mob0J1dHRvbik7XG5cdFx0fVxuXHR9XG5cblx0X2V4ZWN1dGVGb290ZXJTaG9ydGN1dChzSWQ6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IHNCdXR0b25JZCA9IGAke3RoaXMuZ2V0VmlldygpLmdldElkKCl9LS0ke3NJZH1gLFxuXHRcdFx0b0J1dHRvbiA9ICh0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLmdldEZvb3RlcigpIGFzIE92ZXJmbG93VG9vbGJhcikuZ2V0Q29udGVudCgpLmZpbmQoZnVuY3Rpb24gKFxuXHRcdFx0XHRvRWxlbWVudDogVUk1RWxlbWVudFxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiBvRWxlbWVudC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKSA9PT0gXCJzYXAubS5CdXR0b25cIiAmJiBvRWxlbWVudC5nZXRJZCgpID09PSBzQnV0dG9uSWQ7XG5cdFx0XHR9KTtcblx0XHRDb21tb25VdGlscy5maXJlQnV0dG9uUHJlc3Mob0J1dHRvbik7XG5cdH1cblxuXHRfZXhlY3V0ZVRhYlNob3J0Q3V0KG9FeGVjdXRpb246IFVJNUV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLFxuXHRcdFx0YVNlY3Rpb25zID0gb09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKSxcblx0XHRcdGlTZWN0aW9uSW5kZXhNYXggPSBhU2VjdGlvbnMubGVuZ3RoIC0gMSxcblx0XHRcdHNDb21tYW5kID0gKG9FeGVjdXRpb24uZ2V0U291cmNlKCkgYXMgdW5rbm93biBhcyBDb21tYW5kRXhlY3V0aW9uKS5nZXRDb21tYW5kKCk7XG5cdFx0bGV0IG5ld1NlY3Rpb24sXG5cdFx0XHRpU2VsZWN0ZWRTZWN0aW9uSW5kZXggPSBvT2JqZWN0UGFnZS5pbmRleE9mU2VjdGlvbih0aGlzLmJ5SWQob09iamVjdFBhZ2UuZ2V0U2VsZWN0ZWRTZWN0aW9uKCkhKSBhcyBPYmplY3RQYWdlU2VjdGlvbik7XG5cdFx0aWYgKGlTZWxlY3RlZFNlY3Rpb25JbmRleCAhPT0gLTEgJiYgaVNlY3Rpb25JbmRleE1heCA+IDApIHtcblx0XHRcdGlmIChzQ29tbWFuZCA9PT0gXCJOZXh0VGFiXCIpIHtcblx0XHRcdFx0aWYgKGlTZWxlY3RlZFNlY3Rpb25JbmRleCA8PSBpU2VjdGlvbkluZGV4TWF4IC0gMSkge1xuXHRcdFx0XHRcdG5ld1NlY3Rpb24gPSBhU2VjdGlvbnNbKytpU2VsZWN0ZWRTZWN0aW9uSW5kZXhdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGlTZWxlY3RlZFNlY3Rpb25JbmRleCAhPT0gMCkge1xuXHRcdFx0XHQvLyBQcmV2aW91c1RhYlxuXHRcdFx0XHRuZXdTZWN0aW9uID0gYVNlY3Rpb25zWy0taVNlbGVjdGVkU2VjdGlvbkluZGV4XTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG5ld1NlY3Rpb24pIHtcblx0XHRcdFx0b09iamVjdFBhZ2Uuc2V0U2VsZWN0ZWRTZWN0aW9uKG5ld1NlY3Rpb24pO1xuXHRcdFx0XHRuZXdTZWN0aW9uLmZvY3VzKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X2dldEZvb3RlclZpc2liaWxpdHkoKTogdm9pZCB7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBzVmlld0lkID0gdGhpcy5nZXRWaWV3KCkuZ2V0SWQoKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJtZXNzYWdlRm9vdGVyQ29udGFpbnNFcnJvcnNcIiwgZmFsc2UpO1xuXHRcdGNvbnN0IGlzSGlkZGVuRHJhZnRFbmFibGVkID0gKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKS5nZXRDYXBhYmlsaXRpZXMoKS5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdClcblx0XHRcdD8uZW5hYmxlZDtcblx0XHRNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKClcblx0XHRcdC5nZXREYXRhKClcblx0XHRcdC5mb3JFYWNoKGZ1bmN0aW9uIChvTWVzc2FnZTogTWVzc2FnZSk6IHZvaWQge1xuXHRcdFx0XHRjb25zdCBpc0Vycm9yTWVzc2FnZSA9IG9NZXNzYWdlLnZhbGlkYXRpb24gJiYgb01lc3NhZ2UuZ2V0VHlwZSgpID09PSBcIkVycm9yXCI7XG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2VWYWxpZGF0aW9uID0gaXNIaWRkZW5EcmFmdEVuYWJsZWRcblx0XHRcdFx0XHQ/IGlzRXJyb3JNZXNzYWdlXG5cdFx0XHRcdFx0OiBpc0Vycm9yTWVzc2FnZSAmJiBvTWVzc2FnZS5nZXRUYXJnZXRzKCkuc29tZSgodGFyZ2V0KSA9PiB0YXJnZXQuaW5jbHVkZXMoc1ZpZXdJZCkpO1xuXHRcdFx0XHRpZiAobWVzc2FnZVZhbGlkYXRpb24pIHtcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJtZXNzYWdlRm9vdGVyQ29udGFpbnNFcnJvcnNcIiwgdHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHR9XG5cblx0X3Nob3dNZXNzYWdlUG9wb3ZlcihlcnI/OiBzdHJpbmcsIG9SZXQ/OiB1bmtub3duKTogdW5rbm93biB7XG5cdFx0aWYgKGVycikge1xuXHRcdFx0TG9nLmVycm9yKGVycik7XG5cdFx0fVxuXHRcdGNvbnN0IGlzRWRpdE1vZGUgPSBDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKHRoaXMuZ2V0VmlldygpKTtcblx0XHRjb25zdCByb290Vmlld0NvbnRyb2xsZXIgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvb3RWaWV3Q29udHJvbGxlcigpO1xuXHRcdGNvbnN0IGN1cnJlbnRQYWdlVmlldyA9IHJvb3RWaWV3Q29udHJvbGxlci5pc0ZjbEVuYWJsZWQoKVxuXHRcdFx0PyByb290Vmlld0NvbnRyb2xsZXIuZ2V0UmlnaHRtb3N0VmlldygpXG5cdFx0XHQ6ICh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvb3RDb250YWluZXIoKSBhcyBOYXZDb250YWluZXIpLmdldEN1cnJlbnRQYWdlKCk7XG5cdFx0aWYgKGlzRWRpdE1vZGUgJiYgIWN1cnJlbnRQYWdlVmlldy5pc0EoXCJzYXAubS5NZXNzYWdlUGFnZVwiKSkge1xuXHRcdFx0Y29uc3Qgb01lc3NhZ2VCdXR0b24gPSB0aGlzLm1lc3NhZ2VCdXR0b24sXG5cdFx0XHRcdG9NZXNzYWdlUG9wb3ZlciA9IG9NZXNzYWdlQnV0dG9uLm9NZXNzYWdlUG9wb3Zlcixcblx0XHRcdFx0b0l0ZW1CaW5kaW5nID0gb01lc3NhZ2VQb3BvdmVyLmdldEJpbmRpbmcoXCJpdGVtc1wiKSBhcyBMaXN0QmluZGluZztcblxuXHRcdFx0aWYgKG9JdGVtQmluZGluZy5nZXRMZW5ndGgoKSA+IDAgJiYgIW9NZXNzYWdlUG9wb3Zlci5pc09wZW4oKSkge1xuXHRcdFx0XHRvTWVzc2FnZUJ1dHRvbi5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdFx0XHQvLyB3b3JrYXJvdW5kIHRvIGVuc3VyZSB0aGF0IG9NZXNzYWdlQnV0dG9uIGlzIHJlbmRlcmVkIHdoZW4gb3BlbkJ5IGlzIGNhbGxlZFxuXHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRvTWVzc2FnZVBvcG92ZXIub3BlbkJ5KG9NZXNzYWdlQnV0dG9uKTtcblx0XHRcdFx0fSwgMCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvUmV0O1xuXHR9XG5cblx0YXN5bmMgX2VkaXREb2N1bWVudCgpOiBQcm9taXNlPHZvaWQgfCBDb250ZXh0PiB7XG5cdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IG9Nb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIik7XG5cdFx0QnVzeUxvY2tlci5sb2NrKG9Nb2RlbCk7XG5cdFx0cmV0dXJuIHRoaXMuZWRpdEZsb3cuZWRpdERvY3VtZW50LmFwcGx5KHRoaXMuZWRpdEZsb3csIFtvQ29udGV4dF0pLmZpbmFsbHkoZnVuY3Rpb24gKCkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sob01vZGVsKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBkZWZhdWx0IHNlbWFudGljIG9iamVjdCBtYXBwaW5nIG9iamVjdC5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHByb3BlcnR5UGF0aCBUaGUgdmFsdWUgb2YgdGhlIGRhdGEgcG9pbnQgcHJvcGVydHkgcGF0aFxuXHQgKiBAcGFyYW0gc2VtYW50aWNPYmplY3QgVGhlIHNlbWFudGljIG9iamVjdFxuXHQgKiBAcmV0dXJucyBUaGUgYXJyYXkgb2YgdGhlIGRlZmF1bHQgc2VtYW50aWMgb2JqZWN0IG1hcHBpbmcgb2JqZWN0XG5cdCAqL1xuXHRfZ2V0SW1wbGljaXRTZW1hbnRpY09iamVjdE1hcHBpbmdGb3JEYXRhUG9pbnRzKFxuXHRcdHByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRcdHNlbWFudGljT2JqZWN0OiBzdHJpbmdcblx0KTogTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlPltdIHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0e1xuXHRcdFx0XHRMb2NhbFByb3BlcnR5OiB7XG5cdFx0XHRcdFx0JFByb3BlcnR5UGF0aDogcHJvcGVydHlQYXRoXG5cdFx0XHRcdH0sXG5cdFx0XHRcdFNlbWFudGljT2JqZWN0UHJvcGVydHk6IHNlbWFudGljT2JqZWN0XG5cdFx0XHR9XG5cdFx0XTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgdmFsaWRhdGlvbiBvZiB0aGUgZG9jdW1lbnRcblx0ICogT25lIG9mIHRoZSBmb2xsb3dpbmcgYWN0aW9ucyBpcyB0cmlnZ2VyZWQgb24gdGhlIGRyYWZ0IHZlcnNpb24gb2YgdGhlIGRvY3VtZW50OlxuXHQgKiAtIG9uIGEgdHJhbnNpZW50IGNvbnRleHQ6XG5cdCAqIC0gaWYgdGhlIGNvbnRleHQgZ2V0cyBkYXRhLCB3YWl0IGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIGNvbnRleHQgYW5kIGV4ZWN1dGUgdGhlIGdsb2JhbCB2YWxpZGF0aW9uXG5cdCAqIC0gaWYgbm8gZGF0YSBpcyBmb3VuZCBvbiB0aGlzIGNvbnRleHQsIG9ubHkgdGhlIHByZXBhcmVBY3Rpb24gaXMgcmVxdWVzdGVkXG5cdCAqIC0gb24gYSByZWd1bGFyIGNvbnRleHQsIHRoZSBnbG9iYWwgdmFsaWRhdGlvbiBpcyByZXF1ZXN0ZWQuXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugb2YgdGhlIGdsb2JhbCB2YWxpZGF0aW9uIG9yIHVuZGVmaW5lZCBpZiBub3QgZXhlY3V0ZWRcblx0ICovXG5cdGFzeW5jIF92YWxpZGF0ZURvY3VtZW50KCk6IFByb21pc2U8dm9pZCB8IHVua25vd25bXSB8IE9EYXRhQ29udGV4dEJpbmRpbmc+IHtcblx0XHRjb25zdCBjb250cm9sID0gVUk1RWxlbWVudC5nZXRBY3RpdmVFbGVtZW50KCkgYXMgQ29udHJvbDtcblx0XHRjb25zdCBjb250ZXh0ID0gY29udHJvbD8uZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZDtcblxuXHRcdGlmICghY29udHJvbCB8fCAhY29udGV4dCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0bGV0IGJ5UGFzc1NpZGVFZmZlY3RzID0gZmFsc2U7XG5cdFx0aWYgKGNvbnRleHQuaXNUcmFuc2llbnQoKSkge1xuXHRcdFx0aWYgKGNvbnRleHQuaGFzUGVuZGluZ0NoYW5nZXMoKSkge1xuXHRcdFx0XHRhd2FpdCBjb250ZXh0LmNyZWF0ZWQoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGJ5UGFzc1NpZGVFZmZlY3RzID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5tZXNzYWdlSGFuZGxlci5ob2xkTWVzc2FnZXNGb3JDb250cm9sKGNvbnRyb2wpO1xuXHRcdGNvbnN0IHJldCA9IGF3YWl0IHRoaXMuZXhlY3V0ZUdsb2JhbFZhbGlkYXRpb24oY29udGV4dCwgYnlQYXNzU2lkZUVmZmVjdHMpO1xuXHRcdHRoaXMubWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VzKHsgY29udHJvbCB9KTtcblx0XHRyZXR1cm4gcmV0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEV4ZWN1dGVzIHRoZSBnbG9iYWwgdmFsaWRhdGlvbiBvZiB0aGUgZHJhZnRcblx0ICogT25lIG9mIHRoZSBmb2xsb3dpbmcgYWN0aW9ucyBpcyB0cmlnZ2VyZWQgb24gdGhlIGRyYWZ0IHZlcnNpb24gb2YgdGhlIGRvY3VtZW50OlxuXHQgKiAtIHRoZSBnbG9iYWwgc2lkZSBlZmZlY3RzIGFyZSBleGVjdXRlZCBpZiB0aGVzZSBzaWRlIGVmZmVjdHMgYXJlIGRlZmluZWQgaW4gdGhlIGNvbnRleHRcblx0ICogLSB0aGUgZHJhZnQgVmFsaWRhdGlvbiBvbiB0aGUgRHJhZnRSb290IGNvbnRleHQuXG5cdCAqIEBwYXJhbSBjb250ZXh0IFRoZSBDb250ZXh0XG5cdCAqIEBwYXJhbSBieVBhc3NTaWRlRWZmZWN0cyBPbmx5IHRoZSBkcmFmdCBWYWxpZGF0aW9uIHN0ZXAgaXMgZXhlY3V0ZWRcblx0ICogQHJldHVybnMgUHJvbWlzZSBvZiB0aGUgZ2xvYmFsIHZhbGlkYXRpb25cblx0ICovXG5cdGFzeW5jIGV4ZWN1dGVHbG9iYWxWYWxpZGF0aW9uKGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBieVBhc3NTaWRlRWZmZWN0cyA9IGZhbHNlKTogUHJvbWlzZTx2b2lkIHwgdW5rbm93bltdIHwgT0RhdGFDb250ZXh0QmluZGluZz4ge1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0Ly8gdGhlIGRyYWZ0IHZhbGlkYXRpb24gaXMgdHJlYXRlZCBhcyBhIHVzZXIgaW50ZXJhY3Rpb24sIGFuZCB0aGUgc2VydmljZSBtdXN0IHJldHVybiB0cmFuc2l0aW9uIG1lc3NhZ2VzIGFnYWluIGlmIHN0aWxsIHZhbGlkXG5cdFx0dGhpcy5tZXNzYWdlSGFuZGxlci5yZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRpZiAoIWJ5UGFzc1NpZGVFZmZlY3RzKSB7XG5cdFx0XHRjb25zdCBzaWRlRWZmZWN0c1NlcnZpY2UgPSBhcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk7XG5cdFx0XHRjb25zdCBlbnRpdHlUeXBlID0gc2lkZUVmZmVjdHNTZXJ2aWNlLmdldEVudGl0eVR5cGVGcm9tQ29udGV4dChjb250ZXh0KTtcblx0XHRcdGNvbnN0IGdsb2JhbFNpZGVFZmZlY3RzID0gZW50aXR5VHlwZSA/IHNpZGVFZmZlY3RzU2VydmljZS5nZXRHbG9iYWxPRGF0YUVudGl0eVNpZGVFZmZlY3RzKGVudGl0eVR5cGUpIDogW107XG5cdFx0XHQvLyBJZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgZ2xvYmFsIFNpZGVFZmZlY3RzIGZvciB0aGUgcmVsYXRlZCBlbnRpdHksIGV4ZWN1dGUgaXQvdGhlbVxuXHRcdFx0aWYgKGdsb2JhbFNpZGVFZmZlY3RzLmxlbmd0aCkge1xuXHRcdFx0XHRhd2FpdCB0aGlzLmVkaXRGbG93LnN5bmNUYXNrKCk7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLmFsbChcblx0XHRcdFx0XHRnbG9iYWxTaWRlRWZmZWN0cy5tYXAoYXN5bmMgKHNpZGVFZmZlY3RzKSA9PiB0aGlzLl9zaWRlRWZmZWN0cy5yZXF1ZXN0U2lkZUVmZmVjdHMoc2lkZUVmZmVjdHMsIGNvbnRleHQpKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IGRyYWZ0Um9vdENvbnRleHQgPSAoYXdhaXQgQ29tbW9uVXRpbHMuY3JlYXRlUm9vdENvbnRleHQoXG5cdFx0XHRQcm9ncmFtbWluZ01vZGVsLkRyYWZ0LFxuXHRcdFx0dGhpcy5nZXRWaWV3KCksXG5cdFx0XHRhcHBDb21wb25lbnRcblx0XHQpKSBhcyBPRGF0YVY0Q29udGV4dDtcblx0XHQvL0V4ZWN1dGUgdGhlIGRyYWZ0VmFsaWRhdGlvbiBpZiB0aGVyZSBpcyBubyBnbG9iYWxTaWRlRWZmZWN0cyAoaWdub3JlIEVUYWdzIGluIGNvbGxhYm9yYXRpb24gZHJhZnQpXG5cdFx0aWYgKGRyYWZ0Um9vdENvbnRleHQpIHtcblx0XHRcdGF3YWl0IHRoaXMuZWRpdEZsb3cuc3luY1Rhc2soKTtcblx0XHRcdHJldHVybiBkcmFmdC5leGVjdXRlRHJhZnRWYWxpZGF0aW9uKGRyYWZ0Um9vdENvbnRleHQsIGFwcENvbXBvbmVudCwgdGhpcy5jb2xsYWJvcmF0aXZlRHJhZnQuaXNDb25uZWN0ZWQoKSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNhdmVzIHRoZSBkcmFmdCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudFxuXHQgKiBJZiBkYXRhIGhhcyBiZWVuIHByb3ZpZGVkIG9uIHRoZSBjcmVhdGlvbiByb3dzLCB0aGUgcmVsYXRlZCBkb2N1bWVudHMgYXJlIGNyZWF0ZWRcblx0ICogYmVmb3JlIHNhdmluZyB0aGUgZHJhZnQgdmVyc2lvbi5cblx0ICogQHBhcmFtIHNraXBCaW5kaW5nVG9WaWV3IEluZGljYXRlcyBpZiB0aGUgYmluZGluZyB0byB0aGUgdmlldyBzaG91bGQgYmUgc2tpcHBlZFxuXHQgKiBAcmV0dXJucyBQcm9taXNlXG5cdCAqL1xuXHRhc3luYyBfc2F2ZURvY3VtZW50KHNraXBCaW5kaW5nVG9WaWV3PzogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IG1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKSxcblx0XHRcdGF3YWl0Q3JlYXRlRG9jdW1lbnRzOiBQcm9taXNlPHZvaWQgfCBPRGF0YUxpc3RCaW5kaW5nPltdID0gW107XG5cdFx0Ly8gaW5kaWNhdGVzIGlmIHdlIGFyZSBjcmVhdGluZyBhIG5ldyByb3cgaW4gdGhlIE9QXG5cdFx0bGV0IGV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IgPSBmYWxzZTtcblx0XHRCdXN5TG9ja2VyLmxvY2sobW9kZWwpO1xuXHRcdHRyeSB7XG5cdFx0XHRpZiAodGhpcy5jb2xsYWJvcmF0aXZlRHJhZnQuaXNDb2xsYWJvcmF0aW9uRW5hYmxlZCgpKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Y29uc3QgZGlhbG9nQWN0aW9uID0gYXdhaXQgbmV3IENvbGxhYm9yYXRpb25EaXNjYXJkKHRoaXMuZ2V0VmlldygpLCB0cnVlKS5nZXRVc2VyQWN0aW9uKCk7XG5cdFx0XHRcdFx0Ly8gV2UgY2FuY2VsIHRoZSBhY3Rpb25cblx0XHRcdFx0XHRpZiAoZGlhbG9nQWN0aW9uID09PSBcImNhbmNlbFwiKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIFdlIGtlZXAgdGhlIGRyYWZ0IGFuZCBsZWF2ZSBmb3IgTFJcblx0XHRcdFx0XHRpZiAoZGlhbG9nQWN0aW9uID09PSBcImtlZXBEcmFmdFwiKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmNvbGxhYm9yYXRpdmVEcmFmdC5kaXNjb25uZWN0KCk7XG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLl9yb3V0aW5nLm5hdmlnYXRlQmFja0Zyb21Db250ZXh0KGNvbnRleHQpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGBTb21ldGhpbmcgd2VudCB3cm9uZyB3aXRoIGNvbGxhYm9yYXRpb24gZGlzY2FyZDogJHtlcnJ9YCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0YXdhaXQgdGhpcy5lZGl0Rmxvdy5zeW5jVGFzaygpO1xuXHRcdFx0dGhpcy5fZmluZFRhYmxlcygpLmZvckVhY2goKHRhYmxlOiBUYWJsZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBjcmVhdGlvblJvdyA9IHRhYmxlLmdldENyZWF0aW9uUm93KCk7XG5cdFx0XHRcdGNvbnN0IHRhYmxlQmluZGluZyA9IHRoaXMuX2dldFRhYmxlQmluZGluZyh0YWJsZSk7XG5cdFx0XHRcdGNvbnN0IGNvbnRleHRLZXlzID0gT2JqZWN0LmtleXMoKGNyZWF0aW9uUm93Py5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkKT8uZ2V0T2JqZWN0KCkgfHwge30pO1xuXHRcdFx0XHRpZiAoY29udGV4dEtleXMuZmlsdGVyKChrZXkpID0+ICFrZXkuc3RhcnRzV2l0aChcIkAkdWk1LlwiKSkubGVuZ3RoKSB7XG5cdFx0XHRcdFx0ZXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvciA9IHRydWU7XG5cdFx0XHRcdFx0YXdhaXRDcmVhdGVEb2N1bWVudHMucHVzaChcblx0XHRcdFx0XHRcdHRoaXMuZWRpdEZsb3dcblx0XHRcdFx0XHRcdFx0LmNyZWF0ZURvY3VtZW50KHRhYmxlQmluZGluZywge1xuXHRcdFx0XHRcdFx0XHRcdGNyZWF0aW9uTW9kZTogdGFibGUuZGF0YShcImNyZWF0aW9uTW9kZVwiKSxcblx0XHRcdFx0XHRcdFx0XHRjcmVhdGlvblJvdzogY3JlYXRpb25Sb3csXG5cdFx0XHRcdFx0XHRcdFx0Y3JlYXRlQXRFbmQ6IHRhYmxlLmRhdGEoXCJjcmVhdGVBdEVuZFwiKSA9PT0gXCJ0cnVlXCIsXG5cdFx0XHRcdFx0XHRcdFx0c2tpcFNpZGVFZmZlY3RzOiB0cnVlIC8vIHRoZSBza2lwU2lkZUVmZmVjdHMgaXMgYSBwYXJhbWV0ZXIgY3JlYXRlZCB3aGVuIHdlIGNsaWNrIHRoZSBzYXZlIGtleS4gSWYgd2UgcHJlc3MgdGhpcyBrZXksIHdlIGRvbid0IGV4ZWN1dGUgdGhlIGhhbmRsZVNpZGVFZmZlY3RzIGZ1bmNpdG9uIHRvIGF2b2lkIGJhdGNoIHJlZHVuZGFuY3lcblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0LnRoZW4oKCkgPT4gdGFibGVCaW5kaW5nKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgaXNTa2lwQmluZGluZ1RvVmlldyA9IHNraXBCaW5kaW5nVG9WaWV3IGFzIHVua25vd24gYXMgQ29tbWFuZEV4ZWN1dGlvbiRFeGVjdXRlRXZlbnQ7XG5cdFx0XHRjb25zdCBpc1N0YW5kYXJkU2F2ZSA9XG5cdFx0XHRcdGlzU2tpcEJpbmRpbmdUb1ZpZXcgJiYgdHlwZW9mIGlzU2tpcEJpbmRpbmdUb1ZpZXcgPT0gXCJvYmplY3RcIiAmJiBpc1NraXBCaW5kaW5nVG9WaWV3LmdldFNvdXJjZSgpLmdldENvbW1hbmQoKSA9PT0gXCJTYXZlXCI7XG5cblx0XHRcdGNvbnN0IGJpbmRpbmdzID0gYXdhaXQgUHJvbWlzZS5hbGwoYXdhaXRDcmVhdGVEb2N1bWVudHMpO1xuXHRcdFx0Ly8gV2UgbmVlZCB0byBlaXRoZXIgcmVqZWN0IG9yIHJlc29sdmUgYSBwcm9taXNlIGhlcmUgYW5kIHJldHVybiBpdCBzaW5jZSB0aGlzIHNhdmVcblx0XHRcdC8vIGZ1bmN0aW9uIGlzIG5vdCBvbmx5IGNhbGxlZCB3aGVuIHByZXNzaW5nIHRoZSBzYXZlIGJ1dHRvbiBpbiB0aGUgZm9vdGVyLCBidXQgYWxzb1xuXHRcdFx0Ly8gd2hlbiB0aGUgdXNlciBzZWxlY3RzIGNyZWF0ZSBvciBzYXZlIGluIGEgZGF0YWxvc3MgcG9wdXAuXG5cdFx0XHQvLyBUaGUgbG9naWMgb2YgdGhlIGRhdGFsb3NzIHBvcHVwIG5lZWRzIHRvIGRldGVjdCBpZiB0aGUgc2F2ZSBoYWQgZXJyb3JzIG9yIG5vdCBpbiBvcmRlclxuXHRcdFx0Ly8gdG8gZGVjaWRlIGlmIHRoZSBzdWJzZXF1ZW50IGFjdGlvbiAtIGxpa2UgYSBiYWNrIG5hdmlnYXRpb24gLSBoYXMgdG8gYmUgZXhlY3V0ZWQgb3Igbm90LlxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXdhaXQgdGhpcy5lZGl0Rmxvdy5zYXZlRG9jdW1lbnQoY29udGV4dCwge1xuXHRcdFx0XHRcdGJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yOiBleGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yLFxuXHRcdFx0XHRcdGJpbmRpbmdzOiBiaW5kaW5ncyBhcyB1bmtub3duIGFzIE9EYXRhTGlzdEJpbmRpbmdbXSxcblx0XHRcdFx0XHRtZXJnZVBhdGNoRHJhZnQ6IHRoaXMubWVyZ2VQYXRjaERyYWZ0LFxuXHRcdFx0XHRcdHNraXBCaW5kaW5nVG9WaWV3LFxuXHRcdFx0XHRcdGlzU3RhbmRhcmRTYXZlXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0Ly8gSWYgdGhlIHNhdmVEb2N1bWVudCBpbiBlZGl0RmxvdyByZXR1cm5zIGVycm9ycyB3ZSBuZWVkXG5cdFx0XHRcdC8vIHRvIHNob3cgdGhlIG1lc3NhZ2UgcG9wb3ZlciBoZXJlIGFuZCBlbnN1cmUgdGhhdCB0aGVcblx0XHRcdFx0Ly8gZGF0YWxvc3MgbG9naWMgZG9lcyBub3QgcGVyZm9ybSB0aGUgZm9sbG93IHVwIGZ1bmN0aW9uXG5cdFx0XHRcdC8vIGxpa2UgZS5nLiBhIGJhY2sgbmF2aWdhdGlvbiBoZW5jZSB3ZSByZXR1cm4gYSBwcm9taXNlIGFuZCByZWplY3QgaXRcblx0XHRcdFx0aWYgKGVycm9yICE9PSBSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uLkNvbnRpbnVlKSB7XG5cdFx0XHRcdFx0dGhpcy5fc2hvd01lc3NhZ2VQb3BvdmVyKGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0XHR9XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdGlmIChCdXN5TG9ja2VyLmlzTG9ja2VkKG1vZGVsKSkge1xuXHRcdFx0XHRCdXN5TG9ja2VyLnVubG9jayhtb2RlbCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgX2NhbmNlbERvY3VtZW50KG1QYXJhbWV0ZXJzOiB7IGNhbmNlbEJ1dHRvbjogc3RyaW5nIH0pOiBQcm9taXNlPENvbnRleHQgfCB2b2lkPiB7XG5cdFx0Y29uc3QgY29udGV4dCA9IHRoaXMuZ2V0VmlldygpPy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IGNhbmNlbEJ1dHRvbiA9IHRoaXMuZ2V0VmlldygpLmJ5SWQobVBhcmFtZXRlcnMuY2FuY2VsQnV0dG9uKSBhcyBCdXR0b24gfCB1bmRlZmluZWQ7IC8vdG8gZ2V0IHRoZSByZWZlcmVuY2Ugb2YgdGhlIGNhbmNlbCBidXR0b24gZnJvbSBjb21tYW5kIGV4ZWN1dGlvblxuXHRcdGNvbnN0IGxhc3RGb2N1c2VkQ29udHJvbElkID0gVUk1RWxlbWVudC5nZXRBY3RpdmVFbGVtZW50KCk/LmdldElkKCk7XG5cdFx0bGV0IHNob3VsZFNraXBEaXNjYXJkUG9wb3ZlciA9IGZhbHNlO1xuXHRcdGlmICh0aGlzLmNvbGxhYm9yYXRpdmVEcmFmdC5pc0NvbGxhYm9yYXRpb25FbmFibGVkKCkpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IGRpYWxvZ0FjdGlvbiA9IGF3YWl0IG5ldyBDb2xsYWJvcmF0aW9uRGlzY2FyZCh0aGlzLmdldFZpZXcoKSwgZmFsc2UpLmdldFVzZXJBY3Rpb24oKTtcblx0XHRcdFx0Ly8gV2UgY2FuY2VsIHRoZSBhY3Rpb25cblx0XHRcdFx0aWYgKGRpYWxvZ0FjdGlvbiA9PT0gXCJjYW5jZWxcIikge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBXZSBrZWVwIHRoZSBkcmFmdCBhbmQgbGVhdmUgZm9yIExSXG5cdFx0XHRcdGlmIChkaWFsb2dBY3Rpb24gPT09IFwia2VlcERyYWZ0XCIpIHtcblx0XHRcdFx0XHR0aGlzLmNvbGxhYm9yYXRpdmVEcmFmdC5kaXNjb25uZWN0KCk7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5fcm91dGluZy5uYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dChjb250ZXh0KTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gV2UgaGF2ZSBkaXNwbGF5ZWQgdGhlIGRpYWxvZyBhbmQgdGhlIHVzZXIgY29uZmlybWVkIHRoZSBkaXNjYXJkIC0+IFdlIHNraXAgdGhlIGRpc2NhcmQgY29uZmlybWF0aW9uXG5cdFx0XHRcdGlmIChkaWFsb2dBY3Rpb24gPT09IFwiZGlzY2FyZENvbmZpcm1lZFwiKSB7XG5cdFx0XHRcdFx0c2hvdWxkU2tpcERpc2NhcmRQb3BvdmVyID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCBnZXQgY29sbGFib3JhdGl2ZSB1c2Vyc1wiKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgaXNEb2N1bWVudE1vZGlmaWVkID1cblx0XHRcdCEhdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShVaU1vZGVsQ29uc3RhbnRzLkRvY3VtZW50TW9kaWZpZWQpIHx8ICFjb250ZXh0LmdldFByb3BlcnR5KFwiSGFzQWN0aXZlRW50aXR5XCIpO1xuXHRcdGNvbnN0IGFmdGVyQ2FuY2VsOiBGdW5jdGlvbiA9IChwcm9taXNlUmVzdWx0OiBPRGF0YVY0Q29udGV4dCkgPT4ge1xuXHRcdFx0Ly8gZm9jdXMgaXMgcmV0YWluZWQgb24gdGhlIGxhc3QgZm9jdXNlZCBlbGVtZW50XG5cdFx0XHRpZiAobGFzdEZvY3VzZWRDb250cm9sSWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKGxhc3RGb2N1c2VkQ29udHJvbElkKT8uZm9jdXMoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBwcm9taXNlUmVzdWx0O1xuXHRcdH07XG5cdFx0aWYgKFxuXHRcdFx0KHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk/LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCk/LmdldENhcGFiaWxpdGllcygpPy5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdCk/LmVuYWJsZWQgJiZcblx0XHRcdGlzRG9jdW1lbnRNb2RpZmllZFxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGRyYWZ0LnByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uKFxuXHRcdFx0XHRhZnRlckNhbmNlbCxcblx0XHRcdFx0RnVuY3Rpb24ucHJvdG90eXBlLFxuXHRcdFx0XHRjb250ZXh0LFxuXHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0ZHJhZnQuTmF2aWdhdGlvblR5cGUuQmFja05hdmlnYXRpb24sXG5cdFx0XHRcdHRydWVcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmVkaXRGbG93XG5cdFx0XHQuY2FuY2VsRG9jdW1lbnQoY29udGV4dCwgeyBjb250cm9sOiBjYW5jZWxCdXR0b24sIHNraXBEaXNjYXJkUG9wb3Zlcjogc2hvdWxkU2tpcERpc2NhcmRQb3BvdmVyIH0pXG5cdFx0XHQudGhlbigocHJvbWlzZVJlc3VsdCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYWZ0ZXJDYW5jZWwocHJvbWlzZVJlc3VsdCk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdGFzeW5jIF9hcHBseURvY3VtZW50KG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLmVkaXRGbG93LmFwcGx5RG9jdW1lbnQob0NvbnRleHQpLmNhdGNoKCgpID0+IHtcblx0XHRcdHRoaXMuX3Nob3dNZXNzYWdlUG9wb3ZlcigpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH0pO1xuXHR9XG5cblx0X3VwZGF0ZVJlbGF0ZWRBcHBzKCk6IHZvaWQge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBzaG93UmVsYXRlZEFwcHMgPSBvT2JqZWN0UGFnZS5kYXRhKFwic2hvd1JlbGF0ZWRBcHBzXCIpO1xuXHRcdGlmIChzaG93UmVsYXRlZEFwcHMgPT09IFwidHJ1ZVwiIHx8IHNob3dSZWxhdGVkQXBwcyA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuZ2V0VmlldygpKTtcblx0XHRcdENvbW1vblV0aWxzLnVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyhvT2JqZWN0UGFnZSwgYXBwQ29tcG9uZW50KTtcblx0XHR9XG5cdH1cblxuXHRfZmluZENvbnRyb2xJblN1YlNlY3Rpb24oYVBhcmVudEVsZW1lbnQ6IENvbnRyb2xbXSwgYVN1YnNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLCBhQ29udHJvbHM6IENvbnRyb2xbXSwgYklzQ2hhcnQ/OiBib29sZWFuKTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBpdGVtMSBvZiBhUGFyZW50RWxlbWVudCkge1xuXHRcdFx0bGV0IG9FbGVtZW50ID0gKGl0ZW0xIGFzIE1hY3JvQVBJKS5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gPyAoaXRlbTEgYXMgTWFjcm9BUEkpLmdldENvbnRlbnQoKSA6IHVuZGVmaW5lZDtcblx0XHRcdGlmIChiSXNDaGFydCkge1xuXHRcdFx0XHRpZiAob0VsZW1lbnQ/LmdldEFnZ3JlZ2F0aW9uKFwiaXRlbXNcIikpIHtcblx0XHRcdFx0XHRjb25zdCBpdGVtcyA9IG9FbGVtZW50LmdldEFnZ3JlZ2F0aW9uKFwiaXRlbXNcIikgYXMgQ29udHJvbFtdO1xuXHRcdFx0XHRcdGl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGl0ZW06IENvbnRyb2wpIHtcblx0XHRcdFx0XHRcdGlmIChpdGVtLmlzQTxDaGFydEJsb2NrPihcInNhcC5mZS5tYWNyb3MuQ2hhcnRcIikpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgY2hhcnRDb250cm9sID0gaXRlbS5nZXRDaGFydENvbnRyb2woKTtcblx0XHRcdFx0XHRcdFx0YUNvbnRyb2xzLnB1c2goY2hhcnRDb250cm9sKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0E8RHluYW1pY1NpZGVDb250ZW50PihcInNhcC51aS5sYXlvdXQuRHluYW1pY1NpZGVDb250ZW50XCIpKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1N1YkVsZW1lbnQgPSBvRWxlbWVudC5nZXRNYWluQ29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gb0VsZW1lbnQuZ2V0TWFpbkNvbnRlbnQoKSA6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRpZiAob1N1YkVsZW1lbnQgJiYgb1N1YkVsZW1lbnQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0b0VsZW1lbnQgPSBvU3ViRWxlbWVudFswXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gVGhlIHRhYmxlIG1heSBjdXJyZW50bHkgYmUgc2hvd24gaW4gYSBmdWxsIHNjcmVlbiBkaWFsb2csIHdlIGNhbiB0aGVuIGdldCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBUYWJsZUFQSVxuXHRcdFx0XHQvLyBjb250cm9sIGZyb20gdGhlIGN1c3RvbSBkYXRhIG9mIHRoZSBwbGFjZSBob2xkZXIgcGFuZWxcblx0XHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0EoXCJzYXAubS5QYW5lbFwiKSAmJiBvRWxlbWVudC5kYXRhKFwiRnVsbFNjcmVlblRhYmxlUGxhY2VIb2xkZXJcIikpIHtcblx0XHRcdFx0XHRvRWxlbWVudCA9IG9FbGVtZW50LmRhdGEoXCJ0YWJsZUFQSXJlZmVyZW5jZVwiKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQuaXNBICYmIG9FbGVtZW50LmlzQTxUYWJsZUFQST4oXCJzYXAuZmUubWFjcm9zLnRhYmxlLlRhYmxlQVBJXCIpKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1N1YkVsZW1lbnQgPSBvRWxlbWVudC5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gPyBvRWxlbWVudC5nZXRDb250ZW50KCkgOiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0aWYgKG9TdWJFbGVtZW50ICYmIG9TdWJFbGVtZW50LmlzQSAmJiBvU3ViRWxlbWVudC5pc0E8VGFibGU+KFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRcdFx0YUNvbnRyb2xzLnB1c2gob1N1YkVsZW1lbnQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9nZXRBbGxTdWJTZWN0aW9ucygpOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0bGV0IGFTdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSA9IFtdO1xuXHRcdG9PYmplY3RQYWdlLmdldFNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1NlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uKSB7XG5cdFx0XHRhU3ViU2VjdGlvbnMgPSBhU3ViU2VjdGlvbnMuY29uY2F0KG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBhU3ViU2VjdGlvbnM7XG5cdH1cblxuXHRfZ2V0QWxsQmxvY2tzKCk6IEVuaGFuY2VXaXRoVUk1PFN1YlNlY3Rpb25CbG9jaz5bXSB7XG5cdFx0bGV0IGFCbG9ja3M6IEVuaGFuY2VXaXRoVUk1PFN1YlNlY3Rpb25CbG9jaz5bXSA9IFtdO1xuXHRcdHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1N1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uKSB7XG5cdFx0XHRhQmxvY2tzID0gYUJsb2Nrcy5jb25jYXQob1N1YlNlY3Rpb24uZ2V0QmxvY2tzKCkgYXMgRW5oYW5jZVdpdGhVSTU8U3ViU2VjdGlvbkJsb2NrPltdKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gYUJsb2Nrcztcblx0fVxuXG5cdF9maW5kVGFibGVzKCk6IFRhYmxlW10ge1xuXHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCk7XG5cdFx0Y29uc3QgYVRhYmxlczogVGFibGVbXSA9IFtdO1xuXHRcdGZvciAobGV0IHN1YlNlY3Rpb24gPSAwOyBzdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgc3ViU2VjdGlvbisrKSB7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0QmxvY2tzKCksIGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXSwgYVRhYmxlcyk7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0TW9yZUJsb2NrcygpLCBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0sIGFUYWJsZXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gYVRhYmxlcztcblx0fVxuXG5cdF9maW5kQ2hhcnRzKCk6IENoYXJ0W10ge1xuXHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCk7XG5cdFx0Y29uc3QgYUNoYXJ0czogQ2hhcnRbXSA9IFtdO1xuXHRcdGZvciAobGV0IHN1YlNlY3Rpb24gPSAwOyBzdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgc3ViU2VjdGlvbisrKSB7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0QmxvY2tzKCksIGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXSwgYUNoYXJ0cywgdHJ1ZSk7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0TW9yZUJsb2NrcygpLCBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0sIGFDaGFydHMsIHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gYUNoYXJ0cztcblx0fVxuXG5cdF9jbG9zZVNpZGVDb250ZW50KCk6IHZvaWQge1xuXHRcdHRoaXMuX2dldEFsbEJsb2NrcygpLmZvckVhY2goZnVuY3Rpb24gKG9CbG9jazogRW5oYW5jZVdpdGhVSTU8U3ViU2VjdGlvbkJsb2NrPik6IHZvaWQge1xuXHRcdFx0Y29uc3Qgb0NvbnRlbnQgPSBvQmxvY2suZ2V0Q29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIG9CbG9jay5nZXRDb250ZW50KCk7XG5cdFx0XHRpZiAob0NvbnRlbnQgJiYgb0NvbnRlbnQuaXNBICYmIG9Db250ZW50LmlzQTxEeW5hbWljU2lkZUNvbnRlbnQ+KFwic2FwLnVpLmxheW91dC5EeW5hbWljU2lkZUNvbnRlbnRcIikpIHtcblx0XHRcdFx0aWYgKG9Db250ZW50LnNldFNob3dTaWRlQ29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG5cdFx0XHRcdFx0b0NvbnRlbnQuc2V0U2hvd1NpZGVDb250ZW50KGZhbHNlLCBmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGFydCBDb250ZXh0IGlzIHJlc29sdmVkIGZvciAxOm4gbWljcm9jaGFydHMuXG5cdCAqIEBwYXJhbSBvQ2hhcnRDb250ZXh0IFRoZSBDb250ZXh0IG9mIHRoZSBNaWNyb0NoYXJ0XG5cdCAqIEBwYXJhbSBzQ2hhcnRQYXRoIFRoZSBjb2xsZWN0aW9uUGF0aCBvZiB0aGUgdGhlIGNoYXJ0XG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIEF0dHJpYnV0ZXMgb2YgdGhlIGNoYXJ0IENvbnRleHRcblx0ICovXG5cdF9nZXRDaGFydENvbnRleHREYXRhKG9DaGFydENvbnRleHQ6IENvbnRleHQsIHNDaGFydFBhdGg6IHN0cmluZyk6IHVua25vd25bXSB7XG5cdFx0Y29uc3Qgb0NvbnRleHREYXRhID0gb0NoYXJ0Q29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRsZXQgb0NoYXJ0Q29udGV4dERhdGEgPSBbb0NvbnRleHREYXRhXTtcblx0XHRpZiAob0NoYXJ0Q29udGV4dCAmJiBzQ2hhcnRQYXRoKSB7XG5cdFx0XHRpZiAob0NvbnRleHREYXRhW3NDaGFydFBhdGhdKSB7XG5cdFx0XHRcdG9DaGFydENvbnRleHREYXRhID0gb0NvbnRleHREYXRhW3NDaGFydFBhdGhdO1xuXHRcdFx0XHRkZWxldGUgb0NvbnRleHREYXRhW3NDaGFydFBhdGhdO1xuXHRcdFx0XHRvQ2hhcnRDb250ZXh0RGF0YS5wdXNoKG9Db250ZXh0RGF0YSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvQ2hhcnRDb250ZXh0RGF0YTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTY3JvbGwgdGhlIHRhYmxlcyB0byB0aGUgcm93IHdpdGggdGhlIHNQYXRoXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzUm93UGF0aCAnc1BhdGggb2YgdGhlIHRhYmxlIHJvdydcblx0ICovXG5cblx0X3Njcm9sbFRhYmxlc1RvUm93KHNSb3dQYXRoOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5fZmluZFRhYmxlcyAmJiB0aGlzLl9maW5kVGFibGVzKCkubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2ZpbmRUYWJsZXMoKTtcblx0XHRcdGZvciAoY29uc3QgaXRlbSBvZiBhVGFibGVzKSB7XG5cdFx0XHRcdFRhYmxlU2Nyb2xsZXIuc2Nyb2xsVGFibGVUb1JvdyhpdGVtLCBzUm93UGF0aCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBtZXJnZSBzZWxlY3RlZCBjb250ZXh0cyBhbmQgZmlsdGVycy5cblx0ICogQHBhcmFtIG9QYWdlQ29udGV4dCBQYWdlIGNvbnRleHRcblx0ICogQHBhcmFtIGFMaW5lQ29udGV4dCBTZWxlY3RlZCBDb250ZXh0c1xuXHQgKiBAcGFyYW0gc0NoYXJ0UGF0aCBDb2xsZWN0aW9uIG5hbWUgb2YgdGhlIGNoYXJ0XG5cdCAqIEByZXR1cm5zIFNlbGVjdGlvbiBWYXJpYW50IE9iamVjdFxuXHQgKi9cblx0X21lcmdlTXVsdGlwbGVDb250ZXh0cyhcblx0XHRvUGFnZUNvbnRleHQ6IENvbnRleHQsXG5cdFx0YUxpbmVDb250ZXh0OiBPRGF0YVY0Q29udGV4dFtdLFxuXHRcdHNDaGFydFBhdGg6IHN0cmluZ1xuXHQpOiB7IHNlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQ7IGF0dHJpYnV0ZXM6IHVua25vd25bXSB9IHtcblx0XHRsZXQgYUF0dHJpYnV0ZXM6IHVua25vd25bXSA9IFtdLFxuXHRcdFx0YVBhZ2VBdHRyaWJ1dGVzID0gW10sXG5cdFx0XHRvQ29udGV4dCxcblx0XHRcdHNNZXRhUGF0aExpbmU6IHN0cmluZyxcblx0XHRcdHNQYXRoTGluZTtcblxuXHRcdGNvbnN0IHNQYWdlUGF0aCA9IG9QYWdlQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9QYWdlQ29udGV4dCAmJiBvUGFnZUNvbnRleHQuZ2V0TW9kZWwoKSAmJiBvUGFnZUNvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBzTWV0YVBhdGhQYWdlID0gb01ldGFNb2RlbCAmJiBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYWdlUGF0aCkucmVwbGFjZSgvXlxcLyovLCBcIlwiKTtcblxuXHRcdC8vIEdldCBzaW5nbGUgbGluZSBjb250ZXh0IGlmIG5lY2Vzc2FyeVxuXHRcdGlmIChhTGluZUNvbnRleHQgJiYgYUxpbmVDb250ZXh0Lmxlbmd0aCkge1xuXHRcdFx0b0NvbnRleHQgPSBhTGluZUNvbnRleHRbMF07XG5cdFx0XHRzUGF0aExpbmUgPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRzTWV0YVBhdGhMaW5lID0gb01ldGFNb2RlbCAmJiBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYXRoTGluZSkucmVwbGFjZSgvXlxcLyovLCBcIlwiKTtcblxuXHRcdFx0YUxpbmVDb250ZXh0LmZvckVhY2goKG9TaW5nbGVDb250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRpZiAoc0NoYXJ0UGF0aCkge1xuXHRcdFx0XHRcdGNvbnN0IG9DaGFydENvbnRleHREYXRhID0gdGhpcy5fZ2V0Q2hhcnRDb250ZXh0RGF0YShvU2luZ2xlQ29udGV4dCwgc0NoYXJ0UGF0aCk7XG5cdFx0XHRcdFx0aWYgKG9DaGFydENvbnRleHREYXRhKSB7XG5cdFx0XHRcdFx0XHRhQXR0cmlidXRlcyA9IG9DaGFydENvbnRleHREYXRhLm1hcChmdW5jdGlvbiAob1N1YkNoYXJ0Q29udGV4dERhdGE6IHVua25vd24pIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRjb250ZXh0RGF0YTogb1N1YkNoYXJ0Q29udGV4dERhdGEsXG5cdFx0XHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBgJHtzTWV0YVBhdGhQYWdlfS8ke3NDaGFydFBhdGh9YFxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFBdHRyaWJ1dGVzLnB1c2goe1xuXHRcdFx0XHRcdFx0Y29udGV4dERhdGE6IG9TaW5nbGVDb250ZXh0LmdldE9iamVjdCgpLFxuXHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBzTWV0YVBhdGhMaW5lXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRhUGFnZUF0dHJpYnV0ZXMucHVzaCh7XG5cdFx0XHRjb250ZXh0RGF0YTogb1BhZ2VDb250ZXh0LmdldE9iamVjdCgpLFxuXHRcdFx0ZW50aXR5U2V0OiBzTWV0YVBhdGhQYWdlXG5cdFx0fSk7XG5cdFx0Ly8gQWRkaW5nIFBhZ2UgQ29udGV4dCB0byBzZWxlY3Rpb24gdmFyaWFudFxuXHRcdGFQYWdlQXR0cmlidXRlcyA9IHRoaXMuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5yZW1vdmVTZW5zaXRpdmVEYXRhKGFQYWdlQXR0cmlidXRlcywgc01ldGFQYXRoUGFnZSk7XG5cdFx0Y29uc3Qgb1BhZ2VMZXZlbFNWID0gQ29tbW9uVXRpbHMuYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQobmV3IFNlbGVjdGlvblZhcmlhbnQoKSwgYVBhZ2VBdHRyaWJ1dGVzLCB0aGlzLmdldFZpZXcoKSk7XG5cdFx0YUF0dHJpYnV0ZXMgPSB0aGlzLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ucmVtb3ZlU2Vuc2l0aXZlRGF0YShhQXR0cmlidXRlcywgc01ldGFQYXRoUGFnZSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQ6IG9QYWdlTGV2ZWxTVixcblx0XHRcdGF0dHJpYnV0ZXM6IGFBdHRyaWJ1dGVzXG5cdFx0fTtcblx0fVxuXG5cdF9nZXRCYXRjaEdyb3Vwc0ZvclZpZXcoKTogc3RyaW5nW10ge1xuXHRcdGNvbnN0IG9WaWV3RGF0YSA9IHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCksXG5cdFx0XHRvQ29uZmlndXJhdGlvbnMgPSBvVmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb24sXG5cdFx0XHRhQ29uZmlndXJhdGlvbnMgPSBvQ29uZmlndXJhdGlvbnMgJiYgT2JqZWN0LmtleXMob0NvbmZpZ3VyYXRpb25zKSxcblx0XHRcdGFCYXRjaEdyb3VwcyA9IFtcIiRhdXRvLkhlcm9lc1wiLCBcIiRhdXRvLkRlY29yYXRpb25cIiwgXCIkYXV0by5Xb3JrZXJzXCJdO1xuXG5cdFx0aWYgKGFDb25maWd1cmF0aW9ucyAmJiBhQ29uZmlndXJhdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0YUNvbmZpZ3VyYXRpb25zLmZvckVhY2goZnVuY3Rpb24gKHNLZXkpIHtcblx0XHRcdFx0Y29uc3Qgb0NvbmZpZ3VyYXRpb24gPSBvQ29uZmlndXJhdGlvbnNbc0tleV0gYXMgTWljcm9DaGFydE1hbmlmZXN0Q29uZmlndXJhdGlvbjtcblx0XHRcdFx0aWYgKG9Db25maWd1cmF0aW9uLnJlcXVlc3RHcm91cElkID09PSBcIkxvbmdSdW5uZXJzXCIpIHtcblx0XHRcdFx0XHRhQmF0Y2hHcm91cHMucHVzaChcIiRhdXRvLkxvbmdSdW5uZXJzXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGFCYXRjaEdyb3Vwcztcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gaW5pdGlhbGl6ZSBwYWdpbmF0aW9uLlxuXHQgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IG9mIG9iamVjdCBwYWdlXG5cdCAqIEBwYXJhbSBpbnRlcm5hbE1vZGVsIEludGVybmFsIG1vZGVsXG5cdCAqIEBwYXJhbSBsaXN0QmluZGluZyBQYXJlbnQgbGlzdCBiaW5kaW5nIHRvIHVzZVxuXHQgKi9cblx0X2luaXRpYWxpemVQYWdpbmF0aW9uKGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBpbnRlcm5hbE1vZGVsOiBKU09OTW9kZWwsIGxpc3RCaW5kaW5nPzogT0RhdGFMaXN0QmluZGluZyk6IHZvaWQge1xuXHRcdGNvbnN0IHZpZXdMZXZlbCA9IHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkudmlld0xldmVsO1xuXHRcdGlmICh2aWV3TGV2ZWwgPiAxKSB7XG5cdFx0XHRjb25zdCBwYWdpbmF0b3JDdXJyZW50Q29udGV4dCA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvcGFnaW5hdG9yQ3VycmVudENvbnRleHRcIik7XG5cdFx0XHRpZiAocGFnaW5hdG9yQ3VycmVudENvbnRleHQpIHtcblx0XHRcdFx0Y29uc3QgYmluZGluZ1RvVXNlID0gcGFnaW5hdG9yQ3VycmVudENvbnRleHQuZ2V0QmluZGluZygpO1xuXHRcdFx0XHR0aGlzLnBhZ2luYXRvci5pbml0aWFsaXplKGJpbmRpbmdUb1VzZSwgcGFnaW5hdG9yQ3VycmVudENvbnRleHQpO1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL3BhZ2luYXRvckN1cnJlbnRDb250ZXh0XCIsIG51bGwpO1xuXHRcdFx0fSBlbHNlIGlmIChsaXN0QmluZGluZykge1xuXHRcdFx0XHR0aGlzLnBhZ2luYXRvci5pbml0aWFsaXplKGxpc3RCaW5kaW5nLCBjb250ZXh0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfY2hlY2tEYXRhUG9pbnRUaXRsZUZvckV4dGVybmFsTmF2aWdhdGlvbigpOiB2b2lkIHtcblx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgb0RhdGFQb2ludHMgPSBDb21tb25VdGlscy5nZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24oXG5cdFx0XHRvVmlldy5nZXRWaWV3RGF0YSgpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb3V0aW5nU2VydmljZSgpLmdldE91dGJvdW5kcygpXG5cdFx0KTtcblx0XHRjb25zdCBvU2hlbGxTZXJ2aWNlcyA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0U2hlbGxTZXJ2aWNlcygpO1xuXHRcdGNvbnN0IG9QYWdlQ29udGV4dCA9IG9WaWV3ICYmIG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaXNIZWFkZXJEUExpbmtWaXNpYmxlXCIsIHt9KTtcblx0XHRpZiAob1BhZ2VDb250ZXh0KSB7XG5cdFx0XHRvUGFnZUNvbnRleHRcblx0XHRcdFx0LnJlcXVlc3RPYmplY3QoKVxuXHRcdFx0XHQudGhlbihmdW5jdGlvbiAob0RhdGE6IG9iamVjdCkge1xuXHRcdFx0XHRcdHJldHVybiBmbkdldExpbmtzKG9EYXRhUG9pbnRzLCBvRGF0YSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IHJldHJpZXZlIHRoZSBsaW5rcyBmcm9tIHRoZSBzaGVsbCBzZXJ2aWNlXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBAcGFyYW0gb0Vycm9yXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gZm5PbkVycm9yKG9FcnJvcjogc3RyaW5nKTogdm9pZCB7XG5cdFx0XHRMb2cuZXJyb3Iob0Vycm9yKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBmblNldExpbmtFbmFibGVtZW50KGlkOiBzdHJpbmcsIGFTdXBwb3J0ZWRMaW5rczogeyBzdXBwb3J0ZWQ/OiBib29sZWFuIH1bXSk6IHZvaWQge1xuXHRcdFx0Y29uc3Qgc0xpbmtJZCA9IGlkO1xuXHRcdFx0Ly8gcHJvY2VzcyB2aWFibGUgbGlua3MgZnJvbSBnZXRMaW5rcyBmb3IgYWxsIGRhdGFwb2ludHMgaGF2aW5nIG91dGJvdW5kXG5cdFx0XHRpZiAoYVN1cHBvcnRlZExpbmtzICYmIGFTdXBwb3J0ZWRMaW5rcy5sZW5ndGggPT09IDEgJiYgYVN1cHBvcnRlZExpbmtzWzBdLnN1cHBvcnRlZCkge1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYGlzSGVhZGVyRFBMaW5rVmlzaWJsZS8ke3NMaW5rSWR9YCwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogQHBhcmFtIG9TdWJEYXRhUG9pbnRzXG5cdFx0ICogQHBhcmFtIG9QYWdlRGF0YVxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGZuR2V0TGlua3MoXG5cdFx0XHRvU3ViRGF0YVBvaW50czogUmVjb3JkPFxuXHRcdFx0XHRzdHJpbmcsXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogc3RyaW5nO1xuXHRcdFx0XHRcdGFjdGlvbjogc3RyaW5nO1xuXHRcdFx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZzogTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlPltdO1xuXHRcdFx0XHR9XG5cdFx0XHQ+LFxuXHRcdFx0b1BhZ2VEYXRhOiBvYmplY3Rcblx0XHQpOiB2b2lkIHtcblx0XHRcdGZvciAoY29uc3Qgc0lkIGluIG9TdWJEYXRhUG9pbnRzKSB7XG5cdFx0XHRcdGNvbnN0IG9EYXRhUG9pbnQgPSBvU3ViRGF0YVBvaW50c1tzSWRdO1xuXHRcdFx0XHRjb25zdCBvUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXHRcdFx0XHRjb25zdCBvTGluayA9IG9WaWV3LmJ5SWQoc0lkKTtcblx0XHRcdFx0aWYgKCFvTGluaykge1xuXHRcdFx0XHRcdC8vIGZvciBkYXRhIHBvaW50cyBjb25maWd1cmVkIGluIGFwcCBkZXNjcmlwdG9yIGJ1dCBub3QgYW5ub3RhdGVkIGluIHRoZSBoZWFkZXJcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBvTGlua0NvbnRleHQgPSBvTGluay5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdFx0XHRjb25zdCBvTGlua0RhdGE6IG9iamVjdCA9IG9MaW5rQ29udGV4dCAmJiBvTGlua0NvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdGxldCBvTWl4ZWRDb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IG1lcmdlKHt9LCBvUGFnZURhdGEsIG9MaW5rRGF0YSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdFx0XHRcdC8vIHByb2Nlc3Mgc2VtYW50aWMgb2JqZWN0IG1hcHBpbmdzXG5cdFx0XHRcdGlmIChvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0TWFwcGluZztcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW0gaW4gYVNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb01hcHBpbmcgPSBhU2VtYW50aWNPYmplY3RNYXBwaW5nW2l0ZW1dO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc01haW5Qcm9wZXJ0eSA9IG9NYXBwaW5nW1wiTG9jYWxQcm9wZXJ0eVwiXSFbXCIkUHJvcGVydHlQYXRoXCJdO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc01hcHBlZFByb3BlcnR5ID0gb01hcHBpbmdbXCJTZW1hbnRpY09iamVjdFByb3BlcnR5XCJdITtcblx0XHRcdFx0XHRcdGlmIChzTWFpblByb3BlcnR5ICE9PSBzTWFwcGVkUHJvcGVydHkpIHtcblx0XHRcdFx0XHRcdFx0aWYgKG9NaXhlZENvbnRleHQuaGFzT3duUHJvcGVydHkoc01haW5Qcm9wZXJ0eSkpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBvTmV3TWFwcGluZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0XHRcdFx0XHRcdFx0XHRvTmV3TWFwcGluZ1tzTWFwcGVkUHJvcGVydHldID0gb01peGVkQ29udGV4dFtzTWFpblByb3BlcnR5XTtcblx0XHRcdFx0XHRcdFx0XHRvTWl4ZWRDb250ZXh0ID0gbWVyZ2Uoe30sIG9NaXhlZENvbnRleHQsIG9OZXdNYXBwaW5nKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0XHRcdFx0XHRcdFx0XHRkZWxldGUgb01peGVkQ29udGV4dFtzTWFpblByb3BlcnR5XTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChvTWl4ZWRDb250ZXh0KSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBzS2V5IGluIG9NaXhlZENvbnRleHQpIHtcblx0XHRcdFx0XHRcdGlmICghc0tleS5zdGFydHNXaXRoKFwiX1wiKSAmJiAhc0tleS5pbmNsdWRlcyhcIm9kYXRhLmNvbnRleHRcIikpIHtcblx0XHRcdFx0XHRcdFx0b1BhcmFtc1tzS2V5XSA9IG9NaXhlZENvbnRleHRbc0tleV07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIHZhbGlkYXRlIGlmIGEgbGluayBtdXN0IGJlIHJlbmRlcmVkXG5cdFx0XHRcdG9TaGVsbFNlcnZpY2VzXG5cdFx0XHRcdFx0LmlzTmF2aWdhdGlvblN1cHBvcnRlZChbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhcmdldDoge1xuXHRcdFx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRcdGFjdGlvbjogb0RhdGFQb2ludC5hY3Rpb25cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0cGFyYW1zOiBvUGFyYW1zXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XSlcblx0XHRcdFx0XHQudGhlbigoYUxpbmtzKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZm5TZXRMaW5rRW5hYmxlbWVudChzSWQsIGFMaW5rcyk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZm5PbkVycm9yKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRoYW5kbGVycyA9IHtcblx0XHRvblByaW1hcnlBY3Rpb24oXG5cdFx0XHRvQ29udHJvbGxlcjogT2JqZWN0UGFnZUNvbnRyb2xsZXIsXG5cdFx0XHRvVmlldzogRkVWaWV3LFxuXHRcdFx0b0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0LFxuXHRcdFx0c0FjdGlvbk5hbWU6IHN0cmluZyxcblx0XHRcdG1QYXJhbWV0ZXJzOiB7XG5cdFx0XHRcdHBhcmFtZXRlclZhbHVlcz86IHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogdW5rbm93biB9W107XG5cdFx0XHRcdHNraXBQYXJhbWV0ZXJEaWFsb2c/OiBib29sZWFuO1xuXHRcdFx0XHRjb250ZXh0cz86IE9EYXRhVjRDb250ZXh0IHwgT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0bW9kZWw/OiBPRGF0YU1vZGVsO1xuXHRcdFx0XHRyZXF1aXJlc05hdmlnYXRpb24/OiBib29sZWFuO1xuXHRcdFx0XHRsYWJlbD86IHN0cmluZztcblx0XHRcdFx0aXNOYXZpZ2FibGU/OiBib29sZWFuO1xuXHRcdFx0XHRlbnRpdHlTZXROYW1lPzogc3RyaW5nO1xuXHRcdFx0XHRpbnZvY2F0aW9uR3JvdXBpbmc/OiBzdHJpbmc7XG5cdFx0XHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcD86IHN0cmluZztcblx0XHRcdFx0Y29udHJvbElkPzogc3RyaW5nO1xuXHRcdFx0XHRiU3RhdGljQWN0aW9uPzogYm9vbGVhbjtcblx0XHRcdFx0YXBwbGljYWJsZUNvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0bm90QXBwbGljYWJsZUNvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0ZW5hYmxlQXV0b1Njcm9sbD86IGJvb2xlYW47XG5cdFx0XHRcdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbj86IHN0cmluZztcblx0XHRcdH0sXG5cdFx0XHRtQ29uZGl0aW9uczoge1xuXHRcdFx0XHRwb3NpdGl2ZUFjdGlvblZpc2libGU6IGJvb2xlYW47XG5cdFx0XHRcdHBvc2l0aXZlQWN0aW9uRW5hYmxlZDogYm9vbGVhbjtcblx0XHRcdFx0ZWRpdEFjdGlvblZpc2libGU6IGJvb2xlYW47XG5cdFx0XHRcdGVkaXRBY3Rpb25FbmFibGVkOiBib29sZWFuO1xuXHRcdFx0fVxuXHRcdCk6IHZvaWQge1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBJbnZva2VzIHRoZSBwYWdlIHByaW1hcnkgYWN0aW9uIG9uIHByZXNzIG9mIEN0cmwrRW50ZXIuXG5cdFx0XHQgKi9cblx0XHRcdGNvbnN0IGlWaWV3TGV2ZWwgPSBvQ29udHJvbGxlci5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS52aWV3TGV2ZWw7XG5cdFx0XHRpZiAobUNvbmRpdGlvbnMucG9zaXRpdmVBY3Rpb25WaXNpYmxlKSB7XG5cdFx0XHRcdGlmIChtQ29uZGl0aW9ucy5wb3NpdGl2ZUFjdGlvbkVuYWJsZWQpIHtcblx0XHRcdFx0XHRvQ29udHJvbGxlci5oYW5kbGVycy5vbkNhbGxBY3Rpb24ob1ZpZXcsIHNBY3Rpb25OYW1lLCBtUGFyYW1ldGVycyk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAobUNvbmRpdGlvbnMuZWRpdEFjdGlvblZpc2libGUpIHtcblx0XHRcdFx0aWYgKG1Db25kaXRpb25zLmVkaXRBY3Rpb25FbmFibGVkKSB7XG5cdFx0XHRcdFx0b0NvbnRyb2xsZXIuX2VkaXREb2N1bWVudCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGlWaWV3TGV2ZWwgPT09IDEgJiYgQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZShvVmlldykpIHtcblx0XHRcdFx0b0NvbnRyb2xsZXIuX3NhdmVEb2N1bWVudCgpO1xuXHRcdFx0fSBlbHNlIGlmIChDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKG9WaWV3KSkge1xuXHRcdFx0XHRvQ29udHJvbGxlci5fYXBwbHlEb2N1bWVudChvQ29udGV4dCk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIE1hbmFnZXMgdGhlIGNvbnRleHQgY2hhbmdlIGV2ZW50IG9uIHRoZSB0YWJsZXMuXG5cdFx0ICogVGhlIGZvY3VzIGlzIHNldCBpZiB0aGlzIGNoYW5nZSBpcyByZWxhdGVkIHRvIGFuIGVkaXRGbG93IGFjdGlvbiBhbmRcblx0XHQgKiBhbiBldmVudCBpcyBmaXJlZCBvbiB0aGUgb2JqZWN0UGFnZSBtZXNzYWdlQnV0dG9uLlxuXHRcdCAqIEBwYXJhbSB0aGlzIFRoZSBvYmplY3RQYWdlIGNvbnRyb2xsZXJcblx0XHQgKiBAcGFyYW0gZXZlbnQgVGhlIFVJNSBldmVudFxuXHRcdCAqL1xuXHRcdGFzeW5jIG9uVGFibGVDb250ZXh0Q2hhbmdlKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyLCBldmVudDogVUk1RXZlbnQ8e30sIFRhYmxlQVBJPik6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0Y29uc3QgdGFibGVBUEkgPSBldmVudC5nZXRTb3VyY2UoKTtcblx0XHRcdGNvbnN0IHRhYmxlID0gdGFibGVBUEkuY29udGVudDtcblx0XHRcdGNvbnN0IGN1cnJlbnRBY3Rpb25Qcm9taXNlID0gdGhpcy5lZGl0Rmxvdy5nZXRDdXJyZW50QWN0aW9uUHJvbWlzZSgpO1xuXHRcdFx0Y29uc3QgdGFibGVDb250ZXh0cyA9IHRoaXMuX2dldFRhYmxlQmluZGluZyh0YWJsZSk/LmdldEN1cnJlbnRDb250ZXh0cygpO1xuXG5cdFx0XHRpZiAoY3VycmVudEFjdGlvblByb21pc2UgJiYgdGFibGVDb250ZXh0cz8ubGVuZ3RoKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Y29uc3QgYWN0aW9uUmVzcG9uc2UgPSBhd2FpdCBjdXJyZW50QWN0aW9uUHJvbWlzZTtcblx0XHRcdFx0XHRpZiAoYWN0aW9uUmVzcG9uc2U/LmNvbnRyb2xJZCA9PT0gdGFibGUuZ2V0SWQoKSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgYWN0aW9uRGF0YSA9IGFjdGlvblJlc3BvbnNlLm9EYXRhO1xuXHRcdFx0XHRcdFx0Y29uc3Qga2V5cyA9IGFjdGlvblJlc3BvbnNlLmtleXM7XG5cdFx0XHRcdFx0XHRjb25zdCBuZXdJdGVtID0gdGFibGVDb250ZXh0cy5maW5kSW5kZXgoKHRhYmxlQ29udGV4dDogQ29udGV4dCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCB0YWJsZURhdGEgPSB0YWJsZUNvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBrZXlzLmV2ZXJ5KChrZXk6IHN0cmluZykgPT4gdGFibGVEYXRhW2tleV0gPT09IGFjdGlvbkRhdGFba2V5XSk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGlmIChuZXdJdGVtICE9PSAtMSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBkaWFsb2cgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0T3BlbkRpYWxvZ3MoKS5maW5kKChkaWFsb2cpID0+IGRpYWxvZy5kYXRhKFwiRnVsbFNjcmVlbkRpYWxvZ1wiKSAhPT0gdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdGlmIChkaWFsb2cpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBieSBkZXNpZ24sIGEgc2FwLm0uZGlhbG9nIHNldCB0aGUgZm9jdXMgdG8gdGhlIHByZXZpb3VzIGZvY3VzZWQgZWxlbWVudCB3aGVuIGNsb3NpbmcuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gd2Ugc2hvdWxkIHdhaXQgZm9yIHRoZSBkaWFsb2cgdG8gYmUgY2xvc2VkIGJlZm9yZSBzZXQgdGhlIGZvY3VzIHRvIGFub3RoZXIgZWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdGRpYWxvZy5hdHRhY2hFdmVudE9uY2UoXCJhZnRlckNsb3NlXCIsICgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdHRhYmxlLmZvY3VzUm93KG5ld0l0ZW0sIHRydWUpO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHRhYmxlLmZvY3VzUm93KG5ld0l0ZW0sIHRydWUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHRoaXMuZWRpdEZsb3cuZGVsZXRlQ3VycmVudEFjdGlvblByb21pc2UoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoYEFuIGVycm9yIG9jY3VycyB3aGlsZSBzY3JvbGxpbmcgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgSXRlbTogJHtlfWApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyBmaXJlIE1vZGVsQ29udGV4dENoYW5nZSBvbiB0aGUgbWVzc2FnZSBidXR0b24gd2hlbmV2ZXIgdGhlIHRhYmxlIGNvbnRleHQgY2hhbmdlc1xuXHRcdFx0dGhpcy5tZXNzYWdlQnV0dG9uLmZpcmVNb2RlbENvbnRleHRDaGFuZ2UoKTtcblx0XHR9LFxuXG5cdFx0YXN5bmMgb25DYWxsQWN0aW9uKFxuXHRcdFx0b1ZpZXc6IEZFVmlldyxcblx0XHRcdHNBY3Rpb25OYW1lOiBzdHJpbmcsXG5cdFx0XHRtUGFyYW1ldGVyczoge1xuXHRcdFx0XHRwYXJhbWV0ZXJWYWx1ZXM/OiB7IG5hbWU6IHN0cmluZzsgdmFsdWU6IHVua25vd24gfVtdO1xuXHRcdFx0XHRza2lwUGFyYW1ldGVyRGlhbG9nPzogYm9vbGVhbjtcblx0XHRcdFx0Y29udGV4dHM/OiBPRGF0YVY0Q29udGV4dCB8IE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRcdG1vZGVsPzogT0RhdGFNb2RlbDtcblx0XHRcdFx0cmVxdWlyZXNOYXZpZ2F0aW9uPzogYm9vbGVhbjtcblx0XHRcdFx0bGFiZWw/OiBzdHJpbmc7XG5cdFx0XHRcdGlzTmF2aWdhYmxlPzogYm9vbGVhbjtcblx0XHRcdFx0ZW50aXR5U2V0TmFtZT86IHN0cmluZztcblx0XHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nPzogc3RyaW5nO1xuXHRcdFx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA/OiBzdHJpbmc7XG5cdFx0XHRcdGNvbnRyb2xJZD86IHN0cmluZztcblx0XHRcdFx0YlN0YXRpY0FjdGlvbj86IGJvb2xlYW47XG5cdFx0XHRcdGFwcGxpY2FibGVDb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRcdG5vdEFwcGxpY2FibGVDb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRcdGVuYWJsZUF1dG9TY3JvbGw/OiBib29sZWFuO1xuXHRcdFx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24/OiBzdHJpbmc7XG5cdFx0XHR9XG5cdFx0KTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0XHRjb25zdCBvQ29udHJvbGxlciA9IG9WaWV3LmdldENvbnRyb2xsZXIoKSBhcyBPYmplY3RQYWdlQ29udHJvbGxlcjtcblxuXHRcdFx0Ly8gV2FpdCBmb3IgVkggdmFsdWVzIHRvIGJlIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIHRoZSBhY3Rpb25cblx0XHRcdGF3YWl0IG9Db250cm9sbGVyLmVkaXRGbG93LnN5bmNUYXNrKCk7XG5cblx0XHRcdHJldHVybiBvQ29udHJvbGxlci5lZGl0Rmxvd1xuXHRcdFx0XHQuaW52b2tlQWN0aW9uKHNBY3Rpb25OYW1lLCBtUGFyYW1ldGVycylcblx0XHRcdFx0LnRoZW4ob0NvbnRyb2xsZXIuX3Nob3dNZXNzYWdlUG9wb3Zlci5iaW5kKG9Db250cm9sbGVyLCB1bmRlZmluZWQpKVxuXHRcdFx0XHQuY2F0Y2gob0NvbnRyb2xsZXIuX3Nob3dNZXNzYWdlUG9wb3Zlci5iaW5kKG9Db250cm9sbGVyKSk7XG5cdFx0fSxcblx0XHRvbkRhdGFQb2ludFRpdGxlUHJlc3NlZChcblx0XHRcdG9Db250cm9sbGVyOiBPYmplY3RQYWdlQ29udHJvbGxlcixcblx0XHRcdG9Tb3VyY2U6IENvbnRyb2wsXG5cdFx0XHRvTWFuaWZlc3RPdXRib3VuZDogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RPdXRib3VuZEVudHJ5Pixcblx0XHRcdHNDb250cm9sQ29uZmlnOiBzdHJpbmcsXG5cdFx0XHRzQ29sbGVjdGlvblBhdGg6IHN0cmluZ1xuXHRcdCk6IHZvaWQge1xuXHRcdFx0b01hbmlmZXN0T3V0Ym91bmQgPSB0eXBlb2Ygb01hbmlmZXN0T3V0Ym91bmQgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKG9NYW5pZmVzdE91dGJvdW5kKSA6IG9NYW5pZmVzdE91dGJvdW5kO1xuXHRcdFx0Y29uc3Qgb1RhcmdldEluZm8gPSBvTWFuaWZlc3RPdXRib3VuZFtzQ29udHJvbENvbmZpZ10sXG5cdFx0XHRcdG9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHQgPSBvU291cmNlLmdldEJpbmRpbmdDb250ZXh0KCkhLFxuXHRcdFx0XHRzTWV0YVBhdGggPSBvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0XG5cdFx0XHRcdFx0LmdldE1vZGVsKClcblx0XHRcdFx0XHQuZ2V0TWV0YU1vZGVsKClcblx0XHRcdFx0XHQuZ2V0TWV0YVBhdGgob0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdFx0bGV0IGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBDb21tb25VdGlscy5nZXRTZW1hbnRpY09iamVjdE1hcHBpbmcob1RhcmdldEluZm8pLFxuXHRcdFx0XHRhTmF2aWdhdGlvbkRhdGEgPSBvQ29udHJvbGxlci5fZ2V0Q2hhcnRDb250ZXh0RGF0YShvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0LCBzQ29sbGVjdGlvblBhdGgpLFxuXHRcdFx0XHRhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnM7XG5cblx0XHRcdGFOYXZpZ2F0aW9uRGF0YSA9IGFOYXZpZ2F0aW9uRGF0YS5tYXAoZnVuY3Rpb24gKG9OYXZpZ2F0aW9uRGF0YTogdW5rbm93bikge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGRhdGE6IG9OYXZpZ2F0aW9uRGF0YSxcblx0XHRcdFx0XHRtZXRhUGF0aDogc01ldGFQYXRoICsgKHNDb2xsZWN0aW9uUGF0aCA/IGAvJHtzQ29sbGVjdGlvblBhdGh9YCA6IFwiXCIpXG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblx0XHRcdGlmIChvVGFyZ2V0SW5mbyAmJiBvVGFyZ2V0SW5mby5wYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdGNvbnN0IG9QYXJhbXMgPSBvVGFyZ2V0SW5mby5wYXJhbWV0ZXJzICYmIG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24uZ2V0T3V0Ym91bmRQYXJhbXMob1RhcmdldEluZm8ucGFyYW1ldGVycyk7XG5cdFx0XHRcdGlmIChPYmplY3Qua2V5cyhvUGFyYW1zKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0YWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzID0gb1BhcmFtcztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly8gQ2hlY2sgaWYgaW1wbGljaXQgc2VtYW50aWMgb2JqZWN0IG1hcHBpbmcgaXMgbmVlZGVkXG5cdFx0XHRpZiAoYVNlbWFudGljT2JqZWN0TWFwcGluZy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0Y29uc3QgY3VzdG9tRGF0YSA9IG9Tb3VyY2UuZ2V0Q3VzdG9tRGF0YSgpLmZpbmQoKGRhdGEpID0+IGRhdGEuZ2V0S2V5KCkgPT09IFwiVmFsdWVQcm9wZXJ0eVBhdGhcIik7XG5cdFx0XHRcdGlmIChjdXN0b21EYXRhKSB7XG5cdFx0XHRcdFx0YVNlbWFudGljT2JqZWN0TWFwcGluZyA9IG9Db250cm9sbGVyLl9nZXRJbXBsaWNpdFNlbWFudGljT2JqZWN0TWFwcGluZ0ZvckRhdGFQb2ludHMoXG5cdFx0XHRcdFx0XHRjdXN0b21EYXRhLmdldFZhbHVlKCksXG5cdFx0XHRcdFx0XHRvVGFyZ2V0SW5mby5zZW1hbnRpY09iamVjdFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKG9UYXJnZXRJbmZvICYmIG9UYXJnZXRJbmZvLnNlbWFudGljT2JqZWN0ICYmIG9UYXJnZXRJbmZvLmFjdGlvbikge1xuXHRcdFx0XHRvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlKG9UYXJnZXRJbmZvLnNlbWFudGljT2JqZWN0LCBvVGFyZ2V0SW5mby5hY3Rpb24sIHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM6IGFOYXZpZ2F0aW9uRGF0YSxcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdE1hcHBpbmc6IGFTZW1hbnRpY09iamVjdE1hcHBpbmcsXG5cdFx0XHRcdFx0YWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzOiBhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnNcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFRyaWdnZXJzIGFuIG91dGJvdW5kIG5hdmlnYXRpb24gd2hlbiBhIHVzZXIgY2hvb3NlcyB0aGUgY2hldnJvbi5cblx0XHQgKiBAcGFyYW0gb0NvbnRyb2xsZXJcblx0XHQgKiBAcGFyYW0gc091dGJvdW5kVGFyZ2V0IE5hbWUgb2YgdGhlIG91dGJvdW5kIHRhcmdldCAobmVlZHMgdG8gYmUgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QpXG5cdFx0ICogQHBhcmFtIG9Db250ZXh0IFRoZSBjb250ZXh0IHRoYXQgY29udGFpbnMgdGhlIGRhdGEgZm9yIHRoZSB0YXJnZXQgYXBwXG5cdFx0ICogQHBhcmFtIHNDcmVhdGVQYXRoIENyZWF0ZSBwYXRoIHdoZW4gdGhlIGNoZXZyb24gaXMgY3JlYXRlZC5cblx0XHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIG9uY2UgdGhlIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmVkICg/Pz8gbWF5YmUgb25seSBvbmNlIGZpbmlzaGVkPylcblx0XHQgKiBAZmluYWxcblx0XHQgKi9cblx0XHRhc3luYyBvbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQoXG5cdFx0XHRvQ29udHJvbGxlcjogT2JqZWN0UGFnZUNvbnRyb2xsZXIsXG5cdFx0XHRzT3V0Ym91bmRUYXJnZXQ6IHN0cmluZyxcblx0XHRcdG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0XHRcdHNDcmVhdGVQYXRoOiBzdHJpbmdcblx0XHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRcdHJldHVybiBvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZChvQ29udHJvbGxlciwgc091dGJvdW5kVGFyZ2V0LCBvQ29udGV4dCwgc0NyZWF0ZVBhdGgpO1xuXHRcdH0sXG5cblx0XHRvbk5hdmlnYXRlQ2hhbmdlKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyLCBvRXZlbnQ6IFVJNUV2ZW50PHsgc3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24gfT4pOiB2b2lkIHtcblx0XHRcdC8vd2lsbCBiZSBjYWxsZWQgYWx3YXlzIHdoZW4gd2UgY2xpY2sgb24gYSBzZWN0aW9uIHRhYlxuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0dGhpcy5iU2VjdGlvbk5hdmlnYXRlZCA9IHRydWU7XG5cblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdENvbW1vblV0aWxzLmdldElzRWRpdGFibGUodGhpcy5nZXRWaWV3KCkpICYmXG5cdFx0XHRcdHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkuc2VjdGlvbkxheW91dCA9PT0gXCJUYWJzXCIgJiZcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiZXJyb3JOYXZpZ2F0aW9uU2VjdGlvbkZsYWdcIikgPT09IGZhbHNlXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3Qgb1N1YlNlY3Rpb24gPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwic3ViU2VjdGlvblwiKTtcblx0XHRcdFx0dGhpcy5fdXBkYXRlRm9jdXNJbkVkaXRNb2RlKFtvU3ViU2VjdGlvbl0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b25WYXJpYW50U2VsZWN0ZWQ6IGZ1bmN0aW9uICh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdH0sXG5cdFx0b25WYXJpYW50U2F2ZWQ6IGZ1bmN0aW9uICh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0Ly9UT0RPOiBTaG91bGQgcmVtb3ZlIHRoaXMgc2V0VGltZU91dCBvbmNlIFZhcmlhbnQgTWFuYWdlbWVudCBwcm92aWRlcyBhbiBhcGkgdG8gZmV0Y2ggdGhlIGN1cnJlbnQgdmFyaWFudCBrZXkgb24gc2F2ZVxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdH0sIDIwMDApO1xuXHRcdH0sXG5cdFx0bmF2aWdhdGVUb1N1YlNlY3Rpb246IGZ1bmN0aW9uIChvQ29udHJvbGxlcjogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIHZEZXRhaWxDb25maWc6IHN0cmluZyB8IG9iamVjdCk6IHZvaWQge1xuXHRcdFx0Y29uc3Qgb0RldGFpbENvbmZpZyA9IHR5cGVvZiB2RGV0YWlsQ29uZmlnID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZSh2RGV0YWlsQ29uZmlnKSA6IHZEZXRhaWxDb25maWc7XG5cdFx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IG9Db250cm9sbGVyLmdldFZpZXcoKS5ieUlkKFwiZmU6Ok9iamVjdFBhZ2VcIikgYXMgT2JqZWN0UGFnZUxheW91dDtcblx0XHRcdGxldCBvU2VjdGlvbjtcblx0XHRcdGxldCBvU3ViU2VjdGlvbjtcblx0XHRcdGlmIChvRGV0YWlsQ29uZmlnLnNlY3Rpb25JZCkge1xuXHRcdFx0XHRvU2VjdGlvbiA9IG9Db250cm9sbGVyLmdldFZpZXcoKS5ieUlkKG9EZXRhaWxDb25maWcuc2VjdGlvbklkKSBhcyBPYmplY3RQYWdlU2VjdGlvbjtcblx0XHRcdFx0b1N1YlNlY3Rpb24gPSAoXG5cdFx0XHRcdFx0b0RldGFpbENvbmZpZy5zdWJTZWN0aW9uSWRcblx0XHRcdFx0XHRcdD8gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmJ5SWQob0RldGFpbENvbmZpZy5zdWJTZWN0aW9uSWQpXG5cdFx0XHRcdFx0XHQ6IG9TZWN0aW9uICYmIG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkgJiYgb1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKVswXVxuXHRcdFx0XHQpIGFzIE9iamVjdFBhZ2VTdWJTZWN0aW9uO1xuXHRcdFx0fSBlbHNlIGlmIChvRGV0YWlsQ29uZmlnLnN1YlNlY3Rpb25JZCkge1xuXHRcdFx0XHRvU3ViU2VjdGlvbiA9IG9Db250cm9sbGVyLmdldFZpZXcoKS5ieUlkKG9EZXRhaWxDb25maWcuc3ViU2VjdGlvbklkKSBhcyBPYmplY3RQYWdlU3ViU2VjdGlvbjtcblx0XHRcdFx0b1NlY3Rpb24gPSBvU3ViU2VjdGlvbiAmJiAob1N1YlNlY3Rpb24uZ2V0UGFyZW50KCkgYXMgT2JqZWN0UGFnZVNlY3Rpb24pO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFvU2VjdGlvbiB8fCAhb1N1YlNlY3Rpb24gfHwgIW9TZWN0aW9uLmdldFZpc2libGUoKSB8fCAhb1N1YlNlY3Rpb24uZ2V0VmlzaWJsZSgpKSB7XG5cdFx0XHRcdGNvbnN0IHNUaXRsZSA9IGdldFJlc291cmNlTW9kZWwob0NvbnRyb2xsZXIpLmdldFRleHQoXG5cdFx0XHRcdFx0XCJDX1JPVVRJTkdfTkFWSUdBVElPTl9ESVNBQkxFRF9USVRMRVwiLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRvQ29udHJvbGxlci5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS5lbnRpdHlTZXRcblx0XHRcdFx0KTtcblx0XHRcdFx0TG9nLmVycm9yKHNUaXRsZSk7XG5cdFx0XHRcdE1lc3NhZ2VCb3guZXJyb3Ioc1RpdGxlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9PYmplY3RQYWdlLnNldFNlbGVjdGVkU2VjdGlvbihvU3ViU2VjdGlvbi5nZXRJZCgpKTtcblx0XHRcdFx0Ly8gdHJpZ2dlciBpYXBwIHN0YXRlIGNoYW5nZVxuXHRcdFx0XHRvT2JqZWN0UGFnZS5maXJlTmF2aWdhdGUoe1xuXHRcdFx0XHRcdHNlY3Rpb246IG9TZWN0aW9uLFxuXHRcdFx0XHRcdHN1YlNlY3Rpb246IG9TdWJTZWN0aW9uXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRjbG9zZUNvbGxhYm9yYXRpb25TdHJpcDogZnVuY3Rpb24gKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKTogdm9pZCB7XG5cdFx0XHR0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpLnNldFByb3BlcnR5KFwiL3Nob3dDb2xsYWJvcmF0aW9uU3RyaXBcIiwgZmFsc2UpO1xuXHRcdH0sXG5cblx0XHRjbG9zZU9QTWVzc2FnZVN0cmlwOiBmdW5jdGlvbiAodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIpOiB2b2lkIHtcblx0XHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRcdGNvbnN0IGJJc0luRWRpdE1vZGUgPSBDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKHZpZXcpO1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IHZpZXcuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblx0XHRcdGNvbnN0IG1lc3NhZ2VzdHJpcEludGVybmFsTW9kZWxDb250ZXh0ID0gaW50ZXJuYWxNb2RlbFxuXHRcdFx0XHQuYmluZENvbnRleHQodGhpcy5nZXRFeHRlbnNpb25BUEkoKS5fZ2V0TWVzc2FnZVN0cmlwQmluZGluZ0NvbnRleHRQYXRoKCkpXG5cdFx0XHRcdC5nZXRCb3VuZENvbnRleHQoKSE7XG5cdFx0XHQvLyBSZW1vdmUgY29udGV4dCBib3VuZCBtZXNzYWdlcyBhbmQgc2V0IHRoZSBwcm9wZXJ0eSB0byBmYWxzZSBmb3IgdGhlIGJhY2tlbmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBpbiBlZGl0IG1vZGUuXG5cdFx0XHRpZiAoIWJJc0luRWRpdE1vZGUgJiYgbWVzc2FnZXN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJPUEJhY2tlbmRNZXNzYWdlVmlzaWJsZVwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRjb25zdCBjb250ZXh0Qm91bmRNZXNzYWdlcyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKVxuXHRcdFx0XHRcdC5nZXREYXRhKClcblx0XHRcdFx0XHQuZmlsdGVyKFxuXHRcdFx0XHRcdFx0KG1lc3NhZ2U6IE1lc3NhZ2UpID0+XG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdID09PSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCkgJiYgbWVzc2FnZS5nZXRQZXJzaXN0ZW50KCkgPT09IHRydWVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoY29udGV4dEJvdW5kTWVzc2FnZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKGNvbnRleHRCb3VuZE1lc3NhZ2VzKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0bWVzc2FnZXN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJPUEJhY2tlbmRNZXNzYWdlVmlzaWJsZVwiLCBmYWxzZSk7XG5cdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLmhpZGVNZXNzYWdlKCk7XG5cdFx0fVxuXHR9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBPYmplY3RQYWdlQ29udHJvbGxlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUF3R0EsTUFBTUEsZ0JBQWdCLEdBQUdDLFNBQVMsQ0FBQ0QsZ0JBQWdCO0VBQUMsSUFHOUNFLG9CQUFvQixJQUFBQyxJQUFBLEdBRHpCQyxjQUFjLENBQUMsa0RBQWtELENBQUMsRUFBQUMsS0FBQSxHQUlqRUMsY0FBYyxDQUFDQyxXQUFXLENBQUMsRUFBQUMsS0FBQSxHQUczQkYsY0FBYyxDQUFDRyxLQUFLLENBQUNDLFFBQVEsQ0FBQ0MsY0FBYyxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUc5Q04sY0FBYyxDQUFDTyxlQUFlLENBQUNILFFBQVEsQ0FBQ0ksdUJBQXVCLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBR2pFVCxjQUFjLENBQUNVLFNBQVMsQ0FBQ04sUUFBUSxDQUFDTyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHckRaLGNBQWMsQ0FBQ2EsY0FBYyxDQUFDVCxRQUFRLENBQUNV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