@sapui5/sap.fe.core 1.103.0 → 1.104.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/package.json +3 -3
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AppComponent.js +12 -5
  4. package/src/sap/fe/core/AppComponent.ts +9 -3
  5. package/src/sap/fe/core/AppStateHandler.js +74 -62
  6. package/src/sap/fe/core/AppStateHandler.ts +24 -29
  7. package/src/sap/fe/core/CommonUtils.js +10 -34
  8. package/src/sap/fe/core/CommonUtils.ts +10 -43
  9. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +181 -43
  10. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +150 -24
  11. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +582 -207
  12. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +237 -88
  13. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +4 -4
  14. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +4 -3
  15. package/src/sap/fe/core/controllerextensions/EditFlow.js +257 -219
  16. package/src/sap/fe/core/controllerextensions/EditFlow.ts +103 -108
  17. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +80 -54
  18. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +40 -44
  19. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +28 -26
  20. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +35 -30
  21. package/src/sap/fe/core/controllerextensions/InternalRouting.js +89 -47
  22. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +85 -48
  23. package/src/sap/fe/core/controllerextensions/MassEdit.js +2 -2
  24. package/src/sap/fe/core/controllerextensions/MassEdit.ts +1 -1
  25. package/src/sap/fe/core/controllerextensions/PageReady.js +2 -2
  26. package/src/sap/fe/core/controllerextensions/PageReady.ts +5 -1
  27. package/src/sap/fe/core/controllerextensions/Share.js +153 -122
  28. package/src/sap/fe/core/controllerextensions/Share.ts +93 -95
  29. package/src/sap/fe/core/controllerextensions/ViewState.js +139 -73
  30. package/src/sap/fe/core/controllerextensions/ViewState.ts +78 -90
  31. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +6 -5
  32. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +5 -3
  33. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +18 -13
  34. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +17 -15
  35. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +88 -17
  36. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +105 -31
  37. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +5 -4
  38. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +28 -32
  39. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +10 -17
  40. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +1 -6
  41. package/src/sap/fe/core/controls/FileWrapper.js +6 -1
  42. package/src/sap/fe/core/controls/FileWrapper.ts +4 -0
  43. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +3 -3
  44. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +2 -2
  45. package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +22 -35
  46. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +2 -2
  47. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +1 -1
  48. package/src/sap/fe/core/converters/ConverterContext.js +1 -1
  49. package/src/sap/fe/core/converters/ConverterContext.ts +1 -1
  50. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  51. package/src/sap/fe/core/converters/ManifestSettings.ts +3 -1
  52. package/src/sap/fe/core/converters/MetaModelConverter.js +15 -4
  53. package/src/sap/fe/core/converters/MetaModelConverter.ts +10 -3
  54. package/src/sap/fe/core/converters/annotations/DataField.js +5 -2
  55. package/src/sap/fe/core/converters/annotations/DataField.ts +5 -1
  56. package/src/sap/fe/core/converters/common/AnnotationConverter.js +11 -11
  57. package/src/sap/fe/core/converters/controls/Common/Chart.js +1 -1
  58. package/src/sap/fe/core/converters/controls/Common/Chart.ts +4 -8
  59. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +4 -2
  60. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +25 -30
  61. package/src/sap/fe/core/converters/controls/Common/Form.js +3 -2
  62. package/src/sap/fe/core/converters/controls/Common/Form.ts +9 -14
  63. package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
  64. package/src/sap/fe/core/converters/controls/Common/KPI.ts +16 -15
  65. package/src/sap/fe/core/converters/controls/Common/Table.js +8 -15
  66. package/src/sap/fe/core/converters/controls/Common/Table.ts +14 -30
  67. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +1 -1
  68. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +3 -4
  69. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +1 -1
  70. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +2 -2
  71. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +5 -2
  72. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +4 -2
  73. package/src/sap/fe/core/converters/helpers/Aggregation.js +1 -1
  74. package/src/sap/fe/core/converters/helpers/Aggregation.ts +3 -3
  75. package/src/sap/fe/core/converters/helpers/ID.js +3 -1
  76. package/src/sap/fe/core/converters/helpers/ID.ts +1 -0
  77. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
  78. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +2 -3
  79. package/src/sap/fe/core/converters/templates/ListReportConverter.js +27 -15
  80. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +42 -27
  81. package/src/sap/fe/core/formatters/StandardFormatter.js +13 -6
  82. package/src/sap/fe/core/formatters/StandardFormatter.ts +20 -14
  83. package/src/sap/fe/core/helpers/BindingToolkit.js +36 -13
  84. package/src/sap/fe/core/helpers/BindingToolkit.ts +37 -11
  85. package/src/sap/fe/core/helpers/ClassSupport.js +30 -2
  86. package/src/sap/fe/core/helpers/ClassSupport.ts +23 -0
  87. package/src/sap/fe/core/helpers/MassEditHelper.js +94 -89
  88. package/src/sap/fe/core/helpers/MassEditHelper.ts +128 -157
  89. package/src/sap/fe/core/helpers/MessageStrip.js +81 -0
  90. package/src/sap/fe/core/helpers/MessageStrip.ts +79 -0
  91. package/src/sap/fe/core/helpers/ToES6Promise.js +32 -0
  92. package/src/sap/fe/core/helpers/ToES6Promise.ts +19 -0
  93. package/src/sap/fe/core/jsx-runtime/Fragment.js +16 -0
  94. package/src/sap/fe/core/jsx-runtime/Fragment.ts +3 -0
  95. package/src/sap/fe/core/jsx-runtime/jsx-control.js +99 -0
  96. package/src/sap/fe/core/jsx-runtime/jsx-control.ts +82 -0
  97. package/src/sap/fe/core/jsx-runtime/jsx-xml.js +105 -0
  98. package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +89 -0
  99. package/src/sap/fe/core/jsx-runtime/jsx.js +12 -90
  100. package/src/sap/fe/core/jsx-runtime/jsx.ts +24 -85
  101. package/src/sap/fe/core/library.js +1 -1
  102. package/src/sap/fe/core/messagebundle.properties +4 -37
  103. package/src/sap/fe/core/messagebundle_ar.properties +20 -40
  104. package/src/sap/fe/core/messagebundle_bg.properties +20 -40
  105. package/src/sap/fe/core/messagebundle_ca.properties +20 -40
  106. package/src/sap/fe/core/messagebundle_cs.properties +20 -40
  107. package/src/sap/fe/core/messagebundle_cy.properties +20 -40
  108. package/src/sap/fe/core/messagebundle_da.properties +20 -40
  109. package/src/sap/fe/core/messagebundle_de.properties +20 -40
  110. package/src/sap/fe/core/messagebundle_el.properties +20 -40
  111. package/src/sap/fe/core/messagebundle_en.properties +19 -39
  112. package/src/sap/fe/core/messagebundle_en_GB.properties +19 -39
  113. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +21 -39
  114. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +19 -39
  115. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +22 -18
  116. package/src/sap/fe/core/messagebundle_es.properties +22 -42
  117. package/src/sap/fe/core/messagebundle_es_MX.properties +20 -40
  118. package/src/sap/fe/core/messagebundle_et.properties +20 -40
  119. package/src/sap/fe/core/messagebundle_fi.properties +20 -40
  120. package/src/sap/fe/core/messagebundle_fr.properties +21 -41
  121. package/src/sap/fe/core/messagebundle_fr_CA.properties +20 -40
  122. package/src/sap/fe/core/messagebundle_hi.properties +20 -40
  123. package/src/sap/fe/core/messagebundle_hr.properties +20 -40
  124. package/src/sap/fe/core/messagebundle_hu.properties +20 -40
  125. package/src/sap/fe/core/messagebundle_id.properties +20 -40
  126. package/src/sap/fe/core/messagebundle_it.properties +20 -40
  127. package/src/sap/fe/core/messagebundle_iw.properties +20 -40
  128. package/src/sap/fe/core/messagebundle_ja.properties +20 -40
  129. package/src/sap/fe/core/messagebundle_kk.properties +20 -40
  130. package/src/sap/fe/core/messagebundle_ko.properties +25 -45
  131. package/src/sap/fe/core/messagebundle_lt.properties +20 -40
  132. package/src/sap/fe/core/messagebundle_lv.properties +20 -40
  133. package/src/sap/fe/core/messagebundle_ms.properties +20 -40
  134. package/src/sap/fe/core/messagebundle_nl.properties +22 -42
  135. package/src/sap/fe/core/messagebundle_no.properties +20 -40
  136. package/src/sap/fe/core/messagebundle_pl.properties +21 -41
  137. package/src/sap/fe/core/messagebundle_pt.properties +21 -41
  138. package/src/sap/fe/core/messagebundle_pt_PT.properties +20 -40
  139. package/src/sap/fe/core/messagebundle_ro.properties +20 -40
  140. package/src/sap/fe/core/messagebundle_ru.properties +20 -40
  141. package/src/sap/fe/core/messagebundle_sh.properties +20 -40
  142. package/src/sap/fe/core/messagebundle_sk.properties +20 -40
  143. package/src/sap/fe/core/messagebundle_sl.properties +20 -40
  144. package/src/sap/fe/core/messagebundle_sv.properties +20 -40
  145. package/src/sap/fe/core/messagebundle_th.properties +20 -40
  146. package/src/sap/fe/core/messagebundle_tr.properties +20 -40
  147. package/src/sap/fe/core/messagebundle_uk.properties +20 -40
  148. package/src/sap/fe/core/messagebundle_vi.properties +20 -40
  149. package/src/sap/fe/core/messagebundle_zh_CN.properties +20 -40
  150. package/src/sap/fe/core/messagebundle_zh_TW.properties +20 -40
  151. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +96 -68
  152. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +58 -59
  153. package/src/sap/fe/core/services/NavigationServiceFactory.js +10 -7
  154. package/src/sap/fe/core/services/NavigationServiceFactory.ts +10 -7
  155. package/src/sap/fe/core/services/ShellServicesFactory.js +21 -1
  156. package/src/sap/fe/core/services/ShellServicesFactory.ts +19 -0
  157. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +211 -190
  158. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +114 -120
  159. package/src/sap/fe/core/templating/FilterHelper.js +7 -7
  160. package/src/sap/fe/core/templating/FilterHelper.ts +5 -5
  161. package/src/sap/fe/core/templating/UIFormatters.js +5 -3
  162. package/src/sap/fe/core/templating/UIFormatters.ts +7 -5
@@ -772,7 +772,7 @@ sap.ui.define(["./AnnotationEnum"], function (AnnotationEnum) {
772
772
  return parseAnnotationCondition(andCondition, visitedNavigationPaths, pathVisitor);
773
773
  })));
774
774
  } else if (annotationValue.hasOwnProperty("$Not")) {
775
- return not(parseAnnotationCondition(annotationValue.$Not[0], visitedNavigationPaths, pathVisitor));
775
+ return not(parseAnnotationCondition(annotationValue.$Not, visitedNavigationPaths, pathVisitor));
776
776
  } else if (annotationValue.hasOwnProperty("$Eq")) {
777
777
  return equal(parseAnnotationCondition(annotationValue.$Eq[0], visitedNavigationPaths, pathVisitor), parseAnnotationCondition(annotationValue.$Eq[1], visitedNavigationPaths, pathVisitor));
778
778
  } else if (annotationValue.hasOwnProperty("$Ne")) {
@@ -1121,6 +1121,18 @@ sap.ui.define(["./AnnotationEnum"], function (AnnotationEnum) {
1121
1121
  return or(conditionExpression, onFalseExpression);
1122
1122
  }
1123
1123
 
1124
+ if (isComplexTypeExpression(condition) || isComplexTypeExpression(onTrue) || isComplexTypeExpression(onFalse)) {
1125
+ var pathIdx = 0;
1126
+ var myIfElseExpression = formatResult([condition, onTrue, onFalse], "sap.fe.core.formatters.StandardFormatter#ifElse");
1127
+ var allParts = [];
1128
+ transformRecursively(myIfElseExpression, "PathInModel", function (constantPath) {
1129
+ allParts.push(constantPath);
1130
+ return pathInModel("$".concat(pathIdx++), "$");
1131
+ }, true);
1132
+ allParts.unshift(constant(JSON.stringify(myIfElseExpression)));
1133
+ return formatResult(allParts, "sap.fe.core.formatters.StandardFormatter#evaluateComplexExpression");
1134
+ }
1135
+
1124
1136
  return {
1125
1137
  _type: "IfElse",
1126
1138
  condition: conditionExpression,
@@ -1218,12 +1230,12 @@ sap.ui.define(["./AnnotationEnum"], function (AnnotationEnum) {
1218
1230
  };
1219
1231
  }
1220
1232
  /**
1221
- * Calls a complex type to process the parameters.
1222
- * If requireContext is set to true and no context is passed a default context will be added automatically.
1233
+ * Calls a complex type to process the parameters.
1234
+ * If requireContext is set to true and no context is passed, a default context will be added automatically.
1223
1235
  *
1224
1236
  * @template T
1225
1237
  * @template U
1226
- * @param parameters The list of parameter that should match the type for the compplex type=
1238
+ * @param parameters The list of parameters that should match the type for the complex type=
1227
1239
  * @param type The complex type to use
1228
1240
  * @param [contextEntityType] The context entity type to consider
1229
1241
  * @param oFormatOptions
@@ -1234,7 +1246,7 @@ sap.ui.define(["./AnnotationEnum"], function (AnnotationEnum) {
1234
1246
  _exports.formatResult = formatResult;
1235
1247
 
1236
1248
  function addTypeInformation(parameters, type, contextEntityType, oFormatOptions) {
1237
- var _oFormatOptions, _parameters$, _parameters$$type, _parameters$2, _parameters$2$type, _parameters$3, _parameters$3$type;
1249
+ var _parameters$, _parameters$$type, _parameters$2, _parameters$2$type, _parameters$3, _parameters$3$type;
1238
1250
 
1239
1251
  var parameterExpressions = parameters.map(wrapPrimitive);
1240
1252
 
@@ -1253,22 +1265,32 @@ sap.ui.define(["./AnnotationEnum"], function (AnnotationEnum) {
1253
1265
  });
1254
1266
  }
1255
1267
  } // if showMeasure is set to false we want to not parse as string to see the 0
1268
+ // we do that also for all bindings because otherwise the mdc Field isn't editable
1269
+
1256
1270
 
1271
+ if (!(oFormatOptions && oFormatOptions.showNumber === false) && (((_parameters$ = parameters[0]) === null || _parameters$ === void 0 ? void 0 : (_parameters$$type = _parameters$.type) === null || _parameters$$type === void 0 ? void 0 : _parameters$$type.indexOf("sap.ui.model.odata.type.Int")) === 0 || ((_parameters$2 = parameters[0]) === null || _parameters$2 === void 0 ? void 0 : (_parameters$2$type = _parameters$2.type) === null || _parameters$2$type === void 0 ? void 0 : _parameters$2$type.indexOf("sap.ui.model.odata.type.Decimal")) === 0 || ((_parameters$3 = parameters[0]) === null || _parameters$3 === void 0 ? void 0 : (_parameters$3$type = _parameters$3.type) === null || _parameters$3$type === void 0 ? void 0 : _parameters$3$type.indexOf("sap.ui.model.odata.type.Double")) === 0)) {
1272
+ var _parameters$4, _parameters$5;
1257
1273
 
1258
- if (((_oFormatOptions = oFormatOptions) === null || _oFormatOptions === void 0 ? void 0 : _oFormatOptions.showMeasure) === false && (((_parameters$ = parameters[0]) === null || _parameters$ === void 0 ? void 0 : (_parameters$$type = _parameters$.type) === null || _parameters$$type === void 0 ? void 0 : _parameters$$type.indexOf("sap.ui.model.odata.type.Int")) === 0 || ((_parameters$2 = parameters[0]) === null || _parameters$2 === void 0 ? void 0 : (_parameters$2$type = _parameters$2.type) === null || _parameters$2$type === void 0 ? void 0 : _parameters$2$type.indexOf("sap.ui.model.odata.type.Decimal")) === 0 || ((_parameters$3 = parameters[0]) === null || _parameters$3 === void 0 ? void 0 : (_parameters$3$type = _parameters$3.type) === null || _parameters$3$type === void 0 ? void 0 : _parameters$3$type.indexOf("sap.ui.model.odata.type.Double")) === 0)) {
1259
- var _parameters$4;
1274
+ if (((_parameters$4 = parameters[0]) === null || _parameters$4 === void 0 ? void 0 : _parameters$4.type) === "sap.ui.model.odata.type.Int64" || ((_parameters$5 = parameters[0]) === null || _parameters$5 === void 0 ? void 0 : _parameters$5.type) === "sap.ui.model.odata.type.Decimal") {
1275
+ var _oFormatOptions;
1260
1276
 
1261
- if (((_parameters$4 = parameters[0]) === null || _parameters$4 === void 0 ? void 0 : _parameters$4.type) === "sap.ui.model.odata.type.Int64") {
1262
1277
  //sap.ui.model.odata.type.Int64 do not support parseAsString false
1263
- oFormatOptions = {
1278
+ oFormatOptions = ((_oFormatOptions = oFormatOptions) === null || _oFormatOptions === void 0 ? void 0 : _oFormatOptions.showMeasure) === false ? {
1264
1279
  emptyString: "",
1265
1280
  showMeasure: false
1281
+ } : {
1282
+ emptyString: ""
1266
1283
  };
1267
1284
  } else {
1268
- oFormatOptions = {
1285
+ var _oFormatOptions2;
1286
+
1287
+ oFormatOptions = ((_oFormatOptions2 = oFormatOptions) === null || _oFormatOptions2 === void 0 ? void 0 : _oFormatOptions2.showMeasure) === false ? {
1269
1288
  parseAsString: false,
1270
1289
  emptyString: "",
1271
1290
  showMeasure: false
1291
+ } : {
1292
+ parseAsString: false,
1293
+ emptyString: ""
1272
1294
  };
1273
1295
  }
1274
1296
  }
@@ -1355,7 +1377,7 @@ sap.ui.define(["./AnnotationEnum"], function (AnnotationEnum) {
1355
1377
  var allParts = [];
1356
1378
  transformRecursively(myConcatExpression, "PathInModel", function (constantPath) {
1357
1379
  allParts.push(constantPath);
1358
- return constant("$".concat(pathIdx++));
1380
+ return pathInModel("$".concat(pathIdx++), "$");
1359
1381
  });
1360
1382
  allParts.unshift(constant(JSON.stringify(myConcatExpression)));
1361
1383
  return formatResult(allParts, "sap.fe.core.formatters.StandardFormatter#evaluateComplexExpression");
@@ -1418,9 +1440,10 @@ sap.ui.define(["./AnnotationEnum"], function (AnnotationEnum) {
1418
1440
 
1419
1441
  case "Set":
1420
1442
  if (includeAllExpression) {
1421
- expression.operands = expression.operands.map(function (operand) {
1443
+ var operands = expression.operands.map(function (operand) {
1422
1444
  return transformRecursively(operand, expressionType, transformFunction, includeAllExpression);
1423
1445
  });
1446
+ expression = expression.operator === "||" ? or.apply(void 0, _toConsumableArray(operands)) : and.apply(void 0, _toConsumableArray(operands));
1424
1447
  }
1425
1448
 
1426
1449
  break;
@@ -1806,4 +1829,4 @@ sap.ui.define(["./AnnotationEnum"], function (AnnotationEnum) {
1806
1829
 
1807
1830
  return _exports;
1808
1831
  }, false);
1809
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkJpbmRpbmdUb29sa2l0LnRzIl0sIm5hbWVzIjpbInVucmVzb2x2ZWFibGVFeHByZXNzaW9uIiwiX3R5cGUiLCJlc2NhcGVYbWxBdHRyaWJ1dGUiLCJpbnB1dFN0cmluZyIsInJlcGxhY2UiLCJoYXNVbnJlc29sdmVhYmxlRXhwcmVzc2lvbiIsImV4cHJlc3Npb25zIiwiZmluZCIsImV4cHIiLCJ1bmRlZmluZWQiLCJfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsIiwiYSIsImIiLCJ2YWx1ZSIsIm9wZXJhbmQiLCJvcGVyYXRvciIsIm9wZXJhbmRzIiwibGVuZ3RoIiwiZXZlcnkiLCJleHByZXNzaW9uIiwic29tZSIsIm90aGVyRXhwcmVzc2lvbiIsImNvbmRpdGlvbiIsIm9uVHJ1ZSIsIm9uRmFsc2UiLCJvcGVyYW5kMSIsIm9wZXJhbmQyIiwiYUV4cHJlc3Npb25zIiwiYkV4cHJlc3Npb25zIiwiaW5kZXgiLCJwYXRoSW5Nb2RlbCIsIm1vZGVsTmFtZSIsInBhdGgiLCJ0YXJnZXRFbnRpdHlTZXQiLCJmbiIsInBhcmFtZXRlcnMiLCJ0eXBlIiwiYmluZGluZ1BhcmFtZXRlcnMiLCJvdGhlckZ1bmN0aW9uIiwib2JqIiwicmVmIiwiZmxhdHRlblNldEV4cHJlc3Npb24iLCJyZWR1Y2UiLCJyZXN1bHQiLCJjYW5kaWRhdGVzRm9yRmxhdHRlbmluZyIsImZvckVhY2giLCJjYW5kaWRhdGUiLCJlIiwicHVzaCIsImhhc09wcG9zaXRlRXhwcmVzc2lvbnMiLCJuZWdhdGVkRXhwcmVzc2lvbnMiLCJtYXAiLCJub3QiLCJpIiwiYW5kIiwid3JhcFByaW1pdGl2ZSIsImlzU3RhdGljRmFsc2UiLCJub25Ucml2aWFsRXhwcmVzc2lvbiIsImZpbHRlciIsImlzRmFsc2UiLCJpc0NvbnN0YW50IiwiY29uc3RhbnQiLCJpc1ZhbGlkIiwiaXNUcnVlIiwib3IiLCJpc1N0YXRpY1RydWUiLCJpc0NvbXBhcmlzb24iLCJpc1RydXRoeSIsImJpbmRpbmdFeHByZXNzaW9uIiwidmlzaXRlZE5hdmlnYXRpb25QYXRocyIsInBhdGhWaXNpdG9yIiwidGFyZ2V0UGF0aCIsImxvY2FsUGF0aCIsImNvbmNhdCIsImpvaW4iLCJjb25zdGFudFZhbHVlIiwiQXJyYXkiLCJpc0FycmF5IiwiaXNQcmltaXRpdmVPYmplY3QiLCJ2YWx1ZU9mIiwiT2JqZWN0IiwiZW50cmllcyIsInBsYWluRXhwcmVzc2lvbiIsImtleSIsInZhbCIsIndyYXBwZWRWYWx1ZSIsInJlc29sdmVCaW5kaW5nU3RyaW5nIiwidGFyZ2V0VHlwZSIsInN0YXJ0c1dpdGgiLCJyZWZlcmVuY2UiLCJpc0V4cHJlc3Npb24iLCJzb21ldGhpbmciLCJtYXliZUNvbnN0YW50IiwiaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24iLCJtYXliZUJpbmRpbmciLCJpc0NvbXBsZXhUeXBlRXhwcmVzc2lvbiIsIm9iamVjdFR5cGUiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJpc0NvbXBsZXhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsImFubm90YXRpb25WYWx1ZSIsImFubm90YXRpb25FeHByZXNzaW9uIiwiZGVmYXVsdFZhbHVlIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwiYW5ub3RhdGlvbklmRXhwcmVzc2lvbiIsIklmIiwicGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uIiwiTm90IiwiZXF1YWwiLCJFcSIsIm5vdEVxdWFsIiwiTmUiLCJncmVhdGVyVGhhbiIsIkd0IiwiZ3JlYXRlck9yRXF1YWwiLCJHZSIsImxlc3NUaGFuIiwiTHQiLCJsZXNzT3JFcXVhbCIsIkxlIiwiT3IiLCJvckNvbmRpdGlvbiIsIkFuZCIsImFuZENvbmRpdGlvbiIsImFubm90YXRpb25BcHBseUV4cHJlc3Npb24iLCJoYXNPd25Qcm9wZXJ0eSIsIiRPciIsIiRBbmQiLCIkTm90IiwiJEVxIiwiJE5lIiwiJEd0IiwiJEdlIiwiJEx0IiwiJExlIiwiJFBhdGgiLCJGdW5jdGlvbiIsIiRGdW5jdGlvbiIsIkFwcGx5IiwiJEFwcGx5IiwiJElmIiwicmVzb2x2ZUVudW1WYWx1ZSIsIiRFbnVtTWVtYmVyIiwiaWZFbHNlIiwiYXBwbHlFeHByZXNzaW9uIiwiYXBwbHlQYXJhbSIsImFwcGx5UGFyYW1Db252ZXJ0ZWQiLCJjb21wYXJpc29uIiwibGVmdE9wZXJhbmQiLCJyaWdodE9wZXJhbmQiLCJsZWZ0RXhwcmVzc2lvbiIsInJpZ2h0RXhwcmVzc2lvbiIsImxlZnQiLCJyaWdodCIsInJlZHVjZWQiLCJjb25kaXRpb25FeHByZXNzaW9uIiwib25UcnVlRXhwcmVzc2lvbiIsIm9uRmFsc2VFeHByZXNzaW9uIiwiaGFzUmVmZXJlbmNlVG9EZWZhdWx0Q29udGV4dCIsImZvcm1hdFJlc3VsdCIsImZvcm1hdHRlckZ1bmN0aW9uIiwiY29udGV4dEVudGl0eVR5cGUiLCJwYXJhbWV0ZXJFeHByZXNzaW9ucyIsImtleXMiLCJmdW5jdGlvbk5hbWUiLCJfX2Z1bmN0aW9uTmFtZSIsInNwbGl0IiwiZm9ybWF0dGVyQ2xhc3MiLCJmb3JtYXR0ZXJOYW1lIiwidW5zaGlmdCIsImFkZFR5cGVJbmZvcm1hdGlvbiIsIm9Gb3JtYXRPcHRpb25zIiwic2hvd01lYXN1cmUiLCJpbmRleE9mIiwiZW1wdHlTdHJpbmciLCJwYXJzZUFzU3RyaW5nIiwidW9tUGF0aCIsIm1vZGUiLCJjdXJyZW5jeVBhdGgiLCJmb3JtYXRPcHRpb25zIiwiZnVuYyIsIm9uIiwiaXNFbXB0eSIsImluRXhwcmVzc2lvbnMiLCJjb25jYXRlbmF0ZWQiLCJ0b1N0cmluZyIsInBhdGhJZHgiLCJteUNvbmNhdEV4cHJlc3Npb24iLCJhbGxQYXJ0cyIsInRyYW5zZm9ybVJlY3Vyc2l2ZWx5IiwiY29uc3RhbnRQYXRoIiwiSlNPTiIsInN0cmluZ2lmeSIsImluRXhwcmVzc2lvbiIsImV4cHJlc3Npb25UeXBlIiwidHJhbnNmb3JtRnVuY3Rpb24iLCJpbmNsdWRlQWxsRXhwcmVzc2lvbiIsInBhcmFtZXRlciIsInN1YkV4cHJlc3Npb24iLCJiaW5kaW5nUGFyYW1ldGVyIiwibmVlZFBhcmVudGhlc2lzIiwiY29tcGlsZUNvbnN0YW50T2JqZWN0IiwiaXNOdWxsYWJsZSIsIm8iLCJwcm9wZXJ0aWVzIiwiY2hpbGRSZXN1bHQiLCJjb21waWxlRXhwcmVzc2lvbiIsImNvbXBpbGVDb25zdGFudCIsImVtYmVkZGVkSW5CaW5kaW5nIiwiY29tcGlsZVBhdGhJbk1vZGVsRXhwcmVzc2lvbiIsImV4cHJlc3Npb25Gb3JCaW5kaW5nIiwiZW1iZWRkZWRTZXBhcmF0b3IiLCJjb25zdHJhaW50cyIsImNvbXBsZXhCaW5kaW5nRGVmaW5pdGlvbiIsImNvbXBpbGVQYXRoSW5Nb2RlbCIsIm91dEJpbmRpbmciLCJjb21waWxlQ29tcGxleFR5cGVFeHByZXNzaW9uIiwiY29tcGlsZVBhdGhQYXJhbWV0ZXIiLCJvdXRwdXRFbmQiLCJoYXNFbGVtZW50cyIsInBhcmFtIiwid3JhcEJpbmRpbmdFeHByZXNzaW9uIiwicGFyZW50aGVzaXNSZXF1aXJlZCIsImtlZXBUYXJnZXRUeXBlIiwiYXJndW1lbnRTdHJpbmciLCJhcmciLCJzdWJzdHIiLCJjb21wYXJpc29uRXhwcmVzc2lvbiIsImNvbXBpbGVDb21wYXJpc29uRXhwcmVzc2lvbiIsImlmRWxzZUV4cHJlc3Npb24iLCJzZXRFeHByZXNzaW9uIiwiY29uY2F0RXhwcmVzc2lvbiIsIm5lc3RlZEV4cHJlc3Npb24iLCJsZW5ndGhFeHByZXNzaW9uIiwibm90RXhwcmVzc2lvbiIsInRydXRoeUV4cHJlc3Npb24iLCJmb3JtYXR0ZXJFeHByZXNzaW9uIiwiY29tcGlsZUZvcm1hdHRlckV4cHJlc3Npb24iLCJjb21wbGV4VHlwZUV4cHJlc3Npb24iLCJjb21waWxlT3BlcmFuZCIsImNvbXBpbGVkT3BlcmFuZCIsInBhcnRzIiwic2luZ2xlUGF0aCIsIm91dFZhbHVlIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEyS08sTUFBTUEsdUJBQW9ELEdBQUc7QUFDbkVDLElBQUFBLEtBQUssRUFBRTtBQUQ0RCxHQUE3RDs7O0FBSVAs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VUFBVSxDQUFDaU0sV0FBWixDQUFmLEVBQXlDO0FBQ3hDK0IsUUFBQUEsUUFBUSw2QkFBc0JyQyxpQkFBaUIsQ0FBQzNMLFVBQVUsQ0FBQ2lNLFdBQVosQ0FBdkMsQ0FBUjtBQUNBOztBQUNELFVBQUlPLFdBQVcsQ0FBQ3hNLFVBQVUsQ0FBQ2dLLGFBQVosQ0FBZixFQUEyQztBQUMxQ2dFLFFBQUFBLFFBQVEsK0JBQXdCckMsaUJBQWlCLENBQUMzTCxVQUFVLENBQUNnSyxhQUFaLENBQXpDLENBQVI7QUFDQTs7QUFDRCxVQUFJd0MsV0FBVyxDQUFDeE0sVUFBVSxDQUFDZ0IsVUFBWixDQUFmLEVBQXdDO0FBQ3ZDZ04sUUFBQUEsUUFBUSw0QkFBcUJyQyxpQkFBaUIsQ0FBQzNMLFVBQVUsQ0FBQ2dCLFVBQVosQ0FBdEMsQ0FBUjtBQUNBO0FBQ0QsS0FoQk0sTUFnQkE7QUFDTixhQUFPLEVBQVA7QUFDQTs7QUFDRCxXQUFPK00sVUFBVSxHQUFHQyxRQUFILGNBQWtCQSxRQUFsQixNQUFqQjtBQUNBOztBQUVELFdBQVN4QixXQUFULENBQXFCcEwsR0FBckIsRUFBK0I7QUFDOUIsV0FBT0EsR0FBRyxJQUFJeUMsTUFBTSxDQUFDbUYsSUFBUCxDQUFZNUgsR0FBWixFQUFpQnRCLE1BQWpCLEdBQTBCLENBQXhDO0FBQ0E7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLFdBQVNxTSxrQkFBVCxDQUFxRG5NLFVBQXJELEVBQTJGO0FBQzFGLHFCQUFVQSxVQUFVLENBQUNZLFNBQVgsYUFBMEJaLFVBQVUsQ0FBQ1ksU0FBckMsU0FBb0QsRUFBOUQsU0FBbUVaLFVBQVUsQ0FBQ2EsSUFBOUU7QUFDQSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuXHRBbmRBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0QW5kQ29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHRBcHBseUFubm90YXRpb25FeHByZXNzaW9uLFxuXHRDb25kaXRpb25hbENoZWNrT3JWYWx1ZSxcblx0RW50aXR5U2V0LFxuXHRFbnRpdHlUeXBlLFxuXHRFcUFubm90YXRpb25FeHByZXNzaW9uLFxuXHRFcUNvbmRpdGlvbmFsRXhwcmVzc2lvbixcblx0R2VBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0R2VDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdEd0QW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdEd0Q29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHRJZkFubm90YXRpb25FeHByZXNzaW9uLFxuXHRJZkFubm90YXRpb25FeHByZXNzaW9uVmFsdWUsXG5cdExlQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdExlQ29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHRMdEFubm90YXRpb25FeHByZXNzaW9uLFxuXHRMdENvbmRpdGlvbmFsRXhwcmVzc2lvbixcblx0TmVBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0TmVDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdE5vdEFubm90YXRpb25FeHByZXNzaW9uLFxuXHROb3RDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdE9yQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdE9yQ29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHRQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdFBhdGhDb25kaXRpb25FeHByZXNzaW9uLFxuXHRQcm9wZXJ0eUFubm90YXRpb25WYWx1ZVxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IHJlc29sdmVFbnVtVmFsdWUgfSBmcm9tIFwiLi9Bbm5vdGF0aW9uRW51bVwiO1xuXG50eXBlIFByaW1pdGl2ZVR5cGUgPSBzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQgfCBib29sZWFuIHwgb2JqZWN0IHwgbnVsbCB8IHVuZGVmaW5lZDtcbnR5cGUgUHJpbWl0aXZlVHlwZUNhc3Q8UD4gPVxuXHR8IChQIGV4dGVuZHMgQm9vbGVhbiA/IGJvb2xlYW4gOiBuZXZlcilcblx0fCAoUCBleHRlbmRzIE51bWJlciA/IG51bWJlciA6IG5ldmVyKVxuXHR8IChQIGV4dGVuZHMgU3RyaW5nID8gc3RyaW5nIDogbmV2ZXIpXG5cdHwgUDtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbnR5cGUgQmFzZUV4cHJlc3Npb248VD4gPSB7XG5cdF90eXBlOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBDb25zdGFudEV4cHJlc3Npb248VD4gPSBCYXNlRXhwcmVzc2lvbjxUPiAmIHtcblx0X3R5cGU6IFwiQ29uc3RhbnRcIjtcblx0dmFsdWU6IFQ7XG59O1xuXG50eXBlIFNldE9wZXJhdG9yID0gXCImJlwiIHwgXCJ8fFwiO1xuZXhwb3J0IHR5cGUgU2V0RXhwcmVzc2lvbiA9IEJhc2VFeHByZXNzaW9uPGJvb2xlYW4+ICYge1xuXHRfdHlwZTogXCJTZXRcIjtcblx0b3BlcmF0b3I6IFNldE9wZXJhdG9yO1xuXHRvcGVyYW5kczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W107XG59O1xuXG5leHBvcnQgdHlwZSBOb3RFeHByZXNzaW9uID0gQmFzZUV4cHJlc3Npb248Ym9vbGVhbj4gJiB7XG5cdF90eXBlOiBcIk5vdFwiO1xuXHRvcGVyYW5kOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG59O1xuXG5leHBvcnQgdHlwZSBUcnV0aHlFeHByZXNzaW9uID0gQmFzZUV4cHJlc3Npb248Ym9vbGVhbj4gJiB7XG5cdF90eXBlOiBcIlRydXRoeVwiO1xuXHRvcGVyYW5kOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPjtcbn07XG5cbmV4cG9ydCB0eXBlIFJlZmVyZW5jZUV4cHJlc3Npb24gPSBCYXNlRXhwcmVzc2lvbjxvYmplY3Q+ICYge1xuXHRfdHlwZTogXCJSZWZcIjtcblx0cmVmOiBzdHJpbmcgfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgRm9ybWF0dGVyRXhwcmVzc2lvbjxUPiA9IEJhc2VFeHByZXNzaW9uPFQ+ICYge1xuXHRfdHlwZTogXCJGb3JtYXR0ZXJcIjtcblx0Zm46IHN0cmluZztcblx0cGFyYW1ldGVyczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGFueT5bXTtcbn07XG5cbnR5cGUgQ29tcGxleFR5cGVFeHByZXNzaW9uPFQ+ID0gQmFzZUV4cHJlc3Npb248VD4gJiB7XG5cdF90eXBlOiBcIkNvbXBsZXhUeXBlXCI7XG5cdHR5cGU6IHN0cmluZztcblx0Zm9ybWF0T3B0aW9uczogYW55O1xuXHRwYXJhbWV0ZXJzOiBvYmplY3Q7XG5cdGJpbmRpbmdQYXJhbWV0ZXJzOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248YW55PltdO1xufTtcblxuZXhwb3J0IHR5cGUgRnVuY3Rpb25FeHByZXNzaW9uPFQ+ID0gQmFzZUV4cHJlc3Npb248VD4gJiB7XG5cdF90eXBlOiBcIkZ1bmN0aW9uXCI7XG5cdG9iaj86IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxvYmplY3Q+O1xuXHRmbjogc3RyaW5nO1xuXHRwYXJhbWV0ZXJzOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248YW55PltdO1xufTtcblxuZXhwb3J0IHR5cGUgQ29uY2F0RXhwcmVzc2lvbiA9IEJhc2VFeHByZXNzaW9uPHN0cmluZz4gJiB7XG5cdF90eXBlOiBcIkNvbmNhdFwiO1xuXHRleHByZXNzaW9uczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz5bXTtcbn07XG5cbmV4cG9ydCB0eXBlIExlbmd0aEV4cHJlc3Npb24gPSBCYXNlRXhwcmVzc2lvbjxzdHJpbmc+ICYge1xuXHRfdHlwZTogXCJMZW5ndGhcIjtcblx0cGF0aEluTW9kZWw6IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxhbnk+O1xufTtcblxudHlwZSBVbnJlc29sdmVhYmxlUGF0aEV4cHJlc3Npb24gPSBCYXNlRXhwcmVzc2lvbjxzdHJpbmc+ICYge1xuXHRfdHlwZTogXCJVbnJlc29sdmFibGVcIjtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYgUGF0aEluTW9kZWxFeHByZXNzaW9uXG4gKi9cbmV4cG9ydCB0eXBlIFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUPiA9IEJhc2VFeHByZXNzaW9uPFQ+ICYge1xuXHRfdHlwZTogXCJQYXRoSW5Nb2RlbFwiO1xuXHRtb2RlbE5hbWU/OiBzdHJpbmc7XG5cdHBhdGg6IHN0cmluZztcblx0dGFyZ2V0RW50aXR5U2V0PzogRW50aXR5U2V0O1xuXHR0eXBlPzogc3RyaW5nO1xuXHRjb25zdHJhaW50cz86IGFueTtcblx0cGFyYW1ldGVycz86IGFueTtcblx0dGFyZ2V0VHlwZT86IHN0cmluZztcblx0bW9kZT86IHN0cmluZztcblx0Zm9ybWF0T3B0aW9ucz86IGFueTtcbn07XG5cbmV4cG9ydCB0eXBlIEVtYmVkZGVkVUk1QmluZGluZ0V4cHJlc3Npb248VD4gPSBCYXNlRXhwcmVzc2lvbjxUPiAmIHtcblx0X3R5cGU6IFwiRW1iZWRkZWRCaW5kaW5nXCI7XG5cdHZhbHVlOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBFbWJlZGRlZFVJNUV4cHJlc3Npb25CaW5kaW5nRXhwcmVzc2lvbjxUPiA9IEJhc2VFeHByZXNzaW9uPFQ+ICYge1xuXHRfdHlwZTogXCJFbWJlZGRlZEV4cHJlc3Npb25CaW5kaW5nXCI7XG5cdHZhbHVlOiBzdHJpbmc7XG59O1xuXG50eXBlIENvbXBhcmlzb25PcGVyYXRvciA9IFwiPT09XCIgfCBcIiE9PVwiIHwgXCI+PVwiIHwgXCI+XCIgfCBcIjw9XCIgfCBcIjxcIjtcbmV4cG9ydCB0eXBlIENvbXBhcmlzb25FeHByZXNzaW9uID0gQmFzZUV4cHJlc3Npb248Ym9vbGVhbj4gJiB7XG5cdF90eXBlOiBcIkNvbXBhcmlzb25cIjtcblx0b3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcjtcblx0b3BlcmFuZDE6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxhbnk+O1xuXHRvcGVyYW5kMjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGFueT47XG59O1xuXG5leHBvcnQgdHlwZSBJZkVsc2VFeHByZXNzaW9uPFQ+ID0gQmFzZUV4cHJlc3Npb248VD4gJiB7XG5cdF90eXBlOiBcIklmRWxzZVwiO1xuXHRjb25kaXRpb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcblx0b25UcnVlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdG9uRmFsc2U6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcbn07XG5cbi8qKlxuICogQW4gZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRlcyB0byB0eXBlIFQuXG4gKlxuICogQHR5cGVkZWYgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uXG4gKi9cbmV4cG9ydCB0eXBlIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPiA9XG5cdHwgVW5yZXNvbHZlYWJsZVBhdGhFeHByZXNzaW9uXG5cdHwgQ29uc3RhbnRFeHByZXNzaW9uPFQ+XG5cdHwgU2V0RXhwcmVzc2lvblxuXHR8IE5vdEV4cHJlc3Npb25cblx0fCBUcnV0aHlFeHByZXNzaW9uXG5cdHwgQ29uY2F0RXhwcmVzc2lvblxuXHR8IExlbmd0aEV4cHJlc3Npb25cblx0fCBQYXRoSW5Nb2RlbEV4cHJlc3Npb248VD5cblx0fCBFbWJlZGRlZFVJNUJpbmRpbmdFeHByZXNzaW9uPFQ+XG5cdHwgRW1iZWRkZWRVSTVFeHByZXNzaW9uQmluZGluZ0V4cHJlc3Npb248VD5cblx0fCBDb21wYXJpc29uRXhwcmVzc2lvblxuXHR8IElmRWxzZUV4cHJlc3Npb248VD5cblx0fCBGb3JtYXR0ZXJFeHByZXNzaW9uPFQ+XG5cdHwgQ29tcGxleFR5cGVFeHByZXNzaW9uPFQ+XG5cdHwgUmVmZXJlbmNlRXhwcmVzc2lvblxuXHR8IEZ1bmN0aW9uRXhwcmVzc2lvbjxUPjtcblxuLyoqXG4gKiBBbiBleHByZXNzaW9uIHRoYXQgZXZhbHVhdGVzIHRvIHR5cGUgVCwgb3IgYSBjb25zdGFudCB2YWx1ZSBvZiB0eXBlIFRcbiAqL1xudHlwZSBFeHByZXNzaW9uT3JQcmltaXRpdmU8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+ID0gQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+IHwgVDtcblxuZXhwb3J0IGNvbnN0IHVucmVzb2x2ZWFibGVFeHByZXNzaW9uOiBVbnJlc29sdmVhYmxlUGF0aEV4cHJlc3Npb24gPSB7XG5cdF90eXBlOiBcIlVucmVzb2x2YWJsZVwiXG59O1xuXG5mdW5jdGlvbiBlc2NhcGVYbWxBdHRyaWJ1dGUoaW5wdXRTdHJpbmc6IHN0cmluZykge1xuXHRyZXR1cm4gaW5wdXRTdHJpbmcucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzVW5yZXNvbHZlYWJsZUV4cHJlc3Npb24oLi4uZXhwcmVzc2lvbnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxhbnk+W10pOiBib29sZWFuIHtcblx0cmV0dXJuIGV4cHJlc3Npb25zLmZpbmQoKGV4cHIpID0+IGV4cHIuX3R5cGUgPT09IFwiVW5yZXNvbHZhYmxlXCIpICE9PSB1bmRlZmluZWQ7XG59XG4vKipcbiAqIENoZWNrIHR3byBleHByZXNzaW9ucyBmb3IgKGRlZXApIGVxdWFsaXR5LlxuICpcbiAqIEBwYXJhbSBhXG4gKiBAcGFyYW0gYlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSB0d28gZXhwcmVzc2lvbnMgYXJlIGVxdWFsXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbDxUPihhOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4sIGI6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPik6IGJvb2xlYW4ge1xuXHRpZiAoYS5fdHlwZSAhPT0gYi5fdHlwZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHN3aXRjaCAoYS5fdHlwZSkge1xuXHRcdGNhc2UgXCJVbnJlc29sdmFibGVcIjpcblx0XHRcdHJldHVybiBmYWxzZTsgLy8gVW5yZXNvbHZhYmxlIGlzIG5ldmVyIGVxdWFsIHRvIGFueXRoaW5nIGV2ZW4gaXRzZWxmXG5cdFx0Y2FzZSBcIkNvbnN0YW50XCI6XG5cdFx0Y2FzZSBcIkVtYmVkZGVkQmluZGluZ1wiOlxuXHRcdGNhc2UgXCJFbWJlZGRlZEV4cHJlc3Npb25CaW5kaW5nXCI6XG5cdFx0XHRyZXR1cm4gYS52YWx1ZSA9PT0gKGIgYXMgQ29uc3RhbnRFeHByZXNzaW9uPFQ+KS52YWx1ZTtcblxuXHRcdGNhc2UgXCJOb3RcIjpcblx0XHRcdHJldHVybiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGEub3BlcmFuZCwgKGIgYXMgTm90RXhwcmVzc2lvbikub3BlcmFuZCk7XG5cdFx0Y2FzZSBcIlRydXRoeVwiOlxuXHRcdFx0cmV0dXJuIF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoYS5vcGVyYW5kLCAoYiBhcyBUcnV0aHlFeHByZXNzaW9uKS5vcGVyYW5kKTtcblx0XHRjYXNlIFwiU2V0XCI6XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRhLm9wZXJhdG9yID09PSAoYiBhcyBTZXRFeHByZXNzaW9uKS5vcGVyYXRvciAmJlxuXHRcdFx0XHRhLm9wZXJhbmRzLmxlbmd0aCA9PT0gKGIgYXMgU2V0RXhwcmVzc2lvbikub3BlcmFuZHMubGVuZ3RoICYmXG5cdFx0XHRcdGEub3BlcmFuZHMuZXZlcnkoKGV4cHJlc3Npb24pID0+XG5cdFx0XHRcdFx0KGIgYXMgU2V0RXhwcmVzc2lvbikub3BlcmFuZHMuc29tZSgob3RoZXJFeHByZXNzaW9uKSA9PiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGV4cHJlc3Npb24sIG90aGVyRXhwcmVzc2lvbikpXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cblx0XHRjYXNlIFwiSWZFbHNlXCI6XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGEuY29uZGl0aW9uLCAoYiBhcyBJZkVsc2VFeHByZXNzaW9uPFQ+KS5jb25kaXRpb24pICYmXG5cdFx0XHRcdF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoYS5vblRydWUsIChiIGFzIElmRWxzZUV4cHJlc3Npb248VD4pLm9uVHJ1ZSkgJiZcblx0XHRcdFx0X2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChhLm9uRmFsc2UsIChiIGFzIElmRWxzZUV4cHJlc3Npb248VD4pLm9uRmFsc2UpXG5cdFx0XHQpO1xuXG5cdFx0Y2FzZSBcIkNvbXBhcmlzb25cIjpcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGEub3BlcmF0b3IgPT09IChiIGFzIENvbXBhcmlzb25FeHByZXNzaW9uKS5vcGVyYXRvciAmJlxuXHRcdFx0XHRfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGEub3BlcmFuZDEsIChiIGFzIENvbXBhcmlzb25FeHByZXNzaW9uKS5vcGVyYW5kMSkgJiZcblx0XHRcdFx0X2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChhLm9wZXJhbmQyLCAoYiBhcyBDb21wYXJpc29uRXhwcmVzc2lvbikub3BlcmFuZDIpXG5cdFx0XHQpO1xuXG5cdFx0Y2FzZSBcIkNvbmNhdFwiOlxuXHRcdFx0Y29uc3QgYUV4cHJlc3Npb25zID0gYS5leHByZXNzaW9ucztcblx0XHRcdGNvbnN0IGJFeHByZXNzaW9ucyA9IChiIGFzIENvbmNhdEV4cHJlc3Npb24pLmV4cHJlc3Npb25zO1xuXHRcdFx0aWYgKGFFeHByZXNzaW9ucy5sZW5ndGggIT09IGJFeHByZXNzaW9ucy5sZW5ndGgpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGFFeHByZXNzaW9ucy5ldmVyeSgoZXhwcmVzc2lvbiwgaW5kZXgpID0+IHtcblx0XHRcdFx0cmV0dXJuIF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoZXhwcmVzc2lvbiwgYkV4cHJlc3Npb25zW2luZGV4XSk7XG5cdFx0XHR9KTtcblxuXHRcdGNhc2UgXCJMZW5ndGhcIjpcblx0XHRcdHJldHVybiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGEucGF0aEluTW9kZWwsIChiIGFzIExlbmd0aEV4cHJlc3Npb24pLnBhdGhJbk1vZGVsKTtcblxuXHRcdGNhc2UgXCJQYXRoSW5Nb2RlbFwiOlxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0YS5tb2RlbE5hbWUgPT09IChiIGFzIFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUPikubW9kZWxOYW1lICYmXG5cdFx0XHRcdGEucGF0aCA9PT0gKGIgYXMgUGF0aEluTW9kZWxFeHByZXNzaW9uPFQ+KS5wYXRoICYmXG5cdFx0XHRcdGEudGFyZ2V0RW50aXR5U2V0ID09PSAoYiBhcyBQYXRoSW5Nb2RlbEV4cHJlc3Npb248VD4pLnRhcmdldEVudGl0eVNldFxuXHRcdFx0KTtcblxuXHRcdGNhc2UgXCJGb3JtYXR0ZXJcIjpcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGEuZm4gPT09IChiIGFzIEZvcm1hdHRlckV4cHJlc3Npb248VD4pLmZuICYmXG5cdFx0XHRcdGEucGFyYW1ldGVycy5sZW5ndGggPT09IChiIGFzIEZvcm1hdHRlckV4cHJlc3Npb248VD4pLnBhcmFtZXRlcnMubGVuZ3RoICYmXG5cdFx0XHRcdGEucGFyYW1ldGVycy5ldmVyeSgodmFsdWUsIGluZGV4KSA9PiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKChiIGFzIEZvcm1hdHRlckV4cHJlc3Npb248VD4pLnBhcmFtZXRlcnNbaW5kZXhdLCB2YWx1ZSkpXG5cdFx0XHQpO1xuXHRcdGNhc2UgXCJDb21wbGV4VHlwZVwiOlxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0YS50eXBlID09PSAoYiBhcyBDb21wbGV4VHlwZUV4cHJlc3Npb248VD4pLnR5cGUgJiZcblx0XHRcdFx0YS5iaW5kaW5nUGFyYW1ldGVycy5sZW5ndGggPT09IChiIGFzIENvbXBsZXhUeXBlRXhwcmVzc2lvbjxUPikuYmluZGluZ1BhcmFtZXRlcnMubGVuZ3RoICYmXG5cdFx0XHRcdGEuYmluZGluZ1BhcmFtZXRlcnMuZXZlcnkoKHZhbHVlLCBpbmRleCkgPT5cblx0XHRcdFx0XHRfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKChiIGFzIENvbXBsZXhUeXBlRXhwcmVzc2lvbjxUPikuYmluZGluZ1BhcmFtZXRlcnNbaW5kZXhdLCB2YWx1ZSlcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHRjYXNlIFwiRnVuY3Rpb25cIjpcblx0XHRcdGNvbnN0IG90aGVyRnVuY3Rpb24gPSBiIGFzIEZ1bmN0aW9uRXhwcmVzc2lvbjxUPjtcblx0XHRcdGlmIChhLm9iaiA9PT0gdW5kZWZpbmVkIHx8IG90aGVyRnVuY3Rpb24ub2JqID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuIGEub2JqID09PSBvdGhlckZ1bmN0aW9uO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRhLmZuID09PSBvdGhlckZ1bmN0aW9uLmZuICYmXG5cdFx0XHRcdF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoYS5vYmosIG90aGVyRnVuY3Rpb24ub2JqKSAmJlxuXHRcdFx0XHRhLnBhcmFtZXRlcnMubGVuZ3RoID09PSBvdGhlckZ1bmN0aW9uLnBhcmFtZXRlcnMubGVuZ3RoICYmXG5cdFx0XHRcdGEucGFyYW1ldGVycy5ldmVyeSgodmFsdWUsIGluZGV4KSA9PiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKG90aGVyRnVuY3Rpb24ucGFyYW1ldGVyc1tpbmRleF0sIHZhbHVlKSlcblx0XHRcdCk7XG5cblx0XHRjYXNlIFwiUmVmXCI6XG5cdFx0XHRyZXR1cm4gYS5yZWYgPT09IChiIGFzIFJlZmVyZW5jZUV4cHJlc3Npb24pLnJlZjtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBuZXN0ZWQgU2V0RXhwcmVzc2lvbiBieSBpbmxpbmluZyBvcGVyYW5kcyBvZiB0eXBlIFNldEV4cHJlc3Npb24gd2l0aCB0aGUgc2FtZSBvcGVyYXRvci5cbiAqXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgZXhwcmVzc2lvbiB0byBmbGF0dGVuXG4gKiBAcmV0dXJucyBBIG5ldyBTZXRFeHByZXNzaW9uIHdpdGggdGhlIHNhbWUgb3BlcmF0b3JcbiAqL1xuZnVuY3Rpb24gZmxhdHRlblNldEV4cHJlc3Npb24oZXhwcmVzc2lvbjogU2V0RXhwcmVzc2lvbik6IFNldEV4cHJlc3Npb24ge1xuXHRyZXR1cm4gZXhwcmVzc2lvbi5vcGVyYW5kcy5yZWR1Y2UoXG5cdFx0KHJlc3VsdDogU2V0RXhwcmVzc2lvbiwgb3BlcmFuZCkgPT4ge1xuXHRcdFx0Y29uc3QgY2FuZGlkYXRlc0ZvckZsYXR0ZW5pbmcgPVxuXHRcdFx0XHRvcGVyYW5kLl90eXBlID09PSBcIlNldFwiICYmIG9wZXJhbmQub3BlcmF0b3IgPT09IGV4cHJlc3Npb24ub3BlcmF0b3IgPyBvcGVyYW5kLm9wZXJhbmRzIDogW29wZXJhbmRdO1xuXHRcdFx0Y2FuZGlkYXRlc0ZvckZsYXR0ZW5pbmcuZm9yRWFjaCgoY2FuZGlkYXRlKSA9PiB7XG5cdFx0XHRcdGlmIChyZXN1bHQub3BlcmFuZHMuZXZlcnkoKGUpID0+ICFfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGUsIGNhbmRpZGF0ZSkpKSB7XG5cdFx0XHRcdFx0cmVzdWx0Lm9wZXJhbmRzLnB1c2goY2FuZGlkYXRlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0sXG5cdFx0eyBfdHlwZTogXCJTZXRcIiwgb3BlcmF0b3I6IGV4cHJlc3Npb24ub3BlcmF0b3IsIG9wZXJhbmRzOiBbXSB9XG5cdCk7XG59XG5cbi8qKlxuICogRGV0ZWN0cyB3aGV0aGVyIGFuIGFycmF5IG9mIGJvb2xlYW4gZXhwcmVzc2lvbnMgY29udGFpbnMgYW4gZXhwcmVzc2lvbiBhbmQgaXRzIG5lZ2F0aW9uLlxuICpcbiAqIEBwYXJhbSBleHByZXNzaW9ucyBBcnJheSBvZiBleHByZXNzaW9uc1xuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBzZXQgb2YgZXhwcmVzc2lvbnMgY29udGFpbnMgYW4gZXhwcmVzc2lvbiBhbmQgaXRzIG5lZ2F0aW9uXG4gKi9cbmZ1bmN0aW9uIGhhc09wcG9zaXRlRXhwcmVzc2lvbnMoZXhwcmVzc2lvbnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdKTogYm9vbGVhbiB7XG5cdGNvbnN0IG5lZ2F0ZWRFeHByZXNzaW9ucyA9IGV4cHJlc3Npb25zLm1hcChub3QpO1xuXHRyZXR1cm4gZXhwcmVzc2lvbnMuc29tZSgoZXhwcmVzc2lvbiwgaW5kZXgpID0+IHtcblx0XHRmb3IgKGxldCBpID0gaW5kZXggKyAxOyBpIDwgbmVnYXRlZEV4cHJlc3Npb25zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChleHByZXNzaW9uLCBuZWdhdGVkRXhwcmVzc2lvbnNbaV0pKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0pO1xufVxuXG4vKipcbiAqIExvZ2ljYWwgYGFuZGAgZXhwcmVzc2lvbi5cbiAqXG4gKiBUaGUgZXhwcmVzc2lvbiBpcyBzaW1wbGlmaWVkIHRvIGZhbHNlIGlmIHRoaXMgY2FuIGJlIGRlY2lkZWQgc3RhdGljYWxseSAodGhhdCBpcywgaWYgb25lIG9wZXJhbmQgaXMgYSBjb25zdGFudFxuICogZmFsc2Ugb3IgaWYgdGhlIGV4cHJlc3Npb24gY29udGFpbnMgYW4gb3BlcmFuZCBhbmQgaXRzIG5lZ2F0aW9uKS5cbiAqXG4gKiBAcGFyYW0gb3BlcmFuZHMgRXhwcmVzc2lvbnMgdG8gY29ubmVjdCBieSBgYW5kYFxuICogQHJldHVybnMgRXhwcmVzc2lvbiBldmFsdWF0aW5nIHRvIGJvb2xlYW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFuZCguLi5vcGVyYW5kczogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPGJvb2xlYW4+W10pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBleHByZXNzaW9ucyA9IGZsYXR0ZW5TZXRFeHByZXNzaW9uKHtcblx0XHRfdHlwZTogXCJTZXRcIixcblx0XHRvcGVyYXRvcjogXCImJlwiLFxuXHRcdG9wZXJhbmRzOiBvcGVyYW5kcy5tYXAod3JhcFByaW1pdGl2ZSlcblx0fSkub3BlcmFuZHM7XG5cblx0aWYgKGhhc1VucmVzb2x2ZWFibGVFeHByZXNzaW9uKC4uLmV4cHJlc3Npb25zKSkge1xuXHRcdHJldHVybiB1bnJlc29sdmVhYmxlRXhwcmVzc2lvbjtcblx0fVxuXHRsZXQgaXNTdGF0aWNGYWxzZSA9IGZhbHNlO1xuXHRjb25zdCBub25Ucml2aWFsRXhwcmVzc2lvbiA9IGV4cHJlc3Npb25zLmZpbHRlcigoZXhwcmVzc2lvbikgPT4ge1xuXHRcdGlmIChpc0ZhbHNlKGV4cHJlc3Npb24pKSB7XG5cdFx0XHRpc1N0YXRpY0ZhbHNlID0gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuICFpc0NvbnN0YW50KGV4cHJlc3Npb24pO1xuXHR9KTtcblx0aWYgKGlzU3RhdGljRmFsc2UpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHR9IGVsc2UgaWYgKG5vblRyaXZpYWxFeHByZXNzaW9uLmxlbmd0aCA9PT0gMCkge1xuXHRcdC8vIFJlc29sdmUgdGhlIGNvbnN0YW50IHRoZW5cblx0XHRjb25zdCBpc1ZhbGlkID0gZXhwcmVzc2lvbnMucmVkdWNlKChyZXN1bHQsIGV4cHJlc3Npb24pID0+IHJlc3VsdCAmJiBpc1RydWUoZXhwcmVzc2lvbiksIHRydWUpO1xuXHRcdHJldHVybiBjb25zdGFudChpc1ZhbGlkKTtcblx0fSBlbHNlIGlmIChub25Ucml2aWFsRXhwcmVzc2lvbi5sZW5ndGggPT09IDEpIHtcblx0XHRyZXR1cm4gbm9uVHJpdmlhbEV4cHJlc3Npb25bMF07XG5cdH0gZWxzZSBpZiAoaGFzT3Bwb3NpdGVFeHByZXNzaW9ucyhub25Ucml2aWFsRXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB7XG5cdFx0XHRfdHlwZTogXCJTZXRcIixcblx0XHRcdG9wZXJhdG9yOiBcIiYmXCIsXG5cdFx0XHRvcGVyYW5kczogbm9uVHJpdmlhbEV4cHJlc3Npb25cblx0XHR9O1xuXHR9XG59XG5cbi8qKlxuICogTG9naWNhbCBgb3JgIGV4cHJlc3Npb24uXG4gKlxuICogVGhlIGV4cHJlc3Npb24gaXMgc2ltcGxpZmllZCB0byB0cnVlIGlmIHRoaXMgY2FuIGJlIGRlY2lkZWQgc3RhdGljYWxseSAodGhhdCBpcywgaWYgb25lIG9wZXJhbmQgaXMgYSBjb25zdGFudFxuICogdHJ1ZSBvciBpZiB0aGUgZXhwcmVzc2lvbiBjb250YWlucyBhbiBvcGVyYW5kIGFuZCBpdHMgbmVnYXRpb24pLlxuICpcbiAqIEBwYXJhbSBvcGVyYW5kcyBFeHByZXNzaW9ucyB0byBjb25uZWN0IGJ5IGBvcmBcbiAqIEByZXR1cm5zIEV4cHJlc3Npb24gZXZhbHVhdGluZyB0byBib29sZWFuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvciguLi5vcGVyYW5kczogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPGJvb2xlYW4+W10pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBleHByZXNzaW9ucyA9IGZsYXR0ZW5TZXRFeHByZXNzaW9uKHtcblx0XHRfdHlwZTogXCJTZXRcIixcblx0XHRvcGVyYXRvcjogXCJ8fFwiLFxuXHRcdG9wZXJhbmRzOiBvcGVyYW5kcy5tYXAod3JhcFByaW1pdGl2ZSlcblx0fSkub3BlcmFuZHM7XG5cdGlmIChoYXNVbnJlc29sdmVhYmxlRXhwcmVzc2lvbiguLi5leHByZXNzaW9ucykpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZlYWJsZUV4cHJlc3Npb247XG5cdH1cblx0bGV0IGlzU3RhdGljVHJ1ZSA9IGZhbHNlO1xuXHRjb25zdCBub25Ucml2aWFsRXhwcmVzc2lvbiA9IGV4cHJlc3Npb25zLmZpbHRlcigoZXhwcmVzc2lvbikgPT4ge1xuXHRcdGlmIChpc1RydWUoZXhwcmVzc2lvbikpIHtcblx0XHRcdGlzU3RhdGljVHJ1ZSA9IHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiAhaXNDb25zdGFudChleHByZXNzaW9uKSB8fCBleHByZXNzaW9uLnZhbHVlO1xuXHR9KTtcblx0aWYgKGlzU3RhdGljVHJ1ZSkge1xuXHRcdHJldHVybiBjb25zdGFudCh0cnVlKTtcblx0fSBlbHNlIGlmIChub25Ucml2aWFsRXhwcmVzc2lvbi5sZW5ndGggPT09IDApIHtcblx0XHQvLyBSZXNvbHZlIHRoZSBjb25zdGFudCB0aGVuXG5cdFx0Y29uc3QgaXNWYWxpZCA9IGV4cHJlc3Npb25zLnJlZHVjZSgocmVzdWx0LCBleHByZXNzaW9uKSA9PiByZXN1bHQgJiYgaXNUcnVlKGV4cHJlc3Npb24pLCB0cnVlKTtcblx0XHRyZXR1cm4gY29uc3RhbnQoaXNWYWxpZCk7XG5cdH0gZWxzZSBpZiAobm9uVHJpdmlhbEV4cHJlc3Npb24ubGVuZ3RoID09PSAxKSB7XG5cdFx0cmV0dXJuIG5vblRyaXZpYWxFeHByZXNzaW9uWzBdO1xuXHR9IGVsc2UgaWYgKGhhc09wcG9zaXRlRXhwcmVzc2lvbnMobm9uVHJpdmlhbEV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KHRydWUpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB7XG5cdFx0XHRfdHlwZTogXCJTZXRcIixcblx0XHRcdG9wZXJhdG9yOiBcInx8XCIsXG5cdFx0XHRvcGVyYW5kczogbm9uVHJpdmlhbEV4cHJlc3Npb25cblx0XHR9O1xuXHR9XG59XG5cbi8qKlxuICogTG9naWNhbCBgbm90YCBvcGVyYXRvci5cbiAqXG4gKiBAcGFyYW0gb3BlcmFuZCBUaGUgZXhwcmVzc2lvbiB0byByZXZlcnNlXG4gKiBAcmV0dXJucyBUaGUgcmVzdWx0aW5nIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgdG8gYm9vbGVhblxuICovXG5leHBvcnQgZnVuY3Rpb24gbm90KG9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdG9wZXJhbmQgPSB3cmFwUHJpbWl0aXZlKG9wZXJhbmQpO1xuXHRpZiAoaGFzVW5yZXNvbHZlYWJsZUV4cHJlc3Npb24ob3BlcmFuZCkpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZlYWJsZUV4cHJlc3Npb247XG5cdH0gZWxzZSBpZiAoaXNDb25zdGFudChvcGVyYW5kKSkge1xuXHRcdHJldHVybiBjb25zdGFudCghb3BlcmFuZC52YWx1ZSk7XG5cdH0gZWxzZSBpZiAoXG5cdFx0dHlwZW9mIG9wZXJhbmQgPT09IFwib2JqZWN0XCIgJiZcblx0XHRvcGVyYW5kLl90eXBlID09PSBcIlNldFwiICYmXG5cdFx0b3BlcmFuZC5vcGVyYXRvciA9PT0gXCJ8fFwiICYmXG5cdFx0b3BlcmFuZC5vcGVyYW5kcy5ldmVyeSgoZXhwcmVzc2lvbikgPT4gaXNDb25zdGFudChleHByZXNzaW9uKSB8fCBpc0NvbXBhcmlzb24oZXhwcmVzc2lvbikpXG5cdCkge1xuXHRcdHJldHVybiBhbmQoLi4ub3BlcmFuZC5vcGVyYW5kcy5tYXAoKGV4cHJlc3Npb24pID0+IG5vdChleHByZXNzaW9uKSkpO1xuXHR9IGVsc2UgaWYgKFxuXHRcdHR5cGVvZiBvcGVyYW5kID09PSBcIm9iamVjdFwiICYmXG5cdFx0b3BlcmFuZC5fdHlwZSA9PT0gXCJTZXRcIiAmJlxuXHRcdG9wZXJhbmQub3BlcmF0b3IgPT09IFwiJiZcIiAmJlxuXHRcdG9wZXJhbmQub3BlcmFuZHMuZXZlcnkoKGV4cHJlc3Npb24pID0+IGlzQ29uc3RhbnQoZXhwcmVzc2lvbikgfHwgaXNDb21wYXJpc29uKGV4cHJlc3Npb24pKVxuXHQpIHtcblx0XHRyZXR1cm4gb3IoLi4ub3BlcmFuZC5vcGVyYW5kcy5tYXAoKGV4cHJlc3Npb24pID0+IG5vdChleHByZXNzaW9uKSkpO1xuXHR9IGVsc2UgaWYgKGlzQ29tcGFyaXNvbihvcGVyYW5kKSkge1xuXHRcdC8vIENyZWF0ZSB0aGUgcmV2ZXJzZSBjb21wYXJpc29uXG5cdFx0c3dpdGNoIChvcGVyYW5kLm9wZXJhdG9yKSB7XG5cdFx0XHRjYXNlIFwiIT09XCI6XG5cdFx0XHRcdHJldHVybiB7IC4uLm9wZXJhbmQsIG9wZXJhdG9yOiBcIj09PVwiIH07XG5cdFx0XHRjYXNlIFwiPFwiOlxuXHRcdFx0XHRyZXR1cm4geyAuLi5vcGVyYW5kLCBvcGVyYXRvcjogXCI+PVwiIH07XG5cdFx0XHRjYXNlIFwiPD1cIjpcblx0XHRcdFx0cmV0dXJuIHsgLi4ub3BlcmFuZCwgb3BlcmF0b3I6IFwiPlwiIH07XG5cdFx0XHRjYXNlIFwiPT09XCI6XG5cdFx0XHRcdHJldHVybiB7IC4uLm9wZXJhbmQsIG9wZXJhdG9yOiBcIiE9PVwiIH07XG5cdFx0XHRjYXNlIFwiPlwiOlxuXHRcdFx0XHRyZXR1cm4geyAuLi5vcGVyYW5kLCBvcGVyYXRvcjogXCI8PVwiIH07XG5cdFx0XHRjYXNlIFwiPj1cIjpcblx0XHRcdFx0cmV0dXJuIHsgLi4ub3BlcmFuZCwgb3BlcmF0b3I6IFwiPFwiIH07XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG9wZXJhbmQuX3R5cGUgPT09IFwiTm90XCIpIHtcblx0XHRyZXR1cm4gb3BlcmFuZC5vcGVyYW5kO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRfdHlwZTogXCJOb3RcIixcblx0XHRvcGVyYW5kOiBvcGVyYW5kXG5cdH07XG59XG5cbi8qKlxuICogRXZhbHVhdGVzIHdoZXRoZXIgYSBiaW5kaW5nIGV4cHJlc3Npb24gaXMgZXF1YWwgdG8gdHJ1ZSB3aXRoIGEgbG9vc2UgZXF1YWxpdHkuXG4gKlxuICogQHBhcmFtIG9wZXJhbmQgVGhlIGV4cHJlc3Npb24gdG8gY2hlY2tcbiAqIEByZXR1cm5zIFRoZSByZXN1bHRpbmcgZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRlcyB0byBib29sZWFuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1RydXRoeShvcGVyYW5kOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGlmIChpc0NvbnN0YW50KG9wZXJhbmQpKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KCEhb3BlcmFuZC52YWx1ZSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdF90eXBlOiBcIlRydXRoeVwiLFxuXHRcdFx0b3BlcmFuZDogb3BlcmFuZFxuXHRcdH07XG5cdH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgYmluZGluZyBleHByZXNzaW9uIHRoYXQgd2lsbCBiZSBldmFsdWF0ZWQgYnkgdGhlIGNvcnJlc3BvbmRpbmcgbW9kZWwuXG4gKlxuICogQHBhcmFtIHBhdGhcbiAqIEBwYXJhbSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB2aXNpdGVkTmF2aWdhdGlvblBhdGhzXG4gKiBAcGFyYW0gcGF0aFZpc2l0b3JcbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gcmVwcmVzZW50YXRpbmcgdGhhdCBwYXRoIGluIHRoZSBtb2RlbFxuICogQGRlcHJlY2F0ZWQgdXNlIHBhdGhJbk1vZGVsIGluc3RlYWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJpbmRpbmdFeHByZXNzaW9uPFRhcmdldFR5cGUgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0cGF0aDogYW55LFxuXHRtb2RlbE5hbWU/OiBzdHJpbmcsXG5cdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdID0gW10sXG5cdHBhdGhWaXNpdG9yPzogRnVuY3Rpb25cbik6IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUYXJnZXRUeXBlPiB8IFVucmVzb2x2ZWFibGVQYXRoRXhwcmVzc2lvbiB7XG5cdHJldHVybiBwYXRoSW5Nb2RlbChwYXRoLCBtb2RlbE5hbWUsIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgYmluZGluZyBleHByZXNzaW9uIHRoYXQgd2lsbCBiZSBldmFsdWF0ZWQgYnkgdGhlIGNvcnJlc3BvbmRpbmcgbW9kZWwuXG4gKlxuICogQHRlbXBsYXRlIFRhcmdldFR5cGVcbiAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIG9uIHRoZSBtb2RlbFxuICogQHBhcmFtIFttb2RlbE5hbWVdIFRoZSBuYW1lIG9mIHRoZSBtb2RlbFxuICogQHBhcmFtIFt2aXNpdGVkTmF2aWdhdGlvblBhdGhzXSBUaGUgcGF0aHMgZnJvbSB0aGUgcm9vdCBlbnRpdHlTZXRcbiAqIEBwYXJhbSBbcGF0aFZpc2l0b3JdIEEgZnVuY3Rpb24gdG8gbW9kaWZ5IHRoZSByZXN1bHRpbmcgcGF0aFxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiByZXByZXNlbnRhdGluZyB0aGF0IHBhdGggaW4gdGhlIG1vZGVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXRoSW5Nb2RlbChcblx0cGF0aDogdW5kZWZpbmVkLFxuXHRtb2RlbE5hbWU/OiBzdHJpbmcsXG5cdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHM/OiBzdHJpbmdbXSxcblx0cGF0aFZpc2l0b3I/OiBGdW5jdGlvblxuKTogVW5yZXNvbHZlYWJsZVBhdGhFeHByZXNzaW9uO1xuZXhwb3J0IGZ1bmN0aW9uIHBhdGhJbk1vZGVsPFRhcmdldFR5cGUgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0cGF0aDogc3RyaW5nLFxuXHRtb2RlbE5hbWU/OiBzdHJpbmcsXG5cdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHM/OiBzdHJpbmdbXSxcblx0cGF0aFZpc2l0b3I/OiB1bmRlZmluZWRcbik6IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUYXJnZXRUeXBlPjtcbmV4cG9ydCBmdW5jdGlvbiBwYXRoSW5Nb2RlbDxUYXJnZXRUeXBlIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdHBhdGg6IHN0cmluZyxcblx0bW9kZWxOYW1lPzogc3RyaW5nLFxuXHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzPzogc3RyaW5nW10sXG5cdHBhdGhWaXNpdG9yPzogRnVuY3Rpb25cbik6IFVucmVzb2x2ZWFibGVQYXRoRXhwcmVzc2lvbiB8IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUYXJnZXRUeXBlPjtcbmV4cG9ydCBmdW5jdGlvbiBwYXRoSW5Nb2RlbDxUYXJnZXRUeXBlIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdHBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0bW9kZWxOYW1lPzogc3RyaW5nLFxuXHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzPzogc3RyaW5nW10sXG5cdHBhdGhWaXNpdG9yPzogRnVuY3Rpb25cbik6IFVucmVzb2x2ZWFibGVQYXRoRXhwcmVzc2lvbiB8IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUYXJnZXRUeXBlPjtcbmV4cG9ydCBmdW5jdGlvbiBwYXRoSW5Nb2RlbDxUYXJnZXRUeXBlIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdHBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0bW9kZWxOYW1lPzogc3RyaW5nLFxuXHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSA9IFtdLFxuXHRwYXRoVmlzaXRvcj86IEZ1bmN0aW9uXG4pOiBVbnJlc29sdmVhYmxlUGF0aEV4cHJlc3Npb24gfCBQYXRoSW5Nb2RlbEV4cHJlc3Npb248VGFyZ2V0VHlwZT4ge1xuXHRpZiAocGF0aCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIHVucmVzb2x2ZWFibGVFeHByZXNzaW9uO1xuXHR9XG5cdGxldCB0YXJnZXRQYXRoO1xuXHRpZiAocGF0aFZpc2l0b3IpIHtcblx0XHR0YXJnZXRQYXRoID0gcGF0aFZpc2l0b3IocGF0aCk7XG5cdFx0aWYgKHRhcmdldFBhdGggPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIHVucmVzb2x2ZWFibGVFeHByZXNzaW9uO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRjb25zdCBsb2NhbFBhdGggPSB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLmNvbmNhdCgpO1xuXHRcdGxvY2FsUGF0aC5wdXNoKHBhdGgpO1xuXHRcdHRhcmdldFBhdGggPSBsb2NhbFBhdGguam9pbihcIi9cIik7XG5cdH1cblx0cmV0dXJuIHtcblx0XHRfdHlwZTogXCJQYXRoSW5Nb2RlbFwiLFxuXHRcdG1vZGVsTmFtZTogbW9kZWxOYW1lLFxuXHRcdHBhdGg6IHRhcmdldFBhdGhcblx0fTtcbn1cblxudHlwZSBQbGFpbkV4cHJlc3Npb25PYmplY3QgPSB7IFtpbmRleDogc3RyaW5nXTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGFueT4gfTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY29uc3RhbnQgZXhwcmVzc2lvbiBiYXNlZCBvbiBhIHByaW1pdGl2ZSB2YWx1ZS5cbiAqXG4gKiBAdGVtcGxhdGUgVFxuICogQHBhcmFtIHZhbHVlIFRoZSBjb25zdGFudCB0byB3cmFwIGluIGFuIGV4cHJlc3Npb25cbiAqIEByZXR1cm5zIFRoZSBjb25zdGFudCBleHByZXNzaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb25zdGFudDxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4odmFsdWU6IFQpOiBDb25zdGFudEV4cHJlc3Npb248VD4ge1xuXHRsZXQgY29uc3RhbnRWYWx1ZTogVDtcblxuXHRpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRcdGNvbnN0YW50VmFsdWUgPSB2YWx1ZS5tYXAod3JhcFByaW1pdGl2ZSkgYXMgVDtcblx0XHR9IGVsc2UgaWYgKGlzUHJpbWl0aXZlT2JqZWN0KHZhbHVlKSkge1xuXHRcdFx0Y29uc3RhbnRWYWx1ZSA9IHZhbHVlLnZhbHVlT2YoKSBhcyBUO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdGFudFZhbHVlID0gT2JqZWN0LmVudHJpZXModmFsdWUpLnJlZHVjZSgocGxhaW5FeHByZXNzaW9uLCBba2V5LCB2YWxdKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHdyYXBwZWRWYWx1ZSA9IHdyYXBQcmltaXRpdmUodmFsKTtcblx0XHRcdFx0aWYgKHdyYXBwZWRWYWx1ZS5fdHlwZSAhPT0gXCJDb25zdGFudFwiIHx8IHdyYXBwZWRWYWx1ZS52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0cGxhaW5FeHByZXNzaW9uW2tleV0gPSB3cmFwcGVkVmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHBsYWluRXhwcmVzc2lvbjtcblx0XHRcdH0sIHt9IGFzIFBsYWluRXhwcmVzc2lvbk9iamVjdCkgYXMgVDtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3RhbnRWYWx1ZSA9IHZhbHVlO1xuXHR9XG5cblx0cmV0dXJuIHsgX3R5cGU6IFwiQ29uc3RhbnRcIiwgdmFsdWU6IGNvbnN0YW50VmFsdWUgfTtcbn1cblxudHlwZSBFdmFsdWF0aW9uVHlwZSA9IFwiYm9vbGVhblwiO1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVCaW5kaW5nU3RyaW5nPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0dmFsdWU6IHN0cmluZyB8IGJvb2xlYW4gfCBudW1iZXIsXG5cdHRhcmdldFR5cGU/OiBFdmFsdWF0aW9uVHlwZVxuKTogQ29uc3RhbnRFeHByZXNzaW9uPFQ+IHwgRW1iZWRkZWRVSTVCaW5kaW5nRXhwcmVzc2lvbjxUPiB8IEVtYmVkZGVkVUk1RXhwcmVzc2lvbkJpbmRpbmdFeHByZXNzaW9uPFQ+IHtcblx0aWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIHZhbHVlLnN0YXJ0c1dpdGgoXCJ7XCIpKSB7XG5cdFx0aWYgKHZhbHVlLnN0YXJ0c1dpdGgoXCJ7PVwiKSkge1xuXHRcdFx0Ly8gRXhwcmVzc2lvbiBiaW5kaW5nLCB3ZSBjYW4ganVzdCByZW1vdmUgdGhlIG91dGVyIGJpbmRpbmcgdGhpbmdzXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRfdHlwZTogXCJFbWJlZGRlZEV4cHJlc3Npb25CaW5kaW5nXCIsXG5cdFx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0X3R5cGU6IFwiRW1iZWRkZWRCaW5kaW5nXCIsXG5cdFx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdFx0fTtcblx0XHR9XG5cdH0gZWxzZSBpZiAodGFyZ2V0VHlwZSA9PT0gXCJib29sZWFuXCIgJiYgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmICh2YWx1ZSA9PT0gXCJ0cnVlXCIgfHwgdmFsdWUgPT09IFwiZmFsc2VcIikpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQodmFsdWUgPT09IFwidHJ1ZVwiKSBhcyBDb25zdGFudEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KHZhbHVlKSBhcyBDb25zdGFudEV4cHJlc3Npb248VD47XG5cdH1cbn1cblxuLyoqXG4gKiBBIG5hbWVkIHJlZmVyZW5jZS5cbiAqXG4gKiBAc2VlIGZuXG4gKiBAcGFyYW0gcmVmZXJlbmNlIFJlZmVyZW5jZVxuICogQHJldHVybnMgVGhlIG9iamVjdCByZWZlcmVuY2UgYmluZGluZyBwYXJ0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWYocmVmZXJlbmNlOiBzdHJpbmcgfCBudWxsKTogUmVmZXJlbmNlRXhwcmVzc2lvbiB7XG5cdHJldHVybiB7IF90eXBlOiBcIlJlZlwiLCByZWY6IHJlZmVyZW5jZSB9O1xufVxuXG4vKipcbiAqIERldGVybWluZSB3aGV0aGVyIHRoZSB0eXBlIGlzIGFuIGV4cHJlc3Npb24uXG4gKlxuICogRXZlcnkgb2JqZWN0IGhhdmluZyBhIHByb3BlcnR5IG5hbWVkIGBfdHlwZWAgb2Ygc29tZSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFuIGV4cHJlc3Npb24sIGV2ZW4gaWYgdGhlcmUgaXMgYWN0dWFsbHlcbiAqIG5vIHN1Y2ggZXhwcmVzc2lvbiB0eXBlIHN1cHBvcnRlZC5cbiAqXG4gKiBAcGFyYW0gc29tZXRoaW5nIFR5cGUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgdHlwZSBpcyBjb25zaWRlcmVkIHRvIGJlIGFuIGV4cHJlc3Npb25cbiAqL1xuZnVuY3Rpb24gaXNFeHByZXNzaW9uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihzb21ldGhpbmc6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPik6IHNvbWV0aGluZyBpcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4ge1xuXHRyZXR1cm4gc29tZXRoaW5nICE9PSBudWxsICYmIHR5cGVvZiBzb21ldGhpbmcgPT09IFwib2JqZWN0XCIgJiYgKHNvbWV0aGluZyBhcyBCYXNlRXhwcmVzc2lvbjxUPikuX3R5cGUgIT09IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBXcmFwIGEgcHJpbWl0aXZlIGludG8gYSBjb25zdGFudCBleHByZXNzaW9uIGlmIGl0IGlzIG5vdCBhbHJlYWR5IGFuIGV4cHJlc3Npb24uXG4gKlxuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSBzb21ldGhpbmcgVGhlIG9iamVjdCB0byB3cmFwIGluIGEgQ29uc3RhbnQgZXhwcmVzc2lvblxuICogQHJldHVybnMgRWl0aGVyIHRoZSBvcmlnaW5hbCBvYmplY3Qgb3IgdGhlIHdyYXBwZWQgb25lIGRlcGVuZGluZyBvbiB0aGUgY2FzZVxuICovXG5mdW5jdGlvbiB3cmFwUHJpbWl0aXZlPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihzb21ldGhpbmc6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPiB7XG5cdGlmIChpc0V4cHJlc3Npb24oc29tZXRoaW5nKSkge1xuXHRcdHJldHVybiBzb21ldGhpbmc7XG5cdH1cblxuXHRyZXR1cm4gY29uc3RhbnQoc29tZXRoaW5nKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGV4cHJlc3Npb24gb3IgdmFsdWUgcHJvdmlkZWQgaXMgY29uc3RhbnQgb3Igbm90LlxuICpcbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtICBtYXliZUNvbnN0YW50IFRoZSBleHByZXNzaW9uIG9yIHByaW1pdGl2ZSB2YWx1ZSB0aGF0IGlzIHRvIGJlIGNoZWNrZWRcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBpcyBjb25zdGFudFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDb25zdGFudDxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4obWF5YmVDb25zdGFudDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+KTogbWF5YmVDb25zdGFudCBpcyBDb25zdGFudEV4cHJlc3Npb248VD4ge1xuXHRyZXR1cm4gdHlwZW9mIG1heWJlQ29uc3RhbnQgIT09IFwib2JqZWN0XCIgfHwgKG1heWJlQ29uc3RhbnQgYXMgQmFzZUV4cHJlc3Npb248VD4pLl90eXBlID09PSBcIkNvbnN0YW50XCI7XG59XG5cbmZ1bmN0aW9uIGlzVHJ1ZShleHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT4pIHtcblx0cmV0dXJuIGlzQ29uc3RhbnQoZXhwcmVzc2lvbikgJiYgZXhwcmVzc2lvbi52YWx1ZSA9PT0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNGYWxzZShleHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT4pIHtcblx0cmV0dXJuIGlzQ29uc3RhbnQoZXhwcmVzc2lvbikgJiYgZXhwcmVzc2lvbi52YWx1ZSA9PT0gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBleHByZXNzaW9uIG9yIHZhbHVlIHByb3ZpZGVkIGlzIGEgcGF0aCBpbiBtb2RlbCBleHByZXNzaW9uIG9yIG5vdC5cbiAqXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSAgbWF5YmVCaW5kaW5nIFRoZSBleHByZXNzaW9uIG9yIHByaW1pdGl2ZSB2YWx1ZSB0aGF0IGlzIHRvIGJlIGNoZWNrZWRcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBpcyBhIHBhdGggaW4gbW9kZWwgZXhwcmVzc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb248VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRtYXliZUJpbmRpbmc6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogbWF5YmVCaW5kaW5nIGlzIFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUPiB7XG5cdHJldHVybiB0eXBlb2YgbWF5YmVCaW5kaW5nID09PSBcIm9iamVjdFwiICYmIChtYXliZUJpbmRpbmcgYXMgQmFzZUV4cHJlc3Npb248VD4pLl90eXBlID09PSBcIlBhdGhJbk1vZGVsXCI7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBleHByZXNzaW9uIG9yIHZhbHVlIHByb3ZpZGVkIGlzIGEgY29tcGxleCB0eXBlIGV4cHJlc3Npb24uXG4gKlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gIG1heWJlQmluZGluZyBUaGUgZXhwcmVzc2lvbiBvciBwcmltaXRpdmUgdmFsdWUgdGhhdCBpcyB0byBiZSBjaGVja2VkXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgaXQgaXMgYSBwYXRoIGluIG1vZGVsIGV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ29tcGxleFR5cGVFeHByZXNzaW9uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0bWF5YmVCaW5kaW5nOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IG1heWJlQmluZGluZyBpcyBDb21wbGV4VHlwZUV4cHJlc3Npb248VD4ge1xuXHRyZXR1cm4gdHlwZW9mIG1heWJlQmluZGluZyA9PT0gXCJvYmplY3RcIiAmJiAobWF5YmVCaW5kaW5nIGFzIEJhc2VFeHByZXNzaW9uPFQ+KS5fdHlwZSA9PT0gXCJDb21wbGV4VHlwZVwiO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZXhwcmVzc2lvbiBwcm92aWRlZCBpcyBhIGNvbXBhcmlzb24gb3Igbm90LlxuICpcbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGV4cHJlc3Npb24gVGhlIGV4cHJlc3Npb25cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgZXhwcmVzc2lvbiBpcyBhIENvbXBhcmlzb25FeHByZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIGlzQ29tcGFyaXNvbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+KTogZXhwcmVzc2lvbiBpcyBDb21wYXJpc29uRXhwcmVzc2lvbiB7XG5cdHJldHVybiBleHByZXNzaW9uLl90eXBlID09PSBcIkNvbXBhcmlzb25cIjtcbn1cblxudHlwZSBDb21wbGV4QW5ub3RhdGlvbkV4cHJlc3Npb248UD4gPVxuXHR8IFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IEFwcGx5QW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBJZkFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgT3JBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IEFuZEFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgTmVBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IEVxQW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBOb3RBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IEd0QW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBHZUFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgTGVBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IEx0QW5ub3RhdGlvbkV4cHJlc3Npb248UD47XG5cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlT2JqZWN0KG9iamVjdFR5cGU6IG9iamVjdCk6IGJvb2xlYW4ge1xuXHRzd2l0Y2ggKG9iamVjdFR5cGUuY29uc3RydWN0b3IubmFtZSkge1xuXHRcdGNhc2UgXCJTdHJpbmdcIjpcblx0XHRjYXNlIFwiTnVtYmVyXCI6XG5cdFx0Y2FzZSBcIkJvb2xlYW5cIjpcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHBhc3NlZCBhbm5vdGF0aW9uIGFubm90YXRpb25WYWx1ZSBpcyBhIENvbXBsZXhBbm5vdGF0aW9uRXhwcmVzc2lvbi5cbiAqXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSAgYW5ub3RhdGlvblZhbHVlIFRoZSBhbm5vdGF0aW9uIGFubm90YXRpb25WYWx1ZSB0byBldmFsdWF0ZVxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3QgaXMgYSB7Q29tcGxleEFubm90YXRpb25FeHByZXNzaW9ufVxuICovXG5mdW5jdGlvbiBpc0NvbXBsZXhBbm5vdGF0aW9uRXhwcmVzc2lvbjxUPihhbm5vdGF0aW9uVmFsdWU6IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPFQ+KTogYW5ub3RhdGlvblZhbHVlIGlzIENvbXBsZXhBbm5vdGF0aW9uRXhwcmVzc2lvbjxUPiB7XG5cdHJldHVybiB0eXBlb2YgYW5ub3RhdGlvblZhbHVlID09PSBcIm9iamVjdFwiICYmICFpc1ByaW1pdGl2ZU9iamVjdChhbm5vdGF0aW9uVmFsdWUgYXMgb2JqZWN0KTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSB0aGUgY29ycmVzcG9uZGluZyBhbm5vdGF0aW9uVmFsdWUgZm9yIGEgZ2l2ZW4gYW5ub3RhdGlvbiBhbm5vdGF0aW9uVmFsdWUuXG4gKlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gYW5ub3RhdGlvblZhbHVlIFRoZSBzb3VyY2UgYW5ub3RhdGlvbiBhbm5vdGF0aW9uVmFsdWVcbiAqIEBwYXJhbSB2aXNpdGVkTmF2aWdhdGlvblBhdGhzIFRoZSBwYXRoIGZyb20gdGhlIHJvb3QgZW50aXR5IHNldFxuICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBEZWZhdWx0IHZhbHVlIGlmIHRoZSBhbm5vdGF0aW9uVmFsdWUgaXMgdW5kZWZpbmVkXG4gKiBAcGFyYW0gcGF0aFZpc2l0b3IgQSBmdW5jdGlvbiB0byBtb2RpZnkgdGhlIHJlc3VsdGluZyBwYXRoXG4gKiBAcmV0dXJucyBUaGUgYW5ub3RhdGlvblZhbHVlIGVxdWl2YWxlbnQgdG8gdGhhdCBhbm5vdGF0aW9uIGFubm90YXRpb25WYWx1ZVxuICogQGRlcHJlY2F0ZWQgdXNlIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiBpbnN0ZWFkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbm5vdGF0aW9uRXhwcmVzc2lvbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGFubm90YXRpb25WYWx1ZTogUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8VD4sXG5cdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdID0gW10sXG5cdGRlZmF1bHRWYWx1ZT86IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cGF0aFZpc2l0b3I/OiBGdW5jdGlvblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGVDYXN0PFQ+PiB7XG5cdHJldHVybiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oYW5ub3RhdGlvblZhbHVlLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBkZWZhdWx0VmFsdWUsIHBhdGhWaXNpdG9yKTtcbn1cbi8qKlxuICogR2VuZXJhdGUgdGhlIGNvcnJlc3BvbmRpbmcgYW5ub3RhdGlvblZhbHVlIGZvciBhIGdpdmVuIGFubm90YXRpb24gYW5ub3RhdGlvblZhbHVlLlxuICpcbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGFubm90YXRpb25WYWx1ZSBUaGUgc291cmNlIGFubm90YXRpb24gYW5ub3RhdGlvblZhbHVlXG4gKiBAcGFyYW0gdmlzaXRlZE5hdmlnYXRpb25QYXRocyBUaGUgcGF0aCBmcm9tIHRoZSByb290IGVudGl0eSBzZXRcbiAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgRGVmYXVsdCB2YWx1ZSBpZiB0aGUgYW5ub3RhdGlvblZhbHVlIGlzIHVuZGVmaW5lZFxuICogQHBhcmFtIHBhdGhWaXNpdG9yIEEgZnVuY3Rpb24gdG8gbW9kaWZ5IHRoZSByZXN1bHRpbmcgcGF0aFxuICogQHJldHVybnMgVGhlIGFubm90YXRpb25WYWx1ZSBlcXVpdmFsZW50IHRvIHRoYXQgYW5ub3RhdGlvbiBhbm5vdGF0aW9uVmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGFubm90YXRpb25WYWx1ZTogUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8VD4sXG5cdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdID0gW10sXG5cdGRlZmF1bHRWYWx1ZT86IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cGF0aFZpc2l0b3I/OiBGdW5jdGlvblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGVDYXN0PFQ+PiB7XG5cdGlmIChhbm5vdGF0aW9uVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiB3cmFwUHJpbWl0aXZlKGRlZmF1bHRWYWx1ZSBhcyBUKTtcblx0fVxuXG5cdGlmICghaXNDb21wbGV4QW5ub3RhdGlvbkV4cHJlc3Npb24oYW5ub3RhdGlvblZhbHVlKSkge1xuXHRcdHJldHVybiBjb25zdGFudChhbm5vdGF0aW9uVmFsdWUpO1xuXHR9XG5cblx0c3dpdGNoIChhbm5vdGF0aW9uVmFsdWUudHlwZSkge1xuXHRcdGNhc2UgXCJQYXRoXCI6XG5cdFx0XHRyZXR1cm4gcGF0aEluTW9kZWwoYW5ub3RhdGlvblZhbHVlLnBhdGgsIHVuZGVmaW5lZCwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpO1xuXHRcdGNhc2UgXCJJZlwiOlxuXHRcdFx0cmV0dXJuIGFubm90YXRpb25JZkV4cHJlc3Npb24oYW5ub3RhdGlvblZhbHVlLklmLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcik7XG5cdFx0Y2FzZSBcIk5vdFwiOlxuXHRcdFx0cmV0dXJuIG5vdChwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLk5vdCwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdFx0Y2FzZSBcIkVxXCI6XG5cdFx0XHRyZXR1cm4gZXF1YWwoXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuRXFbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKSxcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS5FcVsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0XHRjYXNlIFwiTmVcIjpcblx0XHRcdHJldHVybiBub3RFcXVhbChcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS5OZVswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLk5lWzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcilcblx0XHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHRcdGNhc2UgXCJHdFwiOlxuXHRcdFx0cmV0dXJuIGdyZWF0ZXJUaGFuKFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLkd0WzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciksXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuR3RbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKVxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdFx0Y2FzZSBcIkdlXCI6XG5cdFx0XHRyZXR1cm4gZ3JlYXRlck9yRXF1YWwoXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuR2VbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKSxcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS5HZVsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0XHRjYXNlIFwiTHRcIjpcblx0XHRcdHJldHVybiBsZXNzVGhhbihcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS5MdFswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLkx0WzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcilcblx0XHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHRcdGNhc2UgXCJMZVwiOlxuXHRcdFx0cmV0dXJuIGxlc3NPckVxdWFsKFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLkxlWzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciksXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuTGVbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKVxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdFx0Y2FzZSBcIk9yXCI6XG5cdFx0XHRyZXR1cm4gb3IoXG5cdFx0XHRcdC4uLmFubm90YXRpb25WYWx1ZS5Pci5tYXAoZnVuY3Rpb24gKG9yQ29uZGl0aW9uKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbjxib29sZWFuPihvckNvbmRpdGlvbiwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpO1xuXHRcdFx0XHR9KVxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdFx0Y2FzZSBcIkFuZFwiOlxuXHRcdFx0cmV0dXJuIGFuZChcblx0XHRcdFx0Li4uYW5ub3RhdGlvblZhbHVlLkFuZC5tYXAoZnVuY3Rpb24gKGFuZENvbmRpdGlvbikge1xuXHRcdFx0XHRcdHJldHVybiBwYXJzZUFubm90YXRpb25Db25kaXRpb248Ym9vbGVhbj4oYW5kQ29uZGl0aW9uLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcik7XG5cdFx0XHRcdH0pXG5cdFx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0XHRjYXNlIFwiQXBwbHlcIjpcblx0XHRcdHJldHVybiBhbm5vdGF0aW9uQXBwbHlFeHByZXNzaW9uKFxuXHRcdFx0XHRhbm5vdGF0aW9uVmFsdWUgYXMgQXBwbHlBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+LFxuXHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHRwYXRoVmlzaXRvclxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH1cblx0cmV0dXJuIHVucmVzb2x2ZWFibGVFeHByZXNzaW9uO1xufVxuXG4vKipcbiAqIFBhcnNlIHRoZSBhbm5vdGF0aW9uIGNvbmRpdGlvbiBpbnRvIGFuIGV4cHJlc3Npb24uXG4gKlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gYW5ub3RhdGlvblZhbHVlIFRoZSBjb25kaXRpb24gb3IgdmFsdWUgZnJvbSB0aGUgYW5ub3RhdGlvblxuICogQHBhcmFtIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMgVGhlIHBhdGggZnJvbSB0aGUgcm9vdCBlbnRpdHkgc2V0XG4gKiBAcGFyYW0gcGF0aFZpc2l0b3IgQSBmdW5jdGlvbiB0byBtb2RpZnkgdGhlIHJlc3VsdGluZyBwYXRoXG4gKiBAcmV0dXJucyBBbiBlcXVpdmFsZW50IGV4cHJlc3Npb25cbiAqL1xuZnVuY3Rpb24gcGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0YW5ub3RhdGlvblZhbHVlOiBDb25kaXRpb25hbENoZWNrT3JWYWx1ZSxcblx0dmlzaXRlZE5hdmlnYXRpb25QYXRoczogc3RyaW5nW10gPSBbXSxcblx0cGF0aFZpc2l0b3I/OiBGdW5jdGlvblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+IHtcblx0aWYgKGFubm90YXRpb25WYWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgYW5ub3RhdGlvblZhbHVlICE9PSBcIm9iamVjdFwiKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KGFubm90YXRpb25WYWx1ZSBhcyBUKTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkT3JcIikpIHtcblx0XHRyZXR1cm4gb3IoXG5cdFx0XHQuLi4oKGFubm90YXRpb25WYWx1ZSBhcyBPckNvbmRpdGlvbmFsRXhwcmVzc2lvbikuJE9yLm1hcChmdW5jdGlvbiAob3JDb25kaXRpb24pIHtcblx0XHRcdFx0cmV0dXJuIHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihvckNvbmRpdGlvbiwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpO1xuXHRcdFx0fSkgYXMgdW5rbm93biBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSlcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkQW5kXCIpKSB7XG5cdFx0cmV0dXJuIGFuZChcblx0XHRcdC4uLigoYW5ub3RhdGlvblZhbHVlIGFzIEFuZENvbmRpdGlvbmFsRXhwcmVzc2lvbikuJEFuZC5tYXAoZnVuY3Rpb24gKGFuZENvbmRpdGlvbikge1xuXHRcdFx0XHRyZXR1cm4gcGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFuZENvbmRpdGlvbiwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpO1xuXHRcdFx0fSkgYXMgdW5rbm93biBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSlcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkTm90XCIpKSB7XG5cdFx0cmV0dXJuIG5vdChcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbigoYW5ub3RhdGlvblZhbHVlIGFzIE5vdENvbmRpdGlvbmFsRXhwcmVzc2lvbikuJE5vdFswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJEVxXCIpKSB7XG5cdFx0cmV0dXJuIGVxdWFsKFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgRXFDb25kaXRpb25hbEV4cHJlc3Npb24pLiRFcVswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgRXFDb25kaXRpb25hbEV4cHJlc3Npb24pLiRFcVsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJE5lXCIpKSB7XG5cdFx0cmV0dXJuIG5vdEVxdWFsKFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgTmVDb25kaXRpb25hbEV4cHJlc3Npb24pLiROZVswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgTmVDb25kaXRpb25hbEV4cHJlc3Npb24pLiROZVsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJEd0XCIpKSB7XG5cdFx0cmV0dXJuIGdyZWF0ZXJUaGFuKFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgR3RDb25kaXRpb25hbEV4cHJlc3Npb24pLiRHdFswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgR3RDb25kaXRpb25hbEV4cHJlc3Npb24pLiRHdFsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJEdlXCIpKSB7XG5cdFx0cmV0dXJuIGdyZWF0ZXJPckVxdWFsKFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgR2VDb25kaXRpb25hbEV4cHJlc3Npb24pLiRHZVswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgR2VDb25kaXRpb25hbEV4cHJlc3Npb24pLiRHZVsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJEx0XCIpKSB7XG5cdFx0cmV0dXJuIGxlc3NUaGFuKFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgTHRDb25kaXRpb25hbEV4cHJlc3Npb24pLiRMdFswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgTHRDb25kaXRpb25hbEV4cHJlc3Npb24pLiRMdFsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJExlXCIpKSB7XG5cdFx0cmV0dXJuIGxlc3NPckVxdWFsKFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgTGVDb25kaXRpb25hbEV4cHJlc3Npb24pLiRMZVswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgTGVDb25kaXRpb25hbEV4cHJlc3Npb24pLiRMZVsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJFBhdGhcIikpIHtcblx0XHRyZXR1cm4gcGF0aEluTW9kZWwoKGFubm90YXRpb25WYWx1ZSBhcyBQYXRoQ29uZGl0aW9uRXhwcmVzc2lvbjxUPikuJFBhdGgsIHVuZGVmaW5lZCwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpO1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRBcHBseVwiKSkge1xuXHRcdHJldHVybiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6IFwiQXBwbHlcIixcblx0XHRcdFx0RnVuY3Rpb246IChhbm5vdGF0aW9uVmFsdWUgYXMgYW55KS4kRnVuY3Rpb24sXG5cdFx0XHRcdEFwcGx5OiAoYW5ub3RhdGlvblZhbHVlIGFzIGFueSkuJEFwcGx5XG5cdFx0XHR9IGFzIFQsXG5cdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0cGF0aFZpc2l0b3Jcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkSWZcIikpIHtcblx0XHRyZXR1cm4gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKFxuXHRcdFx0e1xuXHRcdFx0XHR0eXBlOiBcIklmXCIsXG5cdFx0XHRcdElmOiAoYW5ub3RhdGlvblZhbHVlIGFzIGFueSkuJElmXG5cdFx0XHR9IGFzIFQsXG5cdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0cGF0aFZpc2l0b3Jcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkRW51bU1lbWJlclwiKSkge1xuXHRcdHJldHVybiBjb25zdGFudChyZXNvbHZlRW51bVZhbHVlKChhbm5vdGF0aW9uVmFsdWUgYXMgYW55KS4kRW51bU1lbWJlcikgYXMgVCk7XG5cdH1cblx0cmV0dXJuIGNvbnN0YW50KGZhbHNlIGFzIFQpO1xufVxuXG4vKipcbiAqIFByb2Nlc3MgdGhlIHtJZkFubm90YXRpb25FeHByZXNzaW9uVmFsdWV9IGludG8gYW4gZXhwcmVzc2lvbi5cbiAqXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBhbm5vdGF0aW9uVmFsdWUgQW4gSWYgZXhwcmVzc2lvbiByZXR1cm5pbmcgdGhlIHR5cGUgVFxuICogQHBhcmFtIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMgVGhlIHBhdGggZnJvbSB0aGUgcm9vdCBlbnRpdHkgc2V0XG4gKiBAcGFyYW0gcGF0aFZpc2l0b3IgQSBmdW5jdGlvbiB0byBtb2RpZnkgdGhlIHJlc3VsdGluZyBwYXRoXG4gKiBAcmV0dXJucyBUaGUgZXF1aXZhbGVudCBpZkVsc2UgZXhwcmVzc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gYW5ub3RhdGlvbklmRXhwcmVzc2lvbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGFubm90YXRpb25WYWx1ZTogSWZBbm5vdGF0aW9uRXhwcmVzc2lvblZhbHVlPFQ+LFxuXHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSA9IFtdLFxuXHRwYXRoVmlzaXRvcj86IEZ1bmN0aW9uXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4ge1xuXHRyZXR1cm4gaWZFbHNlKFxuXHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWVbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKSxcblx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlWzFdIGFzIGFueSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWVbMl0gYXMgYW55LCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcilcblx0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFubm90YXRpb25BcHBseUV4cHJlc3Npb24oXG5cdGFwcGx5RXhwcmVzc2lvbjogQXBwbHlBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+LFxuXHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSA9IFtdLFxuXHRwYXRoVmlzaXRvcj86IEZ1bmN0aW9uXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB7XG5cdHN3aXRjaCAoYXBwbHlFeHByZXNzaW9uLkZ1bmN0aW9uKSB7XG5cdFx0Y2FzZSBcIm9kYXRhLmNvbmNhdFwiOlxuXHRcdFx0cmV0dXJuIGNvbmNhdChcblx0XHRcdFx0Li4uYXBwbHlFeHByZXNzaW9uLkFwcGx5Lm1hcCgoYXBwbHlQYXJhbTogYW55KSA9PiB7XG5cdFx0XHRcdFx0bGV0IGFwcGx5UGFyYW1Db252ZXJ0ZWQgPSBhcHBseVBhcmFtO1xuXHRcdFx0XHRcdGlmIChhcHBseVBhcmFtLmhhc093blByb3BlcnR5KFwiJFBhdGhcIikpIHtcblx0XHRcdFx0XHRcdGFwcGx5UGFyYW1Db252ZXJ0ZWQgPSB7XG5cdFx0XHRcdFx0XHRcdHR5cGU6IFwiUGF0aFwiLFxuXHRcdFx0XHRcdFx0XHRwYXRoOiBhcHBseVBhcmFtLiRQYXRoXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoYXBwbHlQYXJhbS5oYXNPd25Qcm9wZXJ0eShcIiRJZlwiKSkge1xuXHRcdFx0XHRcdFx0YXBwbHlQYXJhbUNvbnZlcnRlZCA9IHtcblx0XHRcdFx0XHRcdFx0dHlwZTogXCJJZlwiLFxuXHRcdFx0XHRcdFx0XHRJZjogYXBwbHlQYXJhbS4kSWZcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChhcHBseVBhcmFtLmhhc093blByb3BlcnR5KFwiJEFwcGx5XCIpKSB7XG5cdFx0XHRcdFx0XHRhcHBseVBhcmFtQ29udmVydGVkID0ge1xuXHRcdFx0XHRcdFx0XHR0eXBlOiBcIkFwcGx5XCIsXG5cdFx0XHRcdFx0XHRcdEZ1bmN0aW9uOiBhcHBseVBhcmFtLiRGdW5jdGlvbixcblx0XHRcdFx0XHRcdFx0QXBwbHk6IGFwcGx5UGFyYW0uJEFwcGx5XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGFwcGx5UGFyYW1Db252ZXJ0ZWQsIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHVuZGVmaW5lZCwgcGF0aFZpc2l0b3IpO1xuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0fVxuXHRyZXR1cm4gdW5yZXNvbHZlYWJsZUV4cHJlc3Npb247XG59XG5cbi8qKlxuICogR2VuZXJpYyBoZWxwZXIgZm9yIHRoZSBjb21wYXJpc29uIG9wZXJhdGlvbnMgKGVxdWFsLCBub3RFcXVhbCwgLi4uKS5cbiAqXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBvcGVyYXRvciBUaGUgb3BlcmF0b3IgdG8gYXBwbHlcbiAqIEBwYXJhbSBsZWZ0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSBvcGVyYXRvclxuICogQHBhcmFtIHJpZ2h0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgb3BlcmF0b3JcbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBjb21wYXJpc29uXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmlzb248VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRvcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yLFxuXHRsZWZ0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRyaWdodE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgbGVmdEV4cHJlc3Npb24gPSB3cmFwUHJpbWl0aXZlKGxlZnRPcGVyYW5kKTtcblx0Y29uc3QgcmlnaHRFeHByZXNzaW9uID0gd3JhcFByaW1pdGl2ZShyaWdodE9wZXJhbmQpO1xuXHRpZiAoaGFzVW5yZXNvbHZlYWJsZUV4cHJlc3Npb24obGVmdEV4cHJlc3Npb24sIHJpZ2h0RXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZlYWJsZUV4cHJlc3Npb247XG5cdH1cblx0aWYgKGlzQ29uc3RhbnQobGVmdEV4cHJlc3Npb24pICYmIGlzQ29uc3RhbnQocmlnaHRFeHByZXNzaW9uKSkge1xuXHRcdHN3aXRjaCAob3BlcmF0b3IpIHtcblx0XHRcdGNhc2UgXCIhPT1cIjpcblx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KGxlZnRFeHByZXNzaW9uLnZhbHVlICE9PSByaWdodEV4cHJlc3Npb24udmFsdWUpO1xuXHRcdFx0Y2FzZSBcIjxcIjpcblx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KGxlZnRFeHByZXNzaW9uLnZhbHVlIDwgcmlnaHRFeHByZXNzaW9uLnZhbHVlKTtcblx0XHRcdGNhc2UgXCI8PVwiOlxuXHRcdFx0XHRyZXR1cm4gY29uc3RhbnQobGVmdEV4cHJlc3Npb24udmFsdWUgPD0gcmlnaHRFeHByZXNzaW9uLnZhbHVlKTtcblx0XHRcdGNhc2UgXCI+XCI6XG5cdFx0XHRcdHJldHVybiBjb25zdGFudChsZWZ0RXhwcmVzc2lvbi52YWx1ZSA+IHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSk7XG5cdFx0XHRjYXNlIFwiPj1cIjpcblx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KGxlZnRFeHByZXNzaW9uLnZhbHVlID49IHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSk7XG5cdFx0XHRjYXNlIFwiPT09XCI6XG5cdFx0XHRcdHJldHVybiBjb25zdGFudChsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gcmlnaHRFeHByZXNzaW9uLnZhbHVlKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdF90eXBlOiBcIkNvbXBhcmlzb25cIixcblx0XHRcdG9wZXJhdG9yOiBvcGVyYXRvcixcblx0XHRcdG9wZXJhbmQxOiBsZWZ0RXhwcmVzc2lvbixcblx0XHRcdG9wZXJhbmQyOiByaWdodEV4cHJlc3Npb25cblx0XHR9O1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZW5ndGgoZXhwcmVzc2lvbjogUGF0aEluTW9kZWxFeHByZXNzaW9uPGFueT4gfCBVbnJlc29sdmVhYmxlUGF0aEV4cHJlc3Npb24pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248bnVtYmVyPiB7XG5cdGlmIChleHByZXNzaW9uLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiKSB7XG5cdFx0cmV0dXJuIGV4cHJlc3Npb247XG5cdH1cblx0cmV0dXJuIHtcblx0XHRfdHlwZTogXCJMZW5ndGhcIixcblx0XHRwYXRoSW5Nb2RlbDogZXhwcmVzc2lvblxuXHR9O1xufVxuXG4vKipcbiAqIENvbXBhcmlzb246IFwiZXF1YWxcIiAoPT09KS5cbiAqXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBsZWZ0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgbGVmdCBzaWRlXG4gKiBAcGFyYW0gcmlnaHRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBjb21wYXJpc29uXG4gKiBAcmV0dXJucyBBbiBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY29tcGFyaXNvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZXF1YWw8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRsZWZ0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRyaWdodE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgbGVmdEV4cHJlc3Npb24gPSB3cmFwUHJpbWl0aXZlKGxlZnRPcGVyYW5kKTtcblx0Y29uc3QgcmlnaHRFeHByZXNzaW9uID0gd3JhcFByaW1pdGl2ZShyaWdodE9wZXJhbmQpO1xuXHRpZiAoaGFzVW5yZXNvbHZlYWJsZUV4cHJlc3Npb24obGVmdEV4cHJlc3Npb24sIHJpZ2h0RXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZlYWJsZUV4cHJlc3Npb247XG5cdH1cblx0aWYgKF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwobGVmdEV4cHJlc3Npb24sIHJpZ2h0RXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG5cdH1cblxuXHRmdW5jdGlvbiByZWR1Y2UobGVmdDogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+LCByaWdodDogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+KSB7XG5cdFx0aWYgKGxlZnQuX3R5cGUgPT09IFwiQ29tcGFyaXNvblwiICYmIGlzVHJ1ZShyaWdodCkpIHtcblx0XHRcdC8vIGNvbXBhcmUoYSwgYikgPT09IHRydWUgfn4+IGNvbXBhcmUoYSwgYilcblx0XHRcdHJldHVybiBsZWZ0O1xuXHRcdH0gZWxzZSBpZiAobGVmdC5fdHlwZSA9PT0gXCJDb21wYXJpc29uXCIgJiYgaXNGYWxzZShyaWdodCkpIHtcblx0XHRcdC8vIGNvbXBhcmUoYSwgYikgPT09IGZhbHNlIH5+PiAhY29tcGFyZShhLCBiKVxuXHRcdFx0cmV0dXJuIG5vdChsZWZ0KTtcblx0XHR9IGVsc2UgaWYgKGxlZnQuX3R5cGUgPT09IFwiSWZFbHNlXCIgJiYgX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChsZWZ0Lm9uVHJ1ZSwgcmlnaHQpKSB7XG5cdFx0XHQvLyAoaWYgKHgpIHsgYSB9IGVsc2UgeyBiIH0pID09PSBhIH5+PiB4IHx8IChiID09PSBhKVxuXHRcdFx0cmV0dXJuIG9yKGxlZnQuY29uZGl0aW9uLCBlcXVhbChsZWZ0Lm9uRmFsc2UsIHJpZ2h0KSk7XG5cdFx0fSBlbHNlIGlmIChsZWZ0Ll90eXBlID09PSBcIklmRWxzZVwiICYmIF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwobGVmdC5vbkZhbHNlLCByaWdodCkpIHtcblx0XHRcdC8vIChpZiAoeCkgeyBhIH0gZWxzZSB7IGIgfSkgPT09IGIgfn4+ICF4IHx8IChhID09PSBiKVxuXHRcdFx0cmV0dXJuIG9yKG5vdChsZWZ0LmNvbmRpdGlvbiksIGVxdWFsKGxlZnQub25UcnVlLCByaWdodCkpO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRsZWZ0Ll90eXBlID09PSBcIklmRWxzZVwiICYmXG5cdFx0XHRpc0NvbnN0YW50KGxlZnQub25UcnVlKSAmJlxuXHRcdFx0aXNDb25zdGFudChsZWZ0Lm9uRmFsc2UpICYmXG5cdFx0XHRpc0NvbnN0YW50KHJpZ2h0KSAmJlxuXHRcdFx0IV9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwobGVmdC5vblRydWUsIHJpZ2h0KSAmJlxuXHRcdFx0IV9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwobGVmdC5vbkZhbHNlLCByaWdodClcblx0XHQpIHtcblx0XHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvLyBleHBsb2l0IHN5bW1ldHJ5OiBhID09PSBiIDx+PiBiID09PSBhXG5cdGNvbnN0IHJlZHVjZWQgPSByZWR1Y2UobGVmdEV4cHJlc3Npb24sIHJpZ2h0RXhwcmVzc2lvbikgPz8gcmVkdWNlKHJpZ2h0RXhwcmVzc2lvbiwgbGVmdEV4cHJlc3Npb24pO1xuXHRyZXR1cm4gcmVkdWNlZCA/PyBjb21wYXJpc29uKFwiPT09XCIsIGxlZnRFeHByZXNzaW9uLCByaWdodEV4cHJlc3Npb24pO1xufVxuXG4vKipcbiAqIENvbXBhcmlzb246IFwibm90IGVxdWFsXCIgKCE9PSkuXG4gKlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gbGVmdE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIGxlZnQgc2lkZVxuICogQHBhcmFtIHJpZ2h0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgY29tcGFyaXNvblxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGNvbXBhcmlzb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vdEVxdWFsPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0bGVmdE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cmlnaHRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBub3QoZXF1YWwobGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCkpO1xufVxuXG4vKipcbiAqIENvbXBhcmlzb246IFwiZ3JlYXRlciBvciBlcXVhbFwiICg+PSkuXG4gKlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gbGVmdE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIGxlZnQgc2lkZVxuICogQHBhcmFtIHJpZ2h0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgY29tcGFyaXNvblxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGNvbXBhcmlzb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyZWF0ZXJPckVxdWFsPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0bGVmdE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cmlnaHRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBjb21wYXJpc29uKFwiPj1cIiwgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCk7XG59XG5cbi8qKlxuICogQ29tcGFyaXNvbjogXCJncmVhdGVyIHRoYW5cIiAoPikuXG4gKlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gbGVmdE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIGxlZnQgc2lkZVxuICogQHBhcmFtIHJpZ2h0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgY29tcGFyaXNvblxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGNvbXBhcmlzb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyZWF0ZXJUaGFuPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0bGVmdE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cmlnaHRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBjb21wYXJpc29uKFwiPlwiLCBsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kKTtcbn1cblxuLyoqXG4gKiBDb21wYXJpc29uOiBcImxlc3Mgb3IgZXF1YWxcIiAoPD0pLlxuICpcbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGxlZnRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSBsZWZ0IHNpZGVcbiAqIEBwYXJhbSByaWdodE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGNvbXBhcmlzb25cbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBjb21wYXJpc29uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsZXNzT3JFcXVhbDxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGxlZnRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4sXG5cdHJpZ2h0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gY29tcGFyaXNvbihcIjw9XCIsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpO1xufVxuXG4vKipcbiAqIENvbXBhcmlzb246IFwibGVzcyB0aGFuXCIgKDwpLlxuICpcbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGxlZnRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSBsZWZ0IHNpZGVcbiAqIEBwYXJhbSByaWdodE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGNvbXBhcmlzb25cbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBjb21wYXJpc29uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsZXNzVGhhbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGxlZnRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4sXG5cdHJpZ2h0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gY29tcGFyaXNvbihcIjxcIiwgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCk7XG59XG5cbi8qKlxuICogSWYtdGhlbi1lbHNlIGV4cHJlc3Npb24uXG4gKlxuICogRXZhbHVhdGVzIHRvIG9uVHJ1ZSBpZiB0aGUgY29uZGl0aW9uIGV2YWx1YXRlcyB0byB0cnVlLCBlbHNlIGV2YWx1YXRlcyB0byBvbkZhbHNlLlxuICpcbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGNvbmRpdGlvbiBUaGUgY29uZGl0aW9uIHRvIGV2YWx1YXRlXG4gKiBAcGFyYW0gb25UcnVlIEV4cHJlc3Npb24gcmVzdWx0IGlmIHRoZSBjb25kaXRpb24gZXZhbHVhdGVzIHRvIHRydWVcbiAqIEBwYXJhbSBvbkZhbHNlIEV4cHJlc3Npb24gcmVzdWx0IGlmIHRoZSBjb25kaXRpb24gZXZhbHVhdGVzIHRvIGZhbHNlXG4gKiBAcmV0dXJucyBUaGUgZXhwcmVzc2lvbiB0aGF0IHJlcHJlc2VudHMgdGhpcyBjb25kaXRpb25hbCBjaGVja1xuICovXG5leHBvcnQgZnVuY3Rpb24gaWZFbHNlPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0Y29uZGl0aW9uOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8Ym9vbGVhbj4sXG5cdG9uVHJ1ZTogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRvbkZhbHNlOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPiB7XG5cdGxldCBjb25kaXRpb25FeHByZXNzaW9uID0gd3JhcFByaW1pdGl2ZShjb25kaXRpb24pO1xuXHRsZXQgb25UcnVlRXhwcmVzc2lvbiA9IHdyYXBQcmltaXRpdmUob25UcnVlKTtcblx0bGV0IG9uRmFsc2VFeHByZXNzaW9uID0gd3JhcFByaW1pdGl2ZShvbkZhbHNlKTtcblxuXHRpZiAoaGFzVW5yZXNvbHZlYWJsZUV4cHJlc3Npb24oY29uZGl0aW9uRXhwcmVzc2lvbiwgb25UcnVlRXhwcmVzc2lvbiwgb25GYWxzZUV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIHVucmVzb2x2ZWFibGVFeHByZXNzaW9uO1xuXHR9XG5cdC8vIHN3YXAgYnJhbmNoZXMgaWYgdGhlIGNvbmRpdGlvbiBpcyBhIG5lZ2F0aW9uXG5cdGlmIChjb25kaXRpb25FeHByZXNzaW9uLl90eXBlID09PSBcIk5vdFwiKSB7XG5cdFx0Ly8gaWZFbHNlKG5vdChYKSwgYSwgYikgLS0+IGlmRWxzZShYLCBiLCBhKVxuXHRcdFtvblRydWVFeHByZXNzaW9uLCBvbkZhbHNlRXhwcmVzc2lvbl0gPSBbb25GYWxzZUV4cHJlc3Npb24sIG9uVHJ1ZUV4cHJlc3Npb25dO1xuXHRcdGNvbmRpdGlvbkV4cHJlc3Npb24gPSBub3QoY29uZGl0aW9uRXhwcmVzc2lvbik7XG5cdH1cblxuXHQvLyBpbmxpbmUgbmVzdGVkIGlmLWVsc2UgZXhwcmVzc2lvbnM6IG9uVHJ1ZSBicmFuY2hcblx0Ly8gaWZFbHNlKFgsIGlmRWxzZShYLCBhLCBiKSwgYykgPT0+IGlmRWxzZShYLCBhLCBjKVxuXHRpZiAob25UcnVlRXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJJZkVsc2VcIiAmJiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGNvbmRpdGlvbkV4cHJlc3Npb24sIG9uVHJ1ZUV4cHJlc3Npb24uY29uZGl0aW9uKSkge1xuXHRcdG9uVHJ1ZUV4cHJlc3Npb24gPSBvblRydWVFeHByZXNzaW9uLm9uVHJ1ZTtcblx0fVxuXG5cdC8vIGlubGluZSBuZXN0ZWQgaWYtZWxzZSBleHByZXNzaW9uczogb25GYWxzZSBicmFuY2hcblx0Ly8gaWZFbHNlKFgsIGEsIGlmRWxzZShYLCBiLCBjKSkgPT0+IGlmRWxzZShYLCBhLCBjKVxuXHRpZiAob25GYWxzZUV4cHJlc3Npb24uX3R5cGUgPT09IFwiSWZFbHNlXCIgJiYgX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChjb25kaXRpb25FeHByZXNzaW9uLCBvbkZhbHNlRXhwcmVzc2lvbi5jb25kaXRpb24pKSB7XG5cdFx0b25GYWxzZUV4cHJlc3Npb24gPSBvbkZhbHNlRXhwcmVzc2lvbi5vbkZhbHNlO1xuXHR9XG5cblx0Ly8gKGlmIHRydWUgdGhlbiBhIGVsc2UgYikgIH5+PiBhXG5cdC8vIChpZiBmYWxzZSB0aGVuIGEgZWxzZSBiKSB+fj4gYlxuXHRpZiAoaXNDb25zdGFudChjb25kaXRpb25FeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiBjb25kaXRpb25FeHByZXNzaW9uLnZhbHVlID8gb25UcnVlRXhwcmVzc2lvbiA6IG9uRmFsc2VFeHByZXNzaW9uO1xuXHR9XG5cblx0Ly8gaWYgKGlzQ29uc3RhbnRCb29sZWFuKG9uVHJ1ZUV4cHJlc3Npb24pIHx8IGlzQ29uc3RhbnRCb29sZWFuKG9uRmFsc2VFeHByZXNzaW9uKSkge1xuXHQvLyBcdHJldHVybiBvcihhbmQoY29uZGl0aW9uLCBvblRydWVFeHByZXNzaW9uIGFzIEV4cHJlc3Npb248Ym9vbGVhbj4pLCBhbmQobm90KGNvbmRpdGlvbiksIG9uRmFsc2VFeHByZXNzaW9uIGFzIEV4cHJlc3Npb248Ym9vbGVhbj4pKSBhcyBFeHByZXNzaW9uPFQ+XG5cdC8vIH1cblx0Ly8gKGlmIFggdGhlbiBhIGVsc2UgYSkgfn4+IGFcblx0aWYgKF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwob25UcnVlRXhwcmVzc2lvbiwgb25GYWxzZUV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIG9uVHJ1ZUV4cHJlc3Npb247XG5cdH1cblxuXHQvLyBpZiBYIHRoZW4gYSBlbHNlIGZhbHNlIH5+PiBYICYmIGFcblx0aWYgKGlzRmFsc2Uob25GYWxzZUV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIGFuZChjb25kaXRpb25FeHByZXNzaW9uLCBvblRydWVFeHByZXNzaW9uIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9XG5cblx0Ly8gaWYgWCB0aGVuIGEgZWxzZSB0cnVlIH5+PiAhWCB8fCBhXG5cdGlmIChpc1RydWUob25GYWxzZUV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIG9yKG5vdChjb25kaXRpb25FeHByZXNzaW9uKSwgb25UcnVlRXhwcmVzc2lvbiBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4pIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fVxuXG5cdC8vIGlmIFggdGhlbiBmYWxzZSBlbHNlIGEgfn4+ICFYICYmIGFcblx0aWYgKGlzRmFsc2Uob25UcnVlRXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gYW5kKG5vdChjb25kaXRpb25FeHByZXNzaW9uKSwgb25GYWxzZUV4cHJlc3Npb24gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH1cblxuXHQvLyBpZiBYIHRoZW4gdHJ1ZSBlbHNlIGEgfn4+IFggfHwgYVxuXHRpZiAoaXNUcnVlKG9uVHJ1ZUV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIG9yKGNvbmRpdGlvbkV4cHJlc3Npb24sIG9uRmFsc2VFeHByZXNzaW9uIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRfdHlwZTogXCJJZkVsc2VcIixcblx0XHRjb25kaXRpb246IGNvbmRpdGlvbkV4cHJlc3Npb24sXG5cdFx0b25UcnVlOiBvblRydWVFeHByZXNzaW9uLFxuXHRcdG9uRmFsc2U6IG9uRmFsc2VFeHByZXNzaW9uXG5cdH07XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGN1cnJlbnQgZXhwcmVzc2lvbiBoYXMgYSByZWZlcmVuY2UgdG8gdGhlIGRlZmF1bHQgbW9kZWwgKHVuZGVmaW5lZCkuXG4gKlxuICogQHBhcmFtIGV4cHJlc3Npb24gVGhlIGV4cHJlc3Npb24gdG8gZXZhbHVhdGVcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGVyZSBpcyBhIHJlZmVyZW5jZSB0byB0aGUgZGVmYXVsdCBjb250ZXh0XG4gKi9cbmZ1bmN0aW9uIGhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQoZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGFueT4pOiBib29sZWFuIHtcblx0c3dpdGNoIChleHByZXNzaW9uLl90eXBlKSB7XG5cdFx0Y2FzZSBcIkNvbnN0YW50XCI6XG5cdFx0Y2FzZSBcIkZvcm1hdHRlclwiOlxuXHRcdGNhc2UgXCJDb21wbGV4VHlwZVwiOlxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdGNhc2UgXCJTZXRcIjpcblx0XHRcdHJldHVybiBleHByZXNzaW9uLm9wZXJhbmRzLnNvbWUoaGFzUmVmZXJlbmNlVG9EZWZhdWx0Q29udGV4dCk7XG5cdFx0Y2FzZSBcIlBhdGhJbk1vZGVsXCI6XG5cdFx0XHRyZXR1cm4gZXhwcmVzc2lvbi5tb2RlbE5hbWUgPT09IHVuZGVmaW5lZDtcblx0XHRjYXNlIFwiQ29tcGFyaXNvblwiOlxuXHRcdFx0cmV0dXJuIGhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQoZXhwcmVzc2lvbi5vcGVyYW5kMSkgfHwgaGFzUmVmZXJlbmNlVG9EZWZhdWx0Q29udGV4dChleHByZXNzaW9uLm9wZXJhbmQyKTtcblx0XHRjYXNlIFwiSWZFbHNlXCI6XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KGV4cHJlc3Npb24uY29uZGl0aW9uKSB8fFxuXHRcdFx0XHRoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KGV4cHJlc3Npb24ub25UcnVlKSB8fFxuXHRcdFx0XHRoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KGV4cHJlc3Npb24ub25GYWxzZSlcblx0XHRcdCk7XG5cdFx0Y2FzZSBcIk5vdFwiOlxuXHRcdGNhc2UgXCJUcnV0aHlcIjpcblx0XHRcdHJldHVybiBoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KGV4cHJlc3Npb24ub3BlcmFuZCk7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG50eXBlIEZuPFQ+ID0gKCguLi5wYXJhbXM6IGFueSkgPT4gVCkgJiB7XG5cdF9fZnVuY3Rpb25OYW1lOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIFdyYXBwZWRUdXBsZVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4vLyBAdHMtaWdub3JlXG50eXBlIFdyYXBwZWRUdXBsZTxUPiA9IHsgW0sgaW4ga2V5b2YgVF06IFdyYXBwZWRUdXBsZTxUW0tdPiB8IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUW0tdPiB9O1xuXG4vLyBTbywgdGhpcyB3b3JrcyBidXQgSSBjYW5ub3QgZ2V0IGl0IHRvIGNvbXBpbGUgOkQsIGJ1dCBpdCBzdGlsbCBkb2VzIHdoYXQgaXMgZXhwZWN0ZWQuLi5cblxuLyoqXG4gKiBBIGZ1bmN0aW9uIHJlZmVyZW5jZSBvciBhIGZ1bmN0aW9uIG5hbWUuXG4gKi9cbnR5cGUgRnVuY3Rpb25Pck5hbWU8VD4gPSBGbjxUPiB8IHN0cmluZztcblxuLyoqXG4gKiBGdW5jdGlvbiBwYXJhbWV0ZXJzLCBlaXRoZXIgZGVyaXZlZCBmcm9tIHRoZSBmdW5jdGlvbiBvciBhbiB1bnR5cGVkIGFycmF5LlxuICovXG50eXBlIEZ1bmN0aW9uUGFyYW1ldGVyczxULCBGIGV4dGVuZHMgRnVuY3Rpb25Pck5hbWU8VD4+ID0gRiBleHRlbmRzIEZuPFQ+ID8gUGFyYW1ldGVyczxGPiA6IGFueVtdO1xuXG4vKipcbiAqIENhbGxzIGEgZm9ybWF0dGVyIGZ1bmN0aW9uIHRvIHByb2Nlc3MgdGhlIHBhcmFtZXRlcnMuXG4gKiBJZiByZXF1aXJlQ29udGV4dCBpcyBzZXQgdG8gdHJ1ZSBhbmQgbm8gY29udGV4dCBpcyBwYXNzZWQgYSBkZWZhdWx0IGNvbnRleHQgd2lsbCBiZSBhZGRlZCBhdXRvbWF0aWNhbGx5LlxuICpcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAdGVtcGxhdGUgVVxuICogQHBhcmFtIHBhcmFtZXRlcnMgVGhlIGxpc3Qgb2YgcGFyYW1ldGVyIHRoYXQgc2hvdWxkIG1hdGNoIHRoZSB0eXBlIGFuZCBudW1iZXIgb2YgdGhlIGZvcm1hdHRlciBmdW5jdGlvblxuICogQHBhcmFtIGZvcm1hdHRlckZ1bmN0aW9uIFRoZSBmdW5jdGlvbiB0byBjYWxsXG4gKiBAcGFyYW0gW2NvbnRleHRFbnRpdHlUeXBlXSBUaGUgY29udGV4dCBlbnRpdHkgdHlwZSB0byBjb25zaWRlclxuICogQHJldHVybnMgVGhlIGNvcnJlc3BvbmRpbmcgZXhwcmVzc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0UmVzdWx0PFQsIFUgZXh0ZW5kcyBGbjxUPj4oXG5cdHBhcmFtZXRlcnM6IFdyYXBwZWRUdXBsZTxQYXJhbWV0ZXJzPFU+Pixcblx0Zm9ybWF0dGVyRnVuY3Rpb246IFUgfCBzdHJpbmcsXG5cdGNvbnRleHRFbnRpdHlUeXBlPzogRW50aXR5VHlwZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+IHtcblx0Y29uc3QgcGFyYW1ldGVyRXhwcmVzc2lvbnMgPSAocGFyYW1ldGVycyBhcyBhbnlbXSkubWFwKHdyYXBQcmltaXRpdmUpO1xuXG5cdGlmIChoYXNVbnJlc29sdmVhYmxlRXhwcmVzc2lvbiguLi5wYXJhbWV0ZXJFeHByZXNzaW9ucykpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZlYWJsZUV4cHJlc3Npb247XG5cdH1cblx0aWYgKGNvbnRleHRFbnRpdHlUeXBlKSB7XG5cdFx0Ly8gT3RoZXJ3aXNlLCBpZiB0aGUgY29udGV4dCBpcyByZXF1aXJlZCBhbmQgbm8gY29udGV4dCBpcyBwcm92aWRlZCBtYWtlIHN1cmUgdG8gYWRkIHRoZSBkZWZhdWx0IGJpbmRpbmdcblx0XHRpZiAoIXBhcmFtZXRlckV4cHJlc3Npb25zLnNvbWUoaGFzUmVmZXJlbmNlVG9EZWZhdWx0Q29udGV4dCkpIHtcblx0XHRcdGNvbnRleHRFbnRpdHlUeXBlLmtleXMuZm9yRWFjaCgoa2V5KSA9PiBwYXJhbWV0ZXJFeHByZXNzaW9ucy5wdXNoKHBhdGhJbk1vZGVsKGtleS5uYW1lLCBcIlwiKSkpO1xuXHRcdH1cblx0fVxuXHRsZXQgZnVuY3Rpb25OYW1lID0gXCJcIjtcblx0aWYgKHR5cGVvZiBmb3JtYXR0ZXJGdW5jdGlvbiA9PT0gXCJzdHJpbmdcIikge1xuXHRcdGZ1bmN0aW9uTmFtZSA9IGZvcm1hdHRlckZ1bmN0aW9uO1xuXHR9IGVsc2Uge1xuXHRcdGZ1bmN0aW9uTmFtZSA9IGZvcm1hdHRlckZ1bmN0aW9uLl9fZnVuY3Rpb25OYW1lO1xuXHR9XG5cdC8vIEZvcm1hdHRlck5hbWUgY2FuIGJlIG9mIGZvcm1hdCBzYXAuZmUuY29yZS54eHgjbWV0aG9kTmFtZSB0byBoYXZlIG11bHRpcGxlIGZvcm1hdHRlciBpbiBvbmUgY2xhc3Ncblx0Y29uc3QgW2Zvcm1hdHRlckNsYXNzLCBmb3JtYXR0ZXJOYW1lXSA9IGZ1bmN0aW9uTmFtZS5zcGxpdChcIiNcIik7XG5cblx0aWYgKCEhZm9ybWF0dGVyTmFtZSAmJiBmb3JtYXR0ZXJOYW1lLmxlbmd0aCA+IDApIHtcblx0XHRwYXJhbWV0ZXJFeHByZXNzaW9ucy51bnNoaWZ0KGNvbnN0YW50KGZvcm1hdHRlck5hbWUpKTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0X3R5cGU6IFwiRm9ybWF0dGVyXCIsXG5cdFx0Zm46IGZvcm1hdHRlckNsYXNzLFxuXHRcdHBhcmFtZXRlcnM6IHBhcmFtZXRlckV4cHJlc3Npb25zXG5cdH07XG59XG5cbi8qKlxuICogQ2FsbHMgYSBjb21wbGV4IHR5cGUgIHRvIHByb2Nlc3MgdGhlIHBhcmFtZXRlcnMuXG4gKiBJZiByZXF1aXJlQ29udGV4dCBpcyBzZXQgdG8gdHJ1ZSBhbmQgbm8gY29udGV4dCBpcyBwYXNzZWQgYSBkZWZhdWx0IGNvbnRleHQgd2lsbCBiZSBhZGRlZCBhdXRvbWF0aWNhbGx5LlxuICpcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAdGVtcGxhdGUgVVxuICogQHBhcmFtIHBhcmFtZXRlcnMgVGhlIGxpc3Qgb2YgcGFyYW1ldGVyIHRoYXQgc2hvdWxkIG1hdGNoIHRoZSB0eXBlIGZvciB0aGUgY29tcHBsZXggdHlwZT1cbiAqIEBwYXJhbSB0eXBlIFRoZSBjb21wbGV4IHR5cGUgdG8gdXNlXG4gKiBAcGFyYW0gW2NvbnRleHRFbnRpdHlUeXBlXSBUaGUgY29udGV4dCBlbnRpdHkgdHlwZSB0byBjb25zaWRlclxuICogQHBhcmFtIG9Gb3JtYXRPcHRpb25zXG4gKiBAcmV0dXJucyBUaGUgY29ycmVzcG9uZGluZyBleHByZXNzaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRUeXBlSW5mb3JtYXRpb248VCwgVSBleHRlbmRzIEZuPFQ+Pihcblx0cGFyYW1ldGVyczogV3JhcHBlZFR1cGxlPFBhcmFtZXRlcnM8VT4+LFxuXHR0eXBlOiBzdHJpbmcsXG5cdGNvbnRleHRFbnRpdHlUeXBlPzogRW50aXR5VHlwZSxcblx0b0Zvcm1hdE9wdGlvbnM/OiBhbnlcbik6IFVucmVzb2x2ZWFibGVQYXRoRXhwcmVzc2lvbiB8IENvbXBsZXhUeXBlRXhwcmVzc2lvbjxUPiB8IENvbnN0YW50RXhwcmVzc2lvbjxUPiB7XG5cdGNvbnN0IHBhcmFtZXRlckV4cHJlc3Npb25zID0gKHBhcmFtZXRlcnMgYXMgYW55W10pLm1hcCh3cmFwUHJpbWl0aXZlKTtcblx0aWYgKGhhc1VucmVzb2x2ZWFibGVFeHByZXNzaW9uKC4uLnBhcmFtZXRlckV4cHJlc3Npb25zKSkge1xuXHRcdHJldHVybiB1bnJlc29sdmVhYmxlRXhwcmVzc2lvbjtcblx0fVxuXHQvLyBJZiB0aGVyZSBpcyBvbmx5IG9uZSBwYXJhbWV0ZXIgYW5kIGl0IGlzIGEgY29uc3RhbnQgYW5kIHdlIGRvbid0IGV4cGVjdCB0aGUgY29udGV4dCB0aGVuIHJldHVybiB0aGUgY29uc3RhbnRcblx0aWYgKHBhcmFtZXRlckV4cHJlc3Npb25zLmxlbmd0aCA9PT0gMSAmJiBpc0NvbnN0YW50KHBhcmFtZXRlckV4cHJlc3Npb25zWzBdKSAmJiAhY29udGV4dEVudGl0eVR5cGUpIHtcblx0XHRyZXR1cm4gcGFyYW1ldGVyRXhwcmVzc2lvbnNbMF07XG5cdH0gZWxzZSBpZiAoY29udGV4dEVudGl0eVR5cGUpIHtcblx0XHQvLyBPdGhlcndpc2UsIGlmIHRoZSBjb250ZXh0IGlzIHJlcXVpcmVkIGFuZCBubyBjb250ZXh0IGlzIHByb3ZpZGVkIG1ha2Ugc3VyZSB0byBhZGQgdGhlIGRlZmF1bHQgYmluZGluZ1xuXHRcdGlmICghcGFyYW1ldGVyRXhwcmVzc2lvbnMuc29tZShoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KSkge1xuXHRcdFx0Y29udGV4dEVudGl0eVR5cGUua2V5cy5mb3JFYWNoKChrZXkpID0+IHBhcmFtZXRlckV4cHJlc3Npb25zLnB1c2gocGF0aEluTW9kZWwoa2V5Lm5hbWUsIFwiXCIpKSk7XG5cdFx0fVxuXHR9XG5cdC8vIGlmIHNob3dNZWFzdXJlIGlzIHNldCB0byBmYWxzZSB3ZSB3YW50IHRvIG5vdCBwYXJzZSBhcyBzdHJpbmcgdG8gc2VlIHRoZSAwXG5cdGlmIChcblx0XHRvRm9ybWF0T3B0aW9ucz8uc2hvd01lYXN1cmUgPT09IGZhbHNlICYmXG5cdFx0KChwYXJhbWV0ZXJzWzBdIGFzIGFueSk/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnRcIikgPT09IDAgfHxcblx0XHRcdChwYXJhbWV0ZXJzWzBdIGFzIGFueSk/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5EZWNpbWFsXCIpID09PSAwIHx8XG5cdFx0XHQocGFyYW1ldGVyc1swXSBhcyBhbnkpPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRG91YmxlXCIpID09PSAwKVxuXHQpIHtcblx0XHRpZiAoKHBhcmFtZXRlcnNbMF0gYXMgYW55KT8udHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnQ2NFwiKSB7XG5cdFx0XHQvL3NhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludDY0IGRvIG5vdCBzdXBwb3J0IHBhcnNlQXNTdHJpbmcgZmFsc2Vcblx0XHRcdG9Gb3JtYXRPcHRpb25zID0geyBlbXB0eVN0cmluZzogXCJcIiwgc2hvd01lYXN1cmU6IGZhbHNlIH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9Gb3JtYXRPcHRpb25zID0geyBwYXJzZUFzU3RyaW5nOiBmYWxzZSwgZW1wdHlTdHJpbmc6IFwiXCIsIHNob3dNZWFzdXJlOiBmYWxzZSB9O1xuXHRcdH1cblx0fVxuXHRpZiAodHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Vbml0XCIpIHtcblx0XHRjb25zdCB1b21QYXRoID0gcGF0aEluTW9kZWwoXCIvIyNAQHJlcXVlc3RVbml0c09mTWVhc3VyZVwiKTtcblx0XHR1b21QYXRoLnRhcmdldFR5cGUgPSBcImFueVwiO1xuXHRcdHVvbVBhdGgubW9kZSA9IFwiT25lVGltZVwiO1xuXHRcdHBhcmFtZXRlckV4cHJlc3Npb25zLnB1c2godW9tUGF0aCk7XG5cdH0gZWxzZSBpZiAodHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5DdXJyZW5jeVwiKSB7XG5cdFx0Y29uc3QgY3VycmVuY3lQYXRoID0gcGF0aEluTW9kZWwoXCIvIyNAQHJlcXVlc3RDdXJyZW5jeUNvZGVzXCIpO1xuXHRcdGN1cnJlbmN5UGF0aC50YXJnZXRUeXBlID0gXCJhbnlcIjtcblx0XHRjdXJyZW5jeVBhdGgubW9kZSA9IFwiT25lVGltZVwiO1xuXHRcdHBhcmFtZXRlckV4cHJlc3Npb25zLnB1c2goY3VycmVuY3lQYXRoKTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0X3R5cGU6IFwiQ29tcGxleFR5cGVcIixcblx0XHR0eXBlOiB0eXBlLFxuXHRcdGZvcm1hdE9wdGlvbnM6IG9Gb3JtYXRPcHRpb25zIHx8IHt9LFxuXHRcdHBhcmFtZXRlcnM6IHt9LFxuXHRcdGJpbmRpbmdQYXJhbWV0ZXJzOiBwYXJhbWV0ZXJFeHByZXNzaW9uc1xuXHR9O1xufVxuLyoqXG4gKiBGdW5jdGlvbiBjYWxsLCBvcHRpb25hbGx5IHdpdGggYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBmdW5jIEZ1bmN0aW9uIG5hbWUgb3IgcmVmZXJlbmNlIHRvIGZ1bmN0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVycyBBcmd1bWVudHNcbiAqIEBwYXJhbSBvbiBPYmplY3QgdG8gY2FsbCB0aGUgZnVuY3Rpb24gb25cbiAqIEByZXR1cm5zIEV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBmdW5jdGlvbiBjYWxsIChub3QgdGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24gY2FsbCEpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmbjxULCBVIGV4dGVuZHMgRnVuY3Rpb25Pck5hbWU8VD4+KFxuXHRmdW5jOiBVLFxuXHRwYXJhbWV0ZXJzOiBXcmFwcGVkVHVwbGU8RnVuY3Rpb25QYXJhbWV0ZXJzPFQsIFU+Pixcblx0b24/OiBFeHByZXNzaW9uT3JQcmltaXRpdmU8b2JqZWN0PlxuKTogRnVuY3Rpb25FeHByZXNzaW9uPFQ+IHtcblx0Y29uc3QgZnVuY3Rpb25OYW1lID0gdHlwZW9mIGZ1bmMgPT09IFwic3RyaW5nXCIgPyBmdW5jIDogZnVuYy5fX2Z1bmN0aW9uTmFtZTtcblx0cmV0dXJuIHtcblx0XHRfdHlwZTogXCJGdW5jdGlvblwiLFxuXHRcdG9iajogb24gIT09IHVuZGVmaW5lZCA/IHdyYXBQcmltaXRpdmUob24pIDogdW5kZWZpbmVkLFxuXHRcdGZuOiBmdW5jdGlvbk5hbWUsXG5cdFx0cGFyYW1ldGVyczogKHBhcmFtZXRlcnMgYXMgYW55W10pLm1hcCh3cmFwUHJpbWl0aXZlKVxuXHR9O1xufVxuXG4vKipcbiAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiBhIGJpbmRpbmcgdmFsdWUgaXMgbnVsbCwgdW5kZWZpbmVkIG9yIGVtcHR5LlxuICpcbiAqIEBwYXJhbSBleHByZXNzaW9uXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gZXhwcmVzc2lvbiBldmFsdWF0aW5nIHRoZSBmYWN0IHRoYXQgdGhlIGN1cnJlbnQgZWxlbWVudCBpcyBlbXB0eVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eShleHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGlmIChleHByZXNzaW9uLl90eXBlID09PSBcIkNvbmNhdFwiKSB7XG5cdFx0cmV0dXJuIG9yKC4uLmV4cHJlc3Npb24uZXhwcmVzc2lvbnMubWFwKGlzRW1wdHkpKTtcblx0fVxuXHRyZXR1cm4gb3IoZXF1YWwoZXhwcmVzc2lvbiwgXCJcIiksIGVxdWFsKGV4cHJlc3Npb24sIHVuZGVmaW5lZCksIGVxdWFsKGV4cHJlc3Npb24sIG51bGwpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNhdCguLi5pbkV4cHJlc3Npb25zOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8c3RyaW5nPltdKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRjb25zdCBleHByZXNzaW9ucyA9IGluRXhwcmVzc2lvbnMubWFwKHdyYXBQcmltaXRpdmUpO1xuXHRpZiAoaGFzVW5yZXNvbHZlYWJsZUV4cHJlc3Npb24oLi4uZXhwcmVzc2lvbnMpKSB7XG5cdFx0cmV0dXJuIHVucmVzb2x2ZWFibGVFeHByZXNzaW9uO1xuXHR9XG5cdGlmIChleHByZXNzaW9ucy5ldmVyeShpc0NvbnN0YW50KSkge1xuXHRcdHJldHVybiBjb25zdGFudChcblx0XHRcdGV4cHJlc3Npb25zLnJlZHVjZSgoY29uY2F0ZW5hdGVkOiBzdHJpbmcsIHZhbHVlKSA9PiB7XG5cdFx0XHRcdHJldHVybiBjb25jYXRlbmF0ZWQgKyAodmFsdWUgYXMgQ29uc3RhbnRFeHByZXNzaW9uPGFueT4pLnZhbHVlLnRvU3RyaW5nKCk7XG5cdFx0XHR9LCBcIlwiKVxuXHRcdCk7XG5cdH0gZWxzZSBpZiAoZXhwcmVzc2lvbnMuc29tZShpc0NvbXBsZXhUeXBlRXhwcmVzc2lvbikpIHtcblx0XHRsZXQgcGF0aElkeCA9IDA7XG5cdFx0Y29uc3QgbXlDb25jYXRFeHByZXNzaW9uID0gZm9ybWF0UmVzdWx0KGV4cHJlc3Npb25zLCBcInNhcC5mZS5jb3JlLmZvcm1hdHRlcnMuU3RhbmRhcmRGb3JtYXR0ZXIjY29uY2F0XCIpO1xuXHRcdGNvbnN0IGFsbFBhcnRzID0gW107XG5cdFx0dHJhbnNmb3JtUmVjdXJzaXZlbHkobXlDb25jYXRFeHByZXNzaW9uLCBcIlBhdGhJbk1vZGVsXCIsIChjb25zdGFudFBhdGg6IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxhbnk+KSA9PiB7XG5cdFx0XHRhbGxQYXJ0cy5wdXNoKGNvbnN0YW50UGF0aCk7XG5cdFx0XHRyZXR1cm4gY29uc3RhbnQoYFxcJCR7cGF0aElkeCsrfWApIGFzIENvbnN0YW50RXhwcmVzc2lvbjxhbnk+O1xuXHRcdH0pO1xuXHRcdGFsbFBhcnRzLnVuc2hpZnQoY29uc3RhbnQoSlNPTi5zdHJpbmdpZnkobXlDb25jYXRFeHByZXNzaW9uKSkpO1xuXHRcdHJldHVybiBmb3JtYXRSZXN1bHQoYWxsUGFydHMsIFwic2FwLmZlLmNvcmUuZm9ybWF0dGVycy5TdGFuZGFyZEZvcm1hdHRlciNldmFsdWF0ZUNvbXBsZXhFeHByZXNzaW9uXCIpO1xuXHR9XG5cdHJldHVybiB7XG5cdFx0X3R5cGU6IFwiQ29uY2F0XCIsXG5cdFx0ZXhwcmVzc2lvbnM6IGV4cHJlc3Npb25zXG5cdH07XG59XG5cbmV4cG9ydCB0eXBlIFRyYW5zZm9ybUZ1bmN0aW9uID0gPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlIHwgdW5rbm93bj4oZXhwcmVzc2lvblBhcnQ6IGFueSkgPT4gQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuZXhwb3J0IHR5cGUgRXhwcmVzc2lvblR5cGUgPSBQaWNrPEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxhbnk+LCBcIl90eXBlXCI+W1wiX3R5cGVcIl07XG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtUmVjdXJzaXZlbHk8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGUgfCB1bmtub3duPihcblx0aW5FeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4sXG5cdGV4cHJlc3Npb25UeXBlOiBFeHByZXNzaW9uVHlwZSxcblx0dHJhbnNmb3JtRnVuY3Rpb246IFRyYW5zZm9ybUZ1bmN0aW9uLFxuXHRpbmNsdWRlQWxsRXhwcmVzc2lvbiA9IGZhbHNlXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4ge1xuXHRsZXQgZXhwcmVzc2lvbiA9IGluRXhwcmVzc2lvbjtcblx0c3dpdGNoIChleHByZXNzaW9uLl90eXBlKSB7XG5cdFx0Y2FzZSBcIkZ1bmN0aW9uXCI6XG5cdFx0Y2FzZSBcIkZvcm1hdHRlclwiOlxuXHRcdFx0ZXhwcmVzc2lvbi5wYXJhbWV0ZXJzID0gZXhwcmVzc2lvbi5wYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyKSA9PlxuXHRcdFx0XHR0cmFuc2Zvcm1SZWN1cnNpdmVseShwYXJhbWV0ZXIsIGV4cHJlc3Npb25UeXBlLCB0cmFuc2Zvcm1GdW5jdGlvbiwgaW5jbHVkZUFsbEV4cHJlc3Npb24pXG5cdFx0XHQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkNvbmNhdFwiOlxuXHRcdFx0ZXhwcmVzc2lvbi5leHByZXNzaW9ucyA9IGV4cHJlc3Npb24uZXhwcmVzc2lvbnMubWFwKChzdWJFeHByZXNzaW9uKSA9PlxuXHRcdFx0XHR0cmFuc2Zvcm1SZWN1cnNpdmVseShzdWJFeHByZXNzaW9uLCBleHByZXNzaW9uVHlwZSwgdHJhbnNmb3JtRnVuY3Rpb24sIGluY2x1ZGVBbGxFeHByZXNzaW9uKVxuXHRcdFx0KTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJDb21wbGV4VHlwZVwiOlxuXHRcdFx0ZXhwcmVzc2lvbi5iaW5kaW5nUGFyYW1ldGVycyA9IGV4cHJlc3Npb24uYmluZGluZ1BhcmFtZXRlcnMubWFwKChiaW5kaW5nUGFyYW1ldGVyKSA9PlxuXHRcdFx0XHR0cmFuc2Zvcm1SZWN1cnNpdmVseShiaW5kaW5nUGFyYW1ldGVyLCBleHByZXNzaW9uVHlwZSwgdHJhbnNmb3JtRnVuY3Rpb24sIGluY2x1ZGVBbGxFeHByZXNzaW9uKVxuXHRcdFx0KTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJJZkVsc2VcIjpcblx0XHRcdGNvbnN0IG9uVHJ1ZSA9IHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KGV4cHJlc3Npb24ub25UcnVlLCBleHByZXNzaW9uVHlwZSwgdHJhbnNmb3JtRnVuY3Rpb24sIGluY2x1ZGVBbGxFeHByZXNzaW9uKTtcblx0XHRcdGNvbnN0IG9uRmFsc2UgPSB0cmFuc2Zvcm1SZWN1cnNpdmVseShleHByZXNzaW9uLm9uRmFsc2UsIGV4cHJlc3Npb25UeXBlLCB0cmFuc2Zvcm1GdW5jdGlvbiwgaW5jbHVkZUFsbEV4cHJlc3Npb24pO1xuXHRcdFx0bGV0IGNvbmRpdGlvbiA9IGV4cHJlc3Npb24uY29uZGl0aW9uO1xuXHRcdFx0aWYgKGluY2x1ZGVBbGxFeHByZXNzaW9uKSB7XG5cdFx0XHRcdGNvbmRpdGlvbiA9IHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KGV4cHJlc3Npb24uY29uZGl0aW9uLCBleHByZXNzaW9uVHlwZSwgdHJhbnNmb3JtRnVuY3Rpb24sIGluY2x1ZGVBbGxFeHByZXNzaW9uKTtcblx0XHRcdH1cblx0XHRcdGV4cHJlc3Npb24gPSBpZkVsc2UoY29uZGl0aW9uLCBvblRydWUsIG9uRmFsc2UpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJOb3RcIjpcblx0XHRcdGlmIChpbmNsdWRlQWxsRXhwcmVzc2lvbikge1xuXHRcdFx0XHRjb25zdCBvcGVyYW5kID0gdHJhbnNmb3JtUmVjdXJzaXZlbHkoZXhwcmVzc2lvbi5vcGVyYW5kLCBleHByZXNzaW9uVHlwZSwgdHJhbnNmb3JtRnVuY3Rpb24sIGluY2x1ZGVBbGxFeHByZXNzaW9uKTtcblx0XHRcdFx0ZXhwcmVzc2lvbiA9IG5vdChvcGVyYW5kKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiVHJ1dGh5XCI6XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiU2V0XCI6XG5cdFx0XHRpZiAoaW5jbHVkZUFsbEV4cHJlc3Npb24pIHtcblx0XHRcdFx0ZXhwcmVzc2lvbi5vcGVyYW5kcyA9IGV4cHJlc3Npb24ub3BlcmFuZHMubWFwKChvcGVyYW5kKSA9PlxuXHRcdFx0XHRcdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KG9wZXJhbmQsIGV4cHJlc3Npb25UeXBlLCB0cmFuc2Zvcm1GdW5jdGlvbiwgaW5jbHVkZUFsbEV4cHJlc3Npb24pXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiQ29tcGFyaXNvblwiOlxuXHRcdFx0aWYgKGluY2x1ZGVBbGxFeHByZXNzaW9uKSB7XG5cdFx0XHRcdGNvbnN0IG9wZXJhbmQxID0gdHJhbnNmb3JtUmVjdXJzaXZlbHkoZXhwcmVzc2lvbi5vcGVyYW5kMSwgZXhwcmVzc2lvblR5cGUsIHRyYW5zZm9ybUZ1bmN0aW9uLCBpbmNsdWRlQWxsRXhwcmVzc2lvbik7XG5cdFx0XHRcdGNvbnN0IG9wZXJhbmQyID0gdHJhbnNmb3JtUmVjdXJzaXZlbHkoZXhwcmVzc2lvbi5vcGVyYW5kMiwgZXhwcmVzc2lvblR5cGUsIHRyYW5zZm9ybUZ1bmN0aW9uLCBpbmNsdWRlQWxsRXhwcmVzc2lvbik7XG5cdFx0XHRcdGV4cHJlc3Npb24gPSBjb21wYXJpc29uKGV4cHJlc3Npb24ub3BlcmF0b3IsIG9wZXJhbmQxLCBvcGVyYW5kMikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIlJlZlwiOlxuXHRcdGNhc2UgXCJMZW5ndGhcIjpcblx0XHRjYXNlIFwiUGF0aEluTW9kZWxcIjpcblx0XHRjYXNlIFwiQ29uc3RhbnRcIjpcblx0XHRjYXNlIFwiRW1iZWRkZWRCaW5kaW5nXCI6XG5cdFx0Y2FzZSBcIkVtYmVkZGVkRXhwcmVzc2lvbkJpbmRpbmdcIjpcblx0XHRjYXNlIFwiVW5yZXNvbHZhYmxlXCI6XG5cdFx0XHQvLyBEbyBub3RoaW5nXG5cdFx0XHRicmVhaztcblx0fVxuXHRpZiAoZXhwcmVzc2lvblR5cGUgPT09IGV4cHJlc3Npb24uX3R5cGUpIHtcblx0XHRleHByZXNzaW9uID0gdHJhbnNmb3JtRnVuY3Rpb24oaW5FeHByZXNzaW9uKTtcblx0fVxuXHRyZXR1cm4gZXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IHR5cGUgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gPSBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbmNvbnN0IG5lZWRQYXJlbnRoZXNpcyA9IGZ1bmN0aW9uIDxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oZXhwcjogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+KTogYm9vbGVhbiB7XG5cdHJldHVybiAoXG5cdFx0IWlzQ29uc3RhbnQoZXhwcikgJiYgIWlzUGF0aEluTW9kZWxFeHByZXNzaW9uKGV4cHIpICYmIGlzRXhwcmVzc2lvbihleHByKSAmJiBleHByLl90eXBlICE9PSBcIklmRWxzZVwiICYmIGV4cHIuX3R5cGUgIT09IFwiRnVuY3Rpb25cIlxuXHQpO1xufTtcblxuLyoqXG4gKiBDb21waWxlcyBhIGNvbnN0YW50IG9iamVjdCB0byBhIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gZXhwclxuICogQHBhcmFtIGlzTnVsbGFibGVcbiAqIEByZXR1cm5zIFRoZSBjb21waWxlZCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gY29tcGlsZUNvbnN0YW50T2JqZWN0KGV4cHI6IENvbnN0YW50RXhwcmVzc2lvbjxvYmplY3Q+LCBpc051bGxhYmxlID0gZmFsc2UpIHtcblx0aWYgKGlzTnVsbGFibGUgJiYgT2JqZWN0LmtleXMoZXhwci52YWx1ZSkubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblx0Ly8gT2JqZWN0c1xuXHRjb25zdCBvID0gZXhwci52YWx1ZSBhcyBQbGFpbkV4cHJlc3Npb25PYmplY3Q7XG5cdGNvbnN0IHByb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG5cdE9iamVjdC5rZXlzKG8pLmZvckVhY2goKGtleSkgPT4ge1xuXHRcdGNvbnN0IHZhbHVlID0gb1trZXldO1xuXHRcdGNvbnN0IGNoaWxkUmVzdWx0ID0gY29tcGlsZUV4cHJlc3Npb24odmFsdWUsIHRydWUsIGZhbHNlLCB0cnVlKTtcblx0XHRpZiAoY2hpbGRSZXN1bHQgJiYgY2hpbGRSZXN1bHQubGVuZ3RoID4gMCkge1xuXHRcdFx0cHJvcGVydGllcy5wdXNoKGAke2tleX06ICR7Y2hpbGRSZXN1bHR9YCk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGB7JHtwcm9wZXJ0aWVzLmpvaW4oXCIsIFwiKX19YDtcbn1cblxuLyoqXG4gKiBDb21waWxlcyBhIENvbnN0YW50IEJpbmRpbmcgRXhwcmVzc2lvbi5cbiAqXG4gKiBAcGFyYW0gZXhwclxuICogQHBhcmFtIGVtYmVkZGVkSW5CaW5kaW5nXG4gKiBAcGFyYW0gaXNOdWxsYWJsZVxuICogQHJldHVybnMgVGhlIGNvbXBpbGVkIHN0cmluZ1xuICovXG5mdW5jdGlvbiBjb21waWxlQ29uc3RhbnQ8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KGV4cHI6IENvbnN0YW50RXhwcmVzc2lvbjxUPiwgZW1iZWRkZWRJbkJpbmRpbmc6IGJvb2xlYW4sIGlzTnVsbGFibGUgPSBmYWxzZSkge1xuXHRpZiAoZXhwci52YWx1ZSA9PT0gbnVsbCkge1xuXHRcdHJldHVybiBcIm51bGxcIjtcblx0fVxuXHRpZiAoZXhwci52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIFwidW5kZWZpbmVkXCI7XG5cdH1cblx0aWYgKHR5cGVvZiBleHByLnZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoZXhwci52YWx1ZSkpIHtcblx0XHRcdGNvbnN0IGVudHJpZXMgPSBleHByLnZhbHVlLm1hcCgoZXhwcmVzc2lvbikgPT4gY29tcGlsZUV4cHJlc3Npb24oZXhwcmVzc2lvbiwgdHJ1ZSkpO1xuXHRcdFx0cmV0dXJuIGBbJHtlbnRyaWVzLmpvaW4oXCIsIFwiKX1dYDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVDb25zdGFudE9iamVjdChleHByIGFzIENvbnN0YW50RXhwcmVzc2lvbjxvYmplY3Q+LCBpc051bGxhYmxlKTtcblx0XHR9XG5cdH1cblxuXHRpZiAoZW1iZWRkZWRJbkJpbmRpbmcpIHtcblx0XHRzd2l0Y2ggKHR5cGVvZiBleHByLnZhbHVlKSB7XG5cdFx0XHRjYXNlIFwibnVtYmVyXCI6XG5cdFx0XHRjYXNlIFwiYmlnaW50XCI6XG5cdFx0XHRjYXNlIFwiYm9vbGVhblwiOlxuXHRcdFx0XHRyZXR1cm4gZXhwci52YWx1ZS50b1N0cmluZygpO1xuXHRcdFx0Y2FzZSBcInN0cmluZ1wiOlxuXHRcdFx0XHRyZXR1cm4gYCcke2VzY2FwZVhtbEF0dHJpYnV0ZShleHByLnZhbHVlLnRvU3RyaW5nKCkpfSdgO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBleHByLnZhbHVlLnRvU3RyaW5nKCk7XG5cdH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGJpbmRpbmcgc3RyaW5nIGZvciBhIEJpbmRpbmcgZXhwcmVzc2lvbi5cbiAqXG4gKiBAcGFyYW0gZXhwcmVzc2lvbkZvckJpbmRpbmcgVGhlIGV4cHJlc3Npb24gdG8gY29tcGlsZVxuICogQHBhcmFtIGVtYmVkZGVkSW5CaW5kaW5nIFdoZXRoZXIgdGhlIGV4cHJlc3Npb24gdG8gY29tcGlsZSBpcyBlbWJlZGRlZCBpbnRvIGFub3RoZXIgZXhwcmVzc2lvblxuICogQHBhcmFtIGVtYmVkZGVkU2VwYXJhdG9yIFRoZSBiaW5kaW5nIHZhbHVlIGV2YWx1YXRvciAoJCBvciAlIGRlcGVuZGluZyBvbiB3aGV0aGVyIHdlIHdhbnQgdG8gZm9yY2UgdGhlIHR5cGUgb3Igbm90KVxuICogQHJldHVybnMgVGhlIGNvcnJlc3BvbmRpbmcgZXhwcmVzc2lvbiBiaW5kaW5nXG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGVQYXRoSW5Nb2RlbEV4cHJlc3Npb248VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRleHByZXNzaW9uRm9yQmluZGluZzogUGF0aEluTW9kZWxFeHByZXNzaW9uPFQ+LFxuXHRlbWJlZGRlZEluQmluZGluZzogYm9vbGVhbixcblx0ZW1iZWRkZWRTZXBhcmF0b3I6IHN0cmluZ1xuKSB7XG5cdGlmIChcblx0XHRleHByZXNzaW9uRm9yQmluZGluZy50eXBlIHx8XG5cdFx0ZXhwcmVzc2lvbkZvckJpbmRpbmcucGFyYW1ldGVycyB8fFxuXHRcdGV4cHJlc3Npb25Gb3JCaW5kaW5nLnRhcmdldFR5cGUgfHxcblx0XHRleHByZXNzaW9uRm9yQmluZGluZy5mb3JtYXRPcHRpb25zIHx8XG5cdFx0ZXhwcmVzc2lvbkZvckJpbmRpbmcuY29uc3RyYWludHNcblx0KSB7XG5cdFx0Ly8gVGhpcyBpcyBub3cgYSBjb21wbGV4IGJpbmRpbmcgZGVmaW5pdGlvbiwgbGV0J3MgcHJlcGFyZSBmb3IgaXRcblx0XHRjb25zdCBjb21wbGV4QmluZGluZ0RlZmluaXRpb24gPSB7XG5cdFx0XHRwYXRoOiBjb21waWxlUGF0aEluTW9kZWwoZXhwcmVzc2lvbkZvckJpbmRpbmcpLFxuXHRcdFx0dHlwZTogZXhwcmVzc2lvbkZvckJpbmRpbmcudHlwZSxcblx0XHRcdHRhcmdldFR5cGU6IGV4cHJlc3Npb25Gb3JCaW5kaW5nLnRhcmdldFR5cGUsXG5cdFx0XHRwYXJhbWV0ZXJzOiBleHByZXNzaW9uRm9yQmluZGluZy5wYXJhbWV0ZXJzLFxuXHRcdFx0Zm9ybWF0T3B0aW9uczogZXhwcmVzc2lvbkZvckJpbmRpbmcuZm9ybWF0T3B0aW9ucyxcblx0XHRcdGNvbnN0cmFpbnRzOiBleHByZXNzaW9uRm9yQmluZGluZy5jb25zdHJhaW50c1xuXHRcdH07XG5cdFx0bGV0IG91dEJpbmRpbmcgPSBjb21waWxlRXhwcmVzc2lvbihjb21wbGV4QmluZGluZ0RlZmluaXRpb24pO1xuXHRcdGlmIChlbWJlZGRlZEluQmluZGluZykge1xuXHRcdFx0b3V0QmluZGluZyA9IGAke2VtYmVkZGVkU2VwYXJhdG9yfSR7b3V0QmluZGluZ31gO1xuXHRcdH1cblx0XHRyZXR1cm4gb3V0QmluZGluZztcblx0fSBlbHNlIGlmIChlbWJlZGRlZEluQmluZGluZykge1xuXHRcdHJldHVybiBgJHtlbWJlZGRlZFNlcGFyYXRvcn17JHtjb21waWxlUGF0aEluTW9kZWwoZXhwcmVzc2lvbkZvckJpbmRpbmcpfX1gO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBgeyR7Y29tcGlsZVBhdGhJbk1vZGVsKGV4cHJlc3Npb25Gb3JCaW5kaW5nKX19YDtcblx0fVxufVxuXG5mdW5jdGlvbiBjb21waWxlQ29tcGxleFR5cGVFeHByZXNzaW9uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihleHByZXNzaW9uOiBDb21wbGV4VHlwZUV4cHJlc3Npb248VD4pIHtcblx0aWYgKGV4cHJlc3Npb24uYmluZGluZ1BhcmFtZXRlcnMubGVuZ3RoID09PSAxKSB7XG5cdFx0cmV0dXJuIGB7JHtjb21waWxlUGF0aFBhcmFtZXRlcihleHByZXNzaW9uLmJpbmRpbmdQYXJhbWV0ZXJzWzBdLCB0cnVlKX0sIHR5cGU6ICcke2V4cHJlc3Npb24udHlwZX0nfWA7XG5cdH1cblxuXHRsZXQgb3V0cHV0RW5kID0gYF0sIHR5cGU6ICcke2V4cHJlc3Npb24udHlwZX0nYDtcblx0aWYgKGhhc0VsZW1lbnRzKGV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucykpIHtcblx0XHRvdXRwdXRFbmQgKz0gYCwgZm9ybWF0T3B0aW9uczogJHtjb21waWxlRXhwcmVzc2lvbihleHByZXNzaW9uLmZvcm1hdE9wdGlvbnMpfWA7XG5cdH1cblx0aWYgKGhhc0VsZW1lbnRzKGV4cHJlc3Npb24ucGFyYW1ldGVycykpIHtcblx0XHRvdXRwdXRFbmQgKz0gYCwgcGFyYW1ldGVyczogJHtjb21waWxlRXhwcmVzc2lvbihleHByZXNzaW9uLnBhcmFtZXRlcnMpfWA7XG5cdH1cblx0b3V0cHV0RW5kICs9IFwifVwiO1xuXG5cdHJldHVybiBge21vZGU6J1R3b1dheScsIHBhcnRzOlske2V4cHJlc3Npb24uYmluZGluZ1BhcmFtZXRlcnMubWFwKChwYXJhbTogYW55KSA9PiBjb21waWxlUGF0aFBhcmFtZXRlcihwYXJhbSkpLmpvaW4oXCIsXCIpfSR7b3V0cHV0RW5kfWA7XG59XG5cbi8qKlxuICogV3JhcCB0aGUgY29tcGlsZWQgYmluZGluZyBzdHJpbmcgYXMgcmVxdWlyZWQgZGVwZW5kZW5pbmcgb24gaXRzIGNvbnRleHQuXG4gKlxuICogQHBhcmFtIGV4cHJlc3Npb24gVGhlIGNvbXBpbGVkIGV4cHJlc3Npb25cbiAqIEBwYXJhbSBlbWJlZGRlZEluQmluZGluZyBUcnVlIGlmIHRoZSBjb21waWxlZCBleHByZXNzaW9uIGlzIHRvIGJlIGVtYmVkZGVkIGluIGEgYmluZGluZ1xuICogQHBhcmFtIHBhcmVudGhlc2lzUmVxdWlyZWQgVHJ1ZSBpZiB0aGUgZW1iZWRkZWQgYmluZGluZyBuZWVkcyB0byBiZSB3cmFwcGVkIGluIHBhcmV0aGVzaXMgc28gdGhhdCBpdCBpcyBldmFsdWF0ZWQgYXMgb25lXG4gKiBAcmV0dXJucyBGaW5hbGl6ZWQgY29tcGlsZWQgZXhwcmVzc2lvblxuICovXG5mdW5jdGlvbiB3cmFwQmluZGluZ0V4cHJlc3Npb24oXG5cdGV4cHJlc3Npb246IHN0cmluZyxcblx0ZW1iZWRkZWRJbkJpbmRpbmc6IGJvb2xlYW4sXG5cdHBhcmVudGhlc2lzUmVxdWlyZWQgPSBmYWxzZVxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRpZiAoZW1iZWRkZWRJbkJpbmRpbmcpIHtcblx0XHRpZiAocGFyZW50aGVzaXNSZXF1aXJlZCkge1xuXHRcdFx0cmV0dXJuIGAoJHtleHByZXNzaW9ufSlgO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gZXhwcmVzc2lvbjtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGB7PSAke2V4cHJlc3Npb259fWA7XG5cdH1cbn1cblxuLyoqXG4gKiBDb21waWxlIGFuIGV4cHJlc3Npb24gaW50byBhbiBleHByZXNzaW9uIGJpbmRpbmcuXG4gKlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgZXhwcmVzc2lvbiB0byBjb21waWxlXG4gKiBAcGFyYW0gZW1iZWRkZWRJbkJpbmRpbmcgV2hldGhlciB0aGUgZXhwcmVzc2lvbiB0byBjb21waWxlIGlzIGVtYmVkZGVkIGludG8gYW5vdGhlciBleHByZXNzaW9uXG4gKiBAcGFyYW0ga2VlcFRhcmdldFR5cGUgS2VlcCB0aGUgdGFyZ2V0IHR5cGUgb2YgdGhlIGVtYmVkZGVkIGJpbmRpbmdzIGluc3RlYWQgb2YgY2FzdGluZyB0aGVtIHRvIGFueVxuICogQHBhcmFtIGlzTnVsbGFibGUgV2hldGhlciBiaW5kaW5nIGV4cHJlc3Npb24gY2FuIHJlc29sdmUgdG8gZW1wdHkgc3RyaW5nIG9yIG5vdFxuICogQHJldHVybnMgVGhlIGNvcnJlc3BvbmRpbmcgZXhwcmVzc2lvbiBiaW5kaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlRXhwcmVzc2lvbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGV4cHJlc3Npb246IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0ZW1iZWRkZWRJbkJpbmRpbmcgPSBmYWxzZSxcblx0a2VlcFRhcmdldFR5cGUgPSBmYWxzZSxcblx0aXNOdWxsYWJsZSA9IGZhbHNlXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IGV4cHIgPSB3cmFwUHJpbWl0aXZlKGV4cHJlc3Npb24pO1xuXHRjb25zdCBlbWJlZGRlZFNlcGFyYXRvciA9IGtlZXBUYXJnZXRUeXBlID8gXCIkXCIgOiBcIiVcIjtcblxuXHRzd2l0Y2ggKGV4cHIuX3R5cGUpIHtcblx0XHRjYXNlIFwiVW5yZXNvbHZhYmxlXCI6XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0Y2FzZSBcIkNvbnN0YW50XCI6XG5cdFx0XHRyZXR1cm4gY29tcGlsZUNvbnN0YW50KGV4cHIsIGVtYmVkZGVkSW5CaW5kaW5nLCBpc051bGxhYmxlKTtcblxuXHRcdGNhc2UgXCJSZWZcIjpcblx0XHRcdHJldHVybiBleHByLnJlZiB8fCBcIm51bGxcIjtcblxuXHRcdGNhc2UgXCJGdW5jdGlvblwiOlxuXHRcdFx0Y29uc3QgYXJndW1lbnRTdHJpbmcgPSBgJHtleHByLnBhcmFtZXRlcnMubWFwKChhcmcpID0+IGNvbXBpbGVFeHByZXNzaW9uKGFyZywgdHJ1ZSkpLmpvaW4oXCIsIFwiKX1gO1xuXHRcdFx0cmV0dXJuIGV4cHIub2JqID09PSB1bmRlZmluZWRcblx0XHRcdFx0PyBgJHtleHByLmZufSgke2FyZ3VtZW50U3RyaW5nfSlgXG5cdFx0XHRcdDogYCR7Y29tcGlsZUV4cHJlc3Npb24oZXhwci5vYmosIHRydWUpfS4ke2V4cHIuZm59KCR7YXJndW1lbnRTdHJpbmd9KWA7XG5cblx0XHRjYXNlIFwiRW1iZWRkZWRFeHByZXNzaW9uQmluZGluZ1wiOlxuXHRcdFx0cmV0dXJuIGVtYmVkZGVkSW5CaW5kaW5nID8gYCgke2V4cHIudmFsdWUuc3Vic3RyKDIsIGV4cHIudmFsdWUubGVuZ3RoIC0gMyl9KWAgOiBgJHtleHByLnZhbHVlfWA7XG5cblx0XHRjYXNlIFwiRW1iZWRkZWRCaW5kaW5nXCI6XG5cdFx0XHRyZXR1cm4gZW1iZWRkZWRJbkJpbmRpbmcgPyBgJHtlbWJlZGRlZFNlcGFyYXRvcn0ke2V4cHIudmFsdWV9YCA6IGAke2V4cHIudmFsdWV9YDtcblxuXHRcdGNhc2UgXCJQYXRoSW5Nb2RlbFwiOlxuXHRcdFx0cmV0dXJuIGNvbXBpbGVQYXRoSW5Nb2RlbEV4cHJlc3Npb24oZXhwciwgZW1iZWRkZWRJbkJpbmRpbmcsIGVtYmVkZGVkU2VwYXJhdG9yKTtcblxuXHRcdGNhc2UgXCJDb21wYXJpc29uXCI6XG5cdFx0XHRjb25zdCBjb21wYXJpc29uRXhwcmVzc2lvbiA9IGNvbXBpbGVDb21wYXJpc29uRXhwcmVzc2lvbihleHByKTtcblx0XHRcdHJldHVybiB3cmFwQmluZGluZ0V4cHJlc3Npb24oY29tcGFyaXNvbkV4cHJlc3Npb24sIGVtYmVkZGVkSW5CaW5kaW5nKTtcblxuXHRcdGNhc2UgXCJJZkVsc2VcIjpcblx0XHRcdGNvbnN0IGlmRWxzZUV4cHJlc3Npb24gPSBgJHtjb21waWxlRXhwcmVzc2lvbihleHByLmNvbmRpdGlvbiwgdHJ1ZSl9ID8gJHtjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0ZXhwci5vblRydWUsXG5cdFx0XHRcdHRydWVcblx0XHRcdCl9IDogJHtjb21waWxlRXhwcmVzc2lvbihleHByLm9uRmFsc2UsIHRydWUpfWA7XG5cdFx0XHRyZXR1cm4gd3JhcEJpbmRpbmdFeHByZXNzaW9uKGlmRWxzZUV4cHJlc3Npb24sIGVtYmVkZGVkSW5CaW5kaW5nLCB0cnVlKTtcblxuXHRcdGNhc2UgXCJTZXRcIjpcblx0XHRcdGNvbnN0IHNldEV4cHJlc3Npb24gPSBleHByLm9wZXJhbmRzLm1hcCgob3BlcmFuZCkgPT4gY29tcGlsZUV4cHJlc3Npb24ob3BlcmFuZCwgdHJ1ZSkpLmpvaW4oYCAke2V4cHIub3BlcmF0b3J9IGApO1xuXHRcdFx0cmV0dXJuIHdyYXBCaW5kaW5nRXhwcmVzc2lvbihzZXRFeHByZXNzaW9uLCBlbWJlZGRlZEluQmluZGluZywgdHJ1ZSk7XG5cblx0XHRjYXNlIFwiQ29uY2F0XCI6XG5cdFx0XHRjb25zdCBjb25jYXRFeHByZXNzaW9uID0gZXhwci5leHByZXNzaW9uc1xuXHRcdFx0XHQubWFwKChuZXN0ZWRFeHByZXNzaW9uKSA9PiBjb21waWxlRXhwcmVzc2lvbihuZXN0ZWRFeHByZXNzaW9uLCB0cnVlLCB0cnVlKSlcblx0XHRcdFx0LmpvaW4oXCIgKyBcIik7XG5cdFx0XHRyZXR1cm4gd3JhcEJpbmRpbmdFeHByZXNzaW9uKGNvbmNhdEV4cHJlc3Npb24sIGVtYmVkZGVkSW5CaW5kaW5nKTtcblxuXHRcdGNhc2UgXCJMZW5ndGhcIjpcblx0XHRcdGNvbnN0IGxlbmd0aEV4cHJlc3Npb24gPSBgJHtjb21waWxlRXhwcmVzc2lvbihleHByLnBhdGhJbk1vZGVsLCB0cnVlKX0ubGVuZ3RoYDtcblx0XHRcdHJldHVybiB3cmFwQmluZGluZ0V4cHJlc3Npb24obGVuZ3RoRXhwcmVzc2lvbiwgZW1iZWRkZWRJbkJpbmRpbmcpO1xuXG5cdFx0Y2FzZSBcIk5vdFwiOlxuXHRcdFx0Y29uc3Qgbm90RXhwcmVzc2lvbiA9IGAhJHtjb21waWxlRXhwcmVzc2lvbihleHByLm9wZXJhbmQsIHRydWUpfWA7XG5cdFx0XHRyZXR1cm4gd3JhcEJpbmRpbmdFeHByZXNzaW9uKG5vdEV4cHJlc3Npb24sIGVtYmVkZGVkSW5CaW5kaW5nKTtcblxuXHRcdGNhc2UgXCJUcnV0aHlcIjpcblx0XHRcdGNvbnN0IHRydXRoeUV4cHJlc3Npb24gPSBgISEke2NvbXBpbGVFeHByZXNzaW9uKGV4cHIub3BlcmFuZCwgdHJ1ZSl9YDtcblx0XHRcdHJldHVybiB3cmFwQmluZGluZ0V4cHJlc3Npb24odHJ1dGh5RXhwcmVzc2lvbiwgZW1iZWRkZWRJbkJpbmRpbmcpO1xuXG5cdFx0Y2FzZSBcIkZvcm1hdHRlclwiOlxuXHRcdFx0Y29uc3QgZm9ybWF0dGVyRXhwcmVzc2lvbiA9IGNvbXBpbGVGb3JtYXR0ZXJFeHByZXNzaW9uKGV4cHIpO1xuXHRcdFx0cmV0dXJuIGVtYmVkZGVkSW5CaW5kaW5nID8gYFxcJCR7Zm9ybWF0dGVyRXhwcmVzc2lvbn1gIDogZm9ybWF0dGVyRXhwcmVzc2lvbjtcblxuXHRcdGNhc2UgXCJDb21wbGV4VHlwZVwiOlxuXHRcdFx0Y29uc3QgY29tcGxleFR5cGVFeHByZXNzaW9uID0gY29tcGlsZUNvbXBsZXhUeXBlRXhwcmVzc2lvbihleHByKTtcblx0XHRcdHJldHVybiBlbWJlZGRlZEluQmluZGluZyA/IGBcXCQke2NvbXBsZXhUeXBlRXhwcmVzc2lvbn1gIDogY29tcGxleFR5cGVFeHByZXNzaW9uO1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBcIlwiO1xuXHR9XG59XG5cbi8qKlxuICogQ29tcGlsZSBhIGNvbXBhcmlzb24gZXhwcmVzc2lvbi5cbiAqXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgY29tcGFyaXNvbiBleHByZXNzaW9uLlxuICogQHJldHVybnMgVGhlIGNvbXBpbGVkIGV4cHJlc3Npb24uIE5lZWRzIHdyYXBwaW5nIGJlZm9yZSBpdCBjYW4gYmUgdXNlZCBhcyBhbiBleHByZXNzaW9uIGJpbmRpbmcuXG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGVDb21wYXJpc29uRXhwcmVzc2lvbihleHByZXNzaW9uOiBDb21wYXJpc29uRXhwcmVzc2lvbikge1xuXHRmdW5jdGlvbiBjb21waWxlT3BlcmFuZChvcGVyYW5kOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248YW55Pikge1xuXHRcdGNvbnN0IGNvbXBpbGVkT3BlcmFuZCA9IGNvbXBpbGVFeHByZXNzaW9uKG9wZXJhbmQsIHRydWUpID8/IFwidW5kZWZpbmVkXCI7XG5cdFx0cmV0dXJuIHdyYXBCaW5kaW5nRXhwcmVzc2lvbihjb21waWxlZE9wZXJhbmQsIHRydWUsIG5lZWRQYXJlbnRoZXNpcyhvcGVyYW5kKSk7XG5cdH1cblxuXHRyZXR1cm4gYCR7Y29tcGlsZU9wZXJhbmQoZXhwcmVzc2lvbi5vcGVyYW5kMSl9ICR7ZXhwcmVzc2lvbi5vcGVyYXRvcn0gJHtjb21waWxlT3BlcmFuZChleHByZXNzaW9uLm9wZXJhbmQyKX1gO1xufVxuXG4vKipcbiAqIENvbXBpbGUgYSBmb3JtYXR0ZXIgZXhwcmVzc2lvbi5cbiAqXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgZm9ybWF0dGVyIGV4cHJlc3Npb24uXG4gKiBAcmV0dXJucyBUaGUgY29tcGlsZWQgZXhwcmVzc2lvbi5cbiAqL1xuZnVuY3Rpb24gY29tcGlsZUZvcm1hdHRlckV4cHJlc3Npb248VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KGV4cHJlc3Npb246IEZvcm1hdHRlckV4cHJlc3Npb248VD4pIHtcblx0aWYgKGV4cHJlc3Npb24ucGFyYW1ldGVycy5sZW5ndGggPT09IDEpIHtcblx0XHRyZXR1cm4gYHske2NvbXBpbGVQYXRoUGFyYW1ldGVyKGV4cHJlc3Npb24ucGFyYW1ldGVyc1swXSwgdHJ1ZSl9LCBmb3JtYXR0ZXI6ICcke2V4cHJlc3Npb24uZm59J31gO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IHBhcnRzID0gZXhwcmVzc2lvbi5wYXJhbWV0ZXJzLm1hcCgocGFyYW0pID0+IHtcblx0XHRcdGlmIChwYXJhbS5fdHlwZSA9PT0gXCJDb21wbGV4VHlwZVwiKSB7XG5cdFx0XHRcdHJldHVybiBjb21waWxlQ29tcGxleFR5cGVFeHByZXNzaW9uKHBhcmFtKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBjb21waWxlUGF0aFBhcmFtZXRlcihwYXJhbSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGB7cGFydHM6IFske3BhcnRzLmpvaW4oXCIsIFwiKX1dLCBmb3JtYXR0ZXI6ICcke2V4cHJlc3Npb24uZm59J31gO1xuXHR9XG59XG5cbi8qKlxuICogQ29tcGlsZSB0aGUgcGF0aCBwYXJhbWV0ZXIgb2YgYSBmb3JtYXR0ZXIgY2FsbC5cbiAqXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgYmluZGluZyBwYXJ0IHRvIGV2YWx1YXRlXG4gKiBAcGFyYW0gc2luZ2xlUGF0aCBXaGV0aGVyIHRoZXJlIGlzIG9uZSBvciBtdWx0aXBsZSBwYXRoIHRvIGNvbnNpZGVyXG4gKiBAcmV0dXJucyBUaGUgc3RyaW5nIHNuaXBwZXQgdG8gaW5jbHVkZSBpbiB0aGUgb3ZlcmFsbCBiaW5kaW5nIGRlZmluaXRpb25cbiAqL1xuZnVuY3Rpb24gY29tcGlsZVBhdGhQYXJhbWV0ZXIoZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGFueT4sIHNpbmdsZVBhdGggPSBmYWxzZSk6IHN0cmluZyB7XG5cdGxldCBvdXRWYWx1ZSA9IFwiXCI7XG5cdGlmIChleHByZXNzaW9uLl90eXBlID09PSBcIkNvbnN0YW50XCIpIHtcblx0XHRpZiAoZXhwcmVzc2lvbi52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBTcGVjaWFsIGNhc2Ugb3RoZXJ3aXNlIHRoZSBKU1Rva2VuaXplciBjb21wbGFpbnMgYWJvdXQgaW5jb3JyZWN0IGNvbnRlbnRcblx0XHRcdG91dFZhbHVlID0gYHZhbHVlOiAndW5kZWZpbmVkJ2A7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG91dFZhbHVlID0gYHZhbHVlOiAke2NvbXBpbGVDb25zdGFudChleHByZXNzaW9uLCB0cnVlKX1gO1xuXHRcdH1cblx0fSBlbHNlIGlmIChleHByZXNzaW9uLl90eXBlID09PSBcIlBhdGhJbk1vZGVsXCIpIHtcblx0XHRvdXRWYWx1ZSA9IGBwYXRoOiAnJHtjb21waWxlUGF0aEluTW9kZWwoZXhwcmVzc2lvbil9J2A7XG5cblx0XHRvdXRWYWx1ZSArPSBleHByZXNzaW9uLnR5cGUgPyBgLCB0eXBlOiAnJHtleHByZXNzaW9uLnR5cGV9J2AgOiBgLCB0YXJnZXRUeXBlOiAnYW55J2A7XG5cdFx0aWYgKGhhc0VsZW1lbnRzKGV4cHJlc3Npb24ubW9kZSkpIHtcblx0XHRcdG91dFZhbHVlICs9IGAsIG1vZGU6ICcke2NvbXBpbGVFeHByZXNzaW9uKGV4cHJlc3Npb24ubW9kZSl9J2A7XG5cdFx0fVxuXHRcdGlmIChoYXNFbGVtZW50cyhleHByZXNzaW9uLmNvbnN0cmFpbnRzKSkge1xuXHRcdFx0b3V0VmFsdWUgKz0gYCwgY29uc3RyYWludHM6ICR7Y29tcGlsZUV4cHJlc3Npb24oZXhwcmVzc2lvbi5jb25zdHJhaW50cyl9YDtcblx0XHR9XG5cdFx0aWYgKGhhc0VsZW1lbnRzKGV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucykpIHtcblx0XHRcdG91dFZhbHVlICs9IGAsIGZvcm1hdE9wdGlvbnM6ICR7Y29tcGlsZUV4cHJlc3Npb24oZXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zKX1gO1xuXHRcdH1cblx0XHRpZiAoaGFzRWxlbWVudHMoZXhwcmVzc2lvbi5wYXJhbWV0ZXJzKSkge1xuXHRcdFx0b3V0VmFsdWUgKz0gYCwgcGFyYW1ldGVyczogJHtjb21waWxlRXhwcmVzc2lvbihleHByZXNzaW9uLnBhcmFtZXRlcnMpfWA7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cdHJldHVybiBzaW5nbGVQYXRoID8gb3V0VmFsdWUgOiBgeyR7b3V0VmFsdWV9fWA7XG59XG5cbmZ1bmN0aW9uIGhhc0VsZW1lbnRzKG9iajogYW55KSB7XG5cdHJldHVybiBvYmogJiYgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPiAwO1xufVxuXG4vKipcbiAqIENvbXBpbGUgYSBiaW5kaW5nIGV4cHJlc3Npb24gcGF0aC5cbiAqXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgZXhwcmVzc2lvbiB0byBjb21waWxlLlxuICogQHJldHVybnMgVGhlIGNvbXBpbGVkIHBhdGguXG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGVQYXRoSW5Nb2RlbDxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oZXhwcmVzc2lvbjogUGF0aEluTW9kZWxFeHByZXNzaW9uPFQ+KSB7XG5cdHJldHVybiBgJHtleHByZXNzaW9uLm1vZGVsTmFtZSA/IGAke2V4cHJlc3Npb24ubW9kZWxOYW1lfT5gIDogXCJcIn0ke2V4cHJlc3Npb24ucGF0aH1gO1xufVxuIl19
1832
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkJpbmRpbmdUb29sa2l0LnRzIl0sIm5hbWVzIjpbInVucmVzb2x2ZWFibGVFeHByZXNzaW9uIiwiX3R5cGUiLCJlc2NhcGVYbWxBdHRyaWJ1dGUiLCJpbnB1dFN0cmluZyIsInJlcGxhY2UiLCJoYXNVbnJlc29sdmVhYmxlRXhwcmVzc2lvbiIsImV4cHJlc3Npb25zIiwiZmluZCIsImV4cHIiLCJ1bmRlZmluZWQiLCJfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsIiwiYSIsImIiLCJ2YWx1ZSIsIm9wZXJhbmQiLCJvcGVyYXRvciIsIm9wZXJhbmRzIiwibGVuZ3RoIiwiZXZlcnkiLCJleHByZXNzaW9uIiwic29tZSIsIm90aGVyRXhwcmVzc2lvbiIsImNvbmRpdGlvbiIsIm9uVHJ1ZSIsIm9uRmFsc2UiLCJvcGVyYW5kMSIsIm9wZXJhbmQyIiwiYUV4cHJlc3Npb25zIiwiYkV4cHJlc3Npb25zIiwiaW5kZXgiLCJwYXRoSW5Nb2RlbCIsIm1vZGVsTmFtZSIsInBhdGgiLCJ0YXJnZXRFbnRpdHlTZXQiLCJmbiIsInBhcmFtZXRlcnMiLCJ0eXBlIiwiYmluZGluZ1BhcmFtZXRlcnMiLCJvdGhlckZ1bmN0aW9uIiwib2JqIiwicmVmIiwiZmxhdHRlblNldEV4cHJlc3Npb24iLCJyZWR1Y2UiLCJyZXN1bHQiLCJjYW5kaWRhdGVzRm9yRmxhdHRlbmluZyIsImZvckVhY2giLCJjYW5kaWRhdGUiLCJlIiwicHVzaCIsImhhc09wcG9zaXRlRXhwcmVzc2lvbnMiLCJuZWdhdGVkRXhwcmVzc2lvbnMiLCJtYXAiLCJub3QiLCJpIiwiYW5kIiwid3JhcFByaW1pdGl2ZSIsImlzU3RhdGljRmFsc2UiLCJub25Ucml2aWFsRXhwcmVzc2lvbiIsImZpbHRlciIsImlzRmFsc2UiLCJpc0NvbnN0YW50IiwiY29uc3RhbnQiLCJpc1ZhbGlkIiwiaXNUcnVlIiwib3IiLCJpc1N0YXRpY1RydWUiLCJpc0NvbXBhcmlzb24iLCJpc1RydXRoeSIsImJpbmRpbmdFeHByZXNzaW9uIiwidmlzaXRlZE5hdmlnYXRpb25QYXRocyIsInBhdGhWaXNpdG9yIiwidGFyZ2V0UGF0aCIsImxvY2FsUGF0aCIsImNvbmNhdCIsImpvaW4iLCJjb25zdGFudFZhbHVlIiwiQXJyYXkiLCJpc0FycmF5IiwiaXNQcmltaXRpdmVPYmplY3QiLCJ2YWx1ZU9mIiwiT2JqZWN0IiwiZW50cmllcyIsInBsYWluRXhwcmVzc2lvbiIsImtleSIsInZhbCIsIndyYXBwZWRWYWx1ZSIsInJlc29sdmVCaW5kaW5nU3RyaW5nIiwidGFyZ2V0VHlwZSIsInN0YXJ0c1dpdGgiLCJyZWZlcmVuY2UiLCJpc0V4cHJlc3Npb24iLCJzb21ldGhpbmciLCJtYXliZUNvbnN0YW50IiwiaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24iLCJtYXliZUJpbmRpbmciLCJpc0NvbXBsZXhUeXBlRXhwcmVzc2lvbiIsIm9iamVjdFR5cGUiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJpc0NvbXBsZXhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsImFubm90YXRpb25WYWx1ZSIsImFubm90YXRpb25FeHByZXNzaW9uIiwiZGVmYXVsdFZhbHVlIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwiYW5ub3RhdGlvbklmRXhwcmVzc2lvbiIsIklmIiwicGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uIiwiTm90IiwiZXF1YWwiLCJFcSIsIm5vdEVxdWFsIiwiTmUiLCJncmVhdGVyVGhhbiIsIkd0IiwiZ3JlYXRlck9yRXF1YWwiLCJHZSIsImxlc3NUaGFuIiwiTHQiLCJsZXNzT3JFcXVhbCIsIkxlIiwiT3IiLCJvckNvbmRpdGlvbiIsIkFuZCIsImFuZENvbmRpdGlvbiIsImFubm90YXRpb25BcHBseUV4cHJlc3Npb24iLCJoYXNPd25Qcm9wZXJ0eSIsIiRPciIsIiRBbmQiLCIkTm90IiwiJEVxIiwiJE5lIiwiJEd0IiwiJEdlIiwiJEx0IiwiJExlIiwiJFBhdGgiLCJGdW5jdGlvbiIsIiRGdW5jdGlvbiIsIkFwcGx5IiwiJEFwcGx5IiwiJElmIiwicmVzb2x2ZUVudW1WYWx1ZSIsIiRFbnVtTWVtYmVyIiwiaWZFbHNlIiwiYXBwbHlFeHByZXNzaW9uIiwiYXBwbHlQYXJhbSIsImFwcGx5UGFyYW1Db252ZXJ0ZWQiLCJjb21wYXJpc29uIiwibGVmdE9wZXJhbmQiLCJyaWdodE9wZXJhbmQiLCJsZWZ0RXhwcmVzc2lvbiIsInJpZ2h0RXhwcmVzc2lvbiIsImxlZnQiLCJyaWdodCIsInJlZHVjZWQiLCJjb25kaXRpb25FeHByZXNzaW9uIiwib25UcnVlRXhwcmVzc2lvbiIsIm9uRmFsc2VFeHByZXNzaW9uIiwicGF0aElkeCIsIm15SWZFbHNlRXhwcmVzc2lvbiIsImZvcm1hdFJlc3VsdCIsImFsbFBhcnRzIiwidHJhbnNmb3JtUmVjdXJzaXZlbHkiLCJjb25zdGFudFBhdGgiLCJ1bnNoaWZ0IiwiSlNPTiIsInN0cmluZ2lmeSIsImhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQiLCJmb3JtYXR0ZXJGdW5jdGlvbiIsImNvbnRleHRFbnRpdHlUeXBlIiwicGFyYW1ldGVyRXhwcmVzc2lvbnMiLCJrZXlzIiwiZnVuY3Rpb25OYW1lIiwiX19mdW5jdGlvbk5hbWUiLCJzcGxpdCIsImZvcm1hdHRlckNsYXNzIiwiZm9ybWF0dGVyTmFtZSIsImFkZFR5cGVJbmZvcm1hdGlvbiIsIm9Gb3JtYXRPcHRpb25zIiwic2hvd051bWJlciIsImluZGV4T2YiLCJzaG93TWVhc3VyZSIsImVtcHR5U3RyaW5nIiwicGFyc2VBc1N0cmluZyIsInVvbVBhdGgiLCJtb2RlIiwiY3VycmVuY3lQYXRoIiwiZm9ybWF0T3B0aW9ucyIsImZ1bmMiLCJvbiIsImlzRW1wdHkiLCJpbkV4cHJlc3Npb25zIiwiY29uY2F0ZW5hdGVkIiwidG9TdHJpbmciLCJteUNvbmNhdEV4cHJlc3Npb24iLCJpbkV4cHJlc3Npb24iLCJleHByZXNzaW9uVHlwZSIsInRyYW5zZm9ybUZ1bmN0aW9uIiwiaW5jbHVkZUFsbEV4cHJlc3Npb24iLCJwYXJhbWV0ZXIiLCJzdWJFeHByZXNzaW9uIiwiYmluZGluZ1BhcmFtZXRlciIsIm5lZWRQYXJlbnRoZXNpcyIsImNvbXBpbGVDb25zdGFudE9iamVjdCIsImlzTnVsbGFibGUiLCJvIiwicHJvcGVydGllcyIsImNoaWxkUmVzdWx0IiwiY29tcGlsZUV4cHJlc3Npb24iLCJjb21waWxlQ29uc3RhbnQiLCJlbWJlZGRlZEluQmluZGluZyIsImNvbXBpbGVQYXRoSW5Nb2RlbEV4cHJlc3Npb24iLCJleHByZXNzaW9uRm9yQmluZGluZyIsImVtYmVkZGVkU2VwYXJhdG9yIiwiY29uc3RyYWludHMiLCJjb21wbGV4QmluZGluZ0RlZmluaXRpb24iLCJjb21waWxlUGF0aEluTW9kZWwiLCJvdXRCaW5kaW5nIiwiY29tcGlsZUNvbXBsZXhUeXBlRXhwcmVzc2lvbiIsImNvbXBpbGVQYXRoUGFyYW1ldGVyIiwib3V0cHV0RW5kIiwiaGFzRWxlbWVudHMiLCJwYXJhbSIsIndyYXBCaW5kaW5nRXhwcmVzc2lvbiIsInBhcmVudGhlc2lzUmVxdWlyZWQiLCJrZWVwVGFyZ2V0VHlwZSIsImFyZ3VtZW50U3RyaW5nIiwiYXJnIiwic3Vic3RyIiwiY29tcGFyaXNvbkV4cHJlc3Npb24iLCJjb21waWxlQ29tcGFyaXNvbkV4cHJlc3Npb24iLCJpZkVsc2VFeHByZXNzaW9uIiwic2V0RXhwcmVzc2lvbiIsImNvbmNhdEV4cHJlc3Npb24iLCJuZXN0ZWRFeHByZXNzaW9uIiwibGVuZ3RoRXhwcmVzc2lvbiIsIm5vdEV4cHJlc3Npb24iLCJ0cnV0aHlFeHByZXNzaW9uIiwiZm9ybWF0dGVyRXhwcmVzc2lvbiIsImNvbXBpbGVGb3JtYXR0ZXJFeHByZXNzaW9uIiwiY29tcGxleFR5cGVFeHByZXNzaW9uIiwiY29tcGlsZU9wZXJhbmQiLCJjb21waWxlZE9wZXJhbmQiLCJwYXJ0cyIsInNpbmdsZVBhdGgiLCJvdXRWYWx1ZSJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMktPLE1BQU1BLHVCQUFvRCxHQUFHO0FBQ25FQyxJ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XHRBbmRBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0QW5kQ29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHRBcHBseUFubm90YXRpb25FeHByZXNzaW9uLFxuXHRDb25kaXRpb25hbENoZWNrT3JWYWx1ZSxcblx0RW50aXR5U2V0LFxuXHRFbnRpdHlUeXBlLFxuXHRFcUFubm90YXRpb25FeHByZXNzaW9uLFxuXHRFcUNvbmRpdGlvbmFsRXhwcmVzc2lvbixcblx0R2VBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0R2VDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdEd0QW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdEd0Q29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHRJZkFubm90YXRpb25FeHByZXNzaW9uLFxuXHRJZkFubm90YXRpb25FeHByZXNzaW9uVmFsdWUsXG5cdExlQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdExlQ29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHRMdEFubm90YXRpb25FeHByZXNzaW9uLFxuXHRMdENvbmRpdGlvbmFsRXhwcmVzc2lvbixcblx0TmVBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0TmVDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdE5vdEFubm90YXRpb25FeHByZXNzaW9uLFxuXHROb3RDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdE9yQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdE9yQ29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHRQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdFBhdGhDb25kaXRpb25FeHByZXNzaW9uLFxuXHRQcm9wZXJ0eUFubm90YXRpb25WYWx1ZVxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IHJlc29sdmVFbnVtVmFsdWUgfSBmcm9tIFwiLi9Bbm5vdGF0aW9uRW51bVwiO1xuXG50eXBlIFByaW1pdGl2ZVR5cGUgPSBzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQgfCBib29sZWFuIHwgb2JqZWN0IHwgbnVsbCB8IHVuZGVmaW5lZDtcbnR5cGUgUHJpbWl0aXZlVHlwZUNhc3Q8UD4gPVxuXHR8IChQIGV4dGVuZHMgQm9vbGVhbiA/IGJvb2xlYW4gOiBuZXZlcilcblx0fCAoUCBleHRlbmRzIE51bWJlciA/IG51bWJlciA6IG5ldmVyKVxuXHR8IChQIGV4dGVuZHMgU3RyaW5nID8gc3RyaW5nIDogbmV2ZXIpXG5cdHwgUDtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbnR5cGUgQmFzZUV4cHJlc3Npb248VD4gPSB7XG5cdF90eXBlOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBDb25zdGFudEV4cHJlc3Npb248VD4gPSBCYXNlRXhwcmVzc2lvbjxUPiAmIHtcblx0X3R5cGU6IFwiQ29uc3RhbnRcIjtcblx0dmFsdWU6IFQ7XG59O1xuXG50eXBlIFNldE9wZXJhdG9yID0gXCImJlwiIHwgXCJ8fFwiO1xuZXhwb3J0IHR5cGUgU2V0RXhwcmVzc2lvbiA9IEJhc2VFeHByZXNzaW9uPGJvb2xlYW4+ICYge1xuXHRfdHlwZTogXCJTZXRcIjtcblx0b3BlcmF0b3I6IFNldE9wZXJhdG9yO1xuXHRvcGVyYW5kczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W107XG59O1xuXG5leHBvcnQgdHlwZSBOb3RFeHByZXNzaW9uID0gQmFzZUV4cHJlc3Npb248Ym9vbGVhbj4gJiB7XG5cdF90eXBlOiBcIk5vdFwiO1xuXHRvcGVyYW5kOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG59O1xuXG5leHBvcnQgdHlwZSBUcnV0aHlFeHByZXNzaW9uID0gQmFzZUV4cHJlc3Npb248Ym9vbGVhbj4gJiB7XG5cdF90eXBlOiBcIlRydXRoeVwiO1xuXHRvcGVyYW5kOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPjtcbn07XG5cbmV4cG9ydCB0eXBlIFJlZmVyZW5jZUV4cHJlc3Npb24gPSBCYXNlRXhwcmVzc2lvbjxvYmplY3Q+ICYge1xuXHRfdHlwZTogXCJSZWZcIjtcblx0cmVmOiBzdHJpbmcgfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgRm9ybWF0dGVyRXhwcmVzc2lvbjxUPiA9IEJhc2VFeHByZXNzaW9uPFQ+ICYge1xuXHRfdHlwZTogXCJGb3JtYXR0ZXJcIjtcblx0Zm46IHN0cmluZztcblx0cGFyYW1ldGVyczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGFueT5bXTtcbn07XG5cbnR5cGUgQ29tcGxleFR5cGVFeHByZXNzaW9uPFQ+ID0gQmFzZUV4cHJlc3Npb248VD4gJiB7XG5cdF90eXBlOiBcIkNvbXBsZXhUeXBlXCI7XG5cdHR5cGU6IHN0cmluZztcblx0Zm9ybWF0T3B0aW9uczogYW55O1xuXHRwYXJhbWV0ZXJzOiBvYmplY3Q7XG5cdGJpbmRpbmdQYXJhbWV0ZXJzOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248YW55PltdO1xufTtcblxuZXhwb3J0IHR5cGUgRnVuY3Rpb25FeHByZXNzaW9uPFQ+ID0gQmFzZUV4cHJlc3Npb248VD4gJiB7XG5cdF90eXBlOiBcIkZ1bmN0aW9uXCI7XG5cdG9iaj86IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxvYmplY3Q+O1xuXHRmbjogc3RyaW5nO1xuXHRwYXJhbWV0ZXJzOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248YW55PltdO1xufTtcblxuZXhwb3J0IHR5cGUgQ29uY2F0RXhwcmVzc2lvbiA9IEJhc2VFeHByZXNzaW9uPHN0cmluZz4gJiB7XG5cdF90eXBlOiBcIkNvbmNhdFwiO1xuXHRleHByZXNzaW9uczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz5bXTtcbn07XG5cbmV4cG9ydCB0eXBlIExlbmd0aEV4cHJlc3Npb24gPSBCYXNlRXhwcmVzc2lvbjxzdHJpbmc+ICYge1xuXHRfdHlwZTogXCJMZW5ndGhcIjtcblx0cGF0aEluTW9kZWw6IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxhbnk+O1xufTtcblxudHlwZSBVbnJlc29sdmVhYmxlUGF0aEV4cHJlc3Npb24gPSBCYXNlRXhwcmVzc2lvbjxzdHJpbmc+ICYge1xuXHRfdHlwZTogXCJVbnJlc29sdmFibGVcIjtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYgUGF0aEluTW9kZWxFeHByZXNzaW9uXG4gKi9cbmV4cG9ydCB0eXBlIFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUPiA9IEJhc2VFeHByZXNzaW9uPFQ+ICYge1xuXHRfdHlwZTogXCJQYXRoSW5Nb2RlbFwiO1xuXHRtb2RlbE5hbWU/OiBzdHJpbmc7XG5cdHBhdGg6IHN0cmluZztcblx0dGFyZ2V0RW50aXR5U2V0PzogRW50aXR5U2V0O1xuXHR0eXBlPzogc3RyaW5nO1xuXHRjb25zdHJhaW50cz86IGFueTtcblx0cGFyYW1ldGVycz86IGFueTtcblx0dGFyZ2V0VHlwZT86IHN0cmluZztcblx0bW9kZT86IHN0cmluZztcblx0Zm9ybWF0T3B0aW9ucz86IGFueTtcbn07XG5cbmV4cG9ydCB0eXBlIEVtYmVkZGVkVUk1QmluZGluZ0V4cHJlc3Npb248VD4gPSBCYXNlRXhwcmVzc2lvbjxUPiAmIHtcblx0X3R5cGU6IFwiRW1iZWRkZWRCaW5kaW5nXCI7XG5cdHZhbHVlOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBFbWJlZGRlZFVJNUV4cHJlc3Npb25CaW5kaW5nRXhwcmVzc2lvbjxUPiA9IEJhc2VFeHByZXNzaW9uPFQ+ICYge1xuXHRfdHlwZTogXCJFbWJlZGRlZEV4cHJlc3Npb25CaW5kaW5nXCI7XG5cdHZhbHVlOiBzdHJpbmc7XG59O1xuXG50eXBlIENvbXBhcmlzb25PcGVyYXRvciA9IFwiPT09XCIgfCBcIiE9PVwiIHwgXCI+PVwiIHwgXCI+XCIgfCBcIjw9XCIgfCBcIjxcIjtcbmV4cG9ydCB0eXBlIENvbXBhcmlzb25FeHByZXNzaW9uID0gQmFzZUV4cHJlc3Npb248Ym9vbGVhbj4gJiB7XG5cdF90eXBlOiBcIkNvbXBhcmlzb25cIjtcblx0b3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcjtcblx0b3BlcmFuZDE6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxhbnk+O1xuXHRvcGVyYW5kMjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGFueT47XG59O1xuXG5leHBvcnQgdHlwZSBJZkVsc2VFeHByZXNzaW9uPFQ+ID0gQmFzZUV4cHJlc3Npb248VD4gJiB7XG5cdF90eXBlOiBcIklmRWxzZVwiO1xuXHRjb25kaXRpb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcblx0b25UcnVlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdG9uRmFsc2U6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcbn07XG5cbi8qKlxuICogQW4gZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRlcyB0byB0eXBlIFQuXG4gKlxuICogQHR5cGVkZWYgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uXG4gKi9cbmV4cG9ydCB0eXBlIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPiA9XG5cdHwgVW5yZXNvbHZlYWJsZVBhdGhFeHByZXNzaW9uXG5cdHwgQ29uc3RhbnRFeHByZXNzaW9uPFQ+XG5cdHwgU2V0RXhwcmVzc2lvblxuXHR8IE5vdEV4cHJlc3Npb25cblx0fCBUcnV0aHlFeHByZXNzaW9uXG5cdHwgQ29uY2F0RXhwcmVzc2lvblxuXHR8IExlbmd0aEV4cHJlc3Npb25cblx0fCBQYXRoSW5Nb2RlbEV4cHJlc3Npb248VD5cblx0fCBFbWJlZGRlZFVJNUJpbmRpbmdFeHByZXNzaW9uPFQ+XG5cdHwgRW1iZWRkZWRVSTVFeHByZXNzaW9uQmluZGluZ0V4cHJlc3Npb248VD5cblx0fCBDb21wYXJpc29uRXhwcmVzc2lvblxuXHR8IElmRWxzZUV4cHJlc3Npb248VD5cblx0fCBGb3JtYXR0ZXJFeHByZXNzaW9uPFQ+XG5cdHwgQ29tcGxleFR5cGVFeHByZXNzaW9uPFQ+XG5cdHwgUmVmZXJlbmNlRXhwcmVzc2lvblxuXHR8IEZ1bmN0aW9uRXhwcmVzc2lvbjxUPjtcblxuLyoqXG4gKiBBbiBleHByZXNzaW9uIHRoYXQgZXZhbHVhdGVzIHRvIHR5cGUgVCwgb3IgYSBjb25zdGFudCB2YWx1ZSBvZiB0eXBlIFRcbiAqL1xudHlwZSBFeHByZXNzaW9uT3JQcmltaXRpdmU8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+ID0gQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+IHwgVDtcblxuZXhwb3J0IGNvbnN0IHVucmVzb2x2ZWFibGVFeHByZXNzaW9uOiBVbnJlc29sdmVhYmxlUGF0aEV4cHJlc3Npb24gPSB7XG5cdF90eXBlOiBcIlVucmVzb2x2YWJsZVwiXG59O1xuXG5mdW5jdGlvbiBlc2NhcGVYbWxBdHRyaWJ1dGUoaW5wdXRTdHJpbmc6IHN0cmluZykge1xuXHRyZXR1cm4gaW5wdXRTdHJpbmcucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzVW5yZXNvbHZlYWJsZUV4cHJlc3Npb24oLi4uZXhwcmVzc2lvbnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxhbnk+W10pOiBib29sZWFuIHtcblx0cmV0dXJuIGV4cHJlc3Npb25zLmZpbmQoKGV4cHIpID0+IGV4cHIuX3R5cGUgPT09IFwiVW5yZXNvbHZhYmxlXCIpICE9PSB1bmRlZmluZWQ7XG59XG4vKipcbiAqIENoZWNrIHR3byBleHByZXNzaW9ucyBmb3IgKGRlZXApIGVxdWFsaXR5LlxuICpcbiAqIEBwYXJhbSBhXG4gKiBAcGFyYW0gYlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSB0d28gZXhwcmVzc2lvbnMgYXJlIGVxdWFsXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbDxUPihhOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4sIGI6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPik6IGJvb2xlYW4ge1xuXHRpZiAoYS5fdHlwZSAhPT0gYi5fdHlwZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHN3aXRjaCAoYS5fdHlwZSkge1xuXHRcdGNhc2UgXCJVbnJlc29sdmFibGVcIjpcblx0XHRcdHJldHVybiBmYWxzZTsgLy8gVW5yZXNvbHZhYmxlIGlzIG5ldmVyIGVxdWFsIHRvIGFueXRoaW5nIGV2ZW4gaXRzZWxmXG5cdFx0Y2FzZSBcIkNvbnN0YW50XCI6XG5cdFx0Y2FzZSBcIkVtYmVkZGVkQmluZGluZ1wiOlxuXHRcdGNhc2UgXCJFbWJlZGRlZEV4cHJlc3Npb25CaW5kaW5nXCI6XG5cdFx0XHRyZXR1cm4gYS52YWx1ZSA9PT0gKGIgYXMgQ29uc3RhbnRFeHByZXNzaW9uPFQ+KS52YWx1ZTtcblxuXHRcdGNhc2UgXCJOb3RcIjpcblx0XHRcdHJldHVybiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGEub3BlcmFuZCwgKGIgYXMgTm90RXhwcmVzc2lvbikub3BlcmFuZCk7XG5cdFx0Y2FzZSBcIlRydXRoeVwiOlxuXHRcdFx0cmV0dXJuIF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoYS5vcGVyYW5kLCAoYiBhcyBUcnV0aHlFeHByZXNzaW9uKS5vcGVyYW5kKTtcblx0XHRjYXNlIFwiU2V0XCI6XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRhLm9wZXJhdG9yID09PSAoYiBhcyBTZXRFeHByZXNzaW9uKS5vcGVyYXRvciAmJlxuXHRcdFx0XHRhLm9wZXJhbmRzLmxlbmd0aCA9PT0gKGIgYXMgU2V0RXhwcmVzc2lvbikub3BlcmFuZHMubGVuZ3RoICYmXG5cdFx0XHRcdGEub3BlcmFuZHMuZXZlcnkoKGV4cHJlc3Npb24pID0+XG5cdFx0XHRcdFx0KGIgYXMgU2V0RXhwcmVzc2lvbikub3BlcmFuZHMuc29tZSgob3RoZXJFeHByZXNzaW9uKSA9PiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGV4cHJlc3Npb24sIG90aGVyRXhwcmVzc2lvbikpXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cblx0XHRjYXNlIFwiSWZFbHNlXCI6XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGEuY29uZGl0aW9uLCAoYiBhcyBJZkVsc2VFeHByZXNzaW9uPFQ+KS5jb25kaXRpb24pICYmXG5cdFx0XHRcdF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoYS5vblRydWUsIChiIGFzIElmRWxzZUV4cHJlc3Npb248VD4pLm9uVHJ1ZSkgJiZcblx0XHRcdFx0X2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChhLm9uRmFsc2UsIChiIGFzIElmRWxzZUV4cHJlc3Npb248VD4pLm9uRmFsc2UpXG5cdFx0XHQpO1xuXG5cdFx0Y2FzZSBcIkNvbXBhcmlzb25cIjpcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGEub3BlcmF0b3IgPT09IChiIGFzIENvbXBhcmlzb25FeHByZXNzaW9uKS5vcGVyYXRvciAmJlxuXHRcdFx0XHRfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGEub3BlcmFuZDEsIChiIGFzIENvbXBhcmlzb25FeHByZXNzaW9uKS5vcGVyYW5kMSkgJiZcblx0XHRcdFx0X2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChhLm9wZXJhbmQyLCAoYiBhcyBDb21wYXJpc29uRXhwcmVzc2lvbikub3BlcmFuZDIpXG5cdFx0XHQpO1xuXG5cdFx0Y2FzZSBcIkNvbmNhdFwiOlxuXHRcdFx0Y29uc3QgYUV4cHJlc3Npb25zID0gYS5leHByZXNzaW9ucztcblx0XHRcdGNvbnN0IGJFeHByZXNzaW9ucyA9IChiIGFzIENvbmNhdEV4cHJlc3Npb24pLmV4cHJlc3Npb25zO1xuXHRcdFx0aWYgKGFFeHByZXNzaW9ucy5sZW5ndGggIT09IGJFeHByZXNzaW9ucy5sZW5ndGgpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGFFeHByZXNzaW9ucy5ldmVyeSgoZXhwcmVzc2lvbiwgaW5kZXgpID0+IHtcblx0XHRcdFx0cmV0dXJuIF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoZXhwcmVzc2lvbiwgYkV4cHJlc3Npb25zW2luZGV4XSk7XG5cdFx0XHR9KTtcblxuXHRcdGNhc2UgXCJMZW5ndGhcIjpcblx0XHRcdHJldHVybiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGEucGF0aEluTW9kZWwsIChiIGFzIExlbmd0aEV4cHJlc3Npb24pLnBhdGhJbk1vZGVsKTtcblxuXHRcdGNhc2UgXCJQYXRoSW5Nb2RlbFwiOlxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0YS5tb2RlbE5hbWUgPT09IChiIGFzIFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUPikubW9kZWxOYW1lICYmXG5cdFx0XHRcdGEucGF0aCA9PT0gKGIgYXMgUGF0aEluTW9kZWxFeHByZXNzaW9uPFQ+KS5wYXRoICYmXG5cdFx0XHRcdGEudGFyZ2V0RW50aXR5U2V0ID09PSAoYiBhcyBQYXRoSW5Nb2RlbEV4cHJlc3Npb248VD4pLnRhcmdldEVudGl0eVNldFxuXHRcdFx0KTtcblxuXHRcdGNhc2UgXCJGb3JtYXR0ZXJcIjpcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGEuZm4gPT09IChiIGFzIEZvcm1hdHRlckV4cHJlc3Npb248VD4pLmZuICYmXG5cdFx0XHRcdGEucGFyYW1ldGVycy5sZW5ndGggPT09IChiIGFzIEZvcm1hdHRlckV4cHJlc3Npb248VD4pLnBhcmFtZXRlcnMubGVuZ3RoICYmXG5cdFx0XHRcdGEucGFyYW1ldGVycy5ldmVyeSgodmFsdWUsIGluZGV4KSA9PiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKChiIGFzIEZvcm1hdHRlckV4cHJlc3Npb248VD4pLnBhcmFtZXRlcnNbaW5kZXhdLCB2YWx1ZSkpXG5cdFx0XHQpO1xuXHRcdGNhc2UgXCJDb21wbGV4VHlwZVwiOlxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0YS50eXBlID09PSAoYiBhcyBDb21wbGV4VHlwZUV4cHJlc3Npb248VD4pLnR5cGUgJiZcblx0XHRcdFx0YS5iaW5kaW5nUGFyYW1ldGVycy5sZW5ndGggPT09IChiIGFzIENvbXBsZXhUeXBlRXhwcmVzc2lvbjxUPikuYmluZGluZ1BhcmFtZXRlcnMubGVuZ3RoICYmXG5cdFx0XHRcdGEuYmluZGluZ1BhcmFtZXRlcnMuZXZlcnkoKHZhbHVlLCBpbmRleCkgPT5cblx0XHRcdFx0XHRfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKChiIGFzIENvbXBsZXhUeXBlRXhwcmVzc2lvbjxUPikuYmluZGluZ1BhcmFtZXRlcnNbaW5kZXhdLCB2YWx1ZSlcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHRjYXNlIFwiRnVuY3Rpb25cIjpcblx0XHRcdGNvbnN0IG90aGVyRnVuY3Rpb24gPSBiIGFzIEZ1bmN0aW9uRXhwcmVzc2lvbjxUPjtcblx0XHRcdGlmIChhLm9iaiA9PT0gdW5kZWZpbmVkIHx8IG90aGVyRnVuY3Rpb24ub2JqID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuIGEub2JqID09PSBvdGhlckZ1bmN0aW9uO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRhLmZuID09PSBvdGhlckZ1bmN0aW9uLmZuICYmXG5cdFx0XHRcdF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoYS5vYmosIG90aGVyRnVuY3Rpb24ub2JqKSAmJlxuXHRcdFx0XHRhLnBhcmFtZXRlcnMubGVuZ3RoID09PSBvdGhlckZ1bmN0aW9uLnBhcmFtZXRlcnMubGVuZ3RoICYmXG5cdFx0XHRcdGEucGFyYW1ldGVycy5ldmVyeSgodmFsdWUsIGluZGV4KSA9PiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKG90aGVyRnVuY3Rpb24ucGFyYW1ldGVyc1tpbmRleF0sIHZhbHVlKSlcblx0XHRcdCk7XG5cblx0XHRjYXNlIFwiUmVmXCI6XG5cdFx0XHRyZXR1cm4gYS5yZWYgPT09IChiIGFzIFJlZmVyZW5jZUV4cHJlc3Npb24pLnJlZjtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBuZXN0ZWQgU2V0RXhwcmVzc2lvbiBieSBpbmxpbmluZyBvcGVyYW5kcyBvZiB0eXBlIFNldEV4cHJlc3Npb24gd2l0aCB0aGUgc2FtZSBvcGVyYXRvci5cbiAqXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgZXhwcmVzc2lvbiB0byBmbGF0dGVuXG4gKiBAcmV0dXJucyBBIG5ldyBTZXRFeHByZXNzaW9uIHdpdGggdGhlIHNhbWUgb3BlcmF0b3JcbiAqL1xuZnVuY3Rpb24gZmxhdHRlblNldEV4cHJlc3Npb24oZXhwcmVzc2lvbjogU2V0RXhwcmVzc2lvbik6IFNldEV4cHJlc3Npb24ge1xuXHRyZXR1cm4gZXhwcmVzc2lvbi5vcGVyYW5kcy5yZWR1Y2UoXG5cdFx0KHJlc3VsdDogU2V0RXhwcmVzc2lvbiwgb3BlcmFuZCkgPT4ge1xuXHRcdFx0Y29uc3QgY2FuZGlkYXRlc0ZvckZsYXR0ZW5pbmcgPVxuXHRcdFx0XHRvcGVyYW5kLl90eXBlID09PSBcIlNldFwiICYmIG9wZXJhbmQub3BlcmF0b3IgPT09IGV4cHJlc3Npb24ub3BlcmF0b3IgPyBvcGVyYW5kLm9wZXJhbmRzIDogW29wZXJhbmRdO1xuXHRcdFx0Y2FuZGlkYXRlc0ZvckZsYXR0ZW5pbmcuZm9yRWFjaCgoY2FuZGlkYXRlKSA9PiB7XG5cdFx0XHRcdGlmIChyZXN1bHQub3BlcmFuZHMuZXZlcnkoKGUpID0+ICFfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGUsIGNhbmRpZGF0ZSkpKSB7XG5cdFx0XHRcdFx0cmVzdWx0Lm9wZXJhbmRzLnB1c2goY2FuZGlkYXRlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0sXG5cdFx0eyBfdHlwZTogXCJTZXRcIiwgb3BlcmF0b3I6IGV4cHJlc3Npb24ub3BlcmF0b3IsIG9wZXJhbmRzOiBbXSB9XG5cdCk7XG59XG5cbi8qKlxuICogRGV0ZWN0cyB3aGV0aGVyIGFuIGFycmF5IG9mIGJvb2xlYW4gZXhwcmVzc2lvbnMgY29udGFpbnMgYW4gZXhwcmVzc2lvbiBhbmQgaXRzIG5lZ2F0aW9uLlxuICpcbiAqIEBwYXJhbSBleHByZXNzaW9ucyBBcnJheSBvZiBleHByZXNzaW9uc1xuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBzZXQgb2YgZXhwcmVzc2lvbnMgY29udGFpbnMgYW4gZXhwcmVzc2lvbiBhbmQgaXRzIG5lZ2F0aW9uXG4gKi9cbmZ1bmN0aW9uIGhhc09wcG9zaXRlRXhwcmVzc2lvbnMoZXhwcmVzc2lvbnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdKTogYm9vbGVhbiB7XG5cdGNvbnN0IG5lZ2F0ZWRFeHByZXNzaW9ucyA9IGV4cHJlc3Npb25zLm1hcChub3QpO1xuXHRyZXR1cm4gZXhwcmVzc2lvbnMuc29tZSgoZXhwcmVzc2lvbiwgaW5kZXgpID0+IHtcblx0XHRmb3IgKGxldCBpID0gaW5kZXggKyAxOyBpIDwgbmVnYXRlZEV4cHJlc3Npb25zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChleHByZXNzaW9uLCBuZWdhdGVkRXhwcmVzc2lvbnNbaV0pKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0pO1xufVxuXG4vKipcbiAqIExvZ2ljYWwgYGFuZGAgZXhwcmVzc2lvbi5cbiAqXG4gKiBUaGUgZXhwcmVzc2lvbiBpcyBzaW1wbGlmaWVkIHRvIGZhbHNlIGlmIHRoaXMgY2FuIGJlIGRlY2lkZWQgc3RhdGljYWxseSAodGhhdCBpcywgaWYgb25lIG9wZXJhbmQgaXMgYSBjb25zdGFudFxuICogZmFsc2Ugb3IgaWYgdGhlIGV4cHJlc3Npb24gY29udGFpbnMgYW4gb3BlcmFuZCBhbmQgaXRzIG5lZ2F0aW9uKS5cbiAqXG4gKiBAcGFyYW0gb3BlcmFuZHMgRXhwcmVzc2lvbnMgdG8gY29ubmVjdCBieSBgYW5kYFxuICogQHJldHVybnMgRXhwcmVzc2lvbiBldmFsdWF0aW5nIHRvIGJvb2xlYW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFuZCguLi5vcGVyYW5kczogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPGJvb2xlYW4+W10pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBleHByZXNzaW9ucyA9IGZsYXR0ZW5TZXRFeHByZXNzaW9uKHtcblx0XHRfdHlwZTogXCJTZXRcIixcblx0XHRvcGVyYXRvcjogXCImJlwiLFxuXHRcdG9wZXJhbmRzOiBvcGVyYW5kcy5tYXAod3JhcFByaW1pdGl2ZSlcblx0fSkub3BlcmFuZHM7XG5cblx0aWYgKGhhc1VucmVzb2x2ZWFibGVFeHByZXNzaW9uKC4uLmV4cHJlc3Npb25zKSkge1xuXHRcdHJldHVybiB1bnJlc29sdmVhYmxlRXhwcmVzc2lvbjtcblx0fVxuXHRsZXQgaXNTdGF0aWNGYWxzZSA9IGZhbHNlO1xuXHRjb25zdCBub25Ucml2aWFsRXhwcmVzc2lvbiA9IGV4cHJlc3Npb25zLmZpbHRlcigoZXhwcmVzc2lvbikgPT4ge1xuXHRcdGlmIChpc0ZhbHNlKGV4cHJlc3Npb24pKSB7XG5cdFx0XHRpc1N0YXRpY0ZhbHNlID0gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuICFpc0NvbnN0YW50KGV4cHJlc3Npb24pO1xuXHR9KTtcblx0aWYgKGlzU3RhdGljRmFsc2UpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHR9IGVsc2UgaWYgKG5vblRyaXZpYWxFeHByZXNzaW9uLmxlbmd0aCA9PT0gMCkge1xuXHRcdC8vIFJlc29sdmUgdGhlIGNvbnN0YW50IHRoZW5cblx0XHRjb25zdCBpc1ZhbGlkID0gZXhwcmVzc2lvbnMucmVkdWNlKChyZXN1bHQsIGV4cHJlc3Npb24pID0+IHJlc3VsdCAmJiBpc1RydWUoZXhwcmVzc2lvbiksIHRydWUpO1xuXHRcdHJldHVybiBjb25zdGFudChpc1ZhbGlkKTtcblx0fSBlbHNlIGlmIChub25Ucml2aWFsRXhwcmVzc2lvbi5sZW5ndGggPT09IDEpIHtcblx0XHRyZXR1cm4gbm9uVHJpdmlhbEV4cHJlc3Npb25bMF07XG5cdH0gZWxzZSBpZiAoaGFzT3Bwb3NpdGVFeHByZXNzaW9ucyhub25Ucml2aWFsRXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB7XG5cdFx0XHRfdHlwZTogXCJTZXRcIixcblx0XHRcdG9wZXJhdG9yOiBcIiYmXCIsXG5cdFx0XHRvcGVyYW5kczogbm9uVHJpdmlhbEV4cHJlc3Npb25cblx0XHR9O1xuXHR9XG59XG5cbi8qKlxuICogTG9naWNhbCBgb3JgIGV4cHJlc3Npb24uXG4gKlxuICogVGhlIGV4cHJlc3Npb24gaXMgc2ltcGxpZmllZCB0byB0cnVlIGlmIHRoaXMgY2FuIGJlIGRlY2lkZWQgc3RhdGljYWxseSAodGhhdCBpcywgaWYgb25lIG9wZXJhbmQgaXMgYSBjb25zdGFudFxuICogdHJ1ZSBvciBpZiB0aGUgZXhwcmVzc2lvbiBjb250YWlucyBhbiBvcGVyYW5kIGFuZCBpdHMgbmVnYXRpb24pLlxuICpcbiAqIEBwYXJhbSBvcGVyYW5kcyBFeHByZXNzaW9ucyB0byBjb25uZWN0IGJ5IGBvcmBcbiAqIEByZXR1cm5zIEV4cHJlc3Npb24gZXZhbHVhdGluZyB0byBib29sZWFuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvciguLi5vcGVyYW5kczogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPGJvb2xlYW4+W10pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBleHByZXNzaW9ucyA9IGZsYXR0ZW5TZXRFeHByZXNzaW9uKHtcblx0XHRfdHlwZTogXCJTZXRcIixcblx0XHRvcGVyYXRvcjogXCJ8fFwiLFxuXHRcdG9wZXJhbmRzOiBvcGVyYW5kcy5tYXAod3JhcFByaW1pdGl2ZSlcblx0fSkub3BlcmFuZHM7XG5cdGlmIChoYXNVbnJlc29sdmVhYmxlRXhwcmVzc2lvbiguLi5leHByZXNzaW9ucykpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZlYWJsZUV4cHJlc3Npb247XG5cdH1cblx0bGV0IGlzU3RhdGljVHJ1ZSA9IGZhbHNlO1xuXHRjb25zdCBub25Ucml2aWFsRXhwcmVzc2lvbiA9IGV4cHJlc3Npb25zLmZpbHRlcigoZXhwcmVzc2lvbikgPT4ge1xuXHRcdGlmIChpc1RydWUoZXhwcmVzc2lvbikpIHtcblx0XHRcdGlzU3RhdGljVHJ1ZSA9IHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiAhaXNDb25zdGFudChleHByZXNzaW9uKSB8fCBleHByZXNzaW9uLnZhbHVlO1xuXHR9KTtcblx0aWYgKGlzU3RhdGljVHJ1ZSkge1xuXHRcdHJldHVybiBjb25zdGFudCh0cnVlKTtcblx0fSBlbHNlIGlmIChub25Ucml2aWFsRXhwcmVzc2lvbi5sZW5ndGggPT09IDApIHtcblx0XHQvLyBSZXNvbHZlIHRoZSBjb25zdGFudCB0aGVuXG5cdFx0Y29uc3QgaXNWYWxpZCA9IGV4cHJlc3Npb25zLnJlZHVjZSgocmVzdWx0LCBleHByZXNzaW9uKSA9PiByZXN1bHQgJiYgaXNUcnVlKGV4cHJlc3Npb24pLCB0cnVlKTtcblx0XHRyZXR1cm4gY29uc3RhbnQoaXNWYWxpZCk7XG5cdH0gZWxzZSBpZiAobm9uVHJpdmlhbEV4cHJlc3Npb24ubGVuZ3RoID09PSAxKSB7XG5cdFx0cmV0dXJuIG5vblRyaXZpYWxFeHByZXNzaW9uWzBdO1xuXHR9IGVsc2UgaWYgKGhhc09wcG9zaXRlRXhwcmVzc2lvbnMobm9uVHJpdmlhbEV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KHRydWUpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB7XG5cdFx0XHRfdHlwZTogXCJTZXRcIixcblx0XHRcdG9wZXJhdG9yOiBcInx8XCIsXG5cdFx0XHRvcGVyYW5kczogbm9uVHJpdmlhbEV4cHJlc3Npb25cblx0XHR9O1xuXHR9XG59XG5cbi8qKlxuICogTG9naWNhbCBgbm90YCBvcGVyYXRvci5cbiAqXG4gKiBAcGFyYW0gb3BlcmFuZCBUaGUgZXhwcmVzc2lvbiB0byByZXZlcnNlXG4gKiBAcmV0dXJucyBUaGUgcmVzdWx0aW5nIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgdG8gYm9vbGVhblxuICovXG5leHBvcnQgZnVuY3Rpb24gbm90KG9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdG9wZXJhbmQgPSB3cmFwUHJpbWl0aXZlKG9wZXJhbmQpO1xuXHRpZiAoaGFzVW5yZXNvbHZlYWJsZUV4cHJlc3Npb24ob3BlcmFuZCkpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZlYWJsZUV4cHJlc3Npb247XG5cdH0gZWxzZSBpZiAoaXNDb25zdGFudChvcGVyYW5kKSkge1xuXHRcdHJldHVybiBjb25zdGFudCghb3BlcmFuZC52YWx1ZSk7XG5cdH0gZWxzZSBpZiAoXG5cdFx0dHlwZW9mIG9wZXJhbmQgPT09IFwib2JqZWN0XCIgJiZcblx0XHRvcGVyYW5kLl90eXBlID09PSBcIlNldFwiICYmXG5cdFx0b3BlcmFuZC5vcGVyYXRvciA9PT0gXCJ8fFwiICYmXG5cdFx0b3BlcmFuZC5vcGVyYW5kcy5ldmVyeSgoZXhwcmVzc2lvbikgPT4gaXNDb25zdGFudChleHByZXNzaW9uKSB8fCBpc0NvbXBhcmlzb24oZXhwcmVzc2lvbikpXG5cdCkge1xuXHRcdHJldHVybiBhbmQoLi4ub3BlcmFuZC5vcGVyYW5kcy5tYXAoKGV4cHJlc3Npb24pID0+IG5vdChleHByZXNzaW9uKSkpO1xuXHR9IGVsc2UgaWYgKFxuXHRcdHR5cGVvZiBvcGVyYW5kID09PSBcIm9iamVjdFwiICYmXG5cdFx0b3BlcmFuZC5fdHlwZSA9PT0gXCJTZXRcIiAmJlxuXHRcdG9wZXJhbmQub3BlcmF0b3IgPT09IFwiJiZcIiAmJlxuXHRcdG9wZXJhbmQub3BlcmFuZHMuZXZlcnkoKGV4cHJlc3Npb24pID0+IGlzQ29uc3RhbnQoZXhwcmVzc2lvbikgfHwgaXNDb21wYXJpc29uKGV4cHJlc3Npb24pKVxuXHQpIHtcblx0XHRyZXR1cm4gb3IoLi4ub3BlcmFuZC5vcGVyYW5kcy5tYXAoKGV4cHJlc3Npb24pID0+IG5vdChleHByZXNzaW9uKSkpO1xuXHR9IGVsc2UgaWYgKGlzQ29tcGFyaXNvbihvcGVyYW5kKSkge1xuXHRcdC8vIENyZWF0ZSB0aGUgcmV2ZXJzZSBjb21wYXJpc29uXG5cdFx0c3dpdGNoIChvcGVyYW5kLm9wZXJhdG9yKSB7XG5cdFx0XHRjYXNlIFwiIT09XCI6XG5cdFx0XHRcdHJldHVybiB7IC4uLm9wZXJhbmQsIG9wZXJhdG9yOiBcIj09PVwiIH07XG5cdFx0XHRjYXNlIFwiPFwiOlxuXHRcdFx0XHRyZXR1cm4geyAuLi5vcGVyYW5kLCBvcGVyYXRvcjogXCI+PVwiIH07XG5cdFx0XHRjYXNlIFwiPD1cIjpcblx0XHRcdFx0cmV0dXJuIHsgLi4ub3BlcmFuZCwgb3BlcmF0b3I6IFwiPlwiIH07XG5cdFx0XHRjYXNlIFwiPT09XCI6XG5cdFx0XHRcdHJldHVybiB7IC4uLm9wZXJhbmQsIG9wZXJhdG9yOiBcIiE9PVwiIH07XG5cdFx0XHRjYXNlIFwiPlwiOlxuXHRcdFx0XHRyZXR1cm4geyAuLi5vcGVyYW5kLCBvcGVyYXRvcjogXCI8PVwiIH07XG5cdFx0XHRjYXNlIFwiPj1cIjpcblx0XHRcdFx0cmV0dXJuIHsgLi4ub3BlcmFuZCwgb3BlcmF0b3I6IFwiPFwiIH07XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG9wZXJhbmQuX3R5cGUgPT09IFwiTm90XCIpIHtcblx0XHRyZXR1cm4gb3BlcmFuZC5vcGVyYW5kO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRfdHlwZTogXCJOb3RcIixcblx0XHRvcGVyYW5kOiBvcGVyYW5kXG5cdH07XG59XG5cbi8qKlxuICogRXZhbHVhdGVzIHdoZXRoZXIgYSBiaW5kaW5nIGV4cHJlc3Npb24gaXMgZXF1YWwgdG8gdHJ1ZSB3aXRoIGEgbG9vc2UgZXF1YWxpdHkuXG4gKlxuICogQHBhcmFtIG9wZXJhbmQgVGhlIGV4cHJlc3Npb24gdG8gY2hlY2tcbiAqIEByZXR1cm5zIFRoZSByZXN1bHRpbmcgZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRlcyB0byBib29sZWFuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1RydXRoeShvcGVyYW5kOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGlmIChpc0NvbnN0YW50KG9wZXJhbmQpKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KCEhb3BlcmFuZC52YWx1ZSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdF90eXBlOiBcIlRydXRoeVwiLFxuXHRcdFx0b3BlcmFuZDogb3BlcmFuZFxuXHRcdH07XG5cdH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgYmluZGluZyBleHByZXNzaW9uIHRoYXQgd2lsbCBiZSBldmFsdWF0ZWQgYnkgdGhlIGNvcnJlc3BvbmRpbmcgbW9kZWwuXG4gKlxuICogQHBhcmFtIHBhdGhcbiAqIEBwYXJhbSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB2aXNpdGVkTmF2aWdhdGlvblBhdGhzXG4gKiBAcGFyYW0gcGF0aFZpc2l0b3JcbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gcmVwcmVzZW50YXRpbmcgdGhhdCBwYXRoIGluIHRoZSBtb2RlbFxuICogQGRlcHJlY2F0ZWQgdXNlIHBhdGhJbk1vZGVsIGluc3RlYWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJpbmRpbmdFeHByZXNzaW9uPFRhcmdldFR5cGUgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0cGF0aDogYW55LFxuXHRtb2RlbE5hbWU/OiBzdHJpbmcsXG5cdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdID0gW10sXG5cdHBhdGhWaXNpdG9yPzogRnVuY3Rpb25cbik6IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUYXJnZXRUeXBlPiB8IFVucmVzb2x2ZWFibGVQYXRoRXhwcmVzc2lvbiB7XG5cdHJldHVybiBwYXRoSW5Nb2RlbChwYXRoLCBtb2RlbE5hbWUsIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgYmluZGluZyBleHByZXNzaW9uIHRoYXQgd2lsbCBiZSBldmFsdWF0ZWQgYnkgdGhlIGNvcnJlc3BvbmRpbmcgbW9kZWwuXG4gKlxuICogQHRlbXBsYXRlIFRhcmdldFR5cGVcbiAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIG9uIHRoZSBtb2RlbFxuICogQHBhcmFtIFttb2RlbE5hbWVdIFRoZSBuYW1lIG9mIHRoZSBtb2RlbFxuICogQHBhcmFtIFt2aXNpdGVkTmF2aWdhdGlvblBhdGhzXSBUaGUgcGF0aHMgZnJvbSB0aGUgcm9vdCBlbnRpdHlTZXRcbiAqIEBwYXJhbSBbcGF0aFZpc2l0b3JdIEEgZnVuY3Rpb24gdG8gbW9kaWZ5IHRoZSByZXN1bHRpbmcgcGF0aFxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiByZXByZXNlbnRhdGluZyB0aGF0IHBhdGggaW4gdGhlIG1vZGVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXRoSW5Nb2RlbChcblx0cGF0aDogdW5kZWZpbmVkLFxuXHRtb2RlbE5hbWU/OiBzdHJpbmcsXG5cdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHM/OiBzdHJpbmdbXSxcblx0cGF0aFZpc2l0b3I/OiBGdW5jdGlvblxuKTogVW5yZXNvbHZlYWJsZVBhdGhFeHByZXNzaW9uO1xuZXhwb3J0IGZ1bmN0aW9uIHBhdGhJbk1vZGVsPFRhcmdldFR5cGUgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0cGF0aDogc3RyaW5nLFxuXHRtb2RlbE5hbWU/OiBzdHJpbmcsXG5cdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHM/OiBzdHJpbmdbXSxcblx0cGF0aFZpc2l0b3I/OiB1bmRlZmluZWRcbik6IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUYXJnZXRUeXBlPjtcbmV4cG9ydCBmdW5jdGlvbiBwYXRoSW5Nb2RlbDxUYXJnZXRUeXBlIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdHBhdGg6IHN0cmluZyxcblx0bW9kZWxOYW1lPzogc3RyaW5nLFxuXHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzPzogc3RyaW5nW10sXG5cdHBhdGhWaXNpdG9yPzogRnVuY3Rpb25cbik6IFVucmVzb2x2ZWFibGVQYXRoRXhwcmVzc2lvbiB8IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUYXJnZXRUeXBlPjtcbmV4cG9ydCBmdW5jdGlvbiBwYXRoSW5Nb2RlbDxUYXJnZXRUeXBlIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdHBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0bW9kZWxOYW1lPzogc3RyaW5nLFxuXHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzPzogc3RyaW5nW10sXG5cdHBhdGhWaXNpdG9yPzogRnVuY3Rpb25cbik6IFVucmVzb2x2ZWFibGVQYXRoRXhwcmVzc2lvbiB8IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUYXJnZXRUeXBlPjtcbmV4cG9ydCBmdW5jdGlvbiBwYXRoSW5Nb2RlbDxUYXJnZXRUeXBlIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdHBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0bW9kZWxOYW1lPzogc3RyaW5nLFxuXHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSA9IFtdLFxuXHRwYXRoVmlzaXRvcj86IEZ1bmN0aW9uXG4pOiBVbnJlc29sdmVhYmxlUGF0aEV4cHJlc3Npb24gfCBQYXRoSW5Nb2RlbEV4cHJlc3Npb248VGFyZ2V0VHlwZT4ge1xuXHRpZiAocGF0aCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIHVucmVzb2x2ZWFibGVFeHByZXNzaW9uO1xuXHR9XG5cdGxldCB0YXJnZXRQYXRoO1xuXHRpZiAocGF0aFZpc2l0b3IpIHtcblx0XHR0YXJnZXRQYXRoID0gcGF0aFZpc2l0b3IocGF0aCk7XG5cdFx0aWYgKHRhcmdldFBhdGggPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIHVucmVzb2x2ZWFibGVFeHByZXNzaW9uO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRjb25zdCBsb2NhbFBhdGggPSB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLmNvbmNhdCgpO1xuXHRcdGxvY2FsUGF0aC5wdXNoKHBhdGgpO1xuXHRcdHRhcmdldFBhdGggPSBsb2NhbFBhdGguam9pbihcIi9cIik7XG5cdH1cblx0cmV0dXJuIHtcblx0XHRfdHlwZTogXCJQYXRoSW5Nb2RlbFwiLFxuXHRcdG1vZGVsTmFtZTogbW9kZWxOYW1lLFxuXHRcdHBhdGg6IHRhcmdldFBhdGhcblx0fTtcbn1cblxudHlwZSBQbGFpbkV4cHJlc3Npb25PYmplY3QgPSB7IFtpbmRleDogc3RyaW5nXTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGFueT4gfTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY29uc3RhbnQgZXhwcmVzc2lvbiBiYXNlZCBvbiBhIHByaW1pdGl2ZSB2YWx1ZS5cbiAqXG4gKiBAdGVtcGxhdGUgVFxuICogQHBhcmFtIHZhbHVlIFRoZSBjb25zdGFudCB0byB3cmFwIGluIGFuIGV4cHJlc3Npb25cbiAqIEByZXR1cm5zIFRoZSBjb25zdGFudCBleHByZXNzaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb25zdGFudDxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4odmFsdWU6IFQpOiBDb25zdGFudEV4cHJlc3Npb248VD4ge1xuXHRsZXQgY29uc3RhbnRWYWx1ZTogVDtcblxuXHRpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRcdGNvbnN0YW50VmFsdWUgPSB2YWx1ZS5tYXAod3JhcFByaW1pdGl2ZSkgYXMgVDtcblx0XHR9IGVsc2UgaWYgKGlzUHJpbWl0aXZlT2JqZWN0KHZhbHVlKSkge1xuXHRcdFx0Y29uc3RhbnRWYWx1ZSA9IHZhbHVlLnZhbHVlT2YoKSBhcyBUO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdGFudFZhbHVlID0gT2JqZWN0LmVudHJpZXModmFsdWUpLnJlZHVjZSgocGxhaW5FeHByZXNzaW9uLCBba2V5LCB2YWxdKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHdyYXBwZWRWYWx1ZSA9IHdyYXBQcmltaXRpdmUodmFsKTtcblx0XHRcdFx0aWYgKHdyYXBwZWRWYWx1ZS5fdHlwZSAhPT0gXCJDb25zdGFudFwiIHx8IHdyYXBwZWRWYWx1ZS52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0cGxhaW5FeHByZXNzaW9uW2tleV0gPSB3cmFwcGVkVmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHBsYWluRXhwcmVzc2lvbjtcblx0XHRcdH0sIHt9IGFzIFBsYWluRXhwcmVzc2lvbk9iamVjdCkgYXMgVDtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3RhbnRWYWx1ZSA9IHZhbHVlO1xuXHR9XG5cblx0cmV0dXJuIHsgX3R5cGU6IFwiQ29uc3RhbnRcIiwgdmFsdWU6IGNvbnN0YW50VmFsdWUgfTtcbn1cblxudHlwZSBFdmFsdWF0aW9uVHlwZSA9IFwiYm9vbGVhblwiO1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVCaW5kaW5nU3RyaW5nPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0dmFsdWU6IHN0cmluZyB8IGJvb2xlYW4gfCBudW1iZXIsXG5cdHRhcmdldFR5cGU/OiBFdmFsdWF0aW9uVHlwZVxuKTogQ29uc3RhbnRFeHByZXNzaW9uPFQ+IHwgRW1iZWRkZWRVSTVCaW5kaW5nRXhwcmVzc2lvbjxUPiB8IEVtYmVkZGVkVUk1RXhwcmVzc2lvbkJpbmRpbmdFeHByZXNzaW9uPFQ+IHtcblx0aWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIHZhbHVlLnN0YXJ0c1dpdGgoXCJ7XCIpKSB7XG5cdFx0aWYgKHZhbHVlLnN0YXJ0c1dpdGgoXCJ7PVwiKSkge1xuXHRcdFx0Ly8gRXhwcmVzc2lvbiBiaW5kaW5nLCB3ZSBjYW4ganVzdCByZW1vdmUgdGhlIG91dGVyIGJpbmRpbmcgdGhpbmdzXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRfdHlwZTogXCJFbWJlZGRlZEV4cHJlc3Npb25CaW5kaW5nXCIsXG5cdFx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0X3R5cGU6IFwiRW1iZWRkZWRCaW5kaW5nXCIsXG5cdFx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdFx0fTtcblx0XHR9XG5cdH0gZWxzZSBpZiAodGFyZ2V0VHlwZSA9PT0gXCJib29sZWFuXCIgJiYgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmICh2YWx1ZSA9PT0gXCJ0cnVlXCIgfHwgdmFsdWUgPT09IFwiZmFsc2VcIikpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQodmFsdWUgPT09IFwidHJ1ZVwiKSBhcyBDb25zdGFudEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KHZhbHVlKSBhcyBDb25zdGFudEV4cHJlc3Npb248VD47XG5cdH1cbn1cblxuLyoqXG4gKiBBIG5hbWVkIHJlZmVyZW5jZS5cbiAqXG4gKiBAc2VlIGZuXG4gKiBAcGFyYW0gcmVmZXJlbmNlIFJlZmVyZW5jZVxuICogQHJldHVybnMgVGhlIG9iamVjdCByZWZlcmVuY2UgYmluZGluZyBwYXJ0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWYocmVmZXJlbmNlOiBzdHJpbmcgfCBudWxsKTogUmVmZXJlbmNlRXhwcmVzc2lvbiB7XG5cdHJldHVybiB7IF90eXBlOiBcIlJlZlwiLCByZWY6IHJlZmVyZW5jZSB9O1xufVxuXG4vKipcbiAqIERldGVybWluZSB3aGV0aGVyIHRoZSB0eXBlIGlzIGFuIGV4cHJlc3Npb24uXG4gKlxuICogRXZlcnkgb2JqZWN0IGhhdmluZyBhIHByb3BlcnR5IG5hbWVkIGBfdHlwZWAgb2Ygc29tZSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFuIGV4cHJlc3Npb24sIGV2ZW4gaWYgdGhlcmUgaXMgYWN0dWFsbHlcbiAqIG5vIHN1Y2ggZXhwcmVzc2lvbiB0eXBlIHN1cHBvcnRlZC5cbiAqXG4gKiBAcGFyYW0gc29tZXRoaW5nIFR5cGUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgdHlwZSBpcyBjb25zaWRlcmVkIHRvIGJlIGFuIGV4cHJlc3Npb25cbiAqL1xuZnVuY3Rpb24gaXNFeHByZXNzaW9uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihzb21ldGhpbmc6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPik6IHNvbWV0aGluZyBpcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4ge1xuXHRyZXR1cm4gc29tZXRoaW5nICE9PSBudWxsICYmIHR5cGVvZiBzb21ldGhpbmcgPT09IFwib2JqZWN0XCIgJiYgKHNvbWV0aGluZyBhcyBCYXNlRXhwcmVzc2lvbjxUPikuX3R5cGUgIT09IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBXcmFwIGEgcHJpbWl0aXZlIGludG8gYSBjb25zdGFudCBleHByZXNzaW9uIGlmIGl0IGlzIG5vdCBhbHJlYWR5IGFuIGV4cHJlc3Npb24uXG4gKlxuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSBzb21ldGhpbmcgVGhlIG9iamVjdCB0byB3cmFwIGluIGEgQ29uc3RhbnQgZXhwcmVzc2lvblxuICogQHJldHVybnMgRWl0aGVyIHRoZSBvcmlnaW5hbCBvYmplY3Qgb3IgdGhlIHdyYXBwZWQgb25lIGRlcGVuZGluZyBvbiB0aGUgY2FzZVxuICovXG5mdW5jdGlvbiB3cmFwUHJpbWl0aXZlPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihzb21ldGhpbmc6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPiB7XG5cdGlmIChpc0V4cHJlc3Npb24oc29tZXRoaW5nKSkge1xuXHRcdHJldHVybiBzb21ldGhpbmc7XG5cdH1cblxuXHRyZXR1cm4gY29uc3RhbnQoc29tZXRoaW5nKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGV4cHJlc3Npb24gb3IgdmFsdWUgcHJvdmlkZWQgaXMgY29uc3RhbnQgb3Igbm90LlxuICpcbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtICBtYXliZUNvbnN0YW50IFRoZSBleHByZXNzaW9uIG9yIHByaW1pdGl2ZSB2YWx1ZSB0aGF0IGlzIHRvIGJlIGNoZWNrZWRcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBpcyBjb25zdGFudFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDb25zdGFudDxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4obWF5YmVDb25zdGFudDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+KTogbWF5YmVDb25zdGFudCBpcyBDb25zdGFudEV4cHJlc3Npb248VD4ge1xuXHRyZXR1cm4gdHlwZW9mIG1heWJlQ29uc3RhbnQgIT09IFwib2JqZWN0XCIgfHwgKG1heWJlQ29uc3RhbnQgYXMgQmFzZUV4cHJlc3Npb248VD4pLl90eXBlID09PSBcIkNvbnN0YW50XCI7XG59XG5cbmZ1bmN0aW9uIGlzVHJ1ZShleHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT4pIHtcblx0cmV0dXJuIGlzQ29uc3RhbnQoZXhwcmVzc2lvbikgJiYgZXhwcmVzc2lvbi52YWx1ZSA9PT0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNGYWxzZShleHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT4pIHtcblx0cmV0dXJuIGlzQ29uc3RhbnQoZXhwcmVzc2lvbikgJiYgZXhwcmVzc2lvbi52YWx1ZSA9PT0gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBleHByZXNzaW9uIG9yIHZhbHVlIHByb3ZpZGVkIGlzIGEgcGF0aCBpbiBtb2RlbCBleHByZXNzaW9uIG9yIG5vdC5cbiAqXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSAgbWF5YmVCaW5kaW5nIFRoZSBleHByZXNzaW9uIG9yIHByaW1pdGl2ZSB2YWx1ZSB0aGF0IGlzIHRvIGJlIGNoZWNrZWRcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBpcyBhIHBhdGggaW4gbW9kZWwgZXhwcmVzc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb248VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRtYXliZUJpbmRpbmc6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogbWF5YmVCaW5kaW5nIGlzIFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUPiB7XG5cdHJldHVybiB0eXBlb2YgbWF5YmVCaW5kaW5nID09PSBcIm9iamVjdFwiICYmIChtYXliZUJpbmRpbmcgYXMgQmFzZUV4cHJlc3Npb248VD4pLl90eXBlID09PSBcIlBhdGhJbk1vZGVsXCI7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBleHByZXNzaW9uIG9yIHZhbHVlIHByb3ZpZGVkIGlzIGEgY29tcGxleCB0eXBlIGV4cHJlc3Npb24uXG4gKlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gIG1heWJlQmluZGluZyBUaGUgZXhwcmVzc2lvbiBvciBwcmltaXRpdmUgdmFsdWUgdGhhdCBpcyB0byBiZSBjaGVja2VkXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgaXQgaXMgYSBwYXRoIGluIG1vZGVsIGV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ29tcGxleFR5cGVFeHByZXNzaW9uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0bWF5YmVCaW5kaW5nOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IG1heWJlQmluZGluZyBpcyBDb21wbGV4VHlwZUV4cHJlc3Npb248VD4ge1xuXHRyZXR1cm4gdHlwZW9mIG1heWJlQmluZGluZyA9PT0gXCJvYmplY3RcIiAmJiAobWF5YmVCaW5kaW5nIGFzIEJhc2VFeHByZXNzaW9uPFQ+KS5fdHlwZSA9PT0gXCJDb21wbGV4VHlwZVwiO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZXhwcmVzc2lvbiBwcm92aWRlZCBpcyBhIGNvbXBhcmlzb24gb3Igbm90LlxuICpcbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGV4cHJlc3Npb24gVGhlIGV4cHJlc3Npb25cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgZXhwcmVzc2lvbiBpcyBhIENvbXBhcmlzb25FeHByZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIGlzQ29tcGFyaXNvbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+KTogZXhwcmVzc2lvbiBpcyBDb21wYXJpc29uRXhwcmVzc2lvbiB7XG5cdHJldHVybiBleHByZXNzaW9uLl90eXBlID09PSBcIkNvbXBhcmlzb25cIjtcbn1cblxudHlwZSBDb21wbGV4QW5ub3RhdGlvbkV4cHJlc3Npb248UD4gPVxuXHR8IFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IEFwcGx5QW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBJZkFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgT3JBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IEFuZEFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgTmVBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IEVxQW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBOb3RBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IEd0QW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBHZUFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgTGVBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IEx0QW5ub3RhdGlvbkV4cHJlc3Npb248UD47XG5cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlT2JqZWN0KG9iamVjdFR5cGU6IG9iamVjdCk6IGJvb2xlYW4ge1xuXHRzd2l0Y2ggKG9iamVjdFR5cGUuY29uc3RydWN0b3IubmFtZSkge1xuXHRcdGNhc2UgXCJTdHJpbmdcIjpcblx0XHRjYXNlIFwiTnVtYmVyXCI6XG5cdFx0Y2FzZSBcIkJvb2xlYW5cIjpcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHBhc3NlZCBhbm5vdGF0aW9uIGFubm90YXRpb25WYWx1ZSBpcyBhIENvbXBsZXhBbm5vdGF0aW9uRXhwcmVzc2lvbi5cbiAqXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSAgYW5ub3RhdGlvblZhbHVlIFRoZSBhbm5vdGF0aW9uIGFubm90YXRpb25WYWx1ZSB0byBldmFsdWF0ZVxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3QgaXMgYSB7Q29tcGxleEFubm90YXRpb25FeHByZXNzaW9ufVxuICovXG5mdW5jdGlvbiBpc0NvbXBsZXhBbm5vdGF0aW9uRXhwcmVzc2lvbjxUPihhbm5vdGF0aW9uVmFsdWU6IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPFQ+KTogYW5ub3RhdGlvblZhbHVlIGlzIENvbXBsZXhBbm5vdGF0aW9uRXhwcmVzc2lvbjxUPiB7XG5cdHJldHVybiB0eXBlb2YgYW5ub3RhdGlvblZhbHVlID09PSBcIm9iamVjdFwiICYmICFpc1ByaW1pdGl2ZU9iamVjdChhbm5vdGF0aW9uVmFsdWUgYXMgb2JqZWN0KTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSB0aGUgY29ycmVzcG9uZGluZyBhbm5vdGF0aW9uVmFsdWUgZm9yIGEgZ2l2ZW4gYW5ub3RhdGlvbiBhbm5vdGF0aW9uVmFsdWUuXG4gKlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gYW5ub3RhdGlvblZhbHVlIFRoZSBzb3VyY2UgYW5ub3RhdGlvbiBhbm5vdGF0aW9uVmFsdWVcbiAqIEBwYXJhbSB2aXNpdGVkTmF2aWdhdGlvblBhdGhzIFRoZSBwYXRoIGZyb20gdGhlIHJvb3QgZW50aXR5IHNldFxuICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBEZWZhdWx0IHZhbHVlIGlmIHRoZSBhbm5vdGF0aW9uVmFsdWUgaXMgdW5kZWZpbmVkXG4gKiBAcGFyYW0gcGF0aFZpc2l0b3IgQSBmdW5jdGlvbiB0byBtb2RpZnkgdGhlIHJlc3VsdGluZyBwYXRoXG4gKiBAcmV0dXJucyBUaGUgYW5ub3RhdGlvblZhbHVlIGVxdWl2YWxlbnQgdG8gdGhhdCBhbm5vdGF0aW9uIGFubm90YXRpb25WYWx1ZVxuICogQGRlcHJlY2F0ZWQgdXNlIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiBpbnN0ZWFkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbm5vdGF0aW9uRXhwcmVzc2lvbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGFubm90YXRpb25WYWx1ZTogUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8VD4sXG5cdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdID0gW10sXG5cdGRlZmF1bHRWYWx1ZT86IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cGF0aFZpc2l0b3I/OiBGdW5jdGlvblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGVDYXN0PFQ+PiB7XG5cdHJldHVybiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oYW5ub3RhdGlvblZhbHVlLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBkZWZhdWx0VmFsdWUsIHBhdGhWaXNpdG9yKTtcbn1cbi8qKlxuICogR2VuZXJhdGUgdGhlIGNvcnJlc3BvbmRpbmcgYW5ub3RhdGlvblZhbHVlIGZvciBhIGdpdmVuIGFubm90YXRpb24gYW5ub3RhdGlvblZhbHVlLlxuICpcbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGFubm90YXRpb25WYWx1ZSBUaGUgc291cmNlIGFubm90YXRpb24gYW5ub3RhdGlvblZhbHVlXG4gKiBAcGFyYW0gdmlzaXRlZE5hdmlnYXRpb25QYXRocyBUaGUgcGF0aCBmcm9tIHRoZSByb290IGVudGl0eSBzZXRcbiAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgRGVmYXVsdCB2YWx1ZSBpZiB0aGUgYW5ub3RhdGlvblZhbHVlIGlzIHVuZGVmaW5lZFxuICogQHBhcmFtIHBhdGhWaXNpdG9yIEEgZnVuY3Rpb24gdG8gbW9kaWZ5IHRoZSByZXN1bHRpbmcgcGF0aFxuICogQHJldHVybnMgVGhlIGFubm90YXRpb25WYWx1ZSBlcXVpdmFsZW50IHRvIHRoYXQgYW5ub3RhdGlvbiBhbm5vdGF0aW9uVmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGFubm90YXRpb25WYWx1ZTogUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8VD4sXG5cdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdID0gW10sXG5cdGRlZmF1bHRWYWx1ZT86IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cGF0aFZpc2l0b3I/OiBGdW5jdGlvblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGVDYXN0PFQ+PiB7XG5cdGlmIChhbm5vdGF0aW9uVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiB3cmFwUHJpbWl0aXZlKGRlZmF1bHRWYWx1ZSBhcyBUKTtcblx0fVxuXG5cdGlmICghaXNDb21wbGV4QW5ub3RhdGlvbkV4cHJlc3Npb24oYW5ub3RhdGlvblZhbHVlKSkge1xuXHRcdHJldHVybiBjb25zdGFudChhbm5vdGF0aW9uVmFsdWUpO1xuXHR9XG5cblx0c3dpdGNoIChhbm5vdGF0aW9uVmFsdWUudHlwZSkge1xuXHRcdGNhc2UgXCJQYXRoXCI6XG5cdFx0XHRyZXR1cm4gcGF0aEluTW9kZWwoYW5ub3RhdGlvblZhbHVlLnBhdGgsIHVuZGVmaW5lZCwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpO1xuXHRcdGNhc2UgXCJJZlwiOlxuXHRcdFx0cmV0dXJuIGFubm90YXRpb25JZkV4cHJlc3Npb24oYW5ub3RhdGlvblZhbHVlLklmLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcik7XG5cdFx0Y2FzZSBcIk5vdFwiOlxuXHRcdFx0cmV0dXJuIG5vdChwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLk5vdCwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdFx0Y2FzZSBcIkVxXCI6XG5cdFx0XHRyZXR1cm4gZXF1YWwoXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuRXFbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKSxcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS5FcVsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0XHRjYXNlIFwiTmVcIjpcblx0XHRcdHJldHVybiBub3RFcXVhbChcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS5OZVswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLk5lWzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcilcblx0XHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHRcdGNhc2UgXCJHdFwiOlxuXHRcdFx0cmV0dXJuIGdyZWF0ZXJUaGFuKFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLkd0WzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciksXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuR3RbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKVxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdFx0Y2FzZSBcIkdlXCI6XG5cdFx0XHRyZXR1cm4gZ3JlYXRlck9yRXF1YWwoXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuR2VbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKSxcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS5HZVsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0XHRjYXNlIFwiTHRcIjpcblx0XHRcdHJldHVybiBsZXNzVGhhbihcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS5MdFswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLkx0WzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcilcblx0XHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHRcdGNhc2UgXCJMZVwiOlxuXHRcdFx0cmV0dXJuIGxlc3NPckVxdWFsKFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLkxlWzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciksXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuTGVbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKVxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdFx0Y2FzZSBcIk9yXCI6XG5cdFx0XHRyZXR1cm4gb3IoXG5cdFx0XHRcdC4uLmFubm90YXRpb25WYWx1ZS5Pci5tYXAoZnVuY3Rpb24gKG9yQ29uZGl0aW9uKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbjxib29sZWFuPihvckNvbmRpdGlvbiwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpO1xuXHRcdFx0XHR9KVxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdFx0Y2FzZSBcIkFuZFwiOlxuXHRcdFx0cmV0dXJuIGFuZChcblx0XHRcdFx0Li4uYW5ub3RhdGlvblZhbHVlLkFuZC5tYXAoZnVuY3Rpb24gKGFuZENvbmRpdGlvbikge1xuXHRcdFx0XHRcdHJldHVybiBwYXJzZUFubm90YXRpb25Db25kaXRpb248Ym9vbGVhbj4oYW5kQ29uZGl0aW9uLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcik7XG5cdFx0XHRcdH0pXG5cdFx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0XHRjYXNlIFwiQXBwbHlcIjpcblx0XHRcdHJldHVybiBhbm5vdGF0aW9uQXBwbHlFeHByZXNzaW9uKFxuXHRcdFx0XHRhbm5vdGF0aW9uVmFsdWUgYXMgQXBwbHlBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+LFxuXHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHRwYXRoVmlzaXRvclxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH1cblx0cmV0dXJuIHVucmVzb2x2ZWFibGVFeHByZXNzaW9uO1xufVxuXG4vKipcbiAqIFBhcnNlIHRoZSBhbm5vdGF0aW9uIGNvbmRpdGlvbiBpbnRvIGFuIGV4cHJlc3Npb24uXG4gKlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gYW5ub3RhdGlvblZhbHVlIFRoZSBjb25kaXRpb24gb3IgdmFsdWUgZnJvbSB0aGUgYW5ub3RhdGlvblxuICogQHBhcmFtIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMgVGhlIHBhdGggZnJvbSB0aGUgcm9vdCBlbnRpdHkgc2V0XG4gKiBAcGFyYW0gcGF0aFZpc2l0b3IgQSBmdW5jdGlvbiB0byBtb2RpZnkgdGhlIHJlc3VsdGluZyBwYXRoXG4gKiBAcmV0dXJucyBBbiBlcXVpdmFsZW50IGV4cHJlc3Npb25cbiAqL1xuZnVuY3Rpb24gcGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0YW5ub3RhdGlvblZhbHVlOiBDb25kaXRpb25hbENoZWNrT3JWYWx1ZSxcblx0dmlzaXRlZE5hdmlnYXRpb25QYXRoczogc3RyaW5nW10gPSBbXSxcblx0cGF0aFZpc2l0b3I/OiBGdW5jdGlvblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+IHtcblx0aWYgKGFubm90YXRpb25WYWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgYW5ub3RhdGlvblZhbHVlICE9PSBcIm9iamVjdFwiKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KGFubm90YXRpb25WYWx1ZSBhcyBUKTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkT3JcIikpIHtcblx0XHRyZXR1cm4gb3IoXG5cdFx0XHQuLi4oKGFubm90YXRpb25WYWx1ZSBhcyBPckNvbmRpdGlvbmFsRXhwcmVzc2lvbikuJE9yLm1hcChmdW5jdGlvbiAob3JDb25kaXRpb24pIHtcblx0XHRcdFx0cmV0dXJuIHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihvckNvbmRpdGlvbiwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpO1xuXHRcdFx0fSkgYXMgdW5rbm93biBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSlcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkQW5kXCIpKSB7XG5cdFx0cmV0dXJuIGFuZChcblx0XHRcdC4uLigoYW5ub3RhdGlvblZhbHVlIGFzIEFuZENvbmRpdGlvbmFsRXhwcmVzc2lvbikuJEFuZC5tYXAoZnVuY3Rpb24gKGFuZENvbmRpdGlvbikge1xuXHRcdFx0XHRyZXR1cm4gcGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFuZENvbmRpdGlvbiwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpO1xuXHRcdFx0fSkgYXMgdW5rbm93biBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSlcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkTm90XCIpKSB7XG5cdFx0cmV0dXJuIG5vdChcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbigoYW5ub3RhdGlvblZhbHVlIGFzIE5vdENvbmRpdGlvbmFsRXhwcmVzc2lvbikuJE5vdCwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJEVxXCIpKSB7XG5cdFx0cmV0dXJuIGVxdWFsKFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgRXFDb25kaXRpb25hbEV4cHJlc3Npb24pLiRFcVswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgRXFDb25kaXRpb25hbEV4cHJlc3Npb24pLiRFcVsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJE5lXCIpKSB7XG5cdFx0cmV0dXJuIG5vdEVxdWFsKFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgTmVDb25kaXRpb25hbEV4cHJlc3Npb24pLiROZVswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgTmVDb25kaXRpb25hbEV4cHJlc3Npb24pLiROZVsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJEd0XCIpKSB7XG5cdFx0cmV0dXJuIGdyZWF0ZXJUaGFuKFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgR3RDb25kaXRpb25hbEV4cHJlc3Npb24pLiRHdFswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgR3RDb25kaXRpb25hbEV4cHJlc3Npb24pLiRHdFsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJEdlXCIpKSB7XG5cdFx0cmV0dXJuIGdyZWF0ZXJPckVxdWFsKFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgR2VDb25kaXRpb25hbEV4cHJlc3Npb24pLiRHZVswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgR2VDb25kaXRpb25hbEV4cHJlc3Npb24pLiRHZVsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJEx0XCIpKSB7XG5cdFx0cmV0dXJuIGxlc3NUaGFuKFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgTHRDb25kaXRpb25hbEV4cHJlc3Npb24pLiRMdFswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgTHRDb25kaXRpb25hbEV4cHJlc3Npb24pLiRMdFsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJExlXCIpKSB7XG5cdFx0cmV0dXJuIGxlc3NPckVxdWFsKFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgTGVDb25kaXRpb25hbEV4cHJlc3Npb24pLiRMZVswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgTGVDb25kaXRpb25hbEV4cHJlc3Npb24pLiRMZVsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJFBhdGhcIikpIHtcblx0XHRyZXR1cm4gcGF0aEluTW9kZWwoKGFubm90YXRpb25WYWx1ZSBhcyBQYXRoQ29uZGl0aW9uRXhwcmVzc2lvbjxUPikuJFBhdGgsIHVuZGVmaW5lZCwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpO1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRBcHBseVwiKSkge1xuXHRcdHJldHVybiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6IFwiQXBwbHlcIixcblx0XHRcdFx0RnVuY3Rpb246IChhbm5vdGF0aW9uVmFsdWUgYXMgYW55KS4kRnVuY3Rpb24sXG5cdFx0XHRcdEFwcGx5OiAoYW5ub3RhdGlvblZhbHVlIGFzIGFueSkuJEFwcGx5XG5cdFx0XHR9IGFzIFQsXG5cdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0cGF0aFZpc2l0b3Jcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkSWZcIikpIHtcblx0XHRyZXR1cm4gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKFxuXHRcdFx0e1xuXHRcdFx0XHR0eXBlOiBcIklmXCIsXG5cdFx0XHRcdElmOiAoYW5ub3RhdGlvblZhbHVlIGFzIGFueSkuJElmXG5cdFx0XHR9IGFzIFQsXG5cdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0cGF0aFZpc2l0b3Jcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkRW51bU1lbWJlclwiKSkge1xuXHRcdHJldHVybiBjb25zdGFudChyZXNvbHZlRW51bVZhbHVlKChhbm5vdGF0aW9uVmFsdWUgYXMgYW55KS4kRW51bU1lbWJlcikgYXMgVCk7XG5cdH1cblx0cmV0dXJuIGNvbnN0YW50KGZhbHNlIGFzIFQpO1xufVxuXG4vKipcbiAqIFByb2Nlc3MgdGhlIHtJZkFubm90YXRpb25FeHByZXNzaW9uVmFsdWV9IGludG8gYW4gZXhwcmVzc2lvbi5cbiAqXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBhbm5vdGF0aW9uVmFsdWUgQW4gSWYgZXhwcmVzc2lvbiByZXR1cm5pbmcgdGhlIHR5cGUgVFxuICogQHBhcmFtIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMgVGhlIHBhdGggZnJvbSB0aGUgcm9vdCBlbnRpdHkgc2V0XG4gKiBAcGFyYW0gcGF0aFZpc2l0b3IgQSBmdW5jdGlvbiB0byBtb2RpZnkgdGhlIHJlc3VsdGluZyBwYXRoXG4gKiBAcmV0dXJucyBUaGUgZXF1aXZhbGVudCBpZkVsc2UgZXhwcmVzc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gYW5ub3RhdGlvbklmRXhwcmVzc2lvbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGFubm90YXRpb25WYWx1ZTogSWZBbm5vdGF0aW9uRXhwcmVzc2lvblZhbHVlPFQ+LFxuXHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSA9IFtdLFxuXHRwYXRoVmlzaXRvcj86IEZ1bmN0aW9uXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4ge1xuXHRyZXR1cm4gaWZFbHNlKFxuXHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWVbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKSxcblx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlWzFdIGFzIGFueSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWVbMl0gYXMgYW55LCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcilcblx0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFubm90YXRpb25BcHBseUV4cHJlc3Npb24oXG5cdGFwcGx5RXhwcmVzc2lvbjogQXBwbHlBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+LFxuXHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSA9IFtdLFxuXHRwYXRoVmlzaXRvcj86IEZ1bmN0aW9uXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB7XG5cdHN3aXRjaCAoYXBwbHlFeHByZXNzaW9uLkZ1bmN0aW9uKSB7XG5cdFx0Y2FzZSBcIm9kYXRhLmNvbmNhdFwiOlxuXHRcdFx0cmV0dXJuIGNvbmNhdChcblx0XHRcdFx0Li4uYXBwbHlFeHByZXNzaW9uLkFwcGx5Lm1hcCgoYXBwbHlQYXJhbTogYW55KSA9PiB7XG5cdFx0XHRcdFx0bGV0IGFwcGx5UGFyYW1Db252ZXJ0ZWQgPSBhcHBseVBhcmFtO1xuXHRcdFx0XHRcdGlmIChhcHBseVBhcmFtLmhhc093blByb3BlcnR5KFwiJFBhdGhcIikpIHtcblx0XHRcdFx0XHRcdGFwcGx5UGFyYW1Db252ZXJ0ZWQgPSB7XG5cdFx0XHRcdFx0XHRcdHR5cGU6IFwiUGF0aFwiLFxuXHRcdFx0XHRcdFx0XHRwYXRoOiBhcHBseVBhcmFtLiRQYXRoXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoYXBwbHlQYXJhbS5oYXNPd25Qcm9wZXJ0eShcIiRJZlwiKSkge1xuXHRcdFx0XHRcdFx0YXBwbHlQYXJhbUNvbnZlcnRlZCA9IHtcblx0XHRcdFx0XHRcdFx0dHlwZTogXCJJZlwiLFxuXHRcdFx0XHRcdFx0XHRJZjogYXBwbHlQYXJhbS4kSWZcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChhcHBseVBhcmFtLmhhc093blByb3BlcnR5KFwiJEFwcGx5XCIpKSB7XG5cdFx0XHRcdFx0XHRhcHBseVBhcmFtQ29udmVydGVkID0ge1xuXHRcdFx0XHRcdFx0XHR0eXBlOiBcIkFwcGx5XCIsXG5cdFx0XHRcdFx0XHRcdEZ1bmN0aW9uOiBhcHBseVBhcmFtLiRGdW5jdGlvbixcblx0XHRcdFx0XHRcdFx0QXBwbHk6IGFwcGx5UGFyYW0uJEFwcGx5XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGFwcGx5UGFyYW1Db252ZXJ0ZWQsIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHVuZGVmaW5lZCwgcGF0aFZpc2l0b3IpO1xuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0fVxuXHRyZXR1cm4gdW5yZXNvbHZlYWJsZUV4cHJlc3Npb247XG59XG5cbi8qKlxuICogR2VuZXJpYyBoZWxwZXIgZm9yIHRoZSBjb21wYXJpc29uIG9wZXJhdGlvbnMgKGVxdWFsLCBub3RFcXVhbCwgLi4uKS5cbiAqXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBvcGVyYXRvciBUaGUgb3BlcmF0b3IgdG8gYXBwbHlcbiAqIEBwYXJhbSBsZWZ0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSBvcGVyYXRvclxuICogQHBhcmFtIHJpZ2h0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgb3BlcmF0b3JcbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBjb21wYXJpc29uXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmlzb248VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRvcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yLFxuXHRsZWZ0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRyaWdodE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgbGVmdEV4cHJlc3Npb24gPSB3cmFwUHJpbWl0aXZlKGxlZnRPcGVyYW5kKTtcblx0Y29uc3QgcmlnaHRFeHByZXNzaW9uID0gd3JhcFByaW1pdGl2ZShyaWdodE9wZXJhbmQpO1xuXHRpZiAoaGFzVW5yZXNvbHZlYWJsZUV4cHJlc3Npb24obGVmdEV4cHJlc3Npb24sIHJpZ2h0RXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZlYWJsZUV4cHJlc3Npb247XG5cdH1cblx0aWYgKGlzQ29uc3RhbnQobGVmdEV4cHJlc3Npb24pICYmIGlzQ29uc3RhbnQocmlnaHRFeHByZXNzaW9uKSkge1xuXHRcdHN3aXRjaCAob3BlcmF0b3IpIHtcblx0XHRcdGNhc2UgXCIhPT1cIjpcblx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KGxlZnRFeHByZXNzaW9uLnZhbHVlICE9PSByaWdodEV4cHJlc3Npb24udmFsdWUpO1xuXHRcdFx0Y2FzZSBcIjxcIjpcblx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KGxlZnRFeHByZXNzaW9uLnZhbHVlIDwgcmlnaHRFeHByZXNzaW9uLnZhbHVlKTtcblx0XHRcdGNhc2UgXCI8PVwiOlxuXHRcdFx0XHRyZXR1cm4gY29uc3RhbnQobGVmdEV4cHJlc3Npb24udmFsdWUgPD0gcmlnaHRFeHByZXNzaW9uLnZhbHVlKTtcblx0XHRcdGNhc2UgXCI+XCI6XG5cdFx0XHRcdHJldHVybiBjb25zdGFudChsZWZ0RXhwcmVzc2lvbi52YWx1ZSA+IHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSk7XG5cdFx0XHRjYXNlIFwiPj1cIjpcblx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KGxlZnRFeHByZXNzaW9uLnZhbHVlID49IHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSk7XG5cdFx0XHRjYXNlIFwiPT09XCI6XG5cdFx0XHRcdHJldHVybiBjb25zdGFudChsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gcmlnaHRFeHByZXNzaW9uLnZhbHVlKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdF90eXBlOiBcIkNvbXBhcmlzb25cIixcblx0XHRcdG9wZXJhdG9yOiBvcGVyYXRvcixcblx0XHRcdG9wZXJhbmQxOiBsZWZ0RXhwcmVzc2lvbixcblx0XHRcdG9wZXJhbmQyOiByaWdodEV4cHJlc3Npb25cblx0XHR9O1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZW5ndGgoZXhwcmVzc2lvbjogUGF0aEluTW9kZWxFeHByZXNzaW9uPGFueT4gfCBVbnJlc29sdmVhYmxlUGF0aEV4cHJlc3Npb24pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248bnVtYmVyPiB7XG5cdGlmIChleHByZXNzaW9uLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiKSB7XG5cdFx0cmV0dXJuIGV4cHJlc3Npb247XG5cdH1cblx0cmV0dXJuIHtcblx0XHRfdHlwZTogXCJMZW5ndGhcIixcblx0XHRwYXRoSW5Nb2RlbDogZXhwcmVzc2lvblxuXHR9O1xufVxuXG4vKipcbiAqIENvbXBhcmlzb246IFwiZXF1YWxcIiAoPT09KS5cbiAqXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBsZWZ0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgbGVmdCBzaWRlXG4gKiBAcGFyYW0gcmlnaHRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBjb21wYXJpc29uXG4gKiBAcmV0dXJucyBBbiBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY29tcGFyaXNvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZXF1YWw8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRsZWZ0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRyaWdodE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgbGVmdEV4cHJlc3Npb24gPSB3cmFwUHJpbWl0aXZlKGxlZnRPcGVyYW5kKTtcblx0Y29uc3QgcmlnaHRFeHByZXNzaW9uID0gd3JhcFByaW1pdGl2ZShyaWdodE9wZXJhbmQpO1xuXHRpZiAoaGFzVW5yZXNvbHZlYWJsZUV4cHJlc3Npb24obGVmdEV4cHJlc3Npb24sIHJpZ2h0RXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZlYWJsZUV4cHJlc3Npb247XG5cdH1cblx0aWYgKF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwobGVmdEV4cHJlc3Npb24sIHJpZ2h0RXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG5cdH1cblxuXHRmdW5jdGlvbiByZWR1Y2UobGVmdDogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+LCByaWdodDogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+KSB7XG5cdFx0aWYgKGxlZnQuX3R5cGUgPT09IFwiQ29tcGFyaXNvblwiICYmIGlzVHJ1ZShyaWdodCkpIHtcblx0XHRcdC8vIGNvbXBhcmUoYSwgYikgPT09IHRydWUgfn4+IGNvbXBhcmUoYSwgYilcblx0XHRcdHJldHVybiBsZWZ0O1xuXHRcdH0gZWxzZSBpZiAobGVmdC5fdHlwZSA9PT0gXCJDb21wYXJpc29uXCIgJiYgaXNGYWxzZShyaWdodCkpIHtcblx0XHRcdC8vIGNvbXBhcmUoYSwgYikgPT09IGZhbHNlIH5+PiAhY29tcGFyZShhLCBiKVxuXHRcdFx0cmV0dXJuIG5vdChsZWZ0KTtcblx0XHR9IGVsc2UgaWYgKGxlZnQuX3R5cGUgPT09IFwiSWZFbHNlXCIgJiYgX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChsZWZ0Lm9uVHJ1ZSwgcmlnaHQpKSB7XG5cdFx0XHQvLyAoaWYgKHgpIHsgYSB9IGVsc2UgeyBiIH0pID09PSBhIH5+PiB4IHx8IChiID09PSBhKVxuXHRcdFx0cmV0dXJuIG9yKGxlZnQuY29uZGl0aW9uLCBlcXVhbChsZWZ0Lm9uRmFsc2UsIHJpZ2h0KSk7XG5cdFx0fSBlbHNlIGlmIChsZWZ0Ll90eXBlID09PSBcIklmRWxzZVwiICYmIF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwobGVmdC5vbkZhbHNlLCByaWdodCkpIHtcblx0XHRcdC8vIChpZiAoeCkgeyBhIH0gZWxzZSB7IGIgfSkgPT09IGIgfn4+ICF4IHx8IChhID09PSBiKVxuXHRcdFx0cmV0dXJuIG9yKG5vdChsZWZ0LmNvbmRpdGlvbiksIGVxdWFsKGxlZnQub25UcnVlLCByaWdodCkpO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRsZWZ0Ll90eXBlID09PSBcIklmRWxzZVwiICYmXG5cdFx0XHRpc0NvbnN0YW50KGxlZnQub25UcnVlKSAmJlxuXHRcdFx0aXNDb25zdGFudChsZWZ0Lm9uRmFsc2UpICYmXG5cdFx0XHRpc0NvbnN0YW50KHJpZ2h0KSAmJlxuXHRcdFx0IV9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwobGVmdC5vblRydWUsIHJpZ2h0KSAmJlxuXHRcdFx0IV9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwobGVmdC5vbkZhbHNlLCByaWdodClcblx0XHQpIHtcblx0XHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvLyBleHBsb2l0IHN5bW1ldHJ5OiBhID09PSBiIDx+PiBiID09PSBhXG5cdGNvbnN0IHJlZHVjZWQgPSByZWR1Y2UobGVmdEV4cHJlc3Npb24sIHJpZ2h0RXhwcmVzc2lvbikgPz8gcmVkdWNlKHJpZ2h0RXhwcmVzc2lvbiwgbGVmdEV4cHJlc3Npb24pO1xuXHRyZXR1cm4gcmVkdWNlZCA/PyBjb21wYXJpc29uKFwiPT09XCIsIGxlZnRFeHByZXNzaW9uLCByaWdodEV4cHJlc3Npb24pO1xufVxuXG4vKipcbiAqIENvbXBhcmlzb246IFwibm90IGVxdWFsXCIgKCE9PSkuXG4gKlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gbGVmdE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIGxlZnQgc2lkZVxuICogQHBhcmFtIHJpZ2h0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgY29tcGFyaXNvblxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGNvbXBhcmlzb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vdEVxdWFsPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0bGVmdE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cmlnaHRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBub3QoZXF1YWwobGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCkpO1xufVxuXG4vKipcbiAqIENvbXBhcmlzb246IFwiZ3JlYXRlciBvciBlcXVhbFwiICg+PSkuXG4gKlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gbGVmdE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIGxlZnQgc2lkZVxuICogQHBhcmFtIHJpZ2h0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgY29tcGFyaXNvblxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGNvbXBhcmlzb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyZWF0ZXJPckVxdWFsPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0bGVmdE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cmlnaHRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBjb21wYXJpc29uKFwiPj1cIiwgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCk7XG59XG5cbi8qKlxuICogQ29tcGFyaXNvbjogXCJncmVhdGVyIHRoYW5cIiAoPikuXG4gKlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gbGVmdE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIGxlZnQgc2lkZVxuICogQHBhcmFtIHJpZ2h0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgY29tcGFyaXNvblxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGNvbXBhcmlzb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyZWF0ZXJUaGFuPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0bGVmdE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cmlnaHRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBjb21wYXJpc29uKFwiPlwiLCBsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kKTtcbn1cblxuLyoqXG4gKiBDb21wYXJpc29uOiBcImxlc3Mgb3IgZXF1YWxcIiAoPD0pLlxuICpcbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGxlZnRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSBsZWZ0IHNpZGVcbiAqIEBwYXJhbSByaWdodE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGNvbXBhcmlzb25cbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBjb21wYXJpc29uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsZXNzT3JFcXVhbDxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGxlZnRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4sXG5cdHJpZ2h0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gY29tcGFyaXNvbihcIjw9XCIsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpO1xufVxuXG4vKipcbiAqIENvbXBhcmlzb246IFwibGVzcyB0aGFuXCIgKDwpLlxuICpcbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGxlZnRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSBsZWZ0IHNpZGVcbiAqIEBwYXJhbSByaWdodE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGNvbXBhcmlzb25cbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBjb21wYXJpc29uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsZXNzVGhhbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGxlZnRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4sXG5cdHJpZ2h0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gY29tcGFyaXNvbihcIjxcIiwgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCk7XG59XG5cbi8qKlxuICogSWYtdGhlbi1lbHNlIGV4cHJlc3Npb24uXG4gKlxuICogRXZhbHVhdGVzIHRvIG9uVHJ1ZSBpZiB0aGUgY29uZGl0aW9uIGV2YWx1YXRlcyB0byB0cnVlLCBlbHNlIGV2YWx1YXRlcyB0byBvbkZhbHNlLlxuICpcbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGNvbmRpdGlvbiBUaGUgY29uZGl0aW9uIHRvIGV2YWx1YXRlXG4gKiBAcGFyYW0gb25UcnVlIEV4cHJlc3Npb24gcmVzdWx0IGlmIHRoZSBjb25kaXRpb24gZXZhbHVhdGVzIHRvIHRydWVcbiAqIEBwYXJhbSBvbkZhbHNlIEV4cHJlc3Npb24gcmVzdWx0IGlmIHRoZSBjb25kaXRpb24gZXZhbHVhdGVzIHRvIGZhbHNlXG4gKiBAcmV0dXJucyBUaGUgZXhwcmVzc2lvbiB0aGF0IHJlcHJlc2VudHMgdGhpcyBjb25kaXRpb25hbCBjaGVja1xuICovXG5leHBvcnQgZnVuY3Rpb24gaWZFbHNlPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0Y29uZGl0aW9uOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8Ym9vbGVhbj4sXG5cdG9uVHJ1ZTogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRvbkZhbHNlOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPiB7XG5cdGxldCBjb25kaXRpb25FeHByZXNzaW9uID0gd3JhcFByaW1pdGl2ZShjb25kaXRpb24pO1xuXHRsZXQgb25UcnVlRXhwcmVzc2lvbiA9IHdyYXBQcmltaXRpdmUob25UcnVlKTtcblx0bGV0IG9uRmFsc2VFeHByZXNzaW9uID0gd3JhcFByaW1pdGl2ZShvbkZhbHNlKTtcblxuXHRpZiAoaGFzVW5yZXNvbHZlYWJsZUV4cHJlc3Npb24oY29uZGl0aW9uRXhwcmVzc2lvbiwgb25UcnVlRXhwcmVzc2lvbiwgb25GYWxzZUV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIHVucmVzb2x2ZWFibGVFeHByZXNzaW9uO1xuXHR9XG5cdC8vIHN3YXAgYnJhbmNoZXMgaWYgdGhlIGNvbmRpdGlvbiBpcyBhIG5lZ2F0aW9uXG5cdGlmIChjb25kaXRpb25FeHByZXNzaW9uLl90eXBlID09PSBcIk5vdFwiKSB7XG5cdFx0Ly8gaWZFbHNlKG5vdChYKSwgYSwgYikgLS0+IGlmRWxzZShYLCBiLCBhKVxuXHRcdFtvblRydWVFeHByZXNzaW9uLCBvbkZhbHNlRXhwcmVzc2lvbl0gPSBbb25GYWxzZUV4cHJlc3Npb24sIG9uVHJ1ZUV4cHJlc3Npb25dO1xuXHRcdGNvbmRpdGlvbkV4cHJlc3Npb24gPSBub3QoY29uZGl0aW9uRXhwcmVzc2lvbik7XG5cdH1cblxuXHQvLyBpbmxpbmUgbmVzdGVkIGlmLWVsc2UgZXhwcmVzc2lvbnM6IG9uVHJ1ZSBicmFuY2hcblx0Ly8gaWZFbHNlKFgsIGlmRWxzZShYLCBhLCBiKSwgYykgPT0+IGlmRWxzZShYLCBhLCBjKVxuXHRpZiAob25UcnVlRXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJJZkVsc2VcIiAmJiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGNvbmRpdGlvbkV4cHJlc3Npb24sIG9uVHJ1ZUV4cHJlc3Npb24uY29uZGl0aW9uKSkge1xuXHRcdG9uVHJ1ZUV4cHJlc3Npb24gPSBvblRydWVFeHByZXNzaW9uLm9uVHJ1ZTtcblx0fVxuXG5cdC8vIGlubGluZSBuZXN0ZWQgaWYtZWxzZSBleHByZXNzaW9uczogb25GYWxzZSBicmFuY2hcblx0Ly8gaWZFbHNlKFgsIGEsIGlmRWxzZShYLCBiLCBjKSkgPT0+IGlmRWxzZShYLCBhLCBjKVxuXHRpZiAob25GYWxzZUV4cHJlc3Npb24uX3R5cGUgPT09IFwiSWZFbHNlXCIgJiYgX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChjb25kaXRpb25FeHByZXNzaW9uLCBvbkZhbHNlRXhwcmVzc2lvbi5jb25kaXRpb24pKSB7XG5cdFx0b25GYWxzZUV4cHJlc3Npb24gPSBvbkZhbHNlRXhwcmVzc2lvbi5vbkZhbHNlO1xuXHR9XG5cblx0Ly8gKGlmIHRydWUgdGhlbiBhIGVsc2UgYikgIH5+PiBhXG5cdC8vIChpZiBmYWxzZSB0aGVuIGEgZWxzZSBiKSB+fj4gYlxuXHRpZiAoaXNDb25zdGFudChjb25kaXRpb25FeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiBjb25kaXRpb25FeHByZXNzaW9uLnZhbHVlID8gb25UcnVlRXhwcmVzc2lvbiA6IG9uRmFsc2VFeHByZXNzaW9uO1xuXHR9XG5cblx0Ly8gaWYgKGlzQ29uc3RhbnRCb29sZWFuKG9uVHJ1ZUV4cHJlc3Npb24pIHx8IGlzQ29uc3RhbnRCb29sZWFuKG9uRmFsc2VFeHByZXNzaW9uKSkge1xuXHQvLyBcdHJldHVybiBvcihhbmQoY29uZGl0aW9uLCBvblRydWVFeHByZXNzaW9uIGFzIEV4cHJlc3Npb248Ym9vbGVhbj4pLCBhbmQobm90KGNvbmRpdGlvbiksIG9uRmFsc2VFeHByZXNzaW9uIGFzIEV4cHJlc3Npb248Ym9vbGVhbj4pKSBhcyBFeHByZXNzaW9uPFQ+XG5cdC8vIH1cblx0Ly8gKGlmIFggdGhlbiBhIGVsc2UgYSkgfn4+IGFcblx0aWYgKF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwob25UcnVlRXhwcmVzc2lvbiwgb25GYWxzZUV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIG9uVHJ1ZUV4cHJlc3Npb247XG5cdH1cblxuXHQvLyBpZiBYIHRoZW4gYSBlbHNlIGZhbHNlIH5+PiBYICYmIGFcblx0aWYgKGlzRmFsc2Uob25GYWxzZUV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIGFuZChjb25kaXRpb25FeHByZXNzaW9uLCBvblRydWVFeHByZXNzaW9uIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9XG5cblx0Ly8gaWYgWCB0aGVuIGEgZWxzZSB0cnVlIH5+PiAhWCB8fCBhXG5cdGlmIChpc1RydWUob25GYWxzZUV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIG9yKG5vdChjb25kaXRpb25FeHByZXNzaW9uKSwgb25UcnVlRXhwcmVzc2lvbiBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4pIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fVxuXG5cdC8vIGlmIFggdGhlbiBmYWxzZSBlbHNlIGEgfn4+ICFYICYmIGFcblx0aWYgKGlzRmFsc2Uob25UcnVlRXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gYW5kKG5vdChjb25kaXRpb25FeHByZXNzaW9uKSwgb25GYWxzZUV4cHJlc3Npb24gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH1cblxuXHQvLyBpZiBYIHRoZW4gdHJ1ZSBlbHNlIGEgfn4+IFggfHwgYVxuXHRpZiAoaXNUcnVlKG9uVHJ1ZUV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIG9yKGNvbmRpdGlvbkV4cHJlc3Npb24sIG9uRmFsc2VFeHByZXNzaW9uIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9XG5cdGlmIChpc0NvbXBsZXhUeXBlRXhwcmVzc2lvbihjb25kaXRpb24pIHx8IGlzQ29tcGxleFR5cGVFeHByZXNzaW9uKG9uVHJ1ZSkgfHwgaXNDb21wbGV4VHlwZUV4cHJlc3Npb24ob25GYWxzZSkpIHtcblx0XHRsZXQgcGF0aElkeCA9IDA7XG5cdFx0Y29uc3QgbXlJZkVsc2VFeHByZXNzaW9uID0gZm9ybWF0UmVzdWx0KFtjb25kaXRpb24sIG9uVHJ1ZSwgb25GYWxzZV0sIFwic2FwLmZlLmNvcmUuZm9ybWF0dGVycy5TdGFuZGFyZEZvcm1hdHRlciNpZkVsc2VcIik7XG5cdFx0Y29uc3QgYWxsUGFydHMgPSBbXTtcblx0XHR0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdG15SWZFbHNlRXhwcmVzc2lvbixcblx0XHRcdFwiUGF0aEluTW9kZWxcIixcblx0XHRcdChjb25zdGFudFBhdGg6IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxhbnk+KSA9PiB7XG5cdFx0XHRcdGFsbFBhcnRzLnB1c2goY29uc3RhbnRQYXRoKTtcblx0XHRcdFx0cmV0dXJuIHBhdGhJbk1vZGVsKGBcXCQke3BhdGhJZHgrK31gLCBcIiRcIik7XG5cdFx0XHR9LFxuXHRcdFx0dHJ1ZVxuXHRcdCk7XG5cdFx0YWxsUGFydHMudW5zaGlmdChjb25zdGFudChKU09OLnN0cmluZ2lmeShteUlmRWxzZUV4cHJlc3Npb24pKSk7XG5cdFx0cmV0dXJuIGZvcm1hdFJlc3VsdChhbGxQYXJ0cywgXCJzYXAuZmUuY29yZS5mb3JtYXR0ZXJzLlN0YW5kYXJkRm9ybWF0dGVyI2V2YWx1YXRlQ29tcGxleEV4cHJlc3Npb25cIik7XG5cdH1cblx0cmV0dXJuIHtcblx0XHRfdHlwZTogXCJJZkVsc2VcIixcblx0XHRjb25kaXRpb246IGNvbmRpdGlvbkV4cHJlc3Npb24sXG5cdFx0b25UcnVlOiBvblRydWVFeHByZXNzaW9uLFxuXHRcdG9uRmFsc2U6IG9uRmFsc2VFeHByZXNzaW9uXG5cdH07XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGN1cnJlbnQgZXhwcmVzc2lvbiBoYXMgYSByZWZlcmVuY2UgdG8gdGhlIGRlZmF1bHQgbW9kZWwgKHVuZGVmaW5lZCkuXG4gKlxuICogQHBhcmFtIGV4cHJlc3Npb24gVGhlIGV4cHJlc3Npb24gdG8gZXZhbHVhdGVcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGVyZSBpcyBhIHJlZmVyZW5jZSB0byB0aGUgZGVmYXVsdCBjb250ZXh0XG4gKi9cbmZ1bmN0aW9uIGhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQoZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGFueT4pOiBib29sZWFuIHtcblx0c3dpdGNoIChleHByZXNzaW9uLl90eXBlKSB7XG5cdFx0Y2FzZSBcIkNvbnN0YW50XCI6XG5cdFx0Y2FzZSBcIkZvcm1hdHRlclwiOlxuXHRcdGNhc2UgXCJDb21wbGV4VHlwZVwiOlxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdGNhc2UgXCJTZXRcIjpcblx0XHRcdHJldHVybiBleHByZXNzaW9uLm9wZXJhbmRzLnNvbWUoaGFzUmVmZXJlbmNlVG9EZWZhdWx0Q29udGV4dCk7XG5cdFx0Y2FzZSBcIlBhdGhJbk1vZGVsXCI6XG5cdFx0XHRyZXR1cm4gZXhwcmVzc2lvbi5tb2RlbE5hbWUgPT09IHVuZGVmaW5lZDtcblx0XHRjYXNlIFwiQ29tcGFyaXNvblwiOlxuXHRcdFx0cmV0dXJuIGhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQoZXhwcmVzc2lvbi5vcGVyYW5kMSkgfHwgaGFzUmVmZXJlbmNlVG9EZWZhdWx0Q29udGV4dChleHByZXNzaW9uLm9wZXJhbmQyKTtcblx0XHRjYXNlIFwiSWZFbHNlXCI6XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KGV4cHJlc3Npb24uY29uZGl0aW9uKSB8fFxuXHRcdFx0XHRoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KGV4cHJlc3Npb24ub25UcnVlKSB8fFxuXHRcdFx0XHRoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KGV4cHJlc3Npb24ub25GYWxzZSlcblx0XHRcdCk7XG5cdFx0Y2FzZSBcIk5vdFwiOlxuXHRcdGNhc2UgXCJUcnV0aHlcIjpcblx0XHRcdHJldHVybiBoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KGV4cHJlc3Npb24ub3BlcmFuZCk7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG50eXBlIEZuPFQ+ID0gKCguLi5wYXJhbXM6IGFueSkgPT4gVCkgJiB7XG5cdF9fZnVuY3Rpb25OYW1lOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIFdyYXBwZWRUdXBsZVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4vLyBAdHMtaWdub3JlXG50eXBlIFdyYXBwZWRUdXBsZTxUPiA9IHsgW0sgaW4ga2V5b2YgVF06IFdyYXBwZWRUdXBsZTxUW0tdPiB8IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUW0tdPiB9O1xuXG4vLyBTbywgdGhpcyB3b3JrcyBidXQgSSBjYW5ub3QgZ2V0IGl0IHRvIGNvbXBpbGUgOkQsIGJ1dCBpdCBzdGlsbCBkb2VzIHdoYXQgaXMgZXhwZWN0ZWQuLi5cblxuLyoqXG4gKiBBIGZ1bmN0aW9uIHJlZmVyZW5jZSBvciBhIGZ1bmN0aW9uIG5hbWUuXG4gKi9cbnR5cGUgRnVuY3Rpb25Pck5hbWU8VD4gPSBGbjxUPiB8IHN0cmluZztcblxuLyoqXG4gKiBGdW5jdGlvbiBwYXJhbWV0ZXJzLCBlaXRoZXIgZGVyaXZlZCBmcm9tIHRoZSBmdW5jdGlvbiBvciBhbiB1bnR5cGVkIGFycmF5LlxuICovXG50eXBlIEZ1bmN0aW9uUGFyYW1ldGVyczxULCBGIGV4dGVuZHMgRnVuY3Rpb25Pck5hbWU8VD4+ID0gRiBleHRlbmRzIEZuPFQ+ID8gUGFyYW1ldGVyczxGPiA6IGFueVtdO1xuXG4vKipcbiAqIENhbGxzIGEgZm9ybWF0dGVyIGZ1bmN0aW9uIHRvIHByb2Nlc3MgdGhlIHBhcmFtZXRlcnMuXG4gKiBJZiByZXF1aXJlQ29udGV4dCBpcyBzZXQgdG8gdHJ1ZSBhbmQgbm8gY29udGV4dCBpcyBwYXNzZWQgYSBkZWZhdWx0IGNvbnRleHQgd2lsbCBiZSBhZGRlZCBhdXRvbWF0aWNhbGx5LlxuICpcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAdGVtcGxhdGUgVVxuICogQHBhcmFtIHBhcmFtZXRlcnMgVGhlIGxpc3Qgb2YgcGFyYW1ldGVyIHRoYXQgc2hvdWxkIG1hdGNoIHRoZSB0eXBlIGFuZCBudW1iZXIgb2YgdGhlIGZvcm1hdHRlciBmdW5jdGlvblxuICogQHBhcmFtIGZvcm1hdHRlckZ1bmN0aW9uIFRoZSBmdW5jdGlvbiB0byBjYWxsXG4gKiBAcGFyYW0gW2NvbnRleHRFbnRpdHlUeXBlXSBUaGUgY29udGV4dCBlbnRpdHkgdHlwZSB0byBjb25zaWRlclxuICogQHJldHVybnMgVGhlIGNvcnJlc3BvbmRpbmcgZXhwcmVzc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0UmVzdWx0PFQsIFUgZXh0ZW5kcyBGbjxUPj4oXG5cdHBhcmFtZXRlcnM6IFdyYXBwZWRUdXBsZTxQYXJhbWV0ZXJzPFU+Pixcblx0Zm9ybWF0dGVyRnVuY3Rpb246IFUgfCBzdHJpbmcsXG5cdGNvbnRleHRFbnRpdHlUeXBlPzogRW50aXR5VHlwZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+IHtcblx0Y29uc3QgcGFyYW1ldGVyRXhwcmVzc2lvbnMgPSAocGFyYW1ldGVycyBhcyBhbnlbXSkubWFwKHdyYXBQcmltaXRpdmUpO1xuXG5cdGlmIChoYXNVbnJlc29sdmVhYmxlRXhwcmVzc2lvbiguLi5wYXJhbWV0ZXJFeHByZXNzaW9ucykpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZlYWJsZUV4cHJlc3Npb247XG5cdH1cblx0aWYgKGNvbnRleHRFbnRpdHlUeXBlKSB7XG5cdFx0Ly8gT3RoZXJ3aXNlLCBpZiB0aGUgY29udGV4dCBpcyByZXF1aXJlZCBhbmQgbm8gY29udGV4dCBpcyBwcm92aWRlZCBtYWtlIHN1cmUgdG8gYWRkIHRoZSBkZWZhdWx0IGJpbmRpbmdcblx0XHRpZiAoIXBhcmFtZXRlckV4cHJlc3Npb25zLnNvbWUoaGFzUmVmZXJlbmNlVG9EZWZhdWx0Q29udGV4dCkpIHtcblx0XHRcdGNvbnRleHRFbnRpdHlUeXBlLmtleXMuZm9yRWFjaCgoa2V5KSA9PiBwYXJhbWV0ZXJFeHByZXNzaW9ucy5wdXNoKHBhdGhJbk1vZGVsKGtleS5uYW1lLCBcIlwiKSkpO1xuXHRcdH1cblx0fVxuXHRsZXQgZnVuY3Rpb25OYW1lID0gXCJcIjtcblx0aWYgKHR5cGVvZiBmb3JtYXR0ZXJGdW5jdGlvbiA9PT0gXCJzdHJpbmdcIikge1xuXHRcdGZ1bmN0aW9uTmFtZSA9IGZvcm1hdHRlckZ1bmN0aW9uO1xuXHR9IGVsc2Uge1xuXHRcdGZ1bmN0aW9uTmFtZSA9IGZvcm1hdHRlckZ1bmN0aW9uLl9fZnVuY3Rpb25OYW1lO1xuXHR9XG5cdC8vIEZvcm1hdHRlck5hbWUgY2FuIGJlIG9mIGZvcm1hdCBzYXAuZmUuY29yZS54eHgjbWV0aG9kTmFtZSB0byBoYXZlIG11bHRpcGxlIGZvcm1hdHRlciBpbiBvbmUgY2xhc3Ncblx0Y29uc3QgW2Zvcm1hdHRlckNsYXNzLCBmb3JtYXR0ZXJOYW1lXSA9IGZ1bmN0aW9uTmFtZS5zcGxpdChcIiNcIik7XG5cblx0aWYgKCEhZm9ybWF0dGVyTmFtZSAmJiBmb3JtYXR0ZXJOYW1lLmxlbmd0aCA+IDApIHtcblx0XHRwYXJhbWV0ZXJFeHByZXNzaW9ucy51bnNoaWZ0KGNvbnN0YW50KGZvcm1hdHRlck5hbWUpKTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0X3R5cGU6IFwiRm9ybWF0dGVyXCIsXG5cdFx0Zm46IGZvcm1hdHRlckNsYXNzLFxuXHRcdHBhcmFtZXRlcnM6IHBhcmFtZXRlckV4cHJlc3Npb25zXG5cdH07XG59XG5cbi8qKlxuICogQ2FsbHMgYSBjb21wbGV4IHR5cGUgdG8gcHJvY2VzcyB0aGUgcGFyYW1ldGVycy5cbiAqIElmIHJlcXVpcmVDb250ZXh0IGlzIHNldCB0byB0cnVlIGFuZCBubyBjb250ZXh0IGlzIHBhc3NlZCwgYSBkZWZhdWx0IGNvbnRleHQgd2lsbCBiZSBhZGRlZCBhdXRvbWF0aWNhbGx5LlxuICpcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAdGVtcGxhdGUgVVxuICogQHBhcmFtIHBhcmFtZXRlcnMgVGhlIGxpc3Qgb2YgcGFyYW1ldGVycyB0aGF0IHNob3VsZCBtYXRjaCB0aGUgdHlwZSBmb3IgdGhlIGNvbXBsZXggdHlwZT1cbiAqIEBwYXJhbSB0eXBlIFRoZSBjb21wbGV4IHR5cGUgdG8gdXNlXG4gKiBAcGFyYW0gW2NvbnRleHRFbnRpdHlUeXBlXSBUaGUgY29udGV4dCBlbnRpdHkgdHlwZSB0byBjb25zaWRlclxuICogQHBhcmFtIG9Gb3JtYXRPcHRpb25zXG4gKiBAcmV0dXJucyBUaGUgY29ycmVzcG9uZGluZyBleHByZXNzaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRUeXBlSW5mb3JtYXRpb248VCwgVSBleHRlbmRzIEZuPFQ+Pihcblx0cGFyYW1ldGVyczogV3JhcHBlZFR1cGxlPFBhcmFtZXRlcnM8VT4+LFxuXHR0eXBlOiBzdHJpbmcsXG5cdGNvbnRleHRFbnRpdHlUeXBlPzogRW50aXR5VHlwZSxcblx0b0Zvcm1hdE9wdGlvbnM/OiBhbnlcbik6IFVucmVzb2x2ZWFibGVQYXRoRXhwcmVzc2lvbiB8IENvbXBsZXhUeXBlRXhwcmVzc2lvbjxUPiB8IENvbnN0YW50RXhwcmVzc2lvbjxUPiB7XG5cdGNvbnN0IHBhcmFtZXRlckV4cHJlc3Npb25zID0gKHBhcmFtZXRlcnMgYXMgYW55W10pLm1hcCh3cmFwUHJpbWl0aXZlKTtcblx0aWYgKGhhc1VucmVzb2x2ZWFibGVFeHByZXNzaW9uKC4uLnBhcmFtZXRlckV4cHJlc3Npb25zKSkge1xuXHRcdHJldHVybiB1bnJlc29sdmVhYmxlRXhwcmVzc2lvbjtcblx0fVxuXHQvLyBJZiB0aGVyZSBpcyBvbmx5IG9uZSBwYXJhbWV0ZXIgYW5kIGl0IGlzIGEgY29uc3RhbnQgYW5kIHdlIGRvbid0IGV4cGVjdCB0aGUgY29udGV4dCB0aGVuIHJldHVybiB0aGUgY29uc3RhbnRcblx0aWYgKHBhcmFtZXRlckV4cHJlc3Npb25zLmxlbmd0aCA9PT0gMSAmJiBpc0NvbnN0YW50KHBhcmFtZXRlckV4cHJlc3Npb25zWzBdKSAmJiAhY29udGV4dEVudGl0eVR5cGUpIHtcblx0XHRyZXR1cm4gcGFyYW1ldGVyRXhwcmVzc2lvbnNbMF07XG5cdH0gZWxzZSBpZiAoY29udGV4dEVudGl0eVR5cGUpIHtcblx0XHQvLyBPdGhlcndpc2UsIGlmIHRoZSBjb250ZXh0IGlzIHJlcXVpcmVkIGFuZCBubyBjb250ZXh0IGlzIHByb3ZpZGVkIG1ha2Ugc3VyZSB0byBhZGQgdGhlIGRlZmF1bHQgYmluZGluZ1xuXHRcdGlmICghcGFyYW1ldGVyRXhwcmVzc2lvbnMuc29tZShoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KSkge1xuXHRcdFx0Y29udGV4dEVudGl0eVR5cGUua2V5cy5mb3JFYWNoKChrZXkpID0+IHBhcmFtZXRlckV4cHJlc3Npb25zLnB1c2gocGF0aEluTW9kZWwoa2V5Lm5hbWUsIFwiXCIpKSk7XG5cdFx0fVxuXHR9XG5cdC8vIGlmIHNob3dNZWFzdXJlIGlzIHNldCB0byBmYWxzZSB3ZSB3YW50IHRvIG5vdCBwYXJzZSBhcyBzdHJpbmcgdG8gc2VlIHRoZSAwXG5cdC8vIHdlIGRvIHRoYXQgYWxzbyBmb3IgYWxsIGJpbmRpbmdzIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZSBtZGMgRmllbGQgaXNuJ3QgZWRpdGFibGVcblx0aWYgKFxuXHRcdCEob0Zvcm1hdE9wdGlvbnMgJiYgb0Zvcm1hdE9wdGlvbnMuc2hvd051bWJlciA9PT0gZmFsc2UpICYmXG5cdFx0KChwYXJhbWV0ZXJzWzBdIGFzIGFueSk/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnRcIikgPT09IDAgfHxcblx0XHRcdChwYXJhbWV0ZXJzWzBdIGFzIGFueSk/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5EZWNpbWFsXCIpID09PSAwIHx8XG5cdFx0XHQocGFyYW1ldGVyc1swXSBhcyBhbnkpPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRG91YmxlXCIpID09PSAwKVxuXHQpIHtcblx0XHRpZiAoXG5cdFx0XHQocGFyYW1ldGVyc1swXSBhcyBhbnkpPy50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludDY0XCIgfHxcblx0XHRcdChwYXJhbWV0ZXJzWzBdIGFzIGFueSk/LnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRGVjaW1hbFwiXG5cdFx0KSB7XG5cdFx0XHQvL3NhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludDY0IGRvIG5vdCBzdXBwb3J0IHBhcnNlQXNTdHJpbmcgZmFsc2Vcblx0XHRcdG9Gb3JtYXRPcHRpb25zID0gb0Zvcm1hdE9wdGlvbnM/LnNob3dNZWFzdXJlID09PSBmYWxzZSA/IHsgZW1wdHlTdHJpbmc6IFwiXCIsIHNob3dNZWFzdXJlOiBmYWxzZSB9IDogeyBlbXB0eVN0cmluZzogXCJcIiB9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvRm9ybWF0T3B0aW9ucyA9XG5cdFx0XHRcdG9Gb3JtYXRPcHRpb25zPy5zaG93TWVhc3VyZSA9PT0gZmFsc2Vcblx0XHRcdFx0XHQ/IHsgcGFyc2VBc1N0cmluZzogZmFsc2UsIGVtcHR5U3RyaW5nOiBcIlwiLCBzaG93TWVhc3VyZTogZmFsc2UgfVxuXHRcdFx0XHRcdDogeyBwYXJzZUFzU3RyaW5nOiBmYWxzZSwgZW1wdHlTdHJpbmc6IFwiXCIgfTtcblx0XHR9XG5cdH1cblx0aWYgKHR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuVW5pdFwiKSB7XG5cdFx0Y29uc3QgdW9tUGF0aCA9IHBhdGhJbk1vZGVsKFwiLyMjQEByZXF1ZXN0VW5pdHNPZk1lYXN1cmVcIik7XG5cdFx0dW9tUGF0aC50YXJnZXRUeXBlID0gXCJhbnlcIjtcblx0XHR1b21QYXRoLm1vZGUgPSBcIk9uZVRpbWVcIjtcblx0XHRwYXJhbWV0ZXJFeHByZXNzaW9ucy5wdXNoKHVvbVBhdGgpO1xuXHR9IGVsc2UgaWYgKHR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuQ3VycmVuY3lcIikge1xuXHRcdGNvbnN0IGN1cnJlbmN5UGF0aCA9IHBhdGhJbk1vZGVsKFwiLyMjQEByZXF1ZXN0Q3VycmVuY3lDb2Rlc1wiKTtcblx0XHRjdXJyZW5jeVBhdGgudGFyZ2V0VHlwZSA9IFwiYW55XCI7XG5cdFx0Y3VycmVuY3lQYXRoLm1vZGUgPSBcIk9uZVRpbWVcIjtcblx0XHRwYXJhbWV0ZXJFeHByZXNzaW9ucy5wdXNoKGN1cnJlbmN5UGF0aCk7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdF90eXBlOiBcIkNvbXBsZXhUeXBlXCIsXG5cdFx0dHlwZTogdHlwZSxcblx0XHRmb3JtYXRPcHRpb25zOiBvRm9ybWF0T3B0aW9ucyB8fCB7fSxcblx0XHRwYXJhbWV0ZXJzOiB7fSxcblx0XHRiaW5kaW5nUGFyYW1ldGVyczogcGFyYW1ldGVyRXhwcmVzc2lvbnNcblx0fTtcbn1cbi8qKlxuICogRnVuY3Rpb24gY2FsbCwgb3B0aW9uYWxseSB3aXRoIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZnVuYyBGdW5jdGlvbiBuYW1lIG9yIHJlZmVyZW5jZSB0byBmdW5jdGlvblxuICogQHBhcmFtIHBhcmFtZXRlcnMgQXJndW1lbnRzXG4gKiBAcGFyYW0gb24gT2JqZWN0IHRvIGNhbGwgdGhlIGZ1bmN0aW9uIG9uXG4gKiBAcmV0dXJucyBFeHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgZnVuY3Rpb24gY2FsbCAobm90IHRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uIGNhbGwhKVxuICovXG5leHBvcnQgZnVuY3Rpb24gZm48VCwgVSBleHRlbmRzIEZ1bmN0aW9uT3JOYW1lPFQ+Pihcblx0ZnVuYzogVSxcblx0cGFyYW1ldGVyczogV3JhcHBlZFR1cGxlPEZ1bmN0aW9uUGFyYW1ldGVyczxULCBVPj4sXG5cdG9uPzogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPG9iamVjdD5cbik6IEZ1bmN0aW9uRXhwcmVzc2lvbjxUPiB7XG5cdGNvbnN0IGZ1bmN0aW9uTmFtZSA9IHR5cGVvZiBmdW5jID09PSBcInN0cmluZ1wiID8gZnVuYyA6IGZ1bmMuX19mdW5jdGlvbk5hbWU7XG5cdHJldHVybiB7XG5cdFx0X3R5cGU6IFwiRnVuY3Rpb25cIixcblx0XHRvYmo6IG9uICE9PSB1bmRlZmluZWQgPyB3cmFwUHJpbWl0aXZlKG9uKSA6IHVuZGVmaW5lZCxcblx0XHRmbjogZnVuY3Rpb25OYW1lLFxuXHRcdHBhcmFtZXRlcnM6IChwYXJhbWV0ZXJzIGFzIGFueVtdKS5tYXAod3JhcFByaW1pdGl2ZSlcblx0fTtcbn1cblxuLyoqXG4gKiBTaG9ydGN1dCBmdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgYSBiaW5kaW5nIHZhbHVlIGlzIG51bGwsIHVuZGVmaW5lZCBvciBlbXB0eS5cbiAqXG4gKiBAcGFyYW0gZXhwcmVzc2lvblxuICogQHJldHVybnMgQSBib29sZWFuIGV4cHJlc3Npb24gZXZhbHVhdGluZyB0aGUgZmFjdCB0aGF0IHRoZSBjdXJyZW50IGVsZW1lbnQgaXMgZW1wdHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHkoZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRpZiAoZXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJDb25jYXRcIikge1xuXHRcdHJldHVybiBvciguLi5leHByZXNzaW9uLmV4cHJlc3Npb25zLm1hcChpc0VtcHR5KSk7XG5cdH1cblx0cmV0dXJuIG9yKGVxdWFsKGV4cHJlc3Npb24sIFwiXCIpLCBlcXVhbChleHByZXNzaW9uLCB1bmRlZmluZWQpLCBlcXVhbChleHByZXNzaW9uLCBudWxsKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jYXQoLi4uaW5FeHByZXNzaW9uczogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPHN0cmluZz5bXSk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0Y29uc3QgZXhwcmVzc2lvbnMgPSBpbkV4cHJlc3Npb25zLm1hcCh3cmFwUHJpbWl0aXZlKTtcblx0aWYgKGhhc1VucmVzb2x2ZWFibGVFeHByZXNzaW9uKC4uLmV4cHJlc3Npb25zKSkge1xuXHRcdHJldHVybiB1bnJlc29sdmVhYmxlRXhwcmVzc2lvbjtcblx0fVxuXHRpZiAoZXhwcmVzc2lvbnMuZXZlcnkoaXNDb25zdGFudCkpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoXG5cdFx0XHRleHByZXNzaW9ucy5yZWR1Y2UoKGNvbmNhdGVuYXRlZDogc3RyaW5nLCB2YWx1ZSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gY29uY2F0ZW5hdGVkICsgKHZhbHVlIGFzIENvbnN0YW50RXhwcmVzc2lvbjxhbnk+KS52YWx1ZS50b1N0cmluZygpO1xuXHRcdFx0fSwgXCJcIilcblx0XHQpO1xuXHR9IGVsc2UgaWYgKGV4cHJlc3Npb25zLnNvbWUoaXNDb21wbGV4VHlwZUV4cHJlc3Npb24pKSB7XG5cdFx0bGV0IHBhdGhJZHggPSAwO1xuXHRcdGNvbnN0IG15Q29uY2F0RXhwcmVzc2lvbiA9IGZvcm1hdFJlc3VsdChleHByZXNzaW9ucywgXCJzYXAuZmUuY29yZS5mb3JtYXR0ZXJzLlN0YW5kYXJkRm9ybWF0dGVyI2NvbmNhdFwiKTtcblx0XHRjb25zdCBhbGxQYXJ0cyA9IFtdO1xuXHRcdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KG15Q29uY2F0RXhwcmVzc2lvbiwgXCJQYXRoSW5Nb2RlbFwiLCAoY29uc3RhbnRQYXRoOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248YW55PikgPT4ge1xuXHRcdFx0YWxsUGFydHMucHVzaChjb25zdGFudFBhdGgpO1xuXHRcdFx0cmV0dXJuIHBhdGhJbk1vZGVsKGBcXCQke3BhdGhJZHgrK31gLCBcIiRcIik7XG5cdFx0fSk7XG5cdFx0YWxsUGFydHMudW5zaGlmdChjb25zdGFudChKU09OLnN0cmluZ2lmeShteUNvbmNhdEV4cHJlc3Npb24pKSk7XG5cdFx0cmV0dXJuIGZvcm1hdFJlc3VsdChhbGxQYXJ0cywgXCJzYXAuZmUuY29yZS5mb3JtYXR0ZXJzLlN0YW5kYXJkRm9ybWF0dGVyI2V2YWx1YXRlQ29tcGxleEV4cHJlc3Npb25cIik7XG5cdH1cblx0cmV0dXJuIHtcblx0XHRfdHlwZTogXCJDb25jYXRcIixcblx0XHRleHByZXNzaW9uczogZXhwcmVzc2lvbnNcblx0fTtcbn1cblxuZXhwb3J0IHR5cGUgVHJhbnNmb3JtRnVuY3Rpb24gPSA8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGUgfCB1bmtub3duPihleHByZXNzaW9uUGFydDogYW55KSA9PiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5leHBvcnQgdHlwZSBFeHByZXNzaW9uVHlwZSA9IFBpY2s8QmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGFueT4sIFwiX3R5cGVcIj5bXCJfdHlwZVwiXTtcbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1SZWN1cnNpdmVseTxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZSB8IHVua25vd24+KFxuXHRpbkV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPixcblx0ZXhwcmVzc2lvblR5cGU6IEV4cHJlc3Npb25UeXBlLFxuXHR0cmFuc2Zvcm1GdW5jdGlvbjogVHJhbnNmb3JtRnVuY3Rpb24sXG5cdGluY2x1ZGVBbGxFeHByZXNzaW9uID0gZmFsc2Vcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPiB7XG5cdGxldCBleHByZXNzaW9uID0gaW5FeHByZXNzaW9uO1xuXHRzd2l0Y2ggKGV4cHJlc3Npb24uX3R5cGUpIHtcblx0XHRjYXNlIFwiRnVuY3Rpb25cIjpcblx0XHRjYXNlIFwiRm9ybWF0dGVyXCI6XG5cdFx0XHRleHByZXNzaW9uLnBhcmFtZXRlcnMgPSBleHByZXNzaW9uLnBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIpID0+XG5cdFx0XHRcdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KHBhcmFtZXRlciwgZXhwcmVzc2lvblR5cGUsIHRyYW5zZm9ybUZ1bmN0aW9uLCBpbmNsdWRlQWxsRXhwcmVzc2lvbilcblx0XHRcdCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiQ29uY2F0XCI6XG5cdFx0XHRleHByZXNzaW9uLmV4cHJlc3Npb25zID0gZXhwcmVzc2lvbi5leHByZXNzaW9ucy5tYXAoKHN1YkV4cHJlc3Npb24pID0+XG5cdFx0XHRcdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KHN1YkV4cHJlc3Npb24sIGV4cHJlc3Npb25UeXBlLCB0cmFuc2Zvcm1GdW5jdGlvbiwgaW5jbHVkZUFsbEV4cHJlc3Npb24pXG5cdFx0XHQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkNvbXBsZXhUeXBlXCI6XG5cdFx0XHRleHByZXNzaW9uLmJpbmRpbmdQYXJhbWV0ZXJzID0gZXhwcmVzc2lvbi5iaW5kaW5nUGFyYW1ldGVycy5tYXAoKGJpbmRpbmdQYXJhbWV0ZXIpID0+XG5cdFx0XHRcdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KGJpbmRpbmdQYXJhbWV0ZXIsIGV4cHJlc3Npb25UeXBlLCB0cmFuc2Zvcm1GdW5jdGlvbiwgaW5jbHVkZUFsbEV4cHJlc3Npb24pXG5cdFx0XHQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIklmRWxzZVwiOlxuXHRcdFx0Y29uc3Qgb25UcnVlID0gdHJhbnNmb3JtUmVjdXJzaXZlbHkoZXhwcmVzc2lvbi5vblRydWUsIGV4cHJlc3Npb25UeXBlLCB0cmFuc2Zvcm1GdW5jdGlvbiwgaW5jbHVkZUFsbEV4cHJlc3Npb24pO1xuXHRcdFx0Y29uc3Qgb25GYWxzZSA9IHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KGV4cHJlc3Npb24ub25GYWxzZSwgZXhwcmVzc2lvblR5cGUsIHRyYW5zZm9ybUZ1bmN0aW9uLCBpbmNsdWRlQWxsRXhwcmVzc2lvbik7XG5cdFx0XHRsZXQgY29uZGl0aW9uID0gZXhwcmVzc2lvbi5jb25kaXRpb247XG5cdFx0XHRpZiAoaW5jbHVkZUFsbEV4cHJlc3Npb24pIHtcblx0XHRcdFx0Y29uZGl0aW9uID0gdHJhbnNmb3JtUmVjdXJzaXZlbHkoZXhwcmVzc2lvbi5jb25kaXRpb24sIGV4cHJlc3Npb25UeXBlLCB0cmFuc2Zvcm1GdW5jdGlvbiwgaW5jbHVkZUFsbEV4cHJlc3Npb24pO1xuXHRcdFx0fVxuXHRcdFx0ZXhwcmVzc2lvbiA9IGlmRWxzZShjb25kaXRpb24sIG9uVHJ1ZSwgb25GYWxzZSkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIk5vdFwiOlxuXHRcdFx0aWYgKGluY2x1ZGVBbGxFeHByZXNzaW9uKSB7XG5cdFx0XHRcdGNvbnN0IG9wZXJhbmQgPSB0cmFuc2Zvcm1SZWN1cnNpdmVseShleHByZXNzaW9uLm9wZXJhbmQsIGV4cHJlc3Npb25UeXBlLCB0cmFuc2Zvcm1GdW5jdGlvbiwgaW5jbHVkZUFsbEV4cHJlc3Npb24pO1xuXHRcdFx0XHRleHByZXNzaW9uID0gbm90KG9wZXJhbmQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJUcnV0aHlcIjpcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJTZXRcIjpcblx0XHRcdGlmIChpbmNsdWRlQWxsRXhwcmVzc2lvbikge1xuXHRcdFx0XHRjb25zdCBvcGVyYW5kcyA9IGV4cHJlc3Npb24ub3BlcmFuZHMubWFwKChvcGVyYW5kKSA9PlxuXHRcdFx0XHRcdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KG9wZXJhbmQsIGV4cHJlc3Npb25UeXBlLCB0cmFuc2Zvcm1GdW5jdGlvbiwgaW5jbHVkZUFsbEV4cHJlc3Npb24pXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGV4cHJlc3Npb24gPVxuXHRcdFx0XHRcdGV4cHJlc3Npb24ub3BlcmF0b3IgPT09IFwifHxcIlxuXHRcdFx0XHRcdFx0PyAob3IoLi4ub3BlcmFuZHMpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPilcblx0XHRcdFx0XHRcdDogKGFuZCguLi5vcGVyYW5kcykgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+KTtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJDb21wYXJpc29uXCI6XG5cdFx0XHRpZiAoaW5jbHVkZUFsbEV4cHJlc3Npb24pIHtcblx0XHRcdFx0Y29uc3Qgb3BlcmFuZDEgPSB0cmFuc2Zvcm1SZWN1cnNpdmVseShleHByZXNzaW9uLm9wZXJhbmQxLCBleHByZXNzaW9uVHlwZSwgdHJhbnNmb3JtRnVuY3Rpb24sIGluY2x1ZGVBbGxFeHByZXNzaW9uKTtcblx0XHRcdFx0Y29uc3Qgb3BlcmFuZDIgPSB0cmFuc2Zvcm1SZWN1cnNpdmVseShleHByZXNzaW9uLm9wZXJhbmQyLCBleHByZXNzaW9uVHlwZSwgdHJhbnNmb3JtRnVuY3Rpb24sIGluY2x1ZGVBbGxFeHByZXNzaW9uKTtcblx0XHRcdFx0ZXhwcmVzc2lvbiA9IGNvbXBhcmlzb24oZXhwcmVzc2lvbi5vcGVyYXRvciwgb3BlcmFuZDEsIG9wZXJhbmQyKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiUmVmXCI6XG5cdFx0Y2FzZSBcIkxlbmd0aFwiOlxuXHRcdGNhc2UgXCJQYXRoSW5Nb2RlbFwiOlxuXHRcdGNhc2UgXCJDb25zdGFudFwiOlxuXHRcdGNhc2UgXCJFbWJlZGRlZEJpbmRpbmdcIjpcblx0XHRjYXNlIFwiRW1iZWRkZWRFeHByZXNzaW9uQmluZGluZ1wiOlxuXHRcdGNhc2UgXCJVbnJlc29sdmFibGVcIjpcblx0XHRcdC8vIERvIG5vdGhpbmdcblx0XHRcdGJyZWFrO1xuXHR9XG5cdGlmIChleHByZXNzaW9uVHlwZSA9PT0gZXhwcmVzc2lvbi5fdHlwZSkge1xuXHRcdGV4cHJlc3Npb24gPSB0cmFuc2Zvcm1GdW5jdGlvbihpbkV4cHJlc3Npb24pO1xuXHR9XG5cdHJldHVybiBleHByZXNzaW9uO1xufVxuXG5leHBvcnQgdHlwZSBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiA9IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuY29uc3QgbmVlZFBhcmVudGhlc2lzID0gZnVuY3Rpb24gPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihleHByOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4pOiBib29sZWFuIHtcblx0cmV0dXJuIChcblx0XHQhaXNDb25zdGFudChleHByKSAmJiAhaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24oZXhwcikgJiYgaXNFeHByZXNzaW9uKGV4cHIpICYmIGV4cHIuX3R5cGUgIT09IFwiSWZFbHNlXCIgJiYgZXhwci5fdHlwZSAhPT0gXCJGdW5jdGlvblwiXG5cdCk7XG59O1xuXG4vKipcbiAqIENvbXBpbGVzIGEgY29uc3RhbnQgb2JqZWN0IHRvIGEgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSBleHByXG4gKiBAcGFyYW0gaXNOdWxsYWJsZVxuICogQHJldHVybnMgVGhlIGNvbXBpbGVkIHN0cmluZ1xuICovXG5mdW5jdGlvbiBjb21waWxlQ29uc3RhbnRPYmplY3QoZXhwcjogQ29uc3RhbnRFeHByZXNzaW9uPG9iamVjdD4sIGlzTnVsbGFibGUgPSBmYWxzZSkge1xuXHRpZiAoaXNOdWxsYWJsZSAmJiBPYmplY3Qua2V5cyhleHByLnZhbHVlKS5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXHQvLyBPYmplY3RzXG5cdGNvbnN0IG8gPSBleHByLnZhbHVlIGFzIFBsYWluRXhwcmVzc2lvbk9iamVjdDtcblx0Y29uc3QgcHJvcGVydGllczogc3RyaW5nW10gPSBbXTtcblx0T2JqZWN0LmtleXMobykuZm9yRWFjaCgoa2V5KSA9PiB7XG5cdFx0Y29uc3QgdmFsdWUgPSBvW2tleV07XG5cdFx0Y29uc3QgY2hpbGRSZXN1bHQgPSBjb21waWxlRXhwcmVzc2lvbih2YWx1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUpO1xuXHRcdGlmIChjaGlsZFJlc3VsdCAmJiBjaGlsZFJlc3VsdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRwcm9wZXJ0aWVzLnB1c2goYCR7a2V5fTogJHtjaGlsZFJlc3VsdH1gKTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gYHske3Byb3BlcnRpZXMuam9pbihcIiwgXCIpfX1gO1xufVxuXG4vKipcbiAqIENvbXBpbGVzIGEgQ29uc3RhbnQgQmluZGluZyBFeHByZXNzaW9uLlxuICpcbiAqIEBwYXJhbSBleHByXG4gKiBAcGFyYW0gZW1iZWRkZWRJbkJpbmRpbmdcbiAqIEBwYXJhbSBpc051bGxhYmxlXG4gKiBAcmV0dXJucyBUaGUgY29tcGlsZWQgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGVDb25zdGFudDxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oZXhwcjogQ29uc3RhbnRFeHByZXNzaW9uPFQ+LCBlbWJlZGRlZEluQmluZGluZzogYm9vbGVhbiwgaXNOdWxsYWJsZSA9IGZhbHNlKSB7XG5cdGlmIChleHByLnZhbHVlID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIFwibnVsbFwiO1xuXHR9XG5cdGlmIChleHByLnZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gXCJ1bmRlZmluZWRcIjtcblx0fVxuXHRpZiAodHlwZW9mIGV4cHIudmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRpZiAoQXJyYXkuaXNBcnJheShleHByLnZhbHVlKSkge1xuXHRcdFx0Y29uc3QgZW50cmllcyA9IGV4cHIudmFsdWUubWFwKChleHByZXNzaW9uKSA9PiBjb21waWxlRXhwcmVzc2lvbihleHByZXNzaW9uLCB0cnVlKSk7XG5cdFx0XHRyZXR1cm4gYFske2VudHJpZXMuam9pbihcIiwgXCIpfV1gO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUNvbnN0YW50T2JqZWN0KGV4cHIgYXMgQ29uc3RhbnRFeHByZXNzaW9uPG9iamVjdD4sIGlzTnVsbGFibGUpO1xuXHRcdH1cblx0fVxuXG5cdGlmIChlbWJlZGRlZEluQmluZGluZykge1xuXHRcdHN3aXRjaCAodHlwZW9mIGV4cHIudmFsdWUpIHtcblx0XHRcdGNhc2UgXCJudW1iZXJcIjpcblx0XHRcdGNhc2UgXCJiaWdpbnRcIjpcblx0XHRcdGNhc2UgXCJib29sZWFuXCI6XG5cdFx0XHRcdHJldHVybiBleHByLnZhbHVlLnRvU3RyaW5nKCk7XG5cdFx0XHRjYXNlIFwic3RyaW5nXCI6XG5cdFx0XHRcdHJldHVybiBgJyR7ZXNjYXBlWG1sQXR0cmlidXRlKGV4cHIudmFsdWUudG9TdHJpbmcoKSl9J2A7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGV4cHIudmFsdWUudG9TdHJpbmcoKTtcblx0fVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgYmluZGluZyBzdHJpbmcgZm9yIGEgQmluZGluZyBleHByZXNzaW9uLlxuICpcbiAqIEBwYXJhbSBleHByZXNzaW9uRm9yQmluZGluZyBUaGUgZXhwcmVzc2lvbiB0byBjb21waWxlXG4gKiBAcGFyYW0gZW1iZWRkZWRJbkJpbmRpbmcgV2hldGhlciB0aGUgZXhwcmVzc2lvbiB0byBjb21waWxlIGlzIGVtYmVkZGVkIGludG8gYW5vdGhlciBleHByZXNzaW9uXG4gKiBAcGFyYW0gZW1iZWRkZWRTZXBhcmF0b3IgVGhlIGJpbmRpbmcgdmFsdWUgZXZhbHVhdG9yICgkIG9yICUgZGVwZW5kaW5nIG9uIHdoZXRoZXIgd2Ugd2FudCB0byBmb3JjZSB0aGUgdHlwZSBvciBub3QpXG4gKiBAcmV0dXJucyBUaGUgY29ycmVzcG9uZGluZyBleHByZXNzaW9uIGJpbmRpbmdcbiAqL1xuZnVuY3Rpb24gY29tcGlsZVBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGV4cHJlc3Npb25Gb3JCaW5kaW5nOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248VD4sXG5cdGVtYmVkZGVkSW5CaW5kaW5nOiBib29sZWFuLFxuXHRlbWJlZGRlZFNlcGFyYXRvcjogc3RyaW5nXG4pIHtcblx0aWYgKFxuXHRcdGV4cHJlc3Npb25Gb3JCaW5kaW5nLnR5cGUgfHxcblx0XHRleHByZXNzaW9uRm9yQmluZGluZy5wYXJhbWV0ZXJzIHx8XG5cdFx0ZXhwcmVzc2lvbkZvckJpbmRpbmcudGFyZ2V0VHlwZSB8fFxuXHRcdGV4cHJlc3Npb25Gb3JCaW5kaW5nLmZvcm1hdE9wdGlvbnMgfHxcblx0XHRleHByZXNzaW9uRm9yQmluZGluZy5jb25zdHJhaW50c1xuXHQpIHtcblx0XHQvLyBUaGlzIGlzIG5vdyBhIGNvbXBsZXggYmluZGluZyBkZWZpbml0aW9uLCBsZXQncyBwcmVwYXJlIGZvciBpdFxuXHRcdGNvbnN0IGNvbXBsZXhCaW5kaW5nRGVmaW5pdGlvbiA9IHtcblx0XHRcdHBhdGg6IGNvbXBpbGVQYXRoSW5Nb2RlbChleHByZXNzaW9uRm9yQmluZGluZyksXG5cdFx0XHR0eXBlOiBleHByZXNzaW9uRm9yQmluZGluZy50eXBlLFxuXHRcdFx0dGFyZ2V0VHlwZTogZXhwcmVzc2lvbkZvckJpbmRpbmcudGFyZ2V0VHlwZSxcblx0XHRcdHBhcmFtZXRlcnM6IGV4cHJlc3Npb25Gb3JCaW5kaW5nLnBhcmFtZXRlcnMsXG5cdFx0XHRmb3JtYXRPcHRpb25zOiBleHByZXNzaW9uRm9yQmluZGluZy5mb3JtYXRPcHRpb25zLFxuXHRcdFx0Y29uc3RyYWludHM6IGV4cHJlc3Npb25Gb3JCaW5kaW5nLmNvbnN0cmFpbnRzXG5cdFx0fTtcblx0XHRsZXQgb3V0QmluZGluZyA9IGNvbXBpbGVFeHByZXNzaW9uKGNvbXBsZXhCaW5kaW5nRGVmaW5pdGlvbik7XG5cdFx0aWYgKGVtYmVkZGVkSW5CaW5kaW5nKSB7XG5cdFx0XHRvdXRCaW5kaW5nID0gYCR7ZW1iZWRkZWRTZXBhcmF0b3J9JHtvdXRCaW5kaW5nfWA7XG5cdFx0fVxuXHRcdHJldHVybiBvdXRCaW5kaW5nO1xuXHR9IGVsc2UgaWYgKGVtYmVkZGVkSW5CaW5kaW5nKSB7XG5cdFx0cmV0dXJuIGAke2VtYmVkZGVkU2VwYXJhdG9yfXske2NvbXBpbGVQYXRoSW5Nb2RlbChleHByZXNzaW9uRm9yQmluZGluZyl9fWA7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGB7JHtjb21waWxlUGF0aEluTW9kZWwoZXhwcmVzc2lvbkZvckJpbmRpbmcpfX1gO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGNvbXBpbGVDb21wbGV4VHlwZUV4cHJlc3Npb248VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KGV4cHJlc3Npb246IENvbXBsZXhUeXBlRXhwcmVzc2lvbjxUPikge1xuXHRpZiAoZXhwcmVzc2lvbi5iaW5kaW5nUGFyYW1ldGVycy5sZW5ndGggPT09IDEpIHtcblx0XHRyZXR1cm4gYHske2NvbXBpbGVQYXRoUGFyYW1ldGVyKGV4cHJlc3Npb24uYmluZGluZ1BhcmFtZXRlcnNbMF0sIHRydWUpfSwgdHlwZTogJyR7ZXhwcmVzc2lvbi50eXBlfSd9YDtcblx0fVxuXG5cdGxldCBvdXRwdXRFbmQgPSBgXSwgdHlwZTogJyR7ZXhwcmVzc2lvbi50eXBlfSdgO1xuXHRpZiAoaGFzRWxlbWVudHMoZXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zKSkge1xuXHRcdG91dHB1dEVuZCArPSBgLCBmb3JtYXRPcHRpb25zOiAke2NvbXBpbGVFeHByZXNzaW9uKGV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucyl9YDtcblx0fVxuXHRpZiAoaGFzRWxlbWVudHMoZXhwcmVzc2lvbi5wYXJhbWV0ZXJzKSkge1xuXHRcdG91dHB1dEVuZCArPSBgLCBwYXJhbWV0ZXJzOiAke2NvbXBpbGVFeHByZXNzaW9uKGV4cHJlc3Npb24ucGFyYW1ldGVycyl9YDtcblx0fVxuXHRvdXRwdXRFbmQgKz0gXCJ9XCI7XG5cblx0cmV0dXJuIGB7bW9kZTonVHdvV2F5JywgcGFydHM6WyR7ZXhwcmVzc2lvbi5iaW5kaW5nUGFyYW1ldGVycy5tYXAoKHBhcmFtOiBhbnkpID0+IGNvbXBpbGVQYXRoUGFyYW1ldGVyKHBhcmFtKSkuam9pbihcIixcIil9JHtvdXRwdXRFbmR9YDtcbn1cblxuLyoqXG4gKiBXcmFwIHRoZSBjb21waWxlZCBiaW5kaW5nIHN0cmluZyBhcyByZXF1aXJlZCBkZXBlbmRlbmluZyBvbiBpdHMgY29udGV4dC5cbiAqXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgY29tcGlsZWQgZXhwcmVzc2lvblxuICogQHBhcmFtIGVtYmVkZGVkSW5CaW5kaW5nIFRydWUgaWYgdGhlIGNvbXBpbGVkIGV4cHJlc3Npb24gaXMgdG8gYmUgZW1iZWRkZWQgaW4gYSBiaW5kaW5nXG4gKiBAcGFyYW0gcGFyZW50aGVzaXNSZXF1aXJlZCBUcnVlIGlmIHRoZSBlbWJlZGRlZCBiaW5kaW5nIG5lZWRzIHRvIGJlIHdyYXBwZWQgaW4gcGFyZXRoZXNpcyBzbyB0aGF0IGl0IGlzIGV2YWx1YXRlZCBhcyBvbmVcbiAqIEByZXR1cm5zIEZpbmFsaXplZCBjb21waWxlZCBleHByZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIHdyYXBCaW5kaW5nRXhwcmVzc2lvbihcblx0ZXhwcmVzc2lvbjogc3RyaW5nLFxuXHRlbWJlZGRlZEluQmluZGluZzogYm9vbGVhbixcblx0cGFyZW50aGVzaXNSZXF1aXJlZCA9IGZhbHNlXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGlmIChlbWJlZGRlZEluQmluZGluZykge1xuXHRcdGlmIChwYXJlbnRoZXNpc1JlcXVpcmVkKSB7XG5cdFx0XHRyZXR1cm4gYCgke2V4cHJlc3Npb259KWA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBleHByZXNzaW9uO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gYHs9ICR7ZXhwcmVzc2lvbn19YDtcblx0fVxufVxuXG4vKipcbiAqIENvbXBpbGUgYW4gZXhwcmVzc2lvbiBpbnRvIGFuIGV4cHJlc3Npb24gYmluZGluZy5cbiAqXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBleHByZXNzaW9uIHRvIGNvbXBpbGVcbiAqIEBwYXJhbSBlbWJlZGRlZEluQmluZGluZyBXaGV0aGVyIHRoZSBleHByZXNzaW9uIHRvIGNvbXBpbGUgaXMgZW1iZWRkZWQgaW50byBhbm90aGVyIGV4cHJlc3Npb25cbiAqIEBwYXJhbSBrZWVwVGFyZ2V0VHlwZSBLZWVwIHRoZSB0YXJnZXQgdHlwZSBvZiB0aGUgZW1iZWRkZWQgYmluZGluZ3MgaW5zdGVhZCBvZiBjYXN0aW5nIHRoZW0gdG8gYW55XG4gKiBAcGFyYW0gaXNOdWxsYWJsZSBXaGV0aGVyIGJpbmRpbmcgZXhwcmVzc2lvbiBjYW4gcmVzb2x2ZSB0byBlbXB0eSBzdHJpbmcgb3Igbm90XG4gKiBAcmV0dXJucyBUaGUgY29ycmVzcG9uZGluZyBleHByZXNzaW9uIGJpbmRpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGVFeHByZXNzaW9uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0ZXhwcmVzc2lvbjogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRlbWJlZGRlZEluQmluZGluZyA9IGZhbHNlLFxuXHRrZWVwVGFyZ2V0VHlwZSA9IGZhbHNlLFxuXHRpc051bGxhYmxlID0gZmFsc2Vcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0Y29uc3QgZXhwciA9IHdyYXBQcmltaXRpdmUoZXhwcmVzc2lvbik7XG5cdGNvbnN0IGVtYmVkZGVkU2VwYXJhdG9yID0ga2VlcFRhcmdldFR5cGUgPyBcIiRcIiA6IFwiJVwiO1xuXG5cdHN3aXRjaCAoZXhwci5fdHlwZSkge1xuXHRcdGNhc2UgXCJVbnJlc29sdmFibGVcIjpcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRjYXNlIFwiQ29uc3RhbnRcIjpcblx0XHRcdHJldHVybiBjb21waWxlQ29uc3RhbnQoZXhwciwgZW1iZWRkZWRJbkJpbmRpbmcsIGlzTnVsbGFibGUpO1xuXG5cdFx0Y2FzZSBcIlJlZlwiOlxuXHRcdFx0cmV0dXJuIGV4cHIucmVmIHx8IFwibnVsbFwiO1xuXG5cdFx0Y2FzZSBcIkZ1bmN0aW9uXCI6XG5cdFx0XHRjb25zdCBhcmd1bWVudFN0cmluZyA9IGAke2V4cHIucGFyYW1ldGVycy5tYXAoKGFyZykgPT4gY29tcGlsZUV4cHJlc3Npb24oYXJnLCB0cnVlKSkuam9pbihcIiwgXCIpfWA7XG5cdFx0XHRyZXR1cm4gZXhwci5vYmogPT09IHVuZGVmaW5lZFxuXHRcdFx0XHQ/IGAke2V4cHIuZm59KCR7YXJndW1lbnRTdHJpbmd9KWBcblx0XHRcdFx0OiBgJHtjb21waWxlRXhwcmVzc2lvbihleHByLm9iaiwgdHJ1ZSl9LiR7ZXhwci5mbn0oJHthcmd1bWVudFN0cmluZ30pYDtcblxuXHRcdGNhc2UgXCJFbWJlZGRlZEV4cHJlc3Npb25CaW5kaW5nXCI6XG5cdFx0XHRyZXR1cm4gZW1iZWRkZWRJbkJpbmRpbmcgPyBgKCR7ZXhwci52YWx1ZS5zdWJzdHIoMiwgZXhwci52YWx1ZS5sZW5ndGggLSAzKX0pYCA6IGAke2V4cHIudmFsdWV9YDtcblxuXHRcdGNhc2UgXCJFbWJlZGRlZEJpbmRpbmdcIjpcblx0XHRcdHJldHVybiBlbWJlZGRlZEluQmluZGluZyA/IGAke2VtYmVkZGVkU2VwYXJhdG9yfSR7ZXhwci52YWx1ZX1gIDogYCR7ZXhwci52YWx1ZX1gO1xuXG5cdFx0Y2FzZSBcIlBhdGhJbk1vZGVsXCI6XG5cdFx0XHRyZXR1cm4gY29tcGlsZVBhdGhJbk1vZGVsRXhwcmVzc2lvbihleHByLCBlbWJlZGRlZEluQmluZGluZywgZW1iZWRkZWRTZXBhcmF0b3IpO1xuXG5cdFx0Y2FzZSBcIkNvbXBhcmlzb25cIjpcblx0XHRcdGNvbnN0IGNvbXBhcmlzb25FeHByZXNzaW9uID0gY29tcGlsZUNvbXBhcmlzb25FeHByZXNzaW9uKGV4cHIpO1xuXHRcdFx0cmV0dXJuIHdyYXBCaW5kaW5nRXhwcmVzc2lvbihjb21wYXJpc29uRXhwcmVzc2lvbiwgZW1iZWRkZWRJbkJpbmRpbmcpO1xuXG5cdFx0Y2FzZSBcIklmRWxzZVwiOlxuXHRcdFx0Y29uc3QgaWZFbHNlRXhwcmVzc2lvbiA9IGAke2NvbXBpbGVFeHByZXNzaW9uKGV4cHIuY29uZGl0aW9uLCB0cnVlKX0gPyAke2NvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRleHByLm9uVHJ1ZSxcblx0XHRcdFx0dHJ1ZVxuXHRcdFx0KX0gOiAke2NvbXBpbGVFeHByZXNzaW9uKGV4cHIub25GYWxzZSwgdHJ1ZSl9YDtcblx0XHRcdHJldHVybiB3cmFwQmluZGluZ0V4cHJlc3Npb24oaWZFbHNlRXhwcmVzc2lvbiwgZW1iZWRkZWRJbkJpbmRpbmcsIHRydWUpO1xuXG5cdFx0Y2FzZSBcIlNldFwiOlxuXHRcdFx0Y29uc3Qgc2V0RXhwcmVzc2lvbiA9IGV4cHIub3BlcmFuZHMubWFwKChvcGVyYW5kKSA9PiBjb21waWxlRXhwcmVzc2lvbihvcGVyYW5kLCB0cnVlKSkuam9pbihgICR7ZXhwci5vcGVyYXRvcn0gYCk7XG5cdFx0XHRyZXR1cm4gd3JhcEJpbmRpbmdFeHByZXNzaW9uKHNldEV4cHJlc3Npb24sIGVtYmVkZGVkSW5CaW5kaW5nLCB0cnVlKTtcblxuXHRcdGNhc2UgXCJDb25jYXRcIjpcblx0XHRcdGNvbnN0IGNvbmNhdEV4cHJlc3Npb24gPSBleHByLmV4cHJlc3Npb25zXG5cdFx0XHRcdC5tYXAoKG5lc3RlZEV4cHJlc3Npb24pID0+IGNvbXBpbGVFeHByZXNzaW9uKG5lc3RlZEV4cHJlc3Npb24sIHRydWUsIHRydWUpKVxuXHRcdFx0XHQuam9pbihcIiArIFwiKTtcblx0XHRcdHJldHVybiB3cmFwQmluZGluZ0V4cHJlc3Npb24oY29uY2F0RXhwcmVzc2lvbiwgZW1iZWRkZWRJbkJpbmRpbmcpO1xuXG5cdFx0Y2FzZSBcIkxlbmd0aFwiOlxuXHRcdFx0Y29uc3QgbGVuZ3RoRXhwcmVzc2lvbiA9IGAke2NvbXBpbGVFeHByZXNzaW9uKGV4cHIucGF0aEluTW9kZWwsIHRydWUpfS5sZW5ndGhgO1xuXHRcdFx0cmV0dXJuIHdyYXBCaW5kaW5nRXhwcmVzc2lvbihsZW5ndGhFeHByZXNzaW9uLCBlbWJlZGRlZEluQmluZGluZyk7XG5cblx0XHRjYXNlIFwiTm90XCI6XG5cdFx0XHRjb25zdCBub3RFeHByZXNzaW9uID0gYCEke2NvbXBpbGVFeHByZXNzaW9uKGV4cHIub3BlcmFuZCwgdHJ1ZSl9YDtcblx0XHRcdHJldHVybiB3cmFwQmluZGluZ0V4cHJlc3Npb24obm90RXhwcmVzc2lvbiwgZW1iZWRkZWRJbkJpbmRpbmcpO1xuXG5cdFx0Y2FzZSBcIlRydXRoeVwiOlxuXHRcdFx0Y29uc3QgdHJ1dGh5RXhwcmVzc2lvbiA9IGAhISR7Y29tcGlsZUV4cHJlc3Npb24oZXhwci5vcGVyYW5kLCB0cnVlKX1gO1xuXHRcdFx0cmV0dXJuIHdyYXBCaW5kaW5nRXhwcmVzc2lvbih0cnV0aHlFeHByZXNzaW9uLCBlbWJlZGRlZEluQmluZGluZyk7XG5cblx0XHRjYXNlIFwiRm9ybWF0dGVyXCI6XG5cdFx0XHRjb25zdCBmb3JtYXR0ZXJFeHByZXNzaW9uID0gY29tcGlsZUZvcm1hdHRlckV4cHJlc3Npb24oZXhwcik7XG5cdFx0XHRyZXR1cm4gZW1iZWRkZWRJbkJpbmRpbmcgPyBgXFwkJHtmb3JtYXR0ZXJFeHByZXNzaW9ufWAgOiBmb3JtYXR0ZXJFeHByZXNzaW9uO1xuXG5cdFx0Y2FzZSBcIkNvbXBsZXhUeXBlXCI6XG5cdFx0XHRjb25zdCBjb21wbGV4VHlwZUV4cHJlc3Npb24gPSBjb21waWxlQ29tcGxleFR5cGVFeHByZXNzaW9uKGV4cHIpO1xuXHRcdFx0cmV0dXJuIGVtYmVkZGVkSW5CaW5kaW5nID8gYFxcJCR7Y29tcGxleFR5cGVFeHByZXNzaW9ufWAgOiBjb21wbGV4VHlwZUV4cHJlc3Npb247XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdH1cbn1cblxuLyoqXG4gKiBDb21waWxlIGEgY29tcGFyaXNvbiBleHByZXNzaW9uLlxuICpcbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBjb21wYXJpc29uIGV4cHJlc3Npb24uXG4gKiBAcmV0dXJucyBUaGUgY29tcGlsZWQgZXhwcmVzc2lvbi4gTmVlZHMgd3JhcHBpbmcgYmVmb3JlIGl0IGNhbiBiZSB1c2VkIGFzIGFuIGV4cHJlc3Npb24gYmluZGluZy5cbiAqL1xuZnVuY3Rpb24gY29tcGlsZUNvbXBhcmlzb25FeHByZXNzaW9uKGV4cHJlc3Npb246IENvbXBhcmlzb25FeHByZXNzaW9uKSB7XG5cdGZ1bmN0aW9uIGNvbXBpbGVPcGVyYW5kKG9wZXJhbmQ6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxhbnk+KSB7XG5cdFx0Y29uc3QgY29tcGlsZWRPcGVyYW5kID0gY29tcGlsZUV4cHJlc3Npb24ob3BlcmFuZCwgdHJ1ZSkgPz8gXCJ1bmRlZmluZWRcIjtcblx0XHRyZXR1cm4gd3JhcEJpbmRpbmdFeHByZXNzaW9uKGNvbXBpbGVkT3BlcmFuZCwgdHJ1ZSwgbmVlZFBhcmVudGhlc2lzKG9wZXJhbmQpKTtcblx0fVxuXG5cdHJldHVybiBgJHtjb21waWxlT3BlcmFuZChleHByZXNzaW9uLm9wZXJhbmQxKX0gJHtleHByZXNzaW9uLm9wZXJhdG9yfSAke2NvbXBpbGVPcGVyYW5kKGV4cHJlc3Npb24ub3BlcmFuZDIpfWA7XG59XG5cbi8qKlxuICogQ29tcGlsZSBhIGZvcm1hdHRlciBleHByZXNzaW9uLlxuICpcbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBmb3JtYXR0ZXIgZXhwcmVzc2lvbi5cbiAqIEByZXR1cm5zIFRoZSBjb21waWxlZCBleHByZXNzaW9uLlxuICovXG5mdW5jdGlvbiBjb21waWxlRm9ybWF0dGVyRXhwcmVzc2lvbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oZXhwcmVzc2lvbjogRm9ybWF0dGVyRXhwcmVzc2lvbjxUPikge1xuXHRpZiAoZXhwcmVzc2lvbi5wYXJhbWV0ZXJzLmxlbmd0aCA9PT0gMSkge1xuXHRcdHJldHVybiBgeyR7Y29tcGlsZVBhdGhQYXJhbWV0ZXIoZXhwcmVzc2lvbi5wYXJhbWV0ZXJzWzBdLCB0cnVlKX0sIGZvcm1hdHRlcjogJyR7ZXhwcmVzc2lvbi5mbn0nfWA7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgcGFydHMgPSBleHByZXNzaW9uLnBhcmFtZXRlcnMubWFwKChwYXJhbSkgPT4ge1xuXHRcdFx0aWYgKHBhcmFtLl90eXBlID09PSBcIkNvbXBsZXhUeXBlXCIpIHtcblx0XHRcdFx0cmV0dXJuIGNvbXBpbGVDb21wbGV4VHlwZUV4cHJlc3Npb24ocGFyYW0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGNvbXBpbGVQYXRoUGFyYW1ldGVyKHBhcmFtKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gYHtwYXJ0czogWyR7cGFydHMuam9pbihcIiwgXCIpfV0sIGZvcm1hdHRlcjogJyR7ZXhwcmVzc2lvbi5mbn0nfWA7XG5cdH1cbn1cblxuLyoqXG4gKiBDb21waWxlIHRoZSBwYXRoIHBhcmFtZXRlciBvZiBhIGZvcm1hdHRlciBjYWxsLlxuICpcbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBiaW5kaW5nIHBhcnQgdG8gZXZhbHVhdGVcbiAqIEBwYXJhbSBzaW5nbGVQYXRoIFdoZXRoZXIgdGhlcmUgaXMgb25lIG9yIG11bHRpcGxlIHBhdGggdG8gY29uc2lkZXJcbiAqIEByZXR1cm5zIFRoZSBzdHJpbmcgc25pcHBldCB0byBpbmNsdWRlIGluIHRoZSBvdmVyYWxsIGJpbmRpbmcgZGVmaW5pdGlvblxuICovXG5mdW5jdGlvbiBjb21waWxlUGF0aFBhcmFtZXRlcihleHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248YW55Piwgc2luZ2xlUGF0aCA9IGZhbHNlKTogc3RyaW5nIHtcblx0bGV0IG91dFZhbHVlID0gXCJcIjtcblx0aWYgKGV4cHJlc3Npb24uX3R5cGUgPT09IFwiQ29uc3RhbnRcIikge1xuXHRcdGlmIChleHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIFNwZWNpYWwgY2FzZSBvdGhlcndpc2UgdGhlIEpTVG9rZW5pemVyIGNvbXBsYWlucyBhYm91dCBpbmNvcnJlY3QgY29udGVudFxuXHRcdFx0b3V0VmFsdWUgPSBgdmFsdWU6ICd1bmRlZmluZWQnYDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b3V0VmFsdWUgPSBgdmFsdWU6ICR7Y29tcGlsZUNvbnN0YW50KGV4cHJlc3Npb24sIHRydWUpfWA7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGV4cHJlc3Npb24uX3R5cGUgPT09IFwiUGF0aEluTW9kZWxcIikge1xuXHRcdG91dFZhbHVlID0gYHBhdGg6ICcke2NvbXBpbGVQYXRoSW5Nb2RlbChleHByZXNzaW9uKX0nYDtcblxuXHRcdG91dFZhbHVlICs9IGV4cHJlc3Npb24udHlwZSA/IGAsIHR5cGU6ICcke2V4cHJlc3Npb24udHlwZX0nYCA6IGAsIHRhcmdldFR5cGU6ICdhbnknYDtcblx0XHRpZiAoaGFzRWxlbWVudHMoZXhwcmVzc2lvbi5tb2RlKSkge1xuXHRcdFx0b3V0VmFsdWUgKz0gYCwgbW9kZTogJyR7Y29tcGlsZUV4cHJlc3Npb24oZXhwcmVzc2lvbi5tb2RlKX0nYDtcblx0XHR9XG5cdFx0aWYgKGhhc0VsZW1lbnRzKGV4cHJlc3Npb24uY29uc3RyYWludHMpKSB7XG5cdFx0XHRvdXRWYWx1ZSArPSBgLCBjb25zdHJhaW50czogJHtjb21waWxlRXhwcmVzc2lvbihleHByZXNzaW9uLmNvbnN0cmFpbnRzKX1gO1xuXHRcdH1cblx0XHRpZiAoaGFzRWxlbWVudHMoZXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zKSkge1xuXHRcdFx0b3V0VmFsdWUgKz0gYCwgZm9ybWF0T3B0aW9uczogJHtjb21waWxlRXhwcmVzc2lvbihleHByZXNzaW9uLmZvcm1hdE9wdGlvbnMpfWA7XG5cdFx0fVxuXHRcdGlmIChoYXNFbGVtZW50cyhleHByZXNzaW9uLnBhcmFtZXRlcnMpKSB7XG5cdFx0XHRvdXRWYWx1ZSArPSBgLCBwYXJhbWV0ZXJzOiAke2NvbXBpbGVFeHByZXNzaW9uKGV4cHJlc3Npb24ucGFyYW1ldGVycyl9YDtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblx0cmV0dXJuIHNpbmdsZVBhdGggPyBvdXRWYWx1ZSA6IGB7JHtvdXRWYWx1ZX19YDtcbn1cblxuZnVuY3Rpb24gaGFzRWxlbWVudHMob2JqOiBhbnkpIHtcblx0cmV0dXJuIG9iaiAmJiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA+IDA7XG59XG5cbi8qKlxuICogQ29tcGlsZSBhIGJpbmRpbmcgZXhwcmVzc2lvbiBwYXRoLlxuICpcbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBleHByZXNzaW9uIHRvIGNvbXBpbGUuXG4gKiBAcmV0dXJucyBUaGUgY29tcGlsZWQgcGF0aC5cbiAqL1xuZnVuY3Rpb24gY29tcGlsZVBhdGhJbk1vZGVsPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihleHByZXNzaW9uOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248VD4pIHtcblx0cmV0dXJuIGAke2V4cHJlc3Npb24ubW9kZWxOYW1lID8gYCR7ZXhwcmVzc2lvbi5tb2RlbE5hbWV9PmAgOiBcIlwifSR7ZXhwcmVzc2lvbi5wYXRofWA7XG59XG4iXX0=