@sapui5/sap.fe.base 1.131.0 → 1.133.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -12,7 +12,7 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
12
12
  */
13
13
 
14
14
  function isProperty(serviceObject) {
15
- return (serviceObject === null || serviceObject === void 0 ? void 0 : serviceObject._type) === "Property";
15
+ return serviceObject?._type === "Property";
16
16
  }
17
17
 
18
18
  /**
@@ -537,7 +537,7 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
537
537
  */
538
538
  _exports.wrapPrimitive = wrapPrimitive;
539
539
  function isBindingToolkitExpression(expression) {
540
- return (expression === null || expression === void 0 ? void 0 : expression._type) !== undefined;
540
+ return expression?._type !== undefined;
541
541
  }
542
542
 
543
543
  /**
@@ -565,7 +565,7 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
565
565
  * @returns `true` if it is a path in model expression
566
566
  */
567
567
  function isPathInModelExpression(maybeBinding) {
568
- return (maybeBinding === null || maybeBinding === void 0 ? void 0 : maybeBinding._type) === "PathInModel";
568
+ return maybeBinding?._type === "PathInModel";
569
569
  }
570
570
 
571
571
  /**
@@ -576,7 +576,7 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
576
576
  */
577
577
  _exports.isPathInModelExpression = isPathInModelExpression;
578
578
  function isComplexTypeExpression(maybeBinding) {
579
- return (maybeBinding === null || maybeBinding === void 0 ? void 0 : maybeBinding._type) === "ComplexType";
579
+ return maybeBinding?._type === "ComplexType";
580
580
  }
581
581
 
582
582
  /**
@@ -586,7 +586,7 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
586
586
  */
587
587
  _exports.isComplexTypeExpression = isComplexTypeExpression;
588
588
  function isConcatExpression(expression) {
589
- return (expression === null || expression === void 0 ? void 0 : expression._type) === "Concat";
589
+ return expression?._type === "Concat";
590
590
  }
591
591
 
592
592
  /**
@@ -595,7 +595,7 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
595
595
  * @returns `true` if the expression is a IfElseExpression
596
596
  */
597
597
  function isIfElseExpression(expression) {
598
- return (expression === null || expression === void 0 ? void 0 : expression._type) === "IfElse";
598
+ return expression?._type === "IfElse";
599
599
  }
600
600
 
601
601
  /**
@@ -615,7 +615,7 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
615
615
  */
616
616
  function isUndefinedExpression(expression) {
617
617
  const expressionAsExpression = expression;
618
- return (expressionAsExpression === null || expressionAsExpression === void 0 ? void 0 : expressionAsExpression._type) === "Constant" && (expressionAsExpression === null || expressionAsExpression === void 0 ? void 0 : expressionAsExpression.value) === undefined;
618
+ return expressionAsExpression?._type === "Constant" && expressionAsExpression?.value === undefined;
619
619
  }
620
620
  _exports.isUndefinedExpression = isUndefinedExpression;
621
621
  function isPrimitiveObject(objectType) {
@@ -648,14 +648,13 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
648
648
  * @returns The annotationValue equivalent to that annotation annotationValue
649
649
  */
650
650
  function getExpressionFromAnnotation(annotationValue) {
651
- var _annotationValue;
652
651
  let visitedNavigationPaths = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
653
652
  let defaultValue = arguments.length > 2 ? arguments[2] : undefined;
654
653
  let pathVisitor = arguments.length > 3 ? arguments[3] : undefined;
655
654
  if (annotationValue === undefined) {
656
655
  return wrapPrimitive(defaultValue);
657
656
  }
658
- annotationValue = (_annotationValue = annotationValue) === null || _annotationValue === void 0 ? void 0 : _annotationValue.valueOf();
657
+ annotationValue = annotationValue?.valueOf();
659
658
  if (!isComplexAnnotationExpression(annotationValue)) {
660
659
  return constant(annotationValue);
661
660
  }
@@ -688,6 +687,9 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
688
687
  }));
689
688
  case "Apply":
690
689
  return annotationApplyExpression(annotationValue, visitedNavigationPaths, pathVisitor);
690
+ case "Constant":
691
+ // Not a real case but the type system needs it
692
+ return constant(annotationValue.value);
691
693
  }
692
694
  return unresolvableExpression;
693
695
  }
@@ -1172,32 +1174,29 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
1172
1174
  }
1173
1175
  _exports.formatResult = formatResult;
1174
1176
  function setUpConstraints(targetMapping, property) {
1175
- var _targetMapping$constr, _targetMapping$constr2, _targetMapping$constr3, _targetMapping$constr4, _property$annotations, _property$annotations2, _targetMapping$constr5, _property$annotations5, _property$annotations6, _property$annotations9, _property$annotations10, _targetMapping$constr6, _targetMapping$constr7;
1176
1177
  const constraints = {};
1177
- if (targetMapping !== null && targetMapping !== void 0 && (_targetMapping$constr = targetMapping.constraints) !== null && _targetMapping$constr !== void 0 && _targetMapping$constr.$Scale && property.scale !== undefined) {
1178
+ if (targetMapping?.constraints?.$Scale && property.scale !== undefined) {
1178
1179
  constraints.scale = property.scale;
1179
1180
  }
1180
- if (targetMapping !== null && targetMapping !== void 0 && (_targetMapping$constr2 = targetMapping.constraints) !== null && _targetMapping$constr2 !== void 0 && _targetMapping$constr2.$Precision && property.precision !== undefined) {
1181
+ if (targetMapping?.constraints?.$Precision && property.precision !== undefined) {
1181
1182
  constraints.precision = property.precision;
1182
1183
  }
1183
- if (targetMapping !== null && targetMapping !== void 0 && (_targetMapping$constr3 = targetMapping.constraints) !== null && _targetMapping$constr3 !== void 0 && _targetMapping$constr3.$MaxLength && property.maxLength !== undefined) {
1184
+ if (targetMapping?.constraints?.$MaxLength && property.maxLength !== undefined) {
1184
1185
  constraints.maxLength = property.maxLength;
1185
1186
  }
1186
1187
  if (property.nullable === false) {
1187
1188
  constraints.nullable = false;
1188
1189
  }
1189
- if (targetMapping !== null && targetMapping !== void 0 && (_targetMapping$constr4 = targetMapping.constraints) !== null && _targetMapping$constr4 !== void 0 && _targetMapping$constr4["@Org.OData.Validation.V1.Minimum/$Decimal"] && !isNaN((_property$annotations = property.annotations) === null || _property$annotations === void 0 ? void 0 : (_property$annotations2 = _property$annotations.Validation) === null || _property$annotations2 === void 0 ? void 0 : _property$annotations2.Minimum)) {
1190
- var _property$annotations3, _property$annotations4;
1191
- constraints.minimum = `${(_property$annotations3 = property.annotations) === null || _property$annotations3 === void 0 ? void 0 : (_property$annotations4 = _property$annotations3.Validation) === null || _property$annotations4 === void 0 ? void 0 : _property$annotations4.Minimum}`;
1190
+ if (targetMapping?.constraints?.["@Org.OData.Validation.V1.Minimum/$Decimal"] && !isNaN(property.annotations?.Validation?.Minimum)) {
1191
+ constraints.minimum = `${property.annotations?.Validation?.Minimum}`;
1192
1192
  }
1193
- if (targetMapping !== null && targetMapping !== void 0 && (_targetMapping$constr5 = targetMapping.constraints) !== null && _targetMapping$constr5 !== void 0 && _targetMapping$constr5["@Org.OData.Validation.V1.Maximum/$Decimal"] && !isNaN((_property$annotations5 = property.annotations) === null || _property$annotations5 === void 0 ? void 0 : (_property$annotations6 = _property$annotations5.Validation) === null || _property$annotations6 === void 0 ? void 0 : _property$annotations6.Maximum)) {
1194
- var _property$annotations7, _property$annotations8;
1195
- constraints.maximum = `${(_property$annotations7 = property.annotations) === null || _property$annotations7 === void 0 ? void 0 : (_property$annotations8 = _property$annotations7.Validation) === null || _property$annotations8 === void 0 ? void 0 : _property$annotations8.Maximum}`;
1193
+ if (targetMapping?.constraints?.["@Org.OData.Validation.V1.Maximum/$Decimal"] && !isNaN(property.annotations?.Validation?.Maximum)) {
1194
+ constraints.maximum = `${property.annotations?.Validation?.Maximum}`;
1196
1195
  }
1197
- if ((_property$annotations9 = property.annotations) !== null && _property$annotations9 !== void 0 && (_property$annotations10 = _property$annotations9.Common) !== null && _property$annotations10 !== void 0 && _property$annotations10.IsDigitSequence && targetMapping.type === "sap.ui.model.odata.type.String" && targetMapping !== null && targetMapping !== void 0 && (_targetMapping$constr6 = targetMapping.constraints) !== null && _targetMapping$constr6 !== void 0 && _targetMapping$constr6["@com.sap.vocabularies.Common.v1.IsDigitSequence"]) {
1196
+ if (property.annotations?.Common?.IsDigitSequence && targetMapping.type === "sap.ui.model.odata.type.String" && targetMapping?.constraints?.["@com.sap.vocabularies.Common.v1.IsDigitSequence"]) {
1198
1197
  constraints.isDigitSequence = true;
1199
1198
  }
1200
- if (targetMapping !== null && targetMapping !== void 0 && (_targetMapping$constr7 = targetMapping.constraints) !== null && _targetMapping$constr7 !== void 0 && _targetMapping$constr7.$V4) {
1199
+ if (targetMapping?.constraints?.$V4) {
1201
1200
  constraints.V4 = true;
1202
1201
  }
1203
1202
  return constraints;
@@ -1212,7 +1211,6 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
1212
1211
  */
1213
1212
  _exports.setUpConstraints = setUpConstraints;
1214
1213
  function formatWithTypeInformation(property, propertyBindingExpression) {
1215
- var _outExpression$type, _outExpression$constr3, _outExpression$constr4;
1216
1214
  let ignoreConstraints = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
1217
1215
  const outExpression = propertyBindingExpression;
1218
1216
  if (property._type !== "Property" && property._type !== "ActionParameter") {
@@ -1230,14 +1228,13 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
1230
1228
  if (!ignoreConstraints) {
1231
1229
  outExpression.constraints = setUpConstraints(targetMapping, property);
1232
1230
  }
1233
- if ((outExpression === null || outExpression === void 0 ? void 0 : (_outExpression$type = outExpression.type) === null || _outExpression$type === void 0 ? void 0 : _outExpression$type.indexOf("sap.ui.model.odata.type.Int")) === 0 && (outExpression === null || outExpression === void 0 ? void 0 : outExpression.type) !== "sap.ui.model.odata.type.Int64" || (outExpression === null || outExpression === void 0 ? void 0 : outExpression.type) === "sap.ui.model.odata.type.Double") {
1231
+ if (outExpression?.type?.indexOf("sap.ui.model.odata.type.Int") === 0 && outExpression?.type !== "sap.ui.model.odata.type.Int64" || outExpression?.type === "sap.ui.model.odata.type.Double") {
1234
1232
  outExpression.formatOptions = Object.assign(outExpression.formatOptions, {
1235
1233
  parseAsString: false
1236
1234
  });
1237
1235
  }
1238
1236
  if (outExpression.type === "sap.ui.model.odata.type.String" && isProperty(property)) {
1239
- var _outExpression$constr, _outExpression$constr2;
1240
- if ((_outExpression$constr = outExpression.constraints) !== null && _outExpression$constr !== void 0 && _outExpression$constr.isDigitSequence || ((_outExpression$constr2 = outExpression.constraints) === null || _outExpression$constr2 === void 0 ? void 0 : _outExpression$constr2.nullable) !== false && property.nullable === true) {
1237
+ if (outExpression.constraints?.isDigitSequence || outExpression.constraints?.nullable !== false && property.nullable === true) {
1241
1238
  outExpression.formatOptions.parseKeepsEmptyString = false;
1242
1239
  } else {
1243
1240
  outExpression.formatOptions.parseKeepsEmptyString = true;
@@ -1249,12 +1246,12 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
1249
1246
  }
1250
1247
  }
1251
1248
  const typesSupportingParseEmptyValueToZero = ["sap.ui.model.odata.type.Int16", "sap.ui.model.odata.type.Int32", "sap.ui.model.odata.type.Int64", "sap.ui.model.odata.type.Single", "sap.ui.model.odata.type.Double", "sap.ui.model.odata.type.Decimal", "sap.ui.model.odata.type.Byte", "sap.ui.model.odata.type.SByte"];
1252
- if (((_outExpression$constr3 = outExpression.constraints) === null || _outExpression$constr3 === void 0 ? void 0 : _outExpression$constr3.nullable) === false && outExpression.type && typesSupportingParseEmptyValueToZero.includes(outExpression.type)) {
1249
+ if (outExpression.constraints?.nullable === false && outExpression.type && typesSupportingParseEmptyValueToZero.includes(outExpression.type)) {
1253
1250
  outExpression.formatOptions = Object.assign(outExpression.formatOptions, {
1254
1251
  parseEmptyValueToZero: true
1255
1252
  });
1256
1253
  }
1257
- if (((_outExpression$constr4 = outExpression.constraints) === null || _outExpression$constr4 === void 0 ? void 0 : _outExpression$constr4.nullable) !== false && (outExpression.type === "sap.ui.model.odata.type.Int64" || outExpression.type === "sap.ui.model.odata.type.Decimal")) {
1254
+ if (outExpression.constraints?.nullable !== false && (outExpression.type === "sap.ui.model.odata.type.Int64" || outExpression.type === "sap.ui.model.odata.type.Decimal")) {
1258
1255
  outExpression.formatOptions = Object.assign(outExpression.formatOptions, {
1259
1256
  emptyString: ""
1260
1257
  });
@@ -1263,29 +1260,28 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
1263
1260
  }
1264
1261
  _exports.formatWithTypeInformation = formatWithTypeInformation;
1265
1262
  const getFiscalType = function (property) {
1266
- var _property$annotations11, _property$annotations12, _property$annotations13, _property$annotations14, _property$annotations15, _property$annotations16, _property$annotations17, _property$annotations18, _property$annotations19, _property$annotations20, _property$annotations21, _property$annotations22, _property$annotations23, _property$annotations24, _property$annotations25, _property$annotations26;
1267
- if ((_property$annotations11 = property.annotations) !== null && _property$annotations11 !== void 0 && (_property$annotations12 = _property$annotations11.Common) !== null && _property$annotations12 !== void 0 && _property$annotations12.IsFiscalYear) {
1263
+ if (property.annotations?.Common?.IsFiscalYear) {
1268
1264
  return "com.sap.vocabularies.Common.v1.IsFiscalYear";
1269
1265
  }
1270
- if ((_property$annotations13 = property.annotations) !== null && _property$annotations13 !== void 0 && (_property$annotations14 = _property$annotations13.Common) !== null && _property$annotations14 !== void 0 && _property$annotations14.IsFiscalPeriod) {
1266
+ if (property.annotations?.Common?.IsFiscalPeriod) {
1271
1267
  return "com.sap.vocabularies.Common.v1.IsFiscalPeriod";
1272
1268
  }
1273
- if ((_property$annotations15 = property.annotations) !== null && _property$annotations15 !== void 0 && (_property$annotations16 = _property$annotations15.Common) !== null && _property$annotations16 !== void 0 && _property$annotations16.IsFiscalYearPeriod) {
1269
+ if (property.annotations?.Common?.IsFiscalYearPeriod) {
1274
1270
  return "com.sap.vocabularies.Common.v1.IsFiscalYearPeriod";
1275
1271
  }
1276
- if ((_property$annotations17 = property.annotations) !== null && _property$annotations17 !== void 0 && (_property$annotations18 = _property$annotations17.Common) !== null && _property$annotations18 !== void 0 && _property$annotations18.IsFiscalQuarter) {
1272
+ if (property.annotations?.Common?.IsFiscalQuarter) {
1277
1273
  return "com.sap.vocabularies.Common.v1.IsFiscalQuarter";
1278
1274
  }
1279
- if ((_property$annotations19 = property.annotations) !== null && _property$annotations19 !== void 0 && (_property$annotations20 = _property$annotations19.Common) !== null && _property$annotations20 !== void 0 && _property$annotations20.IsFiscalYearQuarter) {
1275
+ if (property.annotations?.Common?.IsFiscalYearQuarter) {
1280
1276
  return "com.sap.vocabularies.Common.v1.IsFiscalYearQuarter";
1281
1277
  }
1282
- if ((_property$annotations21 = property.annotations) !== null && _property$annotations21 !== void 0 && (_property$annotations22 = _property$annotations21.Common) !== null && _property$annotations22 !== void 0 && _property$annotations22.IsFiscalWeek) {
1278
+ if (property.annotations?.Common?.IsFiscalWeek) {
1283
1279
  return "com.sap.vocabularies.Common.v1.IsFiscalWeek";
1284
1280
  }
1285
- if ((_property$annotations23 = property.annotations) !== null && _property$annotations23 !== void 0 && (_property$annotations24 = _property$annotations23.Common) !== null && _property$annotations24 !== void 0 && _property$annotations24.IsFiscalYearWeek) {
1281
+ if (property.annotations?.Common?.IsFiscalYearWeek) {
1286
1282
  return "com.sap.vocabularies.Common.v1.IsFiscalYearWeek";
1287
1283
  }
1288
- if ((_property$annotations25 = property.annotations) !== null && _property$annotations25 !== void 0 && (_property$annotations26 = _property$annotations25.Common) !== null && _property$annotations26 !== void 0 && _property$annotations26.IsDayOfFiscalYear) {
1284
+ if (property.annotations?.Common?.IsDayOfFiscalYear) {
1289
1285
  return "com.sap.vocabularies.Common.v1.IsDayOfFiscalYear";
1290
1286
  }
1291
1287
  };
@@ -1322,11 +1318,15 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
1322
1318
  const uomPath = pathInModel("/##@@requestUnitsOfMeasure");
1323
1319
  uomPath.targetType = "any";
1324
1320
  uomPath.mode = "OneTime";
1321
+ oFormatOptions ??= {};
1322
+ oFormatOptions.preserveDecimals = oConstraintOptions?.skipDecimalsValidation ?? false;
1325
1323
  parameterExpressions.push(uomPath);
1326
1324
  } else if (type === "sap.ui.model.odata.type.Currency") {
1327
1325
  const currencyPath = pathInModel("/##@@requestCurrencyCodes");
1328
1326
  currencyPath.targetType = "any";
1329
1327
  currencyPath.mode = "OneTime";
1328
+ oFormatOptions ??= {};
1329
+ oFormatOptions.preserveDecimals = false; // default value since we don't have a CLDR
1330
1330
  parameterExpressions.push(currencyPath);
1331
1331
  }
1332
1332
  return {
@@ -1346,27 +1346,28 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
1346
1346
  * @returns The modified formatOptions
1347
1347
  */
1348
1348
  function _getComplexTypeFormatOptionsFromFirstParam(param, formatOptions) {
1349
- var _param$type;
1350
1349
  // if showMeasure is set to false we want to not parse as string to see the 0
1351
1350
  // we do that also for all bindings because otherwise the mdc Field isn't editable
1352
- if (!(formatOptions && formatOptions.showNumber === false) && ((param === null || param === void 0 ? void 0 : (_param$type = param.type) === null || _param$type === void 0 ? void 0 : _param$type.indexOf("sap.ui.model.odata.type.Int")) === 0 || (param === null || param === void 0 ? void 0 : param.type) === "sap.ui.model.odata.type.Decimal" || (param === null || param === void 0 ? void 0 : param.type) === "sap.ui.model.odata.type.Double")) {
1353
- var _param$constraints;
1354
- if ((param === null || param === void 0 ? void 0 : param.type) === "sap.ui.model.odata.type.Int64" || (param === null || param === void 0 ? void 0 : param.type) === "sap.ui.model.odata.type.Decimal") {
1355
- var _formatOptions;
1351
+ if (!(formatOptions && formatOptions.showNumber === false) && (param?.type?.indexOf("sap.ui.model.odata.type.Int") === 0 || param?.type === "sap.ui.model.odata.type.Decimal" || param?.type === "sap.ui.model.odata.type.Double")) {
1352
+ if (param?.type === "sap.ui.model.odata.type.Int64" || param?.type === "sap.ui.model.odata.type.Decimal") {
1356
1353
  //sap.ui.model.odata.type.Int64 do not support parseAsString false
1357
- formatOptions = ((_formatOptions = formatOptions) === null || _formatOptions === void 0 ? void 0 : _formatOptions.showMeasure) === false ? {
1358
- showMeasure: false
1359
- } : {};
1354
+ formatOptions = formatOptions?.showMeasure === false ? {
1355
+ showMeasure: false,
1356
+ decimalPadding: formatOptions.decimalPadding
1357
+ } : {
1358
+ decimalPadding: formatOptions?.decimalPadding
1359
+ };
1360
1360
  } else {
1361
- var _formatOptions2;
1362
- formatOptions = ((_formatOptions2 = formatOptions) === null || _formatOptions2 === void 0 ? void 0 : _formatOptions2.showMeasure) === false ? {
1361
+ formatOptions = formatOptions?.showMeasure === false ? {
1363
1362
  parseAsString: false,
1364
- showMeasure: false
1363
+ showMeasure: false,
1364
+ decimalPadding: formatOptions.decimalPadding
1365
1365
  } : {
1366
- parseAsString: false
1366
+ parseAsString: false,
1367
+ decimalPadding: formatOptions?.decimalPadding
1367
1368
  };
1368
1369
  }
1369
- if ((param === null || param === void 0 ? void 0 : (_param$constraints = param.constraints) === null || _param$constraints === void 0 ? void 0 : _param$constraints.nullable) !== false) {
1370
+ if (param?.constraints?.nullable !== false) {
1370
1371
  formatOptions.emptyString = null;
1371
1372
  } else {
1372
1373
  formatOptions.emptyString = "";
@@ -1821,4 +1822,4 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
1821
1822
  }
1822
1823
  return _exports;
1823
1824
  }, false);
1824
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc1Byb3BlcnR5Iiwic2VydmljZU9iamVjdCIsIl90eXBlIiwiX2V4cG9ydHMiLCJFRE1fVFlQRV9NQVBQSU5HIiwidHlwZSIsImNvbnN0cmFpbnRzIiwiJFByZWNpc2lvbiIsIiRWNCIsIiRTY2FsZSIsIiRNYXhMZW5ndGgiLCIkTnVsbGFibGUiLCJ1bnJlc29sdmFibGVFeHByZXNzaW9uIiwiZXNjYXBlWG1sQXR0cmlidXRlIiwiaW5wdXRTdHJpbmciLCJyZXBsYWNlIiwiaGFzVW5yZXNvbHZhYmxlRXhwcmVzc2lvbiIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJleHByZXNzaW9ucyIsIkFycmF5IiwiX2tleSIsImZpbmQiLCJleHByIiwidW5kZWZpbmVkIiwiX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbCIsImEiLCJiIiwidmFsdWUiLCJvcGVyYW5kIiwib3BlcmF0b3IiLCJvcGVyYW5kcyIsImV2ZXJ5IiwiZXhwcmVzc2lvbiIsInNvbWUiLCJvdGhlckV4cHJlc3Npb24iLCJjb25kaXRpb24iLCJvblRydWUiLCJvbkZhbHNlIiwib3BlcmFuZDEiLCJvcGVyYW5kMiIsImFFeHByZXNzaW9ucyIsImJFeHByZXNzaW9ucyIsImluZGV4IiwicGF0aEluTW9kZWwiLCJtb2RlbE5hbWUiLCJwYXRoIiwidGFyZ2V0RW50aXR5U2V0IiwiZm4iLCJwYXJhbWV0ZXJzIiwiYmluZGluZ1BhcmFtZXRlcnMiLCJvdGhlckZ1bmN0aW9uIiwib2JqIiwicmVmIiwiZmxhdHRlblNldEV4cHJlc3Npb24iLCJyZWR1Y2UiLCJyZXN1bHQiLCJjYW5kaWRhdGVzRm9yRmxhdHRlbmluZyIsImZvckVhY2giLCJjYW5kaWRhdGUiLCJlIiwicHVzaCIsImhhc09wcG9zaXRlRXhwcmVzc2lvbnMiLCJuZWdhdGVkRXhwcmVzc2lvbnMiLCJtYXAiLCJub3QiLCJpIiwiYW5kIiwiX2xlbjIiLCJfa2V5MiIsIndyYXBQcmltaXRpdmUiLCJpc1N0YXRpY0ZhbHNlIiwibm9uVHJpdmlhbEV4cHJlc3Npb24iLCJmaWx0ZXIiLCJpc0ZhbHNlIiwiaXNDb25zdGFudCIsImNvbnN0YW50IiwiaXNWYWxpZCIsImlzVHJ1ZSIsIm9yIiwiX2xlbjMiLCJfa2V5MyIsImlzU3RhdGljVHJ1ZSIsImlzQ29tcGFyaXNvbiIsImlzVHJ1dGh5IiwiYmluZGluZ0V4cHJlc3Npb24iLCJ2aXNpdGVkTmF2aWdhdGlvblBhdGhzIiwicGF0aFZpc2l0b3IiLCJ0YXJnZXRQYXRoIiwibG9jYWxQYXRoIiwiY29uY2F0Iiwiam9pbiIsImNvbnN0YW50VmFsdWUiLCJpc0FycmF5IiwiaXNQcmltaXRpdmVPYmplY3QiLCJ2YWx1ZU9mIiwiT2JqZWN0IiwiZW50cmllcyIsInBsYWluRXhwcmVzc2lvbiIsIl9yZWYiLCJrZXkiLCJ2YWwiLCJ3cmFwcGVkVmFsdWUiLCJyZXNvbHZlQmluZGluZ1N0cmluZyIsInRhcmdldFR5cGUiLCJzdGFydHNXaXRoIiwicGF0aEluTW9kZWxSZWdleCIsInBhdGhJbk1vZGVsUmVnZXhNYXRjaCIsImV4ZWMiLCJpc05hTiIsIk51bWJlciIsInJlZmVyZW5jZSIsImJpbmRTdGF0ZSIsInN0YXRlT2JqZWN0UHJvcCIsIl9fYmluZGluZ0luZm8iLCJ0b1N0cmluZyIsIm1vZGVsIiwic29tZXRoaW5nIiwiaXNCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24iLCJtYXliZUNvbnN0YW50IiwiaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24iLCJtYXliZUJpbmRpbmciLCJpc0NvbXBsZXhUeXBlRXhwcmVzc2lvbiIsImlzQ29uY2F0RXhwcmVzc2lvbiIsImlzSWZFbHNlRXhwcmVzc2lvbiIsImlzVW5kZWZpbmVkRXhwcmVzc2lvbiIsImV4cHJlc3Npb25Bc0V4cHJlc3Npb24iLCJvYmplY3RUeXBlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiaXNDb21wbGV4QW5ub3RhdGlvbkV4cHJlc3Npb24iLCJhbm5vdGF0aW9uVmFsdWUiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJfYW5ub3RhdGlvblZhbHVlIiwiZGVmYXVsdFZhbHVlIiwiYW5ub3RhdGlvbklmRXhwcmVzc2lvbiIsIiRJZiIsInBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbiIsIiROb3QiLCJlcXVhbCIsIiRFcSIsIm5vdEVxdWFsIiwiJE5lIiwiZ3JlYXRlclRoYW4iLCIkR3QiLCJncmVhdGVyT3JFcXVhbCIsIiRHZSIsImxlc3NUaGFuIiwiJEx0IiwibGVzc09yRXF1YWwiLCIkTGUiLCIkT3IiLCJvckNvbmRpdGlvbiIsIiRBbmQiLCJhbmRDb25kaXRpb24iLCJhbm5vdGF0aW9uQXBwbHlFeHByZXNzaW9uIiwiaGFzT3duUHJvcGVydHkiLCIkUGF0aCIsIiRGdW5jdGlvbiIsIiRBcHBseSIsInJlc29sdmVFbnVtVmFsdWUiLCIkRW51bU1lbWJlciIsImlmRWxzZSIsImNvbnZlcnRTdWJBcHBseVBhcmFtZXRlcnMiLCJhcHBseVBhcmFtIiwiYXBwbHlQYXJhbUNvbnZlcnRlZCIsImFwcGx5RXhwcmVzc2lvbiIsInBhcmFtZXRlciIsInRlbXBsYXRlIiwidGVtcGxhdGVQYXJhbXMiLCJzbGljZSIsInRhcmdldE9iamVjdCIsIiROYW1lIiwiJExhYmVsZWRFbGVtZW50IiwiY29tcGFyaXNvbiIsImxlZnRPcGVyYW5kIiwicmlnaHRPcGVyYW5kIiwibGVmdEV4cHJlc3Npb24iLCJyaWdodEV4cHJlc3Npb24iLCJjaGVja1VuZGVmaW5lZCIsImxlZnQiLCJyaWdodCIsInJlZHVjZWQiLCJjb25kaXRpb25FeHByZXNzaW9uIiwib25UcnVlRXhwcmVzc2lvbiIsIm9uRmFsc2VFeHByZXNzaW9uIiwicGF0aElkeCIsIm15SWZFbHNlRXhwcmVzc2lvbiIsImZvcm1hdFJlc3VsdCIsImFsbFBhcnRzIiwidHJhbnNmb3JtUmVjdXJzaXZlbHkiLCJjb25zdGFudFBhdGgiLCJ1bnNoaWZ0IiwiSlNPTiIsInN0cmluZ2lmeSIsImhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQiLCJmb3JtYXR0ZXJGdW5jdGlvbiIsImNvbnRleHRFbnRpdHlUeXBlIiwiaWdub3JlQ29tcGxleFR5cGUiLCJwYXJhbWV0ZXJFeHByZXNzaW9ucyIsImtleXMiLCJmdW5jdGlvbk5hbWUiLCJfX2Z1bmN0aW9uTmFtZSIsImZvcm1hdHRlckNsYXNzIiwiZm9ybWF0dGVyTmFtZSIsInNwbGl0IiwibXlGb3JtYXRFeHByZXNzaW9uIiwic2V0VXBDb25zdHJhaW50cyIsInRhcmdldE1hcHBpbmciLCJwcm9wZXJ0eSIsIl90YXJnZXRNYXBwaW5nJGNvbnN0ciIsIl90YXJnZXRNYXBwaW5nJGNvbnN0cjIiLCJfdGFyZ2V0TWFwcGluZyRjb25zdHIzIiwiX3RhcmdldE1hcHBpbmckY29uc3RyNCIsIl9wcm9wZXJ0eSRhbm5vdGF0aW9ucyIsIl9wcm9wZXJ0eSRhbm5vdGF0aW9uczIiLCJfdGFyZ2V0TWFwcGluZyRjb25zdHI1IiwiX3Byb3BlcnR5JGFubm90YXRpb25zNSIsIl9wcm9wZXJ0eSRhbm5vdGF0aW9uczYiLCJfcHJvcGVydHkkYW5ub3RhdGlvbnM5IiwiX3Byb3BlcnR5JGFubm90YXRpb25zMTAiLCJfdGFyZ2V0TWFwcGluZyRjb25zdHI2IiwiX3RhcmdldE1hcHBpbmckY29uc3RyNyIsInNjYWxlIiwicHJlY2lzaW9uIiwibWF4TGVuZ3RoIiwibnVsbGFibGUiLCJhbm5vdGF0aW9ucyIsIlZhbGlkYXRpb24iLCJNaW5pbXVtIiwiX3Byb3BlcnR5JGFubm90YXRpb25zMyIsIl9wcm9wZXJ0eSRhbm5vdGF0aW9uczQiLCJtaW5pbXVtIiwiTWF4aW11bSIsIl9wcm9wZXJ0eSRhbm5vdGF0aW9uczciLCJfcHJvcGVydHkkYW5ub3RhdGlvbnM4IiwibWF4aW11bSIsIkNvbW1vbiIsIklzRGlnaXRTZXF1ZW5jZSIsImlzRGlnaXRTZXF1ZW5jZSIsIlY0IiwiZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbiIsInByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24iLCJfb3V0RXhwcmVzc2lvbiR0eXBlIiwiX291dEV4cHJlc3Npb24kY29uc3RyMyIsIl9vdXRFeHByZXNzaW9uJGNvbnN0cjQiLCJpZ25vcmVDb25zdHJhaW50cyIsIm91dEV4cHJlc3Npb24iLCJmb3JtYXRPcHRpb25zIiwiaW5kZXhPZiIsImFzc2lnbiIsInBhcnNlQXNTdHJpbmciLCJfb3V0RXhwcmVzc2lvbiRjb25zdHIiLCJfb3V0RXhwcmVzc2lvbiRjb25zdHIyIiwicGFyc2VLZWVwc0VtcHR5U3RyaW5nIiwiZmlzY2FsVHlwZSIsImdldEZpc2NhbFR5cGUiLCJ0eXBlc1N1cHBvcnRpbmdQYXJzZUVtcHR5VmFsdWVUb1plcm8iLCJpbmNsdWRlcyIsInBhcnNlRW1wdHlWYWx1ZVRvWmVybyIsImVtcHR5U3RyaW5nIiwiX3Byb3BlcnR5JGFubm90YXRpb25zMTEiLCJfcHJvcGVydHkkYW5ub3RhdGlvbnMxMiIsIl9wcm9wZXJ0eSRhbm5vdGF0aW9uczEzIiwiX3Byb3BlcnR5JGFubm90YXRpb25zMTQiLCJfcHJvcGVydHkkYW5ub3RhdGlvbnMxNSIsIl9wcm9wZXJ0eSRhbm5vdGF0aW9uczE2IiwiX3Byb3BlcnR5JGFubm90YXRpb25zMTciLCJfcHJvcGVydHkkYW5ub3RhdGlvbnMxOCIsIl9wcm9wZXJ0eSRhbm5vdGF0aW9uczE5IiwiX3Byb3BlcnR5JGFubm90YXRpb25zMjAiLCJfcHJvcGVydHkkYW5ub3RhdGlvbnMyMSIsIl9wcm9wZXJ0eSRhbm5vdGF0aW9uczIyIiwiX3Byb3BlcnR5JGFubm90YXRpb25zMjMiLCJfcHJvcGVydHkkYW5ub3RhdGlvbnMyNCIsIl9wcm9wZXJ0eSRhbm5vdGF0aW9uczI1IiwiX3Byb3BlcnR5JGFubm90YXRpb25zMjYiLCJJc0Zpc2NhbFllYXIiLCJJc0Zpc2NhbFBlcmlvZCIsIklzRmlzY2FsWWVhclBlcmlvZCIsIklzRmlzY2FsUXVhcnRlciIsIklzRmlzY2FsWWVhclF1YXJ0ZXIiLCJJc0Zpc2NhbFdlZWsiLCJJc0Zpc2NhbFllYXJXZWVrIiwiSXNEYXlPZkZpc2NhbFllYXIiLCJhZGRUeXBlSW5mb3JtYXRpb24iLCJvRm9ybWF0T3B0aW9ucyIsIm9Db25zdHJhaW50T3B0aW9ucyIsIl9nZXRDb21wbGV4VHlwZUZvcm1hdE9wdGlvbnNGcm9tRmlyc3RQYXJhbSIsInVvbVBhdGgiLCJtb2RlIiwiY3VycmVuY3lQYXRoIiwicGFyYW0iLCJfcGFyYW0kdHlwZSIsInNob3dOdW1iZXIiLCJfcGFyYW0kY29uc3RyYWludHMiLCJfZm9ybWF0T3B0aW9ucyIsInNob3dNZWFzdXJlIiwiX2Zvcm1hdE9wdGlvbnMyIiwiZnVuYyIsIm9uIiwiaXNGb3JtYXR0aW5nRm4iLCJpc0VtcHR5IiwiYUJpbmRpbmdzIiwiZmluYWxFeHByZXNzaW9uIiwiYWx3YXlzS2VlcFRhcmdldFR5cGUiLCJfbGVuNCIsImluRXhwcmVzc2lvbnMiLCJfa2V5NCIsImNvbmNhdGVuYXRlZCIsIm15Q29uY2F0RXhwcmVzc2lvbiIsImluRXhwcmVzc2lvbiIsImV4cHJlc3Npb25UeXBlIiwidHJhbnNmb3JtRnVuY3Rpb24iLCJpbmNsdWRlQWxsRXhwcmVzc2lvbiIsInN1YkV4cHJlc3Npb24iLCJiaW5kaW5nUGFyYW1ldGVyIiwibmVlZFBhcmVudGhlc2lzIiwiY29tcGlsZUNvbnN0YW50T2JqZWN0IiwiaXNOdWxsYWJsZSIsIm9iamVjdHMiLCJwcm9wZXJ0aWVzIiwiY2hpbGRSZXN1bHQiLCJjb21waWxlRXhwcmVzc2lvbiIsImNvbXBpbGVDb25zdGFudCIsImVtYmVkZGVkSW5CaW5kaW5nIiwiZG9Ob3RTdHJpbmdpZnkiLCJjb21waWxlUGF0aEluTW9kZWxFeHByZXNzaW9uIiwiZXhwcmVzc2lvbkZvckJpbmRpbmciLCJlbWJlZGRlZFNlcGFyYXRvciIsImNvbXBsZXhCaW5kaW5nRGVmaW5pdGlvbiIsImNvbXBpbGVQYXRoSW5Nb2RlbCIsIm91dEJpbmRpbmciLCJzZXBhcmF0b3IiLCJjb21waWxlQ29tcGxleFR5cGVFeHByZXNzaW9uIiwiY29tcGlsZVBhdGhQYXJhbWV0ZXIiLCJvdXRwdXRFbmQiLCJoYXNFbGVtZW50cyIsIndyYXBCaW5kaW5nRXhwcmVzc2lvbiIsInBhcmVudGhlc2lzUmVxdWlyZWQiLCJrZWVwVGFyZ2V0VHlwZSIsImhhc0VtYmVkZGVkRnVuY3Rpb25DYWxsT3JCaW5kaW5nIiwic3ViRm4iLCJzdWJTdWJGbiIsImFyZ3VtZW50U3RyaW5nIiwiYXJnIiwiZm5DYWxsIiwic3Vic3RyaW5nIiwiY29tcGFyaXNvbkV4cHJlc3Npb24iLCJjb21waWxlQ29tcGFyaXNvbkV4cHJlc3Npb24iLCJpZkVsc2VFeHByZXNzaW9uIiwic2V0RXhwcmVzc2lvbiIsImNvbmNhdEV4cHJlc3Npb24iLCJuZXN0ZWRFeHByZXNzaW9uIiwibGVuZ3RoRXhwcmVzc2lvbiIsIm5vdEV4cHJlc3Npb24iLCJ0cnV0aHlFeHByZXNzaW9uIiwiZm9ybWF0dGVyRXhwcmVzc2lvbiIsImNvbXBpbGVGb3JtYXR0ZXJFeHByZXNzaW9uIiwiY29tcGxleFR5cGVFeHByZXNzaW9uIiwiY29tcGlsZU9wZXJhbmQiLCJjb21waWxlZE9wZXJhbmQiLCJwYXJ0cyIsInNpbmdsZVBhdGgiLCJvdXRWYWx1ZSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQmluZGluZ1Rvb2xraXQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuXHRBY3Rpb25QYXJhbWV0ZXIsXG5cdEFuZEFubm90YXRpb25FeHByZXNzaW9uLFxuXHRBbmRDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdEFwcGx5QW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdEJvb2xlYW4sXG5cdENvbmRpdGlvbmFsQ2hlY2tPclZhbHVlLFxuXHRFbnRpdHlTZXQsXG5cdEVudGl0eVR5cGUsXG5cdEVxQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdEVxQ29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHRHZUFubm90YXRpb25FeHByZXNzaW9uLFxuXHRHZUNvbmRpdGlvbmFsRXhwcmVzc2lvbixcblx0R3RBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0R3RDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdElmQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdElmQW5ub3RhdGlvbkV4cHJlc3Npb25WYWx1ZSxcblx0TGVBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0TGVDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdEx0QW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdEx0Q29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHROZUFubm90YXRpb25FeHByZXNzaW9uLFxuXHROZUNvbmRpdGlvbmFsRXhwcmVzc2lvbixcblx0Tm90QW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdE5vdENvbmRpdGlvbmFsRXhwcmVzc2lvbixcblx0T3JBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0T3JDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0UGF0aENvbmRpdGlvbkV4cHJlc3Npb24sXG5cdFByb3BlcnR5LFxuXHRQcm9wZXJ0eUFubm90YXRpb25WYWx1ZVxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IENvbW1vbkFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgeyByZXNvbHZlRW51bVZhbHVlIH0gZnJvbSBcInNhcC9mZS9iYXNlL0Fubm90YXRpb25FbnVtXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdJbmZvSG9sZGVyIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuXG5leHBvcnQgdHlwZSBQcmltaXRpdmVUeXBlID0gc3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50IHwgYm9vbGVhbiB8IG9iamVjdCB8IG51bGwgfCB1bmRlZmluZWQ7XG50eXBlIERlZmluZWRQcmltaXRpdmVUeXBlID0gc3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50IHwgYm9vbGVhbiB8IG9iamVjdDtcbnR5cGUgUHJpbWl0aXZlVHlwZUNhc3Q8UD4gPSBQIGV4dGVuZHMgU3RyaW5nID8gc3RyaW5nIDogUCBleHRlbmRzIEJvb2xlYW4gPyBib29sZWFuIDogUCBleHRlbmRzIE51bWJlciA/IG51bWJlciA6IFA7XG50eXBlIEJhc2VFeHByZXNzaW9uPF9UPiA9IHtcblx0X3R5cGU6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEZvcm1hdE9wdGlvbnMgPSBQYXJ0aWFsPHtcblx0Y3VzdG9tVW5pdHM6IFJlY29yZDxzdHJpbmcsIG9iamVjdD47XG5cdGN1c3RvbUN1cnJlbmNpZXM6IFJlY29yZDxzdHJpbmcsIG9iamVjdD47XG5cdGRlY2ltYWxzOiBudW1iZXI7XG5cdGVtcHR5U3RyaW5nOiBudWxsIHwgbnVtYmVyIHwgc3RyaW5nO1xuXHRmaXNjYWxUeXBlOiBzdHJpbmc7XG5cdGdyb3VwaW5nRW5hYmxlZDogYm9vbGVhbjtcblx0bWF4RnJhY3Rpb25EaWdpdHM6IG51bWJlcjtcblx0bWF4SW50ZWdlckRpZ2l0czogbnVtYmVyO1xuXHRtaW5GcmFjdGlvbkRpZ2l0czogbnVtYmVyO1xuXHRtaW5JbnRlZ2VyRGlnaXRzOiBudW1iZXI7XG5cdHBhcnNlQXNTdHJpbmc6IGJvb2xlYW47XG5cdHBhcnNlS2VlcHNFbXB0eVN0cmluZzogYm9vbGVhbjtcblx0cGF0dGVybjogc3RyaW5nO1xuXHRwcmVjaXNpb246IG51bWJlcjtcblx0cHJlc2VydmVEZWNpbWFsczogYm9vbGVhbjtcblx0c2hvcnREZWNpbWFsczogbnVtYmVyO1xuXHRzaG9ydFJlZk51bWJlcjogbnVtYmVyO1xuXHRzaG93TWVhc3VyZTogYm9vbGVhbjtcblx0c2hvd051bWJlcjogYm9vbGVhbjtcblx0c2hvd1NjYWxlOiBib29sZWFuO1xuXHRzdHlsZTogc3RyaW5nO1xufT47XG5cbmV4cG9ydCB0eXBlIENvbnN0YW50RXhwcmVzc2lvbjxUPiA9IEJhc2VFeHByZXNzaW9uPFQ+ICYge1xuXHRfdHlwZTogXCJDb25zdGFudFwiO1xuXHR2YWx1ZTogVDtcbn07XG5cbnR5cGUgU2V0T3BlcmF0b3IgPSBcIiYmXCIgfCBcInx8XCI7XG5leHBvcnQgdHlwZSBTZXRFeHByZXNzaW9uID0gQmFzZUV4cHJlc3Npb248Ym9vbGVhbj4gJiB7XG5cdF90eXBlOiBcIlNldFwiO1xuXHRvcGVyYXRvcjogU2V0T3BlcmF0b3I7XG5cdG9wZXJhbmRzOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXTtcbn07XG5cbmV4cG9ydCB0eXBlIE5vdEV4cHJlc3Npb24gPSBCYXNlRXhwcmVzc2lvbjxib29sZWFuPiAmIHtcblx0X3R5cGU6IFwiTm90XCI7XG5cdG9wZXJhbmQ6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcbn07XG5cbmV4cG9ydCB0eXBlIFRydXRoeUV4cHJlc3Npb24gPSBCYXNlRXhwcmVzc2lvbjxib29sZWFuPiAmIHtcblx0X3R5cGU6IFwiVHJ1dGh5XCI7XG5cdG9wZXJhbmQ6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+O1xufTtcblxuZXhwb3J0IHR5cGUgUmVmZXJlbmNlRXhwcmVzc2lvbiA9IEJhc2VFeHByZXNzaW9uPG9iamVjdD4gJiB7XG5cdF90eXBlOiBcIlJlZlwiO1xuXHRyZWY6IHN0cmluZyB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBGb3JtYXR0ZXJFeHByZXNzaW9uPFQ+ID0gQmFzZUV4cHJlc3Npb248VD4gJiB7XG5cdF90eXBlOiBcIkZvcm1hdHRlclwiO1xuXHRmbjogc3RyaW5nO1xuXHRwYXJhbWV0ZXJzOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj5bXTtcbn07XG5cbnR5cGUgQ29tcGxleFR5cGVFeHByZXNzaW9uPFQ+ID0gQmFzZUV4cHJlc3Npb248VD4gJiB7XG5cdF90eXBlOiBcIkNvbXBsZXhUeXBlXCI7XG5cdHR5cGU6IHN0cmluZztcblx0Zm9ybWF0T3B0aW9uczogRm9ybWF0T3B0aW9ucztcblx0Y29uc3RyYWludHM6IG9iamVjdDtcblx0cGFyYW1ldGVyczogb2JqZWN0O1xuXHRiaW5kaW5nUGFyYW1ldGVyczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+W107XG59O1xuXG5leHBvcnQgdHlwZSBGdW5jdGlvbkV4cHJlc3Npb248VD4gPSBCYXNlRXhwcmVzc2lvbjxUPiAmIHtcblx0X3R5cGU6IFwiRnVuY3Rpb25cIjtcblx0b2JqPzogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPG9iamVjdD47XG5cdGZuOiBzdHJpbmc7XG5cdGlzRm9ybWF0dGluZ0ZuOiBib29sZWFuO1xuXHRwYXJhbWV0ZXJzOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj5bXTtcbn07XG5cbmV4cG9ydCB0eXBlIENvbmNhdEV4cHJlc3Npb24gPSBCYXNlRXhwcmVzc2lvbjxzdHJpbmc+ICYge1xuXHRfdHlwZTogXCJDb25jYXRcIjtcblx0ZXhwcmVzc2lvbnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+W107XG59O1xuXG5leHBvcnQgdHlwZSBMZW5ndGhFeHByZXNzaW9uID0gQmFzZUV4cHJlc3Npb248c3RyaW5nPiAmIHtcblx0X3R5cGU6IFwiTGVuZ3RoXCI7XG5cdHBhdGhJbk1vZGVsOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248dW5rbm93bj47XG59O1xuXG50eXBlIFVucmVzb2x2YWJsZVBhdGhFeHByZXNzaW9uID0gQmFzZUV4cHJlc3Npb248c3RyaW5nPiAmIHtcblx0X3R5cGU6IFwiVW5yZXNvbHZhYmxlXCI7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIFBhdGhJbk1vZGVsRXhwcmVzc2lvblxuICovXG5leHBvcnQgdHlwZSBQYXRoSW5Nb2RlbEV4cHJlc3Npb248VD4gPSBCYXNlRXhwcmVzc2lvbjxUPiAmIHtcblx0X3R5cGU6IFwiUGF0aEluTW9kZWxcIjtcblx0bW9kZWxOYW1lPzogc3RyaW5nO1xuXHRwYXRoOiBzdHJpbmc7XG5cdHRhcmdldEVudGl0eVNldD86IEVudGl0eVNldDtcblx0dHlwZT86IHN0cmluZztcblx0Y29uc3RyYWludHM/OiBCaW5kaW5nQ29uc3RyYWludHM7XG5cdHBhcmFtZXRlcnM/OiBvYmplY3Q7XG5cdHRhcmdldFR5cGU/OiBzdHJpbmc7XG5cdG1vZGU/OiBzdHJpbmc7XG5cdGZvcm1hdE9wdGlvbnM/OiBGb3JtYXRPcHRpb25zO1xuXHRhbHdheXNLZWVwVGFyZ2V0VHlwZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBFbWJlZGRlZFVJNUJpbmRpbmdFeHByZXNzaW9uPFQ+ID0gQmFzZUV4cHJlc3Npb248VD4gJiB7XG5cdF90eXBlOiBcIkVtYmVkZGVkQmluZGluZ1wiO1xuXHR2YWx1ZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgRW1iZWRkZWRVSTVFeHByZXNzaW9uQmluZGluZ0V4cHJlc3Npb248VD4gPSBCYXNlRXhwcmVzc2lvbjxUPiAmIHtcblx0X3R5cGU6IFwiRW1iZWRkZWRFeHByZXNzaW9uQmluZGluZ1wiO1xuXHR2YWx1ZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQ29tcGFyaXNvbk9wZXJhdG9yID0gXCI9PT1cIiB8IFwiIT09XCIgfCBcIj49XCIgfCBcIj5cIiB8IFwiPD1cIiB8IFwiPFwiO1xuZXhwb3J0IHR5cGUgQ29tcGFyaXNvbkV4cHJlc3Npb24gPSBCYXNlRXhwcmVzc2lvbjxib29sZWFuPiAmIHtcblx0X3R5cGU6IFwiQ29tcGFyaXNvblwiO1xuXHRvcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yO1xuXHRvcGVyYW5kMTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+O1xuXHRvcGVyYW5kMjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+O1xufTtcblxuZXhwb3J0IHR5cGUgSWZFbHNlRXhwcmVzc2lvbjxUPiA9IEJhc2VFeHByZXNzaW9uPFQ+ICYge1xuXHRfdHlwZTogXCJJZkVsc2VcIjtcblx0Y29uZGl0aW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdG9uVHJ1ZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHRvbkZhbHNlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG59O1xuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvcGVydHkoc2VydmljZU9iamVjdDogdW5rbm93bik6IHNlcnZpY2VPYmplY3QgaXMgUHJvcGVydHkge1xuXHRyZXR1cm4gKHNlcnZpY2VPYmplY3QgYXMgUHJvcGVydHkpPy5fdHlwZSA9PT0gXCJQcm9wZXJ0eVwiO1xufVxuXG4vKipcbiAqIEFuIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgdG8gdHlwZSBULlxuICogQHR5cGVkZWYgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uXG4gKi9cbmV4cG9ydCB0eXBlIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPiA9XG5cdHwgVW5yZXNvbHZhYmxlUGF0aEV4cHJlc3Npb25cblx0fCBDb25zdGFudEV4cHJlc3Npb248VD5cblx0fCBTZXRFeHByZXNzaW9uXG5cdHwgTm90RXhwcmVzc2lvblxuXHR8IFRydXRoeUV4cHJlc3Npb25cblx0fCBDb25jYXRFeHByZXNzaW9uXG5cdHwgTGVuZ3RoRXhwcmVzc2lvblxuXHR8IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUPlxuXHR8IEVtYmVkZGVkVUk1QmluZGluZ0V4cHJlc3Npb248VD5cblx0fCBFbWJlZGRlZFVJNUV4cHJlc3Npb25CaW5kaW5nRXhwcmVzc2lvbjxUPlxuXHR8IENvbXBhcmlzb25FeHByZXNzaW9uXG5cdHwgSWZFbHNlRXhwcmVzc2lvbjxUPlxuXHR8IEZvcm1hdHRlckV4cHJlc3Npb248VD5cblx0fCBDb21wbGV4VHlwZUV4cHJlc3Npb248VD5cblx0fCBSZWZlcmVuY2VFeHByZXNzaW9uXG5cdHwgRnVuY3Rpb25FeHByZXNzaW9uPFQ+O1xuXG50eXBlIFR5cGVNYXBwaW5nRGVmaW5pdGlvbiA9IHtcblx0dHlwZTogc3RyaW5nO1xuXHRjb25zdHJhaW50cz86IHtcblx0XHQkUHJlY2lzaW9uPzogc3RyaW5nO1xuXHRcdCRWND86IHN0cmluZztcblx0XHQkU2NhbGU/OiBzdHJpbmc7XG5cdFx0JE1heExlbmd0aD86IHN0cmluZztcblx0XHQkTnVsbGFibGU/OiBzdHJpbmc7XG5cdFx0XCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWluaW11bS8kRGVjaW1hbFwiPzogc3RyaW5nO1xuXHRcdFwiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1pbmltdW1AT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuRXhjbHVzaXZlXCI/OiBzdHJpbmc7XG5cdFx0XCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWF4aW11bS8kRGVjaW1hbFwiPzogc3RyaW5nO1xuXHRcdFwiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1heGltdW1AT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuRXhjbHVzaXZlXCI/OiBzdHJpbmc7XG5cdFx0XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRGlnaXRTZXF1ZW5jZVwiPzogc3RyaW5nO1xuXHR9O1xufTtcbmV4cG9ydCBjb25zdCBFRE1fVFlQRV9NQVBQSU5HOiBSZWNvcmQ8c3RyaW5nLCBUeXBlTWFwcGluZ0RlZmluaXRpb24+ID0ge1xuXHRcIkVkbS5Cb29sZWFuXCI6IHsgdHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Cb29sZWFuXCIgfSxcblx0XCJFZG0uQnl0ZVwiOiB7IHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuQnl0ZVwiIH0sXG5cdFwiRWRtLkRhdGVcIjogeyB0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRhdGVcIiB9LFxuXHRcIkVkbS5EYXRlVGltZU9mZnNldFwiOiB7XG5cdFx0Y29uc3RyYWludHM6IHtcblx0XHRcdCRQcmVjaXNpb246IFwicHJlY2lzaW9uXCIsXG5cdFx0XHQkVjQ6IFwiVjRcIlxuXHRcdH0sXG5cdFx0dHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5EYXRlVGltZU9mZnNldFwiXG5cdH0sXG5cdFwiRWRtLkRlY2ltYWxcIjoge1xuXHRcdGNvbnN0cmFpbnRzOiB7XG5cdFx0XHRcIkBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NaW5pbXVtLyREZWNpbWFsXCI6IFwibWluaW11bVwiLFxuXHRcdFx0XCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWluaW11bUBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5FeGNsdXNpdmVcIjogXCJtaW5pbXVtRXhjbHVzaXZlXCIsXG5cdFx0XHRcIkBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NYXhpbXVtLyREZWNpbWFsXCI6IFwibWF4aW11bVwiLFxuXHRcdFx0XCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWF4aW11bUBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5FeGNsdXNpdmVcIjogXCJtYXhpbXVtRXhjbHVzaXZlXCIsXG5cdFx0XHQkUHJlY2lzaW9uOiBcInByZWNpc2lvblwiLFxuXHRcdFx0JFNjYWxlOiBcInNjYWxlXCJcblx0XHR9LFxuXHRcdHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRGVjaW1hbFwiXG5cdH0sXG5cdFwiRWRtLkRvdWJsZVwiOiB7IHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRG91YmxlXCIgfSxcblx0XCJFZG0uR3VpZFwiOiB7IHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuR3VpZFwiIH0sXG5cdFwiRWRtLkludDE2XCI6IHsgdHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnQxNlwiIH0sXG5cdFwiRWRtLkludDMyXCI6IHsgdHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnQzMlwiIH0sXG5cdFwiRWRtLkludDY0XCI6IHsgdHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnQ2NFwiIH0sXG5cdFwiRWRtLlNCeXRlXCI6IHsgdHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TQnl0ZVwiIH0sXG5cdFwiRWRtLlNpbmdsZVwiOiB7IHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU2luZ2xlXCIgfSxcblx0XCJFZG0uU3RyZWFtXCI6IHsgdHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJlYW1cIiB9LFxuXHRcIkVkbS5CaW5hcnlcIjogeyB0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmVhbVwiIH0sXG5cdFwiRWRtLlN0cmluZ1wiOiB7XG5cdFx0Y29uc3RyYWludHM6IHtcblx0XHRcdFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0RpZ2l0U2VxdWVuY2VcIjogXCJpc0RpZ2l0U2VxdWVuY2VcIixcblx0XHRcdCRNYXhMZW5ndGg6IFwibWF4TGVuZ3RoXCIsXG5cdFx0XHQkTnVsbGFibGU6IFwibnVsbGFibGVcIlxuXHRcdH0sXG5cdFx0dHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIlxuXHR9LFxuXHRcIkVkbS5UaW1lT2ZEYXlcIjoge1xuXHRcdGNvbnN0cmFpbnRzOiB7XG5cdFx0XHQkUHJlY2lzaW9uOiBcInByZWNpc2lvblwiXG5cdFx0fSxcblx0XHR0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlRpbWVPZkRheVwiXG5cdH1cbn07XG5cbi8qKlxuICogQW4gZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRlcyB0byB0eXBlIFQsIG9yIGEgY29uc3RhbnQgdmFsdWUgb2YgdHlwZSBUXG4gKi9cbmV4cG9ydCB0eXBlIEV4cHJlc3Npb25PclByaW1pdGl2ZTxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4gPSBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4gfCBUO1xuXG5leHBvcnQgY29uc3QgdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjogVW5yZXNvbHZhYmxlUGF0aEV4cHJlc3Npb24gPSB7XG5cdF90eXBlOiBcIlVucmVzb2x2YWJsZVwiXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlWG1sQXR0cmlidXRlKGlucHV0U3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gaW5wdXRTdHJpbmcucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzVW5yZXNvbHZhYmxlRXhwcmVzc2lvbiguLi5leHByZXNzaW9uczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+W10pOiBib29sZWFuIHtcblx0cmV0dXJuIGV4cHJlc3Npb25zLmZpbmQoKGV4cHIpID0+IGV4cHIuX3R5cGUgPT09IFwiVW5yZXNvbHZhYmxlXCIpICE9PSB1bmRlZmluZWQ7XG59XG4vKipcbiAqIENoZWNrIHR3byBleHByZXNzaW9ucyBmb3IgKGRlZXApIGVxdWFsaXR5LlxuICogQHBhcmFtIGFcbiAqIEBwYXJhbSBiXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHR3byBleHByZXNzaW9ucyBhcmUgZXF1YWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWw8VD4oYTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+LCBiOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4pOiBib29sZWFuIHtcblx0aWYgKGEuX3R5cGUgIT09IGIuX3R5cGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRzd2l0Y2ggKGEuX3R5cGUpIHtcblx0XHRjYXNlIFwiVW5yZXNvbHZhYmxlXCI6XG5cdFx0XHRyZXR1cm4gZmFsc2U7IC8vIFVucmVzb2x2YWJsZSBpcyBuZXZlciBlcXVhbCB0byBhbnl0aGluZyBldmVuIGl0c2VsZlxuXHRcdGNhc2UgXCJDb25zdGFudFwiOlxuXHRcdGNhc2UgXCJFbWJlZGRlZEJpbmRpbmdcIjpcblx0XHRjYXNlIFwiRW1iZWRkZWRFeHByZXNzaW9uQmluZGluZ1wiOlxuXHRcdFx0cmV0dXJuIGEudmFsdWUgPT09IChiIGFzIENvbnN0YW50RXhwcmVzc2lvbjxUPikudmFsdWU7XG5cblx0XHRjYXNlIFwiTm90XCI6XG5cdFx0XHRyZXR1cm4gX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChhLm9wZXJhbmQsIChiIGFzIE5vdEV4cHJlc3Npb24pLm9wZXJhbmQpO1xuXHRcdGNhc2UgXCJUcnV0aHlcIjpcblx0XHRcdHJldHVybiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGEub3BlcmFuZCwgKGIgYXMgVHJ1dGh5RXhwcmVzc2lvbikub3BlcmFuZCk7XG5cdFx0Y2FzZSBcIlNldFwiOlxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0YS5vcGVyYXRvciA9PT0gKGIgYXMgU2V0RXhwcmVzc2lvbikub3BlcmF0b3IgJiZcblx0XHRcdFx0YS5vcGVyYW5kcy5sZW5ndGggPT09IChiIGFzIFNldEV4cHJlc3Npb24pLm9wZXJhbmRzLmxlbmd0aCAmJlxuXHRcdFx0XHRhLm9wZXJhbmRzLmV2ZXJ5KChleHByZXNzaW9uKSA9PlxuXHRcdFx0XHRcdChiIGFzIFNldEV4cHJlc3Npb24pLm9wZXJhbmRzLnNvbWUoKG90aGVyRXhwcmVzc2lvbikgPT4gX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChleHByZXNzaW9uLCBvdGhlckV4cHJlc3Npb24pKVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXG5cdFx0Y2FzZSBcIklmRWxzZVwiOlxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0X2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChhLmNvbmRpdGlvbiwgKGIgYXMgSWZFbHNlRXhwcmVzc2lvbjxUPikuY29uZGl0aW9uKSAmJlxuXHRcdFx0XHRfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGEub25UcnVlLCAoYiBhcyBJZkVsc2VFeHByZXNzaW9uPFQ+KS5vblRydWUpICYmXG5cdFx0XHRcdF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoYS5vbkZhbHNlLCAoYiBhcyBJZkVsc2VFeHByZXNzaW9uPFQ+KS5vbkZhbHNlKVxuXHRcdFx0KTtcblxuXHRcdGNhc2UgXCJDb21wYXJpc29uXCI6XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRhLm9wZXJhdG9yID09PSAoYiBhcyBDb21wYXJpc29uRXhwcmVzc2lvbikub3BlcmF0b3IgJiZcblx0XHRcdFx0X2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChhLm9wZXJhbmQxLCAoYiBhcyBDb21wYXJpc29uRXhwcmVzc2lvbikub3BlcmFuZDEpICYmXG5cdFx0XHRcdF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoYS5vcGVyYW5kMiwgKGIgYXMgQ29tcGFyaXNvbkV4cHJlc3Npb24pLm9wZXJhbmQyKVxuXHRcdFx0KTtcblxuXHRcdGNhc2UgXCJDb25jYXRcIjpcblx0XHRcdGNvbnN0IGFFeHByZXNzaW9ucyA9IGEuZXhwcmVzc2lvbnM7XG5cdFx0XHRjb25zdCBiRXhwcmVzc2lvbnMgPSAoYiBhcyBDb25jYXRFeHByZXNzaW9uKS5leHByZXNzaW9ucztcblx0XHRcdGlmIChhRXhwcmVzc2lvbnMubGVuZ3RoICE9PSBiRXhwcmVzc2lvbnMubGVuZ3RoKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBhRXhwcmVzc2lvbnMuZXZlcnkoKGV4cHJlc3Npb24sIGluZGV4KSA9PiB7XG5cdFx0XHRcdHJldHVybiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGV4cHJlc3Npb24sIGJFeHByZXNzaW9uc1tpbmRleF0pO1xuXHRcdFx0fSk7XG5cblx0XHRjYXNlIFwiTGVuZ3RoXCI6XG5cdFx0XHRyZXR1cm4gX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChhLnBhdGhJbk1vZGVsLCAoYiBhcyBMZW5ndGhFeHByZXNzaW9uKS5wYXRoSW5Nb2RlbCk7XG5cblx0XHRjYXNlIFwiUGF0aEluTW9kZWxcIjpcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGEubW9kZWxOYW1lID09PSAoYiBhcyBQYXRoSW5Nb2RlbEV4cHJlc3Npb248VD4pLm1vZGVsTmFtZSAmJlxuXHRcdFx0XHRhLnBhdGggPT09IChiIGFzIFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUPikucGF0aCAmJlxuXHRcdFx0XHRhLnRhcmdldEVudGl0eVNldCA9PT0gKGIgYXMgUGF0aEluTW9kZWxFeHByZXNzaW9uPFQ+KS50YXJnZXRFbnRpdHlTZXRcblx0XHRcdCk7XG5cblx0XHRjYXNlIFwiRm9ybWF0dGVyXCI6XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRhLmZuID09PSAoYiBhcyBGb3JtYXR0ZXJFeHByZXNzaW9uPFQ+KS5mbiAmJlxuXHRcdFx0XHRhLnBhcmFtZXRlcnMubGVuZ3RoID09PSAoYiBhcyBGb3JtYXR0ZXJFeHByZXNzaW9uPFQ+KS5wYXJhbWV0ZXJzLmxlbmd0aCAmJlxuXHRcdFx0XHRhLnBhcmFtZXRlcnMuZXZlcnkoKHZhbHVlLCBpbmRleCkgPT4gX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbCgoYiBhcyBGb3JtYXR0ZXJFeHByZXNzaW9uPFQ+KS5wYXJhbWV0ZXJzW2luZGV4XSwgdmFsdWUpKVxuXHRcdFx0KTtcblx0XHRjYXNlIFwiQ29tcGxleFR5cGVcIjpcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGEudHlwZSA9PT0gKGIgYXMgQ29tcGxleFR5cGVFeHByZXNzaW9uPFQ+KS50eXBlICYmXG5cdFx0XHRcdGEuYmluZGluZ1BhcmFtZXRlcnMubGVuZ3RoID09PSAoYiBhcyBDb21wbGV4VHlwZUV4cHJlc3Npb248VD4pLmJpbmRpbmdQYXJhbWV0ZXJzLmxlbmd0aCAmJlxuXHRcdFx0XHRhLmJpbmRpbmdQYXJhbWV0ZXJzLmV2ZXJ5KCh2YWx1ZSwgaW5kZXgpID0+XG5cdFx0XHRcdFx0X2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbCgoYiBhcyBDb21wbGV4VHlwZUV4cHJlc3Npb248VD4pLmJpbmRpbmdQYXJhbWV0ZXJzW2luZGV4XSwgdmFsdWUpXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0Y2FzZSBcIkZ1bmN0aW9uXCI6XG5cdFx0XHRjb25zdCBvdGhlckZ1bmN0aW9uID0gYiBhcyBGdW5jdGlvbkV4cHJlc3Npb248VD47XG5cdFx0XHRpZiAoYS5vYmogPT09IHVuZGVmaW5lZCB8fCBvdGhlckZ1bmN0aW9uLm9iaiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybiBhLm9iaiA9PT0gb3RoZXJGdW5jdGlvbjtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0YS5mbiA9PT0gb3RoZXJGdW5jdGlvbi5mbiAmJlxuXHRcdFx0XHRfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGEub2JqLCBvdGhlckZ1bmN0aW9uLm9iaikgJiZcblx0XHRcdFx0YS5wYXJhbWV0ZXJzLmxlbmd0aCA9PT0gb3RoZXJGdW5jdGlvbi5wYXJhbWV0ZXJzLmxlbmd0aCAmJlxuXHRcdFx0XHRhLnBhcmFtZXRlcnMuZXZlcnkoKHZhbHVlLCBpbmRleCkgPT4gX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChvdGhlckZ1bmN0aW9uLnBhcmFtZXRlcnNbaW5kZXhdLCB2YWx1ZSkpXG5cdFx0XHQpO1xuXG5cdFx0Y2FzZSBcIlJlZlwiOlxuXHRcdFx0cmV0dXJuIGEucmVmID09PSAoYiBhcyBSZWZlcmVuY2VFeHByZXNzaW9uKS5yZWY7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgbmVzdGVkIFNldEV4cHJlc3Npb24gYnkgaW5saW5pbmcgb3BlcmFuZHMgb2YgdHlwZSBTZXRFeHByZXNzaW9uIHdpdGggdGhlIHNhbWUgb3BlcmF0b3IuXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgZXhwcmVzc2lvbiB0byBmbGF0dGVuXG4gKiBAcmV0dXJucyBBIG5ldyBTZXRFeHByZXNzaW9uIHdpdGggdGhlIHNhbWUgb3BlcmF0b3JcbiAqL1xuZnVuY3Rpb24gZmxhdHRlblNldEV4cHJlc3Npb24oZXhwcmVzc2lvbjogU2V0RXhwcmVzc2lvbik6IFNldEV4cHJlc3Npb24ge1xuXHRyZXR1cm4gZXhwcmVzc2lvbi5vcGVyYW5kcy5yZWR1Y2UoXG5cdFx0KHJlc3VsdDogU2V0RXhwcmVzc2lvbiwgb3BlcmFuZCkgPT4ge1xuXHRcdFx0Y29uc3QgY2FuZGlkYXRlc0ZvckZsYXR0ZW5pbmcgPVxuXHRcdFx0XHRvcGVyYW5kLl90eXBlID09PSBcIlNldFwiICYmIG9wZXJhbmQub3BlcmF0b3IgPT09IGV4cHJlc3Npb24ub3BlcmF0b3IgPyBvcGVyYW5kLm9wZXJhbmRzIDogW29wZXJhbmRdO1xuXHRcdFx0Y2FuZGlkYXRlc0ZvckZsYXR0ZW5pbmcuZm9yRWFjaCgoY2FuZGlkYXRlKSA9PiB7XG5cdFx0XHRcdGlmIChyZXN1bHQub3BlcmFuZHMuZXZlcnkoKGUpID0+ICFfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGUsIGNhbmRpZGF0ZSkpKSB7XG5cdFx0XHRcdFx0cmVzdWx0Lm9wZXJhbmRzLnB1c2goY2FuZGlkYXRlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0sXG5cdFx0eyBfdHlwZTogXCJTZXRcIiwgb3BlcmF0b3I6IGV4cHJlc3Npb24ub3BlcmF0b3IsIG9wZXJhbmRzOiBbXSB9XG5cdCk7XG59XG5cbi8qKlxuICogRGV0ZWN0cyB3aGV0aGVyIGFuIGFycmF5IG9mIGJvb2xlYW4gZXhwcmVzc2lvbnMgY29udGFpbnMgYW4gZXhwcmVzc2lvbiBhbmQgaXRzIG5lZ2F0aW9uLlxuICogQHBhcmFtIGV4cHJlc3Npb25zIEFycmF5IG9mIGV4cHJlc3Npb25zXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHNldCBvZiBleHByZXNzaW9ucyBjb250YWlucyBhbiBleHByZXNzaW9uIGFuZCBpdHMgbmVnYXRpb25cbiAqL1xuZnVuY3Rpb24gaGFzT3Bwb3NpdGVFeHByZXNzaW9ucyhleHByZXNzaW9uczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10pOiBib29sZWFuIHtcblx0Y29uc3QgbmVnYXRlZEV4cHJlc3Npb25zID0gZXhwcmVzc2lvbnMubWFwKG5vdCk7XG5cdHJldHVybiBleHByZXNzaW9ucy5zb21lKChleHByZXNzaW9uLCBpbmRleCkgPT4ge1xuXHRcdGZvciAobGV0IGkgPSBpbmRleCArIDE7IGkgPCBuZWdhdGVkRXhwcmVzc2lvbnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmIChfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGV4cHJlc3Npb24sIG5lZ2F0ZWRFeHByZXNzaW9uc1tpXSkpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG59XG5cbi8qKlxuICogTG9naWNhbCBgYW5kYCBleHByZXNzaW9uLlxuICpcbiAqIFRoZSBleHByZXNzaW9uIGlzIHNpbXBsaWZpZWQgdG8gZmFsc2UgaWYgdGhpcyBjYW4gYmUgZGVjaWRlZCBzdGF0aWNhbGx5ICh0aGF0IGlzLCBpZiBvbmUgb3BlcmFuZCBpcyBhIGNvbnN0YW50XG4gKiBmYWxzZSBvciBpZiB0aGUgZXhwcmVzc2lvbiBjb250YWlucyBhbiBvcGVyYW5kIGFuZCBpdHMgbmVnYXRpb24pLlxuICogQHBhcmFtIG9wZXJhbmRzIEV4cHJlc3Npb25zIHRvIGNvbm5lY3QgYnkgYGFuZGBcbiAqIEByZXR1cm5zIEV4cHJlc3Npb24gZXZhbHVhdGluZyB0byBib29sZWFuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbmQoLi4ub3BlcmFuZHM6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPltdKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgZXhwcmVzc2lvbnMgPSBmbGF0dGVuU2V0RXhwcmVzc2lvbih7XG5cdFx0X3R5cGU6IFwiU2V0XCIsXG5cdFx0b3BlcmF0b3I6IFwiJiZcIixcblx0XHRvcGVyYW5kczogb3BlcmFuZHMubWFwKHdyYXBQcmltaXRpdmUpXG5cdH0pLm9wZXJhbmRzO1xuXG5cdGlmIChoYXNVbnJlc29sdmFibGVFeHByZXNzaW9uKC4uLmV4cHJlc3Npb25zKSkge1xuXHRcdHJldHVybiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xuXHR9XG5cdGxldCBpc1N0YXRpY0ZhbHNlID0gZmFsc2U7XG5cdGNvbnN0IG5vblRyaXZpYWxFeHByZXNzaW9uID0gZXhwcmVzc2lvbnMuZmlsdGVyKChleHByZXNzaW9uKSA9PiB7XG5cdFx0aWYgKGlzRmFsc2UoZXhwcmVzc2lvbikpIHtcblx0XHRcdGlzU3RhdGljRmFsc2UgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gIWlzQ29uc3RhbnQoZXhwcmVzc2lvbik7XG5cdH0pO1xuXHRpZiAoaXNTdGF0aWNGYWxzZSkge1xuXHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdH0gZWxzZSBpZiAobm9uVHJpdmlhbEV4cHJlc3Npb24ubGVuZ3RoID09PSAwKSB7XG5cdFx0Ly8gUmVzb2x2ZSB0aGUgY29uc3RhbnQgdGhlblxuXHRcdGNvbnN0IGlzVmFsaWQgPSBleHByZXNzaW9ucy5yZWR1Y2UoKHJlc3VsdCwgZXhwcmVzc2lvbikgPT4gcmVzdWx0ICYmIGlzVHJ1ZShleHByZXNzaW9uKSwgdHJ1ZSk7XG5cdFx0cmV0dXJuIGNvbnN0YW50KGlzVmFsaWQpO1xuXHR9IGVsc2UgaWYgKG5vblRyaXZpYWxFeHByZXNzaW9uLmxlbmd0aCA9PT0gMSkge1xuXHRcdHJldHVybiBub25Ucml2aWFsRXhwcmVzc2lvblswXTtcblx0fSBlbHNlIGlmIChoYXNPcHBvc2l0ZUV4cHJlc3Npb25zKG5vblRyaXZpYWxFeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdF90eXBlOiBcIlNldFwiLFxuXHRcdFx0b3BlcmF0b3I6IFwiJiZcIixcblx0XHRcdG9wZXJhbmRzOiBub25Ucml2aWFsRXhwcmVzc2lvblxuXHRcdH07XG5cdH1cbn1cblxuLyoqXG4gKiBMb2dpY2FsIGBvcmAgZXhwcmVzc2lvbi5cbiAqXG4gKiBUaGUgZXhwcmVzc2lvbiBpcyBzaW1wbGlmaWVkIHRvIHRydWUgaWYgdGhpcyBjYW4gYmUgZGVjaWRlZCBzdGF0aWNhbGx5ICh0aGF0IGlzLCBpZiBvbmUgb3BlcmFuZCBpcyBhIGNvbnN0YW50XG4gKiB0cnVlIG9yIGlmIHRoZSBleHByZXNzaW9uIGNvbnRhaW5zIGFuIG9wZXJhbmQgYW5kIGl0cyBuZWdhdGlvbikuXG4gKiBAcGFyYW0gb3BlcmFuZHMgRXhwcmVzc2lvbnMgdG8gY29ubmVjdCBieSBgb3JgXG4gKiBAcmV0dXJucyBFeHByZXNzaW9uIGV2YWx1YXRpbmcgdG8gYm9vbGVhblxuICovXG5leHBvcnQgZnVuY3Rpb24gb3IoLi4ub3BlcmFuZHM6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPltdKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgZXhwcmVzc2lvbnMgPSBmbGF0dGVuU2V0RXhwcmVzc2lvbih7XG5cdFx0X3R5cGU6IFwiU2V0XCIsXG5cdFx0b3BlcmF0b3I6IFwifHxcIixcblx0XHRvcGVyYW5kczogb3BlcmFuZHMubWFwKHdyYXBQcmltaXRpdmUpXG5cdH0pLm9wZXJhbmRzO1xuXHRpZiAoaGFzVW5yZXNvbHZhYmxlRXhwcmVzc2lvbiguLi5leHByZXNzaW9ucykpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjtcblx0fVxuXHRsZXQgaXNTdGF0aWNUcnVlID0gZmFsc2U7XG5cdGNvbnN0IG5vblRyaXZpYWxFeHByZXNzaW9uID0gZXhwcmVzc2lvbnMuZmlsdGVyKChleHByZXNzaW9uKSA9PiB7XG5cdFx0aWYgKGlzVHJ1ZShleHByZXNzaW9uKSkge1xuXHRcdFx0aXNTdGF0aWNUcnVlID0gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuICFpc0NvbnN0YW50KGV4cHJlc3Npb24pIHx8IGV4cHJlc3Npb24udmFsdWU7XG5cdH0pO1xuXHRpZiAoaXNTdGF0aWNUcnVlKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KHRydWUpO1xuXHR9IGVsc2UgaWYgKG5vblRyaXZpYWxFeHByZXNzaW9uLmxlbmd0aCA9PT0gMCkge1xuXHRcdC8vIFJlc29sdmUgdGhlIGNvbnN0YW50IHRoZW5cblx0XHRjb25zdCBpc1ZhbGlkID0gZXhwcmVzc2lvbnMucmVkdWNlKChyZXN1bHQsIGV4cHJlc3Npb24pID0+IHJlc3VsdCAmJiBpc1RydWUoZXhwcmVzc2lvbiksIHRydWUpO1xuXHRcdHJldHVybiBjb25zdGFudChpc1ZhbGlkKTtcblx0fSBlbHNlIGlmIChub25Ucml2aWFsRXhwcmVzc2lvbi5sZW5ndGggPT09IDEpIHtcblx0XHRyZXR1cm4gbm9uVHJpdmlhbEV4cHJlc3Npb25bMF07XG5cdH0gZWxzZSBpZiAoaGFzT3Bwb3NpdGVFeHByZXNzaW9ucyhub25Ucml2aWFsRXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdF90eXBlOiBcIlNldFwiLFxuXHRcdFx0b3BlcmF0b3I6IFwifHxcIixcblx0XHRcdG9wZXJhbmRzOiBub25Ucml2aWFsRXhwcmVzc2lvblxuXHRcdH07XG5cdH1cbn1cblxuLyoqXG4gKiBMb2dpY2FsIGBub3RgIG9wZXJhdG9yLlxuICogQHBhcmFtIG9wZXJhbmQgVGhlIGV4cHJlc3Npb24gdG8gcmV2ZXJzZVxuICogQHJldHVybnMgVGhlIHJlc3VsdGluZyBleHByZXNzaW9uIHRoYXQgZXZhbHVhdGVzIHRvIGJvb2xlYW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vdChvcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8Ym9vbGVhbj4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRvcGVyYW5kID0gd3JhcFByaW1pdGl2ZShvcGVyYW5kKTtcblx0aWYgKGhhc1VucmVzb2x2YWJsZUV4cHJlc3Npb24ob3BlcmFuZCkpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjtcblx0fSBlbHNlIGlmIChpc0NvbnN0YW50KG9wZXJhbmQpKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KCFvcGVyYW5kLnZhbHVlKTtcblx0fSBlbHNlIGlmIChcblx0XHR0eXBlb2Ygb3BlcmFuZCA9PT0gXCJvYmplY3RcIiAmJlxuXHRcdG9wZXJhbmQuX3R5cGUgPT09IFwiU2V0XCIgJiZcblx0XHRvcGVyYW5kLm9wZXJhdG9yID09PSBcInx8XCIgJiZcblx0XHRvcGVyYW5kLm9wZXJhbmRzLmV2ZXJ5KChleHByZXNzaW9uKSA9PiBpc0NvbnN0YW50KGV4cHJlc3Npb24pIHx8IGlzQ29tcGFyaXNvbihleHByZXNzaW9uKSlcblx0KSB7XG5cdFx0cmV0dXJuIGFuZCguLi5vcGVyYW5kLm9wZXJhbmRzLm1hcCgoZXhwcmVzc2lvbikgPT4gbm90KGV4cHJlc3Npb24pKSk7XG5cdH0gZWxzZSBpZiAoXG5cdFx0dHlwZW9mIG9wZXJhbmQgPT09IFwib2JqZWN0XCIgJiZcblx0XHRvcGVyYW5kLl90eXBlID09PSBcIlNldFwiICYmXG5cdFx0b3BlcmFuZC5vcGVyYXRvciA9PT0gXCImJlwiICYmXG5cdFx0b3BlcmFuZC5vcGVyYW5kcy5ldmVyeSgoZXhwcmVzc2lvbikgPT4gaXNDb25zdGFudChleHByZXNzaW9uKSB8fCBpc0NvbXBhcmlzb24oZXhwcmVzc2lvbikpXG5cdCkge1xuXHRcdHJldHVybiBvciguLi5vcGVyYW5kLm9wZXJhbmRzLm1hcCgoZXhwcmVzc2lvbikgPT4gbm90KGV4cHJlc3Npb24pKSk7XG5cdH0gZWxzZSBpZiAoaXNDb21wYXJpc29uKG9wZXJhbmQpKSB7XG5cdFx0Ly8gQ3JlYXRlIHRoZSByZXZlcnNlIGNvbXBhcmlzb25cblx0XHRzd2l0Y2ggKG9wZXJhbmQub3BlcmF0b3IpIHtcblx0XHRcdGNhc2UgXCIhPT1cIjpcblx0XHRcdFx0cmV0dXJuIHsgLi4ub3BlcmFuZCwgb3BlcmF0b3I6IFwiPT09XCIgfTtcblx0XHRcdGNhc2UgXCI8XCI6XG5cdFx0XHRcdHJldHVybiB7IC4uLm9wZXJhbmQsIG9wZXJhdG9yOiBcIj49XCIgfTtcblx0XHRcdGNhc2UgXCI8PVwiOlxuXHRcdFx0XHRyZXR1cm4geyAuLi5vcGVyYW5kLCBvcGVyYXRvcjogXCI+XCIgfTtcblx0XHRcdGNhc2UgXCI9PT1cIjpcblx0XHRcdFx0cmV0dXJuIHsgLi4ub3BlcmFuZCwgb3BlcmF0b3I6IFwiIT09XCIgfTtcblx0XHRcdGNhc2UgXCI+XCI6XG5cdFx0XHRcdHJldHVybiB7IC4uLm9wZXJhbmQsIG9wZXJhdG9yOiBcIjw9XCIgfTtcblx0XHRcdGNhc2UgXCI+PVwiOlxuXHRcdFx0XHRyZXR1cm4geyAuLi5vcGVyYW5kLCBvcGVyYXRvcjogXCI8XCIgfTtcblx0XHR9XG5cdH0gZWxzZSBpZiAob3BlcmFuZC5fdHlwZSA9PT0gXCJOb3RcIikge1xuXHRcdHJldHVybiBvcGVyYW5kLm9wZXJhbmQ7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdF90eXBlOiBcIk5vdFwiLFxuXHRcdG9wZXJhbmQ6IG9wZXJhbmRcblx0fTtcbn1cblxuLyoqXG4gKiBFdmFsdWF0ZXMgd2hldGhlciBhIGJpbmRpbmcgZXhwcmVzc2lvbiBpcyBlcXVhbCB0byB0cnVlIHdpdGggYSBsb29zZSBlcXVhbGl0eS5cbiAqIEBwYXJhbSBvcGVyYW5kIFRoZSBleHByZXNzaW9uIHRvIGNoZWNrXG4gKiBAcmV0dXJucyBUaGUgcmVzdWx0aW5nIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgdG8gYm9vbGVhblxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNUcnV0aHkob3BlcmFuZDogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRpZiAoaXNDb25zdGFudChvcGVyYW5kKSkge1xuXHRcdHJldHVybiBjb25zdGFudCghIW9wZXJhbmQudmFsdWUpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB7XG5cdFx0XHRfdHlwZTogXCJUcnV0aHlcIixcblx0XHRcdG9wZXJhbmQ6IG9wZXJhbmRcblx0XHR9O1xuXHR9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGJpbmRpbmcgZXhwcmVzc2lvbiB0aGF0IHdpbGwgYmUgZXZhbHVhdGVkIGJ5IHRoZSBjb3JyZXNwb25kaW5nIG1vZGVsLlxuICogQHBhcmFtIHBhdGhcbiAqIEBwYXJhbSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB2aXNpdGVkTmF2aWdhdGlvblBhdGhzXG4gKiBAcGFyYW0gcGF0aFZpc2l0b3JcbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gcmVwcmVzZW50YXRpbmcgdGhhdCBwYXRoIGluIHRoZSBtb2RlbFxuICogQGRlcHJlY2F0ZWQgdXNlIHBhdGhJbk1vZGVsIGluc3RlYWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJpbmRpbmdFeHByZXNzaW9uPFRhcmdldFR5cGUgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0cGF0aDogc3RyaW5nLFxuXHRtb2RlbE5hbWU/OiBzdHJpbmcsXG5cdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdID0gW10sXG5cdHBhdGhWaXNpdG9yPzogRnVuY3Rpb25cbik6IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUYXJnZXRUeXBlPiB8IFVucmVzb2x2YWJsZVBhdGhFeHByZXNzaW9uIHtcblx0cmV0dXJuIHBhdGhJbk1vZGVsKHBhdGgsIG1vZGVsTmFtZSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBiaW5kaW5nIGV4cHJlc3Npb24gdGhhdCB3aWxsIGJlIGV2YWx1YXRlZCBieSB0aGUgY29ycmVzcG9uZGluZyBtb2RlbC5cbiAqIEB0ZW1wbGF0ZSBUYXJnZXRUeXBlXG4gKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCBvbiB0aGUgbW9kZWxcbiAqIEBwYXJhbSBbbW9kZWxOYW1lXSBUaGUgbmFtZSBvZiB0aGUgbW9kZWxcbiAqIEBwYXJhbSBbdmlzaXRlZE5hdmlnYXRpb25QYXRoc10gVGhlIHBhdGhzIGZyb20gdGhlIHJvb3QgZW50aXR5U2V0XG4gKiBAcGFyYW0gW3BhdGhWaXNpdG9yXSBBIGZ1bmN0aW9uIHRvIG1vZGlmeSB0aGUgcmVzdWx0aW5nIHBhdGhcbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gcmVwcmVzZW50YXRpbmcgdGhhdCBwYXRoIGluIHRoZSBtb2RlbFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGF0aEluTW9kZWwoXG5cdHBhdGg6IHVuZGVmaW5lZCxcblx0bW9kZWxOYW1lPzogc3RyaW5nLFxuXHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzPzogc3RyaW5nW10sXG5cdHBhdGhWaXNpdG9yPzogRnVuY3Rpb25cbik6IFVucmVzb2x2YWJsZVBhdGhFeHByZXNzaW9uO1xuZXhwb3J0IGZ1bmN0aW9uIHBhdGhJbk1vZGVsPFRhcmdldFR5cGUgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0cGF0aDogc3RyaW5nLFxuXHRtb2RlbE5hbWU/OiBzdHJpbmcsXG5cdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHM/OiBzdHJpbmdbXSxcblx0cGF0aFZpc2l0b3I/OiB1bmRlZmluZWRcbik6IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUYXJnZXRUeXBlPjtcbmV4cG9ydCBmdW5jdGlvbiBwYXRoSW5Nb2RlbDxUYXJnZXRUeXBlIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdHBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0bW9kZWxOYW1lPzogc3RyaW5nLFxuXHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzPzogc3RyaW5nW10sXG5cdHBhdGhWaXNpdG9yPzogRnVuY3Rpb25cbik6IFVucmVzb2x2YWJsZVBhdGhFeHByZXNzaW9uIHwgUGF0aEluTW9kZWxFeHByZXNzaW9uPFRhcmdldFR5cGU+O1xuZXhwb3J0IGZ1bmN0aW9uIHBhdGhJbk1vZGVsPFRhcmdldFR5cGUgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0cGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRtb2RlbE5hbWU/OiBzdHJpbmcsXG5cdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdID0gW10sXG5cdHBhdGhWaXNpdG9yPzogRnVuY3Rpb25cbik6IFVucmVzb2x2YWJsZVBhdGhFeHByZXNzaW9uIHwgUGF0aEluTW9kZWxFeHByZXNzaW9uPFRhcmdldFR5cGU+IHtcblx0aWYgKHBhdGggPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xuXHR9XG5cdGxldCB0YXJnZXRQYXRoO1xuXHRpZiAocGF0aFZpc2l0b3IpIHtcblx0XHR0YXJnZXRQYXRoID0gcGF0aFZpc2l0b3IocGF0aCk7XG5cdFx0aWYgKHRhcmdldFBhdGggPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IGxvY2FsUGF0aCA9IHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMuY29uY2F0KCk7XG5cdFx0bG9jYWxQYXRoLnB1c2gocGF0aCk7XG5cdFx0dGFyZ2V0UGF0aCA9IGxvY2FsUGF0aC5qb2luKFwiL1wiKTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdF90eXBlOiBcIlBhdGhJbk1vZGVsXCIsXG5cdFx0bW9kZWxOYW1lOiBtb2RlbE5hbWUsXG5cdFx0cGF0aDogdGFyZ2V0UGF0aFxuXHR9O1xufVxuXG50eXBlIFBsYWluRXhwcmVzc2lvbk9iamVjdCA9IHsgW2luZGV4OiBzdHJpbmddOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4gfTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY29uc3RhbnQgZXhwcmVzc2lvbiBiYXNlZCBvbiBhIHByaW1pdGl2ZSB2YWx1ZS5cbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0gdmFsdWUgVGhlIGNvbnN0YW50IHRvIHdyYXAgaW4gYW4gZXhwcmVzc2lvblxuICogQHJldHVybnMgVGhlIGNvbnN0YW50IGV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0YW50PFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPih2YWx1ZTogVCk6IENvbnN0YW50RXhwcmVzc2lvbjxUPiB7XG5cdGxldCBjb25zdGFudFZhbHVlOiBUO1xuXG5cdGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0Y29uc3RhbnRWYWx1ZSA9IHZhbHVlLm1hcCh3cmFwUHJpbWl0aXZlKSBhcyBUO1xuXHRcdH0gZWxzZSBpZiAoaXNQcmltaXRpdmVPYmplY3QodmFsdWUpKSB7XG5cdFx0XHRjb25zdGFudFZhbHVlID0gdmFsdWUudmFsdWVPZigpIGFzIFQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0YW50VmFsdWUgPSBPYmplY3QuZW50cmllcyh2YWx1ZSkucmVkdWNlKChwbGFpbkV4cHJlc3Npb24sIFtrZXksIHZhbF0pID0+IHtcblx0XHRcdFx0Y29uc3Qgd3JhcHBlZFZhbHVlID0gd3JhcFByaW1pdGl2ZSh2YWwpO1xuXHRcdFx0XHRpZiAod3JhcHBlZFZhbHVlLl90eXBlICE9PSBcIkNvbnN0YW50XCIgfHwgd3JhcHBlZFZhbHVlLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRwbGFpbkV4cHJlc3Npb25ba2V5XSA9IHdyYXBwZWRWYWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gcGxhaW5FeHByZXNzaW9uO1xuXHRcdFx0fSwge30gYXMgUGxhaW5FeHByZXNzaW9uT2JqZWN0KSBhcyBUO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRjb25zdGFudFZhbHVlID0gdmFsdWU7XG5cdH1cblxuXHRyZXR1cm4geyBfdHlwZTogXCJDb25zdGFudFwiLCB2YWx1ZTogY29uc3RhbnRWYWx1ZSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUJpbmRpbmdTdHJpbmc8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHR2YWx1ZTogc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlcixcblx0dGFyZ2V0VHlwZT86IHN0cmluZ1xuKTogQ29uc3RhbnRFeHByZXNzaW9uPFQ+IHwgUGF0aEluTW9kZWxFeHByZXNzaW9uPFQ+IHwgRW1iZWRkZWRVSTVCaW5kaW5nRXhwcmVzc2lvbjxUPiB8IEVtYmVkZGVkVUk1RXhwcmVzc2lvbkJpbmRpbmdFeHByZXNzaW9uPFQ+IHtcblx0aWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIHZhbHVlLnN0YXJ0c1dpdGgoXCJ7XCIpKSB7XG5cdFx0Y29uc3QgcGF0aEluTW9kZWxSZWdleCA9IC9eeyguKik+KC4rKX0kLzsgLy8gTWF0Y2hlcyBtb2RlbCBwYXRocyBsaWtlIFwibW9kZWw+cGF0aFwiIG9yIFwiPnBhdGhcIiAoZGVmYXVsdCBtb2RlbClcblx0XHRjb25zdCBwYXRoSW5Nb2RlbFJlZ2V4TWF0Y2ggPSBwYXRoSW5Nb2RlbFJlZ2V4LmV4ZWModmFsdWUpO1xuXG5cdFx0aWYgKHZhbHVlLnN0YXJ0c1dpdGgoXCJ7PVwiKSkge1xuXHRcdFx0Ly8gRXhwcmVzc2lvbiBiaW5kaW5nLCB3ZSBjYW4ganVzdCByZW1vdmUgdGhlIG91dGVyIGJpbmRpbmcgdGhpbmdzXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRfdHlwZTogXCJFbWJlZGRlZEV4cHJlc3Npb25CaW5kaW5nXCIsXG5cdFx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdFx0fTtcblx0XHR9IGVsc2UgaWYgKHBhdGhJbk1vZGVsUmVnZXhNYXRjaCkge1xuXHRcdFx0cmV0dXJuIHBhdGhJbk1vZGVsKHBhdGhJbk1vZGVsUmVnZXhNYXRjaFsyXSB8fCBcIlwiLCBwYXRoSW5Nb2RlbFJlZ2V4TWF0Y2hbMV0gfHwgdW5kZWZpbmVkKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0X3R5cGU6IFwiRW1iZWRkZWRCaW5kaW5nXCIsXG5cdFx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdFx0fTtcblx0XHR9XG5cdH0gZWxzZSBpZiAodGFyZ2V0VHlwZSA9PT0gXCJib29sZWFuXCIgJiYgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmICh2YWx1ZSA9PT0gXCJ0cnVlXCIgfHwgdmFsdWUgPT09IFwiZmFsc2VcIikpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQodmFsdWUgPT09IFwidHJ1ZVwiKSBhcyBDb25zdGFudEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAodGFyZ2V0VHlwZSA9PT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgKCFpc05hTihOdW1iZXIodmFsdWUpKSB8fCB2YWx1ZSA9PT0gXCJOYU5cIikpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoTnVtYmVyKHZhbHVlKSkgYXMgQ29uc3RhbnRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjb25zdGFudCh2YWx1ZSkgYXMgQ29uc3RhbnRFeHByZXNzaW9uPFQ+O1xuXHR9XG59XG5cbi8qKlxuICogQSBuYW1lZCByZWZlcmVuY2UuXG4gKiBAc2VlIGZuXG4gKiBAcGFyYW0gcmVmZXJlbmNlIFJlZmVyZW5jZVxuICogQHJldHVybnMgVGhlIG9iamVjdCByZWZlcmVuY2UgYmluZGluZyBwYXJ0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWYocmVmZXJlbmNlOiBzdHJpbmcgfCBudWxsKTogUmVmZXJlbmNlRXhwcmVzc2lvbiB7XG5cdHJldHVybiB7IF90eXBlOiBcIlJlZlwiLCByZWY6IHJlZmVyZW5jZSB9O1xufVxuXG4vKipcbiAqIFdyYXAgYSBzdGF0ZSBvYmplY3QgaW50byBhIHBhdGggaW4gbW9kZWwgZXhwcmVzc2lvbi5cbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0gc3RhdGVPYmplY3RQcm9wIFRoZSBvYmplY3QgdG8gZXZhbHVhdGUsIGlmIGl0J3MgYSBjb25zdGFudCBpdCB3aWxsIGJlIHdyYXBwZWQgaW4gYSBjb25zdGFudCBleHByZXNzaW9uLCBpZiBpdCdzIGEgc3RhdGUgcHJvcGVydHkgaXQgd2lsbCBiZSBib3VuZFxuICogQHBhcmFtIGtleSBUaGUga2V5IG9mIHRoZSBzdGF0ZSBvYmplY3QgdG8gYmluZFxuICogQHJldHVybnMgVGhlIGNvcnJlY3QgYmluZGluZyB0b29sa2l0IGV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJpbmRTdGF0ZTxUIGV4dGVuZHMgb2JqZWN0LCBLIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdHN0YXRlT2JqZWN0UHJvcDogVCxcblx0a2V5OiBrZXlvZiBUXG4pOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248Sz4gfCBDb25zdGFudEV4cHJlc3Npb248Sz4ge1xuXHRpZiAodHlwZW9mIHN0YXRlT2JqZWN0UHJvcCA9PT0gXCJvYmplY3RcIiAmJiAoc3RhdGVPYmplY3RQcm9wIGFzIEJpbmRpbmdJbmZvSG9sZGVyPFQ+KS5fX2JpbmRpbmdJbmZvKSB7XG5cdFx0cmV0dXJuIHBhdGhJbk1vZGVsKFwiL1wiICsga2V5LnRvU3RyaW5nKCksIChzdGF0ZU9iamVjdFByb3AgYXMgQmluZGluZ0luZm9Ib2xkZXI8VD4pLl9fYmluZGluZ0luZm8ubW9kZWwpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjb25zdGFudChzdGF0ZU9iamVjdFByb3ApIGFzIHVua25vd24gYXMgQ29uc3RhbnRFeHByZXNzaW9uPEs+O1xuXHR9XG59XG4vKipcbiAqIFdyYXAgYSBwcmltaXRpdmUgaW50byBhIGNvbnN0YW50IGV4cHJlc3Npb24gaWYgaXQgaXMgbm90IGFscmVhZHkgYW4gZXhwcmVzc2lvbi5cbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0gc29tZXRoaW5nIFRoZSBvYmplY3QgdG8gd3JhcCBpbiBhIENvbnN0YW50IGV4cHJlc3Npb25cbiAqIEByZXR1cm5zIEVpdGhlciB0aGUgb3JpZ2luYWwgb2JqZWN0IG9yIHRoZSB3cmFwcGVkIG9uZSBkZXBlbmRpbmcgb24gdGhlIGNhc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdyYXBQcmltaXRpdmU8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KHNvbWV0aGluZzogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+KTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+IHtcblx0aWYgKGlzQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uKHNvbWV0aGluZykpIHtcblx0XHRyZXR1cm4gc29tZXRoaW5nIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fVxuXG5cdHJldHVybiBjb25zdGFudChzb21ldGhpbmcpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZXhwcmVzc2lvbiBvciB2YWx1ZSBwcm92aWRlZCBpcyBhIGJpbmRpbmcgdG9vbGluZyBleHByZXNzaW9uIG9yIG5vdC5cbiAqXG4gKiBFdmVyeSBvYmplY3QgaGF2aW5nIGEgcHJvcGVydHkgbmFtZWQgYF90eXBlYCBvZiBzb21lIHZhbHVlIGlzIGNvbnNpZGVyZWQgYW4gZXhwcmVzc2lvbiwgZXZlbiBpZiB0aGVyZSBpcyBhY3R1YWxseVxuICogbm8gc3VjaCBleHByZXNzaW9uIHR5cGUgc3VwcG9ydGVkLlxuICogQHBhcmFtIGV4cHJlc3Npb25cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgZXhwcmVzc2lvbiBpcyBhIGJpbmRpbmcgdG9vbGtpdCBleHByZXNzaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0JpbmRpbmdUb29sa2l0RXhwcmVzc2lvbihcblx0ZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+IHwgdW5rbm93blxuKTogZXhwcmVzc2lvbiBpcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4ge1xuXHRyZXR1cm4gKGV4cHJlc3Npb24gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+KT8uX3R5cGUgIT09IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGV4cHJlc3Npb24gb3IgdmFsdWUgcHJvdmlkZWQgaXMgY29uc3RhbnQgb3Igbm90LlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gIG1heWJlQ29uc3RhbnQgVGhlIGV4cHJlc3Npb24gb3IgcHJpbWl0aXZlIHZhbHVlIHRoYXQgaXMgdG8gYmUgY2hlY2tlZFxuICogQHJldHVybnMgYHRydWVgIGlmIGl0IGlzIGNvbnN0YW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnN0YW50PFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihtYXliZUNvbnN0YW50OiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4pOiBtYXliZUNvbnN0YW50IGlzIENvbnN0YW50RXhwcmVzc2lvbjxUPiB7XG5cdHJldHVybiB0eXBlb2YgbWF5YmVDb25zdGFudCAhPT0gXCJvYmplY3RcIiB8fCAobWF5YmVDb25zdGFudCBhcyBCYXNlRXhwcmVzc2lvbjxUPikuX3R5cGUgPT09IFwiQ29uc3RhbnRcIjtcbn1cblxuZnVuY3Rpb24gaXNUcnVlKGV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gaXNDb25zdGFudChleHByZXNzaW9uKSAmJiBleHByZXNzaW9uLnZhbHVlID09PSB0cnVlO1xufVxuXG5mdW5jdGlvbiBpc0ZhbHNlKGV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gaXNDb25zdGFudChleHByZXNzaW9uKSAmJiBleHByZXNzaW9uLnZhbHVlID09PSBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGV4cHJlc3Npb24gb3IgdmFsdWUgcHJvdmlkZWQgaXMgYSBwYXRoIGluIG1vZGVsIGV4cHJlc3Npb24gb3Igbm90LlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gIG1heWJlQmluZGluZyBUaGUgZXhwcmVzc2lvbiBvciBwcmltaXRpdmUgdmFsdWUgdGhhdCBpcyB0byBiZSBjaGVja2VkXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgaXQgaXMgYSBwYXRoIGluIG1vZGVsIGV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aEluTW9kZWxFeHByZXNzaW9uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0bWF5YmVCaW5kaW5nOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IG1heWJlQmluZGluZyBpcyBQYXRoSW5Nb2RlbEV4cHJlc3Npb248VD4ge1xuXHRyZXR1cm4gKG1heWJlQmluZGluZyBhcyBCYXNlRXhwcmVzc2lvbjxUPik/Ll90eXBlID09PSBcIlBhdGhJbk1vZGVsXCI7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBleHByZXNzaW9uIG9yIHZhbHVlIHByb3ZpZGVkIGlzIGEgY29tcGxleCB0eXBlIGV4cHJlc3Npb24uXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSAgbWF5YmVCaW5kaW5nIFRoZSBleHByZXNzaW9uIG9yIHByaW1pdGl2ZSB2YWx1ZSB0aGF0IGlzIHRvIGJlIGNoZWNrZWRcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBpcyBhIHBhdGggaW4gbW9kZWwgZXhwcmVzc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDb21wbGV4VHlwZUV4cHJlc3Npb248VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRtYXliZUJpbmRpbmc6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogbWF5YmVCaW5kaW5nIGlzIENvbXBsZXhUeXBlRXhwcmVzc2lvbjxUPiB7XG5cdHJldHVybiAobWF5YmVCaW5kaW5nIGFzIEJhc2VFeHByZXNzaW9uPFQ+KT8uX3R5cGUgPT09IFwiQ29tcGxleFR5cGVcIjtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGV4cHJlc3Npb24gb3IgdmFsdWUgcHJvdmlkZWQgaXMgYSBjb25jYXQgZXhwcmVzc2lvbiBvciBub3QuXG4gKiBAcGFyYW0gZXhwcmVzc2lvblxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBleHByZXNzaW9uIGlzIGEgQ29uY2F0RXhwcmVzc2lvblxuICovXG5mdW5jdGlvbiBpc0NvbmNhdEV4cHJlc3Npb24oZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+KTogZXhwcmVzc2lvbiBpcyBDb25jYXRFeHByZXNzaW9uIHtcblx0cmV0dXJuIChleHByZXNzaW9uIGFzIEJhc2VFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+KT8uX3R5cGUgPT09IFwiQ29uY2F0XCI7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBleHByZXNzaW9uIG9yIHZhbHVlIHByb3ZpZGVkIGlzIGEgSWZFbHNlIGV4cHJlc3Npb24gb3Igbm90LlxuICogQHBhcmFtIGV4cHJlc3Npb25cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgZXhwcmVzc2lvbiBpcyBhIElmRWxzZUV4cHJlc3Npb25cbiAqL1xuZnVuY3Rpb24gaXNJZkVsc2VFeHByZXNzaW9uKGV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPik6IGV4cHJlc3Npb24gaXMgQ29uY2F0RXhwcmVzc2lvbiB7XG5cdHJldHVybiAoZXhwcmVzc2lvbiBhcyBCYXNlRXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPik/Ll90eXBlID09PSBcIklmRWxzZVwiO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZXhwcmVzc2lvbiBwcm92aWRlZCBpcyBhIGNvbXBhcmlzb24gb3Igbm90LlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgZXhwcmVzc2lvblxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBleHByZXNzaW9uIGlzIGEgQ29tcGFyaXNvbkV4cHJlc3Npb25cbiAqL1xuZnVuY3Rpb24gaXNDb21wYXJpc29uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihleHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4pOiBleHByZXNzaW9uIGlzIENvbXBhcmlzb25FeHByZXNzaW9uIHtcblx0cmV0dXJuIGV4cHJlc3Npb24uX3R5cGUgPT09IFwiQ29tcGFyaXNvblwiO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBpbnB1dCBwYXJhbWV0ZXIgaXMgYSBjb25zdGFudCBleHByZXNzaW9uIG9mIHR5cGUgdW5kZWZpbmVkLlxuICogQHBhcmFtIGV4cHJlc3Npb24gVGhlIGlucHV0IGV4cHJlc3Npb24gb3Igb2JqZWN0IGluIGdlbmVyYWxcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgaW5wdXQgaXMgY29uc3RhbnQgd2hpY2ggaGFzIHVuZGVmaW5lZCBmb3IgdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVW5kZWZpbmVkRXhwcmVzc2lvbihleHByZXNzaW9uOiB1bmtub3duKTogZXhwcmVzc2lvbiBpcyBDb25zdGFudEV4cHJlc3Npb248dW5kZWZpbmVkPiB7XG5cdGNvbnN0IGV4cHJlc3Npb25Bc0V4cHJlc3Npb24gPSBleHByZXNzaW9uIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPjtcblx0cmV0dXJuIGV4cHJlc3Npb25Bc0V4cHJlc3Npb24/Ll90eXBlID09PSBcIkNvbnN0YW50XCIgJiYgZXhwcmVzc2lvbkFzRXhwcmVzc2lvbj8udmFsdWUgPT09IHVuZGVmaW5lZDtcbn1cblxudHlwZSBDb21wbGV4QW5ub3RhdGlvbkV4cHJlc3Npb248UD4gPVxuXHR8IFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IEFwcGx5QW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBJZkFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgT3JBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IEFuZEFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgTmVBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IEVxQW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBOb3RBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IEd0QW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBHZUFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgTGVBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IEx0QW5ub3RhdGlvbkV4cHJlc3Npb248UD47XG5cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlT2JqZWN0KG9iamVjdFR5cGU6IG9iamVjdCk6IGJvb2xlYW4ge1xuXHRzd2l0Y2ggKG9iamVjdFR5cGUuY29uc3RydWN0b3IubmFtZSkge1xuXHRcdGNhc2UgXCJTdHJpbmdcIjpcblx0XHRjYXNlIFwiTnVtYmVyXCI6XG5cdFx0Y2FzZSBcIkJvb2xlYW5cIjpcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHBhc3NlZCBhbm5vdGF0aW9uIGFubm90YXRpb25WYWx1ZSBpcyBhIENvbXBsZXhBbm5vdGF0aW9uRXhwcmVzc2lvbi5cbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtICBhbm5vdGF0aW9uVmFsdWUgVGhlIGFubm90YXRpb24gYW5ub3RhdGlvblZhbHVlIHRvIGV2YWx1YXRlXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdCBpcyBhIHtDb21wbGV4QW5ub3RhdGlvbkV4cHJlc3Npb259XG4gKi9cbmZ1bmN0aW9uIGlzQ29tcGxleEFubm90YXRpb25FeHByZXNzaW9uPFQ+KGFubm90YXRpb25WYWx1ZTogUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8VD4pOiBhbm5vdGF0aW9uVmFsdWUgaXMgQ29tcGxleEFubm90YXRpb25FeHByZXNzaW9uPFQ+IHtcblx0cmV0dXJuIHR5cGVvZiBhbm5vdGF0aW9uVmFsdWUgPT09IFwib2JqZWN0XCIgJiYgIWlzUHJpbWl0aXZlT2JqZWN0KGFubm90YXRpb25WYWx1ZSBhcyBvYmplY3QpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIHRoZSBjb3JyZXNwb25kaW5nIGFubm90YXRpb25WYWx1ZSBmb3IgYSBnaXZlbiBhbm5vdGF0aW9uIGFubm90YXRpb25WYWx1ZS5cbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGFubm90YXRpb25WYWx1ZSBUaGUgc291cmNlIGFubm90YXRpb24gYW5ub3RhdGlvblZhbHVlXG4gKiBAcGFyYW0gdmlzaXRlZE5hdmlnYXRpb25QYXRocyBUaGUgcGF0aCBmcm9tIHRoZSByb290IGVudGl0eSBzZXRcbiAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgRGVmYXVsdCB2YWx1ZSBpZiB0aGUgYW5ub3RhdGlvblZhbHVlIGlzIHVuZGVmaW5lZFxuICogQHBhcmFtIHBhdGhWaXNpdG9yIEEgZnVuY3Rpb24gdG8gbW9kaWZ5IHRoZSByZXN1bHRpbmcgcGF0aFxuICogQHJldHVybnMgVGhlIGFubm90YXRpb25WYWx1ZSBlcXVpdmFsZW50IHRvIHRoYXQgYW5ub3RhdGlvbiBhbm5vdGF0aW9uVmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGFubm90YXRpb25WYWx1ZTogUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8VD4gfCB1bmRlZmluZWQsXG5cdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdID0gW10sXG5cdGRlZmF1bHRWYWx1ZT86IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cGF0aFZpc2l0b3I/OiBGdW5jdGlvblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGVDYXN0PFQ+PiB7XG5cdGlmIChhbm5vdGF0aW9uVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiB3cmFwUHJpbWl0aXZlKGRlZmF1bHRWYWx1ZSBhcyBQcmltaXRpdmVUeXBlQ2FzdDxUPik7XG5cdH1cblx0YW5ub3RhdGlvblZhbHVlID0gYW5ub3RhdGlvblZhbHVlPy52YWx1ZU9mKCkgYXMgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8VD47XG5cdGlmICghaXNDb21wbGV4QW5ub3RhdGlvbkV4cHJlc3Npb24oYW5ub3RhdGlvblZhbHVlKSkge1xuXHRcdHJldHVybiBjb25zdGFudChhbm5vdGF0aW9uVmFsdWUpO1xuXHR9XG5cblx0c3dpdGNoIChhbm5vdGF0aW9uVmFsdWUudHlwZSkge1xuXHRcdGNhc2UgXCJQYXRoXCI6XG5cdFx0XHRyZXR1cm4gcGF0aEluTW9kZWwoYW5ub3RhdGlvblZhbHVlLnBhdGgsIHVuZGVmaW5lZCwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpO1xuXHRcdGNhc2UgXCJJZlwiOlxuXHRcdFx0cmV0dXJuIGFubm90YXRpb25JZkV4cHJlc3Npb24oYW5ub3RhdGlvblZhbHVlLiRJZiwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxcblx0XHRcdFx0UHJpbWl0aXZlVHlwZUNhc3Q8VD5cblx0XHRcdD47XG5cdFx0Y2FzZSBcIk5vdFwiOlxuXHRcdFx0cmV0dXJuIG5vdChwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiROb3QsIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKSkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFxuXHRcdFx0XHRQcmltaXRpdmVUeXBlQ2FzdDxUPlxuXHRcdFx0Pjtcblx0XHRjYXNlIFwiRXFcIjpcblx0XHRcdHJldHVybiBlcXVhbChcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kRXFbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKSxcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kRXFbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKVxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZUNhc3Q8VD4+O1xuXHRcdGNhc2UgXCJOZVwiOlxuXHRcdFx0cmV0dXJuIG5vdEVxdWFsKFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiROZVswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiROZVsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlQ2FzdDxUPj47XG5cdFx0Y2FzZSBcIkd0XCI6XG5cdFx0XHRyZXR1cm4gZ3JlYXRlclRoYW4oXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJEd0WzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciksXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJEd0WzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcilcblx0XHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGVDYXN0PFQ+Pjtcblx0XHRjYXNlIFwiR2VcIjpcblx0XHRcdHJldHVybiBncmVhdGVyT3JFcXVhbChcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kR2VbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKSxcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kR2VbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKVxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZUNhc3Q8VD4+O1xuXHRcdGNhc2UgXCJMdFwiOlxuXHRcdFx0cmV0dXJuIGxlc3NUaGFuKFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiRMdFswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiRMdFsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlQ2FzdDxUPj47XG5cdFx0Y2FzZSBcIkxlXCI6XG5cdFx0XHRyZXR1cm4gbGVzc09yRXF1YWwoXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJExlWzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciksXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJExlWzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcilcblx0XHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGVDYXN0PFQ+Pjtcblx0XHRjYXNlIFwiT3JcIjpcblx0XHRcdHJldHVybiBvcihcblx0XHRcdFx0Li4uYW5ub3RhdGlvblZhbHVlLiRPci5tYXAoZnVuY3Rpb24gKG9yQ29uZGl0aW9uKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbjxib29sZWFuPihvckNvbmRpdGlvbiwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpO1xuXHRcdFx0XHR9KVxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZUNhc3Q8VD4+O1xuXHRcdGNhc2UgXCJBbmRcIjpcblx0XHRcdHJldHVybiBhbmQoXG5cdFx0XHRcdC4uLmFubm90YXRpb25WYWx1ZS4kQW5kLm1hcChmdW5jdGlvbiAoYW5kQ29uZGl0aW9uKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbjxib29sZWFuPihhbmRDb25kaXRpb24sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKTtcblx0XHRcdFx0fSlcblx0XHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGVDYXN0PFQ+Pjtcblx0XHRjYXNlIFwiQXBwbHlcIjpcblx0XHRcdHJldHVybiBhbm5vdGF0aW9uQXBwbHlFeHByZXNzaW9uKFxuXHRcdFx0XHRhbm5vdGF0aW9uVmFsdWUgYXMgQXBwbHlBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+LFxuXHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHRwYXRoVmlzaXRvclxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZUNhc3Q8VD4+O1xuXHR9XG5cdHJldHVybiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xufVxuXG4vKipcbiAqIFBhcnNlIHRoZSBhbm5vdGF0aW9uIGNvbmRpdGlvbiBpbnRvIGFuIGV4cHJlc3Npb24uXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBhbm5vdGF0aW9uVmFsdWUgVGhlIGNvbmRpdGlvbiBvciB2YWx1ZSBmcm9tIHRoZSBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gdmlzaXRlZE5hdmlnYXRpb25QYXRocyBUaGUgcGF0aCBmcm9tIHRoZSByb290IGVudGl0eSBzZXRcbiAqIEBwYXJhbSBwYXRoVmlzaXRvciBBIGZ1bmN0aW9uIHRvIG1vZGlmeSB0aGUgcmVzdWx0aW5nIHBhdGhcbiAqIEByZXR1cm5zIEFuIGVxdWl2YWxlbnQgZXhwcmVzc2lvblxuICovXG5mdW5jdGlvbiBwYXJzZUFubm90YXRpb25Db25kaXRpb248VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRhbm5vdGF0aW9uVmFsdWU6IENvbmRpdGlvbmFsQ2hlY2tPclZhbHVlLFxuXHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSA9IFtdLFxuXHRwYXRoVmlzaXRvcj86IEZ1bmN0aW9uXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4ge1xuXHRpZiAoYW5ub3RhdGlvblZhbHVlID09PSBudWxsIHx8IHR5cGVvZiBhbm5vdGF0aW9uVmFsdWUgIT09IFwib2JqZWN0XCIpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoYW5ub3RhdGlvblZhbHVlIGFzIFQpO1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRPclwiKSkge1xuXHRcdHJldHVybiBvcihcblx0XHRcdC4uLigoYW5ub3RhdGlvblZhbHVlIGFzIE9yQ29uZGl0aW9uYWxFeHByZXNzaW9uKS4kT3IubWFwKGZ1bmN0aW9uIChvckNvbmRpdGlvbikge1xuXHRcdFx0XHRyZXR1cm4gcGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKG9yQ29uZGl0aW9uLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcik7XG5cdFx0XHR9KSBhcyB1bmtub3duIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdKVxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRBbmRcIikpIHtcblx0XHRyZXR1cm4gYW5kKFxuXHRcdFx0Li4uKChhbm5vdGF0aW9uVmFsdWUgYXMgQW5kQ29uZGl0aW9uYWxFeHByZXNzaW9uKS4kQW5kLm1hcChmdW5jdGlvbiAoYW5kQ29uZGl0aW9uKSB7XG5cdFx0XHRcdHJldHVybiBwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5kQ29uZGl0aW9uLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcik7XG5cdFx0XHR9KSBhcyB1bmtub3duIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdKVxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiROb3RcIikpIHtcblx0XHRyZXR1cm4gbm90KFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgTm90Q29uZGl0aW9uYWxFeHByZXNzaW9uKS4kTm90LCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcilcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkRXFcIikpIHtcblx0XHRyZXR1cm4gZXF1YWwoXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oKGFubm90YXRpb25WYWx1ZSBhcyBFcUNvbmRpdGlvbmFsRXhwcmVzc2lvbikuJEVxWzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciksXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oKGFubm90YXRpb25WYWx1ZSBhcyBFcUNvbmRpdGlvbmFsRXhwcmVzc2lvbikuJEVxWzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcilcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkTmVcIikpIHtcblx0XHRyZXR1cm4gbm90RXF1YWwoXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oKGFubm90YXRpb25WYWx1ZSBhcyBOZUNvbmRpdGlvbmFsRXhwcmVzc2lvbikuJE5lWzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciksXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oKGFubm90YXRpb25WYWx1ZSBhcyBOZUNvbmRpdGlvbmFsRXhwcmVzc2lvbikuJE5lWzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcilcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkR3RcIikpIHtcblx0XHRyZXR1cm4gZ3JlYXRlclRoYW4oXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oKGFubm90YXRpb25WYWx1ZSBhcyBHdENvbmRpdGlvbmFsRXhwcmVzc2lvbikuJEd0WzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciksXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oKGFubm90YXRpb25WYWx1ZSBhcyBHdENvbmRpdGlvbmFsRXhwcmVzc2lvbikuJEd0WzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcilcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkR2VcIikpIHtcblx0XHRyZXR1cm4gZ3JlYXRlck9yRXF1YWwoXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oKGFubm90YXRpb25WYWx1ZSBhcyBHZUNvbmRpdGlvbmFsRXhwcmVzc2lvbikuJEdlWzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciksXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oKGFubm90YXRpb25WYWx1ZSBhcyBHZUNvbmRpdGlvbmFsRXhwcmVzc2lvbikuJEdlWzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcilcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkTHRcIikpIHtcblx0XHRyZXR1cm4gbGVzc1RoYW4oXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oKGFubm90YXRpb25WYWx1ZSBhcyBMdENvbmRpdGlvbmFsRXhwcmVzc2lvbikuJEx0WzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciksXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oKGFubm90YXRpb25WYWx1ZSBhcyBMdENvbmRpdGlvbmFsRXhwcmVzc2lvbikuJEx0WzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcilcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkTGVcIikpIHtcblx0XHRyZXR1cm4gbGVzc09yRXF1YWwoXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oKGFubm90YXRpb25WYWx1ZSBhcyBMZUNvbmRpdGlvbmFsRXhwcmVzc2lvbikuJExlWzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciksXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oKGFubm90YXRpb25WYWx1ZSBhcyBMZUNvbmRpdGlvbmFsRXhwcmVzc2lvbikuJExlWzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcilcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkUGF0aFwiKSkge1xuXHRcdHJldHVybiBwYXRoSW5Nb2RlbCgoYW5ub3RhdGlvblZhbHVlIGFzIFBhdGhDb25kaXRpb25FeHByZXNzaW9uPFQ+KS4kUGF0aCwgdW5kZWZpbmVkLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcik7XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJEFwcGx5XCIpKSB7XG5cdFx0cmV0dXJuIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRcdHtcblx0XHRcdFx0dHlwZTogXCJBcHBseVwiLFxuXHRcdFx0XHQkRnVuY3Rpb246IChhbm5vdGF0aW9uVmFsdWUgYXMgeyAkRnVuY3Rpb24/OiBzdHJpbmcgfSkuJEZ1bmN0aW9uLFxuXHRcdFx0XHQkQXBwbHk6IChhbm5vdGF0aW9uVmFsdWUgYXMgeyAkQXBwbHk/OiB1bmtub3duIH0pLiRBcHBseVxuXHRcdFx0fSBhcyBBcHBseUFubm90YXRpb25FeHByZXNzaW9uPFQ+LFxuXHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdHBhdGhWaXNpdG9yXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJElmXCIpKSB7XG5cdFx0cmV0dXJuIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRcdHtcblx0XHRcdFx0dHlwZTogXCJJZlwiLFxuXHRcdFx0XHQkSWY6IChhbm5vdGF0aW9uVmFsdWUgYXMgeyAkSWY/OiB1bmtub3duIH0pLiRJZlxuXHRcdFx0fSBhcyBJZkFubm90YXRpb25FeHByZXNzaW9uPFQ+LFxuXHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdHBhdGhWaXNpdG9yXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJEVudW1NZW1iZXJcIikpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQocmVzb2x2ZUVudW1WYWx1ZSgoYW5ub3RhdGlvblZhbHVlIGFzIHsgJEVudW1NZW1iZXI/OiBzdHJpbmcgfSkuJEVudW1NZW1iZXIpIGFzIFQpO1xuXHR9XG5cdHJldHVybiBjb25zdGFudChmYWxzZSBhcyBUKTtcbn1cblxuLyoqXG4gKiBQcm9jZXNzIHRoZSB7SWZBbm5vdGF0aW9uRXhwcmVzc2lvblZhbHVlfSBpbnRvIGFuIGV4cHJlc3Npb24uXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBhbm5vdGF0aW9uVmFsdWUgQW4gSWYgZXhwcmVzc2lvbiByZXR1cm5pbmcgdGhlIHR5cGUgVFxuICogQHBhcmFtIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMgVGhlIHBhdGggZnJvbSB0aGUgcm9vdCBlbnRpdHkgc2V0XG4gKiBAcGFyYW0gcGF0aFZpc2l0b3IgQSBmdW5jdGlvbiB0byBtb2RpZnkgdGhlIHJlc3VsdGluZyBwYXRoXG4gKiBAcmV0dXJucyBUaGUgZXF1aXZhbGVudCBpZkVsc2UgZXhwcmVzc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gYW5ub3RhdGlvbklmRXhwcmVzc2lvbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGFubm90YXRpb25WYWx1ZTogSWZBbm5vdGF0aW9uRXhwcmVzc2lvblZhbHVlPFQ+LFxuXHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSA9IFtdLFxuXHRwYXRoVmlzaXRvcj86IEZ1bmN0aW9uXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4ge1xuXHRyZXR1cm4gaWZFbHNlKFxuXHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWVbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKSxcblx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlWzFdIGFzIENvbmRpdGlvbmFsQ2hlY2tPclZhbHVlLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciksXG5cdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZVsyXSBhcyBDb25kaXRpb25hbENoZWNrT3JWYWx1ZSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdCk7XG59XG4vLyBUaGlzIHR5cGUgaXMgbm90IHJlY3Vyc2l2ZWx5IHRyYW5zZm9ybWVkIGZyb20gdGhlIG1ldGFtb2RlbCBjb250ZW50LCBhcyBzdWNoIHdlIGhhdmUgc29tZSB1Z2x5IHRoaW5ncyB0aGVyZVxudHlwZSBTdWJBcHBseUV4cHJlc3Npb25Gcm9tTWV0YW1vZGVsID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5mdW5jdGlvbiBjb252ZXJ0U3ViQXBwbHlQYXJhbWV0ZXJzKGFwcGx5UGFyYW06IFN1YkFwcGx5RXhwcmVzc2lvbkZyb21NZXRhbW9kZWwpOiBTdWJBcHBseUV4cHJlc3Npb25Gcm9tTWV0YW1vZGVsIHwgUHJpbWl0aXZlVHlwZSB7XG5cdGxldCBhcHBseVBhcmFtQ29udmVydGVkID0gYXBwbHlQYXJhbTtcblx0aWYgKGFwcGx5UGFyYW0uaGFzT3duUHJvcGVydHkoXCIkUGF0aFwiKSkge1xuXHRcdGFwcGx5UGFyYW1Db252ZXJ0ZWQgPSB7XG5cdFx0XHR0eXBlOiBcIlBhdGhcIixcblx0XHRcdHBhdGg6IGFwcGx5UGFyYW0uJFBhdGhcblx0XHR9IGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+O1xuXHR9IGVsc2UgaWYgKGFwcGx5UGFyYW0uaGFzT3duUHJvcGVydHkoXCIkSWZcIikpIHtcblx0XHRhcHBseVBhcmFtQ29udmVydGVkID0ge1xuXHRcdFx0dHlwZTogXCJJZlwiLFxuXHRcdFx0JElmOiBhcHBseVBhcmFtLiRJZlxuXHRcdH0gYXMgSWZBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+O1xuXHR9IGVsc2UgaWYgKGFwcGx5UGFyYW0uaGFzT3duUHJvcGVydHkoXCIkQXBwbHlcIikpIHtcblx0XHRhcHBseVBhcmFtQ29udmVydGVkID0ge1xuXHRcdFx0dHlwZTogXCJBcHBseVwiLFxuXHRcdFx0JEZ1bmN0aW9uOiBhcHBseVBhcmFtLiRGdW5jdGlvbixcblx0XHRcdCRBcHBseTogYXBwbHlQYXJhbS4kQXBwbHlcblx0XHR9IGFzIEFwcGx5QW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPjtcblx0fVxuXHRyZXR1cm4gYXBwbHlQYXJhbUNvbnZlcnRlZDtcbn1cblxudHlwZSBPRGF0YUZ1bmN0aW9uID0gXCJvZGF0YS5jb25jYXRcIiB8IFwib2RhdGEuZmlsbFVyaVRlbXBsYXRlXCIgfCBcIm9kYXRhLnVyaUVuY29kZVwiO1xuZXhwb3J0IGZ1bmN0aW9uIGFubm90YXRpb25BcHBseUV4cHJlc3Npb24oXG5cdGFwcGx5RXhwcmVzc2lvbjogQXBwbHlBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+LFxuXHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSA9IFtdLFxuXHRwYXRoVmlzaXRvcj86IEZ1bmN0aW9uXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB7XG5cdHN3aXRjaCAoYXBwbHlFeHByZXNzaW9uLiRGdW5jdGlvbiBhcyBPRGF0YUZ1bmN0aW9uKSB7XG5cdFx0Y2FzZSBcIm9kYXRhLmNvbmNhdFwiOlxuXHRcdFx0cmV0dXJuIGNvbmNhdChcblx0XHRcdFx0Li4uYXBwbHlFeHByZXNzaW9uLiRBcHBseS5tYXAoKGFwcGx5UGFyYW0pID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKFxuXHRcdFx0XHRcdFx0Y29udmVydFN1YkFwcGx5UGFyYW1ldGVycyhhcHBseVBhcmFtKSBhcyBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxzdHJpbmc+LFxuXHRcdFx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdHBhdGhWaXNpdG9yXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSlcblx0XHRcdCk7XG5cdFx0Y2FzZSBcIm9kYXRhLnVyaUVuY29kZVwiOlxuXHRcdFx0Y29uc3QgcGFyYW1ldGVyID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKFxuXHRcdFx0XHRjb252ZXJ0U3ViQXBwbHlQYXJhbWV0ZXJzKFxuXHRcdFx0XHRcdGFwcGx5RXhwcmVzc2lvbi4kQXBwbHlbMF0gYXMgdW5rbm93biBhcyBTdWJBcHBseUV4cHJlc3Npb25Gcm9tTWV0YW1vZGVsXG5cdFx0XHRcdCkgYXMgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8c3RyaW5nPixcblx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRwYXRoVmlzaXRvclxuXHRcdFx0KTtcblx0XHRcdC8vIFRoZSBzZWNvbmQgcGFyYW1ldGVyIGZvciB1cmlFbmNvZGUgaXMgYWx3YXlzIGEgc3RyaW5nIHNpbmNlIHRoZSB0YXJnZXQgZXZhbHVhdGlvbiBpcyBhZ2FpbnN0IGEgZm9ybWF0VmFsdWUgY2FsbCBpbiBPRGF0YVV0aWxzIHdoaWNoIGV4cGVjdCB0aGUgdGFyZ2V0IHR5cGUgYXMgc2Vjb25kIHBhcmFtZXRlclxuXHRcdFx0cmV0dXJuIGZuKFwib2RhdGEudXJpRW5jb2RlXCIsIFtwYXJhbWV0ZXIsIFwiRWRtLlN0cmluZ1wiXSwgdW5kZWZpbmVkLCB0cnVlKTtcblx0XHRjYXNlIFwib2RhdGEuZmlsbFVyaVRlbXBsYXRlXCI6XG5cdFx0XHRjb25zdCB0ZW1wbGF0ZSA9IGFwcGx5RXhwcmVzc2lvbi4kQXBwbHlbMF07XG5cdFx0XHRjb25zdCB0ZW1wbGF0ZVBhcmFtcyA9IGFwcGx5RXhwcmVzc2lvbi4kQXBwbHkuc2xpY2UoMSkgYXMgdW5rbm93biBhcyBTdWJBcHBseUV4cHJlc3Npb25Gcm9tTWV0YW1vZGVsW107XG5cdFx0XHRjb25zdCB0YXJnZXRPYmplY3Q6IFJlY29yZDxzdHJpbmcsIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPj4gPSB7fTtcblx0XHRcdHRlbXBsYXRlUGFyYW1zLmZvckVhY2goKGFwcGx5UGFyYW0pID0+IHtcblx0XHRcdFx0dGFyZ2V0T2JqZWN0W2FwcGx5UGFyYW0uJE5hbWUgYXMgc3RyaW5nXSA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRcdFx0XHRjb252ZXJ0U3ViQXBwbHlQYXJhbWV0ZXJzKFxuXHRcdFx0XHRcdFx0YXBwbHlQYXJhbS4kTGFiZWxlZEVsZW1lbnQgYXMgU3ViQXBwbHlFeHByZXNzaW9uRnJvbU1ldGFtb2RlbFxuXHRcdFx0XHRcdCkgYXMgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8c3RyaW5nPixcblx0XHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRwYXRoVmlzaXRvclxuXHRcdFx0XHQpO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gZm4oXCJvZGF0YS5maWxsVXJpVGVtcGxhdGVcIiwgW3RlbXBsYXRlLCB0YXJnZXRPYmplY3RdLCB1bmRlZmluZWQsIHRydWUpO1xuXHR9XG5cdHJldHVybiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xufVxuXG4vKipcbiAqIEdlbmVyaWMgaGVscGVyIGZvciB0aGUgY29tcGFyaXNvbiBvcGVyYXRpb25zIChlcXVhbCwgbm90RXF1YWwsIC4uLikuXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBvcGVyYXRvciBUaGUgb3BlcmF0b3IgdG8gYXBwbHlcbiAqIEBwYXJhbSBsZWZ0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSBvcGVyYXRvclxuICogQHBhcmFtIHJpZ2h0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgb3BlcmF0b3JcbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBjb21wYXJpc29uXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmlzb248VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRvcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yLFxuXHRsZWZ0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRyaWdodE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgbGVmdEV4cHJlc3Npb24gPSB3cmFwUHJpbWl0aXZlKGxlZnRPcGVyYW5kKTtcblx0Y29uc3QgcmlnaHRFeHByZXNzaW9uID0gd3JhcFByaW1pdGl2ZShyaWdodE9wZXJhbmQpO1xuXHRpZiAoaGFzVW5yZXNvbHZhYmxlRXhwcmVzc2lvbihsZWZ0RXhwcmVzc2lvbiwgcmlnaHRFeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xuXHR9XG5cdGlmIChpc0NvbnN0YW50KGxlZnRFeHByZXNzaW9uKSAmJiBpc0NvbnN0YW50KHJpZ2h0RXhwcmVzc2lvbikpIHtcblx0XHRzd2l0Y2ggKG9wZXJhdG9yKSB7XG5cdFx0XHRjYXNlIFwiIT09XCI6XG5cdFx0XHRcdHJldHVybiBjb25zdGFudChsZWZ0RXhwcmVzc2lvbi52YWx1ZSAhPT0gcmlnaHRFeHByZXNzaW9uLnZhbHVlKTtcblx0XHRcdGNhc2UgXCI9PT1cIjpcblx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KGxlZnRFeHByZXNzaW9uLnZhbHVlID09PSByaWdodEV4cHJlc3Npb24udmFsdWUpO1xuXHRcdFx0Y2FzZSBcIjxcIjpcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGxlZnRFeHByZXNzaW9uLnZhbHVlID09PSBudWxsIHx8XG5cdFx0XHRcdFx0bGVmdEV4cHJlc3Npb24udmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHRcdHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSA9PT0gbnVsbCB8fFxuXHRcdFx0XHRcdHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSA9PT0gdW5kZWZpbmVkXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KGxlZnRFeHByZXNzaW9uLnZhbHVlIDwgcmlnaHRFeHByZXNzaW9uLnZhbHVlKTtcblx0XHRcdGNhc2UgXCI8PVwiOlxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0bGVmdEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHxcblx0XHRcdFx0XHRsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdFx0cmlnaHRFeHByZXNzaW9uLnZhbHVlID09PSBudWxsIHx8XG5cdFx0XHRcdFx0cmlnaHRFeHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWRcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gY29uc3RhbnQobGVmdEV4cHJlc3Npb24udmFsdWUgPD0gcmlnaHRFeHByZXNzaW9uLnZhbHVlKTtcblx0XHRcdGNhc2UgXCI+XCI6XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gbnVsbCB8fFxuXHRcdFx0XHRcdGxlZnRFeHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0XHRyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHxcblx0XHRcdFx0XHRyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IHVuZGVmaW5lZFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBjb25zdGFudChsZWZ0RXhwcmVzc2lvbi52YWx1ZSA+IHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSk7XG5cdFx0XHRjYXNlIFwiPj1cIjpcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGxlZnRFeHByZXNzaW9uLnZhbHVlID09PSBudWxsIHx8XG5cdFx0XHRcdFx0bGVmdEV4cHJlc3Npb24udmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHRcdHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSA9PT0gbnVsbCB8fFxuXHRcdFx0XHRcdHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSA9PT0gdW5kZWZpbmVkXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KGxlZnRFeHByZXNzaW9uLnZhbHVlID49IHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB7XG5cdFx0XHRfdHlwZTogXCJDb21wYXJpc29uXCIsXG5cdFx0XHRvcGVyYXRvcjogb3BlcmF0b3IsXG5cdFx0XHRvcGVyYW5kMTogbGVmdEV4cHJlc3Npb24sXG5cdFx0XHRvcGVyYW5kMjogcmlnaHRFeHByZXNzaW9uXG5cdFx0fTtcblx0fVxufVxuXG4vKipcbiAqIEdlbmVyaWMgaGVscGVyIGZvciB0aGUgbGVuZ3RoIG9mIGFuIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgaW5wdXQgZXhwcmVzc2lvbiBwb2ludGluZyB0byBhbiBhcnJheVxuICogQHBhcmFtIGNoZWNrVW5kZWZpbmVkIElzIHRoZSBhcnJheSBwb3RlbnRpYWxseSB1bmRlZmluZWRcbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBsZW5ndGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxlbmd0aChcblx0ZXhwcmVzc2lvbjogUGF0aEluTW9kZWxFeHByZXNzaW9uPHVua25vd24+IHwgVW5yZXNvbHZhYmxlUGF0aEV4cHJlc3Npb24sXG5cdGNoZWNrVW5kZWZpbmVkID0gZmFsc2Vcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxudW1iZXI+IHtcblx0aWYgKGV4cHJlc3Npb24uX3R5cGUgPT09IFwiVW5yZXNvbHZhYmxlXCIpIHtcblx0XHRyZXR1cm4gZXhwcmVzc2lvbjtcblx0fVxuXHRpZiAoIWNoZWNrVW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdF90eXBlOiBcIkxlbmd0aFwiLFxuXHRcdFx0cGF0aEluTW9kZWw6IGV4cHJlc3Npb25cblx0XHR9O1xuXHR9XG5cdHJldHVybiBpZkVsc2UoZXF1YWwoZXhwcmVzc2lvbiwgdW5kZWZpbmVkKSwgLTEsIGxlbmd0aChleHByZXNzaW9uKSk7XG59XG5cbi8qKlxuICogQ29tcGFyaXNvbjogXCJlcXVhbFwiICg9PT0pLlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gbGVmdE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIGxlZnQgc2lkZVxuICogQHBhcmFtIHJpZ2h0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgY29tcGFyaXNvblxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGNvbXBhcmlzb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVxdWFsPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0bGVmdE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cmlnaHRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGxlZnRFeHByZXNzaW9uID0gd3JhcFByaW1pdGl2ZShsZWZ0T3BlcmFuZCk7XG5cdGNvbnN0IHJpZ2h0RXhwcmVzc2lvbiA9IHdyYXBQcmltaXRpdmUocmlnaHRPcGVyYW5kKTtcblx0aWYgKGhhc1VucmVzb2x2YWJsZUV4cHJlc3Npb24obGVmdEV4cHJlc3Npb24sIHJpZ2h0RXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjtcblx0fVxuXHRpZiAoX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChsZWZ0RXhwcmVzc2lvbiwgcmlnaHRFeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiBjb25zdGFudCh0cnVlKTtcblx0fVxuXG5cdGZ1bmN0aW9uIHJlZHVjZShsZWZ0OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4sIHJpZ2h0OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gfCB1bmRlZmluZWQge1xuXHRcdGlmIChsZWZ0Ll90eXBlID09PSBcIkNvbXBhcmlzb25cIiAmJiBpc1RydWUocmlnaHQpKSB7XG5cdFx0XHQvLyBjb21wYXJlKGEsIGIpID09PSB0cnVlIH5+PiBjb21wYXJlKGEsIGIpXG5cdFx0XHRyZXR1cm4gbGVmdDtcblx0XHR9IGVsc2UgaWYgKGxlZnQuX3R5cGUgPT09IFwiQ29tcGFyaXNvblwiICYmIGlzRmFsc2UocmlnaHQpKSB7XG5cdFx0XHQvLyBjb21wYXJlKGEsIGIpID09PSBmYWxzZSB+fj4gIWNvbXBhcmUoYSwgYilcblx0XHRcdHJldHVybiBub3QobGVmdCk7XG5cdFx0fSBlbHNlIGlmIChsZWZ0Ll90eXBlID09PSBcIklmRWxzZVwiICYmIF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwobGVmdC5vblRydWUsIHJpZ2h0KSkge1xuXHRcdFx0Ly8gKGlmICh4KSB7IGEgfSBlbHNlIHsgYiB9KSA9PT0gYSB+fj4geCB8fCAoYiA9PT0gYSlcblx0XHRcdHJldHVybiBvcihsZWZ0LmNvbmRpdGlvbiwgZXF1YWwobGVmdC5vbkZhbHNlLCByaWdodCkpO1xuXHRcdH0gZWxzZSBpZiAobGVmdC5fdHlwZSA9PT0gXCJJZkVsc2VcIiAmJiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGxlZnQub25GYWxzZSwgcmlnaHQpKSB7XG5cdFx0XHQvLyAoaWYgKHgpIHsgYSB9IGVsc2UgeyBiIH0pID09PSBiIH5+PiAheCB8fCAoYSA9PT0gYilcblx0XHRcdHJldHVybiBvcihub3QobGVmdC5jb25kaXRpb24pLCBlcXVhbChsZWZ0Lm9uVHJ1ZSwgcmlnaHQpKTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0bGVmdC5fdHlwZSA9PT0gXCJJZkVsc2VcIiAmJlxuXHRcdFx0aXNDb25zdGFudChsZWZ0Lm9uVHJ1ZSkgJiZcblx0XHRcdGlzQ29uc3RhbnQobGVmdC5vbkZhbHNlKSAmJlxuXHRcdFx0aXNDb25zdGFudChyaWdodCkgJiZcblx0XHRcdCFfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGxlZnQub25UcnVlLCByaWdodCkgJiZcblx0XHRcdCFfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGxlZnQub25GYWxzZSwgcmlnaHQpXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Ly8gZXhwbG9pdCBzeW1tZXRyeTogYSA9PT0gYiA8fj4gYiA9PT0gYVxuXHRjb25zdCByZWR1Y2VkID0gcmVkdWNlKGxlZnRFeHByZXNzaW9uLCByaWdodEV4cHJlc3Npb24pID8/IHJlZHVjZShyaWdodEV4cHJlc3Npb24sIGxlZnRFeHByZXNzaW9uKTtcblx0cmV0dXJuIHJlZHVjZWQgPz8gY29tcGFyaXNvbihcIj09PVwiLCBsZWZ0RXhwcmVzc2lvbiwgcmlnaHRFeHByZXNzaW9uKTtcbn1cblxuLyoqXG4gKiBDb21wYXJpc29uOiBcIm5vdCBlcXVhbFwiICghPT0pLlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gbGVmdE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIGxlZnQgc2lkZVxuICogQHBhcmFtIHJpZ2h0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgY29tcGFyaXNvblxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGNvbXBhcmlzb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vdEVxdWFsPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0bGVmdE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cmlnaHRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBub3QoZXF1YWwobGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCkpO1xufVxuXG4vKipcbiAqIENvbXBhcmlzb246IFwiZ3JlYXRlciBvciBlcXVhbFwiICg+PSkuXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBsZWZ0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgbGVmdCBzaWRlXG4gKiBAcGFyYW0gcmlnaHRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBjb21wYXJpc29uXG4gKiBAcmV0dXJucyBBbiBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY29tcGFyaXNvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JlYXRlck9yRXF1YWw8VCBleHRlbmRzIERlZmluZWRQcmltaXRpdmVUeXBlPihcblx0bGVmdE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cmlnaHRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBjb21wYXJpc29uKFwiPj1cIiwgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCk7XG59XG5cbi8qKlxuICogQ29tcGFyaXNvbjogXCJncmVhdGVyIHRoYW5cIiAoPikuXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBsZWZ0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgbGVmdCBzaWRlXG4gKiBAcGFyYW0gcmlnaHRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBjb21wYXJpc29uXG4gKiBAcmV0dXJucyBBbiBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY29tcGFyaXNvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JlYXRlclRoYW48VCBleHRlbmRzIERlZmluZWRQcmltaXRpdmVUeXBlPihcblx0bGVmdE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cmlnaHRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBjb21wYXJpc29uKFwiPlwiLCBsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kKTtcbn1cblxuLyoqXG4gKiBDb21wYXJpc29uOiBcImxlc3Mgb3IgZXF1YWxcIiAoPD0pLlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gbGVmdE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIGxlZnQgc2lkZVxuICogQHBhcmFtIHJpZ2h0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgY29tcGFyaXNvblxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGNvbXBhcmlzb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxlc3NPckVxdWFsPFQgZXh0ZW5kcyBEZWZpbmVkUHJpbWl0aXZlVHlwZT4oXG5cdGxlZnRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4sXG5cdHJpZ2h0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gY29tcGFyaXNvbihcIjw9XCIsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpO1xufVxuXG4vKipcbiAqIENvbXBhcmlzb246IFwibGVzcyB0aGFuXCIgKDwpLlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gbGVmdE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIGxlZnQgc2lkZVxuICogQHBhcmFtIHJpZ2h0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgY29tcGFyaXNvblxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGNvbXBhcmlzb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxlc3NUaGFuPFQgZXh0ZW5kcyBEZWZpbmVkUHJpbWl0aXZlVHlwZT4oXG5cdGxlZnRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4sXG5cdHJpZ2h0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gY29tcGFyaXNvbihcIjxcIiwgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCk7XG59XG5cbi8qKlxuICogSWYtdGhlbi1lbHNlIGV4cHJlc3Npb24uXG4gKlxuICogRXZhbHVhdGVzIHRvIG9uVHJ1ZSBpZiB0aGUgY29uZGl0aW9uIGV2YWx1YXRlcyB0byB0cnVlLCBlbHNlIGV2YWx1YXRlcyB0byBvbkZhbHNlLlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gY29uZGl0aW9uIFRoZSBjb25kaXRpb24gdG8gZXZhbHVhdGVcbiAqIEBwYXJhbSBvblRydWUgRXhwcmVzc2lvbiByZXN1bHQgaWYgdGhlIGNvbmRpdGlvbiBldmFsdWF0ZXMgdG8gdHJ1ZVxuICogQHBhcmFtIG9uRmFsc2UgRXhwcmVzc2lvbiByZXN1bHQgaWYgdGhlIGNvbmRpdGlvbiBldmFsdWF0ZXMgdG8gZmFsc2VcbiAqIEByZXR1cm5zIFRoZSBleHByZXNzaW9uIHRoYXQgcmVwcmVzZW50cyB0aGlzIGNvbmRpdGlvbmFsIGNoZWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpZkVsc2U8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRjb25kaXRpb246IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPixcblx0b25UcnVlOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4sXG5cdG9uRmFsc2U6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+IHtcblx0bGV0IGNvbmRpdGlvbkV4cHJlc3Npb24gPSB3cmFwUHJpbWl0aXZlKGNvbmRpdGlvbik7XG5cdGxldCBvblRydWVFeHByZXNzaW9uID0gd3JhcFByaW1pdGl2ZShvblRydWUpO1xuXHRsZXQgb25GYWxzZUV4cHJlc3Npb24gPSB3cmFwUHJpbWl0aXZlKG9uRmFsc2UpO1xuXG5cdC8vIHN3YXAgYnJhbmNoZXMgaWYgdGhlIGNvbmRpdGlvbiBpcyBhIG5lZ2F0aW9uXG5cdGlmIChjb25kaXRpb25FeHByZXNzaW9uLl90eXBlID09PSBcIk5vdFwiKSB7XG5cdFx0Ly8gaWZFbHNlKG5vdChYKSwgYSwgYikgLS0+IGlmRWxzZShYLCBiLCBhKVxuXHRcdFtvblRydWVFeHByZXNzaW9uLCBvbkZhbHNlRXhwcmVzc2lvbl0gPSBbb25GYWxzZUV4cHJlc3Npb24sIG9uVHJ1ZUV4cHJlc3Npb25dO1xuXHRcdGNvbmRpdGlvbkV4cHJlc3Npb24gPSBub3QoY29uZGl0aW9uRXhwcmVzc2lvbik7XG5cdH1cblxuXHQvLyBpbmxpbmUgbmVzdGVkIGlmLWVsc2UgZXhwcmVzc2lvbnM6IG9uVHJ1ZSBicmFuY2hcblx0Ly8gaWZFbHNlKFgsIGlmRWxzZShYLCBhLCBiKSwgYykgPT0+IGlmRWxzZShYLCBhLCBjKVxuXHRpZiAob25UcnVlRXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJJZkVsc2VcIiAmJiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGNvbmRpdGlvbkV4cHJlc3Npb24sIG9uVHJ1ZUV4cHJlc3Npb24uY29uZGl0aW9uKSkge1xuXHRcdG9uVHJ1ZUV4cHJlc3Npb24gPSBvblRydWVFeHByZXNzaW9uLm9uVHJ1ZTtcblx0fVxuXG5cdC8vIGlubGluZSBuZXN0ZWQgaWYtZWxzZSBleHByZXNzaW9uczogb25GYWxzZSBicmFuY2hcblx0Ly8gaWZFbHNlKFgsIGEsIGlmRWxzZShYLCBiLCBjKSkgPT0+IGlmRWxzZShYLCBhLCBjKVxuXHRpZiAob25GYWxzZUV4cHJlc3Npb24uX3R5cGUgPT09IFwiSWZFbHNlXCIgJiYgX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChjb25kaXRpb25FeHByZXNzaW9uLCBvbkZhbHNlRXhwcmVzc2lvbi5jb25kaXRpb24pKSB7XG5cdFx0b25GYWxzZUV4cHJlc3Npb24gPSBvbkZhbHNlRXhwcmVzc2lvbi5vbkZhbHNlO1xuXHR9XG5cblx0Ly8gKGlmIHRydWUgdGhlbiBhIGVsc2UgYikgIH5+PiBhXG5cdC8vIChpZiBmYWxzZSB0aGVuIGEgZWxzZSBiKSB+fj4gYlxuXHRpZiAoaXNDb25zdGFudChjb25kaXRpb25FeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiBjb25kaXRpb25FeHByZXNzaW9uLnZhbHVlID8gb25UcnVlRXhwcmVzc2lvbiA6IG9uRmFsc2VFeHByZXNzaW9uO1xuXHR9XG5cblx0Ly8gaWYgKGlzQ29uc3RhbnRCb29sZWFuKG9uVHJ1ZUV4cHJlc3Npb24pIHx8IGlzQ29uc3RhbnRCb29sZWFuKG9uRmFsc2VFeHByZXNzaW9uKSkge1xuXHQvLyBcdHJldHVybiBvcihhbmQoY29uZGl0aW9uLCBvblRydWVFeHByZXNzaW9uIGFzIEV4cHJlc3Npb248Ym9vbGVhbj4pLCBhbmQobm90KGNvbmRpdGlvbiksIG9uRmFsc2VFeHByZXNzaW9uIGFzIEV4cHJlc3Npb248Ym9vbGVhbj4pKSBhcyBFeHByZXNzaW9uPFQ+XG5cdC8vIH1cblxuXHQvLyAoaWYgWCB0aGVuIGEgZWxzZSBhKSB+fj4gYVxuXHRpZiAoX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChvblRydWVFeHByZXNzaW9uLCBvbkZhbHNlRXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gb25UcnVlRXhwcmVzc2lvbjtcblx0fVxuXG5cdC8vIGlmIFggdGhlbiBhIGVsc2UgZmFsc2Ugfn4+IFggJiYgYVxuXHRpZiAoaXNGYWxzZShvbkZhbHNlRXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gYW5kKGNvbmRpdGlvbkV4cHJlc3Npb24sIG9uVHJ1ZUV4cHJlc3Npb24gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH1cblxuXHQvLyBpZiBYIHRoZW4gYSBlbHNlIHRydWUgfn4+ICFYIHx8IGFcblx0aWYgKGlzVHJ1ZShvbkZhbHNlRXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gb3Iobm90KGNvbmRpdGlvbkV4cHJlc3Npb24pLCBvblRydWVFeHByZXNzaW9uIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9XG5cblx0Ly8gaWYgWCB0aGVuIGZhbHNlIGVsc2UgYSB+fj4gIVggJiYgYVxuXHRpZiAoaXNGYWxzZShvblRydWVFeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiBhbmQobm90KGNvbmRpdGlvbkV4cHJlc3Npb24pLCBvbkZhbHNlRXhwcmVzc2lvbiBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4pIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fVxuXG5cdC8vIGlmIFggdGhlbiB0cnVlIGVsc2UgYSB+fj4gWCB8fCBhXG5cdGlmIChpc1RydWUob25UcnVlRXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gb3IoY29uZGl0aW9uRXhwcmVzc2lvbiwgb25GYWxzZUV4cHJlc3Npb24gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH1cblx0aWYgKGhhc1VucmVzb2x2YWJsZUV4cHJlc3Npb24oY29uZGl0aW9uRXhwcmVzc2lvbiwgb25UcnVlRXhwcmVzc2lvbiwgb25GYWxzZUV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG5cdH1cblx0aWYgKGlzQ29tcGxleFR5cGVFeHByZXNzaW9uKGNvbmRpdGlvbikgfHwgaXNDb21wbGV4VHlwZUV4cHJlc3Npb24ob25UcnVlKSB8fCBpc0NvbXBsZXhUeXBlRXhwcmVzc2lvbihvbkZhbHNlKSkge1xuXHRcdGxldCBwYXRoSWR4ID0gMDtcblx0XHRjb25zdCBteUlmRWxzZUV4cHJlc3Npb24gPSBmb3JtYXRSZXN1bHQoW2NvbmRpdGlvbiwgb25UcnVlLCBvbkZhbHNlXSwgXCJzYXAuZmUuY29yZS5mb3JtYXR0ZXJzLlN0YW5kYXJkRm9ybWF0dGVyI2lmRWxzZVwiKTtcblx0XHRjb25zdCBhbGxQYXJ0cyA9IFtdO1xuXHRcdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0bXlJZkVsc2VFeHByZXNzaW9uLFxuXHRcdFx0XCJQYXRoSW5Nb2RlbFwiLFxuXHRcdFx0KGNvbnN0YW50UGF0aDogUGF0aEluTW9kZWxFeHByZXNzaW9uPHVua25vd24+KSA9PiB7XG5cdFx0XHRcdGFsbFBhcnRzLnB1c2goY29uc3RhbnRQYXRoKTtcblx0XHRcdFx0cmV0dXJuIHBhdGhJbk1vZGVsKGAkJHtwYXRoSWR4Kyt9YCwgXCIkXCIpO1xuXHRcdFx0fSxcblx0XHRcdHRydWVcblx0XHQpO1xuXHRcdGFsbFBhcnRzLnVuc2hpZnQoY29uc3RhbnQoSlNPTi5zdHJpbmdpZnkobXlJZkVsc2VFeHByZXNzaW9uKSkpO1xuXHRcdHJldHVybiBmb3JtYXRSZXN1bHQoYWxsUGFydHMsIFwic2FwLmZlLmNvcmUuZm9ybWF0dGVycy5TdGFuZGFyZEZvcm1hdHRlciNldmFsdWF0ZUNvbXBsZXhFeHByZXNzaW9uXCIsIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHRfdHlwZTogXCJJZkVsc2VcIixcblx0XHRjb25kaXRpb246IGNvbmRpdGlvbkV4cHJlc3Npb24sXG5cdFx0b25UcnVlOiBvblRydWVFeHByZXNzaW9uLFxuXHRcdG9uRmFsc2U6IG9uRmFsc2VFeHByZXNzaW9uXG5cdH07XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGN1cnJlbnQgZXhwcmVzc2lvbiBoYXMgYSByZWZlcmVuY2UgdG8gdGhlIGRlZmF1bHQgbW9kZWwgKHVuZGVmaW5lZCkuXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgZXhwcmVzc2lvbiB0byBldmFsdWF0ZVxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZXJlIGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBkZWZhdWx0IGNvbnRleHRcbiAqL1xuZnVuY3Rpb24gaGFzUmVmZXJlbmNlVG9EZWZhdWx0Q29udGV4dChleHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4pOiBib29sZWFuIHtcblx0c3dpdGNoIChleHByZXNzaW9uLl90eXBlKSB7XG5cdFx0Y2FzZSBcIkNvbnN0YW50XCI6XG5cdFx0Y2FzZSBcIkZvcm1hdHRlclwiOlxuXHRcdGNhc2UgXCJDb21wbGV4VHlwZVwiOlxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdGNhc2UgXCJTZXRcIjpcblx0XHRcdHJldHVybiBleHByZXNzaW9uLm9wZXJhbmRzLnNvbWUoaGFzUmVmZXJlbmNlVG9EZWZhdWx0Q29udGV4dCk7XG5cdFx0Y2FzZSBcIlBhdGhJbk1vZGVsXCI6XG5cdFx0XHRyZXR1cm4gZXhwcmVzc2lvbi5tb2RlbE5hbWUgPT09IHVuZGVmaW5lZDtcblx0XHRjYXNlIFwiQ29tcGFyaXNvblwiOlxuXHRcdFx0cmV0dXJuIGhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQoZXhwcmVzc2lvbi5vcGVyYW5kMSkgfHwgaGFzUmVmZXJlbmNlVG9EZWZhdWx0Q29udGV4dChleHByZXNzaW9uLm9wZXJhbmQyKTtcblx0XHRjYXNlIFwiSWZFbHNlXCI6XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KGV4cHJlc3Npb24uY29uZGl0aW9uKSB8fFxuXHRcdFx0XHRoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KGV4cHJlc3Npb24ub25UcnVlKSB8fFxuXHRcdFx0XHRoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KGV4cHJlc3Npb24ub25GYWxzZSlcblx0XHRcdCk7XG5cdFx0Y2FzZSBcIk5vdFwiOlxuXHRcdGNhc2UgXCJUcnV0aHlcIjpcblx0XHRcdHJldHVybiBoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KGV4cHJlc3Npb24ub3BlcmFuZCk7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG4vLyBUaGlzIGlzIG9uZSBjYXNlIHdoZXJlIGFueSBkb2VzIG1ha2Ugc2Vuc2UuLi5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgdHlwZSBGbjxUPiA9ICgoLi4ucGFyYW1zOiBhbnkpID0+IFQgfCBQcm9taXNlPFQ+KSAmIHtcblx0X19mdW5jdGlvbk5hbWU6IHN0cmluZztcbn07XG5cbi8qKlxuICogQHR5cGVkZWYgV3JhcHBlZFR1cGxlXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbi8vIEB0cy1pZ25vcmVcbnR5cGUgV3JhcHBlZFR1cGxlPFQ+ID0geyBbSyBpbiBrZXlvZiBUXTogV3JhcHBlZFR1cGxlPFRbS10+IHwgRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFRbS10+IHwgdW5kZWZpbmVkIH07XG5cbi8vIFNvLCB0aGlzIHdvcmtzIGJ1dCBJIGNhbm5vdCBnZXQgaXQgdG8gY29tcGlsZSA6RCwgYnV0IGl0IHN0aWxsIGRvZXMgd2hhdCBpcyBleHBlY3RlZC4uLlxuXG4vKipcbiAqIEEgZnVuY3Rpb24gcmVmZXJlbmNlIG9yIGEgZnVuY3Rpb24gbmFtZS5cbiAqL1xudHlwZSBGdW5jdGlvbk9yTmFtZTxUPiA9IEZuPFQ+IHwgc3RyaW5nO1xuXG4vKipcbiAqIEZ1bmN0aW9uIHBhcmFtZXRlcnMsIGVpdGhlciBkZXJpdmVkIGZyb20gdGhlIGZ1bmN0aW9uIG9yIGFuIHVudHlwZWQgYXJyYXkuXG4gKi9cbnR5cGUgRnVuY3Rpb25QYXJhbWV0ZXJzPFQsIEYgZXh0ZW5kcyBGdW5jdGlvbk9yTmFtZTxUPj4gPSBGIGV4dGVuZHMgRm48VD4gPyBQYXJhbWV0ZXJzPEY+IDogdW5rbm93bltdO1xuXG4vKipcbiAqIENhbGxzIGEgZm9ybWF0dGVyIGZ1bmN0aW9uIHRvIHByb2Nlc3MgdGhlIHBhcmFtZXRlcnMuXG4gKiBJZiByZXF1aXJlQ29udGV4dCBpcyBzZXQgdG8gdHJ1ZSBhbmQgbm8gY29udGV4dCBpcyBwYXNzZWQgYSBkZWZhdWx0IGNvbnRleHQgd2lsbCBiZSBhZGRlZCBhdXRvbWF0aWNhbGx5LlxuICogQHRlbXBsYXRlIFRcbiAqIEB0ZW1wbGF0ZSBVXG4gKiBAcGFyYW0gcGFyYW1ldGVycyBUaGUgbGlzdCBvZiBwYXJhbWV0ZXIgdGhhdCBzaG91bGQgbWF0Y2ggdGhlIHR5cGUgYW5kIG51bWJlciBvZiB0aGUgZm9ybWF0dGVyIGZ1bmN0aW9uXG4gKiBAcGFyYW0gZm9ybWF0dGVyRnVuY3Rpb24gVGhlIGZ1bmN0aW9uIHRvIGNhbGxcbiAqIEBwYXJhbSBbY29udGV4dEVudGl0eVR5cGVdIElmIG5vIHBhcmFtZXRlciByZWZlcnMgdG8gdGhlIGNvbnRleHQgdGhlbiB3ZSB1c2UgdGhpcyBpbmZvcm1hdGlvbiB0byBhZGQgYSByZWZlcmVuY2UgdG8gdGhlIGtleXMgZnJvbSB0aGUgZW50aXR5IHR5cGUuXG4gKiBAcGFyYW0gW2lnbm9yZUNvbXBsZXhUeXBlXSBXaGV0aGVyIHRvIGlnbm9yZSB0aGUgdHJhbnNnZm9ybWF0aW9uIHRvIHRoZSBTdGFuZGFyZEZvcm1hdHRlciBvciBub3RcbiAqIEByZXR1cm5zIFRoZSBjb3JyZXNwb25kaW5nIGV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFJlc3VsdDxULCBVIGV4dGVuZHMgRm48VD4+KFxuXHRwYXJhbWV0ZXJzOiBXcmFwcGVkVHVwbGU8UGFyYW1ldGVyczxVPj4sXG5cdGZvcm1hdHRlckZ1bmN0aW9uOiBVIHwgc3RyaW5nLFxuXHRjb250ZXh0RW50aXR5VHlwZT86IEVudGl0eVR5cGUsXG5cdGlnbm9yZUNvbXBsZXhUeXBlID0gZmFsc2Vcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPiB7XG5cdGNvbnN0IHBhcmFtZXRlckV4cHJlc3Npb25zID0gKHBhcmFtZXRlcnMgYXMgRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFByaW1pdGl2ZVR5cGU+W10pLm1hcCh3cmFwUHJpbWl0aXZlKTtcblxuXHRpZiAoaGFzVW5yZXNvbHZhYmxlRXhwcmVzc2lvbiguLi5wYXJhbWV0ZXJFeHByZXNzaW9ucykpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjtcblx0fVxuXHRpZiAoY29udGV4dEVudGl0eVR5cGUpIHtcblx0XHQvLyBPdGhlcndpc2UsIGlmIHRoZSBjb250ZXh0IGlzIHJlcXVpcmVkIGFuZCBubyBjb250ZXh0IGlzIHByb3ZpZGVkIG1ha2Ugc3VyZSB0byBhZGQgdGhlIGRlZmF1bHQgYmluZGluZ1xuXHRcdGlmICghcGFyYW1ldGVyRXhwcmVzc2lvbnMuc29tZShoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KSkge1xuXHRcdFx0Y29udGV4dEVudGl0eVR5cGUua2V5cy5mb3JFYWNoKChrZXkpID0+IHBhcmFtZXRlckV4cHJlc3Npb25zLnB1c2gocGF0aEluTW9kZWwoa2V5Lm5hbWUsIFwiXCIpKSk7XG5cdFx0fVxuXHR9XG5cdGxldCBmdW5jdGlvbk5hbWUgPSBcIlwiO1xuXHRpZiAodHlwZW9mIGZvcm1hdHRlckZ1bmN0aW9uID09PSBcInN0cmluZ1wiKSB7XG5cdFx0ZnVuY3Rpb25OYW1lID0gZm9ybWF0dGVyRnVuY3Rpb247XG5cdH0gZWxzZSB7XG5cdFx0ZnVuY3Rpb25OYW1lID0gZm9ybWF0dGVyRnVuY3Rpb24uX19mdW5jdGlvbk5hbWU7XG5cdH1cblx0Ly8gRm9ybWF0dGVyTmFtZSBjYW4gYmUgb2YgZm9ybWF0IHNhcC5mZS5jb3JlLnh4eCNtZXRob2ROYW1lIHRvIGhhdmUgbXVsdGlwbGUgZm9ybWF0dGVyIGluIG9uZSBjbGFzc1xuXHRjb25zdCBbZm9ybWF0dGVyQ2xhc3MsIGZvcm1hdHRlck5hbWVdID0gZnVuY3Rpb25OYW1lLnNwbGl0KFwiI1wiKTtcblxuXHQvLyBJbiBzb21lIGNhc2Ugd2UgYWxzbyBjYW5ub3QgY2FsbCBkaXJlY3RseSBhIGZ1bmN0aW9uIGJlY2F1c2Ugb2YgdG9vIGNvbXBsZXggaW5wdXQsIGluIHRoYXQgY2FzZSB3ZSBuZWVkIHRvIGNvbnZlcnQgdG8gYSBzaW1wbGVyIGZ1bmN0aW9uIGNhbGxcblx0aWYgKFxuXHRcdCFpZ25vcmVDb21wbGV4VHlwZSAmJlxuXHRcdChwYXJhbWV0ZXJFeHByZXNzaW9ucy5zb21lKGlzQ29tcGxleFR5cGVFeHByZXNzaW9uKSB8fFxuXHRcdFx0cGFyYW1ldGVyRXhwcmVzc2lvbnMuc29tZShpc0NvbmNhdEV4cHJlc3Npb24pIHx8XG5cdFx0XHRwYXJhbWV0ZXJFeHByZXNzaW9ucy5zb21lKGlzSWZFbHNlRXhwcmVzc2lvbikpXG5cdCkge1xuXHRcdGxldCBwYXRoSWR4ID0gMDtcblx0XHRjb25zdCBteUZvcm1hdEV4cHJlc3Npb24gPSBmb3JtYXRSZXN1bHQocGFyYW1ldGVyRXhwcmVzc2lvbnMsIGZ1bmN0aW9uTmFtZSwgdW5kZWZpbmVkLCB0cnVlKTtcblx0XHRjb25zdCBhbGxQYXJ0cyA9IFtdO1xuXHRcdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0bXlGb3JtYXRFeHByZXNzaW9uLFxuXHRcdFx0XCJQYXRoSW5Nb2RlbFwiLFxuXHRcdFx0KGNvbnN0YW50UGF0aDogUGF0aEluTW9kZWxFeHByZXNzaW9uPHVua25vd24+KSA9PiB7XG5cdFx0XHRcdGFsbFBhcnRzLnB1c2goY29uc3RhbnRQYXRoKTtcblx0XHRcdFx0cmV0dXJuIHBhdGhJbk1vZGVsKGAkJHtwYXRoSWR4Kyt9YCwgXCIkXCIpO1xuXHRcdFx0fSxcblx0XHRcdHRydWVcblx0XHQpO1xuXHRcdGFsbFBhcnRzLnVuc2hpZnQoY29uc3RhbnQoSlNPTi5zdHJpbmdpZnkobXlGb3JtYXRFeHByZXNzaW9uKSkpO1xuXHRcdHJldHVybiBmb3JtYXRSZXN1bHQoYWxsUGFydHMsIFwic2FwLmZlLmNvcmUuZm9ybWF0dGVycy5TdGFuZGFyZEZvcm1hdHRlciNldmFsdWF0ZUNvbXBsZXhFeHByZXNzaW9uXCIsIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cdH0gZWxzZSBpZiAoISFmb3JtYXR0ZXJOYW1lICYmIGZvcm1hdHRlck5hbWUubGVuZ3RoID4gMCkge1xuXHRcdHBhcmFtZXRlckV4cHJlc3Npb25zLnVuc2hpZnQoY29uc3RhbnQoZm9ybWF0dGVyTmFtZSkpO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRfdHlwZTogXCJGb3JtYXR0ZXJcIixcblx0XHRmbjogZm9ybWF0dGVyQ2xhc3MsXG5cdFx0cGFyYW1ldGVyczogcGFyYW1ldGVyRXhwcmVzc2lvbnNcblx0fTtcbn1cblxudHlwZSBCaW5kaW5nQ29uc3RyYWludHMgPSB7XG5cdHNjYWxlPzogbnVtYmVyO1xuXHRwcmVjaXNpb24/OiBudW1iZXI7XG5cdG1heExlbmd0aD86IG51bWJlcjtcblx0bnVsbGFibGU/OiBib29sZWFuO1xuXHRtaW5pbXVtPzogc3RyaW5nO1xuXHRtYXhpbXVtPzogc3RyaW5nO1xuXHRpc0RpZ2l0U2VxdWVuY2U/OiBib29sZWFuO1xuXHRWND86IGJvb2xlYW47XG59O1xuZXhwb3J0IGZ1bmN0aW9uIHNldFVwQ29uc3RyYWludHModGFyZ2V0TWFwcGluZzogVHlwZU1hcHBpbmdEZWZpbml0aW9uLCBwcm9wZXJ0eTogUHJvcGVydHkgfCBBY3Rpb25QYXJhbWV0ZXIpOiBCaW5kaW5nQ29uc3RyYWludHMge1xuXHRjb25zdCBjb25zdHJhaW50czogQmluZGluZ0NvbnN0cmFpbnRzID0ge307XG5cdGlmICh0YXJnZXRNYXBwaW5nPy5jb25zdHJhaW50cz8uJFNjYWxlICYmIHByb3BlcnR5LnNjYWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRjb25zdHJhaW50cy5zY2FsZSA9IHByb3BlcnR5LnNjYWxlO1xuXHR9XG5cdGlmICh0YXJnZXRNYXBwaW5nPy5jb25zdHJhaW50cz8uJFByZWNpc2lvbiAmJiBwcm9wZXJ0eS5wcmVjaXNpb24gIT09IHVuZGVmaW5lZCkge1xuXHRcdGNvbnN0cmFpbnRzLnByZWNpc2lvbiA9IHByb3BlcnR5LnByZWNpc2lvbjtcblx0fVxuXHRpZiAodGFyZ2V0TWFwcGluZz8uY29uc3RyYWludHM/LiRNYXhMZW5ndGggJiYgcHJvcGVydHkubWF4TGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcblx0XHRjb25zdHJhaW50cy5tYXhMZW5ndGggPSBwcm9wZXJ0eS5tYXhMZW5ndGg7XG5cdH1cblx0aWYgKHByb3BlcnR5Lm51bGxhYmxlID09PSBmYWxzZSkge1xuXHRcdGNvbnN0cmFpbnRzLm51bGxhYmxlID0gZmFsc2U7XG5cdH1cblx0aWYgKHRhcmdldE1hcHBpbmc/LmNvbnN0cmFpbnRzPy5bXCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWluaW11bS8kRGVjaW1hbFwiXSAmJiAhaXNOYU4ocHJvcGVydHkuYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1pbmltdW0pKSB7XG5cdFx0Y29uc3RyYWludHMubWluaW11bSA9IGAke3Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtfWA7XG5cdH1cblx0aWYgKHRhcmdldE1hcHBpbmc/LmNvbnN0cmFpbnRzPy5bXCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWF4aW11bS8kRGVjaW1hbFwiXSAmJiAhaXNOYU4ocHJvcGVydHkuYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1heGltdW0pKSB7XG5cdFx0Y29uc3RyYWludHMubWF4aW11bSA9IGAke3Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtfWA7XG5cdH1cblx0aWYgKFxuXHRcdHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LklzRGlnaXRTZXF1ZW5jZSAmJlxuXHRcdHRhcmdldE1hcHBpbmcudHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIiAmJlxuXHRcdHRhcmdldE1hcHBpbmc/LmNvbnN0cmFpbnRzPy5bXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRGlnaXRTZXF1ZW5jZVwiXVxuXHQpIHtcblx0XHRjb25zdHJhaW50cy5pc0RpZ2l0U2VxdWVuY2UgPSB0cnVlO1xuXHR9XG5cdGlmICh0YXJnZXRNYXBwaW5nPy5jb25zdHJhaW50cz8uJFY0KSB7XG5cdFx0Y29uc3RyYWludHMuVjQgPSB0cnVlO1xuXHR9XG5cdHJldHVybiBjb25zdHJhaW50cztcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHByb3BlcnR5LCBhbmQgc2V0cyB1cCB0aGUgZm9ybWF0T3B0aW9ucyBhbmQgY29uc3RyYWludHMuXG4gKiBAcGFyYW0gcHJvcGVydHkgVGhlIFByb3BlcnR5IGZvciB3aGljaCB3ZSBhcmUgc2V0dGluZyB1cCB0aGUgYmluZGluZ1xuICogQHBhcmFtIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gVGhlIEJpbmRpbmdFeHByZXNzaW9uIG9mIHRoZSBwcm9wZXJ0eSBhYm92ZS4gU2VydmVzIGFzIHRoZSBiYXNpcyB0byB3aGljaCBpbmZvcm1hdGlvbiBjYW4gYmUgYWRkZWRcbiAqIEBwYXJhbSBpZ25vcmVDb25zdHJhaW50cyBJZ25vcmUgY29uc3RyYWludHMgb2YgdGhlIHByb3BlcnR5XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgcHJvcGVydHkgd2l0aCBmb3JtYXRPcHRpb25zIGFuZCBjb25zdHJhaW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbjxUPihcblx0cHJvcGVydHk6IFByb3BlcnR5IHwgQWN0aW9uUGFyYW1ldGVyLFxuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPixcblx0aWdub3JlQ29uc3RyYWludHMgPSBmYWxzZVxuKTogUGF0aEluTW9kZWxFeHByZXNzaW9uPFQ+IHtcblx0Y29uc3Qgb3V0RXhwcmVzc2lvbjogUGF0aEluTW9kZWxFeHByZXNzaW9uPHVua25vd24+ID0gcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiBhcyBQYXRoSW5Nb2RlbEV4cHJlc3Npb248dW5rbm93bj47XG5cdGlmIChwcm9wZXJ0eS5fdHlwZSAhPT0gXCJQcm9wZXJ0eVwiICYmIHByb3BlcnR5Ll90eXBlICE9PSBcIkFjdGlvblBhcmFtZXRlclwiKSB7XG5cdFx0cmV0dXJuIG91dEV4cHJlc3Npb247XG5cdH1cblx0Y29uc3QgdGFyZ2V0TWFwcGluZyA9IEVETV9UWVBFX01BUFBJTkdbcHJvcGVydHkudHlwZV07XG5cdGlmICghdGFyZ2V0TWFwcGluZykge1xuXHRcdHJldHVybiBvdXRFeHByZXNzaW9uO1xuXHR9XG5cdGlmICghb3V0RXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zKSB7XG5cdFx0b3V0RXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zID0ge307XG5cdH1cblx0b3V0RXhwcmVzc2lvbi5jb25zdHJhaW50cyA9IHt9O1xuXG5cdG91dEV4cHJlc3Npb24udHlwZSA9IHRhcmdldE1hcHBpbmcudHlwZTtcblx0aWYgKCFpZ25vcmVDb25zdHJhaW50cykge1xuXHRcdG91dEV4cHJlc3Npb24uY29uc3RyYWludHMgPSBzZXRVcENvbnN0cmFpbnRzKHRhcmdldE1hcHBpbmcsIHByb3BlcnR5KTtcblx0fVxuXG5cdGlmIChcblx0XHQob3V0RXhwcmVzc2lvbj8udHlwZT8uaW5kZXhPZihcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludFwiKSA9PT0gMCAmJiBvdXRFeHByZXNzaW9uPy50eXBlICE9PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludDY0XCIpIHx8XG5cdFx0b3V0RXhwcmVzc2lvbj8udHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Eb3VibGVcIlxuXHQpIHtcblx0XHRvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucywge1xuXHRcdFx0cGFyc2VBc1N0cmluZzogZmFsc2Vcblx0XHR9KTtcblx0fVxuXHRpZiAob3V0RXhwcmVzc2lvbi50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiICYmIGlzUHJvcGVydHkocHJvcGVydHkpKSB7XG5cdFx0aWYgKG91dEV4cHJlc3Npb24uY29uc3RyYWludHM/LmlzRGlnaXRTZXF1ZW5jZSB8fCAob3V0RXhwcmVzc2lvbi5jb25zdHJhaW50cz8ubnVsbGFibGUgIT09IGZhbHNlICYmIHByb3BlcnR5Lm51bGxhYmxlID09PSB0cnVlKSkge1xuXHRcdFx0b3V0RXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zLnBhcnNlS2VlcHNFbXB0eVN0cmluZyA9IGZhbHNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMucGFyc2VLZWVwc0VtcHR5U3RyaW5nID0gdHJ1ZTtcblx0XHR9XG5cdFx0Y29uc3QgZmlzY2FsVHlwZSA9IGdldEZpc2NhbFR5cGUocHJvcGVydHkpO1xuXHRcdGlmIChmaXNjYWxUeXBlKSB7XG5cdFx0XHRvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMuZmlzY2FsVHlwZSA9IGZpc2NhbFR5cGU7XG5cdFx0XHRvdXRFeHByZXNzaW9uLnR5cGUgPSBcInNhcC5mZS5jb3JlLnR5cGUuRmlzY2FsRGF0ZVwiO1xuXHRcdH1cblx0fVxuXHRjb25zdCB0eXBlc1N1cHBvcnRpbmdQYXJzZUVtcHR5VmFsdWVUb1plcm8gPSBbXG5cdFx0XCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnQxNlwiLFxuXHRcdFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50MzJcIixcblx0XHRcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludDY0XCIsXG5cdFx0XCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TaW5nbGVcIixcblx0XHRcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRvdWJsZVwiLFxuXHRcdFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRGVjaW1hbFwiLFxuXHRcdFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuQnl0ZVwiLFxuXHRcdFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU0J5dGVcIlxuXHRdO1xuXHRpZiAoXG5cdFx0b3V0RXhwcmVzc2lvbi5jb25zdHJhaW50cz8ubnVsbGFibGUgPT09IGZhbHNlICYmXG5cdFx0b3V0RXhwcmVzc2lvbi50eXBlICYmXG5cdFx0dHlwZXNTdXBwb3J0aW5nUGFyc2VFbXB0eVZhbHVlVG9aZXJvLmluY2x1ZGVzKG91dEV4cHJlc3Npb24udHlwZSlcblx0KSB7XG5cdFx0b3V0RXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zID0gT2JqZWN0LmFzc2lnbihvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMsIHtcblx0XHRcdHBhcnNlRW1wdHlWYWx1ZVRvWmVybzogdHJ1ZVxuXHRcdH0pO1xuXHR9XG5cdGlmIChcblx0XHRvdXRFeHByZXNzaW9uLmNvbnN0cmFpbnRzPy5udWxsYWJsZSAhPT0gZmFsc2UgJiZcblx0XHQob3V0RXhwcmVzc2lvbi50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludDY0XCIgfHwgb3V0RXhwcmVzc2lvbi50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRlY2ltYWxcIilcblx0KSB7XG5cdFx0b3V0RXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zID0gT2JqZWN0LmFzc2lnbihvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMsIHtcblx0XHRcdGVtcHR5U3RyaW5nOiBcIlwiXG5cdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4gb3V0RXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IGNvbnN0IGdldEZpc2NhbFR5cGUgPSBmdW5jdGlvbiAocHJvcGVydHk6IFByb3BlcnR5KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LklzRmlzY2FsWWVhcikge1xuXHRcdHJldHVybiBDb21tb25Bbm5vdGF0aW9uVGVybXMuSXNGaXNjYWxZZWFyO1xuXHR9XG5cdGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc0Zpc2NhbFBlcmlvZCkge1xuXHRcdHJldHVybiBDb21tb25Bbm5vdGF0aW9uVGVybXMuSXNGaXNjYWxQZXJpb2Q7XG5cdH1cblx0aWYgKHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LklzRmlzY2FsWWVhclBlcmlvZCkge1xuXHRcdHJldHVybiBDb21tb25Bbm5vdGF0aW9uVGVybXMuSXNGaXNjYWxZZWFyUGVyaW9kO1xuXHR9XG5cdGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc0Zpc2NhbFF1YXJ0ZXIpIHtcblx0XHRyZXR1cm4gQ29tbW9uQW5ub3RhdGlvblRlcm1zLklzRmlzY2FsUXVhcnRlcjtcblx0fVxuXHRpZiAocHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNGaXNjYWxZZWFyUXVhcnRlcikge1xuXHRcdHJldHVybiBDb21tb25Bbm5vdGF0aW9uVGVybXMuSXNGaXNjYWxZZWFyUXVhcnRlcjtcblx0fVxuXHRpZiAocHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNGaXNjYWxXZWVrKSB7XG5cdFx0cmV0dXJuIENvbW1vbkFubm90YXRpb25UZXJtcy5Jc0Zpc2NhbFdlZWs7XG5cdH1cblx0aWYgKHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LklzRmlzY2FsWWVhcldlZWspIHtcblx0XHRyZXR1cm4gQ29tbW9uQW5ub3RhdGlvblRlcm1zLklzRmlzY2FsWWVhcldlZWs7XG5cdH1cblx0aWYgKHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LklzRGF5T2ZGaXNjYWxZZWFyKSB7XG5cdFx0cmV0dXJuIENvbW1vbkFubm90YXRpb25UZXJtcy5Jc0RheU9mRmlzY2FsWWVhcjtcblx0fVxufTtcblxuLyoqXG4gKiBDYWxscyBhIGNvbXBsZXggdHlwZSB0byBwcm9jZXNzIHRoZSBwYXJhbWV0ZXJzLlxuICogSWYgcmVxdWlyZUNvbnRleHQgaXMgc2V0IHRvIHRydWUgYW5kIG5vIGNvbnRleHQgaXMgcGFzc2VkLCBhIGRlZmF1bHQgY29udGV4dCB3aWxsIGJlIGFkZGVkIGF1dG9tYXRpY2FsbHkuXG4gKiBAdGVtcGxhdGUgVFxuICogQHRlbXBsYXRlIFVcbiAqIEBwYXJhbSBwYXJhbWV0ZXJzIFRoZSBsaXN0IG9mIHBhcmFtZXRlcnMgdGhhdCBzaG91bGQgbWF0Y2ggdGhlIHR5cGUgZm9yIHRoZSBjb21wbGV4IHR5cGU9XG4gKiBAcGFyYW0gdHlwZSBUaGUgY29tcGxleCB0eXBlIHRvIHVzZVxuICogQHBhcmFtIFtjb250ZXh0RW50aXR5VHlwZV0gVGhlIGNvbnRleHQgZW50aXR5IHR5cGUgdG8gY29uc2lkZXJcbiAqIEBwYXJhbSBvRm9ybWF0T3B0aW9uc1xuICogQHBhcmFtIG9Db25zdHJhaW50T3B0aW9uc1xuICogQHJldHVybnMgVGhlIGNvcnJlc3BvbmRpbmcgZXhwcmVzc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkVHlwZUluZm9ybWF0aW9uPFQsIFUgZXh0ZW5kcyBGbjxUPj4oXG5cdHBhcmFtZXRlcnM6IFdyYXBwZWRUdXBsZTxQYXJhbWV0ZXJzPFU+Pixcblx0dHlwZTogc3RyaW5nLFxuXHRjb250ZXh0RW50aXR5VHlwZT86IEVudGl0eVR5cGUsXG5cdG9Gb3JtYXRPcHRpb25zPzogQ29tcGxleFR5cGVGb3JtYXRPcHRpb25zLFxuXHRvQ29uc3RyYWludE9wdGlvbnM/OiBDb21wbGV4VHlwZUNvbnN0cmFpbnRPcHRpb25zXG4pOiBVbnJlc29sdmFibGVQYXRoRXhwcmVzc2lvbiB8IENvbXBsZXhUeXBlRXhwcmVzc2lvbjxUPiB8IENvbnN0YW50RXhwcmVzc2lvbjxUPiB7XG5cdGNvbnN0IHBhcmFtZXRlckV4cHJlc3Npb25zID0gKHBhcmFtZXRlcnMgYXMgRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFByaW1pdGl2ZVR5cGU+W10pLm1hcCh3cmFwUHJpbWl0aXZlKTtcblx0aWYgKGhhc1VucmVzb2x2YWJsZUV4cHJlc3Npb24oLi4ucGFyYW1ldGVyRXhwcmVzc2lvbnMpKSB7XG5cdFx0cmV0dXJuIHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG5cdH1cblx0Ly8gSWYgdGhlcmUgaXMgb25seSBvbmUgcGFyYW1ldGVyIGFuZCBpdCBpcyBhIGNvbnN0YW50IGFuZCB3ZSBkb24ndCBleHBlY3QgdGhlIGNvbnRleHQgdGhlbiByZXR1cm4gdGhlIGNvbnN0YW50XG5cdGlmIChwYXJhbWV0ZXJFeHByZXNzaW9ucy5sZW5ndGggPT09IDEgJiYgaXNDb25zdGFudChwYXJhbWV0ZXJFeHByZXNzaW9uc1swXSkgJiYgIWNvbnRleHRFbnRpdHlUeXBlKSB7XG5cdFx0cmV0dXJuIHBhcmFtZXRlckV4cHJlc3Npb25zWzBdIGFzIENvbnN0YW50RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChjb250ZXh0RW50aXR5VHlwZSkge1xuXHRcdC8vIE90aGVyd2lzZSwgaWYgdGhlIGNvbnRleHQgaXMgcmVxdWlyZWQgYW5kIG5vIGNvbnRleHQgaXMgcHJvdmlkZWQgbWFrZSBzdXJlIHRvIGFkZCB0aGUgZGVmYXVsdCBiaW5kaW5nXG5cdFx0aWYgKCFwYXJhbWV0ZXJFeHByZXNzaW9ucy5zb21lKGhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQpKSB7XG5cdFx0XHRjb250ZXh0RW50aXR5VHlwZS5rZXlzLmZvckVhY2goKGtleSkgPT4gcGFyYW1ldGVyRXhwcmVzc2lvbnMucHVzaChwYXRoSW5Nb2RlbChrZXkubmFtZSwgXCJcIikpKTtcblx0XHR9XG5cdH1cblx0b0Zvcm1hdE9wdGlvbnMgPSBfZ2V0Q29tcGxleFR5cGVGb3JtYXRPcHRpb25zRnJvbUZpcnN0UGFyYW0ocGFyYW1ldGVyc1swXSwgb0Zvcm1hdE9wdGlvbnMpO1xuXG5cdGlmICh0eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlVuaXRcIikge1xuXHRcdGNvbnN0IHVvbVBhdGggPSBwYXRoSW5Nb2RlbChcIi8jI0BAcmVxdWVzdFVuaXRzT2ZNZWFzdXJlXCIpO1xuXHRcdHVvbVBhdGgudGFyZ2V0VHlwZSA9IFwiYW55XCI7XG5cdFx0dW9tUGF0aC5tb2RlID0gXCJPbmVUaW1lXCI7XG5cdFx0cGFyYW1ldGVyRXhwcmVzc2lvbnMucHVzaCh1b21QYXRoKTtcblx0fSBlbHNlIGlmICh0eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkN1cnJlbmN5XCIpIHtcblx0XHRjb25zdCBjdXJyZW5jeVBhdGggPSBwYXRoSW5Nb2RlbChcIi8jI0BAcmVxdWVzdEN1cnJlbmN5Q29kZXNcIik7XG5cdFx0Y3VycmVuY3lQYXRoLnRhcmdldFR5cGUgPSBcImFueVwiO1xuXHRcdGN1cnJlbmN5UGF0aC5tb2RlID0gXCJPbmVUaW1lXCI7XG5cdFx0cGFyYW1ldGVyRXhwcmVzc2lvbnMucHVzaChjdXJyZW5jeVBhdGgpO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRfdHlwZTogXCJDb21wbGV4VHlwZVwiLFxuXHRcdHR5cGU6IHR5cGUsXG5cdFx0Zm9ybWF0T3B0aW9uczogb0Zvcm1hdE9wdGlvbnMgfHwge30sXG5cdFx0Y29uc3RyYWludHM6IG9Db25zdHJhaW50T3B0aW9ucyB8fCB7fSxcblx0XHRwYXJhbWV0ZXJzOiB7fSxcblx0XHRiaW5kaW5nUGFyYW1ldGVyczogcGFyYW1ldGVyRXhwcmVzc2lvbnNcblx0fTtcbn1cblxudHlwZSBDb21wbGV4VHlwZUZvcm1hdE9wdGlvbnMgPSB7XG5cdHNob3dOdW1iZXI/OiBib29sZWFuO1xuXHRzaG93TWVhc3VyZT86IGJvb2xlYW47XG5cdHBhcnNlQXNTdHJpbmc/OiBib29sZWFuO1xuXHRwYXJzZUtlZXBzRW1wdHlTdHJpbmc/OiBib29sZWFuO1xuXHRlbXB0eVN0cmluZz86IHN0cmluZyB8IG51bWJlciB8IG51bGw7XG5cdHNob3dUaW1lPzogYm9vbGVhbjtcblx0c2hvd0RhdGU/OiBib29sZWFuO1xuXHRzaG93VGltZXpvbmU/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQ29tcGxleFR5cGVDb25zdHJhaW50T3B0aW9ucyA9IHtcblx0c2tpcERlY2ltYWxzVmFsaWRhdGlvbj86IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIFByb2Nlc3MgdGhlIGZvcm1hdE9wdGlvbnMgZm9yIGEgY29tcGxleFR5cGUgYmFzZWQgb24gdGhlIGZpcnN0IHBhcmFtZXRlci5cbiAqIEBwYXJhbSBwYXJhbSBUaGUgZmlyc3QgcGFyYW1ldGVyIG9mIHRoZSBjb21wbGV4IHR5cGVcbiAqIEBwYXJhbSBmb3JtYXRPcHRpb25zIEluaXRpYWwgZm9ybWF0T3B0aW9uc1xuICogQHJldHVybnMgVGhlIG1vZGlmaWVkIGZvcm1hdE9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gX2dldENvbXBsZXhUeXBlRm9ybWF0T3B0aW9uc0Zyb21GaXJzdFBhcmFtPFQsIFUgZXh0ZW5kcyBGbjxUPj4oXG5cdHBhcmFtOiBQYXJhbWV0ZXJzPFU+LFxuXHRmb3JtYXRPcHRpb25zOiB1bmRlZmluZWQgfCBDb21wbGV4VHlwZUZvcm1hdE9wdGlvbnNcbik6IENvbXBsZXhUeXBlRm9ybWF0T3B0aW9ucyB8IHVuZGVmaW5lZCB7XG5cdC8vIGlmIHNob3dNZWFzdXJlIGlzIHNldCB0byBmYWxzZSB3ZSB3YW50IHRvIG5vdCBwYXJzZSBhcyBzdHJpbmcgdG8gc2VlIHRoZSAwXG5cdC8vIHdlIGRvIHRoYXQgYWxzbyBmb3IgYWxsIGJpbmRpbmdzIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZSBtZGMgRmllbGQgaXNuJ3QgZWRpdGFibGVcblx0aWYgKFxuXHRcdCEoZm9ybWF0T3B0aW9ucyAmJiBmb3JtYXRPcHRpb25zLnNob3dOdW1iZXIgPT09IGZhbHNlKSAmJlxuXHRcdChwYXJhbT8udHlwZT8uaW5kZXhPZihcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludFwiKSA9PT0gMCB8fFxuXHRcdFx0cGFyYW0/LnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRGVjaW1hbFwiIHx8XG5cdFx0XHRwYXJhbT8udHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Eb3VibGVcIilcblx0KSB7XG5cdFx0aWYgKHBhcmFtPy50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludDY0XCIgfHwgcGFyYW0/LnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRGVjaW1hbFwiKSB7XG5cdFx0XHQvL3NhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludDY0IGRvIG5vdCBzdXBwb3J0IHBhcnNlQXNTdHJpbmcgZmFsc2Vcblx0XHRcdGZvcm1hdE9wdGlvbnMgPSBmb3JtYXRPcHRpb25zPy5zaG93TWVhc3VyZSA9PT0gZmFsc2UgPyB7IHNob3dNZWFzdXJlOiBmYWxzZSB9IDoge307XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvcm1hdE9wdGlvbnMgPSBmb3JtYXRPcHRpb25zPy5zaG93TWVhc3VyZSA9PT0gZmFsc2UgPyB7IHBhcnNlQXNTdHJpbmc6IGZhbHNlLCBzaG93TWVhc3VyZTogZmFsc2UgfSA6IHsgcGFyc2VBc1N0cmluZzogZmFsc2UgfTtcblx0XHR9XG5cdFx0aWYgKHBhcmFtPy5jb25zdHJhaW50cz8ubnVsbGFibGUgIT09IGZhbHNlKSB7XG5cdFx0XHRmb3JtYXRPcHRpb25zLmVtcHR5U3RyaW5nID0gbnVsbDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9ybWF0T3B0aW9ucy5lbXB0eVN0cmluZyA9IFwiXCI7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBmb3JtYXRPcHRpb25zO1xufVxuLyoqXG4gKiBGdW5jdGlvbiBjYWxsLCBvcHRpb25hbGx5IHdpdGggYXJndW1lbnRzLlxuICogQHBhcmFtIGZ1bmMgRnVuY3Rpb24gbmFtZSBvciByZWZlcmVuY2UgdG8gZnVuY3Rpb25cbiAqIEBwYXJhbSBwYXJhbWV0ZXJzIEFyZ3VtZW50c1xuICogQHBhcmFtIG9uIE9iamVjdCB0byBjYWxsIHRoZSBmdW5jdGlvbiBvblxuICogQHBhcmFtIGlzRm9ybWF0dGluZ0ZuXG4gKiBAcmV0dXJucyBFeHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgZnVuY3Rpb24gY2FsbCAobm90IHRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uIGNhbGwhKVxuICovXG5leHBvcnQgZnVuY3Rpb24gZm48VCwgVSBleHRlbmRzIEZ1bmN0aW9uT3JOYW1lPFQ+Pihcblx0ZnVuYzogVSxcblx0cGFyYW1ldGVyczogV3JhcHBlZFR1cGxlPEZ1bmN0aW9uUGFyYW1ldGVyczxULCBVPj4sXG5cdG9uPzogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPG9iamVjdD4sXG5cdGlzRm9ybWF0dGluZ0ZuID0gZmFsc2Vcbik6IEZ1bmN0aW9uRXhwcmVzc2lvbjxUPiB7XG5cdGNvbnN0IGZ1bmN0aW9uTmFtZSA9IHR5cGVvZiBmdW5jID09PSBcInN0cmluZ1wiID8gZnVuYyA6IGZ1bmMuX19mdW5jdGlvbk5hbWU7XG5cdHJldHVybiB7XG5cdFx0X3R5cGU6IFwiRnVuY3Rpb25cIixcblx0XHRvYmo6IG9uICE9PSB1bmRlZmluZWQgPyB3cmFwUHJpbWl0aXZlKG9uKSA6IHVuZGVmaW5lZCxcblx0XHRmbjogZnVuY3Rpb25OYW1lLFxuXHRcdGlzRm9ybWF0dGluZ0ZuOiBpc0Zvcm1hdHRpbmdGbixcblx0XHRwYXJhbWV0ZXJzOiAocGFyYW1ldGVycyBhcyBFeHByZXNzaW9uT3JQcmltaXRpdmU8UHJpbWl0aXZlVHlwZT5bXSkubWFwKHdyYXBQcmltaXRpdmUpXG5cdH07XG59XG5cbi8qKlxuICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGlmIGEgYmluZGluZyB2YWx1ZSBpcyBudWxsLCB1bmRlZmluZWQgb3IgZW1wdHkuXG4gKiBAcGFyYW0gZXhwcmVzc2lvblxuICogQHJldHVybnMgQSBCb29sZWFuIGV4cHJlc3Npb24gZXZhbHVhdGluZyB0aGUgZmFjdCB0aGF0IHRoZSBjdXJyZW50IGVsZW1lbnQgaXMgZW1wdHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHkoZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBhQmluZGluZ3M6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPltdID0gW107XG5cdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KGV4cHJlc3Npb24sIFwiUGF0aEluTW9kZWxcIiwgKGV4cHIpID0+IHtcblx0XHRjb25zdCBmaW5hbEV4cHJlc3Npb24gPSB7IC4uLmV4cHIsIGFsd2F5c0tlZXBUYXJnZXRUeXBlOiB0cnVlIH0gYXMgUGF0aEluTW9kZWxFeHByZXNzaW9uPHN0cmluZz47XG5cdFx0YUJpbmRpbmdzLnB1c2gob3IoZXF1YWwoZmluYWxFeHByZXNzaW9uLCBcIlwiKSwgZXF1YWwoZXhwciwgdW5kZWZpbmVkKSwgZXF1YWwoZXhwciwgbnVsbCkpKTtcblx0XHRyZXR1cm4gZXhwcjtcblx0fSk7XG5cdHJldHVybiBhbmQoLi4uYUJpbmRpbmdzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNhdCguLi5pbkV4cHJlc3Npb25zOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8c3RyaW5nPltdKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRjb25zdCBleHByZXNzaW9ucyA9IGluRXhwcmVzc2lvbnMubWFwKHdyYXBQcmltaXRpdmUpO1xuXHRpZiAoaGFzVW5yZXNvbHZhYmxlRXhwcmVzc2lvbiguLi5leHByZXNzaW9ucykpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjtcblx0fVxuXHRpZiAoZXhwcmVzc2lvbnMuZXZlcnkoaXNDb25zdGFudCkpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoXG5cdFx0XHRleHByZXNzaW9ucy5yZWR1Y2UoKGNvbmNhdGVuYXRlZDogc3RyaW5nLCB2YWx1ZSkgPT4ge1xuXHRcdFx0XHRpZiAodmFsdWUudmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS52YWx1ZSAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdHJldHVybiBjb25jYXRlbmF0ZWQgKyB2YWx1ZS52YWx1ZS50b1N0cmluZygpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBjb25jYXRlbmF0ZWQ7XG5cdFx0XHR9LCBcIlwiKVxuXHRcdCk7XG5cdH0gZWxzZSBpZiAoZXhwcmVzc2lvbnMuc29tZShpc0NvbXBsZXhUeXBlRXhwcmVzc2lvbikpIHtcblx0XHRsZXQgcGF0aElkeCA9IDA7XG5cdFx0Y29uc3QgbXlDb25jYXRFeHByZXNzaW9uID0gZm9ybWF0UmVzdWx0KGV4cHJlc3Npb25zLCBcInNhcC5mZS5jb3JlLmZvcm1hdHRlcnMuU3RhbmRhcmRGb3JtYXR0ZXIjY29uY2F0XCIsIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cdFx0Y29uc3QgYWxsUGFydHMgPSBbXTtcblx0XHR0cmFuc2Zvcm1SZWN1cnNpdmVseShteUNvbmNhdEV4cHJlc3Npb24sIFwiUGF0aEluTW9kZWxcIiwgKGNvbnN0YW50UGF0aDogUGF0aEluTW9kZWxFeHByZXNzaW9uPHVua25vd24+KSA9PiB7XG5cdFx0XHRhbGxQYXJ0cy5wdXNoKGNvbnN0YW50UGF0aCk7XG5cdFx0XHRyZXR1cm4gcGF0aEluTW9kZWwoYCQke3BhdGhJZHgrK31gLCBcIiRcIik7XG5cdFx0fSk7XG5cdFx0YWxsUGFydHMudW5zaGlmdChjb25zdGFudChKU09OLnN0cmluZ2lmeShteUNvbmNhdEV4cHJlc3Npb24pKSk7XG5cdFx0cmV0dXJuIGZvcm1hdFJlc3VsdChhbGxQYXJ0cywgXCJzYXAuZmUuY29yZS5mb3JtYXR0ZXJzLlN0YW5kYXJkRm9ybWF0dGVyI2V2YWx1YXRlQ29tcGxleEV4cHJlc3Npb25cIiwgdW5kZWZpbmVkLCB0cnVlKTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdF90eXBlOiBcIkNvbmNhdFwiLFxuXHRcdGV4cHJlc3Npb25zOiBleHByZXNzaW9uc1xuXHR9O1xufVxuXG50eXBlIEV4cHJlc3Npb25UeXBlVG9FeHByZXNzaW9uPFQgZXh0ZW5kcyBFeHByZXNzaW9uVHlwZSwgVj4gPSBUIGV4dGVuZHMgXCJDb25zdGFudFwiXG5cdD8gQ29uc3RhbnRFeHByZXNzaW9uPFY+XG5cdDogVCBleHRlbmRzIFwiUGF0aEluTW9kZWxcIlxuXHQ/IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxWPlxuXHQ6IFQgZXh0ZW5kcyBcIkZ1bmN0aW9uXCJcblx0PyBGdW5jdGlvbkV4cHJlc3Npb248Vj5cblx0OiBUIGV4dGVuZHMgXCJVbnJlc29sdmFibGVcIlxuXHQ/IFVucmVzb2x2YWJsZVBhdGhFeHByZXNzaW9uXG5cdDogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFY+O1xuXG5leHBvcnQgdHlwZSBUcmFuc2Zvcm1GdW5jdGlvbjxULCBWPiA9IChleHByZXNzaW9uUGFydDogVCkgPT4gQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFY+O1xuZXhwb3J0IHR5cGUgRXhwcmVzc2lvblR5cGUgPSBQaWNrPEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPiwgXCJfdHlwZVwiPltcIl90eXBlXCJdO1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybVJlY3Vyc2l2ZWx5PFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlIHwgdW5rbm93biwgRVQgZXh0ZW5kcyBFeHByZXNzaW9uVHlwZT4oXG5cdGluRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+LFxuXHRleHByZXNzaW9uVHlwZTogRVQsXG5cdHRyYW5zZm9ybUZ1bmN0aW9uOiBUcmFuc2Zvcm1GdW5jdGlvbjxFeHByZXNzaW9uVHlwZVRvRXhwcmVzc2lvbjxFVCwgVD4sIFQ+LFxuXHRpbmNsdWRlQWxsRXhwcmVzc2lvbiA9IGZhbHNlXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4ge1xuXHRsZXQgZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+ID0gaW5FeHByZXNzaW9uO1xuXHRzd2l0Y2ggKGV4cHJlc3Npb24uX3R5cGUpIHtcblx0XHRjYXNlIFwiRnVuY3Rpb25cIjpcblx0XHRjYXNlIFwiRm9ybWF0dGVyXCI6XG5cdFx0XHRleHByZXNzaW9uLnBhcmFtZXRlcnMgPSBleHByZXNzaW9uLnBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIpID0+XG5cdFx0XHRcdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KHBhcmFtZXRlciBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4sIGV4cHJlc3Npb25UeXBlLCB0cmFuc2Zvcm1GdW5jdGlvbiwgaW5jbHVkZUFsbEV4cHJlc3Npb24pXG5cdFx0XHQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkNvbmNhdFwiOlxuXHRcdFx0ZXhwcmVzc2lvbi5leHByZXNzaW9ucyA9IGV4cHJlc3Npb24uZXhwcmVzc2lvbnMubWFwKChzdWJFeHByZXNzaW9uKSA9PlxuXHRcdFx0XHR0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdFx0XHRzdWJFeHByZXNzaW9uLFxuXHRcdFx0XHRcdGV4cHJlc3Npb25UeXBlLFxuXHRcdFx0XHRcdHRyYW5zZm9ybUZ1bmN0aW9uIGFzIHVua25vd24gYXMgVHJhbnNmb3JtRnVuY3Rpb248RXhwcmVzc2lvblR5cGVUb0V4cHJlc3Npb248RVQsIHN0cmluZz4sIHN0cmluZz4sXG5cdFx0XHRcdFx0aW5jbHVkZUFsbEV4cHJlc3Npb25cblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHRcdGV4cHJlc3Npb24gPSBjb25jYXQoLi4uZXhwcmVzc2lvbi5leHByZXNzaW9ucykgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkNvbXBsZXhUeXBlXCI6XG5cdFx0XHRleHByZXNzaW9uLmJpbmRpbmdQYXJhbWV0ZXJzID0gZXhwcmVzc2lvbi5iaW5kaW5nUGFyYW1ldGVycy5tYXAoKGJpbmRpbmdQYXJhbWV0ZXIpID0+XG5cdFx0XHRcdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRcdGJpbmRpbmdQYXJhbWV0ZXIgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+LFxuXHRcdFx0XHRcdGV4cHJlc3Npb25UeXBlLFxuXHRcdFx0XHRcdHRyYW5zZm9ybUZ1bmN0aW9uLFxuXHRcdFx0XHRcdGluY2x1ZGVBbGxFeHByZXNzaW9uXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiSWZFbHNlXCI6XG5cdFx0XHRjb25zdCBvblRydWUgPSB0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdFx0ZXhwcmVzc2lvbi5vblRydWUsXG5cdFx0XHRcdGV4cHJlc3Npb25UeXBlLFxuXHRcdFx0XHR0cmFuc2Zvcm1GdW5jdGlvbiBhcyB1bmtub3duIGFzIFRyYW5zZm9ybUZ1bmN0aW9uPEV4cHJlc3Npb25UeXBlVG9FeHByZXNzaW9uPEVULCB1bmtub3duPiwgdW5rbm93bj4sXG5cdFx0XHRcdGluY2x1ZGVBbGxFeHByZXNzaW9uXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3Qgb25GYWxzZSA9IHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRleHByZXNzaW9uLm9uRmFsc2UsXG5cdFx0XHRcdGV4cHJlc3Npb25UeXBlLFxuXHRcdFx0XHR0cmFuc2Zvcm1GdW5jdGlvbiBhcyB1bmtub3duIGFzIFRyYW5zZm9ybUZ1bmN0aW9uPEV4cHJlc3Npb25UeXBlVG9FeHByZXNzaW9uPEVULCB1bmtub3duPiwgdW5rbm93bj4sXG5cdFx0XHRcdGluY2x1ZGVBbGxFeHByZXNzaW9uXG5cdFx0XHQpO1xuXHRcdFx0bGV0IGNvbmRpdGlvbiA9IGV4cHJlc3Npb24uY29uZGl0aW9uO1xuXHRcdFx0aWYgKGluY2x1ZGVBbGxFeHByZXNzaW9uKSB7XG5cdFx0XHRcdGNvbmRpdGlvbiA9IHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRcdGV4cHJlc3Npb24uY29uZGl0aW9uLFxuXHRcdFx0XHRcdGV4cHJlc3Npb25UeXBlLFxuXHRcdFx0XHRcdHRyYW5zZm9ybUZ1bmN0aW9uIGFzIHVua25vd24gYXMgVHJhbnNmb3JtRnVuY3Rpb248RXhwcmVzc2lvblR5cGVUb0V4cHJlc3Npb248RVQsIGJvb2xlYW4+LCBib29sZWFuPixcblx0XHRcdFx0XHRpbmNsdWRlQWxsRXhwcmVzc2lvblxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0ZXhwcmVzc2lvbiA9IGlmRWxzZShjb25kaXRpb24sIG9uVHJ1ZSwgb25GYWxzZSkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIk5vdFwiOlxuXHRcdFx0aWYgKGluY2x1ZGVBbGxFeHByZXNzaW9uKSB7XG5cdFx0XHRcdGNvbnN0IG9wZXJhbmQgPSB0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdFx0XHRleHByZXNzaW9uLm9wZXJhbmQsXG5cdFx0XHRcdFx0ZXhwcmVzc2lvblR5cGUsXG5cdFx0XHRcdFx0dHJhbnNmb3JtRnVuY3Rpb24gYXMgdW5rbm93biBhcyBUcmFuc2Zvcm1GdW5jdGlvbjxFeHByZXNzaW9uVHlwZVRvRXhwcmVzc2lvbjxFVCwgYm9vbGVhbj4sIGJvb2xlYW4+LFxuXHRcdFx0XHRcdGluY2x1ZGVBbGxFeHByZXNzaW9uXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGV4cHJlc3Npb24gPSBub3Qob3BlcmFuZCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIlRydXRoeVwiOlxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIlNldFwiOlxuXHRcdFx0aWYgKGluY2x1ZGVBbGxFeHByZXNzaW9uKSB7XG5cdFx0XHRcdGNvbnN0IG9wZXJhbmRzID0gZXhwcmVzc2lvbi5vcGVyYW5kcy5tYXAoKG9wZXJhbmQpID0+XG5cdFx0XHRcdFx0dHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRcdFx0XHRvcGVyYW5kLFxuXHRcdFx0XHRcdFx0ZXhwcmVzc2lvblR5cGUsXG5cdFx0XHRcdFx0XHR0cmFuc2Zvcm1GdW5jdGlvbiBhcyB1bmtub3duIGFzIFRyYW5zZm9ybUZ1bmN0aW9uPEV4cHJlc3Npb25UeXBlVG9FeHByZXNzaW9uPEVULCBib29sZWFuPiwgYm9vbGVhbj4sXG5cdFx0XHRcdFx0XHRpbmNsdWRlQWxsRXhwcmVzc2lvblxuXHRcdFx0XHRcdClcblx0XHRcdFx0KTtcblx0XHRcdFx0ZXhwcmVzc2lvbiA9XG5cdFx0XHRcdFx0ZXhwcmVzc2lvbi5vcGVyYXRvciA9PT0gXCJ8fFwiXG5cdFx0XHRcdFx0XHQ/IChvciguLi5vcGVyYW5kcykgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+KVxuXHRcdFx0XHRcdFx0OiAoYW5kKC4uLm9wZXJhbmRzKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4pO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkNvbXBhcmlzb25cIjpcblx0XHRcdGlmIChpbmNsdWRlQWxsRXhwcmVzc2lvbikge1xuXHRcdFx0XHRjb25zdCBvcGVyYW5kMSA9IHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRcdGV4cHJlc3Npb24ub3BlcmFuZDEgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+LFxuXHRcdFx0XHRcdGV4cHJlc3Npb25UeXBlLFxuXHRcdFx0XHRcdHRyYW5zZm9ybUZ1bmN0aW9uLFxuXHRcdFx0XHRcdGluY2x1ZGVBbGxFeHByZXNzaW9uXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IG9wZXJhbmQyID0gdHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRcdFx0ZXhwcmVzc2lvbi5vcGVyYW5kMiBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4sXG5cdFx0XHRcdFx0ZXhwcmVzc2lvblR5cGUsXG5cdFx0XHRcdFx0dHJhbnNmb3JtRnVuY3Rpb24sXG5cdFx0XHRcdFx0aW5jbHVkZUFsbEV4cHJlc3Npb25cblx0XHRcdFx0KTtcblx0XHRcdFx0ZXhwcmVzc2lvbiA9IGNvbXBhcmlzb24oZXhwcmVzc2lvbi5vcGVyYXRvciwgb3BlcmFuZDEsIG9wZXJhbmQyKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiQ29uc3RhbnRcIjpcblx0XHRcdGNvbnN0IGNvbnN0YW50VmFsdWU6IFJlY29yZDxzdHJpbmcsIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPj4gPSBleHByZXNzaW9uLnZhbHVlIGFzIFJlY29yZDxcblx0XHRcdFx0c3RyaW5nLFxuXHRcdFx0XHRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj5cblx0XHRcdD47XG5cdFx0XHRpZiAodHlwZW9mIGNvbnN0YW50VmFsdWUgPT09IFwib2JqZWN0XCIgJiYgY29uc3RhbnRWYWx1ZSkge1xuXHRcdFx0XHRPYmplY3Qua2V5cyhjb25zdGFudFZhbHVlKS5mb3JFYWNoKChrZXkpID0+IHtcblx0XHRcdFx0XHRjb25zdGFudFZhbHVlW2tleV0gPSB0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdFx0XHRcdGNvbnN0YW50VmFsdWVba2V5XSxcblx0XHRcdFx0XHRcdGV4cHJlc3Npb25UeXBlLFxuXHRcdFx0XHRcdFx0dHJhbnNmb3JtRnVuY3Rpb24gYXMgdW5rbm93biBhcyBUcmFuc2Zvcm1GdW5jdGlvbjxFeHByZXNzaW9uVHlwZVRvRXhwcmVzc2lvbjxFVCwgdW5rbm93bj4sIHVua25vd24+LFxuXHRcdFx0XHRcdFx0aW5jbHVkZUFsbEV4cHJlc3Npb25cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJSZWZcIjpcblx0XHRjYXNlIFwiTGVuZ3RoXCI6XG5cdFx0Y2FzZSBcIlBhdGhJbk1vZGVsXCI6XG5cdFx0Y2FzZSBcIkVtYmVkZGVkQmluZGluZ1wiOlxuXHRcdGNhc2UgXCJFbWJlZGRlZEV4cHJlc3Npb25CaW5kaW5nXCI6XG5cdFx0Y2FzZSBcIlVucmVzb2x2YWJsZVwiOlxuXHRcdFx0Ly8gRG8gbm90aGluZ1xuXHRcdFx0YnJlYWs7XG5cdH1cblx0aWYgKGV4cHJlc3Npb25UeXBlID09PSBleHByZXNzaW9uLl90eXBlKSB7XG5cdFx0ZXhwcmVzc2lvbiA9IHRyYW5zZm9ybUZ1bmN0aW9uKGluRXhwcmVzc2lvbiBhcyBFeHByZXNzaW9uVHlwZVRvRXhwcmVzc2lvbjxFVCwgVD4pO1xuXHR9XG5cdHJldHVybiBleHByZXNzaW9uO1xufVxuXG5leHBvcnQgdHlwZSBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiA9IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuY29uc3QgbmVlZFBhcmVudGhlc2lzID0gZnVuY3Rpb24gPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihleHByOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4pOiBib29sZWFuIHtcblx0cmV0dXJuIChcblx0XHQhaXNDb25zdGFudChleHByKSAmJlxuXHRcdCFpc1BhdGhJbk1vZGVsRXhwcmVzc2lvbihleHByKSAmJlxuXHRcdGlzQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uKGV4cHIpICYmXG5cdFx0ZXhwci5fdHlwZSAhPT0gXCJJZkVsc2VcIiAmJlxuXHRcdGV4cHIuX3R5cGUgIT09IFwiRnVuY3Rpb25cIlxuXHQpO1xufTtcblxuLyoqXG4gKiBDb21waWxlcyBhIGNvbnN0YW50IG9iamVjdCB0byBhIHN0cmluZy5cbiAqIEBwYXJhbSBleHByXG4gKiBAcGFyYW0gaXNOdWxsYWJsZVxuICogQHJldHVybnMgVGhlIGNvbXBpbGVkIHN0cmluZ1xuICovXG5mdW5jdGlvbiBjb21waWxlQ29uc3RhbnRPYmplY3QoZXhwcjogQ29uc3RhbnRFeHByZXNzaW9uPG9iamVjdD4sIGlzTnVsbGFibGUgPSBmYWxzZSk6IHN0cmluZyB7XG5cdGlmIChpc051bGxhYmxlICYmIE9iamVjdC5rZXlzKGV4cHIudmFsdWUpLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cdGNvbnN0IG9iamVjdHMgPSBleHByLnZhbHVlIGFzIFBsYWluRXhwcmVzc2lvbk9iamVjdDtcblx0Y29uc3QgcHJvcGVydGllczogc3RyaW5nW10gPSBbXTtcblx0T2JqZWN0LmtleXMob2JqZWN0cykuZm9yRWFjaCgoa2V5KSA9PiB7XG5cdFx0Y29uc3QgdmFsdWUgPSBvYmplY3RzW2tleV07XG5cdFx0Y29uc3QgY2hpbGRSZXN1bHQgPSBjb21waWxlRXhwcmVzc2lvbih2YWx1ZSwgdHJ1ZSwgZmFsc2UsIGlzTnVsbGFibGUpO1xuXHRcdGlmIChjaGlsZFJlc3VsdCAmJiBjaGlsZFJlc3VsdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRwcm9wZXJ0aWVzLnB1c2goYCR7a2V5fTogJHtjaGlsZFJlc3VsdH1gKTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gYHske3Byb3BlcnRpZXMuam9pbihcIiwgXCIpfX1gO1xufVxuXG4vKipcbiAqIENvbXBpbGVzIGEgQ29uc3RhbnQgQmluZGluZyBFeHByZXNzaW9uLlxuICogQHBhcmFtIGV4cHJcbiAqIEBwYXJhbSBlbWJlZGRlZEluQmluZGluZ1xuICogQHBhcmFtIGlzTnVsbGFibGVcbiAqIEBwYXJhbSBkb05vdFN0cmluZ2lmeVxuICogQHJldHVybnMgVGhlIGNvbXBpbGVkIHN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGlsZUNvbnN0YW50PFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0ZXhwcjogQ29uc3RhbnRFeHByZXNzaW9uPFQ+LFxuXHRlbWJlZGRlZEluQmluZGluZzogYm9vbGVhbixcblx0aXNOdWxsYWJsZT86IGJvb2xlYW4sXG5cdGRvTm90U3RyaW5naWZ5PzogZmFsc2Vcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGVDb25zdGFudDxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGV4cHI6IENvbnN0YW50RXhwcmVzc2lvbjxUPixcblx0ZW1iZWRkZWRJbkJpbmRpbmc6IGJvb2xlYW4sXG5cdGlzTnVsbGFibGU/OiBib29sZWFuLFxuXHRkb05vdFN0cmluZ2lmeT86IHRydWVcbik6IFByaW1pdGl2ZVR5cGU7XG5leHBvcnQgZnVuY3Rpb24gY29tcGlsZUNvbnN0YW50PFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0ZXhwcjogQ29uc3RhbnRFeHByZXNzaW9uPFQ+LFxuXHRlbWJlZGRlZEluQmluZGluZzogYm9vbGVhbixcblx0aXNOdWxsYWJsZSA9IGZhbHNlLFxuXHRkb05vdFN0cmluZ2lmeSA9IGZhbHNlXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IFByaW1pdGl2ZVR5cGUge1xuXHRpZiAoZXhwci52YWx1ZSA9PT0gbnVsbCkge1xuXHRcdHJldHVybiBkb05vdFN0cmluZ2lmeSA/IG51bGwgOiBcIm51bGxcIjtcblx0fVxuXHRpZiAoZXhwci52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGRvTm90U3RyaW5naWZ5ID8gdW5kZWZpbmVkIDogXCJ1bmRlZmluZWRcIjtcblx0fVxuXHRpZiAodHlwZW9mIGV4cHIudmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRpZiAoQXJyYXkuaXNBcnJheShleHByLnZhbHVlKSkge1xuXHRcdFx0Y29uc3QgZW50cmllcyA9IGV4cHIudmFsdWUubWFwKChleHByZXNzaW9uKSA9PiBjb21waWxlRXhwcmVzc2lvbihleHByZXNzaW9uLCB0cnVlKSk7XG5cdFx0XHRyZXR1cm4gYFske2VudHJpZXMuam9pbihcIiwgXCIpfV1gO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUNvbnN0YW50T2JqZWN0KGV4cHIgYXMgQ29uc3RhbnRFeHByZXNzaW9uPG9iamVjdD4sIGlzTnVsbGFibGUpO1xuXHRcdH1cblx0fVxuXG5cdGlmIChlbWJlZGRlZEluQmluZGluZykge1xuXHRcdHN3aXRjaCAodHlwZW9mIGV4cHIudmFsdWUpIHtcblx0XHRcdGNhc2UgXCJudW1iZXJcIjpcblx0XHRcdGNhc2UgXCJiaWdpbnRcIjpcblx0XHRcdGNhc2UgXCJib29sZWFuXCI6XG5cdFx0XHRcdHJldHVybiBleHByLnZhbHVlLnRvU3RyaW5nKCk7XG5cdFx0XHRjYXNlIFwic3RyaW5nXCI6XG5cdFx0XHRcdHJldHVybiBgJyR7ZXNjYXBlWG1sQXR0cmlidXRlKGV4cHIudmFsdWUudG9TdHJpbmcoKSl9J2A7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGRvTm90U3RyaW5naWZ5ID8gZXhwci52YWx1ZSA6IGV4cHIudmFsdWUudG9TdHJpbmcoKTtcblx0fVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgYmluZGluZyBzdHJpbmcgZm9yIGEgQmluZGluZyBleHByZXNzaW9uLlxuICogQHBhcmFtIGV4cHJlc3Npb25Gb3JCaW5kaW5nIFRoZSBleHByZXNzaW9uIHRvIGNvbXBpbGVcbiAqIEBwYXJhbSBlbWJlZGRlZEluQmluZGluZyBXaGV0aGVyIHRoZSBleHByZXNzaW9uIHRvIGNvbXBpbGUgaXMgZW1iZWRkZWQgaW50byBhbm90aGVyIGV4cHJlc3Npb25cbiAqIEBwYXJhbSBlbWJlZGRlZFNlcGFyYXRvciBUaGUgYmluZGluZyB2YWx1ZSBldmFsdWF0b3IgKCQgb3IgJSBkZXBlbmRpbmcgb24gd2hldGhlciB3ZSB3YW50IHRvIGZvcmNlIHRoZSB0eXBlIG9yIG5vdClcbiAqIEByZXR1cm5zIFRoZSBjb3JyZXNwb25kaW5nIGV4cHJlc3Npb24gYmluZGluZ1xuICovXG5mdW5jdGlvbiBjb21waWxlUGF0aEluTW9kZWxFeHByZXNzaW9uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0ZXhwcmVzc2lvbkZvckJpbmRpbmc6IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUPixcblx0ZW1iZWRkZWRJbkJpbmRpbmc6IGJvb2xlYW4sXG5cdGVtYmVkZGVkU2VwYXJhdG9yOiBzdHJpbmdcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0aWYgKFxuXHRcdGV4cHJlc3Npb25Gb3JCaW5kaW5nLnR5cGUgfHxcblx0XHRleHByZXNzaW9uRm9yQmluZGluZy5wYXJhbWV0ZXJzIHx8XG5cdFx0ZXhwcmVzc2lvbkZvckJpbmRpbmcudGFyZ2V0VHlwZSB8fFxuXHRcdGV4cHJlc3Npb25Gb3JCaW5kaW5nLmZvcm1hdE9wdGlvbnMgfHxcblx0XHRleHByZXNzaW9uRm9yQmluZGluZy5jb25zdHJhaW50c1xuXHQpIHtcblx0XHQvLyBUaGlzIGlzIG5vdyBhIGNvbXBsZXggYmluZGluZyBkZWZpbml0aW9uLCBsZXQncyBwcmVwYXJlIGZvciBpdFxuXHRcdGNvbnN0IGNvbXBsZXhCaW5kaW5nRGVmaW5pdGlvbiA9IHtcblx0XHRcdHBhdGg6IGNvbXBpbGVQYXRoSW5Nb2RlbChleHByZXNzaW9uRm9yQmluZGluZyksXG5cdFx0XHR0eXBlOiBleHByZXNzaW9uRm9yQmluZGluZy50eXBlLFxuXHRcdFx0dGFyZ2V0VHlwZTogZXhwcmVzc2lvbkZvckJpbmRpbmcudGFyZ2V0VHlwZSxcblx0XHRcdHBhcmFtZXRlcnM6IGV4cHJlc3Npb25Gb3JCaW5kaW5nLnBhcmFtZXRlcnMsXG5cdFx0XHRmb3JtYXRPcHRpb25zOiBleHByZXNzaW9uRm9yQmluZGluZy5mb3JtYXRPcHRpb25zLFxuXHRcdFx0Y29uc3RyYWludHM6IGV4cHJlc3Npb25Gb3JCaW5kaW5nLmNvbnN0cmFpbnRzXG5cdFx0fTtcblx0XHRjb25zdCBvdXRCaW5kaW5nID0gY29tcGlsZUV4cHJlc3Npb24oY29tcGxleEJpbmRpbmdEZWZpbml0aW9uLCBmYWxzZSwgZmFsc2UsIHRydWUpO1xuXHRcdGlmIChlbWJlZGRlZEluQmluZGluZykge1xuXHRcdFx0Y29uc3Qgc2VwYXJhdG9yID0gZXhwcmVzc2lvbkZvckJpbmRpbmcuYWx3YXlzS2VlcFRhcmdldFR5cGUgPyBcIiRcIiA6IGVtYmVkZGVkU2VwYXJhdG9yO1xuXHRcdFx0cmV0dXJuIGAke3NlcGFyYXRvcn0ke291dEJpbmRpbmd9YDtcblx0XHR9XG5cdFx0cmV0dXJuIG91dEJpbmRpbmc7XG5cdH0gZWxzZSBpZiAoZW1iZWRkZWRJbkJpbmRpbmcpIHtcblx0XHRyZXR1cm4gYCR7ZW1iZWRkZWRTZXBhcmF0b3J9eyR7Y29tcGlsZVBhdGhJbk1vZGVsKGV4cHJlc3Npb25Gb3JCaW5kaW5nKX19YDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gYHske2NvbXBpbGVQYXRoSW5Nb2RlbChleHByZXNzaW9uRm9yQmluZGluZyl9fWA7XG5cdH1cbn1cblxuZnVuY3Rpb24gY29tcGlsZUNvbXBsZXhUeXBlRXhwcmVzc2lvbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oZXhwcmVzc2lvbjogQ29tcGxleFR5cGVFeHByZXNzaW9uPFQ+KTogc3RyaW5nIHtcblx0aWYgKGV4cHJlc3Npb24uYmluZGluZ1BhcmFtZXRlcnMubGVuZ3RoID09PSAxKSB7XG5cdFx0cmV0dXJuIGB7JHtjb21waWxlUGF0aFBhcmFtZXRlcihleHByZXNzaW9uLmJpbmRpbmdQYXJhbWV0ZXJzWzBdIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPiwgdHJ1ZSl9LCB0eXBlOiAnJHtcblx0XHRcdGV4cHJlc3Npb24udHlwZVxuXHRcdH0nfWA7XG5cdH1cblxuXHRsZXQgb3V0cHV0RW5kID0gYF0sIHR5cGU6ICcke2V4cHJlc3Npb24udHlwZX0nYDtcblx0aWYgKGhhc0VsZW1lbnRzKGV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucykpIHtcblx0XHRvdXRwdXRFbmQgKz0gYCwgZm9ybWF0T3B0aW9uczogJHtjb21waWxlRXhwcmVzc2lvbihleHByZXNzaW9uLmZvcm1hdE9wdGlvbnMpfWA7XG5cdH1cblx0aWYgKGhhc0VsZW1lbnRzKGV4cHJlc3Npb24uY29uc3RyYWludHMpKSB7XG5cdFx0b3V0cHV0RW5kICs9IGAsIGNvbnN0cmFpbnRzOiAke2NvbXBpbGVFeHByZXNzaW9uKGV4cHJlc3Npb24uY29uc3RyYWludHMpfWA7XG5cdH1cblx0aWYgKGhhc0VsZW1lbnRzKGV4cHJlc3Npb24ucGFyYW1ldGVycykpIHtcblx0XHRvdXRwdXRFbmQgKz0gYCwgcGFyYW1ldGVyczogJHtjb21waWxlRXhwcmVzc2lvbihleHByZXNzaW9uLnBhcmFtZXRlcnMpfWA7XG5cdH1cblx0b3V0cHV0RW5kICs9IFwifVwiO1xuXG5cdHJldHVybiBge21vZGU6J1R3b1dheScsIHBhcnRzOlske2V4cHJlc3Npb24uYmluZGluZ1BhcmFtZXRlcnNcblx0XHQubWFwKChwYXJhbSkgPT4gY29tcGlsZVBhdGhQYXJhbWV0ZXIocGFyYW0gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+KSlcblx0XHQuam9pbihcIixcIil9JHtvdXRwdXRFbmR9YDtcbn1cblxuLyoqXG4gKiBXcmFwIHRoZSBjb21waWxlZCBiaW5kaW5nIHN0cmluZyBhcyByZXF1aXJlZCBkZXBlbmRpbmcgb24gaXRzIGNvbnRleHQuXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgY29tcGlsZWQgZXhwcmVzc2lvblxuICogQHBhcmFtIGVtYmVkZGVkSW5CaW5kaW5nIFRydWUgaWYgdGhlIGNvbXBpbGVkIGV4cHJlc3Npb24gaXMgdG8gYmUgZW1iZWRkZWQgaW4gYSBiaW5kaW5nXG4gKiBAcGFyYW0gcGFyZW50aGVzaXNSZXF1aXJlZCBUcnVlIGlmIHRoZSBlbWJlZGRlZCBiaW5kaW5nIG5lZWRzIHRvIGJlIHdyYXBwZWQgaW4gcGFyZXRoZXNpcyBzbyB0aGF0IGl0IGlzIGV2YWx1YXRlZCBhcyBvbmVcbiAqIEByZXR1cm5zIEZpbmFsaXplZCBjb21waWxlZCBleHByZXNzaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3cmFwQmluZGluZ0V4cHJlc3Npb24oXG5cdGV4cHJlc3Npb246IHN0cmluZyxcblx0ZW1iZWRkZWRJbkJpbmRpbmc6IGJvb2xlYW4sXG5cdHBhcmVudGhlc2lzUmVxdWlyZWQgPSBmYWxzZVxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRpZiAoZW1iZWRkZWRJbkJpbmRpbmcpIHtcblx0XHRpZiAocGFyZW50aGVzaXNSZXF1aXJlZCkge1xuXHRcdFx0cmV0dXJuIGAoJHtleHByZXNzaW9ufSlgO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gZXhwcmVzc2lvbjtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGB7PSAke2V4cHJlc3Npb259fWA7XG5cdH1cbn1cblxuLyoqXG4gKiBDb21waWxlIGFuIGV4cHJlc3Npb24gaW50byBhbiBleHByZXNzaW9uIGJpbmRpbmcuXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBleHByZXNzaW9uIHRvIGNvbXBpbGVcbiAqIEBwYXJhbSBlbWJlZGRlZEluQmluZGluZyBXaGV0aGVyIHRoZSBleHByZXNzaW9uIHRvIGNvbXBpbGUgaXMgZW1iZWRkZWQgaW50byBhbm90aGVyIGV4cHJlc3Npb25cbiAqIEBwYXJhbSBrZWVwVGFyZ2V0VHlwZSBLZWVwIHRoZSB0YXJnZXQgdHlwZSBvZiB0aGUgZW1iZWRkZWQgYmluZGluZ3MgaW5zdGVhZCBvZiBjYXN0aW5nIHRoZW0gdG8gYW55XG4gKiBAcGFyYW0gaXNOdWxsYWJsZSBXaGV0aGVyIGJpbmRpbmcgZXhwcmVzc2lvbiBjYW4gcmVzb2x2ZSB0byBlbXB0eSBzdHJpbmcgb3Igbm90XG4gKiBAcmV0dXJucyBUaGUgY29ycmVzcG9uZGluZyBleHByZXNzaW9uIGJpbmRpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGVFeHByZXNzaW9uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0ZXhwcmVzc2lvbjogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRlbWJlZGRlZEluQmluZGluZyA9IGZhbHNlLFxuXHRrZWVwVGFyZ2V0VHlwZSA9IGZhbHNlLFxuXHRpc051bGxhYmxlID0gZmFsc2Vcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0Y29uc3QgZXhwciA9IHdyYXBQcmltaXRpdmUoZXhwcmVzc2lvbik7XG5cdGNvbnN0IGVtYmVkZGVkU2VwYXJhdG9yID0ga2VlcFRhcmdldFR5cGUgPyBcIiRcIiA6IFwiJVwiO1xuXG5cdHN3aXRjaCAoZXhwci5fdHlwZSkge1xuXHRcdGNhc2UgXCJVbnJlc29sdmFibGVcIjpcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRjYXNlIFwiQ29uc3RhbnRcIjpcblx0XHRcdHJldHVybiBjb21waWxlQ29uc3RhbnQoZXhwciwgZW1iZWRkZWRJbkJpbmRpbmcsIGlzTnVsbGFibGUpO1xuXG5cdFx0Y2FzZSBcIlJlZlwiOlxuXHRcdFx0cmV0dXJuIGV4cHIucmVmIHx8IFwibnVsbFwiO1xuXG5cdFx0Y2FzZSBcIkZ1bmN0aW9uXCI6XG5cdFx0XHRsZXQgaGFzRW1iZWRkZWRGdW5jdGlvbkNhbGxPckJpbmRpbmcgPSBmYWxzZTtcblx0XHRcdGlmIChleHByLmlzRm9ybWF0dGluZ0ZuKSB7XG5cdFx0XHRcdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRcdGV4cHIsXG5cdFx0XHRcdFx0XCJGdW5jdGlvblwiLFxuXHRcdFx0XHRcdChzdWJGbikgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKHN1YkZuICE9PSBleHByICYmIHN1YkZuLm9iaiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdGhhc0VtYmVkZGVkRnVuY3Rpb25DYWxsT3JCaW5kaW5nID0gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJldHVybiBzdWJGbjtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHRydWVcblx0XHRcdFx0KTtcblx0XHRcdFx0dHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRcdFx0ZXhwcixcblx0XHRcdFx0XHRcIkNvbnN0YW50XCIsXG5cdFx0XHRcdFx0KHN1YkZuOiBDb25zdGFudEV4cHJlc3Npb248VD4pID0+IHtcblx0XHRcdFx0XHRcdGlmICgoc3ViRm4gYXMgdW5rbm93bikgIT09IGV4cHIgJiYgdHlwZW9mIHN1YkZuLnZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0XHRcdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KHN1YkZuLCBcIlBhdGhJbk1vZGVsXCIsIChzdWJTdWJGbikgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGhhc0VtYmVkZGVkRnVuY3Rpb25DYWxsT3JCaW5kaW5nID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc3ViU3ViRm47XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gc3ViRm47XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBhcmd1bWVudFN0cmluZyA9IGAke2V4cHIucGFyYW1ldGVycy5tYXAoKGFyZykgPT4gY29tcGlsZUV4cHJlc3Npb24oYXJnLCB0cnVlKSkuam9pbihcIiwgXCIpfWA7XG5cdFx0XHRsZXQgZm5DYWxsID1cblx0XHRcdFx0ZXhwci5vYmogPT09IHVuZGVmaW5lZFxuXHRcdFx0XHRcdD8gYCR7ZXhwci5mbn0oJHthcmd1bWVudFN0cmluZ30pYFxuXHRcdFx0XHRcdDogYCR7Y29tcGlsZUV4cHJlc3Npb24oZXhwci5vYmosIHRydWUpfS4ke2V4cHIuZm59KCR7YXJndW1lbnRTdHJpbmd9KWA7XG5cdFx0XHRpZiAoIWVtYmVkZGVkSW5CaW5kaW5nICYmIGhhc0VtYmVkZGVkRnVuY3Rpb25DYWxsT3JCaW5kaW5nKSB7XG5cdFx0XHRcdGZuQ2FsbCA9IGB7PSAke2ZuQ2FsbH19YDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmbkNhbGw7XG5cblx0XHRjYXNlIFwiRW1iZWRkZWRFeHByZXNzaW9uQmluZGluZ1wiOlxuXHRcdFx0cmV0dXJuIGVtYmVkZGVkSW5CaW5kaW5nID8gYCgke2V4cHIudmFsdWUuc3Vic3RyaW5nKDIsIGV4cHIudmFsdWUubGVuZ3RoIC0gMSl9KWAgOiBgJHtleHByLnZhbHVlfWA7XG5cblx0XHRjYXNlIFwiRW1iZWRkZWRCaW5kaW5nXCI6XG5cdFx0XHRyZXR1cm4gZW1iZWRkZWRJbkJpbmRpbmcgPyBgJHtlbWJlZGRlZFNlcGFyYXRvcn0ke2V4cHIudmFsdWV9YCA6IGAke2V4cHIudmFsdWV9YDtcblxuXHRcdGNhc2UgXCJQYXRoSW5Nb2RlbFwiOlxuXHRcdFx0cmV0dXJuIGNvbXBpbGVQYXRoSW5Nb2RlbEV4cHJlc3Npb24oZXhwciwgZW1iZWRkZWRJbkJpbmRpbmcsIGVtYmVkZGVkU2VwYXJhdG9yKTtcblxuXHRcdGNhc2UgXCJDb21wYXJpc29uXCI6XG5cdFx0XHRjb25zdCBjb21wYXJpc29uRXhwcmVzc2lvbiA9IGNvbXBpbGVDb21wYXJpc29uRXhwcmVzc2lvbihleHByKTtcblx0XHRcdHJldHVybiB3cmFwQmluZGluZ0V4cHJlc3Npb24oY29tcGFyaXNvbkV4cHJlc3Npb24sIGVtYmVkZGVkSW5CaW5kaW5nKTtcblxuXHRcdGNhc2UgXCJJZkVsc2VcIjpcblx0XHRcdGNvbnN0IGlmRWxzZUV4cHJlc3Npb24gPSBgJHtjb21waWxlRXhwcmVzc2lvbihleHByLmNvbmRpdGlvbiwgdHJ1ZSl9ID8gJHtjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0ZXhwci5vblRydWUsXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdGtlZXBUYXJnZXRUeXBlXG5cdFx0XHQpfSA6ICR7Y29tcGlsZUV4cHJlc3Npb24oZXhwci5vbkZhbHNlLCB0cnVlLCBrZWVwVGFyZ2V0VHlwZSl9YDtcblx0XHRcdHJldHVybiB3cmFwQmluZGluZ0V4cHJlc3Npb24oaWZFbHNlRXhwcmVzc2lvbiwgZW1iZWRkZWRJbkJpbmRpbmcsIHRydWUpO1xuXG5cdFx0Y2FzZSBcIlNldFwiOlxuXHRcdFx0Y29uc3Qgc2V0RXhwcmVzc2lvbiA9IGV4cHIub3BlcmFuZHMubWFwKChvcGVyYW5kKSA9PiBjb21waWxlRXhwcmVzc2lvbihvcGVyYW5kLCB0cnVlKSkuam9pbihgICR7ZXhwci5vcGVyYXRvcn0gYCk7XG5cdFx0XHRyZXR1cm4gd3JhcEJpbmRpbmdFeHByZXNzaW9uKHNldEV4cHJlc3Npb24sIGVtYmVkZGVkSW5CaW5kaW5nLCB0cnVlKTtcblxuXHRcdGNhc2UgXCJDb25jYXRcIjpcblx0XHRcdGNvbnN0IGNvbmNhdEV4cHJlc3Npb24gPSBleHByLmV4cHJlc3Npb25zXG5cdFx0XHRcdC5tYXAoKG5lc3RlZEV4cHJlc3Npb24pID0+IGNvbXBpbGVFeHByZXNzaW9uKG5lc3RlZEV4cHJlc3Npb24sIHRydWUsIHRydWUpKVxuXHRcdFx0XHQuam9pbihcIiArIFwiKTtcblx0XHRcdHJldHVybiB3cmFwQmluZGluZ0V4cHJlc3Npb24oY29uY2F0RXhwcmVzc2lvbiwgZW1iZWRkZWRJbkJpbmRpbmcpO1xuXG5cdFx0Y2FzZSBcIkxlbmd0aFwiOlxuXHRcdFx0Y29uc3QgbGVuZ3RoRXhwcmVzc2lvbiA9IGAke2NvbXBpbGVFeHByZXNzaW9uKGV4cHIucGF0aEluTW9kZWwsIHRydWUpfS5sZW5ndGhgO1xuXHRcdFx0cmV0dXJuIHdyYXBCaW5kaW5nRXhwcmVzc2lvbihsZW5ndGhFeHByZXNzaW9uLCBlbWJlZGRlZEluQmluZGluZyk7XG5cblx0XHRjYXNlIFwiTm90XCI6XG5cdFx0XHRjb25zdCBub3RFeHByZXNzaW9uID0gYCEke2NvbXBpbGVFeHByZXNzaW9uKGV4cHIub3BlcmFuZCwgdHJ1ZSl9YDtcblx0XHRcdHJldHVybiB3cmFwQmluZGluZ0V4cHJlc3Npb24obm90RXhwcmVzc2lvbiwgZW1iZWRkZWRJbkJpbmRpbmcpO1xuXG5cdFx0Y2FzZSBcIlRydXRoeVwiOlxuXHRcdFx0Y29uc3QgdHJ1dGh5RXhwcmVzc2lvbiA9IGAhISR7Y29tcGlsZUV4cHJlc3Npb24oZXhwci5vcGVyYW5kLCB0cnVlKX1gO1xuXHRcdFx0cmV0dXJuIHdyYXBCaW5kaW5nRXhwcmVzc2lvbih0cnV0aHlFeHByZXNzaW9uLCBlbWJlZGRlZEluQmluZGluZyk7XG5cblx0XHRjYXNlIFwiRm9ybWF0dGVyXCI6XG5cdFx0XHRjb25zdCBmb3JtYXR0ZXJFeHByZXNzaW9uID0gY29tcGlsZUZvcm1hdHRlckV4cHJlc3Npb24oZXhwcik7XG5cdFx0XHRyZXR1cm4gZW1iZWRkZWRJbkJpbmRpbmcgPyBgJCR7Zm9ybWF0dGVyRXhwcmVzc2lvbn1gIDogZm9ybWF0dGVyRXhwcmVzc2lvbjtcblxuXHRcdGNhc2UgXCJDb21wbGV4VHlwZVwiOlxuXHRcdFx0Y29uc3QgY29tcGxleFR5cGVFeHByZXNzaW9uID0gY29tcGlsZUNvbXBsZXhUeXBlRXhwcmVzc2lvbihleHByKTtcblx0XHRcdHJldHVybiBlbWJlZGRlZEluQmluZGluZyA/IGAkJHtjb21wbGV4VHlwZUV4cHJlc3Npb259YCA6IGNvbXBsZXhUeXBlRXhwcmVzc2lvbjtcblxuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0fVxufVxuXG4vKipcbiAqIENvbXBpbGUgYSBjb21wYXJpc29uIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgY29tcGFyaXNvbiBleHByZXNzaW9uLlxuICogQHJldHVybnMgVGhlIGNvbXBpbGVkIGV4cHJlc3Npb24uIE5lZWRzIHdyYXBwaW5nIGJlZm9yZSBpdCBjYW4gYmUgdXNlZCBhcyBhbiBleHByZXNzaW9uIGJpbmRpbmcuXG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGVDb21wYXJpc29uRXhwcmVzc2lvbihleHByZXNzaW9uOiBDb21wYXJpc29uRXhwcmVzc2lvbik6IHN0cmluZyB7XG5cdGZ1bmN0aW9uIGNvbXBpbGVPcGVyYW5kKG9wZXJhbmQ6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0XHRjb25zdCBjb21waWxlZE9wZXJhbmQgPSBjb21waWxlRXhwcmVzc2lvbihvcGVyYW5kLCB0cnVlKSA/PyBcInVuZGVmaW5lZFwiO1xuXHRcdHJldHVybiB3cmFwQmluZGluZ0V4cHJlc3Npb24oY29tcGlsZWRPcGVyYW5kLCB0cnVlLCBuZWVkUGFyZW50aGVzaXMob3BlcmFuZCkpO1xuXHR9XG5cblx0cmV0dXJuIGAke2NvbXBpbGVPcGVyYW5kKGV4cHJlc3Npb24ub3BlcmFuZDEpfSAke2V4cHJlc3Npb24ub3BlcmF0b3J9ICR7Y29tcGlsZU9wZXJhbmQoZXhwcmVzc2lvbi5vcGVyYW5kMil9YDtcbn1cblxuLyoqXG4gKiBDb21waWxlIGEgZm9ybWF0dGVyIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgZm9ybWF0dGVyIGV4cHJlc3Npb24uXG4gKiBAcmV0dXJucyBUaGUgY29tcGlsZWQgZXhwcmVzc2lvbi5cbiAqL1xuZnVuY3Rpb24gY29tcGlsZUZvcm1hdHRlckV4cHJlc3Npb248VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KGV4cHJlc3Npb246IEZvcm1hdHRlckV4cHJlc3Npb248VD4pOiBzdHJpbmcge1xuXHRpZiAoZXhwcmVzc2lvbi5wYXJhbWV0ZXJzLmxlbmd0aCA9PT0gMSkge1xuXHRcdHJldHVybiBgeyR7Y29tcGlsZVBhdGhQYXJhbWV0ZXIoZXhwcmVzc2lvbi5wYXJhbWV0ZXJzWzBdIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPiwgdHJ1ZSl9LCBmb3JtYXR0ZXI6ICcke1xuXHRcdFx0ZXhwcmVzc2lvbi5mblxuXHRcdH0nfWA7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgcGFydHMgPSBleHByZXNzaW9uLnBhcmFtZXRlcnMubWFwKChwYXJhbSkgPT4ge1xuXHRcdFx0aWYgKHBhcmFtLl90eXBlID09PSBcIkNvbXBsZXhUeXBlXCIpIHtcblx0XHRcdFx0cmV0dXJuIGNvbXBpbGVDb21wbGV4VHlwZUV4cHJlc3Npb24ocGFyYW0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGNvbXBpbGVQYXRoUGFyYW1ldGVyKHBhcmFtIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGB7cGFydHM6IFske3BhcnRzLmpvaW4oXCIsIFwiKX1dLCBmb3JtYXR0ZXI6ICcke2V4cHJlc3Npb24uZm59J31gO1xuXHR9XG59XG5cbi8qKlxuICogQ29tcGlsZSB0aGUgcGF0aCBwYXJhbWV0ZXIgb2YgYSBmb3JtYXR0ZXIgY2FsbC5cbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBiaW5kaW5nIHBhcnQgdG8gZXZhbHVhdGVcbiAqIEBwYXJhbSBzaW5nbGVQYXRoIFdoZXRoZXIgdGhlcmUgaXMgb25lIG9yIG11bHRpcGxlIHBhdGggdG8gY29uc2lkZXJcbiAqIEByZXR1cm5zIFRoZSBzdHJpbmcgc25pcHBldCB0byBpbmNsdWRlIGluIHRoZSBvdmVyYWxsIGJpbmRpbmcgZGVmaW5pdGlvblxuICovXG5mdW5jdGlvbiBjb21waWxlUGF0aFBhcmFtZXRlcihleHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT4sIHNpbmdsZVBhdGggPSBmYWxzZSk6IHN0cmluZyB7XG5cdGxldCBvdXRWYWx1ZSA9IFwiXCI7XG5cdGlmIChleHByZXNzaW9uLl90eXBlID09PSBcIkNvbnN0YW50XCIpIHtcblx0XHRpZiAoZXhwcmVzc2lvbi52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBTcGVjaWFsIGNhc2Ugb3RoZXJ3aXNlIHRoZSBKU1Rva2VuaXplciBjb21wbGFpbnMgYWJvdXQgaW5jb3JyZWN0IGNvbnRlbnRcblx0XHRcdG91dFZhbHVlID0gYHZhbHVlOiAndW5kZWZpbmVkJ2A7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG91dFZhbHVlID0gYHZhbHVlOiAke2NvbXBpbGVDb25zdGFudChleHByZXNzaW9uLCB0cnVlKX1gO1xuXHRcdH1cblx0fSBlbHNlIGlmIChleHByZXNzaW9uLl90eXBlID09PSBcIlBhdGhJbk1vZGVsXCIpIHtcblx0XHRvdXRWYWx1ZSA9IGBwYXRoOiAnJHtjb21waWxlUGF0aEluTW9kZWwoZXhwcmVzc2lvbil9J2A7XG5cblx0XHRvdXRWYWx1ZSArPSBleHByZXNzaW9uLnR5cGUgPyBgLCB0eXBlOiAnJHtleHByZXNzaW9uLnR5cGV9J2AgOiBgLCB0YXJnZXRUeXBlOiAnYW55J2A7XG5cdFx0aWYgKGV4cHJlc3Npb24ubW9kZSkge1xuXHRcdFx0b3V0VmFsdWUgKz0gYCwgbW9kZTogJyR7Y29tcGlsZUV4cHJlc3Npb24oZXhwcmVzc2lvbi5tb2RlKX0nYDtcblx0XHR9XG5cdFx0aWYgKGhhc0VsZW1lbnRzKGV4cHJlc3Npb24uY29uc3RyYWludHMpKSB7XG5cdFx0XHRvdXRWYWx1ZSArPSBgLCBjb25zdHJhaW50czogJHtjb21waWxlRXhwcmVzc2lvbihleHByZXNzaW9uLmNvbnN0cmFpbnRzKX1gO1xuXHRcdH1cblx0XHRpZiAoaGFzRWxlbWVudHMoZXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zKSkge1xuXHRcdFx0b3V0VmFsdWUgKz0gYCwgZm9ybWF0T3B0aW9uczogJHtjb21waWxlRXhwcmVzc2lvbihleHByZXNzaW9uLmZvcm1hdE9wdGlvbnMpfWA7XG5cdFx0fVxuXHRcdGlmIChoYXNFbGVtZW50cyhleHByZXNzaW9uLnBhcmFtZXRlcnMpKSB7XG5cdFx0XHRvdXRWYWx1ZSArPSBgLCBwYXJhbWV0ZXJzOiAke2NvbXBpbGVFeHByZXNzaW9uKGV4cHJlc3Npb24ucGFyYW1ldGVycyl9YDtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblx0cmV0dXJuIHNpbmdsZVBhdGggPyBvdXRWYWx1ZSA6IGB7JHtvdXRWYWx1ZX19YDtcbn1cblxuZnVuY3Rpb24gaGFzRWxlbWVudHMob2JqOiBvYmplY3QgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcblx0cmV0dXJuICEhb2JqICYmIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID4gMDtcbn1cblxuLyoqXG4gKiBDb21waWxlIGEgYmluZGluZyBleHByZXNzaW9uIHBhdGguXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgZXhwcmVzc2lvbiB0byBjb21waWxlLlxuICogQHJldHVybnMgVGhlIGNvbXBpbGVkIHBhdGguXG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGVQYXRoSW5Nb2RlbDxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oZXhwcmVzc2lvbjogUGF0aEluTW9kZWxFeHByZXNzaW9uPFQ+KTogc3RyaW5nIHtcblx0cmV0dXJuIGAke2V4cHJlc3Npb24ubW9kZWxOYW1lID8gZXhwcmVzc2lvbi5tb2RlbE5hbWUgKyBcIj5cIiA6IFwiXCJ9JHtleHByZXNzaW9uLnBhdGh9YDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0VBbUlBO0FBQ0E7QUFDQTs7RUF1Q08sU0FBU0EsVUFBVUEsQ0FBQ0MsYUFBc0IsRUFBNkI7SUFDN0UsT0FBTyxDQUFDQSxhQUFhLGFBQWJBLGFBQWEsdUJBQWJBLGFBQWEsQ0FBZUMsS0FBSyxNQUFLLFVBQVU7RUFDekQ7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7RUFIQUMsUUFBQSxDQUFBSCxVQUFBLEdBQUFBLFVBQUE7RUFxQ08sTUFBTUksZ0JBQXVELEdBQUc7SUFDdEUsYUFBYSxFQUFFO01BQUVDLElBQUksRUFBRTtJQUFrQyxDQUFDO0lBQzFELFVBQVUsRUFBRTtNQUFFQSxJQUFJLEVBQUU7SUFBK0IsQ0FBQztJQUNwRCxVQUFVLEVBQUU7TUFBRUEsSUFBSSxFQUFFO0lBQStCLENBQUM7SUFDcEQsb0JBQW9CLEVBQUU7TUFDckJDLFdBQVcsRUFBRTtRQUNaQyxVQUFVLEVBQUUsV0FBVztRQUN2QkMsR0FBRyxFQUFFO01BQ04sQ0FBQztNQUNESCxJQUFJLEVBQUU7SUFDUCxDQUFDO0lBQ0QsYUFBYSxFQUFFO01BQ2RDLFdBQVcsRUFBRTtRQUNaLDJDQUEyQyxFQUFFLFNBQVM7UUFDdEQsb0VBQW9FLEVBQUUsa0JBQWtCO1FBQ3hGLDJDQUEyQyxFQUFFLFNBQVM7UUFDdEQsb0VBQW9FLEVBQUUsa0JBQWtCO1FBQ3hGQyxVQUFVLEVBQUUsV0FBVztRQUN2QkUsTUFBTSxFQUFFO01BQ1QsQ0FBQztNQUNESixJQUFJLEVBQUU7SUFDUCxDQUFDO0lBQ0QsWUFBWSxFQUFFO01BQUVBLElBQUksRUFBRTtJQUFpQyxDQUFDO0lBQ3hELFVBQVUsRUFBRTtNQUFFQSxJQUFJLEVBQUU7SUFBK0IsQ0FBQztJQUNwRCxXQUFXLEVBQUU7TUFB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LENBQUMsTUFBTSxJQUFJQSxVQUFVLENBQUNoQyxLQUFLLEtBQUssYUFBYSxFQUFFO01BQzlDMlcsUUFBUSxHQUFHLFVBQVVqQyxrQkFBa0IsQ0FBQzFTLFVBQVUsQ0FBQyxHQUFHO01BRXREMlUsUUFBUSxJQUFJM1UsVUFBVSxDQUFDN0IsSUFBSSxHQUFHLFlBQVk2QixVQUFVLENBQUM3QixJQUFJLEdBQUcsR0FBRyxxQkFBcUI7TUFDcEYsSUFBSTZCLFVBQVUsQ0FBQ2lRLElBQUksRUFBRTtRQUNwQjBFLFFBQVEsSUFBSSxZQUFZekMsaUJBQWlCLENBQUNsUyxVQUFVLENBQUNpUSxJQUFJLENBQUMsR0FBRztNQUM5RDtNQUNBLElBQUkrQyxXQUFXLENBQUNoVCxVQUFVLENBQUM1QixXQUFXLENBQUMsRUFBRTtRQUN4Q3VXLFFBQVEsSUFBSSxrQkFBa0J6QyxpQkFBaUIsQ0FBQ2xTLFVBQVUsQ0FBQzVCLFdBQVcsQ0FBQyxFQUFFO01BQzFFO01BQ0EsSUFBSTRVLFdBQVcsQ0FBQ2hULFVBQVUsQ0FBQ3VOLGFBQWEsQ0FBQyxFQUFFO1FBQzFDb0gsUUFBUSxJQUFJLG9CQUFvQnpDLGlCQUFpQixDQUFDbFMsVUFBVSxDQUFDdU4sYUFBYSxDQUFDLEVBQUU7TUFDOUU7TUFDQSxJQUFJeUYsV0FBVyxDQUFDaFQsVUFBVSxDQUFDZ0IsVUFBVSxDQUFDLEVBQUU7UUFDdkMyVCxRQUFRLElBQUksaUJBQWlCekMsaUJBQWlCLENBQUNsUyxVQUFVLENBQUNnQixVQUFVLENBQUMsRUFBRTtNQUN4RTtJQUNELENBQUMsTUFBTTtNQUNOLE9BQU8sRUFBRTtJQUNWO0lBQ0EsT0FBTzBULFVBQVUsR0FBR0MsUUFBUSxHQUFHLElBQUlBLFFBQVEsR0FBRztFQUMvQztFQUVBLFNBQVMzQixXQUFXQSxDQUFDN1IsR0FBdUIsRUFBVztJQUN0RCxPQUFPLENBQUMsQ0FBQ0EsR0FBRyxJQUFJNEMsTUFBTSxDQUFDd0csSUFBSSxDQUFDcEosR0FBRyxDQUFDLENBQUNsQyxNQUFNLEdBQUcsQ0FBQztFQUM1Qzs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU3lULGtCQUFrQkEsQ0FBMEIxUyxVQUFvQyxFQUFVO0lBQ2xHLE9BQU8sR0FBR0EsVUFBVSxDQUFDWSxTQUFTLEdBQUdaLFVBQVUsQ0FBQ1ksU0FBUyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUdaLFVBQVUsQ0FBQ2EsSUFBSSxFQUFFO0VBQ3JGO0VBQUMsT0FBQTVDLFFBQUE7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
1825
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc1Byb3BlcnR5Iiwic2VydmljZU9iamVjdCIsIl90eXBlIiwiX2V4cG9ydHMiLCJFRE1fVFlQRV9NQVBQSU5HIiwidHlwZSIsImNvbnN0cmFpbnRzIiwiJFByZWNpc2lvbiIsIiRWNCIsIiRTY2FsZSIsIiRNYXhMZW5ndGgiLCIkTnVsbGFibGUiLCJ1bnJlc29sdmFibGVFeHByZXNzaW9uIiwiZXNjYXBlWG1sQXR0cmlidXRlIiwiaW5wdXRTdHJpbmciLCJyZXBsYWNlIiwiaGFzVW5yZXNvbHZhYmxlRXhwcmVzc2lvbiIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJleHByZXNzaW9ucyIsIkFycmF5IiwiX2tleSIsImZpbmQiLCJleHByIiwidW5kZWZpbmVkIiwiX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbCIsImEiLCJiIiwidmFsdWUiLCJvcGVyYW5kIiwib3BlcmF0b3IiLCJvcGVyYW5kcyIsImV2ZXJ5IiwiZXhwcmVzc2lvbiIsInNvbWUiLCJvdGhlckV4cHJlc3Npb24iLCJjb25kaXRpb24iLCJvblRydWUiLCJvbkZhbHNlIiwib3BlcmFuZDEiLCJvcGVyYW5kMiIsImFFeHByZXNzaW9ucyIsImJFeHByZXNzaW9ucyIsImluZGV4IiwicGF0aEluTW9kZWwiLCJtb2RlbE5hbWUiLCJwYXRoIiwidGFyZ2V0RW50aXR5U2V0IiwiZm4iLCJwYXJhbWV0ZXJzIiwiYmluZGluZ1BhcmFtZXRlcnMiLCJvdGhlckZ1bmN0aW9uIiwib2JqIiwicmVmIiwiZmxhdHRlblNldEV4cHJlc3Npb24iLCJyZWR1Y2UiLCJyZXN1bHQiLCJjYW5kaWRhdGVzRm9yRmxhdHRlbmluZyIsImZvckVhY2giLCJjYW5kaWRhdGUiLCJlIiwicHVzaCIsImhhc09wcG9zaXRlRXhwcmVzc2lvbnMiLCJuZWdhdGVkRXhwcmVzc2lvbnMiLCJtYXAiLCJub3QiLCJpIiwiYW5kIiwiX2xlbjIiLCJfa2V5MiIsIndyYXBQcmltaXRpdmUiLCJpc1N0YXRpY0ZhbHNlIiwibm9uVHJpdmlhbEV4cHJlc3Npb24iLCJmaWx0ZXIiLCJpc0ZhbHNlIiwiaXNDb25zdGFudCIsImNvbnN0YW50IiwiaXNWYWxpZCIsImlzVHJ1ZSIsIm9yIiwiX2xlbjMiLCJfa2V5MyIsImlzU3RhdGljVHJ1ZSIsImlzQ29tcGFyaXNvbiIsImlzVHJ1dGh5IiwiYmluZGluZ0V4cHJlc3Npb24iLCJ2aXNpdGVkTmF2aWdhdGlvblBhdGhzIiwicGF0aFZpc2l0b3IiLCJ0YXJnZXRQYXRoIiwibG9jYWxQYXRoIiwiY29uY2F0Iiwiam9pbiIsImNvbnN0YW50VmFsdWUiLCJpc0FycmF5IiwiaXNQcmltaXRpdmVPYmplY3QiLCJ2YWx1ZU9mIiwiT2JqZWN0IiwiZW50cmllcyIsInBsYWluRXhwcmVzc2lvbiIsIl9yZWYiLCJrZXkiLCJ2YWwiLCJ3cmFwcGVkVmFsdWUiLCJyZXNvbHZlQmluZGluZ1N0cmluZyIsInRhcmdldFR5cGUiLCJzdGFydHNXaXRoIiwicGF0aEluTW9kZWxSZWdleCIsInBhdGhJbk1vZGVsUmVnZXhNYXRjaCIsImV4ZWMiLCJpc05hTiIsIk51bWJlciIsInJlZmVyZW5jZSIsImJpbmRTdGF0ZSIsInN0YXRlT2JqZWN0UHJvcCIsIl9fYmluZGluZ0luZm8iLCJ0b1N0cmluZyIsIm1vZGVsIiwic29tZXRoaW5nIiwiaXNCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24iLCJtYXliZUNvbnN0YW50IiwiaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24iLCJtYXliZUJpbmRpbmciLCJpc0NvbXBsZXhUeXBlRXhwcmVzc2lvbiIsImlzQ29uY2F0RXhwcmVzc2lvbiIsImlzSWZFbHNlRXhwcmVzc2lvbiIsImlzVW5kZWZpbmVkRXhwcmVzc2lvbiIsImV4cHJlc3Npb25Bc0V4cHJlc3Npb24iLCJvYmplY3RUeXBlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiaXNDb21wbGV4QW5ub3RhdGlvbkV4cHJlc3Npb24iLCJhbm5vdGF0aW9uVmFsdWUiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJkZWZhdWx0VmFsdWUiLCJhbm5vdGF0aW9uSWZFeHByZXNzaW9uIiwiJElmIiwicGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uIiwiJE5vdCIsImVxdWFsIiwiJEVxIiwibm90RXF1YWwiLCIkTmUiLCJncmVhdGVyVGhhbiIsIiRHdCIsImdyZWF0ZXJPckVxdWFsIiwiJEdlIiwibGVzc1RoYW4iLCIkTHQiLCJsZXNzT3JFcXVhbCIsIiRMZSIsIiRPciIsIm9yQ29uZGl0aW9uIiwiJEFuZCIsImFuZENvbmRpdGlvbiIsImFubm90YXRpb25BcHBseUV4cHJlc3Npb24iLCJoYXNPd25Qcm9wZXJ0eSIsIiRQYXRoIiwiJEZ1bmN0aW9uIiwiJEFwcGx5IiwicmVzb2x2ZUVudW1WYWx1ZSIsIiRFbnVtTWVtYmVyIiwiaWZFbHNlIiwiY29udmVydFN1YkFwcGx5UGFyYW1ldGVycyIsImFwcGx5UGFyYW0iLCJhcHBseVBhcmFtQ29udmVydGVkIiwiYXBwbHlFeHByZXNzaW9uIiwicGFyYW1ldGVyIiwidGVtcGxhdGUiLCJ0ZW1wbGF0ZVBhcmFtcyIsInNsaWNlIiwidGFyZ2V0T2JqZWN0IiwiJE5hbWUiLCIkTGFiZWxlZEVsZW1lbnQiLCJjb21wYXJpc29uIiwibGVmdE9wZXJhbmQiLCJyaWdodE9wZXJhbmQiLCJsZWZ0RXhwcmVzc2lvbiIsInJpZ2h0RXhwcmVzc2lvbiIsImNoZWNrVW5kZWZpbmVkIiwibGVmdCIsInJpZ2h0IiwicmVkdWNlZCIsImNvbmRpdGlvbkV4cHJlc3Npb24iLCJvblRydWVFeHByZXNzaW9uIiwib25GYWxzZUV4cHJlc3Npb24iLCJwYXRoSWR4IiwibXlJZkVsc2VFeHByZXNzaW9uIiwiZm9ybWF0UmVzdWx0IiwiYWxsUGFydHMiLCJ0cmFuc2Zvcm1SZWN1cnNpdmVseSIsImNvbnN0YW50UGF0aCIsInVuc2hpZnQiLCJKU09OIiwic3RyaW5naWZ5IiwiaGFzUmVmZXJlbmNlVG9EZWZhdWx0Q29udGV4dCIsImZvcm1hdHRlckZ1bmN0aW9uIiwiY29udGV4dEVudGl0eVR5cGUiLCJpZ25vcmVDb21wbGV4VHlwZSIsInBhcmFtZXRlckV4cHJlc3Npb25zIiwia2V5cyIsImZ1bmN0aW9uTmFtZSIsIl9fZnVuY3Rpb25OYW1lIiwiZm9ybWF0dGVyQ2xhc3MiLCJmb3JtYXR0ZXJOYW1lIiwic3BsaXQiLCJteUZvcm1hdEV4cHJlc3Npb24iLCJzZXRVcENvbnN0cmFpbnRzIiwidGFyZ2V0TWFwcGluZyIsInByb3BlcnR5Iiwic2NhbGUiLCJwcmVjaXNpb24iLCJtYXhMZW5ndGgiLCJudWxsYWJsZSIsImFubm90YXRpb25zIiwiVmFsaWRhdGlvbiIsIk1pbmltdW0iLCJtaW5pbXVtIiwiTWF4aW11bSIsIm1heGltdW0iLCJDb21tb24iLCJJc0RpZ2l0U2VxdWVuY2UiLCJpc0RpZ2l0U2VxdWVuY2UiLCJWNCIsImZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24iLCJwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uIiwiaWdub3JlQ29uc3RyYWludHMiLCJvdXRFeHByZXNzaW9uIiwiZm9ybWF0T3B0aW9ucyIsImluZGV4T2YiLCJhc3NpZ24iLCJwYXJzZUFzU3RyaW5nIiwicGFyc2VLZWVwc0VtcHR5U3RyaW5nIiwiZmlzY2FsVHlwZSIsImdldEZpc2NhbFR5cGUiLCJ0eXBlc1N1cHBvcnRpbmdQYXJzZUVtcHR5VmFsdWVUb1plcm8iLCJpbmNsdWRlcyIsInBhcnNlRW1wdHlWYWx1ZVRvWmVybyIsImVtcHR5U3RyaW5nIiwiSXNGaXNjYWxZZWFyIiwiSXNGaXNjYWxQZXJpb2QiLCJJc0Zpc2NhbFllYXJQZXJpb2QiLCJJc0Zpc2NhbFF1YXJ0ZXIiLCJJc0Zpc2NhbFllYXJRdWFydGVyIiwiSXNGaXNjYWxXZWVrIiwiSXNGaXNjYWxZZWFyV2VlayIsIklzRGF5T2ZGaXNjYWxZZWFyIiwiYWRkVHlwZUluZm9ybWF0aW9uIiwib0Zvcm1hdE9wdGlvbnMiLCJvQ29uc3RyYWludE9wdGlvbnMiLCJfZ2V0Q29tcGxleFR5cGVGb3JtYXRPcHRpb25zRnJvbUZpcnN0UGFyYW0iLCJ1b21QYXRoIiwibW9kZSIsInByZXNlcnZlRGVjaW1hbHMiLCJza2lwRGVjaW1hbHNWYWxpZGF0aW9uIiwiY3VycmVuY3lQYXRoIiwicGFyYW0iLCJzaG93TnVtYmVyIiwic2hvd01lYXN1cmUiLCJkZWNpbWFsUGFkZGluZyIsImZ1bmMiLCJvbiIsImlzRm9ybWF0dGluZ0ZuIiwiaXNFbXB0eSIsImFCaW5kaW5ncyIsImZpbmFsRXhwcmVzc2lvbiIsImFsd2F5c0tlZXBUYXJnZXRUeXBlIiwiX2xlbjQiLCJpbkV4cHJlc3Npb25zIiwiX2tleTQiLCJjb25jYXRlbmF0ZWQiLCJteUNvbmNhdEV4cHJlc3Npb24iLCJpbkV4cHJlc3Npb24iLCJleHByZXNzaW9uVHlwZSIsInRyYW5zZm9ybUZ1bmN0aW9uIiwiaW5jbHVkZUFsbEV4cHJlc3Npb24iLCJzdWJFeHByZXNzaW9uIiwiYmluZGluZ1BhcmFtZXRlciIsIm5lZWRQYXJlbnRoZXNpcyIsImNvbXBpbGVDb25zdGFudE9iamVjdCIsImlzTnVsbGFibGUiLCJvYmplY3RzIiwicHJvcGVydGllcyIsImNoaWxkUmVzdWx0IiwiY29tcGlsZUV4cHJlc3Npb24iLCJjb21waWxlQ29uc3RhbnQiLCJlbWJlZGRlZEluQmluZGluZyIsImRvTm90U3RyaW5naWZ5IiwiY29tcGlsZVBhdGhJbk1vZGVsRXhwcmVzc2lvbiIsImV4cHJlc3Npb25Gb3JCaW5kaW5nIiwiZW1iZWRkZWRTZXBhcmF0b3IiLCJjb21wbGV4QmluZGluZ0RlZmluaXRpb24iLCJjb21waWxlUGF0aEluTW9kZWwiLCJvdXRCaW5kaW5nIiwic2VwYXJhdG9yIiwiY29tcGlsZUNvbXBsZXhUeXBlRXhwcmVzc2lvbiIsImNvbXBpbGVQYXRoUGFyYW1ldGVyIiwib3V0cHV0RW5kIiwiaGFzRWxlbWVudHMiLCJ3cmFwQmluZGluZ0V4cHJlc3Npb24iLCJwYXJlbnRoZXNpc1JlcXVpcmVkIiwia2VlcFRhcmdldFR5cGUiLCJoYXNFbWJlZGRlZEZ1bmN0aW9uQ2FsbE9yQmluZGluZyIsInN1YkZuIiwic3ViU3ViRm4iLCJhcmd1bWVudFN0cmluZyIsImFyZyIsImZuQ2FsbCIsInN1YnN0cmluZyIsImNvbXBhcmlzb25FeHByZXNzaW9uIiwiY29tcGlsZUNvbXBhcmlzb25FeHByZXNzaW9uIiwiaWZFbHNlRXhwcmVzc2lvbiIsInNldEV4cHJlc3Npb24iLCJjb25jYXRFeHByZXNzaW9uIiwibmVzdGVkRXhwcmVzc2lvbiIsImxlbmd0aEV4cHJlc3Npb24iLCJub3RFeHByZXNzaW9uIiwidHJ1dGh5RXhwcmVzc2lvbiIsImZvcm1hdHRlckV4cHJlc3Npb24iLCJjb21waWxlRm9ybWF0dGVyRXhwcmVzc2lvbiIsImNvbXBsZXhUeXBlRXhwcmVzc2lvbiIsImNvbXBpbGVPcGVyYW5kIiwiY29tcGlsZWRPcGVyYW5kIiwicGFydHMiLCJzaW5nbGVQYXRoIiwib3V0VmFsdWUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkJpbmRpbmdUb29sa2l0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcblx0QWN0aW9uUGFyYW1ldGVyLFxuXHRBbmRBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0QW5kQ29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHRBcHBseUFubm90YXRpb25FeHByZXNzaW9uLFxuXHRCb29sZWFuLFxuXHRDb25kaXRpb25hbENoZWNrT3JWYWx1ZSxcblx0RW50aXR5U2V0LFxuXHRFbnRpdHlUeXBlLFxuXHRFcUFubm90YXRpb25FeHByZXNzaW9uLFxuXHRFcUNvbmRpdGlvbmFsRXhwcmVzc2lvbixcblx0R2VBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0R2VDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdEd0QW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdEd0Q29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHRJZkFubm90YXRpb25FeHByZXNzaW9uLFxuXHRJZkFubm90YXRpb25FeHByZXNzaW9uVmFsdWUsXG5cdExlQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdExlQ29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHRMdEFubm90YXRpb25FeHByZXNzaW9uLFxuXHRMdENvbmRpdGlvbmFsRXhwcmVzc2lvbixcblx0TmVBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0TmVDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdE5vdEFubm90YXRpb25FeHByZXNzaW9uLFxuXHROb3RDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdE9yQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdE9yQ29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHRQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdFBhdGhDb25kaXRpb25FeHByZXNzaW9uLFxuXHRQcm9wZXJ0eSxcblx0UHJvcGVydHlBbm5vdGF0aW9uVmFsdWUsXG5cdENvbnN0YW50RXhwcmVzc2lvbiBhcyBWb2NhYkNvbnN0YW50RXhwcmVzc2lvblxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IENvbW1vbkFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgeyByZXNvbHZlRW51bVZhbHVlIH0gZnJvbSBcInNhcC9mZS9iYXNlL0Fubm90YXRpb25FbnVtXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdJbmZvSG9sZGVyIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuXG5leHBvcnQgdHlwZSBQcmltaXRpdmVUeXBlID0gc3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50IHwgYm9vbGVhbiB8IG9iamVjdCB8IG51bGwgfCB1bmRlZmluZWQ7XG50eXBlIERlZmluZWRQcmltaXRpdmVUeXBlID0gc3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50IHwgYm9vbGVhbiB8IG9iamVjdDtcbnR5cGUgUHJpbWl0aXZlVHlwZUNhc3Q8UD4gPSBQIGV4dGVuZHMgU3RyaW5nID8gc3RyaW5nIDogUCBleHRlbmRzIEJvb2xlYW4gPyBib29sZWFuIDogUCBleHRlbmRzIE51bWJlciA/IG51bWJlciA6IFA7XG50eXBlIEJhc2VFeHByZXNzaW9uPF9UPiA9IHtcblx0X3R5cGU6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEZvcm1hdE9wdGlvbnMgPSBQYXJ0aWFsPHtcblx0Y3VzdG9tVW5pdHM6IFJlY29yZDxzdHJpbmcsIG9iamVjdD47XG5cdGN1c3RvbUN1cnJlbmNpZXM6IFJlY29yZDxzdHJpbmcsIG9iamVjdD47XG5cdGRlY2ltYWxzOiBudW1iZXI7XG5cdGVtcHR5U3RyaW5nOiBudWxsIHwgbnVtYmVyIHwgc3RyaW5nO1xuXHRmaXNjYWxUeXBlOiBzdHJpbmc7XG5cdGdyb3VwaW5nRW5hYmxlZDogYm9vbGVhbjtcblx0bWF4RnJhY3Rpb25EaWdpdHM6IG51bWJlcjtcblx0bWF4SW50ZWdlckRpZ2l0czogbnVtYmVyO1xuXHRtaW5GcmFjdGlvbkRpZ2l0czogbnVtYmVyO1xuXHRtaW5JbnRlZ2VyRGlnaXRzOiBudW1iZXI7XG5cdHBhcnNlQXNTdHJpbmc6IGJvb2xlYW47XG5cdHBhcnNlS2VlcHNFbXB0eVN0cmluZzogYm9vbGVhbjtcblx0cGF0dGVybjogc3RyaW5nO1xuXHRwcmVjaXNpb246IG51bWJlcjtcblx0cHJlc2VydmVEZWNpbWFsczogYm9vbGVhbjtcblx0c2hvcnREZWNpbWFsczogbnVtYmVyO1xuXHRzaG9ydFJlZk51bWJlcjogbnVtYmVyO1xuXHRzaG93TWVhc3VyZTogYm9vbGVhbjtcblx0c2hvd051bWJlcjogYm9vbGVhbjtcblx0c2hvd1NjYWxlOiBib29sZWFuO1xuXHRzdHlsZTogc3RyaW5nO1xufT47XG5cbmV4cG9ydCB0eXBlIENvbnN0YW50RXhwcmVzc2lvbjxUPiA9IEJhc2VFeHByZXNzaW9uPFQ+ICYge1xuXHRfdHlwZTogXCJDb25zdGFudFwiO1xuXHR2YWx1ZTogVDtcbn07XG5cbnR5cGUgU2V0T3BlcmF0b3IgPSBcIiYmXCIgfCBcInx8XCI7XG5leHBvcnQgdHlwZSBTZXRFeHByZXNzaW9uID0gQmFzZUV4cHJlc3Npb248Ym9vbGVhbj4gJiB7XG5cdF90eXBlOiBcIlNldFwiO1xuXHRvcGVyYXRvcjogU2V0T3BlcmF0b3I7XG5cdG9wZXJhbmRzOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXTtcbn07XG5cbmV4cG9ydCB0eXBlIE5vdEV4cHJlc3Npb24gPSBCYXNlRXhwcmVzc2lvbjxib29sZWFuPiAmIHtcblx0X3R5cGU6IFwiTm90XCI7XG5cdG9wZXJhbmQ6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcbn07XG5cbmV4cG9ydCB0eXBlIFRydXRoeUV4cHJlc3Npb24gPSBCYXNlRXhwcmVzc2lvbjxib29sZWFuPiAmIHtcblx0X3R5cGU6IFwiVHJ1dGh5XCI7XG5cdG9wZXJhbmQ6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+O1xufTtcblxuZXhwb3J0IHR5cGUgUmVmZXJlbmNlRXhwcmVzc2lvbiA9IEJhc2VFeHByZXNzaW9uPG9iamVjdD4gJiB7XG5cdF90eXBlOiBcIlJlZlwiO1xuXHRyZWY6IHN0cmluZyB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBGb3JtYXR0ZXJFeHByZXNzaW9uPFQ+ID0gQmFzZUV4cHJlc3Npb248VD4gJiB7XG5cdF90eXBlOiBcIkZvcm1hdHRlclwiO1xuXHRmbjogc3RyaW5nO1xuXHRwYXJhbWV0ZXJzOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj5bXTtcbn07XG5cbnR5cGUgQ29tcGxleFR5cGVFeHByZXNzaW9uPFQ+ID0gQmFzZUV4cHJlc3Npb248VD4gJiB7XG5cdF90eXBlOiBcIkNvbXBsZXhUeXBlXCI7XG5cdHR5cGU6IHN0cmluZztcblx0Zm9ybWF0T3B0aW9uczogRm9ybWF0T3B0aW9ucztcblx0Y29uc3RyYWludHM6IG9iamVjdDtcblx0cGFyYW1ldGVyczogb2JqZWN0O1xuXHRiaW5kaW5nUGFyYW1ldGVyczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+W107XG59O1xuXG5leHBvcnQgdHlwZSBGdW5jdGlvbkV4cHJlc3Npb248VD4gPSBCYXNlRXhwcmVzc2lvbjxUPiAmIHtcblx0X3R5cGU6IFwiRnVuY3Rpb25cIjtcblx0b2JqPzogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPG9iamVjdD47XG5cdGZuOiBzdHJpbmc7XG5cdGlzRm9ybWF0dGluZ0ZuOiBib29sZWFuO1xuXHRwYXJhbWV0ZXJzOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj5bXTtcbn07XG5cbmV4cG9ydCB0eXBlIENvbmNhdEV4cHJlc3Npb24gPSBCYXNlRXhwcmVzc2lvbjxzdHJpbmc+ICYge1xuXHRfdHlwZTogXCJDb25jYXRcIjtcblx0ZXhwcmVzc2lvbnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+W107XG59O1xuXG5leHBvcnQgdHlwZSBMZW5ndGhFeHByZXNzaW9uID0gQmFzZUV4cHJlc3Npb248c3RyaW5nPiAmIHtcblx0X3R5cGU6IFwiTGVuZ3RoXCI7XG5cdHBhdGhJbk1vZGVsOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248dW5rbm93bj47XG59O1xuXG50eXBlIFVucmVzb2x2YWJsZVBhdGhFeHByZXNzaW9uID0gQmFzZUV4cHJlc3Npb248c3RyaW5nPiAmIHtcblx0X3R5cGU6IFwiVW5yZXNvbHZhYmxlXCI7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIFBhdGhJbk1vZGVsRXhwcmVzc2lvblxuICovXG5leHBvcnQgdHlwZSBQYXRoSW5Nb2RlbEV4cHJlc3Npb248VD4gPSBCYXNlRXhwcmVzc2lvbjxUPiAmIHtcblx0X3R5cGU6IFwiUGF0aEluTW9kZWxcIjtcblx0bW9kZWxOYW1lPzogc3RyaW5nO1xuXHRwYXRoOiBzdHJpbmc7XG5cdHRhcmdldEVudGl0eVNldD86IEVudGl0eVNldDtcblx0dHlwZT86IHN0cmluZztcblx0Y29uc3RyYWludHM/OiBCaW5kaW5nQ29uc3RyYWludHM7XG5cdHBhcmFtZXRlcnM/OiBvYmplY3Q7XG5cdHRhcmdldFR5cGU/OiBzdHJpbmc7XG5cdG1vZGU/OiBzdHJpbmc7XG5cdGZvcm1hdE9wdGlvbnM/OiBGb3JtYXRPcHRpb25zO1xuXHRhbHdheXNLZWVwVGFyZ2V0VHlwZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBFbWJlZGRlZFVJNUJpbmRpbmdFeHByZXNzaW9uPFQ+ID0gQmFzZUV4cHJlc3Npb248VD4gJiB7XG5cdF90eXBlOiBcIkVtYmVkZGVkQmluZGluZ1wiO1xuXHR2YWx1ZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgRW1iZWRkZWRVSTVFeHByZXNzaW9uQmluZGluZ0V4cHJlc3Npb248VD4gPSBCYXNlRXhwcmVzc2lvbjxUPiAmIHtcblx0X3R5cGU6IFwiRW1iZWRkZWRFeHByZXNzaW9uQmluZGluZ1wiO1xuXHR2YWx1ZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQ29tcGFyaXNvbk9wZXJhdG9yID0gXCI9PT1cIiB8IFwiIT09XCIgfCBcIj49XCIgfCBcIj5cIiB8IFwiPD1cIiB8IFwiPFwiO1xuZXhwb3J0IHR5cGUgQ29tcGFyaXNvbkV4cHJlc3Npb24gPSBCYXNlRXhwcmVzc2lvbjxib29sZWFuPiAmIHtcblx0X3R5cGU6IFwiQ29tcGFyaXNvblwiO1xuXHRvcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yO1xuXHRvcGVyYW5kMTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+O1xuXHRvcGVyYW5kMjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+O1xufTtcblxuZXhwb3J0IHR5cGUgSWZFbHNlRXhwcmVzc2lvbjxUPiA9IEJhc2VFeHByZXNzaW9uPFQ+ICYge1xuXHRfdHlwZTogXCJJZkVsc2VcIjtcblx0Y29uZGl0aW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdG9uVHJ1ZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHRvbkZhbHNlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG59O1xuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvcGVydHkoc2VydmljZU9iamVjdDogdW5rbm93bik6IHNlcnZpY2VPYmplY3QgaXMgUHJvcGVydHkge1xuXHRyZXR1cm4gKHNlcnZpY2VPYmplY3QgYXMgUHJvcGVydHkpPy5fdHlwZSA9PT0gXCJQcm9wZXJ0eVwiO1xufVxuXG4vKipcbiAqIEFuIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgdG8gdHlwZSBULlxuICogQHR5cGVkZWYgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uXG4gKi9cbmV4cG9ydCB0eXBlIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPiA9XG5cdHwgVW5yZXNvbHZhYmxlUGF0aEV4cHJlc3Npb25cblx0fCBDb25zdGFudEV4cHJlc3Npb248VD5cblx0fCBTZXRFeHByZXNzaW9uXG5cdHwgTm90RXhwcmVzc2lvblxuXHR8IFRydXRoeUV4cHJlc3Npb25cblx0fCBDb25jYXRFeHByZXNzaW9uXG5cdHwgTGVuZ3RoRXhwcmVzc2lvblxuXHR8IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUPlxuXHR8IEVtYmVkZGVkVUk1QmluZGluZ0V4cHJlc3Npb248VD5cblx0fCBFbWJlZGRlZFVJNUV4cHJlc3Npb25CaW5kaW5nRXhwcmVzc2lvbjxUPlxuXHR8IENvbXBhcmlzb25FeHByZXNzaW9uXG5cdHwgSWZFbHNlRXhwcmVzc2lvbjxUPlxuXHR8IEZvcm1hdHRlckV4cHJlc3Npb248VD5cblx0fCBDb21wbGV4VHlwZUV4cHJlc3Npb248VD5cblx0fCBSZWZlcmVuY2VFeHByZXNzaW9uXG5cdHwgRnVuY3Rpb25FeHByZXNzaW9uPFQ+O1xuXG50eXBlIFR5cGVNYXBwaW5nRGVmaW5pdGlvbiA9IHtcblx0dHlwZTogc3RyaW5nO1xuXHRjb25zdHJhaW50cz86IHtcblx0XHQkUHJlY2lzaW9uPzogc3RyaW5nO1xuXHRcdCRWND86IHN0cmluZztcblx0XHQkU2NhbGU/OiBzdHJpbmc7XG5cdFx0JE1heExlbmd0aD86IHN0cmluZztcblx0XHQkTnVsbGFibGU/OiBzdHJpbmc7XG5cdFx0XCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWluaW11bS8kRGVjaW1hbFwiPzogc3RyaW5nO1xuXHRcdFwiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1pbmltdW1AT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuRXhjbHVzaXZlXCI/OiBzdHJpbmc7XG5cdFx0XCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWF4aW11bS8kRGVjaW1hbFwiPzogc3RyaW5nO1xuXHRcdFwiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1heGltdW1AT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuRXhjbHVzaXZlXCI/OiBzdHJpbmc7XG5cdFx0XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRGlnaXRTZXF1ZW5jZVwiPzogc3RyaW5nO1xuXHR9O1xufTtcbmV4cG9ydCBjb25zdCBFRE1fVFlQRV9NQVBQSU5HOiBSZWNvcmQ8c3RyaW5nLCBUeXBlTWFwcGluZ0RlZmluaXRpb24+ID0ge1xuXHRcIkVkbS5Cb29sZWFuXCI6IHsgdHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Cb29sZWFuXCIgfSxcblx0XCJFZG0uQnl0ZVwiOiB7IHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuQnl0ZVwiIH0sXG5cdFwiRWRtLkRhdGVcIjogeyB0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRhdGVcIiB9LFxuXHRcIkVkbS5EYXRlVGltZU9mZnNldFwiOiB7XG5cdFx0Y29uc3RyYWludHM6IHtcblx0XHRcdCRQcmVjaXNpb246IFwicHJlY2lzaW9uXCIsXG5cdFx0XHQkVjQ6IFwiVjRcIlxuXHRcdH0sXG5cdFx0dHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5EYXRlVGltZU9mZnNldFwiXG5cdH0sXG5cdFwiRWRtLkRlY2ltYWxcIjoge1xuXHRcdGNvbnN0cmFpbnRzOiB7XG5cdFx0XHRcIkBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NaW5pbXVtLyREZWNpbWFsXCI6IFwibWluaW11bVwiLFxuXHRcdFx0XCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWluaW11bUBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5FeGNsdXNpdmVcIjogXCJtaW5pbXVtRXhjbHVzaXZlXCIsXG5cdFx0XHRcIkBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NYXhpbXVtLyREZWNpbWFsXCI6IFwibWF4aW11bVwiLFxuXHRcdFx0XCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWF4aW11bUBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5FeGNsdXNpdmVcIjogXCJtYXhpbXVtRXhjbHVzaXZlXCIsXG5cdFx0XHQkUHJlY2lzaW9uOiBcInByZWNpc2lvblwiLFxuXHRcdFx0JFNjYWxlOiBcInNjYWxlXCJcblx0XHR9LFxuXHRcdHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRGVjaW1hbFwiXG5cdH0sXG5cdFwiRWRtLkRvdWJsZVwiOiB7IHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRG91YmxlXCIgfSxcblx0XCJFZG0uR3VpZFwiOiB7IHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuR3VpZFwiIH0sXG5cdFwiRWRtLkludDE2XCI6IHsgdHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnQxNlwiIH0sXG5cdFwiRWRtLkludDMyXCI6IHsgdHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnQzMlwiIH0sXG5cdFwiRWRtLkludDY0XCI6IHsgdHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnQ2NFwiIH0sXG5cdFwiRWRtLlNCeXRlXCI6IHsgdHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TQnl0ZVwiIH0sXG5cdFwiRWRtLlNpbmdsZVwiOiB7IHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU2luZ2xlXCIgfSxcblx0XCJFZG0uU3RyZWFtXCI6IHsgdHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJlYW1cIiB9LFxuXHRcIkVkbS5CaW5hcnlcIjogeyB0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmVhbVwiIH0sXG5cdFwiRWRtLlN0cmluZ1wiOiB7XG5cdFx0Y29uc3RyYWludHM6IHtcblx0XHRcdFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0RpZ2l0U2VxdWVuY2VcIjogXCJpc0RpZ2l0U2VxdWVuY2VcIixcblx0XHRcdCRNYXhMZW5ndGg6IFwibWF4TGVuZ3RoXCIsXG5cdFx0XHQkTnVsbGFibGU6IFwibnVsbGFibGVcIlxuXHRcdH0sXG5cdFx0dHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIlxuXHR9LFxuXHRcIkVkbS5UaW1lT2ZEYXlcIjoge1xuXHRcdGNvbnN0cmFpbnRzOiB7XG5cdFx0XHQkUHJlY2lzaW9uOiBcInByZWNpc2lvblwiXG5cdFx0fSxcblx0XHR0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlRpbWVPZkRheVwiXG5cdH1cbn07XG5cbi8qKlxuICogQW4gZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRlcyB0byB0eXBlIFQsIG9yIGEgY29uc3RhbnQgdmFsdWUgb2YgdHlwZSBUXG4gKi9cbmV4cG9ydCB0eXBlIEV4cHJlc3Npb25PclByaW1pdGl2ZTxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4gPSBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4gfCBUO1xuXG5leHBvcnQgY29uc3QgdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjogVW5yZXNvbHZhYmxlUGF0aEV4cHJlc3Npb24gPSB7XG5cdF90eXBlOiBcIlVucmVzb2x2YWJsZVwiXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlWG1sQXR0cmlidXRlKGlucHV0U3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gaW5wdXRTdHJpbmcucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzVW5yZXNvbHZhYmxlRXhwcmVzc2lvbiguLi5leHByZXNzaW9uczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+W10pOiBib29sZWFuIHtcblx0cmV0dXJuIGV4cHJlc3Npb25zLmZpbmQoKGV4cHIpID0+IGV4cHIuX3R5cGUgPT09IFwiVW5yZXNvbHZhYmxlXCIpICE9PSB1bmRlZmluZWQ7XG59XG4vKipcbiAqIENoZWNrIHR3byBleHByZXNzaW9ucyBmb3IgKGRlZXApIGVxdWFsaXR5LlxuICogQHBhcmFtIGFcbiAqIEBwYXJhbSBiXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHR3byBleHByZXNzaW9ucyBhcmUgZXF1YWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWw8VD4oYTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+LCBiOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4pOiBib29sZWFuIHtcblx0aWYgKGEuX3R5cGUgIT09IGIuX3R5cGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRzd2l0Y2ggKGEuX3R5cGUpIHtcblx0XHRjYXNlIFwiVW5yZXNvbHZhYmxlXCI6XG5cdFx0XHRyZXR1cm4gZmFsc2U7IC8vIFVucmVzb2x2YWJsZSBpcyBuZXZlciBlcXVhbCB0byBhbnl0aGluZyBldmVuIGl0c2VsZlxuXHRcdGNhc2UgXCJDb25zdGFudFwiOlxuXHRcdGNhc2UgXCJFbWJlZGRlZEJpbmRpbmdcIjpcblx0XHRjYXNlIFwiRW1iZWRkZWRFeHByZXNzaW9uQmluZGluZ1wiOlxuXHRcdFx0cmV0dXJuIGEudmFsdWUgPT09IChiIGFzIENvbnN0YW50RXhwcmVzc2lvbjxUPikudmFsdWU7XG5cblx0XHRjYXNlIFwiTm90XCI6XG5cdFx0XHRyZXR1cm4gX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChhLm9wZXJhbmQsIChiIGFzIE5vdEV4cHJlc3Npb24pLm9wZXJhbmQpO1xuXHRcdGNhc2UgXCJUcnV0aHlcIjpcblx0XHRcdHJldHVybiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGEub3BlcmFuZCwgKGIgYXMgVHJ1dGh5RXhwcmVzc2lvbikub3BlcmFuZCk7XG5cdFx0Y2FzZSBcIlNldFwiOlxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0YS5vcGVyYXRvciA9PT0gKGIgYXMgU2V0RXhwcmVzc2lvbikub3BlcmF0b3IgJiZcblx0XHRcdFx0YS5vcGVyYW5kcy5sZW5ndGggPT09IChiIGFzIFNldEV4cHJlc3Npb24pLm9wZXJhbmRzLmxlbmd0aCAmJlxuXHRcdFx0XHRhLm9wZXJhbmRzLmV2ZXJ5KChleHByZXNzaW9uKSA9PlxuXHRcdFx0XHRcdChiIGFzIFNldEV4cHJlc3Npb24pLm9wZXJhbmRzLnNvbWUoKG90aGVyRXhwcmVzc2lvbikgPT4gX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChleHByZXNzaW9uLCBvdGhlckV4cHJlc3Npb24pKVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXG5cdFx0Y2FzZSBcIklmRWxzZVwiOlxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0X2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChhLmNvbmRpdGlvbiwgKGIgYXMgSWZFbHNlRXhwcmVzc2lvbjxUPikuY29uZGl0aW9uKSAmJlxuXHRcdFx0XHRfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGEub25UcnVlLCAoYiBhcyBJZkVsc2VFeHByZXNzaW9uPFQ+KS5vblRydWUpICYmXG5cdFx0XHRcdF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoYS5vbkZhbHNlLCAoYiBhcyBJZkVsc2VFeHByZXNzaW9uPFQ+KS5vbkZhbHNlKVxuXHRcdFx0KTtcblxuXHRcdGNhc2UgXCJDb21wYXJpc29uXCI6XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRhLm9wZXJhdG9yID09PSAoYiBhcyBDb21wYXJpc29uRXhwcmVzc2lvbikub3BlcmF0b3IgJiZcblx0XHRcdFx0X2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChhLm9wZXJhbmQxLCAoYiBhcyBDb21wYXJpc29uRXhwcmVzc2lvbikub3BlcmFuZDEpICYmXG5cdFx0XHRcdF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoYS5vcGVyYW5kMiwgKGIgYXMgQ29tcGFyaXNvbkV4cHJlc3Npb24pLm9wZXJhbmQyKVxuXHRcdFx0KTtcblxuXHRcdGNhc2UgXCJDb25jYXRcIjpcblx0XHRcdGNvbnN0IGFFeHByZXNzaW9ucyA9IGEuZXhwcmVzc2lvbnM7XG5cdFx0XHRjb25zdCBiRXhwcmVzc2lvbnMgPSAoYiBhcyBDb25jYXRFeHByZXNzaW9uKS5leHByZXNzaW9ucztcblx0XHRcdGlmIChhRXhwcmVzc2lvbnMubGVuZ3RoICE9PSBiRXhwcmVzc2lvbnMubGVuZ3RoKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBhRXhwcmVzc2lvbnMuZXZlcnkoKGV4cHJlc3Npb24sIGluZGV4KSA9PiB7XG5cdFx0XHRcdHJldHVybiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGV4cHJlc3Npb24sIGJFeHByZXNzaW9uc1tpbmRleF0pO1xuXHRcdFx0fSk7XG5cblx0XHRjYXNlIFwiTGVuZ3RoXCI6XG5cdFx0XHRyZXR1cm4gX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChhLnBhdGhJbk1vZGVsLCAoYiBhcyBMZW5ndGhFeHByZXNzaW9uKS5wYXRoSW5Nb2RlbCk7XG5cblx0XHRjYXNlIFwiUGF0aEluTW9kZWxcIjpcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGEubW9kZWxOYW1lID09PSAoYiBhcyBQYXRoSW5Nb2RlbEV4cHJlc3Npb248VD4pLm1vZGVsTmFtZSAmJlxuXHRcdFx0XHRhLnBhdGggPT09IChiIGFzIFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUPikucGF0aCAmJlxuXHRcdFx0XHRhLnRhcmdldEVudGl0eVNldCA9PT0gKGIgYXMgUGF0aEluTW9kZWxFeHByZXNzaW9uPFQ+KS50YXJnZXRFbnRpdHlTZXRcblx0XHRcdCk7XG5cblx0XHRjYXNlIFwiRm9ybWF0dGVyXCI6XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRhLmZuID09PSAoYiBhcyBGb3JtYXR0ZXJFeHByZXNzaW9uPFQ+KS5mbiAmJlxuXHRcdFx0XHRhLnBhcmFtZXRlcnMubGVuZ3RoID09PSAoYiBhcyBGb3JtYXR0ZXJFeHByZXNzaW9uPFQ+KS5wYXJhbWV0ZXJzLmxlbmd0aCAmJlxuXHRcdFx0XHRhLnBhcmFtZXRlcnMuZXZlcnkoKHZhbHVlLCBpbmRleCkgPT4gX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbCgoYiBhcyBGb3JtYXR0ZXJFeHByZXNzaW9uPFQ+KS5wYXJhbWV0ZXJzW2luZGV4XSwgdmFsdWUpKVxuXHRcdFx0KTtcblx0XHRjYXNlIFwiQ29tcGxleFR5cGVcIjpcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGEudHlwZSA9PT0gKGIgYXMgQ29tcGxleFR5cGVFeHByZXNzaW9uPFQ+KS50eXBlICYmXG5cdFx0XHRcdGEuYmluZGluZ1BhcmFtZXRlcnMubGVuZ3RoID09PSAoYiBhcyBDb21wbGV4VHlwZUV4cHJlc3Npb248VD4pLmJpbmRpbmdQYXJhbWV0ZXJzLmxlbmd0aCAmJlxuXHRcdFx0XHRhLmJpbmRpbmdQYXJhbWV0ZXJzLmV2ZXJ5KCh2YWx1ZSwgaW5kZXgpID0+XG5cdFx0XHRcdFx0X2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbCgoYiBhcyBDb21wbGV4VHlwZUV4cHJlc3Npb248VD4pLmJpbmRpbmdQYXJhbWV0ZXJzW2luZGV4XSwgdmFsdWUpXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0Y2FzZSBcIkZ1bmN0aW9uXCI6XG5cdFx0XHRjb25zdCBvdGhlckZ1bmN0aW9uID0gYiBhcyBGdW5jdGlvbkV4cHJlc3Npb248VD47XG5cdFx0XHRpZiAoYS5vYmogPT09IHVuZGVmaW5lZCB8fCBvdGhlckZ1bmN0aW9uLm9iaiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybiBhLm9iaiA9PT0gb3RoZXJGdW5jdGlvbjtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0YS5mbiA9PT0gb3RoZXJGdW5jdGlvbi5mbiAmJlxuXHRcdFx0XHRfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGEub2JqLCBvdGhlckZ1bmN0aW9uLm9iaikgJiZcblx0XHRcdFx0YS5wYXJhbWV0ZXJzLmxlbmd0aCA9PT0gb3RoZXJGdW5jdGlvbi5wYXJhbWV0ZXJzLmxlbmd0aCAmJlxuXHRcdFx0XHRhLnBhcmFtZXRlcnMuZXZlcnkoKHZhbHVlLCBpbmRleCkgPT4gX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChvdGhlckZ1bmN0aW9uLnBhcmFtZXRlcnNbaW5kZXhdLCB2YWx1ZSkpXG5cdFx0XHQpO1xuXG5cdFx0Y2FzZSBcIlJlZlwiOlxuXHRcdFx0cmV0dXJuIGEucmVmID09PSAoYiBhcyBSZWZlcmVuY2VFeHByZXNzaW9uKS5yZWY7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgbmVzdGVkIFNldEV4cHJlc3Npb24gYnkgaW5saW5pbmcgb3BlcmFuZHMgb2YgdHlwZSBTZXRFeHByZXNzaW9uIHdpdGggdGhlIHNhbWUgb3BlcmF0b3IuXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgZXhwcmVzc2lvbiB0byBmbGF0dGVuXG4gKiBAcmV0dXJucyBBIG5ldyBTZXRFeHByZXNzaW9uIHdpdGggdGhlIHNhbWUgb3BlcmF0b3JcbiAqL1xuZnVuY3Rpb24gZmxhdHRlblNldEV4cHJlc3Npb24oZXhwcmVzc2lvbjogU2V0RXhwcmVzc2lvbik6IFNldEV4cHJlc3Npb24ge1xuXHRyZXR1cm4gZXhwcmVzc2lvbi5vcGVyYW5kcy5yZWR1Y2UoXG5cdFx0KHJlc3VsdDogU2V0RXhwcmVzc2lvbiwgb3BlcmFuZCkgPT4ge1xuXHRcdFx0Y29uc3QgY2FuZGlkYXRlc0ZvckZsYXR0ZW5pbmcgPVxuXHRcdFx0XHRvcGVyYW5kLl90eXBlID09PSBcIlNldFwiICYmIG9wZXJhbmQub3BlcmF0b3IgPT09IGV4cHJlc3Npb24ub3BlcmF0b3IgPyBvcGVyYW5kLm9wZXJhbmRzIDogW29wZXJhbmRdO1xuXHRcdFx0Y2FuZGlkYXRlc0ZvckZsYXR0ZW5pbmcuZm9yRWFjaCgoY2FuZGlkYXRlKSA9PiB7XG5cdFx0XHRcdGlmIChyZXN1bHQub3BlcmFuZHMuZXZlcnkoKGUpID0+ICFfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGUsIGNhbmRpZGF0ZSkpKSB7XG5cdFx0XHRcdFx0cmVzdWx0Lm9wZXJhbmRzLnB1c2goY2FuZGlkYXRlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0sXG5cdFx0eyBfdHlwZTogXCJTZXRcIiwgb3BlcmF0b3I6IGV4cHJlc3Npb24ub3BlcmF0b3IsIG9wZXJhbmRzOiBbXSB9XG5cdCk7XG59XG5cbi8qKlxuICogRGV0ZWN0cyB3aGV0aGVyIGFuIGFycmF5IG9mIGJvb2xlYW4gZXhwcmVzc2lvbnMgY29udGFpbnMgYW4gZXhwcmVzc2lvbiBhbmQgaXRzIG5lZ2F0aW9uLlxuICogQHBhcmFtIGV4cHJlc3Npb25zIEFycmF5IG9mIGV4cHJlc3Npb25zXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHNldCBvZiBleHByZXNzaW9ucyBjb250YWlucyBhbiBleHByZXNzaW9uIGFuZCBpdHMgbmVnYXRpb25cbiAqL1xuZnVuY3Rpb24gaGFzT3Bwb3NpdGVFeHByZXNzaW9ucyhleHByZXNzaW9uczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10pOiBib29sZWFuIHtcblx0Y29uc3QgbmVnYXRlZEV4cHJlc3Npb25zID0gZXhwcmVzc2lvbnMubWFwKG5vdCk7XG5cdHJldHVybiBleHByZXNzaW9ucy5zb21lKChleHByZXNzaW9uLCBpbmRleCkgPT4ge1xuXHRcdGZvciAobGV0IGkgPSBpbmRleCArIDE7IGkgPCBuZWdhdGVkRXhwcmVzc2lvbnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmIChfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGV4cHJlc3Npb24sIG5lZ2F0ZWRFeHByZXNzaW9uc1tpXSkpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG59XG5cbi8qKlxuICogTG9naWNhbCBgYW5kYCBleHByZXNzaW9uLlxuICpcbiAqIFRoZSBleHByZXNzaW9uIGlzIHNpbXBsaWZpZWQgdG8gZmFsc2UgaWYgdGhpcyBjYW4gYmUgZGVjaWRlZCBzdGF0aWNhbGx5ICh0aGF0IGlzLCBpZiBvbmUgb3BlcmFuZCBpcyBhIGNvbnN0YW50XG4gKiBmYWxzZSBvciBpZiB0aGUgZXhwcmVzc2lvbiBjb250YWlucyBhbiBvcGVyYW5kIGFuZCBpdHMgbmVnYXRpb24pLlxuICogQHBhcmFtIG9wZXJhbmRzIEV4cHJlc3Npb25zIHRvIGNvbm5lY3QgYnkgYGFuZGBcbiAqIEByZXR1cm5zIEV4cHJlc3Npb24gZXZhbHVhdGluZyB0byBib29sZWFuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbmQoLi4ub3BlcmFuZHM6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPltdKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgZXhwcmVzc2lvbnMgPSBmbGF0dGVuU2V0RXhwcmVzc2lvbih7XG5cdFx0X3R5cGU6IFwiU2V0XCIsXG5cdFx0b3BlcmF0b3I6IFwiJiZcIixcblx0XHRvcGVyYW5kczogb3BlcmFuZHMubWFwKHdyYXBQcmltaXRpdmUpXG5cdH0pLm9wZXJhbmRzO1xuXG5cdGlmIChoYXNVbnJlc29sdmFibGVFeHByZXNzaW9uKC4uLmV4cHJlc3Npb25zKSkge1xuXHRcdHJldHVybiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xuXHR9XG5cdGxldCBpc1N0YXRpY0ZhbHNlID0gZmFsc2U7XG5cdGNvbnN0IG5vblRyaXZpYWxFeHByZXNzaW9uID0gZXhwcmVzc2lvbnMuZmlsdGVyKChleHByZXNzaW9uKSA9PiB7XG5cdFx0aWYgKGlzRmFsc2UoZXhwcmVzc2lvbikpIHtcblx0XHRcdGlzU3RhdGljRmFsc2UgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gIWlzQ29uc3RhbnQoZXhwcmVzc2lvbik7XG5cdH0pO1xuXHRpZiAoaXNTdGF0aWNGYWxzZSkge1xuXHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdH0gZWxzZSBpZiAobm9uVHJpdmlhbEV4cHJlc3Npb24ubGVuZ3RoID09PSAwKSB7XG5cdFx0Ly8gUmVzb2x2ZSB0aGUgY29uc3RhbnQgdGhlblxuXHRcdGNvbnN0IGlzVmFsaWQgPSBleHByZXNzaW9ucy5yZWR1Y2UoKHJlc3VsdCwgZXhwcmVzc2lvbikgPT4gcmVzdWx0ICYmIGlzVHJ1ZShleHByZXNzaW9uKSwgdHJ1ZSk7XG5cdFx0cmV0dXJuIGNvbnN0YW50KGlzVmFsaWQpO1xuXHR9IGVsc2UgaWYgKG5vblRyaXZpYWxFeHByZXNzaW9uLmxlbmd0aCA9PT0gMSkge1xuXHRcdHJldHVybiBub25Ucml2aWFsRXhwcmVzc2lvblswXTtcblx0fSBlbHNlIGlmIChoYXNPcHBvc2l0ZUV4cHJlc3Npb25zKG5vblRyaXZpYWxFeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdF90eXBlOiBcIlNldFwiLFxuXHRcdFx0b3BlcmF0b3I6IFwiJiZcIixcblx0XHRcdG9wZXJhbmRzOiBub25Ucml2aWFsRXhwcmVzc2lvblxuXHRcdH07XG5cdH1cbn1cblxuLyoqXG4gKiBMb2dpY2FsIGBvcmAgZXhwcmVzc2lvbi5cbiAqXG4gKiBUaGUgZXhwcmVzc2lvbiBpcyBzaW1wbGlmaWVkIHRvIHRydWUgaWYgdGhpcyBjYW4gYmUgZGVjaWRlZCBzdGF0aWNhbGx5ICh0aGF0IGlzLCBpZiBvbmUgb3BlcmFuZCBpcyBhIGNvbnN0YW50XG4gKiB0cnVlIG9yIGlmIHRoZSBleHByZXNzaW9uIGNvbnRhaW5zIGFuIG9wZXJhbmQgYW5kIGl0cyBuZWdhdGlvbikuXG4gKiBAcGFyYW0gb3BlcmFuZHMgRXhwcmVzc2lvbnMgdG8gY29ubmVjdCBieSBgb3JgXG4gKiBAcmV0dXJucyBFeHByZXNzaW9uIGV2YWx1YXRpbmcgdG8gYm9vbGVhblxuICovXG5leHBvcnQgZnVuY3Rpb24gb3IoLi4ub3BlcmFuZHM6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPltdKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgZXhwcmVzc2lvbnMgPSBmbGF0dGVuU2V0RXhwcmVzc2lvbih7XG5cdFx0X3R5cGU6IFwiU2V0XCIsXG5cdFx0b3BlcmF0b3I6IFwifHxcIixcblx0XHRvcGVyYW5kczogb3BlcmFuZHMubWFwKHdyYXBQcmltaXRpdmUpXG5cdH0pLm9wZXJhbmRzO1xuXHRpZiAoaGFzVW5yZXNvbHZhYmxlRXhwcmVzc2lvbiguLi5leHByZXNzaW9ucykpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjtcblx0fVxuXHRsZXQgaXNTdGF0aWNUcnVlID0gZmFsc2U7XG5cdGNvbnN0IG5vblRyaXZpYWxFeHByZXNzaW9uID0gZXhwcmVzc2lvbnMuZmlsdGVyKChleHByZXNzaW9uKSA9PiB7XG5cdFx0aWYgKGlzVHJ1ZShleHByZXNzaW9uKSkge1xuXHRcdFx0aXNTdGF0aWNUcnVlID0gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuICFpc0NvbnN0YW50KGV4cHJlc3Npb24pIHx8IGV4cHJlc3Npb24udmFsdWU7XG5cdH0pO1xuXHRpZiAoaXNTdGF0aWNUcnVlKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KHRydWUpO1xuXHR9IGVsc2UgaWYgKG5vblRyaXZpYWxFeHByZXNzaW9uLmxlbmd0aCA9PT0gMCkge1xuXHRcdC8vIFJlc29sdmUgdGhlIGNvbnN0YW50IHRoZW5cblx0XHRjb25zdCBpc1ZhbGlkID0gZXhwcmVzc2lvbnMucmVkdWNlKChyZXN1bHQsIGV4cHJlc3Npb24pID0+IHJlc3VsdCAmJiBpc1RydWUoZXhwcmVzc2lvbiksIHRydWUpO1xuXHRcdHJldHVybiBjb25zdGFudChpc1ZhbGlkKTtcblx0fSBlbHNlIGlmIChub25Ucml2aWFsRXhwcmVzc2lvbi5sZW5ndGggPT09IDEpIHtcblx0XHRyZXR1cm4gbm9uVHJpdmlhbEV4cHJlc3Npb25bMF07XG5cdH0gZWxzZSBpZiAoaGFzT3Bwb3NpdGVFeHByZXNzaW9ucyhub25Ucml2aWFsRXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdF90eXBlOiBcIlNldFwiLFxuXHRcdFx0b3BlcmF0b3I6IFwifHxcIixcblx0XHRcdG9wZXJhbmRzOiBub25Ucml2aWFsRXhwcmVzc2lvblxuXHRcdH07XG5cdH1cbn1cblxuLyoqXG4gKiBMb2dpY2FsIGBub3RgIG9wZXJhdG9yLlxuICogQHBhcmFtIG9wZXJhbmQgVGhlIGV4cHJlc3Npb24gdG8gcmV2ZXJzZVxuICogQHJldHVybnMgVGhlIHJlc3VsdGluZyBleHByZXNzaW9uIHRoYXQgZXZhbHVhdGVzIHRvIGJvb2xlYW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vdChvcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8Ym9vbGVhbj4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRvcGVyYW5kID0gd3JhcFByaW1pdGl2ZShvcGVyYW5kKTtcblx0aWYgKGhhc1VucmVzb2x2YWJsZUV4cHJlc3Npb24ob3BlcmFuZCkpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjtcblx0fSBlbHNlIGlmIChpc0NvbnN0YW50KG9wZXJhbmQpKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KCFvcGVyYW5kLnZhbHVlKTtcblx0fSBlbHNlIGlmIChcblx0XHR0eXBlb2Ygb3BlcmFuZCA9PT0gXCJvYmplY3RcIiAmJlxuXHRcdG9wZXJhbmQuX3R5cGUgPT09IFwiU2V0XCIgJiZcblx0XHRvcGVyYW5kLm9wZXJhdG9yID09PSBcInx8XCIgJiZcblx0XHRvcGVyYW5kLm9wZXJhbmRzLmV2ZXJ5KChleHByZXNzaW9uKSA9PiBpc0NvbnN0YW50KGV4cHJlc3Npb24pIHx8IGlzQ29tcGFyaXNvbihleHByZXNzaW9uKSlcblx0KSB7XG5cdFx0cmV0dXJuIGFuZCguLi5vcGVyYW5kLm9wZXJhbmRzLm1hcCgoZXhwcmVzc2lvbikgPT4gbm90KGV4cHJlc3Npb24pKSk7XG5cdH0gZWxzZSBpZiAoXG5cdFx0dHlwZW9mIG9wZXJhbmQgPT09IFwib2JqZWN0XCIgJiZcblx0XHRvcGVyYW5kLl90eXBlID09PSBcIlNldFwiICYmXG5cdFx0b3BlcmFuZC5vcGVyYXRvciA9PT0gXCImJlwiICYmXG5cdFx0b3BlcmFuZC5vcGVyYW5kcy5ldmVyeSgoZXhwcmVzc2lvbikgPT4gaXNDb25zdGFudChleHByZXNzaW9uKSB8fCBpc0NvbXBhcmlzb24oZXhwcmVzc2lvbikpXG5cdCkge1xuXHRcdHJldHVybiBvciguLi5vcGVyYW5kLm9wZXJhbmRzLm1hcCgoZXhwcmVzc2lvbikgPT4gbm90KGV4cHJlc3Npb24pKSk7XG5cdH0gZWxzZSBpZiAoaXNDb21wYXJpc29uKG9wZXJhbmQpKSB7XG5cdFx0Ly8gQ3JlYXRlIHRoZSByZXZlcnNlIGNvbXBhcmlzb25cblx0XHRzd2l0Y2ggKG9wZXJhbmQub3BlcmF0b3IpIHtcblx0XHRcdGNhc2UgXCIhPT1cIjpcblx0XHRcdFx0cmV0dXJuIHsgLi4ub3BlcmFuZCwgb3BlcmF0b3I6IFwiPT09XCIgfTtcblx0XHRcdGNhc2UgXCI8XCI6XG5cdFx0XHRcdHJldHVybiB7IC4uLm9wZXJhbmQsIG9wZXJhdG9yOiBcIj49XCIgfTtcblx0XHRcdGNhc2UgXCI8PVwiOlxuXHRcdFx0XHRyZXR1cm4geyAuLi5vcGVyYW5kLCBvcGVyYXRvcjogXCI+XCIgfTtcblx0XHRcdGNhc2UgXCI9PT1cIjpcblx0XHRcdFx0cmV0dXJuIHsgLi4ub3BlcmFuZCwgb3BlcmF0b3I6IFwiIT09XCIgfTtcblx0XHRcdGNhc2UgXCI+XCI6XG5cdFx0XHRcdHJldHVybiB7IC4uLm9wZXJhbmQsIG9wZXJhdG9yOiBcIjw9XCIgfTtcblx0XHRcdGNhc2UgXCI+PVwiOlxuXHRcdFx0XHRyZXR1cm4geyAuLi5vcGVyYW5kLCBvcGVyYXRvcjogXCI8XCIgfTtcblx0XHR9XG5cdH0gZWxzZSBpZiAob3BlcmFuZC5fdHlwZSA9PT0gXCJOb3RcIikge1xuXHRcdHJldHVybiBvcGVyYW5kLm9wZXJhbmQ7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdF90eXBlOiBcIk5vdFwiLFxuXHRcdG9wZXJhbmQ6IG9wZXJhbmRcblx0fTtcbn1cblxuLyoqXG4gKiBFdmFsdWF0ZXMgd2hldGhlciBhIGJpbmRpbmcgZXhwcmVzc2lvbiBpcyBlcXVhbCB0byB0cnVlIHdpdGggYSBsb29zZSBlcXVhbGl0eS5cbiAqIEBwYXJhbSBvcGVyYW5kIFRoZSBleHByZXNzaW9uIHRvIGNoZWNrXG4gKiBAcmV0dXJucyBUaGUgcmVzdWx0aW5nIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgdG8gYm9vbGVhblxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNUcnV0aHkob3BlcmFuZDogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRpZiAoaXNDb25zdGFudChvcGVyYW5kKSkge1xuXHRcdHJldHVybiBjb25zdGFudCghIW9wZXJhbmQudmFsdWUpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB7XG5cdFx0XHRfdHlwZTogXCJUcnV0aHlcIixcblx0XHRcdG9wZXJhbmQ6IG9wZXJhbmRcblx0XHR9O1xuXHR9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGJpbmRpbmcgZXhwcmVzc2lvbiB0aGF0IHdpbGwgYmUgZXZhbHVhdGVkIGJ5IHRoZSBjb3JyZXNwb25kaW5nIG1vZGVsLlxuICogQHBhcmFtIHBhdGhcbiAqIEBwYXJhbSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB2aXNpdGVkTmF2aWdhdGlvblBhdGhzXG4gKiBAcGFyYW0gcGF0aFZpc2l0b3JcbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gcmVwcmVzZW50YXRpbmcgdGhhdCBwYXRoIGluIHRoZSBtb2RlbFxuICogQGRlcHJlY2F0ZWQgdXNlIHBhdGhJbk1vZGVsIGluc3RlYWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJpbmRpbmdFeHByZXNzaW9uPFRhcmdldFR5cGUgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0cGF0aDogc3RyaW5nLFxuXHRtb2RlbE5hbWU/OiBzdHJpbmcsXG5cdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdID0gW10sXG5cdHBhdGhWaXNpdG9yPzogRnVuY3Rpb25cbik6IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUYXJnZXRUeXBlPiB8IFVucmVzb2x2YWJsZVBhdGhFeHByZXNzaW9uIHtcblx0cmV0dXJuIHBhdGhJbk1vZGVsKHBhdGgsIG1vZGVsTmFtZSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBiaW5kaW5nIGV4cHJlc3Npb24gdGhhdCB3aWxsIGJlIGV2YWx1YXRlZCBieSB0aGUgY29ycmVzcG9uZGluZyBtb2RlbC5cbiAqIEB0ZW1wbGF0ZSBUYXJnZXRUeXBlXG4gKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCBvbiB0aGUgbW9kZWxcbiAqIEBwYXJhbSBbbW9kZWxOYW1lXSBUaGUgbmFtZSBvZiB0aGUgbW9kZWxcbiAqIEBwYXJhbSBbdmlzaXRlZE5hdmlnYXRpb25QYXRoc10gVGhlIHBhdGhzIGZyb20gdGhlIHJvb3QgZW50aXR5U2V0XG4gKiBAcGFyYW0gW3BhdGhWaXNpdG9yXSBBIGZ1bmN0aW9uIHRvIG1vZGlmeSB0aGUgcmVzdWx0aW5nIHBhdGhcbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gcmVwcmVzZW50YXRpbmcgdGhhdCBwYXRoIGluIHRoZSBtb2RlbFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGF0aEluTW9kZWwoXG5cdHBhdGg6IHVuZGVmaW5lZCxcblx0bW9kZWxOYW1lPzogc3RyaW5nLFxuXHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzPzogc3RyaW5nW10sXG5cdHBhdGhWaXNpdG9yPzogRnVuY3Rpb25cbik6IFVucmVzb2x2YWJsZVBhdGhFeHByZXNzaW9uO1xuZXhwb3J0IGZ1bmN0aW9uIHBhdGhJbk1vZGVsPFRhcmdldFR5cGUgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0cGF0aDogc3RyaW5nLFxuXHRtb2RlbE5hbWU/OiBzdHJpbmcsXG5cdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHM/OiBzdHJpbmdbXSxcblx0cGF0aFZpc2l0b3I/OiB1bmRlZmluZWRcbik6IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUYXJnZXRUeXBlPjtcbmV4cG9ydCBmdW5jdGlvbiBwYXRoSW5Nb2RlbDxUYXJnZXRUeXBlIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdHBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0bW9kZWxOYW1lPzogc3RyaW5nLFxuXHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzPzogc3RyaW5nW10sXG5cdHBhdGhWaXNpdG9yPzogRnVuY3Rpb25cbik6IFVucmVzb2x2YWJsZVBhdGhFeHByZXNzaW9uIHwgUGF0aEluTW9kZWxFeHByZXNzaW9uPFRhcmdldFR5cGU+O1xuZXhwb3J0IGZ1bmN0aW9uIHBhdGhJbk1vZGVsPFRhcmdldFR5cGUgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0cGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRtb2RlbE5hbWU/OiBzdHJpbmcsXG5cdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdID0gW10sXG5cdHBhdGhWaXNpdG9yPzogRnVuY3Rpb25cbik6IFVucmVzb2x2YWJsZVBhdGhFeHByZXNzaW9uIHwgUGF0aEluTW9kZWxFeHByZXNzaW9uPFRhcmdldFR5cGU+IHtcblx0aWYgKHBhdGggPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xuXHR9XG5cdGxldCB0YXJnZXRQYXRoO1xuXHRpZiAocGF0aFZpc2l0b3IpIHtcblx0XHR0YXJnZXRQYXRoID0gcGF0aFZpc2l0b3IocGF0aCk7XG5cdFx0aWYgKHRhcmdldFBhdGggPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IGxvY2FsUGF0aCA9IHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMuY29uY2F0KCk7XG5cdFx0bG9jYWxQYXRoLnB1c2gocGF0aCk7XG5cdFx0dGFyZ2V0UGF0aCA9IGxvY2FsUGF0aC5qb2luKFwiL1wiKTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdF90eXBlOiBcIlBhdGhJbk1vZGVsXCIsXG5cdFx0bW9kZWxOYW1lOiBtb2RlbE5hbWUsXG5cdFx0cGF0aDogdGFyZ2V0UGF0aFxuXHR9O1xufVxuXG50eXBlIFBsYWluRXhwcmVzc2lvbk9iamVjdCA9IHsgW2luZGV4OiBzdHJpbmddOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4gfTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY29uc3RhbnQgZXhwcmVzc2lvbiBiYXNlZCBvbiBhIHByaW1pdGl2ZSB2YWx1ZS5cbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0gdmFsdWUgVGhlIGNvbnN0YW50IHRvIHdyYXAgaW4gYW4gZXhwcmVzc2lvblxuICogQHJldHVybnMgVGhlIGNvbnN0YW50IGV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0YW50PFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPih2YWx1ZTogVCk6IENvbnN0YW50RXhwcmVzc2lvbjxUPiB7XG5cdGxldCBjb25zdGFudFZhbHVlOiBUO1xuXG5cdGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0Y29uc3RhbnRWYWx1ZSA9IHZhbHVlLm1hcCh3cmFwUHJpbWl0aXZlKSBhcyBUO1xuXHRcdH0gZWxzZSBpZiAoaXNQcmltaXRpdmVPYmplY3QodmFsdWUpKSB7XG5cdFx0XHRjb25zdGFudFZhbHVlID0gdmFsdWUudmFsdWVPZigpIGFzIFQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0YW50VmFsdWUgPSBPYmplY3QuZW50cmllcyh2YWx1ZSkucmVkdWNlKChwbGFpbkV4cHJlc3Npb24sIFtrZXksIHZhbF0pID0+IHtcblx0XHRcdFx0Y29uc3Qgd3JhcHBlZFZhbHVlID0gd3JhcFByaW1pdGl2ZSh2YWwpO1xuXHRcdFx0XHRpZiAod3JhcHBlZFZhbHVlLl90eXBlICE9PSBcIkNvbnN0YW50XCIgfHwgd3JhcHBlZFZhbHVlLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRwbGFpbkV4cHJlc3Npb25ba2V5XSA9IHdyYXBwZWRWYWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gcGxhaW5FeHByZXNzaW9uO1xuXHRcdFx0fSwge30gYXMgUGxhaW5FeHByZXNzaW9uT2JqZWN0KSBhcyBUO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRjb25zdGFudFZhbHVlID0gdmFsdWU7XG5cdH1cblxuXHRyZXR1cm4geyBfdHlwZTogXCJDb25zdGFudFwiLCB2YWx1ZTogY29uc3RhbnRWYWx1ZSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUJpbmRpbmdTdHJpbmc8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHR2YWx1ZTogc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlcixcblx0dGFyZ2V0VHlwZT86IHN0cmluZ1xuKTogQ29uc3RhbnRFeHByZXNzaW9uPFQ+IHwgUGF0aEluTW9kZWxFeHByZXNzaW9uPFQ+IHwgRW1iZWRkZWRVSTVCaW5kaW5nRXhwcmVzc2lvbjxUPiB8IEVtYmVkZGVkVUk1RXhwcmVzc2lvbkJpbmRpbmdFeHByZXNzaW9uPFQ+IHtcblx0aWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIHZhbHVlLnN0YXJ0c1dpdGgoXCJ7XCIpKSB7XG5cdFx0Y29uc3QgcGF0aEluTW9kZWxSZWdleCA9IC9eeyguKik+KC4rKX0kLzsgLy8gTWF0Y2hlcyBtb2RlbCBwYXRocyBsaWtlIFwibW9kZWw+cGF0aFwiIG9yIFwiPnBhdGhcIiAoZGVmYXVsdCBtb2RlbClcblx0XHRjb25zdCBwYXRoSW5Nb2RlbFJlZ2V4TWF0Y2ggPSBwYXRoSW5Nb2RlbFJlZ2V4LmV4ZWModmFsdWUpO1xuXG5cdFx0aWYgKHZhbHVlLnN0YXJ0c1dpdGgoXCJ7PVwiKSkge1xuXHRcdFx0Ly8gRXhwcmVzc2lvbiBiaW5kaW5nLCB3ZSBjYW4ganVzdCByZW1vdmUgdGhlIG91dGVyIGJpbmRpbmcgdGhpbmdzXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRfdHlwZTogXCJFbWJlZGRlZEV4cHJlc3Npb25CaW5kaW5nXCIsXG5cdFx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdFx0fTtcblx0XHR9IGVsc2UgaWYgKHBhdGhJbk1vZGVsUmVnZXhNYXRjaCkge1xuXHRcdFx0cmV0dXJuIHBhdGhJbk1vZGVsKHBhdGhJbk1vZGVsUmVnZXhNYXRjaFsyXSB8fCBcIlwiLCBwYXRoSW5Nb2RlbFJlZ2V4TWF0Y2hbMV0gfHwgdW5kZWZpbmVkKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0X3R5cGU6IFwiRW1iZWRkZWRCaW5kaW5nXCIsXG5cdFx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdFx0fTtcblx0XHR9XG5cdH0gZWxzZSBpZiAodGFyZ2V0VHlwZSA9PT0gXCJib29sZWFuXCIgJiYgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmICh2YWx1ZSA9PT0gXCJ0cnVlXCIgfHwgdmFsdWUgPT09IFwiZmFsc2VcIikpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQodmFsdWUgPT09IFwidHJ1ZVwiKSBhcyBDb25zdGFudEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAodGFyZ2V0VHlwZSA9PT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgKCFpc05hTihOdW1iZXIodmFsdWUpKSB8fCB2YWx1ZSA9PT0gXCJOYU5cIikpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoTnVtYmVyKHZhbHVlKSkgYXMgQ29uc3RhbnRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjb25zdGFudCh2YWx1ZSkgYXMgQ29uc3RhbnRFeHByZXNzaW9uPFQ+O1xuXHR9XG59XG5cbi8qKlxuICogQSBuYW1lZCByZWZlcmVuY2UuXG4gKiBAc2VlIGZuXG4gKiBAcGFyYW0gcmVmZXJlbmNlIFJlZmVyZW5jZVxuICogQHJldHVybnMgVGhlIG9iamVjdCByZWZlcmVuY2UgYmluZGluZyBwYXJ0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWYocmVmZXJlbmNlOiBzdHJpbmcgfCBudWxsKTogUmVmZXJlbmNlRXhwcmVzc2lvbiB7XG5cdHJldHVybiB7IF90eXBlOiBcIlJlZlwiLCByZWY6IHJlZmVyZW5jZSB9O1xufVxuXG4vKipcbiAqIFdyYXAgYSBzdGF0ZSBvYmplY3QgaW50byBhIHBhdGggaW4gbW9kZWwgZXhwcmVzc2lvbi5cbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0gc3RhdGVPYmplY3RQcm9wIFRoZSBvYmplY3QgdG8gZXZhbHVhdGUsIGlmIGl0J3MgYSBjb25zdGFudCBpdCB3aWxsIGJlIHdyYXBwZWQgaW4gYSBjb25zdGFudCBleHByZXNzaW9uLCBpZiBpdCdzIGEgc3RhdGUgcHJvcGVydHkgaXQgd2lsbCBiZSBib3VuZFxuICogQHBhcmFtIGtleSBUaGUga2V5IG9mIHRoZSBzdGF0ZSBvYmplY3QgdG8gYmluZFxuICogQHJldHVybnMgVGhlIGNvcnJlY3QgYmluZGluZyB0b29sa2l0IGV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJpbmRTdGF0ZTxUIGV4dGVuZHMgb2JqZWN0LCBLIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdHN0YXRlT2JqZWN0UHJvcDogVCxcblx0a2V5OiBrZXlvZiBUXG4pOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248Sz4gfCBDb25zdGFudEV4cHJlc3Npb248Sz4ge1xuXHRpZiAodHlwZW9mIHN0YXRlT2JqZWN0UHJvcCA9PT0gXCJvYmplY3RcIiAmJiAoc3RhdGVPYmplY3RQcm9wIGFzIEJpbmRpbmdJbmZvSG9sZGVyPFQ+KS5fX2JpbmRpbmdJbmZvKSB7XG5cdFx0cmV0dXJuIHBhdGhJbk1vZGVsKFwiL1wiICsga2V5LnRvU3RyaW5nKCksIChzdGF0ZU9iamVjdFByb3AgYXMgQmluZGluZ0luZm9Ib2xkZXI8VD4pLl9fYmluZGluZ0luZm8ubW9kZWwpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjb25zdGFudChzdGF0ZU9iamVjdFByb3ApIGFzIHVua25vd24gYXMgQ29uc3RhbnRFeHByZXNzaW9uPEs+O1xuXHR9XG59XG4vKipcbiAqIFdyYXAgYSBwcmltaXRpdmUgaW50byBhIGNvbnN0YW50IGV4cHJlc3Npb24gaWYgaXQgaXMgbm90IGFscmVhZHkgYW4gZXhwcmVzc2lvbi5cbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0gc29tZXRoaW5nIFRoZSBvYmplY3QgdG8gd3JhcCBpbiBhIENvbnN0YW50IGV4cHJlc3Npb25cbiAqIEByZXR1cm5zIEVpdGhlciB0aGUgb3JpZ2luYWwgb2JqZWN0IG9yIHRoZSB3cmFwcGVkIG9uZSBkZXBlbmRpbmcgb24gdGhlIGNhc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdyYXBQcmltaXRpdmU8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KHNvbWV0aGluZzogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+KTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+IHtcblx0aWYgKGlzQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uKHNvbWV0aGluZykpIHtcblx0XHRyZXR1cm4gc29tZXRoaW5nIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fVxuXG5cdHJldHVybiBjb25zdGFudChzb21ldGhpbmcpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZXhwcmVzc2lvbiBvciB2YWx1ZSBwcm92aWRlZCBpcyBhIGJpbmRpbmcgdG9vbGluZyBleHByZXNzaW9uIG9yIG5vdC5cbiAqXG4gKiBFdmVyeSBvYmplY3QgaGF2aW5nIGEgcHJvcGVydHkgbmFtZWQgYF90eXBlYCBvZiBzb21lIHZhbHVlIGlzIGNvbnNpZGVyZWQgYW4gZXhwcmVzc2lvbiwgZXZlbiBpZiB0aGVyZSBpcyBhY3R1YWxseVxuICogbm8gc3VjaCBleHByZXNzaW9uIHR5cGUgc3VwcG9ydGVkLlxuICogQHBhcmFtIGV4cHJlc3Npb25cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgZXhwcmVzc2lvbiBpcyBhIGJpbmRpbmcgdG9vbGtpdCBleHByZXNzaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0JpbmRpbmdUb29sa2l0RXhwcmVzc2lvbihcblx0ZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+IHwgdW5rbm93blxuKTogZXhwcmVzc2lvbiBpcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4ge1xuXHRyZXR1cm4gKGV4cHJlc3Npb24gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+KT8uX3R5cGUgIT09IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGV4cHJlc3Npb24gb3IgdmFsdWUgcHJvdmlkZWQgaXMgY29uc3RhbnQgb3Igbm90LlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gIG1heWJlQ29uc3RhbnQgVGhlIGV4cHJlc3Npb24gb3IgcHJpbWl0aXZlIHZhbHVlIHRoYXQgaXMgdG8gYmUgY2hlY2tlZFxuICogQHJldHVybnMgYHRydWVgIGlmIGl0IGlzIGNvbnN0YW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnN0YW50PFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihtYXliZUNvbnN0YW50OiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4pOiBtYXliZUNvbnN0YW50IGlzIENvbnN0YW50RXhwcmVzc2lvbjxUPiB7XG5cdHJldHVybiB0eXBlb2YgbWF5YmVDb25zdGFudCAhPT0gXCJvYmplY3RcIiB8fCAobWF5YmVDb25zdGFudCBhcyBCYXNlRXhwcmVzc2lvbjxUPikuX3R5cGUgPT09IFwiQ29uc3RhbnRcIjtcbn1cblxuZnVuY3Rpb24gaXNUcnVlKGV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gaXNDb25zdGFudChleHByZXNzaW9uKSAmJiBleHByZXNzaW9uLnZhbHVlID09PSB0cnVlO1xufVxuXG5mdW5jdGlvbiBpc0ZhbHNlKGV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gaXNDb25zdGFudChleHByZXNzaW9uKSAmJiBleHByZXNzaW9uLnZhbHVlID09PSBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGV4cHJlc3Npb24gb3IgdmFsdWUgcHJvdmlkZWQgaXMgYSBwYXRoIGluIG1vZGVsIGV4cHJlc3Npb24gb3Igbm90LlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gIG1heWJlQmluZGluZyBUaGUgZXhwcmVzc2lvbiBvciBwcmltaXRpdmUgdmFsdWUgdGhhdCBpcyB0byBiZSBjaGVja2VkXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgaXQgaXMgYSBwYXRoIGluIG1vZGVsIGV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aEluTW9kZWxFeHByZXNzaW9uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0bWF5YmVCaW5kaW5nOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IG1heWJlQmluZGluZyBpcyBQYXRoSW5Nb2RlbEV4cHJlc3Npb248VD4ge1xuXHRyZXR1cm4gKG1heWJlQmluZGluZyBhcyBCYXNlRXhwcmVzc2lvbjxUPik/Ll90eXBlID09PSBcIlBhdGhJbk1vZGVsXCI7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBleHByZXNzaW9uIG9yIHZhbHVlIHByb3ZpZGVkIGlzIGEgY29tcGxleCB0eXBlIGV4cHJlc3Npb24uXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSAgbWF5YmVCaW5kaW5nIFRoZSBleHByZXNzaW9uIG9yIHByaW1pdGl2ZSB2YWx1ZSB0aGF0IGlzIHRvIGJlIGNoZWNrZWRcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBpcyBhIHBhdGggaW4gbW9kZWwgZXhwcmVzc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDb21wbGV4VHlwZUV4cHJlc3Npb248VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRtYXliZUJpbmRpbmc6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogbWF5YmVCaW5kaW5nIGlzIENvbXBsZXhUeXBlRXhwcmVzc2lvbjxUPiB7XG5cdHJldHVybiAobWF5YmVCaW5kaW5nIGFzIEJhc2VFeHByZXNzaW9uPFQ+KT8uX3R5cGUgPT09IFwiQ29tcGxleFR5cGVcIjtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGV4cHJlc3Npb24gb3IgdmFsdWUgcHJvdmlkZWQgaXMgYSBjb25jYXQgZXhwcmVzc2lvbiBvciBub3QuXG4gKiBAcGFyYW0gZXhwcmVzc2lvblxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBleHByZXNzaW9uIGlzIGEgQ29uY2F0RXhwcmVzc2lvblxuICovXG5mdW5jdGlvbiBpc0NvbmNhdEV4cHJlc3Npb24oZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+KTogZXhwcmVzc2lvbiBpcyBDb25jYXRFeHByZXNzaW9uIHtcblx0cmV0dXJuIChleHByZXNzaW9uIGFzIEJhc2VFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+KT8uX3R5cGUgPT09IFwiQ29uY2F0XCI7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBleHByZXNzaW9uIG9yIHZhbHVlIHByb3ZpZGVkIGlzIGEgSWZFbHNlIGV4cHJlc3Npb24gb3Igbm90LlxuICogQHBhcmFtIGV4cHJlc3Npb25cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgZXhwcmVzc2lvbiBpcyBhIElmRWxzZUV4cHJlc3Npb25cbiAqL1xuZnVuY3Rpb24gaXNJZkVsc2VFeHByZXNzaW9uKGV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPik6IGV4cHJlc3Npb24gaXMgQ29uY2F0RXhwcmVzc2lvbiB7XG5cdHJldHVybiAoZXhwcmVzc2lvbiBhcyBCYXNlRXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPik/Ll90eXBlID09PSBcIklmRWxzZVwiO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZXhwcmVzc2lvbiBwcm92aWRlZCBpcyBhIGNvbXBhcmlzb24gb3Igbm90LlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgZXhwcmVzc2lvblxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBleHByZXNzaW9uIGlzIGEgQ29tcGFyaXNvbkV4cHJlc3Npb25cbiAqL1xuZnVuY3Rpb24gaXNDb21wYXJpc29uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihleHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4pOiBleHByZXNzaW9uIGlzIENvbXBhcmlzb25FeHByZXNzaW9uIHtcblx0cmV0dXJuIGV4cHJlc3Npb24uX3R5cGUgPT09IFwiQ29tcGFyaXNvblwiO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBpbnB1dCBwYXJhbWV0ZXIgaXMgYSBjb25zdGFudCBleHByZXNzaW9uIG9mIHR5cGUgdW5kZWZpbmVkLlxuICogQHBhcmFtIGV4cHJlc3Npb24gVGhlIGlucHV0IGV4cHJlc3Npb24gb3Igb2JqZWN0IGluIGdlbmVyYWxcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgaW5wdXQgaXMgY29uc3RhbnQgd2hpY2ggaGFzIHVuZGVmaW5lZCBmb3IgdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVW5kZWZpbmVkRXhwcmVzc2lvbihleHByZXNzaW9uOiB1bmtub3duKTogZXhwcmVzc2lvbiBpcyBDb25zdGFudEV4cHJlc3Npb248dW5kZWZpbmVkPiB7XG5cdGNvbnN0IGV4cHJlc3Npb25Bc0V4cHJlc3Npb24gPSBleHByZXNzaW9uIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPjtcblx0cmV0dXJuIGV4cHJlc3Npb25Bc0V4cHJlc3Npb24/Ll90eXBlID09PSBcIkNvbnN0YW50XCIgJiYgZXhwcmVzc2lvbkFzRXhwcmVzc2lvbj8udmFsdWUgPT09IHVuZGVmaW5lZDtcbn1cblxudHlwZSBDb21wbGV4QW5ub3RhdGlvbkV4cHJlc3Npb248UD4gPVxuXHR8IFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IEFwcGx5QW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBJZkFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgT3JBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IEFuZEFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgTmVBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IEVxQW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBOb3RBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IEd0QW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBHZUFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgTGVBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IEx0QW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBWb2NhYkNvbnN0YW50RXhwcmVzc2lvbjxQPjtcblxuZnVuY3Rpb24gaXNQcmltaXRpdmVPYmplY3Qob2JqZWN0VHlwZTogb2JqZWN0KTogYm9vbGVhbiB7XG5cdHN3aXRjaCAob2JqZWN0VHlwZS5jb25zdHJ1Y3Rvci5uYW1lKSB7XG5cdFx0Y2FzZSBcIlN0cmluZ1wiOlxuXHRcdGNhc2UgXCJOdW1iZXJcIjpcblx0XHRjYXNlIFwiQm9vbGVhblwiOlxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuLyoqXG4gKiBDaGVjayBpZiB0aGUgcGFzc2VkIGFubm90YXRpb24gYW5ub3RhdGlvblZhbHVlIGlzIGEgQ29tcGxleEFubm90YXRpb25FeHByZXNzaW9uLlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gIGFubm90YXRpb25WYWx1ZSBUaGUgYW5ub3RhdGlvbiBhbm5vdGF0aW9uVmFsdWUgdG8gZXZhbHVhdGVcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0IGlzIGEge0NvbXBsZXhBbm5vdGF0aW9uRXhwcmVzc2lvbn1cbiAqL1xuZnVuY3Rpb24gaXNDb21wbGV4QW5ub3RhdGlvbkV4cHJlc3Npb248VD4oYW5ub3RhdGlvblZhbHVlOiBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxUPik6IGFubm90YXRpb25WYWx1ZSBpcyBDb21wbGV4QW5ub3RhdGlvbkV4cHJlc3Npb248VD4ge1xuXHRyZXR1cm4gdHlwZW9mIGFubm90YXRpb25WYWx1ZSA9PT0gXCJvYmplY3RcIiAmJiAhaXNQcmltaXRpdmVPYmplY3QoYW5ub3RhdGlvblZhbHVlIGFzIG9iamVjdCk7XG59XG5cbi8qKlxuICogR2VuZXJhdGUgdGhlIGNvcnJlc3BvbmRpbmcgYW5ub3RhdGlvblZhbHVlIGZvciBhIGdpdmVuIGFubm90YXRpb24gYW5ub3RhdGlvblZhbHVlLlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gYW5ub3RhdGlvblZhbHVlIFRoZSBzb3VyY2UgYW5ub3RhdGlvbiBhbm5vdGF0aW9uVmFsdWVcbiAqIEBwYXJhbSB2aXNpdGVkTmF2aWdhdGlvblBhdGhzIFRoZSBwYXRoIGZyb20gdGhlIHJvb3QgZW50aXR5IHNldFxuICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBEZWZhdWx0IHZhbHVlIGlmIHRoZSBhbm5vdGF0aW9uVmFsdWUgaXMgdW5kZWZpbmVkXG4gKiBAcGFyYW0gcGF0aFZpc2l0b3IgQSBmdW5jdGlvbiB0byBtb2RpZnkgdGhlIHJlc3VsdGluZyBwYXRoXG4gKiBAcmV0dXJucyBUaGUgYW5ub3RhdGlvblZhbHVlIGVxdWl2YWxlbnQgdG8gdGhhdCBhbm5vdGF0aW9uIGFubm90YXRpb25WYWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0YW5ub3RhdGlvblZhbHVlOiBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxUPiB8IHVuZGVmaW5lZCxcblx0dmlzaXRlZE5hdmlnYXRpb25QYXRoczogc3RyaW5nW10gPSBbXSxcblx0ZGVmYXVsdFZhbHVlPzogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRwYXRoVmlzaXRvcj86IEZ1bmN0aW9uXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZUNhc3Q8VD4+IHtcblx0aWYgKGFubm90YXRpb25WYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIHdyYXBQcmltaXRpdmUoZGVmYXVsdFZhbHVlIGFzIFByaW1pdGl2ZVR5cGVDYXN0PFQ+KTtcblx0fVxuXHRhbm5vdGF0aW9uVmFsdWUgPSBhbm5vdGF0aW9uVmFsdWU/LnZhbHVlT2YoKSBhcyBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxUPjtcblx0aWYgKCFpc0NvbXBsZXhBbm5vdGF0aW9uRXhwcmVzc2lvbihhbm5vdGF0aW9uVmFsdWUpKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KGFubm90YXRpb25WYWx1ZSk7XG5cdH1cblxuXHRzd2l0Y2ggKGFubm90YXRpb25WYWx1ZS50eXBlKSB7XG5cdFx0Y2FzZSBcIlBhdGhcIjpcblx0XHRcdHJldHVybiBwYXRoSW5Nb2RlbChhbm5vdGF0aW9uVmFsdWUucGF0aCwgdW5kZWZpbmVkLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcik7XG5cdFx0Y2FzZSBcIklmXCI6XG5cdFx0XHRyZXR1cm4gYW5ub3RhdGlvbklmRXhwcmVzc2lvbihhbm5vdGF0aW9uVmFsdWUuJElmLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFxuXHRcdFx0XHRQcmltaXRpdmVUeXBlQ2FzdDxUPlxuXHRcdFx0Pjtcblx0XHRjYXNlIFwiTm90XCI6XG5cdFx0XHRyZXR1cm4gbm90KHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJE5vdCwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248XG5cdFx0XHRcdFByaW1pdGl2ZVR5cGVDYXN0PFQ+XG5cdFx0XHQ+O1xuXHRcdGNhc2UgXCJFcVwiOlxuXHRcdFx0cmV0dXJuIGVxdWFsKFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiRFcVswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiRFcVsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlQ2FzdDxUPj47XG5cdFx0Y2FzZSBcIk5lXCI6XG5cdFx0XHRyZXR1cm4gbm90RXF1YWwoXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJE5lWzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciksXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJE5lWzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcilcblx0XHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGVDYXN0PFQ+Pjtcblx0XHRjYXNlIFwiR3RcIjpcblx0XHRcdHJldHVybiBncmVhdGVyVGhhbihcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kR3RbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKSxcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kR3RbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKVxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZUNhc3Q8VD4+O1xuXHRcdGNhc2UgXCJHZVwiOlxuXHRcdFx0cmV0dXJuIGdyZWF0ZXJPckVxdWFsKFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiRHZVswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiRHZVsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlQ2FzdDxUPj47XG5cdFx0Y2FzZSBcIkx0XCI6XG5cdFx0XHRyZXR1cm4gbGVzc1RoYW4oXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJEx0WzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciksXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJEx0WzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcilcblx0XHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGVDYXN0PFQ+Pjtcblx0XHRjYXNlIFwiTGVcIjpcblx0XHRcdHJldHVybiBsZXNzT3JFcXVhbChcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kTGVbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKSxcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kTGVbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKVxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZUNhc3Q8VD4+O1xuXHRcdGNhc2UgXCJPclwiOlxuXHRcdFx0cmV0dXJuIG9yKFxuXHRcdFx0XHQuLi5hbm5vdGF0aW9uVmFsdWUuJE9yLm1hcChmdW5jdGlvbiAob3JDb25kaXRpb24pIHtcblx0XHRcdFx0XHRyZXR1cm4gcGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uPGJvb2xlYW4+KG9yQ29uZGl0aW9uLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcik7XG5cdFx0XHRcdH0pXG5cdFx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlQ2FzdDxUPj47XG5cdFx0Y2FzZSBcIkFuZFwiOlxuXHRcdFx0cmV0dXJuIGFuZChcblx0XHRcdFx0Li4uYW5ub3RhdGlvblZhbHVlLiRBbmQubWFwKGZ1bmN0aW9uIChhbmRDb25kaXRpb24pIHtcblx0XHRcdFx0XHRyZXR1cm4gcGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uPGJvb2xlYW4+KGFuZENvbmRpdGlvbiwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpO1xuXHRcdFx0XHR9KVxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZUNhc3Q8VD4+O1xuXHRcdGNhc2UgXCJBcHBseVwiOlxuXHRcdFx0cmV0dXJuIGFubm90YXRpb25BcHBseUV4cHJlc3Npb24oXG5cdFx0XHRcdGFubm90YXRpb25WYWx1ZSBhcyBBcHBseUFubm90YXRpb25FeHByZXNzaW9uPHN0cmluZz4sXG5cdFx0XHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsXG5cdFx0XHRcdHBhdGhWaXNpdG9yXG5cdFx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlQ2FzdDxUPj47XG5cdFx0Y2FzZSBcIkNvbnN0YW50XCI6XG5cdFx0XHQvLyBOb3QgYSByZWFsIGNhc2UgYnV0IHRoZSB0eXBlIHN5c3RlbSBuZWVkcyBpdFxuXHRcdFx0cmV0dXJuIGNvbnN0YW50KGFubm90YXRpb25WYWx1ZS52YWx1ZSBhcyBQcmltaXRpdmVUeXBlQ2FzdDxUPik7XG5cdH1cblx0cmV0dXJuIHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG59XG5cbi8qKlxuICogUGFyc2UgdGhlIGFubm90YXRpb24gY29uZGl0aW9uIGludG8gYW4gZXhwcmVzc2lvbi5cbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGFubm90YXRpb25WYWx1ZSBUaGUgY29uZGl0aW9uIG9yIHZhbHVlIGZyb20gdGhlIGFubm90YXRpb25cbiAqIEBwYXJhbSB2aXNpdGVkTmF2aWdhdGlvblBhdGhzIFRoZSBwYXRoIGZyb20gdGhlIHJvb3QgZW50aXR5IHNldFxuICogQHBhcmFtIHBhdGhWaXNpdG9yIEEgZnVuY3Rpb24gdG8gbW9kaWZ5IHRoZSByZXN1bHRpbmcgcGF0aFxuICogQHJldHVybnMgQW4gZXF1aXZhbGVudCBleHByZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGFubm90YXRpb25WYWx1ZTogQ29uZGl0aW9uYWxDaGVja09yVmFsdWUsXG5cdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdID0gW10sXG5cdHBhdGhWaXNpdG9yPzogRnVuY3Rpb25cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPiB7XG5cdGlmIChhbm5vdGF0aW9uVmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIGFubm90YXRpb25WYWx1ZSAhPT0gXCJvYmplY3RcIikge1xuXHRcdHJldHVybiBjb25zdGFudChhbm5vdGF0aW9uVmFsdWUgYXMgVCk7XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJE9yXCIpKSB7XG5cdFx0cmV0dXJuIG9yKFxuXHRcdFx0Li4uKChhbm5vdGF0aW9uVmFsdWUgYXMgT3JDb25kaXRpb25hbEV4cHJlc3Npb24pLiRPci5tYXAoZnVuY3Rpb24gKG9yQ29uZGl0aW9uKSB7XG5cdFx0XHRcdHJldHVybiBwYXJzZUFubm90YXRpb25Db25kaXRpb24ob3JDb25kaXRpb24sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKTtcblx0XHRcdH0pIGFzIHVua25vd24gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10pXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJEFuZFwiKSkge1xuXHRcdHJldHVybiBhbmQoXG5cdFx0XHQuLi4oKGFubm90YXRpb25WYWx1ZSBhcyBBbmRDb25kaXRpb25hbEV4cHJlc3Npb24pLiRBbmQubWFwKGZ1bmN0aW9uIChhbmRDb25kaXRpb24pIHtcblx0XHRcdFx0cmV0dXJuIHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbmRDb25kaXRpb24sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKTtcblx0XHRcdH0pIGFzIHVua25vd24gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10pXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJE5vdFwiKSkge1xuXHRcdHJldHVybiBub3QoXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oKGFubm90YXRpb25WYWx1ZSBhcyBOb3RDb25kaXRpb25hbEV4cHJlc3Npb24pLiROb3QsIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKVxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRFcVwiKSkge1xuXHRcdHJldHVybiBlcXVhbChcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbigoYW5ub3RhdGlvblZhbHVlIGFzIEVxQ29uZGl0aW9uYWxFeHByZXNzaW9uKS4kRXFbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKSxcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbigoYW5ub3RhdGlvblZhbHVlIGFzIEVxQ29uZGl0aW9uYWxFeHByZXNzaW9uKS4kRXFbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKVxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiROZVwiKSkge1xuXHRcdHJldHVybiBub3RFcXVhbChcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbigoYW5ub3RhdGlvblZhbHVlIGFzIE5lQ29uZGl0aW9uYWxFeHByZXNzaW9uKS4kTmVbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKSxcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbigoYW5ub3RhdGlvblZhbHVlIGFzIE5lQ29uZGl0aW9uYWxFeHByZXNzaW9uKS4kTmVbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKVxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRHdFwiKSkge1xuXHRcdHJldHVybiBncmVhdGVyVGhhbihcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbigoYW5ub3RhdGlvblZhbHVlIGFzIEd0Q29uZGl0aW9uYWxFeHByZXNzaW9uKS4kR3RbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKSxcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbigoYW5ub3RhdGlvblZhbHVlIGFzIEd0Q29uZGl0aW9uYWxFeHByZXNzaW9uKS4kR3RbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKVxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRHZVwiKSkge1xuXHRcdHJldHVybiBncmVhdGVyT3JFcXVhbChcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbigoYW5ub3RhdGlvblZhbHVlIGFzIEdlQ29uZGl0aW9uYWxFeHByZXNzaW9uKS4kR2VbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKSxcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbigoYW5ub3RhdGlvblZhbHVlIGFzIEdlQ29uZGl0aW9uYWxFeHByZXNzaW9uKS4kR2VbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKVxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRMdFwiKSkge1xuXHRcdHJldHVybiBsZXNzVGhhbihcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbigoYW5ub3RhdGlvblZhbHVlIGFzIEx0Q29uZGl0aW9uYWxFeHByZXNzaW9uKS4kTHRbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKSxcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbigoYW5ub3RhdGlvblZhbHVlIGFzIEx0Q29uZGl0aW9uYWxFeHByZXNzaW9uKS4kTHRbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKVxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRMZVwiKSkge1xuXHRcdHJldHVybiBsZXNzT3JFcXVhbChcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbigoYW5ub3RhdGlvblZhbHVlIGFzIExlQ29uZGl0aW9uYWxFeHByZXNzaW9uKS4kTGVbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKSxcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbigoYW5ub3RhdGlvblZhbHVlIGFzIExlQ29uZGl0aW9uYWxFeHByZXNzaW9uKS4kTGVbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKVxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRQYXRoXCIpKSB7XG5cdFx0cmV0dXJuIHBhdGhJbk1vZGVsKChhbm5vdGF0aW9uVmFsdWUgYXMgUGF0aENvbmRpdGlvbkV4cHJlc3Npb248VD4pLiRQYXRoLCB1bmRlZmluZWQsIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkQXBwbHlcIikpIHtcblx0XHRyZXR1cm4gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKFxuXHRcdFx0e1xuXHRcdFx0XHR0eXBlOiBcIkFwcGx5XCIsXG5cdFx0XHRcdCRGdW5jdGlvbjogKGFubm90YXRpb25WYWx1ZSBhcyB7ICRGdW5jdGlvbj86IHN0cmluZyB9KS4kRnVuY3Rpb24sXG5cdFx0XHRcdCRBcHBseTogKGFubm90YXRpb25WYWx1ZSBhcyB7ICRBcHBseT86IHVua25vd24gfSkuJEFwcGx5XG5cdFx0XHR9IGFzIEFwcGx5QW5ub3RhdGlvbkV4cHJlc3Npb248VD4sXG5cdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0cGF0aFZpc2l0b3Jcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkSWZcIikpIHtcblx0XHRyZXR1cm4gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKFxuXHRcdFx0e1xuXHRcdFx0XHR0eXBlOiBcIklmXCIsXG5cdFx0XHRcdCRJZjogKGFubm90YXRpb25WYWx1ZSBhcyB7ICRJZj86IHVua25vd24gfSkuJElmXG5cdFx0XHR9IGFzIElmQW5ub3RhdGlvbkV4cHJlc3Npb248VD4sXG5cdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0cGF0aFZpc2l0b3Jcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkRW51bU1lbWJlclwiKSkge1xuXHRcdHJldHVybiBjb25zdGFudChyZXNvbHZlRW51bVZhbHVlKChhbm5vdGF0aW9uVmFsdWUgYXMgeyAkRW51bU1lbWJlcj86IHN0cmluZyB9KS4kRW51bU1lbWJlcikgYXMgVCk7XG5cdH1cblx0cmV0dXJuIGNvbnN0YW50KGZhbHNlIGFzIFQpO1xufVxuXG4vKipcbiAqIFByb2Nlc3MgdGhlIHtJZkFubm90YXRpb25FeHByZXNzaW9uVmFsdWV9IGludG8gYW4gZXhwcmVzc2lvbi5cbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGFubm90YXRpb25WYWx1ZSBBbiBJZiBleHByZXNzaW9uIHJldHVybmluZyB0aGUgdHlwZSBUXG4gKiBAcGFyYW0gdmlzaXRlZE5hdmlnYXRpb25QYXRocyBUaGUgcGF0aCBmcm9tIHRoZSByb290IGVudGl0eSBzZXRcbiAqIEBwYXJhbSBwYXRoVmlzaXRvciBBIGZ1bmN0aW9uIHRvIG1vZGlmeSB0aGUgcmVzdWx0aW5nIHBhdGhcbiAqIEByZXR1cm5zIFRoZSBlcXVpdmFsZW50IGlmRWxzZSBleHByZXNzaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbm5vdGF0aW9uSWZFeHByZXNzaW9uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0YW5ub3RhdGlvblZhbHVlOiBJZkFubm90YXRpb25FeHByZXNzaW9uVmFsdWU8VD4sXG5cdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdID0gW10sXG5cdHBhdGhWaXNpdG9yPzogRnVuY3Rpb25cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPiB7XG5cdHJldHVybiBpZkVsc2UoXG5cdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZVswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWVbMV0gYXMgQ29uZGl0aW9uYWxDaGVja09yVmFsdWUsIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKSxcblx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlWzJdIGFzIENvbmRpdGlvbmFsQ2hlY2tPclZhbHVlLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcilcblx0KTtcbn1cbi8vIFRoaXMgdHlwZSBpcyBub3QgcmVjdXJzaXZlbHkgdHJhbnNmb3JtZWQgZnJvbSB0aGUgbWV0YW1vZGVsIGNvbnRlbnQsIGFzIHN1Y2ggd2UgaGF2ZSBzb21lIHVnbHkgdGhpbmdzIHRoZXJlXG50eXBlIFN1YkFwcGx5RXhwcmVzc2lvbkZyb21NZXRhbW9kZWwgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbmZ1bmN0aW9uIGNvbnZlcnRTdWJBcHBseVBhcmFtZXRlcnMoYXBwbHlQYXJhbTogU3ViQXBwbHlFeHByZXNzaW9uRnJvbU1ldGFtb2RlbCk6IFN1YkFwcGx5RXhwcmVzc2lvbkZyb21NZXRhbW9kZWwgfCBQcmltaXRpdmVUeXBlIHtcblx0bGV0IGFwcGx5UGFyYW1Db252ZXJ0ZWQgPSBhcHBseVBhcmFtO1xuXHRpZiAoYXBwbHlQYXJhbS5oYXNPd25Qcm9wZXJ0eShcIiRQYXRoXCIpKSB7XG5cdFx0YXBwbHlQYXJhbUNvbnZlcnRlZCA9IHtcblx0XHRcdHR5cGU6IFwiUGF0aFwiLFxuXHRcdFx0cGF0aDogYXBwbHlQYXJhbS4kUGF0aFxuXHRcdH0gYXMgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPHN0cmluZz47XG5cdH0gZWxzZSBpZiAoYXBwbHlQYXJhbS5oYXNPd25Qcm9wZXJ0eShcIiRJZlwiKSkge1xuXHRcdGFwcGx5UGFyYW1Db252ZXJ0ZWQgPSB7XG5cdFx0XHR0eXBlOiBcIklmXCIsXG5cdFx0XHQkSWY6IGFwcGx5UGFyYW0uJElmXG5cdFx0fSBhcyBJZkFubm90YXRpb25FeHByZXNzaW9uPHN0cmluZz47XG5cdH0gZWxzZSBpZiAoYXBwbHlQYXJhbS5oYXNPd25Qcm9wZXJ0eShcIiRBcHBseVwiKSkge1xuXHRcdGFwcGx5UGFyYW1Db252ZXJ0ZWQgPSB7XG5cdFx0XHR0eXBlOiBcIkFwcGx5XCIsXG5cdFx0XHQkRnVuY3Rpb246IGFwcGx5UGFyYW0uJEZ1bmN0aW9uLFxuXHRcdFx0JEFwcGx5OiBhcHBseVBhcmFtLiRBcHBseVxuXHRcdH0gYXMgQXBwbHlBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+O1xuXHR9XG5cdHJldHVybiBhcHBseVBhcmFtQ29udmVydGVkO1xufVxuXG50eXBlIE9EYXRhRnVuY3Rpb24gPSBcIm9kYXRhLmNvbmNhdFwiIHwgXCJvZGF0YS5maWxsVXJpVGVtcGxhdGVcIiB8IFwib2RhdGEudXJpRW5jb2RlXCI7XG5leHBvcnQgZnVuY3Rpb24gYW5ub3RhdGlvbkFwcGx5RXhwcmVzc2lvbihcblx0YXBwbHlFeHByZXNzaW9uOiBBcHBseUFubm90YXRpb25FeHByZXNzaW9uPHN0cmluZz4sXG5cdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdID0gW10sXG5cdHBhdGhWaXNpdG9yPzogRnVuY3Rpb25cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0c3dpdGNoIChhcHBseUV4cHJlc3Npb24uJEZ1bmN0aW9uIGFzIE9EYXRhRnVuY3Rpb24pIHtcblx0XHRjYXNlIFwib2RhdGEuY29uY2F0XCI6XG5cdFx0XHRyZXR1cm4gY29uY2F0KFxuXHRcdFx0XHQuLi5hcHBseUV4cHJlc3Npb24uJEFwcGx5Lm1hcCgoYXBwbHlQYXJhbSkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oXG5cdFx0XHRcdFx0XHRjb252ZXJ0U3ViQXBwbHlQYXJhbWV0ZXJzKGFwcGx5UGFyYW0pIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPHN0cmluZz4sXG5cdFx0XHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0cGF0aFZpc2l0b3Jcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHRjYXNlIFwib2RhdGEudXJpRW5jb2RlXCI6XG5cdFx0XHRjb25zdCBwYXJhbWV0ZXIgPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oXG5cdFx0XHRcdGNvbnZlcnRTdWJBcHBseVBhcmFtZXRlcnMoXG5cdFx0XHRcdFx0YXBwbHlFeHByZXNzaW9uLiRBcHBseVswXSBhcyB1bmtub3duIGFzIFN1YkFwcGx5RXhwcmVzc2lvbkZyb21NZXRhbW9kZWxcblx0XHRcdFx0KSBhcyBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxzdHJpbmc+LFxuXHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdHBhdGhWaXNpdG9yXG5cdFx0XHQpO1xuXHRcdFx0Ly8gVGhlIHNlY29uZCBwYXJhbWV0ZXIgZm9yIHVyaUVuY29kZSBpcyBhbHdheXMgYSBzdHJpbmcgc2luY2UgdGhlIHRhcmdldCBldmFsdWF0aW9uIGlzIGFnYWluc3QgYSBmb3JtYXRWYWx1ZSBjYWxsIGluIE9EYXRhVXRpbHMgd2hpY2ggZXhwZWN0IHRoZSB0YXJnZXQgdHlwZSBhcyBzZWNvbmQgcGFyYW1ldGVyXG5cdFx0XHRyZXR1cm4gZm4oXCJvZGF0YS51cmlFbmNvZGVcIiwgW3BhcmFtZXRlciwgXCJFZG0uU3RyaW5nXCJdLCB1bmRlZmluZWQsIHRydWUpO1xuXHRcdGNhc2UgXCJvZGF0YS5maWxsVXJpVGVtcGxhdGVcIjpcblx0XHRcdGNvbnN0IHRlbXBsYXRlID0gYXBwbHlFeHByZXNzaW9uLiRBcHBseVswXTtcblx0XHRcdGNvbnN0IHRlbXBsYXRlUGFyYW1zID0gYXBwbHlFeHByZXNzaW9uLiRBcHBseS5zbGljZSgxKSBhcyB1bmtub3duIGFzIFN1YkFwcGx5RXhwcmVzc2lvbkZyb21NZXRhbW9kZWxbXTtcblx0XHRcdGNvbnN0IHRhcmdldE9iamVjdDogUmVjb3JkPHN0cmluZywgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+PiA9IHt9O1xuXHRcdFx0dGVtcGxhdGVQYXJhbXMuZm9yRWFjaCgoYXBwbHlQYXJhbSkgPT4ge1xuXHRcdFx0XHR0YXJnZXRPYmplY3RbYXBwbHlQYXJhbS4kTmFtZSBhcyBzdHJpbmddID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKFxuXHRcdFx0XHRcdGNvbnZlcnRTdWJBcHBseVBhcmFtZXRlcnMoXG5cdFx0XHRcdFx0XHRhcHBseVBhcmFtLiRMYWJlbGVkRWxlbWVudCBhcyBTdWJBcHBseUV4cHJlc3Npb25Gcm9tTWV0YW1vZGVsXG5cdFx0XHRcdFx0KSBhcyBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxzdHJpbmc+LFxuXHRcdFx0XHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdHBhdGhWaXNpdG9yXG5cdFx0XHRcdCk7XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBmbihcIm9kYXRhLmZpbGxVcmlUZW1wbGF0ZVwiLCBbdGVtcGxhdGUsIHRhcmdldE9iamVjdF0sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cdH1cblx0cmV0dXJuIHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG59XG5cbi8qKlxuICogR2VuZXJpYyBoZWxwZXIgZm9yIHRoZSBjb21wYXJpc29uIG9wZXJhdGlvbnMgKGVxdWFsLCBub3RFcXVhbCwgLi4uKS5cbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIG9wZXJhdG9yIFRoZSBvcGVyYXRvciB0byBhcHBseVxuICogQHBhcmFtIGxlZnRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIG9wZXJhdG9yXG4gKiBAcGFyYW0gcmlnaHRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBvcGVyYXRvclxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGNvbXBhcmlzb25cbiAqL1xuZnVuY3Rpb24gY29tcGFyaXNvbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IsXG5cdGxlZnRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4sXG5cdHJpZ2h0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBsZWZ0RXhwcmVzc2lvbiA9IHdyYXBQcmltaXRpdmUobGVmdE9wZXJhbmQpO1xuXHRjb25zdCByaWdodEV4cHJlc3Npb24gPSB3cmFwUHJpbWl0aXZlKHJpZ2h0T3BlcmFuZCk7XG5cdGlmIChoYXNVbnJlc29sdmFibGVFeHByZXNzaW9uKGxlZnRFeHByZXNzaW9uLCByaWdodEV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG5cdH1cblx0aWYgKGlzQ29uc3RhbnQobGVmdEV4cHJlc3Npb24pICYmIGlzQ29uc3RhbnQocmlnaHRFeHByZXNzaW9uKSkge1xuXHRcdHN3aXRjaCAob3BlcmF0b3IpIHtcblx0XHRcdGNhc2UgXCIhPT1cIjpcblx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KGxlZnRFeHByZXNzaW9uLnZhbHVlICE9PSByaWdodEV4cHJlc3Npb24udmFsdWUpO1xuXHRcdFx0Y2FzZSBcIj09PVwiOlxuXHRcdFx0XHRyZXR1cm4gY29uc3RhbnQobGVmdEV4cHJlc3Npb24udmFsdWUgPT09IHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSk7XG5cdFx0XHRjYXNlIFwiPFwiOlxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0bGVmdEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHxcblx0XHRcdFx0XHRsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdFx0cmlnaHRFeHByZXNzaW9uLnZhbHVlID09PSBudWxsIHx8XG5cdFx0XHRcdFx0cmlnaHRFeHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWRcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gY29uc3RhbnQobGVmdEV4cHJlc3Npb24udmFsdWUgPCByaWdodEV4cHJlc3Npb24udmFsdWUpO1xuXHRcdFx0Y2FzZSBcIjw9XCI6XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gbnVsbCB8fFxuXHRcdFx0XHRcdGxlZnRFeHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0XHRyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHxcblx0XHRcdFx0XHRyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IHVuZGVmaW5lZFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBjb25zdGFudChsZWZ0RXhwcmVzc2lvbi52YWx1ZSA8PSByaWdodEV4cHJlc3Npb24udmFsdWUpO1xuXHRcdFx0Y2FzZSBcIj5cIjpcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGxlZnRFeHByZXNzaW9uLnZhbHVlID09PSBudWxsIHx8XG5cdFx0XHRcdFx0bGVmdEV4cHJlc3Npb24udmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHRcdHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSA9PT0gbnVsbCB8fFxuXHRcdFx0XHRcdHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSA9PT0gdW5kZWZpbmVkXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KGxlZnRFeHByZXNzaW9uLnZhbHVlID4gcmlnaHRFeHByZXNzaW9uLnZhbHVlKTtcblx0XHRcdGNhc2UgXCI+PVwiOlxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0bGVmdEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHxcblx0XHRcdFx0XHRsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdFx0cmlnaHRFeHByZXNzaW9uLnZhbHVlID09PSBudWxsIHx8XG5cdFx0XHRcdFx0cmlnaHRFeHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWRcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gY29uc3RhbnQobGVmdEV4cHJlc3Npb24udmFsdWUgPj0gcmlnaHRFeHByZXNzaW9uLnZhbHVlKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdF90eXBlOiBcIkNvbXBhcmlzb25cIixcblx0XHRcdG9wZXJhdG9yOiBvcGVyYXRvcixcblx0XHRcdG9wZXJhbmQxOiBsZWZ0RXhwcmVzc2lvbixcblx0XHRcdG9wZXJhbmQyOiByaWdodEV4cHJlc3Npb25cblx0XHR9O1xuXHR9XG59XG5cbi8qKlxuICogR2VuZXJpYyBoZWxwZXIgZm9yIHRoZSBsZW5ndGggb2YgYW4gZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBpbnB1dCBleHByZXNzaW9uIHBvaW50aW5nIHRvIGFuIGFycmF5XG4gKiBAcGFyYW0gY2hlY2tVbmRlZmluZWQgSXMgdGhlIGFycmF5IHBvdGVudGlhbGx5IHVuZGVmaW5lZFxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGxlbmd0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gbGVuZ3RoKFxuXHRleHByZXNzaW9uOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248dW5rbm93bj4gfCBVbnJlc29sdmFibGVQYXRoRXhwcmVzc2lvbixcblx0Y2hlY2tVbmRlZmluZWQgPSBmYWxzZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPG51bWJlcj4ge1xuXHRpZiAoZXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJVbnJlc29sdmFibGVcIikge1xuXHRcdHJldHVybiBleHByZXNzaW9uO1xuXHR9XG5cdGlmICghY2hlY2tVbmRlZmluZWQpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0X3R5cGU6IFwiTGVuZ3RoXCIsXG5cdFx0XHRwYXRoSW5Nb2RlbDogZXhwcmVzc2lvblxuXHRcdH07XG5cdH1cblx0cmV0dXJuIGlmRWxzZShlcXVhbChleHByZXNzaW9uLCB1bmRlZmluZWQpLCAtMSwgbGVuZ3RoKGV4cHJlc3Npb24pKTtcbn1cblxuLyoqXG4gKiBDb21wYXJpc29uOiBcImVxdWFsXCIgKD09PSkuXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBsZWZ0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgbGVmdCBzaWRlXG4gKiBAcGFyYW0gcmlnaHRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBjb21wYXJpc29uXG4gKiBAcmV0dXJucyBBbiBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY29tcGFyaXNvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZXF1YWw8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRsZWZ0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRyaWdodE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgbGVmdEV4cHJlc3Npb24gPSB3cmFwUHJpbWl0aXZlKGxlZnRPcGVyYW5kKTtcblx0Y29uc3QgcmlnaHRFeHByZXNzaW9uID0gd3JhcFByaW1pdGl2ZShyaWdodE9wZXJhbmQpO1xuXHRpZiAoaGFzVW5yZXNvbHZhYmxlRXhwcmVzc2lvbihsZWZ0RXhwcmVzc2lvbiwgcmlnaHRFeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xuXHR9XG5cdGlmIChfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGxlZnRFeHByZXNzaW9uLCByaWdodEV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KHRydWUpO1xuXHR9XG5cblx0ZnVuY3Rpb24gcmVkdWNlKGxlZnQ6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPiwgcmlnaHQ6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKGxlZnQuX3R5cGUgPT09IFwiQ29tcGFyaXNvblwiICYmIGlzVHJ1ZShyaWdodCkpIHtcblx0XHRcdC8vIGNvbXBhcmUoYSwgYikgPT09IHRydWUgfn4+IGNvbXBhcmUoYSwgYilcblx0XHRcdHJldHVybiBsZWZ0O1xuXHRcdH0gZWxzZSBpZiAobGVmdC5fdHlwZSA9PT0gXCJDb21wYXJpc29uXCIgJiYgaXNGYWxzZShyaWdodCkpIHtcblx0XHRcdC8vIGNvbXBhcmUoYSwgYikgPT09IGZhbHNlIH5+PiAhY29tcGFyZShhLCBiKVxuXHRcdFx0cmV0dXJuIG5vdChsZWZ0KTtcblx0XHR9IGVsc2UgaWYgKGxlZnQuX3R5cGUgPT09IFwiSWZFbHNlXCIgJiYgX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChsZWZ0Lm9uVHJ1ZSwgcmlnaHQpKSB7XG5cdFx0XHQvLyAoaWYgKHgpIHsgYSB9IGVsc2UgeyBiIH0pID09PSBhIH5+PiB4IHx8IChiID09PSBhKVxuXHRcdFx0cmV0dXJuIG9yKGxlZnQuY29uZGl0aW9uLCBlcXVhbChsZWZ0Lm9uRmFsc2UsIHJpZ2h0KSk7XG5cdFx0fSBlbHNlIGlmIChsZWZ0Ll90eXBlID09PSBcIklmRWxzZVwiICYmIF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwobGVmdC5vbkZhbHNlLCByaWdodCkpIHtcblx0XHRcdC8vIChpZiAoeCkgeyBhIH0gZWxzZSB7IGIgfSkgPT09IGIgfn4+ICF4IHx8IChhID09PSBiKVxuXHRcdFx0cmV0dXJuIG9yKG5vdChsZWZ0LmNvbmRpdGlvbiksIGVxdWFsKGxlZnQub25UcnVlLCByaWdodCkpO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRsZWZ0Ll90eXBlID09PSBcIklmRWxzZVwiICYmXG5cdFx0XHRpc0NvbnN0YW50KGxlZnQub25UcnVlKSAmJlxuXHRcdFx0aXNDb25zdGFudChsZWZ0Lm9uRmFsc2UpICYmXG5cdFx0XHRpc0NvbnN0YW50KHJpZ2h0KSAmJlxuXHRcdFx0IV9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwobGVmdC5vblRydWUsIHJpZ2h0KSAmJlxuXHRcdFx0IV9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwobGVmdC5vbkZhbHNlLCByaWdodClcblx0XHQpIHtcblx0XHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvLyBleHBsb2l0IHN5bW1ldHJ5OiBhID09PSBiIDx+PiBiID09PSBhXG5cdGNvbnN0IHJlZHVjZWQgPSByZWR1Y2UobGVmdEV4cHJlc3Npb24sIHJpZ2h0RXhwcmVzc2lvbikgPz8gcmVkdWNlKHJpZ2h0RXhwcmVzc2lvbiwgbGVmdEV4cHJlc3Npb24pO1xuXHRyZXR1cm4gcmVkdWNlZCA/PyBjb21wYXJpc29uKFwiPT09XCIsIGxlZnRFeHByZXNzaW9uLCByaWdodEV4cHJlc3Npb24pO1xufVxuXG4vKipcbiAqIENvbXBhcmlzb246IFwibm90IGVxdWFsXCIgKCE9PSkuXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBsZWZ0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgbGVmdCBzaWRlXG4gKiBAcGFyYW0gcmlnaHRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBjb21wYXJpc29uXG4gKiBAcmV0dXJucyBBbiBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY29tcGFyaXNvblxuICovXG5leHBvcnQgZnVuY3Rpb24gbm90RXF1YWw8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRsZWZ0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRyaWdodE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIG5vdChlcXVhbChsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kKSk7XG59XG5cbi8qKlxuICogQ29tcGFyaXNvbjogXCJncmVhdGVyIG9yIGVxdWFsXCIgKD49KS5cbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGxlZnRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSBsZWZ0IHNpZGVcbiAqIEBwYXJhbSByaWdodE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGNvbXBhcmlzb25cbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBjb21wYXJpc29uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmVhdGVyT3JFcXVhbDxUIGV4dGVuZHMgRGVmaW5lZFByaW1pdGl2ZVR5cGU+KFxuXHRsZWZ0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRyaWdodE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGNvbXBhcmlzb24oXCI+PVwiLCBsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kKTtcbn1cblxuLyoqXG4gKiBDb21wYXJpc29uOiBcImdyZWF0ZXIgdGhhblwiICg+KS5cbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGxlZnRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSBsZWZ0IHNpZGVcbiAqIEBwYXJhbSByaWdodE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGNvbXBhcmlzb25cbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBjb21wYXJpc29uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmVhdGVyVGhhbjxUIGV4dGVuZHMgRGVmaW5lZFByaW1pdGl2ZVR5cGU+KFxuXHRsZWZ0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRyaWdodE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGNvbXBhcmlzb24oXCI+XCIsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpO1xufVxuXG4vKipcbiAqIENvbXBhcmlzb246IFwibGVzcyBvciBlcXVhbFwiICg8PSkuXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBsZWZ0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgbGVmdCBzaWRlXG4gKiBAcGFyYW0gcmlnaHRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBjb21wYXJpc29uXG4gKiBAcmV0dXJucyBBbiBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY29tcGFyaXNvblxuICovXG5leHBvcnQgZnVuY3Rpb24gbGVzc09yRXF1YWw8VCBleHRlbmRzIERlZmluZWRQcmltaXRpdmVUeXBlPihcblx0bGVmdE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cmlnaHRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBjb21wYXJpc29uKFwiPD1cIiwgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCk7XG59XG5cbi8qKlxuICogQ29tcGFyaXNvbjogXCJsZXNzIHRoYW5cIiAoPCkuXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBsZWZ0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgbGVmdCBzaWRlXG4gKiBAcGFyYW0gcmlnaHRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBjb21wYXJpc29uXG4gKiBAcmV0dXJucyBBbiBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY29tcGFyaXNvblxuICovXG5leHBvcnQgZnVuY3Rpb24gbGVzc1RoYW48VCBleHRlbmRzIERlZmluZWRQcmltaXRpdmVUeXBlPihcblx0bGVmdE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cmlnaHRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBjb21wYXJpc29uKFwiPFwiLCBsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kKTtcbn1cblxuLyoqXG4gKiBJZi10aGVuLWVsc2UgZXhwcmVzc2lvbi5cbiAqXG4gKiBFdmFsdWF0ZXMgdG8gb25UcnVlIGlmIHRoZSBjb25kaXRpb24gZXZhbHVhdGVzIHRvIHRydWUsIGVsc2UgZXZhbHVhdGVzIHRvIG9uRmFsc2UuXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBjb25kaXRpb24gVGhlIGNvbmRpdGlvbiB0byBldmFsdWF0ZVxuICogQHBhcmFtIG9uVHJ1ZSBFeHByZXNzaW9uIHJlc3VsdCBpZiB0aGUgY29uZGl0aW9uIGV2YWx1YXRlcyB0byB0cnVlXG4gKiBAcGFyYW0gb25GYWxzZSBFeHByZXNzaW9uIHJlc3VsdCBpZiB0aGUgY29uZGl0aW9uIGV2YWx1YXRlcyB0byBmYWxzZVxuICogQHJldHVybnMgVGhlIGV4cHJlc3Npb24gdGhhdCByZXByZXNlbnRzIHRoaXMgY29uZGl0aW9uYWwgY2hlY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlmRWxzZTxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGNvbmRpdGlvbjogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPGJvb2xlYW4+LFxuXHRvblRydWU6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0b25GYWxzZTogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4ge1xuXHRsZXQgY29uZGl0aW9uRXhwcmVzc2lvbiA9IHdyYXBQcmltaXRpdmUoY29uZGl0aW9uKTtcblx0bGV0IG9uVHJ1ZUV4cHJlc3Npb24gPSB3cmFwUHJpbWl0aXZlKG9uVHJ1ZSk7XG5cdGxldCBvbkZhbHNlRXhwcmVzc2lvbiA9IHdyYXBQcmltaXRpdmUob25GYWxzZSk7XG5cblx0Ly8gc3dhcCBicmFuY2hlcyBpZiB0aGUgY29uZGl0aW9uIGlzIGEgbmVnYXRpb25cblx0aWYgKGNvbmRpdGlvbkV4cHJlc3Npb24uX3R5cGUgPT09IFwiTm90XCIpIHtcblx0XHQvLyBpZkVsc2Uobm90KFgpLCBhLCBiKSAtLT4gaWZFbHNlKFgsIGIsIGEpXG5cdFx0W29uVHJ1ZUV4cHJlc3Npb24sIG9uRmFsc2VFeHByZXNzaW9uXSA9IFtvbkZhbHNlRXhwcmVzc2lvbiwgb25UcnVlRXhwcmVzc2lvbl07XG5cdFx0Y29uZGl0aW9uRXhwcmVzc2lvbiA9IG5vdChjb25kaXRpb25FeHByZXNzaW9uKTtcblx0fVxuXG5cdC8vIGlubGluZSBuZXN0ZWQgaWYtZWxzZSBleHByZXNzaW9uczogb25UcnVlIGJyYW5jaFxuXHQvLyBpZkVsc2UoWCwgaWZFbHNlKFgsIGEsIGIpLCBjKSA9PT4gaWZFbHNlKFgsIGEsIGMpXG5cdGlmIChvblRydWVFeHByZXNzaW9uLl90eXBlID09PSBcIklmRWxzZVwiICYmIF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoY29uZGl0aW9uRXhwcmVzc2lvbiwgb25UcnVlRXhwcmVzc2lvbi5jb25kaXRpb24pKSB7XG5cdFx0b25UcnVlRXhwcmVzc2lvbiA9IG9uVHJ1ZUV4cHJlc3Npb24ub25UcnVlO1xuXHR9XG5cblx0Ly8gaW5saW5lIG5lc3RlZCBpZi1lbHNlIGV4cHJlc3Npb25zOiBvbkZhbHNlIGJyYW5jaFxuXHQvLyBpZkVsc2UoWCwgYSwgaWZFbHNlKFgsIGIsIGMpKSA9PT4gaWZFbHNlKFgsIGEsIGMpXG5cdGlmIChvbkZhbHNlRXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJJZkVsc2VcIiAmJiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGNvbmRpdGlvbkV4cHJlc3Npb24sIG9uRmFsc2VFeHByZXNzaW9uLmNvbmRpdGlvbikpIHtcblx0XHRvbkZhbHNlRXhwcmVzc2lvbiA9IG9uRmFsc2VFeHByZXNzaW9uLm9uRmFsc2U7XG5cdH1cblxuXHQvLyAoaWYgdHJ1ZSB0aGVuIGEgZWxzZSBiKSAgfn4+IGFcblx0Ly8gKGlmIGZhbHNlIHRoZW4gYSBlbHNlIGIpIH5+PiBiXG5cdGlmIChpc0NvbnN0YW50KGNvbmRpdGlvbkV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIGNvbmRpdGlvbkV4cHJlc3Npb24udmFsdWUgPyBvblRydWVFeHByZXNzaW9uIDogb25GYWxzZUV4cHJlc3Npb247XG5cdH1cblxuXHQvLyBpZiAoaXNDb25zdGFudEJvb2xlYW4ob25UcnVlRXhwcmVzc2lvbikgfHwgaXNDb25zdGFudEJvb2xlYW4ob25GYWxzZUV4cHJlc3Npb24pKSB7XG5cdC8vIFx0cmV0dXJuIG9yKGFuZChjb25kaXRpb24sIG9uVHJ1ZUV4cHJlc3Npb24gYXMgRXhwcmVzc2lvbjxib29sZWFuPiksIGFuZChub3QoY29uZGl0aW9uKSwgb25GYWxzZUV4cHJlc3Npb24gYXMgRXhwcmVzc2lvbjxib29sZWFuPikpIGFzIEV4cHJlc3Npb248VD5cblx0Ly8gfVxuXG5cdC8vIChpZiBYIHRoZW4gYSBlbHNlIGEpIH5+PiBhXG5cdGlmIChfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKG9uVHJ1ZUV4cHJlc3Npb24sIG9uRmFsc2VFeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiBvblRydWVFeHByZXNzaW9uO1xuXHR9XG5cblx0Ly8gaWYgWCB0aGVuIGEgZWxzZSBmYWxzZSB+fj4gWCAmJiBhXG5cdGlmIChpc0ZhbHNlKG9uRmFsc2VFeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiBhbmQoY29uZGl0aW9uRXhwcmVzc2lvbiwgb25UcnVlRXhwcmVzc2lvbiBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4pIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fVxuXG5cdC8vIGlmIFggdGhlbiBhIGVsc2UgdHJ1ZSB+fj4gIVggfHwgYVxuXHRpZiAoaXNUcnVlKG9uRmFsc2VFeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiBvcihub3QoY29uZGl0aW9uRXhwcmVzc2lvbiksIG9uVHJ1ZUV4cHJlc3Npb24gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH1cblxuXHQvLyBpZiBYIHRoZW4gZmFsc2UgZWxzZSBhIH5+PiAhWCAmJiBhXG5cdGlmIChpc0ZhbHNlKG9uVHJ1ZUV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIGFuZChub3QoY29uZGl0aW9uRXhwcmVzc2lvbiksIG9uRmFsc2VFeHByZXNzaW9uIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9XG5cblx0Ly8gaWYgWCB0aGVuIHRydWUgZWxzZSBhIH5+PiBYIHx8IGFcblx0aWYgKGlzVHJ1ZShvblRydWVFeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiBvcihjb25kaXRpb25FeHByZXNzaW9uLCBvbkZhbHNlRXhwcmVzc2lvbiBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4pIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fVxuXHRpZiAoaGFzVW5yZXNvbHZhYmxlRXhwcmVzc2lvbihjb25kaXRpb25FeHByZXNzaW9uLCBvblRydWVFeHByZXNzaW9uLCBvbkZhbHNlRXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjtcblx0fVxuXHRpZiAoaXNDb21wbGV4VHlwZUV4cHJlc3Npb24oY29uZGl0aW9uKSB8fCBpc0NvbXBsZXhUeXBlRXhwcmVzc2lvbihvblRydWUpIHx8IGlzQ29tcGxleFR5cGVFeHByZXNzaW9uKG9uRmFsc2UpKSB7XG5cdFx0bGV0IHBhdGhJZHggPSAwO1xuXHRcdGNvbnN0IG15SWZFbHNlRXhwcmVzc2lvbiA9IGZvcm1hdFJlc3VsdChbY29uZGl0aW9uLCBvblRydWUsIG9uRmFsc2VdLCBcInNhcC5mZS5jb3JlLmZvcm1hdHRlcnMuU3RhbmRhcmRGb3JtYXR0ZXIjaWZFbHNlXCIpO1xuXHRcdGNvbnN0IGFsbFBhcnRzID0gW107XG5cdFx0dHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRteUlmRWxzZUV4cHJlc3Npb24sXG5cdFx0XHRcIlBhdGhJbk1vZGVsXCIsXG5cdFx0XHQoY29uc3RhbnRQYXRoOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248dW5rbm93bj4pID0+IHtcblx0XHRcdFx0YWxsUGFydHMucHVzaChjb25zdGFudFBhdGgpO1xuXHRcdFx0XHRyZXR1cm4gcGF0aEluTW9kZWwoYCQke3BhdGhJZHgrK31gLCBcIiRcIik7XG5cdFx0XHR9LFxuXHRcdFx0dHJ1ZVxuXHRcdCk7XG5cdFx0YWxsUGFydHMudW5zaGlmdChjb25zdGFudChKU09OLnN0cmluZ2lmeShteUlmRWxzZUV4cHJlc3Npb24pKSk7XG5cdFx0cmV0dXJuIGZvcm1hdFJlc3VsdChhbGxQYXJ0cywgXCJzYXAuZmUuY29yZS5mb3JtYXR0ZXJzLlN0YW5kYXJkRm9ybWF0dGVyI2V2YWx1YXRlQ29tcGxleEV4cHJlc3Npb25cIiwgdW5kZWZpbmVkLCB0cnVlKTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdF90eXBlOiBcIklmRWxzZVwiLFxuXHRcdGNvbmRpdGlvbjogY29uZGl0aW9uRXhwcmVzc2lvbixcblx0XHRvblRydWU6IG9uVHJ1ZUV4cHJlc3Npb24sXG5cdFx0b25GYWxzZTogb25GYWxzZUV4cHJlc3Npb25cblx0fTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgY3VycmVudCBleHByZXNzaW9uIGhhcyBhIHJlZmVyZW5jZSB0byB0aGUgZGVmYXVsdCBtb2RlbCAodW5kZWZpbmVkKS5cbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBleHByZXNzaW9uIHRvIGV2YWx1YXRlXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlcmUgaXMgYSByZWZlcmVuY2UgdG8gdGhlIGRlZmF1bHQgY29udGV4dFxuICovXG5mdW5jdGlvbiBoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KGV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPik6IGJvb2xlYW4ge1xuXHRzd2l0Y2ggKGV4cHJlc3Npb24uX3R5cGUpIHtcblx0XHRjYXNlIFwiQ29uc3RhbnRcIjpcblx0XHRjYXNlIFwiRm9ybWF0dGVyXCI6XG5cdFx0Y2FzZSBcIkNvbXBsZXhUeXBlXCI6XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0Y2FzZSBcIlNldFwiOlxuXHRcdFx0cmV0dXJuIGV4cHJlc3Npb24ub3BlcmFuZHMuc29tZShoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KTtcblx0XHRjYXNlIFwiUGF0aEluTW9kZWxcIjpcblx0XHRcdHJldHVybiBleHByZXNzaW9uLm1vZGVsTmFtZSA9PT0gdW5kZWZpbmVkO1xuXHRcdGNhc2UgXCJDb21wYXJpc29uXCI6XG5cdFx0XHRyZXR1cm4gaGFzUmVmZXJlbmNlVG9EZWZhdWx0Q29udGV4dChleHByZXNzaW9uLm9wZXJhbmQxKSB8fCBoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KGV4cHJlc3Npb24ub3BlcmFuZDIpO1xuXHRcdGNhc2UgXCJJZkVsc2VcIjpcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQoZXhwcmVzc2lvbi5jb25kaXRpb24pIHx8XG5cdFx0XHRcdGhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQoZXhwcmVzc2lvbi5vblRydWUpIHx8XG5cdFx0XHRcdGhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQoZXhwcmVzc2lvbi5vbkZhbHNlKVxuXHRcdFx0KTtcblx0XHRjYXNlIFwiTm90XCI6XG5cdFx0Y2FzZSBcIlRydXRoeVwiOlxuXHRcdFx0cmV0dXJuIGhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQoZXhwcmVzc2lvbi5vcGVyYW5kKTtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbi8vIFRoaXMgaXMgb25lIGNhc2Ugd2hlcmUgYW55IGRvZXMgbWFrZSBzZW5zZS4uLlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCB0eXBlIEZuPFQ+ID0gKCguLi5wYXJhbXM6IGFueSkgPT4gVCB8IFByb21pc2U8VD4pICYge1xuXHRfX2Z1bmN0aW9uTmFtZTogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiBXcmFwcGVkVHVwbGVcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuLy8gQHRzLWlnbm9yZVxudHlwZSBXcmFwcGVkVHVwbGU8VD4gPSB7IFtLIGluIGtleW9mIFRdOiBXcmFwcGVkVHVwbGU8VFtLXT4gfCBFeHByZXNzaW9uT3JQcmltaXRpdmU8VFtLXT4gfCB1bmRlZmluZWQgfTtcblxuLy8gU28sIHRoaXMgd29ya3MgYnV0IEkgY2Fubm90IGdldCBpdCB0byBjb21waWxlIDpELCBidXQgaXQgc3RpbGwgZG9lcyB3aGF0IGlzIGV4cGVjdGVkLi4uXG5cbi8qKlxuICogQSBmdW5jdGlvbiByZWZlcmVuY2Ugb3IgYSBmdW5jdGlvbiBuYW1lLlxuICovXG50eXBlIEZ1bmN0aW9uT3JOYW1lPFQ+ID0gRm48VD4gfCBzdHJpbmc7XG5cbi8qKlxuICogRnVuY3Rpb24gcGFyYW1ldGVycywgZWl0aGVyIGRlcml2ZWQgZnJvbSB0aGUgZnVuY3Rpb24gb3IgYW4gdW50eXBlZCBhcnJheS5cbiAqL1xudHlwZSBGdW5jdGlvblBhcmFtZXRlcnM8VCwgRiBleHRlbmRzIEZ1bmN0aW9uT3JOYW1lPFQ+PiA9IEYgZXh0ZW5kcyBGbjxUPiA/IFBhcmFtZXRlcnM8Rj4gOiB1bmtub3duW107XG5cbi8qKlxuICogQ2FsbHMgYSBmb3JtYXR0ZXIgZnVuY3Rpb24gdG8gcHJvY2VzcyB0aGUgcGFyYW1ldGVycy5cbiAqIElmIHJlcXVpcmVDb250ZXh0IGlzIHNldCB0byB0cnVlIGFuZCBubyBjb250ZXh0IGlzIHBhc3NlZCBhIGRlZmF1bHQgY29udGV4dCB3aWxsIGJlIGFkZGVkIGF1dG9tYXRpY2FsbHkuXG4gKiBAdGVtcGxhdGUgVFxuICogQHRlbXBsYXRlIFVcbiAqIEBwYXJhbSBwYXJhbWV0ZXJzIFRoZSBsaXN0IG9mIHBhcmFtZXRlciB0aGF0IHNob3VsZCBtYXRjaCB0aGUgdHlwZSBhbmQgbnVtYmVyIG9mIHRoZSBmb3JtYXR0ZXIgZnVuY3Rpb25cbiAqIEBwYXJhbSBmb3JtYXR0ZXJGdW5jdGlvbiBUaGUgZnVuY3Rpb24gdG8gY2FsbFxuICogQHBhcmFtIFtjb250ZXh0RW50aXR5VHlwZV0gSWYgbm8gcGFyYW1ldGVyIHJlZmVycyB0byB0aGUgY29udGV4dCB0aGVuIHdlIHVzZSB0aGlzIGluZm9ybWF0aW9uIHRvIGFkZCBhIHJlZmVyZW5jZSB0byB0aGUga2V5cyBmcm9tIHRoZSBlbnRpdHkgdHlwZS5cbiAqIEBwYXJhbSBbaWdub3JlQ29tcGxleFR5cGVdIFdoZXRoZXIgdG8gaWdub3JlIHRoZSB0cmFuc2dmb3JtYXRpb24gdG8gdGhlIFN0YW5kYXJkRm9ybWF0dGVyIG9yIG5vdFxuICogQHJldHVybnMgVGhlIGNvcnJlc3BvbmRpbmcgZXhwcmVzc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0UmVzdWx0PFQsIFUgZXh0ZW5kcyBGbjxUPj4oXG5cdHBhcmFtZXRlcnM6IFdyYXBwZWRUdXBsZTxQYXJhbWV0ZXJzPFU+Pixcblx0Zm9ybWF0dGVyRnVuY3Rpb246IFUgfCBzdHJpbmcsXG5cdGNvbnRleHRFbnRpdHlUeXBlPzogRW50aXR5VHlwZSxcblx0aWdub3JlQ29tcGxleFR5cGUgPSBmYWxzZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+IHtcblx0Y29uc3QgcGFyYW1ldGVyRXhwcmVzc2lvbnMgPSAocGFyYW1ldGVycyBhcyBFeHByZXNzaW9uT3JQcmltaXRpdmU8UHJpbWl0aXZlVHlwZT5bXSkubWFwKHdyYXBQcmltaXRpdmUpO1xuXG5cdGlmIChoYXNVbnJlc29sdmFibGVFeHByZXNzaW9uKC4uLnBhcmFtZXRlckV4cHJlc3Npb25zKSkge1xuXHRcdHJldHVybiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xuXHR9XG5cdGlmIChjb250ZXh0RW50aXR5VHlwZSkge1xuXHRcdC8vIE90aGVyd2lzZSwgaWYgdGhlIGNvbnRleHQgaXMgcmVxdWlyZWQgYW5kIG5vIGNvbnRleHQgaXMgcHJvdmlkZWQgbWFrZSBzdXJlIHRvIGFkZCB0aGUgZGVmYXVsdCBiaW5kaW5nXG5cdFx0aWYgKCFwYXJhbWV0ZXJFeHByZXNzaW9ucy5zb21lKGhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQpKSB7XG5cdFx0XHRjb250ZXh0RW50aXR5VHlwZS5rZXlzLmZvckVhY2goKGtleSkgPT4gcGFyYW1ldGVyRXhwcmVzc2lvbnMucHVzaChwYXRoSW5Nb2RlbChrZXkubmFtZSwgXCJcIikpKTtcblx0XHR9XG5cdH1cblx0bGV0IGZ1bmN0aW9uTmFtZSA9IFwiXCI7XG5cdGlmICh0eXBlb2YgZm9ybWF0dGVyRnVuY3Rpb24gPT09IFwic3RyaW5nXCIpIHtcblx0XHRmdW5jdGlvbk5hbWUgPSBmb3JtYXR0ZXJGdW5jdGlvbjtcblx0fSBlbHNlIHtcblx0XHRmdW5jdGlvbk5hbWUgPSBmb3JtYXR0ZXJGdW5jdGlvbi5fX2Z1bmN0aW9uTmFtZTtcblx0fVxuXHQvLyBGb3JtYXR0ZXJOYW1lIGNhbiBiZSBvZiBmb3JtYXQgc2FwLmZlLmNvcmUueHh4I21ldGhvZE5hbWUgdG8gaGF2ZSBtdWx0aXBsZSBmb3JtYXR0ZXIgaW4gb25lIGNsYXNzXG5cdGNvbnN0IFtmb3JtYXR0ZXJDbGFzcywgZm9ybWF0dGVyTmFtZV0gPSBmdW5jdGlvbk5hbWUuc3BsaXQoXCIjXCIpO1xuXG5cdC8vIEluIHNvbWUgY2FzZSB3ZSBhbHNvIGNhbm5vdCBjYWxsIGRpcmVjdGx5IGEgZnVuY3Rpb24gYmVjYXVzZSBvZiB0b28gY29tcGxleCBpbnB1dCwgaW4gdGhhdCBjYXNlIHdlIG5lZWQgdG8gY29udmVydCB0byBhIHNpbXBsZXIgZnVuY3Rpb24gY2FsbFxuXHRpZiAoXG5cdFx0IWlnbm9yZUNvbXBsZXhUeXBlICYmXG5cdFx0KHBhcmFtZXRlckV4cHJlc3Npb25zLnNvbWUoaXNDb21wbGV4VHlwZUV4cHJlc3Npb24pIHx8XG5cdFx0XHRwYXJhbWV0ZXJFeHByZXNzaW9ucy5zb21lKGlzQ29uY2F0RXhwcmVzc2lvbikgfHxcblx0XHRcdHBhcmFtZXRlckV4cHJlc3Npb25zLnNvbWUoaXNJZkVsc2VFeHByZXNzaW9uKSlcblx0KSB7XG5cdFx0bGV0IHBhdGhJZHggPSAwO1xuXHRcdGNvbnN0IG15Rm9ybWF0RXhwcmVzc2lvbiA9IGZvcm1hdFJlc3VsdChwYXJhbWV0ZXJFeHByZXNzaW9ucywgZnVuY3Rpb25OYW1lLCB1bmRlZmluZWQsIHRydWUpO1xuXHRcdGNvbnN0IGFsbFBhcnRzID0gW107XG5cdFx0dHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRteUZvcm1hdEV4cHJlc3Npb24sXG5cdFx0XHRcIlBhdGhJbk1vZGVsXCIsXG5cdFx0XHQoY29uc3RhbnRQYXRoOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248dW5rbm93bj4pID0+IHtcblx0XHRcdFx0YWxsUGFydHMucHVzaChjb25zdGFudFBhdGgpO1xuXHRcdFx0XHRyZXR1cm4gcGF0aEluTW9kZWwoYCQke3BhdGhJZHgrK31gLCBcIiRcIik7XG5cdFx0XHR9LFxuXHRcdFx0dHJ1ZVxuXHRcdCk7XG5cdFx0YWxsUGFydHMudW5zaGlmdChjb25zdGFudChKU09OLnN0cmluZ2lmeShteUZvcm1hdEV4cHJlc3Npb24pKSk7XG5cdFx0cmV0dXJuIGZvcm1hdFJlc3VsdChhbGxQYXJ0cywgXCJzYXAuZmUuY29yZS5mb3JtYXR0ZXJzLlN0YW5kYXJkRm9ybWF0dGVyI2V2YWx1YXRlQ29tcGxleEV4cHJlc3Npb25cIiwgdW5kZWZpbmVkLCB0cnVlKTtcblx0fSBlbHNlIGlmICghIWZvcm1hdHRlck5hbWUgJiYgZm9ybWF0dGVyTmFtZS5sZW5ndGggPiAwKSB7XG5cdFx0cGFyYW1ldGVyRXhwcmVzc2lvbnMudW5zaGlmdChjb25zdGFudChmb3JtYXR0ZXJOYW1lKSk7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdF90eXBlOiBcIkZvcm1hdHRlclwiLFxuXHRcdGZuOiBmb3JtYXR0ZXJDbGFzcyxcblx0XHRwYXJhbWV0ZXJzOiBwYXJhbWV0ZXJFeHByZXNzaW9uc1xuXHR9O1xufVxuXG50eXBlIEJpbmRpbmdDb25zdHJhaW50cyA9IHtcblx0c2NhbGU/OiBudW1iZXI7XG5cdHByZWNpc2lvbj86IG51bWJlcjtcblx0bWF4TGVuZ3RoPzogbnVtYmVyO1xuXHRudWxsYWJsZT86IGJvb2xlYW47XG5cdG1pbmltdW0/OiBzdHJpbmc7XG5cdG1heGltdW0/OiBzdHJpbmc7XG5cdGlzRGlnaXRTZXF1ZW5jZT86IGJvb2xlYW47XG5cdFY0PzogYm9vbGVhbjtcbn07XG5leHBvcnQgZnVuY3Rpb24gc2V0VXBDb25zdHJhaW50cyh0YXJnZXRNYXBwaW5nOiBUeXBlTWFwcGluZ0RlZmluaXRpb24sIHByb3BlcnR5OiBQcm9wZXJ0eSB8IEFjdGlvblBhcmFtZXRlcik6IEJpbmRpbmdDb25zdHJhaW50cyB7XG5cdGNvbnN0IGNvbnN0cmFpbnRzOiBCaW5kaW5nQ29uc3RyYWludHMgPSB7fTtcblx0aWYgKHRhcmdldE1hcHBpbmc/LmNvbnN0cmFpbnRzPy4kU2NhbGUgJiYgcHJvcGVydHkuc2NhbGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdGNvbnN0cmFpbnRzLnNjYWxlID0gcHJvcGVydHkuc2NhbGU7XG5cdH1cblx0aWYgKHRhcmdldE1hcHBpbmc/LmNvbnN0cmFpbnRzPy4kUHJlY2lzaW9uICYmIHByb3BlcnR5LnByZWNpc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0Y29uc3RyYWludHMucHJlY2lzaW9uID0gcHJvcGVydHkucHJlY2lzaW9uO1xuXHR9XG5cdGlmICh0YXJnZXRNYXBwaW5nPy5jb25zdHJhaW50cz8uJE1heExlbmd0aCAmJiBwcm9wZXJ0eS5tYXhMZW5ndGggIT09IHVuZGVmaW5lZCkge1xuXHRcdGNvbnN0cmFpbnRzLm1heExlbmd0aCA9IHByb3BlcnR5Lm1heExlbmd0aDtcblx0fVxuXHRpZiAocHJvcGVydHkubnVsbGFibGUgPT09IGZhbHNlKSB7XG5cdFx0Y29uc3RyYWludHMubnVsbGFibGUgPSBmYWxzZTtcblx0fVxuXHRpZiAodGFyZ2V0TWFwcGluZz8uY29uc3RyYWludHM/LltcIkBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NaW5pbXVtLyREZWNpbWFsXCJdICYmICFpc05hTihwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bSkpIHtcblx0XHRjb25zdHJhaW50cy5taW5pbXVtID0gYCR7cHJvcGVydHkuYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1pbmltdW19YDtcblx0fVxuXHRpZiAodGFyZ2V0TWFwcGluZz8uY29uc3RyYWludHM/LltcIkBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NYXhpbXVtLyREZWNpbWFsXCJdICYmICFpc05hTihwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bSkpIHtcblx0XHRjb25zdHJhaW50cy5tYXhpbXVtID0gYCR7cHJvcGVydHkuYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1heGltdW19YDtcblx0fVxuXHRpZiAoXG5cdFx0cHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNEaWdpdFNlcXVlbmNlICYmXG5cdFx0dGFyZ2V0TWFwcGluZy50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiICYmXG5cdFx0dGFyZ2V0TWFwcGluZz8uY29uc3RyYWludHM/LltcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNEaWdpdFNlcXVlbmNlXCJdXG5cdCkge1xuXHRcdGNvbnN0cmFpbnRzLmlzRGlnaXRTZXF1ZW5jZSA9IHRydWU7XG5cdH1cblx0aWYgKHRhcmdldE1hcHBpbmc/LmNvbnN0cmFpbnRzPy4kVjQpIHtcblx0XHRjb25zdHJhaW50cy5WNCA9IHRydWU7XG5cdH1cblx0cmV0dXJuIGNvbnN0cmFpbnRzO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgcHJvcGVydHksIGFuZCBzZXRzIHVwIHRoZSBmb3JtYXRPcHRpb25zIGFuZCBjb25zdHJhaW50cy5cbiAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgUHJvcGVydHkgZm9yIHdoaWNoIHdlIGFyZSBzZXR0aW5nIHVwIHRoZSBiaW5kaW5nXG4gKiBAcGFyYW0gcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiBUaGUgQmluZGluZ0V4cHJlc3Npb24gb2YgdGhlIHByb3BlcnR5IGFib3ZlLiBTZXJ2ZXMgYXMgdGhlIGJhc2lzIHRvIHdoaWNoIGluZm9ybWF0aW9uIGNhbiBiZSBhZGRlZFxuICogQHBhcmFtIGlnbm9yZUNvbnN0cmFpbnRzIElnbm9yZSBjb25zdHJhaW50cyBvZiB0aGUgcHJvcGVydHlcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBwcm9wZXJ0eSB3aXRoIGZvcm1hdE9wdGlvbnMgYW5kIGNvbnN0cmFpbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uPFQ+KFxuXHRwcm9wZXJ0eTogUHJvcGVydHkgfCBBY3Rpb25QYXJhbWV0ZXIsXG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+LFxuXHRpZ25vcmVDb25zdHJhaW50cyA9IGZhbHNlXG4pOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248VD4ge1xuXHRjb25zdCBvdXRFeHByZXNzaW9uOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248dW5rbm93bj4gPSBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uIGFzIFBhdGhJbk1vZGVsRXhwcmVzc2lvbjx1bmtub3duPjtcblx0aWYgKHByb3BlcnR5Ll90eXBlICE9PSBcIlByb3BlcnR5XCIgJiYgcHJvcGVydHkuX3R5cGUgIT09IFwiQWN0aW9uUGFyYW1ldGVyXCIpIHtcblx0XHRyZXR1cm4gb3V0RXhwcmVzc2lvbjtcblx0fVxuXHRjb25zdCB0YXJnZXRNYXBwaW5nID0gRURNX1RZUEVfTUFQUElOR1twcm9wZXJ0eS50eXBlXTtcblx0aWYgKCF0YXJnZXRNYXBwaW5nKSB7XG5cdFx0cmV0dXJuIG91dEV4cHJlc3Npb247XG5cdH1cblx0aWYgKCFvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMpIHtcblx0XHRvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMgPSB7fTtcblx0fVxuXHRvdXRFeHByZXNzaW9uLmNvbnN0cmFpbnRzID0ge307XG5cblx0b3V0RXhwcmVzc2lvbi50eXBlID0gdGFyZ2V0TWFwcGluZy50eXBlO1xuXHRpZiAoIWlnbm9yZUNvbnN0cmFpbnRzKSB7XG5cdFx0b3V0RXhwcmVzc2lvbi5jb25zdHJhaW50cyA9IHNldFVwQ29uc3RyYWludHModGFyZ2V0TWFwcGluZywgcHJvcGVydHkpO1xuXHR9XG5cblx0aWYgKFxuXHRcdChvdXRFeHByZXNzaW9uPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50XCIpID09PSAwICYmIG91dEV4cHJlc3Npb24/LnR5cGUgIT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50NjRcIikgfHxcblx0XHRvdXRFeHByZXNzaW9uPy50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRvdWJsZVwiXG5cdCkge1xuXHRcdG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24ob3V0RXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zLCB7XG5cdFx0XHRwYXJzZUFzU3RyaW5nOiBmYWxzZVxuXHRcdH0pO1xuXHR9XG5cdGlmIChvdXRFeHByZXNzaW9uLnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIgJiYgaXNQcm9wZXJ0eShwcm9wZXJ0eSkpIHtcblx0XHRpZiAob3V0RXhwcmVzc2lvbi5jb25zdHJhaW50cz8uaXNEaWdpdFNlcXVlbmNlIHx8IChvdXRFeHByZXNzaW9uLmNvbnN0cmFpbnRzPy5udWxsYWJsZSAhPT0gZmFsc2UgJiYgcHJvcGVydHkubnVsbGFibGUgPT09IHRydWUpKSB7XG5cdFx0XHRvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMucGFyc2VLZWVwc0VtcHR5U3RyaW5nID0gZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucy5wYXJzZUtlZXBzRW1wdHlTdHJpbmcgPSB0cnVlO1xuXHRcdH1cblx0XHRjb25zdCBmaXNjYWxUeXBlID0gZ2V0RmlzY2FsVHlwZShwcm9wZXJ0eSk7XG5cdFx0aWYgKGZpc2NhbFR5cGUpIHtcblx0XHRcdG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucy5maXNjYWxUeXBlID0gZmlzY2FsVHlwZTtcblx0XHRcdG91dEV4cHJlc3Npb24udHlwZSA9IFwic2FwLmZlLmNvcmUudHlwZS5GaXNjYWxEYXRlXCI7XG5cdFx0fVxuXHR9XG5cdGNvbnN0IHR5cGVzU3VwcG9ydGluZ1BhcnNlRW1wdHlWYWx1ZVRvWmVybyA9IFtcblx0XHRcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludDE2XCIsXG5cdFx0XCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnQzMlwiLFxuXHRcdFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50NjRcIixcblx0XHRcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlNpbmdsZVwiLFxuXHRcdFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRG91YmxlXCIsXG5cdFx0XCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5EZWNpbWFsXCIsXG5cdFx0XCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5CeXRlXCIsXG5cdFx0XCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TQnl0ZVwiXG5cdF07XG5cdGlmIChcblx0XHRvdXRFeHByZXNzaW9uLmNvbnN0cmFpbnRzPy5udWxsYWJsZSA9PT0gZmFsc2UgJiZcblx0XHRvdXRFeHByZXNzaW9uLnR5cGUgJiZcblx0XHR0eXBlc1N1cHBvcnRpbmdQYXJzZUVtcHR5VmFsdWVUb1plcm8uaW5jbHVkZXMob3V0RXhwcmVzc2lvbi50eXBlKVxuXHQpIHtcblx0XHRvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucywge1xuXHRcdFx0cGFyc2VFbXB0eVZhbHVlVG9aZXJvOiB0cnVlXG5cdFx0fSk7XG5cdH1cblx0aWYgKFxuXHRcdG91dEV4cHJlc3Npb24uY29uc3RyYWludHM/Lm51bGxhYmxlICE9PSBmYWxzZSAmJlxuXHRcdChvdXRFeHByZXNzaW9uLnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50NjRcIiB8fCBvdXRFeHByZXNzaW9uLnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRGVjaW1hbFwiKVxuXHQpIHtcblx0XHRvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucywge1xuXHRcdFx0ZW1wdHlTdHJpbmc6IFwiXCJcblx0XHR9KTtcblx0fVxuXG5cdHJldHVybiBvdXRFeHByZXNzaW9uO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0RmlzY2FsVHlwZSA9IGZ1bmN0aW9uIChwcm9wZXJ0eTogUHJvcGVydHkpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRpZiAocHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNGaXNjYWxZZWFyKSB7XG5cdFx0cmV0dXJuIENvbW1vbkFubm90YXRpb25UZXJtcy5Jc0Zpc2NhbFllYXI7XG5cdH1cblx0aWYgKHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LklzRmlzY2FsUGVyaW9kKSB7XG5cdFx0cmV0dXJuIENvbW1vbkFubm90YXRpb25UZXJtcy5Jc0Zpc2NhbFBlcmlvZDtcblx0fVxuXHRpZiAocHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNGaXNjYWxZZWFyUGVyaW9kKSB7XG5cdFx0cmV0dXJuIENvbW1vbkFubm90YXRpb25UZXJtcy5Jc0Zpc2NhbFllYXJQZXJpb2Q7XG5cdH1cblx0aWYgKHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LklzRmlzY2FsUXVhcnRlcikge1xuXHRcdHJldHVybiBDb21tb25Bbm5vdGF0aW9uVGVybXMuSXNGaXNjYWxRdWFydGVyO1xuXHR9XG5cdGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc0Zpc2NhbFllYXJRdWFydGVyKSB7XG5cdFx0cmV0dXJuIENvbW1vbkFubm90YXRpb25UZXJtcy5Jc0Zpc2NhbFllYXJRdWFydGVyO1xuXHR9XG5cdGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc0Zpc2NhbFdlZWspIHtcblx0XHRyZXR1cm4gQ29tbW9uQW5ub3RhdGlvblRlcm1zLklzRmlzY2FsV2Vlaztcblx0fVxuXHRpZiAocHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNGaXNjYWxZZWFyV2Vlaykge1xuXHRcdHJldHVybiBDb21tb25Bbm5vdGF0aW9uVGVybXMuSXNGaXNjYWxZZWFyV2Vlaztcblx0fVxuXHRpZiAocHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNEYXlPZkZpc2NhbFllYXIpIHtcblx0XHRyZXR1cm4gQ29tbW9uQW5ub3RhdGlvblRlcm1zLklzRGF5T2ZGaXNjYWxZZWFyO1xuXHR9XG59O1xuXG4vKipcbiAqIENhbGxzIGEgY29tcGxleCB0eXBlIHRvIHByb2Nlc3MgdGhlIHBhcmFtZXRlcnMuXG4gKiBJZiByZXF1aXJlQ29udGV4dCBpcyBzZXQgdG8gdHJ1ZSBhbmQgbm8gY29udGV4dCBpcyBwYXNzZWQsIGEgZGVmYXVsdCBjb250ZXh0IHdpbGwgYmUgYWRkZWQgYXV0b21hdGljYWxseS5cbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAdGVtcGxhdGUgVVxuICogQHBhcmFtIHBhcmFtZXRlcnMgVGhlIGxpc3Qgb2YgcGFyYW1ldGVycyB0aGF0IHNob3VsZCBtYXRjaCB0aGUgdHlwZSBmb3IgdGhlIGNvbXBsZXggdHlwZT1cbiAqIEBwYXJhbSB0eXBlIFRoZSBjb21wbGV4IHR5cGUgdG8gdXNlXG4gKiBAcGFyYW0gW2NvbnRleHRFbnRpdHlUeXBlXSBUaGUgY29udGV4dCBlbnRpdHkgdHlwZSB0byBjb25zaWRlclxuICogQHBhcmFtIG9Gb3JtYXRPcHRpb25zXG4gKiBAcGFyYW0gb0NvbnN0cmFpbnRPcHRpb25zXG4gKiBAcmV0dXJucyBUaGUgY29ycmVzcG9uZGluZyBleHByZXNzaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRUeXBlSW5mb3JtYXRpb248VCwgVSBleHRlbmRzIEZuPFQ+Pihcblx0cGFyYW1ldGVyczogV3JhcHBlZFR1cGxlPFBhcmFtZXRlcnM8VT4+LFxuXHR0eXBlOiBzdHJpbmcsXG5cdGNvbnRleHRFbnRpdHlUeXBlPzogRW50aXR5VHlwZSxcblx0b0Zvcm1hdE9wdGlvbnM/OiBDb21wbGV4VHlwZUZvcm1hdE9wdGlvbnMsXG5cdG9Db25zdHJhaW50T3B0aW9ucz86IENvbXBsZXhUeXBlQ29uc3RyYWludE9wdGlvbnNcbik6IFVucmVzb2x2YWJsZVBhdGhFeHByZXNzaW9uIHwgQ29tcGxleFR5cGVFeHByZXNzaW9uPFQ+IHwgQ29uc3RhbnRFeHByZXNzaW9uPFQ+IHtcblx0Y29uc3QgcGFyYW1ldGVyRXhwcmVzc2lvbnMgPSAocGFyYW1ldGVycyBhcyBFeHByZXNzaW9uT3JQcmltaXRpdmU8UHJpbWl0aXZlVHlwZT5bXSkubWFwKHdyYXBQcmltaXRpdmUpO1xuXHRpZiAoaGFzVW5yZXNvbHZhYmxlRXhwcmVzc2lvbiguLi5wYXJhbWV0ZXJFeHByZXNzaW9ucykpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjtcblx0fVxuXHQvLyBJZiB0aGVyZSBpcyBvbmx5IG9uZSBwYXJhbWV0ZXIgYW5kIGl0IGlzIGEgY29uc3RhbnQgYW5kIHdlIGRvbid0IGV4cGVjdCB0aGUgY29udGV4dCB0aGVuIHJldHVybiB0aGUgY29uc3RhbnRcblx0aWYgKHBhcmFtZXRlckV4cHJlc3Npb25zLmxlbmd0aCA9PT0gMSAmJiBpc0NvbnN0YW50KHBhcmFtZXRlckV4cHJlc3Npb25zWzBdKSAmJiAhY29udGV4dEVudGl0eVR5cGUpIHtcblx0XHRyZXR1cm4gcGFyYW1ldGVyRXhwcmVzc2lvbnNbMF0gYXMgQ29uc3RhbnRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGNvbnRleHRFbnRpdHlUeXBlKSB7XG5cdFx0Ly8gT3RoZXJ3aXNlLCBpZiB0aGUgY29udGV4dCBpcyByZXF1aXJlZCBhbmQgbm8gY29udGV4dCBpcyBwcm92aWRlZCBtYWtlIHN1cmUgdG8gYWRkIHRoZSBkZWZhdWx0IGJpbmRpbmdcblx0XHRpZiAoIXBhcmFtZXRlckV4cHJlc3Npb25zLnNvbWUoaGFzUmVmZXJlbmNlVG9EZWZhdWx0Q29udGV4dCkpIHtcblx0XHRcdGNvbnRleHRFbnRpdHlUeXBlLmtleXMuZm9yRWFjaCgoa2V5KSA9PiBwYXJhbWV0ZXJFeHByZXNzaW9ucy5wdXNoKHBhdGhJbk1vZGVsKGtleS5uYW1lLCBcIlwiKSkpO1xuXHRcdH1cblx0fVxuXHRvRm9ybWF0T3B0aW9ucyA9IF9nZXRDb21wbGV4VHlwZUZvcm1hdE9wdGlvbnNGcm9tRmlyc3RQYXJhbShwYXJhbWV0ZXJzWzBdLCBvRm9ybWF0T3B0aW9ucyk7XG5cblx0aWYgKHR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuVW5pdFwiKSB7XG5cdFx0Y29uc3QgdW9tUGF0aCA9IHBhdGhJbk1vZGVsKFwiLyMjQEByZXF1ZXN0VW5pdHNPZk1lYXN1cmVcIik7XG5cdFx0dW9tUGF0aC50YXJnZXRUeXBlID0gXCJhbnlcIjtcblx0XHR1b21QYXRoLm1vZGUgPSBcIk9uZVRpbWVcIjtcblx0XHRvRm9ybWF0T3B0aW9ucyA/Pz0ge307XG5cdFx0b0Zvcm1hdE9wdGlvbnMucHJlc2VydmVEZWNpbWFscyA9IG9Db25zdHJhaW50T3B0aW9ucz8uc2tpcERlY2ltYWxzVmFsaWRhdGlvbiA/PyBmYWxzZTtcblx0XHRwYXJhbWV0ZXJFeHByZXNzaW9ucy5wdXNoKHVvbVBhdGgpO1xuXHR9IGVsc2UgaWYgKHR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuQ3VycmVuY3lcIikge1xuXHRcdGNvbnN0IGN1cnJlbmN5UGF0aCA9IHBhdGhJbk1vZGVsKFwiLyMjQEByZXF1ZXN0Q3VycmVuY3lDb2Rlc1wiKTtcblx0XHRjdXJyZW5jeVBhdGgudGFyZ2V0VHlwZSA9IFwiYW55XCI7XG5cdFx0Y3VycmVuY3lQYXRoLm1vZGUgPSBcIk9uZVRpbWVcIjtcblx0XHRvRm9ybWF0T3B0aW9ucyA/Pz0ge307XG5cdFx0b0Zvcm1hdE9wdGlvbnMucHJlc2VydmVEZWNpbWFscyA9IGZhbHNlOyAvLyBkZWZhdWx0IHZhbHVlIHNpbmNlIHdlIGRvbid0IGhhdmUgYSBDTERSXG5cdFx0cGFyYW1ldGVyRXhwcmVzc2lvbnMucHVzaChjdXJyZW5jeVBhdGgpO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRfdHlwZTogXCJDb21wbGV4VHlwZVwiLFxuXHRcdHR5cGU6IHR5cGUsXG5cdFx0Zm9ybWF0T3B0aW9uczogb0Zvcm1hdE9wdGlvbnMgfHwge30sXG5cdFx0Y29uc3RyYWludHM6IG9Db25zdHJhaW50T3B0aW9ucyB8fCB7fSxcblx0XHRwYXJhbWV0ZXJzOiB7fSxcblx0XHRiaW5kaW5nUGFyYW1ldGVyczogcGFyYW1ldGVyRXhwcmVzc2lvbnNcblx0fTtcbn1cblxudHlwZSBDb21wbGV4VHlwZUZvcm1hdE9wdGlvbnMgPSB7XG5cdHNob3dOdW1iZXI/OiBib29sZWFuO1xuXHRzaG93TWVhc3VyZT86IGJvb2xlYW47XG5cdHBhcnNlQXNTdHJpbmc/OiBib29sZWFuO1xuXHRwYXJzZUtlZXBzRW1wdHlTdHJpbmc/OiBib29sZWFuO1xuXHRlbXB0eVN0cmluZz86IHN0cmluZyB8IG51bWJlciB8IG51bGw7XG5cdHNob3dUaW1lPzogYm9vbGVhbjtcblx0c2hvd0RhdGU/OiBib29sZWFuO1xuXHRzaG93VGltZXpvbmU/OiBib29sZWFuO1xuXHRwcmVzZXJ2ZURlY2ltYWxzPzogYm9vbGVhbjtcblx0ZGVjaW1hbFBhZGRpbmc/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBDb21wbGV4VHlwZUNvbnN0cmFpbnRPcHRpb25zID0ge1xuXHRza2lwRGVjaW1hbHNWYWxpZGF0aW9uPzogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogUHJvY2VzcyB0aGUgZm9ybWF0T3B0aW9ucyBmb3IgYSBjb21wbGV4VHlwZSBiYXNlZCBvbiB0aGUgZmlyc3QgcGFyYW1ldGVyLlxuICogQHBhcmFtIHBhcmFtIFRoZSBmaXJzdCBwYXJhbWV0ZXIgb2YgdGhlIGNvbXBsZXggdHlwZVxuICogQHBhcmFtIGZvcm1hdE9wdGlvbnMgSW5pdGlhbCBmb3JtYXRPcHRpb25zXG4gKiBAcmV0dXJucyBUaGUgbW9kaWZpZWQgZm9ybWF0T3B0aW9uc1xuICovXG5mdW5jdGlvbiBfZ2V0Q29tcGxleFR5cGVGb3JtYXRPcHRpb25zRnJvbUZpcnN0UGFyYW08VCwgVSBleHRlbmRzIEZuPFQ+Pihcblx0cGFyYW06IFBhcmFtZXRlcnM8VT4sXG5cdGZvcm1hdE9wdGlvbnM6IHVuZGVmaW5lZCB8IENvbXBsZXhUeXBlRm9ybWF0T3B0aW9uc1xuKTogQ29tcGxleFR5cGVGb3JtYXRPcHRpb25zIHwgdW5kZWZpbmVkIHtcblx0Ly8gaWYgc2hvd01lYXN1cmUgaXMgc2V0IHRvIGZhbHNlIHdlIHdhbnQgdG8gbm90IHBhcnNlIGFzIHN0cmluZyB0byBzZWUgdGhlIDBcblx0Ly8gd2UgZG8gdGhhdCBhbHNvIGZvciBhbGwgYmluZGluZ3MgYmVjYXVzZSBvdGhlcndpc2UgdGhlIG1kYyBGaWVsZCBpc24ndCBlZGl0YWJsZVxuXHRpZiAoXG5cdFx0IShmb3JtYXRPcHRpb25zICYmIGZvcm1hdE9wdGlvbnMuc2hvd051bWJlciA9PT0gZmFsc2UpICYmXG5cdFx0KHBhcmFtPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50XCIpID09PSAwIHx8XG5cdFx0XHRwYXJhbT8udHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5EZWNpbWFsXCIgfHxcblx0XHRcdHBhcmFtPy50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRvdWJsZVwiKVxuXHQpIHtcblx0XHRpZiAocGFyYW0/LnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50NjRcIiB8fCBwYXJhbT8udHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5EZWNpbWFsXCIpIHtcblx0XHRcdC8vc2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50NjQgZG8gbm90IHN1cHBvcnQgcGFyc2VBc1N0cmluZyBmYWxzZVxuXHRcdFx0Zm9ybWF0T3B0aW9ucyA9XG5cdFx0XHRcdGZvcm1hdE9wdGlvbnM/LnNob3dNZWFzdXJlID09PSBmYWxzZVxuXHRcdFx0XHRcdD8geyBzaG93TWVhc3VyZTogZmFsc2UsIGRlY2ltYWxQYWRkaW5nOiBmb3JtYXRPcHRpb25zLmRlY2ltYWxQYWRkaW5nIH1cblx0XHRcdFx0XHQ6IHsgZGVjaW1hbFBhZGRpbmc6IGZvcm1hdE9wdGlvbnM/LmRlY2ltYWxQYWRkaW5nIH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvcm1hdE9wdGlvbnMgPVxuXHRcdFx0XHRmb3JtYXRPcHRpb25zPy5zaG93TWVhc3VyZSA9PT0gZmFsc2Vcblx0XHRcdFx0XHQ/IHsgcGFyc2VBc1N0cmluZzogZmFsc2UsIHNob3dNZWFzdXJlOiBmYWxzZSwgZGVjaW1hbFBhZGRpbmc6IGZvcm1hdE9wdGlvbnMuZGVjaW1hbFBhZGRpbmcgfVxuXHRcdFx0XHRcdDogeyBwYXJzZUFzU3RyaW5nOiBmYWxzZSwgZGVjaW1hbFBhZGRpbmc6IGZvcm1hdE9wdGlvbnM/LmRlY2ltYWxQYWRkaW5nIH07XG5cdFx0fVxuXHRcdGlmIChwYXJhbT8uY29uc3RyYWludHM/Lm51bGxhYmxlICE9PSBmYWxzZSkge1xuXHRcdFx0Zm9ybWF0T3B0aW9ucy5lbXB0eVN0cmluZyA9IG51bGw7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvcm1hdE9wdGlvbnMuZW1wdHlTdHJpbmcgPSBcIlwiO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZm9ybWF0T3B0aW9ucztcbn1cbi8qKlxuICogRnVuY3Rpb24gY2FsbCwgb3B0aW9uYWxseSB3aXRoIGFyZ3VtZW50cy5cbiAqIEBwYXJhbSBmdW5jIEZ1bmN0aW9uIG5hbWUgb3IgcmVmZXJlbmNlIHRvIGZ1bmN0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVycyBBcmd1bWVudHNcbiAqIEBwYXJhbSBvbiBPYmplY3QgdG8gY2FsbCB0aGUgZnVuY3Rpb24gb25cbiAqIEBwYXJhbSBpc0Zvcm1hdHRpbmdGblxuICogQHJldHVybnMgRXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGZ1bmN0aW9uIGNhbGwgKG5vdCB0aGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbiBjYWxsISlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZuPFQsIFUgZXh0ZW5kcyBGdW5jdGlvbk9yTmFtZTxUPj4oXG5cdGZ1bmM6IFUsXG5cdHBhcmFtZXRlcnM6IFdyYXBwZWRUdXBsZTxGdW5jdGlvblBhcmFtZXRlcnM8VCwgVT4+LFxuXHRvbj86IEV4cHJlc3Npb25PclByaW1pdGl2ZTxvYmplY3Q+LFxuXHRpc0Zvcm1hdHRpbmdGbiA9IGZhbHNlXG4pOiBGdW5jdGlvbkV4cHJlc3Npb248VD4ge1xuXHRjb25zdCBmdW5jdGlvbk5hbWUgPSB0eXBlb2YgZnVuYyA9PT0gXCJzdHJpbmdcIiA/IGZ1bmMgOiBmdW5jLl9fZnVuY3Rpb25OYW1lO1xuXHRyZXR1cm4ge1xuXHRcdF90eXBlOiBcIkZ1bmN0aW9uXCIsXG5cdFx0b2JqOiBvbiAhPT0gdW5kZWZpbmVkID8gd3JhcFByaW1pdGl2ZShvbikgOiB1bmRlZmluZWQsXG5cdFx0Zm46IGZ1bmN0aW9uTmFtZSxcblx0XHRpc0Zvcm1hdHRpbmdGbjogaXNGb3JtYXR0aW5nRm4sXG5cdFx0cGFyYW1ldGVyczogKHBhcmFtZXRlcnMgYXMgRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFByaW1pdGl2ZVR5cGU+W10pLm1hcCh3cmFwUHJpbWl0aXZlKVxuXHR9O1xufVxuXG4vKipcbiAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiBhIGJpbmRpbmcgdmFsdWUgaXMgbnVsbCwgdW5kZWZpbmVkIG9yIGVtcHR5LlxuICogQHBhcmFtIGV4cHJlc3Npb25cbiAqIEByZXR1cm5zIEEgQm9vbGVhbiBleHByZXNzaW9uIGV2YWx1YXRpbmcgdGhlIGZhY3QgdGhhdCB0aGUgY3VycmVudCBlbGVtZW50IGlzIGVtcHR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0VtcHR5KGV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+KTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgYUJpbmRpbmdzOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8Ym9vbGVhbj5bXSA9IFtdO1xuXHR0cmFuc2Zvcm1SZWN1cnNpdmVseShleHByZXNzaW9uLCBcIlBhdGhJbk1vZGVsXCIsIChleHByKSA9PiB7XG5cdFx0Y29uc3QgZmluYWxFeHByZXNzaW9uID0geyAuLi5leHByLCBhbHdheXNLZWVwVGFyZ2V0VHlwZTogdHJ1ZSB9IGFzIFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxzdHJpbmc+O1xuXHRcdGFCaW5kaW5ncy5wdXNoKG9yKGVxdWFsKGZpbmFsRXhwcmVzc2lvbiwgXCJcIiksIGVxdWFsKGV4cHIsIHVuZGVmaW5lZCksIGVxdWFsKGV4cHIsIG51bGwpKSk7XG5cdFx0cmV0dXJuIGV4cHI7XG5cdH0pO1xuXHRyZXR1cm4gYW5kKC4uLmFCaW5kaW5ncyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jYXQoLi4uaW5FeHByZXNzaW9uczogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPHN0cmluZz5bXSk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0Y29uc3QgZXhwcmVzc2lvbnMgPSBpbkV4cHJlc3Npb25zLm1hcCh3cmFwUHJpbWl0aXZlKTtcblx0aWYgKGhhc1VucmVzb2x2YWJsZUV4cHJlc3Npb24oLi4uZXhwcmVzc2lvbnMpKSB7XG5cdFx0cmV0dXJuIHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG5cdH1cblx0aWYgKGV4cHJlc3Npb25zLmV2ZXJ5KGlzQ29uc3RhbnQpKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KFxuXHRcdFx0ZXhwcmVzc2lvbnMucmVkdWNlKChjb25jYXRlbmF0ZWQ6IHN0cmluZywgdmFsdWUpID0+IHtcblx0XHRcdFx0aWYgKHZhbHVlLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUudmFsdWUgIT09IG51bGwpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29uY2F0ZW5hdGVkICsgdmFsdWUudmFsdWUudG9TdHJpbmcoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gY29uY2F0ZW5hdGVkO1xuXHRcdFx0fSwgXCJcIilcblx0XHQpO1xuXHR9IGVsc2UgaWYgKGV4cHJlc3Npb25zLnNvbWUoaXNDb21wbGV4VHlwZUV4cHJlc3Npb24pKSB7XG5cdFx0bGV0IHBhdGhJZHggPSAwO1xuXHRcdGNvbnN0IG15Q29uY2F0RXhwcmVzc2lvbiA9IGZvcm1hdFJlc3VsdChleHByZXNzaW9ucywgXCJzYXAuZmUuY29yZS5mb3JtYXR0ZXJzLlN0YW5kYXJkRm9ybWF0dGVyI2NvbmNhdFwiLCB1bmRlZmluZWQsIHRydWUpO1xuXHRcdGNvbnN0IGFsbFBhcnRzID0gW107XG5cdFx0dHJhbnNmb3JtUmVjdXJzaXZlbHkobXlDb25jYXRFeHByZXNzaW9uLCBcIlBhdGhJbk1vZGVsXCIsIChjb25zdGFudFBhdGg6IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjx1bmtub3duPikgPT4ge1xuXHRcdFx0YWxsUGFydHMucHVzaChjb25zdGFudFBhdGgpO1xuXHRcdFx0cmV0dXJuIHBhdGhJbk1vZGVsKGAkJHtwYXRoSWR4Kyt9YCwgXCIkXCIpO1xuXHRcdH0pO1xuXHRcdGFsbFBhcnRzLnVuc2hpZnQoY29uc3RhbnQoSlNPTi5zdHJpbmdpZnkobXlDb25jYXRFeHByZXNzaW9uKSkpO1xuXHRcdHJldHVybiBmb3JtYXRSZXN1bHQoYWxsUGFydHMsIFwic2FwLmZlLmNvcmUuZm9ybWF0dGVycy5TdGFuZGFyZEZvcm1hdHRlciNldmFsdWF0ZUNvbXBsZXhFeHByZXNzaW9uXCIsIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHRfdHlwZTogXCJDb25jYXRcIixcblx0XHRleHByZXNzaW9uczogZXhwcmVzc2lvbnNcblx0fTtcbn1cblxudHlwZSBFeHByZXNzaW9uVHlwZVRvRXhwcmVzc2lvbjxUIGV4dGVuZHMgRXhwcmVzc2lvblR5cGUsIFY+ID0gVCBleHRlbmRzIFwiQ29uc3RhbnRcIlxuXHQ/IENvbnN0YW50RXhwcmVzc2lvbjxWPlxuXHQ6IFQgZXh0ZW5kcyBcIlBhdGhJbk1vZGVsXCJcblx0PyBQYXRoSW5Nb2RlbEV4cHJlc3Npb248Vj5cblx0OiBUIGV4dGVuZHMgXCJGdW5jdGlvblwiXG5cdD8gRnVuY3Rpb25FeHByZXNzaW9uPFY+XG5cdDogVCBleHRlbmRzIFwiVW5yZXNvbHZhYmxlXCJcblx0PyBVbnJlc29sdmFibGVQYXRoRXhwcmVzc2lvblxuXHQ6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxWPjtcblxuZXhwb3J0IHR5cGUgVHJhbnNmb3JtRnVuY3Rpb248VCwgVj4gPSAoZXhwcmVzc2lvblBhcnQ6IFQpID0+IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxWPjtcbmV4cG9ydCB0eXBlIEV4cHJlc3Npb25UeXBlID0gUGljazxCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4sIFwiX3R5cGVcIj5bXCJfdHlwZVwiXTtcbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1SZWN1cnNpdmVseTxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZSB8IHVua25vd24sIEVUIGV4dGVuZHMgRXhwcmVzc2lvblR5cGU+KFxuXHRpbkV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPixcblx0ZXhwcmVzc2lvblR5cGU6IEVULFxuXHR0cmFuc2Zvcm1GdW5jdGlvbjogVHJhbnNmb3JtRnVuY3Rpb248RXhwcmVzc2lvblR5cGVUb0V4cHJlc3Npb248RVQsIFQ+LCBUPixcblx0aW5jbHVkZUFsbEV4cHJlc3Npb24gPSBmYWxzZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+IHtcblx0bGV0IGV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPiA9IGluRXhwcmVzc2lvbjtcblx0c3dpdGNoIChleHByZXNzaW9uLl90eXBlKSB7XG5cdFx0Y2FzZSBcIkZ1bmN0aW9uXCI6XG5cdFx0Y2FzZSBcIkZvcm1hdHRlclwiOlxuXHRcdFx0ZXhwcmVzc2lvbi5wYXJhbWV0ZXJzID0gZXhwcmVzc2lvbi5wYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyKSA9PlxuXHRcdFx0XHR0cmFuc2Zvcm1SZWN1cnNpdmVseShwYXJhbWV0ZXIgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+LCBleHByZXNzaW9uVHlwZSwgdHJhbnNmb3JtRnVuY3Rpb24sIGluY2x1ZGVBbGxFeHByZXNzaW9uKVxuXHRcdFx0KTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJDb25jYXRcIjpcblx0XHRcdGV4cHJlc3Npb24uZXhwcmVzc2lvbnMgPSBleHByZXNzaW9uLmV4cHJlc3Npb25zLm1hcCgoc3ViRXhwcmVzc2lvbikgPT5cblx0XHRcdFx0dHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRcdFx0c3ViRXhwcmVzc2lvbixcblx0XHRcdFx0XHRleHByZXNzaW9uVHlwZSxcblx0XHRcdFx0XHR0cmFuc2Zvcm1GdW5jdGlvbiBhcyB1bmtub3duIGFzIFRyYW5zZm9ybUZ1bmN0aW9uPEV4cHJlc3Npb25UeXBlVG9FeHByZXNzaW9uPEVULCBzdHJpbmc+LCBzdHJpbmc+LFxuXHRcdFx0XHRcdGluY2x1ZGVBbGxFeHByZXNzaW9uXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0XHRleHByZXNzaW9uID0gY29uY2F0KC4uLmV4cHJlc3Npb24uZXhwcmVzc2lvbnMpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJDb21wbGV4VHlwZVwiOlxuXHRcdFx0ZXhwcmVzc2lvbi5iaW5kaW5nUGFyYW1ldGVycyA9IGV4cHJlc3Npb24uYmluZGluZ1BhcmFtZXRlcnMubWFwKChiaW5kaW5nUGFyYW1ldGVyKSA9PlxuXHRcdFx0XHR0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdFx0XHRiaW5kaW5nUGFyYW1ldGVyIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPixcblx0XHRcdFx0XHRleHByZXNzaW9uVHlwZSxcblx0XHRcdFx0XHR0cmFuc2Zvcm1GdW5jdGlvbixcblx0XHRcdFx0XHRpbmNsdWRlQWxsRXhwcmVzc2lvblxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIklmRWxzZVwiOlxuXHRcdFx0Y29uc3Qgb25UcnVlID0gdHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRcdGV4cHJlc3Npb24ub25UcnVlLFxuXHRcdFx0XHRleHByZXNzaW9uVHlwZSxcblx0XHRcdFx0dHJhbnNmb3JtRnVuY3Rpb24gYXMgdW5rbm93biBhcyBUcmFuc2Zvcm1GdW5jdGlvbjxFeHByZXNzaW9uVHlwZVRvRXhwcmVzc2lvbjxFVCwgdW5rbm93bj4sIHVua25vd24+LFxuXHRcdFx0XHRpbmNsdWRlQWxsRXhwcmVzc2lvblxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IG9uRmFsc2UgPSB0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdFx0ZXhwcmVzc2lvbi5vbkZhbHNlLFxuXHRcdFx0XHRleHByZXNzaW9uVHlwZSxcblx0XHRcdFx0dHJhbnNmb3JtRnVuY3Rpb24gYXMgdW5rbm93biBhcyBUcmFuc2Zvcm1GdW5jdGlvbjxFeHByZXNzaW9uVHlwZVRvRXhwcmVzc2lvbjxFVCwgdW5rbm93bj4sIHVua25vd24+LFxuXHRcdFx0XHRpbmNsdWRlQWxsRXhwcmVzc2lvblxuXHRcdFx0KTtcblx0XHRcdGxldCBjb25kaXRpb24gPSBleHByZXNzaW9uLmNvbmRpdGlvbjtcblx0XHRcdGlmIChpbmNsdWRlQWxsRXhwcmVzc2lvbikge1xuXHRcdFx0XHRjb25kaXRpb24gPSB0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdFx0XHRleHByZXNzaW9uLmNvbmRpdGlvbixcblx0XHRcdFx0XHRleHByZXNzaW9uVHlwZSxcblx0XHRcdFx0XHR0cmFuc2Zvcm1GdW5jdGlvbiBhcyB1bmtub3duIGFzIFRyYW5zZm9ybUZ1bmN0aW9uPEV4cHJlc3Npb25UeXBlVG9FeHByZXNzaW9uPEVULCBib29sZWFuPiwgYm9vbGVhbj4sXG5cdFx0XHRcdFx0aW5jbHVkZUFsbEV4cHJlc3Npb25cblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdGV4cHJlc3Npb24gPSBpZkVsc2UoY29uZGl0aW9uLCBvblRydWUsIG9uRmFsc2UpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJOb3RcIjpcblx0XHRcdGlmIChpbmNsdWRlQWxsRXhwcmVzc2lvbikge1xuXHRcdFx0XHRjb25zdCBvcGVyYW5kID0gdHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRcdFx0ZXhwcmVzc2lvbi5vcGVyYW5kLFxuXHRcdFx0XHRcdGV4cHJlc3Npb25UeXBlLFxuXHRcdFx0XHRcdHRyYW5zZm9ybUZ1bmN0aW9uIGFzIHVua25vd24gYXMgVHJhbnNmb3JtRnVuY3Rpb248RXhwcmVzc2lvblR5cGVUb0V4cHJlc3Npb248RVQsIGJvb2xlYW4+LCBib29sZWFuPixcblx0XHRcdFx0XHRpbmNsdWRlQWxsRXhwcmVzc2lvblxuXHRcdFx0XHQpO1xuXHRcdFx0XHRleHByZXNzaW9uID0gbm90KG9wZXJhbmQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJUcnV0aHlcIjpcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJTZXRcIjpcblx0XHRcdGlmIChpbmNsdWRlQWxsRXhwcmVzc2lvbikge1xuXHRcdFx0XHRjb25zdCBvcGVyYW5kcyA9IGV4cHJlc3Npb24ub3BlcmFuZHMubWFwKChvcGVyYW5kKSA9PlxuXHRcdFx0XHRcdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRcdFx0b3BlcmFuZCxcblx0XHRcdFx0XHRcdGV4cHJlc3Npb25UeXBlLFxuXHRcdFx0XHRcdFx0dHJhbnNmb3JtRnVuY3Rpb24gYXMgdW5rbm93biBhcyBUcmFuc2Zvcm1GdW5jdGlvbjxFeHByZXNzaW9uVHlwZVRvRXhwcmVzc2lvbjxFVCwgYm9vbGVhbj4sIGJvb2xlYW4+LFxuXHRcdFx0XHRcdFx0aW5jbHVkZUFsbEV4cHJlc3Npb25cblx0XHRcdFx0XHQpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGV4cHJlc3Npb24gPVxuXHRcdFx0XHRcdGV4cHJlc3Npb24ub3BlcmF0b3IgPT09IFwifHxcIlxuXHRcdFx0XHRcdFx0PyAob3IoLi4ub3BlcmFuZHMpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPilcblx0XHRcdFx0XHRcdDogKGFuZCguLi5vcGVyYW5kcykgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+KTtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJDb21wYXJpc29uXCI6XG5cdFx0XHRpZiAoaW5jbHVkZUFsbEV4cHJlc3Npb24pIHtcblx0XHRcdFx0Y29uc3Qgb3BlcmFuZDEgPSB0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdFx0XHRleHByZXNzaW9uLm9wZXJhbmQxIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPixcblx0XHRcdFx0XHRleHByZXNzaW9uVHlwZSxcblx0XHRcdFx0XHR0cmFuc2Zvcm1GdW5jdGlvbixcblx0XHRcdFx0XHRpbmNsdWRlQWxsRXhwcmVzc2lvblxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBvcGVyYW5kMiA9IHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRcdGV4cHJlc3Npb24ub3BlcmFuZDIgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+LFxuXHRcdFx0XHRcdGV4cHJlc3Npb25UeXBlLFxuXHRcdFx0XHRcdHRyYW5zZm9ybUZ1bmN0aW9uLFxuXHRcdFx0XHRcdGluY2x1ZGVBbGxFeHByZXNzaW9uXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGV4cHJlc3Npb24gPSBjb21wYXJpc29uKGV4cHJlc3Npb24ub3BlcmF0b3IsIG9wZXJhbmQxLCBvcGVyYW5kMikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkNvbnN0YW50XCI6XG5cdFx0XHRjb25zdCBjb25zdGFudFZhbHVlOiBSZWNvcmQ8c3RyaW5nLCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4+ID0gZXhwcmVzc2lvbi52YWx1ZSBhcyBSZWNvcmQ8XG5cdFx0XHRcdHN0cmluZyxcblx0XHRcdFx0QmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+XG5cdFx0XHQ+O1xuXHRcdFx0aWYgKHR5cGVvZiBjb25zdGFudFZhbHVlID09PSBcIm9iamVjdFwiICYmIGNvbnN0YW50VmFsdWUpIHtcblx0XHRcdFx0T2JqZWN0LmtleXMoY29uc3RhbnRWYWx1ZSkuZm9yRWFjaCgoa2V5KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3RhbnRWYWx1ZVtrZXldID0gdHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRcdFx0XHRjb25zdGFudFZhbHVlW2tleV0sXG5cdFx0XHRcdFx0XHRleHByZXNzaW9uVHlwZSxcblx0XHRcdFx0XHRcdHRyYW5zZm9ybUZ1bmN0aW9uIGFzIHVua25vd24gYXMgVHJhbnNmb3JtRnVuY3Rpb248RXhwcmVzc2lvblR5cGVUb0V4cHJlc3Npb248RVQsIHVua25vd24+LCB1bmtub3duPixcblx0XHRcdFx0XHRcdGluY2x1ZGVBbGxFeHByZXNzaW9uXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiUmVmXCI6XG5cdFx0Y2FzZSBcIkxlbmd0aFwiOlxuXHRcdGNhc2UgXCJQYXRoSW5Nb2RlbFwiOlxuXHRcdGNhc2UgXCJFbWJlZGRlZEJpbmRpbmdcIjpcblx0XHRjYXNlIFwiRW1iZWRkZWRFeHByZXNzaW9uQmluZGluZ1wiOlxuXHRcdGNhc2UgXCJVbnJlc29sdmFibGVcIjpcblx0XHRcdC8vIERvIG5vdGhpbmdcblx0XHRcdGJyZWFrO1xuXHR9XG5cdGlmIChleHByZXNzaW9uVHlwZSA9PT0gZXhwcmVzc2lvbi5fdHlwZSkge1xuXHRcdGV4cHJlc3Npb24gPSB0cmFuc2Zvcm1GdW5jdGlvbihpbkV4cHJlc3Npb24gYXMgRXhwcmVzc2lvblR5cGVUb0V4cHJlc3Npb248RVQsIFQ+KTtcblx0fVxuXHRyZXR1cm4gZXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IHR5cGUgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gPSBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbmNvbnN0IG5lZWRQYXJlbnRoZXNpcyA9IGZ1bmN0aW9uIDxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oZXhwcjogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+KTogYm9vbGVhbiB7XG5cdHJldHVybiAoXG5cdFx0IWlzQ29uc3RhbnQoZXhwcikgJiZcblx0XHQhaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24oZXhwcikgJiZcblx0XHRpc0JpbmRpbmdUb29sa2l0RXhwcmVzc2lvbihleHByKSAmJlxuXHRcdGV4cHIuX3R5cGUgIT09IFwiSWZFbHNlXCIgJiZcblx0XHRleHByLl90eXBlICE9PSBcIkZ1bmN0aW9uXCJcblx0KTtcbn07XG5cbi8qKlxuICogQ29tcGlsZXMgYSBjb25zdGFudCBvYmplY3QgdG8gYSBzdHJpbmcuXG4gKiBAcGFyYW0gZXhwclxuICogQHBhcmFtIGlzTnVsbGFibGVcbiAqIEByZXR1cm5zIFRoZSBjb21waWxlZCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gY29tcGlsZUNvbnN0YW50T2JqZWN0KGV4cHI6IENvbnN0YW50RXhwcmVzc2lvbjxvYmplY3Q+LCBpc051bGxhYmxlID0gZmFsc2UpOiBzdHJpbmcge1xuXHRpZiAoaXNOdWxsYWJsZSAmJiBPYmplY3Qua2V5cyhleHByLnZhbHVlKS5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXHRjb25zdCBvYmplY3RzID0gZXhwci52YWx1ZSBhcyBQbGFpbkV4cHJlc3Npb25PYmplY3Q7XG5cdGNvbnN0IHByb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG5cdE9iamVjdC5rZXlzKG9iamVjdHMpLmZvckVhY2goKGtleSkgPT4ge1xuXHRcdGNvbnN0IHZhbHVlID0gb2JqZWN0c1trZXldO1xuXHRcdGNvbnN0IGNoaWxkUmVzdWx0ID0gY29tcGlsZUV4cHJlc3Npb24odmFsdWUsIHRydWUsIGZhbHNlLCBpc051bGxhYmxlKTtcblx0XHRpZiAoY2hpbGRSZXN1bHQgJiYgY2hpbGRSZXN1bHQubGVuZ3RoID4gMCkge1xuXHRcdFx0cHJvcGVydGllcy5wdXNoKGAke2tleX06ICR7Y2hpbGRSZXN1bHR9YCk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGB7JHtwcm9wZXJ0aWVzLmpvaW4oXCIsIFwiKX19YDtcbn1cblxuLyoqXG4gKiBDb21waWxlcyBhIENvbnN0YW50IEJpbmRpbmcgRXhwcmVzc2lvbi5cbiAqIEBwYXJhbSBleHByXG4gKiBAcGFyYW0gZW1iZWRkZWRJbkJpbmRpbmdcbiAqIEBwYXJhbSBpc051bGxhYmxlXG4gKiBAcGFyYW0gZG9Ob3RTdHJpbmdpZnlcbiAqIEByZXR1cm5zIFRoZSBjb21waWxlZCBzdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGVDb25zdGFudDxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGV4cHI6IENvbnN0YW50RXhwcmVzc2lvbjxUPixcblx0ZW1iZWRkZWRJbkJpbmRpbmc6IGJvb2xlYW4sXG5cdGlzTnVsbGFibGU/OiBib29sZWFuLFxuXHRkb05vdFN0cmluZ2lmeT86IGZhbHNlXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlQ29uc3RhbnQ8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRleHByOiBDb25zdGFudEV4cHJlc3Npb248VD4sXG5cdGVtYmVkZGVkSW5CaW5kaW5nOiBib29sZWFuLFxuXHRpc051bGxhYmxlPzogYm9vbGVhbixcblx0ZG9Ob3RTdHJpbmdpZnk/OiB0cnVlXG4pOiBQcmltaXRpdmVUeXBlO1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGVDb25zdGFudDxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGV4cHI6IENvbnN0YW50RXhwcmVzc2lvbjxUPixcblx0ZW1iZWRkZWRJbkJpbmRpbmc6IGJvb2xlYW4sXG5cdGlzTnVsbGFibGUgPSBmYWxzZSxcblx0ZG9Ob3RTdHJpbmdpZnkgPSBmYWxzZVxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBQcmltaXRpdmVUeXBlIHtcblx0aWYgKGV4cHIudmFsdWUgPT09IG51bGwpIHtcblx0XHRyZXR1cm4gZG9Ob3RTdHJpbmdpZnkgPyBudWxsIDogXCJudWxsXCI7XG5cdH1cblx0aWYgKGV4cHIudmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBkb05vdFN0cmluZ2lmeSA/IHVuZGVmaW5lZCA6IFwidW5kZWZpbmVkXCI7XG5cdH1cblx0aWYgKHR5cGVvZiBleHByLnZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoZXhwci52YWx1ZSkpIHtcblx0XHRcdGNvbnN0IGVudHJpZXMgPSBleHByLnZhbHVlLm1hcCgoZXhwcmVzc2lvbikgPT4gY29tcGlsZUV4cHJlc3Npb24oZXhwcmVzc2lvbiwgdHJ1ZSkpO1xuXHRcdFx0cmV0dXJuIGBbJHtlbnRyaWVzLmpvaW4oXCIsIFwiKX1dYDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVDb25zdGFudE9iamVjdChleHByIGFzIENvbnN0YW50RXhwcmVzc2lvbjxvYmplY3Q+LCBpc051bGxhYmxlKTtcblx0XHR9XG5cdH1cblxuXHRpZiAoZW1iZWRkZWRJbkJpbmRpbmcpIHtcblx0XHRzd2l0Y2ggKHR5cGVvZiBleHByLnZhbHVlKSB7XG5cdFx0XHRjYXNlIFwibnVtYmVyXCI6XG5cdFx0XHRjYXNlIFwiYmlnaW50XCI6XG5cdFx0XHRjYXNlIFwiYm9vbGVhblwiOlxuXHRcdFx0XHRyZXR1cm4gZXhwci52YWx1ZS50b1N0cmluZygpO1xuXHRcdFx0Y2FzZSBcInN0cmluZ1wiOlxuXHRcdFx0XHRyZXR1cm4gYCcke2VzY2FwZVhtbEF0dHJpYnV0ZShleHByLnZhbHVlLnRvU3RyaW5nKCkpfSdgO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBkb05vdFN0cmluZ2lmeSA/IGV4cHIudmFsdWUgOiBleHByLnZhbHVlLnRvU3RyaW5nKCk7XG5cdH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGJpbmRpbmcgc3RyaW5nIGZvciBhIEJpbmRpbmcgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSBleHByZXNzaW9uRm9yQmluZGluZyBUaGUgZXhwcmVzc2lvbiB0byBjb21waWxlXG4gKiBAcGFyYW0gZW1iZWRkZWRJbkJpbmRpbmcgV2hldGhlciB0aGUgZXhwcmVzc2lvbiB0byBjb21waWxlIGlzIGVtYmVkZGVkIGludG8gYW5vdGhlciBleHByZXNzaW9uXG4gKiBAcGFyYW0gZW1iZWRkZWRTZXBhcmF0b3IgVGhlIGJpbmRpbmcgdmFsdWUgZXZhbHVhdG9yICgkIG9yICUgZGVwZW5kaW5nIG9uIHdoZXRoZXIgd2Ugd2FudCB0byBmb3JjZSB0aGUgdHlwZSBvciBub3QpXG4gKiBAcmV0dXJucyBUaGUgY29ycmVzcG9uZGluZyBleHByZXNzaW9uIGJpbmRpbmdcbiAqL1xuZnVuY3Rpb24gY29tcGlsZVBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGV4cHJlc3Npb25Gb3JCaW5kaW5nOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248VD4sXG5cdGVtYmVkZGVkSW5CaW5kaW5nOiBib29sZWFuLFxuXHRlbWJlZGRlZFNlcGFyYXRvcjogc3RyaW5nXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGlmIChcblx0XHRleHByZXNzaW9uRm9yQmluZGluZy50eXBlIHx8XG5cdFx0ZXhwcmVzc2lvbkZvckJpbmRpbmcucGFyYW1ldGVycyB8fFxuXHRcdGV4cHJlc3Npb25Gb3JCaW5kaW5nLnRhcmdldFR5cGUgfHxcblx0XHRleHByZXNzaW9uRm9yQmluZGluZy5mb3JtYXRPcHRpb25zIHx8XG5cdFx0ZXhwcmVzc2lvbkZvckJpbmRpbmcuY29uc3RyYWludHNcblx0KSB7XG5cdFx0Ly8gVGhpcyBpcyBub3cgYSBjb21wbGV4IGJpbmRpbmcgZGVmaW5pdGlvbiwgbGV0J3MgcHJlcGFyZSBmb3IgaXRcblx0XHRjb25zdCBjb21wbGV4QmluZGluZ0RlZmluaXRpb24gPSB7XG5cdFx0XHRwYXRoOiBjb21waWxlUGF0aEluTW9kZWwoZXhwcmVzc2lvbkZvckJpbmRpbmcpLFxuXHRcdFx0dHlwZTogZXhwcmVzc2lvbkZvckJpbmRpbmcudHlwZSxcblx0XHRcdHRhcmdldFR5cGU6IGV4cHJlc3Npb25Gb3JCaW5kaW5nLnRhcmdldFR5cGUsXG5cdFx0XHRwYXJhbWV0ZXJzOiBleHByZXNzaW9uRm9yQmluZGluZy5wYXJhbWV0ZXJzLFxuXHRcdFx0Zm9ybWF0T3B0aW9uczogZXhwcmVzc2lvbkZvckJpbmRpbmcuZm9ybWF0T3B0aW9ucyxcblx0XHRcdGNvbnN0cmFpbnRzOiBleHByZXNzaW9uRm9yQmluZGluZy5jb25zdHJhaW50c1xuXHRcdH07XG5cdFx0Y29uc3Qgb3V0QmluZGluZyA9IGNvbXBpbGVFeHByZXNzaW9uKGNvbXBsZXhCaW5kaW5nRGVmaW5pdGlvbiwgZmFsc2UsIGZhbHNlLCB0cnVlKTtcblx0XHRpZiAoZW1iZWRkZWRJbkJpbmRpbmcpIHtcblx0XHRcdGNvbnN0IHNlcGFyYXRvciA9IGV4cHJlc3Npb25Gb3JCaW5kaW5nLmFsd2F5c0tlZXBUYXJnZXRUeXBlID8gXCIkXCIgOiBlbWJlZGRlZFNlcGFyYXRvcjtcblx0XHRcdHJldHVybiBgJHtzZXBhcmF0b3J9JHtvdXRCaW5kaW5nfWA7XG5cdFx0fVxuXHRcdHJldHVybiBvdXRCaW5kaW5nO1xuXHR9IGVsc2UgaWYgKGVtYmVkZGVkSW5CaW5kaW5nKSB7XG5cdFx0cmV0dXJuIGAke2VtYmVkZGVkU2VwYXJhdG9yfXske2NvbXBpbGVQYXRoSW5Nb2RlbChleHByZXNzaW9uRm9yQmluZGluZyl9fWA7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGB7JHtjb21waWxlUGF0aEluTW9kZWwoZXhwcmVzc2lvbkZvckJpbmRpbmcpfX1gO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGNvbXBpbGVDb21wbGV4VHlwZUV4cHJlc3Npb248VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KGV4cHJlc3Npb246IENvbXBsZXhUeXBlRXhwcmVzc2lvbjxUPik6IHN0cmluZyB7XG5cdGlmIChleHByZXNzaW9uLmJpbmRpbmdQYXJhbWV0ZXJzLmxlbmd0aCA9PT0gMSkge1xuXHRcdHJldHVybiBgeyR7Y29tcGlsZVBhdGhQYXJhbWV0ZXIoZXhwcmVzc2lvbi5iaW5kaW5nUGFyYW1ldGVyc1swXSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT4sIHRydWUpfSwgdHlwZTogJyR7XG5cdFx0XHRleHByZXNzaW9uLnR5cGVcblx0XHR9J31gO1xuXHR9XG5cblx0bGV0IG91dHB1dEVuZCA9IGBdLCB0eXBlOiAnJHtleHByZXNzaW9uLnR5cGV9J2A7XG5cdGlmIChoYXNFbGVtZW50cyhleHByZXNzaW9uLmZvcm1hdE9wdGlvbnMpKSB7XG5cdFx0b3V0cHV0RW5kICs9IGAsIGZvcm1hdE9wdGlvbnM6ICR7Y29tcGlsZUV4cHJlc3Npb24oZXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zKX1gO1xuXHR9XG5cdGlmIChoYXNFbGVtZW50cyhleHByZXNzaW9uLmNvbnN0cmFpbnRzKSkge1xuXHRcdG91dHB1dEVuZCArPSBgLCBjb25zdHJhaW50czogJHtjb21waWxlRXhwcmVzc2lvbihleHByZXNzaW9uLmNvbnN0cmFpbnRzKX1gO1xuXHR9XG5cdGlmIChoYXNFbGVtZW50cyhleHByZXNzaW9uLnBhcmFtZXRlcnMpKSB7XG5cdFx0b3V0cHV0RW5kICs9IGAsIHBhcmFtZXRlcnM6ICR7Y29tcGlsZUV4cHJlc3Npb24oZXhwcmVzc2lvbi5wYXJhbWV0ZXJzKX1gO1xuXHR9XG5cdG91dHB1dEVuZCArPSBcIn1cIjtcblxuXHRyZXR1cm4gYHttb2RlOidUd29XYXknLCBwYXJ0czpbJHtleHByZXNzaW9uLmJpbmRpbmdQYXJhbWV0ZXJzXG5cdFx0Lm1hcCgocGFyYW0pID0+IGNvbXBpbGVQYXRoUGFyYW1ldGVyKHBhcmFtIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPikpXG5cdFx0LmpvaW4oXCIsXCIpfSR7b3V0cHV0RW5kfWA7XG59XG5cbi8qKlxuICogV3JhcCB0aGUgY29tcGlsZWQgYmluZGluZyBzdHJpbmcgYXMgcmVxdWlyZWQgZGVwZW5kaW5nIG9uIGl0cyBjb250ZXh0LlxuICogQHBhcmFtIGV4cHJlc3Npb24gVGhlIGNvbXBpbGVkIGV4cHJlc3Npb25cbiAqIEBwYXJhbSBlbWJlZGRlZEluQmluZGluZyBUcnVlIGlmIHRoZSBjb21waWxlZCBleHByZXNzaW9uIGlzIHRvIGJlIGVtYmVkZGVkIGluIGEgYmluZGluZ1xuICogQHBhcmFtIHBhcmVudGhlc2lzUmVxdWlyZWQgVHJ1ZSBpZiB0aGUgZW1iZWRkZWQgYmluZGluZyBuZWVkcyB0byBiZSB3cmFwcGVkIGluIHBhcmV0aGVzaXMgc28gdGhhdCBpdCBpcyBldmFsdWF0ZWQgYXMgb25lXG4gKiBAcmV0dXJucyBGaW5hbGl6ZWQgY29tcGlsZWQgZXhwcmVzc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gd3JhcEJpbmRpbmdFeHByZXNzaW9uKFxuXHRleHByZXNzaW9uOiBzdHJpbmcsXG5cdGVtYmVkZGVkSW5CaW5kaW5nOiBib29sZWFuLFxuXHRwYXJlbnRoZXNpc1JlcXVpcmVkID0gZmFsc2Vcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0aWYgKGVtYmVkZGVkSW5CaW5kaW5nKSB7XG5cdFx0aWYgKHBhcmVudGhlc2lzUmVxdWlyZWQpIHtcblx0XHRcdHJldHVybiBgKCR7ZXhwcmVzc2lvbn0pYDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGV4cHJlc3Npb247XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBgez0gJHtleHByZXNzaW9ufX1gO1xuXHR9XG59XG5cbi8qKlxuICogQ29tcGlsZSBhbiBleHByZXNzaW9uIGludG8gYW4gZXhwcmVzc2lvbiBiaW5kaW5nLlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgZXhwcmVzc2lvbiB0byBjb21waWxlXG4gKiBAcGFyYW0gZW1iZWRkZWRJbkJpbmRpbmcgV2hldGhlciB0aGUgZXhwcmVzc2lvbiB0byBjb21waWxlIGlzIGVtYmVkZGVkIGludG8gYW5vdGhlciBleHByZXNzaW9uXG4gKiBAcGFyYW0ga2VlcFRhcmdldFR5cGUgS2VlcCB0aGUgdGFyZ2V0IHR5cGUgb2YgdGhlIGVtYmVkZGVkIGJpbmRpbmdzIGluc3RlYWQgb2YgY2FzdGluZyB0aGVtIHRvIGFueVxuICogQHBhcmFtIGlzTnVsbGFibGUgV2hldGhlciBiaW5kaW5nIGV4cHJlc3Npb24gY2FuIHJlc29sdmUgdG8gZW1wdHkgc3RyaW5nIG9yIG5vdFxuICogQHJldHVybnMgVGhlIGNvcnJlc3BvbmRpbmcgZXhwcmVzc2lvbiBiaW5kaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlRXhwcmVzc2lvbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGV4cHJlc3Npb246IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0ZW1iZWRkZWRJbkJpbmRpbmcgPSBmYWxzZSxcblx0a2VlcFRhcmdldFR5cGUgPSBmYWxzZSxcblx0aXNOdWxsYWJsZSA9IGZhbHNlXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IGV4cHIgPSB3cmFwUHJpbWl0aXZlKGV4cHJlc3Npb24pO1xuXHRjb25zdCBlbWJlZGRlZFNlcGFyYXRvciA9IGtlZXBUYXJnZXRUeXBlID8gXCIkXCIgOiBcIiVcIjtcblxuXHRzd2l0Y2ggKGV4cHIuX3R5cGUpIHtcblx0XHRjYXNlIFwiVW5yZXNvbHZhYmxlXCI6XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0Y2FzZSBcIkNvbnN0YW50XCI6XG5cdFx0XHRyZXR1cm4gY29tcGlsZUNvbnN0YW50KGV4cHIsIGVtYmVkZGVkSW5CaW5kaW5nLCBpc051bGxhYmxlKTtcblxuXHRcdGNhc2UgXCJSZWZcIjpcblx0XHRcdHJldHVybiBleHByLnJlZiB8fCBcIm51bGxcIjtcblxuXHRcdGNhc2UgXCJGdW5jdGlvblwiOlxuXHRcdFx0bGV0IGhhc0VtYmVkZGVkRnVuY3Rpb25DYWxsT3JCaW5kaW5nID0gZmFsc2U7XG5cdFx0XHRpZiAoZXhwci5pc0Zvcm1hdHRpbmdGbikge1xuXHRcdFx0XHR0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdFx0XHRleHByLFxuXHRcdFx0XHRcdFwiRnVuY3Rpb25cIixcblx0XHRcdFx0XHQoc3ViRm4pID0+IHtcblx0XHRcdFx0XHRcdGlmIChzdWJGbiAhPT0gZXhwciAmJiBzdWJGbi5vYmogPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRoYXNFbWJlZGRlZEZ1bmN0aW9uQ2FsbE9yQmluZGluZyA9IHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm4gc3ViRm47XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRcdGV4cHIsXG5cdFx0XHRcdFx0XCJDb25zdGFudFwiLFxuXHRcdFx0XHRcdChzdWJGbjogQ29uc3RhbnRFeHByZXNzaW9uPFQ+KSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoKHN1YkZuIGFzIHVua25vd24pICE9PSBleHByICYmIHR5cGVvZiBzdWJGbi52YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdFx0XHR0cmFuc2Zvcm1SZWN1cnNpdmVseShzdWJGbiwgXCJQYXRoSW5Nb2RlbFwiLCAoc3ViU3ViRm4pID0+IHtcblx0XHRcdFx0XHRcdFx0XHRoYXNFbWJlZGRlZEZ1bmN0aW9uQ2FsbE9yQmluZGluZyA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHN1YlN1YkZuO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0cmV0dXJuIHN1YkZuO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgYXJndW1lbnRTdHJpbmcgPSBgJHtleHByLnBhcmFtZXRlcnMubWFwKChhcmcpID0+IGNvbXBpbGVFeHByZXNzaW9uKGFyZywgdHJ1ZSkpLmpvaW4oXCIsIFwiKX1gO1xuXHRcdFx0bGV0IGZuQ2FsbCA9XG5cdFx0XHRcdGV4cHIub2JqID09PSB1bmRlZmluZWRcblx0XHRcdFx0XHQ/IGAke2V4cHIuZm59KCR7YXJndW1lbnRTdHJpbmd9KWBcblx0XHRcdFx0XHQ6IGAke2NvbXBpbGVFeHByZXNzaW9uKGV4cHIub2JqLCB0cnVlKX0uJHtleHByLmZufSgke2FyZ3VtZW50U3RyaW5nfSlgO1xuXHRcdFx0aWYgKCFlbWJlZGRlZEluQmluZGluZyAmJiBoYXNFbWJlZGRlZEZ1bmN0aW9uQ2FsbE9yQmluZGluZykge1xuXHRcdFx0XHRmbkNhbGwgPSBgez0gJHtmbkNhbGx9fWA7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZm5DYWxsO1xuXG5cdFx0Y2FzZSBcIkVtYmVkZGVkRXhwcmVzc2lvbkJpbmRpbmdcIjpcblx0XHRcdHJldHVybiBlbWJlZGRlZEluQmluZGluZyA/IGAoJHtleHByLnZhbHVlLnN1YnN0cmluZygyLCBleHByLnZhbHVlLmxlbmd0aCAtIDEpfSlgIDogYCR7ZXhwci52YWx1ZX1gO1xuXG5cdFx0Y2FzZSBcIkVtYmVkZGVkQmluZGluZ1wiOlxuXHRcdFx0cmV0dXJuIGVtYmVkZGVkSW5CaW5kaW5nID8gYCR7ZW1iZWRkZWRTZXBhcmF0b3J9JHtleHByLnZhbHVlfWAgOiBgJHtleHByLnZhbHVlfWA7XG5cblx0XHRjYXNlIFwiUGF0aEluTW9kZWxcIjpcblx0XHRcdHJldHVybiBjb21waWxlUGF0aEluTW9kZWxFeHByZXNzaW9uKGV4cHIsIGVtYmVkZGVkSW5CaW5kaW5nLCBlbWJlZGRlZFNlcGFyYXRvcik7XG5cblx0XHRjYXNlIFwiQ29tcGFyaXNvblwiOlxuXHRcdFx0Y29uc3QgY29tcGFyaXNvbkV4cHJlc3Npb24gPSBjb21waWxlQ29tcGFyaXNvbkV4cHJlc3Npb24oZXhwcik7XG5cdFx0XHRyZXR1cm4gd3JhcEJpbmRpbmdFeHByZXNzaW9uKGNvbXBhcmlzb25FeHByZXNzaW9uLCBlbWJlZGRlZEluQmluZGluZyk7XG5cblx0XHRjYXNlIFwiSWZFbHNlXCI6XG5cdFx0XHRjb25zdCBpZkVsc2VFeHByZXNzaW9uID0gYCR7Y29tcGlsZUV4cHJlc3Npb24oZXhwci5jb25kaXRpb24sIHRydWUpfSA/ICR7Y29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdGV4cHIub25UcnVlLFxuXHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRrZWVwVGFyZ2V0VHlwZVxuXHRcdFx0KX0gOiAke2NvbXBpbGVFeHByZXNzaW9uKGV4cHIub25GYWxzZSwgdHJ1ZSwga2VlcFRhcmdldFR5cGUpfWA7XG5cdFx0XHRyZXR1cm4gd3JhcEJpbmRpbmdFeHByZXNzaW9uKGlmRWxzZUV4cHJlc3Npb24sIGVtYmVkZGVkSW5CaW5kaW5nLCB0cnVlKTtcblxuXHRcdGNhc2UgXCJTZXRcIjpcblx0XHRcdGNvbnN0IHNldEV4cHJlc3Npb24gPSBleHByLm9wZXJhbmRzLm1hcCgob3BlcmFuZCkgPT4gY29tcGlsZUV4cHJlc3Npb24ob3BlcmFuZCwgdHJ1ZSkpLmpvaW4oYCAke2V4cHIub3BlcmF0b3J9IGApO1xuXHRcdFx0cmV0dXJuIHdyYXBCaW5kaW5nRXhwcmVzc2lvbihzZXRFeHByZXNzaW9uLCBlbWJlZGRlZEluQmluZGluZywgdHJ1ZSk7XG5cblx0XHRjYXNlIFwiQ29uY2F0XCI6XG5cdFx0XHRjb25zdCBjb25jYXRFeHByZXNzaW9uID0gZXhwci5leHByZXNzaW9uc1xuXHRcdFx0XHQubWFwKChuZXN0ZWRFeHByZXNzaW9uKSA9PiBjb21waWxlRXhwcmVzc2lvbihuZXN0ZWRFeHByZXNzaW9uLCB0cnVlLCB0cnVlKSlcblx0XHRcdFx0LmpvaW4oXCIgKyBcIik7XG5cdFx0XHRyZXR1cm4gd3JhcEJpbmRpbmdFeHByZXNzaW9uKGNvbmNhdEV4cHJlc3Npb24sIGVtYmVkZGVkSW5CaW5kaW5nKTtcblxuXHRcdGNhc2UgXCJMZW5ndGhcIjpcblx0XHRcdGNvbnN0IGxlbmd0aEV4cHJlc3Npb24gPSBgJHtjb21waWxlRXhwcmVzc2lvbihleHByLnBhdGhJbk1vZGVsLCB0cnVlKX0ubGVuZ3RoYDtcblx0XHRcdHJldHVybiB3cmFwQmluZGluZ0V4cHJlc3Npb24obGVuZ3RoRXhwcmVzc2lvbiwgZW1iZWRkZWRJbkJpbmRpbmcpO1xuXG5cdFx0Y2FzZSBcIk5vdFwiOlxuXHRcdFx0Y29uc3Qgbm90RXhwcmVzc2lvbiA9IGAhJHtjb21waWxlRXhwcmVzc2lvbihleHByLm9wZXJhbmQsIHRydWUpfWA7XG5cdFx0XHRyZXR1cm4gd3JhcEJpbmRpbmdFeHByZXNzaW9uKG5vdEV4cHJlc3Npb24sIGVtYmVkZGVkSW5CaW5kaW5nKTtcblxuXHRcdGNhc2UgXCJUcnV0aHlcIjpcblx0XHRcdGNvbnN0IHRydXRoeUV4cHJlc3Npb24gPSBgISEke2NvbXBpbGVFeHByZXNzaW9uKGV4cHIub3BlcmFuZCwgdHJ1ZSl9YDtcblx0XHRcdHJldHVybiB3cmFwQmluZGluZ0V4cHJlc3Npb24odHJ1dGh5RXhwcmVzc2lvbiwgZW1iZWRkZWRJbkJpbmRpbmcpO1xuXG5cdFx0Y2FzZSBcIkZvcm1hdHRlclwiOlxuXHRcdFx0Y29uc3QgZm9ybWF0dGVyRXhwcmVzc2lvbiA9IGNvbXBpbGVGb3JtYXR0ZXJFeHByZXNzaW9uKGV4cHIpO1xuXHRcdFx0cmV0dXJuIGVtYmVkZGVkSW5CaW5kaW5nID8gYCQke2Zvcm1hdHRlckV4cHJlc3Npb259YCA6IGZvcm1hdHRlckV4cHJlc3Npb247XG5cblx0XHRjYXNlIFwiQ29tcGxleFR5cGVcIjpcblx0XHRcdGNvbnN0IGNvbXBsZXhUeXBlRXhwcmVzc2lvbiA9IGNvbXBpbGVDb21wbGV4VHlwZUV4cHJlc3Npb24oZXhwcik7XG5cdFx0XHRyZXR1cm4gZW1iZWRkZWRJbkJpbmRpbmcgPyBgJCR7Y29tcGxleFR5cGVFeHByZXNzaW9ufWAgOiBjb21wbGV4VHlwZUV4cHJlc3Npb247XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdH1cbn1cblxuLyoqXG4gKiBDb21waWxlIGEgY29tcGFyaXNvbiBleHByZXNzaW9uLlxuICogQHBhcmFtIGV4cHJlc3Npb24gVGhlIGNvbXBhcmlzb24gZXhwcmVzc2lvbi5cbiAqIEByZXR1cm5zIFRoZSBjb21waWxlZCBleHByZXNzaW9uLiBOZWVkcyB3cmFwcGluZyBiZWZvcmUgaXQgY2FuIGJlIHVzZWQgYXMgYW4gZXhwcmVzc2lvbiBiaW5kaW5nLlxuICovXG5mdW5jdGlvbiBjb21waWxlQ29tcGFyaXNvbkV4cHJlc3Npb24oZXhwcmVzc2lvbjogQ29tcGFyaXNvbkV4cHJlc3Npb24pOiBzdHJpbmcge1xuXHRmdW5jdGlvbiBjb21waWxlT3BlcmFuZChvcGVyYW5kOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdFx0Y29uc3QgY29tcGlsZWRPcGVyYW5kID0gY29tcGlsZUV4cHJlc3Npb24ob3BlcmFuZCwgdHJ1ZSkgPz8gXCJ1bmRlZmluZWRcIjtcblx0XHRyZXR1cm4gd3JhcEJpbmRpbmdFeHByZXNzaW9uKGNvbXBpbGVkT3BlcmFuZCwgdHJ1ZSwgbmVlZFBhcmVudGhlc2lzKG9wZXJhbmQpKTtcblx0fVxuXG5cdHJldHVybiBgJHtjb21waWxlT3BlcmFuZChleHByZXNzaW9uLm9wZXJhbmQxKX0gJHtleHByZXNzaW9uLm9wZXJhdG9yfSAke2NvbXBpbGVPcGVyYW5kKGV4cHJlc3Npb24ub3BlcmFuZDIpfWA7XG59XG5cbi8qKlxuICogQ29tcGlsZSBhIGZvcm1hdHRlciBleHByZXNzaW9uLlxuICogQHBhcmFtIGV4cHJlc3Npb24gVGhlIGZvcm1hdHRlciBleHByZXNzaW9uLlxuICogQHJldHVybnMgVGhlIGNvbXBpbGVkIGV4cHJlc3Npb24uXG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGVGb3JtYXR0ZXJFeHByZXNzaW9uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihleHByZXNzaW9uOiBGb3JtYXR0ZXJFeHByZXNzaW9uPFQ+KTogc3RyaW5nIHtcblx0aWYgKGV4cHJlc3Npb24ucGFyYW1ldGVycy5sZW5ndGggPT09IDEpIHtcblx0XHRyZXR1cm4gYHske2NvbXBpbGVQYXRoUGFyYW1ldGVyKGV4cHJlc3Npb24ucGFyYW1ldGVyc1swXSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT4sIHRydWUpfSwgZm9ybWF0dGVyOiAnJHtcblx0XHRcdGV4cHJlc3Npb24uZm5cblx0XHR9J31gO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IHBhcnRzID0gZXhwcmVzc2lvbi5wYXJhbWV0ZXJzLm1hcCgocGFyYW0pID0+IHtcblx0XHRcdGlmIChwYXJhbS5fdHlwZSA9PT0gXCJDb21wbGV4VHlwZVwiKSB7XG5cdFx0XHRcdHJldHVybiBjb21waWxlQ29tcGxleFR5cGVFeHByZXNzaW9uKHBhcmFtKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBjb21waWxlUGF0aFBhcmFtZXRlcihwYXJhbSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT4pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBge3BhcnRzOiBbJHtwYXJ0cy5qb2luKFwiLCBcIil9XSwgZm9ybWF0dGVyOiAnJHtleHByZXNzaW9uLmZufSd9YDtcblx0fVxufVxuXG4vKipcbiAqIENvbXBpbGUgdGhlIHBhdGggcGFyYW1ldGVyIG9mIGEgZm9ybWF0dGVyIGNhbGwuXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgYmluZGluZyBwYXJ0IHRvIGV2YWx1YXRlXG4gKiBAcGFyYW0gc2luZ2xlUGF0aCBXaGV0aGVyIHRoZXJlIGlzIG9uZSBvciBtdWx0aXBsZSBwYXRoIHRvIGNvbnNpZGVyXG4gKiBAcmV0dXJucyBUaGUgc3RyaW5nIHNuaXBwZXQgdG8gaW5jbHVkZSBpbiB0aGUgb3ZlcmFsbCBiaW5kaW5nIGRlZmluaXRpb25cbiAqL1xuZnVuY3Rpb24gY29tcGlsZVBhdGhQYXJhbWV0ZXIoZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+LCBzaW5nbGVQYXRoID0gZmFsc2UpOiBzdHJpbmcge1xuXHRsZXQgb3V0VmFsdWUgPSBcIlwiO1xuXHRpZiAoZXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJDb25zdGFudFwiKSB7XG5cdFx0aWYgKGV4cHJlc3Npb24udmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gU3BlY2lhbCBjYXNlIG90aGVyd2lzZSB0aGUgSlNUb2tlbml6ZXIgY29tcGxhaW5zIGFib3V0IGluY29ycmVjdCBjb250ZW50XG5cdFx0XHRvdXRWYWx1ZSA9IGB2YWx1ZTogJ3VuZGVmaW5lZCdgO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvdXRWYWx1ZSA9IGB2YWx1ZTogJHtjb21waWxlQ29uc3RhbnQoZXhwcmVzc2lvbiwgdHJ1ZSl9YDtcblx0XHR9XG5cdH0gZWxzZSBpZiAoZXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJQYXRoSW5Nb2RlbFwiKSB7XG5cdFx0b3V0VmFsdWUgPSBgcGF0aDogJyR7Y29tcGlsZVBhdGhJbk1vZGVsKGV4cHJlc3Npb24pfSdgO1xuXG5cdFx0b3V0VmFsdWUgKz0gZXhwcmVzc2lvbi50eXBlID8gYCwgdHlwZTogJyR7ZXhwcmVzc2lvbi50eXBlfSdgIDogYCwgdGFyZ2V0VHlwZTogJ2FueSdgO1xuXHRcdGlmIChleHByZXNzaW9uLm1vZGUpIHtcblx0XHRcdG91dFZhbHVlICs9IGAsIG1vZGU6ICcke2NvbXBpbGVFeHByZXNzaW9uKGV4cHJlc3Npb24ubW9kZSl9J2A7XG5cdFx0fVxuXHRcdGlmIChoYXNFbGVtZW50cyhleHByZXNzaW9uLmNvbnN0cmFpbnRzKSkge1xuXHRcdFx0b3V0VmFsdWUgKz0gYCwgY29uc3RyYWludHM6ICR7Y29tcGlsZUV4cHJlc3Npb24oZXhwcmVzc2lvbi5jb25zdHJhaW50cyl9YDtcblx0XHR9XG5cdFx0aWYgKGhhc0VsZW1lbnRzKGV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucykpIHtcblx0XHRcdG91dFZhbHVlICs9IGAsIGZvcm1hdE9wdGlvbnM6ICR7Y29tcGlsZUV4cHJlc3Npb24oZXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zKX1gO1xuXHRcdH1cblx0XHRpZiAoaGFzRWxlbWVudHMoZXhwcmVzc2lvbi5wYXJhbWV0ZXJzKSkge1xuXHRcdFx0b3V0VmFsdWUgKz0gYCwgcGFyYW1ldGVyczogJHtjb21waWxlRXhwcmVzc2lvbihleHByZXNzaW9uLnBhcmFtZXRlcnMpfWA7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cdHJldHVybiBzaW5nbGVQYXRoID8gb3V0VmFsdWUgOiBgeyR7b3V0VmFsdWV9fWA7XG59XG5cbmZ1bmN0aW9uIGhhc0VsZW1lbnRzKG9iajogb2JqZWN0IHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG5cdHJldHVybiAhIW9iaiAmJiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA+IDA7XG59XG5cbi8qKlxuICogQ29tcGlsZSBhIGJpbmRpbmcgZXhwcmVzc2lvbiBwYXRoLlxuICogQHBhcmFtIGV4cHJlc3Npb24gVGhlIGV4cHJlc3Npb24gdG8gY29tcGlsZS5cbiAqIEByZXR1cm5zIFRoZSBjb21waWxlZCBwYXRoLlxuICovXG5mdW5jdGlvbiBjb21waWxlUGF0aEluTW9kZWw8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KGV4cHJlc3Npb246IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUPik6IHN0cmluZyB7XG5cdHJldHVybiBgJHtleHByZXNzaW9uLm1vZGVsTmFtZSA/IGV4cHJlc3Npb24ubW9kZWxOYW1lICsgXCI+XCIgOiBcIlwifSR7ZXhwcmVzc2lvbi5wYXRofWA7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztFQW9JQTtBQUNBO0FBQ0E7O0VBdUNPLFNBQVNBLFVBQVVBLENBQUNDLGFBQXNCLEVBQTZCO0lBQzdF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