@sapui5/sap.fe.core 1.84.6 → 1.84.10

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 (30) hide show
  1. package/package.json +2 -2
  2. package/src/sap/fe/core/.library +1 -8
  3. package/src/sap/fe/core/AnnotationHelper.js +1 -1
  4. package/src/sap/fe/core/AppComponent.js +1 -1
  5. package/src/sap/fe/core/AppStateHandler.js +1 -1
  6. package/src/sap/fe/core/BusyLocker.js +1 -1
  7. package/src/sap/fe/core/CommonUtils.js +1 -1
  8. package/src/sap/fe/core/RouterProxy.js +1 -1
  9. package/src/sap/fe/core/TemplateComponent.js +1 -1
  10. package/src/sap/fe/core/TemplateModel.js +1 -1
  11. package/src/sap/fe/core/actions/draft.js +1 -1
  12. package/src/sap/fe/core/actions/messageHandling.js +1 -1
  13. package/src/sap/fe/core/actions/nonDraft.js +1 -1
  14. package/src/sap/fe/core/actions/operations.js +1 -1
  15. package/src/sap/fe/core/actions/sticky.js +1 -1
  16. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +1 -1
  17. package/src/sap/fe/core/controllerextensions/EditFlow.js +2 -2
  18. package/src/sap/fe/core/converters/controls/Common/Table.js +2 -2
  19. package/src/sap/fe/core/converters/controls/Common/Table.ts +1 -1
  20. package/src/sap/fe/core/helpers/EditState.js +1 -1
  21. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +1 -1
  22. package/src/sap/fe/core/helpers/PasteHelper.js +1 -1
  23. package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
  24. package/src/sap/fe/core/helpers/SideEffectsUtil.js +1 -1
  25. package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
  26. package/src/sap/fe/core/helpers/ValueListHelper.js +1 -1
  27. package/src/sap/fe/core/library.js +2 -2
  28. package/src/sap/fe/core/library.support.js +1 -1
  29. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +1 -1
  30. package/src/sap/fe/core/support/AnnotationIssue.support.js +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sapui5/sap.fe.core",
3
- "version": "1.84.6",
3
+ "version": "1.84.10",
4
4
  "description": "SAPUI5 Library sap.fe.core",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "author": "SAP SE (https://www.sap.com)",
@@ -20,7 +20,7 @@
20
20
  ],
21
21
  "devDependencies": {
22
22
  "@babel/cli": "7.8.4",
23
- "@ui5/cli": "^2.4.3",
23
+ "@ui5/cli": "2.4.3",
24
24
  "copyfiles": "2.2.0",
25
25
  "yarn": "1.22.4"
26
26
  }
@@ -6,7 +6,7 @@
6
6
  <copyright>SAP UI development toolkit for HTML5 (SAPUI5)
7
7
  (c) Copyright 2009-2020 SAP SE. All rights reserved
8
8
  </copyright>
9
- <version>1.84.6</version>
9
+ <version>1.84.10</version>
10
10
 
11
11
  <documentation>UI5 library: sap.fe.core</documentation>
12
12
 
@@ -45,13 +45,6 @@
45
45
  <!-- excludes for the JSCoverage -->
46
46
  <jscoverage xmlns="http://www.sap.com/ui5/buildext/jscoverage">
47
47
  <exclude name="sap.fe.core.js."/>
48
- <exclude name="jquery.sap.xml."/>
49
- <exclude name="sap.f." />
50
- <exclude name="sap.fe.navigation." />
51
- <exclude name="sap.m." />
52
- <exclude name="sap.ui." />
53
- <exclude name="sap.ushell." />
54
- <exclude name="*" /> <!-- exclude files within current folder -->
55
48
  </jscoverage>
56
49
  </appData>
57
50
 
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
3
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
4
4
  */
5
5
 
6
6
  sap.ui.define(
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * ! SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
3
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
4
4
  */
5
5
 
6
6
  // ----------------------------------------------------------------------------------
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
3
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
4
4
  */
5
5
  sap.ui.define(
6
6
  [
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
3
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
4
4
  */
5
5
 
6
6
  sap.ui.define(["sap/base/Log"], function(Log) {
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
3
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
4
4
  */
5
5
 
6
6
  sap.ui.define(
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
3
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
4
4
  */
5
5
  /* eslint-disable no-alert */
6
6
  sap.ui.define(
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * ! SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
3
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
4
4
  */
5
5
  sap.ui.define(
6
6
  ["sap/ui/core/UIComponent", "sap/fe/core/CommonUtils", "sap/base/Log"],
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
3
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
4
4
  */
5
5
  sap.ui.define(["sap/base/Log", "sap/ui/base/Object", "sap/ui/model/json/JSONModel"], function(Log, BaseObject, JSONModel) {
6
6
  "use strict";
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
3
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
4
4
  */
5
5
 
6
6
  // Provides static functions for the draft programming model
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
3
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
4
4
  */
5
5
 
6
6
  // Static functions for Fiori Message Handling
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
3
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
4
4
  */
5
5
 
6
6
  // Provides static functions for the non-draft programming model
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
3
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
4
4
  */
5
5
 
6
6
  // Provides static functions to call OData actions (bound/import) and functions (bound/import)
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
3
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
4
4
  */
5
5
 
6
6
  // Provides static functions for the sticky session programming model
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
3
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
4
4
  */
5
5
 
6
6
  // Provides ControllerMetadata
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
3
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
4
4
  */
5
5
  sap.ui.define(
6
6
  [
@@ -1262,7 +1262,7 @@ sap.ui.define(
1262
1262
  });
1263
1263
  } else {
1264
1264
  // active document, stay on display mode
1265
- that.setEditMode(EditMode.Display);
1265
+ that.setEditMode(EditMode.Display, false);
1266
1266
  }
1267
1267
  })
1268
1268
  .catch(function(oError) {
@@ -746,7 +746,7 @@ sap.ui.define(["../../ManifestSettings", "../../templates/BaseConverter", "../..
746
746
 
747
747
  if (parentEntitySetDeletable === "false") {
748
748
  return false;
749
- } else if (parentEntitySetDeletable) {
749
+ } else if (parentEntitySetDeletable && isDeleteHidden !== true) {
750
750
  //Delete Hidden in case of true and path based
751
751
  if (isDeleteHidden) {
752
752
  return "{= !${" + (navigationPath ? navigationPath + "/" : "") + isDeleteHidden.path + "} && ${ui>/editMode} === 'Editable'}";
@@ -1072,4 +1072,4 @@ sap.ui.define(["../../ManifestSettings", "../../templates/BaseConverter", "../..
1072
1072
  _exports.getTableManifestConfiguration = getTableManifestConfiguration;
1073
1073
  return _exports;
1074
1074
  }, false);
1075
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRhYmxlLnRzIl0sIm5hbWVzIjpbIkNvbHVtblR5cGUiLCJnZXRUYWJsZUFjdGlvbnMiLCJsaW5lSXRlbUFubm90YXRpb24iLCJ2aXN1YWxpemF0aW9uUGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJuYXZpZ2F0aW9uU2V0dGluZ3MiLCJpbnNlcnRDdXN0b21FbGVtZW50cyIsImdldFRhYmxlQW5ub3RhdGlvbkFjdGlvbnMiLCJnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IiwiZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbiIsImFjdGlvbnMiLCJpc05hdmlnYWJsZSIsImVuYWJsZU9uU2VsZWN0IiwiZW5hYmxlQXV0b1Njcm9sbCIsImdldFRhYmxlQ29sdW1ucyIsImdldENvbHVtbnNGcm9tQW5ub3RhdGlvbnMiLCJnZXRDb2x1bW5zRnJvbU1hbmlmZXN0IiwiY29sdW1ucyIsIndpZHRoIiwiY3JlYXRlVGFibGVWaXN1YWxpemF0aW9uIiwicHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24iLCJpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50IiwidGFibGVNYW5pZmVzdENvbmZpZyIsImdldFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uIiwic3BsaXRQYXRoIiwibmF2aWdhdGlvblByb3BlcnR5UGF0aCIsImVudGl0eVNldCIsImdldEVudGl0eVNldCIsImVudGl0eU5hbWUiLCJuYW1lIiwiaXNFbnRpdHlTZXQiLCJsZW5ndGgiLCJuYXZpZ2F0aW9uT3JDb2xsZWN0aW9uTmFtZSIsImdldE1hbmlmZXN0V3JhcHBlciIsImdldE5hdmlnYXRpb25Db25maWd1cmF0aW9uIiwidHlwZSIsIlZpc3VhbGl6YXRpb25UeXBlIiwiVGFibGUiLCJhbm5vdGF0aW9uIiwiZ2V0VGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbiIsImNvbnRyb2wiLCJjcmVhdGVEZWZhdWx0VGFibGVWaXN1YWxpemF0aW9uIiwidW5kZWZpbmVkIiwiZ2V0Q29sdW1uc0Zyb21FbnRpdHlUeXBlIiwiZW50aXR5VHlwZSIsImhhc0FjdGlvblJlcXVpcmluZ0NvbnRleHQiLCJzb21lIiwiZGF0YUZpZWxkIiwiJFR5cGUiLCJJbmxpbmUiLCJSZXF1aXJlc0NvbnRleHQiLCJoYXNBY3Rpb25SZXF1aXJpbmdTZWxlY3Rpb24iLCJtYW5pZmVzdEFjdGlvbnMiLCJyZXF1aXJlc1NlbGVjdGlvbktleSIsIk9iamVjdCIsImtleXMiLCJhY3Rpb25LZXkiLCJhY3Rpb24iLCJyZXF1aXJlc1NlbGVjdGlvbiIsImdldENhcGFiaWxpdHlSZXN0cmljdGlvbiIsIm5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhQYXJ0cyIsInNwbGl0Iiwib0NhcGFiaWxpdHlSZXN0cmljdGlvbiIsImlzRGVsZXRhYmxlIiwiaXNVcGRhdGFibGUiLCJjdXJyZW50RW50aXR5U2V0IiwicGF0aHNUb0NoZWNrIiwicmVkdWNlIiwicGF0aHMiLCJuYXZpZ2F0aW9uUHJvcGVydHlQYXRoUGFydCIsInB1c2giLCJoYXNSZXN0cmljdGVkUGF0aE9uRGVsZXRlIiwiaGFzUmVzdHJpY3RlZFBhdGhPblVwZGF0ZSIsImFubm90YXRpb25zIiwiQ2FwYWJpbGl0aWVzIiwiTmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsIlJlc3RyaWN0ZWRQcm9wZXJ0aWVzIiwiZm9yRWFjaCIsInJlc3RyaWN0ZWROYXZQcm9wIiwiTmF2aWdhdGlvblByb3BlcnR5IiwiRGVsZXRlUmVzdHJpY3Rpb25zIiwiRGVsZXRhYmxlIiwiaW5kZXhPZiIsInZhbHVlIiwiVXBkYXRlUmVzdHJpY3Rpb25zIiwiVXBkYXRhYmxlIiwibmF2UHJvcE5hbWUiLCJzaGlmdCIsIm5hdlByb3AiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsImZpbmQiLCJjb250YWluc1RhcmdldCIsIm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmciLCJoYXNPd25Qcm9wZXJ0eSIsImdldFNlbGVjdGlvbk1vZGUiLCJTZWxlY3Rpb25Nb2RlIiwiTm9uZSIsInRhYmxlTWFuaWZlc3RTZXR0aW5ncyIsInNlbGVjdGlvbk1vZGUiLCJ0YWJsZVNldHRpbmdzIiwiaXNQYXJlbnREZWxldGFibGUiLCJwYXJlbnRFbnRpdHlTZXREZWxldGFibGUiLCJnZXRUZW1wbGF0ZVR5cGUiLCJUZW1wbGF0ZVR5cGUiLCJPYmplY3RQYWdlIiwiaXNQYXRoRGVsZXRhYmxlIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImNvbXBpbGVCaW5kaW5nIiwiTXVsdGkiLCJBdXRvIiwidGFibGVBY3Rpb25zIiwiYWJzb2x1dGVQYXRoIiwiZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aCIsImluZGV4IiwidGFibGVBY3Rpb24iLCJpc0RhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0IiwiVUkiLCJIaWRkZW4iLCJEZXRlcm1pbmluZyIsImFubm90YXRpb25QYXRoIiwia2V5IiwiS2V5SGVscGVyIiwiZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkIiwiQWN0aW9uVHlwZSIsIkRhdGFGaWVsZEZvckFjdGlvbiIsIkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldENyaXRpY2FsaXR5QmluZGluZ0J5RW51bSIsIkNyaXRpY2FsaXR5RW51bSIsImNyaXRpY2FsaXR5UHJvcGVydHkiLCJNZXNzYWdlVHlwZSIsIkVycm9yIiwiV2FybmluZyIsIlN1Y2Nlc3MiLCJnZXRIaWdobGlnaHRSb3dCaW5kaW5nIiwiY3JpdGljYWxpdHlBbm5vdGF0aW9uIiwiaXNEcmFmdFJvb3QiLCJkZWZhdWx0SGlnaGxpZ2h0Um93RGVmaW5pdGlvbiIsImFubm90YXRpb25FeHByZXNzaW9uIiwiaWZFbHNlIiwiRHJhZnQiLCJJc05ld09iamVjdCIsIkluZm9ybWF0aW9uIiwiZm9ybWF0UmVzdWx0IiwidGFibGVGb3JtYXR0ZXJzIiwicm93SGlnaGxpZ2h0aW5nIiwiX2dldENyZWF0aW9uQmVoYXZpb3VyIiwidGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24iLCJuYXZpZ2F0aW9uIiwiY3JlYXRlIiwiZGV0YWlsIiwib3V0Ym91bmQiLCJvdXRib3VuZERldGFpbCIsIm1vZGUiLCJuZXdBY3Rpb24iLCJ0YXJnZXRFbnRpdHlUeXBlIiwiZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUiLCJ0YXJnZXRBbm5vdGF0aW9ucyIsImdldEVudGl0eVNldEZvckVudGl0eVR5cGUiLCJDb21tb24iLCJEcmFmdFJvb3QiLCJOZXdBY3Rpb24iLCJTZXNzaW9uIiwiU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsImNyZWF0aW9uTW9kZSIsIkNyZWF0aW9uTW9kZSIsIkNyZWF0aW9uUm93Iiwicm91dGUiLCJhcHBlbmQiLCJjcmVhdGVBdEVuZCIsIm5hdmlnYXRlVG9UYXJnZXQiLCJOZXdQYWdlIiwiX2dldFJvd0NvbmZpZ3VyYXRpb25Qcm9wZXJ0eSIsInRhcmdldFBhdGgiLCJwcmVzc1Byb3BlcnR5IiwibmF2aWdhdGlvblRhcmdldCIsImRpc3BsYXkiLCJ0YXJnZXQiLCJ0YXJnZXRFbnRpdHlTZXQiLCJDcml0aWNhbGl0eSIsIkRyYWZ0Tm9kZSIsInJvd05hdmlnYXRlZEV4cHJlc3Npb24iLCJpc0ZjbEVuYWJsZWQiLCJiaW5kaW5nRXhwcmVzc2lvbiIsImZjbE5hdmlnYXRlZFJvdyIsInByZXNzIiwicm93TmF2aWdhdGVkIiwiYW5ub3RhdGlvbkNvbHVtbnMiLCJ0YWJsZUNvbHVtbnMiLCJlbnRpdHlQcm9wZXJ0aWVzIiwicHJvcGVydHkiLCJleGlzdHMiLCJjb2x1bW4iLCJBbm5vdGF0aW9uIiwicGVyc29uYWxpemF0aW9uT25seSIsInZpc2libGUiLCJub3QiLCJlcXVhbCIsInRlbXBsYXRlIiwiX2lzVmFsaWRDb2x1bW4iLCJfZ2V0QW5ub3RhdGlvbkNvbHVtbk5hbWUiLCJpc0RhdGFGaWVsZFR5cGVzIiwiVmFsdWUiLCJwYXRoIiwiVGFyZ2V0IiwiJHRhcmdldCIsImxpbmVJdGVtIiwibGluZUl0ZW1JbmRleCIsImFubm90YXRpb25SZWZlcmVuY2UiLCJIVE1MNSIsIkNzc0RlZmF1bHRzIiwiY29uY2F0IiwiaW50ZXJuYWxDb2x1bW5zIiwibWFuaWZlc3RDb2x1bW4iLCJpc0tleVZhbGlkIiwiaWQiLCJoZWFkZXIiLCJEZWZhdWx0IiwicG9zaXRpb24iLCJhbmNob3IiLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnQiLCJBZnRlciIsImlzQWN0aW9uTmF2aWdhYmxlIiwiZ2V0UDEzbk1vZGUiLCJtYW5pZmVzdFdyYXBwZXIiLCJ2YXJpYW50TWFuYWdlbWVudCIsImdldFZhcmlhbnRNYW5hZ2VtZW50IiwiaGFzVmFyaWFudE1hbmFnZW1lbnQiLCJhUGVyc29uYWxpemF0aW9uIiwicGVyc29uYWxpemF0aW9uIiwic29ydCIsImZpbHRlciIsImpvaW4iLCJWYXJpYW50TWFuYWdlbWVudFR5cGUiLCJDb250cm9sIiwiZ2V0RGVsZXRlSGlkZGVuIiwibmF2aWdhdGlvblBhdGgiLCJpc0RlbGV0ZUhpZGRlbiIsImRlbGV0ZUhpZGRlbkFubm90YXRpb24iLCJEZWxldGVIaWRkZW4iLCJhU3BsaXRIaWRkZW5QYXRoIiwic05hdmlnYXRpb25QYXRoIiwicGFydG5lck5hbWUiLCJuYXZQcm9wZXJ0eSIsInBhcnRuZXIiLCJnZXREZWxldGVWaXNpYmxlIiwiaXNUYXJnZXREZWxldGFibGUiLCJBbmFseXRpY2FsTGlzdFBhZ2UiLCJMaXN0UmVwb3J0IiwiZ2V0SW5zZXJ0YWJsZSIsImlzSW5zZXJ0YWJsZSIsImhhc05hdmlnYXRpb25JbnNlcnRSZXN0cmljdGlvbiIsInJlc3RyaWN0ZWRQcm9wZXJ0eSIsIkluc2VydFJlc3RyaWN0aW9ucyIsIkluc2VydGFibGUiLCJnZXRDcmVhdGVIaWRkZW4iLCJpc0NyZWF0ZUhpZGRlbiIsImNyZWF0ZUhpZGRlbkFubm90YXRpb24iLCJDcmVhdGVIaWRkZW4iLCJnZXRDcmVhdGVWaXNpYmxlIiwiY3JlYXRpb25CZWhhdmlvdXIiLCJwYWdlTWFuaWZlc3RTZXR0aW5ncyIsInAxM25Nb2RlIiwiVGFibGVJRCIsInRhcmdldENhcGFiaWxpdGllcyIsInRocmVzaG9sZCIsIk1heEl0ZW1zIiwiY3VycmVudEVudGl0eVJlc3RyaWN0aW9uIiwiY29sbGVjdGlvbiIsInJvdyIsInNob3ciLCJ1cGRhdGUiLCJnZXRVcGRhdGFibGUiLCJhdXRvQmluZE9uSW5pdCIsImVuYWJsZUNvbnRyb2xWTSIsInBhcmVudEVudGl0eURlbGV0ZUVuYWJsZWQiLCJ0ZW1wbGF0ZVR5cGUiLCJsYXN0SW5kZXhPZiIsInN1YnN0ciIsImdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uIiwic2VsZWN0aW9uVmFyaWFudFBhdGgiLCJzZWxlY3Rpb24iLCJnZXRFbnRpdHlUeXBlQW5ub3RhdGlvbiIsInByb3BlcnR5TmFtZXMiLCJTZWxlY3RPcHRpb25zIiwic2VsZWN0T3B0aW9uIiwicHJvcGVydHlOYW1lIiwiUHJvcGVydHlOYW1lIiwiUHJvcGVydHlQYXRoIiwidGV4dCIsIlRleHQiLCJxdWlja1NlbGVjdGlvblZhcmlhbnQiLCJxdWlja0ZpbHRlclBhdGhzIiwiZW5hYmxlRXhwb3J0IiwiZmlsdGVycyIsImRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGEiLCJjb25kZW5zZWRUYWJsZUxheW91dCIsImhpZGVUYWJsZVRpdGxlIiwidGFibGVUeXBlIiwic2VsZWN0aW9uTGltaXQiLCJlbmFibGVQYXN0ZSIsInNoZWxsU2VydmljZXMiLCJnZXRTaGVsbFNlcnZpY2VzIiwidXNlckNvbnRlbnREZW5zaXR5IiwiZ2V0Q29udGVudERlbnNpdHkiLCJhcHBDb250ZW50RGVuc2l0eSIsImdldENvbnRlbnREZW5zaXRpZXMiLCJjb3p5IiwiY29tcGFjdCIsInF1aWNrVmFyaWFudFNlbGVjdGlvbiIsInJlc29sdmVQYXRoIiwicXVpY2tGaWx0ZXJzIiwic2hvd0NvdW50cyIsInNlbGVjdEFsbCIsImhlYWRlclZpc2libGUiLCJ1c2VDb25kZW5zZWRUYWJsZUxheW91dCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUF3SUtBLFU7O2FBQUFBLFU7QUFBQUEsSUFBQUEsVTtBQUFBQSxJQUFBQSxVO0tBQUFBLFUsS0FBQUEsVTs7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LGNBQWQsS0FBaUMsQ0FBckUsR0FBeUUsQ0FBekUsR0FBNkV4TSxhQUFhLENBQUN3TSxjQUFkLElBQWdDQSxjQUQ5Rzs7QUFFQSxVQUFJeE0sYUFBYSxDQUFDeU0sV0FBZCxLQUE4QixLQUFsQyxFQUF5QztBQUN4Q0EsUUFBQUEsV0FBVyxHQUFHLEtBQWQ7QUFDQTtBQUNEOztBQUNELFdBQU87QUFDTk4sTUFBQUEsT0FBTyxFQUFFQSxPQURIO0FBRU5uUSxNQUFBQSxJQUFJLEVBQUV1USxTQUZBO0FBR05nQixNQUFBQSxhQUFhLEVBQUUsRUFBRXZCLHFCQUFxQixJQUFJTSxjQUEzQixDQUhUO0FBSU5KLE1BQUFBLFlBQVksRUFBRUEsWUFKUjtBQUtObEksTUFBQUEsWUFBWSxFQUFFQSxZQUxSO0FBTU5LLE1BQUFBLFdBQVcsRUFBRUEsV0FOUDtBQU9OK0gsTUFBQUEsK0JBQStCLEVBQUVBLCtCQVAzQjtBQVFOb0IsTUFBQUEsdUJBQXVCLEVBQUVuQixvQkFBb0IsSUFBSW5SLCtCQVIzQztBQVNOc1IsTUFBQUEsY0FBYyxFQUFFQSxjQVRWO0FBVU5DLE1BQUFBLFdBQVcsRUFBRUE7QUFWUCxLQUFQO0FBWUEiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdENyaXRpY2FsaXR5VHlwZSxcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RW51bVZhbHVlLFxuXHRMaW5lSXRlbSxcblx0UGF0aEFubm90YXRpb25FeHByZXNzaW9uLFxuXHRQcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzLFxuXHRTZWxlY3Rpb25WYXJpYW50VHlwZSxcblx0U2VsZWN0T3B0aW9uVHlwZSxcblx0VUlBbm5vdGF0aW9uVHlwZXNcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQge1xuXHRBY3Rpb25UeXBlLFxuXHRDcmVhdGlvbk1vZGUsXG5cdE1hbmlmZXN0VGFibGVDb2x1bW4sXG5cdE1hbmlmZXN0V3JhcHBlcixcblx0TmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0TmF2aWdhdGlvblRhcmdldENvbmZpZ3VyYXRpb24sXG5cdFNlbGVjdGlvbk1vZGUsXG5cdFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRWYXJpYW50TWFuYWdlbWVudFR5cGUsXG5cdFZpc3VhbGl6YXRpb25UeXBlXG59IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBFbnRpdHlTZXQsIEVudGl0eVR5cGUsIE5hdmlnYXRpb25Qcm9wZXJ0eSwgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC9hbm5vdGF0aW9uLWNvbnZlcnRlclwiO1xuaW1wb3J0IHsgQ29udmVydGVyQ29udGV4dCwgVGVtcGxhdGVUeXBlIH0gZnJvbSBcIi4uLy4uL3RlbXBsYXRlcy9CYXNlQ29udmVydGVyXCI7XG5pbXBvcnQgeyBUYWJsZUlEIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvSURcIjtcbmltcG9ydCB7IE5hdmlnYXRpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvZGlzdC9nZW5lcmF0ZWQvQ2FwYWJpbGl0aWVzXCI7XG5pbXBvcnQge1xuXHRBbm5vdGF0aW9uQWN0aW9uLFxuXHRCYXNlQWN0aW9uLFxuXHRDdXN0b21BY3Rpb24sXG5cdGdldEFjdGlvbnNGcm9tTWFuaWZlc3QsXG5cdGlzQWN0aW9uTmF2aWdhYmxlXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7IENvbmZpZ3VyYWJsZU9iamVjdCwgQ3VzdG9tRWxlbWVudCwgaW5zZXJ0Q3VzdG9tRWxlbWVudHMsIFBsYWNlbWVudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBpc0RhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0LCBpc0RhdGFGaWVsZFR5cGVzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvYW5ub3RhdGlvbnMvRGF0YUZpZWxkXCI7XG5pbXBvcnQge1xuXHRhbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0QmluZGluZ0V4cHJlc3Npb24sXG5cdGJpbmRpbmdFeHByZXNzaW9uLFxuXHRjb21waWxlQmluZGluZyxcblx0ZXF1YWwsXG5cdEV4cHJlc3Npb24sXG5cdEV4cHJlc3Npb25PclByaW1pdGl2ZSxcblx0Zm9ybWF0UmVzdWx0LFxuXHRpZkVsc2UsXG5cdG5vdFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nRXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgRHJhZnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB7IEtleUhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvS2V5XCI7XG5pbXBvcnQgdGFibGVGb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL1RhYmxlRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBNZXNzYWdlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL1RhYmxlRm9ybWF0dGVyVHlwZXNcIjtcbmltcG9ydCB7IGlzUGF0aERlbGV0YWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcblxuZXhwb3J0IHR5cGUgVGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbiA9IHtcblx0YXV0b0JpbmRPbkluaXQ6IGJvb2xlYW47XG5cdGNvbGxlY3Rpb246IHN0cmluZztcblx0ZW5hYmxlQ29udHJvbFZNPzogYm9vbGVhbjtcblx0ZmlsdGVySWQ/OiBzdHJpbmc7XG5cdGlkOiBzdHJpbmc7XG5cdGlzRW50aXR5U2V0OiBib29sZWFuO1xuXHRuYXZpZ2F0aW9uUGF0aDogc3RyaW5nO1xuXHRwMTNuTW9kZT86IHN0cmluZztcblx0cm93Pzoge1xuXHRcdGFjdGlvbj86IHN0cmluZztcblx0XHRwcmVzcz86IHN0cmluZztcblx0XHRyb3dIaWdobGlnaHRpbmc6IEJpbmRpbmdFeHByZXNzaW9uPE1lc3NhZ2VUeXBlPjtcblx0XHRyb3dOYXZpZ2F0ZWQ6IEJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHR9O1xuXHRzZWxlY3Rpb25Nb2RlOiBzdHJpbmc7XG5cdHNob3c/OiB7XG5cdFx0Y3JlYXRlPzogc3RyaW5nIHwgYm9vbGVhbjtcblx0XHRkZWxldGU/OiBzdHJpbmcgfCBib29sZWFuO1xuXHRcdHVwZGF0ZT86IHN0cmluZyB8IGJvb2xlYW47XG5cdH07XG5cdHRocmVzaG9sZDogbnVtYmVyO1xuXHRlbnRpdHlOYW1lOiBzdHJpbmc7XG5cblx0LyoqIENyZWF0ZSBuZXcgZW50cmllcyAqL1xuXHRjcmVhdGU6IENyZWF0ZUJlaGF2aW91ciB8IENyZWF0ZUJlaGF2aW91ckV4dGVybmFsO1xuXHRwYXJlbnRFbnRpdHlEZWxldGVFbmFibGVkPzogQmluZGluZ0V4cHJlc3Npb248Ym9vbGVhbj47XG59O1xuXG4vKipcbiAqIE5ldyBlbnRyaWVzIGFyZSBjcmVhdGVkIHdpdGhpbiB0aGUgYXBwIChkZWZhdWx0IGNhc2UpXG4gKi9cbnR5cGUgQ3JlYXRlQmVoYXZpb3VyID0ge1xuXHRtb2RlOiBDcmVhdGlvbk1vZGU7XG5cdGFwcGVuZDogQm9vbGVhbjtcblx0bmV3QWN0aW9uPzogc3RyaW5nO1xuXHRuYXZpZ2F0ZVRvVGFyZ2V0Pzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBOZXcgZW50cmllcyBhcmUgY3JlYXRlZCBieSBuYXZpZ2F0aW5nIHRvIHNvbWUgdGFyZ2V0XG4gKi9cbnR5cGUgQ3JlYXRlQmVoYXZpb3VyRXh0ZXJuYWwgPSB7XG5cdG1vZGU6IFwiRXh0ZXJuYWxcIjtcblx0b3V0Ym91bmQ6IHN0cmluZztcblx0b3V0Ym91bmREZXRhaWw6IE5hdmlnYXRpb25UYXJnZXRDb25maWd1cmF0aW9uW1wib3V0Ym91bmREZXRhaWxcIl07XG5cdG5hdmlnYXRpb25TZXR0aW5nczogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbjtcbn07XG5cbnR5cGUgVGFibGVDYXBhYmlsaXR5UmVzdHJpY3Rpb24gPSB7XG5cdGlzRGVsZXRhYmxlOiBib29sZWFuO1xuXHRpc1VwZGF0YWJsZTogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFRhYmxlRmlsdGVyc0NvbmZpZ3VyYXRpb24gPSB7XG5cdHBhdGhzOiBbXG5cdFx0e1xuXHRcdFx0YW5ub3RhdGlvblBhdGg6IHN0cmluZztcblx0XHR9XG5cdF07XG5cdHNob3dDb3VudHM/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgU2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24gPSB7XG5cdHByb3BlcnR5TmFtZXM6IHN0cmluZ1tdO1xuXHR0ZXh0OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uID0ge1xuXHRjcmVhdGVBdEVuZDogYm9vbGVhbjtcblx0Y3JlYXRpb25Nb2RlOiBDcmVhdGlvbk1vZGU7XG5cdGRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGE/OiBib29sZWFuO1xuXHR1c2VDb25kZW5zZWRUYWJsZUxheW91dD86IGJvb2xlYW47XG5cdGVuYWJsZUV4cG9ydD86IGJvb2xlYW47XG5cdGhlYWRlclZpc2libGU/OiBib29sZWFuO1xuXHRmaWx0ZXJzPzogUmVjb3JkPHN0cmluZywgVGFibGVGaWx0ZXJzQ29uZmlndXJhdGlvbj47XG5cdHR5cGU/OiBzdHJpbmc7XG5cdHNlbGVjdEFsbD86IGJvb2xlYW47XG5cdHNlbGVjdGlvbkxpbWl0PzogbnVtYmVyO1xuXHRlbmFibGVQYXN0ZTogYm9vbGVhbjtcbn07XG5cbmVudW0gQ29sdW1uVHlwZSB7XG5cdERlZmF1bHQgPSBcIkRlZmF1bHRcIiwgLy8gRGVmYXVsdCBUeXBlXG5cdEFubm90YXRpb24gPSBcIkFubm90YXRpb25cIlxufVxuXG5leHBvcnQgdHlwZSBCYXNlVGFibGVDb2x1bW4gPSBDb25maWd1cmFibGVPYmplY3QgJiB7XG5cdGlkOiBzdHJpbmc7XG5cdHdpZHRoPzogc3RyaW5nO1xuXHR0ZW1wbGF0ZTogc3RyaW5nO1xuXHRuYW1lOiBzdHJpbmc7XG5cdHZpc2libGU6IEJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRwZXJzb25hbGl6YXRpb25Pbmx5OiBib29sZWFuO1xuXHR0eXBlOiBDb2x1bW5UeXBlOyAvL09yaWdpbiBvZiB0aGUgc291cmNlIHdoZXJlIHdlIGFyZSBnZXR0aW5nIHRoZSB0ZW1wbGF0ZWQgaW5mb3JtYXRpb24gZnJvbSxcblx0aXNOYXZpZ2FibGU/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tVGFibGVDb2x1bW4gPSBCYXNlVGFibGVDb2x1bW4gJiB7XG5cdGNyZWF0aW9uVGVtcGxhdGU/OiBzdHJpbmc7XG5cdGhlYWRlcj86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEFubm90YXRpb25UYWJsZUNvbHVtbiA9IEJhc2VUYWJsZUNvbHVtbiAmIHtcblx0YW5ub3RhdGlvblBhdGg6IHN0cmluZztcbn07XG5cbnR5cGUgVGFibGVDb2x1bW4gPSBDdXN0b21UYWJsZUNvbHVtbiB8IEFubm90YXRpb25UYWJsZUNvbHVtbjtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tQ29sdW1uID0gQ3VzdG9tRWxlbWVudDxUYWJsZUNvbHVtbj47XG5cbmV4cG9ydCB0eXBlIFRhYmxlVmlzdWFsaXphdGlvbiA9IHtcblx0dHlwZTogVmlzdWFsaXphdGlvblR5cGUuVGFibGU7XG5cdGFubm90YXRpb246IFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb247XG5cdGNvbnRyb2w6IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb247XG5cdGNvbHVtbnM6IFRhYmxlQ29sdW1uW107XG5cdGFjdGlvbnM6IEJhc2VBY3Rpb25bXTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgYW5ub3RhdGlvbiBiYXNlZCBhbmQgbWFuaWZlc3QgYmFzZWQgdGFibGUgYWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge0xpbmVJdGVtfSBsaW5lSXRlbUFubm90YXRpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSB2aXN1YWxpemF0aW9uUGF0aFxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0ge05hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb259IG5hdmlnYXRpb25TZXR0aW5nc1xuICogQHJldHVybnMge1RhYmxlQWN0aW9ufSB0aGUgY29tcGxldGUgdGFibGUgYWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVBY3Rpb25zKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRuYXZpZ2F0aW9uU2V0dGluZ3M/OiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uXG4pOiBCYXNlQWN0aW9uW10ge1xuXHRyZXR1cm4gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoXG5cdFx0Z2V0VGFibGVBbm5vdGF0aW9uQWN0aW9ucyhsaW5lSXRlbUFubm90YXRpb24sIHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCkuYWN0aW9ucywgbmF2aWdhdGlvblNldHRpbmdzLCB0cnVlKSxcblx0XHR7IGlzTmF2aWdhYmxlOiBcIm92ZXJ3cml0ZVwiLCBlbmFibGVPblNlbGVjdDogXCJvdmVyd3JpdGVcIiwgZW5hYmxlQXV0b1Njcm9sbDogXCJvdmVyd3JpdGVcIiB9XG5cdCk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBvZmYgYWxsIGNvbHVtbnMsIGFubm90YXRpb24gYmFzZWQgYXMgd2VsbCBhcyBtYW5pZmVzdCBiYXNlZC5cbiAqIFRoZXkgYXJlIHNvcnRlZCBhbmQgc29tZSBwcm9wZXJ0aWVzIG9mIGNhbiBiZSBvdmVyd3JpdHRlbiB0aHJvdWdoIHRoZSBtYW5pZmVzdCAoY2hlY2sgb3V0IHRoZSBvdmVyd3JpdGFibGVLZXlzKS5cbiAqXG4gKiBAcGFyYW0ge0xpbmVJdGVtfSBsaW5lSXRlbUFubm90YXRpb24gQ29sbGVjdGlvbiBvZiBkYXRhIGZpZWxkcyBmb3IgcmVwcmVzZW50YXRpb24gaW4gYSB0YWJsZSBvciBsaXN0XG4gKiBAcGFyYW0ge3N0cmluZ30gdmlzdWFsaXphdGlvblBhdGhcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHtOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9ufSBuYXZpZ2F0aW9uU2V0dGluZ3NcbiAqIEByZXR1cm5zIHtUYWJsZUNvbHVtbn0gUmV0dXJucyBhbGwgdGFibGUgY29sdW1ucyB0aGF0IHNob3VsZCBiZSBhdmFpbGFibGUsIHJlZ2FyZGxlc3Mgb2YgdGVtcGxhdGluZyBvciBwZXJzb25hbGl6YXRpb24gb3IgdGhlaXIgb3JpZ2luXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZUNvbHVtbnMoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdG5hdmlnYXRpb25TZXR0aW5ncz86IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb25cbik6IFRhYmxlQ29sdW1uW10ge1xuXHRyZXR1cm4gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoXG5cdFx0Z2V0Q29sdW1uc0Zyb21Bbm5vdGF0aW9ucyhsaW5lSXRlbUFubm90YXRpb24sIHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRnZXRDb2x1bW5zRnJvbU1hbmlmZXN0KGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCkuY29sdW1ucywgbmF2aWdhdGlvblNldHRpbmdzKSxcblx0XHR7IHdpZHRoOiBcIm92ZXJ3cml0ZVwiLCBpc05hdmlnYWJsZTogXCJvdmVyd3JpdGVcIiB9XG5cdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUYWJsZVZpc3VhbGl6YXRpb24oXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPzogUHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyxcblx0aXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudD86IGJvb2xlYW5cbik6IFRhYmxlVmlzdWFsaXphdGlvbiB7XG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RDb25maWcgPSBnZXRUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbihcblx0XHRsaW5lSXRlbUFubm90YXRpb24sXG5cdFx0dmlzdWFsaXphdGlvblBhdGgsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50XG5cdCk7XG5cdGNvbnN0IHsgbmF2aWdhdGlvblByb3BlcnR5UGF0aCB9ID0gc3BsaXRQYXRoKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0Y29uc3QgZW50aXR5TmFtZTogc3RyaW5nID0gZW50aXR5U2V0Lm5hbWUsXG5cdFx0aXNFbnRpdHlTZXQ6IGJvb2xlYW4gPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCA9PT0gMDtcblx0Y29uc3QgbmF2aWdhdGlvbk9yQ29sbGVjdGlvbk5hbWUgPSBpc0VudGl0eVNldCA/IGVudGl0eU5hbWUgOiBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoO1xuXHRjb25zdCBuYXZpZ2F0aW9uU2V0dGluZ3MgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldE5hdmlnYXRpb25Db25maWd1cmF0aW9uKG5hdmlnYXRpb25PckNvbGxlY3Rpb25OYW1lKTtcblx0cmV0dXJuIHtcblx0XHR0eXBlOiBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZSxcblx0XHRhbm5vdGF0aW9uOiBnZXRUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uKFxuXHRcdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdFx0dmlzdWFsaXphdGlvblBhdGgsXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0dGFibGVNYW5pZmVzdENvbmZpZyxcblx0XHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uXG5cdFx0KSxcblx0XHRjb250cm9sOiB0YWJsZU1hbmlmZXN0Q29uZmlnLFxuXHRcdGFjdGlvbnM6IGdldFRhYmxlQWN0aW9ucyhsaW5lSXRlbUFubm90YXRpb24sIHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBuYXZpZ2F0aW9uU2V0dGluZ3MpLFxuXHRcdGNvbHVtbnM6IGdldFRhYmxlQ29sdW1ucyhsaW5lSXRlbUFubm90YXRpb24sIHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBuYXZpZ2F0aW9uU2V0dGluZ3MpXG5cdH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEZWZhdWx0VGFibGVWaXN1YWxpemF0aW9uKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBUYWJsZVZpc3VhbGl6YXRpb24ge1xuXHRjb25zdCB0YWJsZU1hbmlmZXN0Q29uZmlnID0gZ2V0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24odW5kZWZpbmVkLCBcIlwiLCBjb252ZXJ0ZXJDb250ZXh0LCBmYWxzZSk7XG5cdHJldHVybiB7XG5cdFx0dHlwZTogVmlzdWFsaXphdGlvblR5cGUuVGFibGUsXG5cdFx0YW5ub3RhdGlvbjogZ2V0VGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbih1bmRlZmluZWQsIFwiXCIsIGNvbnZlcnRlckNvbnRleHQsIHRhYmxlTWFuaWZlc3RDb25maWcpLFxuXHRcdGNvbnRyb2w6IHRhYmxlTWFuaWZlc3RDb25maWcsXG5cdFx0YWN0aW9uczogW10sXG5cdFx0Y29sdW1uczogZ2V0Q29sdW1uc0Zyb21FbnRpdHlUeXBlKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkuZW50aXR5VHlwZSwgW10sIGNvbnZlcnRlckNvbnRleHQpXG5cdH07XG59XG5cbi8qKlxuICogTG9vcCB0aHJvdWdoIHRoZSBkYXRhZmllbGQgb2YgYSBsaW5laXRlbSB0byBmaW5kIHRoZSBhY3Rpb25zIHRoYXQgd2lsbCBiZSBwdXQgaW4gdGhlIHRvb2xiYXJcbiAqIEFuZCBjaGVjayBpZiB0aGV5IHJlcXVpcmUgYSBjb250ZXh0IG9yIG5vdC5cbiAqXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gaWYgaXQncyB0aGUgY2FzZVxuICovXG5mdW5jdGlvbiBoYXNBY3Rpb25SZXF1aXJpbmdDb250ZXh0KGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0pOiBib29sZWFuIHtcblx0cmV0dXJuIGxpbmVJdGVtQW5ub3RhdGlvbi5zb21lKGRhdGFGaWVsZCA9PiB7XG5cdFx0aWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uKSB7XG5cdFx0XHRyZXR1cm4gZGF0YUZpZWxkLklubGluZSAhPT0gdHJ1ZTtcblx0XHR9IGVsc2UgaWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKSB7XG5cdFx0XHRyZXR1cm4gZGF0YUZpZWxkLklubGluZSAhPT0gdHJ1ZSAmJiBkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0O1xuXHRcdH1cblx0fSk7XG59XG5cbmZ1bmN0aW9uIGhhc0FjdGlvblJlcXVpcmluZ1NlbGVjdGlvbihtYW5pZmVzdEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj4pOiBib29sZWFuIHtcblx0bGV0IHJlcXVpcmVzU2VsZWN0aW9uS2V5OiBib29sZWFuID0gZmFsc2U7XG5cdGlmIChtYW5pZmVzdEFjdGlvbnMpIHtcblx0XHRyZXF1aXJlc1NlbGVjdGlvbktleSA9IE9iamVjdC5rZXlzKG1hbmlmZXN0QWN0aW9ucykuc29tZShhY3Rpb25LZXkgPT4ge1xuXHRcdFx0Y29uc3QgYWN0aW9uID0gbWFuaWZlc3RBY3Rpb25zW2FjdGlvbktleV07XG5cdFx0XHRyZXR1cm4gYWN0aW9uLnJlcXVpcmVzU2VsZWN0aW9uID09PSB0cnVlO1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiByZXF1aXJlc1NlbGVjdGlvbktleTtcbn1cblxuLyoqXG4gKiBFdmFsdWF0ZSBpZiB0aGUgdmlzdWFsaXphdGlvbiBwYXRoIGlzIGRlbGV0YWJsZSBvciB1cGRhdGFibGVcbiAqIFRoZSBhbGdvcml0aG0gaXMgYXMgZm9sbG93XG4gKiAtIEV2YWx1YXRlIGlmIHRoZXJlIGlzIGEgTmF2aWdhdGlvblJlc3RyaWN0aW9ucy5EZWxldGFibGUgb3IgTmF2aWdhdGlvblJlc3RyaWN0aW9ucy5VcGRhdGFibGUgb24gdGhlIGZ1bGwgbmF2aWdhdGlvblBhdGhcbiAqIC0gR28gZG93biB0aGUgZW50aXR5IHNldCBvZiB0aGUgcGF0aCBldmFsdWF0aW5nIHRoZSBzYW1lIGVsZW1lbnQgYW5kIGZvciB0aGUgbGFzdCBwYXJ0IGV2YWx1YXRlIHRoZSBEZWxldGVSZXN0cmljdGlvbnMuRGVsZXRhYmxlIG9yIFVwZGF0ZVJlc3RyaWN0aW9ucy5VcGRhdGFibGUgdGhlcmUuXG4gKlxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMge1RhYmxlQ2FwYWJpbGl0eVJlc3RyaWN0aW9ufSB0aGUgdGFibGUgY2FwYWJpbGl0aWVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDYXBhYmlsaXR5UmVzdHJpY3Rpb24odmlzdWFsaXphdGlvblBhdGg6IHN0cmluZywgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IFRhYmxlQ2FwYWJpbGl0eVJlc3RyaWN0aW9uIHtcblx0Y29uc3QgeyBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIH0gPSBzcGxpdFBhdGgodmlzdWFsaXphdGlvblBhdGgpO1xuXHRjb25zdCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoUGFydHMgPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLnNwbGl0KFwiL1wiKTtcblx0Y29uc3Qgb0NhcGFiaWxpdHlSZXN0cmljdGlvbiA9IHsgaXNEZWxldGFibGU6IHRydWUsIGlzVXBkYXRhYmxlOiB0cnVlIH07XG5cdGxldCBjdXJyZW50RW50aXR5U2V0OiBFbnRpdHlTZXQgfCBudWxsID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0d2hpbGUgKFxuXHRcdChvQ2FwYWJpbGl0eVJlc3RyaWN0aW9uLmlzRGVsZXRhYmxlIHx8IG9DYXBhYmlsaXR5UmVzdHJpY3Rpb24uaXNVcGRhdGFibGUpICYmXG5cdFx0Y3VycmVudEVudGl0eVNldCAmJlxuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhQYXJ0cy5sZW5ndGggPiAwXG5cdCkge1xuXHRcdGNvbnN0IHBhdGhzVG9DaGVjazogc3RyaW5nW10gPSBbXTtcblx0XHRuYXZpZ2F0aW9uUHJvcGVydHlQYXRoUGFydHMucmVkdWNlKChwYXRocywgbmF2aWdhdGlvblByb3BlcnR5UGF0aFBhcnQpID0+IHtcblx0XHRcdGlmIChwYXRocy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHBhdGhzICs9IFwiL1wiO1xuXHRcdFx0fVxuXHRcdFx0cGF0aHMgKz0gbmF2aWdhdGlvblByb3BlcnR5UGF0aFBhcnQ7XG5cdFx0XHRwYXRoc1RvQ2hlY2sucHVzaChwYXRocyk7XG5cdFx0XHRyZXR1cm4gcGF0aHM7XG5cdFx0fSwgXCJcIik7XG5cdFx0bGV0IGhhc1Jlc3RyaWN0ZWRQYXRoT25EZWxldGUgPSBmYWxzZSxcblx0XHRcdGhhc1Jlc3RyaWN0ZWRQYXRoT25VcGRhdGUgPSBmYWxzZTtcblx0XHRjdXJyZW50RW50aXR5U2V0LmFubm90YXRpb25zLkNhcGFiaWxpdGllcz8uTmF2aWdhdGlvblJlc3RyaWN0aW9ucz8uUmVzdHJpY3RlZFByb3BlcnRpZXMuZm9yRWFjaChcblx0XHRcdChyZXN0cmljdGVkTmF2UHJvcDogTmF2aWdhdGlvblByb3BlcnR5UmVzdHJpY3Rpb25UeXBlcykgPT4ge1xuXHRcdFx0XHRpZiAocmVzdHJpY3RlZE5hdlByb3A/Lk5hdmlnYXRpb25Qcm9wZXJ0eT8udHlwZSA9PT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCIpIHtcblx0XHRcdFx0XHRpZiAocmVzdHJpY3RlZE5hdlByb3AuRGVsZXRlUmVzdHJpY3Rpb25zPy5EZWxldGFibGUgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0XHRoYXNSZXN0cmljdGVkUGF0aE9uRGVsZXRlID1cblx0XHRcdFx0XHRcdFx0aGFzUmVzdHJpY3RlZFBhdGhPbkRlbGV0ZSB8fCBwYXRoc1RvQ2hlY2suaW5kZXhPZihyZXN0cmljdGVkTmF2UHJvcC5OYXZpZ2F0aW9uUHJvcGVydHkudmFsdWUpICE9PSAtMTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKHJlc3RyaWN0ZWROYXZQcm9wLlVwZGF0ZVJlc3RyaWN0aW9ucz8uVXBkYXRhYmxlID09PSBmYWxzZSkge1xuXHRcdFx0XHRcdFx0aGFzUmVzdHJpY3RlZFBhdGhPblVwZGF0ZSA9XG5cdFx0XHRcdFx0XHRcdGhhc1Jlc3RyaWN0ZWRQYXRoT25VcGRhdGUgfHwgcGF0aHNUb0NoZWNrLmluZGV4T2YocmVzdHJpY3RlZE5hdlByb3AuTmF2aWdhdGlvblByb3BlcnR5LnZhbHVlKSAhPT0gLTE7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0KTtcblx0XHRvQ2FwYWJpbGl0eVJlc3RyaWN0aW9uLmlzRGVsZXRhYmxlID0gIWhhc1Jlc3RyaWN0ZWRQYXRoT25EZWxldGU7XG5cdFx0b0NhcGFiaWxpdHlSZXN0cmljdGlvbi5pc1VwZGF0YWJsZSA9ICFoYXNSZXN0cmljdGVkUGF0aE9uVXBkYXRlO1xuXHRcdGNvbnN0IG5hdlByb3BOYW1lID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aFBhcnRzLnNoaWZ0KCk7XG5cdFx0aWYgKG5hdlByb3BOYW1lKSB7XG5cdFx0XHRjb25zdCBuYXZQcm9wOiBOYXZpZ2F0aW9uUHJvcGVydHkgPSBjdXJyZW50RW50aXR5U2V0LmVudGl0eVR5cGUubmF2aWdhdGlvblByb3BlcnRpZXMuZmluZChcblx0XHRcdFx0bmF2UHJvcCA9PiBuYXZQcm9wLm5hbWUgPT0gbmF2UHJvcE5hbWVcblx0XHRcdCkgYXMgTmF2aWdhdGlvblByb3BlcnR5O1xuXHRcdFx0aWYgKG5hdlByb3AgJiYgIW5hdlByb3AuY29udGFpbnNUYXJnZXQgJiYgY3VycmVudEVudGl0eVNldC5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nLmhhc093blByb3BlcnR5KG5hdlByb3BOYW1lKSkge1xuXHRcdFx0XHRjdXJyZW50RW50aXR5U2V0ID0gY3VycmVudEVudGl0eVNldC5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nW25hdlByb3BOYW1lXTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIENvbnRhaW5lZCBuYXZQcm9wIG1lYW5zIG5vIGVudGl0eVNldCB0byByZXBvcnQgdG9cblx0XHRcdFx0Y3VycmVudEVudGl0eVNldCA9IG51bGw7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGlmIChjdXJyZW50RW50aXR5U2V0ICE9PSBudWxsICYmIGN1cnJlbnRFbnRpdHlTZXQuYW5ub3RhdGlvbnMpIHtcblx0XHRpZiAob0NhcGFiaWxpdHlSZXN0cmljdGlvbi5pc0RlbGV0YWJsZSkge1xuXHRcdFx0Ly8gSWYgdGhlcmUgaXMgc3RpbGwgYW4gZW50aXR5c2V0LCBjaGVjayB0aGUgZW50aXR5c2V0IGRlbGV0YWJsZSBzdGF0dXNcblx0XHRcdG9DYXBhYmlsaXR5UmVzdHJpY3Rpb24uaXNEZWxldGFibGUgPSBjdXJyZW50RW50aXR5U2V0LmFubm90YXRpb25zLkNhcGFiaWxpdGllcz8uRGVsZXRlUmVzdHJpY3Rpb25zPy5EZWxldGFibGUgIT09IGZhbHNlO1xuXHRcdH1cblx0XHRpZiAob0NhcGFiaWxpdHlSZXN0cmljdGlvbi5pc1VwZGF0YWJsZSkge1xuXHRcdFx0Ly8gSWYgdGhlcmUgaXMgc3RpbGwgYW4gZW50aXR5c2V0LCBjaGVjayB0aGUgZW50aXR5c2V0IHVwZGF0YWJsZSBzdGF0dXNcblx0XHRcdG9DYXBhYmlsaXR5UmVzdHJpY3Rpb24uaXNVcGRhdGFibGUgPSBjdXJyZW50RW50aXR5U2V0LmFubm90YXRpb25zLkNhcGFiaWxpdGllcz8uVXBkYXRlUmVzdHJpY3Rpb25zPy5VcGRhdGFibGUgIT09IGZhbHNlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb0NhcGFiaWxpdHlSZXN0cmljdGlvbjtcbn1cblxuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uTW9kZShcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0aXNFbnRpdHlTZXQ6IGJvb2xlYW4sXG5cdG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IHN0cmluZ1xuKTogc3RyaW5nIHtcblx0aWYgKCFsaW5lSXRlbUFubm90YXRpb24pIHtcblx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5Ob25lO1xuXHR9XG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RTZXR0aW5ncyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGxldCBzZWxlY3Rpb25Nb2RlID0gdGFibGVNYW5pZmVzdFNldHRpbmdzLnRhYmxlU2V0dGluZ3M/LnNlbGVjdGlvbk1vZGU7XG5cdGNvbnN0IG1hbmlmZXN0QWN0aW9ucyA9IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKS5hY3Rpb25zLFxuXHRcdHVuZGVmaW5lZCxcblx0XHRmYWxzZVxuXHQpO1xuXHRsZXQgaXNQYXJlbnREZWxldGFibGUsIHBhcmVudEVudGl0eVNldERlbGV0YWJsZTtcblx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlKSB7XG5cdFx0aXNQYXJlbnREZWxldGFibGUgPSBpc1BhdGhEZWxldGFibGUoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpO1xuXHRcdHBhcmVudEVudGl0eVNldERlbGV0YWJsZSA9IGlzUGFyZW50RGVsZXRhYmxlID8gY29tcGlsZUJpbmRpbmcoaXNQYXJlbnREZWxldGFibGUsIHRydWUpIDogaXNQYXJlbnREZWxldGFibGU7XG5cdH1cblx0aWYgKHNlbGVjdGlvbk1vZGUgJiYgc2VsZWN0aW9uTW9kZSA9PT0gU2VsZWN0aW9uTW9kZS5Ob25lKSB7XG5cdFx0aWYgKGdldENhcGFiaWxpdHlSZXN0cmljdGlvbih2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCkuaXNEZWxldGFibGUgfHwgcGFyZW50RW50aXR5U2V0RGVsZXRhYmxlICE9PSBcImZhbHNlXCIpIHtcblx0XHRcdHJldHVybiBcIns9ICR7dWk+L2VkaXRNb2RlfSA9PT0gJ0VkaXRhYmxlJyA/ICdcIiArIFNlbGVjdGlvbk1vZGUuTXVsdGkgKyBcIicgOiAnTm9uZSd9XCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNlbGVjdGlvbk1vZGUgPSBTZWxlY3Rpb25Nb2RlLk5vbmU7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKCFzZWxlY3Rpb25Nb2RlIHx8IHNlbGVjdGlvbk1vZGUgPT09IFNlbGVjdGlvbk1vZGUuQXV0bykge1xuXHRcdHNlbGVjdGlvbk1vZGUgPSBTZWxlY3Rpb25Nb2RlLk11bHRpO1xuXHR9XG5cdGlmIChoYXNBY3Rpb25SZXF1aXJpbmdDb250ZXh0KGxpbmVJdGVtQW5ub3RhdGlvbikgfHwgaGFzQWN0aW9uUmVxdWlyaW5nU2VsZWN0aW9uKG1hbmlmZXN0QWN0aW9ucykpIHtcblx0XHRyZXR1cm4gc2VsZWN0aW9uTW9kZTtcblx0fSBlbHNlIGlmIChnZXRDYXBhYmlsaXR5UmVzdHJpY3Rpb24odmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpLmlzRGVsZXRhYmxlIHx8IHBhcmVudEVudGl0eVNldERlbGV0YWJsZSAhPT0gXCJmYWxzZVwiKSB7XG5cdFx0aWYgKCFpc0VudGl0eVNldCkge1xuXHRcdFx0cmV0dXJuIFwiez0gJHt1aT4vZWRpdE1vZGV9ID09PSAnRWRpdGFibGUnID8gJ1wiICsgc2VsZWN0aW9uTW9kZSArIFwiJyA6ICdOb25lJ31cIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHNlbGVjdGlvbk1vZGU7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBTZWxlY3Rpb25Nb2RlLk5vbmU7XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIHJldHJpZXZlIGFsbCB0YWJsZSBhY3Rpb25zIGZyb20gYW5ub3RhdGlvbnMuXG4gKlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvblxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMge1JlY29yZDxCYXNlQWN0aW9uLCBCYXNlQWN0aW9uPn0gdGhlIHRhYmxlIGFubm90YXRpb24gYWN0aW9uc1xuICovXG5mdW5jdGlvbiBnZXRUYWJsZUFubm90YXRpb25BY3Rpb25zKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBCYXNlQWN0aW9uW10ge1xuXHRjb25zdCB0YWJsZUFjdGlvbnM6IEJhc2VBY3Rpb25bXSA9IFtdO1xuXHRpZiAobGluZUl0ZW1Bbm5vdGF0aW9uKSB7XG5cdFx0Y29uc3QgYWJzb2x1dGVQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0XHRsaW5lSXRlbUFubm90YXRpb24uZm9yRWFjaCgoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLCBpbmRleCkgPT4ge1xuXHRcdFx0bGV0IHRhYmxlQWN0aW9uOiBBbm5vdGF0aW9uQWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRpc0RhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0KGRhdGFGaWVsZCkgJiZcblx0XHRcdFx0IShkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4gPT09IHRydWUpICYmXG5cdFx0XHRcdCFkYXRhRmllbGQuSW5saW5lICYmXG5cdFx0XHRcdCFkYXRhRmllbGQuRGV0ZXJtaW5pbmdcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCBhbm5vdGF0aW9uUGF0aCA9IGFic29sdXRlUGF0aCArIFwiL1wiICsgaW5kZXg7XG5cdFx0XHRcdGNvbnN0IGtleSA9IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKTtcblx0XHRcdFx0c3dpdGNoIChkYXRhRmllbGQuJFR5cGUpIHtcblx0XHRcdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQWN0aW9uXCI6XG5cdFx0XHRcdFx0XHR0YWJsZUFjdGlvbiA9IHtcblx0XHRcdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb25QYXRoOiBhbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0XHRcdFx0a2V5OiBrZXksXG5cdFx0XHRcdFx0XHRcdGlzTmF2aWdhYmxlOiB0cnVlXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXCI6XG5cdFx0XHRcdFx0XHR0YWJsZUFjdGlvbiA9IHtcblx0XHRcdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb25QYXRoOiBhbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0XHRcdFx0a2V5OiBrZXlcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICh0YWJsZUFjdGlvbikge1xuXHRcdFx0XHR0YWJsZUFjdGlvbnMucHVzaCh0YWJsZUFjdGlvbik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHRhYmxlQWN0aW9ucztcbn1cblxuZnVuY3Rpb24gZ2V0Q3JpdGljYWxpdHlCaW5kaW5nQnlFbnVtKENyaXRpY2FsaXR5RW51bTogRW51bVZhbHVlPENyaXRpY2FsaXR5VHlwZT4pIHtcblx0bGV0IGNyaXRpY2FsaXR5UHJvcGVydHk7XG5cdHN3aXRjaCAoQ3JpdGljYWxpdHlFbnVtKSB7XG5cdFx0Y2FzZSBcIlVJLkNyaXRpY2FsaXR5VHlwZS9OZWdhdGl2ZVwiOlxuXHRcdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLkVycm9yO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIlVJLkNyaXRpY2FsaXR5VHlwZS9Dcml0aWNhbFwiOlxuXHRcdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLldhcm5pbmc7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiVUkuQ3JpdGljYWxpdHlUeXBlL1Bvc2l0aXZlXCI6XG5cdFx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuU3VjY2Vzcztcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJVSS5Dcml0aWNhbGl0eVR5cGUvTmV1dHJhbFwiOlxuXHRcdGRlZmF1bHQ6XG5cdFx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0fVxuXHRyZXR1cm4gY3JpdGljYWxpdHlQcm9wZXJ0eTtcbn1cblxuZnVuY3Rpb24gZ2V0SGlnaGxpZ2h0Um93QmluZGluZyhcblx0Y3JpdGljYWxpdHlBbm5vdGF0aW9uOiBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248Q3JpdGljYWxpdHlUeXBlPiB8IEVudW1WYWx1ZTxDcml0aWNhbGl0eVR5cGU+IHwgdW5kZWZpbmVkLFxuXHRpc0RyYWZ0Um9vdDogYm9vbGVhblxuKTogRXhwcmVzc2lvbjxNZXNzYWdlVHlwZT4ge1xuXHRsZXQgZGVmYXVsdEhpZ2hsaWdodFJvd0RlZmluaXRpb246IE1lc3NhZ2VUeXBlIHwgRXhwcmVzc2lvbjxNZXNzYWdlVHlwZT4gPSBNZXNzYWdlVHlwZS5Ob25lO1xuXHRpZiAoY3JpdGljYWxpdHlBbm5vdGF0aW9uKSB7XG5cdFx0aWYgKHR5cGVvZiBjcml0aWNhbGl0eUFubm90YXRpb24gPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdGRlZmF1bHRIaWdobGlnaHRSb3dEZWZpbml0aW9uID0gYW5ub3RhdGlvbkV4cHJlc3Npb24oY3JpdGljYWxpdHlBbm5vdGF0aW9uKSBhcyBFeHByZXNzaW9uPE1lc3NhZ2VUeXBlPjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gRW51bSBWYWx1ZSBzbyB3ZSBnZXQgdGhlIGNvcnJlc3BvbmRpbmcgc3RhdGljIHBhcnRcblx0XHRcdGRlZmF1bHRIaWdobGlnaHRSb3dEZWZpbml0aW9uID0gZ2V0Q3JpdGljYWxpdHlCaW5kaW5nQnlFbnVtKGNyaXRpY2FsaXR5QW5ub3RhdGlvbik7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBpZkVsc2UoXG5cdFx0aXNEcmFmdFJvb3QgJiYgRHJhZnQuSXNOZXdPYmplY3QsXG5cdFx0TWVzc2FnZVR5cGUuSW5mb3JtYXRpb24gYXMgTWVzc2FnZVR5cGUsXG5cdFx0Zm9ybWF0UmVzdWx0KFtkZWZhdWx0SGlnaGxpZ2h0Um93RGVmaW5pdGlvbl0sIHRhYmxlRm9ybWF0dGVycy5yb3dIaWdobGlnaHRpbmcpXG5cdCk7XG59XG5cbmZ1bmN0aW9uIF9nZXRDcmVhdGlvbkJlaGF2aW91cihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdG5hdmlnYXRpb25TZXR0aW5nczogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvblxuKTogVGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbltcImNyZWF0ZVwiXSB7XG5cdGNvbnN0IG5hdmlnYXRpb24gPSBuYXZpZ2F0aW9uU2V0dGluZ3M/LmNyZWF0ZSB8fCBuYXZpZ2F0aW9uU2V0dGluZ3M/LmRldGFpbDtcblxuXHQvLyBjcm9zcy1hcHBcblx0aWYgKG5hdmlnYXRpb24/Lm91dGJvdW5kICYmIG5hdmlnYXRpb24ub3V0Ym91bmREZXRhaWwgJiYgbmF2aWdhdGlvblNldHRpbmdzPy5jcmVhdGUpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bW9kZTogXCJFeHRlcm5hbFwiLFxuXHRcdFx0b3V0Ym91bmQ6IG5hdmlnYXRpb24ub3V0Ym91bmQsXG5cdFx0XHRvdXRib3VuZERldGFpbDogbmF2aWdhdGlvbi5vdXRib3VuZERldGFpbCxcblx0XHRcdG5hdmlnYXRpb25TZXR0aW5nczogbmF2aWdhdGlvblNldHRpbmdzXG5cdFx0fTtcblx0fVxuXG5cdGxldCBuZXdBY3Rpb247XG5cdGlmIChsaW5lSXRlbUFubm90YXRpb24pIHtcblx0XHQvLyBpbi1hcHBcblx0XHRjb25zdCB0YXJnZXRFbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShsaW5lSXRlbUFubm90YXRpb24pO1xuXHRcdGNvbnN0IHRhcmdldEFubm90YXRpb25zID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRGb3JFbnRpdHlUeXBlKHRhcmdldEVudGl0eVR5cGUpPy5hbm5vdGF0aW9ucztcblx0XHRuZXdBY3Rpb24gPSB0YXJnZXRBbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdFJvb3Q/Lk5ld0FjdGlvbiB8fCB0YXJnZXRBbm5vdGF0aW9ucz8uU2Vzc2lvbj8uU3RpY2t5U2Vzc2lvblN1cHBvcnRlZD8uTmV3QWN0aW9uOyAvLyBUT0RPOiBJcyB0aGVyZSByZWFsbHkgbm8gJ05ld0FjdGlvbicgb24gRHJhZnROb2RlPyB0YXJnZXRBbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdE5vZGU/Lk5ld0FjdGlvblxuXG5cdFx0aWYgKHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLkNyZWF0aW9uUm93ICYmIG5ld0FjdGlvbikge1xuXHRcdFx0Ly8gQSBjb21iaW5hdGlvbiBvZiAnQ3JlYXRpb25Sb3cnIGFuZCAnTmV3QWN0aW9uJyBkb2VzIG5vdCBtYWtlIHNlbnNlXG5cdFx0XHQvLyBUT0RPOiBPciBkb2VzIGl0P1xuXHRcdFx0dGhyb3cgRXJyb3IoYENyZWF0aW9uIG1vZGUgJyR7Q3JlYXRpb25Nb2RlLkNyZWF0aW9uUm93fScgY2FuIG5vdCBiZSB1c2VkIHdpdGggYSBjdXN0b20gJ25ldycgYWN0aW9uICgke25ld0FjdGlvbn0pYCk7XG5cdFx0fVxuXHRcdGlmIChuYXZpZ2F0aW9uPy5yb3V0ZSkge1xuXHRcdFx0Ly8gcm91dGUgc3BlY2lmaWVkXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRtb2RlOiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUsXG5cdFx0XHRcdGFwcGVuZDogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRlQXRFbmQsXG5cdFx0XHRcdG5ld0FjdGlvbjogbmV3QWN0aW9uLFxuXHRcdFx0XHRuYXZpZ2F0ZVRvVGFyZ2V0OiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5OZXdQYWdlID8gbmF2aWdhdGlvbi5yb3V0ZSA6IHVuZGVmaW5lZCAvLyBuYXZpZ2F0ZSBvbmx5IGluIE5ld1BhZ2UgbW9kZVxuXHRcdFx0fTtcblx0XHR9XG5cdH1cblxuXHQvLyBubyBuYXZpZ2F0aW9uIG9yIG5vIHJvdXRlIHNwZWNpZmllZCAtIGZhbGxiYWNrIHRvIGlubGluZSBjcmVhdGUgaWYgb3JpZ2luYWwgY3JlYXRpb24gbW9kZSB3YXMgJ05ld1BhZ2UnXG5cdGlmICh0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5OZXdQYWdlKSB7XG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlID0gQ3JlYXRpb25Nb2RlLklubGluZTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0bW9kZTogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlLFxuXHRcdGFwcGVuZDogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRlQXRFbmQsXG5cdFx0bmV3QWN0aW9uOiBuZXdBY3Rpb25cblx0fTtcbn1cblxuY29uc3QgX2dldFJvd0NvbmZpZ3VyYXRpb25Qcm9wZXJ0eSA9IGZ1bmN0aW9uKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRuYXZpZ2F0aW9uU2V0dGluZ3M6IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdHRhcmdldFBhdGg6IHN0cmluZ1xuKSB7XG5cdGxldCBwcmVzc1Byb3BlcnR5LCBuYXZpZ2F0aW9uVGFyZ2V0O1xuXHRsZXQgY3JpdGljYWxpdHlQcm9wZXJ0eTogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPE1lc3NhZ2VUeXBlPiA9IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdGNvbnN0IHRhcmdldEVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKGxpbmVJdGVtQW5ub3RhdGlvbik7XG5cdGlmIChuYXZpZ2F0aW9uU2V0dGluZ3MgJiYgbGluZUl0ZW1Bbm5vdGF0aW9uKSB7XG5cdFx0bmF2aWdhdGlvblRhcmdldCA9IG5hdmlnYXRpb25TZXR0aW5ncy5kaXNwbGF5Py50YXJnZXQgfHwgbmF2aWdhdGlvblNldHRpbmdzLmRldGFpbD8ub3V0Ym91bmQ7XG5cdFx0aWYgKG5hdmlnYXRpb25UYXJnZXQpIHtcblx0XHRcdHByZXNzUHJvcGVydHkgPVxuXHRcdFx0XHRcIi5oYW5kbGVycy5vbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQoICRjb250cm9sbGVyICwnXCIgKyBuYXZpZ2F0aW9uVGFyZ2V0ICsgXCInLCAkeyRwYXJhbWV0ZXJzPmJpbmRpbmdDb250ZXh0fSlcIjtcblx0XHR9IGVsc2UgaWYgKChuYXZpZ2F0aW9uVGFyZ2V0ID0gbmF2aWdhdGlvblNldHRpbmdzLmRldGFpbD8ucm91dGUpKSB7XG5cdFx0XHRpZiAodGFyZ2V0RW50aXR5VHlwZSkge1xuXHRcdFx0XHRjb25zdCB0YXJnZXRFbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEZvckVudGl0eVR5cGUodGFyZ2V0RW50aXR5VHlwZSk7XG5cdFx0XHRcdGlmICh0YXJnZXRFbnRpdHlTZXQpIHtcblx0XHRcdFx0XHRjb25zdCB0YXJnZXRBbm5vdGF0aW9ucyA9IHRhcmdldEVudGl0eVNldC5hbm5vdGF0aW9ucztcblx0XHRcdFx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gZ2V0SGlnaGxpZ2h0Um93QmluZGluZyhcblx0XHRcdFx0XHRcdGxpbmVJdGVtQW5ub3RhdGlvbi5hbm5vdGF0aW9ucz8uVUk/LkNyaXRpY2FsaXR5LFxuXHRcdFx0XHRcdFx0ISF0YXJnZXRBbm5vdGF0aW9ucy5Db21tb24/LkRyYWZ0Um9vdCB8fCAhIXRhcmdldEFubm90YXRpb25zLkNvbW1vbj8uRHJhZnROb2RlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRwcmVzc1Byb3BlcnR5ID1cblx0XHRcdFx0XHRcdFwiLnJvdXRpbmdMaXN0ZW5lci5uYXZpZ2F0ZUZvcndhcmRUb0NvbnRleHQoJHskcGFyYW1ldGVycz5iaW5kaW5nQ29udGV4dH0sIHsgdGFyZ2V0UGF0aDogJ1wiICtcblx0XHRcdFx0XHRcdHRhcmdldFBhdGggK1xuXHRcdFx0XHRcdFx0XCInLCBlZGl0YWJsZSA6IFwiICtcblx0XHRcdFx0XHRcdCh0YXJnZXRBbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdFJvb3QgfHwgdGFyZ2V0QW5ub3RhdGlvbnM/LkNvbW1vbj8uRHJhZnROb2RlXG5cdFx0XHRcdFx0XHRcdD8gXCIhJHskcGFyYW1ldGVycz5iaW5kaW5nQ29udGV4dH0uZ2V0UHJvcGVydHkoJ0lzQWN0aXZlRW50aXR5JylcIlxuXHRcdFx0XHRcdFx0XHQ6IFwidW5kZWZpbmVkXCIpICtcblx0XHRcdFx0XHRcdFwifSlcIjsgLy9OZWVkIHRvIGFjY2VzcyB0byBEcmFmdFJvb3QgYW5kIERyYWZ0Tm9kZSAhISEhISEhXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0Y29uc3Qgcm93TmF2aWdhdGVkRXhwcmVzc2lvbjogRXhwcmVzc2lvbjxib29sZWFuPiA9IGlmRWxzZShcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmlzRmNsRW5hYmxlZCgpLFxuXHRcdGZvcm1hdFJlc3VsdChbYmluZGluZ0V4cHJlc3Npb24oXCIvZGVlcGVzdFBhdGhcIiwgXCJmY2xuYXZpZ2F0ZWRcIildLCB0YWJsZUZvcm1hdHRlcnMuZmNsTmF2aWdhdGVkUm93LCB0YXJnZXRFbnRpdHlUeXBlKSxcblx0XHRmYWxzZVxuXHQpO1xuXHRyZXR1cm4ge1xuXHRcdHByZXNzOiBwcmVzc1Byb3BlcnR5LFxuXHRcdGFjdGlvbjogcHJlc3NQcm9wZXJ0eSA/IFwiTmF2aWdhdGlvblwiIDogdW5kZWZpbmVkLFxuXHRcdHJvd0hpZ2hsaWdodGluZzogY29tcGlsZUJpbmRpbmcoY3JpdGljYWxpdHlQcm9wZXJ0eSksXG5cdFx0cm93TmF2aWdhdGVkOiBjb21waWxlQmluZGluZyhyb3dOYXZpZ2F0ZWRFeHByZXNzaW9uKVxuXHR9O1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgY29sdW1ucyBmcm9tIHRoZSBlbnRpdHlUeXBlLlxuICpcbiAqIEBwYXJhbSBlbnRpdHlUeXBlXG4gKiBAcGFyYW0gYW5ub3RhdGlvbkNvbHVtbnNcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyB7VGFibGVDb2x1bW5bXX0gdGhlIGNvbHVtbiBmcm9tIHRoZSBlbnRpdHlUeXBlXG4gKi9cbmNvbnN0IGdldENvbHVtbnNGcm9tRW50aXR5VHlwZSA9IGZ1bmN0aW9uKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRhbm5vdGF0aW9uQ29sdW1uczogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10gPSBbXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogVGFibGVDb2x1bW5bXSB7XG5cdGNvbnN0IHRhYmxlQ29sdW1uczogVGFibGVDb2x1bW5bXSA9IFtdO1xuXHRlbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHk6IFByb3BlcnR5KSA9PiB7XG5cdFx0Ly8gQ2F0Y2ggYWxyZWFkeSBleGlzdGluZyBjb2x1bW5zIC0gd2hpY2ggd2VyZSBhZGRlZCBiZWZvcmUgYnkgTGluZUl0ZW0gQW5ub3RhdGlvbnNcblx0XHRjb25zdCBleGlzdHMgPSBhbm5vdGF0aW9uQ29sdW1ucy5zb21lKGNvbHVtbiA9PiB7XG5cdFx0XHRyZXR1cm4gY29sdW1uLm5hbWUgPT09IHByb3BlcnR5Lm5hbWU7XG5cdFx0fSk7XG5cblx0XHRpZiAoIWV4aXN0cykge1xuXHRcdFx0Y29uc3QgZW50aXR5TmFtZSA9IChjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEZvckVudGl0eVR5cGUoZW50aXR5VHlwZSkgfHwgZW50aXR5VHlwZSkubmFtZTtcblx0XHRcdHRhYmxlQ29sdW1ucy5wdXNoKHtcblx0XHRcdFx0a2V5OiBcIkRhdGFGaWVsZDo6XCIgKyBwcm9wZXJ0eS5uYW1lLFxuXHRcdFx0XHR0eXBlOiBDb2x1bW5UeXBlLkFubm90YXRpb24sXG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBcIi9cIiArIGVudGl0eU5hbWUgKyBcIi9cIiArIHByb3BlcnR5Lm5hbWUsXG5cdFx0XHRcdHBlcnNvbmFsaXphdGlvbk9ubHk6IHRydWUsXG5cdFx0XHRcdG5hbWU6IHByb3BlcnR5Lm5hbWUsXG5cdFx0XHRcdHZpc2libGU6IGNvbXBpbGVCaW5kaW5nKG5vdChlcXVhbChhbm5vdGF0aW9uRXhwcmVzc2lvbihwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiksIHRydWUpKSksXG5cdFx0XHRcdHRlbXBsYXRlOiBcInNhcC5mZS5tYWNyb3MudGFibGUuQ29sdW1uUHJvcGVydHlcIlxuXHRcdFx0fSBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4pO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiB0YWJsZUNvbHVtbnM7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYm9vbGVhbiB0cnVlIGZvciB2YWxpZCBjb2x1bW5zLCBmYWxzZSBmb3IgaW52YWxpZCBjb2x1bW5zLlxuICpcbiAqIEBwYXJhbSB7RGF0YUZpZWxkQWJzdHJhY3RUeXBlc30gZGF0YUZpZWxkIERpZmZlcmVudCBEYXRhRmllbGQgdHlwZXMgZGVmaW5lZCBpbiB0aGUgYW5ub3RhdGlvbnNcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGZvciB2YWxpZCBjb2x1bW5zLCBmYWxzZSBmb3IgaW52YWxpZCBjb2x1bW5zXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBfaXNWYWxpZENvbHVtbiA9IGZ1bmN0aW9uKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykge1xuXHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSkge1xuXHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIjpcblx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXCI6XG5cdFx0XHRyZXR1cm4gISFkYXRhRmllbGQuSW5saW5lO1xuXHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoQWN0aW9uXCI6XG5cdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjpcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkXCI6XG5cdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhVcmxcIjpcblx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQW5ub3RhdGlvblwiOlxuXHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGhcIjpcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdGRlZmF1bHQ6XG5cdFx0Ly8gVG9kbzogUmVwbGFjZSB3aXRoIHByb3BlciBMb2cgc3RhdGVtZW50IG9uY2UgYXZhaWxhYmxlXG5cdFx0Ly8gIHRocm93IG5ldyBFcnJvcihcIlVuaGFuZGxlZCBEYXRhRmllbGQgQWJzdHJhY3QgdHlwZTogXCIgKyBkYXRhRmllbGQuJFR5cGUpO1xuXHR9XG59O1xuXG4vKipcbiAqIEdldHRpbmcgdGhlIENvbHVtbiBOYW1lXG4gKiBJZiBpdCBwb2ludHMgdG8gYSBEYXRhRmllbGQgd2l0aCBvbmUgcHJvcGVydHkgb3IgRGF0YVBvaW50IHdpdGggb25lIHByb3BlcnR5IGl0IHdpbGwgdXNlIHRoZSBwcm9wZXJ0eSBuYW1lXG4gKiBoZXJlIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgZXhpc3RpbmcgZmxleCBjaGFuZ2VzLlxuICpcbiAqIEBwYXJhbSB7RGF0YUZpZWxkQWJzdHJhY3RUeXBlc30gZGF0YUZpZWxkIERpZmZlcmVudCBEYXRhRmllbGQgdHlwZXMgZGVmaW5lZCBpbiB0aGUgYW5ub3RhdGlvbnNcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgbmFtZSBvZiBhbm5vdGF0aW9uIGNvbHVtbnNcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IF9nZXRBbm5vdGF0aW9uQ29sdW1uTmFtZSA9IGZ1bmN0aW9uKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykge1xuXHQvLyBUaGlzIGlzIG5lZWRlZCBhcyB3ZSBoYXZlIGZsZXhpYmlsaXR5IGNoYW5nZXMgYWxyZWFkeSB0aGF0IHdlIGhhdmUgdG8gY2hlY2sgYWdhaW5zdFxuXHRpZiAoaXNEYXRhRmllbGRUeXBlcyhkYXRhRmllbGQpKSB7XG5cdFx0cmV0dXJuIGRhdGFGaWVsZC5WYWx1ZT8ucGF0aDtcblx0fSBlbHNlIGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiYgZGF0YUZpZWxkLlRhcmdldD8uJHRhcmdldD8uVmFsdWU/LnBhdGgpIHtcblx0XHQvLyBUaGlzIGlzIGZvciByZW1vdmluZyBkdXBsaWNhdGUgcHJvcGVydGllcy4gRm9yIGV4YW1wbGUgdGhlIFByb2dyZXNzIFByb3BlcnR5IGlmIHJlbW92ZWQgaWYgaXQgYWxyZWFkeSBpcyBkZWZpbmVkIGFzIGEgRGF0YVBvaW50XG5cdFx0cmV0dXJuIGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldC5WYWx1ZS5wYXRoO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCk7XG5cdH1cbn07XG5cbi8qKlxuICogUmV0dXJucyBsaW5lIGl0ZW1zIGZyb20gbWV0YWRhdGEgYW5ub3RhdGlvbnMuXG4gKlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvblxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMge1RhYmxlQ29sdW1uW119IHRoZSBjb2x1bW5zIGZyb20gdGhlIGFubm90YXRpb25zXG4gKi9cbmNvbnN0IGdldENvbHVtbnNGcm9tQW5ub3RhdGlvbnMgPSBmdW5jdGlvbihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogVGFibGVDb2x1bW5bXSB7XG5cdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKGxpbmVJdGVtQW5ub3RhdGlvbik7XG5cdGNvbnN0IGFubm90YXRpb25Db2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSA9IFtdO1xuXHRpZiAobGluZUl0ZW1Bbm5vdGF0aW9uKSB7XG5cdFx0Ly8gR2V0IGNvbHVtbnMgZnJvbSB0aGUgTGluZUl0ZW0gQW5ub3RhdGlvblxuXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLmZvckVhY2goKGxpbmVJdGVtLCBsaW5lSXRlbUluZGV4KSA9PiB7XG5cdFx0XHRpZiAoIV9pc1ZhbGlkQ29sdW1uKGxpbmVJdGVtKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGFubm90YXRpb25SZWZlcmVuY2UgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgodmlzdWFsaXphdGlvblBhdGgpICsgXCIvXCIgKyBsaW5lSXRlbUluZGV4O1xuXHRcdFx0YW5ub3RhdGlvbkNvbHVtbnMucHVzaCh7XG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBhbm5vdGF0aW9uUmVmZXJlbmNlLFxuXHRcdFx0XHR0eXBlOiBDb2x1bW5UeXBlLkFubm90YXRpb24sXG5cdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChsaW5lSXRlbSksXG5cdFx0XHRcdHdpZHRoOiBsaW5lSXRlbS5hbm5vdGF0aW9ucz8uSFRNTDU/LkNzc0RlZmF1bHRzPy53aWR0aCB8fCB1bmRlZmluZWQsXG5cdFx0XHRcdHBlcnNvbmFsaXphdGlvbk9ubHk6IGZhbHNlLFxuXHRcdFx0XHRuYW1lOiBfZ2V0QW5ub3RhdGlvbkNvbHVtbk5hbWUobGluZUl0ZW0pLFxuXHRcdFx0XHR2aXNpYmxlOiBjb21waWxlQmluZGluZyhub3QoZXF1YWwoYW5ub3RhdGlvbkV4cHJlc3Npb24obGluZUl0ZW0uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4pLCB0cnVlKSkpLFxuXHRcdFx0XHRpc05hdmlnYWJsZTogdHJ1ZVxuXHRcdFx0fSBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4pO1xuXHRcdH0pO1xuXHR9XG5cblx0Ly8gR2V0IGNvbHVtbnMgZnJvbSB0aGUgUHJvcGVydGllcyBvZiBFbnRpdHlUeXBlXG5cdGxldCB0YWJsZUNvbHVtbnMgPSBnZXRDb2x1bW5zRnJvbUVudGl0eVR5cGUoZW50aXR5VHlwZSwgYW5ub3RhdGlvbkNvbHVtbnMsIGNvbnZlcnRlckNvbnRleHQpO1xuXHR0YWJsZUNvbHVtbnMgPSB0YWJsZUNvbHVtbnMuY29uY2F0KGFubm90YXRpb25Db2x1bW5zKTtcblxuXHRyZXR1cm4gdGFibGVDb2x1bW5zO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRhYmxlIGNvbHVtbiBkZWZpbml0aW9ucyBmcm9tIG1hbmlmZXN0LlxuICpcbiAqIEBwYXJhbSBjb2x1bW5zXG4gKiBAcGFyYW0gbmF2aWdhdGlvblNldHRpbmdzXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgQ3VzdG9tQ29sdW1uPn0gdGhlIGNvbHVtbnMgZnJvbSB0aGUgbWFuaWZlc3RcbiAqL1xuY29uc3QgZ2V0Q29sdW1uc0Zyb21NYW5pZmVzdCA9IGZ1bmN0aW9uKFxuXHRjb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdFRhYmxlQ29sdW1uPixcblx0bmF2aWdhdGlvblNldHRpbmdzPzogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvblxuKTogUmVjb3JkPHN0cmluZywgQ3VzdG9tQ29sdW1uPiB7XG5cdGNvbnN0IGludGVybmFsQ29sdW1uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQ29sdW1uPiA9IHt9O1xuXHRmb3IgKGNvbnN0IGtleSBpbiBjb2x1bW5zKSB7XG5cdFx0Y29uc3QgbWFuaWZlc3RDb2x1bW4gPSBjb2x1bW5zW2tleV07XG5cdFx0S2V5SGVscGVyLmlzS2V5VmFsaWQoa2V5KTtcblx0XHRpbnRlcm5hbENvbHVtbnNba2V5XSA9IHtcblx0XHRcdGtleToga2V5LFxuXHRcdFx0aWQ6IFwiQ3VzdG9tQ29sdW1uOjpcIiArIGtleSxcblx0XHRcdG5hbWU6IFwiQ3VzdG9tQ29sdW1uOjpcIiArIGtleSxcblx0XHRcdGhlYWRlcjogbWFuaWZlc3RDb2x1bW4uaGVhZGVyLFxuXHRcdFx0d2lkdGg6IG1hbmlmZXN0Q29sdW1uLndpZHRoIHx8IHVuZGVmaW5lZCxcblx0XHRcdHR5cGU6IENvbHVtblR5cGUuRGVmYXVsdCxcblx0XHRcdHBlcnNvbmFsaXphdGlvbk9ubHk6IGZhbHNlLFxuXHRcdFx0dGVtcGxhdGU6IG1hbmlmZXN0Q29sdW1uLnRlbXBsYXRlIHx8IFwidW5kZWZpbmVkXCIsXG5cdFx0XHR2aXNpYmxlOiB0cnVlLFxuXHRcdFx0cG9zaXRpb246IHtcblx0XHRcdFx0YW5jaG9yOiBtYW5pZmVzdENvbHVtbi5wb3NpdGlvbj8uYW5jaG9yLFxuXHRcdFx0XHRwbGFjZW1lbnQ6IG1hbmlmZXN0Q29sdW1uLnBvc2l0aW9uID09PSB1bmRlZmluZWQgPyBQbGFjZW1lbnQuQWZ0ZXIgOiBtYW5pZmVzdENvbHVtbi5wb3NpdGlvbi5wbGFjZW1lbnRcblx0XHRcdH0sXG5cdFx0XHRpc05hdmlnYWJsZTogaXNBY3Rpb25OYXZpZ2FibGUobWFuaWZlc3RDb2x1bW4sIG5hdmlnYXRpb25TZXR0aW5ncywgdHJ1ZSlcblx0XHR9O1xuXHR9XG5cdHJldHVybiBpbnRlcm5hbENvbHVtbnM7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UDEzbk1vZGUodmlzdWFsaXphdGlvblBhdGg6IHN0cmluZywgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlcjogTWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3QgdGFibGVNYW5pZmVzdFNldHRpbmdzOiBUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudFR5cGUgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0VmFyaWFudE1hbmFnZW1lbnQoKTtcblx0Y29uc3QgaGFzVmFyaWFudE1hbmFnZW1lbnQ6IGJvb2xlYW4gPSBbXCJQYWdlXCIsIFwiQ29udHJvbFwiXS5pbmRleE9mKHZhcmlhbnRNYW5hZ2VtZW50KSA+IC0xO1xuXHRjb25zdCBhUGVyc29uYWxpemF0aW9uOiBzdHJpbmdbXSA9IFtdO1xuXHRpZiAoaGFzVmFyaWFudE1hbmFnZW1lbnQpIHtcblx0XHRpZiAodGFibGVNYW5pZmVzdFNldHRpbmdzPy50YWJsZVNldHRpbmdzPy5wZXJzb25hbGl6YXRpb24gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gUGVyc29uYWxpemF0aW9uIGNvbmZpZ3VyZWQgaW4gbWFuaWZlc3QuXG5cdFx0XHRjb25zdCBwZXJzb25hbGl6YXRpb246IGFueSA9IHRhYmxlTWFuaWZlc3RTZXR0aW5ncy50YWJsZVNldHRpbmdzLnBlcnNvbmFsaXphdGlvbjtcblx0XHRcdGlmIChwZXJzb25hbGl6YXRpb24gPT09IHRydWUpIHtcblx0XHRcdFx0Ly8gVGFibGUgcGVyc29uYWxpemF0aW9uIGZ1bGx5IGVuYWJsZWQuXG5cdFx0XHRcdHJldHVybiBcIlNvcnQsQ29sdW1uLEZpbHRlclwiO1xuXHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgcGVyc29uYWxpemF0aW9uID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdC8vIFNwZWNpZmljIHBlcnNvbmFsaXphdGlvbiBvcHRpb25zIGVuYWJsZWQgaW4gbWFuaWZlc3QuIFVzZSB0aGVtIGFzIGlzLlxuXHRcdFx0XHRpZiAocGVyc29uYWxpemF0aW9uLnNvcnQpIHtcblx0XHRcdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJTb3J0XCIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChwZXJzb25hbGl6YXRpb24uY29sdW1uKSB7XG5cdFx0XHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiQ29sdW1uXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChwZXJzb25hbGl6YXRpb24uZmlsdGVyKSB7XG5cdFx0XHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiRmlsdGVyXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBhUGVyc29uYWxpemF0aW9uLmpvaW4oXCIsXCIpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBObyBwZXJzb25hbGl6YXRpb24gY29uZmlndXJlZCBpbiBtYW5pZmVzdC5cblx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIlNvcnRcIik7XG5cdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJDb2x1bW5cIik7XG5cdFx0XHRpZiAodmFyaWFudE1hbmFnZW1lbnQgPT09IFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Db250cm9sKSB7XG5cdFx0XHRcdC8vIEZlYXR1cmUgcGFyaXR5IHdpdGggVjIuXG5cdFx0XHRcdC8vIEVuYWJsZSB0YWJsZSBmaWx0ZXJpbmcgYnkgZGVmYXVsdCBvbmx5IGluIGNhc2Ugb2YgQ29udHJvbCBsZXZlbCB2YXJpYW50IG1hbmFnZW1lbnQuXG5cdFx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkZpbHRlclwiKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBhUGVyc29uYWxpemF0aW9uLmpvaW4oXCIsXCIpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBnZXREZWxldGVIaWRkZW4oY3VycmVudEVudGl0eVNldDogRW50aXR5U2V0LCBuYXZpZ2F0aW9uUGF0aDogc3RyaW5nKSB7XG5cdGxldCBpc0RlbGV0ZUhpZGRlbjogYW55ID0gZmFsc2U7XG5cdGlmIChuYXZpZ2F0aW9uUGF0aCkge1xuXHRcdC8vIENoZWNrIGlmIFVJLkRlbGV0ZUhpZGRlbiBpcyBwb2ludGluZyB0byBwYXJlbnQgcGF0aFxuXHRcdGNvbnN0IGRlbGV0ZUhpZGRlbkFubm90YXRpb24gPSBjdXJyZW50RW50aXR5U2V0Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdbbmF2aWdhdGlvblBhdGhdPy5hbm5vdGF0aW9ucz8uVUk/LkRlbGV0ZUhpZGRlbjtcblx0XHRpZiAoZGVsZXRlSGlkZGVuQW5ub3RhdGlvbiAmJiAoZGVsZXRlSGlkZGVuQW5ub3RhdGlvbiBhcyBhbnkpLnBhdGgpIHtcblx0XHRcdGlmICgoZGVsZXRlSGlkZGVuQW5ub3RhdGlvbiBhcyBhbnkpLnBhdGguaW5kZXhPZihcIi9cIikgPiAwKSB7XG5cdFx0XHRcdGNvbnN0IGFTcGxpdEhpZGRlblBhdGggPSAoZGVsZXRlSGlkZGVuQW5ub3RhdGlvbiBhcyBhbnkpLnBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0XHRjb25zdCBzTmF2aWdhdGlvblBhdGggPSBhU3BsaXRIaWRkZW5QYXRoWzBdO1xuXHRcdFx0XHRjb25zdCBwYXJ0bmVyTmFtZSA9IChjdXJyZW50RW50aXR5U2V0IGFzIGFueSkuZW50aXR5VHlwZS5uYXZpZ2F0aW9uUHJvcGVydGllcy5maW5kKFxuXHRcdFx0XHRcdChuYXZQcm9wZXJ0eTogYW55KSA9PiBuYXZQcm9wZXJ0eS5uYW1lID09PSBuYXZpZ2F0aW9uUGF0aFxuXHRcdFx0XHQpLnBhcnRuZXI7XG5cdFx0XHRcdGlmIChwYXJ0bmVyTmFtZSA9PT0gc05hdmlnYXRpb25QYXRoKSB7XG5cdFx0XHRcdFx0aXNEZWxldGVIaWRkZW4gPSBkZWxldGVIaWRkZW5Bbm5vdGF0aW9uO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpc0RlbGV0ZUhpZGRlbiA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpc0RlbGV0ZUhpZGRlbiA9IGRlbGV0ZUhpZGRlbkFubm90YXRpb247XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGlzRGVsZXRlSGlkZGVuID0gY3VycmVudEVudGl0eVNldC5hbm5vdGF0aW9ucz8uVUk/LkRlbGV0ZUhpZGRlbjtcblx0fVxuXHRyZXR1cm4gaXNEZWxldGVIaWRkZW47XG59XG5cbi8qKlxuICogUmV0dXJucyB2aXNpYmlsaXR5IGZvciBEZWxldGUgYnV0dG9uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIG5hdmlnYXRpb25QYXRoXG4gKiBAcGFyYW0gaXNUYXJnZXREZWxldGFibGVcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZXRlVmlzaWJsZShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0bmF2aWdhdGlvblBhdGg6IHN0cmluZyxcblx0aXNUYXJnZXREZWxldGFibGU6IGJvb2xlYW5cbik6IEJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgY3VycmVudEVudGl0eVNldDogRW50aXR5U2V0IHwgbnVsbCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdGNvbnN0IGlzRGVsZXRlSGlkZGVuOiBhbnkgPSBnZXREZWxldGVIaWRkZW4oY3VycmVudEVudGl0eVNldCwgbmF2aWdhdGlvblBhdGgpO1xuXHRsZXQgaXNQYXJlbnREZWxldGFibGUsIHBhcmVudEVudGl0eVNldERlbGV0YWJsZTtcblx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlKSB7XG5cdFx0aXNQYXJlbnREZWxldGFibGUgPSBpc1BhdGhEZWxldGFibGUoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksIG5hdmlnYXRpb25QYXRoKTtcblx0XHRwYXJlbnRFbnRpdHlTZXREZWxldGFibGUgPSBpc1BhcmVudERlbGV0YWJsZSA/IGNvbXBpbGVCaW5kaW5nKGlzUGFyZW50RGVsZXRhYmxlKSA6IGlzUGFyZW50RGVsZXRhYmxlO1xuXHR9XG5cdC8vZG8gbm90IHNob3cgY2FzZSB0aGUgZGVsZXRlIGJ1dHRvbiBpZiBwYXJlbnRFbnRpdHlTZXREZWxldGFibGUgaXMgZmFsc2Vcblx0aWYgKHBhcmVudEVudGl0eVNldERlbGV0YWJsZSA9PT0gXCJmYWxzZVwiKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9IGVsc2UgaWYgKHBhcmVudEVudGl0eVNldERlbGV0YWJsZSkge1xuXHRcdC8vRGVsZXRlIEhpZGRlbiBpbiBjYXNlIG9mIHRydWUgYW5kIHBhdGggYmFzZWRcblx0XHRpZiAoaXNEZWxldGVIaWRkZW4pIHtcblx0XHRcdHJldHVybiBcIns9ICEke1wiICsgKG5hdmlnYXRpb25QYXRoID8gbmF2aWdhdGlvblBhdGggKyBcIi9cIiA6IFwiXCIpICsgaXNEZWxldGVIaWRkZW4ucGF0aCArIFwifSAmJiAke3VpPi9lZGl0TW9kZX0gPT09ICdFZGl0YWJsZSd9XCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBcIns9ICR7dWk+L2VkaXRNb2RlfSA9PT0gJ0VkaXRhYmxlJ31cIjtcblx0XHR9XG5cdH0gZWxzZSBpZiAoaXNEZWxldGVIaWRkZW4gPT09IHRydWUgfHwgIWlzVGFyZ2V0RGVsZXRhYmxlIHx8IGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2UpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZWxzZSBpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQpIHtcblx0XHRpZiAoaXNEZWxldGVIaWRkZW4pIHtcblx0XHRcdHJldHVybiBcIns9ICEke1wiICsgKG5hdmlnYXRpb25QYXRoID8gbmF2aWdhdGlvblBhdGggKyBcIi9cIiA6IFwiXCIpICsgaXNEZWxldGVIaWRkZW4ucGF0aCArIFwifSAmJiAke3VpPi9lZGl0TW9kZX0gPT09ICdFZGl0YWJsZSd9XCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBcIns9ICR7dWk+L2VkaXRNb2RlfSA9PT0gJ0VkaXRhYmxlJ31cIjtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0SW5zZXJ0YWJsZShjdXJyZW50RW50aXR5U2V0OiBFbnRpdHlTZXQsIG5hdmlnYXRpb25QYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcblx0bGV0IGlzSW5zZXJ0YWJsZTogYm9vbGVhbiA9IHRydWU7XG5cdGxldCBoYXNOYXZpZ2F0aW9uSW5zZXJ0UmVzdHJpY3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcblx0Y29uc3QgUmVzdHJpY3RlZFByb3BlcnRpZXMgPSBjdXJyZW50RW50aXR5U2V0Py5hbm5vdGF0aW9ucz8uQ2FwYWJpbGl0aWVzPy5OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zPy5SZXN0cmljdGVkUHJvcGVydGllcztcblx0aWYgKG5hdmlnYXRpb25QYXRoICYmIFJlc3RyaWN0ZWRQcm9wZXJ0aWVzKSB7XG5cdFx0Y29uc3QgcmVzdHJpY3RlZFByb3BlcnR5ID0gUmVzdHJpY3RlZFByb3BlcnRpZXMuZmluZChcblx0XHRcdHJlc3RyaWN0ZWRQcm9wZXJ0eSA9PlxuXHRcdFx0XHRyZXN0cmljdGVkUHJvcGVydHk/Lk5hdmlnYXRpb25Qcm9wZXJ0eT8udHlwZSA9PT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCIgJiZcblx0XHRcdFx0cmVzdHJpY3RlZFByb3BlcnR5Py5OYXZpZ2F0aW9uUHJvcGVydHk/LnZhbHVlID09PSBuYXZpZ2F0aW9uUGF0aCAmJlxuXHRcdFx0XHRyZXN0cmljdGVkUHJvcGVydHk/Lkluc2VydFJlc3RyaWN0aW9uc1xuXHRcdCk7XG5cdFx0aWYgKHJlc3RyaWN0ZWRQcm9wZXJ0eSkge1xuXHRcdFx0aXNJbnNlcnRhYmxlID0gcmVzdHJpY3RlZFByb3BlcnR5Py5JbnNlcnRSZXN0cmljdGlvbnM/Lkluc2VydGFibGUgIT09IGZhbHNlO1xuXHRcdFx0aGFzTmF2aWdhdGlvbkluc2VydFJlc3RyaWN0aW9uID0gdHJ1ZTtcblx0XHR9XG5cdH1cblx0aWYgKG5hdmlnYXRpb25QYXRoICYmICFoYXNOYXZpZ2F0aW9uSW5zZXJ0UmVzdHJpY3Rpb24pIHtcblx0XHRpc0luc2VydGFibGUgPVxuXHRcdFx0Y3VycmVudEVudGl0eVNldD8ubmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1tuYXZpZ2F0aW9uUGF0aF0/LmFubm90YXRpb25zPy5DYXBhYmlsaXRpZXM/Lkluc2VydFJlc3RyaWN0aW9ucz8uSW5zZXJ0YWJsZSAhPT1cblx0XHRcdGZhbHNlO1xuXHR9IGVsc2UgaWYgKCFuYXZpZ2F0aW9uUGF0aCkge1xuXHRcdGlzSW5zZXJ0YWJsZSA9IGN1cnJlbnRFbnRpdHlTZXQ/LmFubm90YXRpb25zPy5DYXBhYmlsaXRpZXM/Lkluc2VydFJlc3RyaWN0aW9ucz8uSW5zZXJ0YWJsZSAhPT0gZmFsc2U7XG5cdH1cblx0cmV0dXJuIGlzSW5zZXJ0YWJsZTtcbn1cblxuZnVuY3Rpb24gZ2V0Q3JlYXRlSGlkZGVuKGN1cnJlbnRFbnRpdHlTZXQ6IEVudGl0eVNldCwgbmF2aWdhdGlvblBhdGg6IHN0cmluZykge1xuXHRsZXQgaXNDcmVhdGVIaWRkZW46IGFueSA9IGZhbHNlO1xuXHRpZiAobmF2aWdhdGlvblBhdGgpIHtcblx0XHQvLyBDaGVjayBpZiBVSS5DcmVhdGVIaWRkZW4gaXMgcG9pbnRpbmcgdG8gcGFyZW50IHBhdGhcblx0XHRjb25zdCBjcmVhdGVIaWRkZW5Bbm5vdGF0aW9uID0gY3VycmVudEVudGl0eVNldC5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nW25hdmlnYXRpb25QYXRoXT8uYW5ub3RhdGlvbnM/LlVJPy5DcmVhdGVIaWRkZW47XG5cdFx0aWYgKGNyZWF0ZUhpZGRlbkFubm90YXRpb24gJiYgKGNyZWF0ZUhpZGRlbkFubm90YXRpb24gYXMgYW55KS5wYXRoKSB7XG5cdFx0XHRpZiAoKGNyZWF0ZUhpZGRlbkFubm90YXRpb24gYXMgYW55KS5wYXRoLmluZGV4T2YoXCIvXCIpID4gMCkge1xuXHRcdFx0XHRjb25zdCBhU3BsaXRIaWRkZW5QYXRoID0gKGNyZWF0ZUhpZGRlbkFubm90YXRpb24gYXMgYW55KS5wYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdFx0Y29uc3Qgc05hdmlnYXRpb25QYXRoID0gYVNwbGl0SGlkZGVuUGF0aFswXTtcblx0XHRcdFx0Y29uc3QgcGFydG5lck5hbWUgPSAoY3VycmVudEVudGl0eVNldCBhcyBhbnkpLmVudGl0eVR5cGUubmF2aWdhdGlvblByb3BlcnRpZXMuZmluZChcblx0XHRcdFx0XHQobmF2UHJvcGVydHk6IGFueSkgPT4gbmF2UHJvcGVydHkubmFtZSA9PT0gbmF2aWdhdGlvblBhdGhcblx0XHRcdFx0KS5wYXJ0bmVyO1xuXHRcdFx0XHRpZiAocGFydG5lck5hbWUgPT09IHNOYXZpZ2F0aW9uUGF0aCkge1xuXHRcdFx0XHRcdGlzQ3JlYXRlSGlkZGVuID0gY3JlYXRlSGlkZGVuQW5ub3RhdGlvbjtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aXNDcmVhdGVIaWRkZW4gPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0aXNDcmVhdGVIaWRkZW4gPSBjcmVhdGVIaWRkZW5Bbm5vdGF0aW9uO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRpc0NyZWF0ZUhpZGRlbiA9IGN1cnJlbnRFbnRpdHlTZXQuYW5ub3RhdGlvbnM/LlVJPy5DcmVhdGVIaWRkZW47XG5cdH1cblx0cmV0dXJuIGlzQ3JlYXRlSGlkZGVuO1xufVxuXG4vKipcbiAqIFJldHVybnMgdmlzaWJpbGl0eSBmb3IgQ3JlYXRlIGJ1dHRvblxuICpcbiAqIEBwYXJhbSBpc0xpc3RSZXBvcnRcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gbmF2aWdhdGlvblBhdGhcbiAqIEBwYXJhbSBjcmVhdGlvbkJlaGF2aW91clxuICogQHJldHVybnMgeyp9IEV4cHJlc3Npb24gb3IgQm9vbGVhbiB2YWx1ZSBvZiBjcmVhdGVoaWRkZW5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3JlYXRlVmlzaWJsZShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0bmF2aWdhdGlvblBhdGg6IHN0cmluZyxcblx0Y3JlYXRpb25CZWhhdmlvdXI6IFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb25bXCJjcmVhdGVcIl1cbik6IHN0cmluZyB8IHVuZGVmaW5lZCB8IGJvb2xlYW4ge1xuXHRjb25zdCBjdXJyZW50RW50aXR5U2V0OiBFbnRpdHlTZXQgfCBudWxsID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0Y29uc3QgaXNDcmVhdGVIaWRkZW46IGFueSA9IGdldENyZWF0ZUhpZGRlbihjdXJyZW50RW50aXR5U2V0LCBuYXZpZ2F0aW9uUGF0aCk7XG5cdGNvbnN0IGlzSW5zZXJ0YWJsZTogYm9vbGVhbiA9IGdldEluc2VydGFibGUoY3VycmVudEVudGl0eVNldCwgbmF2aWdhdGlvblBhdGgpO1xuXG5cdGlmIChpc0NyZWF0ZUhpZGRlbiA9PT0gdHJ1ZSB8fCBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9IGVsc2UgaWYgKGNyZWF0aW9uQmVoYXZpb3VyLm1vZGUgPT09IFwiRXh0ZXJuYWxcIikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGVsc2UgaWYgKCFpc0luc2VydGFibGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZWxzZSBpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQpIHtcblx0XHRpZiAoaXNDcmVhdGVIaWRkZW4pIHtcblx0XHRcdHJldHVybiBcIns9ICEke1wiICsgKG5hdmlnYXRpb25QYXRoID8gbmF2aWdhdGlvblBhdGggKyBcIi9cIiA6IFwiXCIpICsgaXNDcmVhdGVIaWRkZW4ucGF0aCArIFwifSAmJiAke3VpPi9lZGl0TW9kZX0gPT09ICdFZGl0YWJsZSd9XCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBcIns9ICR7dWk+L2VkaXRNb2RlfSA9PT0gJ0VkaXRhYmxlJ31cIjtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24oXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uLFxuXHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj86IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXNcbik6IFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24ge1xuXHQvLyBOZWVkIHRvIGdldCB0aGUgdGFyZ2V0XG5cdGNvbnN0IHsgbmF2aWdhdGlvblByb3BlcnR5UGF0aCB9ID0gc3BsaXRQYXRoKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0Y29uc3QgcGFnZU1hbmlmZXN0U2V0dGluZ3M6IE1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGNvbnN0IGVudGl0eU5hbWU6IHN0cmluZyA9IGVudGl0eVNldC5uYW1lLFxuXHRcdGlzRW50aXR5U2V0OiBib29sZWFuID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggPT09IDAsXG5cdFx0cDEzbk1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGdldFAxM25Nb2RlKHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRpZCA9IFRhYmxlSUQoaXNFbnRpdHlTZXQgPyBlbnRpdHlOYW1lIDogbmF2aWdhdGlvblByb3BlcnR5UGF0aCwgXCJMaW5lSXRlbVwiKTtcblx0Y29uc3Qgc2VsZWN0aW9uTW9kZSA9IGdldFNlbGVjdGlvbk1vZGUobGluZUl0ZW1Bbm5vdGF0aW9uLCB2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCwgaXNFbnRpdHlTZXQsIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpO1xuXHRjb25zdCB0YXJnZXRDYXBhYmlsaXRpZXMgPSBnZXRDYXBhYmlsaXR5UmVzdHJpY3Rpb24odmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRsZXQgdGhyZXNob2xkID0gaXNFbnRpdHlTZXQgPyAzMCA6IDEwO1xuXHRpZiAocHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24gJiYgcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24uTWF4SXRlbXMpIHtcblx0XHR0aHJlc2hvbGQgPSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbi5NYXhJdGVtcyBhcyBudW1iZXI7XG5cdH1cblxuXHRjb25zdCBuYXZpZ2F0aW9uT3JDb2xsZWN0aW9uTmFtZSA9IGlzRW50aXR5U2V0ID8gZW50aXR5TmFtZSA6IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg7XG5cdGNvbnN0IG5hdmlnYXRpb25TZXR0aW5ncyA9IHBhZ2VNYW5pZmVzdFNldHRpbmdzLmdldE5hdmlnYXRpb25Db25maWd1cmF0aW9uKG5hdmlnYXRpb25PckNvbGxlY3Rpb25OYW1lKTtcblx0Y29uc3QgY3JlYXRpb25CZWhhdmlvdXIgPSBfZ2V0Q3JlYXRpb25CZWhhdmlvdXIobGluZUl0ZW1Bbm5vdGF0aW9uLCB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiwgY29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblNldHRpbmdzKTtcblx0bGV0IGlzUGFyZW50RGVsZXRhYmxlOiBhbnksIHBhcmVudEVudGl0eVNldERlbGV0YWJsZTtcblx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlKSB7XG5cdFx0aXNQYXJlbnREZWxldGFibGUgPSBpc1BhdGhEZWxldGFibGUoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsIHRydWUpO1xuXHRcdGlmIChpc1BhcmVudERlbGV0YWJsZT8uY3VycmVudEVudGl0eVJlc3RyaWN0aW9uKSB7XG5cdFx0XHRwYXJlbnRFbnRpdHlTZXREZWxldGFibGUgPSB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHBhcmVudEVudGl0eVNldERlbGV0YWJsZSA9IGlzUGFyZW50RGVsZXRhYmxlID8gY29tcGlsZUJpbmRpbmcoaXNQYXJlbnREZWxldGFibGUsIHRydWUpIDogaXNQYXJlbnREZWxldGFibGU7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRpZDogaWQsXG5cdFx0ZW50aXR5TmFtZTogZW50aXR5TmFtZSxcblx0XHRjb2xsZWN0aW9uOiBcIi9cIiArIGVudGl0eU5hbWUgKyAoIWlzRW50aXR5U2V0ID8gXCIvXCIgKyBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIDogXCJcIiksXG5cdFx0bmF2aWdhdGlvblBhdGg6IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsXG5cdFx0aXNFbnRpdHlTZXQ6IGlzRW50aXR5U2V0LFxuXHRcdHJvdzogX2dldFJvd0NvbmZpZ3VyYXRpb25Qcm9wZXJ0eShcblx0XHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHRcdHZpc3VhbGl6YXRpb25QYXRoLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdG5hdmlnYXRpb25TZXR0aW5ncyxcblx0XHRcdG5hdmlnYXRpb25PckNvbGxlY3Rpb25OYW1lXG5cdFx0KSxcblx0XHRwMTNuTW9kZTogcDEzbk1vZGUsXG5cdFx0c2hvdzoge1xuXHRcdFx0XCJkZWxldGVcIjogZ2V0RGVsZXRlVmlzaWJsZShjb252ZXJ0ZXJDb250ZXh0LCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLCB0YXJnZXRDYXBhYmlsaXRpZXMuaXNEZWxldGFibGUpLFxuXHRcdFx0Y3JlYXRlOiBnZXRDcmVhdGVWaXNpYmxlKGNvbnZlcnRlckNvbnRleHQsIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsIGNyZWF0aW9uQmVoYXZpb3VyKSxcblx0XHRcdHVwZGF0ZTogZ2V0VXBkYXRhYmxlKGNvbnZlcnRlckNvbnRleHQpXG5cdFx0fSxcblx0XHRjcmVhdGU6IGNyZWF0aW9uQmVoYXZpb3VyLFxuXHRcdHNlbGVjdGlvbk1vZGU6IHNlbGVjdGlvbk1vZGUsXG5cdFx0YXV0b0JpbmRPbkluaXQ6IGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlLFxuXHRcdGVuYWJsZUNvbnRyb2xWTTogcGFnZU1hbmlmZXN0U2V0dGluZ3MuZ2V0VmFyaWFudE1hbmFnZW1lbnQoKSA9PT0gXCJDb250cm9sXCIgJiYgISFwMTNuTW9kZSxcblx0XHR0aHJlc2hvbGQ6IHRocmVzaG9sZCxcblx0XHRwYXJlbnRFbnRpdHlEZWxldGVFbmFibGVkOiBwYXJlbnRFbnRpdHlTZXREZWxldGFibGVcblx0fTtcbn1cblxuZnVuY3Rpb24gZ2V0VXBkYXRhYmxlKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpIHtcblx0Y29uc3QgdGVtcGxhdGVUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKTtcblx0aWYgKHRlbXBsYXRlVHlwZSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZSB8fCB0ZW1wbGF0ZVR5cGUgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0KSB7XG5cdFx0cmV0dXJuIFwiRGlzcGxheVwiO1xuXHR9XG5cdC8vIHVwZGF0YWJsZSB3aWxsIGJlIGhhbmRsZWQgYXQgdGhlIHByb3BlcnR5IGxldmVsXG5cdHJldHVybiBcInt1aT4vZWRpdE1vZGV9XCI7XG59XG5cbi8qKlxuICogU3BsaXQgdGhlIHZpc3VhbGl6YXRpb24gcGF0aCBpbnRvIHRoZSBuYXZpZ2F0aW9uIHByb3BlcnR5IHBhdGggYW5kIGFubm90YXRpb24uXG4gKlxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5mdW5jdGlvbiBzcGxpdFBhdGgodmlzdWFsaXphdGlvblBhdGg6IHN0cmluZykge1xuXHRsZXQgW25hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsIGFubm90YXRpb25QYXRoXSA9IHZpc3VhbGl6YXRpb25QYXRoLnNwbGl0KFwiQFwiKTtcblxuXHRpZiAobmF2aWdhdGlvblByb3BlcnR5UGF0aC5sYXN0SW5kZXhPZihcIi9cIikgPT09IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoIC0gMSkge1xuXHRcdC8vIERyb3AgdHJhaWxpbmcgc2xhc2hcblx0XHRuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5zdWJzdHIoMCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggLSAxKTtcblx0fVxuXHRyZXR1cm4geyBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLCBhbm5vdGF0aW9uUGF0aCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24oXG5cdHNlbGVjdGlvblZhcmlhbnRQYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgc2VsZWN0aW9uOiBTZWxlY3Rpb25WYXJpYW50VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oc2VsZWN0aW9uVmFyaWFudFBhdGgpIGFzIFNlbGVjdGlvblZhcmlhbnRUeXBlO1xuXG5cdGlmIChzZWxlY3Rpb24pIHtcblx0XHRjb25zdCBwcm9wZXJ0eU5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdHNlbGVjdGlvbi5TZWxlY3RPcHRpb25zPy5mb3JFYWNoKChzZWxlY3RPcHRpb246IFNlbGVjdE9wdGlvblR5cGUpID0+IHtcblx0XHRcdGNvbnN0IHByb3BlcnR5TmFtZTogYW55ID0gc2VsZWN0T3B0aW9uLlByb3BlcnR5TmFtZTtcblx0XHRcdGNvbnN0IFByb3BlcnR5UGF0aDogc3RyaW5nID0gcHJvcGVydHlOYW1lLnZhbHVlO1xuXHRcdFx0aWYgKHByb3BlcnR5TmFtZXMuaW5kZXhPZihQcm9wZXJ0eVBhdGgpID09PSAtMSkge1xuXHRcdFx0XHRwcm9wZXJ0eU5hbWVzLnB1c2goUHJvcGVydHlQYXRoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dGV4dDogc2VsZWN0aW9uLlRleHQgYXMgc3RyaW5nLFxuXHRcdFx0cHJvcGVydHlOYW1lczogcHJvcGVydHlOYW1lc1xuXHRcdH07XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50OiBib29sZWFuID0gZmFsc2Vcbik6IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24ge1xuXHRjb25zdCB0YWJsZU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgdGFibGVTZXR0aW5ncyA9IHRhYmxlTWFuaWZlc3RTZXR0aW5ncy50YWJsZVNldHRpbmdzO1xuXHRsZXQgcXVpY2tTZWxlY3Rpb25WYXJpYW50OiBhbnk7XG5cdGNvbnN0IHF1aWNrRmlsdGVyUGF0aHM6IHsgYW5ub3RhdGlvblBhdGg6IHN0cmluZyB9W10gPSBbXTtcblx0bGV0IGVuYWJsZUV4cG9ydCA9IHRydWU7XG5cdGxldCBjcmVhdGlvbk1vZGUgPSBDcmVhdGlvbk1vZGUuTmV3UGFnZTtcblx0bGV0IGZpbHRlcnM7XG5cdGxldCBjcmVhdGVBdEVuZCA9IHRydWU7XG5cdGxldCBkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhID0gZmFsc2U7XG5cdGxldCBjb25kZW5zZWRUYWJsZUxheW91dCA9IGZhbHNlO1xuXHRsZXQgaGlkZVRhYmxlVGl0bGUgPSBmYWxzZTtcblx0bGV0IHRhYmxlVHlwZSA9IFwiUmVzcG9uc2l2ZVRhYmxlXCI7XG5cdGxldCBzZWxlY3Rpb25MaW1pdCA9IDIwMDtcblx0bGV0IGVuYWJsZVBhc3RlID0gdHJ1ZTtcblx0Y29uc3Qgc2hlbGxTZXJ2aWNlcyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0U2hlbGxTZXJ2aWNlcygpO1xuXHRjb25zdCB1c2VyQ29udGVudERlbnNpdHkgPSBzaGVsbFNlcnZpY2VzPy5nZXRDb250ZW50RGVuc2l0eSgpO1xuXHRjb25zdCBhcHBDb250ZW50RGVuc2l0eSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0Q29udGVudERlbnNpdGllcygpO1xuXHRpZiAoKGFwcENvbnRlbnREZW5zaXR5Py5jb3p5ID09PSB0cnVlICYmIGFwcENvbnRlbnREZW5zaXR5Py5jb21wYWN0ICE9PSB0cnVlKSB8fCB1c2VyQ29udGVudERlbnNpdHkgPT09IFwiY296eVwiKSB7XG5cdFx0aXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudCA9IGZhbHNlO1xuXHR9XG5cdGlmICh0YWJsZVNldHRpbmdzICYmIGxpbmVJdGVtQW5ub3RhdGlvbikge1xuXHRcdGNvbnN0IHRhcmdldEVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKGxpbmVJdGVtQW5ub3RhdGlvbik7XG5cdFx0dGFibGVTZXR0aW5ncz8ucXVpY2tWYXJpYW50U2VsZWN0aW9uPy5wYXRocz8uZm9yRWFjaCgocGF0aDogeyBhbm5vdGF0aW9uUGF0aDogc3RyaW5nIH0pID0+IHtcblx0XHRcdHF1aWNrU2VsZWN0aW9uVmFyaWFudCA9IHRhcmdldEVudGl0eVR5cGUucmVzb2x2ZVBhdGgoXCJAXCIgKyBwYXRoLmFubm90YXRpb25QYXRoKTtcblx0XHRcdC8vIHF1aWNrU2VsZWN0aW9uVmFyaWFudCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24ocGF0aC5hbm5vdGF0aW9uUGF0aCk7XG5cdFx0XHRpZiAocXVpY2tTZWxlY3Rpb25WYXJpYW50KSB7XG5cdFx0XHRcdHF1aWNrRmlsdGVyUGF0aHMucHVzaCh7IGFubm90YXRpb25QYXRoOiBwYXRoLmFubm90YXRpb25QYXRoIH0pO1xuXHRcdFx0fVxuXHRcdFx0ZmlsdGVycyA9IHtcblx0XHRcdFx0cXVpY2tGaWx0ZXJzOiB7XG5cdFx0XHRcdFx0c2hvd0NvdW50czogdGFibGVTZXR0aW5ncz8ucXVpY2tWYXJpYW50U2VsZWN0aW9uPy5zaG93Q291bnRzLFxuXHRcdFx0XHRcdHBhdGhzOiBxdWlja0ZpbHRlclBhdGhzXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fSk7XG5cblx0XHRlbmFibGVFeHBvcnQgPVxuXHRcdFx0dGFibGVTZXR0aW5ncy5lbmFibGVFeHBvcnQgIT09IHVuZGVmaW5lZCA/IHRhYmxlU2V0dGluZ3MuZW5hYmxlRXhwb3J0IDogY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gXCJPYmplY3RQYWdlXCI7XG5cdFx0Y3JlYXRpb25Nb2RlID0gdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/Lm5hbWUgfHwgY3JlYXRpb25Nb2RlO1xuXHRcdGNyZWF0ZUF0RW5kID0gdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmNyZWF0ZUF0RW5kICE9PSB1bmRlZmluZWQgPyB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uY3JlYXRlQXRFbmQgOiB0cnVlO1xuXHRcdGRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGEgPSAhIXRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5kaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhO1xuXHRcdGNvbmRlbnNlZFRhYmxlTGF5b3V0ID0gdGFibGVTZXR0aW5ncy5jb25kZW5zZWRUYWJsZUxheW91dCAhPT0gdW5kZWZpbmVkID8gdGFibGVTZXR0aW5ncy5jb25kZW5zZWRUYWJsZUxheW91dCA6IGZhbHNlO1xuXHRcdGhpZGVUYWJsZVRpdGxlID0gISF0YWJsZVNldHRpbmdzLnF1aWNrVmFyaWFudFNlbGVjdGlvbj8uaGlkZVRhYmxlVGl0bGU7XG5cdFx0dGFibGVUeXBlID0gdGFibGVTZXR0aW5ncy50eXBlO1xuXHRcdHNlbGVjdGlvbkxpbWl0ID1cblx0XHRcdHRhYmxlU2V0dGluZ3Muc2VsZWN0QWxsID09PSB0cnVlIHx8IHRhYmxlU2V0dGluZ3Muc2VsZWN0aW9uTGltaXQgPT09IDAgPyAwIDogdGFibGVTZXR0aW5ncy5zZWxlY3Rpb25MaW1pdCB8fCBzZWxlY3Rpb25MaW1pdDtcblx0XHRpZiAodGFibGVTZXR0aW5ncy5lbmFibGVQYXN0ZSA9PT0gZmFsc2UpIHtcblx0XHRcdGVuYWJsZVBhc3RlID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB7XG5cdFx0ZmlsdGVyczogZmlsdGVycyxcblx0XHR0eXBlOiB0YWJsZVR5cGUsXG5cdFx0aGVhZGVyVmlzaWJsZTogIShxdWlja1NlbGVjdGlvblZhcmlhbnQgJiYgaGlkZVRhYmxlVGl0bGUpLFxuXHRcdGVuYWJsZUV4cG9ydDogZW5hYmxlRXhwb3J0LFxuXHRcdGNyZWF0aW9uTW9kZTogY3JlYXRpb25Nb2RlLFxuXHRcdGNyZWF0ZUF0RW5kOiBjcmVhdGVBdEVuZCxcblx0XHRkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhOiBkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhLFxuXHRcdHVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0OiBjb25kZW5zZWRUYWJsZUxheW91dCAmJiBpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50LFxuXHRcdHNlbGVjdGlvbkxpbWl0OiBzZWxlY3Rpb25MaW1pdCxcblx0XHRlbmFibGVQYXN0ZTogZW5hYmxlUGFzdGVcblx0fTtcbn1cbiJdfQ==
1075
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRhYmxlLnRzIl0sIm5hbWVzIjpbIkNvbHVtblR5cGUiLCJnZXRUYWJsZUFjdGlvbnMiLCJsaW5lSXRlbUFubm90YXRpb24iLCJ2aXN1YWxpemF0aW9uUGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJuYXZpZ2F0aW9uU2V0dGluZ3MiLCJpbnNlcnRDdXN0b21FbGVtZW50cyIsImdldFRhYmxlQW5ub3RhdGlvbkFjdGlvbnMiLCJnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IiwiZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbiIsImFjdGlvbnMiLCJpc05hdmlnYWJsZSIsImVuYWJsZU9uU2VsZWN0IiwiZW5hYmxlQXV0b1Njcm9sbCIsImdldFRhYmxlQ29sdW1ucyIsImdldENvbHVtbnNGcm9tQW5ub3RhdGlvbnMiLCJnZXRDb2x1bW5zRnJvbU1hbmlmZXN0IiwiY29sdW1ucyIsIndpZHRoIiwiY3JlYXRlVGFibGVWaXN1YWxpemF0aW9uIiwicHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24iLCJpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50IiwidGFibGVNYW5pZmVzdENvbmZpZyIsImdldFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uIiwic3BsaXRQYXRoIiwibmF2aWdhdGlvblByb3BlcnR5UGF0aCIsImVudGl0eVNldCIsImdldEVudGl0eVNldCIsImVudGl0eU5hbWUiLCJuYW1lIiwiaXNFbnRpdHlTZXQiLCJsZW5ndGgiLCJuYXZpZ2F0aW9uT3JDb2xsZWN0aW9uTmFtZSIsImdldE1hbmlmZXN0V3JhcHBlciIsImdldE5hdmlnYXRpb25Db25maWd1cmF0aW9uIiwidHlwZSIsIlZpc3VhbGl6YXRpb25UeXBlIiwiVGFibGUiLCJhbm5vdGF0aW9uIiwiZ2V0VGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbiIsImNvbnRyb2wiLCJjcmVhdGVEZWZhdWx0VGFibGVWaXN1YWxpemF0aW9uIiwidW5kZWZpbmVkIiwiZ2V0Q29sdW1uc0Zyb21FbnRpdHlUeXBlIiwiZW50aXR5VHlwZSIsImhhc0FjdGlvblJlcXVpcmluZ0NvbnRleHQiLCJzb21lIiwiZGF0YUZpZWxkIiwiJFR5cGUiLCJJbmxpbmUiLCJSZXF1aXJlc0NvbnRleHQiLCJoYXNBY3Rpb25SZXF1aXJpbmdTZWxlY3Rpb24iLCJtYW5pZmVzdEFjdGlvbnMiLCJyZXF1aXJlc1NlbGVjdGlvbktleSIsIk9iamVjdCIsImtleXMiLCJhY3Rpb25LZXkiLCJhY3Rpb24iLCJyZXF1aXJlc1NlbGVjdGlvbiIsImdldENhcGFiaWxpdHlSZXN0cmljdGlvbiIsIm5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhQYXJ0cyIsInNwbGl0Iiwib0NhcGFiaWxpdHlSZXN0cmljdGlvbiIsImlzRGVsZXRhYmxlIiwiaXNVcGRhdGFibGUiLCJjdXJyZW50RW50aXR5U2V0IiwicGF0aHNUb0NoZWNrIiwicmVkdWNlIiwicGF0aHMiLCJuYXZpZ2F0aW9uUHJvcGVydHlQYXRoUGFydCIsInB1c2giLCJoYXNSZXN0cmljdGVkUGF0aE9uRGVsZXRlIiwiaGFzUmVzdHJpY3RlZFBhdGhPblVwZGF0ZSIsImFubm90YXRpb25zIiwiQ2FwYWJpbGl0aWVzIiwiTmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsIlJlc3RyaWN0ZWRQcm9wZXJ0aWVzIiwiZm9yRWFjaCIsInJlc3RyaWN0ZWROYXZQcm9wIiwiTmF2aWdhdGlvblByb3BlcnR5IiwiRGVsZXRlUmVzdHJpY3Rpb25zIiwiRGVsZXRhYmxlIiwiaW5kZXhPZiIsInZhbHVlIiwiVXBkYXRlUmVzdHJpY3Rpb25zIiwiVXBkYXRhYmxlIiwibmF2UHJvcE5hbWUiLCJzaGlmdCIsIm5hdlByb3AiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsImZpbmQiLCJjb250YWluc1RhcmdldCIsIm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmciLCJoYXNPd25Qcm9wZXJ0eSIsImdldFNlbGVjdGlvbk1vZGUiLCJTZWxlY3Rpb25Nb2RlIiwiTm9uZSIsInRhYmxlTWFuaWZlc3RTZXR0aW5ncyIsInNlbGVjdGlvbk1vZGUiLCJ0YWJsZVNldHRpbmdzIiwiaXNQYXJlbnREZWxldGFibGUiLCJwYXJlbnRFbnRpdHlTZXREZWxldGFibGUiLCJnZXRUZW1wbGF0ZVR5cGUiLCJUZW1wbGF0ZVR5cGUiLCJPYmplY3RQYWdlIiwiaXNQYXRoRGVsZXRhYmxlIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImNvbXBpbGVCaW5kaW5nIiwiTXVsdGkiLCJBdXRvIiwidGFibGVBY3Rpb25zIiwiYWJzb2x1dGVQYXRoIiwiZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aCIsImluZGV4IiwidGFibGVBY3Rpb24iLCJpc0RhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0IiwiVUkiLCJIaWRkZW4iLCJEZXRlcm1pbmluZyIsImFubm90YXRpb25QYXRoIiwia2V5IiwiS2V5SGVscGVyIiwiZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkIiwiQWN0aW9uVHlwZSIsIkRhdGFGaWVsZEZvckFjdGlvbiIsIkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldENyaXRpY2FsaXR5QmluZGluZ0J5RW51bSIsIkNyaXRpY2FsaXR5RW51bSIsImNyaXRpY2FsaXR5UHJvcGVydHkiLCJNZXNzYWdlVHlwZSIsIkVycm9yIiwiV2FybmluZyIsIlN1Y2Nlc3MiLCJnZXRIaWdobGlnaHRSb3dCaW5kaW5nIiwiY3JpdGljYWxpdHlBbm5vdGF0aW9uIiwiaXNEcmFmdFJvb3QiLCJkZWZhdWx0SGlnaGxpZ2h0Um93RGVmaW5pdGlvbiIsImFubm90YXRpb25FeHByZXNzaW9uIiwiaWZFbHNlIiwiRHJhZnQiLCJJc05ld09iamVjdCIsIkluZm9ybWF0aW9uIiwiZm9ybWF0UmVzdWx0IiwidGFibGVGb3JtYXR0ZXJzIiwicm93SGlnaGxpZ2h0aW5nIiwiX2dldENyZWF0aW9uQmVoYXZpb3VyIiwidGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24iLCJuYXZpZ2F0aW9uIiwiY3JlYXRlIiwiZGV0YWlsIiwib3V0Ym91bmQiLCJvdXRib3VuZERldGFpbCIsIm1vZGUiLCJuZXdBY3Rpb24iLCJ0YXJnZXRFbnRpdHlUeXBlIiwiZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUiLCJ0YXJnZXRBbm5vdGF0aW9ucyIsImdldEVudGl0eVNldEZvckVudGl0eVR5cGUiLCJDb21tb24iLCJEcmFmdFJvb3QiLCJOZXdBY3Rpb24iLCJTZXNzaW9uIiwiU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsImNyZWF0aW9uTW9kZSIsIkNyZWF0aW9uTW9kZSIsIkNyZWF0aW9uUm93Iiwicm91dGUiLCJhcHBlbmQiLCJjcmVhdGVBdEVuZCIsIm5hdmlnYXRlVG9UYXJnZXQiLCJOZXdQYWdlIiwiX2dldFJvd0NvbmZpZ3VyYXRpb25Qcm9wZXJ0eSIsInRhcmdldFBhdGgiLCJwcmVzc1Byb3BlcnR5IiwibmF2aWdhdGlvblRhcmdldCIsImRpc3BsYXkiLCJ0YXJnZXQiLCJ0YXJnZXRFbnRpdHlTZXQiLCJDcml0aWNhbGl0eSIsIkRyYWZ0Tm9kZSIsInJvd05hdmlnYXRlZEV4cHJlc3Npb24iLCJpc0ZjbEVuYWJsZWQiLCJiaW5kaW5nRXhwcmVzc2lvbiIsImZjbE5hdmlnYXRlZFJvdyIsInByZXNzIiwicm93TmF2aWdhdGVkIiwiYW5ub3RhdGlvbkNvbHVtbnMiLCJ0YWJsZUNvbHVtbnMiLCJlbnRpdHlQcm9wZXJ0aWVzIiwicHJvcGVydHkiLCJleGlzdHMiLCJjb2x1bW4iLCJBbm5vdGF0aW9uIiwicGVyc29uYWxpemF0aW9uT25seSIsInZpc2libGUiLCJub3QiLCJlcXVhbCIsInRlbXBsYXRlIiwiX2lzVmFsaWRDb2x1bW4iLCJfZ2V0QW5ub3RhdGlvbkNvbHVtbk5hbWUiLCJpc0RhdGFGaWVsZFR5cGVzIiwiVmFsdWUiLCJwYXRoIiwiVGFyZ2V0IiwiJHRhcmdldCIsImxpbmVJdGVtIiwibGluZUl0ZW1JbmRleCIsImFubm90YXRpb25SZWZlcmVuY2UiLCJIVE1MNSIsIkNzc0RlZmF1bHRzIiwiY29uY2F0IiwiaW50ZXJuYWxDb2x1bW5zIiwibWFuaWZlc3RDb2x1bW4iLCJpc0tleVZhbGlkIiwiaWQiLCJoZWFkZXIiLCJEZWZhdWx0IiwicG9zaXRpb24iLCJhbmNob3IiLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnQiLCJBZnRlciIsImlzQWN0aW9uTmF2aWdhYmxlIiwiZ2V0UDEzbk1vZGUiLCJtYW5pZmVzdFdyYXBwZXIiLCJ2YXJpYW50TWFuYWdlbWVudCIsImdldFZhcmlhbnRNYW5hZ2VtZW50IiwiaGFzVmFyaWFudE1hbmFnZW1lbnQiLCJhUGVyc29uYWxpemF0aW9uIiwicGVyc29uYWxpemF0aW9uIiwic29ydCIsImZpbHRlciIsImpvaW4iLCJWYXJpYW50TWFuYWdlbWVudFR5cGUiLCJDb250cm9sIiwiZ2V0RGVsZXRlSGlkZGVuIiwibmF2aWdhdGlvblBhdGgiLCJpc0RlbGV0ZUhpZGRlbiIsImRlbGV0ZUhpZGRlbkFubm90YXRpb24iLCJEZWxldGVIaWRkZW4iLCJhU3BsaXRIaWRkZW5QYXRoIiwic05hdmlnYXRpb25QYXRoIiwicGFydG5lck5hbWUiLCJuYXZQcm9wZXJ0eSIsInBhcnRuZXIiLCJnZXREZWxldGVWaXNpYmxlIiwiaXNUYXJnZXREZWxldGFibGUiLCJBbmFseXRpY2FsTGlzdFBhZ2UiLCJMaXN0UmVwb3J0IiwiZ2V0SW5zZXJ0YWJsZSIsImlzSW5zZXJ0YWJsZSIsImhhc05hdmlnYXRpb25JbnNlcnRSZXN0cmljdGlvbiIsInJlc3RyaWN0ZWRQcm9wZXJ0eSIsIkluc2VydFJlc3RyaWN0aW9ucyIsIkluc2VydGFibGUiLCJnZXRDcmVhdGVIaWRkZW4iLCJpc0NyZWF0ZUhpZGRlbiIsImNyZWF0ZUhpZGRlbkFubm90YXRpb24iLCJDcmVhdGVIaWRkZW4iLCJnZXRDcmVhdGVWaXNpYmxlIiwiY3JlYXRpb25CZWhhdmlvdXIiLCJwYWdlTWFuaWZlc3RTZXR0aW5ncyIsInAxM25Nb2RlIiwiVGFibGVJRCIsInRhcmdldENhcGFiaWxpdGllcyIsInRocmVzaG9sZCIsIk1heEl0ZW1zIiwiY3VycmVudEVudGl0eVJlc3RyaWN0aW9uIiwiY29sbGVjdGlvbiIsInJvdyIsInNob3ciLCJ1cGRhdGUiLCJnZXRVcGRhdGFibGUiLCJhdXRvQmluZE9uSW5pdCIsImVuYWJsZUNvbnRyb2xWTSIsInBhcmVudEVudGl0eURlbGV0ZUVuYWJsZWQiLCJ0ZW1wbGF0ZVR5cGUiLCJsYXN0SW5kZXhPZiIsInN1YnN0ciIsImdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uIiwic2VsZWN0aW9uVmFyaWFudFBhdGgiLCJzZWxlY3Rpb24iLCJnZXRFbnRpdHlUeXBlQW5ub3RhdGlvbiIsInByb3BlcnR5TmFtZXMiLCJTZWxlY3RPcHRpb25zIiwic2VsZWN0T3B0aW9uIiwicHJvcGVydHlOYW1lIiwiUHJvcGVydHlOYW1lIiwiUHJvcGVydHlQYXRoIiwidGV4dCIsIlRleHQiLCJxdWlja1NlbGVjdGlvblZhcmlhbnQiLCJxdWlja0ZpbHRlclBhdGhzIiwiZW5hYmxlRXhwb3J0IiwiZmlsdGVycyIsImRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGEiLCJjb25kZW5zZWRUYWJsZUxheW91dCIsImhpZGVUYWJsZVRpdGxlIiwidGFibGVUeXBlIiwic2VsZWN0aW9uTGltaXQiLCJlbmFibGVQYXN0ZSIsInNoZWxsU2VydmljZXMiLCJnZXRTaGVsbFNlcnZpY2VzIiwidXNlckNvbnRlbnREZW5zaXR5IiwiZ2V0Q29udGVudERlbnNpdHkiLCJhcHBDb250ZW50RGVuc2l0eSIsImdldENvbnRlbnREZW5zaXRpZXMiLCJjb3p5IiwiY29tcGFjdCIsInF1aWNrVmFyaWFudFNlbGVjdGlvbiIsInJlc29sdmVQYXRoIiwicXVpY2tGaWx0ZXJzIiwic2hvd0NvdW50cyIsInNlbGVjdEFsbCIsImhlYWRlclZpc2libGUiLCJ1c2VDb25kZW5zZWRUYWJsZUxheW91dCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUF3SUtBLFU7O2FBQUFBLFU7QUFBQUEsSUFBQUEsVTtBQUFBQSxJQUFBQSxVO0tBQUFBLFUsS0FBQUEsVTs7QUFxQ0w7Ozs7Ozs7OztBQVNPLFdBQVNDLGVBQVQsQ0FDTkMsa0JBRE0sRUFFTkMsaUJBRk0sRUFHTkMsZ0JBSE0sRUFJTkMsa0JBSk0sRUFLUztBQUNmLFdBQU9DLG9CQUFvQixDQUMxQkMseUJBQXlCLENBQUNMLGtCQUFELEVBQXFCQyxpQkFBckIsRUFBd0NDLGdCQUF4QyxDQURDLEVBRTFCSSxzQkFBc0IsQ0FBQ0osZ0JBQWdCLENBQUNLLCtCQUFqQixDQUFpRE4saUJBQWpELEVBQW9FTyxPQUFyRSxFQUE4RUwsa0JBQTlFLEVBQWtHLElBQWxHLENBRkksRUFHMUI7QUFBRU0sTUFBQUEsV0FBVyxFQUFFLFdBQWY7QUFBNEJDLE1BQUFBLGNBQWMsRUFBRSxXQUE1QztBQUF5REMsTUFBQUEsZ0JBQWdCLEVBQUU7QUFBM0UsS0FIMEIsQ0FBM0I7QUFLQTtBQUVEOzs7Ozs7Ozs7Ozs7OztBQVVPLFdBQVNDLGVBQVQsQ0FDTlosa0JBRE0sRUFFTkMsaUJBRk0sRUFHTkMsZ0JBSE0sRUFJTkMsa0JBSk0sRUFLVTtBQUNoQixXQUFPQyxvQkFBb0IsQ0FDMUJTLHlCQUF5QixDQUFDYixrQkFBRCxFQUFxQkMsaUJBQXJCLEVBQXdDQyxnQkFBeEMsQ0FEQyxFQUUxQlksc0JBQXNCLENBQUNaLGdCQUFnQixDQUFDSywrQkFBakIsQ0FBaUROLGlCQUFqRCxFQUFvRWMsT0FBckUsRUFBOEVaLGtCQUE5RSxDQUZJLEVBRzFCO0FBQUVhLE1BQUFBLEtBQUssRUFBRSxXQUFUO0FBQXNCUCxNQUFBQSxXQUFXLEVBQUU7QUFBbkMsS0FIMEIsQ0FBM0I7QUFLQTs7OztBQUVNLFdBQVNRLHdCQUFULENBQ05qQixrQkFETSxFQUVOQyxpQkFGTSxFQUdOQyxnQkFITSxFQUlOZ0IsNkJBSk0sRUFLTkMsK0JBTE0sRUFNZTtBQUNyQixRQUFNQyxtQkFBbUIsR0FBR0MsNkJBQTZCLENBQ3hEckIsa0JBRHdELEVBRXhEQyxpQkFGd0QsRUFHeERDLGdCQUh3RCxFQUl4RGlCLCtCQUp3RCxDQUF6RDs7QUFEcUIscUJBT2NHLFNBQVMsQ0FBQ3JCLGlCQUFELENBUHZCO0FBQUEsUUFPYnNCLHNCQVBhLGNBT2JBLHNCQVBhOztBQVFyQixRQUFNQyxTQUFTLEdBQUd0QixnQkFBZ0IsQ0FBQ3VCLFlBQWpCLEVBQWxCO0FBQ0EsUUFBTUMsVUFBa0IsR0FBR0YsU0FBUyxDQUFDRyxJQUFyQztBQUFBLFFBQ0NDLFdBQW9CLEdBQUdMLHNCQUFzQixDQUFDTSxNQUF2QixLQUFrQyxDQUQxRDtBQUVBLFFBQU1DLDBCQUEwQixHQUFHRixXQUFXLEdBQUdGLFVBQUgsR0FBZ0JILHNCQUE5RDtBQUNBLFFBQU1wQixrQkFBa0IsR0FBR0QsZ0JBQWdCLENBQUM2QixrQkFBakIsR0FBc0NDLDBCQUF0QyxDQUFpRUYsMEJBQWpFLENBQTNCO0FBQ0EsV0FBTztBQUNORyxNQUFBQSxJQUFJLEVBQUVDLGlCQUFpQixDQUFDQyxLQURsQjtBQUVOQyxNQUFBQSxVQUFVLEVBQUVDLCtCQUErQixDQUMxQ3JDLGtCQUQwQyxFQUUxQ0MsaUJBRjBDLEVBRzFDQyxnQkFIMEMsRUFJMUNrQixtQkFKMEMsRUFLMUNGLDZCQUwwQyxDQUZyQztBQVNOb0IsTUFBQUEsT0FBTyxFQUFFbEIsbUJBVEg7QUFVTlosTUFBQUEsT0FBTyxFQUFFVCxlQUFlLENBQUNDLGtCQUFELEVBQXFCQyxpQkFBckIsRUFBd0NDLGdCQUF4QyxFQUEwREMsa0JBQTFELENBVmxCO0FBV05ZLE1BQUFBLE9BQU8sRUFBRUgsZUFBZSxDQUFDWixrQkFBRCxFQUFxQkMsaUJBQXJCLEVBQXdDQyxnQkFBeEMsRUFBMERDLGtCQUExRDtBQVhsQixLQUFQO0FBYUE7Ozs7QUFFTSxXQUFTb0MsK0JBQVQsQ0FBeUNyQyxnQkFBekMsRUFBaUc7QUFDdkcsUUFBTWtCLG1CQUFtQixHQUFHQyw2QkFBNkIsQ0FBQ21CLFNBQUQsRUFBWSxFQUFaLEVBQWdCdEMsZ0JBQWhCLEVBQWtDLEtBQWxDLENBQXpEO0FBQ0EsV0FBTztBQUNOK0IsTUFBQUEsSUFBSSxFQUFFQyxpQkFBaUIsQ0FBQ0MsS0FEbEI7QUFFTkMsTUFBQUEsVUFBVSxFQUFFQywrQkFBK0IsQ0FBQ0csU0FBRCxFQUFZLEVBQVosRUFBZ0J0QyxnQkFBaEIsRUFBa0NrQixtQkFBbEMsQ0FGckM7QUFHTmtCLE1BQUFBLE9BQU8sRUFBRWxCLG1CQUhIO0FBSU5aLE1BQUFBLE9BQU8sRUFBRSxFQUpIO0FBS05PLE1BQUFBLE9BQU8sRUFBRTBCLHdCQUF3QixDQUFDdkMsZ0JBQWdCLENBQUN1QixZQUFqQixHQUFnQ2lCLFVBQWpDLEVBQTZDLEVBQTdDLEVBQWlEeEMsZ0JBQWpEO0FBTDNCLEtBQVA7QUFPQTtBQUVEOzs7Ozs7Ozs7OztBQU9BLFdBQVN5Qyx5QkFBVCxDQUFtQzNDLGtCQUFuQyxFQUEwRTtBQUN6RSxXQUFPQSxrQkFBa0IsQ0FBQzRDLElBQW5CLENBQXdCLFVBQUFDLFNBQVMsRUFBSTtBQUMzQyxVQUFJQSxTQUFTLENBQUNDLEtBQVYsb0RBQUosRUFBOEQ7QUFDN0QsZUFBT0QsU0FBUyxDQUFDRSxNQUFWLEtBQXFCLElBQTVCO0FBQ0EsT0FGRCxNQUVPLElBQUlGLFNBQVMsQ0FBQ0MsS0FBVixtRUFBSixFQUE2RTtBQUNuRixlQUFPRCxTQUFTLENBQUNFLE1BQVYsS0FBcUIsSUFBckIsSUFBNkJGLFNBQVMsQ0FBQ0csZUFBOUM7QUFDQTtBQUNELEtBTk0sQ0FBUDtBQU9BOztBQUVELFdBQVNDLDJCQUFULENBQXFDQyxlQUFyQyxFQUE2RjtBQUM1RixRQUFJQyxvQkFBNkIsR0FBRyxLQUFwQzs7QUFDQSxRQUFJRCxlQUFKLEVBQXFCO0FBQ3BCQyxNQUFBQSxvQkFBb0IsR0FBR0MsTUFBTSxDQUFDQyxJQUFQLENBQVlILGVBQVosRUFBNkJOLElBQTdCLENBQWtDLFVBQUFVLFNBQVMsRUFBSTtBQUNyRSxZQUFNQyxNQUFNLEdBQUdMLGVBQWUsQ0FBQ0ksU0FBRCxDQUE5QjtBQUNBLGVBQU9DLE1BQU0sQ0FBQ0MsaUJBQVAsS0FBNkIsSUFBcEM7QUFDQSxPQUhzQixDQUF2QjtBQUlBOztBQUNELFdBQU9MLG9CQUFQO0FBQ0E7QUFFRDs7Ozs7Ozs7Ozs7O0FBVU8sV0FBU00sd0JBQVQsQ0FBa0N4RCxpQkFBbEMsRUFBNkRDLGdCQUE3RCxFQUE2SDtBQUFBLHNCQUNoR29CLFNBQVMsQ0FBQ3JCLGlCQUFELENBRHVGO0FBQUEsUUFDM0hzQixzQkFEMkgsZUFDM0hBLHNCQUQySDs7QUFFbkksUUFBTW1DLDJCQUEyQixHQUFHbkMsc0JBQXNCLENBQUNvQyxLQUF2QixDQUE2QixHQUE3QixDQUFwQztBQUNBLFFBQU1DLHNCQUFzQixHQUFHO0FBQUVDLE1BQUFBLFdBQVcsRUFBRSxJQUFmO0FBQXFCQyxNQUFBQSxXQUFXLEVBQUU7QUFBbEMsS0FBL0I7QUFDQSxRQUFJQyxnQkFBa0MsR0FBRzdELGdCQUFnQixDQUFDdUIsWUFBakIsRUFBekM7O0FBSm1JO0FBQUE7O0FBVWxJLFVBQU11QyxZQUFzQixHQUFHLEVBQS9CO0FBQ0FOLE1BQUFBLDJCQUEyQixDQUFDTyxNQUE1QixDQUFtQyxVQUFDQyxLQUFELEVBQVFDLDBCQUFSLEVBQXVDO0FBQ3pFLFlBQUlELEtBQUssQ0FBQ3JDLE1BQU4sR0FBZSxDQUFuQixFQUFzQjtBQUNyQnFDLFVBQUFBLEtBQUssSUFBSSxHQUFUO0FBQ0E7O0FBQ0RBLFFBQUFBLEtBQUssSUFBSUMsMEJBQVQ7QUFDQUgsUUFBQUEsWUFBWSxDQUFDSSxJQUFiLENBQWtCRixLQUFsQjtBQUNBLGVBQU9BLEtBQVA7QUFDQSxPQVBELEVBT0csRUFQSDtBQVFBLFVBQUlHLHlCQUF5QixHQUFHLEtBQWhDO0FBQUEsVUFDQ0MseUJBQXlCLEdBQUcsS0FEN0I7QUFFQSxnQ0FBQVAsZ0JBQWdCLENBQUNRLFdBQWpCLENBQTZCQyxZQUE3Qiw0R0FBMkNDLHNCQUEzQyxrRkFBbUVDLG9CQUFuRSxDQUF3RkMsT0FBeEYsQ0FDQyxVQUFDQyxpQkFBRCxFQUEyRDtBQUFBOztBQUMxRCxZQUFJLENBQUFBLGlCQUFpQixTQUFqQixJQUFBQSxpQkFBaUIsV0FBakIscUNBQUFBLGlCQUFpQixDQUFFQyxrQkFBbkIsZ0ZBQXVDNUMsSUFBdkMsTUFBZ0Qsd0JBQXBELEVBQThFO0FBQUE7O0FBQzdFLGNBQUksMEJBQUEyQyxpQkFBaUIsQ0FBQ0Usa0JBQWxCLGdGQUFzQ0MsU0FBdEMsTUFBb0QsS0FBeEQsRUFBK0Q7QUFDOURWLFlBQUFBLHlCQUF5QixHQUN4QkEseUJBQXlCLElBQUlMLFlBQVksQ0FBQ2dCLE9BQWIsQ0FBcUJKLGlCQUFpQixDQUFDQyxrQkFBbEIsQ0FBcUNJLEtBQTFELE1BQXFFLENBQUMsQ0FEcEc7QUFFQSxXQUhELE1BR08sSUFBSSwwQkFBQUwsaUJBQWlCLENBQUNNLGtCQUFsQixnRkFBc0NDLFNBQXRDLE1BQW9ELEtBQXhELEVBQStEO0FBQ3JFYixZQUFBQSx5QkFBeUIsR0FDeEJBLHlCQUF5QixJQUFJTixZQUFZLENBQUNnQixPQUFiLENBQXFCSixpQkFBaUIsQ0FBQ0Msa0JBQWxCLENBQXFDSSxLQUExRCxNQUFxRSxDQUFDLENBRHBHO0FBRUE7QUFDRDtBQUNELE9BWEY7QUFhQXJCLE1BQUFBLHNCQUFzQixDQUFDQyxXQUF2QixHQUFxQyxDQUFDUSx5QkFBdEM7QUFDQVQsTUFBQUEsc0JBQXNCLENBQUNFLFdBQXZCLEdBQXFDLENBQUNRLHlCQUF0QztBQUNBLFVBQU1jLFdBQVcsR0FBRzFCLDJCQUEyQixDQUFDMkIsS0FBNUIsRUFBcEI7O0FBQ0EsVUFBSUQsV0FBSixFQUFpQjtBQUNoQixZQUFNRSxPQUEyQixHQUFHdkIsZ0JBQWdCLENBQUNyQixVQUFqQixDQUE0QjZDLG9CQUE1QixDQUFpREMsSUFBakQsQ0FDbkMsVUFBQUYsT0FBTztBQUFBLGlCQUFJQSxPQUFPLENBQUMzRCxJQUFSLElBQWdCeUQsV0FBcEI7QUFBQSxTQUQ0QixDQUFwQzs7QUFHQSxZQUFJRSxPQUFPLElBQUksQ0FBQ0EsT0FBTyxDQUFDRyxjQUFwQixJQUFzQzFCLGdCQUFnQixDQUFDMkIseUJBQWpCLENBQTJDQyxjQUEzQyxDQUEwRFAsV0FBMUQsQ0FBMUMsRUFBa0g7QUFDakhyQixVQUFBQSxnQkFBZ0IsR0FBR0EsZ0JBQWdCLENBQUMyQix5QkFBakIsQ0FBMkNOLFdBQTNDLENBQW5CO0FBQ0EsU0FGRCxNQUVPO0FBQ047QUFDQXJCLFVBQUFBLGdCQUFnQixHQUFHLElBQW5CO0FBQ0E7QUFDRDtBQS9DaUk7O0FBS25JLFdBQ0MsQ0FBQ0gsc0JBQXNCLENBQUNDLFdBQXZCLElBQXNDRCxzQkFBc0IsQ0FBQ0UsV0FBOUQsS0FDQUMsZ0JBREEsSUFFQUwsMkJBQTJCLENBQUM3QixNQUE1QixHQUFxQyxDQUh0QyxFQUlFO0FBQUE7QUF1Q0Q7O0FBQ0QsUUFBSWtDLGdCQUFnQixLQUFLLElBQXJCLElBQTZCQSxnQkFBZ0IsQ0FBQ1EsV0FBbEQsRUFBK0Q7QUFDOUQsVUFBSVgsc0JBQXNCLENBQUNDLFdBQTNCLEVBQXdDO0FBQUE7O0FBQ3ZDO0FBQ0FELFFBQUFBLHNCQUFzQixDQUFDQyxXQUF2QixHQUFxQywwQkFBQUUsZ0JBQWdCLENBQUNRLFdBQWpCLENBQTZCQyxZQUE3QiwwR0FBMkNNLGtCQUEzQyxrRkFBK0RDLFNBQS9ELE1BQTZFLEtBQWxIO0FBQ0E7O0FBQ0QsVUFBSW5CLHNCQUFzQixDQUFDRSxXQUEzQixFQUF3QztBQUFBOztBQUN2QztBQUNBRixRQUFBQSxzQkFBc0IsQ0FBQ0UsV0FBdkIsR0FBcUMsMkJBQUFDLGdCQUFnQixDQUFDUSxXQUFqQixDQUE2QkMsWUFBN0IsNEdBQTJDVSxrQkFBM0Msa0ZBQStEQyxTQUEvRCxNQUE2RSxLQUFsSDtBQUNBO0FBQ0Q7O0FBQ0QsV0FBT3ZCLHNCQUFQO0FBQ0E7Ozs7QUFFRCxXQUFTZ0MsZ0JBQVQsQ0FDQzVGLGtCQURELEVBRUNDLGlCQUZELEVBR0NDLGdCQUhELEVBSUMwQixXQUpELEVBS0NMLHNCQUxELEVBTVU7QUFBQTs7QUFDVCxRQUFJLENBQUN2QixrQkFBTCxFQUF5QjtBQUN4QixhQUFPNkYsYUFBYSxDQUFDQyxJQUFyQjtBQUNBOztBQUNELFFBQU1DLHFCQUFxQixHQUFHN0YsZ0JBQWdCLENBQUNLLCtCQUFqQixDQUFpRE4saUJBQWpELENBQTlCO0FBQ0EsUUFBSStGLGFBQWEsNEJBQUdELHFCQUFxQixDQUFDRSxhQUF6QiwwREFBRyxzQkFBcUNELGFBQXpEO0FBQ0EsUUFBTTlDLGVBQWUsR0FBRzVDLHNCQUFzQixDQUM3Q0osZ0JBQWdCLENBQUNLLCtCQUFqQixDQUFpRE4saUJBQWpELEVBQW9FTyxPQUR2QixFQUU3Q2dDLFNBRjZDLEVBRzdDLEtBSDZDLENBQTlDO0FBS0EsUUFBSTBELGlCQUFKLEVBQXVCQyx3QkFBdkI7O0FBQ0EsUUFBSWpHLGdCQUFnQixDQUFDa0csZUFBakIsT0FBdUNDLFlBQVksQ0FBQ0MsVUFBeEQsRUFBb0U7QUFDbkVKLE1BQUFBLGlCQUFpQixHQUFHSyxlQUFlLENBQUNyRyxnQkFBZ0IsQ0FBQ3NHLHNCQUFqQixFQUFELEVBQTRDakYsc0JBQTVDLENBQW5DO0FBQ0E0RSxNQUFBQSx3QkFBd0IsR0FBR0QsaUJBQWlCLEdBQUdPLGNBQWMsQ0FBQ1AsaUJBQUQsRUFBb0IsSUFBcEIsQ0FBakIsR0FBNkNBLGlCQUF6RjtBQUNBOztBQUNELFFBQUlGLGFBQWEsSUFBSUEsYUFBYSxLQUFLSCxhQUFhLENBQUNDLElBQXJELEVBQTJEO0FBQzFELFVBQUlyQyx3QkFBd0IsQ0FBQ3hELGlCQUFELEVBQW9CQyxnQkFBcEIsQ0FBeEIsQ0FBOEQyRCxXQUE5RCxJQUE2RXNDLHdCQUF3QixLQUFLLE9BQTlHLEVBQXVIO0FBQ3RILGVBQU8sMENBQTBDTixhQUFhLENBQUNhLEtBQXhELEdBQWdFLGFBQXZFO0FBQ0EsT0FGRCxNQUVPO0FBQ05WLFFBQUFBLGFBQWEsR0FBR0gsYUFBYSxDQUFDQyxJQUE5QjtBQUNBO0FBQ0QsS0FORCxNQU1PLElBQUksQ0FBQ0UsYUFBRCxJQUFrQkEsYUFBYSxLQUFLSCxhQUFhLENBQUNjLElBQXRELEVBQTREO0FBQ2xFWCxNQUFBQSxhQUFhLEdBQUdILGFBQWEsQ0FBQ2EsS0FBOUI7QUFDQTs7QUFDRCxRQUFJL0QseUJBQXlCLENBQUMzQyxrQkFBRCxDQUF6QixJQUFpRGlELDJCQUEyQixDQUFDQyxlQUFELENBQWhGLEVBQW1HO0FBQ2xHLGFBQU84QyxhQUFQO0FBQ0EsS0FGRCxNQUVPLElBQUl2Qyx3QkFBd0IsQ0FBQ3hELGlCQUFELEVBQW9CQyxnQkFBcEIsQ0FBeEIsQ0FBOEQyRCxXQUE5RCxJQUE2RXNDLHdCQUF3QixLQUFLLE9BQTlHLEVBQXVIO0FBQzdILFVBQUksQ0FBQ3ZFLFdBQUwsRUFBa0I7QUFDakIsZUFBTywwQ0FBMENvRSxhQUExQyxHQUEwRCxhQUFqRTtBQUNBLE9BRkQsTUFFTztBQUNOLGVBQU9BLGFBQVA7QUFDQTtBQUNEOztBQUNELFdBQU9ILGFBQWEsQ0FBQ0MsSUFBckI7QUFDQTtBQUVEOzs7Ozs7Ozs7O0FBUUEsV0FBU3pGLHlCQUFULENBQ0NMLGtCQURELEVBRUNDLGlCQUZELEVBR0NDLGdCQUhELEVBSWdCO0FBQ2YsUUFBTTBHLFlBQTBCLEdBQUcsRUFBbkM7O0FBQ0EsUUFBSTVHLGtCQUFKLEVBQXdCO0FBQ3ZCLFVBQU02RyxZQUFZLEdBQUczRyxnQkFBZ0IsQ0FBQzRHLHlCQUFqQixDQUEyQzdHLGlCQUEzQyxDQUFyQjtBQUNBRCxNQUFBQSxrQkFBa0IsQ0FBQzJFLE9BQW5CLENBQTJCLFVBQUM5QixTQUFELEVBQW9Da0UsS0FBcEMsRUFBOEM7QUFBQTs7QUFDeEUsWUFBSUMsV0FBSjs7QUFDQSxZQUNDQyw0QkFBNEIsQ0FBQ3BFLFNBQUQsQ0FBNUIsSUFDQSxFQUFFLDBCQUFBQSxTQUFTLENBQUMwQixXQUFWLDBHQUF1QjJDLEVBQXZCLGtGQUEyQkMsTUFBM0IsTUFBc0MsSUFBeEMsQ0FEQSxJQUVBLENBQUN0RSxTQUFTLENBQUNFLE1BRlgsSUFHQSxDQUFDRixTQUFTLENBQUN1RSxXQUpaLEVBS0U7QUFDRCxjQUFNQyxjQUFjLEdBQUdSLFlBQVksR0FBRyxHQUFmLEdBQXFCRSxLQUE1QztBQUNBLGNBQU1PLEdBQUcsR0FBR0MsU0FBUyxDQUFDQyx3QkFBVixDQUFtQzNFLFNBQW5DLENBQVo7O0FBQ0Esa0JBQVFBLFNBQVMsQ0FBQ0MsS0FBbEI7QUFDQyxpQkFBSywrQ0FBTDtBQUNDa0UsY0FBQUEsV0FBVyxHQUFHO0FBQ2IvRSxnQkFBQUEsSUFBSSxFQUFFd0YsVUFBVSxDQUFDQyxrQkFESjtBQUViTCxnQkFBQUEsY0FBYyxFQUFFQSxjQUZIO0FBR2JDLGdCQUFBQSxHQUFHLEVBQUVBLEdBSFE7QUFJYjdHLGdCQUFBQSxXQUFXLEVBQUU7QUFKQSxlQUFkO0FBTUE7O0FBRUQsaUJBQUssOERBQUw7QUFDQ3VHLGNBQUFBLFdBQVcsR0FBRztBQUNiL0UsZ0JBQUFBLElBQUksRUFBRXdGLFVBQVUsQ0FBQ0UsaUNBREo7QUFFYk4sZ0JBQUFBLGNBQWMsRUFBRUEsY0FGSDtBQUdiQyxnQkFBQUEsR0FBRyxFQUFFQTtBQUhRLGVBQWQ7QUFLQTs7QUFDRDtBQUNDO0FBbEJGO0FBb0JBOztBQUNELFlBQUlOLFdBQUosRUFBaUI7QUFDaEJKLFVBQUFBLFlBQVksQ0FBQ3hDLElBQWIsQ0FBa0I0QyxXQUFsQjtBQUNBO0FBQ0QsT0FsQ0Q7QUFtQ0E7O0FBQ0QsV0FBT0osWUFBUDtBQUNBOztBQUVELFdBQVNnQiwyQkFBVCxDQUFxQ0MsZUFBckMsRUFBa0Y7QUFDakYsUUFBSUMsbUJBQUo7O0FBQ0EsWUFBUUQsZUFBUjtBQUNDLFdBQUssNkJBQUw7QUFDQ0MsUUFBQUEsbUJBQW1CLEdBQUdDLFdBQVcsQ0FBQ0MsS0FBbEM7QUFDQTs7QUFDRCxXQUFLLDZCQUFMO0FBQ0NGLFFBQUFBLG1CQUFtQixHQUFHQyxXQUFXLENBQUNFLE9BQWxDO0FBQ0E7O0FBQ0QsV0FBSyw2QkFBTDtBQUNDSCxRQUFBQSxtQkFBbUIsR0FBR0MsV0FBVyxDQUFDRyxPQUFsQztBQUNBOztBQUNELFdBQUssNEJBQUw7QUFDQTtBQUNDSixRQUFBQSxtQkFBbUIsR0FBR0MsV0FBVyxDQUFDakMsSUFBbEM7QUFaRjs7QUFjQSxXQUFPZ0MsbUJBQVA7QUFDQTs7QUFFRCxXQUFTSyxzQkFBVCxDQUNDQyxxQkFERCxFQUVDQyxXQUZELEVBRzJCO0FBQzFCLFFBQUlDLDZCQUFvRSxHQUFHUCxXQUFXLENBQUNqQyxJQUF2Rjs7QUFDQSxRQUFJc0MscUJBQUosRUFBMkI7QUFDMUIsVUFBSSxPQUFPQSxxQkFBUCxLQUFpQyxRQUFyQyxFQUErQztBQUM5Q0UsUUFBQUEsNkJBQTZCLEdBQUdDLG9CQUFvQixDQUFDSCxxQkFBRCxDQUFwRDtBQUNBLE9BRkQsTUFFTztBQUNOO0FBQ0FFLFFBQUFBLDZCQUE2QixHQUFHViwyQkFBMkIsQ0FBQ1EscUJBQUQsQ0FBM0Q7QUFDQTtBQUNEOztBQUNELFdBQU9JLE1BQU0sQ0FDWkgsV0FBVyxJQUFJSSxLQUFLLENBQUNDLFdBRFQsRUFFWlgsV0FBVyxDQUFDWSxXQUZBLEVBR1pDLFlBQVksQ0FBQyxDQUFDTiw2QkFBRCxDQUFELEVBQWtDTyxlQUFlLENBQUNDLGVBQWxELENBSEEsQ0FBYjtBQUtBOztBQUVELFdBQVNDLHFCQUFULENBQ0MvSSxrQkFERCxFQUVDZ0osMEJBRkQsRUFHQzlJLGdCQUhELEVBSUNDLGtCQUpELEVBSzBDO0FBQ3pDLFFBQU04SSxVQUFVLEdBQUcsQ0FBQTlJLGtCQUFrQixTQUFsQixJQUFBQSxrQkFBa0IsV0FBbEIsWUFBQUEsa0JBQWtCLENBQUUrSSxNQUFwQixNQUE4Qi9JLGtCQUE5QixhQUE4QkEsa0JBQTlCLHVCQUE4QkEsa0JBQWtCLENBQUVnSixNQUFsRCxDQUFuQixDQUR5QyxDQUd6Qzs7QUFDQSxRQUFJLENBQUFGLFVBQVUsU0FBVixJQUFBQSxVQUFVLFdBQVYsWUFBQUEsVUFBVSxDQUFFRyxRQUFaLEtBQXdCSCxVQUFVLENBQUNJLGNBQW5DLEtBQXFEbEosa0JBQXJELGFBQXFEQSxrQkFBckQsdUJBQXFEQSxrQkFBa0IsQ0FBRStJLE1BQXpFLENBQUosRUFBcUY7QUFDcEYsYUFBTztBQUNOSSxRQUFBQSxJQUFJLEVBQUUsVUFEQTtBQUVORixRQUFBQSxRQUFRLEVBQUVILFVBQVUsQ0FBQ0csUUFGZjtBQUdOQyxRQUFBQSxjQUFjLEVBQUVKLFVBQVUsQ0FBQ0ksY0FIckI7QUFJTmxKLFFBQUFBLGtCQUFrQixFQUFFQTtBQUpkLE9BQVA7QUFNQTs7QUFFRCxRQUFJb0osU0FBSjs7QUFDQSxRQUFJdkosa0JBQUosRUFBd0I7QUFBQTs7QUFDdkI7QUFDQSxVQUFNd0osZ0JBQWdCLEdBQUd0SixnQkFBZ0IsQ0FBQ3VKLHVCQUFqQixDQUF5Q3pKLGtCQUF6QyxDQUF6QjtBQUNBLFVBQU0wSixpQkFBaUIsNEJBQUd4SixnQkFBZ0IsQ0FBQ3lKLHlCQUFqQixDQUEyQ0gsZ0JBQTNDLENBQUgsMERBQUcsc0JBQThEakYsV0FBeEY7QUFDQWdGLE1BQUFBLFNBQVMsR0FBRyxDQUFBRyxpQkFBaUIsU0FBakIsSUFBQUEsaUJBQWlCLFdBQWpCLHFDQUFBQSxpQkFBaUIsQ0FBRUUsTUFBbkIsMEdBQTJCQyxTQUEzQixrRkFBc0NDLFNBQXRDLE1BQW1ESixpQkFBbkQsYUFBbURBLGlCQUFuRCxnREFBbURBLGlCQUFpQixDQUFFSyxPQUF0RSxvRkFBbUQsc0JBQTRCQyxzQkFBL0UsMkRBQW1ELHVCQUFvREYsU0FBdkcsQ0FBWixDQUp1QixDQUl1Rzs7QUFFOUgsVUFBSWQsMEJBQTBCLENBQUNpQixZQUEzQixLQUE0Q0MsWUFBWSxDQUFDQyxXQUF6RCxJQUF3RVosU0FBNUUsRUFBdUY7QUFDdEY7QUFDQTtBQUNBLGNBQU12QixLQUFLLDBCQUFtQmtDLFlBQVksQ0FBQ0MsV0FBaEMsMkRBQTRGWixTQUE1RixPQUFYO0FBQ0E7O0FBQ0QsVUFBSU4sVUFBSixhQUFJQSxVQUFKLHVCQUFJQSxVQUFVLENBQUVtQixLQUFoQixFQUF1QjtBQUN0QjtBQUNBLGVBQU87QUFDTmQsVUFBQUEsSUFBSSxFQUFFTiwwQkFBMEIsQ0FBQ2lCLFlBRDNCO0FBRU5JLFVBQUFBLE1BQU0sRUFBRXJCLDBCQUEwQixDQUFDc0IsV0FGN0I7QUFHTmYsVUFBQUEsU0FBUyxFQUFFQSxTQUhMO0FBSU5nQixVQUFBQSxnQkFBZ0IsRUFBRXZCLDBCQUEwQixDQUFDaUIsWUFBM0IsS0FBNENDLFlBQVksQ0FBQ00sT0FBekQsR0FBbUV2QixVQUFVLENBQUNtQixLQUE5RSxHQUFzRjVILFNBSmxHLENBSTRHOztBQUo1RyxTQUFQO0FBTUE7QUFDRCxLQWxDd0MsQ0FvQ3pDOzs7QUFDQSxRQUFJd0csMEJBQTBCLENBQUNpQixZQUEzQixLQUE0Q0MsWUFBWSxDQUFDTSxPQUE3RCxFQUFzRTtBQUNyRXhCLE1BQUFBLDBCQUEwQixDQUFDaUIsWUFBM0IsR0FBMENDLFlBQVksQ0FBQ25ILE1BQXZEO0FBQ0E7O0FBRUQsV0FBTztBQUNOdUcsTUFBQUEsSUFBSSxFQUFFTiwwQkFBMEIsQ0FBQ2lCLFlBRDNCO0FBRU5JLE1BQUFBLE1BQU0sRUFBRXJCLDBCQUEwQixDQUFDc0IsV0FGN0I7QUFHTmYsTUFBQUEsU0FBUyxFQUFFQTtBQUhMLEtBQVA7QUFLQTs7QUFFRCxNQUFNa0IsNEJBQTRCLEdBQUcsVUFDcEN6SyxrQkFEb0MsRUFFcENDLGlCQUZvQyxFQUdwQ0MsZ0JBSG9DLEVBSXBDQyxrQkFKb0MsRUFLcEN1SyxVQUxvQyxFQU1uQztBQUNELFFBQUlDLGFBQUosRUFBbUJDLGdCQUFuQjtBQUNBLFFBQUk5QyxtQkFBdUQsR0FBR0MsV0FBVyxDQUFDakMsSUFBMUU7QUFDQSxRQUFNMEQsZ0JBQWdCLEdBQUd0SixnQkFBZ0IsQ0FBQ3VKLHVCQUFqQixDQUF5Q3pKLGtCQUF6QyxDQUF6Qjs7QUFDQSxRQUFJRyxrQkFBa0IsSUFBSUgsa0JBQTFCLEVBQThDO0FBQUE7O0FBQzdDNEssTUFBQUEsZ0JBQWdCLEdBQUcsMEJBQUF6SyxrQkFBa0IsQ0FBQzBLLE9BQW5CLGdGQUE0QkMsTUFBNUIsZ0NBQXNDM0ssa0JBQWtCLENBQUNnSixNQUF6RCwyREFBc0MsdUJBQTJCQyxRQUFqRSxDQUFuQjs7QUFDQSxVQUFJd0IsZ0JBQUosRUFBc0I7QUFDckJELFFBQUFBLGFBQWEsR0FDWiw2REFBNkRDLGdCQUE3RCxHQUFnRixtQ0FEakY7QUFFQSxPQUhELE1BR08sSUFBS0EsZ0JBQWdCLDZCQUFHekssa0JBQWtCLENBQUNnSixNQUF0QiwyREFBRyx1QkFBMkJpQixLQUFuRCxFQUEyRDtBQUNqRSxZQUFJWixnQkFBSixFQUFzQjtBQUNyQixjQUFNdUIsZUFBZSxHQUFHN0ssZ0JBQWdCLENBQUN5Six5QkFBakIsQ0FBMkNILGdCQUEzQyxDQUF4Qjs7QUFDQSxjQUFJdUIsZUFBSixFQUFxQjtBQUFBOztBQUNwQixnQkFBTXJCLGlCQUFpQixHQUFHcUIsZUFBZSxDQUFDeEcsV0FBMUM7QUFDQXVELFlBQUFBLG1CQUFtQixHQUFHSyxzQkFBc0IsMEJBQzNDbkksa0JBQWtCLENBQUN1RSxXQUR3QixvRkFDM0Msc0JBQWdDMkMsRUFEVywyREFDM0MsdUJBQW9DOEQsV0FETyxFQUUzQyxDQUFDLDRCQUFDdEIsaUJBQWlCLENBQUNFLE1BQW5CLDJEQUFDLHVCQUEwQkMsU0FBM0IsQ0FBRCxJQUF5QyxDQUFDLDRCQUFDSCxpQkFBaUIsQ0FBQ0UsTUFBbkIsMkRBQUMsdUJBQTBCcUIsU0FBM0IsQ0FGQyxDQUE1QztBQUlBTixZQUFBQSxhQUFhLEdBQ1osNkZBQ0FELFVBREEsR0FFQSxnQkFGQSxJQUdDLENBQUFoQixpQkFBaUIsU0FBakIsSUFBQUEsaUJBQWlCLFdBQWpCLHNDQUFBQSxpQkFBaUIsQ0FBRUUsTUFBbkIsa0ZBQTJCQyxTQUEzQixNQUF3Q0gsaUJBQXhDLGFBQXdDQSxpQkFBeEMsaURBQXdDQSxpQkFBaUIsQ0FBRUUsTUFBM0QsMkRBQXdDLHVCQUEyQnFCLFNBQW5FLElBQ0UsOERBREYsR0FFRSxXQUxILElBTUEsSUFQRCxDQU5vQixDQWFiO0FBQ1A7QUFDRDtBQUNEO0FBQ0Q7O0FBQ0QsUUFBTUMsc0JBQTJDLEdBQUcxQyxNQUFNLENBQ3pEdEksZ0JBQWdCLENBQUM2QixrQkFBakIsR0FBc0NvSixZQUF0QyxFQUR5RCxFQUV6RHZDLFlBQVksQ0FBQyxDQUFDd0MsaUJBQWlCLENBQUMsY0FBRCxFQUFpQixjQUFqQixDQUFsQixDQUFELEVBQXNEdkMsZUFBZSxDQUFDd0MsZUFBdEUsRUFBdUY3QixnQkFBdkYsQ0FGNkMsRUFHekQsS0FIeUQsQ0FBMUQ7QUFLQSxXQUFPO0FBQ044QixNQUFBQSxLQUFLLEVBQUVYLGFBREQ7QUFFTnBILE1BQUFBLE1BQU0sRUFBRW9ILGFBQWEsR0FBRyxZQUFILEdBQWtCbkksU0FGakM7QUFHTnNHLE1BQUFBLGVBQWUsRUFBRXJDLGNBQWMsQ0FBQ3FCLG1CQUFELENBSHpCO0FBSU55RCxNQUFBQSxZQUFZLEVBQUU5RSxjQUFjLENBQUN5RSxzQkFBRDtBQUp0QixLQUFQO0FBTUEsR0EvQ0Q7QUFpREE7Ozs7Ozs7Ozs7QUFRQSxNQUFNekksd0JBQXdCLEdBQUcsVUFDaENDLFVBRGdDLEVBSWhCO0FBQUEsUUFGaEI4SSxpQkFFZ0IsdUVBRjZCLEVBRTdCO0FBQUEsUUFEaEJ0TCxnQkFDZ0I7QUFDaEIsUUFBTXVMLFlBQTJCLEdBQUcsRUFBcEM7QUFDQS9JLElBQUFBLFVBQVUsQ0FBQ2dKLGdCQUFYLENBQTRCL0csT0FBNUIsQ0FBb0MsVUFBQ2dILFFBQUQsRUFBd0I7QUFDM0Q7QUFDQSxVQUFNQyxNQUFNLEdBQUdKLGlCQUFpQixDQUFDNUksSUFBbEIsQ0FBdUIsVUFBQWlKLE1BQU0sRUFBSTtBQUMvQyxlQUFPQSxNQUFNLENBQUNsSyxJQUFQLEtBQWdCZ0ssUUFBUSxDQUFDaEssSUFBaEM7QUFDQSxPQUZjLENBQWY7O0FBSUEsVUFBSSxDQUFDaUssTUFBTCxFQUFhO0FBQUE7O0FBQ1osWUFBTWxLLFVBQVUsR0FBRyxDQUFDeEIsZ0JBQWdCLENBQUN5Six5QkFBakIsQ0FBMkNqSCxVQUEzQyxLQUEwREEsVUFBM0QsRUFBdUVmLElBQTFGO0FBQ0E4SixRQUFBQSxZQUFZLENBQUNySCxJQUFiLENBQWtCO0FBQ2pCa0QsVUFBQUEsR0FBRyxFQUFFLGdCQUFnQnFFLFFBQVEsQ0FBQ2hLLElBRGI7QUFFakJNLFVBQUFBLElBQUksRUFBRW5DLFVBQVUsQ0FBQ2dNLFVBRkE7QUFHakJ6RSxVQUFBQSxjQUFjLEVBQUUsTUFBTTNGLFVBQU4sR0FBbUIsR0FBbkIsR0FBeUJpSyxRQUFRLENBQUNoSyxJQUhqQztBQUlqQm9LLFVBQUFBLG1CQUFtQixFQUFFLElBSko7QUFLakJwSyxVQUFBQSxJQUFJLEVBQUVnSyxRQUFRLENBQUNoSyxJQUxFO0FBTWpCcUssVUFBQUEsT0FBTyxFQUFFdkYsY0FBYyxDQUFDd0YsR0FBRyxDQUFDQyxLQUFLLENBQUMzRCxvQkFBb0IsMEJBQUNvRCxRQUFRLENBQUNwSCxXQUFWLG9GQUFDLHNCQUFzQjJDLEVBQXZCLDJEQUFDLHVCQUEwQkMsTUFBM0IsQ0FBckIsRUFBeUQsSUFBekQsQ0FBTixDQUFKLENBTk47QUFPakJnRixVQUFBQSxRQUFRLEVBQUU7QUFQTyxTQUFsQjtBQVNBO0FBQ0QsS0FsQkQ7QUFtQkEsV0FBT1YsWUFBUDtBQUNBLEdBMUJEO0FBNEJBOzs7Ozs7Ozs7QUFPQSxNQUFNVyxjQUFjLEdBQUcsVUFBU3ZKLFNBQVQsRUFBNEM7QUFDbEUsWUFBUUEsU0FBUyxDQUFDQyxLQUFsQjtBQUNDLFdBQUssK0NBQUw7QUFDQSxXQUFLLDhEQUFMO0FBQ0MsZUFBTyxDQUFDLENBQUNELFNBQVMsQ0FBQ0UsTUFBbkI7O0FBQ0QsV0FBSyxnREFBTDtBQUNBLFdBQUssK0RBQUw7QUFDQyxlQUFPLEtBQVA7O0FBQ0QsV0FBSyxzQ0FBTDtBQUNBLFdBQUssNkNBQUw7QUFDQSxXQUFLLG1EQUFMO0FBQ0EsV0FBSyx3REFBTDtBQUNDLGVBQU8sSUFBUDs7QUFDRCxjQVpELENBYUM7QUFDQTs7QUFkRDtBQWdCQSxHQWpCRDtBQW1CQTs7Ozs7Ozs7Ozs7QUFTQSxNQUFNc0osd0JBQXdCLEdBQUcsVUFBU3hKLFNBQVQsRUFBNEM7QUFBQTs7QUFDNUU7QUFDQSxRQUFJeUosZ0JBQWdCLENBQUN6SixTQUFELENBQXBCLEVBQWlDO0FBQUE7O0FBQ2hDLGlDQUFPQSxTQUFTLENBQUMwSixLQUFqQixxREFBTyxpQkFBaUJDLElBQXhCO0FBQ0EsS0FGRCxNQUVPLElBQUkzSixTQUFTLENBQUNDLEtBQVYsa0ZBQWdFRCxTQUFTLENBQUM0SixNQUExRSwrRUFBZ0Usa0JBQWtCQyxPQUFsRixvRkFBZ0Usc0JBQTJCSCxLQUEzRiwyREFBZ0UsdUJBQWtDQyxJQUFsRyxDQUFKLEVBQTRHO0FBQ2xIO0FBQ0EsYUFBTzNKLFNBQVMsQ0FBQzRKLE1BQVYsQ0FBaUJDLE9BQWpCLENBQXlCSCxLQUF6QixDQUErQkMsSUFBdEM7QUFDQSxLQUhNLE1BR0E7QUFDTixhQUFPakYsU0FBUyxDQUFDQyx3QkFBVixDQUFtQzNFLFNBQW5DLENBQVA7QUFDQTtBQUNELEdBVkQ7QUFZQTs7Ozs7Ozs7OztBQVFBLE1BQU1oQyx5QkFBeUIsR0FBRyxVQUNqQ2Isa0JBRGlDLEVBRWpDQyxpQkFGaUMsRUFHakNDLGdCQUhpQyxFQUlqQjtBQUNoQixRQUFNd0MsVUFBVSxHQUFHeEMsZ0JBQWdCLENBQUN1Six1QkFBakIsQ0FBeUN6SixrQkFBekMsQ0FBbkI7QUFDQSxRQUFNd0wsaUJBQTBDLEdBQUcsRUFBbkQ7O0FBQ0EsUUFBSXhMLGtCQUFKLEVBQXdCO0FBQ3ZCO0FBRUFBLE1BQUFBLGtCQUFrQixDQUFDMkUsT0FBbkIsQ0FBMkIsVUFBQ2dJLFFBQUQsRUFBV0MsYUFBWCxFQUE2QjtBQUFBOztBQUN2RCxZQUFJLENBQUNSLGNBQWMsQ0FBQ08sUUFBRCxDQUFuQixFQUErQjtBQUM5QjtBQUNBOztBQUVELFlBQU1FLG1CQUFtQixHQUFHM00sZ0JBQWdCLENBQUM0Ryx5QkFBakIsQ0FBMkM3RyxpQkFBM0MsSUFBZ0UsR0FBaEUsR0FBc0UyTSxhQUFsRztBQUNBcEIsUUFBQUEsaUJBQWlCLENBQUNwSCxJQUFsQixDQUF1QjtBQUN0QmlELFVBQUFBLGNBQWMsRUFBRXdGLG1CQURNO0FBRXRCNUssVUFBQUEsSUFBSSxFQUFFbkMsVUFBVSxDQUFDZ00sVUFGSztBQUd0QnhFLFVBQUFBLEdBQUcsRUFBRUMsU0FBUyxDQUFDQyx3QkFBVixDQUFtQ21GLFFBQW5DLENBSGlCO0FBSXRCM0wsVUFBQUEsS0FBSyxFQUFFLDBCQUFBMkwsUUFBUSxDQUFDcEksV0FBVCwwR0FBc0J1SSxLQUF0Qiw0R0FBNkJDLFdBQTdCLGtGQUEwQy9MLEtBQTFDLEtBQW1Ed0IsU0FKcEM7QUFLdEJ1SixVQUFBQSxtQkFBbUIsRUFBRSxLQUxDO0FBTXRCcEssVUFBQUEsSUFBSSxFQUFFMEssd0JBQXdCLENBQUNNLFFBQUQsQ0FOUjtBQU90QlgsVUFBQUEsT0FBTyxFQUFFdkYsY0FBYyxDQUFDd0YsR0FBRyxDQUFDQyxLQUFLLENBQUMzRCxvQkFBb0IsMkJBQUNvRSxRQUFRLENBQUNwSSxXQUFWLHFGQUFDLHVCQUFzQjJDLEVBQXZCLDJEQUFDLHVCQUEwQkMsTUFBM0IsQ0FBckIsRUFBeUQsSUFBekQsQ0FBTixDQUFKLENBUEQ7QUFRdEIxRyxVQUFBQSxXQUFXLEVBQUU7QUFSUyxTQUF2QjtBQVVBLE9BaEJEO0FBaUJBLEtBdkJlLENBeUJoQjs7O0FBQ0EsUUFBSWdMLFlBQVksR0FBR2hKLHdCQUF3QixDQUFDQyxVQUFELEVBQWE4SSxpQkFBYixFQUFnQ3RMLGdCQUFoQyxDQUEzQztBQUNBdUwsSUFBQUEsWUFBWSxHQUFHQSxZQUFZLENBQUN1QixNQUFiLENBQW9CeEIsaUJBQXBCLENBQWY7QUFFQSxXQUFPQyxZQUFQO0FBQ0EsR0FsQ0Q7QUFvQ0E7Ozs7Ozs7OztBQU9BLE1BQU0zSyxzQkFBc0IsR0FBRyxVQUM5QkMsT0FEOEIsRUFFOUJaLGtCQUY4QixFQUdDO0FBQy9CLFFBQU04TSxlQUE2QyxHQUFHLEVBQXREOztBQUNBLFNBQUssSUFBTTNGLEdBQVgsSUFBa0J2RyxPQUFsQixFQUEyQjtBQUFBOztBQUMxQixVQUFNbU0sY0FBYyxHQUFHbk0sT0FBTyxDQUFDdUcsR0FBRCxDQUE5QjtBQUNBQyxNQUFBQSxTQUFTLENBQUM0RixVQUFWLENBQXFCN0YsR0FBckI7QUFDQTJGLE1BQUFBLGVBQWUsQ0FBQzNGLEdBQUQsQ0FBZixHQUF1QjtBQUN0QkEsUUFBQUEsR0FBRyxFQUFFQSxHQURpQjtBQUV0QjhGLFFBQUFBLEVBQUUsRUFBRSxtQkFBbUI5RixHQUZEO0FBR3RCM0YsUUFBQUEsSUFBSSxFQUFFLG1CQUFtQjJGLEdBSEg7QUFJdEIrRixRQUFBQSxNQUFNLEVBQUVILGNBQWMsQ0FBQ0csTUFKRDtBQUt0QnJNLFFBQUFBLEtBQUssRUFBRWtNLGNBQWMsQ0FBQ2xNLEtBQWYsSUFBd0J3QixTQUxUO0FBTXRCUCxRQUFBQSxJQUFJLEVBQUVuQyxVQUFVLENBQUN3TixPQU5LO0FBT3RCdkIsUUFBQUEsbUJBQW1CLEVBQUUsS0FQQztBQVF0QkksUUFBQUEsUUFBUSxFQUFFZSxjQUFjLENBQUNmLFFBQWYsSUFBMkIsV0FSZjtBQVN0QkgsUUFBQUEsT0FBTyxFQUFFLElBVGE7QUFVdEJ1QixRQUFBQSxRQUFRLEVBQUU7QUFDVEMsVUFBQUEsTUFBTSwyQkFBRU4sY0FBYyxDQUFDSyxRQUFqQiwwREFBRSxzQkFBeUJDLE1BRHhCO0FBRVRDLFVBQUFBLFNBQVMsRUFBRVAsY0FBYyxDQUFDSyxRQUFmLEtBQTRCL0ssU0FBNUIsR0FBd0NrTCxTQUFTLENBQUNDLEtBQWxELEdBQTBEVCxjQUFjLENBQUNLLFFBQWYsQ0FBd0JFO0FBRnBGLFNBVlk7QUFjdEJoTixRQUFBQSxXQUFXLEVBQUVtTixpQkFBaUIsQ0FBQ1YsY0FBRCxFQUFpQi9NLGtCQUFqQixFQUFxQyxJQUFyQztBQWRSLE9BQXZCO0FBZ0JBOztBQUNELFdBQU84TSxlQUFQO0FBQ0EsR0ExQkQ7O0FBNEJPLFdBQVNZLFdBQVQsQ0FBcUI1TixpQkFBckIsRUFBZ0RDLGdCQUFoRCxFQUF3RztBQUM5RyxRQUFNNE4sZUFBZ0MsR0FBRzVOLGdCQUFnQixDQUFDNkIsa0JBQWpCLEVBQXpDO0FBQ0EsUUFBTWdFLHFCQUFpRCxHQUFHN0YsZ0JBQWdCLENBQUNLLCtCQUFqQixDQUFpRE4saUJBQWpELENBQTFEO0FBQ0EsUUFBTThOLGlCQUF3QyxHQUFHRCxlQUFlLENBQUNFLG9CQUFoQixFQUFqRDtBQUNBLFFBQU1DLG9CQUE2QixHQUFHLENBQUMsTUFBRCxFQUFTLFNBQVQsRUFBb0JqSixPQUFwQixDQUE0QitJLGlCQUE1QixJQUFpRCxDQUFDLENBQXhGO0FBQ0EsUUFBTUcsZ0JBQTBCLEdBQUcsRUFBbkM7O0FBQ0EsUUFBSUQsb0JBQUosRUFBMEI7QUFBQTs7QUFDekIsVUFBSSxDQUFBbEkscUJBQXFCLFNBQXJCLElBQUFBLHFCQUFxQixXQUFyQixzQ0FBQUEscUJBQXFCLENBQUVFLGFBQXZCLGtGQUFzQ2tJLGVBQXRDLE1BQTBEM0wsU0FBOUQsRUFBeUU7QUFDeEU7QUFDQSxZQUFNMkwsZUFBb0IsR0FBR3BJLHFCQUFxQixDQUFDRSxhQUF0QixDQUFvQ2tJLGVBQWpFOztBQUNBLFlBQUlBLGVBQWUsS0FBSyxJQUF4QixFQUE4QjtBQUM3QjtBQUNBLGlCQUFPLG9CQUFQO0FBQ0EsU0FIRCxNQUdPLElBQUksT0FBT0EsZUFBUCxLQUEyQixRQUEvQixFQUF5QztBQUMvQztBQUNBLGNBQUlBLGVBQWUsQ0FBQ0MsSUFBcEIsRUFBMEI7QUFDekJGLFlBQUFBLGdCQUFnQixDQUFDOUosSUFBakIsQ0FBc0IsTUFBdEI7QUFDQTs7QUFDRCxjQUFJK0osZUFBZSxDQUFDdEMsTUFBcEIsRUFBNEI7QUFDM0JxQyxZQUFBQSxnQkFBZ0IsQ0FBQzlKLElBQWpCLENBQXNCLFFBQXRCO0FBQ0E7O0FBQ0QsY0FBSStKLGVBQWUsQ0FBQ0UsTUFBcEIsRUFBNEI7QUFDM0JILFlBQUFBLGdCQUFnQixDQUFDOUosSUFBakIsQ0FBc0IsUUFBdEI7QUFDQTs7QUFDRCxpQkFBTzhKLGdCQUFnQixDQUFDSSxJQUFqQixDQUFzQixHQUF0QixDQUFQO0FBQ0E7QUFDRCxPQW5CRCxNQW1CTztBQUNOO0FBQ0FKLFFBQUFBLGdCQUFnQixDQUFDOUosSUFBakIsQ0FBc0IsTUFBdEI7QUFDQThKLFFBQUFBLGdCQUFnQixDQUFDOUosSUFBakIsQ0FBc0IsUUFBdEI7O0FBQ0EsWUFBSTJKLGlCQUFpQixLQUFLUSxxQkFBcUIsQ0FBQ0MsT0FBaEQsRUFBeUQ7QUFDeEQ7QUFDQTtBQUNBTixVQUFBQSxnQkFBZ0IsQ0FBQzlKLElBQWpCLENBQXNCLFFBQXRCO0FBQ0E7O0FBQ0QsZUFBTzhKLGdCQUFnQixDQUFDSSxJQUFqQixDQUFzQixHQUF0QixDQUFQO0FBQ0E7QUFDRDs7QUFDRCxXQUFPOUwsU0FBUDtBQUNBOzs7O0FBRUQsV0FBU2lNLGVBQVQsQ0FBeUIxSyxnQkFBekIsRUFBc0QySyxjQUF0RCxFQUE4RTtBQUM3RSxRQUFJQyxjQUFtQixHQUFHLEtBQTFCOztBQUNBLFFBQUlELGNBQUosRUFBb0I7QUFBQTs7QUFDbkI7QUFDQSxVQUFNRSxzQkFBc0IsNEJBQUc3SyxnQkFBZ0IsQ0FBQzJCLHlCQUFqQixDQUEyQ2dKLGNBQTNDLENBQUgsb0ZBQUcsc0JBQTREbkssV0FBL0QscUZBQUcsdUJBQXlFMkMsRUFBNUUsMkRBQUcsdUJBQTZFMkgsWUFBNUc7O0FBQ0EsVUFBSUQsc0JBQXNCLElBQUtBLHNCQUFELENBQWdDcEMsSUFBOUQsRUFBb0U7QUFDbkUsWUFBS29DLHNCQUFELENBQWdDcEMsSUFBaEMsQ0FBcUN4SCxPQUFyQyxDQUE2QyxHQUE3QyxJQUFvRCxDQUF4RCxFQUEyRDtBQUMxRCxjQUFNOEosZ0JBQWdCLEdBQUlGLHNCQUFELENBQWdDcEMsSUFBaEMsQ0FBcUM3SSxLQUFyQyxDQUEyQyxHQUEzQyxDQUF6QjtBQUNBLGNBQU1vTCxlQUFlLEdBQUdELGdCQUFnQixDQUFDLENBQUQsQ0FBeEM7QUFDQSxjQUFNRSxXQUFXLEdBQUlqTCxnQkFBRCxDQUEwQnJCLFVBQTFCLENBQXFDNkMsb0JBQXJDLENBQTBEQyxJQUExRCxDQUNuQixVQUFDeUosV0FBRDtBQUFBLG1CQUFzQkEsV0FBVyxDQUFDdE4sSUFBWixLQUFxQitNLGNBQTNDO0FBQUEsV0FEbUIsRUFFbEJRLE9BRkY7O0FBR0EsY0FBSUYsV0FBVyxLQUFLRCxlQUFwQixFQUFxQztBQUNwQ0osWUFBQUEsY0FBYyxHQUFHQyxzQkFBakI7QUFDQTtBQUNELFNBVEQsTUFTTztBQUNORCxVQUFBQSxjQUFjLEdBQUcsS0FBakI7QUFDQTtBQUNELE9BYkQsTUFhTztBQUNOQSxRQUFBQSxjQUFjLEdBQUdDLHNCQUFqQjtBQUNBO0FBQ0QsS0FuQkQsTUFtQk87QUFBQTs7QUFDTkQsTUFBQUEsY0FBYyw2QkFBRzVLLGdCQUFnQixDQUFDUSxXQUFwQixxRkFBRyx1QkFBOEIyQyxFQUFqQywyREFBRyx1QkFBa0MySCxZQUFuRDtBQUNBOztBQUNELFdBQU9GLGNBQVA7QUFDQTtBQUVEOzs7Ozs7OztBQU9PLFdBQVNRLGdCQUFULENBQ05qUCxnQkFETSxFQUVOd08sY0FGTSxFQUdOVSxpQkFITSxFQUl1QjtBQUM3QixRQUFNckwsZ0JBQWtDLEdBQUc3RCxnQkFBZ0IsQ0FBQ3VCLFlBQWpCLEVBQTNDO0FBQ0EsUUFBTWtOLGNBQW1CLEdBQUdGLGVBQWUsQ0FBQzFLLGdCQUFELEVBQW1CMkssY0FBbkIsQ0FBM0M7QUFDQSxRQUFJeEksaUJBQUosRUFBdUJDLHdCQUF2Qjs7QUFDQSxRQUFJakcsZ0JBQWdCLENBQUNrRyxlQUFqQixPQUF1Q0MsWUFBWSxDQUFDQyxVQUF4RCxFQUFvRTtBQUNuRUosTUFBQUEsaUJBQWlCLEdBQUdLLGVBQWUsQ0FBQ3JHLGdCQUFnQixDQUFDc0csc0JBQWpCLEVBQUQsRUFBNENrSSxjQUE1QyxDQUFuQztBQUNBdkksTUFBQUEsd0JBQXdCLEdBQUdELGlCQUFpQixHQUFHTyxjQUFjLENBQUNQLGlCQUFELENBQWpCLEdBQXVDQSxpQkFBbkY7QUFDQSxLQVA0QixDQVE3Qjs7O0FBQ0EsUUFBSUMsd0JBQXdCLEtBQUssT0FBakMsRUFBMEM7QUFDekMsYUFBTyxLQUFQO0FBQ0EsS0FGRCxNQUVPLElBQUlBLHdCQUF3QixJQUFJd0ksY0FBYyxLQUFLLElBQW5ELEVBQXlEO0FBQy9EO0FBQ0EsVUFBSUEsY0FBSixFQUFvQjtBQUNuQixlQUFPLFlBQVlELGNBQWMsR0FBR0EsY0FBYyxHQUFHLEdBQXBCLEdBQTBCLEVBQXBELElBQTBEQyxjQUFjLENBQUNuQyxJQUF6RSxHQUFnRixzQ0FBdkY7QUFDQSxPQUZELE1BRU87QUFDTixlQUFPLG9DQUFQO0FBQ0E7QUFDRCxLQVBNLE1BT0EsSUFBSW1DLGNBQWMsS0FBSyxJQUFuQixJQUEyQixDQUFDUyxpQkFBNUIsSUFBaURsUCxnQkFBZ0IsQ0FBQ2tHLGVBQWpCLE9BQXVDQyxZQUFZLENBQUNnSixrQkFBekcsRUFBNkg7QUFDbkksYUFBTyxLQUFQO0FBQ0EsS0FGTSxNQUVBLElBQUluUCxnQkFBZ0IsQ0FBQ2tHLGVBQWpCLE9BQXVDQyxZQUFZLENBQUNpSixVQUF4RCxFQUFvRTtBQUMxRSxVQUFJWCxjQUFKLEVBQW9CO0FBQ25CLGVBQU8sWUFBWUQsY0FBYyxHQUFHQSxjQUFjLEdBQUcsR0FBcEIsR0FBMEIsRUFBcEQsSUFBMERDLGNBQWMsQ0FBQ25DLElBQXpFLEdBQWdGLHNDQUF2RjtBQUNBLE9BRkQsTUFFTztBQUNOLGVBQU8sb0NBQVA7QUFDQTtBQUNELEtBTk0sTUFNQTtBQUNOLGFBQU8sSUFBUDtBQUNBO0FBQ0Q7Ozs7QUFFRCxXQUFTK0MsYUFBVCxDQUF1QnhMLGdCQUF2QixFQUFvRDJLLGNBQXBELEVBQXFGO0FBQUE7O0FBQ3BGLFFBQUljLFlBQXFCLEdBQUcsSUFBNUI7QUFDQSxRQUFJQyw4QkFBdUMsR0FBRyxLQUE5QztBQUNBLFFBQU0vSyxvQkFBb0IsR0FBR1gsZ0JBQUgsYUFBR0EsZ0JBQUgsaURBQUdBLGdCQUFnQixDQUFFUSxXQUFyQixzRkFBRyx1QkFBK0JDLFlBQWxDLHVGQUFHLHdCQUE2Q0Msc0JBQWhELDREQUFHLHdCQUFxRUMsb0JBQWxHOztBQUNBLFFBQUlnSyxjQUFjLElBQUloSyxvQkFBdEIsRUFBNEM7QUFDM0MsVUFBTWdMLGtCQUFrQixHQUFHaEwsb0JBQW9CLENBQUNjLElBQXJCLENBQzFCLFVBQUFrSyxrQkFBa0I7QUFBQTs7QUFBQSxlQUNqQixDQUFBQSxrQkFBa0IsU0FBbEIsSUFBQUEsa0JBQWtCLFdBQWxCLHFDQUFBQSxrQkFBa0IsQ0FBRTdLLGtCQUFwQixnRkFBd0M1QyxJQUF4QyxNQUFpRCx3QkFBakQsSUFDQSxDQUFBeU4sa0JBQWtCLFNBQWxCLElBQUFBLGtCQUFrQixXQUFsQixzQ0FBQUEsa0JBQWtCLENBQUU3SyxrQkFBcEIsa0ZBQXdDSSxLQUF4QyxNQUFrRHlKLGNBRGxELEtBRUFnQixrQkFGQSxhQUVBQSxrQkFGQSx1QkFFQUEsa0JBQWtCLENBQUVDLGtCQUZwQixDQURpQjtBQUFBLE9BRFEsQ0FBM0I7O0FBTUEsVUFBSUQsa0JBQUosRUFBd0I7QUFBQTs7QUFDdkJGLFFBQUFBLFlBQVksR0FBRyxDQUFBRSxrQkFBa0IsU0FBbEIsSUFBQUEsa0JBQWtCLFdBQWxCLHFDQUFBQSxrQkFBa0IsQ0FBRUMsa0JBQXBCLGdGQUF3Q0MsVUFBeEMsTUFBdUQsS0FBdEU7QUFDQUgsUUFBQUEsOEJBQThCLEdBQUcsSUFBakM7QUFDQTtBQUNEOztBQUNELFFBQUlmLGNBQWMsSUFBSSxDQUFDZSw4QkFBdkIsRUFBdUQ7QUFBQTs7QUFDdERELE1BQUFBLFlBQVksR0FDWCxDQUFBekwsZ0JBQWdCLFNBQWhCLElBQUFBLGdCQUFnQixXQUFoQixzQ0FBQUEsZ0JBQWdCLENBQUUyQix5QkFBbEIsQ0FBNENnSixjQUE1Qyw2R0FBNkRuSyxXQUE3RCw0R0FBMEVDLFlBQTFFLDRHQUF3Rm1MLGtCQUF4RixrRkFBNEdDLFVBQTVHLE1BQ0EsS0FGRDtBQUdBLEtBSkQsTUFJTyxJQUFJLENBQUNsQixjQUFMLEVBQXFCO0FBQUE7O0FBQzNCYyxNQUFBQSxZQUFZLEdBQUcsQ0FBQXpMLGdCQUFnQixTQUFoQixJQUFBQSxnQkFBZ0IsV0FBaEIsdUNBQUFBLGdCQUFnQixDQUFFUSxXQUFsQiwrR0FBK0JDLFlBQS9CLCtHQUE2Q21MLGtCQUE3QyxvRkFBaUVDLFVBQWpFLE1BQWdGLEtBQS9GO0FBQ0E7O0FBQ0QsV0FBT0osWUFBUDtBQUNBOztBQUVELFdBQVNLLGVBQVQsQ0FBeUI5TCxnQkFBekIsRUFBc0QySyxjQUF0RCxFQUE4RTtBQUM3RSxRQUFJb0IsY0FBbUIsR0FBRyxLQUExQjs7QUFDQSxRQUFJcEIsY0FBSixFQUFvQjtBQUFBOztBQUNuQjtBQUNBLFVBQU1xQixzQkFBc0IsNkJBQUdoTSxnQkFBZ0IsQ0FBQzJCLHlCQUFqQixDQUEyQ2dKLGNBQTNDLENBQUgscUZBQUcsdUJBQTREbkssV0FBL0Qsc0ZBQUcsdUJBQXlFMkMsRUFBNUUsNERBQUcsd0JBQTZFOEksWUFBNUc7O0FBQ0EsVUFBSUQsc0JBQXNCLElBQUtBLHNCQUFELENBQWdDdkQsSUFBOUQsRUFBb0U7QUFDbkUsWUFBS3VELHNCQUFELENBQWdDdkQsSUFBaEMsQ0FBcUN4SCxPQUFyQyxDQUE2QyxHQUE3QyxJQUFvRCxDQUF4RCxFQUEyRDtBQUMxRCxjQUFNOEosZ0JBQWdCLEdBQUlpQixzQkFBRCxDQUFnQ3ZELElBQWhDLENBQXFDN0ksS0FBckMsQ0FBMkMsR0FBM0MsQ0FBekI7QUFDQSxjQUFNb0wsZUFBZSxHQUFHRCxnQkFBZ0IsQ0FBQyxDQUFELENBQXhDO0FBQ0EsY0FBTUUsV0FBVyxHQUFJakwsZ0JBQUQsQ0FBMEJyQixVQUExQixDQUFxQzZDLG9CQUFyQyxDQUEwREMsSUFBMUQsQ0FDbkIsVUFBQ3lKLFdBQUQ7QUFBQSxtQkFBc0JBLFdBQVcsQ0FBQ3ROLElBQVosS0FBcUIrTSxjQUEzQztBQUFBLFdBRG1CLEVBRWxCUSxPQUZGOztBQUdBLGNBQUlGLFdBQVcsS0FBS0QsZUFBcEIsRUFBcUM7QUFDcENlLFlBQUFBLGNBQWMsR0FBR0Msc0JBQWpCO0FBQ0E7QUFDRCxTQVRELE1BU087QUFDTkQsVUFBQUEsY0FBYyxHQUFHLEtBQWpCO0FBQ0E7QUFDRCxPQWJELE1BYU87QUFDTkEsUUFBQUEsY0FBYyxHQUFHQyxzQkFBakI7QUFDQTtBQUNELEtBbkJELE1BbUJPO0FBQUE7O0FBQ05ELE1BQUFBLGNBQWMsOEJBQUcvTCxnQkFBZ0IsQ0FBQ1EsV0FBcEIsdUZBQUcsd0JBQThCMkMsRUFBakMsNERBQUcsd0JBQWtDOEksWUFBbkQ7QUFDQTs7QUFDRCxXQUFPRixjQUFQO0FBQ0E7QUFFRDs7Ozs7Ozs7Ozs7QUFVTyxXQUFTRyxnQkFBVCxDQUNOL1AsZ0JBRE0sRUFFTndPLGNBRk0sRUFHTndCLGlCQUhNLEVBSXlCO0FBQy9CLFFBQU1uTSxnQkFBa0MsR0FBRzdELGdCQUFnQixDQUFDdUIsWUFBakIsRUFBM0M7QUFDQSxRQUFNcU8sY0FBbUIsR0FBR0QsZUFBZSxDQUFDOUwsZ0JBQUQsRUFBbUIySyxjQUFuQixDQUEzQztBQUNBLFFBQU1jLFlBQXFCLEdBQUdELGFBQWEsQ0FBQ3hMLGdCQUFELEVBQW1CMkssY0FBbkIsQ0FBM0M7O0FBRUEsUUFBSW9CLGNBQWMsS0FBSyxJQUFuQixJQUEyQjVQLGdCQUFnQixDQUFDa0csZUFBakIsT0FBdUNDLFlBQVksQ0FBQ2dKLGtCQUFuRixFQUF1RztBQUN0RyxhQUFPLEtBQVA7QUFDQSxLQUZELE1BRU8sSUFBSWEsaUJBQWlCLENBQUM1RyxJQUFsQixLQUEyQixVQUEvQixFQUEyQztBQUNqRCxhQUFPLElBQVA7QUFDQSxLQUZNLE1BRUEsSUFBSSxDQUFDa0csWUFBTCxFQUFtQjtBQUN6QixhQUFPLEtBQVA7QUFDQSxLQUZNLE1BRUEsSUFBSXRQLGdCQUFnQixDQUFDa0csZUFBakIsT0FBdUNDLFlBQVksQ0FBQ2lKLFVBQXhELEVBQW9FO0FBQzFFLFVBQUlRLGNBQUosRUFBb0I7QUFDbkIsZUFBTyxZQUFZcEIsY0FBYyxHQUFHQSxjQUFjLEdBQUcsR0FBcEIsR0FBMEIsRUFBcEQsSUFBMERvQixjQUFjLENBQUN0RCxJQUF6RSxHQUFnRixzQ0FBdkY7QUFDQSxPQUZELE1BRU87QUFDTixlQUFPLG9DQUFQO0FBQ0E7QUFDRCxLQU5NLE1BTUE7QUFDTixhQUFPLElBQVA7QUFDQTtBQUNEOzs7O0FBRU0sV0FBU25LLCtCQUFULENBQ05yQyxrQkFETSxFQUVOQyxpQkFGTSxFQUdOQyxnQkFITSxFQUlOOEksMEJBSk0sRUFLTjlILDZCQUxNLEVBTXlCO0FBQy9CO0FBRCtCLHNCQUVJSSxTQUFTLENBQUNyQixpQkFBRCxDQUZiO0FBQUEsUUFFdkJzQixzQkFGdUIsZUFFdkJBLHNCQUZ1Qjs7QUFHL0IsUUFBTUMsU0FBUyxHQUFHdEIsZ0JBQWdCLENBQUN1QixZQUFqQixFQUFsQjtBQUNBLFFBQU0wTyxvQkFBcUMsR0FBR2pRLGdCQUFnQixDQUFDNkIsa0JBQWpCLEVBQTlDO0FBQ0EsUUFBTUwsVUFBa0IsR0FBR0YsU0FBUyxDQUFDRyxJQUFyQztBQUFBLFFBQ0NDLFdBQW9CLEdBQUdMLHNCQUFzQixDQUFDTSxNQUF2QixLQUFrQyxDQUQxRDtBQUFBLFFBRUN1TyxRQUE0QixHQUFHdkMsV0FBVyxDQUFDNU4saUJBQUQsRUFBb0JDLGdCQUFwQixDQUYzQztBQUFBLFFBR0NrTixFQUFFLEdBQUdpRCxPQUFPLENBQUN6TyxXQUFXLEdBQUdGLFVBQUgsR0FBZ0JILHNCQUE1QixFQUFvRCxVQUFwRCxDQUhiO0FBSUEsUUFBTXlFLGFBQWEsR0FBR0osZ0JBQWdCLENBQUM1RixrQkFBRCxFQUFxQkMsaUJBQXJCLEVBQXdDQyxnQkFBeEMsRUFBMEQwQixXQUExRCxFQUF1RUwsc0JBQXZFLENBQXRDO0FBQ0EsUUFBTStPLGtCQUFrQixHQUFHN00sd0JBQXdCLENBQUN4RCxpQkFBRCxFQUFvQkMsZ0JBQXBCLENBQW5EO0FBQ0EsUUFBSXFRLFNBQVMsR0FBRzNPLFdBQVcsR0FBRyxFQUFILEdBQVEsRUFBbkM7O0FBQ0EsUUFBSVYsNkJBQTZCLElBQUlBLDZCQUE2QixDQUFDc1AsUUFBbkUsRUFBNkU7QUFDNUVELE1BQUFBLFNBQVMsR0FBR3JQLDZCQUE2QixDQUFDc1AsUUFBMUM7QUFDQTs7QUFFRCxRQUFNMU8sMEJBQTBCLEdBQUdGLFdBQVcsR0FBR0YsVUFBSCxHQUFnQkgsc0JBQTlEO0FBQ0EsUUFBTXBCLGtCQUFrQixHQUFHZ1Esb0JBQW9CLENBQUNuTywwQkFBckIsQ0FBZ0RGLDBCQUFoRCxDQUEzQjs7QUFDQSxRQUFNb08saUJBQWlCLEdBQUduSCxxQkFBcUIsQ0FBQy9JLGtCQUFELEVBQXFCZ0osMEJBQXJCLEVBQWlEOUksZ0JBQWpELEVBQW1FQyxrQkFBbkUsQ0FBL0M7O0FBQ0EsUUFBSStGLGlCQUFKLEVBQTRCQyx3QkFBNUI7O0FBQ0EsUUFBSWpHLGdCQUFnQixDQUFDa0csZUFBakIsT0FBdUNDLFlBQVksQ0FBQ0MsVUFBeEQsRUFBb0U7QUFBQTs7QUFDbkVKLE1BQUFBLGlCQUFpQixHQUFHSyxlQUFlLENBQUNyRyxnQkFBZ0IsQ0FBQ3NHLHNCQUFqQixFQUFELEVBQTRDakYsc0JBQTVDLEVBQW9FLElBQXBFLENBQW5DOztBQUNBLGdDQUFJMkUsaUJBQUosdURBQUksbUJBQW1CdUssd0JBQXZCLEVBQWlEO0FBQ2hEdEssUUFBQUEsd0JBQXdCLEdBQUczRCxTQUEzQjtBQUNBLE9BRkQsTUFFTztBQUNOMkQsUUFBQUEsd0JBQXdCLEdBQUdELGlCQUFpQixHQUFHTyxjQUFjLENBQUNQLGlCQUFELEVBQW9CLElBQXBCLENBQWpCLEdBQTZDQSxpQkFBekY7QUFDQTtBQUNEOztBQUVELFdBQU87QUFDTmtILE1BQUFBLEVBQUUsRUFBRUEsRUFERTtBQUVOMUwsTUFBQUEsVUFBVSxFQUFFQSxVQUZOO0FBR05nUCxNQUFBQSxVQUFVLEVBQUUsTUFBTWhQLFVBQU4sSUFBb0IsQ0FBQ0UsV0FBRCxHQUFlLE1BQU1MLHNCQUFyQixHQUE4QyxFQUFsRSxDQUhOO0FBSU5tTixNQUFBQSxjQUFjLEVBQUVuTixzQkFKVjtBQUtOSyxNQUFBQSxXQUFXLEVBQUVBLFdBTFA7QUFNTitPLE1BQUFBLEdBQUcsRUFBRWxHLDRCQUE0QixDQUNoQ3pLLGtCQURnQyxFQUVoQ0MsaUJBRmdDLEVBR2hDQyxnQkFIZ0MsRUFJaENDLGtCQUpnQyxFQUtoQzJCLDBCQUxnQyxDQU4zQjtBQWFOc08sTUFBQUEsUUFBUSxFQUFFQSxRQWJKO0FBY05RLE1BQUFBLElBQUksRUFBRTtBQUNMLGtCQUFVekIsZ0JBQWdCLENBQUNqUCxnQkFBRCxFQUFtQnFCLHNCQUFuQixFQUEyQytPLGtCQUFrQixDQUFDek0sV0FBOUQsQ0FEckI7QUFFTHFGLFFBQUFBLE1BQU0sRUFBRStHLGdCQUFnQixDQUFDL1AsZ0JBQUQsRUFBbUJxQixzQkFBbkIsRUFBMkMyTyxpQkFBM0MsQ0FGbkI7QUFHTFcsUUFBQUEsTUFBTSxFQUFFQyxZQUFZLENBQUM1USxnQkFBRDtBQUhmLE9BZEE7QUFtQk5nSixNQUFBQSxNQUFNLEVBQUVnSCxpQkFuQkY7QUFvQk5sSyxNQUFBQSxhQUFhLEVBQUVBLGFBcEJUO0FBcUJOK0ssTUFBQUEsY0FBYyxFQUFFN1EsZ0JBQWdCLENBQUNrRyxlQUFqQixPQUF1Q0MsWUFBWSxDQUFDQyxVQXJCOUQ7QUFzQk4wSyxNQUFBQSxlQUFlLEVBQUViLG9CQUFvQixDQUFDbkMsb0JBQXJCLE9BQWdELFNBQWhELElBQTZELENBQUMsQ0FBQ29DLFFBdEIxRTtBQXVCTkcsTUFBQUEsU0FBUyxFQUFFQSxTQXZCTDtBQXdCTlUsTUFBQUEseUJBQXlCLEVBQUU5SztBQXhCckIsS0FBUDtBQTBCQTs7OztBQUVELFdBQVMySyxZQUFULENBQXNCNVEsZ0JBQXRCLEVBQTBEO0FBQ3pELFFBQU1nUixZQUFZLEdBQUdoUixnQkFBZ0IsQ0FBQ2tHLGVBQWpCLEVBQXJCOztBQUNBLFFBQUk4SyxZQUFZLEtBQUs3SyxZQUFZLENBQUNnSixrQkFBOUIsSUFBb0Q2QixZQUFZLEtBQUs3SyxZQUFZLENBQUNpSixVQUF0RixFQUFrRztBQUNqRyxhQUFPLFNBQVA7QUFDQSxLQUp3RCxDQUt6RDs7O0FBQ0EsV0FBTyxnQkFBUDtBQUNBO0FBRUQ7Ozs7Ozs7O0FBTUEsV0FBU2hPLFNBQVQsQ0FBbUJyQixpQkFBbkIsRUFBOEM7QUFBQSxnQ0FDRUEsaUJBQWlCLENBQUMwRCxLQUFsQixDQUF3QixHQUF4QixDQURGO0FBQUE7QUFBQSxRQUN4Q3BDLHNCQUR3QztBQUFBLFFBQ2hCOEYsY0FEZ0I7O0FBRzdDLFFBQUk5RixzQkFBc0IsQ0FBQzRQLFdBQXZCLENBQW1DLEdBQW5DLE1BQTRDNVAsc0JBQXNCLENBQUNNLE1BQXZCLEdBQWdDLENBQWhGLEVBQW1GO0FBQ2xGO0FBQ0FOLE1BQUFBLHNCQUFzQixHQUFHQSxzQkFBc0IsQ0FBQzZQLE1BQXZCLENBQThCLENBQTlCLEVBQWlDN1Asc0JBQXNCLENBQUNNLE1BQXZCLEdBQWdDLENBQWpFLENBQXpCO0FBQ0E7O0FBQ0QsV0FBTztBQUFFTixNQUFBQSxzQkFBc0IsRUFBdEJBLHNCQUFGO0FBQTBCOEYsTUFBQUEsY0FBYyxFQUFkQTtBQUExQixLQUFQO0FBQ0E7O0FBRU0sV0FBU2dLLGdDQUFULENBQ05DLG9CQURNLEVBRU5wUixnQkFGTSxFQUdzQztBQUM1QyxRQUFNcVIsU0FBK0IsR0FBR3JSLGdCQUFnQixDQUFDc1IsdUJBQWpCLENBQXlDRixvQkFBekMsQ0FBeEM7O0FBRUEsUUFBSUMsU0FBSixFQUFlO0FBQUE7O0FBQ2QsVUFBTUUsYUFBdUIsR0FBRyxFQUFoQztBQUNBLCtCQUFBRixTQUFTLENBQUNHLGFBQVYsZ0ZBQXlCL00sT0FBekIsQ0FBaUMsVUFBQ2dOLFlBQUQsRUFBb0M7QUFDcEUsWUFBTUMsWUFBaUIsR0FBR0QsWUFBWSxDQUFDRSxZQUF2QztBQUNBLFlBQU1DLFlBQW9CLEdBQUdGLFlBQVksQ0FBQzNNLEtBQTFDOztBQUNBLFlBQUl3TSxhQUFhLENBQUN6TSxPQUFkLENBQXNCOE0sWUFBdEIsTUFBd0MsQ0FBQyxDQUE3QyxFQUFnRDtBQUMvQ0wsVUFBQUEsYUFBYSxDQUFDck4sSUFBZCxDQUFtQjBOLFlBQW5CO0FBQ0E7QUFDRCxPQU5EO0FBT0EsYUFBTztBQUNOQyxRQUFBQSxJQUFJLEVBQUVSLFNBQVMsQ0FBQ1MsSUFEVjtBQUVOUCxRQUFBQSxhQUFhLEVBQUVBO0FBRlQsT0FBUDtBQUlBOztBQUNELFdBQU9qUCxTQUFQO0FBQ0E7Ozs7QUFFTSxXQUFTbkIsNkJBQVQsQ0FDTnJCLGtCQURNLEVBRU5DLGlCQUZNLEVBR05DLGdCQUhNLEVBS3NCO0FBQUEsUUFENUJpQiwrQkFDNEIsdUVBRGUsS0FDZjtBQUM1QixRQUFNNEUscUJBQWlELEdBQUc3RixnQkFBZ0IsQ0FBQ0ssK0JBQWpCLENBQWlETixpQkFBakQsQ0FBMUQ7QUFDQSxRQUFNZ0csYUFBYSxHQUFHRixxQkFBcUIsQ0FBQ0UsYUFBNUM7QUFDQSxRQUFJZ00scUJBQUo7QUFDQSxRQUFNQyxnQkFBOEMsR0FBRyxFQUF2RDtBQUNBLFFBQUlDLFlBQVksR0FBRyxJQUFuQjtBQUNBLFFBQUlsSSxZQUFZLEdBQUdDLFlBQVksQ0FBQ00sT0FBaEM7QUFDQSxRQUFJNEgsT0FBSjtBQUNBLFFBQUk5SCxXQUFXLEdBQUcsSUFBbEI7QUFDQSxRQUFJK0gsK0JBQStCLEdBQUcsS0FBdEM7QUFDQSxRQUFJQyxvQkFBb0IsR0FBRyxLQUEzQjtBQUNBLFFBQUlDLGNBQWMsR0FBRyxLQUFyQjtBQUNBLFFBQUlDLFNBQVMsR0FBRyxpQkFBaEI7QUFDQSxRQUFJQyxjQUFjLEdBQUcsR0FBckI7QUFDQSxRQUFJQyxXQUFXLEdBQUcsSUFBbEI7QUFDQSxRQUFNQyxhQUFhLEdBQUd6UyxnQkFBZ0IsQ0FBQzBTLGdCQUFqQixFQUF0QjtBQUNBLFFBQU1DLGtCQUFrQixHQUFHRixhQUFILGFBQUdBLGFBQUgsdUJBQUdBLGFBQWEsQ0FBRUcsaUJBQWYsRUFBM0I7QUFDQSxRQUFNQyxpQkFBaUIsR0FBRzdTLGdCQUFnQixDQUFDNkIsa0JBQWpCLEdBQXNDaVIsbUJBQXRDLEVBQTFCOztBQUNBLFFBQUssQ0FBQUQsaUJBQWlCLFNBQWpCLElBQUFBLGlCQUFpQixXQUFqQixZQUFBQSxpQkFBaUIsQ0FBRUUsSUFBbkIsTUFBNEIsSUFBNUIsSUFBb0MsQ0FBQUYsaUJBQWlCLFNBQWpCLElBQUFBLGlCQUFpQixXQUFqQixZQUFBQSxpQkFBaUIsQ0FBRUcsT0FBbkIsTUFBK0IsSUFBcEUsSUFBNkVMLGtCQUFrQixLQUFLLE1BQXhHLEVBQWdIO0FBQy9HMVIsTUFBQUEsK0JBQStCLEdBQUcsS0FBbEM7QUFDQTs7QUFDRCxRQUFJOEUsYUFBYSxJQUFJakcsa0JBQXJCLEVBQXlDO0FBQUE7O0FBQ3hDLFVBQU13SixnQkFBZ0IsR0FBR3RKLGdCQUFnQixDQUFDdUosdUJBQWpCLENBQXlDekosa0JBQXpDLENBQXpCO0FBQ0FpRyxNQUFBQSxhQUFhLFNBQWIsSUFBQUEsYUFBYSxXQUFiLHFDQUFBQSxhQUFhLENBQUVrTixxQkFBZiwwR0FBc0NqUCxLQUF0QyxrRkFBNkNTLE9BQTdDLENBQXFELFVBQUM2SCxJQUFELEVBQXNDO0FBQUE7O0FBQzFGeUYsUUFBQUEscUJBQXFCLEdBQUd6SSxnQkFBZ0IsQ0FBQzRKLFdBQWpCLENBQTZCLE1BQU01RyxJQUFJLENBQUNuRixjQUF4QyxDQUF4QixDQUQwRixDQUUxRjs7QUFDQSxZQUFJNEsscUJBQUosRUFBMkI7QUFDMUJDLFVBQUFBLGdCQUFnQixDQUFDOU4sSUFBakIsQ0FBc0I7QUFBRWlELFlBQUFBLGNBQWMsRUFBRW1GLElBQUksQ0FBQ25GO0FBQXZCLFdBQXRCO0FBQ0E7O0FBQ0QrSyxRQUFBQSxPQUFPLEdBQUc7QUFDVGlCLFVBQUFBLFlBQVksRUFBRTtBQUNiQyxZQUFBQSxVQUFVLEVBQUVyTixhQUFGLGFBQUVBLGFBQUYsaURBQUVBLGFBQWEsQ0FBRWtOLHFCQUFqQiwyREFBRSx1QkFBc0NHLFVBRHJDO0FBRWJwUCxZQUFBQSxLQUFLLEVBQUVnTztBQUZNO0FBREwsU0FBVjtBQU1BLE9BWkQ7QUFjQUMsTUFBQUEsWUFBWSxHQUNYbE0sYUFBYSxDQUFDa00sWUFBZCxLQUErQjNQLFNBQS9CLEdBQTJDeUQsYUFBYSxDQUFDa00sWUFBekQsR0FBd0VqUyxnQkFBZ0IsQ0FBQ2tHLGVBQWpCLE9BQXVDLFlBRGhIO0FBRUE2RCxNQUFBQSxZQUFZLEdBQUcsMEJBQUFoRSxhQUFhLENBQUNnRSxZQUFkLGdGQUE0QnRJLElBQTVCLEtBQW9Dc0ksWUFBbkQ7QUFDQUssTUFBQUEsV0FBVyxHQUFHLDJCQUFBckUsYUFBYSxDQUFDZ0UsWUFBZCxrRkFBNEJLLFdBQTVCLE1BQTRDOUgsU0FBNUMsNkJBQXdEeUQsYUFBYSxDQUFDZ0UsWUFBdEUsMkRBQXdELHVCQUE0QkssV0FBcEYsR0FBa0csSUFBaEg7QUFDQStILE1BQUFBLCtCQUErQixHQUFHLENBQUMsNEJBQUNwTSxhQUFhLENBQUNnRSxZQUFmLDJEQUFDLHVCQUE0Qm9JLCtCQUE3QixDQUFuQztBQUNBQyxNQUFBQSxvQkFBb0IsR0FBR3JNLGFBQWEsQ0FBQ3FNLG9CQUFkLEtBQXVDOVAsU0FBdkMsR0FBbUR5RCxhQUFhLENBQUNxTSxvQkFBakUsR0FBd0YsS0FBL0c7QUFDQUMsTUFBQUEsY0FBYyxHQUFHLENBQUMsNEJBQUN0TSxhQUFhLENBQUNrTixxQkFBZiwyREFBQyx1QkFBcUNaLGNBQXRDLENBQWxCO0FBQ0FDLE1BQUFBLFNBQVMsR0FBR3ZNLGFBQWEsQ0FBQ2hFLElBQTFCO0FBQ0F3USxNQUFBQSxjQUFjLEdBQ2J4TSxhQUFhLENBQUNzTixTQUFkLEtBQTRCLElBQTVCLElBQW9DdE4sYUFBYSxDQUFDd00sY0FBZCxLQUFpQyxDQUFyRSxHQUF5RSxDQUF6RSxHQUE2RXhNLGFBQWEsQ0FBQ3dNLGNBQWQsSUFBZ0NBLGNBRDlHOztBQUVBLFVBQUl4TSxhQUFhLENBQUN5TSxXQUFkLEtBQThCLEtBQWxDLEVBQXlDO0FBQ3hDQSxRQUFBQSxXQUFXLEdBQUcsS0FBZDtBQUNBO0FBQ0Q7O0FBQ0QsV0FBTztBQUNOTixNQUFBQSxPQUFPLEVBQUVBLE9BREg7QUFFTm5RLE1BQUFBLElBQUksRUFBRXVRLFNBRkE7QUFHTmdCLE1BQUFBLGFBQWEsRUFBRSxFQUFFdkIscUJBQXFCLElBQUlNLGNBQTNCLENBSFQ7QUFJTkosTUFBQUEsWUFBWSxFQUFFQSxZQUpSO0FBS05sSSxNQUFBQSxZQUFZLEVBQUVBLFlBTFI7QUFNTkssTUFBQUEsV0FBVyxFQUFFQSxXQU5QO0FBT04rSCxNQUFBQSwrQkFBK0IsRUFBRUEsK0JBUDNCO0FBUU5vQixNQUFBQSx1QkFBdUIsRUFBRW5CLG9CQUFvQixJQUFJblIsK0JBUjNDO0FBU05zUixNQUFBQSxjQUFjLEVBQUVBLGNBVFY7QUFVTkMsTUFBQUEsV0FBVyxFQUFFQTtBQVZQLEtBQVA7QUFZQSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q3JpdGljYWxpdHlUeXBlLFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHRFbnVtVmFsdWUsXG5cdExpbmVJdGVtLFxuXHRQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdFByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXMsXG5cdFNlbGVjdGlvblZhcmlhbnRUeXBlLFxuXHRTZWxlY3RPcHRpb25UeXBlLFxuXHRVSUFubm90YXRpb25UeXBlc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7XG5cdEFjdGlvblR5cGUsXG5cdENyZWF0aW9uTW9kZSxcblx0TWFuaWZlc3RUYWJsZUNvbHVtbixcblx0TWFuaWZlc3RXcmFwcGVyLFxuXHROYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHROYXZpZ2F0aW9uVGFyZ2V0Q29uZmlndXJhdGlvbixcblx0U2VsZWN0aW9uTW9kZSxcblx0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24sXG5cdFZhcmlhbnRNYW5hZ2VtZW50VHlwZSxcblx0VmlzdWFsaXphdGlvblR5cGVcbn0gZnJvbSBcIi4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IEVudGl0eVNldCwgRW50aXR5VHlwZSwgTmF2aWdhdGlvblByb3BlcnR5LCBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyXCI7XG5pbXBvcnQgeyBDb252ZXJ0ZXJDb250ZXh0LCBUZW1wbGF0ZVR5cGUgfSBmcm9tIFwiLi4vLi4vdGVtcGxhdGVzL0Jhc2VDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IFRhYmxlSUQgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9JRFwiO1xuaW1wb3J0IHsgTmF2aWdhdGlvblByb3BlcnR5UmVzdHJpY3Rpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9kaXN0L2dlbmVyYXRlZC9DYXBhYmlsaXRpZXNcIjtcbmltcG9ydCB7XG5cdEFubm90YXRpb25BY3Rpb24sXG5cdEJhc2VBY3Rpb24sXG5cdEN1c3RvbUFjdGlvbixcblx0Z2V0QWN0aW9uc0Zyb21NYW5pZmVzdCxcblx0aXNBY3Rpb25OYXZpZ2FibGVcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHsgQ29uZmlndXJhYmxlT2JqZWN0LCBDdXN0b21FbGVtZW50LCBpbnNlcnRDdXN0b21FbGVtZW50cywgUGxhY2VtZW50IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IGlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QsIGlzRGF0YUZpZWxkVHlwZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9hbm5vdGF0aW9ucy9EYXRhRmllbGRcIjtcbmltcG9ydCB7XG5cdGFubm90YXRpb25FeHByZXNzaW9uLFxuXHRCaW5kaW5nRXhwcmVzc2lvbixcblx0YmluZGluZ0V4cHJlc3Npb24sXG5cdGNvbXBpbGVCaW5kaW5nLFxuXHRlcXVhbCxcblx0RXhwcmVzc2lvbixcblx0RXhwcmVzc2lvbk9yUHJpbWl0aXZlLFxuXHRmb3JtYXRSZXN1bHQsXG5cdGlmRWxzZSxcblx0bm90XG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBEcmFmdCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IHsgS2V5SGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9LZXlcIjtcbmltcG9ydCB0YWJsZUZvcm1hdHRlcnMgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvVGFibGVGb3JtYXR0ZXJcIjtcbmltcG9ydCB7IE1lc3NhZ2VUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvVGFibGVGb3JtYXR0ZXJUeXBlc1wiO1xuaW1wb3J0IHsgaXNQYXRoRGVsZXRhYmxlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuXG5leHBvcnQgdHlwZSBUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uID0ge1xuXHRhdXRvQmluZE9uSW5pdDogYm9vbGVhbjtcblx0Y29sbGVjdGlvbjogc3RyaW5nO1xuXHRlbmFibGVDb250cm9sVk0/OiBib29sZWFuO1xuXHRmaWx0ZXJJZD86IHN0cmluZztcblx0aWQ6IHN0cmluZztcblx0aXNFbnRpdHlTZXQ6IGJvb2xlYW47XG5cdG5hdmlnYXRpb25QYXRoOiBzdHJpbmc7XG5cdHAxM25Nb2RlPzogc3RyaW5nO1xuXHRyb3c/OiB7XG5cdFx0YWN0aW9uPzogc3RyaW5nO1xuXHRcdHByZXNzPzogc3RyaW5nO1xuXHRcdHJvd0hpZ2hsaWdodGluZzogQmluZGluZ0V4cHJlc3Npb248TWVzc2FnZVR5cGU+O1xuXHRcdHJvd05hdmlnYXRlZDogQmluZGluZ0V4cHJlc3Npb248Ym9vbGVhbj47XG5cdH07XG5cdHNlbGVjdGlvbk1vZGU6IHN0cmluZztcblx0c2hvdz86IHtcblx0XHRjcmVhdGU/OiBzdHJpbmcgfCBib29sZWFuO1xuXHRcdGRlbGV0ZT86IHN0cmluZyB8IGJvb2xlYW47XG5cdFx0dXBkYXRlPzogc3RyaW5nIHwgYm9vbGVhbjtcblx0fTtcblx0dGhyZXNob2xkOiBudW1iZXI7XG5cdGVudGl0eU5hbWU6IHN0cmluZztcblxuXHQvKiogQ3JlYXRlIG5ldyBlbnRyaWVzICovXG5cdGNyZWF0ZTogQ3JlYXRlQmVoYXZpb3VyIHwgQ3JlYXRlQmVoYXZpb3VyRXh0ZXJuYWw7XG5cdHBhcmVudEVudGl0eURlbGV0ZUVuYWJsZWQ/OiBCaW5kaW5nRXhwcmVzc2lvbjxib29sZWFuPjtcbn07XG5cbi8qKlxuICogTmV3IGVudHJpZXMgYXJlIGNyZWF0ZWQgd2l0aGluIHRoZSBhcHAgKGRlZmF1bHQgY2FzZSlcbiAqL1xudHlwZSBDcmVhdGVCZWhhdmlvdXIgPSB7XG5cdG1vZGU6IENyZWF0aW9uTW9kZTtcblx0YXBwZW5kOiBCb29sZWFuO1xuXHRuZXdBY3Rpb24/OiBzdHJpbmc7XG5cdG5hdmlnYXRlVG9UYXJnZXQ/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIE5ldyBlbnRyaWVzIGFyZSBjcmVhdGVkIGJ5IG5hdmlnYXRpbmcgdG8gc29tZSB0YXJnZXRcbiAqL1xudHlwZSBDcmVhdGVCZWhhdmlvdXJFeHRlcm5hbCA9IHtcblx0bW9kZTogXCJFeHRlcm5hbFwiO1xuXHRvdXRib3VuZDogc3RyaW5nO1xuXHRvdXRib3VuZERldGFpbDogTmF2aWdhdGlvblRhcmdldENvbmZpZ3VyYXRpb25bXCJvdXRib3VuZERldGFpbFwiXTtcblx0bmF2aWdhdGlvblNldHRpbmdzOiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uO1xufTtcblxudHlwZSBUYWJsZUNhcGFiaWxpdHlSZXN0cmljdGlvbiA9IHtcblx0aXNEZWxldGFibGU6IGJvb2xlYW47XG5cdGlzVXBkYXRhYmxlOiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgVGFibGVGaWx0ZXJzQ29uZmlndXJhdGlvbiA9IHtcblx0cGF0aHM6IFtcblx0XHR7XG5cdFx0XHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHRcdH1cblx0XTtcblx0c2hvd0NvdW50cz86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbiA9IHtcblx0cHJvcGVydHlOYW1lczogc3RyaW5nW107XG5cdHRleHQ6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24gPSB7XG5cdGNyZWF0ZUF0RW5kOiBib29sZWFuO1xuXHRjcmVhdGlvbk1vZGU6IENyZWF0aW9uTW9kZTtcblx0ZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YT86IGJvb2xlYW47XG5cdHVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0PzogYm9vbGVhbjtcblx0ZW5hYmxlRXhwb3J0PzogYm9vbGVhbjtcblx0aGVhZGVyVmlzaWJsZT86IGJvb2xlYW47XG5cdGZpbHRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBUYWJsZUZpbHRlcnNDb25maWd1cmF0aW9uPjtcblx0dHlwZT86IHN0cmluZztcblx0c2VsZWN0QWxsPzogYm9vbGVhbjtcblx0c2VsZWN0aW9uTGltaXQ/OiBudW1iZXI7XG5cdGVuYWJsZVBhc3RlOiBib29sZWFuO1xufTtcblxuZW51bSBDb2x1bW5UeXBlIHtcblx0RGVmYXVsdCA9IFwiRGVmYXVsdFwiLCAvLyBEZWZhdWx0IFR5cGVcblx0QW5ub3RhdGlvbiA9IFwiQW5ub3RhdGlvblwiXG59XG5cbmV4cG9ydCB0eXBlIEJhc2VUYWJsZUNvbHVtbiA9IENvbmZpZ3VyYWJsZU9iamVjdCAmIHtcblx0aWQ6IHN0cmluZztcblx0d2lkdGg/OiBzdHJpbmc7XG5cdHRlbXBsYXRlOiBzdHJpbmc7XG5cdG5hbWU6IHN0cmluZztcblx0dmlzaWJsZTogQmluZGluZ0V4cHJlc3Npb248Ym9vbGVhbj47XG5cdHBlcnNvbmFsaXphdGlvbk9ubHk6IGJvb2xlYW47XG5cdHR5cGU6IENvbHVtblR5cGU7IC8vT3JpZ2luIG9mIHRoZSBzb3VyY2Ugd2hlcmUgd2UgYXJlIGdldHRpbmcgdGhlIHRlbXBsYXRlZCBpbmZvcm1hdGlvbiBmcm9tLFxuXHRpc05hdmlnYWJsZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBDdXN0b21UYWJsZUNvbHVtbiA9IEJhc2VUYWJsZUNvbHVtbiAmIHtcblx0Y3JlYXRpb25UZW1wbGF0ZT86IHN0cmluZztcblx0aGVhZGVyPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQW5ub3RhdGlvblRhYmxlQ29sdW1uID0gQmFzZVRhYmxlQ29sdW1uICYge1xuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xufTtcblxudHlwZSBUYWJsZUNvbHVtbiA9IEN1c3RvbVRhYmxlQ29sdW1uIHwgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXG5leHBvcnQgdHlwZSBDdXN0b21Db2x1bW4gPSBDdXN0b21FbGVtZW50PFRhYmxlQ29sdW1uPjtcblxuZXhwb3J0IHR5cGUgVGFibGVWaXN1YWxpemF0aW9uID0ge1xuXHR0eXBlOiBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZTtcblx0YW5ub3RhdGlvbjogVGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbjtcblx0Y29udHJvbDogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbjtcblx0Y29sdW1uczogVGFibGVDb2x1bW5bXTtcblx0YWN0aW9uczogQmFzZUFjdGlvbltdO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIGFycmF5IG9mIGFsbCBhbm5vdGF0aW9uIGJhc2VkIGFuZCBtYW5pZmVzdCBiYXNlZCB0YWJsZSBhY3Rpb25zLlxuICpcbiAqIEBwYXJhbSB7TGluZUl0ZW19IGxpbmVJdGVtQW5ub3RhdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IHZpc3VhbGl6YXRpb25QYXRoXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSB7TmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbn0gbmF2aWdhdGlvblNldHRpbmdzXG4gKiBAcmV0dXJucyB7VGFibGVBY3Rpb259IHRoZSBjb21wbGV0ZSB0YWJsZSBhY3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZUFjdGlvbnMoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdG5hdmlnYXRpb25TZXR0aW5ncz86IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb25cbik6IEJhc2VBY3Rpb25bXSB7XG5cdHJldHVybiBpbnNlcnRDdXN0b21FbGVtZW50cyhcblx0XHRnZXRUYWJsZUFubm90YXRpb25BY3Rpb25zKGxpbmVJdGVtQW5ub3RhdGlvbiwgdmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKS5hY3Rpb25zLCBuYXZpZ2F0aW9uU2V0dGluZ3MsIHRydWUpLFxuXHRcdHsgaXNOYXZpZ2FibGU6IFwib3ZlcndyaXRlXCIsIGVuYWJsZU9uU2VsZWN0OiBcIm92ZXJ3cml0ZVwiLCBlbmFibGVBdXRvU2Nyb2xsOiBcIm92ZXJ3cml0ZVwiIH1cblx0KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGFycmF5IG9mZiBhbGwgY29sdW1ucywgYW5ub3RhdGlvbiBiYXNlZCBhcyB3ZWxsIGFzIG1hbmlmZXN0IGJhc2VkLlxuICogVGhleSBhcmUgc29ydGVkIGFuZCBzb21lIHByb3BlcnRpZXMgb2YgY2FuIGJlIG92ZXJ3cml0dGVuIHRocm91Z2ggdGhlIG1hbmlmZXN0IChjaGVjayBvdXQgdGhlIG92ZXJ3cml0YWJsZUtleXMpLlxuICpcbiAqIEBwYXJhbSB7TGluZUl0ZW19IGxpbmVJdGVtQW5ub3RhdGlvbiBDb2xsZWN0aW9uIG9mIGRhdGEgZmllbGRzIGZvciByZXByZXNlbnRhdGlvbiBpbiBhIHRhYmxlIG9yIGxpc3RcbiAqIEBwYXJhbSB7c3RyaW5nfSB2aXN1YWxpemF0aW9uUGF0aFxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0ge05hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb259IG5hdmlnYXRpb25TZXR0aW5nc1xuICogQHJldHVybnMge1RhYmxlQ29sdW1ufSBSZXR1cm5zIGFsbCB0YWJsZSBjb2x1bW5zIHRoYXQgc2hvdWxkIGJlIGF2YWlsYWJsZSwgcmVnYXJkbGVzcyBvZiB0ZW1wbGF0aW5nIG9yIHBlcnNvbmFsaXphdGlvbiBvciB0aGVpciBvcmlnaW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlQ29sdW1ucyhcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0bmF2aWdhdGlvblNldHRpbmdzPzogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvblxuKTogVGFibGVDb2x1bW5bXSB7XG5cdHJldHVybiBpbnNlcnRDdXN0b21FbGVtZW50cyhcblx0XHRnZXRDb2x1bW5zRnJvbUFubm90YXRpb25zKGxpbmVJdGVtQW5ub3RhdGlvbiwgdmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGdldENvbHVtbnNGcm9tTWFuaWZlc3QoY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKS5jb2x1bW5zLCBuYXZpZ2F0aW9uU2V0dGluZ3MpLFxuXHRcdHsgd2lkdGg6IFwib3ZlcndyaXRlXCIsIGlzTmF2aWdhYmxlOiBcIm92ZXJ3cml0ZVwiIH1cblx0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRhYmxlVmlzdWFsaXphdGlvbihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/OiBQcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzLFxuXHRpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50PzogYm9vbGVhblxuKTogVGFibGVWaXN1YWxpemF0aW9uIHtcblx0Y29uc3QgdGFibGVNYW5pZmVzdENvbmZpZyA9IGdldFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKFxuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHR2aXN1YWxpemF0aW9uUGF0aCxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdGlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnRcblx0KTtcblx0Y29uc3QgeyBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIH0gPSBzcGxpdFBhdGgodmlzdWFsaXphdGlvblBhdGgpO1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRjb25zdCBlbnRpdHlOYW1lOiBzdHJpbmcgPSBlbnRpdHlTZXQubmFtZSxcblx0XHRpc0VudGl0eVNldDogYm9vbGVhbiA9IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoID09PSAwO1xuXHRjb25zdCBuYXZpZ2F0aW9uT3JDb2xsZWN0aW9uTmFtZSA9IGlzRW50aXR5U2V0ID8gZW50aXR5TmFtZSA6IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg7XG5cdGNvbnN0IG5hdmlnYXRpb25TZXR0aW5ncyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24obmF2aWdhdGlvbk9yQ29sbGVjdGlvbk5hbWUpO1xuXHRyZXR1cm4ge1xuXHRcdHR5cGU6IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlLFxuXHRcdGFubm90YXRpb246IGdldFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24oXG5cdFx0XHRsaW5lSXRlbUFubm90YXRpb24sXG5cdFx0XHR2aXN1YWxpemF0aW9uUGF0aCxcblx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHR0YWJsZU1hbmlmZXN0Q29uZmlnLFxuXHRcdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb25cblx0XHQpLFxuXHRcdGNvbnRyb2w6IHRhYmxlTWFuaWZlc3RDb25maWcsXG5cdFx0YWN0aW9uczogZ2V0VGFibGVBY3Rpb25zKGxpbmVJdGVtQW5ub3RhdGlvbiwgdmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQsIG5hdmlnYXRpb25TZXR0aW5ncyksXG5cdFx0Y29sdW1uczogZ2V0VGFibGVDb2x1bW5zKGxpbmVJdGVtQW5ub3RhdGlvbiwgdmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQsIG5hdmlnYXRpb25TZXR0aW5ncylcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRUYWJsZVZpc3VhbGl6YXRpb24oY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IFRhYmxlVmlzdWFsaXphdGlvbiB7XG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RDb25maWcgPSBnZXRUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbih1bmRlZmluZWQsIFwiXCIsIGNvbnZlcnRlckNvbnRleHQsIGZhbHNlKTtcblx0cmV0dXJuIHtcblx0XHR0eXBlOiBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZSxcblx0XHRhbm5vdGF0aW9uOiBnZXRUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uKHVuZGVmaW5lZCwgXCJcIiwgY29udmVydGVyQ29udGV4dCwgdGFibGVNYW5pZmVzdENvbmZpZyksXG5cdFx0Y29udHJvbDogdGFibGVNYW5pZmVzdENvbmZpZyxcblx0XHRhY3Rpb25zOiBbXSxcblx0XHRjb2x1bW5zOiBnZXRDb2x1bW5zRnJvbUVudGl0eVR5cGUoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKS5lbnRpdHlUeXBlLCBbXSwgY29udmVydGVyQ29udGV4dClcblx0fTtcbn1cblxuLyoqXG4gKiBMb29wIHRocm91Z2ggdGhlIGRhdGFmaWVsZCBvZiBhIGxpbmVpdGVtIHRvIGZpbmQgdGhlIGFjdGlvbnMgdGhhdCB3aWxsIGJlIHB1dCBpbiB0aGUgdG9vbGJhclxuICogQW5kIGNoZWNrIGlmIHRoZXkgcmVxdWlyZSBhIGNvbnRleHQgb3Igbm90LlxuICpcbiAqIEBwYXJhbSBsaW5lSXRlbUFubm90YXRpb25cbiAqIEByZXR1cm5zIHtib29sZWFufSBpZiBpdCdzIHRoZSBjYXNlXG4gKi9cbmZ1bmN0aW9uIGhhc0FjdGlvblJlcXVpcmluZ0NvbnRleHQobGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gbGluZUl0ZW1Bbm5vdGF0aW9uLnNvbWUoZGF0YUZpZWxkID0+IHtcblx0XHRpZiAoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24pIHtcblx0XHRcdHJldHVybiBkYXRhRmllbGQuSW5saW5lICE9PSB0cnVlO1xuXHRcdH0gZWxzZSBpZiAoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdHJldHVybiBkYXRhRmllbGQuSW5saW5lICE9PSB0cnVlICYmIGRhdGFGaWVsZC5SZXF1aXJlc0NvbnRleHQ7XG5cdFx0fVxuXHR9KTtcbn1cblxuZnVuY3Rpb24gaGFzQWN0aW9uUmVxdWlyaW5nU2VsZWN0aW9uKG1hbmlmZXN0QWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPik6IGJvb2xlYW4ge1xuXHRsZXQgcmVxdWlyZXNTZWxlY3Rpb25LZXk6IGJvb2xlYW4gPSBmYWxzZTtcblx0aWYgKG1hbmlmZXN0QWN0aW9ucykge1xuXHRcdHJlcXVpcmVzU2VsZWN0aW9uS2V5ID0gT2JqZWN0LmtleXMobWFuaWZlc3RBY3Rpb25zKS5zb21lKGFjdGlvbktleSA9PiB7XG5cdFx0XHRjb25zdCBhY3Rpb24gPSBtYW5pZmVzdEFjdGlvbnNbYWN0aW9uS2V5XTtcblx0XHRcdHJldHVybiBhY3Rpb24ucmVxdWlyZXNTZWxlY3Rpb24gPT09IHRydWU7XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHJlcXVpcmVzU2VsZWN0aW9uS2V5O1xufVxuXG4vKipcbiAqIEV2YWx1YXRlIGlmIHRoZSB2aXN1YWxpemF0aW9uIHBhdGggaXMgZGVsZXRhYmxlIG9yIHVwZGF0YWJsZVxuICogVGhlIGFsZ29yaXRobSBpcyBhcyBmb2xsb3dcbiAqIC0gRXZhbHVhdGUgaWYgdGhlcmUgaXMgYSBOYXZpZ2F0aW9uUmVzdHJpY3Rpb25zLkRlbGV0YWJsZSBvciBOYXZpZ2F0aW9uUmVzdHJpY3Rpb25zLlVwZGF0YWJsZSBvbiB0aGUgZnVsbCBuYXZpZ2F0aW9uUGF0aFxuICogLSBHbyBkb3duIHRoZSBlbnRpdHkgc2V0IG9mIHRoZSBwYXRoIGV2YWx1YXRpbmcgdGhlIHNhbWUgZWxlbWVudCBhbmQgZm9yIHRoZSBsYXN0IHBhcnQgZXZhbHVhdGUgdGhlIERlbGV0ZVJlc3RyaWN0aW9ucy5EZWxldGFibGUgb3IgVXBkYXRlUmVzdHJpY3Rpb25zLlVwZGF0YWJsZSB0aGVyZS5cbiAqXG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGhcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyB7VGFibGVDYXBhYmlsaXR5UmVzdHJpY3Rpb259IHRoZSB0YWJsZSBjYXBhYmlsaXRpZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENhcGFiaWxpdHlSZXN0cmljdGlvbih2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogVGFibGVDYXBhYmlsaXR5UmVzdHJpY3Rpb24ge1xuXHRjb25zdCB7IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggfSA9IHNwbGl0UGF0aCh2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhQYXJ0cyA9IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGguc3BsaXQoXCIvXCIpO1xuXHRjb25zdCBvQ2FwYWJpbGl0eVJlc3RyaWN0aW9uID0geyBpc0RlbGV0YWJsZTogdHJ1ZSwgaXNVcGRhdGFibGU6IHRydWUgfTtcblx0bGV0IGN1cnJlbnRFbnRpdHlTZXQ6IEVudGl0eVNldCB8IG51bGwgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHR3aGlsZSAoXG5cdFx0KG9DYXBhYmlsaXR5UmVzdHJpY3Rpb24uaXNEZWxldGFibGUgfHwgb0NhcGFiaWxpdHlSZXN0cmljdGlvbi5pc1VwZGF0YWJsZSkgJiZcblx0XHRjdXJyZW50RW50aXR5U2V0ICYmXG5cdFx0bmF2aWdhdGlvblByb3BlcnR5UGF0aFBhcnRzLmxlbmd0aCA+IDBcblx0KSB7XG5cdFx0Y29uc3QgcGF0aHNUb0NoZWNrOiBzdHJpbmdbXSA9IFtdO1xuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhQYXJ0cy5yZWR1Y2UoKHBhdGhzLCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoUGFydCkgPT4ge1xuXHRcdFx0aWYgKHBhdGhzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0cGF0aHMgKz0gXCIvXCI7XG5cdFx0XHR9XG5cdFx0XHRwYXRocyArPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoUGFydDtcblx0XHRcdHBhdGhzVG9DaGVjay5wdXNoKHBhdGhzKTtcblx0XHRcdHJldHVybiBwYXRocztcblx0XHR9LCBcIlwiKTtcblx0XHRsZXQgaGFzUmVzdHJpY3RlZFBhdGhPbkRlbGV0ZSA9IGZhbHNlLFxuXHRcdFx0aGFzUmVzdHJpY3RlZFBhdGhPblVwZGF0ZSA9IGZhbHNlO1xuXHRcdGN1cnJlbnRFbnRpdHlTZXQuYW5ub3RhdGlvbnMuQ2FwYWJpbGl0aWVzPy5OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zPy5SZXN0cmljdGVkUHJvcGVydGllcy5mb3JFYWNoKFxuXHRcdFx0KHJlc3RyaWN0ZWROYXZQcm9wOiBOYXZpZ2F0aW9uUHJvcGVydHlSZXN0cmljdGlvblR5cGVzKSA9PiB7XG5cdFx0XHRcdGlmIChyZXN0cmljdGVkTmF2UHJvcD8uTmF2aWdhdGlvblByb3BlcnR5Py50eXBlID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIikge1xuXHRcdFx0XHRcdGlmIChyZXN0cmljdGVkTmF2UHJvcC5EZWxldGVSZXN0cmljdGlvbnM/LkRlbGV0YWJsZSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0XHRcdGhhc1Jlc3RyaWN0ZWRQYXRoT25EZWxldGUgPVxuXHRcdFx0XHRcdFx0XHRoYXNSZXN0cmljdGVkUGF0aE9uRGVsZXRlIHx8IHBhdGhzVG9DaGVjay5pbmRleE9mKHJlc3RyaWN0ZWROYXZQcm9wLk5hdmlnYXRpb25Qcm9wZXJ0eS52YWx1ZSkgIT09IC0xO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAocmVzdHJpY3RlZE5hdlByb3AuVXBkYXRlUmVzdHJpY3Rpb25zPy5VcGRhdGFibGUgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0XHRoYXNSZXN0cmljdGVkUGF0aE9uVXBkYXRlID1cblx0XHRcdFx0XHRcdFx0aGFzUmVzdHJpY3RlZFBhdGhPblVwZGF0ZSB8fCBwYXRoc1RvQ2hlY2suaW5kZXhPZihyZXN0cmljdGVkTmF2UHJvcC5OYXZpZ2F0aW9uUHJvcGVydHkudmFsdWUpICE9PSAtMTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHQpO1xuXHRcdG9DYXBhYmlsaXR5UmVzdHJpY3Rpb24uaXNEZWxldGFibGUgPSAhaGFzUmVzdHJpY3RlZFBhdGhPbkRlbGV0ZTtcblx0XHRvQ2FwYWJpbGl0eVJlc3RyaWN0aW9uLmlzVXBkYXRhYmxlID0gIWhhc1Jlc3RyaWN0ZWRQYXRoT25VcGRhdGU7XG5cdFx0Y29uc3QgbmF2UHJvcE5hbWUgPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoUGFydHMuc2hpZnQoKTtcblx0XHRpZiAobmF2UHJvcE5hbWUpIHtcblx0XHRcdGNvbnN0IG5hdlByb3A6IE5hdmlnYXRpb25Qcm9wZXJ0eSA9IGN1cnJlbnRFbnRpdHlTZXQuZW50aXR5VHlwZS5uYXZpZ2F0aW9uUHJvcGVydGllcy5maW5kKFxuXHRcdFx0XHRuYXZQcm9wID0+IG5hdlByb3AubmFtZSA9PSBuYXZQcm9wTmFtZVxuXHRcdFx0KSBhcyBOYXZpZ2F0aW9uUHJvcGVydHk7XG5cdFx0XHRpZiAobmF2UHJvcCAmJiAhbmF2UHJvcC5jb250YWluc1RhcmdldCAmJiBjdXJyZW50RW50aXR5U2V0Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcuaGFzT3duUHJvcGVydHkobmF2UHJvcE5hbWUpKSB7XG5cdFx0XHRcdGN1cnJlbnRFbnRpdHlTZXQgPSBjdXJyZW50RW50aXR5U2V0Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdbbmF2UHJvcE5hbWVdO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gQ29udGFpbmVkIG5hdlByb3AgbWVhbnMgbm8gZW50aXR5U2V0IHRvIHJlcG9ydCB0b1xuXHRcdFx0XHRjdXJyZW50RW50aXR5U2V0ID0gbnVsbDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0aWYgKGN1cnJlbnRFbnRpdHlTZXQgIT09IG51bGwgJiYgY3VycmVudEVudGl0eVNldC5hbm5vdGF0aW9ucykge1xuXHRcdGlmIChvQ2FwYWJpbGl0eVJlc3RyaWN0aW9uLmlzRGVsZXRhYmxlKSB7XG5cdFx0XHQvLyBJZiB0aGVyZSBpcyBzdGlsbCBhbiBlbnRpdHlzZXQsIGNoZWNrIHRoZSBlbnRpdHlzZXQgZGVsZXRhYmxlIHN0YXR1c1xuXHRcdFx0b0NhcGFiaWxpdHlSZXN0cmljdGlvbi5pc0RlbGV0YWJsZSA9IGN1cnJlbnRFbnRpdHlTZXQuYW5ub3RhdGlvbnMuQ2FwYWJpbGl0aWVzPy5EZWxldGVSZXN0cmljdGlvbnM/LkRlbGV0YWJsZSAhPT0gZmFsc2U7XG5cdFx0fVxuXHRcdGlmIChvQ2FwYWJpbGl0eVJlc3RyaWN0aW9uLmlzVXBkYXRhYmxlKSB7XG5cdFx0XHQvLyBJZiB0aGVyZSBpcyBzdGlsbCBhbiBlbnRpdHlzZXQsIGNoZWNrIHRoZSBlbnRpdHlzZXQgdXBkYXRhYmxlIHN0YXR1c1xuXHRcdFx0b0NhcGFiaWxpdHlSZXN0cmljdGlvbi5pc1VwZGF0YWJsZSA9IGN1cnJlbnRFbnRpdHlTZXQuYW5ub3RhdGlvbnMuQ2FwYWJpbGl0aWVzPy5VcGRhdGVSZXN0cmljdGlvbnM/LlVwZGF0YWJsZSAhPT0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvQ2FwYWJpbGl0eVJlc3RyaWN0aW9uO1xufVxuXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb25Nb2RlKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRpc0VudGl0eVNldDogYm9vbGVhbixcblx0bmF2aWdhdGlvblByb3BlcnR5UGF0aDogc3RyaW5nXG4pOiBzdHJpbmcge1xuXHRpZiAoIWxpbmVJdGVtQW5ub3RhdGlvbikge1xuXHRcdHJldHVybiBTZWxlY3Rpb25Nb2RlLk5vbmU7XG5cdH1cblx0Y29uc3QgdGFibGVNYW5pZmVzdFNldHRpbmdzID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0bGV0IHNlbGVjdGlvbk1vZGUgPSB0YWJsZU1hbmlmZXN0U2V0dGluZ3MudGFibGVTZXR0aW5ncz8uc2VsZWN0aW9uTW9kZTtcblx0Y29uc3QgbWFuaWZlc3RBY3Rpb25zID0gZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdChcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpLmFjdGlvbnMsXG5cdFx0dW5kZWZpbmVkLFxuXHRcdGZhbHNlXG5cdCk7XG5cdGxldCBpc1BhcmVudERlbGV0YWJsZSwgcGFyZW50RW50aXR5U2V0RGVsZXRhYmxlO1xuXHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UpIHtcblx0XHRpc1BhcmVudERlbGV0YWJsZSA9IGlzUGF0aERlbGV0YWJsZShjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSwgbmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdFx0cGFyZW50RW50aXR5U2V0RGVsZXRhYmxlID0gaXNQYXJlbnREZWxldGFibGUgPyBjb21waWxlQmluZGluZyhpc1BhcmVudERlbGV0YWJsZSwgdHJ1ZSkgOiBpc1BhcmVudERlbGV0YWJsZTtcblx0fVxuXHRpZiAoc2VsZWN0aW9uTW9kZSAmJiBzZWxlY3Rpb25Nb2RlID09PSBTZWxlY3Rpb25Nb2RlLk5vbmUpIHtcblx0XHRpZiAoZ2V0Q2FwYWJpbGl0eVJlc3RyaWN0aW9uKHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KS5pc0RlbGV0YWJsZSB8fCBwYXJlbnRFbnRpdHlTZXREZWxldGFibGUgIT09IFwiZmFsc2VcIikge1xuXHRcdFx0cmV0dXJuIFwiez0gJHt1aT4vZWRpdE1vZGV9ID09PSAnRWRpdGFibGUnID8gJ1wiICsgU2VsZWN0aW9uTW9kZS5NdWx0aSArIFwiJyA6ICdOb25lJ31cIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c2VsZWN0aW9uTW9kZSA9IFNlbGVjdGlvbk1vZGUuTm9uZTtcblx0XHR9XG5cdH0gZWxzZSBpZiAoIXNlbGVjdGlvbk1vZGUgfHwgc2VsZWN0aW9uTW9kZSA9PT0gU2VsZWN0aW9uTW9kZS5BdXRvKSB7XG5cdFx0c2VsZWN0aW9uTW9kZSA9IFNlbGVjdGlvbk1vZGUuTXVsdGk7XG5cdH1cblx0aWYgKGhhc0FjdGlvblJlcXVpcmluZ0NvbnRleHQobGluZUl0ZW1Bbm5vdGF0aW9uKSB8fCBoYXNBY3Rpb25SZXF1aXJpbmdTZWxlY3Rpb24obWFuaWZlc3RBY3Rpb25zKSkge1xuXHRcdHJldHVybiBzZWxlY3Rpb25Nb2RlO1xuXHR9IGVsc2UgaWYgKGdldENhcGFiaWxpdHlSZXN0cmljdGlvbih2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCkuaXNEZWxldGFibGUgfHwgcGFyZW50RW50aXR5U2V0RGVsZXRhYmxlICE9PSBcImZhbHNlXCIpIHtcblx0XHRpZiAoIWlzRW50aXR5U2V0KSB7XG5cdFx0XHRyZXR1cm4gXCJ7PSAke3VpPi9lZGl0TW9kZX0gPT09ICdFZGl0YWJsZScgPyAnXCIgKyBzZWxlY3Rpb25Nb2RlICsgXCInIDogJ05vbmUnfVwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gc2VsZWN0aW9uTW9kZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIFNlbGVjdGlvbk1vZGUuTm9uZTtcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gcmV0cmlldmUgYWxsIHRhYmxlIGFjdGlvbnMgZnJvbSBhbm5vdGF0aW9ucy5cbiAqXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uXG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGhcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyB7UmVjb3JkPEJhc2VBY3Rpb24sIEJhc2VBY3Rpb24+fSB0aGUgdGFibGUgYW5ub3RhdGlvbiBhY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlQW5ub3RhdGlvbkFjdGlvbnMoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IEJhc2VBY3Rpb25bXSB7XG5cdGNvbnN0IHRhYmxlQWN0aW9uczogQmFzZUFjdGlvbltdID0gW107XG5cdGlmIChsaW5lSXRlbUFubm90YXRpb24pIHtcblx0XHRjb25zdCBhYnNvbHV0ZVBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgodmlzdWFsaXphdGlvblBhdGgpO1xuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbi5mb3JFYWNoKChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsIGluZGV4KSA9PiB7XG5cdFx0XHRsZXQgdGFibGVBY3Rpb246IEFubm90YXRpb25BY3Rpb24gfCB1bmRlZmluZWQ7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QoZGF0YUZpZWxkKSAmJlxuXHRcdFx0XHQhKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiA9PT0gdHJ1ZSkgJiZcblx0XHRcdFx0IWRhdGFGaWVsZC5JbmxpbmUgJiZcblx0XHRcdFx0IWRhdGFGaWVsZC5EZXRlcm1pbmluZ1xuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbnN0IGFubm90YXRpb25QYXRoID0gYWJzb2x1dGVQYXRoICsgXCIvXCIgKyBpbmRleDtcblx0XHRcdFx0Y29uc3Qga2V5ID0gS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpO1xuXHRcdFx0XHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSkge1xuXHRcdFx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIjpcblx0XHRcdFx0XHRcdHRhYmxlQWN0aW9uID0ge1xuXHRcdFx0XHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckFjdGlvbixcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGFubm90YXRpb25QYXRoLFxuXHRcdFx0XHRcdFx0XHRrZXk6IGtleSxcblx0XHRcdFx0XHRcdFx0aXNOYXZpZ2FibGU6IHRydWVcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjpcblx0XHRcdFx0XHRcdHRhYmxlQWN0aW9uID0ge1xuXHRcdFx0XHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGFubm90YXRpb25QYXRoLFxuXHRcdFx0XHRcdFx0XHRrZXk6IGtleVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKHRhYmxlQWN0aW9uKSB7XG5cdFx0XHRcdHRhYmxlQWN0aW9ucy5wdXNoKHRhYmxlQWN0aW9uKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gdGFibGVBY3Rpb25zO1xufVxuXG5mdW5jdGlvbiBnZXRDcml0aWNhbGl0eUJpbmRpbmdCeUVudW0oQ3JpdGljYWxpdHlFbnVtOiBFbnVtVmFsdWU8Q3JpdGljYWxpdHlUeXBlPikge1xuXHRsZXQgY3JpdGljYWxpdHlQcm9wZXJ0eTtcblx0c3dpdGNoIChDcml0aWNhbGl0eUVudW0pIHtcblx0XHRjYXNlIFwiVUkuQ3JpdGljYWxpdHlUeXBlL05lZ2F0aXZlXCI6XG5cdFx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuRXJyb3I7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiVUkuQ3JpdGljYWxpdHlUeXBlL0NyaXRpY2FsXCI6XG5cdFx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuV2FybmluZztcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJVSS5Dcml0aWNhbGl0eVR5cGUvUG9zaXRpdmVcIjpcblx0XHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5TdWNjZXNzO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIlVJLkNyaXRpY2FsaXR5VHlwZS9OZXV0cmFsXCI6XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5Ob25lO1xuXHR9XG5cdHJldHVybiBjcml0aWNhbGl0eVByb3BlcnR5O1xufVxuXG5mdW5jdGlvbiBnZXRIaWdobGlnaHRSb3dCaW5kaW5nKFxuXHRjcml0aWNhbGl0eUFubm90YXRpb246IFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxDcml0aWNhbGl0eVR5cGU+IHwgRW51bVZhbHVlPENyaXRpY2FsaXR5VHlwZT4gfCB1bmRlZmluZWQsXG5cdGlzRHJhZnRSb290OiBib29sZWFuXG4pOiBFeHByZXNzaW9uPE1lc3NhZ2VUeXBlPiB7XG5cdGxldCBkZWZhdWx0SGlnaGxpZ2h0Um93RGVmaW5pdGlvbjogTWVzc2FnZVR5cGUgfCBFeHByZXNzaW9uPE1lc3NhZ2VUeXBlPiA9IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdGlmIChjcml0aWNhbGl0eUFubm90YXRpb24pIHtcblx0XHRpZiAodHlwZW9mIGNyaXRpY2FsaXR5QW5ub3RhdGlvbiA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0ZGVmYXVsdEhpZ2hsaWdodFJvd0RlZmluaXRpb24gPSBhbm5vdGF0aW9uRXhwcmVzc2lvbihjcml0aWNhbGl0eUFubm90YXRpb24pIGFzIEV4cHJlc3Npb248TWVzc2FnZVR5cGU+O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBFbnVtIFZhbHVlIHNvIHdlIGdldCB0aGUgY29ycmVzcG9uZGluZyBzdGF0aWMgcGFydFxuXHRcdFx0ZGVmYXVsdEhpZ2hsaWdodFJvd0RlZmluaXRpb24gPSBnZXRDcml0aWNhbGl0eUJpbmRpbmdCeUVudW0oY3JpdGljYWxpdHlBbm5vdGF0aW9uKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGlmRWxzZShcblx0XHRpc0RyYWZ0Um9vdCAmJiBEcmFmdC5Jc05ld09iamVjdCxcblx0XHRNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbiBhcyBNZXNzYWdlVHlwZSxcblx0XHRmb3JtYXRSZXN1bHQoW2RlZmF1bHRIaWdobGlnaHRSb3dEZWZpbml0aW9uXSwgdGFibGVGb3JtYXR0ZXJzLnJvd0hpZ2hsaWdodGluZylcblx0KTtcbn1cblxuZnVuY3Rpb24gX2dldENyZWF0aW9uQmVoYXZpb3VyKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLFxuXHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0bmF2aWdhdGlvblNldHRpbmdzOiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uXG4pOiBUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uW1wiY3JlYXRlXCJdIHtcblx0Y29uc3QgbmF2aWdhdGlvbiA9IG5hdmlnYXRpb25TZXR0aW5ncz8uY3JlYXRlIHx8IG5hdmlnYXRpb25TZXR0aW5ncz8uZGV0YWlsO1xuXG5cdC8vIGNyb3NzLWFwcFxuXHRpZiAobmF2aWdhdGlvbj8ub3V0Ym91bmQgJiYgbmF2aWdhdGlvbi5vdXRib3VuZERldGFpbCAmJiBuYXZpZ2F0aW9uU2V0dGluZ3M/LmNyZWF0ZSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRtb2RlOiBcIkV4dGVybmFsXCIsXG5cdFx0XHRvdXRib3VuZDogbmF2aWdhdGlvbi5vdXRib3VuZCxcblx0XHRcdG91dGJvdW5kRGV0YWlsOiBuYXZpZ2F0aW9uLm91dGJvdW5kRGV0YWlsLFxuXHRcdFx0bmF2aWdhdGlvblNldHRpbmdzOiBuYXZpZ2F0aW9uU2V0dGluZ3Ncblx0XHR9O1xuXHR9XG5cblx0bGV0IG5ld0FjdGlvbjtcblx0aWYgKGxpbmVJdGVtQW5ub3RhdGlvbikge1xuXHRcdC8vIGluLWFwcFxuXHRcdGNvbnN0IHRhcmdldEVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKGxpbmVJdGVtQW5ub3RhdGlvbik7XG5cdFx0Y29uc3QgdGFyZ2V0QW5ub3RhdGlvbnMgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEZvckVudGl0eVR5cGUodGFyZ2V0RW50aXR5VHlwZSk/LmFubm90YXRpb25zO1xuXHRcdG5ld0FjdGlvbiA9IHRhcmdldEFubm90YXRpb25zPy5Db21tb24/LkRyYWZ0Um9vdD8uTmV3QWN0aW9uIHx8IHRhcmdldEFubm90YXRpb25zPy5TZXNzaW9uPy5TdGlja3lTZXNzaW9uU3VwcG9ydGVkPy5OZXdBY3Rpb247IC8vIFRPRE86IElzIHRoZXJlIHJlYWxseSBubyAnTmV3QWN0aW9uJyBvbiBEcmFmdE5vZGU/IHRhcmdldEFubm90YXRpb25zPy5Db21tb24/LkRyYWZ0Tm9kZT8uTmV3QWN0aW9uXG5cblx0XHRpZiAodGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuQ3JlYXRpb25Sb3cgJiYgbmV3QWN0aW9uKSB7XG5cdFx0XHQvLyBBIGNvbWJpbmF0aW9uIG9mICdDcmVhdGlvblJvdycgYW5kICdOZXdBY3Rpb24nIGRvZXMgbm90IG1ha2Ugc2Vuc2Vcblx0XHRcdC8vIFRPRE86IE9yIGRvZXMgaXQ/XG5cdFx0XHR0aHJvdyBFcnJvcihgQ3JlYXRpb24gbW9kZSAnJHtDcmVhdGlvbk1vZGUuQ3JlYXRpb25Sb3d9JyBjYW4gbm90IGJlIHVzZWQgd2l0aCBhIGN1c3RvbSAnbmV3JyBhY3Rpb24gKCR7bmV3QWN0aW9ufSlgKTtcblx0XHR9XG5cdFx0aWYgKG5hdmlnYXRpb24/LnJvdXRlKSB7XG5cdFx0XHQvLyByb3V0ZSBzcGVjaWZpZWRcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdG1vZGU6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSxcblx0XHRcdFx0YXBwZW5kOiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGVBdEVuZCxcblx0XHRcdFx0bmV3QWN0aW9uOiBuZXdBY3Rpb24sXG5cdFx0XHRcdG5hdmlnYXRlVG9UYXJnZXQ6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLk5ld1BhZ2UgPyBuYXZpZ2F0aW9uLnJvdXRlIDogdW5kZWZpbmVkIC8vIG5hdmlnYXRlIG9ubHkgaW4gTmV3UGFnZSBtb2RlXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXG5cdC8vIG5vIG5hdmlnYXRpb24gb3Igbm8gcm91dGUgc3BlY2lmaWVkIC0gZmFsbGJhY2sgdG8gaW5saW5lIGNyZWF0ZSBpZiBvcmlnaW5hbCBjcmVhdGlvbiBtb2RlIHdhcyAnTmV3UGFnZSdcblx0aWYgKHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLk5ld1BhZ2UpIHtcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPSBDcmVhdGlvbk1vZGUuSW5saW5lO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRtb2RlOiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUsXG5cdFx0YXBwZW5kOiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGVBdEVuZCxcblx0XHRuZXdBY3Rpb246IG5ld0FjdGlvblxuXHR9O1xufVxuXG5jb25zdCBfZ2V0Um93Q29uZmlndXJhdGlvblByb3BlcnR5ID0gZnVuY3Rpb24oXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdG5hdmlnYXRpb25TZXR0aW5nczogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0dGFyZ2V0UGF0aDogc3RyaW5nXG4pIHtcblx0bGV0IHByZXNzUHJvcGVydHksIG5hdmlnYXRpb25UYXJnZXQ7XG5cdGxldCBjcml0aWNhbGl0eVByb3BlcnR5OiBFeHByZXNzaW9uT3JQcmltaXRpdmU8TWVzc2FnZVR5cGU+ID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0Y29uc3QgdGFyZ2V0RW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUobGluZUl0ZW1Bbm5vdGF0aW9uKTtcblx0aWYgKG5hdmlnYXRpb25TZXR0aW5ncyAmJiBsaW5lSXRlbUFubm90YXRpb24pIHtcblx0XHRuYXZpZ2F0aW9uVGFyZ2V0ID0gbmF2aWdhdGlvblNldHRpbmdzLmRpc3BsYXk/LnRhcmdldCB8fCBuYXZpZ2F0aW9uU2V0dGluZ3MuZGV0YWlsPy5vdXRib3VuZDtcblx0XHRpZiAobmF2aWdhdGlvblRhcmdldCkge1xuXHRcdFx0cHJlc3NQcm9wZXJ0eSA9XG5cdFx0XHRcdFwiLmhhbmRsZXJzLm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZCggJGNvbnRyb2xsZXIgLCdcIiArIG5hdmlnYXRpb25UYXJnZXQgKyBcIicsICR7JHBhcmFtZXRlcnM+YmluZGluZ0NvbnRleHR9KVwiO1xuXHRcdH0gZWxzZSBpZiAoKG5hdmlnYXRpb25UYXJnZXQgPSBuYXZpZ2F0aW9uU2V0dGluZ3MuZGV0YWlsPy5yb3V0ZSkpIHtcblx0XHRcdGlmICh0YXJnZXRFbnRpdHlUeXBlKSB7XG5cdFx0XHRcdGNvbnN0IHRhcmdldEVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0Rm9yRW50aXR5VHlwZSh0YXJnZXRFbnRpdHlUeXBlKTtcblx0XHRcdFx0aWYgKHRhcmdldEVudGl0eVNldCkge1xuXHRcdFx0XHRcdGNvbnN0IHRhcmdldEFubm90YXRpb25zID0gdGFyZ2V0RW50aXR5U2V0LmFubm90YXRpb25zO1xuXHRcdFx0XHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBnZXRIaWdobGlnaHRSb3dCaW5kaW5nKFxuXHRcdFx0XHRcdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLmFubm90YXRpb25zPy5VST8uQ3JpdGljYWxpdHksXG5cdFx0XHRcdFx0XHQhIXRhcmdldEFubm90YXRpb25zLkNvbW1vbj8uRHJhZnRSb290IHx8ICEhdGFyZ2V0QW5ub3RhdGlvbnMuQ29tbW9uPy5EcmFmdE5vZGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHByZXNzUHJvcGVydHkgPVxuXHRcdFx0XHRcdFx0XCIucm91dGluZ0xpc3RlbmVyLm5hdmlnYXRlRm9yd2FyZFRvQ29udGV4dCgkeyRwYXJhbWV0ZXJzPmJpbmRpbmdDb250ZXh0fSwgeyB0YXJnZXRQYXRoOiAnXCIgK1xuXHRcdFx0XHRcdFx0dGFyZ2V0UGF0aCArXG5cdFx0XHRcdFx0XHRcIicsIGVkaXRhYmxlIDogXCIgK1xuXHRcdFx0XHRcdFx0KHRhcmdldEFubm90YXRpb25zPy5Db21tb24/LkRyYWZ0Um9vdCB8fCB0YXJnZXRBbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdE5vZGVcblx0XHRcdFx0XHRcdFx0PyBcIiEkeyRwYXJhbWV0ZXJzPmJpbmRpbmdDb250ZXh0fS5nZXRQcm9wZXJ0eSgnSXNBY3RpdmVFbnRpdHknKVwiXG5cdFx0XHRcdFx0XHRcdDogXCJ1bmRlZmluZWRcIikgK1xuXHRcdFx0XHRcdFx0XCJ9KVwiOyAvL05lZWQgdG8gYWNjZXNzIHRvIERyYWZ0Um9vdCBhbmQgRHJhZnROb2RlICEhISEhISFcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRjb25zdCByb3dOYXZpZ2F0ZWRFeHByZXNzaW9uOiBFeHByZXNzaW9uPGJvb2xlYW4+ID0gaWZFbHNlKFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaXNGY2xFbmFibGVkKCksXG5cdFx0Zm9ybWF0UmVzdWx0KFtiaW5kaW5nRXhwcmVzc2lvbihcIi9kZWVwZXN0UGF0aFwiLCBcImZjbG5hdmlnYXRlZFwiKV0sIHRhYmxlRm9ybWF0dGVycy5mY2xOYXZpZ2F0ZWRSb3csIHRhcmdldEVudGl0eVR5cGUpLFxuXHRcdGZhbHNlXG5cdCk7XG5cdHJldHVybiB7XG5cdFx0cHJlc3M6IHByZXNzUHJvcGVydHksXG5cdFx0YWN0aW9uOiBwcmVzc1Byb3BlcnR5ID8gXCJOYXZpZ2F0aW9uXCIgOiB1bmRlZmluZWQsXG5cdFx0cm93SGlnaGxpZ2h0aW5nOiBjb21waWxlQmluZGluZyhjcml0aWNhbGl0eVByb3BlcnR5KSxcblx0XHRyb3dOYXZpZ2F0ZWQ6IGNvbXBpbGVCaW5kaW5nKHJvd05hdmlnYXRlZEV4cHJlc3Npb24pXG5cdH07XG59O1xuXG4vKipcbiAqIFJldHJpZXZlIHRoZSBjb2x1bW5zIGZyb20gdGhlIGVudGl0eVR5cGUuXG4gKlxuICogQHBhcmFtIGVudGl0eVR5cGVcbiAqIEBwYXJhbSBhbm5vdGF0aW9uQ29sdW1uc1xuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIHtUYWJsZUNvbHVtbltdfSB0aGUgY29sdW1uIGZyb20gdGhlIGVudGl0eVR5cGVcbiAqL1xuY29uc3QgZ2V0Q29sdW1uc0Zyb21FbnRpdHlUeXBlID0gZnVuY3Rpb24oXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGFubm90YXRpb25Db2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSA9IFtdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBUYWJsZUNvbHVtbltdIHtcblx0Y29uc3QgdGFibGVDb2x1bW5zOiBUYWJsZUNvbHVtbltdID0gW107XG5cdGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5mb3JFYWNoKChwcm9wZXJ0eTogUHJvcGVydHkpID0+IHtcblx0XHQvLyBDYXRjaCBhbHJlYWR5IGV4aXN0aW5nIGNvbHVtbnMgLSB3aGljaCB3ZXJlIGFkZGVkIGJlZm9yZSBieSBMaW5lSXRlbSBBbm5vdGF0aW9uc1xuXHRcdGNvbnN0IGV4aXN0cyA9IGFubm90YXRpb25Db2x1bW5zLnNvbWUoY29sdW1uID0+IHtcblx0XHRcdHJldHVybiBjb2x1bW4ubmFtZSA9PT0gcHJvcGVydHkubmFtZTtcblx0XHR9KTtcblxuXHRcdGlmICghZXhpc3RzKSB7XG5cdFx0XHRjb25zdCBlbnRpdHlOYW1lID0gKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0Rm9yRW50aXR5VHlwZShlbnRpdHlUeXBlKSB8fCBlbnRpdHlUeXBlKS5uYW1lO1xuXHRcdFx0dGFibGVDb2x1bW5zLnB1c2goe1xuXHRcdFx0XHRrZXk6IFwiRGF0YUZpZWxkOjpcIiArIHByb3BlcnR5Lm5hbWUsXG5cdFx0XHRcdHR5cGU6IENvbHVtblR5cGUuQW5ub3RhdGlvbixcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IFwiL1wiICsgZW50aXR5TmFtZSArIFwiL1wiICsgcHJvcGVydHkubmFtZSxcblx0XHRcdFx0cGVyc29uYWxpemF0aW9uT25seTogdHJ1ZSxcblx0XHRcdFx0bmFtZTogcHJvcGVydHkubmFtZSxcblx0XHRcdFx0dmlzaWJsZTogY29tcGlsZUJpbmRpbmcobm90KGVxdWFsKGFubm90YXRpb25FeHByZXNzaW9uKHByb3BlcnR5LmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpKSxcblx0XHRcdFx0dGVtcGxhdGU6IFwic2FwLmZlLm1hY3Jvcy50YWJsZS5Db2x1bW5Qcm9wZXJ0eVwiXG5cdFx0XHR9IGFzIEFubm90YXRpb25UYWJsZUNvbHVtbik7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHRhYmxlQ29sdW1ucztcbn07XG5cbi8qKlxuICogUmV0dXJucyBib29sZWFuIHRydWUgZm9yIHZhbGlkIGNvbHVtbnMsIGZhbHNlIGZvciBpbnZhbGlkIGNvbHVtbnMuXG4gKlxuICogQHBhcmFtIHtEYXRhRmllbGRBYnN0cmFjdFR5cGVzfSBkYXRhRmllbGQgRGlmZmVyZW50IERhdGFGaWVsZCB0eXBlcyBkZWZpbmVkIGluIHRoZSBhbm5vdGF0aW9uc1xuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgZm9yIHZhbGlkIGNvbHVtbnMsIGZhbHNlIGZvciBpbnZhbGlkIGNvbHVtbnNcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IF9pc1ZhbGlkQ29sdW1uID0gZnVuY3Rpb24oZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSB7XG5cdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFjdGlvblwiOlxuXHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjpcblx0XHRcdHJldHVybiAhIWRhdGFGaWVsZC5JbmxpbmU7XG5cdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhBY3Rpb25cIjpcblx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvblwiOlxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRcIjpcblx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aFVybFwiOlxuXHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBbm5vdGF0aW9uXCI6XG5cdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aFwiOlxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0ZGVmYXVsdDpcblx0XHQvLyBUb2RvOiBSZXBsYWNlIHdpdGggcHJvcGVyIExvZyBzdGF0ZW1lbnQgb25jZSBhdmFpbGFibGVcblx0XHQvLyAgdGhyb3cgbmV3IEVycm9yKFwiVW5oYW5kbGVkIERhdGFGaWVsZCBBYnN0cmFjdCB0eXBlOiBcIiArIGRhdGFGaWVsZC4kVHlwZSk7XG5cdH1cbn07XG5cbi8qKlxuICogR2V0dGluZyB0aGUgQ29sdW1uIE5hbWVcbiAqIElmIGl0IHBvaW50cyB0byBhIERhdGFGaWVsZCB3aXRoIG9uZSBwcm9wZXJ0eSBvciBEYXRhUG9pbnQgd2l0aCBvbmUgcHJvcGVydHkgaXQgd2lsbCB1c2UgdGhlIHByb3BlcnR5IG5hbWVcbiAqIGhlcmUgdG8gYmUgY29uc2lzdGVudCB3aXRoIHRoZSBleGlzdGluZyBmbGV4IGNoYW5nZXMuXG4gKlxuICogQHBhcmFtIHtEYXRhRmllbGRBYnN0cmFjdFR5cGVzfSBkYXRhRmllbGQgRGlmZmVyZW50IERhdGFGaWVsZCB0eXBlcyBkZWZpbmVkIGluIHRoZSBhbm5vdGF0aW9uc1xuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyBuYW1lIG9mIGFubm90YXRpb24gY29sdW1uc1xuICogQHByaXZhdGVcbiAqL1xuY29uc3QgX2dldEFubm90YXRpb25Db2x1bW5OYW1lID0gZnVuY3Rpb24oZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSB7XG5cdC8vIFRoaXMgaXMgbmVlZGVkIGFzIHdlIGhhdmUgZmxleGliaWxpdHkgY2hhbmdlcyBhbHJlYWR5IHRoYXQgd2UgaGF2ZSB0byBjaGVjayBhZ2FpbnN0XG5cdGlmIChpc0RhdGFGaWVsZFR5cGVzKGRhdGFGaWVsZCkpIHtcblx0XHRyZXR1cm4gZGF0YUZpZWxkLlZhbHVlPy5wYXRoO1xuXHR9IGVsc2UgaWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiAmJiBkYXRhRmllbGQuVGFyZ2V0Py4kdGFyZ2V0Py5WYWx1ZT8ucGF0aCkge1xuXHRcdC8vIFRoaXMgaXMgZm9yIHJlbW92aW5nIGR1cGxpY2F0ZSBwcm9wZXJ0aWVzLiBGb3IgZXhhbXBsZSB0aGUgUHJvZ3Jlc3MgUHJvcGVydHkgaWYgcmVtb3ZlZCBpZiBpdCBhbHJlYWR5IGlzIGRlZmluZWQgYXMgYSBEYXRhUG9pbnRcblx0XHRyZXR1cm4gZGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0LlZhbHVlLnBhdGg7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKTtcblx0fVxufTtcblxuLyoqXG4gKiBSZXR1cm5zIGxpbmUgaXRlbXMgZnJvbSBtZXRhZGF0YSBhbm5vdGF0aW9ucy5cbiAqXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uXG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGhcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyB7VGFibGVDb2x1bW5bXX0gdGhlIGNvbHVtbnMgZnJvbSB0aGUgYW5ub3RhdGlvbnNcbiAqL1xuY29uc3QgZ2V0Q29sdW1uc0Zyb21Bbm5vdGF0aW9ucyA9IGZ1bmN0aW9uKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBUYWJsZUNvbHVtbltdIHtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUobGluZUl0ZW1Bbm5vdGF0aW9uKTtcblx0Y29uc3QgYW5ub3RhdGlvbkNvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdID0gW107XG5cdGlmIChsaW5lSXRlbUFubm90YXRpb24pIHtcblx0XHQvLyBHZXQgY29sdW1ucyBmcm9tIHRoZSBMaW5lSXRlbSBBbm5vdGF0aW9uXG5cblx0XHRsaW5lSXRlbUFubm90YXRpb24uZm9yRWFjaCgobGluZUl0ZW0sIGxpbmVJdGVtSW5kZXgpID0+IHtcblx0XHRcdGlmICghX2lzVmFsaWRDb2x1bW4obGluZUl0ZW0pKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgYW5ub3RhdGlvblJlZmVyZW5jZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aCh2aXN1YWxpemF0aW9uUGF0aCkgKyBcIi9cIiArIGxpbmVJdGVtSW5kZXg7XG5cdFx0XHRhbm5vdGF0aW9uQ29sdW1ucy5wdXNoKHtcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGFubm90YXRpb25SZWZlcmVuY2UsXG5cdFx0XHRcdHR5cGU6IENvbHVtblR5cGUuQW5ub3RhdGlvbixcblx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGxpbmVJdGVtKSxcblx0XHRcdFx0d2lkdGg6IGxpbmVJdGVtLmFubm90YXRpb25zPy5IVE1MNT8uQ3NzRGVmYXVsdHM/LndpZHRoIHx8IHVuZGVmaW5lZCxcblx0XHRcdFx0cGVyc29uYWxpemF0aW9uT25seTogZmFsc2UsXG5cdFx0XHRcdG5hbWU6IF9nZXRBbm5vdGF0aW9uQ29sdW1uTmFtZShsaW5lSXRlbSksXG5cdFx0XHRcdHZpc2libGU6IGNvbXBpbGVCaW5kaW5nKG5vdChlcXVhbChhbm5vdGF0aW9uRXhwcmVzc2lvbihsaW5lSXRlbS5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiksIHRydWUpKSksXG5cdFx0XHRcdGlzTmF2aWdhYmxlOiB0cnVlXG5cdFx0XHR9IGFzIEFubm90YXRpb25UYWJsZUNvbHVtbik7XG5cdFx0fSk7XG5cdH1cblxuXHQvLyBHZXQgY29sdW1ucyBmcm9tIHRoZSBQcm9wZXJ0aWVzIG9mIEVudGl0eVR5cGVcblx0bGV0IHRhYmxlQ29sdW1ucyA9IGdldENvbHVtbnNGcm9tRW50aXR5VHlwZShlbnRpdHlUeXBlLCBhbm5vdGF0aW9uQ29sdW1ucywgY29udmVydGVyQ29udGV4dCk7XG5cdHRhYmxlQ29sdW1ucyA9IHRhYmxlQ29sdW1ucy5jb25jYXQoYW5ub3RhdGlvbkNvbHVtbnMpO1xuXG5cdHJldHVybiB0YWJsZUNvbHVtbnM7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGFibGUgY29sdW1uIGRlZmluaXRpb25zIGZyb20gbWFuaWZlc3QuXG4gKlxuICogQHBhcmFtIGNvbHVtbnNcbiAqIEBwYXJhbSBuYXZpZ2F0aW9uU2V0dGluZ3NcbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBDdXN0b21Db2x1bW4+fSB0aGUgY29sdW1ucyBmcm9tIHRoZSBtYW5pZmVzdFxuICovXG5jb25zdCBnZXRDb2x1bW5zRnJvbU1hbmlmZXN0ID0gZnVuY3Rpb24oXG5cdGNvbHVtbnM6IFJlY29yZDxzdHJpbmcsIE1hbmlmZXN0VGFibGVDb2x1bW4+LFxuXHRuYXZpZ2F0aW9uU2V0dGluZ3M/OiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uXG4pOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21Db2x1bW4+IHtcblx0Y29uc3QgaW50ZXJuYWxDb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21Db2x1bW4+ID0ge307XG5cdGZvciAoY29uc3Qga2V5IGluIGNvbHVtbnMpIHtcblx0XHRjb25zdCBtYW5pZmVzdENvbHVtbiA9IGNvbHVtbnNba2V5XTtcblx0XHRLZXlIZWxwZXIuaXNLZXlWYWxpZChrZXkpO1xuXHRcdGludGVybmFsQ29sdW1uc1trZXldID0ge1xuXHRcdFx0a2V5OiBrZXksXG5cdFx0XHRpZDogXCJDdXN0b21Db2x1bW46OlwiICsga2V5LFxuXHRcdFx0bmFtZTogXCJDdXN0b21Db2x1bW46OlwiICsga2V5LFxuXHRcdFx0aGVhZGVyOiBtYW5pZmVzdENvbHVtbi5oZWFkZXIsXG5cdFx0XHR3aWR0aDogbWFuaWZlc3RDb2x1bW4ud2lkdGggfHwgdW5kZWZpbmVkLFxuXHRcdFx0dHlwZTogQ29sdW1uVHlwZS5EZWZhdWx0LFxuXHRcdFx0cGVyc29uYWxpemF0aW9uT25seTogZmFsc2UsXG5cdFx0XHR0ZW1wbGF0ZTogbWFuaWZlc3RDb2x1bW4udGVtcGxhdGUgfHwgXCJ1bmRlZmluZWRcIixcblx0XHRcdHZpc2libGU6IHRydWUsXG5cdFx0XHRwb3NpdGlvbjoge1xuXHRcdFx0XHRhbmNob3I6IG1hbmlmZXN0Q29sdW1uLnBvc2l0aW9uPy5hbmNob3IsXG5cdFx0XHRcdHBsYWNlbWVudDogbWFuaWZlc3RDb2x1bW4ucG9zaXRpb24gPT09IHVuZGVmaW5lZCA/IFBsYWNlbWVudC5BZnRlciA6IG1hbmlmZXN0Q29sdW1uLnBvc2l0aW9uLnBsYWNlbWVudFxuXHRcdFx0fSxcblx0XHRcdGlzTmF2aWdhYmxlOiBpc0FjdGlvbk5hdmlnYWJsZShtYW5pZmVzdENvbHVtbiwgbmF2aWdhdGlvblNldHRpbmdzLCB0cnVlKVxuXHRcdH07XG5cdH1cblx0cmV0dXJuIGludGVybmFsQ29sdW1ucztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQMTNuTW9kZSh2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyOiBNYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCB0YWJsZU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSA9IG1hbmlmZXN0V3JhcHBlci5nZXRWYXJpYW50TWFuYWdlbWVudCgpO1xuXHRjb25zdCBoYXNWYXJpYW50TWFuYWdlbWVudDogYm9vbGVhbiA9IFtcIlBhZ2VcIiwgXCJDb250cm9sXCJdLmluZGV4T2YodmFyaWFudE1hbmFnZW1lbnQpID4gLTE7XG5cdGNvbnN0IGFQZXJzb25hbGl6YXRpb246IHN0cmluZ1tdID0gW107XG5cdGlmIChoYXNWYXJpYW50TWFuYWdlbWVudCkge1xuXHRcdGlmICh0YWJsZU1hbmlmZXN0U2V0dGluZ3M/LnRhYmxlU2V0dGluZ3M/LnBlcnNvbmFsaXphdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBQZXJzb25hbGl6YXRpb24gY29uZmlndXJlZCBpbiBtYW5pZmVzdC5cblx0XHRcdGNvbnN0IHBlcnNvbmFsaXphdGlvbjogYW55ID0gdGFibGVNYW5pZmVzdFNldHRpbmdzLnRhYmxlU2V0dGluZ3MucGVyc29uYWxpemF0aW9uO1xuXHRcdFx0aWYgKHBlcnNvbmFsaXphdGlvbiA9PT0gdHJ1ZSkge1xuXHRcdFx0XHQvLyBUYWJsZSBwZXJzb25hbGl6YXRpb24gZnVsbHkgZW5hYmxlZC5cblx0XHRcdFx0cmV0dXJuIFwiU29ydCxDb2x1bW4sRmlsdGVyXCI7XG5cdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiBwZXJzb25hbGl6YXRpb24gPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0Ly8gU3BlY2lmaWMgcGVyc29uYWxpemF0aW9uIG9wdGlvbnMgZW5hYmxlZCBpbiBtYW5pZmVzdC4gVXNlIHRoZW0gYXMgaXMuXG5cdFx0XHRcdGlmIChwZXJzb25hbGl6YXRpb24uc29ydCkge1xuXHRcdFx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIlNvcnRcIik7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5jb2x1bW4pIHtcblx0XHRcdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJDb2x1bW5cIik7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5maWx0ZXIpIHtcblx0XHRcdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJGaWx0ZXJcIik7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGFQZXJzb25hbGl6YXRpb24uam9pbihcIixcIik7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIE5vIHBlcnNvbmFsaXphdGlvbiBjb25maWd1cmVkIGluIG1hbmlmZXN0LlxuXHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiU29ydFwiKTtcblx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkNvbHVtblwiKTtcblx0XHRcdGlmICh2YXJpYW50TWFuYWdlbWVudCA9PT0gVmFyaWFudE1hbmFnZW1lbnRUeXBlLkNvbnRyb2wpIHtcblx0XHRcdFx0Ly8gRmVhdHVyZSBwYXJpdHkgd2l0aCBWMi5cblx0XHRcdFx0Ly8gRW5hYmxlIHRhYmxlIGZpbHRlcmluZyBieSBkZWZhdWx0IG9ubHkgaW4gY2FzZSBvZiBDb250cm9sIGxldmVsIHZhcmlhbnQgbWFuYWdlbWVudC5cblx0XHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiRmlsdGVyXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGFQZXJzb25hbGl6YXRpb24uam9pbihcIixcIik7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldERlbGV0ZUhpZGRlbihjdXJyZW50RW50aXR5U2V0OiBFbnRpdHlTZXQsIG5hdmlnYXRpb25QYXRoOiBzdHJpbmcpIHtcblx0bGV0IGlzRGVsZXRlSGlkZGVuOiBhbnkgPSBmYWxzZTtcblx0aWYgKG5hdmlnYXRpb25QYXRoKSB7XG5cdFx0Ly8gQ2hlY2sgaWYgVUkuRGVsZXRlSGlkZGVuIGlzIHBvaW50aW5nIHRvIHBhcmVudCBwYXRoXG5cdFx0Y29uc3QgZGVsZXRlSGlkZGVuQW5ub3RhdGlvbiA9IGN1cnJlbnRFbnRpdHlTZXQubmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1tuYXZpZ2F0aW9uUGF0aF0/LmFubm90YXRpb25zPy5VST8uRGVsZXRlSGlkZGVuO1xuXHRcdGlmIChkZWxldGVIaWRkZW5Bbm5vdGF0aW9uICYmIChkZWxldGVIaWRkZW5Bbm5vdGF0aW9uIGFzIGFueSkucGF0aCkge1xuXHRcdFx0aWYgKChkZWxldGVIaWRkZW5Bbm5vdGF0aW9uIGFzIGFueSkucGF0aC5pbmRleE9mKFwiL1wiKSA+IDApIHtcblx0XHRcdFx0Y29uc3QgYVNwbGl0SGlkZGVuUGF0aCA9IChkZWxldGVIaWRkZW5Bbm5vdGF0aW9uIGFzIGFueSkucGF0aC5zcGxpdChcIi9cIik7XG5cdFx0XHRcdGNvbnN0IHNOYXZpZ2F0aW9uUGF0aCA9IGFTcGxpdEhpZGRlblBhdGhbMF07XG5cdFx0XHRcdGNvbnN0IHBhcnRuZXJOYW1lID0gKGN1cnJlbnRFbnRpdHlTZXQgYXMgYW55KS5lbnRpdHlUeXBlLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmZpbmQoXG5cdFx0XHRcdFx0KG5hdlByb3BlcnR5OiBhbnkpID0+IG5hdlByb3BlcnR5Lm5hbWUgPT09IG5hdmlnYXRpb25QYXRoXG5cdFx0XHRcdCkucGFydG5lcjtcblx0XHRcdFx0aWYgKHBhcnRuZXJOYW1lID09PSBzTmF2aWdhdGlvblBhdGgpIHtcblx0XHRcdFx0XHRpc0RlbGV0ZUhpZGRlbiA9IGRlbGV0ZUhpZGRlbkFubm90YXRpb247XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlzRGVsZXRlSGlkZGVuID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlzRGVsZXRlSGlkZGVuID0gZGVsZXRlSGlkZGVuQW5ub3RhdGlvbjtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0aXNEZWxldGVIaWRkZW4gPSBjdXJyZW50RW50aXR5U2V0LmFubm90YXRpb25zPy5VST8uRGVsZXRlSGlkZGVuO1xuXHR9XG5cdHJldHVybiBpc0RlbGV0ZUhpZGRlbjtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHZpc2liaWxpdHkgZm9yIERlbGV0ZSBidXR0b25cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gbmF2aWdhdGlvblBhdGhcbiAqIEBwYXJhbSBpc1RhcmdldERlbGV0YWJsZVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWxldGVWaXNpYmxlKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRuYXZpZ2F0aW9uUGF0aDogc3RyaW5nLFxuXHRpc1RhcmdldERlbGV0YWJsZTogYm9vbGVhblxuKTogQmluZGluZ0V4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBjdXJyZW50RW50aXR5U2V0OiBFbnRpdHlTZXQgfCBudWxsID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0Y29uc3QgaXNEZWxldGVIaWRkZW46IGFueSA9IGdldERlbGV0ZUhpZGRlbihjdXJyZW50RW50aXR5U2V0LCBuYXZpZ2F0aW9uUGF0aCk7XG5cdGxldCBpc1BhcmVudERlbGV0YWJsZSwgcGFyZW50RW50aXR5U2V0RGVsZXRhYmxlO1xuXHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UpIHtcblx0XHRpc1BhcmVudERlbGV0YWJsZSA9IGlzUGF0aERlbGV0YWJsZShjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSwgbmF2aWdhdGlvblBhdGgpO1xuXHRcdHBhcmVudEVudGl0eVNldERlbGV0YWJsZSA9IGlzUGFyZW50RGVsZXRhYmxlID8gY29tcGlsZUJpbmRpbmcoaXNQYXJlbnREZWxldGFibGUpIDogaXNQYXJlbnREZWxldGFibGU7XG5cdH1cblx0Ly9kbyBub3Qgc2hvdyBjYXNlIHRoZSBkZWxldGUgYnV0dG9uIGlmIHBhcmVudEVudGl0eVNldERlbGV0YWJsZSBpcyBmYWxzZVxuXHRpZiAocGFyZW50RW50aXR5U2V0RGVsZXRhYmxlID09PSBcImZhbHNlXCIpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZWxzZSBpZiAocGFyZW50RW50aXR5U2V0RGVsZXRhYmxlICYmIGlzRGVsZXRlSGlkZGVuICE9PSB0cnVlKSB7XG5cdFx0Ly9EZWxldGUgSGlkZGVuIGluIGNhc2Ugb2YgdHJ1ZSBhbmQgcGF0aCBiYXNlZFxuXHRcdGlmIChpc0RlbGV0ZUhpZGRlbikge1xuXHRcdFx0cmV0dXJuIFwiez0gISR7XCIgKyAobmF2aWdhdGlvblBhdGggPyBuYXZpZ2F0aW9uUGF0aCArIFwiL1wiIDogXCJcIikgKyBpc0RlbGV0ZUhpZGRlbi5wYXRoICsgXCJ9ICYmICR7dWk+L2VkaXRNb2RlfSA9PT0gJ0VkaXRhYmxlJ31cIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFwiez0gJHt1aT4vZWRpdE1vZGV9ID09PSAnRWRpdGFibGUnfVwiO1xuXHRcdH1cblx0fSBlbHNlIGlmIChpc0RlbGV0ZUhpZGRlbiA9PT0gdHJ1ZSB8fCAhaXNUYXJnZXREZWxldGFibGUgfHwgY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBlbHNlIGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCkge1xuXHRcdGlmIChpc0RlbGV0ZUhpZGRlbikge1xuXHRcdFx0cmV0dXJuIFwiez0gISR7XCIgKyAobmF2aWdhdGlvblBhdGggPyBuYXZpZ2F0aW9uUGF0aCArIFwiL1wiIDogXCJcIikgKyBpc0RlbGV0ZUhpZGRlbi5wYXRoICsgXCJ9ICYmICR7dWk+L2VkaXRNb2RlfSA9PT0gJ0VkaXRhYmxlJ31cIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFwiez0gJHt1aT4vZWRpdE1vZGV9ID09PSAnRWRpdGFibGUnfVwiO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRJbnNlcnRhYmxlKGN1cnJlbnRFbnRpdHlTZXQ6IEVudGl0eVNldCwgbmF2aWdhdGlvblBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRsZXQgaXNJbnNlcnRhYmxlOiBib29sZWFuID0gdHJ1ZTtcblx0bGV0IGhhc05hdmlnYXRpb25JbnNlcnRSZXN0cmljdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuXHRjb25zdCBSZXN0cmljdGVkUHJvcGVydGllcyA9IGN1cnJlbnRFbnRpdHlTZXQ/LmFubm90YXRpb25zPy5DYXBhYmlsaXRpZXM/Lk5hdmlnYXRpb25SZXN0cmljdGlvbnM/LlJlc3RyaWN0ZWRQcm9wZXJ0aWVzO1xuXHRpZiAobmF2aWdhdGlvblBhdGggJiYgUmVzdHJpY3RlZFByb3BlcnRpZXMpIHtcblx0XHRjb25zdCByZXN0cmljdGVkUHJvcGVydHkgPSBSZXN0cmljdGVkUHJvcGVydGllcy5maW5kKFxuXHRcdFx0cmVzdHJpY3RlZFByb3BlcnR5ID0+XG5cdFx0XHRcdHJlc3RyaWN0ZWRQcm9wZXJ0eT8uTmF2aWdhdGlvblByb3BlcnR5Py50eXBlID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIiAmJlxuXHRcdFx0XHRyZXN0cmljdGVkUHJvcGVydHk/Lk5hdmlnYXRpb25Qcm9wZXJ0eT8udmFsdWUgPT09IG5hdmlnYXRpb25QYXRoICYmXG5cdFx0XHRcdHJlc3RyaWN0ZWRQcm9wZXJ0eT8uSW5zZXJ0UmVzdHJpY3Rpb25zXG5cdFx0KTtcblx0XHRpZiAocmVzdHJpY3RlZFByb3BlcnR5KSB7XG5cdFx0XHRpc0luc2VydGFibGUgPSByZXN0cmljdGVkUHJvcGVydHk/Lkluc2VydFJlc3RyaWN0aW9ucz8uSW5zZXJ0YWJsZSAhPT0gZmFsc2U7XG5cdFx0XHRoYXNOYXZpZ2F0aW9uSW5zZXJ0UmVzdHJpY3Rpb24gPSB0cnVlO1xuXHRcdH1cblx0fVxuXHRpZiAobmF2aWdhdGlvblBhdGggJiYgIWhhc05hdmlnYXRpb25JbnNlcnRSZXN0cmljdGlvbikge1xuXHRcdGlzSW5zZXJ0YWJsZSA9XG5cdFx0XHRjdXJyZW50RW50aXR5U2V0Py5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nW25hdmlnYXRpb25QYXRoXT8uYW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllcz8uSW5zZXJ0UmVzdHJpY3Rpb25zPy5JbnNlcnRhYmxlICE9PVxuXHRcdFx0ZmFsc2U7XG5cdH0gZWxzZSBpZiAoIW5hdmlnYXRpb25QYXRoKSB7XG5cdFx0aXNJbnNlcnRhYmxlID0gY3VycmVudEVudGl0eVNldD8uYW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllcz8uSW5zZXJ0UmVzdHJpY3Rpb25zPy5JbnNlcnRhYmxlICE9PSBmYWxzZTtcblx0fVxuXHRyZXR1cm4gaXNJbnNlcnRhYmxlO1xufVxuXG5mdW5jdGlvbiBnZXRDcmVhdGVIaWRkZW4oY3VycmVudEVudGl0eVNldDogRW50aXR5U2V0LCBuYXZpZ2F0aW9uUGF0aDogc3RyaW5nKSB7XG5cdGxldCBpc0NyZWF0ZUhpZGRlbjogYW55ID0gZmFsc2U7XG5cdGlmIChuYXZpZ2F0aW9uUGF0aCkge1xuXHRcdC8vIENoZWNrIGlmIFVJLkNyZWF0ZUhpZGRlbiBpcyBwb2ludGluZyB0byBwYXJlbnQgcGF0aFxuXHRcdGNvbnN0IGNyZWF0ZUhpZGRlbkFubm90YXRpb24gPSBjdXJyZW50RW50aXR5U2V0Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdbbmF2aWdhdGlvblBhdGhdPy5hbm5vdGF0aW9ucz8uVUk/LkNyZWF0ZUhpZGRlbjtcblx0XHRpZiAoY3JlYXRlSGlkZGVuQW5ub3RhdGlvbiAmJiAoY3JlYXRlSGlkZGVuQW5ub3RhdGlvbiBhcyBhbnkpLnBhdGgpIHtcblx0XHRcdGlmICgoY3JlYXRlSGlkZGVuQW5ub3RhdGlvbiBhcyBhbnkpLnBhdGguaW5kZXhPZihcIi9cIikgPiAwKSB7XG5cdFx0XHRcdGNvbnN0IGFTcGxpdEhpZGRlblBhdGggPSAoY3JlYXRlSGlkZGVuQW5ub3RhdGlvbiBhcyBhbnkpLnBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0XHRjb25zdCBzTmF2aWdhdGlvblBhdGggPSBhU3BsaXRIaWRkZW5QYXRoWzBdO1xuXHRcdFx0XHRjb25zdCBwYXJ0bmVyTmFtZSA9IChjdXJyZW50RW50aXR5U2V0IGFzIGFueSkuZW50aXR5VHlwZS5uYXZpZ2F0aW9uUHJvcGVydGllcy5maW5kKFxuXHRcdFx0XHRcdChuYXZQcm9wZXJ0eTogYW55KSA9PiBuYXZQcm9wZXJ0eS5uYW1lID09PSBuYXZpZ2F0aW9uUGF0aFxuXHRcdFx0XHQpLnBhcnRuZXI7XG5cdFx0XHRcdGlmIChwYXJ0bmVyTmFtZSA9PT0gc05hdmlnYXRpb25QYXRoKSB7XG5cdFx0XHRcdFx0aXNDcmVhdGVIaWRkZW4gPSBjcmVhdGVIaWRkZW5Bbm5vdGF0aW9uO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpc0NyZWF0ZUhpZGRlbiA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpc0NyZWF0ZUhpZGRlbiA9IGNyZWF0ZUhpZGRlbkFubm90YXRpb247XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGlzQ3JlYXRlSGlkZGVuID0gY3VycmVudEVudGl0eVNldC5hbm5vdGF0aW9ucz8uVUk/LkNyZWF0ZUhpZGRlbjtcblx0fVxuXHRyZXR1cm4gaXNDcmVhdGVIaWRkZW47XG59XG5cbi8qKlxuICogUmV0dXJucyB2aXNpYmlsaXR5IGZvciBDcmVhdGUgYnV0dG9uXG4gKlxuICogQHBhcmFtIGlzTGlzdFJlcG9ydFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBuYXZpZ2F0aW9uUGF0aFxuICogQHBhcmFtIGNyZWF0aW9uQmVoYXZpb3VyXG4gKiBAcmV0dXJucyB7Kn0gRXhwcmVzc2lvbiBvciBCb29sZWFuIHZhbHVlIG9mIGNyZWF0ZWhpZGRlblxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDcmVhdGVWaXNpYmxlKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRuYXZpZ2F0aW9uUGF0aDogc3RyaW5nLFxuXHRjcmVhdGlvbkJlaGF2aW91cjogVGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbltcImNyZWF0ZVwiXVxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgYm9vbGVhbiB7XG5cdGNvbnN0IGN1cnJlbnRFbnRpdHlTZXQ6IEVudGl0eVNldCB8IG51bGwgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRjb25zdCBpc0NyZWF0ZUhpZGRlbjogYW55ID0gZ2V0Q3JlYXRlSGlkZGVuKGN1cnJlbnRFbnRpdHlTZXQsIG5hdmlnYXRpb25QYXRoKTtcblx0Y29uc3QgaXNJbnNlcnRhYmxlOiBib29sZWFuID0gZ2V0SW5zZXJ0YWJsZShjdXJyZW50RW50aXR5U2V0LCBuYXZpZ2F0aW9uUGF0aCk7XG5cblx0aWYgKGlzQ3JlYXRlSGlkZGVuID09PSB0cnVlIHx8IGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2UpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZWxzZSBpZiAoY3JlYXRpb25CZWhhdmlvdXIubW9kZSA9PT0gXCJFeHRlcm5hbFwiKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSBpZiAoIWlzSW5zZXJ0YWJsZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBlbHNlIGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCkge1xuXHRcdGlmIChpc0NyZWF0ZUhpZGRlbikge1xuXHRcdFx0cmV0dXJuIFwiez0gISR7XCIgKyAobmF2aWdhdGlvblBhdGggPyBuYXZpZ2F0aW9uUGF0aCArIFwiL1wiIDogXCJcIikgKyBpc0NyZWF0ZUhpZGRlbi5wYXRoICsgXCJ9ICYmICR7dWk+L2VkaXRNb2RlfSA9PT0gJ0VkaXRhYmxlJ31cIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFwiez0gJHt1aT4vZWRpdE1vZGV9ID09PSAnRWRpdGFibGUnfVwiO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24sXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPzogUHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlc1xuKTogVGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbiB7XG5cdC8vIE5lZWQgdG8gZ2V0IHRoZSB0YXJnZXRcblx0Y29uc3QgeyBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIH0gPSBzcGxpdFBhdGgodmlzdWFsaXphdGlvblBhdGgpO1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRjb25zdCBwYWdlTWFuaWZlc3RTZXR0aW5nczogTWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3QgZW50aXR5TmFtZTogc3RyaW5nID0gZW50aXR5U2V0Lm5hbWUsXG5cdFx0aXNFbnRpdHlTZXQ6IGJvb2xlYW4gPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCA9PT0gMCxcblx0XHRwMTNuTW9kZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gZ2V0UDEzbk1vZGUodmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGlkID0gVGFibGVJRChpc0VudGl0eVNldCA/IGVudGl0eU5hbWUgOiBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLCBcIkxpbmVJdGVtXCIpO1xuXHRjb25zdCBzZWxlY3Rpb25Nb2RlID0gZ2V0U2VsZWN0aW9uTW9kZShsaW5lSXRlbUFubm90YXRpb24sIHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBpc0VudGl0eVNldCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdGNvbnN0IHRhcmdldENhcGFiaWxpdGllcyA9IGdldENhcGFiaWxpdHlSZXN0cmljdGlvbih2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdGxldCB0aHJlc2hvbGQgPSBpc0VudGl0eVNldCA/IDMwIDogMTA7XG5cdGlmIChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiAmJiBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbi5NYXhJdGVtcykge1xuXHRcdHRocmVzaG9sZCA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLk1heEl0ZW1zIGFzIG51bWJlcjtcblx0fVxuXG5cdGNvbnN0IG5hdmlnYXRpb25PckNvbGxlY3Rpb25OYW1lID0gaXNFbnRpdHlTZXQgPyBlbnRpdHlOYW1lIDogbmF2aWdhdGlvblByb3BlcnR5UGF0aDtcblx0Y29uc3QgbmF2aWdhdGlvblNldHRpbmdzID0gcGFnZU1hbmlmZXN0U2V0dGluZ3MuZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24obmF2aWdhdGlvbk9yQ29sbGVjdGlvbk5hbWUpO1xuXHRjb25zdCBjcmVhdGlvbkJlaGF2aW91ciA9IF9nZXRDcmVhdGlvbkJlaGF2aW91cihsaW5lSXRlbUFubm90YXRpb24sIHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLCBjb252ZXJ0ZXJDb250ZXh0LCBuYXZpZ2F0aW9uU2V0dGluZ3MpO1xuXHRsZXQgaXNQYXJlbnREZWxldGFibGU6IGFueSwgcGFyZW50RW50aXR5U2V0RGVsZXRhYmxlO1xuXHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UpIHtcblx0XHRpc1BhcmVudERlbGV0YWJsZSA9IGlzUGF0aERlbGV0YWJsZShjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSwgbmF2aWdhdGlvblByb3BlcnR5UGF0aCwgdHJ1ZSk7XG5cdFx0aWYgKGlzUGFyZW50RGVsZXRhYmxlPy5jdXJyZW50RW50aXR5UmVzdHJpY3Rpb24pIHtcblx0XHRcdHBhcmVudEVudGl0eVNldERlbGV0YWJsZSA9IHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cGFyZW50RW50aXR5U2V0RGVsZXRhYmxlID0gaXNQYXJlbnREZWxldGFibGUgPyBjb21waWxlQmluZGluZyhpc1BhcmVudERlbGV0YWJsZSwgdHJ1ZSkgOiBpc1BhcmVudERlbGV0YWJsZTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdGlkOiBpZCxcblx0XHRlbnRpdHlOYW1lOiBlbnRpdHlOYW1lLFxuXHRcdGNvbGxlY3Rpb246IFwiL1wiICsgZW50aXR5TmFtZSArICghaXNFbnRpdHlTZXQgPyBcIi9cIiArIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggOiBcIlwiKSxcblx0XHRuYXZpZ2F0aW9uUGF0aDogbmF2aWdhdGlvblByb3BlcnR5UGF0aCxcblx0XHRpc0VudGl0eVNldDogaXNFbnRpdHlTZXQsXG5cdFx0cm93OiBfZ2V0Um93Q29uZmlndXJhdGlvblByb3BlcnR5KFxuXHRcdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdFx0dmlzdWFsaXphdGlvblBhdGgsXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0bmF2aWdhdGlvblNldHRpbmdzLFxuXHRcdFx0bmF2aWdhdGlvbk9yQ29sbGVjdGlvbk5hbWVcblx0XHQpLFxuXHRcdHAxM25Nb2RlOiBwMTNuTW9kZSxcblx0XHRzaG93OiB7XG5cdFx0XHRcImRlbGV0ZVwiOiBnZXREZWxldGVWaXNpYmxlKGNvbnZlcnRlckNvbnRleHQsIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsIHRhcmdldENhcGFiaWxpdGllcy5pc0RlbGV0YWJsZSksXG5cdFx0XHRjcmVhdGU6IGdldENyZWF0ZVZpc2libGUoY29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aCwgY3JlYXRpb25CZWhhdmlvdXIpLFxuXHRcdFx0dXBkYXRlOiBnZXRVcGRhdGFibGUoY29udmVydGVyQ29udGV4dClcblx0XHR9LFxuXHRcdGNyZWF0ZTogY3JlYXRpb25CZWhhdmlvdXIsXG5cdFx0c2VsZWN0aW9uTW9kZTogc2VsZWN0aW9uTW9kZSxcblx0XHRhdXRvQmluZE9uSW5pdDogY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UsXG5cdFx0ZW5hYmxlQ29udHJvbFZNOiBwYWdlTWFuaWZlc3RTZXR0aW5ncy5nZXRWYXJpYW50TWFuYWdlbWVudCgpID09PSBcIkNvbnRyb2xcIiAmJiAhIXAxM25Nb2RlLFxuXHRcdHRocmVzaG9sZDogdGhyZXNob2xkLFxuXHRcdHBhcmVudEVudGl0eURlbGV0ZUVuYWJsZWQ6IHBhcmVudEVudGl0eVNldERlbGV0YWJsZVxuXHR9O1xufVxuXG5mdW5jdGlvbiBnZXRVcGRhdGFibGUoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCkge1xuXHRjb25zdCB0ZW1wbGF0ZVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpO1xuXHRpZiAodGVtcGxhdGVUeXBlID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlIHx8IHRlbXBsYXRlVHlwZSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQpIHtcblx0XHRyZXR1cm4gXCJEaXNwbGF5XCI7XG5cdH1cblx0Ly8gdXBkYXRhYmxlIHdpbGwgYmUgaGFuZGxlZCBhdCB0aGUgcHJvcGVydHkgbGV2ZWxcblx0cmV0dXJuIFwie3VpPi9lZGl0TW9kZX1cIjtcbn1cblxuLyoqXG4gKiBTcGxpdCB0aGUgdmlzdWFsaXphdGlvbiBwYXRoIGludG8gdGhlIG5hdmlnYXRpb24gcHJvcGVydHkgcGF0aCBhbmQgYW5ub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGhcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIHNwbGl0UGF0aCh2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nKSB7XG5cdGxldCBbbmF2aWdhdGlvblByb3BlcnR5UGF0aCwgYW5ub3RhdGlvblBhdGhdID0gdmlzdWFsaXphdGlvblBhdGguc3BsaXQoXCJAXCIpO1xuXG5cdGlmIChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSA9PT0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggLSAxKSB7XG5cdFx0Ly8gRHJvcCB0cmFpbGluZyBzbGFzaFxuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLnN1YnN0cigwLCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCAtIDEpO1xuXHR9XG5cdHJldHVybiB7IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsIGFubm90YXRpb25QYXRoIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbihcblx0c2VsZWN0aW9uVmFyaWFudFBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogU2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQge1xuXHRjb25zdCBzZWxlY3Rpb246IFNlbGVjdGlvblZhcmlhbnRUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihzZWxlY3Rpb25WYXJpYW50UGF0aCkgYXMgU2VsZWN0aW9uVmFyaWFudFR5cGU7XG5cblx0aWYgKHNlbGVjdGlvbikge1xuXHRcdGNvbnN0IHByb3BlcnR5TmFtZXM6IHN0cmluZ1tdID0gW107XG5cdFx0c2VsZWN0aW9uLlNlbGVjdE9wdGlvbnM/LmZvckVhY2goKHNlbGVjdE9wdGlvbjogU2VsZWN0T3B0aW9uVHlwZSkgPT4ge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlOYW1lOiBhbnkgPSBzZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lO1xuXHRcdFx0Y29uc3QgUHJvcGVydHlQYXRoOiBzdHJpbmcgPSBwcm9wZXJ0eU5hbWUudmFsdWU7XG5cdFx0XHRpZiAocHJvcGVydHlOYW1lcy5pbmRleE9mKFByb3BlcnR5UGF0aCkgPT09IC0xKSB7XG5cdFx0XHRcdHByb3BlcnR5TmFtZXMucHVzaChQcm9wZXJ0eVBhdGgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiB7XG5cdFx0XHR0ZXh0OiBzZWxlY3Rpb24uVGV4dCBhcyBzdHJpbmcsXG5cdFx0XHRwcm9wZXJ0eU5hbWVzOiBwcm9wZXJ0eU5hbWVzXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24oXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQ6IGJvb2xlYW4gPSBmYWxzZVxuKTogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbiB7XG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RTZXR0aW5nczogVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpO1xuXHRjb25zdCB0YWJsZVNldHRpbmdzID0gdGFibGVNYW5pZmVzdFNldHRpbmdzLnRhYmxlU2V0dGluZ3M7XG5cdGxldCBxdWlja1NlbGVjdGlvblZhcmlhbnQ6IGFueTtcblx0Y29uc3QgcXVpY2tGaWx0ZXJQYXRoczogeyBhbm5vdGF0aW9uUGF0aDogc3RyaW5nIH1bXSA9IFtdO1xuXHRsZXQgZW5hYmxlRXhwb3J0ID0gdHJ1ZTtcblx0bGV0IGNyZWF0aW9uTW9kZSA9IENyZWF0aW9uTW9kZS5OZXdQYWdlO1xuXHRsZXQgZmlsdGVycztcblx0bGV0IGNyZWF0ZUF0RW5kID0gdHJ1ZTtcblx0bGV0IGRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGEgPSBmYWxzZTtcblx0bGV0IGNvbmRlbnNlZFRhYmxlTGF5b3V0ID0gZmFsc2U7XG5cdGxldCBoaWRlVGFibGVUaXRsZSA9IGZhbHNlO1xuXHRsZXQgdGFibGVUeXBlID0gXCJSZXNwb25zaXZlVGFibGVcIjtcblx0bGV0IHNlbGVjdGlvbkxpbWl0ID0gMjAwO1xuXHRsZXQgZW5hYmxlUGFzdGUgPSB0cnVlO1xuXHRjb25zdCBzaGVsbFNlcnZpY2VzID0gY29udmVydGVyQ29udGV4dC5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdGNvbnN0IHVzZXJDb250ZW50RGVuc2l0eSA9IHNoZWxsU2VydmljZXM/LmdldENvbnRlbnREZW5zaXR5KCk7XG5cdGNvbnN0IGFwcENvbnRlbnREZW5zaXR5ID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRDb250ZW50RGVuc2l0aWVzKCk7XG5cdGlmICgoYXBwQ29udGVudERlbnNpdHk/LmNvenkgPT09IHRydWUgJiYgYXBwQ29udGVudERlbnNpdHk/LmNvbXBhY3QgIT09IHRydWUpIHx8IHVzZXJDb250ZW50RGVuc2l0eSA9PT0gXCJjb3p5XCIpIHtcblx0XHRpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50ID0gZmFsc2U7XG5cdH1cblx0aWYgKHRhYmxlU2V0dGluZ3MgJiYgbGluZUl0ZW1Bbm5vdGF0aW9uKSB7XG5cdFx0Y29uc3QgdGFyZ2V0RW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUobGluZUl0ZW1Bbm5vdGF0aW9uKTtcblx0XHR0YWJsZVNldHRpbmdzPy5xdWlja1ZhcmlhbnRTZWxlY3Rpb24/LnBhdGhzPy5mb3JFYWNoKChwYXRoOiB7IGFubm90YXRpb25QYXRoOiBzdHJpbmcgfSkgPT4ge1xuXHRcdFx0cXVpY2tTZWxlY3Rpb25WYXJpYW50ID0gdGFyZ2V0RW50aXR5VHlwZS5yZXNvbHZlUGF0aChcIkBcIiArIHBhdGguYW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0Ly8gcXVpY2tTZWxlY3Rpb25WYXJpYW50ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihwYXRoLmFubm90YXRpb25QYXRoKTtcblx0XHRcdGlmIChxdWlja1NlbGVjdGlvblZhcmlhbnQpIHtcblx0XHRcdFx0cXVpY2tGaWx0ZXJQYXRocy5wdXNoKHsgYW5ub3RhdGlvblBhdGg6IHBhdGguYW5ub3RhdGlvblBhdGggfSk7XG5cdFx0XHR9XG5cdFx0XHRmaWx0ZXJzID0ge1xuXHRcdFx0XHRxdWlja0ZpbHRlcnM6IHtcblx0XHRcdFx0XHRzaG93Q291bnRzOiB0YWJsZVNldHRpbmdzPy5xdWlja1ZhcmlhbnRTZWxlY3Rpb24/LnNob3dDb3VudHMsXG5cdFx0XHRcdFx0cGF0aHM6IHF1aWNrRmlsdGVyUGF0aHNcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9KTtcblxuXHRcdGVuYWJsZUV4cG9ydCA9XG5cdFx0XHR0YWJsZVNldHRpbmdzLmVuYWJsZUV4cG9ydCAhPT0gdW5kZWZpbmVkID8gdGFibGVTZXR0aW5ncy5lbmFibGVFeHBvcnQgOiBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBcIk9iamVjdFBhZ2VcIjtcblx0XHRjcmVhdGlvbk1vZGUgPSB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8ubmFtZSB8fCBjcmVhdGlvbk1vZGU7XG5cdFx0Y3JlYXRlQXRFbmQgPSB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uY3JlYXRlQXRFbmQgIT09IHVuZGVmaW5lZCA/IHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5jcmVhdGVBdEVuZCA6IHRydWU7XG5cdFx0ZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSA9ICEhdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGE7XG5cdFx0Y29uZGVuc2VkVGFibGVMYXlvdXQgPSB0YWJsZVNldHRpbmdzLmNvbmRlbnNlZFRhYmxlTGF5b3V0ICE9PSB1bmRlZmluZWQgPyB0YWJsZVNldHRpbmdzLmNvbmRlbnNlZFRhYmxlTGF5b3V0IDogZmFsc2U7XG5cdFx0aGlkZVRhYmxlVGl0bGUgPSAhIXRhYmxlU2V0dGluZ3MucXVpY2tWYXJpYW50U2VsZWN0aW9uPy5oaWRlVGFibGVUaXRsZTtcblx0XHR0YWJsZVR5cGUgPSB0YWJsZVNldHRpbmdzLnR5cGU7XG5cdFx0c2VsZWN0aW9uTGltaXQgPVxuXHRcdFx0dGFibGVTZXR0aW5ncy5zZWxlY3RBbGwgPT09IHRydWUgfHwgdGFibGVTZXR0aW5ncy5zZWxlY3Rpb25MaW1pdCA9PT0gMCA/IDAgOiB0YWJsZVNldHRpbmdzLnNlbGVjdGlvbkxpbWl0IHx8IHNlbGVjdGlvbkxpbWl0O1xuXHRcdGlmICh0YWJsZVNldHRpbmdzLmVuYWJsZVBhc3RlID09PSBmYWxzZSkge1xuXHRcdFx0ZW5hYmxlUGFzdGUgPSBmYWxzZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHtcblx0XHRmaWx0ZXJzOiBmaWx0ZXJzLFxuXHRcdHR5cGU6IHRhYmxlVHlwZSxcblx0XHRoZWFkZXJWaXNpYmxlOiAhKHF1aWNrU2VsZWN0aW9uVmFyaWFudCAmJiBoaWRlVGFibGVUaXRsZSksXG5cdFx0ZW5hYmxlRXhwb3J0OiBlbmFibGVFeHBvcnQsXG5cdFx0Y3JlYXRpb25Nb2RlOiBjcmVhdGlvbk1vZGUsXG5cdFx0Y3JlYXRlQXRFbmQ6IGNyZWF0ZUF0RW5kLFxuXHRcdGRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGE6IGRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGEsXG5cdFx0dXNlQ29uZGVuc2VkVGFibGVMYXlvdXQ6IGNvbmRlbnNlZFRhYmxlTGF5b3V0ICYmIGlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQsXG5cdFx0c2VsZWN0aW9uTGltaXQ6IHNlbGVjdGlvbkxpbWl0LFxuXHRcdGVuYWJsZVBhc3RlOiBlbmFibGVQYXN0ZVxuXHR9O1xufVxuIl19
@@ -852,7 +852,7 @@ export function getDeleteVisible(
852
852
  //do not show case the delete button if parentEntitySetDeletable is false
853
853
  if (parentEntitySetDeletable === "false") {
854
854
  return false;
855
- } else if (parentEntitySetDeletable) {
855
+ } else if (parentEntitySetDeletable && isDeleteHidden !== true) {
856
856
  //Delete Hidden in case of true and path based
857
857
  if (isDeleteHidden) {
858
858
  return "{= !${" + (navigationPath ? navigationPath + "/" : "") + isDeleteHidden.path + "} && ${ui>/editMode} === 'Editable'}";
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
3
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
4
4
  */
5
5
 
6
6
  sap.ui.define(["sap/base/Log"], function(Log) {
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
3
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
4
4
  */
5
5
  sap.ui.define(["sap/ui/core/format/DateFormat"], function(DateFormat) {
6
6
  "use strict";
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
3
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
4
4
  */
5
5
 
6
6
  sap.ui.define(["sap/ui/core/util/PasteHelper", "sap/m/MessageBox"], function(CorePasteHelper, MessageBox) {
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
3
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
4
4
  */
5
5
 
6
6
  sap.ui.define(
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * ! SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
3
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
4
4
  */
5
5
 
6
6
  // ---------------------------------------------------------------------------------------
@@ -5,7 +5,7 @@ sap.ui.define([], function () {
5
5
 
6
6
  /*!
7
7
  * SAPUI5
8
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
8
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
9
9
  */
10
10
 
11
11
  /**
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
3
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
4
4
  */
5
5
  /* global Promise */
6
6
  sap.ui.define(
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * ! SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
3
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
4
4
  */
5
5
 
6
6
  /**
@@ -94,7 +94,7 @@ sap.ui.define(
94
94
  interfaces: [],
95
95
  controls: [],
96
96
  elements: [],
97
- version: "1.84.6",
97
+ version: "1.84.10",
98
98
  noLibraryCSS: true,
99
99
  extensions: {
100
100
  //Configuration used for rule loading of Support Assistant
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
3
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
4
4
  */
5
5
  /**
6
6
  * Adds support rules of the sap.fe.core library to the support infrastructure.
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
3
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
4
4
  */
5
5
  sap.ui.define(["sap/ui/core/mvc/Controller", "sap/fe/core/controllerextensions/RoutingListener"], function(Controller, RoutingListener) {
6
6
  "use strict";
@@ -7,7 +7,7 @@ sap.ui.define(["sap/ui/support/library", "sap/fe/core/converters/helpers/IssueMa
7
7
 
8
8
  /*!
9
9
  * SAPUI5
10
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
10
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
11
11
  */
12
12
 
13
13
  /**