@dealpos-npm/ng-dealpos-library 2.0.0 → 2.0.2
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.
- package/constants/src/Constants.d.ts +24 -0
- package/esm2022/constants/src/Constants.mjs +70 -1
- package/esm2022/services/http/src/http.service.mjs +114 -43
- package/fesm2022/dealpos-npm-ng-dealpos-library-constants.mjs +69 -0
- package/fesm2022/dealpos-npm-ng-dealpos-library-constants.mjs.map +1 -1
- package/fesm2022/dealpos-npm-ng-dealpos-library-services-http.mjs +113 -42
- package/fesm2022/dealpos-npm-ng-dealpos-library-services-http.mjs.map +1 -1
- package/package.json +13 -13
- package/services/http/src/http.service.d.ts +17 -2
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
export declare class Constants {
|
|
2
|
+
static emailRegex: RegExp;
|
|
3
|
+
static phoneNumberRegex: RegExp;
|
|
2
4
|
static GuidEmpty: string;
|
|
3
5
|
static DecimalMinValue: string;
|
|
4
6
|
static InputLockTimeSpan: number;
|
|
5
7
|
static MinDate: string;
|
|
6
8
|
static MinTime: string;
|
|
7
9
|
static StringFormat(msg: string, ...args: string[]): string;
|
|
10
|
+
static isMobileDevice: boolean;
|
|
8
11
|
static IsNotEmpty(value: any): boolean;
|
|
9
12
|
static IsEmpty(value: any): boolean;
|
|
10
13
|
static containsOnlySpaces(str: string): boolean;
|
|
@@ -80,6 +83,27 @@ export declare class Constants {
|
|
|
80
83
|
lastDay: Date;
|
|
81
84
|
};
|
|
82
85
|
static setDateTime(time: string, date: Date): Date;
|
|
86
|
+
static isMaskingField(value?: string): boolean;
|
|
87
|
+
static generateMaskingField(configMaskingField?: string[]): {};
|
|
88
|
+
/**
|
|
89
|
+
* Check if JS API function is supported in a current browser
|
|
90
|
+
* @param api ex: structuredClone
|
|
91
|
+
*/
|
|
92
|
+
static checkJSApiSupported(api: string): boolean;
|
|
93
|
+
/**
|
|
94
|
+
* copy of all elements of the original object.
|
|
95
|
+
* Changes made to the original object will not be reflected in the copy
|
|
96
|
+
* @param object
|
|
97
|
+
* @param type
|
|
98
|
+
*/
|
|
99
|
+
static cloneObject(object: any): any;
|
|
100
|
+
/**
|
|
101
|
+
* format title for from filter to showing in title
|
|
102
|
+
* @param startDate
|
|
103
|
+
* @param endDate
|
|
104
|
+
* @returns
|
|
105
|
+
*/
|
|
106
|
+
static formatTitleFromDate(startDate: Date, endDate: Date): string | null;
|
|
83
107
|
}
|
|
84
108
|
export declare function getImageInfo(src: string): Promise<unknown>;
|
|
85
109
|
export declare class LocalDataKey {
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export class Constants {
|
|
2
|
+
static { this.emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/; }
|
|
3
|
+
static { this.phoneNumberRegex = /^\d+$/; }
|
|
2
4
|
static { this.GuidEmpty = "00000000-0000-0000-0000-000000000000"; }
|
|
3
5
|
static { this.DecimalMinValue = "-7.922816251426434e+28"; }
|
|
4
6
|
static { this.InputLockTimeSpan = 500; }
|
|
@@ -10,6 +12,7 @@ export class Constants {
|
|
|
10
12
|
}
|
|
11
13
|
return msg;
|
|
12
14
|
}
|
|
15
|
+
static { this.isMobileDevice = (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)); }
|
|
13
16
|
static IsNotEmpty(value) {
|
|
14
17
|
if (value != "" &&
|
|
15
18
|
!Constants.containsOnlySpaces(value) &&
|
|
@@ -249,6 +252,72 @@ export class Constants {
|
|
|
249
252
|
newDate.setMinutes(parseInt(times[1]));
|
|
250
253
|
return newDate;
|
|
251
254
|
}
|
|
255
|
+
static isMaskingField(value = "") {
|
|
256
|
+
const hasQuestionMark = value.includes("?");
|
|
257
|
+
return hasQuestionMark;
|
|
258
|
+
}
|
|
259
|
+
static generateMaskingField(configMaskingField = []) {
|
|
260
|
+
let maskingFields = {};
|
|
261
|
+
configMaskingField
|
|
262
|
+
.forEach((field, i) => {
|
|
263
|
+
field = field.split(' ')?.join('');
|
|
264
|
+
maskingFields = { ...maskingFields, [field]: true };
|
|
265
|
+
});
|
|
266
|
+
return maskingFields;
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Check if JS API function is supported in a current browser
|
|
270
|
+
* @param api ex: structuredClone
|
|
271
|
+
*/
|
|
272
|
+
static checkJSApiSupported(api) {
|
|
273
|
+
let isSupported;
|
|
274
|
+
if (api in window) {
|
|
275
|
+
isSupported = true;
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
isSupported = false;
|
|
279
|
+
}
|
|
280
|
+
return isSupported;
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* copy of all elements of the original object.
|
|
284
|
+
* Changes made to the original object will not be reflected in the copy
|
|
285
|
+
* @param object
|
|
286
|
+
* @param type
|
|
287
|
+
*/
|
|
288
|
+
static cloneObject(object) {
|
|
289
|
+
let newObject;
|
|
290
|
+
if (this.checkJSApiSupported('structuredClone')) {
|
|
291
|
+
newObject = structuredClone(object);
|
|
292
|
+
}
|
|
293
|
+
else {
|
|
294
|
+
newObject = JSON.parse(JSON.stringify(object));
|
|
295
|
+
}
|
|
296
|
+
return newObject;
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* format title for from filter to showing in title
|
|
300
|
+
* @param startDate
|
|
301
|
+
* @param endDate
|
|
302
|
+
* @returns
|
|
303
|
+
*/
|
|
304
|
+
static formatTitleFromDate(startDate, endDate) {
|
|
305
|
+
let format = null;
|
|
306
|
+
const startDateObj = new Date(startDate);
|
|
307
|
+
const endDateObj = new Date(endDate);
|
|
308
|
+
if (startDateObj.getDate() != endDateObj.getDate()) {
|
|
309
|
+
format = "d";
|
|
310
|
+
}
|
|
311
|
+
// set format only days on same month
|
|
312
|
+
if (startDateObj.getMonth() != endDateObj.getMonth()) {
|
|
313
|
+
format = "d MMM";
|
|
314
|
+
}
|
|
315
|
+
// set full format when different year
|
|
316
|
+
if (startDateObj.getFullYear() != endDateObj.getFullYear()) {
|
|
317
|
+
format = "d MMM yyyy";
|
|
318
|
+
}
|
|
319
|
+
return format;
|
|
320
|
+
}
|
|
252
321
|
}
|
|
253
322
|
export function getImageInfo(src) {
|
|
254
323
|
return new Promise((resolve, reject) => {
|
|
@@ -322,4 +391,4 @@ export class LocalDataKey {
|
|
|
322
391
|
static { this.ForecastData = "Inventory/Daystozero"; }
|
|
323
392
|
static { this.ForecastLoader = "InventoryLoader/Daystozero"; }
|
|
324
393
|
}
|
|
325
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVhbHBvcy1ucG0vbmctZGVhbHBvcy1saWJyYXJ5L2NvbnN0YW50cy9zcmMvQ29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTyxTQUFTO2FBQ1gsY0FBUyxHQUFHLHNDQUFzQyxDQUFDO2FBQ25ELG9CQUFlLEdBQUcsd0JBQXdCLENBQUM7YUFDM0Msc0JBQWlCLEdBQUcsR0FBRyxDQUFDO2FBQ3hCLFlBQU8sR0FBRyxxQkFBcUIsQ0FBQzthQUNoQyxZQUFPLEdBQUcsVUFBVSxDQUFDO0lBQzVCLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBVyxFQUFFLEdBQUcsSUFBYztRQUM5QyxLQUFLLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQ3RDLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDM0MsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBVTtRQUN4QixJQUNJLEtBQUssSUFBSSxFQUFFO1lBQ1gsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDO1lBQ3BDLEtBQUssSUFBSSxTQUFTLENBQUMsU0FBUztZQUM1QixLQUFLLElBQUksU0FBUztZQUNsQixLQUFLLElBQUksSUFBSSxFQUNmLENBQUM7WUFDQyxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFVO1FBQ3JCLElBQ0ksS0FBSyxJQUFJ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LGdDQUFnQyxDQUFDO2FBQzVELHFCQUFnQixHQUFHLDZCQUE2QixDQUFDO0lBRXhELFlBQVk7YUFDTCxpQkFBWSxHQUFHLHNCQUFzQixDQUFDO2FBQ3RDLG1CQUFjLEdBQUcsNEJBQTRCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgQ29uc3RhbnRzIHtcclxuICAgIHN0YXRpYyBHdWlkRW1wdHkgPSBcIjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiO1xyXG4gICAgc3RhdGljIERlY2ltYWxNaW5WYWx1ZSA9IFwiLTcuOTIyODE2MjUxNDI2NDM0ZSsyOFwiO1xyXG4gICAgc3RhdGljIElucHV0TG9ja1RpbWVTcGFuID0gNTAwO1xyXG4gICAgc3RhdGljIE1pbkRhdGUgPSBcIjAwMDEtMDEtMDFUMDA6MDA6MDBcIjtcclxuICAgIHN0YXRpYyBNaW5UaW1lID0gXCIwMDowMDowMFwiO1xyXG4gICAgc3RhdGljIFN0cmluZ0Zvcm1hdChtc2c6IHN0cmluZywgLi4uYXJnczogc3RyaW5nW10pOiBzdHJpbmcge1xyXG4gICAgICAgIGZvciAobGV0IF9pID0gMDsgX2kgPCBhcmdzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICBtc2cgPSBtc2cucmVwbGFjZShgeyR7X2l9fWAsIGFyZ3NbX2ldKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG1zZztcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgSXNOb3RFbXB0eSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB2YWx1ZSAhPSBcIlwiICYmXHJcbiAgICAgICAgICAgICFDb25zdGFudHMuY29udGFpbnNPbmx5U3BhY2VzKHZhbHVlKSAmJlxyXG4gICAgICAgICAgICB2YWx1ZSAhPSBDb25zdGFudHMuR3VpZEVtcHR5ICYmXHJcbiAgICAgICAgICAgIHZhbHVlICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgICB2YWx1ZSAhPSBudWxsXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIElzRW1wdHkodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgdmFsdWUgPT0gXCJcIiB8fFxyXG4gICAgICAgICAgICBDb25zdGFudHMuY29udGFpbnNPbmx5U3BhY2VzKHZhbHVlKSB8fFxyXG4gICAgICAgICAgICB2YWx1ZSA9PSB1bmRlZmluZWQgfHxcclxuICAgICAgICAgICAgdmFsdWUgPT0gbnVsbCB8fFxyXG4gICAgICAgICAgICB2YWx1ZSA9PSBDb25zdGFudHMuR3VpZEVtcHR5XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2hlY2sgd2hldGhlciBzdHJpbmcgb25seSBjb250YWlucyBibGFuayBzcGFjZVxyXG4gICAgc3RhdGljIGNvbnRhaW5zT25seVNwYWNlcyhzdHI6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiAvXlxccyokLy50ZXN0KHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIEZpbHRlckJ5SUQoYXJyYXk6IGFueVtdLCBpZDogYW55KTogYW55IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBsaXN0ID0gYXJyYXkuZmlsdGVyKCh4KSA9PiB4LklEID09IGlkKTtcclxuICAgICAgICAgICAgaWYgKGxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGxpc3RbMF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChleCkgeyB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIE1vbnRoczogeyBJRDogbnVtYmVyLCBMYWJlbDogc3RyaW5nIH1bXSA9IFtcclxuICAgICAgICB7IElEOiAxLCBMYWJlbDogXCJKYW51YXJ5XCIgfSxcclxuICAgICAgICB7IElEOiAyLCBMYWJlbDogXCJGZWJydWFyeVwiIH0sXHJcbiAgICAgICAgeyBJRDogMywgTGFiZWw6IFwiTWFyY2hcIiB9LFxyXG4gICAgICAgIHsgSUQ6IDQsIExhYmVsOiBcIkFwcmlsXCIgfSxcclxuICAgICAgICB7IElEOiA1LCBMYWJlbDogXCJNYXlcIiB9LFxyXG4gICAgICAgIHsgSUQ6IDYsIExhYmVsOiBcIkp1bmVcIiB9LFxyXG4gICAgICAgIHsgSUQ6IDcsIExhYmVsOiBcIkp1bHlcIiB9LFxyXG4gICAgICAgIHsgSUQ6IDgsIExhYmVsOiBcIkF1Z3VzdFwiIH0sXHJcbiAgICAgICAgeyBJRDogOSwgTGFiZWw6IFwiU2VwdGVtYmVyXCIgfSxcclxuICAgICAgICB7IElEOiAxMCwgTGFiZWw6IFwiT2N0b2JlclwiIH0sXHJcbiAgICAgICAgeyBJRDogMTEsIExhYmVsOiBcIk5vdmVtYmVyXCIgfSxcclxuICAgICAgICB7IElEOiAxMiwgTGFiZWw6IFwiRGVjZW1iZXJcIiB9LFxyXG4gICAgXTtcclxuXHJcbiAgICBzdGF0aWMgR2VuZXJhdGVZZWFycyhjdXJyWWVhcjogYW55LCBsZW5ndGg6IGFueSwgSXNQcmV2aW91czogYW55KTogYW55W10ge1xyXG4gICAgICAgIGxldCBtdWx0aXBsaWVyID0gLTE7XHJcbiAgICAgICAgaWYgKGxlbmd0aCA9PSB1bmRlZmluZWQgfHwgbGVuZ3RoID09IG51bGwpIGxlbmd0aCA9IDExO1xyXG4gICAgICAgIGlmIChJc1ByZXZpb3VzID09IHVuZGVmaW5lZCB8fCBJc1ByZXZpb3VzID09IG51bGwgfHwgIUlzUHJldmlvdXMpXHJcbiAgICAgICAgICAgIG11bHRpcGxpZXIgPSAxO1xyXG5cclxuICAgICAgICBjb25zdCB5ZWFycyA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgeWVhcnMucHVzaChjdXJyWWVhciArIGkgKiBtdWx0aXBsaWVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHllYXJzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVmYWN0b3IgZnVuY3Rpb25cclxuICAgICAqIEBwYXJhbSBkYXRlXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBEYXRlT25seShkYXRlPzogRGF0ZSk6IERhdGUge1xyXG4gICAgICAgIGlmIChkYXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShuZXcgRGF0ZShkYXRlKS50b0RhdGVTdHJpbmcoKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKG5ldyBEYXRlKCkudG9EYXRlU3RyaW5nKCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIGphdmFzY3JpcHQgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBkYXRlcyBpbiBkYXlzXHJcbiAgICAgKiBAcGFyYW0gc3RhcnREYXRlIFxyXG4gICAgICogQHBhcmFtIGVuZERhdGUgXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBkaWZmZXJlbnRJbkRheXMoXHJcbiAgICAgICAgc3RhcnREYXRlOiBEYXRlLFxyXG4gICAgICAgIGVuZERhdGU6IERhdGVcclxuICAgICk6IG51bWJlciB7XHJcbiAgICAgICAgLy8gVG8gY2FsY3VsYXRlIHRoZSB0aW1lIGRpZmZlcmVuY2Ugb2YgdHdvIGRhdGVzXHJcbiAgICAgICAgbGV0IERpZmZlcmVuY2VfSW5fVGltZSA9IGVuZERhdGUuZ2V0VGltZSgpIC0gc3RhcnREYXRlLmdldFRpbWUoKTtcclxuXHJcbiAgICAgICAgLy8gVG8gY2FsY3VsYXRlIHRoZSBuby4gb2YgZGF5cyBiZXR3ZWVuIHR3byBkYXRlc1xyXG4gICAgICAgIGxldCBEaWZmZXJlbmNlX0luX0RheXMgPSBNYXRoLmZsb29yKFxyXG4gICAgICAgICAgICBEaWZmZXJlbmNlX0luX1RpbWUgLyAoMTAwMCAqIDM2MDAgKiAyNClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm4gRGlmZmVyZW5jZV9Jbl9EYXlzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogIGphdmFzY3JpcHQgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBkYXRlcyBpbiBtaW51dGVzXHJcbiAgICAgKiBAcGFyYW0gZHQxIFxyXG4gICAgICogQHBhcmFtIGR0MiBcclxuICAgICAqIEByZXR1cm5zIFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIG1pbnV0ZXNEaWZmKGR0MTogRGF0ZSwgZHQyOiBEYXRlKSB7XHJcblxyXG4gICAgICAgIGxldCBkaWZmTWluID0gKGR0Mi5nZXRUaW1lKCkgLSBkdDEuZ2V0VGltZSgpKSAvIDYwMDAwO1xyXG4gICAgICAgIHJldHVybiBNYXRoLmNlaWwoZGlmZk1pbik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gZGF0ZXMgaW4gaG91cnMgamF2YXNjcmlwdFxyXG4gICAgICogQHBhcmFtIGR0MSBcclxuICAgICAqIEBwYXJhbSBkdDIgXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBob3Vyc0RpZmYoZHQxOiBEYXRlLCBkdDI6IERhdGUpIHtcclxuICAgICAgICAvLyBjYWxjdWxhdGUgdGhlIHRpbWUgZGlmZmVyZW5jZSBvZiB0d28gZGF0ZXMgSmF2YVNjcmlwdFxyXG4gICAgICAgIGxldCBkaWZmVGltZSA9IChkdDIuZ2V0VGltZSgpIC0gZHQxLmdldFRpbWUoKSk7XHJcblxyXG4gICAgICAgIC8vIGNhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGRheXMgYmV0d2VlbiBob3VycyBkYXRlcyBqYXZhc2NyaXB0XHJcbiAgICAgICAgbGV0IGhvdXJzRGlmZiA9IGRpZmZUaW1lIC8gKDEwMDAgKiAzNjAwKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQoaG91cnNEaWZmLnRvRml4ZWQoMSkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlIFVuaXF1ZSBJZGVudGlmaWVyIGluIHRoZSBDbGllbnQgU2lkZSBlcXVpdmFsZW50IHRvIEMjIE5ld0d1aWQoKVxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBHdWlkX05ld0d1aWQoKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgZHQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICBsZXQgdXVpZCA9IFwieHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4XCIucmVwbGFjZShcclxuICAgICAgICAgICAgL1t4eV0vZyxcclxuICAgICAgICAgICAgZnVuY3Rpb24gKGMpIHtcclxuICAgICAgICAgICAgICAgIHZhciByID0gKGR0ICsgTWF0aC5yYW5kb20oKSAqIDE2KSAlIDE2IHwgMDtcclxuICAgICAgICAgICAgICAgIGR0ID0gTWF0aC5mbG9vcihkdCAvIDE2KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiAoYyA9PSBcInhcIiA/IHIgOiAociAmIDB4MykgfCAweDgpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIHV1aWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBwYXJzZUp3dCh0b2tlbjogc3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIGJhc2U2NFVybCA9IHRva2VuLnNwbGl0KFwiLlwiKVsxXTtcclxuICAgICAgICB2YXIgYmFzZTY0ID0gYmFzZTY0VXJsLnJlcGxhY2UoLy0vZywgXCIrXCIpLnJlcGxhY2UoL18vZywgXCIvXCIpO1xyXG4gICAgICAgIHZhciBqc29uUGF5bG9hZCA9IGRlY29kZVVSSUNvbXBvbmVudChcclxuICAgICAgICAgICAgYXRvYihiYXNlNjQpXHJcbiAgICAgICAgICAgICAgICAuc3BsaXQoXCJcIilcclxuICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKGMpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCIlXCIgKyAoXCIwMFwiICsgYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5qb2luKFwiXCIpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoanNvblBheWxvYWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgbnVtYmVyT25seShldmVudDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IGNoYXJDb2RlID0gKGV2ZW50LndoaWNoKSA/IGV2ZW50LndoaWNoIDogZXZlbnQua2V5Q29kZTtcclxuICAgICAgICBpZiAoY2hhckNvZGUgPiAzMSAmJiAoY2hhckNvZGUgPCA0OCB8fCBjaGFyQ29kZSA+IDU3KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogZm9ybWF0IG51bWJlciB0byB1bml0XHJcbiAgICAgKiBAcGFyYW0gdG90YWwgXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBmb3JtYXROdW1iZXIodG90YWw6IG51bWJlcikge1xyXG4gICAgICAgIGxldCB2YWx1ZTogc3RyaW5nID0gJyc7XHJcbiAgICAgICAgbGV0IHVuaXQgPSBcIlwiO1xyXG4gICAgICAgIGxldCBhYnNOdW1iZXIgPSBNYXRoLmFicyh0b3RhbCk7XHJcbiAgICAgICAgaWYgKGFic051bWJlciA+IDk5OSAmJiBhYnNOdW1iZXIgPCAxMDAwMDAwKSB7XHJcbiAgICAgICAgICAgIHVuaXQgPSBcIktcIjtcclxuICAgICAgICAgICAgdmFsdWUgPSAoYWJzTnVtYmVyIC8gMTAwMCkudG9GaXhlZCgwKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGFic051bWJlciA+PSAxMDAwMDAwKSB7XHJcbiAgICAgICAgICAgIHVuaXQgPSBcIk1cIjtcclxuICAgICAgICAgICAgdmFsdWUgPSAoYWJzTnVtYmVyIC8gMTAwMDAwMCkudG9GaXhlZCgwKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGFic051bWJlciA8IDkwMCkge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IGFic051bWJlci50b1N0cmluZygpOyAvL1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodG90YWwgPCAwKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gXCItXCIgKyB2YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9cXEIoPz0oXFxkezN9KSsoPyFcXGQpKS9nLCBcIixcIikgKyB1bml0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgaXNUb0RheShkYXRlOiBEYXRlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKGRhdGUpIHtcclxuICAgICAgICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgbm93LnNldEhvdXJzKDAsIDAsIDAsIDApO1xyXG4gICAgICAgICAgICByZXR1cm4gbm93LmdldFRpbWUoKSA9PSBkYXRlLmdldFRpbWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBjb21wYXJlKGE6IG51bWJlciB8IHN0cmluZywgYjogbnVtYmVyIHwgc3RyaW5nLCBpc0FzYzogYm9vbGVhbik6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIChhIDwgYiA/IC0xIDogMSkgKiAoaXNBc2MgPyAxIDogLTEpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogZ2VuZXJhdGUgc2VyaWFsIGFzIG5vdGUgd2l0aCBmb3JtYXQgWydzZXJpYWwnKlF1YW50aXR5XVxyXG4gICAgICogZXg6IFswMEFTMzIqNiwgMDA4OUFdXHJcbiAgICAgKiBAcGFyYW0gc2VyaWFscyBcclxuICAgICAqIEByZXR1cm5zIFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGdlbmVyYXRlU2VyaWFsYXNOb3RlKHNlcmlhbHM6IGFueVtdID0gW10pIHtcclxuICAgICAgICBsZXQgc2VyaWFsTm90ZTogc3RyaW5nID0gJyc7XHJcbiAgICAgICAgaWYgKHNlcmlhbHMgJiYgc2VyaWFscy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGxldCBzZXJpYWxBU1N0cmluZyA9IHNlcmlhbHMubWFwKChzZXJpYWwsIGkpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtpID4gMCA/IFwiIFwiIDogXCJcIn0ke3NlcmlhbC5OdW1iZXJ9JHsoc2VyaWFsLlF1YW50aXR5ID4gMSB8fCBzZXJpYWwuUXVhbnRpdHkgPCAwKSA/IFwiKlwiICsgc2VyaWFsLlF1YW50aXR5IDogXCJcIn1gO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgc2VyaWFsTm90ZSA9IGBbJHtzZXJpYWxBU1N0cmluZ31dYDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNlcmlhbE5vdGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBnZXREYXRlc0luUmFuZ2Uoc3RhcnREYXRlOiBEYXRlLCBlbmREYXRlOiBEYXRlKTogRGF0ZVtdIHtcclxuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoc3RhcnREYXRlLmdldFRpbWUoKSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGRhdGVzID0gW107XHJcblxyXG4gICAgICAgIHdoaWxlIChkYXRlIDw9IGVuZERhdGUpIHtcclxuICAgICAgICAgICAgZGF0ZXMucHVzaChuZXcgRGF0ZShkYXRlKSk7XHJcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGRhdGVzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIGRhdGUgXHJcbiAgICAgKiBAcGFyYW0gZGF5c0JlZm9yZSBcclxuICAgICAqIEByZXR1cm5zIFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldERheXNCZWZvcmUoZGF0ZTogRGF0ZSwgZGF5c0JlZm9yZTogbnVtYmVyKTogRGF0ZSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUuc2V0RGF0ZShuZXcgRGF0ZSgpLmdldERhdGUoKSAtIGRheXNCZWZvcmUpKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogZ2V0IGZpcnN0IGFuZCBsYXN0IGRheSBieSBtb250aCBhbmQgeWVhclxyXG4gICAgICogQHBhcmFtIG1vbnRoIFxyXG4gICAgICogQHBhcmFtIHllYXIgXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBnZXRSYW5nZURhdGUobW9udGg6IG51bWJlciwgeWVhcjogbnVtYmVyKSB7XHJcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgZGF0ZS5zZXRNb250aChtb250aCk7XHJcbiAgICAgICAgZGF0ZS5zZXRGdWxsWWVhcih5ZWFyKTtcclxuICAgICAgICBsZXQgZmlyc3REYXkgPSBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSAtIDEsIDEpO1xyXG4gICAgICAgIGxldCBsYXN0RGF5ID0gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIDApO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGZpcnN0RGF5OiBmaXJzdERheSxcclxuICAgICAgICAgICAgbGFzdERheTogbGFzdERheVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIHNldERhdGVUaW1lKHRpbWU6IHN0cmluZywgZGF0ZTogRGF0ZSk6IERhdGUge1xyXG4gICAgICAgIGxldCBuZXdEYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICBpZiAoZGF0ZSkge1xyXG4gICAgICAgICAgICBuZXdEYXRlID0gbmV3IERhdGUoZGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB0aW1lcyA9IHRpbWUuc3BsaXQoXCI6XCIpO1xyXG4gICAgICAgIG5ld0RhdGUuc2V0SG91cnMocGFyc2VJbnQodGltZXNbMF0pKTtcclxuICAgICAgICBuZXdEYXRlLnNldE1pbnV0ZXMocGFyc2VJbnQodGltZXNbMV0pKTtcclxuICAgICAgICByZXR1cm4gbmV3RGF0ZTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEltYWdlSW5mbyhzcmM6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICBsZXQgaW1hZ2UgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgICBpbWFnZS5zcmMgPSBzcmM7XHJcbiAgICAgICAgaW1hZ2VcclxuICAgICAgICAgICAgLmRlY29kZSgpXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoe1xyXG4gICAgICAgICAgICAgICAgICAgIGltZzogc3JjLFxyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogaW1hZ2UuaGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBpbWFnZS53aWR0aFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBJbWFnZSBsb2FkIGVycm9yIGZvciAke3NyY31gKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIExvY2FsRGF0YUtleSB7XHJcbiAgICBzdGF0aWMgT2ZmbGluZVF1ZXJ5TW9kZSA9IFwiT2ZmbGluZVF1ZXJ5TW9kZVwiO1xyXG4gICAgc3RhdGljIFBPU1N0b3JhZ2UgPSBcIlBPU1N0b3JhZ2VcIjtcclxuICAgIHN0YXRpYyBQcm9kdWN0cyA9IFwiUHJvZHVjdHNcIjtcclxuICAgIHN0YXRpYyBDdXN0b21lcnMgPSBcIkN1c3RvbWVyc1wiO1xyXG4gICAgc3RhdGljIE91dGxldFByaWNlcyA9IFwiT3V0bGV0UHJpY2VzXCI7XHJcbiAgICBzdGF0aWMgT3V0bGV0ID0gXCJPdXRsZXRcIjtcclxuICAgIHN0YXRpYyBQYXJrcyA9IFwiUGFya3NcIjtcclxuICAgIHN0YXRpYyBPcmRlcnMgPSBcIk9yZGVyc1wiO1xyXG4gICAgc3RhdGljIEZhaWxlZE9yZGVycyA9IFwiRmFpbGVkT3JkZXJzXCI7XHJcbiAgICBzdGF0aWMgQ29tcGxldGVkT3JkZXJzID0gXCJDb21wbGV0ZWRPcmRlcnNcIjtcclxuICAgIHN0YXRpYyBOZXdDdXN0b21lcnMgPSBcIk5ld0N1c3RvbWVyc1wiO1xyXG5cclxuICAgIHN0YXRpYyBHZXRSZXdhcmRCeVByb21vdGlvbklEID0gXCIvQVBJL1BPUy9HZXRSZXdhcmRCeVByb21vdGlvbklEXCI7XHJcbiAgICBzdGF0aWMgR2V0TGlzdFByb21vdGlvbiA9IFwiL0FQSS9QT1MvUHJvbW90aW9uXCI7XHJcblxyXG4gICAgc3RhdGljIEdlbmVyYXRlR29wYXlRckNvZGUgPSBcIi9BUEkvUE9TL0dlbmVyYXRlR29QYXlRckNvZGVcIjtcclxuICAgIHN0YXRpYyBHZW5lcmF0ZUVtcGF0S2FsaVFyQ29kZSA9IFwiL0FQSS9QT1MvR2VuZXJhdGVFbXBhdEthbGlRckNvZGVcIjtcclxuXHJcbiAgICBzdGF0aWMgVmVyaWZ5UGF5bWVudCA9IFwiL0FQSS9QYXltZW50Tm90aWZpY2F0aW9uL1ZlcmlmeVBheW1lbnRcIjtcclxuICAgIHN0YXRpYyBQYXlXaXRoT3ZvID0gXCIvQVBJL1BPUy9QYXlXaXRoT3ZvXCI7XHJcblxyXG4gICAgc3RhdGljIEludm9pY2VBNCA9IFwiL0FQSS9QcmludC9JbnZvaWNlXCI7XHJcbiAgICBzdGF0aWMgVXBsb2FkQ3N2ID0gXCIvQVBJL1BPUy9VcGxvYWRDc3ZcIjtcclxuICAgIHN0YXRpYyBVcGxvYWRDc3ZCdXkgPSBcIi9BUEkvQnV5L1VwbG9hZENzdlwiO1xyXG5cclxuICAgIHN0YXRpYyBHZW5lcmF0ZUNvbW1pc3Npb24gPSBcIi9BUEkvVHJhbnNhY3Rpb24vR2V0Q29tbWlzc2lvblwiO1xyXG5cclxuICAgIHN0YXRpYyBJbnZvaWNlSW5mbyA9IFwiL2FwaS9JbnZvaWNlL0ludm9pY2VJbmZvXCI7XHJcbiAgICBzdGF0aWMgR2VuZXJhdGVMaW5rID0gXCIvQVBJL1BheU5vdy9HZW5lcmF0ZUxpbmtcIjtcclxuXHJcbiAgICAvL0J1eVxyXG4gICAgc3RhdGljIExvYWRGb3JtQnV5ID0gXCIvQVBJL0J1eTIvTG9hZFwiO1xyXG4gICAgc3RhdGljIEJ1eUdldE91dGxldEluZm8gPSBcIi9BUEkvQnV5Mi9HZXRPdXRsZXRJbmZvXCI7XHJcbiAgICBzdGF0aWMgQnV5R2VuZXJhdGVOdW1iZXIgPSBcIi9BUEkvQnV5L0dlbmVyYXRlTnVtYmVyXCI7XHJcbiAgICBzdGF0aWMgQnV5R2V0RGF0YUJ5SUQgPSBcIi9BUEkvQnV5Mi9HZXREYXRhQnlJRFwiO1xyXG4gICAgc3RhdGljIEdldFF1aWNrS2V5ID0gXCIvQVBJL2NhdGFsb2cvcHJvZHVjdC9HZXRRdWlja0tleVwiO1xyXG4gICAgc3RhdGljIEdldFByaW50VGVtcGxhdGVJRCA9IFwiL0FQSS9CdXkvR2V0UHJpbnRUZW1wbGF0ZUlEXCI7XHJcbiAgICBzdGF0aWMgR2V0VmFyaWFudFN0b2NrQnlJRCA9IFwiL0FQSS9jYXRhbG9nL3ZhcmlhbnQvR2V0SW52ZW50b3J5QnlWYXJpYW50SURcIjtcclxuICAgIHN0YXRpYyBHZXRTdXBwbGllckludm9pY2UgPSBcIi9BUEkvQnV5L0dldFN1cHBsaWVySW52b2ljZVJldHVyXCI7XHJcbiAgICBzdGF0aWMgR2V0U3VwcGxpZXJEVE8gPSBcIi9BUEkvQ29udGFjdC9HZXRTdXBwbGllckRUT1wiO1xyXG5cclxuICAgIC8vREVMSVZFUllcclxuICAgIHN0YXRpYyBMb2FkRm9ybURlbGl2ZXJ5ID0gXCIvQVBJL1RyYW5zZmVyT3JkZXJMb2FkZXIvTG9hZEZvcm1cIjtcclxuICAgIHN0YXRpYyBEZWxpdmVyeUdlbmVyYXRlTnVtYmVyID0gXCIvQVBJL1RyYW5zZmVyT3JkZXIvR2VuZXJhdGVOdW1iZXJcIjtcclxuICAgIHN0YXRpYyBVcGRhdGVDb3VyaWVyTGlzdCA9IFwiL0FQSS9UcmFuc2Zlck9yZGVyL1VwZGF0ZUNvdXJpZXJMaXN0XCI7XHJcbiAgICBzdGF0aWMgU3VibWl0T3V0bGV0RGVsaXZlcnkgPSBcIi9BUEkvVHJhbnNmZXJPcmRlci9TdWJtaXRPcmRlclwiO1xyXG4gICAgc3RhdGljIENsZWFyT3V0bGV0ID0gXCIvQVBJL1RyYW5zZmVyT3JkZXIvQ2xlYXJPdXRsZXRcIjtcclxuICAgIHN0YXRpYyBQYXltZW50TGlzdFNvcnRpbmcgPSBcIi9BUEkvU2V0dXAvU29ydFBheW1lbnRNZXRob2RcIlxyXG4gICAgc3RhdGljIFRheExpc3RTb3J0aW5nID0gXCIvQVBJL1NldHVwL1NvcnRUYXhcIlxyXG5cclxuICAgIC8vIEVTVElNQVRFXHJcbiAgICBzdGF0aWMgTG9hZEZvcm1Fc3RpbWF0ZSA9IFwiL0FQSS9Fc3RpbWF0ZS9Mb2FkRm9ybVwiO1xyXG4gICAgc3RhdGljIEVzdGltYXRlR2VuZXJhdGVOdW1iZXIgPSBcIi9BUEkvRXN0aW1hdGUvR2VuZXJhdGVOdW1iZXJcIjtcclxuICAgIHN0YXRpYyBTdWJtaXRFc3RpbWF0ZSA9IFwiL0FQSS9Fc3RpbWF0ZS9TdWJtaXRPcmRlclwiO1xyXG5cclxuICAgIC8vIEFESlVTVE1FTlRcclxuICAgIHN0YXRpYyBMb2FkRm9ybUFkanVzdG1lbnQgPSBcIi9BUEkvQWRqdXN0bWVudC9Mb2FkRm9ybVwiO1xyXG4gICAgc3RhdGljIEFkanVzdG1lbnRHZW5lcmF0ZU51bWJlciA9IFwiL0FQSS9BZGp1c3RtZW50L0dlbmVyYXRlTnVtYmVyXCI7XHJcbiAgICBzdGF0aWMgU3VibWl0QWRqdXN0bWVudCA9IFwiL0FQSS9BZGp1c3RtZW50L1N1Ym1pdE9yZGVyXCI7XHJcblxyXG4gICAgLy8gSU5WRU5UT1JZXHJcbiAgICBzdGF0aWMgRm9yZWNhc3REYXRhID0gXCJJbnZlbnRvcnkvRGF5c3RvemVyb1wiO1xyXG4gICAgc3RhdGljIEZvcmVjYXN0TG9hZGVyID0gXCJJbnZlbnRvcnlMb2FkZXIvRGF5c3RvemVyb1wiO1xyXG59XHJcbiJdfQ==
|
|
394
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVhbHBvcy1ucG0vbmctZGVhbHBvcy1saWJyYXJ5L2NvbnN0YW50cy9zcmMvQ29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTyxTQUFTO2FBQ1gsZUFBVSxHQUFHLGtEQUFrRCxDQUFBO2FBQy9ELHFCQUFnQixHQUFHLE9BQU8sQ0FBQTthQUMxQixjQUFTLEdBQUcsc0NBQXNDLENBQUM7YUFDbkQsb0JBQWUsR0FBRyx3QkFBd0IsQ0FBQzthQUMzQyxzQkFBaUIsR0FBRyxHQUFHLENBQUM7YUFDeEIsWUFBTyxHQUFHLHFCQUFxQixDQUFDO2FBQ2hDLFlBQU8sR0FBRyxVQUFVLENBQUM7SUFDNUIsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFXLEVBQUUsR0FBRyxJQUFjO1FBQzlDLEtBQUssSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFDdEMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO2FBQ00sbUJBQWMsR0FBRyxDQUFDLGdFQUFnRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUVySCxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQVU7UUFDeEIsSUFDSSxLQUFLLElBQUksRUFBRTtZQUNYLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQztZQUNwQyxLQUFLLElBQUksU0FBUyxDQUFDLFNBQVM7WUFDNUIsS0FBSyxJQUFJLFNBQVM7WUFDbEIsS0FBSyxJQUFJLElBQUksRUFDZixDQUFDO1lB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bnN0YW50cyB7XHJcbiAgICBzdGF0aWMgZW1haWxSZWdleCA9IC9eW2EtekEtWjAtOS5fJSstXStAW2EtekEtWjAtOS4tXStcXC5bYS16QS1aXXsyLH0kL1xyXG4gICAgc3RhdGljIHBob25lTnVtYmVyUmVnZXggPSAvXlxcZCskL1xyXG4gICAgc3RhdGljIEd1aWRFbXB0eSA9IFwiMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCI7XHJcbiAgICBzdGF0aWMgRGVjaW1hbE1pblZhbHVlID0gXCItNy45MjI4MTYyNTE0MjY0MzRlKzI4XCI7XHJcbiAgICBzdGF0aWMgSW5wdXRMb2NrVGltZVNwYW4gPSA1MDA7XHJcbiAgICBzdGF0aWMgTWluRGF0ZSA9IFwiMDAwMS0wMS0wMVQwMDowMDowMFwiO1xyXG4gICAgc3RhdGljIE1pblRpbWUgPSBcIjAwOjAwOjAwXCI7XHJcbiAgICBzdGF0aWMgU3RyaW5nRm9ybWF0KG1zZzogc3RyaW5nLCAuLi5hcmdzOiBzdHJpbmdbXSk6IHN0cmluZyB7XHJcbiAgICAgICAgZm9yIChsZXQgX2kgPSAwOyBfaSA8IGFyZ3MubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIG1zZyA9IG1zZy5yZXBsYWNlKGB7JHtfaX19YCwgYXJnc1tfaV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbXNnO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGlzTW9iaWxlRGV2aWNlID0gKC9BbmRyb2lkfHdlYk9TfGlQaG9uZXxpUGFkfGlQb2R8QmxhY2tCZXJyeXxJRU1vYmlsZXxPcGVyYSBNaW5pL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSk7XHJcblxyXG4gICAgc3RhdGljIElzTm90RW1wdHkodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgdmFsdWUgIT0gXCJcIiAmJlxyXG4gICAgICAgICAgICAhQ29uc3RhbnRzLmNvbnRhaW5zT25seVNwYWNlcyh2YWx1ZSkgJiZcclxuICAgICAgICAgICAgdmFsdWUgIT0gQ29uc3RhbnRzLkd1aWRFbXB0eSAmJlxyXG4gICAgICAgICAgICB2YWx1ZSAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgICAgdmFsdWUgIT0gbnVsbFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBJc0VtcHR5KHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHZhbHVlID09IFwiXCIgfHxcclxuICAgICAgICAgICAgQ29uc3RhbnRzLmNvbnRhaW5zT25seVNwYWNlcyh2YWx1ZSkgfHxcclxuICAgICAgICAgICAgdmFsdWUgPT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgICAgICAgIHZhbHVlID09IG51bGwgfHxcclxuICAgICAgICAgICAgdmFsdWUgPT0gQ29uc3RhbnRzLkd1aWRFbXB0eVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNoZWNrIHdoZXRoZXIgc3RyaW5nIG9ubHkgY29udGFpbnMgYmxhbmsgc3BhY2VcclxuICAgIHN0YXRpYyBjb250YWluc09ubHlTcGFjZXMoc3RyOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gL15cXHMqJC8udGVzdChzdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBGaWx0ZXJCeUlEKGFycmF5OiBhbnlbXSwgaWQ6IGFueSk6IGFueSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgbGlzdCA9IGFycmF5LmZpbHRlcigoeCkgPT4geC5JRCA9PSBpZCk7XHJcbiAgICAgICAgICAgIGlmIChsaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBsaXN0WzBdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZXgpIHsgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBNb250aHM6IHsgSUQ6IG51bWJlciwgTGFiZWw6IHN0cmluZyB9W10gPSBbXHJcbiAgICAgICAgeyBJRDogMSwgTGFiZWw6IFwiSmFudWFyeVwiIH0sXHJcbiAgICAgICAgeyBJRDogMiwgTGFiZWw6IFwiRmVicnVhcnlcIiB9LFxyXG4gICAgICAgIHsgSUQ6IDMsIExhYmVsOiBcIk1hcmNoXCIgfSxcclxuICAgICAgICB7IElEOiA0LCBMYWJlbDogXCJBcHJpbFwiIH0sXHJcbiAgICAgICAgeyBJRDogNSwgTGFiZWw6IFwiTWF5XCIgfSxcclxuICAgICAgICB7IElEOiA2LCBMYWJlbDogXCJKdW5lXCIgfSxcclxuICAgICAgICB7IElEOiA3LCBMYWJlbDogXCJKdWx5XCIgfSxcclxuICAgICAgICB7IElEOiA4LCBMYWJlbDogXCJBdWd1c3RcIiB9LFxyXG4gICAgICAgIHsgSUQ6IDksIExhYmVsOiBcIlNlcHRlbWJlclwiIH0sXHJcbiAgICAgICAgeyBJRDogMTAsIExhYmVsOiBcIk9jdG9iZXJcIiB9LFxyXG4gICAgICAgIHsgSUQ6IDExLCBMYWJlbDogXCJOb3ZlbWJlclwiIH0sXHJcbiAgICAgICAgeyBJRDogMTIsIExhYmVsOiBcIkRlY2VtYmVyXCIgfSxcclxuICAgIF07XHJcblxyXG4gICAgc3RhdGljIEdlbmVyYXRlWWVhcnMoY3VyclllYXI6IGFueSwgbGVuZ3RoOiBhbnksIElzUHJldmlvdXM6IGFueSk6IGFueVtdIHtcclxuICAgICAgICBsZXQgbXVsdGlwbGllciA9IC0xO1xyXG4gICAgICAgIGlmIChsZW5ndGggPT0gdW5kZWZpbmVkIHx8IGxlbmd0aCA9PSBudWxsKSBsZW5ndGggPSAxMTtcclxuICAgICAgICBpZiAoSXNQcmV2aW91cyA9PSB1bmRlZmluZWQgfHwgSXNQcmV2aW91cyA9PSBudWxsIHx8ICFJc1ByZXZpb3VzKVxyXG4gICAgICAgICAgICBtdWx0aXBsaWVyID0gMTtcclxuXHJcbiAgICAgICAgY29uc3QgeWVhcnMgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHllYXJzLnB1c2goY3VyclllYXIgKyBpICogbXVsdGlwbGllcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB5ZWFycztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlZmFjdG9yIGZ1bmN0aW9uXHJcbiAgICAgKiBAcGFyYW0gZGF0ZVxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgRGF0ZU9ubHkoZGF0ZT86IERhdGUpOiBEYXRlIHtcclxuICAgICAgICBpZiAoZGF0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUobmV3IERhdGUoZGF0ZSkudG9EYXRlU3RyaW5nKCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShuZXcgRGF0ZSgpLnRvRGF0ZVN0cmluZygpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBqYXZhc2NyaXB0IGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gZGF0ZXMgaW4gZGF5c1xyXG4gICAgICogQHBhcmFtIHN0YXJ0RGF0ZSBcclxuICAgICAqIEBwYXJhbSBlbmREYXRlIFxyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgZGlmZmVyZW50SW5EYXlzKFxyXG4gICAgICAgIHN0YXJ0RGF0ZTogRGF0ZSxcclxuICAgICAgICBlbmREYXRlOiBEYXRlXHJcbiAgICApOiBudW1iZXIge1xyXG4gICAgICAgIC8vIFRvIGNhbGN1bGF0ZSB0aGUgdGltZSBkaWZmZXJlbmNlIG9mIHR3byBkYXRlc1xyXG4gICAgICAgIGxldCBEaWZmZXJlbmNlX0luX1RpbWUgPSBlbmREYXRlLmdldFRpbWUoKSAtIHN0YXJ0RGF0ZS5nZXRUaW1lKCk7XHJcblxyXG4gICAgICAgIC8vIFRvIGNhbGN1bGF0ZSB0aGUgbm8uIG9mIGRheXMgYmV0d2VlbiB0d28gZGF0ZXNcclxuICAgICAgICBsZXQgRGlmZmVyZW5jZV9Jbl9EYXlzID0gTWF0aC5mbG9vcihcclxuICAgICAgICAgICAgRGlmZmVyZW5jZV9Jbl9UaW1lIC8gKDEwMDAgKiAzNjAwICogMjQpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIERpZmZlcmVuY2VfSW5fRGF5cztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqICBqYXZhc2NyaXB0IGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gZGF0ZXMgaW4gbWludXRlc1xyXG4gICAgICogQHBhcmFtIGR0MSBcclxuICAgICAqIEBwYXJhbSBkdDIgXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBtaW51dGVzRGlmZihkdDE6IERhdGUsIGR0MjogRGF0ZSkge1xyXG5cclxuICAgICAgICBsZXQgZGlmZk1pbiA9IChkdDIuZ2V0VGltZSgpIC0gZHQxLmdldFRpbWUoKSkgLyA2MDAwMDtcclxuICAgICAgICByZXR1cm4gTWF0aC5jZWlsKGRpZmZNaW4pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIGRhdGVzIGluIGhvdXJzIGphdmFzY3JpcHRcclxuICAgICAqIEBwYXJhbSBkdDEgXHJcbiAgICAgKiBAcGFyYW0gZHQyIFxyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgaG91cnNEaWZmKGR0MTogRGF0ZSwgZHQyOiBEYXRlKSB7XHJcbiAgICAgICAgLy8gY2FsY3VsYXRlIHRoZSB0aW1lIGRpZmZlcmVuY2Ugb2YgdHdvIGRhdGVzIEphdmFTY3JpcHRcclxuICAgICAgICBsZXQgZGlmZlRpbWUgPSAoZHQyLmdldFRpbWUoKSAtIGR0MS5nZXRUaW1lKCkpO1xyXG5cclxuICAgICAgICAvLyBjYWxjdWxhdGUgdGhlIG51bWJlciBvZiBkYXlzIGJldHdlZW4gaG91cnMgZGF0ZXMgamF2YXNjcmlwdFxyXG4gICAgICAgIGxldCBob3Vyc0RpZmYgPSBkaWZmVGltZSAvICgxMDAwICogMzYwMCk7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUZsb2F0KGhvdXJzRGlmZi50b0ZpeGVkKDEpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBVbmlxdWUgSWRlbnRpZmllciBpbiB0aGUgQ2xpZW50IFNpZGUgZXF1aXZhbGVudCB0byBDIyBOZXdHdWlkKClcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgR3VpZF9OZXdHdWlkKCk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IGR0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgbGV0IHV1aWQgPSBcInh4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eFwiLnJlcGxhY2UoXHJcbiAgICAgICAgICAgIC9beHldL2csXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIChjKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgciA9IChkdCArIE1hdGgucmFuZG9tKCkgKiAxNikgJSAxNiB8IDA7XHJcbiAgICAgICAgICAgICAgICBkdCA9IE1hdGguZmxvb3IoZHQgLyAxNik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKGMgPT0gXCJ4XCIgPyByIDogKHIgJiAweDMpIHwgMHg4KS50b1N0cmluZygxNik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiB1dWlkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgcGFyc2VKd3QodG9rZW46IHN0cmluZykge1xyXG4gICAgICAgIHZhciBiYXNlNjRVcmwgPSB0b2tlbi5zcGxpdChcIi5cIilbMV07XHJcbiAgICAgICAgdmFyIGJhc2U2NCA9IGJhc2U2NFVybC5yZXBsYWNlKC8tL2csIFwiK1wiKS5yZXBsYWNlKC9fL2csIFwiL1wiKTtcclxuICAgICAgICB2YXIganNvblBheWxvYWQgPSBkZWNvZGVVUklDb21wb25lbnQoXHJcbiAgICAgICAgICAgIGF0b2IoYmFzZTY0KVxyXG4gICAgICAgICAgICAgICAgLnNwbGl0KFwiXCIpXHJcbiAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChjKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiJVwiICsgKFwiMDBcIiArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC0yKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuam9pbihcIlwiKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGpzb25QYXlsb2FkKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIG51bWJlck9ubHkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBjaGFyQ29kZSA9IChldmVudC53aGljaCkgPyBldmVudC53aGljaCA6IGV2ZW50LmtleUNvZGU7XHJcbiAgICAgICAgaWYgKGNoYXJDb2RlID4gMzEgJiYgKGNoYXJDb2RlIDwgNDggfHwgY2hhckNvZGUgPiA1NykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIGZvcm1hdCBudW1iZXIgdG8gdW5pdFxyXG4gICAgICogQHBhcmFtIHRvdGFsIFxyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgZm9ybWF0TnVtYmVyKHRvdGFsOiBudW1iZXIpIHtcclxuICAgICAgICBsZXQgdmFsdWU6IHN0cmluZyA9ICcnO1xyXG4gICAgICAgIGxldCB1bml0ID0gXCJcIjtcclxuICAgICAgICBsZXQgYWJzTnVtYmVyID0gTWF0aC5hYnModG90YWwpO1xyXG4gICAgICAgIGlmIChhYnNOdW1iZXIgPiA5OTkgJiYgYWJzTnVtYmVyIDwgMTAwMDAwMCkge1xyXG4gICAgICAgICAgICB1bml0ID0gXCJLXCI7XHJcbiAgICAgICAgICAgIHZhbHVlID0gKGFic051bWJlciAvIDEwMDApLnRvRml4ZWQoMCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChhYnNOdW1iZXIgPj0gMTAwMDAwMCkge1xyXG4gICAgICAgICAgICB1bml0ID0gXCJNXCI7XHJcbiAgICAgICAgICAgIHZhbHVlID0gKGFic051bWJlciAvIDEwMDAwMDApLnRvRml4ZWQoMCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChhYnNOdW1iZXIgPCA5MDApIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBhYnNOdW1iZXIudG9TdHJpbmcoKTsgLy9cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRvdGFsIDwgMCkge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IFwiLVwiICsgdmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvXFxCKD89KFxcZHszfSkrKD8hXFxkKSkvZywgXCIsXCIpICsgdW5pdDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGlzVG9EYXkoZGF0ZTogRGF0ZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmIChkYXRlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgIG5vdy5zZXRIb3VycygwLCAwLCAwLCAwKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5vdy5nZXRUaW1lKCkgPT0gZGF0ZS5nZXRUaW1lKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgY29tcGFyZShhOiBudW1iZXIgfCBzdHJpbmcsIGI6IG51bWJlciB8IHN0cmluZywgaXNBc2M6IGJvb2xlYW4pOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiAoYSA8IGIgPyAtMSA6IDEpICogKGlzQXNjID8gMSA6IC0xKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIGdlbmVyYXRlIHNlcmlhbCBhcyBub3RlIHdpdGggZm9ybWF0IFsnc2VyaWFsJypRdWFudGl0eV1cclxuICAgICAqIGV4OiBbMDBBUzMyKjYsIDAwODlBXVxyXG4gICAgICogQHBhcmFtIHNlcmlhbHMgXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBnZW5lcmF0ZVNlcmlhbGFzTm90ZShzZXJpYWxzOiBhbnlbXSA9IFtdKSB7XHJcbiAgICAgICAgbGV0IHNlcmlhbE5vdGU6IHN0cmluZyA9ICcnO1xyXG4gICAgICAgIGlmIChzZXJpYWxzICYmIHNlcmlhbHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgc2VyaWFsQVNTdHJpbmcgPSBzZXJpYWxzLm1hcCgoc2VyaWFsLCBpKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7aSA+IDAgPyBcIiBcIiA6IFwiXCJ9JHtzZXJpYWwuTnVtYmVyfSR7KHNlcmlhbC5RdWFudGl0eSA+IDEgfHwgc2VyaWFsLlF1YW50aXR5IDwgMCkgPyBcIipcIiArIHNlcmlhbC5RdWFudGl0eSA6IFwiXCJ9YDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHNlcmlhbE5vdGUgPSBgWyR7c2VyaWFsQVNTdHJpbmd9XWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzZXJpYWxOb3RlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0RGF0ZXNJblJhbmdlKHN0YXJ0RGF0ZTogRGF0ZSwgZW5kRGF0ZTogRGF0ZSk6IERhdGVbXSB7XHJcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHN0YXJ0RGF0ZS5nZXRUaW1lKCkpO1xyXG5cclxuICAgICAgICBjb25zdCBkYXRlcyA9IFtdO1xyXG5cclxuICAgICAgICB3aGlsZSAoZGF0ZSA8PSBlbmREYXRlKSB7XHJcbiAgICAgICAgICAgIGRhdGVzLnB1c2gobmV3IERhdGUoZGF0ZSkpO1xyXG4gICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyAxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBkYXRlcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSBkYXRlIFxyXG4gICAgICogQHBhcmFtIGRheXNCZWZvcmUgXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBnZXREYXlzQmVmb3JlKGRhdGU6IERhdGUsIGRheXNCZWZvcmU6IG51bWJlcik6IERhdGUge1xyXG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShkYXRlLnNldERhdGUobmV3IERhdGUoKS5nZXREYXRlKCkgLSBkYXlzQmVmb3JlKSlcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIGdldCBmaXJzdCBhbmQgbGFzdCBkYXkgYnkgbW9udGggYW5kIHllYXJcclxuICAgICAqIEBwYXJhbSBtb250aCBcclxuICAgICAqIEBwYXJhbSB5ZWFyIFxyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0UmFuZ2VEYXRlKG1vbnRoOiBudW1iZXIsIHllYXI6IG51bWJlcikge1xyXG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIGRhdGUuc2V0TW9udGgobW9udGgpO1xyXG4gICAgICAgIGRhdGUuc2V0RnVsbFllYXIoeWVhcik7XHJcbiAgICAgICAgbGV0IGZpcnN0RGF5ID0gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCkgLSAxLCAxKTtcclxuICAgICAgICBsZXQgbGFzdERheSA9IG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCAwKTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBmaXJzdERheTogZmlyc3REYXksXHJcbiAgICAgICAgICAgIGxhc3REYXk6IGxhc3REYXlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBzZXREYXRlVGltZSh0aW1lOiBzdHJpbmcsIGRhdGU6IERhdGUpOiBEYXRlIHtcclxuICAgICAgICBsZXQgbmV3RGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgaWYgKGRhdGUpIHtcclxuICAgICAgICAgICAgbmV3RGF0ZSA9IG5ldyBEYXRlKGRhdGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgdGltZXMgPSB0aW1lLnNwbGl0KFwiOlwiKTtcclxuICAgICAgICBuZXdEYXRlLnNldEhvdXJzKHBhcnNlSW50KHRpbWVzWzBdKSk7XHJcbiAgICAgICAgbmV3RGF0ZS5zZXRNaW51dGVzKHBhcnNlSW50KHRpbWVzWzFdKSk7XHJcbiAgICAgICAgcmV0dXJuIG5ld0RhdGU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGlzTWFza2luZ0ZpZWxkKHZhbHVlID0gXCJcIik6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IGhhc1F1ZXN0aW9uTWFyayA9ICh2YWx1ZSBhcyBzdHJpbmcpLmluY2x1ZGVzKFwiP1wiKTtcclxuICAgICAgICByZXR1cm4gaGFzUXVlc3Rpb25NYXJrO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2VuZXJhdGVNYXNraW5nRmllbGQoY29uZmlnTWFza2luZ0ZpZWxkOiBzdHJpbmdbXSA9IFtdKSB7XHJcbiAgICAgICAgbGV0IG1hc2tpbmdGaWVsZHMgPSB7fTtcclxuICAgICAgICBjb25maWdNYXNraW5nRmllbGRcclxuICAgICAgICAgICAgLmZvckVhY2goKGZpZWxkLCBpKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBmaWVsZCA9IGZpZWxkLnNwbGl0KCcgJyk/LmpvaW4oJycpO1xyXG4gICAgICAgICAgICAgICAgbWFza2luZ0ZpZWxkcyA9IHsgLi4ubWFza2luZ0ZpZWxkcywgW2ZpZWxkXTogdHJ1ZSB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBtYXNraW5nRmllbGRzO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAqIENoZWNrIGlmIEpTIEFQSSBmdW5jdGlvbiBpcyBzdXBwb3J0ZWQgaW4gYSBjdXJyZW50IGJyb3dzZXJcclxuICogQHBhcmFtIGFwaSBleDogc3RydWN0dXJlZENsb25lXHJcbiAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBjaGVja0pTQXBpU3VwcG9ydGVkKGFwaTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgbGV0IGlzU3VwcG9ydGVkOiBib29sZWFuO1xyXG4gICAgICAgIGlmIChhcGkgaW4gd2luZG93KSB7XHJcbiAgICAgICAgICAgIGlzU3VwcG9ydGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlzU3VwcG9ydGVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpc1N1cHBvcnRlZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIGNvcHkgb2YgYWxsIGVsZW1lbnRzIG9mIHRoZSBvcmlnaW5hbCBvYmplY3QuIFxyXG4gICAgICogQ2hhbmdlcyBtYWRlIHRvIHRoZSBvcmlnaW5hbCBvYmplY3Qgd2lsbCBub3QgYmUgcmVmbGVjdGVkIGluIHRoZSBjb3B5XHJcbiAgICAgKiBAcGFyYW0gb2JqZWN0IFxyXG4gICAgICogQHBhcmFtIHR5cGUgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgY2xvbmVPYmplY3Qob2JqZWN0OiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGxldCBuZXdPYmplY3Q6IGFueTtcclxuICAgICAgICBpZiAodGhpcy5jaGVja0pTQXBpU3VwcG9ydGVkKCdzdHJ1Y3R1cmVkQ2xvbmUnKSkge1xyXG4gICAgICAgICAgICBuZXdPYmplY3QgPSBzdHJ1Y3R1cmVkQ2xvbmUob2JqZWN0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG5ld09iamVjdCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqZWN0KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXdPYmplY3Q7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICogZm9ybWF0IHRpdGxlIGZvciBmcm9tIGZpbHRlciB0byBzaG93aW5nIGluIHRpdGxlXHJcbiAqIEBwYXJhbSBzdGFydERhdGVcclxuICogQHBhcmFtIGVuZERhdGVcclxuICogQHJldHVybnNcclxuICovXHJcbiAgICBzdGF0aWMgZm9ybWF0VGl0bGVGcm9tRGF0ZShzdGFydERhdGU6IERhdGUsIGVuZERhdGU6IERhdGUpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICBsZXQgZm9ybWF0ID0gbnVsbDtcclxuICAgICAgICBjb25zdCBzdGFydERhdGVPYmogPSBuZXcgRGF0ZShzdGFydERhdGUpO1xyXG4gICAgICAgIGNvbnN0IGVuZERhdGVPYmogPSBuZXcgRGF0ZShlbmREYXRlKTtcclxuXHJcbiAgICAgICAgaWYgKHN0YXJ0RGF0ZU9iai5nZXREYXRlKCkgIT0gZW5kRGF0ZU9iai5nZXREYXRlKCkpIHtcclxuICAgICAgICAgICAgZm9ybWF0ID0gXCJkXCI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzZXQgZm9ybWF0IG9ubHkgZGF5cyBvbiBzYW1lIG1vbnRoXHJcbiAgICAgICAgaWYgKHN0YXJ0RGF0ZU9iai5nZXRNb250aCgpICE9IGVuZERhdGVPYmouZ2V0TW9udGgoKSkge1xyXG4gICAgICAgICAgICBmb3JtYXQgPSBcImQgTU1NXCI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzZXQgZnVsbCBmb3JtYXQgd2hlbiBkaWZmZXJlbnQgeWVhclxyXG4gICAgICAgIGlmIChzdGFydERhdGVPYmouZ2V0RnVsbFllYXIoKSAhPSBlbmREYXRlT2JqLmdldEZ1bGxZZWFyKCkpIHtcclxuICAgICAgICAgICAgZm9ybWF0ID0gXCJkIE1NTSB5eXl5XCI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZm9ybWF0O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW1hZ2VJbmZvKHNyYzogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIGxldCBpbWFnZSA9IG5ldyBJbWFnZSgpO1xyXG4gICAgICAgIGltYWdlLnNyYyA9IHNyYztcclxuICAgICAgICBpbWFnZVxyXG4gICAgICAgICAgICAuZGVjb2RlKClcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgaW1nOiBzcmMsXHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBpbWFnZS5oZWlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGltYWdlLndpZHRoXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYEltYWdlIGxvYWQgZXJyb3IgZm9yICR7c3JjfWApKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuXHJcblxyXG5leHBvcnQgY2xhc3MgTG9jYWxEYXRhS2V5IHtcclxuICAgIHN0YXRpYyBPZmZsaW5lUXVlcnlNb2RlID0gXCJPZmZsaW5lUXVlcnlNb2RlXCI7XHJcbiAgICBzdGF0aWMgUE9TU3RvcmFnZSA9IFwiUE9TU3RvcmFnZVwiO1xyXG4gICAgc3RhdGljIFByb2R1Y3RzID0gXCJQcm9kdWN0c1wiO1xyXG4gICAgc3RhdGljIEN1c3RvbWVycyA9IFwiQ3VzdG9tZXJzXCI7XHJcbiAgICBzdGF0aWMgT3V0bGV0UHJpY2VzID0gXCJPdXRsZXRQcmljZXNcIjtcclxuICAgIHN0YXRpYyBPdXRsZXQgPSBcIk91dGxldFwiO1xyXG4gICAgc3RhdGljIFBhcmtzID0gXCJQYXJrc1wiO1xyXG4gICAgc3RhdGljIE9yZGVycyA9IFwiT3JkZXJzXCI7XHJcbiAgICBzdGF0aWMgRmFpbGVkT3JkZXJzID0gXCJGYWlsZWRPcmRlcnNcIjtcclxuICAgIHN0YXRpYyBDb21wbGV0ZWRPcmRlcnMgPSBcIkNvbXBsZXRlZE9yZGVyc1wiO1xyXG4gICAgc3RhdGljIE5ld0N1c3RvbWVycyA9IFwiTmV3Q3VzdG9tZXJzXCI7XHJcblxyXG4gICAgc3RhdGljIEdldFJld2FyZEJ5UHJvbW90aW9uSUQgPSBcIi9BUEkvUE9TL0dldFJld2FyZEJ5UHJvbW90aW9uSURcIjtcclxuICAgIHN0YXRpYyBHZXRMaXN0UHJvbW90aW9uID0gXCIvQVBJL1BPUy9Qcm9tb3Rpb25cIjtcclxuXHJcbiAgICBzdGF0aWMgR2VuZXJhdGVHb3BheVFyQ29kZSA9IFwiL0FQSS9QT1MvR2VuZXJhdGVHb1BheVFyQ29kZVwiO1xyXG4gICAgc3RhdGljIEdlbmVyYXRlRW1wYXRLYWxpUXJDb2RlID0gXCIvQVBJL1BPUy9HZW5lcmF0ZUVtcGF0S2FsaVFyQ29kZVwiO1xyXG5cclxuICAgIHN0YXRpYyBWZXJpZnlQYXltZW50ID0gXCIvQVBJL1BheW1lbnROb3RpZmljYXRpb24vVmVyaWZ5UGF5bWVudFwiO1xyXG4gICAgc3RhdGljIFBheVdpdGhPdm8gPSBcIi9BUEkvUE9TL1BheVdpdGhPdm9cIjtcclxuXHJcbiAgICBzdGF0aWMgSW52b2ljZUE0ID0gXCIvQVBJL1ByaW50L0ludm9pY2VcIjtcclxuICAgIHN0YXRpYyBVcGxvYWRDc3YgPSBcIi9BUEkvUE9TL1VwbG9hZENzdlwiO1xyXG4gICAgc3RhdGljIFVwbG9hZENzdkJ1eSA9IFwiL0FQSS9CdXkvVXBsb2FkQ3N2XCI7XHJcblxyXG4gICAgc3RhdGljIEdlbmVyYXRlQ29tbWlzc2lvbiA9IFwiL0FQSS9UcmFuc2FjdGlvbi9HZXRDb21taXNzaW9uXCI7XHJcblxyXG4gICAgc3RhdGljIEludm9pY2VJbmZvID0gXCIvYXBpL0ludm9pY2UvSW52b2ljZUluZm9cIjtcclxuICAgIHN0YXRpYyBHZW5lcmF0ZUxpbmsgPSBcIi9BUEkvUGF5Tm93L0dlbmVyYXRlTGlua1wiO1xyXG5cclxuICAgIC8vQnV5XHJcbiAgICBzdGF0aWMgTG9hZEZvcm1CdXkgPSBcIi9BUEkvQnV5Mi9Mb2FkXCI7XHJcbiAgICBzdGF0aWMgQnV5R2V0T3V0bGV0SW5mbyA9IFwiL0FQSS9CdXkyL0dldE91dGxldEluZm9cIjtcclxuICAgIHN0YXRpYyBCdXlHZW5lcmF0ZU51bWJlciA9IFwiL0FQSS9CdXkvR2VuZXJhdGVOdW1iZXJcIjtcclxuICAgIHN0YXRpYyBCdXlHZXREYXRhQnlJRCA9IFwiL0FQSS9CdXkyL0dldERhdGFCeUlEXCI7XHJcbiAgICBzdGF0aWMgR2V0UXVpY2tLZXkgPSBcIi9BUEkvY2F0YWxvZy9wcm9kdWN0L0dldFF1aWNrS2V5XCI7XHJcbiAgICBzdGF0aWMgR2V0UHJpbnRUZW1wbGF0ZUlEID0gXCIvQVBJL0J1eS9HZXRQcmludFRlbXBsYXRlSURcIjtcclxuICAgIHN0YXRpYyBHZXRWYXJpYW50U3RvY2tCeUlEID0gXCIvQVBJL2NhdGFsb2cvdmFyaWFudC9HZXRJbnZlbnRvcnlCeVZhcmlhbnRJRFwiO1xyXG4gICAgc3RhdGljIEdldFN1cHBsaWVySW52b2ljZSA9IFwiL0FQSS9CdXkvR2V0U3VwcGxpZXJJbnZvaWNlUmV0dXJcIjtcclxuICAgIHN0YXRpYyBHZXRTdXBwbGllckRUTyA9IFwiL0FQSS9Db250YWN0L0dldFN1cHBsaWVyRFRPXCI7XHJcblxyXG4gICAgLy9ERUxJVkVSWVxyXG4gICAgc3RhdGljIExvYWRGb3JtRGVsaXZlcnkgPSBcIi9BUEkvVHJhbnNmZXJPcmRlckxvYWRlci9Mb2FkRm9ybVwiO1xyXG4gICAgc3RhdGljIERlbGl2ZXJ5R2VuZXJhdGVOdW1iZXIgPSBcIi9BUEkvVHJhbnNmZXJPcmRlci9HZW5lcmF0ZU51bWJlclwiO1xyXG4gICAgc3RhdGljIFVwZGF0ZUNvdXJpZXJMaXN0ID0gXCIvQVBJL1RyYW5zZmVyT3JkZXIvVXBkYXRlQ291cmllckxpc3RcIjtcclxuICAgIHN0YXRpYyBTdWJtaXRPdXRsZXREZWxpdmVyeSA9IFwiL0FQSS9UcmFuc2Zlck9yZGVyL1N1Ym1pdE9yZGVyXCI7XHJcbiAgICBzdGF0aWMgQ2xlYXJPdXRsZXQgPSBcIi9BUEkvVHJhbnNmZXJPcmRlci9DbGVhck91dGxldFwiO1xyXG4gICAgc3RhdGljIFBheW1lbnRMaXN0U29ydGluZyA9IFwiL0FQSS9TZXR1cC9Tb3J0UGF5bWVudE1ldGhvZFwiXHJcbiAgICBzdGF0aWMgVGF4TGlzdFNvcnRpbmcgPSBcIi9BUEkvU2V0dXAvU29ydFRheFwiXHJcblxyXG4gICAgLy8gRVNUSU1BVEVcclxuICAgIHN0YXRpYyBMb2FkRm9ybUVzdGltYXRlID0gXCIvQVBJL0VzdGltYXRlL0xvYWRGb3JtXCI7XHJcbiAgICBzdGF0aWMgRXN0aW1hdGVHZW5lcmF0ZU51bWJlciA9IFwiL0FQSS9Fc3RpbWF0ZS9HZW5lcmF0ZU51bWJlclwiO1xyXG4gICAgc3RhdGljIFN1Ym1pdEVzdGltYXRlID0gXCIvQVBJL0VzdGltYXRlL1N1Ym1pdE9yZGVyXCI7XHJcblxyXG4gICAgLy8gQURKVVNUTUVOVFxyXG4gICAgc3RhdGljIExvYWRGb3JtQWRqdXN0bWVudCA9IFwiL0FQSS9BZGp1c3RtZW50L0xvYWRGb3JtXCI7XHJcbiAgICBzdGF0aWMgQWRqdXN0bWVudEdlbmVyYXRlTnVtYmVyID0gXCIvQVBJL0FkanVzdG1lbnQvR2VuZXJhdGVOdW1iZXJcIjtcclxuICAgIHN0YXRpYyBTdWJtaXRBZGp1c3RtZW50ID0gXCIvQVBJL0FkanVzdG1lbnQvU3VibWl0T3JkZXJcIjtcclxuXHJcbiAgICAvLyBJTlZFTlRPUllcclxuICAgIHN0YXRpYyBGb3JlY2FzdERhdGEgPSBcIkludmVudG9yeS9EYXlzdG96ZXJvXCI7XHJcbiAgICBzdGF0aWMgRm9yZWNhc3RMb2FkZXIgPSBcIkludmVudG9yeUxvYWRlci9EYXlzdG96ZXJvXCI7XHJcbn1cclxuIl19
|