@pmcretail/mapper-library 0.0.8 → 0.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -11,32 +11,6 @@ var RJMapperBuilderClass = /** @class */ (function () {
11
11
  this.itemCount = 0;
12
12
  this.largestNumber = 0;
13
13
  this.rjObject = {};
14
- this.paymentTypes = [
15
- {
16
- paymentType: 'Card',
17
- type: 'SEPAY',
18
- tenderType: '5',
19
- tenderSubType: '8',
20
- },
21
- {
22
- paymentType: 'Cash',
23
- type: 'TMC_CASH',
24
- tenderType: '1',
25
- tenderSubType: '0'
26
- },
27
- {
28
- paymentType: 'PDQ',
29
- type: 'Unintegrated',
30
- tenderType: '2',
31
- tenderSubType: '8'
32
- },
33
- {
34
- paymentType: 'Gift Card',
35
- type: 'TMC_GIFTCARD',
36
- tenderType: '5',
37
- tenderSubType: '8'
38
- }
39
- ];
40
14
  if (transactionDoc) {
41
15
  this.transactionDocument = transactionDoc;
42
16
  }
@@ -69,6 +43,8 @@ var RJMapperBuilderClass = /** @class */ (function () {
69
43
  }
70
44
  this.initilizeItemCount();
71
45
  this.setLineNumberForProducts();
46
+ this.createdAt = this.getdate(this.transactionDocument.createdAt);
47
+ this.updatedAt = this.getdate(this.transactionDocument.updatedAt);
72
48
  }
73
49
  /**
74
50
  * @template THIS
@@ -82,9 +58,9 @@ var RJMapperBuilderClass = /** @class */ (function () {
82
58
  */
83
59
  function () {
84
60
  (/** @type {?} */ (this)).rjObject['Keyword'] = (/** @type {?} */ (this)).generateKeyword();
85
- (/** @type {?} */ (this)).rjObject['ID'] = (/** @type {?} */ (this)).generateId((/** @type {?} */ (this)).transactionDocument.createdAt);
61
+ (/** @type {?} */ (this)).rjObject['ID'] = (/** @type {?} */ (this)).generateId((/** @type {?} */ (this)).createdAt);
86
62
  (/** @type {?} */ (this)).rjObject['XMLSchemaVersion'] = '2';
87
- (/** @type {?} */ (this)).rjObject['LastUpdated'] = (/** @type {?} */ (this)).transactionDocument.updatedAt;
63
+ (/** @type {?} */ (this)).rjObject['LastUpdated'] = (/** @type {?} */ (this)).updatedAt;
88
64
  (/** @type {?} */ (this)).rjObject['MajorVersion'] = (/** @type {?} */ (this)).majorVersion;
89
65
  (/** @type {?} */ (this)).rjObject['MinorVersion'] = (/** @type {?} */ (this)).minorVersion;
90
66
  (/** @type {?} */ (this)).rjObject['ManifestVersion'] = (/** @type {?} */ (this)).manifestVersion;
@@ -107,7 +83,7 @@ var RJMapperBuilderClass = /** @class */ (function () {
107
83
  function () {
108
84
  (/** @type {?} */ (this)).rjObject['Header'] = {};
109
85
  (/** @type {?} */ (this)).rjObject['Header'].TimeZoneOffset = (/** @type {?} */ (this)).convertToString((/** @type {?} */ (this)).generateTimezoneoffset((/** @type {?} */ (this)).transactionDocument.createdAt));
110
- (/** @type {?} */ (this)).rjObject['Header'].DateTimeCreated = (/** @type {?} */ (this)).transactionDocument.createdAt;
86
+ (/** @type {?} */ (this)).rjObject['Header'].DateTimeCreated = (/** @type {?} */ (this)).createdAt;
111
87
  (/** @type {?} */ (this)).rjObject['Header'].OriginatedBy = {};
112
88
  (/** @type {?} */ (this)).rjObject['Header'].OriginatedBy.DeviceID = (/** @type {?} */ (this)).deviceId;
113
89
  (/** @type {?} */ (this)).rjObject['Header'].OriginatedBy.CashierID = (/** @type {?} */ (this)).cashierId;
@@ -124,7 +100,7 @@ var RJMapperBuilderClass = /** @class */ (function () {
124
100
  (/** @type {?} */ (this)).rjObject['Header'].TradingRegionID = (/** @type {?} */ (this)).tradingRegionId;
125
101
  (/** @type {?} */ (this)).rjObject['Header'].Eurozone = " "; //unknown
126
102
  (/** @type {?} */ (this)).rjObject['Header'].EuroBaseExchangeRate = ""; //unknown
127
- (/** @type {?} */ (this)).rjObject['Header'].PrintableName = ""; //unknown
103
+ (/** @type {?} */ (this)).rjObject['Header'].PrintableName = (/** @type {?} */ (this)).transactionDocument.userName; //unknown
128
104
  return (/** @type {?} */ (this));
129
105
  };
130
106
  /**
@@ -269,7 +245,7 @@ var RJMapperBuilderClass = /** @class */ (function () {
269
245
  obj['NetValue'] = element.discountAmount < 0 ? element.discountAmount : -element.discountAmount;
270
246
  obj['EffectiveNetValue'] = element.discountAmount < 0 ? element.discountAmount : -element.discountAmount;
271
247
  obj['Description'] = element.reasonCode;
272
- obj['UserID'] = (/** @type {?} */ (_this)).transactionDocument.basket.userId;
248
+ obj['UserID'] = (/** @type {?} */ (_this)).transactionDocument.userName;
273
249
  obj['ReasonCodeID'] = element.reasonCode;
274
250
  obj['DiscountType'] = element.discountType.toUpperCase() == DISCOUNTTYPE.PERCENT.toUpperCase() ? 0 : 1; // todo - compare values
275
251
  obj['RoundingRule'] = 2;
@@ -308,8 +284,8 @@ var RJMapperBuilderClass = /** @class */ (function () {
308
284
  obj.EffectiveNetValue = 0;
309
285
  obj.Description = data.percentageDiscountReasonName ? data.percentageDiscountReasonName : data.priceOverrideReasonName;
310
286
  obj.DeviceID = this.deviceId;
311
- obj.UserID = this.userId;
312
- obj.DateTimeCreated = this.transactionDocument.updatedAt;
287
+ obj.UserID = this.transactionDocument.userName;
288
+ obj.DateTimeCreated = this.updatedAt;
313
289
  obj.AuthorisingUserID = this.userId;
314
290
  obj.ReasonCodeID = data.percentageDiscountReasonCode ? data.percentageDiscountReasonCode : data.priceOverrideReasonCode;
315
291
  obj.ModifiedLineNumber = lineNo;
@@ -330,10 +306,10 @@ var RJMapperBuilderClass = /** @class */ (function () {
330
306
  function () {
331
307
  var _this = this;
332
308
  (/** @type {?} */ (this)).rjObject['Trailer'] = {};
333
- (/** @type {?} */ (this)).rjObject.Trailer.DateTimeCompleted = (/** @type {?} */ (this)).transactionDocument.updatedAt;
309
+ (/** @type {?} */ (this)).rjObject.Trailer.DateTimeCompleted = (/** @type {?} */ (this)).updatedAt;
334
310
  (/** @type {?} */ (this)).rjObject.Trailer.CompletedBy = {};
335
- (/** @type {?} */ (this)).rjObject.Trailer.CompletedBy.DeviceID = (/** @type {?} */ (this)).deviceId; //todo
336
- (/** @type {?} */ (this)).rjObject.Trailer.CompletedBy.CashierID = (/** @type {?} */ (this)).cashierId; //todo
311
+ (/** @type {?} */ (this)).rjObject.Trailer.CompletedBy.DeviceID = (/** @type {?} */ (this)).deviceId;
312
+ (/** @type {?} */ (this)).rjObject.Trailer.CompletedBy.CashierID = (/** @type {?} */ (this)).cashierId;
337
313
  (/** @type {?} */ (this)).rjObject.Trailer.CompletedBy.StoreID = (/** @type {?} */ (this)).transactionDocument.storeId;
338
314
  (/** @type {?} */ (this)).rjObject.Trailer.CompletedBy.BranchID = (/** @type {?} */ (this)).branchId;
339
315
  (/** @type {?} */ (this)).rjObject.Trailer.CompletedBy.TerminalNumber = (/** @type {?} */ (this)).transactionDocument.terminalId;
@@ -437,7 +413,7 @@ var RJMapperBuilderClass = /** @class */ (function () {
437
413
  * @param {?} x
438
414
  * @return {?}
439
415
  */
440
- function (x) { return x.paymentType.toUpperCase() === element.paymentType.toUpperCase(); }));
416
+ function (x) { return x.name.toUpperCase() === element.paymentType.toUpperCase(); }));
441
417
  if (element.paymentType.toUpperCase() === 'GIFT CARD') {
442
418
  /** @type {?} */
443
419
  var obj = {
@@ -445,13 +421,10 @@ var RJMapperBuilderClass = /** @class */ (function () {
445
421
  LineNumber: (/** @type {?} */ (_this)).generateLineNumber(),
446
422
  NetValue: (/** @type {?} */ (_this)).convertToString(-1 * (/** @type {?} */ (_this)).removeDecimal((Math.round(element.amount)))),
447
423
  EffectiveNetValue: (/** @type {?} */ (_this)).convertToString(-1 * (/** @type {?} */ (_this)).removeDecimal((Math.round(element.amount)))),
448
- Description: (/** @type {?} */ (_this)).getDescription(value[0].paymentType, element),
449
- //todo
424
+ Description: (/** @type {?} */ (_this)).getDescription(value[0].name, element),
450
425
  DeviceID: (/** @type {?} */ (_this)).deviceId,
451
- //todo
452
- UserID: (/** @type {?} */ (_this)).userId,
453
- //todo
454
- DateTimeCreated: (/** @type {?} */ (_this)).transactionDocument.updatedAt,
426
+ UserID: (/** @type {?} */ (_this)).transactionDocument.userName,
427
+ DateTimeCreated: (/** @type {?} */ (_this)).updatedAt,
455
428
  TenderType: value[0].tenderType,
456
429
  TenderSubType: value[0].tenderSubType,
457
430
  TenderAmount: (/** @type {?} */ (_this)).convertToString(-1 * (/** @type {?} */ (_this)).removeDecimal((Math.round(element.amount)))),
@@ -473,13 +446,10 @@ var RJMapperBuilderClass = /** @class */ (function () {
473
446
  //todo
474
447
  NetValue: JSON.stringify(-1 * (Math.round(element.amount))),
475
448
  EffectiveNetValue: JSON.stringify(-1 * (Math.round(element.amount))),
476
- Description: (/** @type {?} */ (_this)).getDescription(value[0].paymentType, element),
477
- //todo
449
+ Description: (/** @type {?} */ (_this)).getDescription(value[0].name, element),
478
450
  DeviceID: (/** @type {?} */ (_this)).deviceId,
479
- //todo
480
- UserID: (/** @type {?} */ (_this)).userId,
481
- //todo
482
- DateTimeCreated: (/** @type {?} */ (_this)).transactionDocument.updatedAt,
451
+ UserID: (/** @type {?} */ (_this)).transactionDocument.userName,
452
+ DateTimeCreated: (/** @type {?} */ (_this)).updatedAt,
483
453
  TenderType: value[0].tenderType,
484
454
  TenderSubType: value[0].tenderSubType,
485
455
  TenderAmount: JSON.stringify(-1 * (Math.round(element.amount))),
@@ -797,7 +767,7 @@ var RJMapperBuilderClass = /** @class */ (function () {
797
767
  * @return {THIS}
798
768
  */
799
769
  function (value) {
800
- (/** @type {?} */ (this)).cashierId = value;
770
+ (/** @type {?} */ (this)).cashierId = ((/** @type {?} */ (this)).transactionDocument && (/** @type {?} */ (this)).transactionDocument.userName) ? (/** @type {?} */ (this)).transactionDocument.userName : '';
801
771
  return (/** @type {?} */ (this));
802
772
  };
803
773
  /**
@@ -880,6 +850,22 @@ var RJMapperBuilderClass = /** @class */ (function () {
880
850
  (/** @type {?} */ (this)).branchId = value;
881
851
  return (/** @type {?} */ (this));
882
852
  };
853
+ /**
854
+ * @template THIS
855
+ * @this {THIS}
856
+ * @param {?} value
857
+ * @return {THIS}
858
+ */
859
+ RJMapperBuilderClass.prototype.setPaymentDetails = /**
860
+ * @template THIS
861
+ * @this {THIS}
862
+ * @param {?} value
863
+ * @return {THIS}
864
+ */
865
+ function (value) {
866
+ (/** @type {?} */ (this)).paymentTypes = value;
867
+ return (/** @type {?} */ (this));
868
+ };
883
869
  /**
884
870
  * @param {?} date
885
871
  * @return {?}
@@ -946,6 +932,12 @@ var RJMapperBuilderClass = /** @class */ (function () {
946
932
  function (element, lineDiscount) {
947
933
  /** @type {?} */
948
934
  var obj = {};
935
+ /** @type {?} */
936
+ var taxTotal = this.transactionDocument.basket['taxBreakdown']['taxLines'].find((/**
937
+ * @param {?} item
938
+ * @return {?}
939
+ */
940
+ function (item) { return item.itemLineId == element['itemLineId']; }));
949
941
  obj['XMLSchemaVersion'] = this.xmlSchemaVersion;
950
942
  obj['LineNumber'] = element['itemLineId'];
951
943
  obj['NetValue'] = this.removeDecimal(element['refundedTotal']);
@@ -953,7 +945,7 @@ var RJMapperBuilderClass = /** @class */ (function () {
953
945
  obj['Description'] = element['description'];
954
946
  obj['DeviceID'] = this.transactionDocument['terminalId'];
955
947
  obj['UserID'] = this.userId;
956
- obj['DateTimeCreated'] = this.transactionDocument['createdAt'];
948
+ obj['DateTimeCreated'] = this.createdAt;
957
949
  obj['ExtendedValue'] = this.removeDecimal(element['totalLinePrice'] * -1);
958
950
  obj['UnitPrice'] = this.removeDecimal(element['price']);
959
951
  obj['Quantity'] = element['refundedQuantity'] < 0 ? element['refundedQuantity'].toFixed(1) : -element['refundedQuantity'].toFixed(1);
@@ -976,15 +968,8 @@ var RJMapperBuilderClass = /** @class */ (function () {
976
968
  obj['MMGroupID'] = this.getAttributes();
977
969
  obj['CustomerDetails'] = ""; // todo - blank
978
970
  obj['TotalPromotionSaving'] = element['promotionAmount'] || -1; // TODO
979
- // TODO
980
- /** @type {?} */
981
- var taxTotal = this.transactionDocument.basket['taxBreakdown']['taxLines'].find((/**
982
- * @param {?} item
983
- * @return {?}
984
- */
985
- function (item) { return item.itemLineId == element['itemLineId']; }));
986
- obj['OriginalTaxAmount'] = taxTotal.taxLineTotal < 0 ? this.removeDecimal(taxTotal.taxLineTotal) : this.removeDecimal(-taxTotal.taxLineTotal); //todo
987
- obj['taxAmount'] = taxTotal.taxLineTotal < 0 ? this.removeDecimal(taxTotal.taxLineTotal) : this.removeDecimal(-taxTotal.taxLineTotal);
971
+ obj['OriginalTaxAmount'] = this.convertToString(this.getoriginltax(element, taxTotal.VAT) * -1);
972
+ obj['taxAmount'] = taxTotal.taxLineTotal < 0 ? (taxTotal.taxLineTotal) : (-taxTotal.taxLineTotal);
988
973
  if (lineDiscount) {
989
974
  if (lineDiscount.percentageDiscountReasonName && lineDiscount.percentageDiscountReasonCode) {
990
975
  // line discount
@@ -1046,10 +1031,8 @@ var RJMapperBuilderClass = /** @class */ (function () {
1046
1031
  EffectiveNetValue: this.removeDecimal(element.totalLinePrice),
1047
1032
  Description: element.description,
1048
1033
  DeviceID: this.deviceId,
1049
- //to do
1050
- UserID: this.userId,
1051
- //to do,
1052
- DateTimeCreated: this.transactionDocument.createdAt,
1034
+ UserID: this.transactionDocument.userName,
1035
+ DateTimeCreated: this.createdAt,
1053
1036
  ExtendedValue: this.removeDecimal(element.price),
1054
1037
  UnitPrice: this.removeDecimal(element.price),
1055
1038
  MMGroupID: this.getAttributes(),
@@ -1064,8 +1047,8 @@ var RJMapperBuilderClass = /** @class */ (function () {
1064
1047
  function (item) { return item.itemLineId == element['itemLineId']; })).VATCode,
1065
1048
  TaxModifiable: 1,
1066
1049
  //todo
1067
- OriginalTaxAmount: taxTotal.taxLineTotal < 0 ? this.removeDecimal(taxTotal.taxLineTotal) : this.removeDecimal(-taxTotal.taxLineTotal),
1068
- TaxAmount: taxTotal.taxLineTotal < 0 ? this.removeDecimal(taxTotal.taxLineTotal) : this.removeDecimal(-taxTotal.taxLineTotal),
1050
+ OriginalTaxAmount: this.convertToString(this.getoriginltax(element, taxTotal.VAT)),
1051
+ TaxAmount: this.convertToString(taxTotal.taxLineTotal),
1069
1052
  OriginalTaxAmountSet: 1,
1070
1053
  //todo
1071
1054
  ProductID: element.SKU,
@@ -1110,6 +1093,23 @@ var RJMapperBuilderClass = /** @class */ (function () {
1110
1093
  }
1111
1094
  return obj;
1112
1095
  };
1096
+ /**
1097
+ * @param {?} element
1098
+ * @param {?} VAT
1099
+ * @return {?}
1100
+ */
1101
+ RJMapperBuilderClass.prototype.getoriginltax = /**
1102
+ * @param {?} element
1103
+ * @param {?} VAT
1104
+ * @return {?}
1105
+ */
1106
+ function (element, VAT) {
1107
+ /** @type {?} */
1108
+ var pricebeforetax = (element.price * 100) / (100 + VAT);
1109
+ /** @type {?} */
1110
+ var originaltax = element.price - pricebeforetax;
1111
+ return originaltax;
1112
+ };
1113
1113
  /**
1114
1114
  * @param {?} value
1115
1115
  * @return {?}
@@ -1176,6 +1176,32 @@ var RJMapperBuilderClass = /** @class */ (function () {
1176
1176
  return "";
1177
1177
  }
1178
1178
  };
1179
+ /**
1180
+ * @param {?} date
1181
+ * @return {?}
1182
+ */
1183
+ RJMapperBuilderClass.prototype.getdate = /**
1184
+ * @param {?} date
1185
+ * @return {?}
1186
+ */
1187
+ function (date) {
1188
+ /** @type {?} */
1189
+ var offset = this.generateTimezoneoffset(date) * -1;
1190
+ /** @type {?} */
1191
+ var offsetHours = Math.abs(Math.floor(offset / 60));
1192
+ /** @type {?} */
1193
+ var offsetMinutes = Math.abs(offset) - offsetHours * 60;
1194
+ /** @type {?} */
1195
+ var offsetSign = '+';
1196
+ if (offset < 0) {
1197
+ offsetSign = '-';
1198
+ }
1199
+ /** @type {?} */
1200
+ var newdate = date.substring(0, 19);
1201
+ /** @type {?} */
1202
+ var x = (newdate + offsetSign + offsetHours + ':' + offsetMinutes).toString();
1203
+ return x;
1204
+ };
1179
1205
  return RJMapperBuilderClass;
1180
1206
  }());
1181
1207
  export { RJMapperBuilderClass };
@@ -1290,6 +1316,16 @@ if (false) {
1290
1316
  * @private
1291
1317
  */
1292
1318
  RJMapperBuilderClass.prototype.branchId;
1319
+ /**
1320
+ * @type {?}
1321
+ * @private
1322
+ */
1323
+ RJMapperBuilderClass.prototype.createdAt;
1324
+ /**
1325
+ * @type {?}
1326
+ * @private
1327
+ */
1328
+ RJMapperBuilderClass.prototype.updatedAt;
1293
1329
  /**
1294
1330
  * @type {?}
1295
1331
  * @private
@@ -1301,4 +1337,4 @@ if (false) {
1301
1337
  */
1302
1338
  RJMapperBuilderClass.prototype.paymentTypes;
1303
1339
  }
1304
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUkotbWFwcGVyLmNsYXNzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHBtY3JldGFpbC9tYXBwZXItbGlicmFyeS8iLCJzb3VyY2VzIjpbImxpYi9SSi1tYXBwZXIuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBK0MsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUNwSCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRTtJQXdESSw4QkFBWSxjQUFvQztRQW5DeEMsY0FBUyxHQUFHLENBQUMsQ0FBQztRQUNkLGtCQUFhLEdBQUcsQ0FBQyxDQUFDO1FBRWxCLGFBQVEsR0FBUSxFQUFFLENBQUE7UUFFbEIsaUJBQVksR0FBRztZQUNuQjtnQkFDSSxXQUFXLEVBQUUsTUFBTTtnQkFDbkIsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsVUFBVSxFQUFFLEdBQUc7Z0JBQ2YsYUFBYSxFQUFFLEdBQUc7YUFFckI7WUFDRDtnQkFDSSxXQUFXLEVBQUUsTUFBTTtnQkFDbkIsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLFVBQVUsRUFBRSxHQUFHO2dCQUNmLGFBQWEsRUFBRSxHQUFHO2FBRXJCO1lBQ0Q7Z0JBQ0ksV0FBVyxFQUFFLEtBQUs7Z0JBQ2xCLElBQUksRUFBRSxjQUFjO2dCQUNwQixVQUFVLEVBQUUsR0FBRztnQkFDZixhQUFhLEVBQUUsR0FBRzthQUVyQjtZQUNEO2dCQUNJLFdBQVcsRUFBRSxXQUFXO2dCQUN4QixJQUFJLEVBQUUsY0FBYztnQkFDcEIsVUFBVSxFQUFFLEdBQUc7Z0JBQ2YsYUFBYSxFQUFFLEdBQUc7YUFDckI7U0FDSixDQUFBO1FBR0csSUFBSSxjQUFjLEVBQUU7WUFDaEIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLGNBQWMsQ0FBQztTQUM3QzthQUFNO1lBQ0gsSUFBSSxDQUFDLG1CQUFtQixHQUFHO2dCQUN2QixhQUFhLEVBQUUsRUFBRTtnQkFDakIsb0JB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OztJQUN0Qix3Q0FBMEI7Ozs7O0lBRTFCLDRDQTRCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERJU0NPVU5UVFlQRSwgTGluZURpc2NvdW50LCBUUHJvZHVjdCwgVHJhbnNhY3Rpb25Eb2N1bWVudCwgVFJBTlNBQ1RJT05fVFlQRSB9IGZyb20gXCIuL21hcHBlci1saWJyYXJ5Lm1vZGVsXCJcclxuaW1wb3J0IHsgVHJhbnNhY3Rpb25Eb2N1bWVudEJ1aWxkZXIgfSBmcm9tIFwiLi9UcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlclwiO1xyXG5leHBvcnQgY2xhc3MgUkpNYXBwZXJCdWlsZGVyQ2xhc3Mge1xyXG5cclxuICAgIHByaXZhdGUgdHJhbnNhY3Rpb25Eb2N1bWVudDogVHJhbnNhY3Rpb25Eb2N1bWVudDtcclxuICAgIHByaXZhdGUgdXNlcklkOiBhbnk7XHJcbiAgICBwcml2YXRlIGRldmljZUlkOiBhbnk7XHJcbiAgICBwcml2YXRlIHRyYW5zYWN0aW9uTnVtYmVyOiBhbnk7XHJcbiAgICBwcml2YXRlIG1hbmlmZXN0VmVyc2lvbjogYW55O1xyXG4gICAgcHJpdmF0ZSBkYXRhYmFzZVNjaGVtYVZlcnNpb246IGFueTtcclxuICAgIHByaXZhdGUgYmFza2V0VHlwZTogYW55O1xyXG4gICAgcHJpdmF0ZSB4bWxTY2hlbWFWZXJzaW9uOiBhbnk7XHJcbiAgICBwcml2YXRlIG1ham9yVmVyc2lvbjogYW55O1xyXG4gICAgcHJpdmF0ZSBtaW5vclZlcnNpb246IGFueTtcclxuICAgIHByaXZhdGUgZXh0ZXJuYWxTdGF0ZTogYW55O1xyXG4gICAgcHJpdmF0ZSBjYXNoaWVySWQ6IGFueTtcclxuICAgIHByaXZhdGUgY29tcGFueUlkOiBhbnk7XHJcbiAgICBwcml2YXRlIHRlcm1pbmFsTnVtYmVyOiBhbnk7XHJcbiAgICBwcml2YXRlIHRheE1ldGhvZElkOiBhbnk7XHJcbiAgICBwcml2YXRlIHRyYWRpbmdSZWdpb25JZDogYW55O1xyXG4gICAgcHJpdmF0ZSBiYXNrZXRDdXJyZW5jeUlkOiBhbnk7XHJcbiAgICBwcml2YXRlIGJhc2tldENvdW50cnlJZDogYW55O1xyXG4gICAgcHJpdmF0ZSBiYXNrZXRMYW5ndWFnZUlkOiBhbnk7XHJcbiAgICBwcml2YXRlIGl0ZW1Db3VudCA9IDA7XHJcbiAgICBwcml2YXRlIGxhcmdlc3ROdW1iZXIgPSAwO1xyXG4gICAgcHJpdmF0ZSBicmFuY2hJZDogYW55O1xyXG4gICAgcHJpdmF0ZSByak9iamVjdDogYW55ID0ge31cclxuXHJcbiAgICBwcml2YXRlIHBheW1lbnRUeXBlcyA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHBheW1lbnRUeXBlOiAnQ2FyZCcsXHJcbiAgICAgICAgICAgIHR5cGU6ICdTRVBBWScsXHJcbiAgICAgICAgICAgIHRlbmRlclR5cGU6ICc1JyxcclxuICAgICAgICAgICAgdGVuZGVyU3ViVHlwZTogJzgnLFxyXG5cclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcGF5bWVudFR5cGU6ICdDYXNoJyxcclxuICAgICAgICAgICAgdHlwZTogJ1RNQ19DQVNIJyxcclxuICAgICAgICAgICAgdGVuZGVyVHlwZTogJzEnLFxyXG4gICAgICAgICAgICB0ZW5kZXJTdWJUeXBlOiAnMCdcclxuXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHBheW1lbnRUeXBlOiAnUERRJyxcclxuICAgICAgICAgICAgdHlwZTogJ1VuaW50ZWdyYXRlZCcsXHJcbiAgICAgICAgICAgIHRlbmRlclR5cGU6ICcyJyxcclxuICAgICAgICAgICAgdGVuZGVyU3ViVHlwZTogJzgnXHJcblxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwYXltZW50VHlwZTogJ0dpZnQgQ2FyZCcsXHJcbiAgICAgICAgICAgIHR5cGU6ICdUTUNfR0lGVENBUkQnLFxyXG4gICAgICAgICAgICB0ZW5kZXJUeXBlOiAnNScsXHJcbiAgICAgICAgICAgIHRlbmRlclN1YlR5cGU6ICc4J1xyXG4gICAgICAgIH1cclxuICAgIF1cclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih0cmFuc2FjdGlvbkRvYz86IFRyYW5zYWN0aW9uRG9jdW1lbnQpIHtcclxuICAgICAgICBpZiAodHJhbnNhY3Rpb25Eb2MpIHtcclxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50ID0gdHJhbnNhY3Rpb25Eb2M7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50ID0ge1xyXG4gICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25JZDogXCJcIixcclxuICAgICAgICAgICAgICAgIG9mZmxpbmVUcmFuc2FjdGlvbklkOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25SZWY6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBkYXRlVGltZTogXCJcIixcclxuICAgICAgICAgICAgICAgIG9yZ0NvZGU6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBzdG9yZUlkOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgc3RvcmVOb2RlSWQ6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBzdG9yZU5vZGVTdHJ1Y3R1cmU6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBkZXZpY2VJZDogXCJcIixcclxuICAgICAgICAgICAgICAgIHRlcm1pbmFsSWQ6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICB1c2VySWQ6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBpbml0aWF0aW5nTW9kdWxlOiBcImVCYXNrZXRcIixcclxuICAgICAgICAgICAgICAgIGV4cG9ydDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBiYXNrZXQ6IHt9IGFzIGFueSxcclxuICAgICAgICAgICAgICAgIGJhc2tldFN1bW1hcnk6IHt9IGFzIGFueSxcclxuICAgICAgICAgICAgICAgIGJhc2VDdXJyZW5jeTogXCJcIixcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBvcGVyYXRpb25TdGF0dXM6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBjcmVhdGVkQXQ6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkQXQ6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBpZDogXCJcIixcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHM6IHt9IGFzIGFueSxcclxuICAgICAgICAgICAgICAgIHNhbGVUb3RhbDogMCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pbml0aWxpemVJdGVtQ291bnQoKTtcclxuICAgICAgICB0aGlzLnNldExpbmVOdW1iZXJGb3JQcm9kdWN0cygpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBvc2Jhc2tldEluZm8oKSB7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnS2V5d29yZCddID0gdGhpcy5nZW5lcmF0ZUtleXdvcmQoKTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydJRCddID0gdGhpcy5nZW5lcmF0ZUlkKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jcmVhdGVkQXQpO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ1hNTFNjaGVtYVZlcnNpb24nXSA9ICcyJztcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydMYXN0VXBkYXRlZCddID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnVwZGF0ZWRBdDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydNYWpvclZlcnNpb24nXSA9IHRoaXMubWFqb3JWZXJzaW9uO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ01pbm9yVmVyc2lvbiddID0gdGhpcy5taW5vclZlcnNpb247XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnTWFuaWZlc3RWZXJzaW9uJ10gPSB0aGlzLm1hbmlmZXN0VmVyc2lvbjtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydEYXRhYmFzZVNjaGVtYVZlcnNpb24nXSA9IHRoaXMuZGF0YWJhc2VTY2hlbWFWZXJzaW9uO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0Jhc2tldFR5cGUnXSA9IHRoaXMuYmFza2V0VHlwZTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydTdGF0ZSddID0gdGhpcy5nZXRTdGF0ZSgpO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0V4dGVybmFsU3RhdGUnXSA9IHRoaXMuZXh0ZXJuYWxTdGF0ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGdldGhlYWRlckluZm8oKSB7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10gPSB7fTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5UaW1lWm9uZU9mZnNldCA9IHRoaXMuY29udmVydFRvU3RyaW5nKHRoaXMuZ2VuZXJhdGVUaW1lem9uZW9mZnNldCh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3JlYXRlZEF0KSk7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uRGF0ZVRpbWVDcmVhdGVkID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmNyZWF0ZWRBdDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5PcmlnaW5hdGVkQnkgPSB7fTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5PcmlnaW5hdGVkQnkuRGV2aWNlSUQgPSB0aGlzLmRldmljZUlkO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLk9yaWdpbmF0ZWRCeS5DYXNoaWVySUQgPSB0aGlzLmNhc2hpZXJJZDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5PcmlnaW5hdGVkQnkuQ29tcGFueUlEID0gdGhpcy5jb21wYW55SWQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uT3JpZ2luYXRlZEJ5LlN0b3JlSUQgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuc3RvcmVJZDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5PcmlnaW5hdGVkQnkuQnJhbmNoSUQgPSB0aGlzLmJyYW5jaElkO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLk9yaWdpbmF0ZWRCeS5UZXJtaW5hbE51bWJlciA9IHRoaXMudGVybWluYWxOdW1iZXI7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uT3JpZ2luYXRlZEJ5LlRyYW5zYWN0aW9uTnVtYmVyID0gdGhpcy50cmFuc2FjdGlvbk51bWJlcjtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5UYXhNZXRob2RJRCA9IHRoaXMudGF4TWV0aG9kSWQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uRHluYW1pY1N0b2NrTG9va3VwID0gdGhpcy5nZW5lcmF0ZUR5bmFtaWNTdG9ja0xvb2tVcCgpOy8vdG9kb1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLkJhc2tldExhbmd1YWdlSUQgPSB0aGlzLmJhc2tldExhbmd1YWdlSWQ7IC8vdG9kb1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLkJhc2tldENvdW50cnlJRCA9IHRoaXMuYmFza2V0Q291bnRyeUlkOyAvL3RvZG9cclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5CYXNrZXRDdXJyZW5jeUlEID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2VDdXJyZW5jeTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5UcmFkaW5nUmVnaW9uSUQgPSB0aGlzLnRyYWRpbmdSZWdpb25JZDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5FdXJvem9uZSA9IFwiIFwiOy8vdW5rbm93blxyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLkV1cm9CYXNlRXhjaGFuZ2VSYXRlID0gXCJcIjsgLy91bmtub3duXHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uUHJpbnRhYmxlTmFtZSA9IFwiXCI7IC8vdW5rbm93blxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICByak1hcHBlcigpIHtcclxuICAgICAgICBpZiAodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnR5cGUgPT09IFRSQU5TQUNUSU9OX1RZUEUuU0FMRSkge1xyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydQcm9kdWN0U2FsZSddID0gW107XHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ01vZGlmaWVySXRlbSddID0gW107XHJcblxyXG4gICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnByb2R1Y3RzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGxpbmVEaXNjb3VudCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZURpc2NvdW50ICYmIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZURpc2NvdW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBsaW5lRGlzY291bnQgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVEaXNjb3VudC5maWx0ZXIoKHg6IGFueSkgPT4geC5pdGVtTGluZUlkID09PSBlbGVtZW50Lml0ZW1MaW5lSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChsaW5lRGlzY291bnQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZURpc2NvdW50LmluZGV4T2YobGluZURpc2NvdW50WzBdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZURpc2NvdW50LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IHRoaXMuYWRkUHJvZHVjdChlbGVtZW50LCAobGluZURpc2NvdW50Lmxlbmd0aCA+IDAgPyBsaW5lRGlzY291bnRbMF0gOiBudWxsKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydQcm9kdWN0U2FsZSddLnB1c2goZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldE1vZGlmaWVySXRlbShsaW5lRGlzY291bnQubGVuZ3RoID4gMCA/IGxpbmVEaXNjb3VudFswXSA6IG51bGwsIGVsZW1lbnQuaXRlbUxpbmVJZCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnR5cGUgPT09IFRSQU5TQUNUSU9OX1RZUEUuUkVGVU5EKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1Byb2R1Y3RSZXR1cm4nXSA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydNb2RpZmllckl0ZW0nXSA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnByb2R1Y3RzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGRhdGEgPSB0aGlzLnJldHVyblByb2R1Y3QoZWxlbWVudCwgKGVsZW1lbnQuaGFzT3duUHJvcGVydHkoJ2xpbmVEaXNjb3VudCcpID8gZWxlbWVudC5saW5lRGlzY291bnQgOiBudWxsKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydQcm9kdWN0UmV0dXJuJ10ucHVzaChkYXRhKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0TW9kaWZpZXJJdGVtKGVsZW1lbnQubGluZURpc2NvdW50LCBlbGVtZW50Lml0ZW1MaW5lSWQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC50eXBlID09PSBUUkFOU0FDVElPTl9UWVBFLlNBTEVfUkVGVU5EKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1Byb2R1Y3RSZXR1cm4nXSA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydNb2RpZmllckl0ZW0nXSA9IFtdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgbGV0IHRyYW5zYWN0aW9uRG9jOiBhbnkgPSBuZXcgVHJhbnNhY3Rpb25Eb2N1bWVudEJ1aWxkZXIoKS5iYXNrZXQodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHMpLmJ1aWxkKCk7XHJcbiAgICAgICAgICAgIHRyYW5zYWN0aW9uRG9jLmJhc2tldC5wcm9kdWN0cy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBkYXRhID0gdGhpcy5yZXR1cm5Qcm9kdWN0KGVsZW1lbnQsIChlbGVtZW50Lmhhc093blByb3BlcnR5KCdsaW5lRGlzY291bnQnKSA/IGVsZW1lbnQubGluZURpc2NvdW50IDogbnVsbCkpO1xyXG4gICAgICAgICAgICAgICAgbGV0IG9iaiA9IHtcclxuICAgICAgICAgICAgICAgICAgICBcIk9yaWdpbmFsUmVjZWlwdFN1cHBsaWVkXCI6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJPcmlnaW5hbEJyYW5jaElEXCI6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJPcmlnaW5hbFRlcm1pbmFsTnVtYmVyXCI6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJPcmlnaW5hbFRyYW5zYWN0aW9uTnVtYmVyXCI6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJPcmlnaW5hbENhc2hpZXJOdW1iZXJcIjogMFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGRhdGFbJ1JldHVybiddID0gey4uLmRhdGFbJ1JldHVybiddLCAuLi5vYmp9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnUHJvZHVjdFJldHVybiddLnB1c2goZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldE1vZGlmaWVySXRlbShlbGVtZW50LmxpbmVEaXNjb3VudCwgZWxlbWVudC5pdGVtTGluZUlkKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC50eXBlID09PSBUUkFOU0FDVElPTl9UWVBFLlNBTEVfRVhDSEFOR0UpIHtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnUHJvZHVjdFJldHVybiddID0gW107XHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1Byb2R1Y3RTYWxlJ10gPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnTW9kaWZpZXJJdGVtJ10gPSBbXTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGxldCB0cmFuc2FjdGlvbkRvYzogYW55ID0gbmV3IFRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyKCkuYmFza2V0KHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzKS5idWlsZCgpO1xyXG4gICAgICAgICAgICB0cmFuc2FjdGlvbkRvYy5iYXNrZXQucHJvZHVjdHMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5yZWZ1bmRlZFF1YW50aXR5ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZXR1cm5Qcm9kdWN0ID0gdGhpcy5yZXR1cm5Qcm9kdWN0KGVsZW1lbnQsIChlbGVtZW50Lmhhc093blByb3BlcnR5KCdsaW5lRGlzY291bnQnKSA/IGVsZW1lbnQubGluZURpc2NvdW50IDogbnVsbCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBvYmogPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiT3JpZ2luYWxSZWNlaXB0U3VwcGxpZWRcIjogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJPcmlnaW5hbEJyYW5jaElEXCI6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiT3JpZ2luYWxUZXJtaW5hbE51bWJlclwiOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIk9yaWdpbmFsVHJhbnNhY3Rpb25OdW1iZXJcIjogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJPcmlnaW5hbENhc2hpZXJOdW1iZXJcIjogMFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuUHJvZHVjdFsnUmV0dXJuJ10gPSB7Li4ucmV0dXJuUHJvZHVjdFsnUmV0dXJuJ10sIC4uLm9ian07XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnUHJvZHVjdFJldHVybiddLnB1c2gocmV0dXJuUHJvZHVjdCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBhZGRQcm9kdWN0ID0gdGhpcy5hZGRQcm9kdWN0KGVsZW1lbnQsIChlbGVtZW50Lmhhc093blByb3BlcnR5KCdsaW5lRGlzY291bnQnKSA/IGVsZW1lbnQubGluZURpc2NvdW50IDogbnVsbCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1Byb2R1Y3RTYWxlJ10ucHVzaChhZGRQcm9kdWN0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0TW9kaWZpZXJJdGVtKGVsZW1lbnQubGluZURpc2NvdW50LCBlbGVtZW50Lml0ZW1MaW5lSWQpO1xyXG4gICAgICAgICAgICB9KVxyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QmFza2V0RGlzY291bnQoKSB7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnQmFza2V0RGlzY291bnQnXSA9IFtdO1xyXG4gICAgICAgIGlmICghdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50cmFuc2FjdGlvbkRpc2NvdW50KSByZXR1cm4gdGhpcztcclxuXHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50cmFuc2FjdGlvbkRpc2NvdW50LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7fVxyXG4gICAgICAgICAgICBvYmpbJ1hNTFNjaGVtYVZlcnNpb24nXSA9IDE7XHJcbiAgICAgICAgICAgIG9ialsnTmV0VmFsdWUnXSA9IGVsZW1lbnQuZGlzY291bnRBbW91bnQgPCAwID8gZWxlbWVudC5kaXNjb3VudEFtb3VudCA6IC1lbGVtZW50LmRpc2NvdW50QW1vdW50O1xyXG4gICAgICAgICAgICBvYmpbJ0VmZmVjdGl2ZU5ldFZhbHVlJ10gPSBlbGVtZW50LmRpc2NvdW50QW1vdW50IDwgMCA/IGVsZW1lbnQuZGlzY291bnRBbW91bnQgOiAtZWxlbWVudC5kaXNjb3VudEFtb3VudDtcclxuICAgICAgICAgICAgb2JqWydEZXNjcmlwdGlvbiddID0gZWxlbWVudC5yZWFzb25Db2RlO1xyXG4gICAgICAgICAgICBvYmpbJ1VzZXJJRCddID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC51c2VySWQ7XHJcbiAgICAgICAgICAgIG9ialsnUmVhc29uQ29kZUlEJ10gPSBlbGVtZW50LnJlYXNvbkNvZGU7XHJcbiAgICAgICAgICAgIG9ialsnRGlzY291bnRUeXBlJ10gPSBlbGVtZW50LmRpc2NvdW50VHlwZS50b1VwcGVyQ2FzZSgpID09IERJU0NPVU5UVFlQRS5QRVJDRU5ULnRvVXBwZXJDYXNlKCkgPyAwIDogMTsgLy8gdG9kbyAtIGNvbXBhcmUgdmFsdWVzIFxyXG4gICAgICAgICAgICBvYmpbJ1JvdW5kaW5nUnVsZSddID0gMjtcclxuICAgICAgICAgICAgb2JqWydNb2RpZmllZExpbmVOdW1iZXIgJ10gPSBbXTtcclxuXHJcbiAgICAgICAgICAgIGVsZW1lbnQuaXRlbUxpbmVJZHMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ01vZGlmaWVkTGluZU51bWJlciddLnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBvYmpbJ0xpbmVOdW1iZXInXSA9IHRoaXMuZ2VuZXJhdGVMaW5lTnVtYmVyKCk7XHJcblxyXG4gICAgICAgICAgICAvLyBvYmpbJ0Rpc2NvdW50ZWRWYWx1ZSddID0gb2JqWydkaXNjb3VudEFtb3VudCddIC8vIHRvZG8gLSBjb25maXJtIHZhbHVlIGJlZm9yZSBkaXNjb3VudDtcclxuICAgICAgICAgICAgLy8gb2JqWydEaXNjb3VudFBlcmNlbnRhZ2UnXSA9IG9ialsnZGlzY291bnRBbW91bnQnXSAvIDEwMCA7IC8vIHRvZG8gLSBvcHRpb25hbFxyXG5cclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnQmFza2V0RGlzY291bnQnXS5wdXNoKG9iaik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TW9kaWZpZXJJdGVtKGRhdGE6IGFueSwgbGluZU5vOiBhbnkpIHtcclxuICAgICAgICBpZiAoZGF0YSAmJiBsaW5lTm8pIHtcclxuICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge307XHJcbiAgICAgICAgICAgIG9iai5YTUxTY2hlbWFWZXJzaW9uID0gMTtcclxuICAgICAgICAgICAgb2JqLkxpbmVOdW1iZXIgPSB0aGlzLmdlbmVyYXRlTGluZU51bWJlcigpO1xyXG4gICAgICAgICAgICBvYmouTmV0VmFsdWUgPSAwO1xyXG4gICAgICAgICAgICBvYmouRWZmZWN0aXZlTmV0VmFsdWUgPSAwO1xyXG4gICAgICAgICAgICBvYmouRGVzY3JpcHRpb24gPSBkYXRhLnBlcmNlbnRhZ2VEaXNjb3VudFJlYXNvbk5hbWUgPyBkYXRhLnBlcmNlbnRhZ2VEaXNjb3VudFJlYXNvbk5hbWUgOiBkYXRhLnByaWNlT3ZlcnJpZGVSZWFzb25OYW1lO1xyXG4gICAgICAgICAgICBvYmouRGV2aWNlSUQgPSB0aGlzLmRldmljZUlkO1xyXG4gICAgICAgICAgICBvYmouVXNlcklEID0gdGhpcy51c2VySWQ7XHJcbiAgICAgICAgICAgIG9iai5EYXRlVGltZUNyZWF0ZWQgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXBkYXRlZEF0O1xyXG4gICAgICAgICAgICBvYmouQXV0aG9yaXNpbmdVc2VySUQgPSB0aGlzLnVzZXJJZDtcclxuICAgICAgICAgICAgb2JqLlJlYXNvbkNvZGVJRCA9IGRhdGEucGVyY2VudGFnZURpc2NvdW50UmVhc29uQ29kZSA/IGRhdGEucGVyY2VudGFnZURpc2NvdW50UmVhc29uQ29kZSA6IGRhdGEucHJpY2VPdmVycmlkZVJlYXNvbkNvZGU7XHJcbiAgICAgICAgICAgIG9iai5Nb2RpZmllZExpbmVOdW1iZXIgPSBsaW5lTm87XHJcbiAgICAgICAgICAgIG9iai5Nb2RpZmllZEluZGV4ID0gMTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ01vZGlmaWVySXRlbSddLnB1c2gob2JqKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VHJhaWxlckluZm8oKSB7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnVHJhaWxlciddID0ge307XHJcbiAgICAgICAgdGhpcy5yak9iamVjdC5UcmFpbGVyLkRhdGVUaW1lQ29tcGxldGVkID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnVwZGF0ZWRBdDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuQ29tcGxldGVkQnkgPSB7fTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuQ29tcGxldGVkQnkuRGV2aWNlSUQgPSB0aGlzLmRldmljZUlkOyAvL3RvZG9cclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuQ29tcGxldGVkQnkuQ2FzaGllcklEID0gdGhpcy5jYXNoaWVySWQ7IC8vdG9kb1xyXG4gICAgICAgIHRoaXMucmpPYmplY3QuVHJhaWxlci5Db21wbGV0ZWRCeS5TdG9yZUlEID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnN0b3JlSWQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdC5UcmFpbGVyLkNvbXBsZXRlZEJ5LkJyYW5jaElEID0gdGhpcy5icmFuY2hJZDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuQ29tcGxldGVkQnkuVGVybWluYWxOdW1iZXIgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudGVybWluYWxJZDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuVG90YWwgPSB0aGlzLmNvbnZlcnRUb1N0cmluZyh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0U3VtbWFyeS5iYXNrZXRUb3RhbCAqIDEwMCk7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdC5UcmFpbGVyLkl0ZW1Db3VudCA9IHRoaXMuaXRlbUNvdW50OyAvL2dpdmVzIHRvdGFsIGNvdW50IGZvciBwcm9kdWN0XHJcbiAgICAgICAgdGhpcy5yak9iamVjdC5UcmFpbGVyLkl0ZW1RdWFudGl0eSA9IHRoaXMuY29udmVydFRvU3RyaW5nKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRTdW1tYXJ5LnRvdGFsSXRlbXMpO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3QuVHJhaWxlci5OZXRJdGVtUXVhbnRpdHkgPSB0aGlzLmNvbnZlcnRUb1N0cmluZyh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0U3VtbWFyeS50b3RhbEl0ZW1zKTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuVGF4VG90YWwgPSB0aGlzLmNvbnZlcnRUb1N0cmluZyh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0U3VtbWFyeS5WQVRUb3RhbCk7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdC5UcmFpbGVyLlNlcXVlbmNlRGV2aWNlSUQgPSB0aGlzLmRldmljZUlkO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3QuVHJhaWxlci5TZXF1ZW5jZU51bWJlciA9ICdzbnNuJyAvL3N0YXRpYyBmb3Igbm93XHJcblxyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ1RyYWlsZXInXVsnVGF4SXRlbSddID0gW107XHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50YXhCcmVha2Rvd24udGF4TGluZXMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBvYmo6IGFueSA9IHt9O1xyXG5cclxuICAgICAgICAgICAgb2JqWydYTUxTY2hlbWFWZXJzaW9uJ10gPSB0aGlzLnhtbFNjaGVtYVZlcnNpb247XHJcbiAgICAgICAgICAgIG9ialsnVGF4UmF0ZSddID0gZWxlbWVudC5WQVQ7XHJcbiAgICAgICAgICAgIG9ialsnVGF4YWJsZVRvdGFsJ10gPSB0aGlzLmNvbnZlcnRUb1N0cmluZyhlbGVtZW50LnRheGFibGVBbW91bnQpO1xyXG4gICAgICAgICAgICBvYmpbJ1RheFRvdGFsJ10gPSB0aGlzLmNvbnZlcnRUb1N0cmluZyhlbGVtZW50LnRheExpbmVUb3RhbCk7XHJcbiAgICAgICAgICAgIG9ialsnVGF4RGVzY3JpcHRpb24nXSA9IHRoaXMuY29udmVydFRvU3RyaW5nKGVsZW1lbnQuVkFUQ29kZSk7XHJcbiAgICAgICAgICAgIG9ialsnVGF4SW5jbHVkZWQnXSA9ICcxJztcclxuICAgICAgICAgICAgb2JqWydUYXhQZXJjZW50YWdlJ10gPSBlbGVtZW50LlZBVC50b0ZpeGVkKDIpOyAvLyB0b2RvXHJcblxyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydUcmFpbGVyJ11bJ1RheEl0ZW0nXS5wdXNoKG9iailcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gVE9ETzogbWFrZSBUcmFpbGVyIG9iamVjdCBmcm9tIHByb21vdGlvblxyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ1RyYWlsZXInXVsnUHJvbW90aW9uSXRlbSddID0gW107XHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5saW5lUHJvbW90aW9uLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7fTtcclxuXHJcbiAgICAgICAgICAgIG9ialsnUHJvbW90aW9uSUQnXSA9IGVsZW1lbnQucHJvbW90aW9uSWQ7XHJcbiAgICAgICAgICAgIG9ialsnUHJvbW90aW9uU2F2aW5nJ10gPSBlbGVtZW50LnByb21vdGlvbkFtb3VudCA8IDAgPyBlbGVtZW50LnByb21vdGlvbkFtb3VudCA6IC1lbGVtZW50LnByb21vdGlvbkFtb3VudDtcclxuICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25RdWFudGl0eSddID0gXCJcIjsgLy8gdG9kbyAtIG5vdCBhdmFpYWxibGVcclxuICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25EZXNjcmlwdGlvbiddID0gZWxlbWVudC5kaXNwbGF5VGV4dDtcclxuXHJcbiAgICAgICAgICAgIG9ialsnUHJvbW90aW9uSGl0J11bJ1hNTFNjaGVtYVZlcnNpb24nXSA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5zdG9yZUlkO1xyXG4gICAgICAgICAgICBvYmpbJ1Byb21vdGlvbkhpdCddWydIaXROdW1iZXInXSA9IFwiXCIgLy8gdG9kbztcclxuICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25IaXQnXVsnSGl0UXVhbnRpdHknXSA9IFwiXCIgLy8gdG9kbztcclxuICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25IaXQnXVsnSGl0U2F2aW5nJ10gPSBcIlwiIC8vIHRvZG87XHJcblxyXG4gICAgICAgICAgICBvYmpbJ1Byb21vdGlvbkhpdCddWydQcm9tb3Rpb25UcmlnZ2VyJ10gPSBbXTtcclxuXHJcbiAgICAgICAgICAgIGVsZW1lbnQudHJpZ2dlci5mb3JFYWNoKChzdWJFbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBvYmpTdWI6IGFueSA9IHt9O1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBwcm9kdWN0ID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5wcm9kdWN0cy5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0ubGluZUl0ZW1JZCA9PSBzdWJFbGVtZW50Lml0ZW1MaW5lSWQpO1xyXG4gICAgICAgICAgICAgICAgb2JqU3ViWydYTUxTY2hlbWFWZXJzaW9uJ10gPSB0aGlzLnhtbFNjaGVtYVZlcnNpb247XHJcbiAgICAgICAgICAgICAgICBvYmpTdWJbJ1Byb2R1Y3RJRCddID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5wcm9kdWN0cy5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0uaXRlbUxpbmVJZCA9PT0gc3ViRWxlbWVudC5pdGVtTGluZUlkKS5TS1U7XHJcbiAgICAgICAgICAgICAgICBvYmpTdWJbJ1VuaXRWYWx1ZSddID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcoZWxlbWVudC5wcm9tb3Rpb25MaW5lUHJpY2UgLyBwcm9kdWN0LnF1YW50aXR5KTtcclxuICAgICAgICAgICAgICAgIG9ialN1YlsnTGluZU51bWJlciddID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcoc3ViRWxlbWVudC5pdGVtTGluZUlkKTtcclxuICAgICAgICAgICAgICAgIG9ialN1YlsnUXVhbnRpdHknXSA9IHRoaXMuY29udmVydFRvU3RyaW5nKHN1YkVsZW1lbnQucXVhbnRpdHkudG9GaXhlZCgxKSk7XHJcbiAgICAgICAgICAgICAgICBvYmpTdWJbJ1RheENvZGUnXSA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudGF4QnJlYWtkb3duLnRheExpbmVzLmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbS5pdGVtTGluZUlkID09IGVsZW1lbnQuaXRlbUxpbmVJZCkuVkFUQ29kZTsgLy8gdG9kb1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25IaXQnXVsnUHJvbW90aW9uVHJpZ2dlciddLnB1c2gob2JqU3ViKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydUcmFpbGVyJ11bJ1Byb21vdGlvbkl0ZW0nXS5wdXNoKG9iaik7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5yak9iamVjdCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VGVuZGVySW5mbygpIHtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydDYXNoVGVuZGVyJ10gPSBbXTtcclxuICAgICAgICBpZiAodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnBheW1lbnREZXRhaWxzICYmIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5wYXltZW50RGV0YWlscy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5wYXltZW50RGV0YWlscy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IHRoaXMucGF5bWVudFR5cGVzLmZpbHRlcih4ID0+IHgucGF5bWVudFR5cGUudG9VcHBlckNhc2UoKSA9PT0gZWxlbWVudC5wYXltZW50VHlwZS50b1VwcGVyQ2FzZSgpKTtcclxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnBheW1lbnRUeXBlLnRvVXBwZXJDYXNlKCkgPT09ICdHSUZUIENBUkQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9iaiA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgWE1MU2NoZW1hVmVyc2lvbjogdGhpcy54bWxTY2hlbWFWZXJzaW9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBMaW5lTnVtYmVyOiB0aGlzLmdlbmVyYXRlTGluZU51bWJlcigpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBOZXRWYWx1ZTogdGhpcy5jb252ZXJ0VG9TdHJpbmcoLTEgKiB0aGlzLnJlbW92ZURlY2ltYWwoKE1hdGgucm91bmQoZWxlbWVudC5hbW91bnQpKSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBFZmZlY3RpdmVOZXRWYWx1ZTogdGhpcy5jb252ZXJ0VG9TdHJpbmcoLTEgKiB0aGlzLnJlbW92ZURlY2ltYWwoKE1hdGgucm91bmQoZWxlbWVudC5hbW91bnQpKSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbjogdGhpcy5nZXREZXNjcmlwdGlvbih2YWx1ZVswXS5wYXltZW50VHlwZSwgZWxlbWVudCksLy90b2RvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIERldmljZUlEOiB0aGlzLmRldmljZUlkLC8vdG9kb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQ6IHRoaXMudXNlcklkLC8vdG9kb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBEYXRlVGltZUNyZWF0ZWQ6IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC51cGRhdGVkQXQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRlbmRlclR5cGU6IHZhbHVlWzBdLnRlbmRlclR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRlbmRlclN1YlR5cGU6IHZhbHVlWzBdLnRlbmRlclN1YlR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRlbmRlckFtb3VudDogdGhpcy5jb252ZXJ0VG9TdHJpbmcoLTEgKiB0aGlzLnJlbW92ZURlY2ltYWwoKE1hdGgucm91bmQoZWxlbWVudC5hbW91bnQpKSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBDdXJyZW5jeUlEOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFzZUN1cnJlbmN5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBDdXJyZW5jeURlc2NyaXB0aW9uOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFzZUN1cnJlbmN5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBHaWZ0Vm91Y2hlclNhbGVzQWxsb3dlZDogJycsLy90b2RvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93UmVjaGFyZ2VhYmxlVm91Y2hlclNhbGVzOiAnJywvL3RvZG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgR2lmdFZvdWNoZXJJRDogJydcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnQ2FzaFRlbmRlciddLnB1c2gob2JqKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9iajEgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFhNTFNjaGVtYVZlcnNpb246IFwiMVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBMaW5lTnVtYmVyOiB0aGlzLmdlbmVyYXRlTGluZU51bWJlcigpLC8vdG9kb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBOZXRWYWx1ZTogSlNPTi5zdHJpbmdpZnkoLTEgKiAoTWF0aC5yb3VuZChlbGVtZW50LmFtb3VudCkpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgRWZmZWN0aXZlTmV0VmFsdWU6IEpTT04uc3RyaW5naWZ5KC0xICogKE1hdGgucm91bmQoZWxlbWVudC5hbW91bnQpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uOiB0aGlzLmdldERlc2NyaXB0aW9uKHZhbHVlWzBdLnBheW1lbnRUeXBlLCBlbGVtZW50KSwvL3RvZG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgRGV2aWNlSUQ6IHRoaXMuZGV2aWNlSWQsLy90b2RvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRDogdGhpcy51c2VySWQsLy90b2RvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIERhdGVUaW1lQ3JlYXRlZDogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnVwZGF0ZWRBdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgVGVuZGVyVHlwZTogdmFsdWVbMF0udGVuZGVyVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgVGVuZGVyU3ViVHlwZTogdmFsdWVbMF0udGVuZGVyU3ViVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgVGVuZGVyQW1vdW50OiBKU09OLnN0cmluZ2lmeSgtMSAqIChNYXRoLnJvdW5kKGVsZW1lbnQuYW1vdW50KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBDdXJyZW5jeUlEOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFzZUN1cnJlbmN5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBDdXJyZW5jeURlc2NyaXB0aW9uOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFzZUN1cnJlbmN5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBJbmNsdWRlSW5UcmFuc2FjdGlvblRvdGFsQ2hlY2s6IFwiMVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBBbGxvd1JlY2hhcmdlYWJsZVZvdWNoZXJTYWxlczogXCIxXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE9wZW5EcmF3ZXJBdEVuZDogXCIxXCJcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnQ2FzaFRlbmRlciddLnB1c2gob2JqMSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHNldExpbmVOdW1iZXJGb3JQcm9kdWN0cygpIHtcclxuICAgICAgICBsZXQgaXRlbUxpbmVJZEFycmF5ID0gW107XHJcbiAgICAgICAgaXRlbUxpbmVJZEFycmF5ID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5wcm9kdWN0cy5tYXAoKHByb2R1Y3Q6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQocHJvZHVjdC5pdGVtTGluZUlkKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMubGFyZ2VzdE51bWJlciA9IGl0ZW1MaW5lSWRBcnJheS5yZWR1Y2UoKGE6IGFueSwgYjogYW55KSA9PiBNYXRoLm1heChhLCBiKSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2VuZXJhdGVMaW5lTnVtYmVyKCkge1xyXG4gICAgICAgIHRoaXMubGFyZ2VzdE51bWJlciArPSAxO1xyXG4gICAgICAgIHRoaXMuaXRlbUNvdW50ICs9IDE7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGFyZ2VzdE51bWJlcjtcclxuICAgIH1cclxuXHJcbiAgICBpbml0aWxpemVJdGVtQ291bnQoKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtQ291bnQgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnByb2R1Y3RzLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICBidWlsZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yak9iamVjdDtcclxuICAgIH1cclxuXHJcbiAgICBnZXREZXNjcmlwdGlvbihwYXltZW50VHlwZTogc3RyaW5nLCBlbGVtZW50OiBhbnkpIHtcclxuICAgICAgICBpZiAocGF5bWVudFR5cGUudG9VcHBlckNhc2UoKSA9PT0gJ0NBUkQnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50LmNhcmRUeXBlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gcGF5bWVudFR5cGVcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0RGV2aWNlSW5mbyhpZDogYW55KSB7XHJcbiAgICAgICAgdGhpcy5kZXZpY2VJZCA9IGlkXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXRVc2VySW5mbyhpZDogYW55KSB7XHJcbiAgICAgICAgdGhpcy51c2VySWQgPSBpZDtcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZURlY2ltYWwodmFsdWU6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZSAqIDEwMDtcclxuICAgIH1cclxuXHJcbiAgICBzZXRUcmFuc2FjdGlvbk51bWJlcih2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbk51bWJlciA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0TWFuaWZlc3RWZXJzaW9uKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLm1hbmlmZXN0VmVyc2lvbiA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0RGF0YWJhc2VTY2hlbWFWZXJzaW9uKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmRhdGFiYXNlU2NoZW1hVmVyc2lvbiA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0QmFza2V0VHlwZSh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5iYXNrZXRUeXBlID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXRUcmFkaW5nUmVnaW9uSUQodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMudHJhZGluZ1JlZ2lvbklkID0gdmFsdWVcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIHNldENvbXBhbnlJRCh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5jb21wYW55SWQgPSB2YWx1ZVxyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VGF4TWV0aG9kSUQodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMudGF4TWV0aG9kSWQgPSB2YWx1ZVxyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0TWFqb3JWZXJzaW9uKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLm1ham9yVmVyc2lvbiA9IHZhbHVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXRNaW5vclZlcnNpb24odmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMubWlub3JWZXJzaW9uID0gdmFsdWVcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIHNldFhNTFNjaGVtYVZlcnNpb24odmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMueG1sU2NoZW1hVmVyc2lvbiA9IHZhbHVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXRFeHRlcm5hbFN0YXRlKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmV4dGVybmFsU3RhdGUgPSB2YWx1ZVxyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0Q2FzaGllcklEKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmNhc2hpZXJJZCA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VGVybWluYWxOdW1iZXIodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMudGVybWluYWxOdW1iZXIgPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBzZXRCYXNrZXRMYW5ndWFnZUlEKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmJhc2tldExhbmd1YWdlSWQgPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHNldEJhc2tldENvdW50cnlJRCh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5iYXNrZXRDb3VudHJ5SWQgPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBzZXRCYXNrZXRDdXJyZW5jeUlEKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmJhc2tldEN1cnJlbmN5SWQgPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBzZXRCcmFuY2hJRCh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5icmFuY2hJZCA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGdlbmVyYXRlSWQoZGF0ZTogYW55KSB7XHJcbiAgICAgICAgbGV0IG5ld0RhdGVUaW1lID0gZGF0ZS5yZXBsYWNlKC9bXjAtOV0vZywgJycpXHJcbiAgICAgICAgbGV0IGlkID0gKHRoaXMuZGV2aWNlSWQgKyAnfCcgKyBuZXdEYXRlVGltZSArICd8JyArIHRoaXMudHJhbnNhY3Rpb25OdW1iZXIpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgcmV0dXJuIGlkO1xyXG4gICAgfVxyXG5cclxuICAgIGdlbmVyYXRlVGltZXpvbmVvZmZzZXQoZGF0ZTogYW55KSB7XHJcbiAgICAgICAgbGV0IHggPSBkYXRlID8gZGF0ZSA6ICcnO1xyXG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSh4KS5nZXRUaW1lem9uZU9mZnNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdlbmVyYXRlS2V5d29yZCgpIHtcclxuICAgICAgICBsZXQgeCA9ICh0aGlzLmNvbXBhbnlJZCArICd8JyArIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5zdG9yZUlkICsgJ3wnICsgdGhpcy50ZXJtaW5hbE51bWJlciArICd8JyArIHRoaXMudHJhbnNhY3Rpb25OdW1iZXIpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgcmV0dXJuIHg7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3RhdGUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5vcGVyYXRpb25TdGF0dXMgPT09ICdQQVlfU1VDQ0VTUycpIHtcclxuICAgICAgICAgICAgcmV0dXJuICdDb21wbGV0ZWQnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuICdDYW5jZWxsZWQnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm5Qcm9kdWN0KGVsZW1lbnQ6IGFueSwgbGluZURpc2NvdW50OiBMaW5lRGlzY291bnQpIHtcclxuICAgICAgICBsZXQgb2JqOiBhbnkgPSB7fVxyXG4gICAgICAgIG9ialsnWE1MU2NoZW1hVmVyc2lvbiddID0gdGhpcy54bWxTY2hlbWFWZXJzaW9uO1xyXG4gICAgICAgIG9ialsnTGluZU51bWJlciddID0gZWxlbWVudFsnaXRlbUxpbmVJZCddO1xyXG4gICAgICAgIG9ialsnTmV0VmFsdWUnXSA9IHRoaXMucmVtb3ZlRGVjaW1hbChlbGVtZW50WydyZWZ1bmRlZFRvdGFsJ10pO1xyXG4gICAgICAgIG9ialsnRWZmZWN0aXZlTmV0VmFsdWUnXSA9IHRoaXMucmVtb3ZlRGVjaW1hbChlbGVtZW50WydyZWZ1bmRlZFRvdGFsJ10pO1xyXG4gICAgICAgIG9ialsnRGVzY3JpcHRpb24nXSA9IGVsZW1lbnRbJ2Rlc2NyaXB0aW9uJ107XHJcbiAgICAgICAgb2JqWydEZXZpY2VJRCddID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50Wyd0ZXJtaW5hbElkJ107XHJcbiAgICAgICAgb2JqWydVc2VySUQnXSA9IHRoaXMudXNlcklkO1xyXG4gICAgICAgIG9ialsnRGF0ZVRpbWVDcmVhdGVkJ10gPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnRbJ2NyZWF0ZWRBdCddO1xyXG4gICAgICAgIG9ialsnRXh0ZW5kZWRWYWx1ZSddID0gdGhpcy5yZW1vdmVEZWNpbWFsKGVsZW1lbnRbJ3RvdGFsTGluZVByaWNlJ10qLTEpO1xyXG4gICAgICAgIG9ialsnVW5pdFByaWNlJ10gPSB0aGlzLnJlbW92ZURlY2ltYWwoZWxlbWVudFsncHJpY2UnXSk7XHJcbiAgICAgICAgb2JqWydRdWFudGl0eSddID0gZWxlbWVudFsncmVmdW5kZWRRdWFudGl0eSddIDwgMCA/IGVsZW1lbnRbJ3JlZnVuZGVkUXVhbnRpdHknXS50b0ZpeGVkKDEpIDogLWVsZW1lbnRbJ3JlZnVuZGVkUXVhbnRpdHknXS50b0ZpeGVkKDEpO1xyXG4gICAgICAgIG9ialsnT3JpZ2luYWxUYXhBbW91bnRTZXQnXSA9IDE7XHJcbiAgICAgICAgb2JqWydQcm9kdWN0SUQnXSA9IGVsZW1lbnRbJ1NLVSddO1xyXG4gICAgICAgIG9ialsnSGFuZEtleWVkJ10gPSAxO1xyXG4gICAgICAgIG9ialsnTG9uZ0Rlc2NyaXB0aW9uJ10gPSBlbGVtZW50WydkZXNjcmlwdGlvbiddO1xyXG4gICAgICAgIG9ialsnUmV0dXJuJ10gPSB7fTtcclxuICAgICAgICBvYmpbJ1JldHVybiddWydSZXR1cm5SZWFzb25JRCddID0gZWxlbWVudFsncmVmdW5kZWRSZWFzb24nXTtcclxuICAgICAgICBvYmpbJ1JldHVybiddWydSZXR1cm5EZXNjcmlwdGlvbiddID0gZWxlbWVudFsncmVmdW5kZWRSZWFzb25EZXNjcmlwdGlvbiddO1xyXG4gICAgICAgIG9ialsnUmV0dXJuJ11bJ1JldHVyblRvU3RvY2snXSA9IGVsZW1lbnRbJ3JlZnVuZGVkUXVhbnRpdHknXSA+IDAgPyBlbGVtZW50WydyZWZ1bmRlZFF1YW50aXR5J10udG9GaXhlZCgxKSA6IC0xICogZWxlbWVudFsncmVmdW5kZWRRdWFudGl0eSddLnRvRml4ZWQoMSk7XHJcbiAgICAgICAgb2JqWydUYXhDb2RlJ10gPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0Wyd0YXhCcmVha2Rvd24nXVsndGF4TGluZXMnXS5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0uaXRlbUxpbmVJZCA9PSBlbGVtZW50WydpdGVtTGluZUlkJ10pLlZBVENvZGU7XHJcblxyXG4gICAgICAgIG9ialsnRGlzcGxheVRheENvZGUnXSA9ICcnOyAvLyB0b2RvXHJcbiAgICAgICAgb2JqWydQcm9kdWN0QXR0cmlidXRlcyddID0gJyc7IC8vdG9kbyAtIG5vdCByZXF1aXJlZFxyXG4gICAgICAgIG9ialsnUGVyaXNoYWJsZSddID0gdGhpcy5nZXRBdHRyaWJ1dGVzKCk7XHJcbiAgICAgICAgb2JqWydNTUdyb3VwSUQnXSA9IHRoaXMuZ2V0QXR0cmlidXRlcygpO1xyXG4gICAgICAgIG9ialsnQ3VzdG9tZXJEZXRhaWxzJ10gPSBcIlwiOyAvLyB0b2RvIC0gYmxhbmtcclxuICAgICAgICBvYmpbJ1RvdGFsUHJvbW90aW9uU2F2aW5nJ10gPSBlbGVtZW50Wydwcm9tb3Rpb25BbW91bnQnXSB8fCAtMTsgLy8gVE9ET1xyXG4gICAgICAgIGxldCB0YXhUb3RhbCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRbJ3RheEJyZWFrZG93biddWyd0YXhMaW5lcyddLmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbS5pdGVtTGluZUlkID09IGVsZW1lbnRbJ2l0ZW1MaW5lSWQnXSk7XHJcbiAgICAgICAgb2JqWydPcmlnaW5hbFRheEFtb3VudCddID0gdGF4VG90YWwudGF4TGluZVRvdGFsIDwgMCA/IHRoaXMucmVtb3ZlRGVjaW1hbCh0YXhUb3RhbC50YXhMaW5lVG90YWwpIDogdGhpcy5yZW1vdmVEZWNpbWFsKC10YXhUb3RhbC50YXhMaW5lVG90YWwpOyAvL3RvZG9cclxuICAgICAgICBvYmpbJ3RheEFtb3VudCddID0gdGF4VG90YWwudGF4TGluZVRvdGFsIDwgMCA/IHRoaXMucmVtb3ZlRGVjaW1hbCh0YXhUb3RhbC50YXhMaW5lVG90YWwpIDogdGhpcy5yZW1vdmVEZWNpbWFsKC10YXhUb3RhbC50YXhMaW5lVG90YWwpO1xyXG5cclxuICAgICAgICBpZiAobGluZURpc2NvdW50KSB7XHJcbiAgICAgICAgICAgIGlmIChsaW5lRGlzY291bnQucGVyY2VudGFnZURpc2NvdW50UmVhc29uTmFtZSAmJiBsaW5lRGlzY291bnQucGVyY2VudGFnZURpc2NvdW50UmVhc29uQ29kZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gbGluZSBkaXNjb3VudFxyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddID0ge307XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uTW9kaWZpZXJWYWx1ZSA9IHRoaXMucmVtb3ZlRGVjaW1hbChsaW5lRGlzY291bnQudW5pdFByaWNlKSAqIC0xO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLk1vZGlmaWVyRGF0ZVRpbWUgPSBvYmouRGF0ZVRpbWVDcmVhdGVkO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLk1vZGlmaWVyUmVhc29uSUQgPSBsaW5lRGlzY291bnQucGVyY2VudGFnZURpc2NvdW50UmVhc29uQ29kZTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5Nb2RpZmllckRlc2NyaXB0aW9uID0gbGluZURpc2NvdW50LnBlcmNlbnRhZ2VEaXNjb3VudFJlYXNvbk5hbWU7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uQXV0aG9yaXNpbmdVc2VySUQgPSB0aGlzLnVzZXJJZDtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5EaXNjb3VudFR5cGUgPSBsaW5lRGlzY291bnQuZGlzY291bnRUeXBlO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLlhNTFNjaGVtYVZlcnNpb24gPSAxO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLk9yaWdpbmFsUHJpY2UgPSB0aGlzLnJlbW92ZURlY2ltYWwobGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50ICsgKGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlIHx8IDApKTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5EaXNjb3VudGVkVmFsdWUgPSB0aGlzLnJlbW92ZURlY2ltYWwobGluZURpc2NvdW50LnVuaXRQcmljZSk7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uRGlzY291bnRQZXJjZW50YWdlID0gbGluZURpc2NvdW50LnBlcmNlbnRhZ2VEaXNjb3VudFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLlJvdW5kaW5nUnVsZSA9IDI7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChsaW5lRGlzY291bnQucHJpY2VPdmVycmlkZVJlYXNvbkNvZGUgJiYgbGluZURpc2NvdW50LnByaWNlT3ZlcnJpZGVSZWFzb25OYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAvL3ByaWNlIG92ZXJyaWRlXHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uTW9kaWZpZXJWYWx1ZSA9IHRoaXMucmVtb3ZlRGVjaW1hbChsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQpICogLTE7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5Nb2RpZmllckRhdGVUaW1lID0gb2JqLkRhdGVUaW1lQ3JlYXRlZDtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLk1vZGlmaWVyUmVhc29uSUQgPSBsaW5lRGlzY291bnQucHJpY2VPdmVycmlkZVJlYXNvbkNvZGU7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5Nb2RpZmllclJlYXNvbkRlc2NyaXB0aW9uID0gbGluZURpc2NvdW50LnByaWNlT3ZlcnJpZGVSZWFzb25OYW1lO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uQXV0aG9yaXNpbmdVc2VySUQgPSB0aGlzLnVzZXJJZDtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLlhNTFNjaGVtYVZlcnNpb24gPSAxO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uTmV3UHJpY2UgPSB0aGlzLnJlbW92ZURlY2ltYWwobGluZURpc2NvdW50LnVuaXRQcmljZSk7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5PcmlnaW5hbFByaWNlID0gdGhpcy5yZW1vdmVEZWNpbWFsKGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlIHx8IDAgKyBsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL3VwZGF0ZSB0aGUgcHJvZHVjdCBwcmljZVxyXG4gICAgICAgICAgICBvYmouTmV0VmFsdWUgPSAoKGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlIHx8IDApICsgbGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50KSAqIC0xO1xyXG4gICAgICAgICAgICBvYmouRWZmZWN0aXZlTmV0VmFsdWUgPSAoKGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlIHx8IDApICsgbGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50KSAqIC0xO1xyXG4gICAgICAgICAgICBvYmouRXh0ZW5kZWRWYWx1ZSA9ICgobGluZURpc2NvdW50LmRpc2NvdW50ZWRMaW5lUHJpY2UgfHwgMCkgKyBsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQpICogLTE7XHJcbiAgICAgICAgICAgIG9iai5Vbml0UHJpY2UgPSAoKGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlIHx8IDApICsgbGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50KSAqIC0xO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG9iajtcclxuICAgIH1cclxuXHJcbiAgICBhZGRQcm9kdWN0KGVsZW1lbnQ6IFRQcm9kdWN0LCBsaW5lRGlzY291bnQ6IExpbmVEaXNjb3VudCkge1xyXG4gICAgICAgIGxldCB0YXhUb3RhbCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRbJ3RheEJyZWFrZG93biddWyd0YXhMaW5lcyddLmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbS5pdGVtTGluZUlkID09IGVsZW1lbnRbJ2l0ZW1MaW5lSWQnXSk7XHJcbiAgICAgICAgbGV0IG9iajogYW55ID0ge1xyXG4gICAgICAgICAgICBYTUxTY2hlbWFWZXJzaW9uOiB0aGlzLnhtbFNjaGVtYVZlcnNpb24sXHJcbiAgICAgICAgICAgIExpbmVOdW1iZXI6IGVsZW1lbnQuaXRlbUxpbmVJZCxcclxuICAgICAgICAgICAgTmV0VmFsdWU6IHRoaXMucmVtb3ZlRGVjaW1hbChlbGVtZW50LnRvdGFsTGluZVByaWNlKSxcclxuICAgICAgICAgICAgRWZmZWN0aXZlTmV0VmFsdWU6IHRoaXMucmVtb3ZlRGVjaW1hbChlbGVtZW50LnRvdGFsTGluZVByaWNlKSxcclxuICAgICAgICAgICAgRGVzY3JpcHRpb246IGVsZW1lbnQuZGVzY3JpcHRpb24sXHJcbiAgICAgICAgICAgIERldmljZUlEOiB0aGlzLmRldmljZUlkLCAvL3RvIGRvXHJcbiAgICAgICAgICAgIFVzZXJJRDogdGhpcy51c2VySWQsLy90byBkbyxcclxuICAgICAgICAgICAgRGF0ZVRpbWVDcmVhdGVkOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3JlYXRlZEF0LFxyXG4gICAgICAgICAgICBFeHRlbmRlZFZhbHVlOiB0aGlzLnJlbW92ZURlY2ltYWwoZWxlbWVudC5wcmljZSksXHJcbiAgICAgICAgICAgIFVuaXRQcmljZTogdGhpcy5yZW1vdmVEZWNpbWFsKGVsZW1lbnQucHJpY2UpLFxyXG4gICAgICAgICAgICBNTUdyb3VwSUQ6IHRoaXMuZ2V0QXR0cmlidXRlcygpLCAvL3RvZG9cclxuICAgICAgICAgICAgUXVhbnRpdHk6IGVsZW1lbnQucXVhbnRpdHkudG9GaXhlZCgxKSxcclxuICAgICAgICAgICAgU2FsZXNwZXJzb25JRDogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnVzZXJJZCxcclxuICAgICAgICAgICAgU2FsZXNwZXJzb25OYW1lOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXNlck5hbWUsXHJcbiAgICAgICAgICAgIFRheENvZGU6IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRbJ3RheEJyZWFrZG93biddWyd0YXhMaW5lcyddLmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbS5pdGVtTGluZUlkID09IGVsZW1lbnRbJ2l0ZW1MaW5lSWQnXSkuVkFUQ29kZSxcclxuICAgICAgICAgICAgVGF4TW9kaWZpYWJsZTogMSwgLy90b2RvXHJcbiAgICAgICAgICAgIE9yaWdpbmFsVGF4QW1vdW50IDogdGF4VG90YWwudGF4TGluZVRvdGFsIDwgMCA/IHRoaXMucmVtb3ZlRGVjaW1hbCh0YXhUb3RhbC50YXhMaW5lVG90YWwpIDogdGhpcy5yZW1vdmVEZWNpbWFsKC10YXhUb3RhbC50YXhMaW5lVG90YWwpLFxyXG4gICAgICAgICAgICBUYXhBbW91bnQgOiB0YXhUb3RhbC50YXhMaW5lVG90YWwgPCAwID8gdGhpcy5yZW1vdmVEZWNpbWFsKHRheFRvdGFsLnRheExpbmVUb3RhbCkgOiB0aGlzLnJlbW92ZURlY2ltYWwoLXRheFRvdGFsLnRheExpbmVUb3RhbCksXHJcbiAgICAgICAgICAgIE9yaWdpbmFsVGF4QW1vdW50U2V0OiAxLC8vdG9kb1xyXG4gICAgICAgICAgICBQcm9kdWN0SUQ6IGVsZW1lbnQuU0tVLFxyXG4gICAgICAgICAgICBIYW5kS2V5ZWQ6IDEsLy90b2RvXHJcbiAgICAgICAgICAgIEN1c3RvbWVyRGV0YWlsczogXCJcIixcclxuICAgICAgICAgICAgUGVyaXNoYWJsZTogdGhpcy5nZXRBdHRyaWJ1dGVzKClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxpbmVEaXNjb3VudCkge1xyXG4gICAgICAgICAgICBpZiAobGluZURpc2NvdW50LnBlcmNlbnRhZ2VEaXNjb3VudFJlYXNvbk5hbWUgJiYgbGluZURpc2NvdW50LnBlcmNlbnRhZ2VEaXNjb3VudFJlYXNvbkNvZGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGxpbmUgZGlzY291bnRcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLk1vZGlmaWVyVmFsdWUgPSB0aGlzLnJlbW92ZURlY2ltYWwobGluZURpc2NvdW50LnVuaXRQcmljZSkgKiAtMTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5Nb2RpZmllckRhdGVUaW1lID0gb2JqLkRhdGVUaW1lQ3JlYXRlZDtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5Nb2RpZmllclJlYXNvbklEID0gbGluZURpc2NvdW50LnBlcmNlbnRhZ2VEaXNjb3VudFJlYXNvbkNvZGU7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uTW9kaWZpZXJEZXNjcmlwdGlvbiA9IGxpbmVEaXNjb3VudC5wZXJjZW50YWdlRGlzY291bnRSZWFzb25OYW1lO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLkF1dGhvcmlzaW5nVXNlcklEID0gdGhpcy51c2VySWQ7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uRGlzY291bnRUeXBlID0gbGluZURpc2NvdW50LmRpc2NvdW50VHlwZTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5YTUxTY2hlbWFWZXJzaW9uID0gMTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5PcmlnaW5hbFByaWNlID0gdGhpcy5yZW1vdmVEZWNpbWFsKGxpbmVEaXNjb3VudC5kaXNjb3VudEFtb3VudCArIChsaW5lRGlzY291bnQuZGlzY291bnRlZExpbmVQcmljZSB8fCAwKSk7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uRGlzY291bnRlZFZhbHVlID0gdGhpcy5yZW1vdmVEZWNpbWFsKGxpbmVEaXNjb3VudC51bml0UHJpY2UpO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLkRpc2NvdW50UGVyY2VudGFnZSA9IGxpbmVEaXNjb3VudC5wZXJjZW50YWdlRGlzY291bnRWYWx1ZTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5Sb3VuZGluZ1J1bGUgPSAyO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAobGluZURpc2NvdW50LnByaWNlT3ZlcnJpZGVSZWFzb25Db2RlICYmIGxpbmVEaXNjb3VudC5wcmljZU92ZXJyaWRlUmVhc29uTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgLy9wcmljZSBvdmVycmlkZVxyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10gPSB7fTtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLk1vZGlmaWVyVmFsdWUgPSB0aGlzLnJlbW92ZURlY2ltYWwobGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50KSAqIC0xO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uTW9kaWZpZXJEYXRlVGltZSA9IG9iai5EYXRlVGltZUNyZWF0ZWQ7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5Nb2RpZmllclJlYXNvbklEID0gbGluZURpc2NvdW50LnByaWNlT3ZlcnJpZGVSZWFzb25Db2RlO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uTW9kaWZpZXJSZWFzb25EZXNjcmlwdGlvbiA9IGxpbmVEaXNjb3VudC5wcmljZU92ZXJyaWRlUmVhc29uTmFtZTtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLkF1dGhvcmlzaW5nVXNlcklEID0gdGhpcy51c2VySWQ7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5YTUxTY2hlbWFWZXJzaW9uID0gMTtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLk5ld1ByaWNlID0gdGhpcy5yZW1vdmVEZWNpbWFsKGxpbmVEaXNjb3VudC51bml0UHJpY2UpO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uT3JpZ2luYWxQcmljZSA9IHRoaXMucmVtb3ZlRGVjaW1hbChsaW5lRGlzY291bnQuZGlzY291bnRlZExpbmVQcmljZSB8fCAwICsgbGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy91cGRhdGUgdGhlIHByb2R1Y3QgcHJpY2VcclxuICAgICAgICAgICAgb2JqWydOZXRWYWx1ZSddID0gKChsaW5lRGlzY291bnQuZGlzY291bnRlZExpbmVQcmljZSB8fCAwKSArIGxpbmVEaXNjb3VudC5kaXNjb3VudEFtb3VudCk7XHJcbiAgICAgICAgICAgIG9ialsnRWZmZWN0aXZlTmV0VmFsdWUnXSA9ICgobGluZURpc2NvdW50LmRpc2NvdW50ZWRMaW5lUHJpY2UgfHwgMCkgKyBsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQpO1xyXG4gICAgICAgICAgICBvYmpbJ0V4dGVuZGVkVmFsdWUnXSA9ICgobGluZURpc2NvdW50LmRpc2NvdW50ZWRMaW5lUHJpY2UgfHwgMCkgKyBsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQpO1xyXG4gICAgICAgICAgICBvYmpbJ1VuaXRQcmljZSddID0gKChsaW5lRGlzY291bnQuZGlzY291bnRlZExpbmVQcmljZSB8fCAwKSArIGxpbmVEaXNjb3VudC5kaXNjb3VudEFtb3VudCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gb2JqO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnZlcnRUb1N0cmluZyh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdmFsdWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2codmFsdWUsICcgY2FuIG5vdCBiZSBjb252ZXJ0ZWQgaW4gc3RyaW5nJywgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdlbmVyYXRlRHluYW1pY1N0b2NrTG9va1VwKCkge1xyXG4gICAgICAgIGxldCB4ID0gJzAnO1xyXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQucHJvZHVjdHMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmRlbGl2ZXJ5TWV0aG9kID09PSAnMScgfHwgZWxlbWVudC5kZWxpdmVyeU1ldGhvZCA9PT0gJzInKSB7XHJcbiAgICAgICAgICAgICAgICB4ID0gJzEnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHg7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QXR0cmlidXRlcygpe1xyXG4gICAgICAgIGxldCBuYW1lOiBzdHJpbmcgfCBhbnlbXSA9IFtdXHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5wcm9kdWN0cy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKCBlbGVtZW50LmF0dHJpYnV0ZXMgJiYgZWxlbWVudC5hdHRyaWJ1dGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIG5hbWUgPSBlbGVtZW50LmF0dHJpYnV0ZXMuZmlsdGVyKCh4OiBhbnkpID0+IHgubmFtZS50b1VwcGVyQ2FzZSgpID09PSBlbGVtZW50Lm5hbWUudG9VcHBlckNhc2UoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAobmFtZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuYW1lWzBdLnZhbHVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIHJldHVybiBcIlwiXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59Il19
1340
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUkotbWFwcGVyLmNsYXNzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHBtY3JldGFpbC9tYXBwZXItbGlicmFyeS8iLCJzb3VyY2VzIjpbImxpYi9SSi1tYXBwZXIuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBK0MsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUNwSCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRTtJQThCSSw4QkFBWSxjQUFvQztRQVR4QyxjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2Qsa0JBQWEsR0FBRyxDQUFDLENBQUM7UUFJbEIsYUFBUSxHQUFRLEVBQUUsQ0FBQTtRQUt0QixJQUFJLGNBQWMsRUFBRTtZQUNoQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsY0FBYyxDQUFDO1NBQzdDO2FBQU07WUFDSCxJQUFJLENBQUMsbUJBQW1CLEdBQUc7Z0JBQ3ZCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixvQkFBb0IsRUFBRSxFQUFFO2dCQUN4QixjQUFjLEVBQUUsRUFBRTtnQkFDbEIsUUFBUSxFQUFFLEVBQUU7Z0JBQ1osT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsV0FBVyxFQUFFLEVBQUU7Z0JBQ2Ysa0JBQWtCLEVBQUUsRUFBRTtnQkFDdEIsUUFBUSxFQUFFLEVBQUU7Z0JBQ1osVUFBVSxFQUFFLEVBQUU7Z0JBQ2QsTUFBTSxFQUFFLEVBQUU7Z0JBQ1YsZ0JBQWdCLEVBQUUsU0FBUztnQkFDM0IsTUFBTSxFQUFFLEtBQUs7Z0JBQ2IsTUFBTSxFQUFFLG1CQUFBLEVBQUUsRUFBTztnQkFDakIsYUFBYSxFQUFFLG1CQUFBLEVBQUUsRUFBTztnQkFDeEIsWUFBWSxFQUFFLEVBQUU7Z0JBQ2hCLElBQUksRUFBRSxFQUFFO2dCQUNSLGVBQWUsRUFBRSxFQUFFO2dCQUNuQixTQUFTLEVBQUUsRUFBRTtnQkFDYixTQUFT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QkFBQztBQUFELENBQUMsQUFwc0JELElBb3NCQzs7Ozs7OztJQWxzQkcsbURBQWlEOzs7OztJQUNqRCxzQ0FBb0I7Ozs7O0lBQ3BCLHdDQUFzQjs7Ozs7SUFDdEIsaURBQStCOzs7OztJQUMvQiwrQ0FBNkI7Ozs7O0lBQzdCLHFEQUFtQzs7Ozs7SUFDbkMsMENBQXdCOzs7OztJQUN4QixnREFBOEI7Ozs7O0lBQzlCLDRDQUEwQjs7Ozs7SUFDMUIsNENBQTBCOzs7OztJQUMxQiw2Q0FBMkI7Ozs7O0lBQzNCLHlDQUF1Qjs7Ozs7SUFDdkIseUNBQXVCOzs7OztJQUN2Qiw4Q0FBNEI7Ozs7O0lBQzVCLDJDQUF5Qjs7Ozs7SUFDekIsK0NBQTZCOzs7OztJQUM3QixnREFBOEI7Ozs7O0lBQzlCLCtDQUE2Qjs7Ozs7SUFDN0IsZ0RBQThCOzs7OztJQUM5Qix5Q0FBc0I7Ozs7O0lBQ3RCLDZDQUEwQjs7Ozs7SUFDMUIsd0NBQXNCOzs7OztJQUN0Qix5Q0FBdUI7Ozs7O0lBQ3ZCLHlDQUF1Qjs7Ozs7SUFDdkIsd0NBQTBCOzs7OztJQUUxQiw0Q0FBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBESVNDT1VOVFRZUEUsIExpbmVEaXNjb3VudCwgVFByb2R1Y3QsIFRyYW5zYWN0aW9uRG9jdW1lbnQsIFRSQU5TQUNUSU9OX1RZUEUgfSBmcm9tIFwiLi9tYXBwZXItbGlicmFyeS5tb2RlbFwiXHJcbmltcG9ydCB7IFRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyIH0gZnJvbSBcIi4vVHJhbnNhY3Rpb25Eb2N1bWVudEJ1aWxkZXJcIjtcclxuZXhwb3J0IGNsYXNzIFJKTWFwcGVyQnVpbGRlckNsYXNzIHtcclxuXHJcbiAgICBwcml2YXRlIHRyYW5zYWN0aW9uRG9jdW1lbnQ6IFRyYW5zYWN0aW9uRG9jdW1lbnQ7XHJcbiAgICBwcml2YXRlIHVzZXJJZDogYW55O1xyXG4gICAgcHJpdmF0ZSBkZXZpY2VJZDogYW55O1xyXG4gICAgcHJpdmF0ZSB0cmFuc2FjdGlvbk51bWJlcjogYW55O1xyXG4gICAgcHJpdmF0ZSBtYW5pZmVzdFZlcnNpb246IGFueTtcclxuICAgIHByaXZhdGUgZGF0YWJhc2VTY2hlbWFWZXJzaW9uOiBhbnk7XHJcbiAgICBwcml2YXRlIGJhc2tldFR5cGU6IGFueTtcclxuICAgIHByaXZhdGUgeG1sU2NoZW1hVmVyc2lvbjogYW55O1xyXG4gICAgcHJpdmF0ZSBtYWpvclZlcnNpb246IGFueTtcclxuICAgIHByaXZhdGUgbWlub3JWZXJzaW9uOiBhbnk7XHJcbiAgICBwcml2YXRlIGV4dGVybmFsU3RhdGU6IGFueTtcclxuICAgIHByaXZhdGUgY2FzaGllcklkOiBhbnk7XHJcbiAgICBwcml2YXRlIGNvbXBhbnlJZDogYW55O1xyXG4gICAgcHJpdmF0ZSB0ZXJtaW5hbE51bWJlcjogYW55O1xyXG4gICAgcHJpdmF0ZSB0YXhNZXRob2RJZDogYW55O1xyXG4gICAgcHJpdmF0ZSB0cmFkaW5nUmVnaW9uSWQ6IGFueTtcclxuICAgIHByaXZhdGUgYmFza2V0Q3VycmVuY3lJZDogYW55O1xyXG4gICAgcHJpdmF0ZSBiYXNrZXRDb3VudHJ5SWQ6IGFueTtcclxuICAgIHByaXZhdGUgYmFza2V0TGFuZ3VhZ2VJZDogYW55O1xyXG4gICAgcHJpdmF0ZSBpdGVtQ291bnQgPSAwO1xyXG4gICAgcHJpdmF0ZSBsYXJnZXN0TnVtYmVyID0gMDtcclxuICAgIHByaXZhdGUgYnJhbmNoSWQ6IGFueTtcclxuICAgIHByaXZhdGUgY3JlYXRlZEF0OiBhbnk7XHJcbiAgICBwcml2YXRlIHVwZGF0ZWRBdCA6YW55O1xyXG4gICAgcHJpdmF0ZSByak9iamVjdDogYW55ID0ge31cclxuXHJcbiAgICBwcml2YXRlIHBheW1lbnRUeXBlcyA6YW55IDtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih0cmFuc2FjdGlvbkRvYz86IFRyYW5zYWN0aW9uRG9jdW1lbnQpIHtcclxuICAgICAgICBpZiAodHJhbnNhY3Rpb25Eb2MpIHtcclxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50ID0gdHJhbnNhY3Rpb25Eb2M7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50ID0ge1xyXG4gICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25JZDogXCJcIixcclxuICAgICAgICAgICAgICAgIG9mZmxpbmVUcmFuc2FjdGlvbklkOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25SZWY6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBkYXRlVGltZTogXCJcIixcclxuICAgICAgICAgICAgICAgIG9yZ0NvZGU6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBzdG9yZUlkOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgc3RvcmVOb2RlSWQ6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBzdG9yZU5vZGVTdHJ1Y3R1cmU6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBkZXZpY2VJZDogXCJcIixcclxuICAgICAgICAgICAgICAgIHRlcm1pbmFsSWQ6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICB1c2VySWQ6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBpbml0aWF0aW5nTW9kdWxlOiBcImVCYXNrZXRcIixcclxuICAgICAgICAgICAgICAgIGV4cG9ydDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBiYXNrZXQ6IHt9IGFzIGFueSxcclxuICAgICAgICAgICAgICAgIGJhc2tldFN1bW1hcnk6IHt9IGFzIGFueSxcclxuICAgICAgICAgICAgICAgIGJhc2VDdXJyZW5jeTogXCJcIixcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBvcGVyYXRpb25TdGF0dXM6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBjcmVhdGVkQXQ6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkQXQ6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBpZDogXCJcIixcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHM6IHt9IGFzIGFueSxcclxuICAgICAgICAgICAgICAgIHNhbGVUb3RhbDogMCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pbml0aWxpemVJdGVtQ291bnQoKTtcclxuICAgICAgICB0aGlzLnNldExpbmVOdW1iZXJGb3JQcm9kdWN0cygpO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlZEF0ID0gdGhpcy5nZXRkYXRlKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jcmVhdGVkQXQpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlZEF0ID0gdGhpcy5nZXRkYXRlKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC51cGRhdGVkQXQpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBvc2Jhc2tldEluZm8oKSB7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnS2V5d29yZCddID0gdGhpcy5nZW5lcmF0ZUtleXdvcmQoKTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydJRCddID0gdGhpcy5nZW5lcmF0ZUlkKHRoaXMuY3JlYXRlZEF0KTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydYTUxTY2hlbWFWZXJzaW9uJ10gPSAnMic7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnTGFzdFVwZGF0ZWQnXSA9IHRoaXMudXBkYXRlZEF0O1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ01ham9yVmVyc2lvbiddID0gdGhpcy5tYWpvclZlcnNpb247XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnTWlub3JWZXJzaW9uJ10gPSB0aGlzLm1pbm9yVmVyc2lvbjtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydNYW5pZmVzdFZlcnNpb24nXSA9IHRoaXMubWFuaWZlc3RWZXJzaW9uO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0RhdGFiYXNlU2NoZW1hVmVyc2lvbiddID0gdGhpcy5kYXRhYmFzZVNjaGVtYVZlcnNpb247XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnQmFza2V0VHlwZSddID0gdGhpcy5iYXNrZXRUeXBlO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ1N0YXRlJ10gPSB0aGlzLmdldFN0YXRlKCk7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnRXh0ZXJuYWxTdGF0ZSddID0gdGhpcy5leHRlcm5hbFN0YXRlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcblxyXG4gICAgZ2V0aGVhZGVySW5mbygpIHtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXSA9IHt9O1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLlRpbWVab25lT2Zmc2V0ID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcodGhpcy5nZW5lcmF0ZVRpbWV6b25lb2Zmc2V0KHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jcmVhdGVkQXQpKTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5EYXRlVGltZUNyZWF0ZWQgPSB0aGlzLmNyZWF0ZWRBdDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5PcmlnaW5hdGVkQnkgPSB7fTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5PcmlnaW5hdGVkQnkuRGV2aWNlSUQgPSB0aGlzLmRldmljZUlkO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLk9yaWdpbmF0ZWRCeS5DYXNoaWVySUQgPSB0aGlzLmNhc2hpZXJJZDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5PcmlnaW5hdGVkQnkuQ29tcGFueUlEID0gdGhpcy5jb21wYW55SWQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uT3JpZ2luYXRlZEJ5LlN0b3JlSUQgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuc3RvcmVJZDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5PcmlnaW5hdGVkQnkuQnJhbmNoSUQgPSB0aGlzLmJyYW5jaElkO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLk9yaWdpbmF0ZWRCeS5UZXJtaW5hbE51bWJlciA9IHRoaXMudGVybWluYWxOdW1iZXI7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uT3JpZ2luYXRlZEJ5LlRyYW5zYWN0aW9uTnVtYmVyID0gdGhpcy50cmFuc2FjdGlvbk51bWJlcjtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5UYXhNZXRob2RJRCA9IHRoaXMudGF4TWV0aG9kSWQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uRHluYW1pY1N0b2NrTG9va3VwID0gdGhpcy5nZW5lcmF0ZUR5bmFtaWNTdG9ja0xvb2tVcCgpOy8vdG9kb1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLkJhc2tldExhbmd1YWdlSUQgPSB0aGlzLmJhc2tldExhbmd1YWdlSWQ7IC8vdG9kb1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLkJhc2tldENvdW50cnlJRCA9IHRoaXMuYmFza2V0Q291bnRyeUlkOyAvL3RvZG9cclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5CYXNrZXRDdXJyZW5jeUlEID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2VDdXJyZW5jeTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5UcmFkaW5nUmVnaW9uSUQgPSB0aGlzLnRyYWRpbmdSZWdpb25JZDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5FdXJvem9uZSA9IFwiIFwiOy8vdW5rbm93blxyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLkV1cm9CYXNlRXhjaGFuZ2VSYXRlID0gXCJcIjsgLy91bmtub3duXHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uUHJpbnRhYmxlTmFtZSA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC51c2VyTmFtZTsgLy91bmtub3duXHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHJqTWFwcGVyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudHlwZSA9PT0gVFJBTlNBQ1RJT05fVFlQRS5TQUxFKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1Byb2R1Y3RTYWxlJ10gPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnTW9kaWZpZXJJdGVtJ10gPSBbXTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQucHJvZHVjdHMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbGluZURpc2NvdW50ID0gW107XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5saW5lRGlzY291bnQgJiYgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5saW5lRGlzY291bnQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxpbmVEaXNjb3VudCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZURpc2NvdW50LmZpbHRlcigoeDogYW55KSA9PiB4Lml0ZW1MaW5lSWQgPT09IGVsZW1lbnQuaXRlbUxpbmVJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmVEaXNjb3VudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5saW5lRGlzY291bnQuaW5kZXhPZihsaW5lRGlzY291bnRbMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5saW5lRGlzY291bnQuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCBkYXRhID0gdGhpcy5hZGRQcm9kdWN0KGVsZW1lbnQsIChsaW5lRGlzY291bnQubGVuZ3RoID4gMCA/IGxpbmVEaXNjb3VudFswXSA6IG51bGwpKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1Byb2R1Y3RTYWxlJ10ucHVzaChkYXRhKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0TW9kaWZpZXJJdGVtKGxpbmVEaXNjb3VudC5sZW5ndGggPiAwID8gbGluZURpc2NvdW50WzBdIDogbnVsbCwgZWxlbWVudC5pdGVtTGluZUlkKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudHlwZSA9PT0gVFJBTlNBQ1RJT05fVFlQRS5SRUZVTkQpIHtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnUHJvZHVjdFJldHVybiddID0gW107XHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ01vZGlmaWVySXRlbSddID0gW107XHJcbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQucHJvZHVjdHMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IHRoaXMucmV0dXJuUHJvZHVjdChlbGVtZW50LCAoZWxlbWVudC5oYXNPd25Qcm9wZXJ0eSgnbGluZURpc2NvdW50JykgPyBlbGVtZW50LmxpbmVEaXNjb3VudCA6IG51bGwpKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1Byb2R1Y3RSZXR1cm4nXS5wdXNoKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRNb2RpZmllckl0ZW0oZWxlbWVudC5saW5lRGlzY291bnQsIGVsZW1lbnQuaXRlbUxpbmVJZCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnR5cGUgPT09IFRSQU5TQUNUSU9OX1RZUEUuU0FMRV9SRUZVTkQpIHtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnUHJvZHVjdFJldHVybiddID0gW107XHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ01vZGlmaWVySXRlbSddID0gW107XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBsZXQgdHJhbnNhY3Rpb25Eb2M6IGFueSA9IG5ldyBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlcigpLmJhc2tldCh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3VycmVudFRyYW5zYWN0aW9uRGV0YWlscykuYnVpbGQoKTtcclxuICAgICAgICAgICAgdHJhbnNhY3Rpb25Eb2MuYmFza2V0LnByb2R1Y3RzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGRhdGEgPSB0aGlzLnJldHVyblByb2R1Y3QoZWxlbWVudCwgKGVsZW1lbnQuaGFzT3duUHJvcGVydHkoJ2xpbmVEaXNjb3VudCcpID8gZWxlbWVudC5saW5lRGlzY291bnQgOiBudWxsKSk7XHJcbiAgICAgICAgICAgICAgICBsZXQgb2JqID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIFwiT3JpZ2luYWxSZWNlaXB0U3VwcGxpZWRcIjogMCxcclxuICAgICAgICAgICAgICAgICAgICBcIk9yaWdpbmFsQnJhbmNoSURcIjogMCxcclxuICAgICAgICAgICAgICAgICAgICBcIk9yaWdpbmFsVGVybWluYWxOdW1iZXJcIjogMCxcclxuICAgICAgICAgICAgICAgICAgICBcIk9yaWdpbmFsVHJhbnNhY3Rpb25OdW1iZXJcIjogMCxcclxuICAgICAgICAgICAgICAgICAgICBcIk9yaWdpbmFsQ2FzaGllck51bWJlclwiOiAwXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgZGF0YVsnUmV0dXJuJ10gPSB7Li4uZGF0YVsnUmV0dXJuJ10sIC4uLm9ian07XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydQcm9kdWN0UmV0dXJuJ10ucHVzaChkYXRhKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0TW9kaWZpZXJJdGVtKGVsZW1lbnQubGluZURpc2NvdW50LCBlbGVtZW50Lml0ZW1MaW5lSWQpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnR5cGUgPT09IFRSQU5TQUNUSU9OX1RZUEUuU0FMRV9FWENIQU5HRSkge1xyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydQcm9kdWN0UmV0dXJuJ10gPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnUHJvZHVjdFNhbGUnXSA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydNb2RpZmllckl0ZW0nXSA9IFtdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgbGV0IHRyYW5zYWN0aW9uRG9jOiBhbnkgPSBuZXcgVHJhbnNhY3Rpb25Eb2N1bWVudEJ1aWxkZXIoKS5iYXNrZXQodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHMpLmJ1aWxkKCk7XHJcbiAgICAgICAgICAgIHRyYW5zYWN0aW9uRG9jLmJhc2tldC5wcm9kdWN0cy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnJlZnVuZGVkUXVhbnRpdHkgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJldHVyblByb2R1Y3QgPSB0aGlzLnJldHVyblByb2R1Y3QoZWxlbWVudCwgKGVsZW1lbnQuaGFzT3duUHJvcGVydHkoJ2xpbmVEaXNjb3VudCcpID8gZWxlbWVudC5saW5lRGlzY291bnQgOiBudWxsKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9iaiA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJPcmlnaW5hbFJlY2VpcHRTdXBwbGllZFwiOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIk9yaWdpbmFsQnJhbmNoSURcIjogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJPcmlnaW5hbFRlcm1pbmFsTnVtYmVyXCI6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiT3JpZ2luYWxUcmFuc2FjdGlvbk51bWJlclwiOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIk9yaWdpbmFsQ2FzaGllck51bWJlclwiOiAwXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5Qcm9kdWN0WydSZXR1cm4nXSA9IHsuLi5yZXR1cm5Qcm9kdWN0WydSZXR1cm4nXSwgLi4ub2JqfTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydQcm9kdWN0UmV0dXJuJ10ucHVzaChyZXR1cm5Qcm9kdWN0KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFkZFByb2R1Y3QgPSB0aGlzLmFkZFByb2R1Y3QoZWxlbWVudCwgKGVsZW1lbnQuaGFzT3duUHJvcGVydHkoJ2xpbmVEaXNjb3VudCcpID8gZWxlbWVudC5saW5lRGlzY291bnQgOiBudWxsKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnUHJvZHVjdFNhbGUnXS5wdXNoKGFkZFByb2R1Y3QpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRNb2RpZmllckl0ZW0oZWxlbWVudC5saW5lRGlzY291bnQsIGVsZW1lbnQuaXRlbUxpbmVJZCk7XHJcbiAgICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBnZXRCYXNrZXREaXNjb3VudCgpIHtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydCYXNrZXREaXNjb3VudCddID0gW107XHJcbiAgICAgICAgaWYgKCF0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnRyYW5zYWN0aW9uRGlzY291bnQpIHJldHVybiB0aGlzO1xyXG5cclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnRyYW5zYWN0aW9uRGlzY291bnQuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBvYmo6IGFueSA9IHt9XHJcbiAgICAgICAgICAgIG9ialsnWE1MU2NoZW1hVmVyc2lvbiddID0gMTtcclxuICAgICAgICAgICAgb2JqWydOZXRWYWx1ZSddID0gZWxlbWVudC5kaXNjb3VudEFtb3VudCA8IDAgPyBlbGVtZW50LmRpc2NvdW50QW1vdW50IDogLWVsZW1lbnQuZGlzY291bnRBbW91bnQ7XHJcbiAgICAgICAgICAgIG9ialsnRWZmZWN0aXZlTmV0VmFsdWUnXSA9IGVsZW1lbnQuZGlzY291bnRBbW91bnQgPCAwID8gZWxlbWVudC5kaXNjb3VudEFtb3VudCA6IC1lbGVtZW50LmRpc2NvdW50QW1vdW50O1xyXG4gICAgICAgICAgICBvYmpbJ0Rlc2NyaXB0aW9uJ10gPSBlbGVtZW50LnJlYXNvbkNvZGU7XHJcbiAgICAgICAgICAgIG9ialsnVXNlcklEJ10gPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXNlck5hbWU7XHJcbiAgICAgICAgICAgIG9ialsnUmVhc29uQ29kZUlEJ10gPSBlbGVtZW50LnJlYXNvbkNvZGU7XHJcbiAgICAgICAgICAgIG9ialsnRGlzY291bnRUeXBlJ10gPSBlbGVtZW50LmRpc2NvdW50VHlwZS50b1VwcGVyQ2FzZSgpID09IERJU0NPVU5UVFlQRS5QRVJDRU5ULnRvVXBwZXJDYXNlKCkgPyAwIDogMTsgLy8gdG9kbyAtIGNvbXBhcmUgdmFsdWVzIFxyXG4gICAgICAgICAgICBvYmpbJ1JvdW5kaW5nUnVsZSddID0gMjtcclxuICAgICAgICAgICAgb2JqWydNb2RpZmllZExpbmVOdW1iZXIgJ10gPSBbXTtcclxuXHJcbiAgICAgICAgICAgIGVsZW1lbnQuaXRlbUxpbmVJZHMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ01vZGlmaWVkTGluZU51bWJlciddLnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBvYmpbJ0xpbmVOdW1iZXInXSA9IHRoaXMuZ2VuZXJhdGVMaW5lTnVtYmVyKCk7XHJcblxyXG4gICAgICAgICAgICAvLyBvYmpbJ0Rpc2NvdW50ZWRWYWx1ZSddID0gb2JqWydkaXNjb3VudEFtb3VudCddIC8vIHRvZG8gLSBjb25maXJtIHZhbHVlIGJlZm9yZSBkaXNjb3VudDtcclxuICAgICAgICAgICAgLy8gb2JqWydEaXNjb3VudFBlcmNlbnRhZ2UnXSA9IG9ialsnZGlzY291bnRBbW91bnQnXSAvIDEwMCA7IC8vIHRvZG8gLSBvcHRpb25hbFxyXG5cclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnQmFza2V0RGlzY291bnQnXS5wdXNoKG9iaik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TW9kaWZpZXJJdGVtKGRhdGE6IGFueSwgbGluZU5vOiBhbnkpIHtcclxuICAgICAgICBpZiAoZGF0YSAmJiBsaW5lTm8pIHtcclxuICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge307XHJcbiAgICAgICAgICAgIG9iai5YTUxTY2hlbWFWZXJzaW9uID0gMTtcclxuICAgICAgICAgICAgb2JqLkxpbmVOdW1iZXIgPSB0aGlzLmdlbmVyYXRlTGluZU51bWJlcigpO1xyXG4gICAgICAgICAgICBvYmouTmV0VmFsdWUgPSAwO1xyXG4gICAgICAgICAgICBvYmouRWZmZWN0aXZlTmV0VmFsdWUgPSAwO1xyXG4gICAgICAgICAgICBvYmouRGVzY3JpcHRpb24gPSBkYXRhLnBlcmNlbnRhZ2VEaXNjb3VudFJlYXNvbk5hbWUgPyBkYXRhLnBlcmNlbnRhZ2VEaXNjb3VudFJlYXNvbk5hbWUgOiBkYXRhLnByaWNlT3ZlcnJpZGVSZWFzb25OYW1lO1xyXG4gICAgICAgICAgICBvYmouRGV2aWNlSUQgPSB0aGlzLmRldmljZUlkO1xyXG4gICAgICAgICAgICBvYmouVXNlcklEID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnVzZXJOYW1lO1xyXG4gICAgICAgICAgICBvYmouRGF0ZVRpbWVDcmVhdGVkID0gdGhpcy51cGRhdGVkQXQ7XHJcbiAgICAgICAgICAgIG9iai5BdXRob3Jpc2luZ1VzZXJJRCA9IHRoaXMudXNlcklkO1xyXG4gICAgICAgICAgICBvYmouUmVhc29uQ29kZUlEID0gZGF0YS5wZXJjZW50YWdlRGlzY291bnRSZWFzb25Db2RlID8gZGF0YS5wZXJjZW50YWdlRGlzY291bnRSZWFzb25Db2RlIDogZGF0YS5wcmljZU92ZXJyaWRlUmVhc29uQ29kZTtcclxuICAgICAgICAgICAgb2JqLk1vZGlmaWVkTGluZU51bWJlciA9IGxpbmVObztcclxuICAgICAgICAgICAgb2JqLk1vZGlmaWVkSW5kZXggPSAxO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnTW9kaWZpZXJJdGVtJ10ucHVzaChvYmopO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRUcmFpbGVySW5mbygpIHtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydUcmFpbGVyJ10gPSB7fTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuRGF0ZVRpbWVDb21wbGV0ZWQgPSB0aGlzLnVwZGF0ZWRBdDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuQ29tcGxldGVkQnkgPSB7fTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuQ29tcGxldGVkQnkuRGV2aWNlSUQgPSB0aGlzLmRldmljZUlkO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3QuVHJhaWxlci5Db21wbGV0ZWRCeS5DYXNoaWVySUQgPSB0aGlzLmNhc2hpZXJJZDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuQ29tcGxldGVkQnkuU3RvcmVJRCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5zdG9yZUlkO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3QuVHJhaWxlci5Db21wbGV0ZWRCeS5CcmFuY2hJRCA9IHRoaXMuYnJhbmNoSWQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdC5UcmFpbGVyLkNvbXBsZXRlZEJ5LlRlcm1pbmFsTnVtYmVyID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnRlcm1pbmFsSWQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdC5UcmFpbGVyLlRvdGFsID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFN1bW1hcnkuYmFza2V0VG90YWwgKiAxMDApO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3QuVHJhaWxlci5JdGVtQ291bnQgPSB0aGlzLml0ZW1Db3VudDsgLy9naXZlcyB0b3RhbCBjb3VudCBmb3IgcHJvZHVjdFxyXG4gICAgICAgIHRoaXMucmpPYmplY3QuVHJhaWxlci5JdGVtUXVhbnRpdHkgPSB0aGlzLmNvbnZlcnRUb1N0cmluZyh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0U3VtbWFyeS50b3RhbEl0ZW1zKTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuTmV0SXRlbVF1YW50aXR5ID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFN1bW1hcnkudG90YWxJdGVtcyk7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdC5UcmFpbGVyLlRheFRvdGFsID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFN1bW1hcnkuVkFUVG90YWwpO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3QuVHJhaWxlci5TZXF1ZW5jZURldmljZUlEID0gdGhpcy5kZXZpY2VJZDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuU2VxdWVuY2VOdW1iZXIgPSAnc25zbicgLy9zdGF0aWMgZm9yIG5vd1xyXG5cclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydUcmFpbGVyJ11bJ1RheEl0ZW0nXSA9IFtdO1xyXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudGF4QnJlYWtkb3duLnRheExpbmVzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7fTtcclxuXHJcbiAgICAgICAgICAgIG9ialsnWE1MU2NoZW1hVmVyc2lvbiddID0gdGhpcy54bWxTY2hlbWFWZXJzaW9uO1xyXG4gICAgICAgICAgICBvYmpbJ1RheFJhdGUnXSA9IGVsZW1lbnQuVkFUO1xyXG4gICAgICAgICAgICBvYmpbJ1RheGFibGVUb3RhbCddID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcoZWxlbWVudC50YXhhYmxlQW1vdW50KTtcclxuICAgICAgICAgICAgb2JqWydUYXhUb3RhbCddID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcoZWxlbWVudC50YXhMaW5lVG90YWwpO1xyXG4gICAgICAgICAgICBvYmpbJ1RheERlc2NyaXB0aW9uJ10gPSB0aGlzLmNvbnZlcnRUb1N0cmluZyhlbGVtZW50LlZBVENvZGUpO1xyXG4gICAgICAgICAgICBvYmpbJ1RheEluY2x1ZGVkJ10gPSAnMSc7XHJcbiAgICAgICAgICAgIG9ialsnVGF4UGVyY2VudGFnZSddID0gZWxlbWVudC5WQVQudG9GaXhlZCgyKTsgLy8gdG9kb1xyXG5cclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnVHJhaWxlciddWydUYXhJdGVtJ10ucHVzaChvYmopXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIFRPRE86IG1ha2UgVHJhaWxlciBvYmplY3QgZnJvbSBwcm9tb3Rpb25cclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydUcmFpbGVyJ11bJ1Byb21vdGlvbkl0ZW0nXSA9IFtdO1xyXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZVByb21vdGlvbi5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge307XHJcblxyXG4gICAgICAgICAgICBvYmpbJ1Byb21vdGlvbklEJ10gPSBlbGVtZW50LnByb21vdGlvbklkO1xyXG4gICAgICAgICAgICBvYmpbJ1Byb21vdGlvblNhdmluZyddID0gZWxlbWVudC5wcm9tb3Rpb25BbW91bnQgPCAwID8gZWxlbWVudC5wcm9tb3Rpb25BbW91bnQgOiAtZWxlbWVudC5wcm9tb3Rpb25BbW91bnQ7XHJcbiAgICAgICAgICAgIG9ialsnUHJvbW90aW9uUXVhbnRpdHknXSA9IFwiXCI7IC8vIHRvZG8gLSBub3QgYXZhaWFsYmxlXHJcbiAgICAgICAgICAgIG9ialsnUHJvbW90aW9uRGVzY3JpcHRpb24nXSA9IGVsZW1lbnQuZGlzcGxheVRleHQ7XHJcblxyXG4gICAgICAgICAgICBvYmpbJ1Byb21vdGlvbkhpdCddWydYTUxTY2hlbWFWZXJzaW9uJ10gPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuc3RvcmVJZDtcclxuICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25IaXQnXVsnSGl0TnVtYmVyJ10gPSBcIlwiIC8vIHRvZG87XHJcbiAgICAgICAgICAgIG9ialsnUHJvbW90aW9uSGl0J11bJ0hpdFF1YW50aXR5J10gPSBcIlwiIC8vIHRvZG87XHJcbiAgICAgICAgICAgIG9ialsnUHJvbW90aW9uSGl0J11bJ0hpdFNhdmluZyddID0gXCJcIiAvLyB0b2RvO1xyXG5cclxuICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25IaXQnXVsnUHJvbW90aW9uVHJpZ2dlciddID0gW107XHJcblxyXG4gICAgICAgICAgICBlbGVtZW50LnRyaWdnZXIuZm9yRWFjaCgoc3ViRWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgb2JqU3ViOiBhbnkgPSB7fTtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgcHJvZHVjdCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQucHJvZHVjdHMuZmluZCgoaXRlbTogYW55KSA9PiBpdGVtLmxpbmVJdGVtSWQgPT0gc3ViRWxlbWVudC5pdGVtTGluZUlkKTtcclxuICAgICAgICAgICAgICAgIG9ialN1YlsnWE1MU2NoZW1hVmVyc2lvbiddID0gdGhpcy54bWxTY2hlbWFWZXJzaW9uO1xyXG4gICAgICAgICAgICAgICAgb2JqU3ViWydQcm9kdWN0SUQnXSA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQucHJvZHVjdHMuZmluZCgoaXRlbTogYW55KSA9PiBpdGVtLml0ZW1MaW5lSWQgPT09IHN1YkVsZW1lbnQuaXRlbUxpbmVJZCkuU0tVO1xyXG4gICAgICAgICAgICAgICAgb2JqU3ViWydVbml0VmFsdWUnXSA9IHRoaXMuY29udmVydFRvU3RyaW5nKGVsZW1lbnQucHJvbW90aW9uTGluZVByaWNlIC8gcHJvZHVjdC5xdWFudGl0eSk7XHJcbiAgICAgICAgICAgICAgICBvYmpTdWJbJ0xpbmVOdW1iZXInXSA9IHRoaXMuY29udmVydFRvU3RyaW5nKHN1YkVsZW1lbnQuaXRlbUxpbmVJZCk7XHJcbiAgICAgICAgICAgICAgICBvYmpTdWJbJ1F1YW50aXR5J10gPSB0aGlzLmNvbnZlcnRUb1N0cmluZyhzdWJFbGVtZW50LnF1YW50aXR5LnRvRml4ZWQoMSkpO1xyXG4gICAgICAgICAgICAgICAgb2JqU3ViWydUYXhDb2RlJ10gPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnRheEJyZWFrZG93bi50YXhMaW5lcy5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0uaXRlbUxpbmVJZCA9PSBlbGVtZW50Lml0ZW1MaW5lSWQpLlZBVENvZGU7IC8vIHRvZG9cclxuICAgICAgICAgICAgICAgIG9ialsnUHJvbW90aW9uSGl0J11bJ1Byb21vdGlvblRyaWdnZXInXS5wdXNoKG9ialN1Yik7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnVHJhaWxlciddWydQcm9tb3Rpb25JdGVtJ10ucHVzaChvYmopO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucmpPYmplY3QpO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFRlbmRlckluZm8oKSB7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnQ2FzaFRlbmRlciddID0gW107XHJcbiAgICAgICAgaWYgKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5wYXltZW50RGV0YWlscyAmJiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQucGF5bWVudERldGFpbHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQucGF5bWVudERldGFpbHMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnBheW1lbnRUeXBlcy5maWx0ZXIoeCA9PiB4Lm5hbWUudG9VcHBlckNhc2UoKSA9PT0gZWxlbWVudC5wYXltZW50VHlwZS50b1VwcGVyQ2FzZSgpKTtcclxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnBheW1lbnRUeXBlLnRvVXBwZXJDYXNlKCkgPT09ICdHSUZUIENBUkQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9iaiA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgWE1MU2NoZW1hVmVyc2lvbjogdGhpcy54bWxTY2hlbWFWZXJzaW9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBMaW5lTnVtYmVyOiB0aGlzLmdlbmVyYXRlTGluZU51bWJlcigpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBOZXRWYWx1ZTogdGhpcy5jb252ZXJ0VG9TdHJpbmcoLTEgKiB0aGlzLnJlbW92ZURlY2ltYWwoKE1hdGgucm91bmQoZWxlbWVudC5hbW91bnQpKSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBFZmZlY3RpdmVOZXRWYWx1ZTogdGhpcy5jb252ZXJ0VG9TdHJpbmcoLTEgKiB0aGlzLnJlbW92ZURlY2ltYWwoKE1hdGgucm91bmQoZWxlbWVudC5hbW91bnQpKSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbjogdGhpcy5nZXREZXNjcmlwdGlvbih2YWx1ZVswXS5uYW1lLCBlbGVtZW50KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgRGV2aWNlSUQ6IHRoaXMuZGV2aWNlSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRDogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnVzZXJOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBEYXRlVGltZUNyZWF0ZWQ6IHRoaXMudXBkYXRlZEF0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUZW5kZXJUeXBlOiB2YWx1ZVswXS50ZW5kZXJUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUZW5kZXJTdWJUeXBlOiB2YWx1ZVswXS50ZW5kZXJTdWJUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUZW5kZXJBbW91bnQ6IHRoaXMuY29udmVydFRvU3RyaW5nKC0xICogdGhpcy5yZW1vdmVEZWNpbWFsKChNYXRoLnJvdW5kKGVsZW1lbnQuYW1vdW50KSkpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQ3VycmVuY3lJRDogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2VDdXJyZW5jeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQ3VycmVuY3lEZXNjcmlwdGlvbjogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2VDdXJyZW5jeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgR2lmdFZvdWNoZXJTYWxlc0FsbG93ZWQ6ICcnLC8vdG9kb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBBbGxvd1JlY2hhcmdlYWJsZVZvdWNoZXJTYWxlczogJycsLy90b2RvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEdpZnRWb3VjaGVySUQ6ICcnXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ0Nhc2hUZW5kZXInXS5wdXNoKG9iailcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBvYmoxID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBYTUxTY2hlbWFWZXJzaW9uOiBcIjFcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgTGluZU51bWJlcjogdGhpcy5nZW5lcmF0ZUxpbmVOdW1iZXIoKSwvL3RvZG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgTmV0VmFsdWU6IEpTT04uc3RyaW5naWZ5KC0xICogKE1hdGgucm91bmQoZWxlbWVudC5hbW91bnQpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEVmZmVjdGl2ZU5ldFZhbHVlOiBKU09OLnN0cmluZ2lmeSgtMSAqIChNYXRoLnJvdW5kKGVsZW1lbnQuYW1vdW50KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbjogdGhpcy5nZXREZXNjcmlwdGlvbih2YWx1ZVswXS5uYW1lLCBlbGVtZW50KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgRGV2aWNlSUQ6IHRoaXMuZGV2aWNlSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRDogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnVzZXJOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBEYXRlVGltZUNyZWF0ZWQ6IHRoaXMudXBkYXRlZEF0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUZW5kZXJUeXBlOiB2YWx1ZVswXS50ZW5kZXJUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUZW5kZXJTdWJUeXBlOiB2YWx1ZVswXS50ZW5kZXJTdWJUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUZW5kZXJBbW91bnQ6IEpTT04uc3RyaW5naWZ5KC0xICogKE1hdGgucm91bmQoZWxlbWVudC5hbW91bnQpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbmN5SUQ6IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNlQ3VycmVuY3ksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbmN5RGVzY3JpcHRpb246IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNlQ3VycmVuY3ksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEluY2x1ZGVJblRyYW5zYWN0aW9uVG90YWxDaGVjazogXCIxXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93UmVjaGFyZ2VhYmxlVm91Y2hlclNhbGVzOiBcIjFcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgT3BlbkRyYXdlckF0RW5kOiBcIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydDYXNoVGVuZGVyJ10ucHVzaChvYmoxKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0TGluZU51bWJlckZvclByb2R1Y3RzKCkge1xyXG4gICAgICAgIGxldCBpdGVtTGluZUlkQXJyYXkgPSBbXTtcclxuICAgICAgICBpdGVtTGluZUlkQXJyYXkgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnByb2R1Y3RzLm1hcCgocHJvZHVjdDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludChwcm9kdWN0Lml0ZW1MaW5lSWQpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5sYXJnZXN0TnVtYmVyID0gaXRlbUxpbmVJZEFycmF5LnJlZHVjZSgoYTogYW55LCBiOiBhbnkpID0+IE1hdGgubWF4KGEsIGIpKTtcclxuICAgIH1cclxuXHJcbiAgICBnZW5lcmF0ZUxpbmVOdW1iZXIoKSB7XHJcbiAgICAgICAgdGhpcy5sYXJnZXN0TnVtYmVyICs9IDE7XHJcbiAgICAgICAgdGhpcy5pdGVtQ291bnQgKz0gMTtcclxuICAgICAgICByZXR1cm4gdGhpcy5sYXJnZXN0TnVtYmVyO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXRpbGl6ZUl0ZW1Db3VudCgpIHtcclxuICAgICAgICB0aGlzLml0ZW1Db3VudCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQucHJvZHVjdHMubGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIGJ1aWxkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJqT2JqZWN0O1xyXG4gICAgfVxyXG5cclxuICAgIGdldERlc2NyaXB0aW9uKHBheW1lbnRUeXBlOiBzdHJpbmcsIGVsZW1lbnQ6IGFueSkge1xyXG4gICAgICAgIGlmIChwYXltZW50VHlwZS50b1VwcGVyQ2FzZSgpID09PSAnQ0FSRCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQuY2FyZFR5cGVcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXltZW50VHlwZVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXREZXZpY2VJbmZvKGlkOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmRldmljZUlkID0gaWRcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIHNldFVzZXJJbmZvKGlkOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnVzZXJJZCA9IGlkO1xyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlRGVjaW1hbCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlICogMTAwO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFRyYW5zYWN0aW9uTnVtYmVyKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uTnVtYmVyID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXRNYW5pZmVzdFZlcnNpb24odmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMubWFuaWZlc3RWZXJzaW9uID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXREYXRhYmFzZVNjaGVtYVZlcnNpb24odmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuZGF0YWJhc2VTY2hlbWFWZXJzaW9uID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXRCYXNrZXRUeXBlKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmJhc2tldFR5cGUgPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIHNldFRyYWRpbmdSZWdpb25JRCh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy50cmFkaW5nUmVnaW9uSWQgPSB2YWx1ZVxyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0Q29tcGFueUlEKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmNvbXBhbnlJZCA9IHZhbHVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXRUYXhNZXRob2RJRCh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy50YXhNZXRob2RJZCA9IHZhbHVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXRNYWpvclZlcnNpb24odmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMubWFqb3JWZXJzaW9uID0gdmFsdWVcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIHNldE1pbm9yVmVyc2lvbih2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5taW5vclZlcnNpb24gPSB2YWx1ZVxyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0WE1MU2NoZW1hVmVyc2lvbih2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy54bWxTY2hlbWFWZXJzaW9uID0gdmFsdWVcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIHNldEV4dGVybmFsU3RhdGUodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuZXh0ZXJuYWxTdGF0ZSA9IHZhbHVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXRDYXNoaWVySUQodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuY2FzaGllcklkID0gKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudCAmJiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXNlck5hbWUpID8gIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC51c2VyTmFtZSA6ICcnO1xyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VGVybWluYWxOdW1iZXIodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMudGVybWluYWxOdW1iZXIgPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBzZXRCYXNrZXRMYW5ndWFnZUlEKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmJhc2tldExhbmd1YWdlSWQgPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHNldEJhc2tldENvdW50cnlJRCh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5iYXNrZXRDb3VudHJ5SWQgPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBzZXRCYXNrZXRDdXJyZW5jeUlEKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmJhc2tldEN1cnJlbmN5SWQgPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBzZXRCcmFuY2hJRCh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5icmFuY2hJZCA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFBheW1lbnREZXRhaWxzKHZhbHVlOmFueSl7XHJcbiAgICAgICAgdGhpcy5wYXltZW50VHlwZXMgPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBnZW5lcmF0ZUlkKGRhdGU6IGFueSkge1xyXG4gICAgICAgIGxldCBuZXdEYXRlVGltZSA9IGRhdGUucmVwbGFjZSgvW14wLTldL2csICcnKVxyXG4gICAgICAgIGxldCBpZCA9ICh0aGlzLmRldmljZUlkICsgJ3wnICsgbmV3RGF0ZVRpbWUgKyAnfCcgKyB0aGlzLnRyYW5zYWN0aW9uTnVtYmVyKS50b1N0cmluZygpO1xyXG4gICAgICAgIHJldHVybiBpZDtcclxuICAgIH0gXHJcblxyXG4gICAgZ2VuZXJhdGVUaW1lem9uZW9mZnNldChkYXRlOiBhbnkpIHtcclxuICAgICAgICBsZXQgeCA9IGRhdGUgPyBkYXRlIDogJyc7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHgpLmdldFRpbWV6b25lT2Zmc2V0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2VuZXJhdGVLZXl3b3JkKCkge1xyXG4gICAgICAgIGxldCB4ID0gKHRoaXMuY29tcGFueUlkICsgJ3wnICsgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnN0b3JlSWQgKyAnfCcgKyB0aGlzLnRlcm1pbmFsTnVtYmVyICsgJ3wnICsgdGhpcy50cmFuc2FjdGlvbk51bWJlcikudG9TdHJpbmcoKTtcclxuICAgICAgICByZXR1cm4geDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTdGF0ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50Lm9wZXJhdGlvblN0YXR1cyA9PT0gJ1BBWV9TVUNDRVNTJykge1xyXG4gICAgICAgICAgICByZXR1cm4gJ0NvbXBsZXRlZCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gJ0NhbmNlbGxlZCc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVyblByb2R1Y3QoZWxlbWVudDogYW55LCBsaW5lRGlzY291bnQ6IExpbmVEaXNjb3VudCkge1xyXG4gICAgICAgIGxldCBvYmo6IGFueSA9IHt9XHJcbiAgICAgICAgbGV0IHRheFRvdGFsID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFsndGF4QnJlYWtkb3duJ11bJ3RheExpbmVzJ10uZmluZCgoaXRlbTogYW55KSA9PiBpdGVtLml0ZW1MaW5lSWQgPT0gZWxlbWVudFsnaXRlbUxpbmVJZCddKTtcclxuICAgICAgICBvYmpbJ1hNTFNjaGVtYVZlcnNpb24nXSA9IHRoaXMueG1sU2NoZW1hVmVyc2lvbjtcclxuICAgICAgICBvYmpbJ0xpbmVOdW1iZXInXSA9IGVsZW1lbnRbJ2l0ZW1MaW5lSWQnXTtcclxuICAgICAgICBvYmpbJ05ldFZhbHVlJ10gPSB0aGlzLnJlbW92ZURlY2ltYWwoZWxlbWVudFsncmVmdW5kZWRUb3RhbCddKTtcclxuICAgICAgICBvYmpbJ0VmZmVjdGl2ZU5ldFZhbHVlJ10gPSB0aGlzLnJlbW92ZURlY2ltYWwoZWxlbWVudFsncmVmdW5kZWRUb3RhbCddKTtcclxuICAgICAgICBvYmpbJ0Rlc2NyaXB0aW9uJ10gPSBlbGVtZW50WydkZXNjcmlwdGlvbiddO1xyXG4gICAgICAgIG9ialsnRGV2aWNlSUQnXSA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudFsndGVybWluYWxJZCddO1xyXG4gICAgICAgIG9ialsnVXNlcklEJ10gPSB0aGlzLnVzZXJJZDtcclxuICAgICAgICBvYmpbJ0RhdGVUaW1lQ3JlYXRlZCddID0gdGhpcy5jcmVhdGVkQXQ7XHJcbiAgICAgICAgb2JqWydFeHRlbmRlZFZhbHVlJ10gPSB0aGlzLnJlbW92ZURlY2ltYWwoZWxlbWVudFsndG90YWxMaW5lUHJpY2UnXSotMSk7XHJcbiAgICAgICAgb2JqWydVbml0UHJpY2UnXSA9IHRoaXMucmVtb3ZlRGVjaW1hbChlbGVtZW50WydwcmljZSddKTtcclxuICAgICAgICBvYmpbJ1F1YW50aXR5J10gPSBlbGVtZW50WydyZWZ1bmRlZFF1YW50aXR5J10gPCAwID8gZWxlbWVudFsncmVmdW5kZWRRdWFudGl0eSddLnRvRml4ZWQoMSkgOiAtZWxlbWVudFsncmVmdW5kZWRRdWFudGl0eSddLnRvRml4ZWQoMSk7XHJcbiAgICAgICAgb2JqWydPcmlnaW5hbFRheEFtb3VudFNldCddID0gMTtcclxuICAgICAgICBvYmpbJ1Byb2R1Y3RJRCddID0gZWxlbWVudFsnU0tVJ107XHJcbiAgICAgICAgb2JqWydIYW5kS2V5ZWQnXSA9IDE7XHJcbiAgICAgICAgb2JqWydMb25nRGVzY3JpcHRpb24nXSA9IGVsZW1lbnRbJ2Rlc2NyaXB0aW9uJ107XHJcbiAgICAgICAgb2JqWydSZXR1cm4nXSA9IHt9O1xyXG4gICAgICAgIG9ialsnUmV0dXJuJ11bJ1JldHVyblJlYXNvbklEJ10gPSBlbGVtZW50WydyZWZ1bmRlZFJlYXNvbiddO1xyXG4gICAgICAgIG9ialsnUmV0dXJuJ11bJ1JldHVybkRlc2NyaXB0aW9uJ10gPSBlbGVtZW50WydyZWZ1bmRlZFJlYXNvbkRlc2NyaXB0aW9uJ107XHJcbiAgICAgICAgb2JqWydSZXR1cm4nXVsnUmV0dXJuVG9TdG9jayddID0gZWxlbWVudFsncmVmdW5kZWRRdWFudGl0eSddID4gMCA/IGVsZW1lbnRbJ3JlZnVuZGVkUXVhbnRpdHknXS50b0ZpeGVkKDEpIDogLTEgKiBlbGVtZW50WydyZWZ1bmRlZFF1YW50aXR5J10udG9GaXhlZCgxKTtcclxuICAgICAgICBvYmpbJ1RheENvZGUnXSA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRbJ3RheEJyZWFrZG93biddWyd0YXhMaW5lcyddLmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbS5pdGVtTGluZUlkID09IGVsZW1lbnRbJ2l0ZW1MaW5lSWQnXSkuVkFUQ29kZTtcclxuXHJcbiAgICAgICAgb2JqWydEaXNwbGF5VGF4Q29kZSddID0gJyc7IC8vIHRvZG9cclxuICAgICAgICBvYmpbJ1Byb2R1Y3RBdHRyaWJ1dGVzJ10gPSAnJzsgLy90b2RvIC0gbm90IHJlcXVpcmVkXHJcbiAgICAgICAgb2JqWydQZXJpc2hhYmxlJ10gPSB0aGlzLmdldEF0dHJpYnV0ZXMoKTtcclxuICAgICAgICBvYmpbJ01NR3JvdXBJRCddID0gdGhpcy5nZXRBdHRyaWJ1dGVzKCk7XHJcbiAgICAgICAgb2JqWydDdXN0b21lckRldGFpbHMnXSA9IFwiXCI7IC8vIHRvZG8gLSBibGFua1xyXG4gICAgICAgIG9ialsnVG90YWxQcm9tb3Rpb25TYXZpbmcnXSA9IGVsZW1lbnRbJ3Byb21vdGlvbkFtb3VudCddIHx8IC0xOyAvLyBUT0RPXHJcbiAgICAgICAgb2JqWydPcmlnaW5hbFRheEFtb3VudCddID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcodGhpcy5nZXRvcmlnaW5sdGF4KGVsZW1lbnQsdGF4VG90YWwuVkFUKSAqIC0xKVxyXG4gICAgICAgIG9ialsndGF4QW1vdW50J10gPSB0YXhUb3RhbC50YXhMaW5lVG90YWwgPCAwID8odGF4VG90YWwudGF4TGluZVRvdGFsKSA6ICgtdGF4VG90YWwudGF4TGluZVRvdGFsKTtcclxuXHJcbiAgICAgICAgaWYgKGxpbmVEaXNjb3VudCkge1xyXG4gICAgICAgICAgICBpZiAobGluZURpc2NvdW50LnBlcmNlbnRhZ2VEaXNjb3VudFJlYXNvbk5hbWUgJiYgbGluZURpc2NvdW50LnBlcmNlbnRhZ2VEaXNjb3VudFJlYXNvbkNvZGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGxpbmUgZGlzY291bnRcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLk1vZGlmaWVyVmFsdWUgPSB0aGlzLnJlbW92ZURlY2ltYWwobGluZURpc2NvdW50LnVuaXRQcmljZSkgKiAtMTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5Nb2RpZmllckRhdGVUaW1lID0gb2JqLkRhdGVUaW1lQ3JlYXRlZDtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5Nb2RpZmllclJlYXNvbklEID0gbGluZURpc2NvdW50LnBlcmNlbnRhZ2VEaXNjb3VudFJlYXNvbkNvZGU7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uTW9kaWZpZXJEZXNjcmlwdGlvbiA9IGxpbmVEaXNjb3VudC5wZXJjZW50YWdlRGlzY291bnRSZWFzb25OYW1lO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLkF1dGhvcmlzaW5nVXNlcklEID0gdGhpcy51c2VySWQ7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uRGlzY291bnRUeXBlID0gbGluZURpc2NvdW50LmRpc2NvdW50VHlwZTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5YTUxTY2hlbWFWZXJzaW9uID0gMTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5PcmlnaW5hbFByaWNlID0gdGhpcy5yZW1vdmVEZWNpbWFsKGxpbmVEaXNjb3VudC5kaXNjb3VudEFtb3VudCArIChsaW5lRGlzY291bnQuZGlzY291bnRlZExpbmVQcmljZSB8fCAwKSk7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uRGlzY291bnRlZFZhbHVlID0gdGhpcy5yZW1vdmVEZWNpbWFsKGxpbmVEaXNjb3VudC51bml0UHJpY2UpO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLkRpc2NvdW50UGVyY2VudGFnZSA9IGxpbmVEaXNjb3VudC5wZXJjZW50YWdlRGlzY291bnRWYWx1ZTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5Sb3VuZGluZ1J1bGUgPSAyO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAobGluZURpc2NvdW50LnByaWNlT3ZlcnJpZGVSZWFzb25Db2RlICYmIGxpbmVEaXNjb3VudC5wcmljZU92ZXJyaWRlUmVhc29uTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgLy9wcmljZSBvdmVycmlkZVxyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10gPSB7fTtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLk1vZGlmaWVyVmFsdWUgPSB0aGlzLnJlbW92ZURlY2ltYWwobGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50KSAqIC0xO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uTW9kaWZpZXJEYXRlVGltZSA9IG9iai5EYXRlVGltZUNyZWF0ZWQ7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5Nb2RpZmllclJlYXNvbklEID0gbGluZURpc2NvdW50LnByaWNlT3ZlcnJpZGVSZWFzb25Db2RlO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uTW9kaWZpZXJSZWFzb25EZXNjcmlwdGlvbiA9IGxpbmVEaXNjb3VudC5wcmljZU92ZXJyaWRlUmVhc29uTmFtZTtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLkF1dGhvcmlzaW5nVXNlcklEID0gdGhpcy51c2VySWQ7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5YTUxTY2hlbWFWZXJzaW9uID0gMTtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLk5ld1ByaWNlID0gdGhpcy5yZW1vdmVEZWNpbWFsKGxpbmVEaXNjb3VudC51bml0UHJpY2UpO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uT3JpZ2luYWxQcmljZSA9IHRoaXMucmVtb3ZlRGVjaW1hbChsaW5lRGlzY291bnQuZGlzY291bnRlZExpbmVQcmljZSB8fCAwICsgbGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy91cGRhdGUgdGhlIHByb2R1Y3QgcHJpY2VcclxuICAgICAgICAgICAgb2JqLk5ldFZhbHVlID0gKChsaW5lRGlzY291bnQuZGlzY291bnRlZExpbmVQcmljZSB8fCAwKSArIGxpbmVEaXNjb3VudC5kaXNjb3VudEFtb3VudCkgKiAtMTtcclxuICAgICAgICAgICAgb2JqLkVmZmVjdGl2ZU5ldFZhbHVlID0gKChsaW5lRGlzY291bnQuZGlzY291bnRlZExpbmVQcmljZSB8fCAwKSArIGxpbmVEaXNjb3VudC5kaXNjb3VudEFtb3VudCkgKiAtMTtcclxuICAgICAgICAgICAgb2JqLkV4dGVuZGVkVmFsdWUgPSAoKGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlIHx8IDApICsgbGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50KSAqIC0xO1xyXG4gICAgICAgICAgICBvYmouVW5pdFByaWNlID0gKChsaW5lRGlzY291bnQuZGlzY291bnRlZExpbmVQcmljZSB8fCAwKSArIGxpbmVEaXNjb3VudC5kaXNjb3VudEFtb3VudCkgKiAtMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkUHJvZHVjdChlbGVtZW50OiBUUHJvZHVjdCwgbGluZURpc2NvdW50OiBMaW5lRGlzY291bnQpIHtcclxuICAgICAgICBsZXQgdGF4VG90YWwgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0Wyd0YXhCcmVha2Rvd24nXVsndGF4TGluZXMnXS5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0uaXRlbUxpbmVJZCA9PSBlbGVtZW50WydpdGVtTGluZUlkJ10pO1xyXG4gICAgICAgIGxldCBvYmo6IGFueSA9IHtcclxuICAgICAgICAgICAgWE1MU2NoZW1hVmVyc2lvbjogdGhpcy54bWxTY2hlbWFWZXJzaW9uLFxyXG4gICAgICAgICAgICBMaW5lTnVtYmVyOiBlbGVtZW50Lml0ZW1MaW5lSWQsXHJcbiAgICAgICAgICAgIE5ldFZhbHVlOiB0aGlzLnJlbW92ZURlY2ltYWwoZWxlbWVudC50b3RhbExpbmVQcmljZSksXHJcbiAgICAgICAgICAgIEVmZmVjdGl2ZU5ldFZhbHVlOiB0aGlzLnJlbW92ZURlY2ltYWwoZWxlbWVudC50b3RhbExpbmVQcmljZSksXHJcbiAgICAgICAgICAgIERlc2NyaXB0aW9uOiBlbGVtZW50LmRlc2NyaXB0aW9uLFxyXG4gICAgICAgICAgICBEZXZpY2VJRDogdGhpcy5kZXZpY2VJZCxcclxuICAgICAgICAgICAgVXNlcklEOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXNlck5hbWUsXHJcbiAgICAgICAgICAgIERhdGVUaW1lQ3JlYXRlZDogdGhpcy5jcmVhdGVkQXQsXHJcbiAgICAgICAgICAgIEV4dGVuZGVkVmFsdWU6IHRoaXMucmVtb3ZlRGVjaW1hbChlbGVtZW50LnByaWNlKSxcclxuICAgICAgICAgICAgVW5pdFByaWNlOiB0aGlzLnJlbW92ZURlY2ltYWwoZWxlbWVudC5wcmljZSksXHJcbiAgICAgICAgICAgIE1NR3JvdXBJRDogdGhpcy5nZXRBdHRyaWJ1dGVzKCksIC8vdG9kb1xyXG4gICAgICAgICAgICBRdWFudGl0eTogZWxlbWVudC5xdWFudGl0eS50b0ZpeGVkKDEpLFxyXG4gICAgICAgICAgICBTYWxlc3BlcnNvbklEOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXNlcklkLFxyXG4gICAgICAgICAgICBTYWxlc3BlcnNvbk5hbWU6IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC51c2VyTmFtZSxcclxuICAgICAgICAgICAgVGF4Q29kZTogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFsndGF4QnJlYWtkb3duJ11bJ3RheExpbmVzJ10uZmluZCgoaXRlbTogYW55KSA9PiBpdGVtLml0ZW1MaW5lSWQgPT0gZWxlbWVudFsnaXRlbUxpbmVJZCddKS5WQVRDb2RlLFxyXG4gICAgICAgICAgICBUYXhNb2RpZmlhYmxlOiAxLCAvL3RvZG9cclxuICAgICAgICAgICAgT3JpZ2luYWxUYXhBbW91bnQgOiAgdGhpcy5jb252ZXJ0VG9TdHJpbmcodGhpcy5nZXRvcmlnaW5sdGF4KGVsZW1lbnQsdGF4VG90YWwuVkFUKSksXHJcbiAgICAgICAgICAgIFRheEFtb3VudCA6ICB0aGlzLmNvbnZlcnRUb1N0cmluZyh0YXhUb3RhbC50YXhMaW5lVG90YWwpLFxyXG4gICAgICAgICAgICBPcmlnaW5hbFRheEFtb3VudFNldDogMSwvL3RvZG9cclxuICAgICAgICAgICAgUHJvZHVjdElEOiBlbGVtZW50LlNLVSxcclxuICAgICAgICAgICAgSGFuZEtleWVkOiAxLC8vdG9kb1xyXG4gICAgICAgICAgICBDdXN0b21lckRldGFpbHM6IFwiXCIsXHJcbiAgICAgICAgICAgIFBlcmlzaGFibGU6IHRoaXMuZ2V0QXR0cmlidXRlcygpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChsaW5lRGlzY291bnQpIHtcclxuICAgICAgICAgICAgaWYgKGxpbmVEaXNjb3VudC5wZXJjZW50YWdlRGlzY291bnRSZWFzb25OYW1lICYmIGxpbmVEaXNjb3VudC5wZXJjZW50YWdlRGlzY291bnRSZWFzb25Db2RlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBsaW5lIGRpc2NvdW50XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10gPSB7fTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5Nb2RpZmllclZhbHVlID0gdGhpcy5yZW1vdmVEZWNpbWFsKGxpbmVEaXNjb3VudC51bml0UHJpY2UpICogLTE7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uTW9kaWZpZXJEYXRlVGltZSA9IG9iai5EYXRlVGltZUNyZWF0ZWQ7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uTW9kaWZpZXJSZWFzb25JRCA9IGxpbmVEaXNjb3VudC5wZXJjZW50YWdlRGlzY291bnRSZWFzb25Db2RlO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLk1vZGlmaWVyRGVzY3JpcHRpb24gPSBsaW5lRGlzY291bnQucGVyY2VudGFnZURpc2NvdW50UmVhc29uTmFtZTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5BdXRob3Jpc2luZ1VzZXJJRCA9IHRoaXMudXNlcklkO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLkRpc2NvdW50VHlwZSA9IGxpbmVEaXNjb3VudC5kaXNjb3VudFR5cGU7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uWE1MU2NoZW1hVmVyc2lvbiA9IDE7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uT3JpZ2luYWxQcmljZSA9IHRoaXMucmVtb3ZlRGVjaW1hbChsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQgKyAobGluZURpc2NvdW50LmRpc2NvdW50ZWRMaW5lUHJpY2UgfHwgMCkpO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLkRpc2NvdW50ZWRWYWx1ZSA9IHRoaXMucmVtb3ZlRGVjaW1hbChsaW5lRGlzY291bnQudW5pdFByaWNlKTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5EaXNjb3VudFBlcmNlbnRhZ2UgPSBsaW5lRGlzY291bnQucGVyY2VudGFnZURpc2NvdW50VmFsdWU7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uUm91bmRpbmdSdWxlID0gMjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGxpbmVEaXNjb3VudC5wcmljZU92ZXJyaWRlUmVhc29uQ29kZSAmJiBsaW5lRGlzY291bnQucHJpY2VPdmVycmlkZVJlYXNvbk5hbWUpIHtcclxuICAgICAgICAgICAgICAgIC8vcHJpY2Ugb3ZlcnJpZGVcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddID0ge307XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5Nb2RpZmllclZhbHVlID0gdGhpcy5yZW1vdmVEZWNpbWFsKGxpbmVEaXNjb3VudC5kaXNjb3VudEFtb3VudCkgKiAtMTtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLk1vZGlmaWVyRGF0ZVRpbWUgPSBvYmouRGF0ZVRpbWVDcmVhdGVkO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uTW9kaWZpZXJSZWFzb25JRCA9IGxpbmVEaXNjb3VudC5wcmljZU92ZXJyaWRlUmVhc29uQ29kZTtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLk1vZGlmaWVyUmVhc29uRGVzY3JpcHRpb24gPSBsaW5lRGlzY291bnQucHJpY2VPdmVycmlkZVJlYXNvbk5hbWU7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5BdXRob3Jpc2luZ1VzZXJJRCA9IHRoaXMudXNlcklkO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uWE1MU2NoZW1hVmVyc2lvbiA9IDE7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5OZXdQcmljZSA9IHRoaXMucmVtb3ZlRGVjaW1hbChsaW5lRGlzY291bnQudW5pdFByaWNlKTtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLk9yaWdpbmFsUHJpY2UgPSB0aGlzLnJlbW92ZURlY2ltYWwobGluZURpc2NvdW50LmRpc2NvdW50ZWRMaW5lUHJpY2UgfHwgMCArIGxpbmVEaXNjb3VudC5kaXNjb3VudEFtb3VudCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vdXBkYXRlIHRoZSBwcm9kdWN0IHByaWNlXHJcbiAgICAgICAgICAgIG9ialsnTmV0VmFsdWUnXSA9ICgobGluZURpc2NvdW50LmRpc2NvdW50ZWRMaW5lUHJpY2UgfHwgMCkgKyBsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQpO1xyXG4gICAgICAgICAgICBvYmpbJ0VmZmVjdGl2ZU5ldFZhbHVlJ10gPSAoKGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlIHx8IDApICsgbGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50KTtcclxuICAgICAgICAgICAgb2JqWydFeHRlbmRlZFZhbHVlJ10gPSAoKGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlIHx8IDApICsgbGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50KTtcclxuICAgICAgICAgICAgb2JqWydVbml0UHJpY2UnXSA9ICgobGluZURpc2NvdW50LmRpc2NvdW50ZWRMaW5lUHJpY2UgfHwgMCkgKyBsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG9iajtcclxuICAgIH1cclxuXHJcbiAgICBnZXRvcmlnaW5sdGF4KGVsZW1lbnQ6IFRQcm9kdWN0LCBWQVQpIHtcclxuICAgICAgICBsZXQgcHJpY2ViZWZvcmV0YXggPSAoZWxlbWVudC5wcmljZSAqIDEwMCkvKDEwMCArIFZBVCApXHJcbiAgICAgICAgbGV0IG9yaWdpbmFsdGF4PSBlbGVtZW50LnByaWNlIC0gcHJpY2ViZWZvcmV0YXhcclxuICAgICAgICByZXR1cm4gb3JpZ2luYWx0YXg7XHJcbiAgICB9XHJcblxyXG4gICAgY29udmVydFRvU3RyaW5nKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyh2YWx1ZSwgJyBjYW4gbm90IGJlIGNvbnZlcnRlZCBpbiBzdHJpbmcnLCBlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2VuZXJhdGVEeW5hbWljU3RvY2tMb29rVXAoKSB7XHJcbiAgICAgICAgbGV0IHggPSAnMCc7XHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5wcm9kdWN0cy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQuZGVsaXZlcnlNZXRob2QgPT09ICcxJyB8fCBlbGVtZW50LmRlbGl2ZXJ5TWV0aG9kID09PSAnMicpIHtcclxuICAgICAgICAgICAgICAgIHggPSAnMSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4geDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBdHRyaWJ1dGVzKCl7XHJcbiAgICAgICAgbGV0IG5hbWU6IHN0cmluZyB8IGFueVtdID0gW11cclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnByb2R1Y3RzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIGVsZW1lbnQuYXR0cmlidXRlcyAmJiBlbGVtZW50LmF0dHJpYnV0ZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgbmFtZSA9IGVsZW1lbnQuYXR0cmlidXRlcy5maWx0ZXIoKHg6IGFueSkgPT4geC5uYW1lLnRvVXBwZXJDYXNlKCkgPT09IGVsZW1lbnQubmFtZS50b1VwcGVyQ2FzZSgpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChuYW1lLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5hbWVbMF0udmFsdWVcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgcmV0dXJuIFwiXCJcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0ZGF0ZShkYXRlOnN0cmluZyl7XHJcbiAgICAgICAgbGV0IG9mZnNldCA9IHRoaXMuZ2VuZXJhdGVUaW1lem9uZW9mZnNldChkYXRlKSAqIC0xO1xyXG4gICAgICAgIGxldCBvZmZzZXRIb3VycyA9IE1hdGguYWJzKE1hdGguZmxvb3Iob2Zmc2V0IC8gNjApKTsgICAgICAgIFxyXG5cdCAgICBsZXQgb2Zmc2V0TWludXRlcyA9IE1hdGguYWJzKG9mZnNldCkgLSBvZmZzZXRIb3VycyAqIDYwO1xyXG5cclxuICAgICAgICBsZXQgb2Zmc2V0U2lnbiA9ICcrJztcclxuICAgICAgICBpZiAob2Zmc2V0IDwgMCkge1xyXG4gICAgICAgICAgICBvZmZzZXRTaWduID0gJy0nO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG5ld2RhdGUgPSBkYXRlLnN1YnN0cmluZygwLDE5KTtcclxuICAgICAgICBsZXQgeCA9IChuZXdkYXRlKyBvZmZzZXRTaWduICtvZmZzZXRIb3VycysnOicrb2Zmc2V0TWludXRlcykudG9TdHJpbmcoKTtcclxuICAgICAgICByZXR1cm4geDsgICAgICAgIFxyXG4gICAgfVxyXG4gICAgXHJcbn0iXX0=