tango-app-ui-manage-billing 3.3.47 → 3.3.48
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.
|
@@ -140,6 +140,12 @@ export class EditInvoiceComponent {
|
|
|
140
140
|
// Editing an estimate reuses the same form fields; the estimate document
|
|
141
141
|
// shares the invoice shape (companyName, products, tax, stores, …).
|
|
142
142
|
this.patchForm();
|
|
143
|
+
// …except its dates: the Generated date is createdDate and the due date
|
|
144
|
+
// is validTill, so the billingDate / dueDate fields would load empty.
|
|
145
|
+
this.invoiceForm.patchValue({
|
|
146
|
+
billingDate: this.formatDateForInput(this.invoiceData.createdDate),
|
|
147
|
+
dueDate: this.formatDateForInput(this.invoiceData.validTill),
|
|
148
|
+
});
|
|
143
149
|
}
|
|
144
150
|
else if (this.mode === 'create') {
|
|
145
151
|
// New invoice: default the billing date to today and derive the due date
|
|
@@ -1311,13 +1317,18 @@ export class EditInvoiceComponent {
|
|
|
1311
1317
|
});
|
|
1312
1318
|
}
|
|
1313
1319
|
else if (this.mode === 'editEstimate') {
|
|
1314
|
-
// Update an existing estimate. Identity fields (estimate #, clientId
|
|
1315
|
-
//
|
|
1320
|
+
// Update an existing estimate. Identity fields (estimate #, clientId) are
|
|
1321
|
+
// preserved server-side; we send the editable form data.
|
|
1316
1322
|
payload._id = this.invoiceData._id;
|
|
1317
1323
|
payload.clientId = this.invoiceData.clientId || this.clientId;
|
|
1318
1324
|
payload.period = formValue.billingDate
|
|
1319
1325
|
? new Date(formValue.billingDate).toLocaleString('en-US', { month: 'short', year: 'numeric' })
|
|
1320
1326
|
: this.invoiceData.period;
|
|
1327
|
+
// Only re-date when the user changed it, so an untouched edit keeps the
|
|
1328
|
+
// original createdDate timestamp (and its place in the list order).
|
|
1329
|
+
if (this.invoiceForm.get('billingDate')?.dirty && formValue.billingDate) {
|
|
1330
|
+
payload.createdDate = formValue.billingDate;
|
|
1331
|
+
}
|
|
1321
1332
|
payload.validTill = formValue.dueDate;
|
|
1322
1333
|
this.billingService.updateEstimate(payload).pipe(takeUntil(this.destroy$)).subscribe({
|
|
1323
1334
|
next: (res) => {
|
|
@@ -1340,6 +1351,9 @@ export class EditInvoiceComponent {
|
|
|
1340
1351
|
payload.period = formValue.billingDate
|
|
1341
1352
|
? new Date(formValue.billingDate).toLocaleString('en-US', { month: 'short', year: 'numeric' })
|
|
1342
1353
|
: undefined;
|
|
1354
|
+
// The estimate schema has no billingDate — the server stamps createdDate
|
|
1355
|
+
// (the "Generated" date) from this field, else falls back to now.
|
|
1356
|
+
payload.createdDate = formValue.billingDate || undefined;
|
|
1343
1357
|
payload.validTill = formValue.dueDate;
|
|
1344
1358
|
this.billingService.createEstimate(payload).pipe(takeUntil(this.destroy$)).subscribe({
|
|
1345
1359
|
next: (res) => {
|
|
@@ -1598,4 +1612,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
1598
1612
|
type: HostListener,
|
|
1599
1613
|
args: ['document:click', ['$event']]
|
|
1600
1614
|
}] } });
|
|
1601
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC1pbnZvaWNlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLW1hbmFnZS1iaWxsaW5nL3NyYy9saWIvY29tcG9uZW50cy90YW5nby1tYW5hZ2UtYmlsbGluZy9lZGl0LWludm9pY2UvZWRpdC1pbnZvaWNlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLW1hbmFnZS1iaWxsaW5nL3NyYy9saWIvY29tcG9uZW50cy90YW5nby1tYW5hZ2UtYmlsbGluZy9lZGl0LWludm9pY2UvZWRpdC1pbnZvaWNlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLEtBQUssRUFBaUMsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpILE9BQU8sRUFBd0UsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEgsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHMUMsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDdEcsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0saURBQWlELENBQUM7Ozs7Ozs7QUFPMUYsTUFBTSxPQUFPLG9CQUFvQjtJQWtHdEI7SUFDQztJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUF2R0QsV0FBVyxDQUFNO0lBQzFCLDBFQUEwRTtJQUMxRSwyRUFBMkU7SUFDM0UsNkVBQTZFO0lBQzdFLDRFQUE0RTtJQUNuRSxJQUFJLEdBQXNGLE1BQU0sQ0FBQztJQUNqRyxRQUFRLEdBQVcsRUFBRSxDQUFDO0lBQ3RCLGFBQWEsR0FBVSxFQUFFLENBQUM7SUFFbkMsMEVBQTBFO0lBQzFFLDZFQUE2RTtJQUM3RSw2RUFBNkU7SUFDN0UsNkVBQTZFO0lBQzdFLGtCQUFrQjtJQUNsQixrQkFB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O3NCQUFuQixLQUFLO2dCQUtHLElBQUk7c0JBQVosS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBK2NOLGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3ksIElucHV0LCBDaGFuZ2VEZXRlY3RvclJlZiwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nYkFjdGl2ZU1vZGFsLCBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBGb3JtQXJyYXksIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBCaWxsaW5nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2JpbGxpbmcuc2VydmljZSc7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1zaGFyZWQnO1xyXG5pbXBvcnQgeyBSZXF1ZXN0Q29uZmlybWF0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vcmVxdWVzdC1jb25maXJtYXRpb24vcmVxdWVzdC1jb25maXJtYXRpb24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgSW52b2ljZVByZXZpZXdDb21wb25lbnQgfSBmcm9tICcuLi8uLi9pbnZvaWNlLXByZXZpZXcvaW52b2ljZS1wcmV2aWV3LmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1lZGl0LWludm9pY2UnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9lZGl0LWludm9pY2UuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9lZGl0LWludm9pY2UuY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFZGl0SW52b2ljZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBASW5wdXQoKSBpbnZvaWNlRGF0YTogYW55O1xyXG4gIC8vICdlc3RpbWF0ZScgcmV1c2VzIHRoZSB3aG9sZSBjcmVhdGUgZm9ybSBidXQgc3VibWl0cyB0byB0aGUgZXN0aW1hdGUgQVBJXHJcbiAgLy8gYW5kIHdyaXRlcyB0byB0aGUgZXN0aW1hdGVzIGNvbGxlY3Rpb24gaW5zdGVhZCBvZiBpbnZvaWNlcy4gJ2NyZWRpdE5vdGUnXHJcbiAgLy8gZG9lcyB0aGUgc2FtZSBmb3IgdGhlIGNyZWRpdC1ub3RlIEFQSTogdGhlIHVzZXIgZmlyc3QgcGlja3MgdGhlIGludm9pY2UgdG9cclxuICAvLyBjcmVkaXQsIHRoZSBmb3JtIGlzIHByZWZpbGxlZCBmcm9tIGl0LCBhbmQgdGhlIHJlc3VsdCBpcyBhIENOLeKApiBkb2N1bWVudC5cclxuICBASW5wdXQoKSBtb2RlOiAnZWRpdCcgfCAnY3JlYXRlJyB8ICdlc3RpbWF0ZScgfCAnZWRpdEVzdGltYXRlJyB8ICdjcmVkaXROb3RlJyB8ICdlZGl0Q3JlZGl0Tm90ZScgPSAnZWRpdCc7XHJcbiAgQElucHV0KCkgY2xpZW50SWQ6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIGJpbGxpbmdHcm91cHM6IGFueVtdID0gW107XHJcblxyXG4gIC8vIENyZWRpdCBub3RlOiBmaW5hbGx5IGFwcHJvdmVkIGludm9pY2VzIHRoYXQgY2FuIGJlIGNyZWRpdGVkICh3aXRoIHRoZWlyXHJcbiAgLy8gcmVtYWluaW5nIGJhbGFuY2UpLCB0aGUgcGlja2VkIHNvdXJjZSBpbnZvaWNlLCBhbmQgaG93IG11Y2ggb2YgaXQgaXMgc3RpbGxcclxuICAvLyBjcmVkaXRhYmxlIChmb3IgdGhpcyBjcmVkaXQgbm90ZSwgd2hlbiBlZGl0aW5nKS4gT3BlbmVkIHdpdGhvdXQgYSBjbGllbnRJZFxyXG4gIC8vIChBbGwgSW52b2ljZXMpLCB0aGUgbGlzdCBzcGFucyBldmVyeSBicmFuZCBhbmQgdGhlIGJyYW5kIGlzIHRha2VuIGZyb20gdGhlXHJcbiAgLy8gcGlja2VkIGludm9pY2UuXHJcbiAgY3JlZGl0YWJsZUludm9pY2VzOiBhbnlbXSA9IFtdO1xyXG4gIHNvdXJjZUludm9pY2U6IGFueSA9IG51bGw7XHJcbiAgY3JlZGl0YWJsZUJhbGFuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIHBpY2tBY3Jvc3NCcmFuZHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpbnZvaWNlc0xvYWRGYWlsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8gSG93IHRoZSBjcmVkaXQgaXMgYnJva2VuIGRvd24g4oCUIGNob3NlbiBhZnRlciB0aGUgaW52b2ljZSBpcyBwaWNrZWQ7IGxpbmVcclxuICAvLyBpdGVtcyBhcmUgZ2VuZXJhdGVkIGZyb20gaXQgKG5vdCBhZGRlZCBieSBoYW5kKTpcclxuICAvLyAgIHByb2R1Y3Qg4oCUIG9uZSBsaW5lIHBlciBzZWxlY3RlZCBpbnZvaWNlIHByb2R1Y3QgKG9wdGlvbmFsbHkgbmFycm93ZWQgdG9cclxuICAvLyAgICAgICAgICAgICBzZWxlY3RlZCBzdG9yZXMpO1xyXG4gIC8vICAgc3RvcmUgICDigJQgb25lIGxpbmUgcGVyIHNlbGVjdGVkIGJpbGxpbmctZ3JvdXAgc3RvcmU7XHJcbiAgLy8gICBpbnZvaWNlIOKAlCBhIHNpbmdsZSBhbW91bnQgLyBjcmVkaXQgYWdhaW5zdCB0aGUgd2hvbGUgaW52b2ljZS5cclxuICBjcmVkaXRUeXBlOiAnJyB8ICdwcm9kdWN0JyB8ICdzdG9yZScgfCAnaW52b2ljZScgPSAnJztcclxuICByZWFkb25seSBjcmVkaXRUeXBlT3B0aW9ucyA9IFtcclxuICAgIHsgdmFsdWU6ICdwcm9kdWN0JywgbGFiZWw6ICdDcmVkaXQgYnkgUHJvZHVjdCcgfSxcclxuICAgIHsgdmFsdWU6ICdzdG9yZScsIGxhYmVsOiAnQ3JlZGl0IGJ5IFN0b3JlJyB9LFxyXG4gICAgeyB2YWx1ZTogJ2ludm9pY2UnLCBsYWJlbDogJ0NyZWRpdCBhZ2FpbnN0IEludm9pY2UnIH0sXHJcbiAgXSBhcyBjb25zdDtcclxuICAvLyBXaGF0IHRoZSBjcmVkaXQgdHlwZXMgcGljayBmcm9tIChHRVQgL2NyZWRpdE5vdGUvaW52b2ljZUJyZWFrZG93bik6IHRoZVxyXG4gIC8vIGludm9pY2UncyBwcm9kdWN0cywgaXRzIGJpbGxpbmcgZ3JvdXAncyBzdG9yZXMgKGJ5IHN0b3JlKSwgdGhlIHN0b3Jlc1xyXG4gIC8vIG1hcHBlZCB0byBlYWNoIHByb2R1Y3Qgb24gdGhlIGludm9pY2UgKGJ5IHByb2R1Y3Qg4oCUIGxvd2VyLWNhc2VkIHByb2R1Y3RcclxuICAvLyBrZXkpLCBwZXIgc3RvcmUgw5cgcHJvZHVjdCBjb3N0ICh0aGUgaW52b2ljZSdzIHN0b3JlIGJyZWFrZG93bikgYW5kIGl0c1xyXG4gIC8vIGFtb3VudCBleGNsLiBHU1QuXHJcbiAgYnJlYWtkb3duUHJvZHVjdHM6IHsgcHJvZHVjdE5hbWU6IHN0cmluZzsgZGVzY3JpcHRpb246IHN0cmluZzsgSHNuTnVtYmVyOiBzdHJpbmc7IGFtb3VudDogbnVtYmVyIH1bXSA9IFtdO1xyXG4gIGJyZWFrZG93blN0b3JlczogeyBzdG9yZUlkOiBzdHJpbmc7IHN0b3JlTmFtZTogc3RyaW5nIH1bXSA9IFtdO1xyXG4gIHByb2R1Y3RTdG9yZXM6IFJlY29yZDxzdHJpbmcsIHsgc3RvcmVJZDogc3RyaW5nOyBzdG9yZU5hbWU6IHN0cmluZyB9W10+ID0ge307XHJcbiAgc3RvcmVQcm9kdWN0Q29zdHM6IHsgc3RvcmVJZDogc3RyaW5nOyBwcm9kdWN0TmFtZTogc3RyaW5nOyBhbW91bnQ6IG51bWJlciB9W10gPSBbXTtcclxuICBzb3VyY2VJbnZvaWNlQW1vdW50OiBudW1iZXIgPSAwO1xyXG4gIGJyZWFrZG93bkxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAvLyBCeSBzdG9yZTogdGhlIHN0b3JlcyBwaWNrZWQgaW4gdGhlIChzaW5nbGUpIFN0b3JlcyBkcm9wZG93bi4gV2l0aCBldmVyeVxyXG4gIC8vIHN0b3JlIHNlbGVjdGVkIChcIlNlbGVjdCBhbGxcIikgdGhlIGNyZWRpdCBpcyBvbmUgQWxsLXN0b3JlcyBsaW5lIOKAlCBBbW91bnQgYW5kXHJcbiAgLy8gQ3JlZGl0IG9ubHkg4oCUIGluc3RlYWQgb2YgYSBsaW5lIHBlciBzdG9yZS5cclxuICBzZWxlY3RlZFN0b3Jlczogc3RyaW5nW10gPSBbXTtcclxuICBhbGxTdG9yZXNTZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIC8vIE9wZW4gY2hlY2tib3ggZHJvcGRvd24g4oCUICdzdG9yZScgKGJ5IHN0b3JlKSBvciAnbGluZS08aT4nIChhIGJ5LXByb2R1Y3RcclxuICAvLyBsaW5lJ3MgU3RvcmVzKSDigJQgYW5kIGl0cyBzZWFyY2ggdGV4dC5cclxuICBvcGVuUGlja2VyOiBzdHJpbmcgPSAnJztcclxuICBzdG9yZVNlYXJjaDogc3RyaW5nID0gJyc7XHJcblxyXG4gIGludm9pY2VGb3JtITogRm9ybUdyb3VwO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG4gIHNhdmluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyBUYWJzOiBlZGl0IHwgY3JlZGl0Tm90ZSB8IG9uZVRpbWVGZWVcclxuICBhY3RpdmVUYWI6IHN0cmluZyA9ICdlZGl0JztcclxuXHJcbiAgdGF4VHlwZXMgPSBbJ0lHU1QnLCAnQ0dTVCcsICdTR1NUJ107XHJcbiAgY3VycmVuY3lPcHRpb25zID0gWydpbnInLCAnZG9sbGFyJywgJ3NpbmdhcG9yZWRvbGxhcicsICdldXJvJywgJ2FlZCddO1xyXG4gIGN1cnJlbmN5TGFiZWxzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xyXG4gICAgaW5yOiAnSU5SICjigrkpJyxcclxuICAgIGRvbGxhcjogJ1VTRCAoJCknLFxyXG4gICAgc2luZ2Fwb3JlZG9sbGFyOiAnU0dEIChTJCknLFxyXG4gICAgZXVybzogJ0VVUiAo4oKsKScsXHJcbiAgICBhZWQ6ICdBRUQgKEFFRCknXHJcbiAgfTtcclxuICAvLyBTeW1ib2wgbWFwIG1pcnJvcnMgdGhlIGJhY2tlbmQncyBDVVJSRU5DWV9TWU1CT0xTIGluIHV0aWxzL2N1cnJlbmN5LmpzIHNvXHJcbiAgLy8gdGhlIG1vZGFsLCBpbnZvaWNlIGxpc3QsIGNyZWRpdC1ub3RlIGFuZCBvbmUtdGltZS1mZWUgcG9wdXBzIGFsbCByZW5kZXJcclxuICAvLyB0aGUgc2FtZSBzeW1ib2wgdGhlIFBERi9lbWFpbCB1c2VzLlxyXG4gIHByaXZhdGUgcmVhZG9ubHkgY3VycmVuY3lTeW1ib2xzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xyXG4gICAgaW5yOiAn4oK5JyxcclxuICAgIGRvbGxhcjogJyQnLFxyXG4gICAgc2luZ2Fwb3JlZG9sbGFyOiAnUyQnLFxyXG4gICAgZXVybzogJ+KCrCcsXHJcbiAgICBhZWQ6ICdBRUQnLFxyXG4gIH07XHJcbiAgc3RhdHVzT3B0aW9ucyA9IFsncGVuZGluZycsICdhcHByb3ZlZCddO1xyXG4gIHBheW1lbnRTdGF0dXNPcHRpb25zID0gWyd1bnBhaWQnLCAncGFpZCddO1xyXG5cclxuICAvLyBDcmVkaXQgTm90ZVxyXG4gIGNyZWRpdE5vdGVGb3JtITogRm9ybUdyb3VwO1xyXG4gIGNyZWRpdE1vcmVUaGFuVGVuUGVyY2VudDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyBQcm9kdWN0cyBmcm9tIGJhc2UgcHJpY2luZ1xyXG4gIGF2YWlsYWJsZVByb2R1Y3RzOiBhbnlbXSA9IFtdO1xyXG5cclxuICAvLyBPbmUgVGltZSBGZWVcclxuICBvbmVUaW1lRmVlRm9ybSE6IEZvcm1Hcm91cDtcclxuICBvbmVUaW1lRmVlVG90YWw6IG51bWJlciA9IDA7XHJcblxyXG4gIC8vIExhc3Qta25vd24gY3VycmVuY3ksIHNvIGEgY2FuY2VsbGVkIGN1cnJlbmN5IGNoYW5nZSBjYW4gcmV2ZXJ0IHRoZSBzZWxlY3QuXHJcbiAgcHJpdmF0ZSBwcmV2aW91c0N1cnJlbmN5OiBzdHJpbmcgPSAnaW5yJztcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgYWN0aXZlTW9kYWw6IE5nYkFjdGl2ZU1vZGFsLFxyXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIGJpbGxpbmdTZXJ2aWNlOiBCaWxsaW5nU2VydmljZSxcclxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSB0b2FzdDogVG9hc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBob3N0UmVmOiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsXHJcbiAgKSB7fVxyXG5cclxuICAvLyBTY3JvbGwgdGhlIG5ld2x5LWFkZGVkIHJvdyAocHJvZHVjdHMvdGF4KSBpbnRvIHZpZXcgaW5zaWRlIHRoZSBtb2RhbCBib2R5LlxyXG4gIC8vIHNlbGVjdG9yIHRhcmdldHMgdGhlIGxhc3Qgcm93IG9mIHRoZSBnaXZlbiBzZWN0aW9uIGFmdGVyIGl0IHJlbmRlcnMuXHJcbiAgcHJpdmF0ZSBzY3JvbGxUb0xhc3RSb3coc2VjdGlvbkF0dHI6IHN0cmluZykge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGhvc3Q6IEhUTUxFbGVtZW50ID0gdGhpcy5ob3N0UmVmPy5uYXRpdmVFbGVtZW50O1xyXG4gICAgICBjb25zdCByb3dzID0gaG9zdD8ucXVlcnlTZWxlY3RvckFsbChgWyR7c2VjdGlvbkF0dHJ9XWApO1xyXG4gICAgICBjb25zdCBsYXN0ID0gcm93cyAmJiByb3dzLmxlbmd0aCA/IChyb3dzW3Jvd3MubGVuZ3RoIC0gMV0gYXMgSFRNTEVsZW1lbnQpIDogbnVsbDtcclxuICAgICAgaWYgKGxhc3QpIHtcclxuICAgICAgICBsYXN0LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ2NlbnRlcicgfSk7XHJcbiAgICAgIH1cclxuICAgIH0sIDEwMCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMubG9hZEJpbGxpbmdHcm91cHMoKTtcclxuICAgIHRoaXMubG9hZENsaWVudFByb2R1Y3RzKCk7XHJcbiAgICB0aGlzLmxvYWRQdXJjaGFzZU9yZGVycygpO1xyXG4gICAgdGhpcy5pbml0Rm9ybSgpO1xyXG4gICAgdGhpcy5pbml0Q3JlZGl0Tm90ZUZvcm0oKTtcclxuICAgIHRoaXMuaW5pdE9uZVRpbWVGZWVGb3JtKCk7XHJcbiAgICBpZiAodGhpcy5tb2RlID09PSAnZWRpdCcgJiYgdGhpcy5pbnZvaWNlRGF0YSkge1xyXG4gICAgICB0aGlzLnBhdGNoRm9ybSgpO1xyXG4gICAgICB0aGlzLnBhdGNoQ3JlZGl0Tm90ZURlZmF1bHRzKCk7XHJcbiAgICAgIHRoaXMucGF0Y2hPbmVUaW1lRmVlRGVmYXVsdHMoKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlID09PSAnZWRpdEVzdGltYXRlJyAmJiB0aGlzLmludm9pY2VEYXRhKSB7XHJcbiAgICAgIC8vIEVkaXRpbmcgYW4gZXN0aW1hdGUgcmV1c2VzIHRoZSBzYW1lIGZvcm0gZmllbGRzOyB0aGUgZXN0aW1hdGUgZG9jdW1lbnRcclxuICAgICAgLy8gc2hhcmVzIHRoZSBpbnZvaWNlIHNoYXBlIChjb21wYW55TmFtZSwgcHJvZHVjdHMsIHRheCwgc3RvcmVzLCDigKYpLlxyXG4gICAgICB0aGlzLnBhdGNoRm9ybSgpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLm1vZGUgPT09ICdjcmVhdGUnKSB7XHJcbiAgICAgIC8vIE5ldyBpbnZvaWNlOiBkZWZhdWx0IHRoZSBiaWxsaW5nIGRhdGUgdG8gdG9kYXkgYW5kIGRlcml2ZSB0aGUgZHVlIGRhdGVcclxuICAgICAgLy8gZnJvbSB0aGUgZGVmYXVsdCBwYXltZW50IHRlcm0gKDMwIGRheXMpLiBUaGUgdXNlciBjaGFuZ2VzIHRoZSB0ZXJtIHZpYVxyXG4gICAgICAvLyB0aGUgUGF5bWVudCBUZXJtIGRyb3Bkb3duLCBub3QgdGhlIGR1ZSBkYXRlIGRpcmVjdGx5LlxyXG4gICAgICB0aGlzLmludm9pY2VGb3JtLnBhdGNoVmFsdWUoeyBiaWxsaW5nRGF0ZTogdGhpcy5mb3JtYXREYXRlRm9ySW5wdXQobmV3IERhdGUoKSkgfSk7XHJcbiAgICAgIHRoaXMuY29tcHV0ZUR1ZURhdGUoKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlID09PSAnY3JlZGl0Tm90ZScpIHtcclxuICAgICAgLy8gTmV3IGNyZWRpdCBub3RlOiBkYXRlZCB0b2RheTsgdGhlIHJlc3QgaXMgcHJlZmlsbGVkIG9uY2UgYW4gaW52b2ljZSBpc1xyXG4gICAgICAvLyBwaWNrZWQuIFdpdGhvdXQgYSBjbGllbnRJZCB0aGUgaW52b2ljZSBsaXN0IHNwYW5zIGV2ZXJ5IGJyYW5kLlxyXG4gICAgICB0aGlzLnBpY2tBY3Jvc3NCcmFuZHMgPSAhdGhpcy5jbGllbnRJZDtcclxuICAgICAgdGhpcy5pbnZvaWNlRm9ybS5wYXRjaFZhbHVlKHsgYmlsbGluZ0RhdGU6IHRoaXMuZm9ybWF0RGF0ZUZvcklucHV0KG5ldyBEYXRlKCkpIH0pO1xyXG4gICAgICB0aGlzLmxvYWRDcmVkaXRhYmxlSW52b2ljZXMoKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlID09PSAnZWRpdENyZWRpdE5vdGUnICYmIHRoaXMuaW52b2ljZURhdGEpIHtcclxuICAgICAgLy8gQ29tcGFueSBkZXRhaWxzIGFzIHN0b3JlZCBvbiB0aGUgY3JlZGl0IG5vdGUsIHBsdXMgaXRzIGRhdGUsIHJlYXNvblxyXG4gICAgICAvLyBhbmQgbGluZSBpdGVtcy5cclxuICAgICAgdGhpcy5wYXRjaENvbXBhbnlEZXRhaWxzKHRoaXMuaW52b2ljZURhdGEpO1xyXG4gICAgICB0aGlzLmludm9pY2VGb3JtLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgIGJpbGxpbmdEYXRlOiB0aGlzLmZvcm1hdERhdGVGb3JJbnB1dCh0aGlzLmludm9pY2VEYXRhLmNyZWRpdE5vdGVEYXRlKSxcclxuICAgICAgICByZWFzb246IHRoaXMuaW52b2ljZURhdGEucmVhc29uIHx8ICcnLFxyXG4gICAgICB9KTtcclxuICAgICAgLy8gUmVzdG9yZSB0aGUgY3JlZGl0IHR5cGUgKG9sZGVyIGNyZWRpdCBub3RlcyBoYXZlIG5vbmUg4oCUIHRyZWF0IHRoZW0gYXNcclxuICAgICAgLy8gYnktcHJvZHVjdCkuIEJ5LXByb2R1Y3QgbGluZXMgY2FycnkgdGhlaXIgb3duIHByb2R1Y3QgKyBzdG9yZXM7IGJ5XHJcbiAgICAgIC8vIHN0b3JlIG5lZWRzIGl0cyBTdG9yZXMgc2VsZWN0aW9uIGJhY2suXHJcbiAgICAgIGNvbnN0IGxpbmVzOiBhbnlbXSA9IHRoaXMuaW52b2ljZURhdGEubGluZUl0ZW1zIHx8IFtdO1xyXG4gICAgICB0aGlzLmNyZWRpdFR5cGUgPSB0aGlzLmludm9pY2VEYXRhLmNyZWRpdFR5cGUgfHwgJ3Byb2R1Y3QnO1xyXG4gICAgICBpZiAodGhpcy5jcmVkaXRUeXBlID09PSAnc3RvcmUnKSB7XHJcbiAgICAgICAgLy8gQW4gQWxsLXN0b3JlcyBsaW5lIG1lYW5zIFwiU2VsZWN0IGFsbFwiOyBzZWxlY3RlZFN0b3JlcyBpcyBmaWxsZWQgb25jZVxyXG4gICAgICAgIC8vIHRoZSBzdG9yZSBsaXN0IGxvYWRzIChsb2FkSW52b2ljZUJyZWFrZG93bikuXHJcbiAgICAgICAgdGhpcy5hbGxTdG9yZXNTZWxlY3RlZCA9IGxpbmVzLnNvbWUoKGwpID0+IGwuYWxsU3RvcmVzKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkU3RvcmVzID0gbGluZXMubWFwKChsKSA9PiBsLnN0b3JlSWQpLmZpbHRlcihCb29sZWFuKS5tYXAoU3RyaW5nKTtcclxuICAgICAgfVxyXG4gICAgICBsaW5lcy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHRoaXMubGluZUl0ZW1zLnB1c2godGhpcy5jcmVhdGVMaW5lSXRlbUdyb3VwKGl0ZW0pKSk7XHJcbiAgICAgIHRoaXMubG9hZEludm9pY2VCcmVha2Rvd24odGhpcy5pbnZvaWNlRGF0YS5pbnZvaWNlSWQpO1xyXG4gICAgICB0aGlzLmxvYWRDcmVkaXRhYmxlSW52b2ljZXMoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmlzQ3JlZGl0Tm90ZSkge1xyXG4gICAgICAvLyBBIGNyZWRpdCBub3RlIGlzIGFsd2F5cyBpbiBpdHMgaW52b2ljZSdzIGN1cnJlbmN5LlxyXG4gICAgICB0aGlzLmludm9pY2VGb3JtLmdldCgnY3VycmVuY3knKT8uZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb2FkQ2xpZW50UHJvZHVjdHMoKSB7XHJcbiAgICBjb25zdCBjSWQgPSB0aGlzLmNsaWVudElkIHx8IHRoaXMuaW52b2ljZURhdGE/LmNsaWVudElkO1xyXG4gICAgaWYgKGNJZCkge1xyXG4gICAgICB0aGlzLmJpbGxpbmdTZXJ2aWNlLmdldENsaWVudEJhc2VQcmljaW5nKGNJZCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmF2YWlsYWJsZVByb2R1Y3RzID0gcmVzPy5kYXRhIHx8IFtdO1xyXG4gICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5hdmFpbGFibGVQcm9kdWN0cyA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblByb2R1Y3RDaGFuZ2UoaW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3QgcHJvZHVjdEdyb3VwID0gdGhpcy5wcm9kdWN0cy5hdChpbmRleCk7XHJcbiAgICBjb25zdCBzZWxlY3RlZE5hbWUgPSBwcm9kdWN0R3JvdXAuZ2V0KCdwcm9kdWN0TmFtZScpPy52YWx1ZTtcclxuICAgIC8vIFwiKyBDdXN0b20gcHJvZHVjdFwiIHBpY2tlZCBmcm9tIHRoZSBkcm9wZG93biDigJQgc3dpdGNoIHRoaXMgcm93IHRvIGZyZWUtdGV4dFxyXG4gICAgLy8gZW50cnkgKGN1c3RvbSBuYW1lICsgcHJpY2UpLCBjbGVhcmluZyB0aGUgYmFzZS1wcmljaW5nIHNlbGVjdGlvbi5cclxuICAgIGlmIChzZWxlY3RlZE5hbWUgPT09ICdfX2N1c3RvbV9fJykge1xyXG4gICAgICBwcm9kdWN0R3JvdXAucGF0Y2hWYWx1ZSh7IGlzQ3VzdG9tOiB0cnVlLCBwcm9kdWN0TmFtZTogJycsIHByaWNlOiAwLCBkZXNjcmlwdGlvbjogJycgfSk7XHJcbiAgICAgIHRoaXMucmVjYWxjdWxhdGUoaW5kZXgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBwcm9kdWN0R3JvdXAuZ2V0KCdpc0N1c3RvbScpPy5zZXRWYWx1ZShmYWxzZSk7XHJcbiAgICBjb25zdCBwcm9kdWN0ID0gdGhpcy5hdmFpbGFibGVQcm9kdWN0cy5maW5kKHAgPT4gcC5wcm9kdWN0TmFtZSA9PT0gc2VsZWN0ZWROYW1lKTtcclxuICAgIGlmIChwcm9kdWN0KSB7XHJcbiAgICAgIHByb2R1Y3RHcm91cC5nZXQoJ3ByaWNlJyk/LnNldFZhbHVlKHByb2R1Y3QucHJpY2UpO1xyXG4gICAgICAvLyBTZXQgZGVzY3JpcHRpb24gYmFzZWQgb24gcHJvZHVjdCBuYW1lXHJcbiAgICAgIGNvbnN0IGRlc2NyaXB0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcclxuICAgICAgICB0YW5nb1RyYWZmaWM6ICdDdXN0b21lciBGb290ZmFsbCBBbmFseXRpY3MnLFxyXG4gICAgICAgIHRhbmdvWm9uZTogJ1Byb2R1Y3QgY2F0ZWdvcnkvc2VjdGlvbiBhbmFseXRpY3MnLFxyXG4gICAgICAgIHRhbmdvVHJheDogJ0N1c3RvbWVyIEpvdXJuZXkgQW5hbHl0aWNzJyxcclxuICAgICAgICBwcmlvcml0eVN1cHBvcnQ6ICdQcmlvcml0eSBTdXBwb3J0JyxcclxuICAgICAgfTtcclxuICAgICAgcHJvZHVjdEdyb3VwLmdldCgnZGVzY3JpcHRpb24nKT8uc2V0VmFsdWUoZGVzY3JpcHRpb25zW3NlbGVjdGVkTmFtZV0gfHwgJycpO1xyXG4gICAgICB0aGlzLnJlY2FsY3VsYXRlKGluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIEFkZCBhIGJsYW5rIHByb2R1Y3Qgcm93IGFscmVhZHkgaW4gY3VzdG9tIChmcmVlLXRleHQpIG1vZGUsIHJlZ2FyZGxlc3Mgb2ZcclxuICAvLyB3aGV0aGVyIGJhc2UtcHJpY2luZyBwcm9kdWN0cyBleGlzdC5cclxuICBhZGRDdXN0b21Qcm9kdWN0KCkge1xyXG4gICAgdGhpcy5wcm9kdWN0cy5wdXNoKHRoaXMuY3JlYXRlUHJvZHVjdEdyb3VwKHsgaXNDdXN0b206IHRydWUgfSkpO1xyXG4gICAgdGhpcy5zY3JvbGxUb0xhc3RSb3coJ2RhdGEtcHJvZHVjdC1yb3cnKTtcclxuICB9XHJcblxyXG4gIGZvcm1hdFByb2R1Y3ROYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoIW5hbWUpIHJldHVybiAnJztcclxuICAgIC8vIENvbnZlcnQgY2FtZWxDYXNlIHRvIFRpdGxlIENhc2Ugd2l0aCBzcGFjZXM6IHRhbmdvVHJhZmZpYyAtPiBUYW5nbyBUcmFmZmljXHJcbiAgICByZXR1cm4gbmFtZS5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCAnJDEgJDInKVxyXG4gICAgICAucmVwbGFjZSgvXi4vLCAoc3RyKSA9PiBzdHIudG9VcHBlckNhc2UoKSk7XHJcbiAgfVxyXG5cclxuICBsb2FkQmlsbGluZ0dyb3VwcygpIHtcclxuICAgIGNvbnN0IGNJZCA9IHRoaXMuY2xpZW50SWQgfHwgdGhpcy5pbnZvaWNlRGF0YT8uY2xpZW50SWQ7XHJcbiAgICBpZiAoY0lkKSB7XHJcbiAgICAgIHRoaXMuYmlsbGluZ1NlcnZpY2UuZ2V0QWxsQmlsbGluZ0dyb3VwcyhjSWQpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5iaWxsaW5nR3JvdXBzID0gcmVzPy5kYXRhIHx8IFtdO1xyXG4gICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmJpbGxpbmdHcm91cHMgPSBbXTtcclxuICAgICAgICAgIC8vIFRoZSBCaWxsaW5nIEdyb3VwIGZpZWxkIGlzIGhpZGRlbiB3aXRob3V0IGdyb3VwcyBidXQgc3RpbGwgcmVxdWlyZWRcclxuICAgICAgICAgIC8vIHdoZW4gY3JlYXRpbmcsIHNvIHNheSB3aHkgdGhlIGZvcm0gY2FuJ3QgYmUgc3VibWl0dGVkLlxyXG4gICAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ2NyZWF0ZScgfHwgdGhpcy5tb2RlID09PSAnZXN0aW1hdGUnKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChlcnI/LmVycm9yPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gbG9hZCBiaWxsaW5nIGdyb3VwcyDigJQgcmVvcGVuIHRvIHJldHJ5Jyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0VGFiKHRhYjogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmFjdGl2ZVRhYiA9IHRhYjtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09PSBDUkVESVQgTk9URSAoZG9jdW1lbnQpID09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICBnZXQgaXNDcmVkaXROb3RlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gJ2NyZWRpdE5vdGUnIHx8IHRoaXMubW9kZSA9PT0gJ2VkaXRDcmVkaXROb3RlJztcclxuICB9XHJcblxyXG4gIC8vIENyZWF0aW5nIGEgY3JlZGl0IG5vdGU6IGV2ZXJ5dGhpbmcgYmVsb3cgdGhlIHBpY2tlcnMgd2FpdHMgZm9yIHRoZVxyXG4gIC8vIHNvdXJjZSBpbnZvaWNlIHRvIGJlIGNob3NlbiBhbmQgbG9hZGVkLlxyXG4gIGdldCBzaG93SW52b2ljZUZvcm0oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5tb2RlICE9PSAnY3JlZGl0Tm90ZScgfHwgISF0aGlzLnNvdXJjZUludm9pY2U7XHJcbiAgfVxyXG5cclxuICBnZXQgaGVhZGluZ1RleHQoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGhlYWRpbmdzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xyXG4gICAgICBlZGl0OiAnSW52b2ljZScsIGNyZWF0ZTogJ0NyZWF0ZSBJbnZvaWNlJywgZXN0aW1hdGU6ICdHZW5lcmF0ZSBFc3RpbWF0ZScsXHJcbiAgICAgIGVkaXRFc3RpbWF0ZTogJ0VkaXQgRXN0aW1hdGUnLCBjcmVkaXROb3RlOiAnQ3JlYXRlIENyZWRpdCBOb3RlJywgZWRpdENyZWRpdE5vdGU6ICdDcmVkaXQgTm90ZScsXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGhlYWRpbmdzW3RoaXMubW9kZV07XHJcbiAgfVxyXG5cclxuICBnZXQgc3VibWl0TGFiZWwoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGxhYmVsczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcclxuICAgICAgZWRpdDogJ1VwZGF0ZSBJbnZvaWNlJywgY3JlYXRlOiAnQ3JlYXRlIEludm9pY2UnLCBlc3RpbWF0ZTogJ0dlbmVyYXRlIEVzdGltYXRlJyxcclxuICAgICAgZWRpdEVzdGltYXRlOiAnVXBkYXRlIEVzdGltYXRlJywgY3JlZGl0Tm90ZTogJ0NyZWF0ZSBDcmVkaXQgTm90ZScsIGVkaXRDcmVkaXROb3RlOiAnVXBkYXRlIENyZWRpdCBOb3RlJyxcclxuICAgIH07XHJcbiAgICByZXR1cm4gbGFiZWxzW3RoaXMubW9kZV07XHJcbiAgfVxyXG5cclxuICAvLyBJbnZvaWNlIG51bWJlciB0aGUgY3JlZGl0IG5vdGUgaXMgaXNzdWVkIGFnYWluc3QuXHJcbiAgZ2V0IHNvdXJjZUludm9pY2VOdW1iZXIoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLm1vZGUgPT09ICdlZGl0Q3JlZGl0Tm90ZScgPyB0aGlzLmludm9pY2VEYXRhPy5pbnZvaWNlIDogdGhpcy5zb3VyY2VJbnZvaWNlPy5pbnZvaWNlO1xyXG4gIH1cclxuXHJcbiAgLy8gX2lkIG9mIHRoYXQgaW52b2ljZSDigJQgc2V0IG9uY2Ugb25lIGlzIHBpY2tlZCAobmV3KSBvciBhbHdheXMgKGVkaXQpLlxyXG4gIGdldCBzb3VyY2VJbnZvaWNlSWQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLm1vZGUgPT09ICdlZGl0Q3JlZGl0Tm90ZScgPyB0aGlzLmludm9pY2VEYXRhPy5pbnZvaWNlSWQgOiB0aGlzLnNvdXJjZUludm9pY2U/Ll9pZDtcclxuICB9XHJcblxyXG4gIC8vIFByZXZpZXcgdGhlIGludm9pY2UgYmVpbmcgY3JlZGl0ZWQgaW4gdGhlIHNhbWUgd2luZG93IHRoZSBpbnZvaWNlIHRhYmxlc1xyXG4gIC8vIG9wZW4sIHN0YWNrZWQgb3ZlciB0aGlzIGZvcm0gKHdoaWNoIHN0YXlzIG9wZW4gdW5kZXJuZWF0aCkuXHJcbiAgcHJldmlld1NvdXJjZUludm9pY2UoKSB7XHJcbiAgICBjb25zdCBpbnZvaWNlSWQgPSB0aGlzLnNvdXJjZUludm9pY2VJZDtcclxuICAgIGlmICghaW52b2ljZUlkKSByZXR1cm47XHJcbiAgICB0aGlzLmJpbGxpbmdTZXJ2aWNlLmdldEludm9pY2VCeUlkKGludm9pY2VJZCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICghcmVzPy5kYXRhKSB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoJ0ZhaWxlZCB0byBsb2FkIGludm9pY2UnKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKEludm9pY2VQcmV2aWV3Q29tcG9uZW50LCB7XHJcbiAgICAgICAgICBjZW50ZXJlZDogdHJ1ZSwgc2l6ZTogJ3hsJywgc2Nyb2xsYWJsZTogdHJ1ZSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5pbnZvaWNlRGF0YSA9IHJlcy5kYXRhO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKCkgPT4gdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KCdGYWlsZWQgdG8gbG9hZCBpbnZvaWNlJyksXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIENyZWRpdCB0b3RhbCBtYXkgbm90IGV4Y2VlZCB3aGF0J3Mgc3RpbGwgY3JlZGl0YWJsZSBvbiB0aGUgc291cmNlIGludm9pY2VcclxuICAvLyAodGhlIHNlcnZlciBlbmZvcmNlcyB0aGUgc2FtZSBydWxlKS5cclxuICBnZXQgZXhjZWVkc0NyZWRpdEJhbGFuY2UoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuaXNDcmVkaXROb3RlIHx8IHRoaXMuY3JlZGl0YWJsZUJhbGFuY2UgPT09IG51bGwpIHJldHVybiBmYWxzZTtcclxuICAgIHJldHVybiB0aGlzLmdldENyZWRpdFRvdGFsKCkgPiB0aGlzLmNyZWRpdGFibGVCYWxhbmNlICsgMC4wMDU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tIENyZWRpdCBub3RlIGxpbmUgaXRlbXM6IGdlbmVyYXRlZCBmcm9tIHRoZSBjcmVkaXQgdHlwZSArIHNlbGVjdGlvbnMsXHJcbiAgLy8gbmV2ZXIgYWRkZWQgYnkgaGFuZC4gQW1vdW50ICh0aGUgbGluZSdzIGFtb3VudCwgcHJlZmlsbGVkIGZyb20gdGhlIGludm9pY2VcclxuICAvLyBhbmQgZWRpdGFibGUpIGFuZCBDcmVkaXQgYXJlIGVudGVyZWQgc2VwYXJhdGVseSDigJQgdGhlIGNyZWRpdCBpcyBOT1QgdGFrZW5cclxuICAvLyBvZmYgdGhlIEFtb3VudCBzaG93biwgbWF0Y2hpbmcgdGhlIFBERidzIEFtb3VudCBhbmQgQ3JlZGl0IGNvbHVtbnMuIFRoZVxyXG4gIC8vIGFmdGVyLWNyZWRpdCBgYW1vdW50YCBpcyBkZXJpdmVkLiBObyB0YXg6IHRoZSBjcmVkaXQgbm90ZSdzIHZhbHVlIGlzIHRoZVxyXG4gIC8vIHRvdGFsIGNyZWRpdC4gLS0tLVxyXG4gIGdldCBsaW5lSXRlbXMoKTogRm9ybUFycmF5IHtcclxuICAgIHJldHVybiB0aGlzLmludm9pY2VGb3JtLmdldCgnbGluZUl0ZW1zJykgYXMgRm9ybUFycmF5O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjdXJyZW50TW9udGhMYWJlbCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIG5ldyBEYXRlKCkudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywgeyBtb250aDogJ3Nob3J0JywgeWVhcjogJ251bWVyaWMnIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gYGl0ZW1gIGlzIGEgc2F2ZWQgbGluZSAoZWRpdCkgb3IgYSBnZW5lcmF0ZWQgc3BlYy4gTGluZXMgc2F2ZWQgYmVmb3JlXHJcbiAgLy8gb3JpZ2luYWxBbW91bnQgZXhpc3RlZCBoZWxkIHRoZSBvcmlnaW5hbCBpbiBgYW1vdW50YC5cclxuICBjcmVhdGVMaW5lSXRlbUdyb3VwKGl0ZW06IGFueSk6IEZvcm1Hcm91cCB7XHJcbiAgICBjb25zdCBvcmlnaW5hbCA9IHRoaXMucm91bmQyKE51bWJlcihpdGVtPy5vcmlnaW5hbEFtb3VudCA/PyBpdGVtPy5hbW91bnQpIHx8IDApO1xyXG4gICAgY29uc3QgY3JlZGl0ID0gdGhpcy5yb3VuZDIoTnVtYmVyKGl0ZW0/LmNyZWRpdCkgfHwgMCk7XHJcbiAgICByZXR1cm4gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIHByb2R1Y3ROYW1lOiBbaXRlbT8ucHJvZHVjdE5hbWUgfHwgJyddLFxyXG4gICAgICBzdG9yZUlkOiBbaXRlbT8uc3RvcmVJZCB8fCAnJ10sXHJcbiAgICAgIHN0b3JlTmFtZTogW2l0ZW0/LnN0b3JlTmFtZSB8fCAnJ10sXHJcbiAgICAgIGFsbFN0b3JlczogWyEhaXRlbT8uYWxsU3RvcmVzXSxcclxuICAgICAgc3RvcmVzOiBbaXRlbT8uc3RvcmVzIHx8IFtdXSxcclxuICAgICAgZGVzY3JpcHRpb246IFtpdGVtPy5kZXNjcmlwdGlvbiB8fCAnJ10sXHJcbiAgICAgIG1vbnRoOiBbaXRlbT8ubW9udGggPz8gdGhpcy5jdXJyZW50TW9udGhMYWJlbCgpXSxcclxuICAgICAgSHNuTnVtYmVyOiBbaXRlbT8uSHNuTnVtYmVyIHx8ICc5OTgzMTQnXSxcclxuICAgICAgLy8gVGhlIEFtb3VudCBmaWVsZC5cclxuICAgICAgb3JpZ2luYWxBbW91bnQ6IFtvcmlnaW5hbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluKDApXV0sXHJcbiAgICAgIC8vIEFmdGVyIGNyZWRpdCAoQW1vdW50IOKIkiBDcmVkaXQpIOKAlCBkZXJpdmVkLCBrZXB0IGluIHN5bmMgb24gaW5wdXQuXHJcbiAgICAgIGFtb3VudDogW3RoaXMucm91bmQyKG9yaWdpbmFsIC0gY3JlZGl0KV0sXHJcbiAgICAgIGNyZWRpdDogW2NyZWRpdCwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluKDApXV0sXHJcbiAgICB9LCB7IHZhbGlkYXRvcnM6IChncm91cDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xyXG4gICAgICBjb25zdCBvcmlnID0gTnVtYmVyKGdyb3VwLmdldCgnb3JpZ2luYWxBbW91bnQnKT8udmFsdWUpIHx8IDA7XHJcbiAgICAgIGNvbnN0IGMgPSBOdW1iZXIoZ3JvdXAuZ2V0KCdjcmVkaXQnKT8udmFsdWUpO1xyXG4gICAgICByZXR1cm4gYyA+IG9yaWcgKyAwLjAwNSA/IHsgY3JlZGl0QWJvdmVBbW91bnQ6IHRydWUgfSA6IG51bGw7XHJcbiAgICB9IH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gQW1vdW50IGFuZCBDcmVkaXQgYXJlIGluZGVwZW5kZW50OiB0eXBpbmcgaW4gZWl0aGVyIG9ubHkgcmVmcmVzaGVzIHRoZVxyXG4gIC8vIGRlcml2ZWQgYWZ0ZXItY3JlZGl0IGFtb3VudCAoYW5kIHRoZSBjcmVkaXQtYWJvdmUtYW1vdW50IGNoZWNrKS5cclxuICBvbkxpbmVDcmVkaXRJbnB1dChpbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnN5bmNMaW5lQW1vdW50KGluZGV4KTtcclxuICB9XHJcblxyXG4gIG9uTGluZUFtb3VudElucHV0KGluZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMuc3luY0xpbmVBbW91bnQoaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzeW5jTGluZUFtb3VudChpbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBnID0gdGhpcy5saW5lSXRlbXMuYXQoaW5kZXgpO1xyXG4gICAgY29uc3Qgb3JpZyA9IE51bWJlcihnLmdldCgnb3JpZ2luYWxBbW91bnQnKT8udmFsdWUpIHx8IDA7XHJcbiAgICBjb25zdCBjcmVkaXQgPSBOdW1iZXIoZy5nZXQoJ2NyZWRpdCcpPy52YWx1ZSkgfHwgMDtcclxuICAgIGcuZ2V0KCdhbW91bnQnKT8uc2V0VmFsdWUodGhpcy5yb3VuZDIob3JpZyAtIGNyZWRpdCksIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIGcudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gIH1cclxuXHJcbiAgbGluZUl0ZW1JbnZhbGlkKGluZGV4OiBudW1iZXIsIG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgY3RybCA9IHRoaXMubGluZUl0ZW1zLmF0KGluZGV4KT8uZ2V0KG5hbWUpO1xyXG4gICAgcmV0dXJuICEhY3RybCAmJiBjdHJsLnRvdWNoZWQgJiYgY3RybC5pbnZhbGlkO1xyXG4gIH1cclxuXHJcbiAgY3JlZGl0QWJvdmVBbW91bnQoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhdGhpcy5saW5lSXRlbXMuYXQoaW5kZXgpPy5oYXNFcnJvcignY3JlZGl0QWJvdmVBbW91bnQnKTtcclxuICB9XHJcblxyXG4gIC8vIEhlYWRpbmcgZm9yIGEgZ2VuZXJhdGVkIGxpbmU6IHRoZSBwcm9kdWN0LCB0aGUgc3RvcmUsIG9yIHRoZSBpbnZvaWNlLlxyXG4gIGxpbmVMYWJlbChpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHYgPSB0aGlzLmxpbmVJdGVtcy5hdChpbmRleCk/LnZhbHVlIHx8IHt9O1xyXG4gICAgaWYgKHYucHJvZHVjdE5hbWUpIHtcclxuICAgICAgY29uc3Qgc3RvcmVzID0gKHYuc3RvcmVzIHx8IFtdKS5sZW5ndGg7XHJcbiAgICAgIHJldHVybiB0aGlzLmZvcm1hdFByb2R1Y3ROYW1lKHYucHJvZHVjdE5hbWUpICsgKHN0b3JlcyA/IGAgwrcgJHtzdG9yZXN9IHN0b3JlJHtzdG9yZXMgPT09IDEgPyAnJyA6ICdzJ31gIDogJycpO1xyXG4gICAgfVxyXG4gICAgaWYgKHYuYWxsU3RvcmVzKSByZXR1cm4gYEFsbCBzdG9yZXMgKCR7dGhpcy5icmVha2Rvd25TdG9yZXMubGVuZ3RoIHx8IHRoaXMuc2VsZWN0ZWRTdG9yZXMubGVuZ3RofSlgO1xyXG4gICAgaWYgKHYuc3RvcmVOYW1lIHx8IHYuc3RvcmVJZCkgcmV0dXJuIHYuc3RvcmVOYW1lIHx8IHYuc3RvcmVJZDtcclxuICAgIHJldHVybiBgQWdhaW5zdCAke3RoaXMuc291cmNlSW52b2ljZU51bWJlciB8fCAnaW52b2ljZSd9YDtcclxuICB9XHJcblxyXG4gIC8vIExpbmVzIHRoYXQgb25seSB0YWtlIEFtb3VudCBhbmQgQ3JlZGl0IChubyBkZXNjcmlwdGlvbiAvIG1vbnRoIC8gSFNOKTpcclxuICAvLyBhZ2FpbnN0IGludm9pY2UsIGFuZCBieSBzdG9yZSB3aXRoIGFsbCBzdG9yZXMgc2VsZWN0ZWQuXHJcbiAgaXNBbW91bnRPbmx5TGluZShpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5jcmVkaXRUeXBlID09PSAnaW52b2ljZScgfHwgISF0aGlzLmxpbmVJdGVtcy5hdChpbmRleCk/LmdldCgnYWxsU3RvcmVzJyk/LnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy8gVGhpcyBjcmVkaXQgbm90ZSdzIHRvdGFsIGNyZWRpdC5cclxuICBnZXRDcmVkaXRUb3RhbCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMucm91bmQyKHRoaXMubGluZUl0ZW1zLmNvbnRyb2xzLnJlZHVjZSgocywgZykgPT4gcyArIChOdW1iZXIoZy5nZXQoJ2NyZWRpdCcpPy52YWx1ZSkgfHwgMCksIDApKTtcclxuICB9XHJcblxyXG4gIC8vIENyZWRpdGVkIG9uIHRoZSBzYW1lIGludm9pY2UgYnkgT1RIRVIgY3JlZGl0IG5vdGVzOiBpbnZvaWNlIGFtb3VudCAoZXhjbC5cclxuICAvLyBHU1QpIG1pbnVzIHdoYXQgaXMgc3RpbGwgY3JlZGl0YWJsZSBmb3IgdGhpcyBvbmUuIDAgdW50aWwgYm90aCBhcmUga25vd24uXHJcbiAgZ2V0IGFscmVhZHlDcmVkaXRlZCgpOiBudW1iZXIge1xyXG4gICAgaWYgKHRoaXMuY3JlZGl0YWJsZUJhbGFuY2UgPT09IG51bGwgfHwgIXRoaXMuc291cmNlSW52b2ljZUFtb3VudCkgcmV0dXJuIDA7XHJcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgdGhpcy5yb3VuZDIodGhpcy5zb3VyY2VJbnZvaWNlQW1vdW50IC0gdGhpcy5jcmVkaXRhYmxlQmFsYW5jZSkpO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLSBDcmVkaXQgdHlwZSwgcHJvZHVjdCBsaW5lcyBhbmQgc3RvcmUgcGlja2VycyAtLS0tXHJcbiAgbG9hZEludm9pY2VCcmVha2Rvd24oaW52b2ljZUlkOiBzdHJpbmcpIHtcclxuICAgIGlmICghaW52b2ljZUlkKSByZXR1cm47XHJcbiAgICB0aGlzLmJyZWFrZG93bkxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5iaWxsaW5nU2VydmljZS5jcmVkaXROb3RlSW52b2ljZUJyZWFrZG93bihpbnZvaWNlSWQpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBkID0gcmVzPy5kYXRhIHx8IHt9O1xyXG4gICAgICAgIHRoaXMuYnJlYWtkb3duUHJvZHVjdHMgPSBkLnByb2R1Y3RzIHx8IFtdO1xyXG4gICAgICAgIHRoaXMuYnJlYWtkb3duU3RvcmVzID0gZC5zdG9yZXMgfHwgW107XHJcbiAgICAgICAgdGhpcy5wcm9kdWN0U3RvcmVzID0gZC5wcm9kdWN0U3RvcmVzIHx8IHt9O1xyXG4gICAgICAgIHRoaXMuc3RvcmVQcm9kdWN0Q29zdHMgPSBkLmJyZWFrZG93biB8fCBbXTtcclxuICAgICAgICB0aGlzLnNvdXJjZUludm9pY2VBbW91bnQgPSBOdW1iZXIoZC5pbnZvaWNlQW1vdW50KSB8fCAwO1xyXG4gICAgICAgIGlmICh0aGlzLmFsbFN0b3Jlc1NlbGVjdGVkKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkU3RvcmVzID0gdGhpcy5icmVha2Rvd25TdG9yZXMubWFwKChzKSA9PiBzLnN0b3JlSWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmJyZWFrZG93bkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuYnJlYWtkb3duTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChlcnI/LmVycm9yPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gbG9hZCB0aGUgaW52b2ljZVxcJ3MgcHJvZHVjdHMgYW5kIHN0b3JlcycpO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBCeSBwcm9kdWN0IHN0YXJ0cyB3aXRoIG9uZSBlbXB0eSBwcm9kdWN0IGxpbmU7IGJ5IHN0b3JlIHdhaXRzIGZvciBhIHN0b3JlXHJcbiAgLy8gcGljazsgYWdhaW5zdCBpbnZvaWNlIGlzIGEgc2luZ2xlIGxpbmUgc3RyYWlnaHQgYXdheS5cclxuICBvbkNyZWRpdFR5cGVDaGFuZ2UodHlwZTogJ3Byb2R1Y3QnIHwgJ3N0b3JlJyB8ICdpbnZvaWNlJykge1xyXG4gICAgaWYgKHRoaXMuY3JlZGl0VHlwZSA9PT0gdHlwZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jcmVkaXRUeXBlID0gdHlwZTtcclxuICAgIHRoaXMuc2VsZWN0ZWRTdG9yZXMgPSBbXTtcclxuICAgIHRoaXMuYWxsU3RvcmVzU2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgIHRoaXMub3BlblBpY2tlciA9ICcnO1xyXG4gICAgdGhpcy5saW5lSXRlbXMuY2xlYXIoKTtcclxuICAgIGlmICh0eXBlID09PSAncHJvZHVjdCcpIHtcclxuICAgICAgdGhpcy5hZGRQcm9kdWN0TGluZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yZWJ1aWxkTGluZUl0ZW1zKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0b2dnbGVQaWNrZXIoa2V5OiBzdHJpbmcpIHtcclxuICAgIHRoaXMub3BlblBpY2tlciA9IHRoaXMub3BlblBpY2tlciA9PT0ga2V5ID8gJycgOiBrZXk7XHJcbiAgICB0aGlzLnN0b3JlU2VhcmNoID0gJyc7XHJcbiAgfVxyXG5cclxuICAvLyBDbG9zZSBhbiBvcGVuIGNoZWNrYm94IGRyb3Bkb3duIG9uIGFueSBjbGljayBvdXRzaWRlIGl0LlxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcclxuICBvbkRvY3VtZW50Q2xpY2soZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5vcGVuUGlja2VyICYmICEoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KT8uY2xvc2VzdD8uKCcuY24tcGlja2VyJykpIHtcclxuICAgICAgdGhpcy5vcGVuUGlja2VyID0gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1hdGNoZXNTZWFyY2goczogeyBzdG9yZUlkOiBzdHJpbmc7IHN0b3JlTmFtZTogc3RyaW5nIH0pOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHRlcm0gPSB0aGlzLnN0b3JlU2VhcmNoLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgcmV0dXJuICF0ZXJtIHx8IHMuc3RvcmVOYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybSkgfHwgcy5zdG9yZUlkLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0b3JlU3VtbWFyeShzdG9yZUlkczogc3RyaW5nW10sIG5hbWVzOiB7IHN0b3JlSWQ6IHN0cmluZzsgc3RvcmVOYW1lOiBzdHJpbmcgfVtdLCBub25lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKCFzdG9yZUlkcy5sZW5ndGgpIHJldHVybiBub25lO1xyXG4gICAgaWYgKHN0b3JlSWRzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIG5hbWVzLmZpbmQoKHMpID0+IHMuc3RvcmVJZCA9PT0gc3RvcmVJZHNbMF0pPy5zdG9yZU5hbWUgfHwgc3RvcmVJZHNbMF07XHJcbiAgICByZXR1cm4gYCR7c3RvcmVJZHMubGVuZ3RofSBzdG9yZXMgc2VsZWN0ZWRgO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLSBCeSBwcm9kdWN0OiBvbmUgbGluZSBwZXIgcHJvZHVjdCAoc2luZ2xlLXNlbGVjdCksIGVhY2ggd2l0aCBpdHMgb3duXHJcbiAgLy8gb3B0aW9uYWwgU3RvcmVzLCBsaW1pdGVkIHRvIHRoZSBzdG9yZXMgbWFwcGVkIHRvIHRoYXQgcHJvZHVjdCBvbiB0aGVcclxuICAvLyBpbnZvaWNlLiBBIHByb2R1Y3QgY2FuIG9ubHkgYmUgb24gb25lIGxpbmUuIC0tLS1cclxuICBnZXQgY2FuQWRkUHJvZHVjdExpbmUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5jcmVkaXRUeXBlID09PSAncHJvZHVjdCcgJiYgIXRoaXMuYnJlYWtkb3duTG9hZGluZyAmJlxyXG4gICAgICB0aGlzLmxpbmVJdGVtcy5sZW5ndGggPCB0aGlzLmJyZWFrZG93blByb2R1Y3RzLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIGFkZFByb2R1Y3RMaW5lKCkge1xyXG4gICAgdGhpcy5saW5lSXRlbXMucHVzaCh0aGlzLmNyZWF0ZUxpbmVJdGVtR3JvdXAoeyBwcm9kdWN0TmFtZTogJycsIG9yaWdpbmFsQW1vdW50OiAwLCBjcmVkaXQ6IDAgfSkpO1xyXG4gICAgdGhpcy5zY3JvbGxUb0xhc3RSb3coJ2RhdGEtbGluZS1pdGVtLXJvdycpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlUHJvZHVjdExpbmUoaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5saW5lSXRlbXMucmVtb3ZlQXQoaW5kZXgpO1xyXG4gICAgdGhpcy5vcGVuUGlja2VyID0gJyc7XHJcbiAgfVxyXG5cclxuICAvLyBUaGUgaW52b2ljZSdzIHByb2R1Y3RzIG5vdCBhbHJlYWR5IG9uIGFub3RoZXIgbGluZSAocGx1cyB0aGlzIGxpbmUncyBvd24pLlxyXG4gIHByb2R1Y3RPcHRpb25zRm9yKGluZGV4OiBudW1iZXIpOiB7IHByb2R1Y3ROYW1lOiBzdHJpbmcgfVtdIHtcclxuICAgIGNvbnN0IHVzZWRFbHNld2hlcmUgPSBuZXcgU2V0KHRoaXMubGluZUl0ZW1zLmNvbnRyb2xzXHJcbiAgICAgIC5maWx0ZXIoKF8sIGkpID0+IGkgIT09IGluZGV4KVxyXG4gICAgICAubWFwKChnKSA9PiBnLmdldCgncHJvZHVjdE5hbWUnKT8udmFsdWUpXHJcbiAgICAgIC5maWx0ZXIoQm9vbGVhbikpO1xyXG4gICAgcmV0dXJuIHRoaXMuYnJlYWtkb3duUHJvZHVjdHMuZmlsdGVyKChwKSA9PiAhdXNlZEVsc2V3aGVyZS5oYXMocC5wcm9kdWN0TmFtZSkpO1xyXG4gIH1cclxuXHJcbiAgLy8gUHJvZHVjdCBwaWNrZWQ6IHJlc2V0IHRoZSBsaW5lIHRvIHRoYXQgcHJvZHVjdCdzIGludm9pY2UgYW1vdW50LCB3aXRoIGl0c1xyXG4gIC8vIGRlc2NyaXB0aW9uIC8gSFNOLCBubyBzdG9yZXMgYW5kIG5vIGNyZWRpdC5cclxuICBvbkxpbmVQcm9kdWN0Q2hhbmdlKGluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGcgPSB0aGlzLmxpbmVJdGVtcy5hdChpbmRleCk7XHJcbiAgICBjb25zdCBwcm9kdWN0ID0gdGhpcy5icmVha2Rvd25Qcm9kdWN0cy5maW5kKChwKSA9PiBwLnByb2R1Y3ROYW1lID09PSBnLmdldCgncHJvZHVjdE5hbWUnKT8udmFsdWUpO1xyXG4gICAgY29uc3Qgb3JpZ2luYWwgPSBwcm9kdWN0ID8gcHJvZHVjdC5hbW91bnQgOiAwO1xyXG4gICAgZy5wYXRjaFZhbHVlKHtcclxuICAgICAgc3RvcmVzOiBbXSxcclxuICAgICAgZGVzY3JpcHRpb246IHByb2R1Y3Q/LmRlc2NyaXB0aW9uIHx8ICcnLFxyXG4gICAgICBIc25OdW1iZXI6IHByb2R1Y3Q/Lkhzbk51bWJlciB8fCAnOTk4MzE0JyxcclxuICAgICAgb3JpZ2luYWxBbW91bnQ6IG9yaWdpbmFsLFxyXG4gICAgICBjcmVkaXQ6IDAsXHJcbiAgICAgIGFtb3VudDogb3JpZ2luYWwsXHJcbiAgICB9KTtcclxuICAgIHRoaXMub3BlblBpY2tlciA9ICcnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsaW5lU3RvcmVJZHMoaW5kZXg6IG51bWJlcik6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiAodGhpcy5saW5lSXRlbXMuYXQoaW5kZXgpPy5nZXQoJ3N0b3JlcycpPy52YWx1ZSB8fCBbXSkubWFwKChzOiBhbnkpID0+IFN0cmluZyhzLnN0b3JlSWQpKTtcclxuICB9XHJcblxyXG4gIC8vIFN0b3JlcyBtYXBwZWQgdG8gdGhpcyBsaW5lJ3MgcHJvZHVjdCBvbiB0aGUgaW52b2ljZSwgbmFycm93ZWQgYnkgc2VhcmNoLlxyXG4gIGxpbmVTdG9yZU9wdGlvbnMoaW5kZXg6IG51bWJlcik6IHsgc3RvcmVJZDogc3RyaW5nOyBzdG9yZU5hbWU6IHN0cmluZyB9W10ge1xyXG4gICAgY29uc3QgcHJvZHVjdCA9IFN0cmluZyh0aGlzLmxpbmVJdGVtcy5hdChpbmRleCk/LmdldCgncHJvZHVjdE5hbWUnKT8udmFsdWUgfHwgJycpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICByZXR1cm4gKHRoaXMucHJvZHVjdFN0b3Jlc1twcm9kdWN0XSB8fCBbXSkuZmlsdGVyKChzKSA9PiB0aGlzLm1hdGNoZXNTZWFyY2gocykpO1xyXG4gIH1cclxuXHJcbiAgaXNMaW5lU3RvcmVTZWxlY3RlZChpbmRleDogbnVtYmVyLCBzdG9yZUlkOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmxpbmVTdG9yZUlkcyhpbmRleCkuaW5jbHVkZXMoc3RvcmVJZCk7XHJcbiAgfVxyXG5cclxuICBsaW5lU3RvcmVTdW1tYXJ5KGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgcHJvZHVjdCA9IFN0cmluZyh0aGlzLmxpbmVJdGVtcy5hdChpbmRleCk/LmdldCgncHJvZHVjdE5hbWUnKT8udmFsdWUgfHwgJycpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICByZXR1cm4gdGhpcy5zdG9yZVN1bW1hcnkodGhpcy5saW5lU3RvcmVJZHMoaW5kZXgpLCB0aGlzLnByb2R1Y3RTdG9yZXNbcHJvZHVjdF0gfHwgW10sICdBbGwgc3RvcmVzJyk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVMaW5lU3RvcmUoaW5kZXg6IG51bWJlciwgc3RvcmU6IHsgc3RvcmVJZDogc3RyaW5nOyBzdG9yZU5hbWU6IHN0cmluZyB9KSB7XHJcbiAgICBjb25zdCBnID0gdGhpcy5saW5lSXRlbXMuYXQoaW5kZXgpO1xyXG4gICAgY29uc3QgY3VycmVudDogYW55W10gPSBnLmdldCgnc3RvcmVzJyk/LnZhbHVlIHx8IFtdO1xyXG4gICAgY29uc3QgbmV4dCA9IGN1cnJlbnQuc29tZSgocykgPT4gcy5zdG9yZUlkID09PSBzdG9yZS5zdG9yZUlkKVxyXG4gICAgICA/IGN1cnJlbnQuZmlsdGVyKChzKSA9PiBzLnN0b3JlSWQgIT09IHN0b3JlLnN0b3JlSWQpXHJcbiAgICAgIDogWy4uLmN1cnJlbnQsIHN0b3JlXTtcclxuICAgIGcucGF0Y2hWYWx1ZSh7IHN0b3JlczogbmV4dCB9KTtcclxuICAgIHRoaXMucmVwcmljZVByb2R1Y3RMaW5lKGluZGV4KTtcclxuICB9XHJcblxyXG4gIGNsZWFyTGluZVN0b3JlcyhpbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmxpbmVJdGVtcy5hdChpbmRleCkucGF0Y2hWYWx1ZSh7IHN0b3JlczogW10gfSk7XHJcbiAgICB0aGlzLnJlcHJpY2VQcm9kdWN0TGluZShpbmRleCk7XHJcbiAgfVxyXG5cclxuICAvLyBBIHByb2R1Y3QgbGluZSdzIGFtb3VudCBiZWZvcmUgY3JlZGl0OiB0aG9zZSBzdG9yZXMnIGNvc3QgZm9yIHRoZSBwcm9kdWN0LFxyXG4gIC8vIG9yIHRoZSBwcm9kdWN0J3Mgd2hvbGUgaW52b2ljZSBhbW91bnQgd2hlbiBubyBzdG9yZXMgYXJlIHBpY2tlZC4gQSB0eXBlZFxyXG4gIC8vIGNyZWRpdCBpcyBrZXB0IChjYXBwZWQgYXQgdGhlIG5ldyBhbW91bnQpLlxyXG4gIHByaXZhdGUgcmVwcmljZVByb2R1Y3RMaW5lKGluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGcgPSB0aGlzLmxpbmVJdGVtcy5hdChpbmRleCk7XHJcbiAgICBjb25zdCBwcm9kdWN0TmFtZSA9IGcuZ2V0KCdwcm9kdWN0TmFtZScpPy52YWx1ZTtcclxuICAgIGNvbnN0IHByb2R1Y3QgPSB0aGlzLmJyZWFrZG93blByb2R1Y3RzLmZpbmQoKHApID0+IHAucHJvZHVjdE5hbWUgPT09IHByb2R1Y3ROYW1lKTtcclxuICAgIGNvbnN0IGlkcyA9IHRoaXMubGluZVN0b3JlSWRzKGluZGV4KTtcclxuICAgIGNvbnN0IG9yaWdpbmFsID0gaWRzLmxlbmd0aCA/IHRoaXMuc3RvcmVDb3N0KGlkcywgcHJvZHVjdE5hbWUpIDogKHByb2R1Y3Q/LmFtb3VudCB8fCAwKTtcclxuICAgIGNvbnN0IGNyZWRpdCA9IE1hdGgubWluKE51bWJlcihnLmdldCgnY3JlZGl0Jyk/LnZhbHVlKSB8fCAwLCBvcmlnaW5hbCk7XHJcbiAgICBnLnBhdGNoVmFsdWUoeyBvcmlnaW5hbEFtb3VudDogb3JpZ2luYWwsIGNyZWRpdCwgYW1vdW50OiB0aGlzLnJvdW5kMihvcmlnaW5hbCAtIGNyZWRpdCkgfSk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tIEJ5IHN0b3JlOiBvbmUgU3RvcmVzIGRyb3Bkb3duICh0aGUgYmlsbGluZyBncm91cCdzIHN0b3Jlcykg4oaSIG9uZVxyXG4gIC8vIGxpbmUgcGVyIHN0b3JlLCBvciBhIHNpbmdsZSBBbGwtc3RvcmVzIGxpbmUgd2hlbiBldmVyeSBzdG9yZSBpcyBzZWxlY3RlZC5cclxuICB0b2dnbGVTdG9yZShzdG9yZUlkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGFsbCA9IHRoaXMuYnJlYWtkb3duU3RvcmVzLm1hcCgocykgPT4gcy5zdG9yZUlkKTtcclxuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmFsbFN0b3Jlc1NlbGVjdGVkID8gYWxsIDogdGhpcy5zZWxlY3RlZFN0b3JlcztcclxuICAgIHRoaXMuc2VsZWN0ZWRTdG9yZXMgPSBjdXJyZW50LmluY2x1ZGVzKHN0b3JlSWQpXHJcbiAgICAgID8gY3VycmVudC5maWx0ZXIoKHMpID0+IHMgIT09IHN0b3JlSWQpXHJcbiAgICAgIDogWy4uLmN1cnJlbnQsIHN0b3JlSWRdO1xyXG4gICAgLy8gVGlja2luZyBldmVyeSBzdG9yZSBieSBoYW5kIGNvdW50cyBhcyBTZWxlY3QgYWxsLlxyXG4gICAgdGhpcy5hbGxTdG9yZXNTZWxlY3RlZCA9IGFsbC5sZW5ndGggPiAwICYmIHRoaXMuc2VsZWN0ZWRTdG9yZXMubGVuZ3RoID09PSBhbGwubGVuZ3RoO1xyXG4gICAgdGhpcy5yZWJ1aWxkTGluZUl0ZW1zKCk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RBbGxTdG9yZXMoKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkU3RvcmVzID0gdGhpcy5icmVha2Rvd25TdG9yZXMubWFwKChzKSA9PiBzLnN0b3JlSWQpO1xyXG4gICAgdGhpcy5hbGxTdG9yZXNTZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRTdG9yZXMubGVuZ3RoID4gMDtcclxuICAgIHRoaXMucmVidWlsZExpbmVJdGVtcygpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJTdG9yZXMoKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkU3RvcmVzID0gW107XHJcbiAgICB0aGlzLmFsbFN0b3Jlc1NlbGVjdGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLnJlYnVpbGRMaW5lSXRlbXMoKTtcclxuICB9XHJcblxyXG4gIGlzU3RvcmVTZWxlY3RlZChzdG9yZUlkOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmFsbFN0b3Jlc1NlbGVjdGVkIHx8IHRoaXMuc2VsZWN0ZWRTdG9yZXMuaW5jbHVkZXMoc3RvcmVJZCk7XHJcbiAgfVxyXG5cclxuICBnZXQgZmlsdGVyZWRTdG9yZXMoKTogeyBzdG9yZUlkOiBzdHJpbmc7IHN0b3JlTmFtZTogc3RyaW5nIH1bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5icmVha2Rvd25TdG9yZXMuZmlsdGVyKChzKSA9PiB0aGlzLm1hdGNoZXNTZWFyY2gocykpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHN0b3JlUGlja2VyU3VtbWFyeSgpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuYWxsU3RvcmVzU2VsZWN0ZWQpIHJldHVybiBgQWxsIHN0b3JlcyAoJHt0aGlzLmJyZWFrZG93blN0b3Jlcy5sZW5ndGh9KWA7XHJcbiAgICByZXR1cm4gdGhpcy5zdG9yZVN1bW1hcnkodGhpcy5zZWxlY3RlZFN0b3JlcywgdGhpcy5icmVha2Rvd25TdG9yZXMsICdTZWxlY3Qgc3RvcmVzJyk7XHJcbiAgfVxyXG5cclxuICAvLyBTdG9yZSDDlyBwcm9kdWN0IGNvc3QgZnJvbSB0aGUgaW52b2ljZSdzIHN0b3JlIGJyZWFrZG93biAoY2FzZS1pbnNlbnNpdGl2ZVxyXG4gIC8vIHByb2R1Y3QgbWF0Y2gg4oCUIHRoZSBicmVha2Rvd24gYW5kIGludm9pY2VzIHNwZWxsIHByb2R1Y3RzIGRpZmZlcmVudGx5KS5cclxuICBwcml2YXRlIHN0b3JlQ29zdChzdG9yZUlkczogc3RyaW5nW10gfCBudWxsLCBwcm9kdWN0TmFtZTogc3RyaW5nIHwgbnVsbCk6IG51bWJlciB7XHJcbiAgICBjb25zdCBpZHMgPSBzdG9yZUlkcyA/IG5ldyBTZXQoc3RvcmVJZHMpIDogbnVsbDtcclxuICAgIGNvbnN0IGtleSA9IHByb2R1Y3ROYW1lID8gcHJvZHVjdE5hbWUudG9Mb3dlckNhc2UoKSA6IG51bGw7XHJcbiAgICByZXR1cm4gdGhpcy5yb3VuZDIodGhpcy5zdG9yZVByb2R1Y3RDb3N0c1xyXG4gICAgICAuZmlsdGVyKChjKSA9PiAoIWlkcyB8fCBpZHMuaGFzKGMuc3RvcmVJZCkpICYmICgha2V5IHx8IGMucHJvZHVjdE5hbWUgPT09IGtleSkpXHJcbiAgICAgIC5yZWR1Y2UoKHMsIGMpID0+IHMgKyAoTnVtYmVyKGMuYW1vdW50KSB8fCAwKSwgMCkpO1xyXG4gIH1cclxuXHJcbiAgLy8gQnkgc3RvcmUgLyBhZ2FpbnN0IGludm9pY2U6IHJlZ2VuZXJhdGUgdGhlIGxpbmVzIGZyb20gdGhlIHNlbGVjdGlvbixcclxuICAvLyBrZWVwaW5nIHdoYXQgdGhlIHVzZXIgYWxyZWFkeSB0eXBlZCAoY3JlZGl0LCBkZXNjcmlwdGlvbiwgbW9udGgsIEhTTikgb25cclxuICAvLyBsaW5lcyB0aGF0IHN0YXkuIChCeSBwcm9kdWN0IGxpbmVzIGFyZSBtYW5hZ2VkIG9uZSBieSBvbmUgYWJvdmUuKVxyXG4gIHByaXZhdGUgcmVidWlsZExpbmVJdGVtcygpIHtcclxuICAgIGNvbnN0IGtleU9mID0gKHY6IGFueSkgPT4gKHYuYWxsU3RvcmVzID8gJ2EnIDogKHYuc3RvcmVJZCA/IGBzOiR7di5zdG9yZUlkfWAgOiAnaScpKTtcclxuICAgIGNvbnN0IHByZXZpb3VzID0gbmV3IE1hcDxzdHJpbmcsIGFueT4odGhpcy5saW5lSXRlbXMuY29udHJvbHMubWFwKChnKSA9PiBba2V5T2YoZy52YWx1ZSksIGcuZ2V0UmF3VmFsdWUoKV0pKTtcclxuICAgIGxldCBzcGVjczogYW55W10gPSBbXTtcclxuICAgIGlmICh0aGlzLmNyZWRpdFR5cGUgPT09ICdzdG9yZScgJiYgdGhpcy5hbGxTdG9yZXNTZWxlY3RlZCkge1xyXG4gICAgICAvLyBFdmVyeSBzdG9yZTogb25lIGxpbmUgYXQgYWxsIHN0b3JlcycgY29zdC5cclxuICAgICAgc3BlY3MgPSBbeyBhbGxTdG9yZXM6IHRydWUsIHN0b3JlTmFtZTogJ0FsbCBzdG9yZXMnLCBvcmlnaW5hbEFtb3VudDogdGhpcy5zdG9yZUNvc3QobnVsbCwgbnVsbCkgfV07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuY3JlZGl0VHlwZSA9PT0gJ3N0b3JlJykge1xyXG4gICAgICBzcGVjcyA9IHRoaXMuYnJlYWtkb3duU3RvcmVzXHJcbiAgICAgICAgLmZpbHRlcigocykgPT4gdGhpcy5zZWxlY3RlZFN0b3Jlcy5pbmNsdWRlcyhzLnN0b3JlSWQpKVxyXG4gICAgICAgIC5tYXAoKHMpID0+ICh7IHN0b3JlSWQ6IHMuc3RvcmVJZCwgc3RvcmVOYW1lOiBzLnN0b3JlTmFtZSwgb3JpZ2luYWxBbW91bnQ6IHRoaXMuc3RvcmVDb3N0KFtzLnN0b3JlSWRdLCBudWxsKSB9KSk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuY3JlZGl0VHlwZSA9PT0gJ2ludm9pY2UnKSB7XHJcbiAgICAgIHNwZWNzID0gW3sgb3JpZ2luYWxBbW91bnQ6IHRoaXMuc291cmNlSW52b2ljZUFtb3VudCB9XTtcclxuICAgIH1cclxuICAgIHRoaXMubGluZUl0ZW1zLmNsZWFyKCk7XHJcbiAgICBmb3IgKGNvbnN0IHNwZWMgb2Ygc3BlY3MpIHtcclxuICAgICAgY29uc3Qgb2xkID0gcHJldmlvdXMuZ2V0KGtleU9mKHNwZWMpKTtcclxuICAgICAgY29uc3QgY3JlZGl0ID0gb2xkID8gTWF0aC5taW4oTnVtYmVyKG9sZC5jcmVkaXQpIHx8IDAsIHNwZWMub3JpZ2luYWxBbW91bnQpIDogMDtcclxuICAgICAgdGhpcy5saW5lSXRlbXMucHVzaCh0aGlzLmNyZWF0ZUxpbmVJdGVtR3JvdXAoe1xyXG4gICAgICAgIC4uLnNwZWMsXHJcbiAgICAgICAgZGVzY3JpcHRpb246IG9sZD8uZGVzY3JpcHRpb24gPz8gJycsXHJcbiAgICAgICAgbW9udGg6IG9sZD8ubW9udGggPz8gdGhpcy5jdXJyZW50TW9udGhMYWJlbCgpLFxyXG4gICAgICAgIEhzbk51bWJlcjogb2xkPy5Ic25OdW1iZXIsXHJcbiAgICAgICAgY3JlZGl0LFxyXG4gICAgICB9KSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIC8vIENvbXBhbnkgLyBncm91cCAvIGN1cnJlbmN5IG9mIHRoZSBjcmVkaXQgbm90ZSDigJQgZnJvbSBpdHMgc291cmNlIGludm9pY2VcclxuICAvLyAobmV3KSBvciBhcyBzdG9yZWQgb24gdGhlIGNyZWRpdCBub3RlIChlZGl0KS4gUmVhZC1vbmx5IGluIHRoZSBmb3JtLlxyXG4gIHByaXZhdGUgcGF0Y2hDb21wYW55RGV0YWlscyhzcmM6IGFueSkge1xyXG4gICAgdGhpcy5pbnZvaWNlRm9ybS5wYXRjaFZhbHVlKHtcclxuICAgICAgY29tcGFueU5hbWU6IHNyYy5jb21wYW55TmFtZSB8fCAnJyxcclxuICAgICAgY29tcGFueUFkZHJlc3M6IHNyYy5jb21wYW55QWRkcmVzcyB8fCAnJyxcclxuICAgICAgR1NUTnVtYmVyOiBzcmMuR1NUTnVtYmVyIHx8ICcnLFxyXG4gICAgICBQbGFjZU9mU3VwcGx5OiBzcmMuUGxhY2VPZlN1cHBseSB8fCAnJyxcclxuICAgICAgZ3JvdXBOYW1lOiBzcmMuZ3JvdXBOYW1lIHx8ICcnLFxyXG4gICAgICBncm91cElkOiBzcmMuZ3JvdXBJZCB8fCAnJyxcclxuICAgICAgY3VycmVuY3k6IHNyYy5jdXJyZW5jeSB8fCAnaW5yJyxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gRnVsbHkgY3JlZGl0ZWQgaW52b2ljZXMgYXJlIGxpc3RlZCBidXQgY2FuJ3QgYmUgcGlja2VkLlxyXG4gIGlzSW52b2ljZVBpY2thYmxlKGludjogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gTnVtYmVyKGludj8uYmFsYW5jZSkgPiAwO1xyXG4gIH1cclxuXHJcbiAgaW52b2ljZU9wdGlvbkxhYmVsKGludjogYW55KTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGRhdGUgPSBpbnY/LmJpbGxpbmdEYXRlID8gbmV3IERhdGUoaW52LmJpbGxpbmdEYXRlKS50b0xvY2FsZURhdGVTdHJpbmcoJ2VuLUdCJywgeyBkYXk6ICcyLWRpZ2l0JywgbW9udGg6ICdzaG9ydCcsIHllYXI6ICdudW1lcmljJyB9KSA6ICcnO1xyXG4gICAgY29uc3Qgbm90ZSA9IHRoaXMuaXNJbnZvaWNlUGlja2FibGUoaW52KVxyXG4gICAgICA/IGAke3RoaXMuc3ltYm9sRm9yKGludj8uY3VycmVuY3kpfSR7TnVtYmVyKGludi5iYWxhbmNlKS50b0xvY2FsZVN0cmluZygnZW4tSU4nLCB7IG1heGltdW1GcmFjdGlvbkRpZ2l0czogMiB9KX0gY3JlZGl0YWJsZWBcclxuICAgICAgOiAnZnVsbHkgY3JlZGl0ZWQnO1xyXG4gICAgLy8gUGFpZCBpbnZvaWNlcyBhcmUgbGlzdGVkIHRvbywgc28gc2F5IHdoZXJlIGVhY2ggc3RhbmRzLlxyXG4gICAgY29uc3QgcGF5bWVudCA9ICh7IHBhaWQ6ICdQYWlkJywgcGFydGlhbDogJ1BhcnRpYWxseSBwYWlkJywgdW5wYWlkOiAnVW5wYWlkJyB9IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4pW2ludj8ucGF5bWVudFN0YXR1c10gfHwgJyc7XHJcbiAgICBjb25zdCBwYXJ0cyA9IFtcclxuICAgICAgYCR7aW52Py5pbnZvaWNlfSR7aW52Py5hZHZhbmNlSW52b2ljZSA/ICcgKEFkdmFuY2UpJyA6ICcnfWAsXHJcbiAgICAgIHRoaXMucGlja0Fjcm9zc0JyYW5kcyA/IChpbnY/LmNsaWVudE5hbWUgfHwgJycpIDogJycsXHJcbiAgICAgIGRhdGUsXHJcbiAgICAgIHBheW1lbnQsXHJcbiAgICAgIG5vdGUsXHJcbiAgICBdO1xyXG4gICAgcmV0dXJuIHBhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKCcgwrcgJyk7XHJcbiAgfVxyXG5cclxuICAvLyBJbnZvaWNlIHBpY2tlZDogbG9hZCB0aGUgZnVsbCBpbnZvaWNlIChjb21wYW55IGRldGFpbHMpIGFuZCBpdHMgcHJvZHVjdHMgL1xyXG4gIC8vIHN0b3JlcyBicmVha2Rvd24uIE5vIGxpbmUgaXRlbXMgeWV0IOKAlCB0aGV5IGFwcGVhciBvbmNlIGEgY3JlZGl0IHR5cGUgaXNcclxuICAvLyBjaG9zZW4uIEFjcm9zcyBicmFuZHMsIHRoZSBicmFuZCBjb21lcyBmcm9tIHRoZSBpbnZvaWNlLCBzbyBpdHMgYmlsbGluZ1xyXG4gIC8vIGdyb3VwcyAocmVhZC1vbmx5IGdyb3VwIGZpZWxkKSBhcmUgKHJlKWxvYWRlZC5cclxuICBvbkludm9pY2VQaWNrKCkge1xyXG4gICAgY29uc3QgaW52b2ljZUlkID0gdGhpcy5pbnZvaWNlRm9ybS5nZXQoJ2ludm9pY2VJZCcpPy52YWx1ZTtcclxuICAgIGNvbnN0IHBpY2tlZCA9IHRoaXMuY3JlZGl0YWJsZUludm9pY2VzLmZpbmQoKGludjogYW55KSA9PiBpbnYuX2lkID09PSBpbnZvaWNlSWQpO1xyXG4gICAgdGhpcy5yZXNldENyZWRpdE5vdGVTb3VyY2UoaW52b2ljZUlkKTtcclxuICAgIGlmICghcGlja2VkKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5waWNrQWNyb3NzQnJhbmRzICYmIFN0cmluZyhwaWNrZWQuY2xpZW50SWQpICE9PSB0aGlzLmNsaWVudElkKSB7XHJcbiAgICAgIHRoaXMuY2xpZW50SWQgPSBTdHJpbmcocGlja2VkLmNsaWVudElkKTtcclxuICAgICAgdGhpcy5iaWxsaW5nR3JvdXBzID0gW107XHJcbiAgICAgIHRoaXMubG9hZEJpbGxpbmdHcm91cHMoKTtcclxuICAgIH1cclxuICAgIHRoaXMubG9hZEludm9pY2VCcmVha2Rvd24oaW52b2ljZUlkKTtcclxuICAgIHRoaXMuYmlsbGluZ1NlcnZpY2UuZ2V0SW52b2ljZUJ5SWQoaW52b2ljZUlkKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgaW52b2ljZSA9IHJlcz8uZGF0YTtcclxuICAgICAgICBpZiAoIWludm9pY2UpIHtcclxuICAgICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdCgnRmFpbGVkIHRvIGxvYWQgaW52b2ljZScpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnBhdGNoQ29tcGFueURldGFpbHMoaW52b2ljZSk7XHJcbiAgICAgICAgdGhpcy5zb3VyY2VJbnZvaWNlID0gcGlja2VkO1xyXG4gICAgICAgIHRoaXMuY3JlZGl0YWJsZUJhbGFuY2UgPSBOdW1iZXIocGlja2VkLmJhbGFuY2UpIHx8IDA7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoKSA9PiB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoJ0ZhaWxlZCB0byBsb2FkIGludm9pY2UnKSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gQ2xlYXIgdGhlIHByZWZpbGxlZCBpbnZvaWNlIGRhdGEgKGtlZXBpbmcgdGhlIHBpY2tlZCBpbnZvaWNlSWQsIGlmIGFueSkuXHJcbiAgcHJpdmF0ZSByZXNldENyZWRpdE5vdGVTb3VyY2UoaW52b2ljZUlkOiBzdHJpbmcgPSAnJykge1xyXG4gICAgdGhpcy5zb3VyY2VJbnZvaWNlID0gbnVsbDtcclxuICAgIHRoaXMuY3JlZGl0YWJsZUJhbGFuY2UgPSBudWxsO1xyXG4gICAgdGhpcy5pbnZvaWNlRm9ybS5wYXRjaFZhbHVlKHtcclxuICAgICAgaW52b2ljZUlkLCBncm91cElkOiAnJywgZ3JvdXBOYW1lOiAnJywgY29tcGFueU5hbWU6ICcnLCBjb21wYW55QWRkcmVzczogJycsXHJcbiAgICAgIEdTVE51bWJlcjogJycsIFBsYWNlT2ZTdXBwbHk6ICcnLCByZWFzb246ICcnLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmxpbmVJdGVtcy5jbGVhcigpO1xyXG4gICAgdGhpcy5jcmVkaXRUeXBlID0gJyc7XHJcbiAgICB0aGlzLnNlbGVjdGVkU3RvcmVzID0gW107XHJcbiAgICB0aGlzLmFsbFN0b3Jlc1NlbGVjdGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLm9wZW5QaWNrZXIgPSAnJztcclxuICAgIHRoaXMuYnJlYWtkb3duUHJvZHVjdHMgPSBbXTtcclxuICAgIHRoaXMuYnJlYWtkb3duU3RvcmVzID0gW107XHJcbiAgICB0aGlzLnByb2R1Y3RTdG9yZXMgPSB7fTtcclxuICAgIHRoaXMuc3RvcmVQcm9kdWN0Q29zdHMgPSBbXTtcclxuICAgIHRoaXMuc291cmNlSW52b2ljZUFtb3VudCA9IDA7XHJcbiAgfVxyXG5cclxuICAvLyBPbmUgYnJhbmQncyBpbnZvaWNlcywgb3IgZXZlcnkgYnJhbmQncyB3aGVuIHBpY2tpbmcgYWNyb3NzIGJyYW5kcy5cclxuICBsb2FkQ3JlZGl0YWJsZUludm9pY2VzKCkge1xyXG4gICAgY29uc3QgY0lkID0gdGhpcy5waWNrQWNyb3NzQnJhbmRzID8gJycgOiAodGhpcy5jbGllbnRJZCB8fCB0aGlzLmludm9pY2VEYXRhPy5jbGllbnRJZCk7XHJcbiAgICBpZiAoIWNJZCAmJiAhdGhpcy5waWNrQWNyb3NzQnJhbmRzKSByZXR1cm47XHJcbiAgICB0aGlzLmJpbGxpbmdTZXJ2aWNlLmNyZWRpdE5vdGVJbnZvaWNlcyhjSWQpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmNyZWRpdGFibGVJbnZvaWNlcyA9IHJlcz8uZGF0YSB8fCBbXTtcclxuICAgICAgICBpZiAodGhpcy5tb2RlID09PSAnZWRpdENyZWRpdE5vdGUnKSB7XHJcbiAgICAgICAgICAvLyBUaGlzIGNyZWRpdCBub3RlIGlzIGFscmVhZHkgY291bnRlZCBpbiB0aGUgaW52b2ljZSdzIGNyZWRpdGVkXHJcbiAgICAgICAgICAvLyBhbW91bnQg4oCUIGFkZCBpdCBiYWNrIHRvIGdldCB3aGF0IGl0IG1heSBiZSBlZGl0ZWQgdXAgdG8uXHJcbiAgICAgICAgICBjb25zdCBzb3VyY2UgPSB0aGlzLmNyZWRpdGFibGVJbnZvaWNlcy5maW5kKChpbnY6IGFueSkgPT4gaW52Ll9pZCA9PT0gdGhpcy5pbnZvaWNlRGF0YT8uaW52b2ljZUlkKTtcclxuICAgICAgICAgIGlmIChzb3VyY2UpIHtcclxuICAgICAgICAgICAgdGhpcy5jcmVkaXRhYmxlQmFsYW5jZSA9IChOdW1iZXIoc291cmNlLmJhbGFuY2UpIHx8IDApICsgKE51bWJlcih0aGlzLmludm9pY2VEYXRhPy50b3RhbEFtb3VudCkgfHwgMCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaW52b2ljZXNMb2FkRmFpbGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAvLyBTYXkgc28g4oCUIGFuIGVtcHR5IGxpc3Qgd291bGQgcmVhZCBhcyBcInRoaXMgYnJhbmQgaGFzIG5vIGludm9pY2VzXCIuXHJcbiAgICAgICAgdGhpcy5jcmVkaXRhYmxlSW52b2ljZXMgPSBbXTtcclxuICAgICAgICB0aGlzLmludm9pY2VzTG9hZEZhaWxlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KGVycj8uZXJyb3I/Lm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBsb2FkIGludm9pY2VzJyk7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09PSBFRElUIElOVk9JQ0UgPT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gIGluaXRGb3JtKCkge1xyXG4gICAgdGhpcy5pbnZvaWNlRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICAvLyBDcmVkaXQgbm90ZSBvbmx5OiB0aGUgc291cmNlIGludm9pY2UgaXQgY3JlZGl0cyBhbmQgYSBmcmVlLXRleHQgcmVhc29uLlxyXG4gICAgICBpbnZvaWNlSWQ6IFsnJywgdGhpcy5tb2RlID09PSAnY3JlZGl0Tm90ZScgPyBWYWxpZGF0b3JzLnJlcXVpcmVkIDogW11dLFxyXG4gICAgICByZWFzb246IFsnJ10sXHJcbiAgICAgIGNvbXBhbnlOYW1lOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBjb21wYW55QWRkcmVzczogWycnXSxcclxuICAgICAgR1NUTnVtYmVyOiBbJyddLFxyXG4gICAgICBQbGFjZU9mU3VwcGx5OiBbJyddLFxyXG4gICAgICBncm91cE5hbWU6IFsnJ10sXHJcbiAgICAgIC8vIEJpbGxpbmcgR3JvdXAgaXMgcmVxdWlyZWQgd2hlbiBjcmVhdGluZyDigJQgdGhlIHJlc3Qgb2YgdGhlIGNvbXBhbnlcclxuICAgICAgLy8gZmllbGRzIGF1dG8tZmlsbCBmcm9tIHRoZSBzZWxlY3RlZCBncm91cC4gQ3JlZGl0IG5vdGVzIHRha2UgdGhlIGdyb3VwXHJcbiAgICAgIC8vIGZyb20gdGhlaXIgc291cmNlIGludm9pY2UgaW5zdGVhZC5cclxuICAgICAgZ3JvdXBJZDogWycnLCB0aGlzLm1vZGUgIT09ICdlZGl0JyAmJiAhdGhpcy5pc0NyZWRpdE5vdGUgPyBWYWxpZGF0b3JzLnJlcXVpcmVkIDogW11dLFxyXG4gICAgICBzdG9yZXM6IFswLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW4oMCldXSxcclxuICAgICAgYmlsbGluZ0RhdGU6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIC8vIENyZWRpdCBub3RlcyBoYXZlIG5vIGR1ZSBkYXRlLlxyXG4gICAgICBkdWVEYXRlOiBbJycsIHRoaXMuaXNDcmVkaXROb3RlID8gW10gOiBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgLy8gQ3JlYXRlIG1vZGU6IGR1ZSBkYXRlIGlzIGRlcml2ZWQgZnJvbSBiaWxsaW5nRGF0ZSArIHBheW1lbnRUZXJtIChkYXlzKSxcclxuICAgICAgLy8gc28gdGhlIHVzZXIgcGlja3MgYSB0ZXJtICgzMC82MC85MC8xMjApIGluc3RlYWQgb2YgYSBkdWUgZGF0ZS4gRWRpdCAvXHJcbiAgICAgIC8vIGVzdGltYXRlIG1vZGVzIGtlZXAgdGhlIGVkaXRhYmxlIGR1ZURhdGUgZmllbGQgYW5kIGlnbm9yZSBwYXltZW50VGVybS5cclxuICAgICAgcGF5bWVudFRlcm06IFszMF0sXHJcbiAgICAgIGN1cnJlbmN5OiBbJ2lucicsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBzdGF0dXM6IFsncGVuZGluZyddLFxyXG4gICAgICBwYXltZW50U3RhdHVzOiBbJ3VucGFpZCddLFxyXG4gICAgICAvLyBBZHZhbmNlIGludm9pY2U6IHdoZW4gb24sIHRoZSBjaG9zZW4gZnJlcXVlbmN5IGJpbGxzIHNldmVyYWwgZnV0dXJlXHJcbiAgICAgIC8vIG1vbnRocyB1cGZyb250IChlYWNoIG1vbnRoIGJlY29tZXMgaXRzIG93biBsaW5lIGl0ZW0gc2VydmVyLXNpZGUpLlxyXG4gICAgICBhZHZhbmNlSW52b2ljZTogW2ZhbHNlXSxcclxuICAgICAgYWR2YW5jZVBlcmlvZDogWydtb250aGx5J10sXHJcbiAgICAgIC8vIE9wdGlvbmFsOiBtYXAgdGhpcyBpbnZvaWNlIHRvIGEgcHVyY2hhc2Ugb3JkZXIgKHJlZHVjZXMgdGhlIFBPIGJhbGFuY2UpLlxyXG4gICAgICBwdXJjaGFzZU9yZGVyTnVtYmVyOiBbJyddLFxyXG4gICAgICBwcm9kdWN0czogdGhpcy5mYi5hcnJheShbXSksXHJcbiAgICAgIHRheDogdGhpcy5mYi5hcnJheShbXSksXHJcbiAgICAgIC8vIENyZWRpdCBub3RlcyB1c2UgbGluZSBpdGVtcyBpbnN0ZWFkIG9mIHByb2R1Y3RzIC8gdGF4LlxyXG4gICAgICBsaW5lSXRlbXM6IHRoaXMuZmIuYXJyYXkoW10pLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBBIFB1cmNoYXNlIE9yZGVyIGNhbiBiZSBtYXBwZWQgZnJvbSB0aGUgZmluYW5jZSBhcHByb3ZhbCBzdGFnZSBvbjogb25jZVxyXG4gIC8vIHRoZSByZWFsIG51bWJlciBpcyBtaW50ZWQsIG9yIHdoaWxlIHRoZSBkcmFmdCBpcyBwZW5kaW5nIGZpbmFuY2UgYXBwcm92YWxcclxuICAvLyAoZmluYW5jZSBhdHRhY2hlcyBpdCBhcyBwYXJ0IG9mIHRoZWlyIHJldmlldzsgdGhlIHNlcnZlciBtb3ZlcyB0aGUgUE8gbGlua1xyXG4gIC8vIHRvIHRoZSByZWFsIG51bWJlciB3aGVuIGZpbmFuY2UgYXBwcm92ZXMpLiBBIGRyYWZ0IHN0aWxsIGF0IENTTSByZXZpZXcsIG9yXHJcbiAgLy8gYSBicmFuZC1uZXcgaW52b2ljZSAoY3JlYXRlIG1vZGUsIG5vIG51bWJlciB5ZXQpLCBjYW4ndCB0YWtlIG9uZS5cclxuICBnZXQgaXNEcmFmdCgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLm1vZGUgIT09ICdlZGl0Jykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmludm9pY2VEYXRhPy5zdGF0dXMgPT09ICdwZW5kaW5nRmluYW5jZScpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbnVtID0gdGhpcy5pbnZvaWNlRGF0YT8uaW52b2ljZSB8fCAnJztcclxuICAgIHJldHVybiB0eXBlb2YgbnVtID09PSAnc3RyaW5nJyAmJiBudW0uc3RhcnRzV2l0aCgnRFJBRlQtJyk7XHJcbiAgfVxyXG5cclxuICAvLyBQdXJjaGFzZSBvcmRlcnMgYXZhaWxhYmxlIGZvciB0aGlzIGNsaWVudCAoZm9yIHRoZSBQTyBwaWNrZXIpLlxyXG4gIHB1cmNoYXNlT3JkZXJzOiBhbnlbXSA9IFtdO1xyXG5cclxuICBsb2FkUHVyY2hhc2VPcmRlcnMoKSB7XHJcbiAgICBjb25zdCBjSWQgPSB0aGlzLmNsaWVudElkIHx8IHRoaXMuaW52b2ljZURhdGE/LmNsaWVudElkO1xyXG4gICAgaWYgKCFjSWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5iaWxsaW5nU2VydmljZS5nZXRQdXJjaGFzZU9yZGVycyhjSWQpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnB1cmNoYXNlT3JkZXJzID0gcmVzPy5kYXRhPy5wdXJjaGFzZU9yZGVycyB8fCBbXTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnB1cmNoYXNlT3JkZXJzID0gW107XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFkdmFuY2VQZXJpb2RPcHRpb25zID0gW1xyXG4gICAgeyB2YWx1ZTogJ21vbnRobHknLCBsYWJlbDogJ01vbnRobHkgKG5leHQgbW9udGgpJyB9LFxyXG4gICAgeyB2YWx1ZTogJ3F1YXJ0ZXJseScsIGxhYmVsOiAnUXVhcnRlcmx5IChuZXh0IDMgbW9udGhzKScgfSxcclxuICAgIHsgdmFsdWU6ICdoYWxmeWVhcmx5JywgbGFiZWw6ICdIYWxmLXllYXJseSAobmV4dCA2IG1vbnRocyknIH0sXHJcbiAgICB7IHZhbHVlOiAneWVhcmx5JywgbGFiZWw6ICdZZWFybHkgKG5leHQgMTIgbW9udGhzKScgfSxcclxuICBdO1xyXG5cclxuICAvLyBUZW1wbGF0ZSBoZWxwZXJzOiBzdXJmYWNlIFwidG91Y2hlZCAmJiBpbnZhbGlkXCIgc28gdGhlIEhUTUwgY2FuIGhpZ2hsaWdodFxyXG4gIC8vIHRoZSBmaWVsZCBhbmQgcmVuZGVyIGFuIGlubGluZSBlcnJvci4gRGVmZW5zaXZlIGFnYWluc3QgdGhlIGZvcm0gbm90IHlldFxyXG4gIC8vIGJlaW5nIGluaXRpYWxpc2VkIGR1cmluZyB0aGUgZmlyc3QgY2hhbmdlLWRldGVjdGlvbiBwYXNzLlxyXG4gIGNvbnRyb2xJbnZhbGlkKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgY3RybCA9IHRoaXMuaW52b2ljZUZvcm0/LmdldChuYW1lKTtcclxuICAgIHJldHVybiAhIWN0cmwgJiYgY3RybC50b3VjaGVkICYmIGN0cmwuaW52YWxpZDtcclxuICB9XHJcblxyXG4gIGFycmF5Q29udHJvbEludmFsaWQoYXJyYXlOYW1lOiAncHJvZHVjdHMnIHwgJ3RheCcsIGluZGV4OiBudW1iZXIsIG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgYXJyID0gdGhpcy5pbnZvaWNlRm9ybT8uZ2V0KGFycmF5TmFtZSkgYXMgRm9ybUFycmF5IHwgbnVsbDtcclxuICAgIGNvbnN0IGN0cmwgPSBhcnI/LmF0KGluZGV4KT8uZ2V0KG5hbWUpO1xyXG4gICAgcmV0dXJuICEhY3RybCAmJiBjdHJsLnRvdWNoZWQgJiYgY3RybC5pbnZhbGlkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzY3JvbGxUb0ZpcnN0SW52YWxpZCgpOiB2b2lkIHtcclxuICAgIC8vIEZpbmQgdGhlIGZpcnN0IGludmFsaWQgY29udHJvbCBpbnNpZGUgdGhlIG1vZGFsIGFuZCBicmluZyBpdCBpbnRvIHZpZXcuXHJcbiAgICAvLyBTY29wZWQgdG8gLm1vZGFsLWNvbnRlbnQgc28gd2UgZG9uJ3QgZ3JhYiBmaWVsZHMgZnJvbSBvdGhlciBtb2RhbHMgb25cclxuICAgIC8vIHRoZSBwYWdlIGlmIGFueSBhcmUgb3Blbi5cclxuICAgIGNvbnN0IHJvb3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubW9kYWwtY29udGVudCcpO1xyXG4gICAgY29uc3QgZmlyc3QgPSByb290Py5xdWVyeVNlbGVjdG9yKCcuaXMtaW52YWxpZCcpIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcclxuICAgIGlmIChmaXJzdCkge1xyXG4gICAgICBmaXJzdC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdjZW50ZXInIH0pO1xyXG4gICAgICBpZiAodHlwZW9mIGZpcnN0LmZvY3VzID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgZmlyc3QuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgcHJvZHVjdHMoKTogRm9ybUFycmF5IHtcclxuICAgIHJldHVybiB0aGlzLmludm9pY2VGb3JtLmdldCgncHJvZHVjdHMnKSBhcyBGb3JtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXQgdGF4QXJyYXkoKTogRm9ybUFycmF5IHtcclxuICAgIHJldHVybiB0aGlzLmludm9pY2VGb3JtLmdldCgndGF4JykgYXMgRm9ybUFycmF5O1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlUHJvZHVjdEdyb3VwKHByb2R1Y3Q/OiBhbnkpOiBGb3JtR3JvdXAge1xyXG4gICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBwcm9kdWN0TmFtZTogW3Byb2R1Y3Q/LnByb2R1Y3ROYW1lIHx8ICcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgLy8gV2hlbiB0cnVlLCB0aGUgbmFtZSBpcyBhIGZyZWUtdGV4dCBjdXN0b20gcHJvZHVjdCAobm90IGZyb20gdGhlIGNsaWVudCdzXHJcbiAgICAgIC8vIGJhc2UtcHJpY2luZyBsaXN0KSDigJQgdGhlIHRlbXBsYXRlIHNob3dzIGEgdGV4dCBpbnB1dCBpbnN0ZWFkIG9mIHRoZVxyXG4gICAgICAvLyBwcm9kdWN0IGRyb3Bkb3duLlxyXG4gICAgICBpc0N1c3RvbTogW3Byb2R1Y3Q/LmlzQ3VzdG9tIHx8IGZhbHNlXSxcclxuICAgICAgZGVzY3JpcHRpb246IFtwcm9kdWN0Py5kZXNjcmlwdGlvbiB8fCAnJ10sXHJcbiAgICAgIG1vbnRoOiBbcHJvZHVjdD8ubW9udGggfHwgJyddLFxyXG4gICAgICBIc25OdW1iZXI6IFtwcm9kdWN0Py5Ic25OdW1iZXIgfHwgJzk5ODMxNCddLFxyXG4gICAgICBzdG9yZUNvdW50OiBbcHJvZHVjdD8uc3RvcmVDb3VudCB8fCAwLCBWYWxpZGF0b3JzLm1pbigwKV0sXHJcbiAgICAgIHByaWNlOiBbcHJvZHVjdD8ucHJpY2UgfHwgMCwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluKDApXV0sXHJcbiAgICAgIGFtb3VudDogW3Byb2R1Y3Q/LmFtb3VudCB8fCAwXSxcclxuICAgICAgcGVyaW9kOiBbcHJvZHVjdD8ucGVyaW9kIHx8ICdtb250aGx5J10sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZVRheEdyb3VwKHRheD86IGFueSk6IEZvcm1Hcm91cCB7XHJcbiAgICByZXR1cm4gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIC8vIERpc2FibGVkOiB0YXggcm93cyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBHU1QgbnVtYmVyIChhcHBseUdyb3VwR3N0VGF4KSxcclxuICAgICAgLy8gbmV2ZXIgaGFuZC1lZGl0ZWQuIG9uU3VibWl0IHJlYWRzIGdldFJhd1ZhbHVlKCksIHNvIHRoZSBkaXNhYmxlZCBjb250cm9sXHJcbiAgICAgIC8vIHN0aWxsIHJlYWNoZXMgdGhlIHBheWxvYWQuXHJcbiAgICAgIHR5cGU6IFt7IHZhbHVlOiB0YXg/LnR5cGUgfHwgJ0lHU1QnLCBkaXNhYmxlZDogdHJ1ZSB9LCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgdmFsdWU6IFt0YXg/LnZhbHVlIHx8IDE4LCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW4oMCksIFZhbGlkYXRvcnMubWF4KDEwMCldXSxcclxuICAgICAgdGF4QW1vdW50OiBbdGF4Py50YXhBbW91bnQgfHwgJzAnXSxcclxuICAgICAgLy8gRGVmYXVsdCB0aGUgdGF4LXJvdyBzeW1ib2wgdG8gdGhlIGludm9pY2UncyBjdXJyZW5jeSAod2FzIGhhcmRjb2RlZFxyXG4gICAgICAvLyB0byDigrksIHdoaWNoIGxlYWtlZCBpbnRvIHRoZSBzYXZlZCBkb2MgZm9yIG5vbi1JTlIgaW52b2ljZXMpLlxyXG4gICAgICBjdXJyZW5jeTogW3RheD8uY3VycmVuY3kgfHwgdGhpcy5zeW1ib2xGb3IodGhpcy5pbnZvaWNlRm9ybT8uZ2V0KCdjdXJyZW5jeScpPy52YWx1ZSldLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN5bWJvbEZvcihjb2RlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmN1cnJlbmN5U3ltYm9sc1tjb2RlIHx8ICcnXSB8fCAnJCc7XHJcbiAgfVxyXG5cclxuICBhZGRQcm9kdWN0KCkge1xyXG4gICAgdGhpcy5wcm9kdWN0cy5wdXNoKHRoaXMuY3JlYXRlUHJvZHVjdEdyb3VwKCkpO1xyXG4gICAgdGhpcy5zY3JvbGxUb0xhc3RSb3coJ2RhdGEtcHJvZHVjdC1yb3cnKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZVByb2R1Y3QoaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5wcm9kdWN0cy5yZW1vdmVBdChpbmRleCk7XHJcbiAgICB0aGlzLnJlY2FsY3VsYXRlKCk7XHJcbiAgfVxyXG5cclxuICBhZGRUYXgoKSB7XHJcbiAgICB0aGlzLnRheEFycmF5LnB1c2godGhpcy5jcmVhdGVUYXhHcm91cCgpKTtcclxuICAgIC8vIEFwcGx5IHRoZSBkZWZhdWx0ICgxOCUgSUdTVCkgYWdhaW5zdCB0aGUgY3VycmVudCBzdWJ0b3RhbCBpbW1lZGlhdGVseSwgc29cclxuICAgIC8vIHRoZSB0YXggYW1vdW50IHBvcHVsYXRlcyBvbiBhZGQgaW5zdGVhZCBvZiBzdGF5aW5nIDAgdW50aWwgZWRpdGVkLlxyXG4gICAgdGhpcy5yZWNhbGN1bGF0ZSgpO1xyXG4gICAgdGhpcy5zY3JvbGxUb0xhc3RSb3coJ2RhdGEtdGF4LXJvdycpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlVGF4KGluZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMudGF4QXJyYXkucmVtb3ZlQXQoaW5kZXgpO1xyXG4gICAgdGhpcy5yZWNhbGN1bGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gRGVmYXVsdCByYXRlIHBlciB0YXggdHlwZTogSUdTVCBpcyBhIHNpbmdsZSAxOCUgbGluZTsgQ0dTVC9TR1NUIGFyZSB0aGVcclxuICAvLyBzcGxpdCA5JSArIDklIGhhbHZlcy4gQ2hhbmdpbmcgdGhlIHR5cGUgcmVzZXRzIHRoZSAlIHRvIGl0cyBkZWZhdWx0IGFuZFxyXG4gIC8vIHJlY29tcHV0ZXMgdGhlIGFtb3VudC5cclxuICBvblRheFR5cGVDaGFuZ2UoaW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3QgZ3JvdXAgPSB0aGlzLnRheEFycmF5LmF0KGluZGV4KTtcclxuICAgIGNvbnN0IHR5cGUgPSBncm91cD8uZ2V0KCd0eXBlJyk/LnZhbHVlO1xyXG4gICAgY29uc3QgZGVmYXVsdFJhdGUgPSB0eXBlID09PSAnQ0dTVCcgfHwgdHlwZSA9PT0gJ1NHU1QnID8gOSA6IDE4O1xyXG4gICAgZ3JvdXA/LmdldCgndmFsdWUnKT8uc2V0VmFsdWUoZGVmYXVsdFJhdGUpO1xyXG4gICAgdGhpcy5yZWNhbGN1bGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gRGVmYXVsdHMgdG8gdGhlIGRvY3VtZW50IGJlaW5nIGVkaXRlZDsgYSBuZXcgY3JlZGl0IG5vdGUgcGFzc2VzIGl0c1xyXG4gIC8vIHNvdXJjZSBpbnZvaWNlIGluc3RlYWQuXHJcbiAgcGF0Y2hGb3JtKGludjogYW55ID0gdGhpcy5pbnZvaWNlRGF0YSkge1xyXG5cclxuICAgIHRoaXMuaW52b2ljZUZvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgIGNvbXBhbnlOYW1lOiBpbnYuY29tcGFueU5hbWUgfHwgJycsXHJcbiAgICAgIGNvbXBhbnlBZGRyZXNzOiBpbnYuY29tcGFueUFkZHJlc3MgfHwgJycsXHJcbiAgICAgIEdTVE51bWJlcjogaW52LkdTVE51bWJlciB8fCAnJyxcclxuICAgICAgUGxhY2VPZlN1cHBseTogaW52LlBsYWNlT2ZTdXBwbHkgfHwgJycsXHJcbiAgICAgIGdyb3VwTmFtZTogaW52Lmdyb3VwTmFtZSB8fCAnJyxcclxuICAgICAgZ3JvdXBJZDogaW52Lmdyb3VwSWQgfHwgJycsXHJcbiAgICAgIHN0b3JlczogaW52LnN0b3JlcyB8fCAwLFxyXG4gICAgICBiaWxsaW5nRGF0ZTogdGhpcy5mb3JtYXREYXRlRm9ySW5wdXQoaW52LmJpbGxpbmdEYXRlKSxcclxuICAgICAgZHVlRGF0ZTogdGhpcy5mb3JtYXREYXRlRm9ySW5wdXQoaW52LmR1ZURhdGUpLFxyXG4gICAgICBjdXJyZW5jeTogaW52LmN1cnJlbmN5IHx8ICdpbnInLFxyXG4gICAgICBzdGF0dXM6IGludi5zdGF0dXMgfHwgJ3BlbmRpbmcnLFxyXG4gICAgICBwYXltZW50U3RhdHVzOiBpbnYucGF5bWVudFN0YXR1cyB8fCAndW5wYWlkJyxcclxuICAgICAgcHVyY2hhc2VPcmRlck51bWJlcjogaW52LnB1cmNoYXNlT3JkZXJOdW1iZXIgfHwgJycsXHJcbiAgICB9KTtcclxuICAgIC8vIFRyYWNrIHRoZSBsb2FkZWQgY3VycmVuY3kgc28gYSBjYW5jZWxsZWQgY2hhbmdlIGNhbiByZXZlcnQgdG8gaXQuXHJcbiAgICB0aGlzLnByZXZpb3VzQ3VycmVuY3kgPSBpbnYuY3VycmVuY3kgfHwgJ2lucic7XHJcblxyXG4gICAgLy8gUGF0Y2ggcHJvZHVjdHNcclxuICAgIGlmIChpbnYucHJvZHVjdHM/Lmxlbmd0aCkge1xyXG4gICAgICBpbnYucHJvZHVjdHMuZm9yRWFjaCgocDogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5wcm9kdWN0cy5wdXNoKHRoaXMuY3JlYXRlUHJvZHVjdEdyb3VwKHApKTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFkZFByb2R1Y3QoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQYXRjaCB0YXguIE5vbi1JTlIgaW52b2ljZXMgKGUuZy4gZG9sbGFyIGNsaWVudHMpIGhhdmUgbm8gR1NULCBidXQgdGhlXHJcbiAgICAvLyBiYWNrZW5kIHN0aWxsIHN0b3JlcyBhIHBsYWNlaG9sZGVyIElHU1Qgcm93IHdpdGggYSAwIGFtb3VudCDigJQgc2tpcCB0aG9zZVxyXG4gICAgLy8gc28gdGhlIHRheCBzZWN0aW9uIHN0YXJ0cyBlbXB0eS4gT25seSBsb2FkIHRheCByb3dzIHRoYXQgY2FycnkgYSByZWFsXHJcbiAgICAvLyAobm9uLXplcm8pIGFtb3VudC4gVGhlIHVzZXIgY2FuIHN0aWxsIGFkZCBhIHRheCB3aXRoIHRoZSBcIkFkZCBUYXhcIiBidXR0b24uXHJcbiAgICBjb25zdCB0YXhSb3dzID0gKGludi50YXggfHwgW10pLmZpbHRlcigodDogYW55KSA9PiBOdW1iZXIodD8udGF4QW1vdW50KSA+IDApO1xyXG4gICAgdGF4Um93cy5mb3JFYWNoKCh0OiBhbnkpID0+IHtcclxuICAgICAgdGhpcy50YXhBcnJheS5wdXNoKHRoaXMuY3JlYXRlVGF4R3JvdXAodCkpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBmb3JtYXREYXRlRm9ySW5wdXQoZGF0ZTogYW55KTogc3RyaW5nIHtcclxuICAgIGlmICghZGF0ZSkgcmV0dXJuICcnO1xyXG4gICAgY29uc3QgZCA9IG5ldyBEYXRlKGRhdGU/LiRkYXRlIHx8IGRhdGUpO1xyXG4gICAgaWYgKGlzTmFOKGQuZ2V0VGltZSgpKSkgcmV0dXJuICcnO1xyXG4gICAgcmV0dXJuIGQudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdO1xyXG4gIH1cclxuXHJcbiAgLy8gQ3JlYXRlIG1vZGUgb25seTogZGVyaXZlIGR1ZURhdGUgPSBiaWxsaW5nRGF0ZSArIHBheW1lbnRUZXJtIChkYXlzKS4gQ2FsbGVkXHJcbiAgLy8gd2hlbmV2ZXIgdGhlIGJpbGxpbmcgZGF0ZSBvciB0aGUgcGF5bWVudCB0ZXJtIGNoYW5nZXMuIE5vLW9wIGlmIHRoZSBiaWxsaW5nXHJcbiAgLy8gZGF0ZSBpc24ndCBzZXQgeWV0LlxyXG4gIGNvbXB1dGVEdWVEYXRlKCk6IHZvaWQge1xyXG4gICAgY29uc3QgYmlsbGluZyA9IHRoaXMuaW52b2ljZUZvcm0uZ2V0KCdiaWxsaW5nRGF0ZScpPy52YWx1ZTtcclxuICAgIGNvbnN0IHRlcm0gPSBOdW1iZXIodGhpcy5pbnZvaWNlRm9ybS5nZXQoJ3BheW1lbnRUZXJtJyk/LnZhbHVlKSB8fCAwO1xyXG4gICAgaWYgKCFiaWxsaW5nKSB7IHJldHVybjsgfVxyXG4gICAgY29uc3QgZCA9IG5ldyBEYXRlKGJpbGxpbmcpO1xyXG4gICAgaWYgKGlzTmFOKGQuZ2V0VGltZSgpKSkgeyByZXR1cm47IH1cclxuICAgIGQuc2V0RGF0ZShkLmdldERhdGUoKSArIHRlcm0pO1xyXG4gICAgdGhpcy5pbnZvaWNlRm9ybS5wYXRjaFZhbHVlKHsgZHVlRGF0ZTogdGhpcy5mb3JtYXREYXRlRm9ySW5wdXQoZCkgfSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gQ2hhbmdpbmcgYW4gaW52b2ljZSdzIGN1cnJlbmN5IGNvbnZlcnRzIGV2ZXJ5IHByb2R1Y3QgcHJpY2UgZnJvbSB0aGUgb2xkXHJcbiAgLy8gY3VycmVuY3kgdG8gdGhlIG5ldyBvbmUgdmlhIGxpdmUgRlggcmF0ZXMuIEEgY29uZmlybWF0aW9uIGlzIHNob3duIGZpcnN0O1xyXG4gIC8vIGNhbmNlbGxpbmcgcmV2ZXJ0cyB0aGUgY3VycmVuY3kgc2VsZWN0LiBPbmx5IGFjdHMgd2hlbiB0aGUgY3VycmVuY3kgYWN0dWFsbHlcclxuICAvLyBjaGFuZ2VkIHRvIGEgZGlmZmVyZW50IGNvZGUuXHJcbiAgb25DdXJyZW5jeUNoYW5nZShldmVudDogYW55KSB7XHJcbiAgICBjb25zdCBuZXdDdXJyZW5jeSA9IGV2ZW50Py50YXJnZXQ/LnZhbHVlO1xyXG4gICAgY29uc3Qgb2xkQ3VycmVuY3kgPSB0aGlzLnByZXZpb3VzQ3VycmVuY3k7XHJcbiAgICBpZiAoIW5ld0N1cnJlbmN5IHx8IG5ld0N1cnJlbmN5ID09PSBvbGRDdXJyZW5jeSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBsYWJlbCA9IChjOiBzdHJpbmcpID0+IHRoaXMuY3VycmVuY3lMYWJlbHNbY10gfHwgYztcclxuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihSZXF1ZXN0Q29uZmlybWF0aW9uQ29tcG9uZW50LCB7XHJcbiAgICAgIGNlbnRlcmVkOiB0cnVlLCBzaXplOiAnbWQnLCBzY3JvbGxhYmxlOiB0cnVlLFxyXG4gICAgfSk7XHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS50aXRsZSA9ICdDaGFuZ2UgaW52b2ljZSBjdXJyZW5jeT8nO1xyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuZGVzY3JpcHRpb24gPVxyXG4gICAgICBgVGhpcyBpbnZvaWNlIHdhcyBjcmVhdGVkIGluICR7bGFiZWwob2xkQ3VycmVuY3kpfS4gU3dpdGNoaW5nIHRvICR7bGFiZWwobmV3Q3VycmVuY3kpfSB3aWxsIGNvbnZlcnQgYWxsIHByb2R1Y3QgYW1vdW50cyB1c2luZyB0b2RheSdzIGV4Y2hhbmdlIHJhdGUuIFJldmlldyB0aGUgY29udmVydGVkIHZhbHVlcyBiZWZvcmUgc2F2aW5nLmA7XHJcbiAgICBtb2RhbFJlZi5yZXN1bHQudGhlbigocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3VsdCA9PT0gJ1llcycpIHtcclxuICAgICAgICB0aGlzLmNvbnZlcnRQcm9kdWN0Q3VycmVuY3kob2xkQ3VycmVuY3ksIG5ld0N1cnJlbmN5KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBDYW5jZWxsZWQg4oCUIHJldmVydCB0aGUgc2VsZWN0IGJhY2sgdG8gdGhlIG9yaWdpbmFsIGN1cnJlbmN5LlxyXG4gICAgICAgIHRoaXMuaW52b2ljZUZvcm0uZ2V0KCdjdXJyZW5jeScpPy5zZXRWYWx1ZShvbGRDdXJyZW5jeSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KS5jYXRjaCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuaW52b2ljZUZvcm0uZ2V0KCdjdXJyZW5jeScpPy5zZXRWYWx1ZShvbGRDdXJyZW5jeSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBGZXRjaCBJTlItcGVyLXVuaXQgcmF0ZXMgYW5kIGNvbnZlcnQgZWFjaCBwcm9kdWN0IHByaWNlIGZyb20gb2xk4oaSbmV3OlxyXG4gIC8vICAgbmV3UHJpY2UgPSBvbGRQcmljZSAqIChyYXRlc1tvbGRdIC8gcmF0ZXNbbmV3XSkuXHJcbiAgLy8gRWFjaCBsaW5lIGFtb3VudCBpcyBjb252ZXJ0ZWQgYnkgdGhlIHNhbWUgZmFjdG9yIChzbyBwcm9yYXRlZCBsaW5lcyBzdGF5XHJcbiAgLy8gcHJvcmF0ZWQpLCB0YXgtcm93IGN1cnJlbmN5IHN5bWJvbHMgYXJlIHJlZnJlc2hlZCBhbmQgdG90YWxzIHJlY29tcHV0ZWQuXHJcbiAgLy8gcHJldmlvdXNDdXJyZW5jeSBpcyBhZHZhbmNlZCBvbmx5IGFmdGVyIGEgc3VjY2Vzc2Z1bCBjb252ZXJzaW9uLlxyXG4gIHByaXZhdGUgY29udmVydFByb2R1Y3RDdXJyZW5jeShvbGRDdXJyZW5jeTogc3RyaW5nLCBuZXdDdXJyZW5jeTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmJpbGxpbmdTZXJ2aWNlLmZ4UmF0ZXMoKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgcmF0ZXMgPSByZXM/LmRhdGE/LnJhdGVzIHx8IHt9O1xyXG4gICAgICAgIGNvbnN0IHJPbGQgPSBOdW1iZXIocmF0ZXNbb2xkQ3VycmVuY3ldKTtcclxuICAgICAgICBjb25zdCByTmV3ID0gTnVtYmVyKHJhdGVzW25ld0N1cnJlbmN5XSk7XHJcbiAgICAgICAgaWYgKCEock9sZCA+IDApIHx8ICEock5ldyA+IDApKSB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoJ0V4Y2hhbmdlIHJhdGUgdW5hdmFpbGFibGUg4oCUIGN1cnJlbmN5IG5vdCBjb252ZXJ0ZWQuJyk7XHJcbiAgICAgICAgICB0aGlzLmludm9pY2VGb3JtLmdldCgnY3VycmVuY3knKT8uc2V0VmFsdWUob2xkQ3VycmVuY3ksIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZmFjdG9yID0gck9sZCAvIHJOZXc7XHJcbiAgICAgICAgdGhpcy5wcm9kdWN0cy5jb250cm9scy5mb3JFYWNoKChncm91cCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgcHJpY2UgPSBOdW1iZXIoZ3JvdXAuZ2V0KCdwcmljZScpPy52YWx1ZSkgfHwgMDtcclxuICAgICAgICAgIGNvbnN0IGNvbnZlcnRlZCA9IHRoaXMucm91bmRGb3JDdXJyZW5jeShwcmljZSAqIGZhY3RvciwgbmV3Q3VycmVuY3kpO1xyXG4gICAgICAgICAgZ3JvdXAuZ2V0KCdwcmljZScpPy5zZXRWYWx1ZShjb252ZXJ0ZWQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICAgIC8vIENvbnZlcnQgdGhlIHN0b3JlZCBsaW5lIGFtb3VudCBkaXJlY3RseSByYXRoZXIgdGhhbiByZS1kZXJpdmluZyBpdFxyXG4gICAgICAgICAgLy8gYXMgc3RvcmVDb3VudCB4IG5ldyBwcmljZSwgd2hpY2ggd291bGQgZHJvcCBhbnkgcHJvcmF0aW9uLlxyXG4gICAgICAgICAgY29uc3QgYW1vdW50ID0gTnVtYmVyKGdyb3VwLmdldCgnYW1vdW50Jyk/LnZhbHVlKSB8fCAwO1xyXG4gICAgICAgICAgZ3JvdXAuZ2V0KCdhbW91bnQnKT8uc2V0VmFsdWUodGhpcy5yb3VuZEZvckN1cnJlbmN5KGFtb3VudCAqIGZhY3RvciwgbmV3Q3VycmVuY3kpLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5wcmV2aW91c0N1cnJlbmN5ID0gbmV3Q3VycmVuY3k7XHJcbiAgICAgICAgLy8gR1NUIGZvbGxvd3MgdGhlIGN1cnJlbmN5OiBhIGZvcmVpZ24gY3VycmVuY3kgZHJvcHMgdGhlIHRheCByb3dzLCBhbmRcclxuICAgICAgICAvLyBzd2l0Y2hpbmcgYmFjayB0byBJTlIgcmVzdG9yZXMgdGhlbSBmcm9tIHRoZSBHU1RJTiAoYW5kIHJlY2FsY3VsYXRlcykuXHJcbiAgICAgICAgdGhpcy5hcHBseUdyb3VwR3N0VGF4KHRoaXMuaW52b2ljZUZvcm0uZ2V0KCdHU1ROdW1iZXInKT8udmFsdWUpO1xyXG4gICAgICAgIHRoaXMudG9hc3QuZ2V0UHJpbWFyeVRvYXN0KGBBbW91bnRzIGNvbnZlcnRlZCB0byAke3RoaXMuY3VycmVuY3lMYWJlbHNbbmV3Q3VycmVuY3ldIHx8IG5ld0N1cnJlbmN5fS5gKTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoJ0ZhaWxlZCB0byBmZXRjaCBleGNoYW5nZSByYXRlIOKAlCBjdXJyZW5jeSBub3QgY29udmVydGVkLicpO1xyXG4gICAgICAgIHRoaXMuaW52b2ljZUZvcm0uZ2V0KCdjdXJyZW5jeScpPy5zZXRWYWx1ZShvbGRDdXJyZW5jeSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uR3JvdXBDaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRHcm91cCA9IHRoaXMuYmlsbGluZ0dyb3Vwcy5maW5kKGcgPT4gZy5faWQgPT09IGV2ZW50LnRhcmdldC52YWx1ZSk7XHJcbiAgICBpZiAoc2VsZWN0ZWRHcm91cCkge1xyXG4gICAgICB0aGlzLmludm9pY2VGb3JtLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgIGdyb3VwTmFtZTogc2VsZWN0ZWRHcm91cC5ncm91cE5hbWUsXHJcbiAgICAgICAgZ3JvdXBJZDogc2VsZWN0ZWRHcm91cC5faWQsXHJcbiAgICAgICAgLy8gQ29tcGFueSBuYW1lcyBvbiBpbnZvaWNlcyBhcmUgYWx3YXlzIHVwcGVyIGNhc2UuXHJcbiAgICAgICAgY29tcGFueU5hbWU6IFN0cmluZyhzZWxlY3RlZEdyb3VwLnJlZ2lzdGVyZWRDb21wYW55TmFtZSB8fCAnJykudG9VcHBlckNhc2UoKSxcclxuICAgICAgICBjb21wYW55QWRkcmVzczogW3NlbGVjdGVkR3JvdXAuYWRkcmVzc0xpbmVPbmUsIHNlbGVjdGVkR3JvdXAuYWRkcmVzc0xpbmVUd28sIHNlbGVjdGVkR3JvdXAuY2l0eSwgc2VsZWN0ZWRHcm91cC5zdGF0ZSwgc2VsZWN0ZWRHcm91cC5jb3VudHJ5LCBzZWxlY3RlZEdyb3VwLnBpbkNvZGVdLmZpbHRlcihCb29sZWFuKS5qb2luKCcsICcpLFxyXG4gICAgICAgIEdTVE51bWJlcjogc2VsZWN0ZWRHcm91cC5nc3QgfHwgJycsXHJcbiAgICAgICAgUGxhY2VPZlN1cHBseTogc2VsZWN0ZWRHcm91cC5wbGFjZU9mU3VwcGx5IHx8ICcnLFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5hcHBseUdyb3VwR3N0VGF4KHNlbGVjdGVkR3JvdXAuZ3N0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIFR5cGVkIGNvbXBhbnkgbmFtZXMgYXJlIHVwcGVyLWNhc2VkIGFzIHRoZXkncmUgZW50ZXJlZC5cclxuICBvbkNvbXBhbnlOYW1lSW5wdXQoKSB7XHJcbiAgICBjb25zdCBjdHJsID0gdGhpcy5pbnZvaWNlRm9ybS5nZXQoJ2NvbXBhbnlOYW1lJyk7XHJcbiAgICBjb25zdCB2YWx1ZSA9IFN0cmluZyhjdHJsPy52YWx1ZSB8fCAnJyk7XHJcbiAgICBpZiAodmFsdWUgIT09IHZhbHVlLnRvVXBwZXJDYXNlKCkpIHtcclxuICAgICAgY3RybD8uc2V0VmFsdWUodmFsdWUudG9VcHBlckNhc2UoKSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gUXVhbnRpdHkgY2FuJ3QgZ28gbmVnYXRpdmU6IGJsb2NrIHRoZSBtaW51cyBrZXksIGFuZCByZXNldCBhbnl0aGluZ1xyXG4gIC8vIG5lZ2F0aXZlIHRoYXQgc3RpbGwgZ2V0cyBpbiAocGFzdGUsIHNwaW5uZXIpIHRvIDAuXHJcbiAgYmxvY2tNaW51c0tleShldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJy0nIHx8IGV2ZW50LmtleSA9PT0gJ1N1YnRyYWN0Jykge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25RdWFudGl0eUlucHV0KGk6IG51bWJlcikge1xyXG4gICAgY29uc3QgY3RybCA9IHRoaXMucHJvZHVjdHMuYXQoaSk/LmdldCgnc3RvcmVDb3VudCcpO1xyXG4gICAgaWYgKE51bWJlcihjdHJsPy52YWx1ZSkgPCAwKSB7XHJcbiAgICAgIGN0cmw/LnNldFZhbHVlKDAsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIH1cclxuICAgIHRoaXMucmVjYWxjdWxhdGUoaSk7XHJcbiAgfVxyXG5cclxuICAvLyBBdXRvLXBvcHVsYXRlIHRoZSB0YXggc2VjdGlvbiBmcm9tIHRoZSBzZWxlY3RlZCBncm91cCdzIEdTVElOLCBtaXJyb3JpbmcgdGhlXHJcbiAgLy8gYmFja2VuZCBpbnZvaWNlIHRheCBydWxlOiBHU1RJTiBzdGFydGluZyB3aXRoICczMycgKGludHJhLXN0YXRlLCBUYW1pbCBOYWR1KVxyXG4gIC8vIOKGkiBDR1NUIDklICsgU0dTVCA5JTsgYW55IG90aGVyIEdTVElOIOKGkiBJR1NUIDE4JS4gTm8gR1NUIG51bWJlciDihpIgbm8gdGF4IHJvd3MuXHJcbiAgLy8gR1NUIGFwcGxpZXMgb25seSB0byBkb21lc3RpYyAoSU5SKSBpbnZvaWNlczogYSBmb3JlaWduLWN1cnJlbmN5IGludm9pY2VcclxuICAvLyBnZXRzIG5vIHRheCByb3dzLCB3aGF0ZXZlciB0aGUgR1NUSU4uIFJlYnVpbGRzIHRoZSB0YXggc2VjdGlvbiBlYWNoIHRpbWUgc29cclxuICAvLyByZS1zZWxlY3RpbmcgYSBncm91cCBvciBjaGFuZ2luZyB0aGUgY3VycmVuY3kgZG9lc24ndCBzdGFjayByb3dzLlxyXG4gIHByaXZhdGUgYXBwbHlHcm91cEdzdFRheChnc3Q6IHN0cmluZykge1xyXG4gICAgdGhpcy50YXhBcnJheS5jbGVhcigpO1xyXG4gICAgY29uc3QgZ3N0aW4gPSBTdHJpbmcoZ3N0IHx8ICcnKS50cmltKCk7XHJcbiAgICBjb25zdCBkb21lc3RpYyA9ICh0aGlzLmludm9pY2VGb3JtLmdldCgnY3VycmVuY3knKT8udmFsdWUgfHwgJ2lucicpID09PSAnaW5yJztcclxuICAgIGlmIChnc3RpbiAmJiBkb21lc3RpYykge1xyXG4gICAgICBpZiAoZ3N0aW4uc2xpY2UoMCwgMikgPT09ICczMycpIHtcclxuICAgICAgICB0aGlzLnRheEFycmF5LnB1c2godGhpcy5jcmVhdGVUYXhHcm91cCh7IHR5cGU6ICdDR1NUJywgdmFsdWU6IDkgfSkpO1xyXG4gICAgICAgIHRoaXMudGF4QXJyYXkucHVzaCh0aGlzLmNyZWF0ZVRheEdyb3VwKHsgdHlwZTogJ1NHU1QnLCB2YWx1ZTogOSB9KSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy50YXhBcnJheS5wdXNoKHRoaXMuY3JlYXRlVGF4R3JvdXAoeyB0eXBlOiAnSUdTVCcsIHZhbHVlOiAxOCB9KSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMucmVjYWxjdWxhdGUoKTtcclxuICB9XHJcblxyXG4gIC8vIENyZWF0ZSBtb2RlOiB0aGUgR1NUSU4gY2FuIGJlIHR5cGVkL2VkaXRlZCBkaXJlY3RseSDigJQgcmUtZGVyaXZlIHRoZSB0YXggcm93c1xyXG4gIC8vIGZyb20gaXQgKHNhbWUgcnVsZSBhcyBncm91cCBzZWxlY3Rpb24pIHNvIHRheCBhbHdheXMgZm9sbG93cyB0aGUgR1NUIG51bWJlci5cclxuICAvLyBJbiBlZGl0IG1vZGUgdGhlIEdTVCBOdW1iZXIgZmllbGQgaXMgcmVhZC1vbmx5LCBzbyB0aGlzIGlzIGEgbm8tb3AgdGhlcmUuXHJcbiAgb25Hc3ROdW1iZXJJbnB1dCgpIHtcclxuICAgIGlmICh0aGlzLm1vZGUgPT09ICdlZGl0Jykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmFwcGx5R3JvdXBHc3RUYXgodGhpcy5pbnZvaWNlRm9ybS5nZXQoJ0dTVE51bWJlcicpPy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tIFByb2R1Y3Qgcm93IHJlb3JkZXJpbmcgKG5hdGl2ZSBIVE1MNSBkcmFnICYgZHJvcCkgLS0tLVxyXG4gIC8vIGRyYWdJbmRleDogcm93IGJlaW5nIGRyYWdnZWQ7IGRyYWdPdmVySW5kZXg6IHJvdyBjdXJyZW50bHkgaG92ZXJlZCAoZm9yIHRoZVxyXG4gIC8vIGRyb3AgaW5kaWNhdG9yKS4gRHJvcHBpbmcgbW92ZXMgdGhlIEZvcm1Hcm91cCB3aXRoaW4gdGhlIEZvcm1BcnJheSwgc28gdGhlXHJcbiAgLy8gXCJQcm9kdWN0IE5cIiBudW1iZXJpbmcsIHRvdGFscyBhbmQgdGhlIHNhdmVkIHByb2R1Y3RzIG9yZGVyIGFsbCBmb2xsb3cuXHJcbiAgZHJhZ0luZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBkcmFnT3ZlckluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgb25Sb3dEcmFnU3RhcnQoZXZlbnQ6IERyYWdFdmVudCwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5kcmFnSW5kZXggPSBpbmRleDtcclxuICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIpIHtcclxuICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQgPSAnbW92ZSc7XHJcbiAgICAgIC8vIFNvbWUgYnJvd3NlcnMgbmVlZCBkYXRhIHNldCBmb3IgdGhlIGRyYWcgdG8gc3RhcnQuXHJcbiAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5zZXREYXRhKCd0ZXh0L3BsYWluJywgU3RyaW5nKGluZGV4KSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblJvd0RyYWdPdmVyKGV2ZW50OiBEcmFnRXZlbnQsIGluZGV4OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLmRyYWdJbmRleCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsgLy8gYWxsb3cgZHJvcFxyXG4gICAgaWYgKGV2ZW50LmRhdGFUcmFuc2ZlcikgZXZlbnQuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnbW92ZSc7XHJcbiAgICB0aGlzLmRyYWdPdmVySW5kZXggPSBpbmRleDtcclxuICB9XHJcblxyXG4gIG9uUm93RHJhZ0xlYXZlKGluZGV4OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLmRyYWdPdmVySW5kZXggPT09IGluZGV4KSB0aGlzLmRyYWdPdmVySW5kZXggPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgb25Sb3dEcm9wKGV2ZW50OiBEcmFnRXZlbnQsIHRhcmdldEluZGV4OiBudW1iZXIpIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBjb25zdCBmcm9tID0gdGhpcy5kcmFnSW5kZXg7XHJcbiAgICB0aGlzLm9uUm93RHJhZ0VuZCgpO1xyXG4gICAgaWYgKGZyb20gPT09IG51bGwgfHwgZnJvbSA9PT0gdGFyZ2V0SW5kZXgpIHJldHVybjtcclxuICAgIGNvbnN0IGdyb3VwID0gdGhpcy5wcm9kdWN0cy5hdChmcm9tKTtcclxuICAgIHRoaXMucHJvZHVjdHMucmVtb3ZlQXQoZnJvbSk7XHJcbiAgICB0aGlzLnByb2R1Y3RzLmluc2VydCh0YXJnZXRJbmRleCwgZ3JvdXApO1xyXG4gICAgdGhpcy5wcm9kdWN0cy5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgdGhpcy5yZWNhbGN1bGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgb25Sb3dEcmFnRW5kKCkge1xyXG4gICAgdGhpcy5kcmFnSW5kZXggPSBudWxsO1xyXG4gICAgdGhpcy5kcmFnT3ZlckluZGV4ID0gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vIFJhdGUvUHJpY2U6IGFsbG93IGF0IG1vc3QgMiBkaWdpdHMgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQuIEFueXRoaW5nIGJleW9uZFxyXG4gIC8vIChlLmcuIDEyLjM0NSkgaXMgdHJpbW1lZCB0byAxMi4zNCBhcyB0aGUgdXNlciB0eXBlcywgdGhlbiB0b3RhbHMgcmVjb21wdXRlLlxyXG4gIG9uUHJpY2VJbnB1dChpOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGN0cmwgPSB0aGlzLnByb2R1Y3RzLmF0KGkpPy5nZXQoJ3ByaWNlJyk7XHJcbiAgICBjb25zdCByYXcgPSBjdHJsPy52YWx1ZTtcclxuICAgIGlmIChyYXcgIT09IG51bGwgJiYgcmF3ICE9PSB1bmRlZmluZWQgJiYgcmF3ICE9PSAnJykge1xyXG4gICAgICBjb25zdCB0ZXh0ID0gU3RyaW5nKHJhdyk7XHJcbiAgICAgIGNvbnN0IG1hdGNoID0gdGV4dC5tYXRjaCgvXigtP1xcZCopKFxcLlxcZHswLDJ9KT8vKTtcclxuICAgICAgY29uc3QgdHJpbW1lZCA9IG1hdGNoID8gYCR7bWF0Y2hbMV19JHttYXRjaFsyXSA/PyAnJ31gIDogdGV4dDtcclxuICAgICAgaWYgKHRyaW1tZWQgIT09IHRleHQpIHtcclxuICAgICAgICBjdHJsPy5zZXRWYWx1ZSh0cmltbWVkID09PSAnJyB8fCB0cmltbWVkID09PSAnLScgPyBudWxsIDogTnVtYmVyKHRyaW1tZWQpLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMucmVjYWxjdWxhdGUoaSk7XHJcbiAgfVxyXG5cclxuICAvLyBSZWZyZXNoIHN1YnRvdGFsIC8gdGF4IC8gc3RvcmUgdG90YWxzLiBPbmx5IHRoZSByb3cgdGhhdCB3YXMganVzdCBlZGl0ZWRcclxuICAvLyAoY2hhbmdlZEluZGV4KSBoYXMgaXRzIEFtb3VudCByZS1kZXJpdmVkIGFzIFF1YW50aXR5IHggUmF0ZTsgZXZlcnkgb3RoZXJcclxuICAvLyByb3cga2VlcHMgaXRzIHN0b3JlZCBhbW91bnQuIEF1dG8tZ2VuZXJhdGVkIGludm9pY2VzIGNhcnJ5IFBST1JBVEVEIGxpbmVzXHJcbiAgLy8gKGFtb3VudCA9IHByaWNlIHggd29ya2luZ0RheXMgLyBtb250aERheXMsIHNvIGFtb3VudCAhPSBzdG9yZUNvdW50IHggcHJpY2U7XHJcbiAgLy8gZS5nLiBEUkFGVC0yNi0yNy0wMDAwOSBzdG9yZWQgMSB4IDE2NTAgYXMgNjA1KS4gUmVjb21wdXRpbmcgZXZlcnkgcm93IG9uXHJcbiAgLy8gYW55IGtleXN0cm9rZSBzaWxlbnRseSByZXdyb3RlIGFsbCBvZiB0aG9zZSB0byB0aGUgZnVsbC1tb250aCBmaWd1cmUuXHJcbiAgcmVjYWxjdWxhdGUoY2hhbmdlZEluZGV4PzogbnVtYmVyKSB7XHJcbiAgICBsZXQgc3VidG90YWwgPSAwO1xyXG4gICAgdGhpcy5wcm9kdWN0cy5jb250cm9scy5mb3JFYWNoKChncm91cCwgaWR4KSA9PiB7XHJcbiAgICAgIGlmIChpZHggPT09IGNoYW5nZWRJbmRleCkge1xyXG4gICAgICAgIGNvbnN0IHN0b3JlQ291bnQgPSBOdW1iZXIoZ3JvdXAuZ2V0KCdzdG9yZUNvdW50Jyk/LnZhbHVlKSB8fCAwO1xyXG4gICAgICAgIGNvbnN0IHByaWNlID0gTnVtYmVyKGdyb3VwLmdldCgncHJpY2UnKT8udmFsdWUpIHx8IDA7XHJcbiAgICAgICAgZ3JvdXAuZ2V0KCdhbW91bnQnKT8uc2V0VmFsdWUocGFyc2VGbG9hdCgoc3RvcmVDb3VudCAqIHByaWNlKS50b0ZpeGVkKDIpKSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHN1YnRvdGFsICs9IE51bWJlcihncm91cC5nZXQoJ2Ftb3VudCcpPy52YWx1ZSkgfHwgMDtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFRheCBpcyBjaGFyZ2VkIG9uIHRoZSBESVNDT1VOVEVEIGFtb3VudCwgbWF0Y2hpbmcgYXBwbHlEaXNjb3VudCgpIG9uIHRoZVxyXG4gICAgLy8gYmFja2VuZC4gVGF4aW5nIHRoZSBncm9zcyBzdWJ0b3RhbCBoZXJlIHdvdWxkIHNob3cgYSB0b3RhbCB0aGF0IHRoZVxyXG4gICAgLy8gc2VydmVyIHRoZW4gcmVjb21wdXRlcyBkaWZmZXJlbnRseS5cclxuICAgIGNvbnN0IHRheGFibGUgPSBzdWJ0b3RhbCAtIHRoaXMuZ2V0QXBwbGllZERpc2NvdW50KCk7XHJcbiAgICB0aGlzLnRheEFycmF5LmNvbnRyb2xzLmZvckVhY2goKGdyb3VwKSA9PiB7XHJcbiAgICAgIGNvbnN0IHZhbHVlID0gZ3JvdXAuZ2V0KCd2YWx1ZScpPy52YWx1ZSB8fCAwO1xyXG4gICAgICBjb25zdCB0YXhBbW91bnQgPSAodGF4YWJsZSAqIHZhbHVlIC8gMTAwKS50b0ZpeGVkKDIpO1xyXG4gICAgICBncm91cC5nZXQoJ3RheEFtb3VudCcpPy5zZXRWYWx1ZSh0YXhBbW91bnQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIGxldCB0b3RhbFN0b3JlcyA9IDA7XHJcbiAgICB0aGlzLnByb2R1Y3RzLmNvbnRyb2xzLmZvckVhY2goKGdyb3VwKSA9PiB7XHJcbiAgICAgIHRvdGFsU3RvcmVzICs9IGdyb3VwLmdldCgnc3RvcmVDb3VudCcpPy52YWx1ZSB8fCAwO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmludm9pY2VGb3JtLmdldCgnc3RvcmVzJyk/LnNldFZhbHVlKHRvdGFsU3RvcmVzLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcblxyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0U3VidG90YWwoKTogbnVtYmVyIHtcclxuICAgIGxldCBzdWJ0b3RhbCA9IDA7XHJcbiAgICB0aGlzLnByb2R1Y3RzLmNvbnRyb2xzLmZvckVhY2goKGdyb3VwKSA9PiB7XHJcbiAgICAgIHN1YnRvdGFsICs9IGdyb3VwLmdldCgnYW1vdW50Jyk/LnZhbHVlIHx8IDA7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBzdWJ0b3RhbDtcclxuICB9XHJcblxyXG4gIGdldFRvdGFsVGF4KCk6IG51bWJlciB7XHJcbiAgICBsZXQgdG90YWxUYXggPSAwO1xyXG4gICAgdGhpcy50YXhBcnJheS5jb250cm9scy5mb3JFYWNoKChncm91cCkgPT4ge1xyXG4gICAgICB0b3RhbFRheCArPSBwYXJzZUZsb2F0KGdyb3VwLmdldCgndGF4QW1vdW50Jyk/LnZhbHVlIHx8ICcwJyk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB0b3RhbFRheDtcclxuICB9XHJcblxyXG4gIC8vIENyZWRpdCBub3RlIGFscmVhZHkgYXBwbGllZCB0byB0aGlzIGludm9pY2UgKDAgd2hlbiBub25lKS4gUmVhZCBzdHJhaWdodFxyXG4gIC8vIG9mZiB0aGUgc2F2ZWQgaW52b2ljZSDigJQgaXQgaXMgbm90IGEgbGluZSBpdGVtLCBzbyBnZXRTdWJ0b3RhbCgpIG5ldmVyIHNlZXNcclxuICAvLyBpdCBhbmQgdGhlIHN1bW1hcnkgd291bGQgb3RoZXJ3aXNlIHNob3cgdGhlIHByZS1kaXNjb3VudCB0b3RhbC5cclxuICBnZXRBcHBsaWVkRGlzY291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBOdW1iZXIodGhpcy5pbnZvaWNlRGF0YT8uZGlzY291bnRBbW91bnQpIHx8IDA7XHJcbiAgfVxyXG5cclxuICBnZXRUb3RhbEFtb3VudCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0U3VidG90YWwoKSAtIHRoaXMuZ2V0QXBwbGllZERpc2NvdW50KCkgKyB0aGlzLmdldFRvdGFsVGF4KCk7XHJcbiAgfVxyXG5cclxuICAvLyBDdXJyZW5jeS1hd2FyZSByb3VuZGluZzogSU5SIC0+IHdob2xlIG51bWJlciwgZXZlcnkgb3RoZXIgY3VycmVuY3kga2VlcHNcclxuICAvLyAyIGRlY2ltYWxzLiBNaXJyb3JzIHRoZSBiYWNrZW5kIHJvdW5kQW1vdW50KCkgaGVscGVyLlxyXG4gIHJvdW5kRm9yQ3VycmVuY3kodmFsdWU6IG51bWJlciwgY3VycmVuY3k6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICBjb25zdCBuID0gTnVtYmVyKHZhbHVlKSB8fCAwO1xyXG4gICAgcmV0dXJuIGN1cnJlbmN5ID09PSAnaW5yJyA/IE1hdGgucm91bmQobikgOiBNYXRoLnJvdW5kKG4gKiAxMDApIC8gMTAwO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q3VycmVuY3lTeW1ib2woKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnN5bWJvbEZvcih0aGlzLmludm9pY2VGb3JtLmdldCgnY3VycmVuY3knKT8udmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0SW52b2ljZUN1cnJlbmN5U3ltYm9sKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5zeW1ib2xGb3IodGhpcy5pbnZvaWNlRGF0YT8uY3VycmVuY3kpO1xyXG4gIH1cclxuXHJcbiAgb25TdWJtaXQoKSB7XHJcbiAgICBpZiAodGhpcy5pbnZvaWNlRm9ybS5pbnZhbGlkKSB7XHJcbiAgICAgIHRoaXMuaW52b2ljZUZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgICAvLyBUaGUgQmlsbGluZyBHcm91cCBmaWVsZCBpc24ndCByZW5kZXJlZCB3aGVuIG5vIGdyb3VwcyBsb2FkZWQsIHNvIHRoZXJlJ3NcclxuICAgICAgLy8gbm8gaGlnaGxpZ2h0ZWQgZmllbGQgdG8gc2Nyb2xsIHRvIOKAlCB0ZWxsIHRoZSB1c2VyIGluc3RlYWQuXHJcbiAgICAgIGlmICh0aGlzLmludm9pY2VGb3JtLmdldCgnZ3JvdXBJZCcpPy5pbnZhbGlkICYmICF0aGlzLmJpbGxpbmdHcm91cHMubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KCdCaWxsaW5nIGdyb3VwIGlzIHJlcXVpcmVkLCBidXQgbm9uZSBsb2FkZWQgZm9yIHRoaXMgYnJhbmQg4oCUIHJlb3BlbiB0aGUgZm9ybSB0byByZXRyeS4nKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBEZWZlciB0byBuZXh0IHRpY2sgc28gQW5ndWxhciByZW5kZXJzIHRoZSAuaXMtaW52YWxpZCBjbGFzc2VzXHJcbiAgICAgIC8vIGJlZm9yZSB3ZSBxdWVyeSB0aGUgRE9NIGZvciB0aGUgZmlyc3QgaW52YWxpZCBjb250cm9sIHRvIHNjcm9sbCB0by5cclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNjcm9sbFRvRmlyc3RJbnZhbGlkKCksIDApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5leGNlZWRzQ3JlZGl0QmFsYW5jZSkge1xyXG4gICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoYENyZWRpdCBub3RlIHRvdGFsIGV4Y2VlZHMgdGhlIGNyZWRpdGFibGUgYmFsYW5jZSBvZiAke3RoaXMuc291cmNlSW52b2ljZU51bWJlcn0uYCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmlzQ3JlZGl0Tm90ZSAmJiAhdGhpcy5jcmVkaXRUeXBlKSB7XHJcbiAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdCgnQ2hvb3NlIGhvdyB0byBjcmVkaXQ6IGJ5IHByb2R1Y3QsIGJ5IHN0b3JlIG9yIGFnYWluc3QgdGhlIGludm9pY2UuJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmlzQ3JlZGl0Tm90ZSAmJiAhdGhpcy5saW5lSXRlbXMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdCh0aGlzLmNyZWRpdFR5cGUgPT09ICdzdG9yZScgPyAnU2VsZWN0IGF0IGxlYXN0IG9uZSBzdG9yZS4nIDogJ0FkZCBhdCBsZWFzdCBvbmUgcHJvZHVjdC4nKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY3JlZGl0VHlwZSA9PT0gJ3Byb2R1Y3QnICYmIHRoaXMubGluZUl0ZW1zLmNvbnRyb2xzLnNvbWUoKGcpID0+ICFnLmdldCgncHJvZHVjdE5hbWUnKT8udmFsdWUpKSB7XHJcbiAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdCgnU2VsZWN0IGEgcHJvZHVjdCBvbiBldmVyeSBsaW5lLCBvciByZW1vdmUgdGhlIGVtcHR5IG9uZS4nKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2F2aW5nID0gdHJ1ZTtcclxuICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMuaW52b2ljZUZvcm0uZ2V0UmF3VmFsdWUoKTtcclxuXHJcbiAgICBjb25zdCBwYXlsb2FkOiBhbnkgPSB7XHJcbiAgICAgIGNvbXBhbnlOYW1lOiBmb3JtVmFsdWUuY29tcGFueU5hbWUsXHJcbiAgICAgIGNvbXBhbnlBZGRyZXNzOiBmb3JtVmFsdWUuY29tcGFueUFkZHJlc3MsXHJcbiAgICAgIEdTVE51bWJlcjogZm9ybVZhbHVlLkdTVE51bWJlcixcclxuICAgICAgUGxhY2VPZlN1cHBseTogZm9ybVZhbHVlLlBsYWNlT2ZTdXBwbHksXHJcbiAgICAgIGdyb3VwTmFtZTogZm9ybVZhbHVlLmdyb3VwTmFtZSxcclxuICAgICAgZ3JvdXBJZDogZm9ybVZhbHVlLmdyb3VwSWQsXHJcbiAgICAgIHN0b3JlczogZm9ybVZhbHVlLnN0b3JlcyxcclxuICAgICAgYmlsbGluZ0RhdGU6IGZvcm1WYWx1ZS5iaWxsaW5nRGF0ZSxcclxuICAgICAgZHVlRGF0ZTogZm9ybVZhbHVlLmR1ZURhdGUsXHJcbiAgICAgIHBheW1lbnRUZXJtOiBmb3JtVmFsdWUucGF5bWVudFRlcm0sXHJcbiAgICAgIGN1cnJlbmN5OiBmb3JtVmFsdWUuY3VycmVuY3ksXHJcbiAgICAgIHN0YXR1czogZm9ybVZhbHVlLnN0YXR1cyxcclxuICAgICAgcGF5bWVudFN0YXR1czogZm9ybVZhbHVlLnBheW1lbnRTdGF0dXMsXHJcbiAgICAgIGFkdmFuY2VJbnZvaWNlOiBmb3JtVmFsdWUuYWR2YW5jZUludm9pY2UsXHJcbiAgICAgIGFkdmFuY2VQZXJpb2Q6IGZvcm1WYWx1ZS5hZHZhbmNlUGVyaW9kLFxyXG4gICAgICAvLyBNYXAgaW52b2ljZSB0byBhIHB1cmNoYXNlIG9yZGVyIChzZXJ2ZXIgZGVkdWN0cyB0aGUgUE8gYmFsYW5jZSkuXHJcbiAgICAgIHB1cmNoYXNlT3JkZXJOdW1iZXI6IGZvcm1WYWx1ZS5wdXJjaGFzZU9yZGVyTnVtYmVyIHx8IHVuZGVmaW5lZCxcclxuICAgICAgcHJvZHVjdHM6IGZvcm1WYWx1ZS5wcm9kdWN0cyxcclxuICAgICAgdGF4OiBmb3JtVmFsdWUudGF4LFxyXG4gICAgICAvLyAnYW1vdW50JyBpcyB0aGUgcG9zdC1kaXNjb3VudCB2YWx1ZSB0aGUgYmFja2VuZCBzdG9yZXMgKGdldFN1YnRvdGFsKClcclxuICAgICAgLy8gaXMgdGhlIGdyb3NzIGxpbmUtaXRlbSB0b3RhbCkuIFNlbmRpbmcgdGhlIGdyb3NzIGZpZ3VyZSBoZXJlIHdpcGVkIGFuXHJcbiAgICAgIC8vIGFwcGxpZWQgY3JlZGl0IG5vdGUgb24gZXZlcnkgVXBkYXRlIEludm9pY2UuXHJcbiAgICAgIC8vIENvbXBvbmVudCBmaWd1cmVzIChzdWJ0b3RhbCwgZGlzY291bnQpIGtlZXAgZXhhY3QgcGFpc2Ug4oCUIG9ubHkgdGhlXHJcbiAgICAgIC8vIFRvdGFsIEFtb3VudCBpcyB3aG9sZS11bml0IHJvdW5kZWQgKElOUikuIFBvc3RpbmcgYSB3aG9sZS1yb3VuZGVkXHJcbiAgICAgIC8vIHN1YnRvdGFsIG1hZGUgdGhlIHByaW50ZWQgU3ViIFRvdGFsIGRpc2FncmVlIHdpdGggdGhlIGxpbmUgaXRlbXNcclxuICAgICAgLy8gKGUuZy4gMjQsMDY1LjAwIHZzIGxpbmVzIHN1bW1pbmcgdG8gMjQsMDY0LjUyKS5cclxuICAgICAgYW1vdW50OiB0aGlzLnJvdW5kMih0aGlzLmdldFN1YnRvdGFsKCkgLSB0aGlzLmdldEFwcGxpZWREaXNjb3VudCgpKSxcclxuICAgICAgdG90YWxBbW91bnQ6IHRoaXMucm91bmRGb3JDdXJyZW5jeSh0aGlzLmdldFRvdGFsQW1vdW50KCksIGZvcm1WYWx1ZS5jdXJyZW5jeSksXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIENhcnJ5IHRoZSBhcHBsaWVkIGNyZWRpdCBub3RlIHRocm91Z2ggdGhlIHVwZGF0ZSBzbyBpdCBzdXJ2aXZlcyBhbiBlZGl0LlxyXG4gICAgaWYgKHRoaXMuZ2V0QXBwbGllZERpc2NvdW50KCkgPiAwKSB7XHJcbiAgICAgIHBheWxvYWQuZGlzY291bnRBbW91bnQgPSB0aGlzLnJvdW5kMih0aGlzLmdldEFwcGxpZWREaXNjb3VudCgpKTtcclxuICAgICAgY29uc3QgZ3Jvc3MgPSB0aGlzLmdldFN1YnRvdGFsKCk7XHJcbiAgICAgIHBheWxvYWQuZGlzY291bnRQZXJjZW50YWdlID0gZ3Jvc3MgPiAwXHJcbiAgICAgICAgPyB0aGlzLnJvdW5kMih0aGlzLmdldEFwcGxpZWREaXNjb3VudCgpIC8gZ3Jvc3MgKiAxMDApXHJcbiAgICAgICAgOiAwO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm1vZGUgPT09ICdlZGl0Jykge1xyXG4gICAgICBwYXlsb2FkLl9pZCA9IHRoaXMuaW52b2ljZURhdGEuX2lkO1xyXG4gICAgICBwYXlsb2FkLmludm9pY2UgPSB0aGlzLmludm9pY2VEYXRhLmludm9pY2U7XHJcbiAgICAgIHBheWxvYWQuY2xpZW50SWQgPSB0aGlzLmludm9pY2VEYXRhLmNsaWVudElkO1xyXG4gICAgICB0aGlzLmJpbGxpbmdTZXJ2aWNlLnVwZGF0ZUludm9pY2UocGF5bG9hZCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0LmdldFByaW1hcnlUb2FzdCgnSW52b2ljZSB1cGRhdGVkIHN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZU1vZGFsLmNsb3NlKCd1cGRhdGVkJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdCgnRmFpbGVkIHRvIHVwZGF0ZSBpbnZvaWNlJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlID09PSAnZWRpdEVzdGltYXRlJykge1xyXG4gICAgICAvLyBVcGRhdGUgYW4gZXhpc3RpbmcgZXN0aW1hdGUuIElkZW50aXR5IGZpZWxkcyAoZXN0aW1hdGUgIywgY2xpZW50SWQsXHJcbiAgICAgIC8vIGNyZWF0ZWREYXRlKSBhcmUgcHJlc2VydmVkIHNlcnZlci1zaWRlOyB3ZSBzZW5kIHRoZSBlZGl0YWJsZSBmb3JtIGRhdGEuXHJcbiAgICAgIHBheWxvYWQuX2lkID0gdGhpcy5pbnZvaWNlRGF0YS5faWQ7XHJcbiAgICAgIHBheWxvYWQuY2xpZW50SWQgPSB0aGlzLmludm9pY2VEYXRhLmNsaWVudElkIHx8IHRoaXMuY2xpZW50SWQ7XHJcbiAgICAgIHBheWxvYWQucGVyaW9kID0gZm9ybVZhbHVlLmJpbGxpbmdEYXRlXHJcbiAgICAgICAgPyBuZXcgRGF0ZShmb3JtVmFsdWUuYmlsbGluZ0RhdGUpLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHsgbW9udGg6ICdzaG9ydCcsIHllYXI6ICdudW1lcmljJyB9KVxyXG4gICAgICAgIDogdGhpcy5pbnZvaWNlRGF0YS5wZXJpb2Q7XHJcbiAgICAgIHBheWxvYWQudmFsaWRUaWxsID0gZm9ybVZhbHVlLmR1ZURhdGU7XHJcbiAgICAgIHRoaXMuYmlsbGluZ1NlcnZpY2UudXBkYXRlRXN0aW1hdGUocGF5bG9hZCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0LmdldFByaW1hcnlUb2FzdCgnRXN0aW1hdGUgdXBkYXRlZCBzdWNjZXNzZnVsbHknKTtcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVNb2RhbC5jbG9zZSgndXBkYXRlZCcpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChlcnI/LmVycm9yPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gdXBkYXRlIGVzdGltYXRlJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlID09PSAnZXN0aW1hdGUnKSB7XHJcbiAgICAgIC8vIFNhbWUgZm9ybSwgc2VwYXJhdGUgZG9jdW1lbnQ6IHBvc3QgdG8gdGhlIGVzdGltYXRlIEFQSSBzbyBpdCBsYW5kcyBpblxyXG4gICAgICAvLyB0aGUgZXN0aW1hdGVzIGNvbGxlY3Rpb24gd2l0aCBhbiBFU1Qt4oCmIG51bWJlciBpbnN0ZWFkIG9mIGFuIGludm9pY2UuXHJcbiAgICAgIHBheWxvYWQuY2xpZW50SWQgPSB0aGlzLmNsaWVudElkO1xyXG4gICAgICBwYXlsb2FkLnBlcmlvZCA9IGZvcm1WYWx1ZS5iaWxsaW5nRGF0ZVxyXG4gICAgICAgID8gbmV3IERhdGUoZm9ybVZhbHVlLmJpbGxpbmdEYXRlKS50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7IG1vbnRoOiAnc2hvcnQnLCB5ZWFyOiAnbnVtZXJpYycgfSlcclxuICAgICAgICA6IHVuZGVmaW5lZDtcclxuICAgICAgcGF5bG9hZC52YWxpZFRpbGwgPSBmb3JtVmFsdWUuZHVlRGF0ZTtcclxuICAgICAgdGhpcy5iaWxsaW5nU2VydmljZS5jcmVhdGVFc3RpbWF0ZShwYXlsb2FkKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3QuZ2V0UHJpbWFyeVRvYXN0KCdFc3RpbWF0ZSBnZW5lcmF0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlTW9kYWwuY2xvc2UoJ2NyZWF0ZWQnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoZXJyPy5lcnJvcj8ubWVzc2FnZSB8fCAnRmFpbGVkIHRvIGdlbmVyYXRlIGVzdGltYXRlJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlID09PSAnY3JlZGl0Tm90ZScgfHwgdGhpcy5tb2RlID09PSAnZWRpdENyZWRpdE5vdGUnKSB7XHJcbiAgICAgIC8vIENyZWRpdC1ub3RlIEFQSTogY29tcGFueSAvIGdyb3VwIGRldGFpbHMgY29tZSBmcm9tIHRoZSBzb3VyY2UgaW52b2ljZVxyXG4gICAgICAvLyBzZXJ2ZXItc2lkZTsgb25seSBsaW5lIGl0ZW1zLCBkYXRlIGFuZCByZWFzb24gYXJlIHNlbnQuIFRoZSBzZXJ2ZXJcclxuICAgICAgLy8gcmVjb21wdXRlcyB0aGUgdG90YWwgY3JlZGl0IGZyb20gdGhlIGxpbmUgaXRlbXMuXHJcbiAgICAgIGNvbnN0IGNyZWF0aW5nID0gdGhpcy5tb2RlID09PSAnY3JlZGl0Tm90ZSc7XHJcbiAgICAgIGNvbnN0IGNyZWRpdFBheWxvYWQ6IGFueSA9IHtcclxuICAgICAgICBjcmVkaXRUeXBlOiB0aGlzLmNyZWRpdFR5cGUsXHJcbiAgICAgICAgbGluZUl0ZW1zOiBmb3JtVmFsdWUubGluZUl0ZW1zLFxyXG4gICAgICAgIGNyZWRpdE5vdGVEYXRlOiBmb3JtVmFsdWUuYmlsbGluZ0RhdGUsXHJcbiAgICAgICAgcmVhc29uOiBmb3JtVmFsdWUucmVhc29uLFxyXG4gICAgICB9O1xyXG4gICAgICBpZiAoY3JlYXRpbmcpIHtcclxuICAgICAgICBjcmVkaXRQYXlsb2FkLmNsaWVudElkID0gdGhpcy5jbGllbnRJZDtcclxuICAgICAgICBjcmVkaXRQYXlsb2FkLmludm9pY2VJZCA9IGZvcm1WYWx1ZS5pbnZvaWNlSWQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY3JlZGl0UGF5bG9hZC5faWQgPSB0aGlzLmludm9pY2VEYXRhLl9pZDtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBjYWxsJCA9IGNyZWF0aW5nXHJcbiAgICAgICAgPyB0aGlzLmJpbGxpbmdTZXJ2aWNlLmNyZWF0ZUNyZWRpdE5vdGUoY3JlZGl0UGF5bG9hZClcclxuICAgICAgICA6IHRoaXMuYmlsbGluZ1NlcnZpY2UudXBkYXRlQ3JlZGl0Tm90ZShjcmVkaXRQYXlsb2FkKTtcclxuICAgICAgY2FsbCQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0LmdldFByaW1hcnlUb2FzdChjcmVhdGluZyA/ICdDcmVkaXQgbm90ZSBjcmVhdGVkIHN1Y2Nlc3NmdWxseScgOiAnQ3JlZGl0IG5vdGUgdXBkYXRlZCBzdWNjZXNzZnVsbHknKTtcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVNb2RhbC5jbG9zZShjcmVhdGluZyA/ICdjcmVhdGVkJyA6ICd1cGRhdGVkJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KGVycj8uZXJyb3I/Lm1lc3NhZ2UgfHwgKGNyZWF0aW5nID8gJ0ZhaWxlZCB0byBjcmVhdGUgY3JlZGl0IG5vdGUnIDogJ0ZhaWxlZCB0byB1cGRhdGUgY3JlZGl0IG5vdGUnKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHBheWxvYWQuY2xpZW50SWQgPSB0aGlzLmNsaWVudElkO1xyXG4gICAgICAvLyBGbGFnIHRoZSBiYWNrZW5kIHRvIHRha2UgdGhlIFwiY3VzdG9tIGNyZWF0ZVwiIHBhdGggdGhhdCBwZXJzaXN0cyB3aGF0XHJcbiAgICAgIC8vIHRoZSBmb3JtIGJ1aWx0LiBUaGUgbGVnYWN5IC9jcmVhdGVJbnZvaWNlIGNvbnRyYWN0IGV4cGVjdHMgZWl0aGVyXHJcbiAgICAgIC8vIGFsbENsaWVudCtjbGllbnRMaXN0IG9yIGludm9pY2VJZDsgd2l0aG91dCB0aGlzIGZsYWcsIHRoZSBzZXJ2ZXJcclxuICAgICAgLy8gc2lsZW50bHkgcmV0dXJucyAyeHggYW5kIHdyaXRlcyBub3RoaW5nLlxyXG4gICAgICBwYXlsb2FkLmN1c3RvbUludm9pY2UgPSB0cnVlO1xyXG4gICAgICB0aGlzLmJpbGxpbmdTZXJ2aWNlLmNyZWF0ZUludm9pY2UocGF5bG9hZCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0LmdldFByaW1hcnlUb2FzdCgnSW52b2ljZSBjcmVhdGVkIHN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZU1vZGFsLmNsb3NlKCdjcmVhdGVkJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgY29uc3QgbXNnID0gZXJyPy5lcnJvcj8ubWVzc2FnZSB8fCAnRmFpbGVkIHRvIGNyZWF0ZSBpbnZvaWNlJztcclxuICAgICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChtc2cpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PT0gQ1JFRElUIE5PVEUgPT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gIGluaXRDcmVkaXROb3RlRm9ybSgpIHtcclxuICAgIHRoaXMuY3JlZGl0Tm90ZUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgYW1vdW50OiBbJyddLFxyXG4gICAgICByZXZpc2VkQW1vdW50OiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBkaXNjb3VudEFtb3VudDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gRGlzY291bnQgQW1vdW50IGFuZCBSZXZpc2VkIEFtb3VudCBhcmUgdHdvIHZpZXdzIG9mIG9uZSBudW1iZXIg4oCUIGVkaXRpbmdcclxuICAgIC8vIGVpdGhlciByZWNvbXB1dGVzIHRoZSBvdGhlciAoeyBlbWl0RXZlbnQ6IGZhbHNlIH0gc3RvcHMgdGhlIGZlZWRiYWNrXHJcbiAgICAvLyBsb29wKS4gVGhlIGRpc2NvdW50IFBFUkNFTlRBR0UgaXMgbm8gbG9uZ2VyIGFuIGlucHV0OiBpdCdzIGRlcml2ZWQgb25jZVxyXG4gICAgLy8gb24gc3VibWl0LCBzbyBhIDIgZHAgcGVyY2VudGFnZSBjYW4gbmV2ZXIgcm91bmQgdGhlIGVudGVyZWQgYW1vdW50LlxyXG4gICAgdGhpcy5jcmVkaXROb3RlRm9ybS5nZXQoJ2Rpc2NvdW50QW1vdW50Jyk/LnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgIGlmIChlID09PSAnJyB8fCBlID09PSBudWxsIHx8IGUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuY3JlZGl0Tm90ZUZvcm0uZ2V0KCdyZXZpc2VkQW1vdW50Jyk/LnNldFZhbHVlKCcnLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgdGhpcy5jcmVkaXRNb3JlVGhhblRlblBlcmNlbnQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgYW1vdW50ID0gdGhpcy50b051bWJlcih0aGlzLmNyZWRpdE5vdGVGb3JtLmdldCgnYW1vdW50Jyk/LnZhbHVlKTtcclxuICAgICAgY29uc3QgZGlzY291bnRBbW91bnQgPSB0aGlzLnRvTnVtYmVyKGUpO1xyXG4gICAgICBpZiAoYW1vdW50ID4gMCkge1xyXG4gICAgICAgIHRoaXMuY3JlZGl0TW9yZVRoYW5UZW5QZXJjZW50ID0gaXNOYU4oZGlzY291bnRBbW91bnQpIHx8IGRpc2NvdW50QW1vdW50IDwgMCB8fCBkaXNjb3VudEFtb3VudCA+IGFtb3VudDtcclxuICAgICAgICB0aGlzLmNyZWRpdE5vdGVGb3JtLmdldCgncmV2aXNlZEFtb3VudCcpPy5zZXRWYWx1ZSh0aGlzLnJvdW5kMihhbW91bnQgLSBkaXNjb3VudEFtb3VudCksIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY3JlZGl0Tm90ZUZvcm0uZ2V0KCdyZXZpc2VkQW1vdW50Jyk/LnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgIGlmIChlID09PSAnJyB8fCBlID09PSBudWxsIHx8IGUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuY3JlZGl0Tm90ZUZvcm0uZ2V0KCdkaXNjb3VudEFtb3VudCcpPy5zZXRWYWx1ZSgnJywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgIHRoaXMuY3JlZGl0TW9yZVRoYW5UZW5QZXJjZW50ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGFtb3VudCA9IHRoaXMudG9OdW1iZXIodGhpcy5jcmVkaXROb3RlRm9ybS5nZXQoJ2Ftb3VudCcpPy52YWx1ZSk7XHJcbiAgICAgIGNvbnN0IHJldmlzZWQgPSB0aGlzLnRvTnVtYmVyKGUpO1xyXG4gICAgICBpZiAoYW1vdW50ID4gMCkge1xyXG4gICAgICAgIC8vIEludmFsaWQgd2hlbiBub3QgYSBudW1iZXIsIG5lZ2F0aXZlLCBvciBjcmVkaXRpbmcgbW9yZSB0aGFuIHRoZSB0b3RhbC5cclxuICAgICAgICB0aGlzLmNyZWRpdE1vcmVUaGFuVGVuUGVyY2VudCA9IGlzTmFOKHJldmlzZWQpIHx8IHJldmlzZWQgPCAwIHx8IHJldmlzZWQgPiBhbW91bnQ7XHJcbiAgICAgICAgdGhpcy5jcmVkaXROb3RlRm9ybS5nZXQoJ2Rpc2NvdW50QW1vdW50Jyk/LnNldFZhbHVlKHRoaXMucm91bmQyKGFtb3VudCAtIHJldmlzZWQpLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIFBhcnNlIGEgZm9ybSB2YWx1ZSB0aGF0IG1heSBiZSBhIHN0cmluZyAoJzEyMzQuNTYnKSBvciBhIG51bWJlci5cclxuICBwcml2YXRlIHRvTnVtYmVyKHY6IGFueSk6IG51bWJlciB7XHJcbiAgICBpZiAodiA9PT0gJycgfHwgdiA9PT0gbnVsbCB8fCB2ID09PSB1bmRlZmluZWQpIHJldHVybiBOYU47XHJcbiAgICByZXR1cm4gTnVtYmVyKHYpO1xyXG4gIH1cclxuXHJcbiAgLy8gUm91bmQgdG8gMiBkZWNpbWFsIHBsYWNlcywgYXZvaWRpbmcgZmxvYXQgYXJ0ZWZhY3RzICgwLjErMC4yIHN0eWxlKS5cclxuICBwcml2YXRlIHJvdW5kMihuOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgaWYgKCFpc0Zpbml0ZShuKSkgcmV0dXJuIE5hTjtcclxuICAgIHJldHVybiBNYXRoLnJvdW5kKChuICsgTnVtYmVyLkVQU0lMT04pICogMTAwKSAvIDEwMDtcclxuICB9XHJcblxyXG4gIHBhdGNoQ3JlZGl0Tm90ZURlZmF1bHRzKCkge1xyXG4gICAgaWYgKCF0aGlzLmludm9pY2VEYXRhKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIGludm9pY2VEYXRhLmFtb3VudCBpcyB0aGUgQ1VSUkVOVCAoYWxyZWFkeSBkaXNjb3VudGVkKSBhbW91bnQsIHNvIGFkZCBhbnlcclxuICAgIC8vIGFwcGxpZWQgZGlzY291bnQgYmFjayB0byBzaG93IHRoZSBvcmlnaW5hbCBpbnZvaWNlIHZhbHVlIGluIFRvdGFsIEFtb3VudC5cclxuICAgIGNvbnN0IGFwcGxpZWQgPSB0aGlzLmdldEFwcGxpZWREaXNjb3VudCgpO1xyXG4gICAgY29uc3QgY3VycmVudCA9IE51bWJlcih0aGlzLmludm9pY2VEYXRhLmFtb3VudCA/PyB0aGlzLmludm9pY2VEYXRhLnRvdGFsQW1vdW50KSB8fCAwO1xyXG4gICAgY29uc3Qgb3JpZ2luYWwgPSB0aGlzLnJvdW5kMihjdXJyZW50ICsgYXBwbGllZCk7XHJcblxyXG4gICAgLy8gUHJlLXBvcHVsYXRlIHdpdGggdGhlIGRpc2NvdW50IGFscmVhZHkgb24gdGhpcyBpbnZvaWNlIHNvIHJlLW9wZW5pbmcgdGhlXHJcbiAgICAvLyB0YWIgc2hvd3Mgd2hhdCB3YXMgYXBwbGllZCByYXRoZXIgdGhhbiBhbiBlbXB0eSBmb3JtLiBlbWl0RXZlbnQ6IGZhbHNlIOKAlFxyXG4gICAgLy8gdGhlIHZhbHVlQ2hhbmdlcyBwYWlyIHdvdWxkIG90aGVyd2lzZSByZWNvbXB1dGUgZnJvbSBhIGhhbGYtcGF0Y2hlZCBmb3JtLlxyXG4gICAgdGhpcy5jcmVkaXROb3RlRm9ybS5wYXRjaFZhbHVlKHtcclxuICAgICAgYW1vdW50OiBvcmlnaW5hbCxcclxuICAgICAgZGlzY291bnRBbW91bnQ6IGFwcGxpZWQgPiAwID8gYXBwbGllZCA6ICcnLFxyXG4gICAgICByZXZpc2VkQW1vdW50OiBhcHBsaWVkID4gMCA/IHRoaXMucm91bmQyKG9yaWdpbmFsIC0gYXBwbGllZCkgOiAnJyxcclxuICAgIH0sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIHRoaXMuY3JlZGl0TW9yZVRoYW5UZW5QZXJjZW50ID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBhcHBseUNyZWRpdE5vdGUoKSB7XHJcbiAgICBpZiAodGhpcy5jcmVkaXRNb3JlVGhhblRlblBlcmNlbnQpIHJldHVybjtcclxuICAgIC8vIGRpc2NvdW50QW1vdW50IGlzIHdoYXQgdGhlIHVzZXIgdHlwZWQgYW5kIGlzIGF1dGhvcml0YXRpdmUuIFRoZVxyXG4gICAgLy8gcGVyY2VudGFnZSBpcyBkZXJpdmVkIGZyb20gaXQgaGVyZSBwdXJlbHkgc28gdGhlIGJhY2tlbmQgY2FuIGtlZXAgc3RvcmluZ1xyXG4gICAgLy8gZGlzY291bnRQZXJjZW50YWdlIOKAlCBpdCBpcyBuZXZlciB1c2VkIHRvIGNvbXB1dGUgdGhlIGNyZWRpdGVkIHZhbHVlLlxyXG4gICAgY29uc3QgYW1vdW50ID0gdGhpcy50b051bWJlcih0aGlzLmNyZWRpdE5vdGVGb3JtLmdldCgnYW1vdW50Jyk/LnZhbHVlKTtcclxuICAgIGNvbnN0IGRpc2NvdW50QW1vdW50ID0gdGhpcy50b051bWJlcih0aGlzLmNyZWRpdE5vdGVGb3JtLmdldCgnZGlzY291bnRBbW91bnQnKT8udmFsdWUpO1xyXG4gICAgY29uc3QgcmVxdWVzdERhdGEgPSB7XHJcbiAgICAgIGludm9pY2U6IHRoaXMuaW52b2ljZURhdGEuaW52b2ljZSxcclxuICAgICAgcmV2aXNlZEFtb3VudDogdGhpcy5jcmVkaXROb3RlRm9ybS5nZXQoJ3JldmlzZWRBbW91bnQnKT8udmFsdWUsXHJcbiAgICAgIGRpc2NvdW50OiBhbW91bnQgPiAwID8gdGhpcy5yb3VuZDIoZGlzY291bnRBbW91bnQgLyBhbW91bnQgKiAxMDApIDogMCxcclxuICAgICAgZGlzY291bnRBbW91bnQ6IGRpc2NvdW50QW1vdW50LFxyXG4gICAgfTtcclxuICAgIHRoaXMuc2F2aW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuYmlsbGluZ1NlcnZpY2UuYXBwbHlEaXNjb3VudChyZXF1ZXN0RGF0YSkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMudG9hc3QuZ2V0UHJpbWFyeVRvYXN0KCdDcmVkaXQgbm90ZSBhcHBsaWVkIHN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICAgICAgdGhpcy5hY3RpdmVNb2RhbC5jbG9zZSgnY3JlZGl0QXBwbGllZCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdCgnRmFpbGVkIHRvIGFwcGx5IGNyZWRpdCBub3RlJyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb21pdFNwZWNpYWxDaGFyKGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IGsgPSBldmVudC5jaGFyQ29kZTtcclxuICAgIHJldHVybiAoayA9PSA4IHx8IGsgPT0gMzIgfHwgKGsgPj0gNDggJiYgayA8PSA1NykpO1xyXG4gIH1cclxuXHJcbiAgLy8gQW1vdW50L3BlcmNlbnRhZ2Uga2V5cHJlc3MgZmlsdGVyOiBkaWdpdHMgcGx1cyBhIHNpbmdsZSBkZWNpbWFsIHBvaW50LlxyXG4gIC8vIG9taXRTcGVjaWFsQ2hhciAoYWJvdmUpIGJsb2NrcyAnLicsIHdoaWNoIHdvdWxkIG1ha2UgdGhlc2UgZmllbGRzXHJcbiAgLy8gaW50ZWdlci1vbmx5IOKAlCBrZXB0IHNlcGFyYXRlIHNvIG90aGVyIGlucHV0cyB1c2luZyBpdCBhcmUgdW5hZmZlY3RlZC5cclxuICBvbWl0U3BlY2lhbENoYXJEZWNpbWFsKGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IGsgPSBldmVudC5jaGFyQ29kZTtcclxuICAgIGlmIChrID09IDggfHwgayA9PSAzMiB8fCAoayA+PSA0OCAmJiBrIDw9IDU3KSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIC8vIEFsbG93ICcuJyBvbmx5IG9uY2UsIGFuZCBub3QgYXMgdGhlIHZlcnkgZmlyc3QgY2hhcmFjdGVyLlxyXG4gICAgaWYgKGsgPT0gNDYpIHtcclxuICAgICAgY29uc3QgdmFsdWUgPSBTdHJpbmcoZXZlbnQ/LnRhcmdldD8udmFsdWUgPz8gJycpO1xyXG4gICAgICByZXR1cm4gdmFsdWUubGVuZ3RoID4gMCAmJiAhdmFsdWUuaW5jbHVkZXMoJy4nKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09PSBPTkUgVElNRSBGRUUgPT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gIGluaXRPbmVUaW1lRmVlRm9ybSgpIHtcclxuICAgIHRoaXMub25lVGltZUZlZUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgYW1vdW50OiBbJyddLFxyXG4gICAgICBvbmVUaW1lRmVlOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5vbmVUaW1lRmVlRm9ybS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuY2FsY3VsYXRlT25lVGltZUZlZVRvdGFsKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHBhdGNoT25lVGltZUZlZURlZmF1bHRzKCkge1xyXG4gICAgaWYgKHRoaXMuaW52b2ljZURhdGEpIHtcclxuICAgICAgdGhpcy5vbmVUaW1lRmVlRm9ybS5wYXRjaFZhbHVlKHtcclxuICAgICAgICBhbW91bnQ6IHRoaXMuaW52b2ljZURhdGEuYW1vdW50IHx8IHRoaXMuaW52b2ljZURhdGEudG90YWxBbW91bnQgfHwgMCxcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuY2FsY3VsYXRlT25lVGltZUZlZVRvdGFsKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjYWxjdWxhdGVPbmVUaW1lRmVlVG90YWwoKSB7XHJcbiAgICBjb25zdCBhbW91bnQgPSBwYXJzZUZsb2F0KHRoaXMub25lVGltZUZlZUZvcm0uZ2V0KCdhbW91bnQnKT8udmFsdWUgfHwgJzAnKTtcclxuICAgIGNvbnN0IGZlZSA9IHBhcnNlRmxvYXQodGhpcy5vbmVUaW1lRmVlRm9ybS5nZXQoJ29uZVRpbWVGZWUnKT8udmFsdWUgfHwgJzAnKTtcclxuICAgIHRoaXMub25lVGltZUZlZVRvdGFsID0gcGFyc2VGbG9hdCgoYW1vdW50ICsgZmVlKS50b0ZpeGVkKDIpKTtcclxuICB9XHJcblxyXG4gIGFwcGx5T25lVGltZUZlZSgpIHtcclxuICAgIGNvbnN0IGZlZVZhbHVlID0gdGhpcy5vbmVUaW1lRmVlRm9ybS5nZXQoJ29uZVRpbWVGZWUnKT8udmFsdWU7XHJcbiAgICBpZiAoIWZlZVZhbHVlKSByZXR1cm47XHJcbiAgICBjb25zdCByZXF1ZXN0RGF0YSA9IHtcclxuICAgICAgb25lVGltZUZlZTogZmVlVmFsdWUsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5zYXZpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5iaWxsaW5nU2VydmljZS5vbmVUaW1lRmVlKHJlcXVlc3REYXRhLCB0aGlzLmludm9pY2VEYXRhLmludm9pY2UpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0LmdldFByaW1hcnlUb2FzdCgnT25lIHRpbWUgZmVlIGFwcGxpZWQgc3VjY2Vzc2Z1bGx5Jyk7XHJcbiAgICAgICAgICB0aGlzLmFjdGl2ZU1vZGFsLmNsb3NlKCdmZWVBcHBsaWVkJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KCdGYWlsZWQgdG8gYXBwbHkgb25lIHRpbWUgZmVlJyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxufSIsIjxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicC01IHB4LTYgcGItMFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkaW5nIG10LTJcIj57eyBoZWFkaW5nVGV4dCB9fVxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJtb2RlID09PSAnZWRpdCdcIiBjbGFzcz1cImludm9pY2UtbnVtYmVyXCI+e3sgaW52b2ljZURhdGE/Lmludm9pY2UgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm1vZGUgPT09ICdlZGl0RXN0aW1hdGUnXCIgY2xhc3M9XCJpbnZvaWNlLW51bWJlclwiPnt7IGludm9pY2VEYXRhPy5lc3RpbWF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwibW9kZSA9PT0gJ2VkaXRDcmVkaXROb3RlJ1wiIGNsYXNzPVwiaW52b2ljZS1udW1iZXJcIj57eyBpbnZvaWNlRGF0YT8uY3JlZGl0Tm90ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgKGNsaWNrKT1cImFjdGl2ZU1vZGFsLmRpc21pc3MoKVwiPjwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIFRhYnMgKG9ubHkgaW4gZWRpdCBtb2RlKSAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWJhciBtdC0zXCIgKm5nSWY9XCJtb2RlID09PSAnZWRpdCdcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInRhYi1idG5cIiBbbmdDbGFzc109XCJhY3RpdmVUYWIgPT09ICdlZGl0JyA/ICd0YWItYWN0aXZlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZXRUYWIoJ2VkaXQnKVwiPkVkaXQgSW52b2ljZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwidGFiLWJ0blwiIFtuZ0NsYXNzXT1cImFjdGl2ZVRhYiA9PT0gJ2NyZWRpdE5vdGUnID8gJ3RhYi1hY3RpdmUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNldFRhYignY3JlZGl0Tm90ZScpXCI+Q3JlZGl0IE5vdGU8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInRhYi1idG5cIiBbbmdDbGFzc109XCJhY3RpdmVUYWIgPT09ICdvbmVUaW1lRmVlJyA/ICd0YWItYWN0aXZlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZXRUYWIoJ29uZVRpbWVGZWUnKVwiPk9uZSBUaW1lIEZlZTwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT0gRURJVCBJTlZPSUNFIFRBQiA9PT09PT09PT09PT09PT09PT09PT09PT0gLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBtYi00XCIgKm5nSWY9XCJhY3RpdmVUYWIgPT09ICdlZGl0JyB8fCBtb2RlICE9PSAnZWRpdCdcIj5cclxuICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImludm9pY2VGb3JtXCIgY2xhc3M9XCJmb3JtXCIgKG5nU3VibWl0KT1cIm9uU3VibWl0KClcIj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gQ3JlZGl0IG5vdGU6IHBpY2sgdGhlIGZpbmFsbHkgYXBwcm92ZWQgaW52b2ljZSAocmVndWxhciBvciBhZHZhbmNlO1xyXG4gICAgICAgICAgICAgICAgIHVucGFpZCwgcGFydGlhbGx5IHBhaWQgb3IgcGFpZCkgdG8gY3JlZGl0IOKAlCBhY3Jvc3MgZXZlcnkgYnJhbmQgb25cclxuICAgICAgICAgICAgICAgICBBbGwgSW52b2ljZXMuIFRoZSBmb3JtIGJlbG93IGlzIHByZWZpbGxlZCBmcm9tIGl0LCBicmFuZCBpbmNsdWRlZC4gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cIm1vZGUgPT09ICdjcmVkaXROb3RlJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBmb3JtLWdyb3VwIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJoZWFkaW5ndGV4dCBtYi0xXCI+SW52b2ljZSA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIGZvcm1Db250cm9sTmFtZT1cImludm9pY2VJZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cImNvbnRyb2xJbnZhbGlkKCdpbnZvaWNlSWQnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25JbnZvaWNlUGljaygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj57eyBpbnZvaWNlc0xvYWRGYWlsZWQgPyAnQ291bGQgbm90IGxvYWQgaW52b2ljZXMnIDogKGNyZWRpdGFibGVJbnZvaWNlcy5sZW5ndGggPyAnU2VsZWN0IGludm9pY2UnIDogJ05vIGFwcHJvdmVkIGludm9pY2VzIHRvIGNyZWRpdCcpIH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGludiBvZiBjcmVkaXRhYmxlSW52b2ljZXNcIiBbdmFsdWVdPVwiaW52Ll9pZFwiIFtkaXNhYmxlZF09XCIhaXNJbnZvaWNlUGlja2FibGUoaW52KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaW52b2ljZU9wdGlvbkxhYmVsKGludikgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtbXNnXCIgKm5nSWY9XCJjb250cm9sSW52YWxpZCgnaW52b2ljZUlkJylcIj5JbnZvaWNlIGlzIHJlcXVpcmVkPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0ludm9pY2VGb3JtXCI+XHJcbiAgICAgICAgICAgIDwhLS0gQ29tcGFueSBEZXRhaWxzIFNlY3Rpb24gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLXRpdGxlIG1iLTNcIj5Db21wYW55IERldGFpbHM8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBmb3JtLWdyb3VwIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJoZWFkaW5ndGV4dCBtYi0xXCI+Q29tcGFueSBOYW1lIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwiY29tcGFueU5hbWVcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cImNvbnRyb2xJbnZhbGlkKCdjb21wYW55TmFtZScpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIm1vZGUgPT09ICdlZGl0JyB8fCBpc0NyZWRpdE5vdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwib25Db21wYW55TmFtZUlucHV0KClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1tc2dcIiAqbmdJZj1cImNvbnRyb2xJbnZhbGlkKCdjb21wYW55TmFtZScpXCI+Q29tcGFueSBOYW1lIGlzIHJlcXVpcmVkPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBmb3JtLWdyb3VwIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJoZWFkaW5ndGV4dCBtYi0xXCI+R1NUIE51bWJlcjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBDcmVhdGUgbW9kZTogdHlwaW5nL2NoYW5naW5nIHRoZSBHU1RJTiByZS1kZXJpdmVzIHRoZSB0YXggcm93cy4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwiR1NUTnVtYmVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbcmVhZG9ubHldPVwibW9kZSA9PT0gJ2VkaXQnIHx8IGlzQ3JlZGl0Tm90ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvbkdzdE51bWJlcklucHV0KClcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBmb3JtLWdyb3VwIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJoZWFkaW5ndGV4dCBtYi0xXCI+Q29tcGFueSBBZGRyZXNzPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJjb21wYW55QWRkcmVzc1wiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgW3JlYWRvbmx5XT1cIm1vZGUgPT09ICdlZGl0JyB8fCBpc0NyZWRpdE5vdGVcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGZvcm0tZ3JvdXAgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImhlYWRpbmd0ZXh0IG1iLTFcIj5QbGFjZSBvZiBTdXBwbHk8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cIlBsYWNlT2ZTdXBwbHlcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIFtyZWFkb25seV09XCJtb2RlID09PSAnZWRpdCcgfHwgaXNDcmVkaXROb3RlXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIEJpbGxpbmcgR3JvdXAgKHJlYWQtb25seSBmb3IgaW52b2ljZSBlZGl0cyBhbmQgY3JlZGl0IG5vdGVzKSAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwiYmlsbGluZ0dyb3Vwcy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgZm9ybS1ncm91cCBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaGVhZGluZ3RleHQgbWItMVwiPkJpbGxpbmcgR3JvdXAgPHNwYW4gKm5nSWY9XCJtb2RlICE9PSAnZWRpdCcgJiYgIWlzQ3JlZGl0Tm90ZVwiIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCAqbmdJZj1cIm1vZGUgIT09ICdlZGl0JyAmJiAhaXNDcmVkaXROb3RlXCIgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIGZvcm1Db250cm9sTmFtZT1cImdyb3VwSWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtaW52YWxpZF09XCJjb250cm9sSW52YWxpZCgnZ3JvdXBJZCcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkdyb3VwQ2hhbmdlKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPlNlbGVjdCBiaWxsaW5nIGdyb3VwPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGcgb2YgYmlsbGluZ0dyb3Vwc1wiIFt2YWx1ZV09XCJnLl9pZFwiPnt7IGcuZ3JvdXBOYW1lIH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ0lmPVwibW9kZSA9PT0gJ2VkaXQnIHx8IGlzQ3JlZGl0Tm90ZVwiIHR5cGU9XCJ0ZXh0XCIgW3ZhbHVlXT1cImludm9pY2VGb3JtLmdldCgnZ3JvdXBOYW1lJyk/LnZhbHVlIHx8ICdEZWZhdWx0IEdyb3VwJ1wiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcmVhZG9ubHk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtbXNnXCIgKm5nSWY9XCJjb250cm9sSW52YWxpZCgnZ3JvdXBJZCcpXCI+QmlsbGluZyBHcm91cCBpcyByZXF1aXJlZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgZm9ybS1ncm91cCBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaGVhZGluZ3RleHQgbWItMVwiPkdyb3VwIE5hbWU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cImdyb3VwTmFtZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgW3JlYWRvbmx5XT1cIm1vZGUgPT09ICdlZGl0JyB8fCBpc0NyZWRpdE5vdGVcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gSW52b2ljZSBEZXRhaWxzIFNlY3Rpb24gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLXRpdGxlIG1iLTMgbXQtMlwiPnt7IGlzQ3JlZGl0Tm90ZSA/ICdDcmVkaXQgTm90ZSBEZXRhaWxzJyA6ICdJbnZvaWNlIERldGFpbHMnIH19PC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIENyZWRpdCBub3RlOiB0aGUgaW52b2ljZSBpdCBpcyBpc3N1ZWQgYWdhaW5zdCAocmVhZC1vbmx5KS4gLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgZm9ybS1ncm91cCBtYi0zXCIgKm5nSWY9XCJpc0NyZWRpdE5vdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJoZWFkaW5ndGV4dCBtYi0xXCI+QWdhaW5zdCBJbnZvaWNlPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIFt2YWx1ZV09XCJzb3VyY2VJbnZvaWNlTnVtYmVyXCIgcmVhZG9ubHk+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBmb3JtLWdyb3VwIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJoZWFkaW5ndGV4dCBtYi0xXCI+e3sgaXNDcmVkaXROb3RlID8gJ0NyZWRpdCBOb3RlIERhdGUnIDogJ0JpbGxpbmcgRGF0ZScgfX0gPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImRhdGVcIiBmb3JtQ29udHJvbE5hbWU9XCJiaWxsaW5nRGF0ZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmlzLWludmFsaWRdPVwiY29udHJvbEludmFsaWQoJ2JpbGxpbmdEYXRlJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm1vZGUgPT09ICdjcmVhdGUnICYmIGNvbXB1dGVEdWVEYXRlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1tc2dcIiAqbmdJZj1cImNvbnRyb2xJbnZhbGlkKCdiaWxsaW5nRGF0ZScpXCI+e3sgaXNDcmVkaXROb3RlID8gJ0NyZWRpdCBOb3RlIERhdGUnIDogJ0JpbGxpbmcgRGF0ZScgfX0gaXMgcmVxdWlyZWQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLSBDcmVhdGUgbW9kZTogY2hvb3NlIGEgcGF5bWVudCB0ZXJtIChkYXlzKTsgdGhlIGR1ZSBkYXRlIGlzXHJcbiAgICAgICAgICAgICAgICAgICAgIGRlcml2ZWQgZnJvbSBCaWxsaW5nIERhdGUgKyB0ZXJtIGFuZCBzaG93biByZWFkLW9ubHkuIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGZvcm0tZ3JvdXAgbWItM1wiICpuZ0lmPVwibW9kZSA9PT0gJ2NyZWF0ZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJoZWFkaW5ndGV4dCBtYi0xXCI+UGF5bWVudCBUZXJtIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgZm9ybUNvbnRyb2xOYW1lPVwicGF5bWVudFRlcm1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImNvbXB1dGVEdWVEYXRlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCIzMFwiPjMwIGRheXM8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCI2MFwiPjYwIGRheXM8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCI5MFwiPjkwIGRheXM8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCIxMjBcIj4xMjAgZGF5czwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsIG10LTFcIj5EdWUgRGF0ZToge3sgaW52b2ljZUZvcm0uZ2V0KCdkdWVEYXRlJyk/LnZhbHVlIHx8ICctJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8IS0tIEVkaXQgLyBlc3RpbWF0ZSBtb2RlcyBrZWVwIHRoZSBlZGl0YWJsZSBEdWUgRGF0ZSBmaWVsZCAoY3JlZGl0IG5vdGVzIGhhdmUgbm9uZSkuIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGZvcm0tZ3JvdXAgbWItM1wiICpuZ0lmPVwibW9kZSAhPT0gJ2NyZWF0ZScgJiYgIWlzQ3JlZGl0Tm90ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImhlYWRpbmd0ZXh0IG1iLTFcIj5EdWUgRGF0ZSA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZGF0ZVwiIGZvcm1Db250cm9sTmFtZT1cImR1ZURhdGVcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cImNvbnRyb2xJbnZhbGlkKCdkdWVEYXRlJylcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1tc2dcIiAqbmdJZj1cImNvbnRyb2xJbnZhbGlkKCdkdWVEYXRlJylcIj5EdWUgRGF0ZSBpcyByZXF1aXJlZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgZm9ybS1ncm91cCBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaGVhZGluZ3RleHQgbWItMVwiPkN1cnJlbmN5IDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgZm9ybUNvbnRyb2xOYW1lPVwiY3VycmVuY3lcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uQ3VycmVuY3lDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cImNvbnRyb2xJbnZhbGlkKCdjdXJyZW5jeScpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGMgb2YgY3VycmVuY3lPcHRpb25zXCIgW3ZhbHVlXT1cImNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGN1cnJlbmN5TGFiZWxzW2NdIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZhbGlkLW1zZ1wiICpuZ0lmPVwiY29udHJvbEludmFsaWQoJ2N1cnJlbmN5JylcIj5DdXJyZW5jeSBpcyByZXF1aXJlZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgZm9ybS1ncm91cCBtYi0zXCIgKm5nSWY9XCIhaXNDcmVkaXROb3RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaGVhZGluZ3RleHQgbWItMVwiPk5vLiBvZiBTdG9yZXM8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgZm9ybUNvbnRyb2xOYW1lPVwic3RvcmVzXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByZWFkb25seT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLSBQdXJjaGFzZSBPcmRlciBtYXBwaW5nIChvcHRpb25hbCkuIE1hcHBpbmcgZGVkdWN0cyB0aGlzXHJcbiAgICAgICAgICAgICAgICAgICAgIGludm9pY2UncyBhbW91bnQgZnJvbSB0aGUgc2VsZWN0ZWQgUE8ncyByZW1haW5pbmcgYmFsYW5jZS5cclxuICAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmxlIGZyb20gdGhlIGZpbmFuY2UgYXBwcm92YWwgc3RhZ2Ugb24gKHNlZSBpc0RyYWZ0KTtcclxuICAgICAgICAgICAgICAgICAgICAgaGlkZGVuIHdoaWxlIHRoZSBkcmFmdCBpcyBzdGlsbCBhdCBDU00gcmV2aWV3LCBvciBpbiBjcmVhdGVcclxuICAgICAgICAgICAgICAgICAgICAgbW9kZS4gLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9kZSAhPT0gJ2VzdGltYXRlJyAmJiBtb2RlICE9PSAnZWRpdEVzdGltYXRlJyAmJiAhaXNDcmVkaXROb3RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGZvcm0tZ3JvdXAgbWItM1wiICpuZ0lmPVwiIWlzRHJhZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaGVhZGluZ3RleHQgbWItMVwiPlB1cmNoYXNlIE9yZGVyPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgZm9ybUNvbnRyb2xOYW1lPVwicHVyY2hhc2VPcmRlck51bWJlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPk5vbmU8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHBvIG9mIHB1cmNoYXNlT3JkZXJzXCIgW3ZhbHVlXT1cInBvLnB1cmNoYXNlT3JkZXJOdW1iZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBwby5wdXJjaGFzZU9yZGVyTnVtYmVyIH19ICh7eyBnZXRDdXJyZW5jeVN5bWJvbCgpIH19e3sgcG8ucmVtYWluaW5nQW1vdW50IHwgbnVtYmVyOicxLjAtMCc6J2VuLUlOJyB9fSBsZWZ0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBmb3JtLWdyb3VwIG1iLTNcIiAqbmdJZj1cImlzRHJhZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaGVhZGluZ3RleHQgbWItMVwiPlB1cmNoYXNlIE9yZGVyPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgc21hbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1cmNoYXNlIE9yZGVyIGNhbiBiZSBhdHRhY2hlZCBvbmNlIHRoZSBpbnZvaWNlIHJlYWNoZXMgZmluYW5jZSBhcHByb3ZhbC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIENyZWRpdCBub3RlOiB3aHkgaXQgaXMgYmVpbmcgaXNzdWVkIChrZXB0IG9uIHRoZSByZWNvcmQgYW5kIGluIHRoZSBleHBvcnQpLiAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwiaXNDcmVkaXROb3RlXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIGZvcm0tZ3JvdXAgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImhlYWRpbmd0ZXh0IG1iLTFcIj5SZWFzb248L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cInJlYXNvblwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJlLmcuIFNlcnZpY2UgZG93bnRpbWUgZm9yIDUgc3RvcmVzIGluIFNlcCAyMDI2XCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIEFkdmFuY2UgSW52b2ljZSAoY3JlYXRlIG9ubHkpOiBiaWxsIHNldmVyYWwgZnV0dXJlIG1vbnRocyB1cGZyb250LlxyXG4gICAgICAgICAgICAgICAgIEVhY2ggbW9udGggYmVjb21lcyBpdHMgb3duIGxpbmUgaXRlbSBzZXJ2ZXItc2lkZS4gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cIm1vZGUgPT09ICdjcmVhdGUnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgZm9ybS1ncm91cCBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaGVhZGluZ3RleHQgbWItMSBkLWJsb2NrXCI+QWR2YW5jZSBJbnZvaWNlPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaCBtdC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiBpZD1cImFkdmFuY2VJbnZvaWNlQ3JlYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImFkdmFuY2VJbnZvaWNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJhZHZhbmNlSW52b2ljZUNyZWF0ZVwiPkJpbGwgZnV0dXJlIG1vbnRocyB1cGZyb250PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGZvcm0tZ3JvdXAgbWItM1wiICpuZ0lmPVwiaW52b2ljZUZvcm0uZ2V0KCdhZHZhbmNlSW52b2ljZScpPy52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImhlYWRpbmd0ZXh0IG1iLTFcIj5BZHZhbmNlIGZyZXF1ZW5jeTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgZm9ybUNvbnRyb2xOYW1lPVwiYWR2YW5jZVBlcmlvZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBvcHQgb2YgYWR2YW5jZVBlcmlvZE9wdGlvbnNcIiBbdmFsdWVdPVwib3B0LnZhbHVlXCI+e3sgb3B0LmxhYmVsIH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIENyZWRpdCBub3RlOiBjaG9vc2UgaG93IHRoZSBjcmVkaXQgaXMgYnJva2VuIGRvd247IGxpbmUgaXRlbXMgYXJlXHJcbiAgICAgICAgICAgICAgICAgZ2VuZXJhdGVkIGZyb20gdGhhdCAobmV2ZXIgYWRkZWQgYnkgaGFuZCkuIE5vIHRheCDigJQgdGhlIG5vdGUnc1xyXG4gICAgICAgICAgICAgICAgIHZhbHVlIGlzIHRoZSB0b3RhbCBjcmVkaXQuIC0tPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNDcmVkaXROb3RlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLXRpdGxlIG1iLTMgbXQtMlwiPkNyZWRpdCBUeXBlPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gU2FtZSByYWRpbyBtYXJrdXAgYXMgdGhlIGJpbGxpbmctZ3JvdXAgZm9ybSAoWWVzIC8gTm8gb3B0aW9ucykuIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtd3JhcCBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWUtNCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCIgKm5nRm9yPVwibGV0IHQgb2YgY3JlZGl0VHlwZU9wdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IG1lLTJcIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwiY25DcmVkaXRUeXBlXCIgW2lkXT1cIidjblR5cGUtJyArIHQudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJjcmVkaXRUeXBlID09PSB0LnZhbHVlXCIgKGNoYW5nZSk9XCJvbkNyZWRpdFR5cGVDaGFuZ2UodC52YWx1ZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIG1lLTJcIiBbZm9yXT1cIidjblR5cGUtJyArIHQudmFsdWVcIj57eyB0LmxhYmVsIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gQnkgc3RvcmU6IG9uZSBTdG9yZXMgZHJvcGRvd24gKHRoZSBiaWxsaW5nIGdyb3VwJ3Mgc3RvcmVzKSDihpIgb25lIGxpbmUgcGVyIHN0b3JlLiAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwiY3JlZGl0VHlwZSA9PT0gJ3N0b3JlJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGZvcm0tZ3JvdXAgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImhlYWRpbmd0ZXh0IG1iLTFcIj5TdG9yZXMgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY24tcGlja2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiZm9ybS1zZWxlY3QgdGV4dC1zdGFydFwiIChjbGljayk9XCJ0b2dnbGVQaWNrZXIoJ3N0b3JlJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJyZWFrZG93bkxvYWRpbmdcIj57eyBicmVha2Rvd25Mb2FkaW5nID8gJ0xvYWRpbmfigKYnIDogc3RvcmVQaWNrZXJTdW1tYXJ5IH19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbi1waWNrZXItcGFuZWxcIiAqbmdJZj1cIm9wZW5QaWNrZXIgPT09ICdzdG9yZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIHB0LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIiBwbGFjZWhvbGRlcj1cIlNlYXJjaCBzdG9yZSBuYW1lIG9yIElEXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzdG9yZVNlYXJjaFwiIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNlbGVjdCBhbGwg4oaSIG9uZSBBbGwtc3RvcmVzIGxpbmUgKEFtb3VudCArIENyZWRpdCBvbmx5KS4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY24tcGlja2VyLWFjdGlvbnNcIiAqbmdJZj1cImJyZWFrZG93blN0b3Jlcy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSAoY2xpY2spPVwic2VsZWN0QWxsU3RvcmVzKClcIiAqbmdJZj1cIiFhbGxTdG9yZXNTZWxlY3RlZFwiPlNlbGVjdCBhbGw8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkXCIgKm5nSWY9XCJhbGxTdG9yZXNTZWxlY3RlZFwiPkFsbCB7eyBicmVha2Rvd25TdG9yZXMubGVuZ3RoIH19IHNlbGVjdGVkPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZFwiICpuZ0lmPVwiIWFsbFN0b3Jlc1NlbGVjdGVkICYmIHNlbGVjdGVkU3RvcmVzLmxlbmd0aFwiPnt7IHNlbGVjdGVkU3RvcmVzLmxlbmd0aCB9fSBzZWxlY3RlZDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSAoY2xpY2spPVwiY2xlYXJTdG9yZXMoKVwiICpuZ0lmPVwiYWxsU3RvcmVzU2VsZWN0ZWQgfHwgc2VsZWN0ZWRTdG9yZXMubGVuZ3RoXCI+Q2xlYXI8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNuLXBpY2tlci1vcHRpb25cIiAqbmdGb3I9XCJsZXQgcyBvZiBmaWx0ZXJlZFN0b3Jlc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgbWUtMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzU3RvcmVTZWxlY3RlZChzLnN0b3JlSWQpXCIgKGNoYW5nZSk9XCJ0b2dnbGVTdG9yZShzLnN0b3JlSWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgcy5zdG9yZU5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy1hdXRvIHRleHQtbXV0ZWQgc21hbGxcIj57eyBzLnN0b3JlSWQgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNuLXBpY2tlci1lbXB0eVwiICpuZ0lmPVwiIWZpbHRlcmVkU3RvcmVzLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGJyZWFrZG93blN0b3Jlcy5sZW5ndGggPyAnTm8gc3RvcmVzIG1hdGNoJyA6ICdObyBzdG9yZXMgaW4gdGhpcyBiaWxsaW5nIGdyb3VwJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBCeSBwcm9kdWN0OiBhIGxpbmUgcGVyIHByb2R1Y3QsIGFkZGVkIG9uZSBhdCBhIHRpbWUgKGFzIG1hbnkgYXMgdGhlXHJcbiAgICAgICAgICAgICAgICAgaW52b2ljZSBoYXMgcHJvZHVjdHMpLiBPdGhlciB0eXBlczogdGhlIGdlbmVyYXRlZCBsaW5lcy4gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLXRpdGxlIG1iLTMgbXQtMlwiICpuZ0lmPVwiY3JlZGl0VHlwZSA9PT0gJ3Byb2R1Y3QnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPlByb2R1Y3RzPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1wcmltYXJ5XCIgKGNsaWNrKT1cImFkZFByb2R1Y3RMaW5lKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNhbkFkZFByb2R1Y3RMaW5lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cImNhbkFkZFByb2R1Y3RMaW5lID8gJycgOiAnRXZlcnkgcHJvZHVjdCBvbiB0aGlzIGludm9pY2UgYWxyZWFkeSBoYXMgYSBsaW5lJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICArIEFkZCBQcm9kdWN0XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLXRpdGxlIG1iLTMgbXQtMlwiICpuZ0lmPVwiY3JlZGl0VHlwZSAhPT0gJ3Byb2R1Y3QnICYmIGxpbmVJdGVtcy5sZW5ndGhcIj5MaW5lIEl0ZW1zPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgZm9ybUFycmF5TmFtZT1cImxpbmVJdGVtc1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBsaW5lSXRlbXMuY29udHJvbHM7IGxldCBpID0gaW5kZXhcIiBbZm9ybUdyb3VwTmFtZV09XCJpXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInByb2R1Y3Qtcm93IG1iLTMgcC0zXCIgZGF0YS1saW5lLWl0ZW0tcm93PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwcm9kdWN0LWxhYmVsXCI+e3sgY3JlZGl0VHlwZSA9PT0gJ3Byb2R1Y3QnID8gJ1Byb2R1Y3QgJyArIChpICsgMSkgOiBsaW5lTGFiZWwoaSkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLWRhbmdlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjcmVkaXRUeXBlID09PSAncHJvZHVjdCcgJiYgbGluZUl0ZW1zLmxlbmd0aCA+IDFcIiAoY2xpY2spPVwicmVtb3ZlUHJvZHVjdExpbmUoaSlcIj5SZW1vdmU8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gQnkgcHJvZHVjdDogdGhlIHByb2R1Y3QgKHNpbmdsZSkgYW5kIGl0cyBzdG9yZXMgb24gdGhlIGludm9pY2UgKG9wdGlvbmFsKS4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwiY3JlZGl0VHlwZSA9PT0gJ3Byb2R1Y3QnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBmb3JtLWdyb3VwIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImhlYWRpbmd0ZXh0IG1iLTFcIj5Qcm9kdWN0IDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBmb3JtQ29udHJvbE5hbWU9XCJwcm9kdWN0TmFtZVwiIChjaGFuZ2UpPVwib25MaW5lUHJvZHVjdENoYW5nZShpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj57eyBicmVha2Rvd25Mb2FkaW5nID8gJ0xvYWRpbmfigKYnIDogJ1NlbGVjdCBwcm9kdWN0JyB9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHAgb2YgcHJvZHVjdE9wdGlvbnNGb3IoaSlcIiBbdmFsdWVdPVwicC5wcm9kdWN0TmFtZVwiPnt7IGZvcm1hdFByb2R1Y3ROYW1lKHAucHJvZHVjdE5hbWUpIH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBmb3JtLWdyb3VwIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImhlYWRpbmd0ZXh0IG1iLTFcIj5TdG9yZXMgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsXCI+KG9wdGlvbmFsIOKAlCBsaW1pdHMgdGhlIHByb2R1Y3QgdG8gdGhlc2Ugc3RvcmVzKTwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNuLXBpY2tlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiZm9ybS1zZWxlY3QgdGV4dC1zdGFydFwiIChjbGljayk9XCJ0b2dnbGVQaWNrZXIoJ2xpbmUtJyArIGkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFpdGVtLmdldCgncHJvZHVjdE5hbWUnKT8udmFsdWVcIj57eyBpdGVtLmdldCgncHJvZHVjdE5hbWUnKT8udmFsdWUgPyBsaW5lU3RvcmVTdW1tYXJ5KGkpIDogJ1NlbGVjdCBhIHByb2R1Y3QgZmlyc3QnIH19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNuLXBpY2tlci1wYW5lbFwiICpuZ0lmPVwib3BlblBpY2tlciA9PT0gJ2xpbmUtJyArIGlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCIgcGxhY2Vob2xkZXI9XCJTZWFyY2ggc3RvcmUgbmFtZSBvciBJRFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzdG9yZVNlYXJjaFwiIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNuLXBpY2tlci1hY3Rpb25zXCIgKm5nSWY9XCJpdGVtLmdldCgnc3RvcmVzJyk/LnZhbHVlPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZFwiPnt7IGl0ZW0uZ2V0KCdzdG9yZXMnKT8udmFsdWU/Lmxlbmd0aCB9fSBzZWxlY3RlZDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIChjbGljayk9XCJjbGVhckxpbmVTdG9yZXMoaSlcIj5DbGVhcjwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNuLXBpY2tlci1vcHRpb25cIiAqbmdGb3I9XCJsZXQgcyBvZiBsaW5lU3RvcmVPcHRpb25zKGkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IG1lLTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzTGluZVN0b3JlU2VsZWN0ZWQoaSwgcy5zdG9yZUlkKVwiIChjaGFuZ2UpPVwidG9nZ2xlTGluZVN0b3JlKGksIHMpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBzLnN0b3JlTmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtYXV0byB0ZXh0LW11dGVkIHNtYWxsXCI+e3sgcy5zdG9yZUlkIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY24tcGlja2VyLWVtcHR5XCIgKm5nSWY9XCIhbGluZVN0b3JlT3B0aW9ucyhpKS5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHN0b3JlU2VhcmNoID8gJ05vIHN0b3JlcyBtYXRjaCcgOiAnTm8gc3RvcmVzIG1hcHBlZCB0byB0aGlzIHByb2R1Y3Qgb24gdGhlIGludm9pY2UnIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gQWdhaW5zdCBpbnZvaWNlLCBhbmQgYnkgc3RvcmUgd2l0aCBhbGwgc3RvcmVzOiBvbmx5IEFtb3VudCBhbmQgQ3JlZGl0LiAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCIhaXNBbW91bnRPbmx5TGluZShpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTQgZm9ybS1ncm91cCBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJoZWFkaW5ndGV4dCBtYi0xXCI+RGVzY3JpcHRpb248L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpb25cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJlLmcuIEN1c3RvbWVyIEZvb3RmYWxsIEFuYWx5dGljc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IGZvcm0tZ3JvdXAgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaGVhZGluZ3RleHQgbWItMVwiPk1vbnRoPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cIm1vbnRoXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZS5nLiBTZXAgMjAyNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IGZvcm0tZ3JvdXAgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaGVhZGluZ3RleHQgbWItMVwiPkhTTi9TQUM8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwiSHNuTnVtYmVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgZm9ybS1ncm91cCBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJoZWFkaW5ndGV4dCBtYi0xXCI+QW1vdW50IDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFRoZSBsaW5lJ3MgYW1vdW50IChub3QgcmVkdWNlZCBieSB0aGUgY3JlZGl0KSwgYXMgb24gdGhlIFBERi4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGZvcm1Db250cm9sTmFtZT1cIm9yaWdpbmFsQW1vdW50XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBzdGVwPVwiMC4wMVwiIG1pbj1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cImxpbmVJdGVtSW52YWxpZChpLCAnb3JpZ2luYWxBbW91bnQnKSB8fCBjcmVkaXRBYm92ZUFtb3VudChpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uTGluZUFtb3VudElucHV0KGkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1tc2dcIiAqbmdJZj1cImxpbmVJdGVtSW52YWxpZChpLCAnb3JpZ2luYWxBbW91bnQnKVwiPkVudGVyIGEgdmFsaWQgYW1vdW50PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgZm9ybS1ncm91cCBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJoZWFkaW5ndGV4dCBtYi0xXCI+Q3JlZGl0IDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGZvcm1Db250cm9sTmFtZT1cImNyZWRpdFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgc3RlcD1cIjAuMDFcIiBtaW49XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtaW52YWxpZF09XCJsaW5lSXRlbUludmFsaWQoaSwgJ2NyZWRpdCcpIHx8IGNyZWRpdEFib3ZlQW1vdW50KGkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwib25MaW5lQ3JlZGl0SW5wdXQoaSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZhbGlkLW1zZ1wiICpuZ0lmPVwibGluZUl0ZW1JbnZhbGlkKGksICdjcmVkaXQnKVwiPkVudGVyIGEgdmFsaWQgY3JlZGl0PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1tc2dcIiAqbmdJZj1cImNyZWRpdEFib3ZlQW1vdW50KGkpXCI+Q3JlZGl0IGNhbid0IGV4Y2VlZCB0aGUgYW1vdW50PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBTdW1tYXJ5IGF0IElOVk9JQ0UgbGV2ZWwgKG5vdCBqdXN0IHRoZSBzZWxlY3RlZCBsaW5lcyk6IGludm9pY2VcclxuICAgICAgICAgICAgICAgICBhbW91bnQgZXhjbC4gR1NULCBlYXJsaWVyIGNyZWRpdCBub3RlcyBvbiBpdCwgYW5kIHRoaXMgY3JlZGl0LiAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1bW1hcnktc2VjdGlvbiBwLTMgbXQtM1wiICpuZ0lmPVwibGluZUl0ZW1zLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdW1tYXJ5LWxhYmVsXCI+SW52b2ljZSBBbW91bnQgKGV4Y2wuIEdTVCkgwrcge3sgc291cmNlSW52b2ljZU51bWJlciB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1bW1hcnktdmFsdWVcIj57eyBnZXRDdXJyZW5jeVN5bWJvbCgpIH19IHt7IHNvdXJjZUludm9pY2VBbW91bnQgfCBudW1iZXI6JzEuMi0yJzonZW4tSU4nIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG1iLTJcIiAqbmdJZj1cImFscmVhZHlDcmVkaXRlZCA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1bW1hcnktbGFiZWxcIj5BbHJlYWR5IGNyZWRpdGVkPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3VtbWFyeS12YWx1ZVwiPi0ge3sgZ2V0Q3VycmVuY3lTeW1ib2woKSB9fSB7eyBhbHJlYWR5Q3JlZGl0ZWQgfCBudW1iZXI6JzEuMi0yJzonZW4tSU4nIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1bW1hcnktbGFiZWxcIj5DcmVkaXQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdW1tYXJ5LXZhbHVlXCIgW2NsYXNzLnRleHQtZGFuZ2VyXT1cImV4Y2VlZHNDcmVkaXRCYWxhbmNlXCI+LSB7eyBnZXRDdXJyZW5jeVN5bWJvbCgpIH19IHt7IGdldENyZWRpdFRvdGFsKCkgfCBudW1iZXI6JzEuMi0yJzonZW4tSU4nIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1tc2dcIiAqbmdJZj1cImV4Y2VlZHNDcmVkaXRCYWxhbmNlXCI+VG90YWwgY3JlZGl0IGV4Y2VlZHMgd2hhdCBpcyBsZWZ0IHRvIGNyZWRpdCBvbiB0aGUgaW52b2ljZS48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0NyZWRpdE5vdGVcIj5cclxuICAgICAgICAgICAgPCEtLSBQcm9kdWN0cyBTZWN0aW9uIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi10aXRsZSBtYi0zIG10LTJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+UHJvZHVjdHM8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeVwiIChjbGljayk9XCJhZGRQcm9kdWN0KClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgQWRkIFByb2R1Y3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiAoY2xpY2spPVwiYWRkQ3VzdG9tUHJvZHVjdCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICArIEFkZCBDdXN0b20gUHJvZHVjdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgZm9ybUFycmF5TmFtZT1cInByb2R1Y3RzXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIFJvd3MgY2FuIGJlIHJlb3JkZXJlZCBieSBkcmFnZ2luZyB0aGUg4ouu4ouuIGhhbmRsZSBvbnRvIGFub3RoZXIgcm93XHJcbiAgICAgICAgICAgICAgICAgICAgIChuYXRpdmUgSFRNTDUgZHJhZyAmIGRyb3Ag4oCUIG5vIENESyBkZXBlbmRlbmN5KS4gVGhlIEZvcm1BcnJheSBpc1xyXG4gICAgICAgICAgICAgICAgICAgICByZS1vcmRlcmVkLCBzbyBudW1iZXJpbmcsIHRvdGFscyBhbmQgdGhlIHNhdmVkIHByb2R1Y3RzIGZvbGxvdy4gLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBwcm9kdWN0IG9mIHByb2R1Y3RzLmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4XCIgW2Zvcm1Hcm91cE5hbWVdPVwiaVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwcm9kdWN0LXJvdyBtYi0zIHAtM1wiIGRhdGEtcHJvZHVjdC1yb3dcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZHJhZy1vdmVyXT1cImRyYWdPdmVySW5kZXggPT09IGkgJiYgZHJhZ0luZGV4ICE9PSBudWxsICYmIGRyYWdJbmRleCAhPT0gaVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRyYWdnaW5nXT1cImRyYWdJbmRleCA9PT0gaVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGRyYWdvdmVyKT1cIm9uUm93RHJhZ092ZXIoJGV2ZW50LCBpKVwiIChkcmFnbGVhdmUpPVwib25Sb3dEcmFnTGVhdmUoaSlcIlxyXG4gICAgICAgICAgICAgICAgICAgIChkcm9wKT1cIm9uUm93RHJvcCgkZXZlbnQsIGkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHJhZy1oYW5kbGUgbWUtMlwiIGRyYWdnYWJsZT1cInRydWVcIiB0aXRsZT1cIkRyYWcgdG8gcmVvcmRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRyYWdzdGFydCk9XCJvblJvd0RyYWdTdGFydCgkZXZlbnQsIGkpXCIgKGRyYWdlbmQpPVwib25Sb3dEcmFnRW5kKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicHJvZHVjdHMubGVuZ3RoID4gMVwiPiYjODk0MjsmIzg5NDI7PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwcm9kdWN0LWxhYmVsXCI+UHJvZHVjdCB7eyBpICsgMSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtZGFuZ2VyXCIgKGNsaWNrKT1cInJlbW92ZVByb2R1Y3QoaSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwcm9kdWN0cy5sZW5ndGggPiAxXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW1vdmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTQgZm9ybS1ncm91cCBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJoZWFkaW5ndGV4dCBtYi0xXCI+UHJvZHVjdCBOYW1lIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEJhc2UtcHJpY2luZyBkcm9wZG93biAod2l0aCBhIFwiKyBDdXN0b20gcHJvZHVjdFwiIGNob2ljZSkgd2hlblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0cyBleGlzdCBhbmQgdGhpcyByb3cgaXNuJ3QgY3VzdG9tOyBvdGhlcndpc2UgYSBmcmVlLXRleHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSBpbnB1dCBmb3IgYSBjdXN0b20gcHJvZHVjdC4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0ICpuZ0lmPVwiYXZhaWxhYmxlUHJvZHVjdHMubGVuZ3RoID4gMCAmJiAhcHJvZHVjdC5nZXQoJ2lzQ3VzdG9tJyk/LnZhbHVlXCIgZm9ybUNvbnRyb2xOYW1lPVwicHJvZHVjdE5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1zZWxlY3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cImFycmF5Q29udHJvbEludmFsaWQoJ3Byb2R1Y3RzJywgaSwgJ3Byb2R1Y3ROYW1lJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25Qcm9kdWN0Q2hhbmdlKGkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPlNlbGVjdCBwcm9kdWN0PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgcCBvZiBhdmFpbGFibGVQcm9kdWN0c1wiIFt2YWx1ZV09XCJwLnByb2R1Y3ROYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZvcm1hdFByb2R1Y3ROYW1lKHAucHJvZHVjdE5hbWUpIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIl9fY3VzdG9tX19cIj4rIEN1c3RvbSBwcm9kdWN0PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cImF2YWlsYWJsZVByb2R1Y3RzLmxlbmd0aCA9PT0gMCB8fCBwcm9kdWN0LmdldCgnaXNDdXN0b20nKT8udmFsdWVcIiB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cInByb2R1Y3ROYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmlzLWludmFsaWRdPVwiYXJyYXlDb250cm9sSW52YWxpZCgncHJvZHVjdHMnLCBpLCAncHJvZHVjdE5hbWUnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJlLmcuIEN1c3RvbSBTZXJ2aWNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1tc2dcIiAqbmdJZj1cImFycmF5Q29udHJvbEludmFsaWQoJ3Byb2R1Y3RzJywgaSwgJ3Byb2R1Y3ROYW1lJylcIj5Qcm9kdWN0IE5hbWUgaXMgcmVxdWlyZWQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNCBmb3JtLWdyb3VwIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImhlYWRpbmd0ZXh0IG1iLTFcIj5EZXNjcmlwdGlvbjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJkZXNjcmlwdGlvblwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImUuZy4gQ3VzdG9tZXIgRm9vdGZhbGwgQW5hbHl0aWNzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTQgZm9ybS1ncm91cCBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJoZWFkaW5ndGV4dCBtYi0xXCI+TW9udGg8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwibW9udGhcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJlLmcuIE1hciAyMDI2XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGZvcm0tZ3JvdXAgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaGVhZGluZ3RleHQgbWItMVwiPkhTTi9TQUM8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwiSHNuTnVtYmVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBmb3JtLWdyb3VwIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImhlYWRpbmd0ZXh0IG1iLTFcIj5RdWFudGl0eTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIE5vIG5lZ2F0aXZlIHF1YW50aXRpZXM6IGEgbWludXMgc2lnbiBpcyBibG9ja2VkIGFuZCBhbnlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVnYXRpdmUgdmFsdWUgKGUuZy4gcGFzdGVkKSBpcyByZXNldCB0byAwLiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgZm9ybUNvbnRyb2xOYW1lPVwic3RvcmVDb3VudFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbWluPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiYmxvY2tNaW51c0tleSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwib25RdWFudGl0eUlucHV0KGkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgZm9ybS1ncm91cCBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJoZWFkaW5ndGV4dCBtYi0xXCI+UmF0ZS9QcmljZSA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBSYXRlL1ByaWNlIGFjY2VwdHMgYXQgbW9zdCAyIGRlY2ltYWxzIChwYWlzZSk7IGV4dHJhIGRpZ2l0cyBhcmUgdHJpbW1lZCBhcyB0eXBlZC4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGZvcm1Db250cm9sTmFtZT1cInByaWNlXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBzdGVwPVwiMC4wMVwiIG1pbj1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cImFycmF5Q29udHJvbEludmFsaWQoJ3Byb2R1Y3RzJywgaSwgJ3ByaWNlJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvblByaWNlSW5wdXQoaSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZhbGlkLW1zZ1wiICpuZ0lmPVwiYXJyYXlDb250cm9sSW52YWxpZCgncHJvZHVjdHMnLCBpLCAncHJpY2UnKVwiPlJhdGUvUHJpY2UgaXMgcmVxdWlyZWQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBmb3JtLWdyb3VwIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImhlYWRpbmd0ZXh0IG1iLTFcIj5BbW91bnQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBmb3JtQ29udHJvbE5hbWU9XCJhbW91bnRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJlYWRvbmx5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBmb3JtLWdyb3VwIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImhlYWRpbmd0ZXh0IG1iLTFcIj5QZXJpb2Q8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgZm9ybUNvbnRyb2xOYW1lPVwicGVyaW9kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm1vbnRobHlcIj5Nb250aGx5PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInF1YXJ0ZXJseVwiPlF1YXJ0ZXJseTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJoYWxmeWVhcmx5XCI+SGFsZi15ZWFybHk8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwieWVhcmx5XCI+WWVhcmx5PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIFRheCBTZWN0aW9uIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi10aXRsZSBtYi0zIG10LTJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+VGF4PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gVGF4IGlzIERFUklWRUQgZnJvbSB0aGUgR1NUIG51bWJlciAoR1NUSU4gJzMz4oCmJyDihpIgQ0dTVCA5JSArIFNHU1QgOSUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBhbnkgb3RoZXIgR1NUSU4g4oaSIElHU1QgMTglLCBub25lIOKGkiBubyB0YXgpLCBzbyB0aGVyZSBpcyBubyBtYW51YWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFwiQWRkIFRheFwiIGFuZCB0aGUgcm93cyBhcmUgcmVhZC1vbmx5OyBhIHRheCBsaW5lIGNhbiBzdGlsbCBiZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgUkVNT1ZFRCB2aWEgZWFjaCByb3cncyBSZW1vdmUgYnV0dG9uLiAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbXV0ZWQgc21hbGxcIj5DYWxjdWxhdGVkIGZyb20gR1NUIE51bWJlcjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgZm9ybUFycmF5TmFtZT1cInRheFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgdCBvZiB0YXhBcnJheS5jb250cm9sczsgbGV0IGogPSBpbmRleFwiIFtmb3JtR3JvdXBOYW1lXT1cImpcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGF4LXJvdyBtYi0zIHAtM1wiIGRhdGEtdGF4LXJvdz5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicHJvZHVjdC1sYWJlbFwiPlRheCB7eyBqICsgMSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLWRhbmdlclwiIChjbGljayk9XCJyZW1vdmVUYXgoailcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBmb3JtLWdyb3VwIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImhlYWRpbmd0ZXh0IG1iLTFcIj5UYXggVHlwZSA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBUaGUgJ3R5cGUnIGNvbnRyb2wgaXMgY3JlYXRlZCBkaXNhYmxlZCAoZGVyaXZlZCBmcm9tIHRoZSBHU1RJTik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmb3JtIHBvc3RzIHZpYSBnZXRSYXdWYWx1ZSgpIHNvIGl0IHN0aWxsIHJlYWNoZXMgdGhlIHBheWxvYWQuIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgZm9ybUNvbnRyb2xOYW1lPVwidHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblRheFR5cGVDaGFuZ2UoailcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cImFycmF5Q29udHJvbEludmFsaWQoJ3RheCcsIGosICd0eXBlJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB0dCBvZiB0YXhUeXBlc1wiIFt2YWx1ZV09XCJ0dFwiPnt7IHR0IH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZhbGlkLW1zZ1wiICpuZ0lmPVwiYXJyYXlDb250cm9sSW52YWxpZCgndGF4JywgaiwgJ3R5cGUnKVwiPlRheCBUeXBlIGlzIHJlcXVpcmVkPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgZm9ybS1ncm91cCBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJoZWFkaW5ndGV4dCBtYi0xXCI+VGF4ICUgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgZm9ybUNvbnRyb2xOYW1lPVwidmFsdWVcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZG9ubHlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtaW52YWxpZF09XCJhcnJheUNvbnRyb2xJbnZhbGlkKCd0YXgnLCBqLCAndmFsdWUnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cInJlY2FsY3VsYXRlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZhbGlkLW1zZ1wiICpuZ0lmPVwiYXJyYXlDb250cm9sSW52YWxpZCgndGF4JywgaiwgJ3ZhbHVlJylcIj5UYXggJSBpcyByZXF1aXJlZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGZvcm0tZ3JvdXAgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaGVhZGluZ3RleHQgbWItMVwiPlRheCBBbW91bnQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwidGF4QW1vdW50XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByZWFkb25seT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBmb3JtLWdyb3VwIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImhlYWRpbmd0ZXh0IG1iLTFcIj5DdXJyZW5jeSBTeW1ib2w8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwiY3VycmVuY3lcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJlYWRvbmx5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gU3VtbWFyeSAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1bW1hcnktc2VjdGlvbiBwLTMgbXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdW1tYXJ5LWxhYmVsXCI+U3VidG90YWw8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdW1tYXJ5LXZhbHVlXCI+e3sgZ2V0Q3VycmVuY3lTeW1ib2woKSB9fSB7eyBnZXRTdWJ0b3RhbCgpIHwgbnVtYmVyOicxLjItMic6J2VuLUlOJyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtYi0yXCIgKm5nSWY9XCJnZXRBcHBsaWVkRGlzY291bnQoKSA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1bW1hcnktbGFiZWxcIj5EaXNjb3VudDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1bW1hcnktdmFsdWVcIj4tIHt7IGdldEN1cnJlbmN5U3ltYm9sKCkgfX0ge3sgZ2V0QXBwbGllZERpc2NvdW50KCkgfCBudW1iZXI6JzEuMi0yJzonZW4tSU4nIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG1iLTJcIiAqbmdJZj1cImdldFRvdGFsVGF4KCkgPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdW1tYXJ5LWxhYmVsXCI+VG90YWwgVGF4PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3VtbWFyeS12YWx1ZVwiPnt7IGdldEN1cnJlbmN5U3ltYm9sKCkgfX0ge3sgZ2V0VG90YWxUYXgoKSB8IG51bWJlcjonMS4yLTInOidlbi1JTicgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gc3VtbWFyeS10b3RhbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3VtbWFyeS1sYWJlbC1ib2xkXCI+VG90YWwgQW1vdW50PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3VtbWFyeS12YWx1ZS1ib2xkXCI+e3sgZ2V0Q3VycmVuY3lTeW1ib2woKSB9fSB7eyBnZXRUb3RhbEFtb3VudCgpIHwgbnVtYmVyOicxLjItMic6J2VuLUlOJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBBY3Rpb25zLiBDcmVkaXQgbm90ZXMgYWRkIGEgUHJldmlldyBvZiB0aGUgaW52b2ljZSBiZWluZyBjcmVkaXRlZFxyXG4gICAgICAgICAgICAgICAgICh0aHJlZSBidXR0b25zIHNoYXJlIHRoZSByb3cgaW5zdGVhZCBvZiB0d28gaGFsdmVzKS4gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggbXQtNFwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImFjdGl2ZU1vZGFsLmRpc21pc3MoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4tb3V0bGluZSBidG4gY2FuY2VsIG1lLTRcIiBbY2xhc3Mudy01MF09XCIhaXNDcmVkaXROb3RlXCIgW2NsYXNzLmZsZXgtZmlsbF09XCJpc0NyZWRpdE5vdGVcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwiaXNDcmVkaXROb3RlXCIgKGNsaWNrKT1cInByZXZpZXdTb3VyY2VJbnZvaWNlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhc291cmNlSW52b2ljZUlkXCJcclxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwic291cmNlSW52b2ljZUlkID8gJ1ByZXZpZXcgJyArIHNvdXJjZUludm9pY2VOdW1iZXIgOiAnU2VsZWN0IGFuIGludm9pY2UgZmlyc3QnXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1vdXRsaW5lIGJ0biBjYW5jZWwgbWUtNCBmbGV4LWZpbGxcIiBzdHlsZT1cIndoaXRlLXNwYWNlOiBub3dyYXA7XCI+UHJldmlldyBJbnZvaWNlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBbZGlzYWJsZWRdPVwic2F2aW5nIHx8IGV4Y2VlZHNDcmVkaXRCYWxhbmNlXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBweC00XCIgW2NsYXNzLnctNTBdPVwiIWlzQ3JlZGl0Tm90ZVwiIFtjbGFzcy5mbGV4LWZpbGxdPVwiaXNDcmVkaXROb3RlXCIgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogbm93cmFwO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXNhdmluZ1wiIGNsYXNzPVwic3VibWl0XCI+e3sgc3VibWl0TGFiZWwgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzYXZpbmdcIiBjbGFzcz1cInN1Ym1pdFwiPlNhdmluZy4uLjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Zvcm0+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PSBDUkVESVQgTk9URSBUQUIgPT09PT09PT09PT09PT09PT09PT09PT09IC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgbWItNFwiICpuZ0lmPVwiYWN0aXZlVGFiID09PSAnY3JlZGl0Tm90ZScgJiYgbW9kZSA9PT0gJ2VkaXQnXCI+XHJcbiAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJjcmVkaXROb3RlRm9ybVwiIGNsYXNzPVwiZm9ybVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudHRleHQgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgQXBwbHkgYSBjcmVkaXQgbm90ZSAvIGRpc2NvdW50IHRvIHRoaXMgaW52b2ljZS5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBweS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaGVhZGluZ3RleHQgbWItMlwiPkludm9pY2UgSUQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgW3ZhbHVlXT1cImludm9pY2VEYXRhPy5pbnZvaWNlXCIgcmVhZG9ubHk+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBweS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaGVhZGluZ3RleHQgbWItMlwiPlRvdGFsIEFtb3VudDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZG9sbGFyLXNpZ25cIj57eyBnZXRJbnZvaWNlQ3VycmVuY3lTeW1ib2woKSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cImFtb3VudFwiIHR5cGU9XCJ0ZXh0XCIgcmVhZG9ubHkgY2xhc3M9XCJmb3JtLWNvbnRyb2wgYW1vdW50LWlucHV0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB5LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaGVhZGluZ3RleHQgbWItMlwiPkRpc2NvdW50IEFtb3VudDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkb2xsYXItc2lnblwiPnt7IGdldEludm9pY2VDdXJyZW5jeVN5bWJvbCgpIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwiZGlzY291bnRBbW91bnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlwcmVzcyk9XCJvbWl0U3BlY2lhbENoYXJEZWNpbWFsKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGFtb3VudC1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY3JlZGl0TW9yZVRoYW5UZW5QZXJjZW50ID8gJ2Vycm9yaW5wdXQnIDogJydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwiY3JlZGl0TW9yZVRoYW5UZW5QZXJjZW50ID8gJ3RleHQtZGFuZ2VyJyA6ICdjb250ZW50dGV4dCdcIiBjbGFzcz1cInNtYWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIENyZWRpdCB2YWx1ZSBkZWR1Y3RlZCBmcm9tIHRoZSBpbnZvaWNlXHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImhlYWRpbmd0ZXh0IG1iLTJcIj5SZXZpc2VkIEFtb3VudDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkb2xsYXItc2lnblwiPnt7IGdldEludm9pY2VDdXJyZW5jeVN5bWJvbCgpIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwicmV2aXNlZEFtb3VudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXByZXNzKT1cIm9taXRTcGVjaWFsQ2hhckRlY2ltYWwoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgYW1vdW50LWlucHV0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjcmVkaXRNb3JlVGhhblRlblBlcmNlbnQgPyAnZXJyb3JpbnB1dCcgOiAnJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1pY29uXCIgKm5nSWY9XCJjcmVkaXRNb3JlVGhhblRlblBlcmNlbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwX2NuX2VycilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk03Ljk5OTY3IDUuMzMzMDFWNy45OTk2N003Ljk5OTY3IDEwLjY2NjNIOC4wMDYzNE0xNC42NjYzIDcuOTk5NjdDMTQuNjY2MyAxMS42ODE2IDExLjY4MTYgMTQuNjY2MyA3Ljk5OTY3IDE0LjY2NjNDNC4zMTc3OCAxNC42NjYzIDEuMzMzMDEgMTEuNjgxNiAxLjMzMzAxIDcuOTk5NjdDMS4zMzMwMSA0LjMxNzc4IDQuMzE3NzggMS4zMzMwMSA3Ljk5OTY3IDEuMzMzMDFDMTEuNjgxNiAxLjMzMzAxIDE0LjY2NjMgNC4zMTc3OCAxNC42NjYzIDcuOTk5NjdaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjRjA0NDM4XCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXBfY25fZXJyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwiY3JlZGl0TW9yZVRoYW5UZW5QZXJjZW50ID8gJ3RleHQtZGFuZ2VyJyA6ICdjb250ZW50dGV4dCdcIiBjbGFzcz1cInNtYWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEVudGVyIGEgdmFsaWQgcmV2aXNlZCBhbW91bnRcclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG10LTVcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJhY3RpdmVNb2RhbC5kaXNtaXNzKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuLW91dGxpbmUgYnRuIGNhbmNlbCBtZS00IHctNTBcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cImNyZWRpdE1vcmVUaGFuVGVuUGVyY2VudCB8fCBzYXZpbmdcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImFwcGx5Q3JlZGl0Tm90ZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBweC00IHctNTBcIiBzdHlsZT1cIndoaXRlLXNwYWNlOiBub3dyYXA7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhc2F2aW5nXCI+QXBwbHkgQ3JlZGl0IE5vdGU8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzYXZpbmdcIj5BcHBseWluZy4uLjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Zvcm0+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PSBPTkUgVElNRSBGRUUgVEFCID09PT09PT09PT09PT09PT09PT09PT09PSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IG1iLTRcIiAqbmdJZj1cImFjdGl2ZVRhYiA9PT0gJ29uZVRpbWVGZWUnICYmIG1vZGUgPT09ICdlZGl0J1wiPlxyXG4gICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwib25lVGltZUZlZUZvcm1cIiBjbGFzcz1cImZvcm1cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnR0ZXh0IG1iLTNcIj5cclxuICAgICAgICAgICAgICAgIEFkZCBhIG9uZS10aW1lIGZlZSAoZS5nLiBpbnN0YWxsYXRpb24pIHRvIHRoaXMgaW52b2ljZS5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBweS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaGVhZGluZ3RleHQgbWItMlwiPkludm9pY2UgSUQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgW3ZhbHVlXT1cImludm9pY2VEYXRhPy5pbnZvaWNlXCIgcmVhZG9ubHk+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBweS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaGVhZGluZ3RleHQgbWItMlwiPkN1cnJlbnQgSW52b2ljZSBBbW91bnQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRvbGxhci1zaWduXCI+e3sgZ2V0SW52b2ljZUN1cnJlbmN5U3ltYm9sKCkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJhbW91bnRcIiB0eXBlPVwidGV4dFwiIHJlYWRvbmx5IGNsYXNzPVwiZm9ybS1jb250cm9sIGFtb3VudC1pbnB1dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImhlYWRpbmd0ZXh0IG1iLTJcIj5PbmUgVGltZSBGZWUgKEluc3RhbGxhdGlvbik8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZG9sbGFyLXNpZ25cIj57eyBnZXRJbnZvaWNlQ3VycmVuY3lTeW1ib2woKSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cIm9uZVRpbWVGZWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlwcmVzcyk9XCJvbWl0U3BlY2lhbENoYXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgYW1vdW50LWlucHV0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIGZlZSBhbW91bnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtc3RhY2sgbXQtMyBmZWUtc3VtbWFyeSBwLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VtbWFyeS1sYWJlbFwiPlNlbGVjdGVkIEludm9pY2UgQW1vdW50ICsgT25lIFRpbWUgRmVlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdW1tYXJ5LXZhbHVlLWJvbGRcIj57eyBnZXRJbnZvaWNlQ3VycmVuY3lTeW1ib2woKSB9fXt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmVUaW1lRmVlVG90YWwgfCBudW1iZXI6JzEuMi0yJzonZW4tSU4nIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBtdC01XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiYWN0aXZlTW9kYWwuZGlzbWlzcygpXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1vdXRsaW5lIGJ0biBjYW5jZWwgbWUtNCB3LTUwXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJzYXZpbmcgfHwgIW9uZVRpbWVGZWVGb3JtLmdldCgnb25lVGltZUZlZScpPy52YWx1ZVwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhcHBseU9uZVRpbWVGZWUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgcHgtNCB3LTUwXCIgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogbm93cmFwO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXNhdmluZ1wiPkFwcGx5IEZlZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNhdmluZ1wiPkFwcGx5aW5nLi4uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZm9ybT5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=
|
|
1615
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC1pbnZvaWNlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLW1hbmFnZS1iaWxsaW5nL3NyYy9saWIvY29tcG9uZW50cy90YW5nby1tYW5hZ2UtYmlsbGluZy9lZGl0LWludm9pY2UvZWRpdC1pbnZvaWNlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLW1hbmFnZS1iaWxsaW5nL3NyYy9saWIvY29tcG9uZW50cy90YW5nby1tYW5hZ2UtYmlsbGluZy9lZGl0LWludm9pY2UvZWRpdC1pbnZvaWNlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLEtBQUssRUFBaUMsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpILE9BQU8sRUFBd0UsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEgsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHMUMsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDdEcsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0saURBQWlELENBQUM7Ozs7Ozs7QUFPMUYsTUFBTSxPQUFPLG9CQUFvQjtJQWtHdEI7SUFDQztJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUF2R0QsV0FBVyxDQUFNO0lBQzFCLDBFQUEwRTtJQUMxRSwyRUFBMkU7SUFDM0UsNkVBQTZFO0lBQzdFLDRFQUE0RTtJQUNuRSxJQUFJLEdBQXNGLE1BQU0sQ0FBQztJQUNqRyxRQUFRLEdBQVcsRUFBRSxDQUFDO0lBQ3RCLGFBQWEsR0FBVSxFQUFFLENBQUM7SUFFbkMsMEVBQTBFO0lBQzFFLDZFQUE2RTtJQUM3RSw2RUFBNkU7SUFDN0UsNkVBQTZFO0lBQzdFLGtCQUFrQjtJQUNsQixrQkFBa0IsR0FBVSxFQUFFLENBQUM7SUFDL0IsYUFBYSxHQUFRLElBQUksQ0FBQztJQUMxQixpQkFBaUIsR0FBa0IsSUFBSSxDQUFDO0lBQ3hDLGdCQUFnQixHQUFZLEtBQUssQ0FBQztJQUNsQyxrQkFBa0IsR0FBWSxLQUFLLENBQUM7SUFFcEMsMkVBQTJFO0lBQzNFLG1EQUFtRDtJQUNuRCw0RUFBNEU7SUFDNUUsZ0NBQWdDO0lBQ2hDLHlEQUF5RDtJQUN6RCxrRUFBa0U7SUFDbEUsVUFBVSxHQUF5QyxFQUFFLENBQUM7SUFDN0MsaUJBQWlCLEdBQUc7UUFDM0IsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxtQkFBbUIsRUFBRTtRQUNoRCxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFO1FBQzVDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsd0JBQXdCLEVBQUU7S0FDN0MsQ0FBQztJQUNYLDBFQUEwRTtJQUMxRSx3RUFBd0U7SUFDeEUsMEVBQTBFO0lBQzFFLHlFQUF5RTtJQUN6RSxvQkFBb0I7SUFDcEIsaUJBQWlCLEdBQXNGLEVBQUUsQ0FBQztJQUMxRyxlQUFlLEdBQTZDLEVBQUUsQ0FBQztJQUMvRCxhQUFhLEdBQTZELEVBQUUsQ0FBQztJQUM3RSxpQkFBaUIsR0FBK0QsRUFBRSxDQUFDO0lBQ25GLG1CQUFtQixHQUFXLENBQUMsQ0FBQztJQUNoQyxnQkFBZ0IsR0FBWSxLQUFLLENBQUM7SUFDbEMsMEVBQTBFO0lBQzFFLCtFQUErRTtJQUMvRSw2Q0FBNkM7SUFDN0MsY0FBYyxHQUFhLEVBQUUsQ0FBQztJQUM5QixpQkFBaUIsR0FBWSxLQUFLLENBQUM7SUFDbkMsMEVBQTBFO0lBQzFFLHdDQUF3QztJQUN4QyxVQUFVLEdBQVcsRUFBRSxDQUFDO0lBQ3hCLFdBQVcsR0FBVyxFQUFFLENBQUM7SUFFekIsV0FBVyxDQUFhO0lBQ1AsUUFBUSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFDMUMsTUFBTSxHQUFZLEtBQUssQ0FBQztJQUV4Qix1Q0FBdUM7SUFDdkMsU0FBUyxHQUFXLE1BQU0sQ0FBQztJQUUzQixRQUFRLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3BDLGVBQWUsR0FBRyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3RFLGNBQWMsR0FBMkI7UUFDdkMsR0FBRyxFQUFFLFNBQVM7UUFDZCxNQUFNLEVBQUUsU0FBUztRQUNqQixlQUFlLEVBQUUsVUFBVTtRQUMzQixJQUFJLEVBQUUsU0FBUztRQUNmLEdBQUcsRUFBRSxXQUFXO0tBQ2pCLENBQUM7SUFDRiw0RUFBNEU7SUFDNUUsMEVBQTBFO0lBQzFFLHNDQUFzQztJQUNyQixlQUFlLEdBQTJCO1FBQ3pELEdBQUcsRUFBRSxHQUFHO1FBQ1IsTUFBTSxFQUFFLEdBQUc7UUFDWCxlQUFlLEVBQUUsSUFBSTtRQUNyQixJQUFJLEVBQUUsR0FBRztRQUNULEdBQUcsRUFBRSxLQUFLO0tBQ1gsQ0FBQztJQUNGLGFBQWEsR0FBRyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN4QyxvQkFBb0IsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUUxQyxjQUFjO0lBQ2QsY0FBYyxDQUFhO0lBQzNCLHdCQUF3QixHQUFZLEtBQUssQ0FBQztJQUUxQyw2QkFBNkI7SUFDN0IsaUJBQWlCLEdBQVUsRUFBRSxDQUFDO0lBRTlCLGVBQWU7SUFDZixjQUFjLENBQWE7SUFDM0IsZUFBZSxHQUFXLENBQUMsQ0FBQztJQUU1Qiw2RUFBNkU7SUFDckUsZ0JBQWdCLEdBQVcsS0FBSyxDQUFDO0lBRXpDLFlBQ1MsV0FBMkIsRUFDMUIsRUFBZSxFQUNmLGNBQThCLEVBQzlCLGNBQWlDLEVBQ2pDLEtBQW1CLEVBQ25CLE9BQW1CLEVBQ25CLFlBQXNCO1FBTnZCLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUMxQixPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2YsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQUNqQyxVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQ25CLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFDbkIsaUJBQVksR0FBWixZQUFZLENBQVU7SUFDN0IsQ0FBQztJQUVKLDZFQUE2RTtJQUM3RSx1RUFBdUU7SUFDL0QsZUFBZSxDQUFDLFdBQW1CO1FBQ3pDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxNQUFNLElBQUksR0FBZ0IsSUFBSSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUM7WUFDdEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxFQUFFLGdCQUFnQixDQUFDLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQztZQUN4RCxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFpQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDakYsSUFBSSxJQUFJLEVBQUU7Z0JBQ1IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7YUFDOUQ7UUFDSCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDNUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1NBQ2hDO2FBQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGNBQWMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQzNELHlFQUF5RTtZQUN6RSxvRUFBb0U7WUFDcEUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2pCLHdFQUF3RTtZQUN4RSxzRUFBc0U7WUFDdEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUM7Z0JBQzFCLFdBQVcsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUM7Z0JBQ2xFLE9BQU8sRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUM7YUFDN0QsQ0FBQyxDQUFDO1NBQ0o7YUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO1lBQ2pDLHlFQUF5RTtZQUN6RSx5RUFBeUU7WUFDekUsd0RBQXdEO1lBQ3hELElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xGLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN2QjthQUFNLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxZQUFZLEVBQUU7WUFDckMseUVBQXlFO1lBQ3pFLGlFQUFpRTtZQUNqRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xGLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1NBQy9CO2FBQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDN0Qsc0VBQXNFO1lBQ3RFLGtCQUFrQjtZQUNsQixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO2dCQUMxQixXQUFXLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDO2dCQUNyRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLElBQUksRUFBRTthQUN0QyxDQUFDLENBQUM7WUFDSCx3RUFBd0U7WUFDeEUscUVBQXFFO1lBQ3JFLHlDQUF5QztZQUN6QyxNQUFNLEtBQUssR0FBVSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7WUFDdEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsSUFBSSxTQUFTLENBQUM7WUFDM0QsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLE9BQU8sRUFBRTtnQkFDL0IsdUVBQXVFO2dCQUN2RSwrQ0FBK0M7Z0JBQy9DLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3hELElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDL0U7WUFDRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xGLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3RELElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1NBQy9CO1FBQ0QsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLHFEQUFxRDtZQUNyRCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztTQUNqRTtJQUNILENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQztRQUN4RCxJQUFJLEdBQUcsRUFBRTtZQUNQLElBQUksQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQ3JGLElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUNqQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQ3pDLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3RDLENBQUM7Z0JBQ0QsS0FBSyxFQUFFLEdBQUcsRUFBRTtvQkFDVixJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO2dCQUM5QixDQUFDO2FBQ0YsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQWE7UUFDM0IsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0MsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxLQUFLLENBQUM7UUFDNUQsNkVBQTZFO1FBQzdFLG9FQUFvRTtRQUNwRSxJQUFJLFlBQVksS0FBSyxZQUFZLEVBQUU7WUFDakMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3hGLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEIsT0FBTztTQUNSO1FBQ0QsWUFBWSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEtBQUssWUFBWSxDQUFDLENBQUM7UUFDakYsSUFBSSxPQUFPLEVBQUU7WUFDWCxZQUFZLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkQsd0NBQXdDO1lBQ3hDLE1BQU0sWUFBWSxHQUEyQjtnQkFDM0MsWUFBWSxFQUFFLDZCQUE2QjtnQkFDM0MsU0FBUyxFQUFFLG9DQUFvQztnQkFDL0MsU0FBUyxFQUFFLDRCQUE0QjtnQkFDdkMsZUFBZSxFQUFFLGtCQUFrQjthQUNwQyxDQUFDO1lBQ0YsWUFBWSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzVFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDekI7SUFDSCxDQUFDO0lBRUQsNEVBQTRFO0lBQzVFLHVDQUF1QztJQUN2QyxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxlQUFlLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsaUJBQWlCLENBQUMsSUFBWTtRQUM1QixJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3JCLDZFQUE2RTtRQUM3RSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDO2FBQzVDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxpQkFBaUI7UUFDZixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDO1FBQ3hELElBQUksR0FBRyxFQUFFO1lBQ1AsSUFBSSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDcEYsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7b0JBQ2pCLElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQ3JDLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3RDLENBQUM7Z0JBQ0QsS0FBSyxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7b0JBQ2xCLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO29CQUN4QixzRUFBc0U7b0JBQ3RFLHlEQUF5RDtvQkFDekQsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRTt3QkFDdEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxPQUFPLElBQUksaURBQWlELENBQUMsQ0FBQztxQkFDcEc7Z0JBQ0gsQ0FBQzthQUNGLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxNQUFNLENBQUMsR0FBVztRQUNoQixJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztJQUN2QixDQUFDO0lBRUQscUVBQXFFO0lBRXJFLElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxZQUFZLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQztJQUN0RSxDQUFDO0lBRUQscUVBQXFFO0lBQ3JFLDBDQUEwQztJQUMxQyxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1RCxDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsTUFBTSxRQUFRLEdBQTJCO1lBQ3ZDLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxtQkFBbUI7WUFDeEUsWUFBWSxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsb0JBQW9CLEVBQUUsY0FBYyxFQUFFLGFBQWE7U0FDL0YsQ0FBQztRQUNGLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsTUFBTSxNQUFNLEdBQTJCO1lBQ3JDLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLG1CQUFtQjtZQUMvRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLG9CQUFvQixFQUFFLGNBQWMsRUFBRSxvQkFBb0I7U0FDeEcsQ0FBQztRQUNGLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsb0RBQW9EO0lBQ3BELElBQUksbUJBQW1CO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDO0lBQ2xHLENBQUM7SUFFRCx1RUFBdUU7SUFDdkUsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDO0lBQ2hHLENBQUM7SUFFRCwyRUFBMkU7SUFDM0UsOERBQThEO0lBQzlELG9CQUFvQjtRQUNsQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxTQUFTO1lBQUUsT0FBTztRQUN2QixJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNyRixJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUU7b0JBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUMsQ0FBQztvQkFDbkQsT0FBTztpQkFDUjtnQkFDRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRTtvQkFDL0QsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJO2lCQUM3QyxDQUFDLENBQUM7Z0JBQ0gsUUFBUSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQ3BELENBQUM7WUFDRCxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUM7U0FDaEUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELDRFQUE0RTtJQUM1RSx1Q0FBdUM7SUFDdkMsSUFBSSxvQkFBb0I7UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLGlCQUFpQixLQUFLLElBQUk7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN4RSxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0lBQ2hFLENBQUM7SUFFRCw0RUFBNEU7SUFDNUUsNkVBQTZFO0lBQzdFLDRFQUE0RTtJQUM1RSwwRUFBMEU7SUFDMUUsMkVBQTJFO0lBQzNFLHFCQUFxQjtJQUNyQixJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBYyxDQUFDO0lBQ3hELENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFFRCx3RUFBd0U7SUFDeEUsd0RBQXdEO0lBQ3hELG1CQUFtQixDQUFDLElBQVM7UUFDM0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsSUFBSSxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDaEYsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3RELE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDbkIsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLFdBQVcsSUFBSSxFQUFFLENBQUM7WUFDdEMsT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLE9BQU8sSUFBSSxFQUFFLENBQUM7WUFDOUIsU0FBUyxFQUFFLENBQUMsSUFBSSxFQUFFLFNBQVMsSUFBSSxFQUFFLENBQUM7WUFDbEMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUM7WUFDOUIsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sSUFBSSxFQUFFLENBQUM7WUFDNUIsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLFdBQVcsSUFBSSxFQUFFLENBQUM7WUFDdEMsS0FBSyxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUNoRCxTQUFTLEVBQUUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxJQUFJLFFBQVEsQ0FBQztZQUN4QyxvQkFBb0I7WUFDcEIsY0FBYyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEUsbUVBQW1FO1lBQ25FLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDO1lBQ3hDLE1BQU0sRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzNELEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxLQUFzQixFQUEyQixFQUFFO2dCQUNuRSxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDN0QsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQzdDLE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUMvRCxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELHlFQUF5RTtJQUN6RSxtRUFBbUU7SUFDbkUsaUJBQWlCLENBQUMsS0FBYTtRQUM3QixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUFhO1FBQzdCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVPLGNBQWMsQ0FBQyxLQUFhO1FBQ2xDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25DLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuRCxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLENBQUMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBYSxFQUFFLElBQVk7UUFDekMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pELE9BQU8sQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDaEQsQ0FBQztJQUVELGlCQUFpQixDQUFDLEtBQWE7UUFDN0IsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsUUFBUSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELHdFQUF3RTtJQUN4RSxTQUFTLENBQUMsS0FBYTtRQUNyQixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ2hELElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRTtZQUNqQixNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQ3ZDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxNQUFNLFNBQVMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDL0c7UUFDRCxJQUFJLENBQUMsQ0FBQyxTQUFTO1lBQUUsT0FBTyxlQUFlLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUM7UUFDcEcsSUFBSSxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxPQUFPO1lBQUUsT0FBTyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDOUQsT0FBTyxXQUFXLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxTQUFTLEVBQUUsQ0FBQztJQUM1RCxDQUFDO0lBRUQseUVBQXlFO0lBQ3pFLDBEQUEwRDtJQUMxRCxnQkFBZ0IsQ0FBQyxLQUFhO1FBQzVCLE9BQU8sSUFBSSxDQUFDLFVBQVUsS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxLQUFLLENBQUM7SUFDOUYsQ0FBQztJQUVELG1DQUFtQztJQUNuQyxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0csQ0FBQztJQUVELDRFQUE0RTtJQUM1RSw0RUFBNEU7SUFDNUUsSUFBSSxlQUFlO1FBQ2pCLElBQUksSUFBSSxDQUFDLGlCQUFpQixLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUI7WUFBRSxPQUFPLENBQUMsQ0FBQztRQUMzRSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUVELHlEQUF5RDtJQUN6RCxvQkFBb0IsQ0FBQyxTQUFpQjtRQUNwQyxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU87UUFDdkIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUM3QixJQUFJLENBQUMsY0FBYyxDQUFDLDBCQUEwQixDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ2pHLElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNqQixNQUFNLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO2dCQUMxQyxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO2dCQUN0QyxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDO2dCQUMzQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7Z0JBQzNDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDeEQsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7b0JBQzFCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDbEU7Z0JBQ0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztnQkFDOUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN0QyxDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBTyxJQUFJLG1EQUFtRCxDQUFDLENBQUM7Z0JBQ3JHLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdEMsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCw0RUFBNEU7SUFDNUUsd0RBQXdEO0lBQ3hELGtCQUFrQixDQUFDLElBQXFDO1FBQ3RELElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJO1lBQUUsT0FBTztRQUNyQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdkIsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO1lBQ3RCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN2QjthQUFNO1lBQ0wsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7U0FDekI7SUFDSCxDQUFDO0lBRUQsWUFBWSxDQUFDLEdBQVc7UUFDdEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDckQsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELDJEQUEyRDtJQUUzRCxlQUFlLENBQUMsS0FBWTtRQUMxQixJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBRSxLQUFLLENBQUMsTUFBc0IsRUFBRSxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUM5RSxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztTQUN0QjtJQUNILENBQUM7SUFFTyxhQUFhLENBQUMsQ0FBeUM7UUFDN0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuRCxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JHLENBQUM7SUFFTyxZQUFZLENBQUMsUUFBa0IsRUFBRSxLQUErQyxFQUFFLElBQVk7UUFDcEcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDbEMsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6RyxPQUFPLEdBQUcsUUFBUSxDQUFDLE1BQU0sa0JBQWtCLENBQUM7SUFDOUMsQ0FBQztJQUVELDJFQUEyRTtJQUMzRSx1RUFBdUU7SUFDdkUsbURBQW1EO0lBQ25ELElBQUksaUJBQWlCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFVBQVUsS0FBSyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCO1lBQzVELElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUM7SUFDMUQsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNqRyxJQUFJLENBQUMsZUFBZSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELGlCQUFpQixDQUFDLEtBQWE7UUFDN0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELDZFQUE2RTtJQUM3RSxpQkFBaUIsQ0FBQyxLQUFhO1FBQzdCLE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUTthQUNsRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDO2FBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxLQUFLLENBQUM7YUFDdkMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDcEIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDakYsQ0FBQztJQUVELDRFQUE0RTtJQUM1RSw4Q0FBOEM7SUFDOUMsbUJBQW1CLENBQUMsS0FBYTtRQUMvQixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbEcsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztZQUNYLE1BQU0sRUFBRSxFQUFFO1lBQ1YsV0FBVyxFQUFFLE9BQU8sRUFBRSxXQUFXLElBQUksRUFBRTtZQUN2QyxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsSUFBSSxRQUFRO1lBQ3pDLGNBQWMsRUFBRSxRQUFRO1lBQ3hCLE1BQU0sRUFBRSxDQUFDO1lBQ1QsTUFBTSxFQUFFLFFBQVE7U0FDakIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVPLFlBQVksQ0FBQyxLQUFhO1FBQ2hDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ25HLENBQUM7SUFFRCwyRUFBMkU7SUFDM0UsZ0JBQWdCLENBQUMsS0FBYTtRQUM1QixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNoRyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQsbUJBQW1CLENBQUMsS0FBYSxFQUFFLE9BQWU7UUFDaEQsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBYTtRQUM1QixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNoRyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUN0RyxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQWEsRUFBRSxLQUE2QztRQUMxRSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxNQUFNLE9BQU8sR0FBVSxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDcEQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQzNELENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDcEQsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEIsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQWE7UUFDM0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCw2RUFBNkU7SUFDN0UsMkVBQTJFO0lBQzNFLDZDQUE2QztJQUNyQyxrQkFBa0IsQ0FBQyxLQUFhO1FBQ3RDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25DLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUUsS0FBSyxDQUFDO1FBQ2hELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEtBQUssV0FBVyxDQUFDLENBQUM7UUFDbEYsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3hGLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZFLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdGLENBQUM7SUFFRCx3RUFBd0U7SUFDeEUsNEVBQTRFO0lBQzVFLFdBQVcsQ0FBQyxPQUFlO1FBQ3pCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDbkUsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztZQUM3QyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLE9BQU8sQ0FBQztZQUN0QyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMxQixvREFBb0Q7UUFDcEQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxNQUFNLENBQUM7UUFDckYsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDL0IsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGVBQWUsQ0FBQyxPQUFlO1FBQzdCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxJQUFJLGtCQUFrQjtRQUNwQixJQUFJLElBQUksQ0FBQyxpQkFBaUI7WUFBRSxPQUFPLGVBQWUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUNqRixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFRCw0RUFBNEU7SUFDNUUsMEVBQTBFO0lBQ2xFLFNBQVMsQ0FBQyxRQUF5QixFQUFFLFdBQTBCO1FBQ3JFLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNoRCxNQUFNLEdBQUcsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzNELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCO2FBQ3RDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLFdBQVcsS0FBSyxHQUFHLENBQUMsQ0FBQzthQUM5RSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELHVFQUF1RTtJQUN2RSwyRUFBMkU7SUFDM0Usb0VBQW9FO0lBQzVELGdCQUFnQjtRQUN0QixNQUFNLEtBQUssR0FBRyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDckYsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQWMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdHLElBQUksS0FBSyxHQUFVLEVBQUUsQ0FBQztRQUN0QixJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssT0FBTyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUN6RCw2Q0FBNkM7WUFDN0MsS0FBSyxHQUFHLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNwRzthQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxPQUFPLEVBQUU7WUFDdEMsS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlO2lCQUN6QixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDdEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDcEg7YUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFO1lBQ3hDLEtBQUssR0FBRyxDQUFDLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUM7U0FDeEQ7UUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3ZCLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFO1lBQ3hCLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDdEMsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hGLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztnQkFDM0MsR0FBRyxJQUFJO2dCQUNQLFdBQVcsRUFBRSxHQUFHLEVBQUUsV0FBVyxJQUFJLEVBQUU7Z0JBQ25DLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtnQkFDN0MsU0FBUyxFQUFFLEdBQUcsRUFBRSxTQUFTO2dCQUN6QixNQUFNO2FBQ1AsQ0FBQyxDQUFDLENBQUM7U0FDTDtRQUNELElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVELDBFQUEwRTtJQUMxRSx1RUFBdUU7SUFDL0QsbUJBQW1CLENBQUMsR0FBUTtRQUNsQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztZQUMxQixXQUFXLEVBQUUsR0FBRyxDQUFDLFdBQVcsSUFBSSxFQUFFO1lBQ2xDLGNBQWMsRUFBRSxHQUFHLENBQUMsY0FBYyxJQUFJLEVBQUU7WUFDeEMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTLElBQUksRUFBRTtZQUM5QixhQUFhLEVBQUUsR0FBRyxDQUFDLGFBQWEsSUFBSSxFQUFFO1lBQ3RDLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUyxJQUFJLEVBQUU7WUFDOUIsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPLElBQUksRUFBRTtZQUMxQixRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVEsSUFBSSxLQUFLO1NBQ2hDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCwwREFBMEQ7SUFDMUQsaUJBQWlCLENBQUMsR0FBUTtRQUN4QixPQUFPLE1BQU0sQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxHQUFRO1FBQ3pCLE1BQU0sSUFBSSxHQUFHLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoSixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDO1lBQ3RDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxFQUFFLHFCQUFxQixFQUFFLENBQUMsRUFBRSxDQUFDLGFBQWE7WUFDM0gsQ0FBQyxDQUFDLGdCQUFnQixDQUFDO1FBQ3JCLDBEQUEwRDtRQUMxRCxNQUFNLE9BQU8sR0FBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQTZCLENBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNwSSxNQUFNLEtBQUssR0FBRztZQUNaLEdBQUcsR0FBRyxFQUFFLE9BQU8sR0FBRyxHQUFHLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUMzRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNwRCxJQUFJO1lBQ0osT0FBTztZQUNQLElBQUk7U0FDTCxDQUFDO1FBQ0YsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsNkVBQTZFO0lBQzdFLDBFQUEwRTtJQUMxRSwwRUFBMEU7SUFDMUUsaURBQWlEO0lBQ2pELGFBQWE7UUFDWCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxLQUFLLENBQUM7UUFDM0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxTQUFTLENBQUMsQ0FBQztRQUNqRixJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBQ3BCLElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUN0RSxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7U0FDMUI7UUFDRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDckYsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2pCLE1BQU0sT0FBTyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxPQUFPLEVBQUU7b0JBQ1osSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUMsQ0FBQztvQkFDbkQsT0FBTztpQkFDUjtnQkFDRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDO2dCQUM1QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdEMsQ0FBQztZQUNELEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQztTQUNoRSxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsMkVBQTJFO0lBQ25FLHFCQUFxQixDQUFDLFlBQW9CLEVBQUU7UUFDbEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztZQUMxQixTQUFTLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsY0FBYyxFQUFFLEVBQUU7WUFDMUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFO1NBQzdDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztRQUMvQixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQscUVBQXFFO0lBQ3JFLHNCQUFzQjtRQUNwQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdkYsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0I7WUFBRSxPQUFPO1FBQzNDLElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDbkYsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxHQUFHLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDMUMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixFQUFFO29CQUNsQyxnRUFBZ0U7b0JBQ2hFLDJEQUEyRDtvQkFDM0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO29CQUNuRyxJQUFJLE1BQU0sRUFBRTt3QkFDVixJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7cUJBQ3ZHO2lCQUNGO2dCQUNELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdEMsQ0FBQztZQUNELEtBQUssRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNsQixxRUFBcUU7Z0JBQ3JFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBTyxJQUFJLHlCQUF5QixDQUFDLENBQUM7Z0JBQzNFLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdEMsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCwyREFBMkQ7SUFFM0QsUUFBUTtRQUNOLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDL0IsMEVBQTBFO1lBQzFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3RFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNaLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQ3RDLGNBQWMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNwQixTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDZixhQUFhLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDbkIsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ2Ysb0VBQW9FO1lBQ3BFLHdFQUF3RTtZQUN4RSxxQ0FBcUM7WUFDckMsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3BGLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JELFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQ3RDLGlDQUFpQztZQUNqQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQzNELDBFQUEwRTtZQUMxRSx3RUFBd0U7WUFDeEUseUVBQXlFO1lBQ3pFLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNqQixRQUFRLEVBQUUsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUN0QyxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUM7WUFDbkIsYUFBYSxFQUFFLENBQUMsUUFBUSxDQUFDO1lBQ3pCLHNFQUFzRTtZQUN0RSxxRUFBcUU7WUFDckUsY0FBYyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ3ZCLGFBQWEsRUFBRSxDQUFDLFNBQVMsQ0FBQztZQUMxQiwyRUFBMkU7WUFDM0UsbUJBQW1CLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDekIsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMzQixHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3RCLHlEQUF5RDtZQUN6RCxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1NBQzdCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCwwRUFBMEU7SUFDMUUsNEVBQTRFO0lBQzVFLDZFQUE2RTtJQUM3RSw2RUFBNkU7SUFDN0Usb0VBQW9FO0lBQ3BFLElBQUksT0FBTztRQUNULElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7WUFDeEIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxNQUFNLEtBQUssZ0JBQWdCLEVBQUU7WUFDakQsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUM1QyxPQUFPLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxpRUFBaUU7SUFDakUsY0FBYyxHQUFVLEVBQUUsQ0FBQztJQUUzQixrQkFBa0I7UUFDaEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQztRQUN4RCxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1IsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNsRixJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxDQUFDLGNBQWMsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLGNBQWMsSUFBSSxFQUFFLENBQUM7WUFDeEQsQ0FBQztZQUNELEtBQUssRUFBRSxHQUFHLEVBQUU7Z0JBQ1YsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7WUFDM0IsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxvQkFBb0IsR0FBRztRQUNyQixFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLHNCQUFzQixFQUFFO1FBQ25ELEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsMkJBQTJCLEVBQUU7UUFDMUQsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSw2QkFBNkIsRUFBRTtRQUM3RCxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLHlCQUF5QixFQUFFO0tBQ3RELENBQUM7SUFFRiwyRUFBMkU7SUFDM0UsMkVBQTJFO0lBQzNFLDREQUE0RDtJQUM1RCxjQUFjLENBQUMsSUFBWTtRQUN6QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxPQUFPLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ2hELENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxTQUE2QixFQUFFLEtBQWEsRUFBRSxJQUFZO1FBQzVFLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBcUIsQ0FBQztRQUNqRSxNQUFNLElBQUksR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxPQUFPLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ2hELENBQUM7SUFFTyxvQkFBb0I7UUFDMUIsMEVBQTBFO1FBQzFFLHdFQUF3RTtRQUN4RSw0QkFBNEI7UUFDNUIsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sS0FBSyxHQUFHLElBQUksRUFBRSxhQUFhLENBQUMsYUFBYSxDQUF1QixDQUFDO1FBQ3ZFLElBQUksS0FBSyxFQUFFO1lBQ1QsS0FBSyxDQUFDLGNBQWMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDOUQsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLEtBQUssVUFBVSxFQUFFO2dCQUNyQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7YUFDdEM7U0FDRjtJQUNILENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBYyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBYyxDQUFDO0lBQ2xELENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxPQUFhO1FBQzlCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDbkIsV0FBVyxFQUFFLENBQUMsT0FBTyxFQUFFLFdBQVcsSUFBSSxFQUFFLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUM5RCwyRUFBMkU7WUFDM0Usc0VBQXNFO1lBQ3RFLG9CQUFvQjtZQUNwQixRQUFRLEVBQUUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxJQUFJLEtBQUssQ0FBQztZQUN0QyxXQUFXLEVBQUUsQ0FBQyxPQUFPLEVBQUUsV0FBVyxJQUFJLEVBQUUsQ0FBQztZQUN6QyxLQUFLLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUM3QixTQUFTLEVBQUUsQ0FBQyxPQUFPLEVBQUUsU0FBUyxJQUFJLFFBQVEsQ0FBQztZQUMzQyxVQUFVLEVBQUUsQ0FBQyxPQUFPLEVBQUUsVUFBVSxJQUFJLENBQUMsRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pELEtBQUssRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEUsTUFBTSxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUM7WUFDOUIsTUFBTSxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sSUFBSSxTQUFTLENBQUM7U0FDdkMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWMsQ0FBQyxHQUFTO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDbkIseUVBQXlFO1lBQ3pFLDJFQUEyRTtZQUMzRSw2QkFBNkI7WUFDN0IsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksSUFBSSxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDM0UsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssSUFBSSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3hGLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxTQUFTLElBQUksR0FBRyxDQUFDO1lBQ2xDLHNFQUFzRTtZQUN0RSwrREFBK0Q7WUFDL0QsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLFFBQVEsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3RGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxTQUFTLENBQUMsSUFBK0I7UUFDL0MsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUM7SUFDakQsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxlQUFlLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQWE7UUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFDMUMsNEVBQTRFO1FBQzVFLHFFQUFxRTtRQUNyRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQWE7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCwwRUFBMEU7SUFDMUUsMEVBQTBFO0lBQzFFLHlCQUF5QjtJQUN6QixlQUFlLENBQUMsS0FBYTtRQUMzQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QyxNQUFNLElBQUksR0FBRyxLQUFLLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssQ0FBQztRQUN2QyxNQUFNLFdBQVcsR0FBRyxJQUFJLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2hFLEtBQUssRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsc0VBQXNFO0lBQ3RFLDBCQUEwQjtJQUMxQixTQUFTLENBQUMsTUFBVyxJQUFJLENBQUMsV0FBVztRQUVuQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztZQUMxQixXQUFXLEVBQUUsR0FBRyxDQUFDLFdBQVcsSUFBSSxFQUFFO1lBQ2xDLGNBQWMsRUFBRSxHQUFHLENBQUMsY0FBYyxJQUFJLEVBQUU7WUFDeEMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTLElBQUksRUFBRTtZQUM5QixhQUFhLEVBQUUsR0FBRyxDQUFDLGFBQWEsSUFBSSxFQUFFO1lBQ3RDLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUyxJQUFJLEVBQUU7WUFDOUIsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPLElBQUksRUFBRTtZQUMxQixNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDO1lBQ3ZCLFdBQVcsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQztZQUNyRCxPQUFPLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7WUFDN0MsUUFBUSxFQUFFLEdBQUcsQ0FBQyxRQUFRLElBQUksS0FBSztZQUMvQixNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sSUFBSSxTQUFTO1lBQy9CLGFBQWEsRUFBRSxHQUFHLENBQUMsYUFBYSxJQUFJLFFBQVE7WUFDNUMsbUJBQW1CLEVBQUUsR0FBRyxDQUFDLG1CQUFtQixJQUFJLEVBQUU7U0FDbkQsQ0FBQyxDQUFDO1FBQ0gsb0VBQW9FO1FBQ3BFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQztRQUU5QyxpQkFBaUI7UUFDakIsSUFBSSxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRTtZQUN4QixHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO2dCQUM5QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqRCxDQUFDLENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7U0FDbkI7UUFFRCx5RUFBeUU7UUFDekUsMkVBQTJFO1FBQzNFLHdFQUF3RTtRQUN4RSw2RUFBNkU7UUFDN0UsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM3RSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7WUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGtCQUFrQixDQUFDLElBQVM7UUFDMUIsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUNyQixNQUFNLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDO1FBQ3hDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ2xDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsOEVBQThFO0lBQzlFLDhFQUE4RTtJQUM5RSxzQkFBc0I7SUFDdEIsY0FBYztRQUNaLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEtBQUssQ0FBQztRQUMzRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFBRSxPQUFPO1NBQUU7UUFDekIsTUFBTSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUIsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUU7WUFBRSxPQUFPO1NBQUU7UUFDbkMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM3RixDQUFDO0lBRUQsMkVBQTJFO0lBQzNFLDRFQUE0RTtJQUM1RSwrRUFBK0U7SUFDL0UsK0JBQStCO0lBQy9CLGdCQUFnQixDQUFDLEtBQVU7UUFDekIsTUFBTSxXQUFXLEdBQUcsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUM7UUFDekMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQzFDLElBQUksQ0FBQyxXQUFXLElBQUksV0FBVyxLQUFLLFdBQVcsRUFBRTtZQUMvQyxPQUFPO1NBQ1I7UUFDRCxNQUFNLEtBQUssR0FBRyxDQUFDLENBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsNEJBQTRCLEVBQUU7WUFDcEUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJO1NBQzdDLENBQUMsQ0FBQztRQUNILFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEdBQUcsMEJBQTBCLENBQUM7UUFDOUQsUUFBUSxDQUFDLGlCQUFpQixDQUFDLFdBQVc7WUFDcEMsK0JBQStCLEtBQUssQ0FBQyxXQUFXLENBQUMsa0JBQWtCLEtBQUssQ0FBQyxXQUFXLENBQUMsMkdBQTJHLENBQUM7UUFDbk0sUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRTtZQUNuQyxJQUFJLE1BQU0sS0FBSyxLQUFLLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7YUFDdkQ7aUJBQU07Z0JBQ0wsK0RBQStEO2dCQUMvRCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLENBQUMsV0FBVyxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7YUFDL0U7UUFDSCxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsUUFBUSxDQUFDLFdBQVcsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ2hGLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHdFQUF3RTtJQUN4RSxxREFBcUQ7SUFDckQsMkVBQTJFO0lBQzNFLDJFQUEyRTtJQUMzRSxtRUFBbUU7SUFDM0Qsc0JBQXNCLENBQUMsV0FBbUIsRUFBRSxXQUFtQjtRQUNyRSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ3JFLElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNqQixNQUFNLEtBQUssR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ3JDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztnQkFDeEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUN4QyxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRTtvQkFDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMscURBQXFELENBQUMsQ0FBQztvQkFDaEYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsUUFBUSxDQUFDLFdBQVcsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO29CQUM5RSxPQUFPO2lCQUNSO2dCQUNELE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUN2QyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3JELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEdBQUcsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO29CQUNyRSxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxTQUFTLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztvQkFDOUQscUVBQXFFO29CQUNyRSw2REFBNkQ7b0JBQzdELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDdkQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxNQUFNLEVBQUUsV0FBVyxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFDM0csQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFdBQVcsQ0FBQztnQkFDcEMsdUVBQXVFO2dCQUN2RSx5RUFBeUU7Z0JBQ3pFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDaEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsd0JBQXdCLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQztZQUN6RyxDQUFDO1lBQ0QsS0FBSyxFQUFFLEdBQUcsRUFBRTtnQkFDVixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyx5REFBeUQsQ0FBQyxDQUFDO2dCQUNwRixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLENBQUMsV0FBVyxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDaEYsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBVTtRQUN0QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRixJQUFJLGFBQWEsRUFBRTtZQUNqQixJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztnQkFDMUIsU0FBUyxFQUFFLGFBQWEsQ0FBQyxTQUFTO2dCQUNsQyxPQUFPLEVBQUUsYUFBYSxDQUFDLEdBQUc7Z0JBQzFCLG1EQUFtRDtnQkFDbkQsV0FBVyxFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMscUJBQXFCLElBQUksRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFO2dCQUM1RSxjQUFjLEVBQUUsQ0FBQyxhQUFhLENBQUMsY0FBYyxFQUFFLGFBQWEsQ0FBQyxjQUFjLEVBQUUsYUFBYSxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUM5TCxTQUFTLEVBQUUsYUFBYSxDQUFDLEdBQUcsSUFBSSxFQUFFO2dCQUNsQyxhQUFhLEVBQUUsYUFBYSxDQUFDLGFBQWEsSUFBSSxFQUFFO2FBQ2pELENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDMUM7SUFDSCxDQUFDO0lBRUQsMERBQTBEO0lBQzFELGtCQUFrQjtRQUNoQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNqRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN4QyxJQUFJLEtBQUssS0FBSyxLQUFLLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDakMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztTQUMzRDtJQUNILENBQUM7SUFFRCxzRUFBc0U7SUFDdEUscURBQXFEO0lBQ3JELGFBQWEsQ0FBQyxLQUFvQjtRQUNoQyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssVUFBVSxFQUFFO1lBQ2pELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN4QjtJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsQ0FBUztRQUN2QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDcEQsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUMzQixJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1NBQ3pDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRUQsK0VBQStFO0lBQy9FLCtFQUErRTtJQUMvRSxnRkFBZ0Y7SUFDaEYsMEVBQTBFO0lBQzFFLDhFQUE4RTtJQUM5RSxvRUFBb0U7SUFDNUQsZ0JBQWdCLENBQUMsR0FBVztRQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3RCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxLQUFLLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDO1FBQzlFLElBQUksS0FBSyxJQUFJLFFBQVEsRUFBRTtZQUNyQixJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTtnQkFDOUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDcEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUNyRTtpQkFBTTtnQkFDTCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ3RFO1NBQ0Y7UUFDRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELCtFQUErRTtJQUMvRSwrRUFBK0U7SUFDL0UsNEVBQTRFO0lBQzVFLGdCQUFnQjtRQUNkLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7WUFDeEIsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCw4REFBOEQ7SUFDOUQsOEVBQThFO0lBQzlFLDZFQUE2RTtJQUM3RSx5RUFBeUU7SUFDekUsU0FBUyxHQUFrQixJQUFJLENBQUM7SUFDaEMsYUFBYSxHQUFrQixJQUFJLENBQUM7SUFFcEMsY0FBYyxDQUFDLEtBQWdCLEVBQUUsS0FBYTtRQUM1QyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLEtBQUssQ0FBQyxZQUFZLEVBQUU7WUFDdEIsS0FBSyxDQUFDLFlBQVksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDO1lBQzFDLHFEQUFxRDtZQUNyRCxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDekQ7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQWdCLEVBQUUsS0FBYTtRQUMzQyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssSUFBSTtZQUFFLE9BQU87UUFDcEMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsYUFBYTtRQUNyQyxJQUFJLEtBQUssQ0FBQyxZQUFZO1lBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO1FBQy9ELElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQzdCLENBQUM7SUFFRCxjQUFjLENBQUMsS0FBYTtRQUMxQixJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssS0FBSztZQUFFLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQzlELENBQUM7SUFFRCxTQUFTLENBQUMsS0FBZ0IsRUFBRSxXQUFtQjtRQUM3QyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUM1QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxXQUFXO1lBQUUsT0FBTztRQUNsRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztJQUM1QixDQUFDO0lBRUQsOEVBQThFO0lBQzlFLDhFQUE4RTtJQUM5RSxZQUFZLENBQUMsQ0FBUztRQUNwQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0MsTUFBTSxHQUFHLEdBQUcsSUFBSSxFQUFFLEtBQUssQ0FBQztRQUN4QixJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssRUFBRSxFQUFFO1lBQ25ELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN6QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7WUFDakQsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUM5RCxJQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7Z0JBQ3BCLElBQUksRUFBRSxRQUFRLENBQUMsT0FBTyxLQUFLLEVBQUUsSUFBSSxPQUFPLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2FBQ2xHO1NBQ0Y7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFFRCwyRUFBMkU7SUFDM0UsMkVBQTJFO0lBQzNFLDRFQUE0RTtJQUM1RSw4RUFBOEU7SUFDOUUsMkVBQTJFO0lBQzNFLHdFQUF3RTtJQUN4RSxXQUFXLENBQUMsWUFBcUI7UUFDL0IsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUM1QyxJQUFJLEdBQUcsS0FBSyxZQUFZLEVBQUU7Z0JBQ3hCLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDL0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNyRCxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQzthQUNsRztZQUNELFFBQVEsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEQsQ0FBQyxDQUFDLENBQUM7UUFFSCwyRUFBMkU7UUFDM0Usc0VBQXNFO1FBQ3RFLHNDQUFzQztRQUN0QyxNQUFNLE9BQU8sR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDckQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDdkMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDO1lBQzdDLE1BQU0sU0FBUyxHQUFHLENBQUMsT0FBTyxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxRQUFRLENBQUMsU0FBUyxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDcEUsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDdkMsV0FBVyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQztRQUNyRCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxXQUFXLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUU1RSxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFHRCxXQUFXO1FBQ1QsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3ZDLFFBQVEsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN2QyxRQUFRLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQy9ELENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELDJFQUEyRTtJQUMzRSw2RUFBNkU7SUFDN0Usa0VBQWtFO0lBQ2xFLGtCQUFrQjtRQUNoQixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM3RSxDQUFDO0lBRUQsMkVBQTJFO0lBQzNFLHdEQUF3RDtJQUN4RCxnQkFBZ0IsQ0FBQyxLQUFhLEVBQUUsUUFBZ0I7UUFDOUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixPQUFPLFFBQVEsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUN4RSxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRCx3QkFBd0I7UUFDdEIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFO1lBQzVCLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNwQywyRUFBMkU7WUFDM0UsNkRBQTZEO1lBQzdELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUU7Z0JBQzFFLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLHVGQUF1RixDQUFDLENBQUM7YUFDbkg7WUFDRCxnRUFBZ0U7WUFDaEUsc0VBQXNFO1lBQ3RFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNqRCxPQUFPO1NBQ1I7UUFDRCxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyx1REFBdUQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsQ0FBQztZQUM3RyxPQUFPO1NBQ1I7UUFDRCxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3pDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLG9FQUFvRSxDQUFDLENBQUM7WUFDL0YsT0FBTztTQUNSO1FBQ0QsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUU7WUFDL0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLDRCQUE0QixDQUFDLENBQUMsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1lBQ25ILE9BQU87U0FDUjtRQUNELElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDdEcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsMERBQTBELENBQUMsQ0FBQztZQUNyRixPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRWpELE1BQU0sT0FBTyxHQUFRO1lBQ25CLFdBQVcsRUFBRSxTQUFTLENBQUMsV0FBVztZQUNsQyxjQUFjLEVBQUUsU0FBUyxDQUFDLGNBQWM7WUFDeEMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxTQUFTO1lBQzlCLGFBQWEsRUFBRSxTQUFTLENBQUMsYUFBYTtZQUN0QyxTQUFTLEVBQUUsU0FBUyxDQUFDLFNBQVM7WUFDOUIsT0FBTyxFQUFFLFNBQVMsQ0FBQyxPQUFPO1lBQzFCLE1BQU0sRUFBRSxTQUFTLENBQUMsTUFBTTtZQUN4QixXQUFXLEVBQUUsU0FBUyxDQUFDLFdBQVc7WUFDbEMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxPQUFPO1lBQzFCLFdBQVcsRUFBRSxTQUFTLENBQUMsV0FBVztZQUNsQyxRQUFRLEVBQUUsU0FBUyxDQUFDLFFBQVE7WUFDNUIsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNO1lBQ3hCLGFBQWEsRUFBRSxTQUFTLENBQUMsYUFBYTtZQUN0QyxjQUFjLEVBQUUsU0FBUyxDQUFDLGNBQWM7WUFDeEMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxhQUFhO1lBQ3RDLG1FQUFtRTtZQUNuRSxtQkFBbUIsRUFBRSxTQUFTLENBQUMsbUJBQW1CLElBQUksU0FBUztZQUMvRCxRQUFRLEVBQUUsU0FBUyxDQUFDLFFBQVE7WUFDNUIsR0FBRyxFQUFFLFNBQVMsQ0FBQyxHQUFHO1lBQ2xCLHdFQUF3RTtZQUN4RSx3RUFBd0U7WUFDeEUsK0NBQStDO1lBQy9DLHFFQUFxRTtZQUNyRSxvRUFBb0U7WUFDcEUsbUVBQW1FO1lBQ25FLGtEQUFrRDtZQUNsRCxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDbkUsV0FBVyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQztTQUM5RSxDQUFDO1FBRUYsMkVBQTJFO1FBQzNFLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsQ0FBQyxFQUFFO1lBQ2pDLE9BQU8sQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1lBQ2hFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNqQyxPQUFPLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxHQUFHLENBQUM7Z0JBQ3BDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUM7Z0JBQ3RELENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDUDtRQUVELElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7WUFDeEIsT0FBTyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQztZQUNuQyxPQUFPLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDO1lBQzNDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUM7WUFDN0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQ2xGLElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztvQkFDcEIsSUFBSSxHQUFHLEVBQUU7d0JBQ1AsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsOEJBQThCLENBQUMsQ0FBQzt3QkFDM0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7cUJBQ25DO2dCQUNILENBQUM7Z0JBQ0QsS0FBSyxFQUFFLEdBQUcsRUFBRTtvQkFDVixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztvQkFDcEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsMEJBQTBCLENBQUMsQ0FBQztnQkFDdkQsQ0FBQzthQUNGLENBQUMsQ0FBQztTQUNKO2FBQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGNBQWMsRUFBRTtZQUN2QywwRUFBMEU7WUFDMUUseURBQXlEO1lBQ3pELE9BQU8sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUM7WUFDbkMsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzlELE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLFdBQVc7Z0JBQ3BDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDO2dCQUM5RixDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7WUFDNUIsd0VBQXdFO1lBQ3hFLG9FQUFvRTtZQUNwRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEtBQUssSUFBSSxTQUFTLENBQUMsV0FBVyxFQUFFO2dCQUN2RSxPQUFPLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUM7YUFDN0M7WUFDRCxPQUFPLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUM7WUFDdEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQ25GLElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztvQkFDcEIsSUFBSSxHQUFHLEVBQUU7d0JBQ1AsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsK0JBQStCLENBQUMsQ0FBQzt3QkFDNUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7cUJBQ25DO2dCQUNILENBQUM7Z0JBQ0QsS0FBSyxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7b0JBQ2xCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO29CQUNwQixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sSUFBSSwyQkFBMkIsQ0FBQyxDQUFDO2dCQUMvRSxDQUFDO2FBQ0YsQ0FBQyxDQUFDO1NBQ0o7YUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFO1lBQ25DLHdFQUF3RTtZQUN4RSx1RUFBdUU7WUFDdkUsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ2pDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLFdBQVc7Z0JBQ3BDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDO2dCQUM5RixDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ2QseUVBQXlFO1lBQ3pFLGtFQUFrRTtZQUNsRSxPQUFPLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQyxXQUFXLElBQUksU0FBUyxDQUFDO1lBQ3pELE9BQU8sQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQztZQUN0QyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDbkYsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7b0JBQ2pCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO29CQUNwQixJQUFJLEdBQUcsRUFBRTt3QkFDUCxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO3dCQUM5RCxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztxQkFDbkM7Z0JBQ0gsQ0FBQztnQkFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtvQkFDbEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7b0JBQ3BCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBTyxJQUFJLDZCQUE2QixDQUFDLENBQUM7Z0JBQ2pGLENBQUM7YUFDRixDQUFDLENBQUM7U0FDSjthQUFNLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxZQUFZLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsRUFBRTtZQUN2RSx3RUFBd0U7WUFDeEUscUVBQXFFO1lBQ3JFLG1EQUFtRDtZQUNuRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQztZQUM1QyxNQUFNLGFBQWEsR0FBUTtnQkFDekIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO2dCQUMzQixTQUFTLEVBQUUsU0FBUyxDQUFDLFNBQVM7Z0JBQzlCLGNBQWMsRUFBRSxTQUFTLENBQUMsV0FBVztnQkFDckMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNO2FBQ3pCLENBQUM7WUFDRixJQUFJLFFBQVEsRUFBRTtnQkFDWixhQUFhLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQ3ZDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQzthQUMvQztpQkFBTTtnQkFDTCxhQUFhLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDO2FBQzFDO1lBQ0QsTUFBTSxLQUFLLEdBQUcsUUFBUTtnQkFDcEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDO2dCQUNyRCxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN4RCxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQzdDLElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztvQkFDcEIsSUFBSSxHQUFHLEVBQUU7d0JBQ1AsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDLENBQUMsa0NBQWtDLENBQUMsQ0FBQzt3QkFDL0csSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO3FCQUMxRDtnQkFDSCxDQUFDO2dCQUNELEtBQUssRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztvQkFDcEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLDhCQUE4QixDQUFDLENBQUMsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hJLENBQUM7YUFDRixDQUFDLENBQUM7U0FDSjthQUFNO1lBQ0wsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ2pDLHVFQUF1RTtZQUN2RSxvRUFBb0U7WUFDcEUsbUVBQW1FO1lBQ25FLDJDQUEyQztZQUMzQyxPQUFPLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztZQUM3QixJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDbEYsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7b0JBQ2pCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO29CQUNwQixJQUFJLEdBQUcsRUFBRTt3QkFDUCxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO3dCQUMzRCxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztxQkFDbkM7Z0JBQ0gsQ0FBQztnQkFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtvQkFDbEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7b0JBQ3BCLE1BQU0sR0FBRyxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBTyxJQUFJLDBCQUEwQixDQUFDO29CQUM5RCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDaEMsQ0FBQzthQUNGLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVELDBEQUEwRDtJQUUxRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUNsQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDWixhQUFhLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUN4QyxjQUFjLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDNUMsQ0FBQyxDQUFDO1FBRUgsMkVBQTJFO1FBQzNFLHVFQUF1RTtRQUN2RSwwRUFBMEU7UUFDMUUsc0VBQXNFO1FBQ3RFLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDckcsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLFNBQVMsRUFBRTtnQkFDN0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUM3RSxJQUFJLENBQUMsd0JBQXdCLEdBQUcsS0FBSyxDQUFDO2dCQUN0QyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNwQyxPQUFPO2FBQ1I7WUFDRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3ZFLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNkLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksY0FBYyxHQUFHLENBQUMsSUFBSSxjQUFjLEdBQUcsTUFBTSxDQUFDO2dCQUN2RyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsY0FBYyxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQzthQUNoSDtZQUNELElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNwRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssU0FBUyxFQUFFO2dCQUM3QyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFDOUUsSUFBSSxDQUFDLHdCQUF3QixHQUFHLEtBQUssQ0FBQztnQkFDdEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDcEMsT0FBTzthQUNSO1lBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN2RSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLElBQUksTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDZCx5RUFBeUU7Z0JBQ3pFLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksT0FBTyxHQUFHLENBQUMsSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDO2dCQUNsRixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2FBQzFHO1lBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxtRUFBbUU7SUFDM0QsUUFBUSxDQUFDLENBQU07UUFDckIsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLFNBQVM7WUFBRSxPQUFPLEdBQUcsQ0FBQztRQUMxRCxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRUQsdUVBQXVFO0lBQy9ELE1BQU0sQ0FBQyxDQUFTO1FBQ3RCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQUUsT0FBTyxHQUFHLENBQUM7UUFDN0IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDdEQsQ0FBQztJQUVELHVCQUF1QjtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNyQixPQUFPO1NBQ1I7UUFDRCw0RUFBNEU7UUFDNUUsNEVBQTRFO1FBQzVFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyRixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQztRQUVoRCwyRUFBMkU7UUFDM0UsMkVBQTJFO1FBQzNFLDRFQUE0RTtRQUM1RSxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQztZQUM3QixNQUFNLEVBQUUsUUFBUTtZQUNoQixjQUFjLEVBQUUsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzFDLGFBQWEsRUFBRSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtTQUNsRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLHdCQUF3QixHQUFHLEtBQUssQ0FBQztJQUN4QyxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLHdCQUF3QjtZQUFFLE9BQU87UUFDMUMsa0VBQWtFO1FBQ2xFLDRFQUE0RTtRQUM1RSx1RUFBdUU7UUFDdkUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN2RSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdkYsTUFBTSxXQUFXLEdBQUc7WUFDbEIsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTztZQUNqQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLEVBQUUsS0FBSztZQUM5RCxRQUFRLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEdBQUcsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JFLGNBQWMsRUFBRSxjQUFjO1NBQy9CLENBQUM7UUFDRixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUN0RixJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Z0JBQ3BCLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxFQUFFO29CQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO29CQUMvRCxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztpQkFDekM7WUFDSCxDQUFDO1lBQ0QsS0FBSyxFQUFFLEdBQUcsRUFBRTtnQkFDVixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztnQkFDcEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsNkJBQTZCLENBQUMsQ0FBQztZQUMxRCxDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFVO1FBQ3hCLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDekIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELHlFQUF5RTtJQUN6RSxvRUFBb0U7SUFDcEUsd0VBQXdFO0lBQ3hFLHNCQUFzQixDQUFDLEtBQVU7UUFDL0IsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFO1lBQzdDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCw0REFBNEQ7UUFDNUQsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ1gsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ2pELE9BQU8sS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2pEO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsMkRBQTJEO0lBRTNELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ2xDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNaLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1NBQ3RDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUM3RSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCx1QkFBdUI7UUFDckIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDO2dCQUM3QixNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLElBQUksQ0FBQzthQUNyRSxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztTQUNqQztJQUNILENBQUM7SUFFRCx3QkFBd0I7UUFDdEIsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssSUFBSSxHQUFHLENBQUMsQ0FBQztRQUMzRSxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxlQUFlLEdBQUcsVUFBVSxDQUFDLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxlQUFlO1FBQ2IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsS0FBSyxDQUFDO1FBQzlELElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUN0QixNQUFNLFdBQVcsR0FBRztZQUNsQixVQUFVLEVBQUUsUUFBUTtTQUNyQixDQUFDO1FBQ0YsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDN0csSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO2dCQUNwQixJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsRUFBRTtvQkFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsbUNBQW1DLENBQUMsQ0FBQztvQkFDaEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7aUJBQ3RDO1lBQ0gsQ0FBQztZQUNELEtBQUssRUFBRSxHQUFHLEVBQUU7Z0JBQ1YsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLDhCQUE4QixDQUFDLENBQUM7WUFDM0QsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7d0dBbHBEVSxvQkFBb0I7NEZBQXBCLG9CQUFvQiwwT0NkakMsb3FoREErckJNOzs0RkRqckJPLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxrQkFBa0I7cVBBS25CLFdBQVc7c0JBQW5CLEtBQUs7Z0JBS0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFxZE4sZUFBZTtzQkFEZCxZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgSW5wdXQsIENoYW5nZURldGVjdG9yUmVmLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdiQWN0aXZlTW9kYWwsIE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIEZvcm1BcnJheSwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEJpbGxpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYmlsbGluZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLXNoYXJlZCc7XHJcbmltcG9ydCB7IFJlcXVlc3RDb25maXJtYXRpb25Db21wb25lbnQgfSBmcm9tICcuLi9yZXF1ZXN0LWNvbmZpcm1hdGlvbi9yZXF1ZXN0LWNvbmZpcm1hdGlvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJbnZvaWNlUHJldmlld0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2ludm9pY2UtcHJldmlldy9pbnZvaWNlLXByZXZpZXcuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWVkaXQtaW52b2ljZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2VkaXQtaW52b2ljZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2VkaXQtaW52b2ljZS5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIEVkaXRJbnZvaWNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpIGludm9pY2VEYXRhOiBhbnk7XHJcbiAgLy8gJ2VzdGltYXRlJyByZXVzZXMgdGhlIHdob2xlIGNyZWF0ZSBmb3JtIGJ1dCBzdWJtaXRzIHRvIHRoZSBlc3RpbWF0ZSBBUElcclxuICAvLyBhbmQgd3JpdGVzIHRvIHRoZSBlc3RpbWF0ZXMgY29sbGVjdGlvbiBpbnN0ZWFkIG9mIGludm9pY2VzLiAnY3JlZGl0Tm90ZSdcclxuICAvLyBkb2VzIHRoZSBzYW1lIGZvciB0aGUgY3JlZGl0LW5vdGUgQVBJOiB0aGUgdXNlciBmaXJzdCBwaWNrcyB0aGUgaW52b2ljZSB0b1xyXG4gIC8vIGNyZWRpdCwgdGhlIGZvcm0gaXMgcHJlZmlsbGVkIGZyb20gaXQsIGFuZCB0aGUgcmVzdWx0IGlzIGEgQ04t4oCmIGRvY3VtZW50LlxyXG4gIEBJbnB1dCgpIG1vZGU6ICdlZGl0JyB8ICdjcmVhdGUnIHwgJ2VzdGltYXRlJyB8ICdlZGl0RXN0aW1hdGUnIHwgJ2NyZWRpdE5vdGUnIHwgJ2VkaXRDcmVkaXROb3RlJyA9ICdlZGl0JztcclxuICBASW5wdXQoKSBjbGllbnRJZDogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgYmlsbGluZ0dyb3VwczogYW55W10gPSBbXTtcclxuXHJcbiAgLy8gQ3JlZGl0IG5vdGU6IGZpbmFsbHkgYXBwcm92ZWQgaW52b2ljZXMgdGhhdCBjYW4gYmUgY3JlZGl0ZWQgKHdpdGggdGhlaXJcclxuICAvLyByZW1haW5pbmcgYmFsYW5jZSksIHRoZSBwaWNrZWQgc291cmNlIGludm9pY2UsIGFuZCBob3cgbXVjaCBvZiBpdCBpcyBzdGlsbFxyXG4gIC8vIGNyZWRpdGFibGUgKGZvciB0aGlzIGNyZWRpdCBub3RlLCB3aGVuIGVkaXRpbmcpLiBPcGVuZWQgd2l0aG91dCBhIGNsaWVudElkXHJcbiAgLy8gKEFsbCBJbnZvaWNlcyksIHRoZSBsaXN0IHNwYW5zIGV2ZXJ5IGJyYW5kIGFuZCB0aGUgYnJhbmQgaXMgdGFrZW4gZnJvbSB0aGVcclxuICAvLyBwaWNrZWQgaW52b2ljZS5cclxuICBjcmVkaXRhYmxlSW52b2ljZXM6IGFueVtdID0gW107XHJcbiAgc291cmNlSW52b2ljZTogYW55ID0gbnVsbDtcclxuICBjcmVkaXRhYmxlQmFsYW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgcGlja0Fjcm9zc0JyYW5kczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGludm9pY2VzTG9hZEZhaWxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyBIb3cgdGhlIGNyZWRpdCBpcyBicm9rZW4gZG93biDigJQgY2hvc2VuIGFmdGVyIHRoZSBpbnZvaWNlIGlzIHBpY2tlZDsgbGluZVxyXG4gIC8vIGl0ZW1zIGFyZSBnZW5lcmF0ZWQgZnJvbSBpdCAobm90IGFkZGVkIGJ5IGhhbmQpOlxyXG4gIC8vICAgcHJvZHVjdCDigJQgb25lIGxpbmUgcGVyIHNlbGVjdGVkIGludm9pY2UgcHJvZHVjdCAob3B0aW9uYWxseSBuYXJyb3dlZCB0b1xyXG4gIC8vICAgICAgICAgICAgIHNlbGVjdGVkIHN0b3Jlcyk7XHJcbiAgLy8gICBzdG9yZSAgIOKAlCBvbmUgbGluZSBwZXIgc2VsZWN0ZWQgYmlsbGluZy1ncm91cCBzdG9yZTtcclxuICAvLyAgIGludm9pY2Ug4oCUIGEgc2luZ2xlIGFtb3VudCAvIGNyZWRpdCBhZ2FpbnN0IHRoZSB3aG9sZSBpbnZvaWNlLlxyXG4gIGNyZWRpdFR5cGU6ICcnIHwgJ3Byb2R1Y3QnIHwgJ3N0b3JlJyB8ICdpbnZvaWNlJyA9ICcnO1xyXG4gIHJlYWRvbmx5IGNyZWRpdFR5cGVPcHRpb25zID0gW1xyXG4gICAgeyB2YWx1ZTogJ3Byb2R1Y3QnLCBsYWJlbDogJ0NyZWRpdCBieSBQcm9kdWN0JyB9LFxyXG4gICAgeyB2YWx1ZTogJ3N0b3JlJywgbGFiZWw6ICdDcmVkaXQgYnkgU3RvcmUnIH0sXHJcbiAgICB7IHZhbHVlOiAnaW52b2ljZScsIGxhYmVsOiAnQ3JlZGl0IGFnYWluc3QgSW52b2ljZScgfSxcclxuICBdIGFzIGNvbnN0O1xyXG4gIC8vIFdoYXQgdGhlIGNyZWRpdCB0eXBlcyBwaWNrIGZyb20gKEdFVCAvY3JlZGl0Tm90ZS9pbnZvaWNlQnJlYWtkb3duKTogdGhlXHJcbiAgLy8gaW52b2ljZSdzIHByb2R1Y3RzLCBpdHMgYmlsbGluZyBncm91cCdzIHN0b3JlcyAoYnkgc3RvcmUpLCB0aGUgc3RvcmVzXHJcbiAgLy8gbWFwcGVkIHRvIGVhY2ggcHJvZHVjdCBvbiB0aGUgaW52b2ljZSAoYnkgcHJvZHVjdCDigJQgbG93ZXItY2FzZWQgcHJvZHVjdFxyXG4gIC8vIGtleSksIHBlciBzdG9yZSDDlyBwcm9kdWN0IGNvc3QgKHRoZSBpbnZvaWNlJ3Mgc3RvcmUgYnJlYWtkb3duKSBhbmQgaXRzXHJcbiAgLy8gYW1vdW50IGV4Y2wuIEdTVC5cclxuICBicmVha2Rvd25Qcm9kdWN0czogeyBwcm9kdWN0TmFtZTogc3RyaW5nOyBkZXNjcmlwdGlvbjogc3RyaW5nOyBIc25OdW1iZXI6IHN0cmluZzsgYW1vdW50OiBudW1iZXIgfVtdID0gW107XHJcbiAgYnJlYWtkb3duU3RvcmVzOiB7IHN0b3JlSWQ6IHN0cmluZzsgc3RvcmVOYW1lOiBzdHJpbmcgfVtdID0gW107XHJcbiAgcHJvZHVjdFN0b3JlczogUmVjb3JkPHN0cmluZywgeyBzdG9yZUlkOiBzdHJpbmc7IHN0b3JlTmFtZTogc3RyaW5nIH1bXT4gPSB7fTtcclxuICBzdG9yZVByb2R1Y3RDb3N0czogeyBzdG9yZUlkOiBzdHJpbmc7IHByb2R1Y3ROYW1lOiBzdHJpbmc7IGFtb3VudDogbnVtYmVyIH1bXSA9IFtdO1xyXG4gIHNvdXJjZUludm9pY2VBbW91bnQ6IG51bWJlciA9IDA7XHJcbiAgYnJlYWtkb3duTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIC8vIEJ5IHN0b3JlOiB0aGUgc3RvcmVzIHBpY2tlZCBpbiB0aGUgKHNpbmdsZSkgU3RvcmVzIGRyb3Bkb3duLiBXaXRoIGV2ZXJ5XHJcbiAgLy8gc3RvcmUgc2VsZWN0ZWQgKFwiU2VsZWN0IGFsbFwiKSB0aGUgY3JlZGl0IGlzIG9uZSBBbGwtc3RvcmVzIGxpbmUg4oCUIEFtb3VudCBhbmRcclxuICAvLyBDcmVkaXQgb25seSDigJQgaW5zdGVhZCBvZiBhIGxpbmUgcGVyIHN0b3JlLlxyXG4gIHNlbGVjdGVkU3RvcmVzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIGFsbFN0b3Jlc1NlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLy8gT3BlbiBjaGVja2JveCBkcm9wZG93biDigJQgJ3N0b3JlJyAoYnkgc3RvcmUpIG9yICdsaW5lLTxpPicgKGEgYnktcHJvZHVjdFxyXG4gIC8vIGxpbmUncyBTdG9yZXMpIOKAlCBhbmQgaXRzIHNlYXJjaCB0ZXh0LlxyXG4gIG9wZW5QaWNrZXI6IHN0cmluZyA9ICcnO1xyXG4gIHN0b3JlU2VhcmNoOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgaW52b2ljZUZvcm0hOiBGb3JtR3JvdXA7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgc2F2aW5nOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIFRhYnM6IGVkaXQgfCBjcmVkaXROb3RlIHwgb25lVGltZUZlZVxyXG4gIGFjdGl2ZVRhYjogc3RyaW5nID0gJ2VkaXQnO1xyXG5cclxuICB0YXhUeXBlcyA9IFsnSUdTVCcsICdDR1NUJywgJ1NHU1QnXTtcclxuICBjdXJyZW5jeU9wdGlvbnMgPSBbJ2lucicsICdkb2xsYXInLCAnc2luZ2Fwb3JlZG9sbGFyJywgJ2V1cm8nLCAnYWVkJ107XHJcbiAgY3VycmVuY3lMYWJlbHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XHJcbiAgICBpbnI6ICdJTlIgKOKCuSknLFxyXG4gICAgZG9sbGFyOiAnVVNEICgkKScsXHJcbiAgICBzaW5nYXBvcmVkb2xsYXI6ICdTR0QgKFMkKScsXHJcbiAgICBldXJvOiAnRVVSICjigqwpJyxcclxuICAgIGFlZDogJ0FFRCAoQUVEKSdcclxuICB9O1xyXG4gIC8vIFN5bWJvbCBtYXAgbWlycm9ycyB0aGUgYmFja2VuZCdzIENVUlJFTkNZX1NZTUJPTFMgaW4gdXRpbHMvY3VycmVuY3kuanMgc29cclxuICAvLyB0aGUgbW9kYWwsIGludm9pY2UgbGlzdCwgY3JlZGl0LW5vdGUgYW5kIG9uZS10aW1lLWZlZSBwb3B1cHMgYWxsIHJlbmRlclxyXG4gIC8vIHRoZSBzYW1lIHN5bWJvbCB0aGUgUERGL2VtYWlsIHVzZXMuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBjdXJyZW5jeVN5bWJvbHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XHJcbiAgICBpbnI6ICfigrknLFxyXG4gICAgZG9sbGFyOiAnJCcsXHJcbiAgICBzaW5nYXBvcmVkb2xsYXI6ICdTJCcsXHJcbiAgICBldXJvOiAn4oKsJyxcclxuICAgIGFlZDogJ0FFRCcsXHJcbiAgfTtcclxuICBzdGF0dXNPcHRpb25zID0gWydwZW5kaW5nJywgJ2FwcHJvdmVkJ107XHJcbiAgcGF5bWVudFN0YXR1c09wdGlvbnMgPSBbJ3VucGFpZCcsICdwYWlkJ107XHJcblxyXG4gIC8vIENyZWRpdCBOb3RlXHJcbiAgY3JlZGl0Tm90ZUZvcm0hOiBGb3JtR3JvdXA7XHJcbiAgY3JlZGl0TW9yZVRoYW5UZW5QZXJjZW50OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIFByb2R1Y3RzIGZyb20gYmFzZSBwcmljaW5nXHJcbiAgYXZhaWxhYmxlUHJvZHVjdHM6IGFueVtdID0gW107XHJcblxyXG4gIC8vIE9uZSBUaW1lIEZlZVxyXG4gIG9uZVRpbWVGZWVGb3JtITogRm9ybUdyb3VwO1xyXG4gIG9uZVRpbWVGZWVUb3RhbDogbnVtYmVyID0gMDtcclxuXHJcbiAgLy8gTGFzdC1rbm93biBjdXJyZW5jeSwgc28gYSBjYW5jZWxsZWQgY3VycmVuY3kgY2hhbmdlIGNhbiByZXZlcnQgdGhlIHNlbGVjdC5cclxuICBwcml2YXRlIHByZXZpb3VzQ3VycmVuY3k6IHN0cmluZyA9ICdpbnInO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBhY3RpdmVNb2RhbDogTmdiQWN0aXZlTW9kYWwsXHJcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgYmlsbGluZ1NlcnZpY2U6IEJpbGxpbmdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIHRvYXN0OiBUb2FzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGhvc3RSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWxcclxuICApIHt9XHJcblxyXG4gIC8vIFNjcm9sbCB0aGUgbmV3bHktYWRkZWQgcm93IChwcm9kdWN0cy90YXgpIGludG8gdmlldyBpbnNpZGUgdGhlIG1vZGFsIGJvZHkuXHJcbiAgLy8gc2VsZWN0b3IgdGFyZ2V0cyB0aGUgbGFzdCByb3cgb2YgdGhlIGdpdmVuIHNlY3Rpb24gYWZ0ZXIgaXQgcmVuZGVycy5cclxuICBwcml2YXRlIHNjcm9sbFRvTGFzdFJvdyhzZWN0aW9uQXR0cjogc3RyaW5nKSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgY29uc3QgaG9zdDogSFRNTEVsZW1lbnQgPSB0aGlzLmhvc3RSZWY/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgIGNvbnN0IHJvd3MgPSBob3N0Py5xdWVyeVNlbGVjdG9yQWxsKGBbJHtzZWN0aW9uQXR0cn1dYCk7XHJcbiAgICAgIGNvbnN0IGxhc3QgPSByb3dzICYmIHJvd3MubGVuZ3RoID8gKHJvd3Nbcm93cy5sZW5ndGggLSAxXSBhcyBIVE1MRWxlbWVudCkgOiBudWxsO1xyXG4gICAgICBpZiAobGFzdCkge1xyXG4gICAgICAgIGxhc3Quc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnY2VudGVyJyB9KTtcclxuICAgICAgfVxyXG4gICAgfSwgMTAwKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5sb2FkQmlsbGluZ0dyb3VwcygpO1xyXG4gICAgdGhpcy5sb2FkQ2xpZW50UHJvZHVjdHMoKTtcclxuICAgIHRoaXMubG9hZFB1cmNoYXNlT3JkZXJzKCk7XHJcbiAgICB0aGlzLmluaXRGb3JtKCk7XHJcbiAgICB0aGlzLmluaXRDcmVkaXROb3RlRm9ybSgpO1xyXG4gICAgdGhpcy5pbml0T25lVGltZUZlZUZvcm0oKTtcclxuICAgIGlmICh0aGlzLm1vZGUgPT09ICdlZGl0JyAmJiB0aGlzLmludm9pY2VEYXRhKSB7XHJcbiAgICAgIHRoaXMucGF0Y2hGb3JtKCk7XHJcbiAgICAgIHRoaXMucGF0Y2hDcmVkaXROb3RlRGVmYXVsdHMoKTtcclxuICAgICAgdGhpcy5wYXRjaE9uZVRpbWVGZWVEZWZhdWx0cygpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLm1vZGUgPT09ICdlZGl0RXN0aW1hdGUnICYmIHRoaXMuaW52b2ljZURhdGEpIHtcclxuICAgICAgLy8gRWRpdGluZyBhbiBlc3RpbWF0ZSByZXVzZXMgdGhlIHNhbWUgZm9ybSBmaWVsZHM7IHRoZSBlc3RpbWF0ZSBkb2N1bWVudFxyXG4gICAgICAvLyBzaGFyZXMgdGhlIGludm9pY2Ugc2hhcGUgKGNvbXBhbnlOYW1lLCBwcm9kdWN0cywgdGF4LCBzdG9yZXMsIOKApikuXHJcbiAgICAgIHRoaXMucGF0Y2hGb3JtKCk7XHJcbiAgICAgIC8vIOKApmV4Y2VwdCBpdHMgZGF0ZXM6IHRoZSBHZW5lcmF0ZWQgZGF0ZSBpcyBjcmVhdGVkRGF0ZSBhbmQgdGhlIGR1ZSBkYXRlXHJcbiAgICAgIC8vIGlzIHZhbGlkVGlsbCwgc28gdGhlIGJpbGxpbmdEYXRlIC8gZHVlRGF0ZSBmaWVsZHMgd291bGQgbG9hZCBlbXB0eS5cclxuICAgICAgdGhpcy5pbnZvaWNlRm9ybS5wYXRjaFZhbHVlKHtcclxuICAgICAgICBiaWxsaW5nRGF0ZTogdGhpcy5mb3JtYXREYXRlRm9ySW5wdXQodGhpcy5pbnZvaWNlRGF0YS5jcmVhdGVkRGF0ZSksXHJcbiAgICAgICAgZHVlRGF0ZTogdGhpcy5mb3JtYXREYXRlRm9ySW5wdXQodGhpcy5pbnZvaWNlRGF0YS52YWxpZFRpbGwpLFxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlID09PSAnY3JlYXRlJykge1xyXG4gICAgICAvLyBOZXcgaW52b2ljZTogZGVmYXVsdCB0aGUgYmlsbGluZyBkYXRlIHRvIHRvZGF5IGFuZCBkZXJpdmUgdGhlIGR1ZSBkYXRlXHJcbiAgICAgIC8vIGZyb20gdGhlIGRlZmF1bHQgcGF5bWVudCB0ZXJtICgzMCBkYXlzKS4gVGhlIHVzZXIgY2hhbmdlcyB0aGUgdGVybSB2aWFcclxuICAgICAgLy8gdGhlIFBheW1lbnQgVGVybSBkcm9wZG93biwgbm90IHRoZSBkdWUgZGF0ZSBkaXJlY3RseS5cclxuICAgICAgdGhpcy5pbnZvaWNlRm9ybS5wYXRjaFZhbHVlKHsgYmlsbGluZ0RhdGU6IHRoaXMuZm9ybWF0RGF0ZUZvcklucHV0KG5ldyBEYXRlKCkpIH0pO1xyXG4gICAgICB0aGlzLmNvbXB1dGVEdWVEYXRlKCk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gJ2NyZWRpdE5vdGUnKSB7XHJcbiAgICAgIC8vIE5ldyBjcmVkaXQgbm90ZTogZGF0ZWQgdG9kYXk7IHRoZSByZXN0IGlzIHByZWZpbGxlZCBvbmNlIGFuIGludm9pY2UgaXNcclxuICAgICAgLy8gcGlja2VkLiBXaXRob3V0IGEgY2xpZW50SWQgdGhlIGludm9pY2UgbGlzdCBzcGFucyBldmVyeSBicmFuZC5cclxuICAgICAgdGhpcy5waWNrQWNyb3NzQnJhbmRzID0gIXRoaXMuY2xpZW50SWQ7XHJcbiAgICAgIHRoaXMuaW52b2ljZUZvcm0ucGF0Y2hWYWx1ZSh7IGJpbGxpbmdEYXRlOiB0aGlzLmZvcm1hdERhdGVGb3JJbnB1dChuZXcgRGF0ZSgpKSB9KTtcclxuICAgICAgdGhpcy5sb2FkQ3JlZGl0YWJsZUludm9pY2VzKCk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gJ2VkaXRDcmVkaXROb3RlJyAmJiB0aGlzLmludm9pY2VEYXRhKSB7XHJcbiAgICAgIC8vIENvbXBhbnkgZGV0YWlscyBhcyBzdG9yZWQgb24gdGhlIGNyZWRpdCBub3RlLCBwbHVzIGl0cyBkYXRlLCByZWFzb25cclxuICAgICAgLy8gYW5kIGxpbmUgaXRlbXMuXHJcbiAgICAgIHRoaXMucGF0Y2hDb21wYW55RGV0YWlscyh0aGlzLmludm9pY2VEYXRhKTtcclxuICAgICAgdGhpcy5pbnZvaWNlRm9ybS5wYXRjaFZhbHVlKHtcclxuICAgICAgICBiaWxsaW5nRGF0ZTogdGhpcy5mb3JtYXREYXRlRm9ySW5wdXQodGhpcy5pbnZvaWNlRGF0YS5jcmVkaXROb3RlRGF0ZSksXHJcbiAgICAgICAgcmVhc29uOiB0aGlzLmludm9pY2VEYXRhLnJlYXNvbiB8fCAnJyxcclxuICAgICAgfSk7XHJcbiAgICAgIC8vIFJlc3RvcmUgdGhlIGNyZWRpdCB0eXBlIChvbGRlciBjcmVkaXQgbm90ZXMgaGF2ZSBub25lIOKAlCB0cmVhdCB0aGVtIGFzXHJcbiAgICAgIC8vIGJ5LXByb2R1Y3QpLiBCeS1wcm9kdWN0IGxpbmVzIGNhcnJ5IHRoZWlyIG93biBwcm9kdWN0ICsgc3RvcmVzOyBieVxyXG4gICAgICAvLyBzdG9yZSBuZWVkcyBpdHMgU3RvcmVzIHNlbGVjdGlvbiBiYWNrLlxyXG4gICAgICBjb25zdCBsaW5lczogYW55W10gPSB0aGlzLmludm9pY2VEYXRhLmxpbmVJdGVtcyB8fCBbXTtcclxuICAgICAgdGhpcy5jcmVkaXRUeXBlID0gdGhpcy5pbnZvaWNlRGF0YS5jcmVkaXRUeXBlIHx8ICdwcm9kdWN0JztcclxuICAgICAgaWYgKHRoaXMuY3JlZGl0VHlwZSA9PT0gJ3N0b3JlJykge1xyXG4gICAgICAgIC8vIEFuIEFsbC1zdG9yZXMgbGluZSBtZWFucyBcIlNlbGVjdCBhbGxcIjsgc2VsZWN0ZWRTdG9yZXMgaXMgZmlsbGVkIG9uY2VcclxuICAgICAgICAvLyB0aGUgc3RvcmUgbGlzdCBsb2FkcyAobG9hZEludm9pY2VCcmVha2Rvd24pLlxyXG4gICAgICAgIHRoaXMuYWxsU3RvcmVzU2VsZWN0ZWQgPSBsaW5lcy5zb21lKChsKSA9PiBsLmFsbFN0b3Jlcyk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFN0b3JlcyA9IGxpbmVzLm1hcCgobCkgPT4gbC5zdG9yZUlkKS5maWx0ZXIoQm9vbGVhbikubWFwKFN0cmluZyk7XHJcbiAgICAgIH1cclxuICAgICAgbGluZXMuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB0aGlzLmxpbmVJdGVtcy5wdXNoKHRoaXMuY3JlYXRlTGluZUl0ZW1Hcm91cChpdGVtKSkpO1xyXG4gICAgICB0aGlzLmxvYWRJbnZvaWNlQnJlYWtkb3duKHRoaXMuaW52b2ljZURhdGEuaW52b2ljZUlkKTtcclxuICAgICAgdGhpcy5sb2FkQ3JlZGl0YWJsZUludm9pY2VzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pc0NyZWRpdE5vdGUpIHtcclxuICAgICAgLy8gQSBjcmVkaXQgbm90ZSBpcyBhbHdheXMgaW4gaXRzIGludm9pY2UncyBjdXJyZW5jeS5cclxuICAgICAgdGhpcy5pbnZvaWNlRm9ybS5nZXQoJ2N1cnJlbmN5Jyk/LmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbG9hZENsaWVudFByb2R1Y3RzKCkge1xyXG4gICAgY29uc3QgY0lkID0gdGhpcy5jbGllbnRJZCB8fCB0aGlzLmludm9pY2VEYXRhPy5jbGllbnRJZDtcclxuICAgIGlmIChjSWQpIHtcclxuICAgICAgdGhpcy5iaWxsaW5nU2VydmljZS5nZXRDbGllbnRCYXNlUHJpY2luZyhjSWQpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5hdmFpbGFibGVQcm9kdWN0cyA9IHJlcz8uZGF0YSB8fCBbXTtcclxuICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuYXZhaWxhYmxlUHJvZHVjdHMgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25Qcm9kdWN0Q2hhbmdlKGluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHByb2R1Y3RHcm91cCA9IHRoaXMucHJvZHVjdHMuYXQoaW5kZXgpO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWROYW1lID0gcHJvZHVjdEdyb3VwLmdldCgncHJvZHVjdE5hbWUnKT8udmFsdWU7XHJcbiAgICAvLyBcIisgQ3VzdG9tIHByb2R1Y3RcIiBwaWNrZWQgZnJvbSB0aGUgZHJvcGRvd24g4oCUIHN3aXRjaCB0aGlzIHJvdyB0byBmcmVlLXRleHRcclxuICAgIC8vIGVudHJ5IChjdXN0b20gbmFtZSArIHByaWNlKSwgY2xlYXJpbmcgdGhlIGJhc2UtcHJpY2luZyBzZWxlY3Rpb24uXHJcbiAgICBpZiAoc2VsZWN0ZWROYW1lID09PSAnX19jdXN0b21fXycpIHtcclxuICAgICAgcHJvZHVjdEdyb3VwLnBhdGNoVmFsdWUoeyBpc0N1c3RvbTogdHJ1ZSwgcHJvZHVjdE5hbWU6ICcnLCBwcmljZTogMCwgZGVzY3JpcHRpb246ICcnIH0pO1xyXG4gICAgICB0aGlzLnJlY2FsY3VsYXRlKGluZGV4KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgcHJvZHVjdEdyb3VwLmdldCgnaXNDdXN0b20nKT8uc2V0VmFsdWUoZmFsc2UpO1xyXG4gICAgY29uc3QgcHJvZHVjdCA9IHRoaXMuYXZhaWxhYmxlUHJvZHVjdHMuZmluZChwID0+IHAucHJvZHVjdE5hbWUgPT09IHNlbGVjdGVkTmFtZSk7XHJcbiAgICBpZiAocHJvZHVjdCkge1xyXG4gICAgICBwcm9kdWN0R3JvdXAuZ2V0KCdwcmljZScpPy5zZXRWYWx1ZShwcm9kdWN0LnByaWNlKTtcclxuICAgICAgLy8gU2V0IGRlc2NyaXB0aW9uIGJhc2VkIG9uIHByb2R1Y3QgbmFtZVxyXG4gICAgICBjb25zdCBkZXNjcmlwdGlvbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XHJcbiAgICAgICAgdGFuZ29UcmFmZmljOiAnQ3VzdG9tZXIgRm9vdGZhbGwgQW5hbHl0aWNzJyxcclxuICAgICAgICB0YW5nb1pvbmU6ICdQcm9kdWN0IGNhdGVnb3J5L3NlY3Rpb24gYW5hbHl0aWNzJyxcclxuICAgICAgICB0YW5nb1RyYXg6ICdDdXN0b21lciBKb3VybmV5IEFuYWx5dGljcycsXHJcbiAgICAgICAgcHJpb3JpdHlTdXBwb3J0OiAnUHJpb3JpdHkgU3VwcG9ydCcsXHJcbiAgICAgIH07XHJcbiAgICAgIHByb2R1Y3RHcm91cC5nZXQoJ2Rlc2NyaXB0aW9uJyk/LnNldFZhbHVlKGRlc2NyaXB0aW9uc1tzZWxlY3RlZE5hbWVdIHx8ICcnKTtcclxuICAgICAgdGhpcy5yZWNhbGN1bGF0ZShpbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBBZGQgYSBibGFuayBwcm9kdWN0IHJvdyBhbHJlYWR5IGluIGN1c3RvbSAoZnJlZS10ZXh0KSBtb2RlLCByZWdhcmRsZXNzIG9mXHJcbiAgLy8gd2hldGhlciBiYXNlLXByaWNpbmcgcHJvZHVjdHMgZXhpc3QuXHJcbiAgYWRkQ3VzdG9tUHJvZHVjdCgpIHtcclxuICAgIHRoaXMucHJvZHVjdHMucHVzaCh0aGlzLmNyZWF0ZVByb2R1Y3RHcm91cCh7IGlzQ3VzdG9tOiB0cnVlIH0pKTtcclxuICAgIHRoaXMuc2Nyb2xsVG9MYXN0Um93KCdkYXRhLXByb2R1Y3Qtcm93Jyk7XHJcbiAgfVxyXG5cclxuICBmb3JtYXRQcm9kdWN0TmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKCFuYW1lKSByZXR1cm4gJyc7XHJcbiAgICAvLyBDb252ZXJ0IGNhbWVsQ2FzZSB0byBUaXRsZSBDYXNlIHdpdGggc3BhY2VzOiB0YW5nb1RyYWZmaWMgLT4gVGFuZ28gVHJhZmZpY1xyXG4gICAgcmV0dXJuIG5hbWUucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywgJyQxICQyJylcclxuICAgICAgLnJlcGxhY2UoL14uLywgKHN0cikgPT4gc3RyLnRvVXBwZXJDYXNlKCkpO1xyXG4gIH1cclxuXHJcbiAgbG9hZEJpbGxpbmdHcm91cHMoKSB7XHJcbiAgICBjb25zdCBjSWQgPSB0aGlzLmNsaWVudElkIHx8IHRoaXMuaW52b2ljZURhdGE/LmNsaWVudElkO1xyXG4gICAgaWYgKGNJZCkge1xyXG4gICAgICB0aGlzLmJpbGxpbmdTZXJ2aWNlLmdldEFsbEJpbGxpbmdHcm91cHMoY0lkKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuYmlsbGluZ0dyb3VwcyA9IHJlcz8uZGF0YSB8fCBbXTtcclxuICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5iaWxsaW5nR3JvdXBzID0gW107XHJcbiAgICAgICAgICAvLyBUaGUgQmlsbGluZyBHcm91cCBmaWVsZCBpcyBoaWRkZW4gd2l0aG91dCBncm91cHMgYnV0IHN0aWxsIHJlcXVpcmVkXHJcbiAgICAgICAgICAvLyB3aGVuIGNyZWF0aW5nLCBzbyBzYXkgd2h5IHRoZSBmb3JtIGNhbid0IGJlIHN1Ym1pdHRlZC5cclxuICAgICAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdjcmVhdGUnIHx8IHRoaXMubW9kZSA9PT0gJ2VzdGltYXRlJykge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoZXJyPy5lcnJvcj8ubWVzc2FnZSB8fCAnRmFpbGVkIHRvIGxvYWQgYmlsbGluZyBncm91cHMg4oCUIHJlb3BlbiB0byByZXRyeScpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIHNldFRhYih0YWI6IHN0cmluZykge1xyXG4gICAgdGhpcy5hY3RpdmVUYWIgPSB0YWI7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PT0gQ1JFRElUIE5PVEUgKGRvY3VtZW50KSA9PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgZ2V0IGlzQ3JlZGl0Tm90ZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLm1vZGUgPT09ICdjcmVkaXROb3RlJyB8fCB0aGlzLm1vZGUgPT09ICdlZGl0Q3JlZGl0Tm90ZSc7XHJcbiAgfVxyXG5cclxuICAvLyBDcmVhdGluZyBhIGNyZWRpdCBub3RlOiBldmVyeXRoaW5nIGJlbG93IHRoZSBwaWNrZXJzIHdhaXRzIGZvciB0aGVcclxuICAvLyBzb3VyY2UgaW52b2ljZSB0byBiZSBjaG9zZW4gYW5kIGxvYWRlZC5cclxuICBnZXQgc2hvd0ludm9pY2VGb3JtKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMubW9kZSAhPT0gJ2NyZWRpdE5vdGUnIHx8ICEhdGhpcy5zb3VyY2VJbnZvaWNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGhlYWRpbmdUZXh0KCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBoZWFkaW5nczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcclxuICAgICAgZWRpdDogJ0ludm9pY2UnLCBjcmVhdGU6ICdDcmVhdGUgSW52b2ljZScsIGVzdGltYXRlOiAnR2VuZXJhdGUgRXN0aW1hdGUnLFxyXG4gICAgICBlZGl0RXN0aW1hdGU6ICdFZGl0IEVzdGltYXRlJywgY3JlZGl0Tm90ZTogJ0NyZWF0ZSBDcmVkaXQgTm90ZScsIGVkaXRDcmVkaXROb3RlOiAnQ3JlZGl0IE5vdGUnLFxyXG4gICAgfTtcclxuICAgIHJldHVybiBoZWFkaW5nc1t0aGlzLm1vZGVdO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHN1Ym1pdExhYmVsKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBsYWJlbHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XHJcbiAgICAgIGVkaXQ6ICdVcGRhdGUgSW52b2ljZScsIGNyZWF0ZTogJ0NyZWF0ZSBJbnZvaWNlJywgZXN0aW1hdGU6ICdHZW5lcmF0ZSBFc3RpbWF0ZScsXHJcbiAgICAgIGVkaXRFc3RpbWF0ZTogJ1VwZGF0ZSBFc3RpbWF0ZScsIGNyZWRpdE5vdGU6ICdDcmVhdGUgQ3JlZGl0IE5vdGUnLCBlZGl0Q3JlZGl0Tm90ZTogJ1VwZGF0ZSBDcmVkaXQgTm90ZScsXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGxhYmVsc1t0aGlzLm1vZGVdO1xyXG4gIH1cclxuXHJcbiAgLy8gSW52b2ljZSBudW1iZXIgdGhlIGNyZWRpdCBub3RlIGlzIGlzc3VlZCBhZ2FpbnN0LlxyXG4gIGdldCBzb3VyY2VJbnZvaWNlTnVtYmVyKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5tb2RlID09PSAnZWRpdENyZWRpdE5vdGUnID8gdGhpcy5pbnZvaWNlRGF0YT8uaW52b2ljZSA6IHRoaXMuc291cmNlSW52b2ljZT8uaW52b2ljZTtcclxuICB9XHJcblxyXG4gIC8vIF9pZCBvZiB0aGF0IGludm9pY2Ug4oCUIHNldCBvbmNlIG9uZSBpcyBwaWNrZWQgKG5ldykgb3IgYWx3YXlzIChlZGl0KS5cclxuICBnZXQgc291cmNlSW52b2ljZUlkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5tb2RlID09PSAnZWRpdENyZWRpdE5vdGUnID8gdGhpcy5pbnZvaWNlRGF0YT8uaW52b2ljZUlkIDogdGhpcy5zb3VyY2VJbnZvaWNlPy5faWQ7XHJcbiAgfVxyXG5cclxuICAvLyBQcmV2aWV3IHRoZSBpbnZvaWNlIGJlaW5nIGNyZWRpdGVkIGluIHRoZSBzYW1lIHdpbmRvdyB0aGUgaW52b2ljZSB0YWJsZXNcclxuICAvLyBvcGVuLCBzdGFja2VkIG92ZXIgdGhpcyBmb3JtICh3aGljaCBzdGF5cyBvcGVuIHVuZGVybmVhdGgpLlxyXG4gIHByZXZpZXdTb3VyY2VJbnZvaWNlKCkge1xyXG4gICAgY29uc3QgaW52b2ljZUlkID0gdGhpcy5zb3VyY2VJbnZvaWNlSWQ7XHJcbiAgICBpZiAoIWludm9pY2VJZCkgcmV0dXJuO1xyXG4gICAgdGhpcy5iaWxsaW5nU2VydmljZS5nZXRJbnZvaWNlQnlJZChpbnZvaWNlSWQpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoIXJlcz8uZGF0YSkge1xyXG4gICAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KCdGYWlsZWQgdG8gbG9hZCBpbnZvaWNlJyk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihJbnZvaWNlUHJldmlld0NvbXBvbmVudCwge1xyXG4gICAgICAgICAgY2VudGVyZWQ6IHRydWUsIHNpemU6ICd4bCcsIHNjcm9sbGFibGU6IHRydWUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuaW52b2ljZURhdGEgPSByZXMuZGF0YTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6ICgpID0+IHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdCgnRmFpbGVkIHRvIGxvYWQgaW52b2ljZScpLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBDcmVkaXQgdG90YWwgbWF5IG5vdCBleGNlZWQgd2hhdCdzIHN0aWxsIGNyZWRpdGFibGUgb24gdGhlIHNvdXJjZSBpbnZvaWNlXHJcbiAgLy8gKHRoZSBzZXJ2ZXIgZW5mb3JjZXMgdGhlIHNhbWUgcnVsZSkuXHJcbiAgZ2V0IGV4Y2VlZHNDcmVkaXRCYWxhbmNlKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmlzQ3JlZGl0Tm90ZSB8fCB0aGlzLmNyZWRpdGFibGVCYWxhbmNlID09PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRDcmVkaXRUb3RhbCgpID4gdGhpcy5jcmVkaXRhYmxlQmFsYW5jZSArIDAuMDA1O1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLSBDcmVkaXQgbm90ZSBsaW5lIGl0ZW1zOiBnZW5lcmF0ZWQgZnJvbSB0aGUgY3JlZGl0IHR5cGUgKyBzZWxlY3Rpb25zLFxyXG4gIC8vIG5ldmVyIGFkZGVkIGJ5IGhhbmQuIEFtb3VudCAodGhlIGxpbmUncyBhbW91bnQsIHByZWZpbGxlZCBmcm9tIHRoZSBpbnZvaWNlXHJcbiAgLy8gYW5kIGVkaXRhYmxlKSBhbmQgQ3JlZGl0IGFyZSBlbnRlcmVkIHNlcGFyYXRlbHkg4oCUIHRoZSBjcmVkaXQgaXMgTk9UIHRha2VuXHJcbiAgLy8gb2ZmIHRoZSBBbW91bnQgc2hvd24sIG1hdGNoaW5nIHRoZSBQREYncyBBbW91bnQgYW5kIENyZWRpdCBjb2x1bW5zLiBUaGVcclxuICAvLyBhZnRlci1jcmVkaXQgYGFtb3VudGAgaXMgZGVyaXZlZC4gTm8gdGF4OiB0aGUgY3JlZGl0IG5vdGUncyB2YWx1ZSBpcyB0aGVcclxuICAvLyB0b3RhbCBjcmVkaXQuIC0tLS1cclxuICBnZXQgbGluZUl0ZW1zKCk6IEZvcm1BcnJheSB7XHJcbiAgICByZXR1cm4gdGhpcy5pbnZvaWNlRm9ybS5nZXQoJ2xpbmVJdGVtcycpIGFzIEZvcm1BcnJheTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3VycmVudE1vbnRoTGFiZWwoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBuZXcgRGF0ZSgpLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHsgbW9udGg6ICdzaG9ydCcsIHllYXI6ICdudW1lcmljJyB9KTtcclxuICB9XHJcblxyXG4gIC8vIGBpdGVtYCBpcyBhIHNhdmVkIGxpbmUgKGVkaXQpIG9yIGEgZ2VuZXJhdGVkIHNwZWMuIExpbmVzIHNhdmVkIGJlZm9yZVxyXG4gIC8vIG9yaWdpbmFsQW1vdW50IGV4aXN0ZWQgaGVsZCB0aGUgb3JpZ2luYWwgaW4gYGFtb3VudGAuXHJcbiAgY3JlYXRlTGluZUl0ZW1Hcm91cChpdGVtOiBhbnkpOiBGb3JtR3JvdXAge1xyXG4gICAgY29uc3Qgb3JpZ2luYWwgPSB0aGlzLnJvdW5kMihOdW1iZXIoaXRlbT8ub3JpZ2luYWxBbW91bnQgPz8gaXRlbT8uYW1vdW50KSB8fCAwKTtcclxuICAgIGNvbnN0IGNyZWRpdCA9IHRoaXMucm91bmQyKE51bWJlcihpdGVtPy5jcmVkaXQpIHx8IDApO1xyXG4gICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBwcm9kdWN0TmFtZTogW2l0ZW0/LnByb2R1Y3ROYW1lIHx8ICcnXSxcclxuICAgICAgc3RvcmVJZDogW2l0ZW0/LnN0b3JlSWQgfHwgJyddLFxyXG4gICAgICBzdG9yZU5hbWU6IFtpdGVtPy5zdG9yZU5hbWUgfHwgJyddLFxyXG4gICAgICBhbGxTdG9yZXM6IFshIWl0ZW0/LmFsbFN0b3Jlc10sXHJcbiAgICAgIHN0b3JlczogW2l0ZW0/LnN0b3JlcyB8fCBbXV0sXHJcbiAgICAgIGRlc2NyaXB0aW9uOiBbaXRlbT8uZGVzY3JpcHRpb24gfHwgJyddLFxyXG4gICAgICBtb250aDogW2l0ZW0/Lm1vbnRoID8/IHRoaXMuY3VycmVudE1vbnRoTGFiZWwoKV0sXHJcbiAgICAgIEhzbk51bWJlcjogW2l0ZW0/Lkhzbk51bWJlciB8fCAnOTk4MzE0J10sXHJcbiAgICAgIC8vIFRoZSBBbW91bnQgZmllbGQuXHJcbiAgICAgIG9yaWdpbmFsQW1vdW50OiBbb3JpZ2luYWwsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbigwKV1dLFxyXG4gICAgICAvLyBBZnRlciBjcmVkaXQgKEFtb3VudCDiiJIgQ3JlZGl0KSDigJQgZGVyaXZlZCwga2VwdCBpbiBzeW5jIG9uIGlucHV0LlxyXG4gICAgICBhbW91bnQ6IFt0aGlzLnJvdW5kMihvcmlnaW5hbCAtIGNyZWRpdCldLFxyXG4gICAgICBjcmVkaXQ6IFtjcmVkaXQsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbigwKV1dLFxyXG4gICAgfSwgeyB2YWxpZGF0b3JzOiAoZ3JvdXA6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcclxuICAgICAgY29uc3Qgb3JpZyA9IE51bWJlcihncm91cC5nZXQoJ29yaWdpbmFsQW1vdW50Jyk/LnZhbHVlKSB8fCAwO1xyXG4gICAgICBjb25zdCBjID0gTnVtYmVyKGdyb3VwLmdldCgnY3JlZGl0Jyk/LnZhbHVlKTtcclxuICAgICAgcmV0dXJuIGMgPiBvcmlnICsgMC4wMDUgPyB7IGNyZWRpdEFib3ZlQW1vdW50OiB0cnVlIH0gOiBudWxsO1xyXG4gICAgfSB9KTtcclxuICB9XHJcblxyXG4gIC8vIEFtb3VudCBhbmQgQ3JlZGl0IGFyZSBpbmRlcGVuZGVudDogdHlwaW5nIGluIGVpdGhlciBvbmx5IHJlZnJlc2hlcyB0aGVcclxuICAvLyBkZXJpdmVkIGFmdGVyLWNyZWRpdCBhbW91bnQgKGFuZCB0aGUgY3JlZGl0LWFib3ZlLWFtb3VudCBjaGVjaykuXHJcbiAgb25MaW5lQ3JlZGl0SW5wdXQoaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5zeW5jTGluZUFtb3VudChpbmRleCk7XHJcbiAgfVxyXG5cclxuICBvbkxpbmVBbW91bnRJbnB1dChpbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnN5bmNMaW5lQW1vdW50KGluZGV4KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3luY0xpbmVBbW91bnQoaW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3QgZyA9IHRoaXMubGluZUl0ZW1zLmF0KGluZGV4KTtcclxuICAgIGNvbnN0IG9yaWcgPSBOdW1iZXIoZy5nZXQoJ29yaWdpbmFsQW1vdW50Jyk/LnZhbHVlKSB8fCAwO1xyXG4gICAgY29uc3QgY3JlZGl0ID0gTnVtYmVyKGcuZ2V0KCdjcmVkaXQnKT8udmFsdWUpIHx8IDA7XHJcbiAgICBnLmdldCgnYW1vdW50Jyk/LnNldFZhbHVlKHRoaXMucm91bmQyKG9yaWcgLSBjcmVkaXQpLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICBnLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICB9XHJcblxyXG4gIGxpbmVJdGVtSW52YWxpZChpbmRleDogbnVtYmVyLCBuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGN0cmwgPSB0aGlzLmxpbmVJdGVtcy5hdChpbmRleCk/LmdldChuYW1lKTtcclxuICAgIHJldHVybiAhIWN0cmwgJiYgY3RybC50b3VjaGVkICYmIGN0cmwuaW52YWxpZDtcclxuICB9XHJcblxyXG4gIGNyZWRpdEFib3ZlQW1vdW50KGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhIXRoaXMubGluZUl0ZW1zLmF0KGluZGV4KT8uaGFzRXJyb3IoJ2NyZWRpdEFib3ZlQW1vdW50Jyk7XHJcbiAgfVxyXG5cclxuICAvLyBIZWFkaW5nIGZvciBhIGdlbmVyYXRlZCBsaW5lOiB0aGUgcHJvZHVjdCwgdGhlIHN0b3JlLCBvciB0aGUgaW52b2ljZS5cclxuICBsaW5lTGFiZWwoaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBjb25zdCB2ID0gdGhpcy5saW5lSXRlbXMuYXQoaW5kZXgpPy52YWx1ZSB8fCB7fTtcclxuICAgIGlmICh2LnByb2R1Y3ROYW1lKSB7XHJcbiAgICAgIGNvbnN0IHN0b3JlcyA9ICh2LnN0b3JlcyB8fCBbXSkubGVuZ3RoO1xyXG4gICAgICByZXR1cm4gdGhpcy5mb3JtYXRQcm9kdWN0TmFtZSh2LnByb2R1Y3ROYW1lKSArIChzdG9yZXMgPyBgIMK3ICR7c3RvcmVzfSBzdG9yZSR7c3RvcmVzID09PSAxID8gJycgOiAncyd9YCA6ICcnKTtcclxuICAgIH1cclxuICAgIGlmICh2LmFsbFN0b3JlcykgcmV0dXJuIGBBbGwgc3RvcmVzICgke3RoaXMuYnJlYWtkb3duU3RvcmVzLmxlbmd0aCB8fCB0aGlzLnNlbGVjdGVkU3RvcmVzLmxlbmd0aH0pYDtcclxuICAgIGlmICh2LnN0b3JlTmFtZSB8fCB2LnN0b3JlSWQpIHJldHVybiB2LnN0b3JlTmFtZSB8fCB2LnN0b3JlSWQ7XHJcbiAgICByZXR1cm4gYEFnYWluc3QgJHt0aGlzLnNvdXJjZUludm9pY2VOdW1iZXIgfHwgJ2ludm9pY2UnfWA7XHJcbiAgfVxyXG5cclxuICAvLyBMaW5lcyB0aGF0IG9ubHkgdGFrZSBBbW91bnQgYW5kIENyZWRpdCAobm8gZGVzY3JpcHRpb24gLyBtb250aCAvIEhTTik6XHJcbiAgLy8gYWdhaW5zdCBpbnZvaWNlLCBhbmQgYnkgc3RvcmUgd2l0aCBhbGwgc3RvcmVzIHNlbGVjdGVkLlxyXG4gIGlzQW1vdW50T25seUxpbmUoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY3JlZGl0VHlwZSA9PT0gJ2ludm9pY2UnIHx8ICEhdGhpcy5saW5lSXRlbXMuYXQoaW5kZXgpPy5nZXQoJ2FsbFN0b3JlcycpPy52YWx1ZTtcclxuICB9XHJcblxyXG4gIC8vIFRoaXMgY3JlZGl0IG5vdGUncyB0b3RhbCBjcmVkaXQuXHJcbiAgZ2V0Q3JlZGl0VG90YWwoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnJvdW5kMih0aGlzLmxpbmVJdGVtcy5jb250cm9scy5yZWR1Y2UoKHMsIGcpID0+IHMgKyAoTnVtYmVyKGcuZ2V0KCdjcmVkaXQnKT8udmFsdWUpIHx8IDApLCAwKSk7XHJcbiAgfVxyXG5cclxuICAvLyBDcmVkaXRlZCBvbiB0aGUgc2FtZSBpbnZvaWNlIGJ5IE9USEVSIGNyZWRpdCBub3RlczogaW52b2ljZSBhbW91bnQgKGV4Y2wuXHJcbiAgLy8gR1NUKSBtaW51cyB3aGF0IGlzIHN0aWxsIGNyZWRpdGFibGUgZm9yIHRoaXMgb25lLiAwIHVudGlsIGJvdGggYXJlIGtub3duLlxyXG4gIGdldCBhbHJlYWR5Q3JlZGl0ZWQoKTogbnVtYmVyIHtcclxuICAgIGlmICh0aGlzLmNyZWRpdGFibGVCYWxhbmNlID09PSBudWxsIHx8ICF0aGlzLnNvdXJjZUludm9pY2VBbW91bnQpIHJldHVybiAwO1xyXG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIHRoaXMucm91bmQyKHRoaXMuc291cmNlSW52b2ljZUFtb3VudCAtIHRoaXMuY3JlZGl0YWJsZUJhbGFuY2UpKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0gQ3JlZGl0IHR5cGUsIHByb2R1Y3QgbGluZXMgYW5kIHN0b3JlIHBpY2tlcnMgLS0tLVxyXG4gIGxvYWRJbnZvaWNlQnJlYWtkb3duKGludm9pY2VJZDogc3RyaW5nKSB7XHJcbiAgICBpZiAoIWludm9pY2VJZCkgcmV0dXJuO1xyXG4gICAgdGhpcy5icmVha2Rvd25Mb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuYmlsbGluZ1NlcnZpY2UuY3JlZGl0Tm90ZUludm9pY2VCcmVha2Rvd24oaW52b2ljZUlkKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgZCA9IHJlcz8uZGF0YSB8fCB7fTtcclxuICAgICAgICB0aGlzLmJyZWFrZG93blByb2R1Y3RzID0gZC5wcm9kdWN0cyB8fCBbXTtcclxuICAgICAgICB0aGlzLmJyZWFrZG93blN0b3JlcyA9IGQuc3RvcmVzIHx8IFtdO1xyXG4gICAgICAgIHRoaXMucHJvZHVjdFN0b3JlcyA9IGQucHJvZHVjdFN0b3JlcyB8fCB7fTtcclxuICAgICAgICB0aGlzLnN0b3JlUHJvZHVjdENvc3RzID0gZC5icmVha2Rvd24gfHwgW107XHJcbiAgICAgICAgdGhpcy5zb3VyY2VJbnZvaWNlQW1vdW50ID0gTnVtYmVyKGQuaW52b2ljZUFtb3VudCkgfHwgMDtcclxuICAgICAgICBpZiAodGhpcy5hbGxTdG9yZXNTZWxlY3RlZCkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFN0b3JlcyA9IHRoaXMuYnJlYWtkb3duU3RvcmVzLm1hcCgocykgPT4gcy5zdG9yZUlkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5icmVha2Rvd25Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmJyZWFrZG93bkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoZXJyPy5lcnJvcj8ubWVzc2FnZSB8fCAnRmFpbGVkIHRvIGxvYWQgdGhlIGludm9pY2VcXCdzIHByb2R1Y3RzIGFuZCBzdG9yZXMnKTtcclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gQnkgcHJvZHVjdCBzdGFydHMgd2l0aCBvbmUgZW1wdHkgcHJvZHVjdCBsaW5lOyBieSBzdG9yZSB3YWl0cyBmb3IgYSBzdG9yZVxyXG4gIC8vIHBpY2s7IGFnYWluc3QgaW52b2ljZSBpcyBhIHNpbmdsZSBsaW5lIHN0cmFpZ2h0IGF3YXkuXHJcbiAgb25DcmVkaXRUeXBlQ2hhbmdlKHR5cGU6ICdwcm9kdWN0JyB8ICdzdG9yZScgfCAnaW52b2ljZScpIHtcclxuICAgIGlmICh0aGlzLmNyZWRpdFR5cGUgPT09IHR5cGUpIHJldHVybjtcclxuICAgIHRoaXMuY3JlZGl0VHlwZSA9IHR5cGU7XHJcbiAgICB0aGlzLnNlbGVjdGVkU3RvcmVzID0gW107XHJcbiAgICB0aGlzLmFsbFN0b3Jlc1NlbGVjdGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLm9wZW5QaWNrZXIgPSAnJztcclxuICAgIHRoaXMubGluZUl0ZW1zLmNsZWFyKCk7XHJcbiAgICBpZiAodHlwZSA9PT0gJ3Byb2R1Y3QnKSB7XHJcbiAgICAgIHRoaXMuYWRkUHJvZHVjdExpbmUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucmVidWlsZExpbmVJdGVtcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlUGlja2VyKGtleTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLm9wZW5QaWNrZXIgPSB0aGlzLm9wZW5QaWNrZXIgPT09IGtleSA/ICcnIDoga2V5O1xyXG4gICAgdGhpcy5zdG9yZVNlYXJjaCA9ICcnO1xyXG4gIH1cclxuXHJcbiAgLy8gQ2xvc2UgYW4gb3BlbiBjaGVja2JveCBkcm9wZG93biBvbiBhbnkgY2xpY2sgb3V0c2lkZSBpdC5cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXHJcbiAgb25Eb2N1bWVudENsaWNrKGV2ZW50OiBFdmVudCkge1xyXG4gICAgaWYgKHRoaXMub3BlblBpY2tlciAmJiAhKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk/LmNsb3Nlc3Q/LignLmNuLXBpY2tlcicpKSB7XHJcbiAgICAgIHRoaXMub3BlblBpY2tlciA9ICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtYXRjaGVzU2VhcmNoKHM6IHsgc3RvcmVJZDogc3RyaW5nOyBzdG9yZU5hbWU6IHN0cmluZyB9KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCB0ZXJtID0gdGhpcy5zdG9yZVNlYXJjaC50cmltKCkudG9Mb3dlckNhc2UoKTtcclxuICAgIHJldHVybiAhdGVybSB8fCBzLnN0b3JlTmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0pIHx8IHMuc3RvcmVJZC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdG9yZVN1bW1hcnkoc3RvcmVJZHM6IHN0cmluZ1tdLCBuYW1lczogeyBzdG9yZUlkOiBzdHJpbmc7IHN0b3JlTmFtZTogc3RyaW5nIH1bXSwgbm9uZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICghc3RvcmVJZHMubGVuZ3RoKSByZXR1cm4gbm9uZTtcclxuICAgIGlmIChzdG9yZUlkcy5sZW5ndGggPT09IDEpIHJldHVybiBuYW1lcy5maW5kKChzKSA9PiBzLnN0b3JlSWQgPT09IHN0b3JlSWRzWzBdKT8uc3RvcmVOYW1lIHx8IHN0b3JlSWRzWzBdO1xyXG4gICAgcmV0dXJuIGAke3N0b3JlSWRzLmxlbmd0aH0gc3RvcmVzIHNlbGVjdGVkYDtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0gQnkgcHJvZHVjdDogb25lIGxpbmUgcGVyIHByb2R1Y3QgKHNpbmdsZS1zZWxlY3QpLCBlYWNoIHdpdGggaXRzIG93blxyXG4gIC8vIG9wdGlvbmFsIFN0b3JlcywgbGltaXRlZCB0byB0aGUgc3RvcmVzIG1hcHBlZCB0byB0aGF0IHByb2R1Y3Qgb24gdGhlXHJcbiAgLy8gaW52b2ljZS4gQSBwcm9kdWN0IGNhbiBvbmx5IGJlIG9uIG9uZSBsaW5lLiAtLS0tXHJcbiAgZ2V0IGNhbkFkZFByb2R1Y3RMaW5lKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY3JlZGl0VHlwZSA9PT0gJ3Byb2R1Y3QnICYmICF0aGlzLmJyZWFrZG93bkxvYWRpbmcgJiZcclxuICAgICAgdGhpcy5saW5lSXRlbXMubGVuZ3RoIDwgdGhpcy5icmVha2Rvd25Qcm9kdWN0cy5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBhZGRQcm9kdWN0TGluZSgpIHtcclxuICAgIHRoaXMubGluZUl0ZW1zLnB1c2godGhpcy5jcmVhdGVMaW5lSXRlbUdyb3VwKHsgcHJvZHVjdE5hbWU6ICcnLCBvcmlnaW5hbEFtb3VudDogMCwgY3JlZGl0OiAwIH0pKTtcclxuICAgIHRoaXMuc2Nyb2xsVG9MYXN0Um93KCdkYXRhLWxpbmUtaXRlbS1yb3cnKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZVByb2R1Y3RMaW5lKGluZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMubGluZUl0ZW1zLnJlbW92ZUF0KGluZGV4KTtcclxuICAgIHRoaXMub3BlblBpY2tlciA9ICcnO1xyXG4gIH1cclxuXHJcbiAgLy8gVGhlIGludm9pY2UncyBwcm9kdWN0cyBub3QgYWxyZWFkeSBvbiBhbm90aGVyIGxpbmUgKHBsdXMgdGhpcyBsaW5lJ3Mgb3duKS5cclxuICBwcm9kdWN0T3B0aW9uc0ZvcihpbmRleDogbnVtYmVyKTogeyBwcm9kdWN0TmFtZTogc3RyaW5nIH1bXSB7XHJcbiAgICBjb25zdCB1c2VkRWxzZXdoZXJlID0gbmV3IFNldCh0aGlzLmxpbmVJdGVtcy5jb250cm9sc1xyXG4gICAgICAuZmlsdGVyKChfLCBpKSA9PiBpICE9PSBpbmRleClcclxuICAgICAgLm1hcCgoZykgPT4gZy5nZXQoJ3Byb2R1Y3ROYW1lJyk/LnZhbHVlKVxyXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pKTtcclxuICAgIHJldHVybiB0aGlzLmJyZWFrZG93blByb2R1Y3RzLmZpbHRlcigocCkgPT4gIXVzZWRFbHNld2hlcmUuaGFzKHAucHJvZHVjdE5hbWUpKTtcclxuICB9XHJcblxyXG4gIC8vIFByb2R1Y3QgcGlja2VkOiByZXNldCB0aGUgbGluZSB0byB0aGF0IHByb2R1Y3QncyBpbnZvaWNlIGFtb3VudCwgd2l0aCBpdHNcclxuICAvLyBkZXNjcmlwdGlvbiAvIEhTTiwgbm8gc3RvcmVzIGFuZCBubyBjcmVkaXQuXHJcbiAgb25MaW5lUHJvZHVjdENoYW5nZShpbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBnID0gdGhpcy5saW5lSXRlbXMuYXQoaW5kZXgpO1xyXG4gICAgY29uc3QgcHJvZHVjdCA9IHRoaXMuYnJlYWtkb3duUHJvZHVjdHMuZmluZCgocCkgPT4gcC5wcm9kdWN0TmFtZSA9PT0gZy5nZXQoJ3Byb2R1Y3ROYW1lJyk/LnZhbHVlKTtcclxuICAgIGNvbnN0IG9yaWdpbmFsID0gcHJvZHVjdCA/IHByb2R1Y3QuYW1vdW50IDogMDtcclxuICAgIGcucGF0Y2hWYWx1ZSh7XHJcbiAgICAgIHN0b3JlczogW10sXHJcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9kdWN0Py5kZXNjcmlwdGlvbiB8fCAnJyxcclxuICAgICAgSHNuTnVtYmVyOiBwcm9kdWN0Py5Ic25OdW1iZXIgfHwgJzk5ODMxNCcsXHJcbiAgICAgIG9yaWdpbmFsQW1vdW50OiBvcmlnaW5hbCxcclxuICAgICAgY3JlZGl0OiAwLFxyXG4gICAgICBhbW91bnQ6IG9yaWdpbmFsLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLm9wZW5QaWNrZXIgPSAnJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbGluZVN0b3JlSWRzKGluZGV4OiBudW1iZXIpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gKHRoaXMubGluZUl0ZW1zLmF0KGluZGV4KT8uZ2V0KCdzdG9yZXMnKT8udmFsdWUgfHwgW10pLm1hcCgoczogYW55KSA9PiBTdHJpbmcocy5zdG9yZUlkKSk7XHJcbiAgfVxyXG5cclxuICAvLyBTdG9yZXMgbWFwcGVkIHRvIHRoaXMgbGluZSdzIHByb2R1Y3Qgb24gdGhlIGludm9pY2UsIG5hcnJvd2VkIGJ5IHNlYXJjaC5cclxuICBsaW5lU3RvcmVPcHRpb25zKGluZGV4OiBudW1iZXIpOiB7IHN0b3JlSWQ6IHN0cmluZzsgc3RvcmVOYW1lOiBzdHJpbmcgfVtdIHtcclxuICAgIGNvbnN0IHByb2R1Y3QgPSBTdHJpbmcodGhpcy5saW5lSXRlbXMuYXQoaW5kZXgpPy5nZXQoJ3Byb2R1Y3ROYW1lJyk/LnZhbHVlIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgcmV0dXJuICh0aGlzLnByb2R1Y3RTdG9yZXNbcHJvZHVjdF0gfHwgW10pLmZpbHRlcigocykgPT4gdGhpcy5tYXRjaGVzU2VhcmNoKHMpKTtcclxuICB9XHJcblxyXG4gIGlzTGluZVN0b3JlU2VsZWN0ZWQoaW5kZXg6IG51bWJlciwgc3RvcmVJZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5saW5lU3RvcmVJZHMoaW5kZXgpLmluY2x1ZGVzKHN0b3JlSWQpO1xyXG4gIH1cclxuXHJcbiAgbGluZVN0b3JlU3VtbWFyeShpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHByb2R1Y3QgPSBTdHJpbmcodGhpcy5saW5lSXRlbXMuYXQoaW5kZXgpPy5nZXQoJ3Byb2R1Y3ROYW1lJyk/LnZhbHVlIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgcmV0dXJuIHRoaXMuc3RvcmVTdW1tYXJ5KHRoaXMubGluZVN0b3JlSWRzKGluZGV4KSwgdGhpcy5wcm9kdWN0U3RvcmVzW3Byb2R1Y3RdIHx8IFtdLCAnQWxsIHN0b3JlcycpO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlTGluZVN0b3JlKGluZGV4OiBudW1iZXIsIHN0b3JlOiB7IHN0b3JlSWQ6IHN0cmluZzsgc3RvcmVOYW1lOiBzdHJpbmcgfSkge1xyXG4gICAgY29uc3QgZyA9IHRoaXMubGluZUl0ZW1zLmF0KGluZGV4KTtcclxuICAgIGNvbnN0IGN1cnJlbnQ6IGFueVtdID0gZy5nZXQoJ3N0b3JlcycpPy52YWx1ZSB8fCBbXTtcclxuICAgIGNvbnN0IG5leHQgPSBjdXJyZW50LnNvbWUoKHMpID0+IHMuc3RvcmVJZCA9PT0gc3RvcmUuc3RvcmVJZClcclxuICAgICAgPyBjdXJyZW50LmZpbHRlcigocykgPT4gcy5zdG9yZUlkICE9PSBzdG9yZS5zdG9yZUlkKVxyXG4gICAgICA6IFsuLi5jdXJyZW50LCBzdG9yZV07XHJcbiAgICBnLnBhdGNoVmFsdWUoeyBzdG9yZXM6IG5leHQgfSk7XHJcbiAgICB0aGlzLnJlcHJpY2VQcm9kdWN0TGluZShpbmRleCk7XHJcbiAgfVxyXG5cclxuICBjbGVhckxpbmVTdG9yZXMoaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5saW5lSXRlbXMuYXQoaW5kZXgpLnBhdGNoVmFsdWUoeyBzdG9yZXM6IFtdIH0pO1xyXG4gICAgdGhpcy5yZXByaWNlUHJvZHVjdExpbmUoaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgLy8gQSBwcm9kdWN0IGxpbmUncyBhbW91bnQgYmVmb3JlIGNyZWRpdDogdGhvc2Ugc3RvcmVzJyBjb3N0IGZvciB0aGUgcHJvZHVjdCxcclxuICAvLyBvciB0aGUgcHJvZHVjdCdzIHdob2xlIGludm9pY2UgYW1vdW50IHdoZW4gbm8gc3RvcmVzIGFyZSBwaWNrZWQuIEEgdHlwZWRcclxuICAvLyBjcmVkaXQgaXMga2VwdCAoY2FwcGVkIGF0IHRoZSBuZXcgYW1vdW50KS5cclxuICBwcml2YXRlIHJlcHJpY2VQcm9kdWN0TGluZShpbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBnID0gdGhpcy5saW5lSXRlbXMuYXQoaW5kZXgpO1xyXG4gICAgY29uc3QgcHJvZHVjdE5hbWUgPSBnLmdldCgncHJvZHVjdE5hbWUnKT8udmFsdWU7XHJcbiAgICBjb25zdCBwcm9kdWN0ID0gdGhpcy5icmVha2Rvd25Qcm9kdWN0cy5maW5kKChwKSA9PiBwLnByb2R1Y3ROYW1lID09PSBwcm9kdWN0TmFtZSk7XHJcbiAgICBjb25zdCBpZHMgPSB0aGlzLmxpbmVTdG9yZUlkcyhpbmRleCk7XHJcbiAgICBjb25zdCBvcmlnaW5hbCA9IGlkcy5sZW5ndGggPyB0aGlzLnN0b3JlQ29zdChpZHMsIHByb2R1Y3ROYW1lKSA6IChwcm9kdWN0Py5hbW91bnQgfHwgMCk7XHJcbiAgICBjb25zdCBjcmVkaXQgPSBNYXRoLm1pbihOdW1iZXIoZy5nZXQoJ2NyZWRpdCcpPy52YWx1ZSkgfHwgMCwgb3JpZ2luYWwpO1xyXG4gICAgZy5wYXRjaFZhbHVlKHsgb3JpZ2luYWxBbW91bnQ6IG9yaWdpbmFsLCBjcmVkaXQsIGFtb3VudDogdGhpcy5yb3VuZDIob3JpZ2luYWwgLSBjcmVkaXQpIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLSBCeSBzdG9yZTogb25lIFN0b3JlcyBkcm9wZG93biAodGhlIGJpbGxpbmcgZ3JvdXAncyBzdG9yZXMpIOKGkiBvbmVcclxuICAvLyBsaW5lIHBlciBzdG9yZSwgb3IgYSBzaW5nbGUgQWxsLXN0b3JlcyBsaW5lIHdoZW4gZXZlcnkgc3RvcmUgaXMgc2VsZWN0ZWQuXHJcbiAgdG9nZ2xlU3RvcmUoc3RvcmVJZDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBhbGwgPSB0aGlzLmJyZWFrZG93blN0b3Jlcy5tYXAoKHMpID0+IHMuc3RvcmVJZCk7XHJcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5hbGxTdG9yZXNTZWxlY3RlZCA/IGFsbCA6IHRoaXMuc2VsZWN0ZWRTdG9yZXM7XHJcbiAgICB0aGlzLnNlbGVjdGVkU3RvcmVzID0gY3VycmVudC5pbmNsdWRlcyhzdG9yZUlkKVxyXG4gICAgICA/IGN1cnJlbnQuZmlsdGVyKChzKSA9PiBzICE9PSBzdG9yZUlkKVxyXG4gICAgICA6IFsuLi5jdXJyZW50LCBzdG9yZUlkXTtcclxuICAgIC8vIFRpY2tpbmcgZXZlcnkgc3RvcmUgYnkgaGFuZCBjb3VudHMgYXMgU2VsZWN0IGFsbC5cclxuICAgIHRoaXMuYWxsU3RvcmVzU2VsZWN0ZWQgPSBhbGwubGVuZ3RoID4gMCAmJiB0aGlzLnNlbGVjdGVkU3RvcmVzLmxlbmd0aCA9PT0gYWxsLmxlbmd0aDtcclxuICAgIHRoaXMucmVidWlsZExpbmVJdGVtcygpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0QWxsU3RvcmVzKCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZFN0b3JlcyA9IHRoaXMuYnJlYWtkb3duU3RvcmVzLm1hcCgocykgPT4gcy5zdG9yZUlkKTtcclxuICAgIHRoaXMuYWxsU3RvcmVzU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkU3RvcmVzLmxlbmd0aCA+IDA7XHJcbiAgICB0aGlzLnJlYnVpbGRMaW5lSXRlbXMoKTtcclxuICB9XHJcblxyXG4gIGNsZWFyU3RvcmVzKCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZFN0b3JlcyA9IFtdO1xyXG4gICAgdGhpcy5hbGxTdG9yZXNTZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5yZWJ1aWxkTGluZUl0ZW1zKCk7XHJcbiAgfVxyXG5cclxuICBpc1N0b3JlU2VsZWN0ZWQoc3RvcmVJZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5hbGxTdG9yZXNTZWxlY3RlZCB8fCB0aGlzLnNlbGVjdGVkU3RvcmVzLmluY2x1ZGVzKHN0b3JlSWQpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGZpbHRlcmVkU3RvcmVzKCk6IHsgc3RvcmVJZDogc3RyaW5nOyBzdG9yZU5hbWU6IHN0cmluZyB9W10ge1xyXG4gICAgcmV0dXJuIHRoaXMuYnJlYWtkb3duU3RvcmVzLmZpbHRlcigocykgPT4gdGhpcy5tYXRjaGVzU2VhcmNoKHMpKTtcclxuICB9XHJcblxyXG4gIGdldCBzdG9yZVBpY2tlclN1bW1hcnkoKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLmFsbFN0b3Jlc1NlbGVjdGVkKSByZXR1cm4gYEFsbCBzdG9yZXMgKCR7dGhpcy5icmVha2Rvd25TdG9yZXMubGVuZ3RofSlgO1xyXG4gICAgcmV0dXJuIHRoaXMuc3RvcmVTdW1tYXJ5KHRoaXMuc2VsZWN0ZWRTdG9yZXMsIHRoaXMuYnJlYWtkb3duU3RvcmVzLCAnU2VsZWN0IHN0b3JlcycpO1xyXG4gIH1cclxuXHJcbiAgLy8gU3RvcmUgw5cgcHJvZHVjdCBjb3N0IGZyb20gdGhlIGludm9pY2UncyBzdG9yZSBicmVha2Rvd24gKGNhc2UtaW5zZW5zaXRpdmVcclxuICAvLyBwcm9kdWN0IG1hdGNoIOKAlCB0aGUgYnJlYWtkb3duIGFuZCBpbnZvaWNlcyBzcGVsbCBwcm9kdWN0cyBkaWZmZXJlbnRseSkuXHJcbiAgcHJpdmF0ZSBzdG9yZUNvc3Qoc3RvcmVJZHM6IHN0cmluZ1tdIHwgbnVsbCwgcHJvZHVjdE5hbWU6IHN0cmluZyB8IG51bGwpOiBudW1iZXIge1xyXG4gICAgY29uc3QgaWRzID0gc3RvcmVJZHMgPyBuZXcgU2V0KHN0b3JlSWRzKSA6IG51bGw7XHJcbiAgICBjb25zdCBrZXkgPSBwcm9kdWN0TmFtZSA/IHByb2R1Y3ROYW1lLnRvTG93ZXJDYXNlKCkgOiBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXMucm91bmQyKHRoaXMuc3RvcmVQcm9kdWN0Q29zdHNcclxuICAgICAgLmZpbHRlcigoYykgPT4gKCFpZHMgfHwgaWRzLmhhcyhjLnN0b3JlSWQpKSAmJiAoIWtleSB8fCBjLnByb2R1Y3ROYW1lID09PSBrZXkpKVxyXG4gICAgICAucmVkdWNlKChzLCBjKSA9PiBzICsgKE51bWJlcihjLmFtb3VudCkgfHwgMCksIDApKTtcclxuICB9XHJcblxyXG4gIC8vIEJ5IHN0b3JlIC8gYWdhaW5zdCBpbnZvaWNlOiByZWdlbmVyYXRlIHRoZSBsaW5lcyBmcm9tIHRoZSBzZWxlY3Rpb24sXHJcbiAgLy8ga2VlcGluZyB3aGF0IHRoZSB1c2VyIGFscmVhZHkgdHlwZWQgKGNyZWRpdCwgZGVzY3JpcHRpb24sIG1vbnRoLCBIU04pIG9uXHJcbiAgLy8gbGluZXMgdGhhdCBzdGF5LiAoQnkgcHJvZHVjdCBsaW5lcyBhcmUgbWFuYWdlZCBvbmUgYnkgb25lIGFib3ZlLilcclxuICBwcml2YXRlIHJlYnVpbGRMaW5lSXRlbXMoKSB7XHJcbiAgICBjb25zdCBrZXlPZiA9ICh2OiBhbnkpID0+ICh2LmFsbFN0b3JlcyA/ICdhJyA6ICh2LnN0b3JlSWQgPyBgczoke3Yuc3RvcmVJZH1gIDogJ2knKSk7XHJcbiAgICBjb25zdCBwcmV2aW91cyA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KHRoaXMubGluZUl0ZW1zLmNvbnRyb2xzLm1hcCgoZykgPT4gW2tleU9mKGcudmFsdWUpLCBnLmdldFJhd1ZhbHVlKCldKSk7XHJcbiAgICBsZXQgc3BlY3M6IGFueVtdID0gW107XHJcbiAgICBpZiAodGhpcy5jcmVkaXRUeXBlID09PSAnc3RvcmUnICYmIHRoaXMuYWxsU3RvcmVzU2VsZWN0ZWQpIHtcclxuICAgICAgLy8gRXZlcnkgc3RvcmU6IG9uZSBsaW5lIGF0IGFsbCBzdG9yZXMnIGNvc3QuXHJcbiAgICAgIHNwZWNzID0gW3sgYWxsU3RvcmVzOiB0cnVlLCBzdG9yZU5hbWU6ICdBbGwgc3RvcmVzJywgb3JpZ2luYWxBbW91bnQ6IHRoaXMuc3RvcmVDb3N0KG51bGwsIG51bGwpIH1dO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmNyZWRpdFR5cGUgPT09ICdzdG9yZScpIHtcclxuICAgICAgc3BlY3MgPSB0aGlzLmJyZWFrZG93blN0b3Jlc1xyXG4gICAgICAgIC5maWx0ZXIoKHMpID0+IHRoaXMuc2VsZWN0ZWRTdG9yZXMuaW5jbHVkZXMocy5zdG9yZUlkKSlcclxuICAgICAgICAubWFwKChzKSA9PiAoeyBzdG9yZUlkOiBzLnN0b3JlSWQsIHN0b3JlTmFtZTogcy5zdG9yZU5hbWUsIG9yaWdpbmFsQW1vdW50OiB0aGlzLnN0b3JlQ29zdChbcy5zdG9yZUlkXSwgbnVsbCkgfSkpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmNyZWRpdFR5cGUgPT09ICdpbnZvaWNlJykge1xyXG4gICAgICBzcGVjcyA9IFt7IG9yaWdpbmFsQW1vdW50OiB0aGlzLnNvdXJjZUludm9pY2VBbW91bnQgfV07XHJcbiAgICB9XHJcbiAgICB0aGlzLmxpbmVJdGVtcy5jbGVhcigpO1xyXG4gICAgZm9yIChjb25zdCBzcGVjIG9mIHNwZWNzKSB7XHJcbiAgICAgIGNvbnN0IG9sZCA9IHByZXZpb3VzLmdldChrZXlPZihzcGVjKSk7XHJcbiAgICAgIGNvbnN0IGNyZWRpdCA9IG9sZCA/IE1hdGgubWluKE51bWJlcihvbGQuY3JlZGl0KSB8fCAwLCBzcGVjLm9yaWdpbmFsQW1vdW50KSA6IDA7XHJcbiAgICAgIHRoaXMubGluZUl0ZW1zLnB1c2godGhpcy5jcmVhdGVMaW5lSXRlbUdyb3VwKHtcclxuICAgICAgICAuLi5zcGVjLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiBvbGQ/LmRlc2NyaXB0aW9uID8/ICcnLFxyXG4gICAgICAgIG1vbnRoOiBvbGQ/Lm1vbnRoID8/IHRoaXMuY3VycmVudE1vbnRoTGFiZWwoKSxcclxuICAgICAgICBIc25OdW1iZXI6IG9sZD8uSHNuTnVtYmVyLFxyXG4gICAgICAgIGNyZWRpdCxcclxuICAgICAgfSkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICAvLyBDb21wYW55IC8gZ3JvdXAgLyBjdXJyZW5jeSBvZiB0aGUgY3JlZGl0IG5vdGUg4oCUIGZyb20gaXRzIHNvdXJjZSBpbnZvaWNlXHJcbiAgLy8gKG5ldykgb3IgYXMgc3RvcmVkIG9uIHRoZSBjcmVkaXQgbm90ZSAoZWRpdCkuIFJlYWQtb25seSBpbiB0aGUgZm9ybS5cclxuICBwcml2YXRlIHBhdGNoQ29tcGFueURldGFpbHMoc3JjOiBhbnkpIHtcclxuICAgIHRoaXMuaW52b2ljZUZvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgIGNvbXBhbnlOYW1lOiBzcmMuY29tcGFueU5hbWUgfHwgJycsXHJcbiAgICAgIGNvbXBhbnlBZGRyZXNzOiBzcmMuY29tcGFueUFkZHJlc3MgfHwgJycsXHJcbiAgICAgIEdTVE51bWJlcjogc3JjLkdTVE51bWJlciB8fCAnJyxcclxuICAgICAgUGxhY2VPZlN1cHBseTogc3JjLlBsYWNlT2ZTdXBwbHkgfHwgJycsXHJcbiAgICAgIGdyb3VwTmFtZTogc3JjLmdyb3VwTmFtZSB8fCAnJyxcclxuICAgICAgZ3JvdXBJZDogc3JjLmdyb3VwSWQgfHwgJycsXHJcbiAgICAgIGN1cnJlbmN5OiBzcmMuY3VycmVuY3kgfHwgJ2lucicsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIEZ1bGx5IGNyZWRpdGVkIGludm9pY2VzIGFyZSBsaXN0ZWQgYnV0IGNhbid0IGJlIHBpY2tlZC5cclxuICBpc0ludm9pY2VQaWNrYWJsZShpbnY6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIE51bWJlcihpbnY/LmJhbGFuY2UpID4gMDtcclxuICB9XHJcblxyXG4gIGludm9pY2VPcHRpb25MYWJlbChpbnY6IGFueSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBkYXRlID0gaW52Py5iaWxsaW5nRGF0ZSA/IG5ldyBEYXRlKGludi5iaWxsaW5nRGF0ZSkudG9Mb2NhbGVEYXRlU3RyaW5nKCdlbi1HQicsIHsgZGF5OiAnMi1kaWdpdCcsIG1vbnRoOiAnc2hvcnQnLCB5ZWFyOiAnbnVtZXJpYycgfSkgOiAnJztcclxuICAgIGNvbnN0IG5vdGUgPSB0aGlzLmlzSW52b2ljZVBpY2thYmxlKGludilcclxuICAgICAgPyBgJHt0aGlzLnN5bWJvbEZvcihpbnY/LmN1cnJlbmN5KX0ke051bWJlcihpbnYuYmFsYW5jZSkudG9Mb2NhbGVTdHJpbmcoJ2VuLUlOJywgeyBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IDIgfSl9IGNyZWRpdGFibGVgXHJcbiAgICAgIDogJ2Z1bGx5IGNyZWRpdGVkJztcclxuICAgIC8vIFBhaWQgaW52b2ljZXMgYXJlIGxpc3RlZCB0b28sIHNvIHNheSB3aGVyZSBlYWNoIHN0YW5kcy5cclxuICAgIGNvbnN0IHBheW1lbnQgPSAoeyBwYWlkOiAnUGFpZCcsIHBhcnRpYWw6ICdQYXJ0aWFsbHkgcGFpZCcsIHVucGFpZDogJ1VucGFpZCcgfSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KVtpbnY/LnBheW1lbnRTdGF0dXNdIHx8ICcnO1xyXG4gICAgY29uc3QgcGFydHMgPSBbXHJcbiAgICAgIGAke2ludj8uaW52b2ljZX0ke2ludj8uYWR2YW5jZUludm9pY2UgPyAnIChBZHZhbmNlKScgOiAnJ31gLFxyXG4gICAgICB0aGlzLnBpY2tBY3Jvc3NCcmFuZHMgPyAoaW52Py5jbGllbnROYW1lIHx8ICcnKSA6ICcnLFxyXG4gICAgICBkYXRlLFxyXG4gICAgICBwYXltZW50LFxyXG4gICAgICBub3RlLFxyXG4gICAgXTtcclxuICAgIHJldHVybiBwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbignIMK3ICcpO1xyXG4gIH1cclxuXHJcbiAgLy8gSW52b2ljZSBwaWNrZWQ6IGxvYWQgdGhlIGZ1bGwgaW52b2ljZSAoY29tcGFueSBkZXRhaWxzKSBhbmQgaXRzIHByb2R1Y3RzIC9cclxuICAvLyBzdG9yZXMgYnJlYWtkb3duLiBObyBsaW5lIGl0ZW1zIHlldCDigJQgdGhleSBhcHBlYXIgb25jZSBhIGNyZWRpdCB0eXBlIGlzXHJcbiAgLy8gY2hvc2VuLiBBY3Jvc3MgYnJhbmRzLCB0aGUgYnJhbmQgY29tZXMgZnJvbSB0aGUgaW52b2ljZSwgc28gaXRzIGJpbGxpbmdcclxuICAvLyBncm91cHMgKHJlYWQtb25seSBncm91cCBmaWVsZCkgYXJlIChyZSlsb2FkZWQuXHJcbiAgb25JbnZvaWNlUGljaygpIHtcclxuICAgIGNvbnN0IGludm9pY2VJZCA9IHRoaXMuaW52b2ljZUZvcm0uZ2V0KCdpbnZvaWNlSWQnKT8udmFsdWU7XHJcbiAgICBjb25zdCBwaWNrZWQgPSB0aGlzLmNyZWRpdGFibGVJbnZvaWNlcy5maW5kKChpbnY6IGFueSkgPT4gaW52Ll9pZCA9PT0gaW52b2ljZUlkKTtcclxuICAgIHRoaXMucmVzZXRDcmVkaXROb3RlU291cmNlKGludm9pY2VJZCk7XHJcbiAgICBpZiAoIXBpY2tlZCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMucGlja0Fjcm9zc0JyYW5kcyAmJiBTdHJpbmcocGlja2VkLmNsaWVudElkKSAhPT0gdGhpcy5jbGllbnRJZCkge1xyXG4gICAgICB0aGlzLmNsaWVudElkID0gU3RyaW5nKHBpY2tlZC5jbGllbnRJZCk7XHJcbiAgICAgIHRoaXMuYmlsbGluZ0dyb3VwcyA9IFtdO1xyXG4gICAgICB0aGlzLmxvYWRCaWxsaW5nR3JvdXBzKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmxvYWRJbnZvaWNlQnJlYWtkb3duKGludm9pY2VJZCk7XHJcbiAgICB0aGlzLmJpbGxpbmdTZXJ2aWNlLmdldEludm9pY2VCeUlkKGludm9pY2VJZCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGludm9pY2UgPSByZXM/LmRhdGE7XHJcbiAgICAgICAgaWYgKCFpbnZvaWNlKSB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoJ0ZhaWxlZCB0byBsb2FkIGludm9pY2UnKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wYXRjaENvbXBhbnlEZXRhaWxzKGludm9pY2UpO1xyXG4gICAgICAgIHRoaXMuc291cmNlSW52b2ljZSA9IHBpY2tlZDtcclxuICAgICAgICB0aGlzLmNyZWRpdGFibGVCYWxhbmNlID0gTnVtYmVyKHBpY2tlZC5iYWxhbmNlKSB8fCAwO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKCkgPT4gdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KCdGYWlsZWQgdG8gbG9hZCBpbnZvaWNlJyksXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIENsZWFyIHRoZSBwcmVmaWxsZWQgaW52b2ljZSBkYXRhIChrZWVwaW5nIHRoZSBwaWNrZWQgaW52b2ljZUlkLCBpZiBhbnkpLlxyXG4gIHByaXZhdGUgcmVzZXRDcmVkaXROb3RlU291cmNlKGludm9pY2VJZDogc3RyaW5nID0gJycpIHtcclxuICAgIHRoaXMuc291cmNlSW52b2ljZSA9IG51bGw7XHJcbiAgICB0aGlzLmNyZWRpdGFibGVCYWxhbmNlID0gbnVsbDtcclxuICAgIHRoaXMuaW52b2ljZUZvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgIGludm9pY2VJZCwgZ3JvdXBJZDogJycsIGdyb3VwTmFtZTogJycsIGNvbXBhbnlOYW1lOiAnJywgY29tcGFueUFkZHJlc3M6ICcnLFxyXG4gICAgICBHU1ROdW1iZXI6ICcnLCBQbGFjZU9mU3VwcGx5OiAnJywgcmVhc29uOiAnJyxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5saW5lSXRlbXMuY2xlYXIoKTtcclxuICAgIHRoaXMuY3JlZGl0VHlwZSA9ICcnO1xyXG4gICAgdGhpcy5zZWxlY3RlZFN0b3JlcyA9IFtdO1xyXG4gICAgdGhpcy5hbGxTdG9yZXNTZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5vcGVuUGlja2VyID0gJyc7XHJcbiAgICB0aGlzLmJyZWFrZG93blByb2R1Y3RzID0gW107XHJcbiAgICB0aGlzLmJyZWFrZG93blN0b3JlcyA9IFtdO1xyXG4gICAgdGhpcy5wcm9kdWN0U3RvcmVzID0ge307XHJcbiAgICB0aGlzLnN0b3JlUHJvZHVjdENvc3RzID0gW107XHJcbiAgICB0aGlzLnNvdXJjZUludm9pY2VBbW91bnQgPSAwO1xyXG4gIH1cclxuXHJcbiAgLy8gT25lIGJyYW5kJ3MgaW52b2ljZXMsIG9yIGV2ZXJ5IGJyYW5kJ3Mgd2hlbiBwaWNraW5nIGFjcm9zcyBicmFuZHMuXHJcbiAgbG9hZENyZWRpdGFibGVJbnZvaWNlcygpIHtcclxuICAgIGNvbnN0IGNJZCA9IHRoaXMucGlja0Fjcm9zc0JyYW5kcyA/ICcnIDogKHRoaXMuY2xpZW50SWQgfHwgdGhpcy5pbnZvaWNlRGF0YT8uY2xpZW50SWQpO1xyXG4gICAgaWYgKCFjSWQgJiYgIXRoaXMucGlja0Fjcm9zc0JyYW5kcykgcmV0dXJuO1xyXG4gICAgdGhpcy5iaWxsaW5nU2VydmljZS5jcmVkaXROb3RlSW52b2ljZXMoY0lkKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5jcmVkaXRhYmxlSW52b2ljZXMgPSByZXM/LmRhdGEgfHwgW107XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ2VkaXRDcmVkaXROb3RlJykge1xyXG4gICAgICAgICAgLy8gVGhpcyBjcmVkaXQgbm90ZSBpcyBhbHJlYWR5IGNvdW50ZWQgaW4gdGhlIGludm9pY2UncyBjcmVkaXRlZFxyXG4gICAgICAgICAgLy8gYW1vdW50IOKAlCBhZGQgaXQgYmFjayB0byBnZXQgd2hhdCBpdCBtYXkgYmUgZWRpdGVkIHVwIHRvLlxyXG4gICAgICAgICAgY29uc3Qgc291cmNlID0gdGhpcy5jcmVkaXRhYmxlSW52b2ljZXMuZmluZCgoaW52OiBhbnkpID0+IGludi5faWQgPT09IHRoaXMuaW52b2ljZURhdGE/Lmludm9pY2VJZCk7XHJcbiAgICAgICAgICBpZiAoc291cmNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlZGl0YWJsZUJhbGFuY2UgPSAoTnVtYmVyKHNvdXJjZS5iYWxhbmNlKSB8fCAwKSArIChOdW1iZXIodGhpcy5pbnZvaWNlRGF0YT8udG90YWxBbW91bnQpIHx8IDApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmludm9pY2VzTG9hZEZhaWxlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgLy8gU2F5IHNvIOKAlCBhbiBlbXB0eSBsaXN0IHdvdWxkIHJlYWQgYXMgXCJ0aGlzIGJyYW5kIGhhcyBubyBpbnZvaWNlc1wiLlxyXG4gICAgICAgIHRoaXMuY3JlZGl0YWJsZUludm9pY2VzID0gW107XHJcbiAgICAgICAgdGhpcy5pbnZvaWNlc0xvYWRGYWlsZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChlcnI/LmVycm9yPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gbG9hZCBpbnZvaWNlcycpO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PT0gRURJVCBJTlZPSUNFID09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICBpbml0Rm9ybSgpIHtcclxuICAgIHRoaXMuaW52b2ljZUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgLy8gQ3JlZGl0IG5vdGUgb25seTogdGhlIHNvdXJjZSBpbnZvaWNlIGl0IGNyZWRpdHMgYW5kIGEgZnJlZS10ZXh0IHJlYXNvbi5cclxuICAgICAgaW52b2ljZUlkOiBbJycsIHRoaXMubW9kZSA9PT0gJ2NyZWRpdE5vdGUnID8gVmFsaWRhdG9ycy5yZXF1aXJlZCA6IFtdXSxcclxuICAgICAgcmVhc29uOiBbJyddLFxyXG4gICAgICBjb21wYW55TmFtZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgY29tcGFueUFkZHJlc3M6IFsnJ10sXHJcbiAgICAgIEdTVE51bWJlcjogWycnXSxcclxuICAgICAgUGxhY2VPZlN1cHBseTogWycnXSxcclxuICAgICAgZ3JvdXBOYW1lOiBbJyddLFxyXG4gICAgICAvLyBCaWxsaW5nIEdyb3VwIGlzIHJlcXVpcmVkIHdoZW4gY3JlYXRpbmcg4oCUIHRoZSByZXN0IG9mIHRoZSBjb21wYW55XHJcbiAgICAgIC8vIGZpZWxkcyBhdXRvLWZpbGwgZnJvbSB0aGUgc2VsZWN0ZWQgZ3JvdXAuIENyZWRpdCBub3RlcyB0YWtlIHRoZSBncm91cFxyXG4gICAgICAvLyBmcm9tIHRoZWlyIHNvdXJjZSBpbnZvaWNlIGluc3RlYWQuXHJcbiAgICAgIGdyb3VwSWQ6IFsnJywgdGhpcy5tb2RlICE9PSAnZWRpdCcgJiYgIXRoaXMuaXNDcmVkaXROb3RlID8gVmFsaWRhdG9ycy5yZXF1aXJlZCA6IFtdXSxcclxuICAgICAgc3RvcmVzOiBbMCwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluKDApXV0sXHJcbiAgICAgIGJpbGxpbmdEYXRlOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAvLyBDcmVkaXQgbm90ZXMgaGF2ZSBubyBkdWUgZGF0ZS5cclxuICAgICAgZHVlRGF0ZTogWycnLCB0aGlzLmlzQ3JlZGl0Tm90ZSA/IFtdIDogVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIC8vIENyZWF0ZSBtb2RlOiBkdWUgZGF0ZSBpcyBkZXJpdmVkIGZyb20gYmlsbGluZ0RhdGUgKyBwYXltZW50VGVybSAoZGF5cyksXHJcbiAgICAgIC8vIHNvIHRoZSB1c2VyIHBpY2tzIGEgdGVybSAoMzAvNjAvOTAvMTIwKSBpbnN0ZWFkIG9mIGEgZHVlIGRhdGUuIEVkaXQgL1xyXG4gICAgICAvLyBlc3RpbWF0ZSBtb2RlcyBrZWVwIHRoZSBlZGl0YWJsZSBkdWVEYXRlIGZpZWxkIGFuZCBpZ25vcmUgcGF5bWVudFRlcm0uXHJcbiAgICAgIHBheW1lbnRUZXJtOiBbMzBdLFxyXG4gICAgICBjdXJyZW5jeTogWydpbnInLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgc3RhdHVzOiBbJ3BlbmRpbmcnXSxcclxuICAgICAgcGF5bWVudFN0YXR1czogWyd1bnBhaWQnXSxcclxuICAgICAgLy8gQWR2YW5jZSBpbnZvaWNlOiB3aGVuIG9uLCB0aGUgY2hvc2VuIGZyZXF1ZW5jeSBiaWxscyBzZXZlcmFsIGZ1dHVyZVxyXG4gICAgICAvLyBtb250aHMgdXBmcm9udCAoZWFjaCBtb250aCBiZWNvbWVzIGl0cyBvd24gbGluZSBpdGVtIHNlcnZlci1zaWRlKS5cclxuICAgICAgYWR2YW5jZUludm9pY2U6IFtmYWxzZV0sXHJcbiAgICAgIGFkdmFuY2VQZXJpb2Q6IFsnbW9udGhseSddLFxyXG4gICAgICAvLyBPcHRpb25hbDogbWFwIHRoaXMgaW52b2ljZSB0byBhIHB1cmNoYXNlIG9yZGVyIChyZWR1Y2VzIHRoZSBQTyBiYWxhbmNlKS5cclxuICAgICAgcHVyY2hhc2VPcmRlck51bWJlcjogWycnXSxcclxuICAgICAgcHJvZHVjdHM6IHRoaXMuZmIuYXJyYXkoW10pLFxyXG4gICAgICB0YXg6IHRoaXMuZmIuYXJyYXkoW10pLFxyXG4gICAgICAvLyBDcmVkaXQgbm90ZXMgdXNlIGxpbmUgaXRlbXMgaW5zdGVhZCBvZiBwcm9kdWN0cyAvIHRheC5cclxuICAgICAgbGluZUl0ZW1zOiB0aGlzLmZiLmFycmF5KFtdKSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gQSBQdXJjaGFzZSBPcmRlciBjYW4gYmUgbWFwcGVkIGZyb20gdGhlIGZpbmFuY2UgYXBwcm92YWwgc3RhZ2Ugb246IG9uY2VcclxuICAvLyB0aGUgcmVhbCBudW1iZXIgaXMgbWludGVkLCBvciB3aGlsZSB0aGUgZHJhZnQgaXMgcGVuZGluZyBmaW5hbmNlIGFwcHJvdmFsXHJcbiAgLy8gKGZpbmFuY2UgYXR0YWNoZXMgaXQgYXMgcGFydCBvZiB0aGVpciByZXZpZXc7IHRoZSBzZXJ2ZXIgbW92ZXMgdGhlIFBPIGxpbmtcclxuICAvLyB0byB0aGUgcmVhbCBudW1iZXIgd2hlbiBmaW5hbmNlIGFwcHJvdmVzKS4gQSBkcmFmdCBzdGlsbCBhdCBDU00gcmV2aWV3LCBvclxyXG4gIC8vIGEgYnJhbmQtbmV3IGludm9pY2UgKGNyZWF0ZSBtb2RlLCBubyBudW1iZXIgeWV0KSwgY2FuJ3QgdGFrZSBvbmUuXHJcbiAgZ2V0IGlzRHJhZnQoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5tb2RlICE9PSAnZWRpdCcpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pbnZvaWNlRGF0YT8uc3RhdHVzID09PSAncGVuZGluZ0ZpbmFuY2UnKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IG51bSA9IHRoaXMuaW52b2ljZURhdGE/Lmludm9pY2UgfHwgJyc7XHJcbiAgICByZXR1cm4gdHlwZW9mIG51bSA9PT0gJ3N0cmluZycgJiYgbnVtLnN0YXJ0c1dpdGgoJ0RSQUZULScpO1xyXG4gIH1cclxuXHJcbiAgLy8gUHVyY2hhc2Ugb3JkZXJzIGF2YWlsYWJsZSBmb3IgdGhpcyBjbGllbnQgKGZvciB0aGUgUE8gcGlja2VyKS5cclxuICBwdXJjaGFzZU9yZGVyczogYW55W10gPSBbXTtcclxuXHJcbiAgbG9hZFB1cmNoYXNlT3JkZXJzKCkge1xyXG4gICAgY29uc3QgY0lkID0gdGhpcy5jbGllbnRJZCB8fCB0aGlzLmludm9pY2VEYXRhPy5jbGllbnRJZDtcclxuICAgIGlmICghY0lkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuYmlsbGluZ1NlcnZpY2UuZ2V0UHVyY2hhc2VPcmRlcnMoY0lkKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5wdXJjaGFzZU9yZGVycyA9IHJlcz8uZGF0YT8ucHVyY2hhc2VPcmRlcnMgfHwgW107XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5wdXJjaGFzZU9yZGVycyA9IFtdO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhZHZhbmNlUGVyaW9kT3B0aW9ucyA9IFtcclxuICAgIHsgdmFsdWU6ICdtb250aGx5JywgbGFiZWw6ICdNb250aGx5IChuZXh0IG1vbnRoKScgfSxcclxuICAgIHsgdmFsdWU6ICdxdWFydGVybHknLCBsYWJlbDogJ1F1YXJ0ZXJseSAobmV4dCAzIG1vbnRocyknIH0sXHJcbiAgICB7IHZhbHVlOiAnaGFsZnllYXJseScsIGxhYmVsOiAnSGFsZi15ZWFybHkgKG5leHQgNiBtb250aHMpJyB9LFxyXG4gICAgeyB2YWx1ZTogJ3llYXJseScsIGxhYmVsOiAnWWVhcmx5IChuZXh0IDEyIG1vbnRocyknIH0sXHJcbiAgXTtcclxuXHJcbiAgLy8gVGVtcGxhdGUgaGVscGVyczogc3VyZmFjZSBcInRvdWNoZWQgJiYgaW52YWxpZFwiIHNvIHRoZSBIVE1MIGNhbiBoaWdobGlnaHRcclxuICAvLyB0aGUgZmllbGQgYW5kIHJlbmRlciBhbiBpbmxpbmUgZXJyb3IuIERlZmVuc2l2ZSBhZ2FpbnN0IHRoZSBmb3JtIG5vdCB5ZXRcclxuICAvLyBiZWluZyBpbml0aWFsaXNlZCBkdXJpbmcgdGhlIGZpcnN0IGNoYW5nZS1kZXRlY3Rpb24gcGFzcy5cclxuICBjb250cm9sSW52YWxpZChuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGN0cmwgPSB0aGlzLmludm9pY2VGb3JtPy5nZXQobmFtZSk7XHJcbiAgICByZXR1cm4gISFjdHJsICYmIGN0cmwudG91Y2hlZCAmJiBjdHJsLmludmFsaWQ7XHJcbiAgfVxyXG5cclxuICBhcnJheUNvbnRyb2xJbnZhbGlkKGFycmF5TmFtZTogJ3Byb2R1Y3RzJyB8ICd0YXgnLCBpbmRleDogbnVtYmVyLCBuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGFyciA9IHRoaXMuaW52b2ljZUZvcm0/LmdldChhcnJheU5hbWUpIGFzIEZvcm1BcnJheSB8IG51bGw7XHJcbiAgICBjb25zdCBjdHJsID0gYXJyPy5hdChpbmRleCk/LmdldChuYW1lKTtcclxuICAgIHJldHVybiAhIWN0cmwgJiYgY3RybC50b3VjaGVkICYmIGN0cmwuaW52YWxpZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2Nyb2xsVG9GaXJzdEludmFsaWQoKTogdm9pZCB7XHJcbiAgICAvLyBGaW5kIHRoZSBmaXJzdCBpbnZhbGlkIGNvbnRyb2wgaW5zaWRlIHRoZSBtb2RhbCBhbmQgYnJpbmcgaXQgaW50byB2aWV3LlxyXG4gICAgLy8gU2NvcGVkIHRvIC5tb2RhbC1jb250ZW50IHNvIHdlIGRvbid0IGdyYWIgZmllbGRzIGZyb20gb3RoZXIgbW9kYWxzIG9uXHJcbiAgICAvLyB0aGUgcGFnZSBpZiBhbnkgYXJlIG9wZW4uXHJcbiAgICBjb25zdCByb290ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm1vZGFsLWNvbnRlbnQnKTtcclxuICAgIGNvbnN0IGZpcnN0ID0gcm9vdD8ucXVlcnlTZWxlY3RvcignLmlzLWludmFsaWQnKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XHJcbiAgICBpZiAoZmlyc3QpIHtcclxuICAgICAgZmlyc3Quc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnY2VudGVyJyB9KTtcclxuICAgICAgaWYgKHR5cGVvZiBmaXJzdC5mb2N1cyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIGZpcnN0LmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHByb2R1Y3RzKCk6IEZvcm1BcnJheSB7XHJcbiAgICByZXR1cm4gdGhpcy5pbnZvaWNlRm9ybS5nZXQoJ3Byb2R1Y3RzJykgYXMgRm9ybUFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRheEFycmF5KCk6IEZvcm1BcnJheSB7XHJcbiAgICByZXR1cm4gdGhpcy5pbnZvaWNlRm9ybS5nZXQoJ3RheCcpIGFzIEZvcm1BcnJheTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZVByb2R1Y3RHcm91cChwcm9kdWN0PzogYW55KTogRm9ybUdyb3VwIHtcclxuICAgIHJldHVybiB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgcHJvZHVjdE5hbWU6IFtwcm9kdWN0Py5wcm9kdWN0TmFtZSB8fCAnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIC8vIFdoZW4gdHJ1ZSwgdGhlIG5hbWUgaXMgYSBmcmVlLXRleHQgY3VzdG9tIHByb2R1Y3QgKG5vdCBmcm9tIHRoZSBjbGllbnQnc1xyXG4gICAgICAvLyBiYXNlLXByaWNpbmcgbGlzdCkg4oCUIHRoZSB0ZW1wbGF0ZSBzaG93cyBhIHRleHQgaW5wdXQgaW5zdGVhZCBvZiB0aGVcclxuICAgICAgLy8gcHJvZHVjdCBkcm9wZG93bi5cclxuICAgICAgaXNDdXN0b206IFtwcm9kdWN0Py5pc0N1c3RvbSB8fCBmYWxzZV0sXHJcbiAgICAgIGRlc2NyaXB0aW9uOiBbcHJvZHVjdD8uZGVzY3JpcHRpb24gfHwgJyddLFxyXG4gICAgICBtb250aDogW3Byb2R1Y3Q/Lm1vbnRoIHx8ICcnXSxcclxuICAgICAgSHNuTnVtYmVyOiBbcHJvZHVjdD8uSHNuTnVtYmVyIHx8ICc5OTgzMTQnXSxcclxuICAgICAgc3RvcmVDb3VudDogW3Byb2R1Y3Q/LnN0b3JlQ291bnQgfHwgMCwgVmFsaWRhdG9ycy5taW4oMCldLFxyXG4gICAgICBwcmljZTogW3Byb2R1Y3Q/LnByaWNlIHx8IDAsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbigwKV1dLFxyXG4gICAgICBhbW91bnQ6IFtwcm9kdWN0Py5hbW91bnQgfHwgMF0sXHJcbiAgICAgIHBlcmlvZDogW3Byb2R1Y3Q/LnBlcmlvZCB8fCAnbW9udGhseSddLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVUYXhHcm91cCh0YXg/OiBhbnkpOiBGb3JtR3JvdXAge1xyXG4gICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICAvLyBEaXNhYmxlZDogdGF4IHJvd3MgYXJlIGRlcml2ZWQgZnJvbSB0aGUgR1NUIG51bWJlciAoYXBwbHlHcm91cEdzdFRheCksXHJcbiAgICAgIC8vIG5ldmVyIGhhbmQtZWRpdGVkLiBvblN1Ym1pdCByZWFkcyBnZXRSYXdWYWx1ZSgpLCBzbyB0aGUgZGlzYWJsZWQgY29udHJvbFxyXG4gICAgICAvLyBzdGlsbCByZWFjaGVzIHRoZSBwYXlsb2FkLlxyXG4gICAgICB0eXBlOiBbeyB2YWx1ZTogdGF4Py50eXBlIHx8ICdJR1NUJywgZGlzYWJsZWQ6IHRydWUgfSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIHZhbHVlOiBbdGF4Py52YWx1ZSB8fCAxOCwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluKDApLCBWYWxpZGF0b3JzLm1heCgxMDApXV0sXHJcbiAgICAgIHRheEFtb3VudDogW3RheD8udGF4QW1vdW50IHx8ICcwJ10sXHJcbiAgICAgIC8vIERlZmF1bHQgdGhlIHRheC1yb3cgc3ltYm9sIHRvIHRoZSBpbnZvaWNlJ3MgY3VycmVuY3kgKHdhcyBoYXJkY29kZWRcclxuICAgICAgLy8gdG8g4oK5LCB3aGljaCBsZWFrZWQgaW50byB0aGUgc2F2ZWQgZG9jIGZvciBub24tSU5SIGludm9pY2VzKS5cclxuICAgICAgY3VycmVuY3k6IFt0YXg/LmN1cnJlbmN5IHx8IHRoaXMuc3ltYm9sRm9yKHRoaXMuaW52b2ljZUZvcm0/LmdldCgnY3VycmVuY3knKT8udmFsdWUpXSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzeW1ib2xGb3IoY29kZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5jdXJyZW5jeVN5bWJvbHNbY29kZSB8fCAnJ10gfHwgJyQnO1xyXG4gIH1cclxuXHJcbiAgYWRkUHJvZHVjdCgpIHtcclxuICAgIHRoaXMucHJvZHVjdHMucHVzaCh0aGlzLmNyZWF0ZVByb2R1Y3RHcm91cCgpKTtcclxuICAgIHRoaXMuc2Nyb2xsVG9MYXN0Um93KCdkYXRhLXByb2R1Y3Qtcm93Jyk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVQcm9kdWN0KGluZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMucHJvZHVjdHMucmVtb3ZlQXQoaW5kZXgpO1xyXG4gICAgdGhpcy5yZWNhbGN1bGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgYWRkVGF4KCkge1xyXG4gICAgdGhpcy50YXhBcnJheS5wdXNoKHRoaXMuY3JlYXRlVGF4R3JvdXAoKSk7XHJcbiAgICAvLyBBcHBseSB0aGUgZGVmYXVsdCAoMTglIElHU1QpIGFnYWluc3QgdGhlIGN1cnJlbnQgc3VidG90YWwgaW1tZWRpYXRlbHksIHNvXHJcbiAgICAvLyB0aGUgdGF4IGFtb3VudCBwb3B1bGF0ZXMgb24gYWRkIGluc3RlYWQgb2Ygc3RheWluZyAwIHVudGlsIGVkaXRlZC5cclxuICAgIHRoaXMucmVjYWxjdWxhdGUoKTtcclxuICAgIHRoaXMuc2Nyb2xsVG9MYXN0Um93KCdkYXRhLXRheC1yb3cnKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZVRheChpbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRheEFycmF5LnJlbW92ZUF0KGluZGV4KTtcclxuICAgIHRoaXMucmVjYWxjdWxhdGUoKTtcclxuICB9XHJcblxyXG4gIC8vIERlZmF1bHQgcmF0ZSBwZXIgdGF4IHR5cGU6IElHU1QgaXMgYSBzaW5nbGUgMTglIGxpbmU7IENHU1QvU0dTVCBhcmUgdGhlXHJcbiAgLy8gc3BsaXQgOSUgKyA5JSBoYWx2ZXMuIENoYW5naW5nIHRoZSB0eXBlIHJlc2V0cyB0aGUgJSB0byBpdHMgZGVmYXVsdCBhbmRcclxuICAvLyByZWNvbXB1dGVzIHRoZSBhbW91bnQuXHJcbiAgb25UYXhUeXBlQ2hhbmdlKGluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGdyb3VwID0gdGhpcy50YXhBcnJheS5hdChpbmRleCk7XHJcbiAgICBjb25zdCB0eXBlID0gZ3JvdXA/LmdldCgndHlwZScpPy52YWx1ZTtcclxuICAgIGNvbnN0IGRlZmF1bHRSYXRlID0gdHlwZSA9PT0gJ0NHU1QnIHx8IHR5cGUgPT09ICdTR1NUJyA/IDkgOiAxODtcclxuICAgIGdyb3VwPy5nZXQoJ3ZhbHVlJyk/LnNldFZhbHVlKGRlZmF1bHRSYXRlKTtcclxuICAgIHRoaXMucmVjYWxjdWxhdGUoKTtcclxuICB9XHJcblxyXG4gIC8vIERlZmF1bHRzIHRvIHRoZSBkb2N1bWVudCBiZWluZyBlZGl0ZWQ7IGEgbmV3IGNyZWRpdCBub3RlIHBhc3NlcyBpdHNcclxuICAvLyBzb3VyY2UgaW52b2ljZSBpbnN0ZWFkLlxyXG4gIHBhdGNoRm9ybShpbnY6IGFueSA9IHRoaXMuaW52b2ljZURhdGEpIHtcclxuXHJcbiAgICB0aGlzLmludm9pY2VGb3JtLnBhdGNoVmFsdWUoe1xyXG4gICAgICBjb21wYW55TmFtZTogaW52LmNvbXBhbnlOYW1lIHx8ICcnLFxyXG4gICAgICBjb21wYW55QWRkcmVzczogaW52LmNvbXBhbnlBZGRyZXNzIHx8ICcnLFxyXG4gICAgICBHU1ROdW1iZXI6IGludi5HU1ROdW1iZXIgfHwgJycsXHJcbiAgICAgIFBsYWNlT2ZTdXBwbHk6IGludi5QbGFjZU9mU3VwcGx5IHx8ICcnLFxyXG4gICAgICBncm91cE5hbWU6IGludi5ncm91cE5hbWUgfHwgJycsXHJcbiAgICAgIGdyb3VwSWQ6IGludi5ncm91cElkIHx8ICcnLFxyXG4gICAgICBzdG9yZXM6IGludi5zdG9yZXMgfHwgMCxcclxuICAgICAgYmlsbGluZ0RhdGU6IHRoaXMuZm9ybWF0RGF0ZUZvcklucHV0KGludi5iaWxsaW5nRGF0ZSksXHJcbiAgICAgIGR1ZURhdGU6IHRoaXMuZm9ybWF0RGF0ZUZvcklucHV0KGludi5kdWVEYXRlKSxcclxuICAgICAgY3VycmVuY3k6IGludi5jdXJyZW5jeSB8fCAnaW5yJyxcclxuICAgICAgc3RhdHVzOiBpbnYuc3RhdHVzIHx8ICdwZW5kaW5nJyxcclxuICAgICAgcGF5bWVudFN0YXR1czogaW52LnBheW1lbnRTdGF0dXMgfHwgJ3VucGFpZCcsXHJcbiAgICAgIHB1cmNoYXNlT3JkZXJOdW1iZXI6IGludi5wdXJjaGFzZU9yZGVyTnVtYmVyIHx8ICcnLFxyXG4gICAgfSk7XHJcbiAgICAvLyBUcmFjayB0aGUgbG9hZGVkIGN1cnJlbmN5IHNvIGEgY2FuY2VsbGVkIGNoYW5nZSBjYW4gcmV2ZXJ0IHRvIGl0LlxyXG4gICAgdGhpcy5wcmV2aW91c0N1cnJlbmN5ID0gaW52LmN1cnJlbmN5IHx8ICdpbnInO1xyXG5cclxuICAgIC8vIFBhdGNoIHByb2R1Y3RzXHJcbiAgICBpZiAoaW52LnByb2R1Y3RzPy5sZW5ndGgpIHtcclxuICAgICAgaW52LnByb2R1Y3RzLmZvckVhY2goKHA6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMucHJvZHVjdHMucHVzaCh0aGlzLmNyZWF0ZVByb2R1Y3RHcm91cChwKSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hZGRQcm9kdWN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUGF0Y2ggdGF4LiBOb24tSU5SIGludm9pY2VzIChlLmcuIGRvbGxhciBjbGllbnRzKSBoYXZlIG5vIEdTVCwgYnV0IHRoZVxyXG4gICAgLy8gYmFja2VuZCBzdGlsbCBzdG9yZXMgYSBwbGFjZWhvbGRlciBJR1NUIHJvdyB3aXRoIGEgMCBhbW91bnQg4oCUIHNraXAgdGhvc2VcclxuICAgIC8vIHNvIHRoZSB0YXggc2VjdGlvbiBzdGFydHMgZW1wdHkuIE9ubHkgbG9hZCB0YXggcm93cyB0aGF0IGNhcnJ5IGEgcmVhbFxyXG4gICAgLy8gKG5vbi16ZXJvKSBhbW91bnQuIFRoZSB1c2VyIGNhbiBzdGlsbCBhZGQgYSB0YXggd2l0aCB0aGUgXCJBZGQgVGF4XCIgYnV0dG9uLlxyXG4gICAgY29uc3QgdGF4Um93cyA9IChpbnYudGF4IHx8IFtdKS5maWx0ZXIoKHQ6IGFueSkgPT4gTnVtYmVyKHQ/LnRheEFtb3VudCkgPiAwKTtcclxuICAgIHRheFJvd3MuZm9yRWFjaCgodDogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMudGF4QXJyYXkucHVzaCh0aGlzLmNyZWF0ZVRheEdyb3VwKHQpKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0RGF0ZUZvcklucHV0KGRhdGU6IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAoIWRhdGUpIHJldHVybiAnJztcclxuICAgIGNvbnN0IGQgPSBuZXcgRGF0ZShkYXRlPy4kZGF0ZSB8fCBkYXRlKTtcclxuICAgIGlmIChpc05hTihkLmdldFRpbWUoKSkpIHJldHVybiAnJztcclxuICAgIHJldHVybiBkLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXTtcclxuICB9XHJcblxyXG4gIC8vIENyZWF0ZSBtb2RlIG9ubHk6IGRlcml2ZSBkdWVEYXRlID0gYmlsbGluZ0RhdGUgKyBwYXltZW50VGVybSAoZGF5cykuIENhbGxlZFxyXG4gIC8vIHdoZW5ldmVyIHRoZSBiaWxsaW5nIGRhdGUgb3IgdGhlIHBheW1lbnQgdGVybSBjaGFuZ2VzLiBOby1vcCBpZiB0aGUgYmlsbGluZ1xyXG4gIC8vIGRhdGUgaXNuJ3Qgc2V0IHlldC5cclxuICBjb21wdXRlRHVlRGF0ZSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGJpbGxpbmcgPSB0aGlzLmludm9pY2VGb3JtLmdldCgnYmlsbGluZ0RhdGUnKT8udmFsdWU7XHJcbiAgICBjb25zdCB0ZXJtID0gTnVtYmVyKHRoaXMuaW52b2ljZUZvcm0uZ2V0KCdwYXltZW50VGVybScpPy52YWx1ZSkgfHwgMDtcclxuICAgIGlmICghYmlsbGluZykgeyByZXR1cm47IH1cclxuICAgIGNvbnN0IGQgPSBuZXcgRGF0ZShiaWxsaW5nKTtcclxuICAgIGlmIChpc05hTihkLmdldFRpbWUoKSkpIHsgcmV0dXJuOyB9XHJcbiAgICBkLnNldERhdGUoZC5nZXREYXRlKCkgKyB0ZXJtKTtcclxuICAgIHRoaXMuaW52b2ljZUZvcm0ucGF0Y2hWYWx1ZSh7IGR1ZURhdGU6IHRoaXMuZm9ybWF0RGF0ZUZvcklucHV0KGQpIH0sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICB9XHJcblxyXG4gIC8vIENoYW5naW5nIGFuIGludm9pY2UncyBjdXJyZW5jeSBjb252ZXJ0cyBldmVyeSBwcm9kdWN0IHByaWNlIGZyb20gdGhlIG9sZFxyXG4gIC8vIGN1cnJlbmN5IHRvIHRoZSBuZXcgb25lIHZpYSBsaXZlIEZYIHJhdGVzLiBBIGNvbmZpcm1hdGlvbiBpcyBzaG93biBmaXJzdDtcclxuICAvLyBjYW5jZWxsaW5nIHJldmVydHMgdGhlIGN1cnJlbmN5IHNlbGVjdC4gT25seSBhY3RzIHdoZW4gdGhlIGN1cnJlbmN5IGFjdHVhbGx5XHJcbiAgLy8gY2hhbmdlZCB0byBhIGRpZmZlcmVudCBjb2RlLlxyXG4gIG9uQ3VycmVuY3lDaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgbmV3Q3VycmVuY3kgPSBldmVudD8udGFyZ2V0Py52YWx1ZTtcclxuICAgIGNvbnN0IG9sZEN1cnJlbmN5ID0gdGhpcy5wcmV2aW91c0N1cnJlbmN5O1xyXG4gICAgaWYgKCFuZXdDdXJyZW5jeSB8fCBuZXdDdXJyZW5jeSA9PT0gb2xkQ3VycmVuY3kpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbGFiZWwgPSAoYzogc3RyaW5nKSA9PiB0aGlzLmN1cnJlbmN5TGFiZWxzW2NdIHx8IGM7XHJcbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oUmVxdWVzdENvbmZpcm1hdGlvbkNvbXBvbmVudCwge1xyXG4gICAgICBjZW50ZXJlZDogdHJ1ZSwgc2l6ZTogJ21kJywgc2Nyb2xsYWJsZTogdHJ1ZSxcclxuICAgIH0pO1xyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UudGl0bGUgPSAnQ2hhbmdlIGludm9pY2UgY3VycmVuY3k/JztcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLmRlc2NyaXB0aW9uID1cclxuICAgICAgYFRoaXMgaW52b2ljZSB3YXMgY3JlYXRlZCBpbiAke2xhYmVsKG9sZEN1cnJlbmN5KX0uIFN3aXRjaGluZyB0byAke2xhYmVsKG5ld0N1cnJlbmN5KX0gd2lsbCBjb252ZXJ0IGFsbCBwcm9kdWN0IGFtb3VudHMgdXNpbmcgdG9kYXkncyBleGNoYW5nZSByYXRlLiBSZXZpZXcgdGhlIGNvbnZlcnRlZCB2YWx1ZXMgYmVmb3JlIHNhdmluZy5gO1xyXG4gICAgbW9kYWxSZWYucmVzdWx0LnRoZW4oKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQgPT09ICdZZXMnKSB7XHJcbiAgICAgICAgdGhpcy5jb252ZXJ0UHJvZHVjdEN1cnJlbmN5KG9sZEN1cnJlbmN5LCBuZXdDdXJyZW5jeSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gQ2FuY2VsbGVkIOKAlCByZXZlcnQgdGhlIHNlbGVjdCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBjdXJyZW5jeS5cclxuICAgICAgICB0aGlzLmludm9pY2VGb3JtLmdldCgnY3VycmVuY3knKT8uc2V0VmFsdWUob2xkQ3VycmVuY3ksIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgfVxyXG4gICAgfSkuY2F0Y2goKCkgPT4ge1xyXG4gICAgICB0aGlzLmludm9pY2VGb3JtLmdldCgnY3VycmVuY3knKT8uc2V0VmFsdWUob2xkQ3VycmVuY3ksIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gRmV0Y2ggSU5SLXBlci11bml0IHJhdGVzIGFuZCBjb252ZXJ0IGVhY2ggcHJvZHVjdCBwcmljZSBmcm9tIG9sZOKGkm5ldzpcclxuICAvLyAgIG5ld1ByaWNlID0gb2xkUHJpY2UgKiAocmF0ZXNbb2xkXSAvIHJhdGVzW25ld10pLlxyXG4gIC8vIEVhY2ggbGluZSBhbW91bnQgaXMgY29udmVydGVkIGJ5IHRoZSBzYW1lIGZhY3RvciAoc28gcHJvcmF0ZWQgbGluZXMgc3RheVxyXG4gIC8vIHByb3JhdGVkKSwgdGF4LXJvdyBjdXJyZW5jeSBzeW1ib2xzIGFyZSByZWZyZXNoZWQgYW5kIHRvdGFscyByZWNvbXB1dGVkLlxyXG4gIC8vIHByZXZpb3VzQ3VycmVuY3kgaXMgYWR2YW5jZWQgb25seSBhZnRlciBhIHN1Y2Nlc3NmdWwgY29udmVyc2lvbi5cclxuICBwcml2YXRlIGNvbnZlcnRQcm9kdWN0Q3VycmVuY3kob2xkQ3VycmVuY3k6IHN0cmluZywgbmV3Q3VycmVuY3k6IHN0cmluZykge1xyXG4gICAgdGhpcy5iaWxsaW5nU2VydmljZS5meFJhdGVzKCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJhdGVzID0gcmVzPy5kYXRhPy5yYXRlcyB8fCB7fTtcclxuICAgICAgICBjb25zdCByT2xkID0gTnVtYmVyKHJhdGVzW29sZEN1cnJlbmN5XSk7XHJcbiAgICAgICAgY29uc3Qgck5ldyA9IE51bWJlcihyYXRlc1tuZXdDdXJyZW5jeV0pO1xyXG4gICAgICAgIGlmICghKHJPbGQgPiAwKSB8fCAhKHJOZXcgPiAwKSkge1xyXG4gICAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KCdFeGNoYW5nZSByYXRlIHVuYXZhaWxhYmxlIOKAlCBjdXJyZW5jeSBub3QgY29udmVydGVkLicpO1xyXG4gICAgICAgICAgdGhpcy5pbnZvaWNlRm9ybS5nZXQoJ2N1cnJlbmN5Jyk/LnNldFZhbHVlKG9sZEN1cnJlbmN5LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGZhY3RvciA9IHJPbGQgLyByTmV3O1xyXG4gICAgICAgIHRoaXMucHJvZHVjdHMuY29udHJvbHMuZm9yRWFjaCgoZ3JvdXApID0+IHtcclxuICAgICAgICAgIGNvbnN0IHByaWNlID0gTnVtYmVyKGdyb3VwLmdldCgncHJpY2UnKT8udmFsdWUpIHx8IDA7XHJcbiAgICAgICAgICBjb25zdCBjb252ZXJ0ZWQgPSB0aGlzLnJvdW5kRm9yQ3VycmVuY3kocHJpY2UgKiBmYWN0b3IsIG5ld0N1cnJlbmN5KTtcclxuICAgICAgICAgIGdyb3VwLmdldCgncHJpY2UnKT8uc2V0VmFsdWUoY29udmVydGVkLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgICAvLyBDb252ZXJ0IHRoZSBzdG9yZWQgbGluZSBhbW91bnQgZGlyZWN0bHkgcmF0aGVyIHRoYW4gcmUtZGVyaXZpbmcgaXRcclxuICAgICAgICAgIC8vIGFzIHN0b3JlQ291bnQgeCBuZXcgcHJpY2UsIHdoaWNoIHdvdWxkIGRyb3AgYW55IHByb3JhdGlvbi5cclxuICAgICAgICAgIGNvbnN0IGFtb3VudCA9IE51bWJlcihncm91cC5nZXQoJ2Ftb3VudCcpPy52YWx1ZSkgfHwgMDtcclxuICAgICAgICAgIGdyb3VwLmdldCgnYW1vdW50Jyk/LnNldFZhbHVlKHRoaXMucm91bmRGb3JDdXJyZW5jeShhbW91bnQgKiBmYWN0b3IsIG5ld0N1cnJlbmN5KSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMucHJldmlvdXNDdXJyZW5jeSA9IG5ld0N1cnJlbmN5O1xyXG4gICAgICAgIC8vIEdTVCBmb2xsb3dzIHRoZSBjdXJyZW5jeTogYSBmb3JlaWduIGN1cnJlbmN5IGRyb3BzIHRoZSB0YXggcm93cywgYW5kXHJcbiAgICAgICAgLy8gc3dpdGNoaW5nIGJhY2sgdG8gSU5SIHJlc3RvcmVzIHRoZW0gZnJvbSB0aGUgR1NUSU4gKGFuZCByZWNhbGN1bGF0ZXMpLlxyXG4gICAgICAgIHRoaXMuYXBwbHlHcm91cEdzdFRheCh0aGlzLmludm9pY2VGb3JtLmdldCgnR1NUTnVtYmVyJyk/LnZhbHVlKTtcclxuICAgICAgICB0aGlzLnRvYXN0LmdldFByaW1hcnlUb2FzdChgQW1vdW50cyBjb252ZXJ0ZWQgdG8gJHt0aGlzLmN1cnJlbmN5TGFiZWxzW25ld0N1cnJlbmN5XSB8fCBuZXdDdXJyZW5jeX0uYCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KCdGYWlsZWQgdG8gZmV0Y2ggZXhjaGFuZ2UgcmF0ZSDigJQgY3VycmVuY3kgbm90IGNvbnZlcnRlZC4nKTtcclxuICAgICAgICB0aGlzLmludm9pY2VGb3JtLmdldCgnY3VycmVuY3knKT8uc2V0VmFsdWUob2xkQ3VycmVuY3ksIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkdyb3VwQ2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkR3JvdXAgPSB0aGlzLmJpbGxpbmdHcm91cHMuZmluZChnID0+IGcuX2lkID09PSBldmVudC50YXJnZXQudmFsdWUpO1xyXG4gICAgaWYgKHNlbGVjdGVkR3JvdXApIHtcclxuICAgICAgdGhpcy5pbnZvaWNlRm9ybS5wYXRjaFZhbHVlKHtcclxuICAgICAgICBncm91cE5hbWU6IHNlbGVjdGVkR3JvdXAuZ3JvdXBOYW1lLFxyXG4gICAgICAgIGdyb3VwSWQ6IHNlbGVjdGVkR3JvdXAuX2lkLFxyXG4gICAgICAgIC8vIENvbXBhbnkgbmFtZXMgb24gaW52b2ljZXMgYXJlIGFsd2F5cyB1cHBlciBjYXNlLlxyXG4gICAgICAgIGNvbXBhbnlOYW1lOiBTdHJpbmcoc2VsZWN0ZWRHcm91cC5yZWdpc3RlcmVkQ29tcGFueU5hbWUgfHwgJycpLnRvVXBwZXJDYXNlKCksXHJcbiAgICAgICAgY29tcGFueUFkZHJlc3M6IFtzZWxlY3RlZEdyb3VwLmFkZHJlc3NMaW5lT25lLCBzZWxlY3RlZEdyb3VwLmFkZHJlc3NMaW5lVHdvLCBzZWxlY3RlZEdyb3VwLmNpdHksIHNlbGVjdGVkR3JvdXAuc3RhdGUsIHNlbGVjdGVkR3JvdXAuY291bnRyeSwgc2VsZWN0ZWRHcm91cC5waW5Db2RlXS5maWx0ZXIoQm9vbGVhbikuam9pbignLCAnKSxcclxuICAgICAgICBHU1ROdW1iZXI6IHNlbGVjdGVkR3JvdXAuZ3N0IHx8ICcnLFxyXG4gICAgICAgIFBsYWNlT2ZTdXBwbHk6IHNlbGVjdGVkR3JvdXAucGxhY2VPZlN1cHBseSB8fCAnJyxcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuYXBwbHlHcm91cEdzdFRheChzZWxlY3RlZEdyb3VwLmdzdCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBUeXBlZCBjb21wYW55IG5hbWVzIGFyZSB1cHBlci1jYXNlZCBhcyB0aGV5J3JlIGVudGVyZWQuXHJcbiAgb25Db21wYW55TmFtZUlucHV0KCkge1xyXG4gICAgY29uc3QgY3RybCA9IHRoaXMuaW52b2ljZUZvcm0uZ2V0KCdjb21wYW55TmFtZScpO1xyXG4gICAgY29uc3QgdmFsdWUgPSBTdHJpbmcoY3RybD8udmFsdWUgfHwgJycpO1xyXG4gICAgaWYgKHZhbHVlICE9PSB2YWx1ZS50b1VwcGVyQ2FzZSgpKSB7XHJcbiAgICAgIGN0cmw/LnNldFZhbHVlKHZhbHVlLnRvVXBwZXJDYXNlKCksIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIFF1YW50aXR5IGNhbid0IGdvIG5lZ2F0aXZlOiBibG9jayB0aGUgbWludXMga2V5LCBhbmQgcmVzZXQgYW55dGhpbmdcclxuICAvLyBuZWdhdGl2ZSB0aGF0IHN0aWxsIGdldHMgaW4gKHBhc3RlLCBzcGlubmVyKSB0byAwLlxyXG4gIGJsb2NrTWludXNLZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGlmIChldmVudC5rZXkgPT09ICctJyB8fCBldmVudC5rZXkgPT09ICdTdWJ0cmFjdCcpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uUXVhbnRpdHlJbnB1dChpOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGN0cmwgPSB0aGlzLnByb2R1Y3RzLmF0KGkpPy5nZXQoJ3N0b3JlQ291bnQnKTtcclxuICAgIGlmIChOdW1iZXIoY3RybD8udmFsdWUpIDwgMCkge1xyXG4gICAgICBjdHJsPy5zZXRWYWx1ZSgwLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlY2FsY3VsYXRlKGkpO1xyXG4gIH1cclxuXHJcbiAgLy8gQXV0by1wb3B1bGF0ZSB0aGUgdGF4IHNlY3Rpb24gZnJvbSB0aGUgc2VsZWN0ZWQgZ3JvdXAncyBHU1RJTiwgbWlycm9yaW5nIHRoZVxyXG4gIC8vIGJhY2tlbmQgaW52b2ljZSB0YXggcnVsZTogR1NUSU4gc3RhcnRpbmcgd2l0aCAnMzMnIChpbnRyYS1zdGF0ZSwgVGFtaWwgTmFkdSlcclxuICAvLyDihpIgQ0dTVCA5JSArIFNHU1QgOSU7IGFueSBvdGhlciBHU1RJTiDihpIgSUdTVCAxOCUuIE5vIEdTVCBudW1iZXIg4oaSIG5vIHRheCByb3dzLlxyXG4gIC8vIEdTVCBhcHBsaWVzIG9ubHkgdG8gZG9tZXN0aWMgKElOUikgaW52b2ljZXM6IGEgZm9yZWlnbi1jdXJyZW5jeSBpbnZvaWNlXHJcbiAgLy8gZ2V0cyBubyB0YXggcm93cywgd2hhdGV2ZXIgdGhlIEdTVElOLiBSZWJ1aWxkcyB0aGUgdGF4IHNlY3Rpb24gZWFjaCB0aW1lIHNvXHJcbiAgLy8gcmUtc2VsZWN0aW5nIGEgZ3JvdXAgb3IgY2hhbmdpbmcgdGhlIGN1cnJlbmN5IGRvZXNuJ3Qgc3RhY2sgcm93cy5cclxuICBwcml2YXRlIGFwcGx5R3JvdXBHc3RUYXgoZ3N0OiBzdHJpbmcpIHtcclxuICAgIHRoaXMudGF4QXJyYXkuY2xlYXIoKTtcclxuICAgIGNvbnN0IGdzdGluID0gU3RyaW5nKGdzdCB8fCAnJykudHJpbSgpO1xyXG4gICAgY29uc3QgZG9tZXN0aWMgPSAodGhpcy5pbnZvaWNlRm9ybS5nZXQoJ2N1cnJlbmN5Jyk/LnZhbHVlIHx8ICdpbnInKSA9PT0gJ2lucic7XHJcbiAgICBpZiAoZ3N0aW4gJiYgZG9tZXN0aWMpIHtcclxuICAgICAgaWYgKGdzdGluLnNsaWNlKDAsIDIpID09PSAnMzMnKSB7XHJcbiAgICAgICAgdGhpcy50YXhBcnJheS5wdXNoKHRoaXMuY3JlYXRlVGF4R3JvdXAoeyB0eXBlOiAnQ0dTVCcsIHZhbHVlOiA5IH0pKTtcclxuICAgICAgICB0aGlzLnRheEFycmF5LnB1c2godGhpcy5jcmVhdGVUYXhHcm91cCh7IHR5cGU6ICdTR1NUJywgdmFsdWU6IDkgfSkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudGF4QXJyYXkucHVzaCh0aGlzLmNyZWF0ZVRheEdyb3VwKHsgdHlwZTogJ0lHU1QnLCB2YWx1ZTogMTggfSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlY2FsY3VsYXRlKCk7XHJcbiAgfVxyXG5cclxuICAvLyBDcmVhdGUgbW9kZTogdGhlIEdTVElOIGNhbiBiZSB0eXBlZC9lZGl0ZWQgZGlyZWN0bHkg4oCUIHJlLWRlcml2ZSB0aGUgdGF4IHJvd3NcclxuICAvLyBmcm9tIGl0IChzYW1lIHJ1bGUgYXMgZ3JvdXAgc2VsZWN0aW9uKSBzbyB0YXggYWx3YXlzIGZvbGxvd3MgdGhlIEdTVCBudW1iZXIuXHJcbiAgLy8gSW4gZWRpdCBtb2RlIHRoZSBHU1QgTnVtYmVyIGZpZWxkIGlzIHJlYWQtb25seSwgc28gdGhpcyBpcyBhIG5vLW9wIHRoZXJlLlxyXG4gIG9uR3N0TnVtYmVySW5wdXQoKSB7XHJcbiAgICBpZiAodGhpcy5tb2RlID09PSAnZWRpdCcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hcHBseUdyb3VwR3N0VGF4KHRoaXMuaW52b2ljZUZvcm0uZ2V0KCdHU1ROdW1iZXInKT8udmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLSBQcm9kdWN0IHJvdyByZW9yZGVyaW5nIChuYXRpdmUgSFRNTDUgZHJhZyAmIGRyb3ApIC0tLS1cclxuICAvLyBkcmFnSW5kZXg6IHJvdyBiZWluZyBkcmFnZ2VkOyBkcmFnT3ZlckluZGV4OiByb3cgY3VycmVudGx5IGhvdmVyZWQgKGZvciB0aGVcclxuICAvLyBkcm9wIGluZGljYXRvcikuIERyb3BwaW5nIG1vdmVzIHRoZSBGb3JtR3JvdXAgd2l0aGluIHRoZSBGb3JtQXJyYXksIHNvIHRoZVxyXG4gIC8vIFwiUHJvZHVjdCBOXCIgbnVtYmVyaW5nLCB0b3RhbHMgYW5kIHRoZSBzYXZlZCBwcm9kdWN0cyBvcmRlciBhbGwgZm9sbG93LlxyXG4gIGRyYWdJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgZHJhZ092ZXJJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIG9uUm93RHJhZ1N0YXJ0KGV2ZW50OiBEcmFnRXZlbnQsIGluZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMuZHJhZ0luZGV4ID0gaW5kZXg7XHJcbiAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyKSB7XHJcbiAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkID0gJ21vdmUnO1xyXG4gICAgICAvLyBTb21lIGJyb3dzZXJzIG5lZWQgZGF0YSBzZXQgZm9yIHRoZSBkcmFnIHRvIHN0YXJ0LlxyXG4gICAgICBldmVudC5kYXRhVHJhbnNmZXIuc2V0RGF0YSgndGV4dC9wbGFpbicsIFN0cmluZyhpbmRleCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25Sb3dEcmFnT3ZlcihldmVudDogRHJhZ0V2ZW50LCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5kcmFnSW5kZXggPT09IG51bGwpIHJldHVybjtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vIGFsbG93IGRyb3BcclxuICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIpIGV2ZW50LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gJ21vdmUnO1xyXG4gICAgdGhpcy5kcmFnT3ZlckluZGV4ID0gaW5kZXg7XHJcbiAgfVxyXG5cclxuICBvblJvd0RyYWdMZWF2ZShpbmRleDogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5kcmFnT3ZlckluZGV4ID09PSBpbmRleCkgdGhpcy5kcmFnT3ZlckluZGV4ID0gbnVsbDtcclxuICB9XHJcblxyXG4gIG9uUm93RHJvcChldmVudDogRHJhZ0V2ZW50LCB0YXJnZXRJbmRleDogbnVtYmVyKSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgY29uc3QgZnJvbSA9IHRoaXMuZHJhZ0luZGV4O1xyXG4gICAgdGhpcy5vblJvd0RyYWdFbmQoKTtcclxuICAgIGlmIChmcm9tID09PSBudWxsIHx8IGZyb20gPT09IHRhcmdldEluZGV4KSByZXR1cm47XHJcbiAgICBjb25zdCBncm91cCA9IHRoaXMucHJvZHVjdHMuYXQoZnJvbSk7XHJcbiAgICB0aGlzLnByb2R1Y3RzLnJlbW92ZUF0KGZyb20pO1xyXG4gICAgdGhpcy5wcm9kdWN0cy5pbnNlcnQodGFyZ2V0SW5kZXgsIGdyb3VwKTtcclxuICAgIHRoaXMucHJvZHVjdHMubWFya0FzRGlydHkoKTtcclxuICAgIHRoaXMucmVjYWxjdWxhdGUoKTtcclxuICB9XHJcblxyXG4gIG9uUm93RHJhZ0VuZCgpIHtcclxuICAgIHRoaXMuZHJhZ0luZGV4ID0gbnVsbDtcclxuICAgIHRoaXMuZHJhZ092ZXJJbmRleCA9IG51bGw7XHJcbiAgfVxyXG5cclxuICAvLyBSYXRlL1ByaWNlOiBhbGxvdyBhdCBtb3N0IDIgZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50LiBBbnl0aGluZyBiZXlvbmRcclxuICAvLyAoZS5nLiAxMi4zNDUpIGlzIHRyaW1tZWQgdG8gMTIuMzQgYXMgdGhlIHVzZXIgdHlwZXMsIHRoZW4gdG90YWxzIHJlY29tcHV0ZS5cclxuICBvblByaWNlSW5wdXQoaTogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBjdHJsID0gdGhpcy5wcm9kdWN0cy5hdChpKT8uZ2V0KCdwcmljZScpO1xyXG4gICAgY29uc3QgcmF3ID0gY3RybD8udmFsdWU7XHJcbiAgICBpZiAocmF3ICE9PSBudWxsICYmIHJhdyAhPT0gdW5kZWZpbmVkICYmIHJhdyAhPT0gJycpIHtcclxuICAgICAgY29uc3QgdGV4dCA9IFN0cmluZyhyYXcpO1xyXG4gICAgICBjb25zdCBtYXRjaCA9IHRleHQubWF0Y2goL14oLT9cXGQqKShcXC5cXGR7MCwyfSk/Lyk7XHJcbiAgICAgIGNvbnN0IHRyaW1tZWQgPSBtYXRjaCA/IGAke21hdGNoWzFdfSR7bWF0Y2hbMl0gPz8gJyd9YCA6IHRleHQ7XHJcbiAgICAgIGlmICh0cmltbWVkICE9PSB0ZXh0KSB7XHJcbiAgICAgICAgY3RybD8uc2V0VmFsdWUodHJpbW1lZCA9PT0gJycgfHwgdHJpbW1lZCA9PT0gJy0nID8gbnVsbCA6IE51bWJlcih0cmltbWVkKSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlY2FsY3VsYXRlKGkpO1xyXG4gIH1cclxuXHJcbiAgLy8gUmVmcmVzaCBzdWJ0b3RhbCAvIHRheCAvIHN0b3JlIHRvdGFscy4gT25seSB0aGUgcm93IHRoYXQgd2FzIGp1c3QgZWRpdGVkXHJcbiAgLy8gKGNoYW5nZWRJbmRleCkgaGFzIGl0cyBBbW91bnQgcmUtZGVyaXZlZCBhcyBRdWFudGl0eSB4IFJhdGU7IGV2ZXJ5IG90aGVyXHJcbiAgLy8gcm93IGtlZXBzIGl0cyBzdG9yZWQgYW1vdW50LiBBdXRvLWdlbmVyYXRlZCBpbnZvaWNlcyBjYXJyeSBQUk9SQVRFRCBsaW5lc1xyXG4gIC8vIChhbW91bnQgPSBwcmljZSB4IHdvcmtpbmdEYXlzIC8gbW9udGhEYXlzLCBzbyBhbW91bnQgIT0gc3RvcmVDb3VudCB4IHByaWNlO1xyXG4gIC8vIGUuZy4gRFJBRlQtMjYtMjctMDAwMDkgc3RvcmVkIDEgeCAxNjUwIGFzIDYwNSkuIFJlY29tcHV0aW5nIGV2ZXJ5IHJvdyBvblxyXG4gIC8vIGFueSBrZXlzdHJva2Ugc2lsZW50bHkgcmV3cm90ZSBhbGwgb2YgdGhvc2UgdG8gdGhlIGZ1bGwtbW9udGggZmlndXJlLlxyXG4gIHJlY2FsY3VsYXRlKGNoYW5nZWRJbmRleD86IG51bWJlcikge1xyXG4gICAgbGV0IHN1YnRvdGFsID0gMDtcclxuICAgIHRoaXMucHJvZHVjdHMuY29udHJvbHMuZm9yRWFjaCgoZ3JvdXAsIGlkeCkgPT4ge1xyXG4gICAgICBpZiAoaWR4ID09PSBjaGFuZ2VkSW5kZXgpIHtcclxuICAgICAgICBjb25zdCBzdG9yZUNvdW50ID0gTnVtYmVyKGdyb3VwLmdldCgnc3RvcmVDb3VudCcpPy52YWx1ZSkgfHwgMDtcclxuICAgICAgICBjb25zdCBwcmljZSA9IE51bWJlcihncm91cC5nZXQoJ3ByaWNlJyk/LnZhbHVlKSB8fCAwO1xyXG4gICAgICAgIGdyb3VwLmdldCgnYW1vdW50Jyk/LnNldFZhbHVlKHBhcnNlRmxvYXQoKHN0b3JlQ291bnQgKiBwcmljZSkudG9GaXhlZCgyKSksIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgfVxyXG4gICAgICBzdWJ0b3RhbCArPSBOdW1iZXIoZ3JvdXAuZ2V0KCdhbW91bnQnKT8udmFsdWUpIHx8IDA7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBUYXggaXMgY2hhcmdlZCBvbiB0aGUgRElTQ09VTlRFRCBhbW91bnQsIG1hdGNoaW5nIGFwcGx5RGlzY291bnQoKSBvbiB0aGVcclxuICAgIC8vIGJhY2tlbmQuIFRheGluZyB0aGUgZ3Jvc3Mgc3VidG90YWwgaGVyZSB3b3VsZCBzaG93IGEgdG90YWwgdGhhdCB0aGVcclxuICAgIC8vIHNlcnZlciB0aGVuIHJlY29tcHV0ZXMgZGlmZmVyZW50bHkuXHJcbiAgICBjb25zdCB0YXhhYmxlID0gc3VidG90YWwgLSB0aGlzLmdldEFwcGxpZWREaXNjb3VudCgpO1xyXG4gICAgdGhpcy50YXhBcnJheS5jb250cm9scy5mb3JFYWNoKChncm91cCkgPT4ge1xyXG4gICAgICBjb25zdCB2YWx1ZSA9IGdyb3VwLmdldCgndmFsdWUnKT8udmFsdWUgfHwgMDtcclxuICAgICAgY29uc3QgdGF4QW1vdW50ID0gKHRheGFibGUgKiB2YWx1ZSAvIDEwMCkudG9GaXhlZCgyKTtcclxuICAgICAgZ3JvdXAuZ2V0KCd0YXhBbW91bnQnKT8uc2V0VmFsdWUodGF4QW1vdW50LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgdG90YWxTdG9yZXMgPSAwO1xyXG4gICAgdGhpcy5wcm9kdWN0cy5jb250cm9scy5mb3JFYWNoKChncm91cCkgPT4ge1xyXG4gICAgICB0b3RhbFN0b3JlcyArPSBncm91cC5nZXQoJ3N0b3JlQ291bnQnKT8udmFsdWUgfHwgMDtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5pbnZvaWNlRm9ybS5nZXQoJ3N0b3JlcycpPy5zZXRWYWx1ZSh0b3RhbFN0b3JlcywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG5cclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcblxyXG4gIGdldFN1YnRvdGFsKCk6IG51bWJlciB7XHJcbiAgICBsZXQgc3VidG90YWwgPSAwO1xyXG4gICAgdGhpcy5wcm9kdWN0cy5jb250cm9scy5mb3JFYWNoKChncm91cCkgPT4ge1xyXG4gICAgICBzdWJ0b3RhbCArPSBncm91cC5nZXQoJ2Ftb3VudCcpPy52YWx1ZSB8fCAwO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gc3VidG90YWw7XHJcbiAgfVxyXG5cclxuICBnZXRUb3RhbFRheCgpOiBudW1iZXIge1xyXG4gICAgbGV0IHRvdGFsVGF4ID0gMDtcclxuICAgIHRoaXMudGF4QXJyYXkuY29udHJvbHMuZm9yRWFjaCgoZ3JvdXApID0+IHtcclxuICAgICAgdG90YWxUYXggKz0gcGFyc2VGbG9hdChncm91cC5nZXQoJ3RheEFtb3VudCcpPy52YWx1ZSB8fCAnMCcpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdG90YWxUYXg7XHJcbiAgfVxyXG5cclxuICAvLyBDcmVkaXQgbm90ZSBhbHJlYWR5IGFwcGxpZWQgdG8gdGhpcyBpbnZvaWNlICgwIHdoZW4gbm9uZSkuIFJlYWQgc3RyYWlnaHRcclxuICAvLyBvZmYgdGhlIHNhdmVkIGludm9pY2Ug4oCUIGl0IGlzIG5vdCBhIGxpbmUgaXRlbSwgc28gZ2V0U3VidG90YWwoKSBuZXZlciBzZWVzXHJcbiAgLy8gaXQgYW5kIHRoZSBzdW1tYXJ5IHdvdWxkIG90aGVyd2lzZSBzaG93IHRoZSBwcmUtZGlzY291bnQgdG90YWwuXHJcbiAgZ2V0QXBwbGllZERpc2NvdW50KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gTnVtYmVyKHRoaXMuaW52b2ljZURhdGE/LmRpc2NvdW50QW1vdW50KSB8fCAwO1xyXG4gIH1cclxuXHJcbiAgZ2V0VG90YWxBbW91bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmdldFN1YnRvdGFsKCkgLSB0aGlzLmdldEFwcGxpZWREaXNjb3VudCgpICsgdGhpcy5nZXRUb3RhbFRheCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gQ3VycmVuY3ktYXdhcmUgcm91bmRpbmc6IElOUiAtPiB3aG9sZSBudW1iZXIsIGV2ZXJ5IG90aGVyIGN1cnJlbmN5IGtlZXBzXHJcbiAgLy8gMiBkZWNpbWFscy4gTWlycm9ycyB0aGUgYmFja2VuZCByb3VuZEFtb3VudCgpIGhlbHBlci5cclxuICByb3VuZEZvckN1cnJlbmN5KHZhbHVlOiBudW1iZXIsIGN1cnJlbmN5OiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgY29uc3QgbiA9IE51bWJlcih2YWx1ZSkgfHwgMDtcclxuICAgIHJldHVybiBjdXJyZW5jeSA9PT0gJ2lucicgPyBNYXRoLnJvdW5kKG4pIDogTWF0aC5yb3VuZChuICogMTAwKSAvIDEwMDtcclxuICB9XHJcblxyXG4gIGdldEN1cnJlbmN5U3ltYm9sKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5zeW1ib2xGb3IodGhpcy5pbnZvaWNlRm9ybS5nZXQoJ2N1cnJlbmN5Jyk/LnZhbHVlKTtcclxuICB9XHJcblxyXG4gIGdldEludm9pY2VDdXJyZW5jeVN5bWJvbCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuc3ltYm9sRm9yKHRoaXMuaW52b2ljZURhdGE/LmN1cnJlbmN5KTtcclxuICB9XHJcblxyXG4gIG9uU3VibWl0KCkge1xyXG4gICAgaWYgKHRoaXMuaW52b2ljZUZvcm0uaW52YWxpZCkge1xyXG4gICAgICB0aGlzLmludm9pY2VGb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuICAgICAgLy8gVGhlIEJpbGxpbmcgR3JvdXAgZmllbGQgaXNuJ3QgcmVuZGVyZWQgd2hlbiBubyBncm91cHMgbG9hZGVkLCBzbyB0aGVyZSdzXHJcbiAgICAgIC8vIG5vIGhpZ2hsaWdodGVkIGZpZWxkIHRvIHNjcm9sbCB0byDigJQgdGVsbCB0aGUgdXNlciBpbnN0ZWFkLlxyXG4gICAgICBpZiAodGhpcy5pbnZvaWNlRm9ybS5nZXQoJ2dyb3VwSWQnKT8uaW52YWxpZCAmJiAhdGhpcy5iaWxsaW5nR3JvdXBzLmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdCgnQmlsbGluZyBncm91cCBpcyByZXF1aXJlZCwgYnV0IG5vbmUgbG9hZGVkIGZvciB0aGlzIGJyYW5kIOKAlCByZW9wZW4gdGhlIGZvcm0gdG8gcmV0cnkuJyk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gRGVmZXIgdG8gbmV4dCB0aWNrIHNvIEFuZ3VsYXIgcmVuZGVycyB0aGUgLmlzLWludmFsaWQgY2xhc3Nlc1xyXG4gICAgICAvLyBiZWZvcmUgd2UgcXVlcnkgdGhlIERPTSBmb3IgdGhlIGZpcnN0IGludmFsaWQgY29udHJvbCB0byBzY3JvbGwgdG8uXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zY3JvbGxUb0ZpcnN0SW52YWxpZCgpLCAwKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZXhjZWVkc0NyZWRpdEJhbGFuY2UpIHtcclxuICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KGBDcmVkaXQgbm90ZSB0b3RhbCBleGNlZWRzIHRoZSBjcmVkaXRhYmxlIGJhbGFuY2Ugb2YgJHt0aGlzLnNvdXJjZUludm9pY2VOdW1iZXJ9LmApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pc0NyZWRpdE5vdGUgJiYgIXRoaXMuY3JlZGl0VHlwZSkge1xyXG4gICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoJ0Nob29zZSBob3cgdG8gY3JlZGl0OiBieSBwcm9kdWN0LCBieSBzdG9yZSBvciBhZ2FpbnN0IHRoZSBpbnZvaWNlLicpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pc0NyZWRpdE5vdGUgJiYgIXRoaXMubGluZUl0ZW1zLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QodGhpcy5jcmVkaXRUeXBlID09PSAnc3RvcmUnID8gJ1NlbGVjdCBhdCBsZWFzdCBvbmUgc3RvcmUuJyA6ICdBZGQgYXQgbGVhc3Qgb25lIHByb2R1Y3QuJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNyZWRpdFR5cGUgPT09ICdwcm9kdWN0JyAmJiB0aGlzLmxpbmVJdGVtcy5jb250cm9scy5zb21lKChnKSA9PiAhZy5nZXQoJ3Byb2R1Y3ROYW1lJyk/LnZhbHVlKSkge1xyXG4gICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoJ1NlbGVjdCBhIHByb2R1Y3Qgb24gZXZlcnkgbGluZSwgb3IgcmVtb3ZlIHRoZSBlbXB0eSBvbmUuJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNhdmluZyA9IHRydWU7XHJcbiAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLmludm9pY2VGb3JtLmdldFJhd1ZhbHVlKCk7XHJcblxyXG4gICAgY29uc3QgcGF5bG9hZDogYW55ID0ge1xyXG4gICAgICBjb21wYW55TmFtZTogZm9ybVZhbHVlLmNvbXBhbnlOYW1lLFxyXG4gICAgICBjb21wYW55QWRkcmVzczogZm9ybVZhbHVlLmNvbXBhbnlBZGRyZXNzLFxyXG4gICAgICBHU1ROdW1iZXI6IGZvcm1WYWx1ZS5HU1ROdW1iZXIsXHJcbiAgICAgIFBsYWNlT2ZTdXBwbHk6IGZvcm1WYWx1ZS5QbGFjZU9mU3VwcGx5LFxyXG4gICAgICBncm91cE5hbWU6IGZvcm1WYWx1ZS5ncm91cE5hbWUsXHJcbiAgICAgIGdyb3VwSWQ6IGZvcm1WYWx1ZS5ncm91cElkLFxyXG4gICAgICBzdG9yZXM6IGZvcm1WYWx1ZS5zdG9yZXMsXHJcbiAgICAgIGJpbGxpbmdEYXRlOiBmb3JtVmFsdWUuYmlsbGluZ0RhdGUsXHJcbiAgICAgIGR1ZURhdGU6IGZvcm1WYWx1ZS5kdWVEYXRlLFxyXG4gICAgICBwYXltZW50VGVybTogZm9ybVZhbHVlLnBheW1lbnRUZXJtLFxyXG4gICAgICBjdXJyZW5jeTogZm9ybVZhbHVlLmN1cnJlbmN5LFxyXG4gICAgICBzdGF0dXM6IGZvcm1WYWx1ZS5zdGF0dXMsXHJcbiAgICAgIHBheW1lbnRTdGF0dXM6IGZvcm1WYWx1ZS5wYXltZW50U3RhdHVzLFxyXG4gICAgICBhZHZhbmNlSW52b2ljZTogZm9ybVZhbHVlLmFkdmFuY2VJbnZvaWNlLFxyXG4gICAgICBhZHZhbmNlUGVyaW9kOiBmb3JtVmFsdWUuYWR2YW5jZVBlcmlvZCxcclxuICAgICAgLy8gTWFwIGludm9pY2UgdG8gYSBwdXJjaGFzZSBvcmRlciAoc2VydmVyIGRlZHVjdHMgdGhlIFBPIGJhbGFuY2UpLlxyXG4gICAgICBwdXJjaGFzZU9yZGVyTnVtYmVyOiBmb3JtVmFsdWUucHVyY2hhc2VPcmRlck51bWJlciB8fCB1bmRlZmluZWQsXHJcbiAgICAgIHByb2R1Y3RzOiBmb3JtVmFsdWUucHJvZHVjdHMsXHJcbiAgICAgIHRheDogZm9ybVZhbHVlLnRheCxcclxuICAgICAgLy8gJ2Ftb3VudCcgaXMgdGhlIHBvc3QtZGlzY291bnQgdmFsdWUgdGhlIGJhY2tlbmQgc3RvcmVzIChnZXRTdWJ0b3RhbCgpXHJcbiAgICAgIC8vIGlzIHRoZSBncm9zcyBsaW5lLWl0ZW0gdG90YWwpLiBTZW5kaW5nIHRoZSBncm9zcyBmaWd1cmUgaGVyZSB3aXBlZCBhblxyXG4gICAgICAvLyBhcHBsaWVkIGNyZWRpdCBub3RlIG9uIGV2ZXJ5IFVwZGF0ZSBJbnZvaWNlLlxyXG4gICAgICAvLyBDb21wb25lbnQgZmlndXJlcyAoc3VidG90YWwsIGRpc2NvdW50KSBrZWVwIGV4YWN0IHBhaXNlIOKAlCBvbmx5IHRoZVxyXG4gICAgICAvLyBUb3RhbCBBbW91bnQgaXMgd2hvbGUtdW5pdCByb3VuZGVkIChJTlIpLiBQb3N0aW5nIGEgd2hvbGUtcm91bmRlZFxyXG4gICAgICAvLyBzdWJ0b3RhbCBtYWRlIHRoZSBwcmludGVkIFN1YiBUb3RhbCBkaXNhZ3JlZSB3aXRoIHRoZSBsaW5lIGl0ZW1zXHJcbiAgICAgIC8vIChlLmcuIDI0LDA2NS4wMCB2cyBsaW5lcyBzdW1taW5nIHRvIDI0LDA2NC41MikuXHJcbiAgICAgIGFtb3VudDogdGhpcy5yb3VuZDIodGhpcy5nZXRTdWJ0b3RhbCgpIC0gdGhpcy5nZXRBcHBsaWVkRGlzY291bnQoKSksXHJcbiAgICAgIHRvdGFsQW1vdW50OiB0aGlzLnJvdW5kRm9yQ3VycmVuY3kodGhpcy5nZXRUb3RhbEFtb3VudCgpLCBmb3JtVmFsdWUuY3VycmVuY3kpLFxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBDYXJyeSB0aGUgYXBwbGllZCBjcmVkaXQgbm90ZSB0aHJvdWdoIHRoZSB1cGRhdGUgc28gaXQgc3Vydml2ZXMgYW4gZWRpdC5cclxuICAgIGlmICh0aGlzLmdldEFwcGxpZWREaXNjb3VudCgpID4gMCkge1xyXG4gICAgICBwYXlsb2FkLmRpc2NvdW50QW1vdW50ID0gdGhpcy5yb3VuZDIodGhpcy5nZXRBcHBsaWVkRGlzY291bnQoKSk7XHJcbiAgICAgIGNvbnN0IGdyb3NzID0gdGhpcy5nZXRTdWJ0b3RhbCgpO1xyXG4gICAgICBwYXlsb2FkLmRpc2NvdW50UGVyY2VudGFnZSA9IGdyb3NzID4gMFxyXG4gICAgICAgID8gdGhpcy5yb3VuZDIodGhpcy5nZXRBcHBsaWVkRGlzY291bnQoKSAvIGdyb3NzICogMTAwKVxyXG4gICAgICAgIDogMDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5tb2RlID09PSAnZWRpdCcpIHtcclxuICAgICAgcGF5bG9hZC5faWQgPSB0aGlzLmludm9pY2VEYXRhLl9pZDtcclxuICAgICAgcGF5bG9hZC5pbnZvaWNlID0gdGhpcy5pbnZvaWNlRGF0YS5pbnZvaWNlO1xyXG4gICAgICBwYXlsb2FkLmNsaWVudElkID0gdGhpcy5pbnZvaWNlRGF0YS5jbGllbnRJZDtcclxuICAgICAgdGhpcy5iaWxsaW5nU2VydmljZS51cGRhdGVJbnZvaWNlKHBheWxvYWQpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdC5nZXRQcmltYXJ5VG9hc3QoJ0ludm9pY2UgdXBkYXRlZCBzdWNjZXNzZnVsbHknKTtcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVNb2RhbC5jbG9zZSgndXBkYXRlZCcpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoJ0ZhaWxlZCB0byB1cGRhdGUgaW52b2ljZScpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gJ2VkaXRFc3RpbWF0ZScpIHtcclxuICAgICAgLy8gVXBkYXRlIGFuIGV4aXN0aW5nIGVzdGltYXRlLiBJZGVudGl0eSBmaWVsZHMgKGVzdGltYXRlICMsIGNsaWVudElkKSBhcmVcclxuICAgICAgLy8gcHJlc2VydmVkIHNlcnZlci1zaWRlOyB3ZSBzZW5kIHRoZSBlZGl0YWJsZSBmb3JtIGRhdGEuXHJcbiAgICAgIHBheWxvYWQuX2lkID0gdGhpcy5pbnZvaWNlRGF0YS5faWQ7XHJcbiAgICAgIHBheWxvYWQuY2xpZW50SWQgPSB0aGlzLmludm9pY2VEYXRhLmNsaWVudElkIHx8IHRoaXMuY2xpZW50SWQ7XHJcbiAgICAgIHBheWxvYWQucGVyaW9kID0gZm9ybVZhbHVlLmJpbGxpbmdEYXRlXHJcbiAgICAgICAgPyBuZXcgRGF0ZShmb3JtVmFsdWUuYmlsbGluZ0RhdGUpLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHsgbW9udGg6ICdzaG9ydCcsIHllYXI6ICdudW1lcmljJyB9KVxyXG4gICAgICAgIDogdGhpcy5pbnZvaWNlRGF0YS5wZXJpb2Q7XHJcbiAgICAgIC8vIE9ubHkgcmUtZGF0ZSB3aGVuIHRoZSB1c2VyIGNoYW5nZWQgaXQsIHNvIGFuIHVudG91Y2hlZCBlZGl0IGtlZXBzIHRoZVxyXG4gICAgICAvLyBvcmlnaW5hbCBjcmVhdGVkRGF0ZSB0aW1lc3RhbXAgKGFuZCBpdHMgcGxhY2UgaW4gdGhlIGxpc3Qgb3JkZXIpLlxyXG4gICAgICBpZiAodGhpcy5pbnZvaWNlRm9ybS5nZXQoJ2JpbGxpbmdEYXRlJyk/LmRpcnR5ICYmIGZvcm1WYWx1ZS5iaWxsaW5nRGF0ZSkge1xyXG4gICAgICAgIHBheWxvYWQuY3JlYXRlZERhdGUgPSBmb3JtVmFsdWUuYmlsbGluZ0RhdGU7XHJcbiAgICAgIH1cclxuICAgICAgcGF5bG9hZC52YWxpZFRpbGwgPSBmb3JtVmFsdWUuZHVlRGF0ZTtcclxuICAgICAgdGhpcy5iaWxsaW5nU2VydmljZS51cGRhdGVFc3RpbWF0ZShwYXlsb2FkKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3QuZ2V0UHJpbWFyeVRvYXN0KCdFc3RpbWF0ZSB1cGRhdGVkIHN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZU1vZGFsLmNsb3NlKCd1cGRhdGVkJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KGVycj8uZXJyb3I/Lm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byB1cGRhdGUgZXN0aW1hdGUnKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLm1vZGUgPT09ICdlc3RpbWF0ZScpIHtcclxuICAgICAgLy8gU2FtZSBmb3JtLCBzZXBhcmF0ZSBkb2N1bWVudDogcG9zdCB0byB0aGUgZXN0aW1hdGUgQVBJIHNvIGl0IGxhbmRzIGluXHJcbiAgICAgIC8vIHRoZSBlc3RpbWF0ZXMgY29sbGVjdGlvbiB3aXRoIGFuIEVTVC3igKYgbnVtYmVyIGluc3RlYWQgb2YgYW4gaW52b2ljZS5cclxuICAgICAgcGF5bG9hZC5jbGllbnRJZCA9IHRoaXMuY2xpZW50SWQ7XHJcbiAgICAgIHBheWxvYWQucGVyaW9kID0gZm9ybVZhbHVlLmJpbGxpbmdEYXRlXHJcbiAgICAgICAgPyBuZXcgRGF0ZShmb3JtVmFsdWUuYmlsbGluZ0RhdGUpLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHsgbW9udGg6ICdzaG9ydCcsIHllYXI6ICdudW1lcmljJyB9KVxyXG4gICAgICAgIDogdW5kZWZpbmVkO1xyXG4gICAgICAvLyBUaGUgZXN0aW1hdGUgc2NoZW1hIGhhcyBubyBiaWxsaW5nRGF0ZSDigJQgdGhlIHNlcnZlciBzdGFtcHMgY3JlYXRlZERhdGVcclxuICAgICAgLy8gKHRoZSBcIkdlbmVyYXRlZFwiIGRhdGUpIGZyb20gdGhpcyBmaWVsZCwgZWxzZSBmYWxscyBiYWNrIHRvIG5vdy5cclxuICAgICAgcGF5bG9hZC5jcmVhdGVkRGF0ZSA9IGZvcm1WYWx1ZS5iaWxsaW5nRGF0ZSB8fCB1bmRlZmluZWQ7XHJcbiAgICAgIHBheWxvYWQudmFsaWRUaWxsID0gZm9ybVZhbHVlLmR1ZURhdGU7XHJcbiAgICAgIHRoaXMuYmlsbGluZ1NlcnZpY2UuY3JlYXRlRXN0aW1hdGUocGF5bG9hZCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0LmdldFByaW1hcnlUb2FzdCgnRXN0aW1hdGUgZ2VuZXJhdGVkIHN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZU1vZGFsLmNsb3NlKCdjcmVhdGVkJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KGVycj8uZXJyb3I/Lm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBnZW5lcmF0ZSBlc3RpbWF0ZScpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gJ2NyZWRpdE5vdGUnIHx8IHRoaXMubW9kZSA9PT0gJ2VkaXRDcmVkaXROb3RlJykge1xyXG4gICAgICAvLyBDcmVkaXQtbm90ZSBBUEk6IGNvbXBhbnkgLyBncm91cCBkZXRhaWxzIGNvbWUgZnJvbSB0aGUgc291cmNlIGludm9pY2VcclxuICAgICAgLy8gc2VydmVyLXNpZGU7IG9ubHkgbGluZSBpdGVtcywgZGF0ZSBhbmQgcmVhc29uIGFyZSBzZW50LiBUaGUgc2VydmVyXHJcbiAgICAgIC8vIHJlY29tcHV0ZXMgdGhlIHRvdGFsIGNyZWRpdCBmcm9tIHRoZSBsaW5lIGl0ZW1zLlxyXG4gICAgICBjb25zdCBjcmVhdGluZyA9IHRoaXMubW9kZSA9PT0gJ2NyZWRpdE5vdGUnO1xyXG4gICAgICBjb25zdCBjcmVkaXRQYXlsb2FkOiBhbnkgPSB7XHJcbiAgICAgICAgY3JlZGl0VHlwZTogdGhpcy5jcmVkaXRUeXBlLFxyXG4gICAgICAgIGxpbmVJdGVtczogZm9ybVZhbHVlLmxpbmVJdGVtcyxcclxuICAgICAgICBjcmVkaXROb3RlRGF0ZTogZm9ybVZhbHVlLmJpbGxpbmdEYXRlLFxyXG4gICAgICAgIHJlYXNvbjogZm9ybVZhbHVlLnJlYXNvbixcclxuICAgICAgfTtcclxuICAgICAgaWYgKGNyZWF0aW5nKSB7XHJcbiAgICAgICAgY3JlZGl0UGF5bG9hZC5jbGllbnRJZCA9IHRoaXMuY2xpZW50SWQ7XHJcbiAgICAgICAgY3JlZGl0UGF5bG9hZC5pbnZvaWNlSWQgPSBmb3JtVmFsdWUuaW52b2ljZUlkO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNyZWRpdFBheWxvYWQuX2lkID0gdGhpcy5pbnZvaWNlRGF0YS5faWQ7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgY2FsbCQgPSBjcmVhdGluZ1xyXG4gICAgICAgID8gdGhpcy5iaWxsaW5nU2VydmljZS5jcmVhdGVDcmVkaXROb3RlKGNyZWRpdFBheWxvYWQpXHJcbiAgICAgICAgOiB0aGlzLmJpbGxpbmdTZXJ2aWNlLnVwZGF0ZUNyZWRpdE5vdGUoY3JlZGl0UGF5bG9hZCk7XHJcbiAgICAgIGNhbGwkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdC5nZXRQcmltYXJ5VG9hc3QoY3JlYXRpbmcgPyAnQ3JlZGl0IG5vdGUgY3JlYXRlZCBzdWNjZXNzZnVsbHknIDogJ0NyZWRpdCBub3RlIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlTW9kYWwuY2xvc2UoY3JlYXRpbmcgPyAnY3JlYXRlZCcgOiAndXBkYXRlZCcpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChlcnI/LmVycm9yPy5tZXNzYWdlIHx8IChjcmVhdGluZyA/ICdGYWlsZWQgdG8gY3JlYXRlIGNyZWRpdCBub3RlJyA6ICdGYWlsZWQgdG8gdXBkYXRlIGNyZWRpdCBub3RlJykpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwYXlsb2FkLmNsaWVudElkID0gdGhpcy5jbGllbnRJZDtcclxuICAgICAgLy8gRmxhZyB0aGUgYmFja2VuZCB0byB0YWtlIHRoZSBcImN1c3RvbSBjcmVhdGVcIiBwYXRoIHRoYXQgcGVyc2lzdHMgd2hhdFxyXG4gICAgICAvLyB0aGUgZm9ybSBidWlsdC4gVGhlIGxlZ2FjeSAvY3JlYXRlSW52b2ljZSBjb250cmFjdCBleHBlY3RzIGVpdGhlclxyXG4gICAgICAvLyBhbGxDbGllbnQrY2xpZW50TGlzdCBvciBpbnZvaWNlSWQ7IHdpdGhvdXQgdGhpcyBmbGFnLCB0aGUgc2VydmVyXHJcbiAgICAgIC8vIHNpbGVudGx5IHJldHVybnMgMnh4IGFuZCB3cml0ZXMgbm90aGluZy5cclxuICAgICAgcGF5bG9hZC5jdXN0b21JbnZvaWNlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5iaWxsaW5nU2VydmljZS5jcmVhdGVJbnZvaWNlKHBheWxvYWQpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdC5nZXRQcmltYXJ5VG9hc3QoJ0ludm9pY2UgY3JlYXRlZCBzdWNjZXNzZnVsbHknKTtcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVNb2RhbC5jbG9zZSgnY3JlYXRlZCcpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIGNvbnN0IG1zZyA9IGVycj8uZXJyb3I/Lm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBjcmVhdGUgaW52b2ljZSc7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QobXNnKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09IENSRURJVCBOT1RFID09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICBpbml0Q3JlZGl0Tm90ZUZvcm0oKSB7XHJcbiAgICB0aGlzLmNyZWRpdE5vdGVGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIGFtb3VudDogWycnXSxcclxuICAgICAgcmV2aXNlZEFtb3VudDogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgZGlzY291bnRBbW91bnQ6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIERpc2NvdW50IEFtb3VudCBhbmQgUmV2aXNlZCBBbW91bnQgYXJlIHR3byB2aWV3cyBvZiBvbmUgbnVtYmVyIOKAlCBlZGl0aW5nXHJcbiAgICAvLyBlaXRoZXIgcmVjb21wdXRlcyB0aGUgb3RoZXIgKHsgZW1pdEV2ZW50OiBmYWxzZSB9IHN0b3BzIHRoZSBmZWVkYmFja1xyXG4gICAgLy8gbG9vcCkuIFRoZSBkaXNjb3VudCBQRVJDRU5UQUdFIGlzIG5vIGxvbmdlciBhbiBpbnB1dDogaXQncyBkZXJpdmVkIG9uY2VcclxuICAgIC8vIG9uIHN1Ym1pdCwgc28gYSAyIGRwIHBlcmNlbnRhZ2UgY2FuIG5ldmVyIHJvdW5kIHRoZSBlbnRlcmVkIGFtb3VudC5cclxuICAgIHRoaXMuY3JlZGl0Tm90ZUZvcm0uZ2V0KCdkaXNjb3VudEFtb3VudCcpPy52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZSkgPT4ge1xyXG4gICAgICBpZiAoZSA9PT0gJycgfHwgZSA9PT0gbnVsbCB8fCBlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLmNyZWRpdE5vdGVGb3JtLmdldCgncmV2aXNlZEFtb3VudCcpPy5zZXRWYWx1ZSgnJywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgIHRoaXMuY3JlZGl0TW9yZVRoYW5UZW5QZXJjZW50ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGFtb3VudCA9IHRoaXMudG9OdW1iZXIodGhpcy5jcmVkaXROb3RlRm9ybS5nZXQoJ2Ftb3VudCcpPy52YWx1ZSk7XHJcbiAgICAgIGNvbnN0IGRpc2NvdW50QW1vdW50ID0gdGhpcy50b051bWJlcihlKTtcclxuICAgICAgaWYgKGFtb3VudCA+IDApIHtcclxuICAgICAgICB0aGlzLmNyZWRpdE1vcmVUaGFuVGVuUGVyY2VudCA9IGlzTmFOKGRpc2NvdW50QW1vdW50KSB8fCBkaXNjb3VudEFtb3VudCA8IDAgfHwgZGlzY291bnRBbW91bnQgPiBhbW91bnQ7XHJcbiAgICAgICAgdGhpcy5jcmVkaXROb3RlRm9ybS5nZXQoJ3JldmlzZWRBbW91bnQnKT8uc2V0VmFsdWUodGhpcy5yb3VuZDIoYW1vdW50IC0gZGlzY291bnRBbW91bnQpLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNyZWRpdE5vdGVGb3JtLmdldCgncmV2aXNlZEFtb3VudCcpPy52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZSkgPT4ge1xyXG4gICAgICBpZiAoZSA9PT0gJycgfHwgZSA9PT0gbnVsbCB8fCBlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLmNyZWRpdE5vdGVGb3JtLmdldCgnZGlzY291bnRBbW91bnQnKT8uc2V0VmFsdWUoJycsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICB0aGlzLmNyZWRpdE1vcmVUaGFuVGVuUGVyY2VudCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBhbW91bnQgPSB0aGlzLnRvTnVtYmVyKHRoaXMuY3JlZGl0Tm90ZUZvcm0uZ2V0KCdhbW91bnQnKT8udmFsdWUpO1xyXG4gICAgICBjb25zdCByZXZpc2VkID0gdGhpcy50b051bWJlcihlKTtcclxuICAgICAgaWYgKGFtb3VudCA+IDApIHtcclxuICAgICAgICAvLyBJbnZhbGlkIHdoZW4gbm90IGEgbnVtYmVyLCBuZWdhdGl2ZSwgb3IgY3JlZGl0aW5nIG1vcmUgdGhhbiB0aGUgdG90YWwuXHJcbiAgICAgICAgdGhpcy5jcmVkaXRNb3JlVGhhblRlblBlcmNlbnQgPSBpc05hTihyZXZpc2VkKSB8fCByZXZpc2VkIDwgMCB8fCByZXZpc2VkID4gYW1vdW50O1xyXG4gICAgICAgIHRoaXMuY3JlZGl0Tm90ZUZvcm0uZ2V0KCdkaXNjb3VudEFtb3VudCcpPy5zZXRWYWx1ZSh0aGlzLnJvdW5kMihhbW91bnQgLSByZXZpc2VkKSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBQYXJzZSBhIGZvcm0gdmFsdWUgdGhhdCBtYXkgYmUgYSBzdHJpbmcgKCcxMjM0LjU2Jykgb3IgYSBudW1iZXIuXHJcbiAgcHJpdmF0ZSB0b051bWJlcih2OiBhbnkpOiBudW1iZXIge1xyXG4gICAgaWYgKHYgPT09ICcnIHx8IHYgPT09IG51bGwgfHwgdiA9PT0gdW5kZWZpbmVkKSByZXR1cm4gTmFOO1xyXG4gICAgcmV0dXJuIE51bWJlcih2KTtcclxuICB9XHJcblxyXG4gIC8vIFJvdW5kIHRvIDIgZGVjaW1hbCBwbGFjZXMsIGF2b2lkaW5nIGZsb2F0IGFydGVmYWN0cyAoMC4xKzAuMiBzdHlsZSkuXHJcbiAgcHJpdmF0ZSByb3VuZDIobjogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGlmICghaXNGaW5pdGUobikpIHJldHVybiBOYU47XHJcbiAgICByZXR1cm4gTWF0aC5yb3VuZCgobiArIE51bWJlci5FUFNJTE9OKSAqIDEwMCkgLyAxMDA7XHJcbiAgfVxyXG5cclxuICBwYXRjaENyZWRpdE5vdGVEZWZhdWx0cygpIHtcclxuICAgIGlmICghdGhpcy5pbnZvaWNlRGF0YSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBpbnZvaWNlRGF0YS5hbW91bnQgaXMgdGhlIENVUlJFTlQgKGFscmVhZHkgZGlzY291bnRlZCkgYW1vdW50LCBzbyBhZGQgYW55XHJcbiAgICAvLyBhcHBsaWVkIGRpc2NvdW50IGJhY2sgdG8gc2hvdyB0aGUgb3JpZ2luYWwgaW52b2ljZSB2YWx1ZSBpbiBUb3RhbCBBbW91bnQuXHJcbiAgICBjb25zdCBhcHBsaWVkID0gdGhpcy5nZXRBcHBsaWVkRGlzY291bnQoKTtcclxuICAgIGNvbnN0IGN1cnJlbnQgPSBOdW1iZXIodGhpcy5pbnZvaWNlRGF0YS5hbW91bnQgPz8gdGhpcy5pbnZvaWNlRGF0YS50b3RhbEFtb3VudCkgfHwgMDtcclxuICAgIGNvbnN0IG9yaWdpbmFsID0gdGhpcy5yb3VuZDIoY3VycmVudCArIGFwcGxpZWQpO1xyXG5cclxuICAgIC8vIFByZS1wb3B1bGF0ZSB3aXRoIHRoZSBkaXNjb3VudCBhbHJlYWR5IG9uIHRoaXMgaW52b2ljZSBzbyByZS1vcGVuaW5nIHRoZVxyXG4gICAgLy8gdGFiIHNob3dzIHdoYXQgd2FzIGFwcGxpZWQgcmF0aGVyIHRoYW4gYW4gZW1wdHkgZm9ybS4gZW1pdEV2ZW50OiBmYWxzZSDigJRcclxuICAgIC8vIHRoZSB2YWx1ZUNoYW5nZXMgcGFpciB3b3VsZCBvdGhlcndpc2UgcmVjb21wdXRlIGZyb20gYSBoYWxmLXBhdGNoZWQgZm9ybS5cclxuICAgIHRoaXMuY3JlZGl0Tm90ZUZvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgIGFtb3VudDogb3JpZ2luYWwsXHJcbiAgICAgIGRpc2NvdW50QW1vdW50OiBhcHBsaWVkID4gMCA/IGFwcGxpZWQgOiAnJyxcclxuICAgICAgcmV2aXNlZEFtb3VudDogYXBwbGllZCA+IDAgPyB0aGlzLnJvdW5kMihvcmlnaW5hbCAtIGFwcGxpZWQpIDogJycsXHJcbiAgICB9LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB0aGlzLmNyZWRpdE1vcmVUaGFuVGVuUGVyY2VudCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlDcmVkaXROb3RlKCkge1xyXG4gICAgaWYgKHRoaXMuY3JlZGl0TW9yZVRoYW5UZW5QZXJjZW50KSByZXR1cm47XHJcbiAgICAvLyBkaXNjb3VudEFtb3VudCBpcyB3aGF0IHRoZSB1c2VyIHR5cGVkIGFuZCBpcyBhdXRob3JpdGF0aXZlLiBUaGVcclxuICAgIC8vIHBlcmNlbnRhZ2UgaXMgZGVyaXZlZCBmcm9tIGl0IGhlcmUgcHVyZWx5IHNvIHRoZSBiYWNrZW5kIGNhbiBrZWVwIHN0b3JpbmdcclxuICAgIC8vIGRpc2NvdW50UGVyY2VudGFnZSDigJQgaXQgaXMgbmV2ZXIgdXNlZCB0byBjb21wdXRlIHRoZSBjcmVkaXRlZCB2YWx1ZS5cclxuICAgIGNvbnN0IGFtb3VudCA9IHRoaXMudG9OdW1iZXIodGhpcy5jcmVkaXROb3RlRm9ybS5nZXQoJ2Ftb3VudCcpPy52YWx1ZSk7XHJcbiAgICBjb25zdCBkaXNjb3VudEFtb3VudCA9IHRoaXMudG9OdW1iZXIodGhpcy5jcmVkaXROb3RlRm9ybS5nZXQoJ2Rpc2NvdW50QW1vdW50Jyk/LnZhbHVlKTtcclxuICAgIGNvbnN0IHJlcXVlc3REYXRhID0ge1xyXG4gICAgICBpbnZvaWNlOiB0aGlzLmludm9pY2VEYXRhLmludm9pY2UsXHJcbiAgICAgIHJldmlzZWRBbW91bnQ6IHRoaXMuY3JlZGl0Tm90ZUZvcm0uZ2V0KCdyZXZpc2VkQW1vdW50Jyk/LnZhbHVlLFxyXG4gICAgICBkaXNjb3VudDogYW1vdW50ID4gMCA/IHRoaXMucm91bmQyKGRpc2NvdW50QW1vdW50IC8gYW1vdW50ICogMTAwKSA6IDAsXHJcbiAgICAgIGRpc2NvdW50QW1vdW50OiBkaXNjb3VudEFtb3VudCxcclxuICAgIH07XHJcbiAgICB0aGlzLnNhdmluZyA9IHRydWU7XHJcbiAgICB0aGlzLmJpbGxpbmdTZXJ2aWNlLmFwcGx5RGlzY291bnQocmVxdWVzdERhdGEpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0LmdldFByaW1hcnlUb2FzdCgnQ3JlZGl0IG5vdGUgYXBwbGllZCBzdWNjZXNzZnVsbHknKTtcclxuICAgICAgICAgIHRoaXMuYWN0aXZlTW9kYWwuY2xvc2UoJ2NyZWRpdEFwcGxpZWQnKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoJ0ZhaWxlZCB0byBhcHBseSBjcmVkaXQgbm90ZScpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9taXRTcGVjaWFsQ2hhcihldmVudDogYW55KSB7XHJcbiAgICBjb25zdCBrID0gZXZlbnQuY2hhckNvZGU7XHJcbiAgICByZXR1cm4gKGsgPT0gOCB8fCBrID09IDMyIHx8IChrID49IDQ4ICYmIGsgPD0gNTcpKTtcclxuICB9XHJcblxyXG4gIC8vIEFtb3VudC9wZXJjZW50YWdlIGtleXByZXNzIGZpbHRlcjogZGlnaXRzIHBsdXMgYSBzaW5nbGUgZGVjaW1hbCBwb2ludC5cclxuICAvLyBvbWl0U3BlY2lhbENoYXIgKGFib3ZlKSBibG9ja3MgJy4nLCB3aGljaCB3b3VsZCBtYWtlIHRoZXNlIGZpZWxkc1xyXG4gIC8vIGludGVnZXItb25seSDigJQga2VwdCBzZXBhcmF0ZSBzbyBvdGhlciBpbnB1dHMgdXNpbmcgaXQgYXJlIHVuYWZmZWN0ZWQuXHJcbiAgb21pdFNwZWNpYWxDaGFyRGVjaW1hbChldmVudDogYW55KSB7XHJcbiAgICBjb25zdCBrID0gZXZlbnQuY2hhckNvZGU7XHJcbiAgICBpZiAoayA9PSA4IHx8IGsgPT0gMzIgfHwgKGsgPj0gNDggJiYgayA8PSA1NykpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICAvLyBBbGxvdyAnLicgb25seSBvbmNlLCBhbmQgbm90IGFzIHRoZSB2ZXJ5IGZpcnN0IGNoYXJhY3Rlci5cclxuICAgIGlmIChrID09IDQ2KSB7XHJcbiAgICAgIGNvbnN0IHZhbHVlID0gU3RyaW5nKGV2ZW50Py50YXJnZXQ/LnZhbHVlID8/ICcnKTtcclxuICAgICAgcmV0dXJuIHZhbHVlLmxlbmd0aCA+IDAgJiYgIXZhbHVlLmluY2x1ZGVzKCcuJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PT0gT05FIFRJTUUgRkVFID09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICBpbml0T25lVGltZUZlZUZvcm0oKSB7XHJcbiAgICB0aGlzLm9uZVRpbWVGZWVGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIGFtb3VudDogWycnXSxcclxuICAgICAgb25lVGltZUZlZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMub25lVGltZUZlZUZvcm0udmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmNhbGN1bGF0ZU9uZVRpbWVGZWVUb3RhbCgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwYXRjaE9uZVRpbWVGZWVEZWZhdWx0cygpIHtcclxuICAgIGlmICh0aGlzLmludm9pY2VEYXRhKSB7XHJcbiAgICAgIHRoaXMub25lVGltZUZlZUZvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgYW1vdW50OiB0aGlzLmludm9pY2VEYXRhLmFtb3VudCB8fCB0aGlzLmludm9pY2VEYXRhLnRvdGFsQW1vdW50IHx8IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmNhbGN1bGF0ZU9uZVRpbWVGZWVUb3RhbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FsY3VsYXRlT25lVGltZUZlZVRvdGFsKCkge1xyXG4gICAgY29uc3QgYW1vdW50ID0gcGFyc2VGbG9hdCh0aGlzLm9uZVRpbWVGZWVGb3JtLmdldCgnYW1vdW50Jyk/LnZhbHVlIHx8ICcwJyk7XHJcbiAgICBjb25zdCBmZWUgPSBwYXJzZUZsb2F0KHRoaXMub25lVGltZUZlZUZvcm0uZ2V0KCdvbmVUaW1lRmVlJyk/LnZhbHVlIHx8ICcwJyk7XHJcbiAgICB0aGlzLm9uZVRpbWVGZWVUb3RhbCA9IHBhcnNlRmxvYXQoKGFtb3VudCArIGZlZSkudG9GaXhlZCgyKSk7XHJcbiAgfVxyXG5cclxuICBhcHBseU9uZVRpbWVGZWUoKSB7XHJcbiAgICBjb25zdCBmZWVWYWx1ZSA9IHRoaXMub25lVGltZUZlZUZvcm0uZ2V0KCdvbmVUaW1lRmVlJyk/LnZhbHVlO1xyXG4gICAgaWYgKCFmZWVWYWx1ZSkgcmV0dXJuO1xyXG4gICAgY29uc3QgcmVxdWVzdERhdGEgPSB7XHJcbiAgICAgIG9uZVRpbWVGZWU6IGZlZVZhbHVlLFxyXG4gICAgfTtcclxuICAgIHRoaXMuc2F2aW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuYmlsbGluZ1NlcnZpY2Uub25lVGltZUZlZShyZXF1ZXN0RGF0YSwgdGhpcy5pbnZvaWNlRGF0YS5pbnZvaWNlKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy50b2FzdC5nZXRQcmltYXJ5VG9hc3QoJ09uZSB0aW1lIGZlZSBhcHBsaWVkIHN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICAgICAgdGhpcy5hY3RpdmVNb2RhbC5jbG9zZSgnZmVlQXBwbGllZCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdCgnRmFpbGVkIHRvIGFwcGx5IG9uZSB0aW1lIGZlZScpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbn0iLCI8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInAtNSBweC02IHBiLTBcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGluZyBtdC0yXCI+e3sgaGVhZGluZ1RleHQgfX1cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwibW9kZSA9PT0gJ2VkaXQnXCIgY2xhc3M9XCJpbnZvaWNlLW51bWJlclwiPnt7IGludm9pY2VEYXRhPy5pbnZvaWNlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJtb2RlID09PSAnZWRpdEVzdGltYXRlJ1wiIGNsYXNzPVwiaW52b2ljZS1udW1iZXJcIj57eyBpbnZvaWNlRGF0YT8uZXN0aW1hdGUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm1vZGUgPT09ICdlZGl0Q3JlZGl0Tm90ZSdcIiBjbGFzcz1cImludm9pY2UtbnVtYmVyXCI+e3sgaW52b2ljZURhdGE/LmNyZWRpdE5vdGUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZVwiIChjbGljayk9XCJhY3RpdmVNb2RhbC5kaXNtaXNzKClcIj48L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBUYWJzIChvbmx5IGluIGVkaXQgbW9kZSkgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1iYXIgbXQtM1wiICpuZ0lmPVwibW9kZSA9PT0gJ2VkaXQnXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ0YWItYnRuXCIgW25nQ2xhc3NdPVwiYWN0aXZlVGFiID09PSAnZWRpdCcgPyAndGFiLWFjdGl2ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2V0VGFiKCdlZGl0JylcIj5FZGl0IEludm9pY2U8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInRhYi1idG5cIiBbbmdDbGFzc109XCJhY3RpdmVUYWIgPT09ICdjcmVkaXROb3RlJyA/ICd0YWItYWN0aXZlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZXRUYWIoJ2NyZWRpdE5vdGUnKVwiPkNyZWRpdCBOb3RlPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ0YWItYnRuXCIgW25nQ2xhc3NdPVwiYWN0aXZlVGFiID09PSAnb25lVGltZUZlZScgPyAndGFiLWFjdGl2ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2V0VGFiKCdvbmVUaW1lRmVlJylcIj5PbmUgVGltZSBGZWU8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09IEVESVQgSU5WT0lDRSBUQUIgPT09PT09PT09PT09PT09PT09PT09PT09IC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgbWItNFwiICpuZ0lmPVwiYWN0aXZlVGFiID09PSAnZWRpdCcgfHwgbW9kZSAhPT0gJ2VkaXQnXCI+XHJcbiAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJpbnZvaWNlRm9ybVwiIGNsYXNzPVwiZm9ybVwiIChuZ1N1Ym1pdCk9XCJvblN1Ym1pdCgpXCI+XHJcblxyXG4gICAgICAgICAgICA8IS0tIENyZWRpdCBub3RlOiBwaWNrIHRoZSBmaW5hbGx5IGFwcHJvdmVkIGludm9pY2UgKHJlZ3VsYXIgb3IgYWR2YW5jZTtcclxuICAgICAgICAgICAgICAgICB1bnBhaWQsIHBhcnRpYWxseSBwYWlkIG9yIHBhaWQpIHRvIGNyZWRpdCDigJQgYWNyb3NzIGV2ZXJ5IGJyYW5kIG9uXHJcbiAgICAgICAgICAgICAgICAgQWxsIEludm9pY2VzLiBUaGUgZm9ybSBiZWxvdyBpcyBwcmVmaWxsZWQgZnJvbSBpdCwgYnJhbmQgaW5jbHVkZWQuIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCJtb2RlID09PSAnY3JlZGl0Tm90ZSdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgZm9ybS1ncm91cCBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaGVhZGluZ3RleHQgbWItMVwiPkludm9pY2UgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBmb3JtQ29udHJvbE5hbWU9XCJpbnZvaWNlSWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtaW52YWxpZF09XCJjb250cm9sSW52YWxpZCgnaW52b2ljZUlkJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uSW52b2ljZVBpY2soKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+e3sgaW52b2ljZXNMb2FkRmFpbGVkID8gJ0NvdWxkIG5vdCBsb2FkIGludm9pY2VzJyA6IChjcmVkaXRhYmxlSW52b2ljZXMubGVuZ3RoID8gJ1NlbGVjdCBpbnZvaWNlJyA6ICdObyBhcHByb3ZlZCBpbnZvaWNlcyB0byBjcmVkaXQnKSB9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBpbnYgb2YgY3JlZGl0YWJsZUludm9pY2VzXCIgW3ZhbHVlXT1cImludi5faWRcIiBbZGlzYWJsZWRdPVwiIWlzSW52b2ljZVBpY2thYmxlKGludilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGludm9pY2VPcHRpb25MYWJlbChpbnYpIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZhbGlkLW1zZ1wiICpuZ0lmPVwiY29udHJvbEludmFsaWQoJ2ludm9pY2VJZCcpXCI+SW52b2ljZSBpcyByZXF1aXJlZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dJbnZvaWNlRm9ybVwiPlxyXG4gICAgICAgICAgICA8IS0tIENvbXBhbnkgRGV0YWlscyBTZWN0aW9uIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi10aXRsZSBtYi0zXCI+Q29tcGFueSBEZXRhaWxzPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgZm9ybS1ncm91cCBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaGVhZGluZ3RleHQgbWItMVwiPkNvbXBhbnkgTmFtZSA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cImNvbXBhbnlOYW1lXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtaW52YWxpZF09XCJjb250cm9sSW52YWxpZCgnY29tcGFueU5hbWUnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJtb2RlID09PSAnZWRpdCcgfHwgaXNDcmVkaXROb3RlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uQ29tcGFueU5hbWVJbnB1dCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtbXNnXCIgKm5nSWY9XCJjb250cm9sSW52YWxpZCgnY29tcGFueU5hbWUnKVwiPkNvbXBhbnkgTmFtZSBpcyByZXF1aXJlZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgZm9ybS1ncm91cCBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaGVhZGluZ3RleHQgbWItMVwiPkdTVCBOdW1iZXI8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gQ3JlYXRlIG1vZGU6IHR5cGluZy9jaGFuZ2luZyB0aGUgR1NUSU4gcmUtZGVyaXZlcyB0aGUgdGF4IHJvd3MuIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cIkdTVE51bWJlclwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgW3JlYWRvbmx5XT1cIm1vZGUgPT09ICdlZGl0JyB8fCBpc0NyZWRpdE5vdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwib25Hc3ROdW1iZXJJbnB1dCgpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgZm9ybS1ncm91cCBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaGVhZGluZ3RleHQgbWItMVwiPkNvbXBhbnkgQWRkcmVzczwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwiY29tcGFueUFkZHJlc3NcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIFtyZWFkb25seV09XCJtb2RlID09PSAnZWRpdCcgfHwgaXNDcmVkaXROb3RlXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBmb3JtLWdyb3VwIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJoZWFkaW5ndGV4dCBtYi0xXCI+UGxhY2Ugb2YgU3VwcGx5PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJQbGFjZU9mU3VwcGx5XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbcmVhZG9ubHldPVwibW9kZSA9PT0gJ2VkaXQnIHx8IGlzQ3JlZGl0Tm90ZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBCaWxsaW5nIEdyb3VwIChyZWFkLW9ubHkgZm9yIGludm9pY2UgZWRpdHMgYW5kIGNyZWRpdCBub3RlcykgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cImJpbGxpbmdHcm91cHMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGZvcm0tZ3JvdXAgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImhlYWRpbmd0ZXh0IG1iLTFcIj5CaWxsaW5nIEdyb3VwIDxzcGFuICpuZ0lmPVwibW9kZSAhPT0gJ2VkaXQnICYmICFpc0NyZWRpdE5vdGVcIiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgKm5nSWY9XCJtb2RlICE9PSAnZWRpdCcgJiYgIWlzQ3JlZGl0Tm90ZVwiIGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBmb3JtQ29udHJvbE5hbWU9XCJncm91cElkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmlzLWludmFsaWRdPVwiY29udHJvbEludmFsaWQoJ2dyb3VwSWQnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25Hcm91cENoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5TZWxlY3QgYmlsbGluZyBncm91cDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBnIG9mIGJpbGxpbmdHcm91cHNcIiBbdmFsdWVdPVwiZy5faWRcIj57eyBnLmdyb3VwTmFtZSB9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cIm1vZGUgPT09ICdlZGl0JyB8fCBpc0NyZWRpdE5vdGVcIiB0eXBlPVwidGV4dFwiIFt2YWx1ZV09XCJpbnZvaWNlRm9ybS5nZXQoJ2dyb3VwTmFtZScpPy52YWx1ZSB8fCAnRGVmYXVsdCBHcm91cCdcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJlYWRvbmx5PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZhbGlkLW1zZ1wiICpuZ0lmPVwiY29udHJvbEludmFsaWQoJ2dyb3VwSWQnKVwiPkJpbGxpbmcgR3JvdXAgaXMgcmVxdWlyZWQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGZvcm0tZ3JvdXAgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImhlYWRpbmd0ZXh0IG1iLTFcIj5Hcm91cCBOYW1lPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJncm91cE5hbWVcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIFtyZWFkb25seV09XCJtb2RlID09PSAnZWRpdCcgfHwgaXNDcmVkaXROb3RlXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIEludm9pY2UgRGV0YWlscyBTZWN0aW9uIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi10aXRsZSBtYi0zIG10LTJcIj57eyBpc0NyZWRpdE5vdGUgPyAnQ3JlZGl0IE5vdGUgRGV0YWlscycgOiAnSW52b2ljZSBEZXRhaWxzJyB9fTwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBDcmVkaXQgbm90ZTogdGhlIGludm9pY2UgaXQgaXMgaXNzdWVkIGFnYWluc3QgKHJlYWQtb25seSkuIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGZvcm0tZ3JvdXAgbWItM1wiICpuZ0lmPVwiaXNDcmVkaXROb3RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaGVhZGluZ3RleHQgbWItMVwiPkFnYWluc3QgSW52b2ljZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbdmFsdWVdPVwic291cmNlSW52b2ljZU51bWJlclwiIHJlYWRvbmx5PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgZm9ybS1ncm91cCBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaGVhZGluZ3RleHQgbWItMVwiPnt7IGlzQ3JlZGl0Tm90ZSA/ICdDcmVkaXQgTm90ZSBEYXRlJyA6ICdCaWxsaW5nIERhdGUnIH19IDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJkYXRlXCIgZm9ybUNvbnRyb2xOYW1lPVwiYmlsbGluZ0RhdGVcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cImNvbnRyb2xJbnZhbGlkKCdiaWxsaW5nRGF0ZScpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJtb2RlID09PSAnY3JlYXRlJyAmJiBjb21wdXRlRHVlRGF0ZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtbXNnXCIgKm5nSWY9XCJjb250cm9sSW52YWxpZCgnYmlsbGluZ0RhdGUnKVwiPnt7IGlzQ3JlZGl0Tm90ZSA/ICdDcmVkaXQgTm90ZSBEYXRlJyA6ICdCaWxsaW5nIERhdGUnIH19IGlzIHJlcXVpcmVkPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS0gQ3JlYXRlIG1vZGU6IGNob29zZSBhIHBheW1lbnQgdGVybSAoZGF5cyk7IHRoZSBkdWUgZGF0ZSBpc1xyXG4gICAgICAgICAgICAgICAgICAgICBkZXJpdmVkIGZyb20gQmlsbGluZyBEYXRlICsgdGVybSBhbmQgc2hvd24gcmVhZC1vbmx5LiAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBmb3JtLWdyb3VwIG1iLTNcIiAqbmdJZj1cIm1vZGUgPT09ICdjcmVhdGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaGVhZGluZ3RleHQgbWItMVwiPlBheW1lbnQgVGVybSA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIGZvcm1Db250cm9sTmFtZT1cInBheW1lbnRUZXJtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJjb21wdXRlRHVlRGF0ZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwiMzBcIj4zMCBkYXlzPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwiNjBcIj42MCBkYXlzPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwiOTBcIj45MCBkYXlzPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwiMTIwXCI+MTIwIGRheXM8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBzbWFsbCBtdC0xXCI+RHVlIERhdGU6IHt7IGludm9pY2VGb3JtLmdldCgnZHVlRGF0ZScpPy52YWx1ZSB8fCAnLScgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLSBFZGl0IC8gZXN0aW1hdGUgbW9kZXMga2VlcCB0aGUgZWRpdGFibGUgRHVlIERhdGUgZmllbGQgKGNyZWRpdCBub3RlcyBoYXZlIG5vbmUpLiAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBmb3JtLWdyb3VwIG1iLTNcIiAqbmdJZj1cIm1vZGUgIT09ICdjcmVhdGUnICYmICFpc0NyZWRpdE5vdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJoZWFkaW5ndGV4dCBtYi0xXCI+RHVlIERhdGUgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImRhdGVcIiBmb3JtQ29udHJvbE5hbWU9XCJkdWVEYXRlXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtaW52YWxpZF09XCJjb250cm9sSW52YWxpZCgnZHVlRGF0ZScpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtbXNnXCIgKm5nSWY9XCJjb250cm9sSW52YWxpZCgnZHVlRGF0ZScpXCI+RHVlIERhdGUgaXMgcmVxdWlyZWQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGZvcm0tZ3JvdXAgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImhlYWRpbmd0ZXh0IG1iLTFcIj5DdXJyZW5jeSA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIGZvcm1Db250cm9sTmFtZT1cImN1cnJlbmN5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkN1cnJlbmN5Q2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtaW52YWxpZF09XCJjb250cm9sSW52YWxpZCgnY3VycmVuY3knKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBjIG9mIGN1cnJlbmN5T3B0aW9uc1wiIFt2YWx1ZV09XCJjXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjdXJyZW5jeUxhYmVsc1tjXSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1tc2dcIiAqbmdJZj1cImNvbnRyb2xJbnZhbGlkKCdjdXJyZW5jeScpXCI+Q3VycmVuY3kgaXMgcmVxdWlyZWQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGZvcm0tZ3JvdXAgbWItM1wiICpuZ0lmPVwiIWlzQ3JlZGl0Tm90ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImhlYWRpbmd0ZXh0IG1iLTFcIj5Oby4gb2YgU3RvcmVzPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGZvcm1Db250cm9sTmFtZT1cInN0b3Jlc1wiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcmVhZG9ubHk+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS0gUHVyY2hhc2UgT3JkZXIgbWFwcGluZyAob3B0aW9uYWwpLiBNYXBwaW5nIGRlZHVjdHMgdGhpc1xyXG4gICAgICAgICAgICAgICAgICAgICBpbnZvaWNlJ3MgYW1vdW50IGZyb20gdGhlIHNlbGVjdGVkIFBPJ3MgcmVtYWluaW5nIGJhbGFuY2UuXHJcbiAgICAgICAgICAgICAgICAgICAgIEF2YWlsYWJsZSBmcm9tIHRoZSBmaW5hbmNlIGFwcHJvdmFsIHN0YWdlIG9uIChzZWUgaXNEcmFmdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgIGhpZGRlbiB3aGlsZSB0aGUgZHJhZnQgaXMgc3RpbGwgYXQgQ1NNIHJldmlldywgb3IgaW4gY3JlYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgIG1vZGUuIC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1vZGUgIT09ICdlc3RpbWF0ZScgJiYgbW9kZSAhPT0gJ2VkaXRFc3RpbWF0ZScgJiYgIWlzQ3JlZGl0Tm90ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBmb3JtLWdyb3VwIG1iLTNcIiAqbmdJZj1cIiFpc0RyYWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImhlYWRpbmd0ZXh0IG1iLTFcIj5QdXJjaGFzZSBPcmRlcjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIGZvcm1Db250cm9sTmFtZT1cInB1cmNoYXNlT3JkZXJOdW1iZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5Ob25lPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBwbyBvZiBwdXJjaGFzZU9yZGVyc1wiIFt2YWx1ZV09XCJwby5wdXJjaGFzZU9yZGVyTnVtYmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgcG8ucHVyY2hhc2VPcmRlck51bWJlciB9fSAoe3sgZ2V0Q3VycmVuY3lTeW1ib2woKSB9fXt7IHBvLnJlbWFpbmluZ0Ftb3VudCB8IG51bWJlcjonMS4wLTAnOidlbi1JTicgfX0gbGVmdClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgZm9ybS1ncm91cCBtYi0zXCIgKm5nSWY9XCJpc0RyYWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImhlYWRpbmd0ZXh0IG1iLTFcIj5QdXJjaGFzZSBPcmRlcjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdXJjaGFzZSBPcmRlciBjYW4gYmUgYXR0YWNoZWQgb25jZSB0aGUgaW52b2ljZSByZWFjaGVzIGZpbmFuY2UgYXBwcm92YWwuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBDcmVkaXQgbm90ZTogd2h5IGl0IGlzIGJlaW5nIGlzc3VlZCAoa2VwdCBvbiB0aGUgcmVjb3JkIGFuZCBpbiB0aGUgZXhwb3J0KS4gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cImlzQ3JlZGl0Tm90ZVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBmb3JtLWdyb3VwIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJoZWFkaW5ndGV4dCBtYi0xXCI+UmVhc29uPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJyZWFzb25cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZS5nLiBTZXJ2aWNlIGRvd250aW1lIGZvciA1IHN0b3JlcyBpbiBTZXAgMjAyNlwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBBZHZhbmNlIEludm9pY2UgKGNyZWF0ZSBvbmx5KTogYmlsbCBzZXZlcmFsIGZ1dHVyZSBtb250aHMgdXBmcm9udC5cclxuICAgICAgICAgICAgICAgICBFYWNoIG1vbnRoIGJlY29tZXMgaXRzIG93biBsaW5lIGl0ZW0gc2VydmVyLXNpZGUuIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCJtb2RlID09PSAnY3JlYXRlJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGZvcm0tZ3JvdXAgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImhlYWRpbmd0ZXh0IG1iLTEgZC1ibG9ja1wiPkFkdmFuY2UgSW52b2ljZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2ggbXQtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJhZHZhbmNlSW52b2ljZUNyZWF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJhZHZhbmNlSW52b2ljZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwiYWR2YW5jZUludm9pY2VDcmVhdGVcIj5CaWxsIGZ1dHVyZSBtb250aHMgdXBmcm9udDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBmb3JtLWdyb3VwIG1iLTNcIiAqbmdJZj1cImludm9pY2VGb3JtLmdldCgnYWR2YW5jZUludm9pY2UnKT8udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJoZWFkaW5ndGV4dCBtYi0xXCI+QWR2YW5jZSBmcmVxdWVuY3k8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIGZvcm1Db250cm9sTmFtZT1cImFkdmFuY2VQZXJpb2RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0IG9mIGFkdmFuY2VQZXJpb2RPcHRpb25zXCIgW3ZhbHVlXT1cIm9wdC52YWx1ZVwiPnt7IG9wdC5sYWJlbCB9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBDcmVkaXQgbm90ZTogY2hvb3NlIGhvdyB0aGUgY3JlZGl0IGlzIGJyb2tlbiBkb3duOyBsaW5lIGl0ZW1zIGFyZVxyXG4gICAgICAgICAgICAgICAgIGdlbmVyYXRlZCBmcm9tIHRoYXQgKG5ldmVyIGFkZGVkIGJ5IGhhbmQpLiBObyB0YXgg4oCUIHRoZSBub3RlJ3NcclxuICAgICAgICAgICAgICAgICB2YWx1ZSBpcyB0aGUgdG90YWwgY3JlZGl0LiAtLT5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzQ3JlZGl0Tm90ZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi10aXRsZSBtYi0zIG10LTJcIj5DcmVkaXQgVHlwZTwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIFNhbWUgcmFkaW8gbWFya3VwIGFzIHRoZSBiaWxsaW5nLWdyb3VwIGZvcm0gKFllcyAvIE5vIG9wdGlvbnMpLiAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXdyYXAgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lLTQgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiICpuZ0Zvcj1cImxldCB0IG9mIGNyZWRpdFR5cGVPcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBtZS0yXCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cImNuQ3JlZGl0VHlwZVwiIFtpZF09XCInY25UeXBlLScgKyB0LnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiY3JlZGl0VHlwZSA9PT0gdC52YWx1ZVwiIChjaGFuZ2UpPVwib25DcmVkaXRUeXBlQ2hhbmdlKHQudmFsdWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBtZS0yXCIgW2Zvcl09XCInY25UeXBlLScgKyB0LnZhbHVlXCI+e3sgdC5sYWJlbCB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIEJ5IHN0b3JlOiBvbmUgU3RvcmVzIGRyb3Bkb3duICh0aGUgYmlsbGluZyBncm91cCdzIHN0b3Jlcykg4oaSIG9uZSBsaW5lIHBlciBzdG9yZS4gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cImNyZWRpdFR5cGUgPT09ICdzdG9yZSdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBmb3JtLWdyb3VwIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJoZWFkaW5ndGV4dCBtYi0xXCI+U3RvcmVzIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNuLXBpY2tlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImZvcm0tc2VsZWN0IHRleHQtc3RhcnRcIiAoY2xpY2spPVwidG9nZ2xlUGlja2VyKCdzdG9yZScpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJicmVha2Rvd25Mb2FkaW5nXCI+e3sgYnJlYWtkb3duTG9hZGluZyA/ICdMb2FkaW5n4oCmJyA6IHN0b3JlUGlja2VyU3VtbWFyeSB9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY24tcGlja2VyLXBhbmVsXCIgKm5nSWY9XCJvcGVuUGlja2VyID09PSAnc3RvcmUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiBwdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCIgcGxhY2Vob2xkZXI9XCJTZWFyY2ggc3RvcmUgbmFtZSBvciBJRFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic3RvcmVTZWFyY2hcIiBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIiBhdXRvY29tcGxldGU9XCJvZmZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTZWxlY3QgYWxsIOKGkiBvbmUgQWxsLXN0b3JlcyBsaW5lIChBbW91bnQgKyBDcmVkaXQgb25seSkuIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNuLXBpY2tlci1hY3Rpb25zXCIgKm5nSWY9XCJicmVha2Rvd25TdG9yZXMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cInNlbGVjdEFsbFN0b3JlcygpXCIgKm5nSWY9XCIhYWxsU3RvcmVzU2VsZWN0ZWRcIj5TZWxlY3QgYWxsPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZFwiICpuZ0lmPVwiYWxsU3RvcmVzU2VsZWN0ZWRcIj5BbGwge3sgYnJlYWtkb3duU3RvcmVzLmxlbmd0aCB9fSBzZWxlY3RlZDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbXV0ZWRcIiAqbmdJZj1cIiFhbGxTdG9yZXNTZWxlY3RlZCAmJiBzZWxlY3RlZFN0b3Jlcy5sZW5ndGhcIj57eyBzZWxlY3RlZFN0b3Jlcy5sZW5ndGggfX0gc2VsZWN0ZWQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cImNsZWFyU3RvcmVzKClcIiAqbmdJZj1cImFsbFN0b3Jlc1NlbGVjdGVkIHx8IHNlbGVjdGVkU3RvcmVzLmxlbmd0aFwiPkNsZWFyPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjbi1waWNrZXItb3B0aW9uXCIgKm5nRm9yPVwibGV0IHMgb2YgZmlsdGVyZWRTdG9yZXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IG1lLTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc1N0b3JlU2VsZWN0ZWQocy5zdG9yZUlkKVwiIChjaGFuZ2UpPVwidG9nZ2xlU3RvcmUocy5zdG9yZUlkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IHMuc3RvcmVOYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtYXV0byB0ZXh0LW11dGVkIHNtYWxsXCI+e3sgcy5zdG9yZUlkIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbi1waWNrZXItZW1wdHlcIiAqbmdJZj1cIiFmaWx0ZXJlZFN0b3Jlcy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBicmVha2Rvd25TdG9yZXMubGVuZ3RoID8gJ05vIHN0b3JlcyBtYXRjaCcgOiAnTm8gc3RvcmVzIGluIHRoaXMgYmlsbGluZyBncm91cCcgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gQnkgcHJvZHVjdDogYSBsaW5lIHBlciBwcm9kdWN0LCBhZGRlZCBvbmUgYXQgYSB0aW1lIChhcyBtYW55IGFzIHRoZVxyXG4gICAgICAgICAgICAgICAgIGludm9pY2UgaGFzIHByb2R1Y3RzKS4gT3RoZXIgdHlwZXM6IHRoZSBnZW5lcmF0ZWQgbGluZXMuIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi10aXRsZSBtYi0zIG10LTJcIiAqbmdJZj1cImNyZWRpdFR5cGUgPT09ICdwcm9kdWN0J1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5Qcm9kdWN0czwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeVwiIChjbGljayk9XCJhZGRQcm9kdWN0TGluZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFjYW5BZGRQcm9kdWN0TGluZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJjYW5BZGRQcm9kdWN0TGluZSA/ICcnIDogJ0V2ZXJ5IHByb2R1Y3Qgb24gdGhpcyBpbnZvaWNlIGFscmVhZHkgaGFzIGEgbGluZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKyBBZGQgUHJvZHVjdFxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi10aXRsZSBtYi0zIG10LTJcIiAqbmdJZj1cImNyZWRpdFR5cGUgIT09ICdwcm9kdWN0JyAmJiBsaW5lSXRlbXMubGVuZ3RoXCI+TGluZSBJdGVtczwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGZvcm1BcnJheU5hbWU9XCJsaW5lSXRlbXNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgbGluZUl0ZW1zLmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4XCIgW2Zvcm1Hcm91cE5hbWVdPVwiaVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwcm9kdWN0LXJvdyBtYi0zIHAtM1wiIGRhdGEtbGluZS1pdGVtLXJvdz5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicHJvZHVjdC1sYWJlbFwiPnt7IGNyZWRpdFR5cGUgPT09ICdwcm9kdWN0JyA/ICdQcm9kdWN0ICcgKyAoaSArIDEpIDogbGluZUxhYmVsKGkpIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1kYW5nZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY3JlZGl0VHlwZSA9PT0gJ3Byb2R1Y3QnICYmIGxpbmVJdGVtcy5sZW5ndGggPiAxXCIgKGNsaWNrKT1cInJlbW92ZVByb2R1Y3RMaW5lKGkpXCI+UmVtb3ZlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIEJ5IHByb2R1Y3Q6IHRoZSBwcm9kdWN0IChzaW5nbGUpIGFuZCBpdHMgc3RvcmVzIG9uIHRoZSBpbnZvaWNlIChvcHRpb25hbCkuIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cImNyZWRpdFR5cGUgPT09ICdwcm9kdWN0J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgZm9ybS1ncm91cCBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJoZWFkaW5ndGV4dCBtYi0xXCI+UHJvZHVjdCA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgZm9ybUNvbnRyb2xOYW1lPVwicHJvZHVjdE5hbWVcIiAoY2hhbmdlKT1cIm9uTGluZVByb2R1Y3RDaGFuZ2UoaSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+e3sgYnJlYWtkb3duTG9hZGluZyA/ICdMb2FkaW5n4oCmJyA6ICdTZWxlY3QgcHJvZHVjdCcgfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBwIG9mIHByb2R1Y3RPcHRpb25zRm9yKGkpXCIgW3ZhbHVlXT1cInAucHJvZHVjdE5hbWVcIj57eyBmb3JtYXRQcm9kdWN0TmFtZShwLnByb2R1Y3ROYW1lKSB9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgZm9ybS1ncm91cCBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJoZWFkaW5ndGV4dCBtYi0xXCI+U3RvcmVzIDxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZCBzbWFsbFwiPihvcHRpb25hbCDigJQgbGltaXRzIHRoZSBwcm9kdWN0IHRvIHRoZXNlIHN0b3Jlcyk8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbi1waWNrZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImZvcm0tc2VsZWN0IHRleHQtc3RhcnRcIiAoY2xpY2spPVwidG9nZ2xlUGlja2VyKCdsaW5lLScgKyBpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXRlbS5nZXQoJ3Byb2R1Y3ROYW1lJyk/LnZhbHVlXCI+e3sgaXRlbS5nZXQoJ3Byb2R1Y3ROYW1lJyk/LnZhbHVlID8gbGluZVN0b3JlU3VtbWFyeShpKSA6ICdTZWxlY3QgYSBwcm9kdWN0IGZpcnN0JyB9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbi1waWNrZXItcGFuZWxcIiAqbmdJZj1cIm9wZW5QaWNrZXIgPT09ICdsaW5lLScgKyBpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIHB0LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoIHN0b3JlIG5hbWUgb3IgSURcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic3RvcmVTZWFyY2hcIiBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIiBhdXRvY29tcGxldGU9XCJvZmZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbi1waWNrZXItYWN0aW9uc1wiICpuZ0lmPVwiaXRlbS5nZXQoJ3N0b3JlcycpPy52YWx1ZT8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbXV0ZWRcIj57eyBpdGVtLmdldCgnc3RvcmVzJyk/LnZhbHVlPy5sZW5ndGggfX0gc2VsZWN0ZWQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSAoY2xpY2spPVwiY2xlYXJMaW5lU3RvcmVzKGkpXCI+Q2xlYXI8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjbi1waWNrZXItb3B0aW9uXCIgKm5nRm9yPVwibGV0IHMgb2YgbGluZVN0b3JlT3B0aW9ucyhpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBtZS0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc0xpbmVTdG9yZVNlbGVjdGVkKGksIHMuc3RvcmVJZClcIiAoY2hhbmdlKT1cInRvZ2dsZUxpbmVTdG9yZShpLCBzKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgcy5zdG9yZU5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLWF1dG8gdGV4dC1tdXRlZCBzbWFsbFwiPnt7IHMuc3RvcmVJZCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNuLXBpY2tlci1lbXB0eVwiICpuZ0lmPVwiIWxpbmVTdG9yZU9wdGlvbnMoaSkubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBzdG9yZVNlYXJjaCA/ICdObyBzdG9yZXMgbWF0Y2gnIDogJ05vIHN0b3JlcyBtYXBwZWQgdG8gdGhpcyBwcm9kdWN0IG9uIHRoZSBpbnZvaWNlJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIEFnYWluc3QgaW52b2ljZSwgYW5kIGJ5IHN0b3JlIHdpdGggYWxsIHN0b3Jlczogb25seSBBbW91bnQgYW5kIENyZWRpdC4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwiIWlzQW1vdW50T25seUxpbmUoaSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IGZvcm0tZ3JvdXAgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaGVhZGluZ3RleHQgbWItMVwiPkRlc2NyaXB0aW9uPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aW9uXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZS5nLiBDdXN0b21lciBGb290ZmFsbCBBbmFseXRpY3NcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNCBmb3JtLWdyb3VwIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImhlYWRpbmd0ZXh0IG1iLTFcIj5Nb250aDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJtb250aFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImUuZy4gU2VwIDIwMjZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNCBmb3JtLWdyb3VwIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImhlYWRpbmd0ZXh0IG1iLTFcIj5IU04vU0FDPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cIkhzbk51bWJlclwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGZvcm0tZ3JvdXAgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaGVhZGluZ3RleHQgbWItMVwiPkFtb3VudCA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBUaGUgbGluZSdzIGFtb3VudCAobm90IHJlZHVjZWQgYnkgdGhlIGNyZWRpdCksIGFzIG9uIHRoZSBQREYuIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBmb3JtQ29udHJvbE5hbWU9XCJvcmlnaW5hbEFtb3VudFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgc3RlcD1cIjAuMDFcIiBtaW49XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtaW52YWxpZF09XCJsaW5lSXRlbUludmFsaWQoaSwgJ29yaWdpbmFsQW1vdW50JykgfHwgY3JlZGl0QWJvdmVBbW91bnQoaSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvbkxpbmVBbW91bnRJbnB1dChpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtbXNnXCIgKm5nSWY9XCJsaW5lSXRlbUludmFsaWQoaSwgJ29yaWdpbmFsQW1vdW50JylcIj5FbnRlciBhIHZhbGlkIGFtb3VudDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGZvcm0tZ3JvdXAgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaGVhZGluZ3RleHQgbWItMVwiPkNyZWRpdCA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBmb3JtQ29udHJvbE5hbWU9XCJjcmVkaXRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHN0ZXA9XCIwLjAxXCIgbWluPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmlzLWludmFsaWRdPVwibGluZUl0ZW1JbnZhbGlkKGksICdjcmVkaXQnKSB8fCBjcmVkaXRBYm92ZUFtb3VudChpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uTGluZUNyZWRpdElucHV0KGkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1tc2dcIiAqbmdJZj1cImxpbmVJdGVtSW52YWxpZChpLCAnY3JlZGl0JylcIj5FbnRlciBhIHZhbGlkIGNyZWRpdDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtbXNnXCIgKm5nSWY9XCJjcmVkaXRBYm92ZUFtb3VudChpKVwiPkNyZWRpdCBjYW4ndCBleGNlZWQgdGhlIGFtb3VudDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gU3VtbWFyeSBhdCBJTlZPSUNFIGxldmVsIChub3QganVzdCB0aGUgc2VsZWN0ZWQgbGluZXMpOiBpbnZvaWNlXHJcbiAgICAgICAgICAgICAgICAgYW1vdW50IGV4Y2wuIEdTVCwgZWFybGllciBjcmVkaXQgbm90ZXMgb24gaXQsIGFuZCB0aGlzIGNyZWRpdC4gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdW1tYXJ5LXNlY3Rpb24gcC0zIG10LTNcIiAqbmdJZj1cImxpbmVJdGVtcy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3VtbWFyeS1sYWJlbFwiPkludm9pY2UgQW1vdW50IChleGNsLiBHU1QpIMK3IHt7IHNvdXJjZUludm9pY2VOdW1iZXIgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdW1tYXJ5LXZhbHVlXCI+e3sgZ2V0Q3VycmVuY3lTeW1ib2woKSB9fSB7eyBzb3VyY2VJbnZvaWNlQW1vdW50IHwgbnVtYmVyOicxLjItMic6J2VuLUlOJyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtYi0yXCIgKm5nSWY9XCJhbHJlYWR5Q3JlZGl0ZWQgPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdW1tYXJ5LWxhYmVsXCI+QWxyZWFkeSBjcmVkaXRlZDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1bW1hcnktdmFsdWVcIj4tIHt7IGdldEN1cnJlbmN5U3ltYm9sKCkgfX0ge3sgYWxyZWFkeUNyZWRpdGVkIHwgbnVtYmVyOicxLjItMic6J2VuLUlOJyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdW1tYXJ5LWxhYmVsXCI+Q3JlZGl0PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3VtbWFyeS12YWx1ZVwiIFtjbGFzcy50ZXh0LWRhbmdlcl09XCJleGNlZWRzQ3JlZGl0QmFsYW5jZVwiPi0ge3sgZ2V0Q3VycmVuY3lTeW1ib2woKSB9fSB7eyBnZXRDcmVkaXRUb3RhbCgpIHwgbnVtYmVyOicxLjItMic6J2VuLUlOJyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtbXNnXCIgKm5nSWY9XCJleGNlZWRzQ3JlZGl0QmFsYW5jZVwiPlRvdGFsIGNyZWRpdCBleGNlZWRzIHdoYXQgaXMgbGVmdCB0byBjcmVkaXQgb24gdGhlIGludm9pY2UuPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNDcmVkaXROb3RlXCI+XHJcbiAgICAgICAgICAgIDwhLS0gUHJvZHVjdHMgU2VjdGlvbiAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tdGl0bGUgbWItMyBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPlByb2R1Y3RzPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXByaW1hcnlcIiAoY2xpY2spPVwiYWRkUHJvZHVjdCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICArIEFkZCBQcm9kdWN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCIgKGNsaWNrKT1cImFkZEN1c3RvbVByb2R1Y3QoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBBZGQgQ3VzdG9tIFByb2R1Y3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGZvcm1BcnJheU5hbWU9XCJwcm9kdWN0c1wiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBSb3dzIGNhbiBiZSByZW9yZGVyZWQgYnkgZHJhZ2dpbmcgdGhlIOKLruKLriBoYW5kbGUgb250byBhbm90aGVyIHJvd1xyXG4gICAgICAgICAgICAgICAgICAgICAobmF0aXZlIEhUTUw1IGRyYWcgJiBkcm9wIOKAlCBubyBDREsgZGVwZW5kZW5jeSkuIFRoZSBGb3JtQXJyYXkgaXNcclxuICAgICAgICAgICAgICAgICAgICAgcmUtb3JkZXJlZCwgc28gbnVtYmVyaW5nLCB0b3RhbHMgYW5kIHRoZSBzYXZlZCBwcm9kdWN0cyBmb2xsb3cuIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcHJvZHVjdCBvZiBwcm9kdWN0cy5jb250cm9sczsgbGV0IGkgPSBpbmRleFwiIFtmb3JtR3JvdXBOYW1lXT1cImlcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHJvZHVjdC1yb3cgbWItMyBwLTNcIiBkYXRhLXByb2R1Y3Qtcm93XHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRyYWctb3Zlcl09XCJkcmFnT3ZlckluZGV4ID09PSBpICYmIGRyYWdJbmRleCAhPT0gbnVsbCAmJiBkcmFnSW5kZXggIT09IGlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kcmFnZ2luZ109XCJkcmFnSW5kZXggPT09IGlcIlxyXG4gICAgICAgICAgICAgICAgICAgIChkcmFnb3Zlcik9XCJvblJvd0RyYWdPdmVyKCRldmVudCwgaSlcIiAoZHJhZ2xlYXZlKT1cIm9uUm93RHJhZ0xlYXZlKGkpXCJcclxuICAgICAgICAgICAgICAgICAgICAoZHJvcCk9XCJvblJvd0Ryb3AoJGV2ZW50LCBpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRyYWctaGFuZGxlIG1lLTJcIiBkcmFnZ2FibGU9XCJ0cnVlXCIgdGl0bGU9XCJEcmFnIHRvIHJlb3JkZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkcmFnc3RhcnQpPVwib25Sb3dEcmFnU3RhcnQoJGV2ZW50LCBpKVwiIChkcmFnZW5kKT1cIm9uUm93RHJhZ0VuZCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInByb2R1Y3RzLmxlbmd0aCA+IDFcIj4mIzg5NDI7JiM4OTQyOzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicHJvZHVjdC1sYWJlbFwiPlByb2R1Y3Qge3sgaSArIDEgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLWRhbmdlclwiIChjbGljayk9XCJyZW1vdmVQcm9kdWN0KGkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicHJvZHVjdHMubGVuZ3RoID4gMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IGZvcm0tZ3JvdXAgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaGVhZGluZ3RleHQgbWItMVwiPlByb2R1Y3QgTmFtZSA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBCYXNlLXByaWNpbmcgZHJvcGRvd24gKHdpdGggYSBcIisgQ3VzdG9tIHByb2R1Y3RcIiBjaG9pY2UpIHdoZW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdHMgZXhpc3QgYW5kIHRoaXMgcm93IGlzbid0IGN1c3RvbTsgb3RoZXJ3aXNlIGEgZnJlZS10ZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgaW5wdXQgZm9yIGEgY3VzdG9tIHByb2R1Y3QuIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCAqbmdJZj1cImF2YWlsYWJsZVByb2R1Y3RzLmxlbmd0aCA+IDAgJiYgIXByb2R1Y3QuZ2V0KCdpc0N1c3RvbScpPy52YWx1ZVwiIGZvcm1Db250cm9sTmFtZT1cInByb2R1Y3ROYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tc2VsZWN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtaW52YWxpZF09XCJhcnJheUNvbnRyb2xJbnZhbGlkKCdwcm9kdWN0cycsIGksICdwcm9kdWN0TmFtZScpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uUHJvZHVjdENoYW5nZShpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5TZWxlY3QgcHJvZHVjdDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHAgb2YgYXZhaWxhYmxlUHJvZHVjdHNcIiBbdmFsdWVdPVwicC5wcm9kdWN0TmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmb3JtYXRQcm9kdWN0TmFtZShwLnByb2R1Y3ROYW1lKSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJfX2N1c3RvbV9fXCI+KyBDdXN0b20gcHJvZHVjdDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgKm5nSWY9XCJhdmFpbGFibGVQcm9kdWN0cy5sZW5ndGggPT09IDAgfHwgcHJvZHVjdC5nZXQoJ2lzQ3VzdG9tJyk/LnZhbHVlXCIgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJwcm9kdWN0TmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cImFycmF5Q29udHJvbEludmFsaWQoJ3Byb2R1Y3RzJywgaSwgJ3Byb2R1Y3ROYW1lJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZS5nLiBDdXN0b20gU2VydmljZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtbXNnXCIgKm5nSWY9XCJhcnJheUNvbnRyb2xJbnZhbGlkKCdwcm9kdWN0cycsIGksICdwcm9kdWN0TmFtZScpXCI+UHJvZHVjdCBOYW1lIGlzIHJlcXVpcmVkPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTQgZm9ybS1ncm91cCBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJoZWFkaW5ndGV4dCBtYi0xXCI+RGVzY3JpcHRpb248L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpb25cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJlLmcuIEN1c3RvbWVyIEZvb3RmYWxsIEFuYWx5dGljc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IGZvcm0tZ3JvdXAgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaGVhZGluZ3RleHQgbWItMVwiPk1vbnRoPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cIm1vbnRoXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZS5nLiBNYXIgMjAyNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBmb3JtLWdyb3VwIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImhlYWRpbmd0ZXh0IG1iLTFcIj5IU04vU0FDPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cIkhzbk51bWJlclwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgZm9ybS1ncm91cCBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJoZWFkaW5ndGV4dCBtYi0xXCI+UXVhbnRpdHk8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBObyBuZWdhdGl2ZSBxdWFudGl0aWVzOiBhIG1pbnVzIHNpZ24gaXMgYmxvY2tlZCBhbmQgYW55XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZ2F0aXZlIHZhbHVlIChlLmcuIHBhc3RlZCkgaXMgcmVzZXQgdG8gMC4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGZvcm1Db250cm9sTmFtZT1cInN0b3JlQ291bnRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIG1pbj1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImJsb2NrTWludXNLZXkoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uUXVhbnRpdHlJbnB1dChpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGZvcm0tZ3JvdXAgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaGVhZGluZ3RleHQgbWItMVwiPlJhdGUvUHJpY2UgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUmF0ZS9QcmljZSBhY2NlcHRzIGF0IG1vc3QgMiBkZWNpbWFscyAocGFpc2UpOyBleHRyYSBkaWdpdHMgYXJlIHRyaW1tZWQgYXMgdHlwZWQuIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBmb3JtQ29udHJvbE5hbWU9XCJwcmljZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgc3RlcD1cIjAuMDFcIiBtaW49XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtaW52YWxpZF09XCJhcnJheUNvbnRyb2xJbnZhbGlkKCdwcm9kdWN0cycsIGksICdwcmljZScpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwib25QcmljZUlucHV0KGkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1tc2dcIiAqbmdJZj1cImFycmF5Q29udHJvbEludmFsaWQoJ3Byb2R1Y3RzJywgaSwgJ3ByaWNlJylcIj5SYXRlL1ByaWNlIGlzIHJlcXVpcmVkPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgZm9ybS1ncm91cCBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJoZWFkaW5ndGV4dCBtYi0xXCI+QW1vdW50PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgZm9ybUNvbnRyb2xOYW1lPVwiYW1vdW50XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByZWFkb25seT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgZm9ybS1ncm91cCBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJoZWFkaW5ndGV4dCBtYi0xXCI+UGVyaW9kPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIGZvcm1Db250cm9sTmFtZT1cInBlcmlvZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJtb250aGx5XCI+TW9udGhseTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJxdWFydGVybHlcIj5RdWFydGVybHk8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiaGFsZnllYXJseVwiPkhhbGYteWVhcmx5PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInllYXJseVwiPlllYXJseTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBUYXggU2VjdGlvbiAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tdGl0bGUgbWItMyBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPlRheDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIFRheCBpcyBERVJJVkVEIGZyb20gdGhlIEdTVCBudW1iZXIgKEdTVElOICczM+KApicg4oaSIENHU1QgOSUgKyBTR1NUIDklLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgYW55IG90aGVyIEdTVElOIOKGkiBJR1NUIDE4JSwgbm9uZSDihpIgbm8gdGF4KSwgc28gdGhlcmUgaXMgbm8gbWFudWFsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBcIkFkZCBUYXhcIiBhbmQgdGhlIHJvd3MgYXJlIHJlYWQtb25seTsgYSB0YXggbGluZSBjYW4gc3RpbGwgYmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFJFTU9WRUQgdmlhIGVhY2ggcm93J3MgUmVtb3ZlIGJ1dHRvbi4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsXCI+Q2FsY3VsYXRlZCBmcm9tIEdTVCBOdW1iZXI8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGZvcm1BcnJheU5hbWU9XCJ0YXhcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHQgb2YgdGF4QXJyYXkuY29udHJvbHM7IGxldCBqID0gaW5kZXhcIiBbZm9ybUdyb3VwTmFtZV09XCJqXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRheC1yb3cgbWItMyBwLTNcIiBkYXRhLXRheC1yb3c+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInByb2R1Y3QtbGFiZWxcIj5UYXgge3sgaiArIDEgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1kYW5nZXJcIiAoY2xpY2spPVwicmVtb3ZlVGF4KGopXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW1vdmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgZm9ybS1ncm91cCBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJoZWFkaW5ndGV4dCBtYi0xXCI+VGF4IFR5cGUgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVGhlICd0eXBlJyBjb250cm9sIGlzIGNyZWF0ZWQgZGlzYWJsZWQgKGRlcml2ZWQgZnJvbSB0aGUgR1NUSU4pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZm9ybSBwb3N0cyB2aWEgZ2V0UmF3VmFsdWUoKSBzbyBpdCBzdGlsbCByZWFjaGVzIHRoZSBwYXlsb2FkLiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIGZvcm1Db250cm9sTmFtZT1cInR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25UYXhUeXBlQ2hhbmdlKGopXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtaW52YWxpZF09XCJhcnJheUNvbnRyb2xJbnZhbGlkKCd0YXgnLCBqLCAndHlwZScpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgdHQgb2YgdGF4VHlwZXNcIiBbdmFsdWVdPVwidHRcIj57eyB0dCB9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1tc2dcIiAqbmdJZj1cImFycmF5Q29udHJvbEludmFsaWQoJ3RheCcsIGosICd0eXBlJylcIj5UYXggVHlwZSBpcyByZXF1aXJlZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGZvcm0tZ3JvdXAgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaGVhZGluZ3RleHQgbWItMVwiPlRheCAlIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGZvcm1Db250cm9sTmFtZT1cInZhbHVlXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRvbmx5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmlzLWludmFsaWRdPVwiYXJyYXlDb250cm9sSW52YWxpZCgndGF4JywgaiwgJ3ZhbHVlJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJyZWNhbGN1bGF0ZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1tc2dcIiAqbmdJZj1cImFycmF5Q29udHJvbEludmFsaWQoJ3RheCcsIGosICd2YWx1ZScpXCI+VGF4ICUgaXMgcmVxdWlyZWQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBmb3JtLWdyb3VwIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImhlYWRpbmd0ZXh0IG1iLTFcIj5UYXggQW1vdW50PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cInRheEFtb3VudFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcmVhZG9ubHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgZm9ybS1ncm91cCBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJoZWFkaW5ndGV4dCBtYi0xXCI+Q3VycmVuY3kgU3ltYm9sPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cImN1cnJlbmN5XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByZWFkb25seT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIFN1bW1hcnkgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdW1tYXJ5LXNlY3Rpb24gcC0zIG10LTNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3VtbWFyeS1sYWJlbFwiPlN1YnRvdGFsPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3VtbWFyeS12YWx1ZVwiPnt7IGdldEN1cnJlbmN5U3ltYm9sKCkgfX0ge3sgZ2V0U3VidG90YWwoKSB8IG51bWJlcjonMS4yLTInOidlbi1JTicgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gbWItMlwiICpuZ0lmPVwiZ2V0QXBwbGllZERpc2NvdW50KCkgPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdW1tYXJ5LWxhYmVsXCI+RGlzY291bnQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdW1tYXJ5LXZhbHVlXCI+LSB7eyBnZXRDdXJyZW5jeVN5bWJvbCgpIH19IHt7IGdldEFwcGxpZWREaXNjb3VudCgpIHwgbnVtYmVyOicxLjItMic6J2VuLUlOJyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtYi0yXCIgKm5nSWY9XCJnZXRUb3RhbFRheCgpID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3VtbWFyeS1sYWJlbFwiPlRvdGFsIFRheDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1bW1hcnktdmFsdWVcIj57eyBnZXRDdXJyZW5jeVN5bWJvbCgpIH19IHt7IGdldFRvdGFsVGF4KCkgfCBudW1iZXI6JzEuMi0yJzonZW4tSU4nIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIHN1bW1hcnktdG90YWxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1bW1hcnktbGFiZWwtYm9sZFwiPlRvdGFsIEFtb3VudDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1bW1hcnktdmFsdWUtYm9sZFwiPnt7IGdldEN1cnJlbmN5U3ltYm9sKCkgfX0ge3sgZ2V0VG90YWxBbW91bnQoKSB8IG51bWJlcjonMS4yLTInOidlbi1JTidcclxuICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gQWN0aW9ucy4gQ3JlZGl0IG5vdGVzIGFkZCBhIFByZXZpZXcgb2YgdGhlIGludm9pY2UgYmVpbmcgY3JlZGl0ZWRcclxuICAgICAgICAgICAgICAgICAodGhyZWUgYnV0dG9ucyBzaGFyZSB0aGUgcm93IGluc3RlYWQgb2YgdHdvIGhhbHZlcykuIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG10LTRcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJhY3RpdmVNb2RhbC5kaXNtaXNzKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuLW91dGxpbmUgYnRuIGNhbmNlbCBtZS00XCIgW2NsYXNzLnctNTBdPVwiIWlzQ3JlZGl0Tm90ZVwiIFtjbGFzcy5mbGV4LWZpbGxdPVwiaXNDcmVkaXROb3RlXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cImlzQ3JlZGl0Tm90ZVwiIChjbGljayk9XCJwcmV2aWV3U291cmNlSW52b2ljZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXNvdXJjZUludm9pY2VJZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cInNvdXJjZUludm9pY2VJZCA/ICdQcmV2aWV3ICcgKyBzb3VyY2VJbnZvaWNlTnVtYmVyIDogJ1NlbGVjdCBhbiBpbnZvaWNlIGZpcnN0J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4tb3V0bGluZSBidG4gY2FuY2VsIG1lLTQgZmxleC1maWxsXCIgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogbm93cmFwO1wiPlByZXZpZXcgSW52b2ljZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgW2Rpc2FibGVkXT1cInNhdmluZyB8fCBleGNlZWRzQ3JlZGl0QmFsYW5jZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgcHgtNFwiIFtjbGFzcy53LTUwXT1cIiFpc0NyZWRpdE5vdGVcIiBbY2xhc3MuZmxleC1maWxsXT1cImlzQ3JlZGl0Tm90ZVwiIHN0eWxlPVwid2hpdGUtc3BhY2U6IG5vd3JhcDtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFzYXZpbmdcIiBjbGFzcz1cInN1Ym1pdFwiPnt7IHN1Ym1pdExhYmVsIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2F2aW5nXCIgY2xhc3M9XCJzdWJtaXRcIj5TYXZpbmcuLi48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9mb3JtPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT0gQ1JFRElUIE5PVEUgVEFCID09PT09PT09PT09PT09PT09PT09PT09PSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IG1iLTRcIiAqbmdJZj1cImFjdGl2ZVRhYiA9PT0gJ2NyZWRpdE5vdGUnICYmIG1vZGUgPT09ICdlZGl0J1wiPlxyXG4gICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiY3JlZGl0Tm90ZUZvcm1cIiBjbGFzcz1cImZvcm1cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnR0ZXh0IG1iLTNcIj5cclxuICAgICAgICAgICAgICAgIEFwcGx5IGEgY3JlZGl0IG5vdGUgLyBkaXNjb3VudCB0byB0aGlzIGludm9pY2UuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcHktMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImhlYWRpbmd0ZXh0IG1iLTJcIj5JbnZvaWNlIElEPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIFt2YWx1ZV09XCJpbnZvaWNlRGF0YT8uaW52b2ljZVwiIHJlYWRvbmx5PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcHktMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImhlYWRpbmd0ZXh0IG1iLTJcIj5Ub3RhbCBBbW91bnQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRvbGxhci1zaWduXCI+e3sgZ2V0SW52b2ljZUN1cnJlbmN5U3ltYm9sKCkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJhbW91bnRcIiB0eXBlPVwidGV4dFwiIHJlYWRvbmx5IGNsYXNzPVwiZm9ybS1jb250cm9sIGFtb3VudC1pbnB1dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImhlYWRpbmd0ZXh0IG1iLTJcIj5EaXNjb3VudCBBbW91bnQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZG9sbGFyLXNpZ25cIj57eyBnZXRJbnZvaWNlQ3VycmVuY3lTeW1ib2woKSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cImRpc2NvdW50QW1vdW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwib21pdFNwZWNpYWxDaGFyRGVjaW1hbCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBhbW91bnQtaW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNyZWRpdE1vcmVUaGFuVGVuUGVyY2VudCA/ICdlcnJvcmlucHV0JyA6ICcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cImNyZWRpdE1vcmVUaGFuVGVuUGVyY2VudCA/ICd0ZXh0LWRhbmdlcicgOiAnY29udGVudHRleHQnXCIgY2xhc3M9XCJzbWFsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBDcmVkaXQgdmFsdWUgZGVkdWN0ZWQgZnJvbSB0aGUgaW52b2ljZVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHktMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJoZWFkaW5ndGV4dCBtYi0yXCI+UmV2aXNlZCBBbW91bnQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZG9sbGFyLXNpZ25cIj57eyBnZXRJbnZvaWNlQ3VycmVuY3lTeW1ib2woKSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cInJldmlzZWRBbW91bnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlwcmVzcyk9XCJvbWl0U3BlY2lhbENoYXJEZWNpbWFsKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGFtb3VudC1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY3JlZGl0TW9yZVRoYW5UZW5QZXJjZW50ID8gJ2Vycm9yaW5wdXQnIDogJydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtaWNvblwiICpuZ0lmPVwiY3JlZGl0TW9yZVRoYW5UZW5QZXJjZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcF9jbl9lcnIpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNy45OTk2NyA1LjMzMzAxVjcuOTk5NjdNNy45OTk2NyAxMC42NjYzSDguMDA2MzRNMTQuNjY2MyA3Ljk5OTY3QzE0LjY2NjMgMTEuNjgxNiAxMS42ODE2IDE0LjY2NjMgNy45OTk2NyAxNC42NjYzQzQuMzE3NzggMTQuNjY2MyAxLjMzMzAxIDExLjY4MTYgMS4zMzMwMSA3Ljk5OTY3QzEuMzMzMDEgNC4zMTc3OCA0LjMxNzc4IDEuMzMzMDEgNy45OTk2NyAxLjMzMzAxQzExLjY4MTYgMS4zMzMwMSAxNC42NjYzIDQuMzE3NzggMTQuNjY2MyA3Ljk5OTY3WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0YwNDQzOFwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwX2NuX2VyclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cImNyZWRpdE1vcmVUaGFuVGVuUGVyY2VudCA/ICd0ZXh0LWRhbmdlcicgOiAnY29udGVudHRleHQnXCIgY2xhc3M9XCJzbWFsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBFbnRlciBhIHZhbGlkIHJldmlzZWQgYW1vdW50XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBtdC01XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiYWN0aXZlTW9kYWwuZGlzbWlzcygpXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1vdXRsaW5lIGJ0biBjYW5jZWwgbWUtNCB3LTUwXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJjcmVkaXRNb3JlVGhhblRlblBlcmNlbnQgfHwgc2F2aW5nXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJhcHBseUNyZWRpdE5vdGUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgcHgtNCB3LTUwXCIgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogbm93cmFwO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXNhdmluZ1wiPkFwcGx5IENyZWRpdCBOb3RlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2F2aW5nXCI+QXBwbHlpbmcuLi48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9mb3JtPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT0gT05FIFRJTUUgRkVFIFRBQiA9PT09PT09PT09PT09PT09PT09PT09PT0gLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBtYi00XCIgKm5nSWY9XCJhY3RpdmVUYWIgPT09ICdvbmVUaW1lRmVlJyAmJiBtb2RlID09PSAnZWRpdCdcIj5cclxuICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cIm9uZVRpbWVGZWVGb3JtXCIgY2xhc3M9XCJmb3JtXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50dGV4dCBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICBBZGQgYSBvbmUtdGltZSBmZWUgKGUuZy4gaW5zdGFsbGF0aW9uKSB0byB0aGlzIGludm9pY2UuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcHktMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImhlYWRpbmd0ZXh0IG1iLTJcIj5JbnZvaWNlIElEPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIFt2YWx1ZV09XCJpbnZvaWNlRGF0YT8uaW52b2ljZVwiIHJlYWRvbmx5PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcHktMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImhlYWRpbmd0ZXh0IG1iLTJcIj5DdXJyZW50IEludm9pY2UgQW1vdW50PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkb2xsYXItc2lnblwiPnt7IGdldEludm9pY2VDdXJyZW5jeVN5bWJvbCgpIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiYW1vdW50XCIgdHlwZT1cInRleHRcIiByZWFkb25seSBjbGFzcz1cImZvcm0tY29udHJvbCBhbW91bnQtaW5wdXRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHktMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJoZWFkaW5ndGV4dCBtYi0yXCI+T25lIFRpbWUgRmVlIChJbnN0YWxsYXRpb24pPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRvbGxhci1zaWduXCI+e3sgZ2V0SW52b2ljZUN1cnJlbmN5U3ltYm9sKCkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJvbmVUaW1lRmVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwib21pdFNwZWNpYWxDaGFyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGFtb3VudC1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciBmZWUgYW1vdW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXN0YWNrIG10LTMgZmVlLXN1bW1hcnkgcC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1bW1hcnktbGFiZWxcIj5TZWxlY3RlZCBJbnZvaWNlIEFtb3VudCArIE9uZSBUaW1lIEZlZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3VtbWFyeS12YWx1ZS1ib2xkXCI+e3sgZ2V0SW52b2ljZUN1cnJlbmN5U3ltYm9sKCkgfX17e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25lVGltZUZlZVRvdGFsIHwgbnVtYmVyOicxLjItMic6J2VuLUlOJyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggbXQtNVwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImFjdGl2ZU1vZGFsLmRpc21pc3MoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4tb3V0bGluZSBidG4gY2FuY2VsIG1lLTQgdy01MFwiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwic2F2aW5nIHx8ICFvbmVUaW1lRmVlRm9ybS5nZXQoJ29uZVRpbWVGZWUnKT8udmFsdWVcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYXBwbHlPbmVUaW1lRmVlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHB4LTQgdy01MFwiIHN0eWxlPVwid2hpdGUtc3BhY2U6IG5vd3JhcDtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFzYXZpbmdcIj5BcHBseSBGZWU8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzYXZpbmdcIj5BcHBseWluZy4uLjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Zvcm0+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+Il19
|