valtech-components 2.0.800 → 2.0.802
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/molecules/content-reaction/content-reaction.component.mjs +13 -21
- package/esm2022/lib/components/organisms/login/login.component.mjs +14 -20
- package/esm2022/lib/components/templates/page-wrapper/page-wrapper.component.mjs +37 -3
- package/esm2022/lib/services/auth/guards.mjs +9 -4
- package/esm2022/lib/services/page-refresh/page-refresh.service.mjs +77 -0
- package/esm2022/lib/services/toast.service.mjs +9 -3
- package/esm2022/lib/version.mjs +2 -2
- package/esm2022/public-api.mjs +4 -1
- package/fesm2022/valtech-components.mjs +148 -44
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/templates/page-wrapper/page-wrapper.component.d.ts +9 -0
- package/lib/services/auth/guards.d.ts +3 -0
- package/lib/services/page-refresh/page-refresh.service.d.ts +64 -0
- package/lib/services/toast.service.d.ts +6 -0
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Component, computed, EventEmitter, inject, Input, Output, signal
|
|
1
|
+
import { Component, computed, EventEmitter, inject, Input, Output, signal } from '@angular/core';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
3
|
import { Validators } from '@angular/forms';
|
|
4
4
|
import { Router } from '@angular/router';
|
|
@@ -8,9 +8,9 @@ import { ToastService } from '../../../services/toast.service';
|
|
|
8
8
|
import { I18nService, InputI18nHelper } from '../../../services/i18n';
|
|
9
9
|
import { FormComponent } from '../form/form.component';
|
|
10
10
|
import { ImageComponent } from '../../atoms/image/image.component';
|
|
11
|
-
import { InputType, ComponentStates
|
|
11
|
+
import { InputType, ComponentStates } from '../../types';
|
|
12
12
|
import { SolidDefaultBlock } from '../../atoms/button/factory';
|
|
13
|
-
import { LOGIN_DEFAULTS
|
|
13
|
+
import { LOGIN_DEFAULTS } from './types';
|
|
14
14
|
import * as i0 from "@angular/core";
|
|
15
15
|
export class LoginComponent {
|
|
16
16
|
constructor() {
|
|
@@ -213,11 +213,7 @@ export class LoginComponent {
|
|
|
213
213
|
// ==========================================
|
|
214
214
|
this.mfaVerifyFormProps = computed(() => {
|
|
215
215
|
const method = this._mfaMethod();
|
|
216
|
-
const sectionName = method === 'TOTP'
|
|
217
|
-
? this.t('mfaTOTP')
|
|
218
|
-
: method === 'EMAIL'
|
|
219
|
-
? this.t('mfaEmail')
|
|
220
|
-
: this.t('mfaSMS');
|
|
216
|
+
const sectionName = method === 'TOTP' ? this.t('mfaTOTP') : method === 'EMAIL' ? this.t('mfaEmail') : this.t('mfaSMS');
|
|
221
217
|
return this.i18nHelper.resolveForm({
|
|
222
218
|
nameKey: 'mfaTitle',
|
|
223
219
|
i18nNamespace: '_auth',
|
|
@@ -380,7 +376,7 @@ export class LoginComponent {
|
|
|
380
376
|
}
|
|
381
377
|
this.handleLoginSuccess();
|
|
382
378
|
},
|
|
383
|
-
error:
|
|
379
|
+
error: err => {
|
|
384
380
|
this._loginFormState.set(ComponentStates.ENABLED);
|
|
385
381
|
const errorCode = err?.code;
|
|
386
382
|
if (errorCode === 'AUTHV2_EMAIL_NOT_VERIFIED') {
|
|
@@ -402,7 +398,7 @@ export class LoginComponent {
|
|
|
402
398
|
}
|
|
403
399
|
this.handleLoginSuccess(provider);
|
|
404
400
|
},
|
|
405
|
-
error:
|
|
401
|
+
error: err => {
|
|
406
402
|
this.isOAuthLoading = false;
|
|
407
403
|
const errorCode = err?.code;
|
|
408
404
|
if (errorCode === 'POPUP_CLOSED') {
|
|
@@ -436,7 +432,7 @@ export class LoginComponent {
|
|
|
436
432
|
this.closeRegisterModal();
|
|
437
433
|
this.openVerifyModal(email);
|
|
438
434
|
},
|
|
439
|
-
error:
|
|
435
|
+
error: err => {
|
|
440
436
|
this._registerFormState.set(ComponentStates.ENABLED);
|
|
441
437
|
this.handleError(err, 'signup');
|
|
442
438
|
},
|
|
@@ -473,7 +469,7 @@ export class LoginComponent {
|
|
|
473
469
|
this.closeVerifyModal();
|
|
474
470
|
this.handleLoginSuccess();
|
|
475
471
|
},
|
|
476
|
-
error:
|
|
472
|
+
error: err => {
|
|
477
473
|
this._verifyFormState.set(ComponentStates.ENABLED);
|
|
478
474
|
this.handleError(err, 'verify');
|
|
479
475
|
},
|
|
@@ -492,7 +488,7 @@ export class LoginComponent {
|
|
|
492
488
|
this.showToast(this.t('codeSent'));
|
|
493
489
|
this.startResendCooldown();
|
|
494
490
|
},
|
|
495
|
-
error:
|
|
491
|
+
error: err => {
|
|
496
492
|
this.handleError(err, 'verify');
|
|
497
493
|
},
|
|
498
494
|
});
|
|
@@ -519,7 +515,7 @@ export class LoginComponent {
|
|
|
519
515
|
this.closeMFAVerifyModal();
|
|
520
516
|
this.handleLoginSuccess(undefined, true);
|
|
521
517
|
},
|
|
522
|
-
error:
|
|
518
|
+
error: err => {
|
|
523
519
|
this._mfaVerifyFormState.set(ComponentStates.ENABLED);
|
|
524
520
|
this.handleError(err, 'mfa');
|
|
525
521
|
},
|
|
@@ -548,7 +544,7 @@ export class LoginComponent {
|
|
|
548
544
|
this.openResetPasswordModal(email);
|
|
549
545
|
this.showToast(this.t('codeSent'));
|
|
550
546
|
},
|
|
551
|
-
error:
|
|
547
|
+
error: err => {
|
|
552
548
|
this._forgotPasswordFormState.set(ComponentStates.ENABLED);
|
|
553
549
|
this.handleError(err, 'forgot');
|
|
554
550
|
},
|
|
@@ -586,7 +582,7 @@ export class LoginComponent {
|
|
|
586
582
|
this.showToast(this.t('passwordUpdated'));
|
|
587
583
|
this.closeResetPasswordModal();
|
|
588
584
|
},
|
|
589
|
-
error:
|
|
585
|
+
error: err => {
|
|
590
586
|
this._resetPasswordFormState.set(ComponentStates.ENABLED);
|
|
591
587
|
this.handleError(err, 'reset');
|
|
592
588
|
},
|
|
@@ -605,7 +601,7 @@ export class LoginComponent {
|
|
|
605
601
|
this.showToast(this.t('codeSent'));
|
|
606
602
|
this.startResetResendCooldown();
|
|
607
603
|
},
|
|
608
|
-
error:
|
|
604
|
+
error: err => {
|
|
609
605
|
this.handleError(err, 'reset');
|
|
610
606
|
},
|
|
611
607
|
});
|
|
@@ -637,8 +633,6 @@ export class LoginComponent {
|
|
|
637
633
|
this.toastService.show({
|
|
638
634
|
message,
|
|
639
635
|
duration: 3500,
|
|
640
|
-
position: 'top',
|
|
641
|
-
color: 'dark',
|
|
642
636
|
});
|
|
643
637
|
}
|
|
644
638
|
getErrorMessage(err) {
|
|
@@ -738,4 +732,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
738
732
|
}], onMFARequired: [{
|
|
739
733
|
type: Output
|
|
740
734
|
}] } });
|
|
741
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9sb2dpbi9sb2dpbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2xvZ2luL2xvZ2luLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsUUFBUSxFQUNSLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sRUFDTixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFNBQVMsRUFDVCxPQUFPLEVBQ1AsUUFBUSxFQUNSLE9BQU8sRUFDUCxVQUFVLEdBQ1gsTUFBTSwyQkFBMkIsQ0FBQztBQUVuQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBR0wsU0FBUyxFQUNULGVBQWUsR0FFaEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0s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d0JBQ1AsWUFBWTt3QkFDWixTQUFTO3dCQUNULFVBQVU7d0JBQ1YsVUFBVTt3QkFDVixTQUFTO3dCQUNULE9BQU87d0JBQ1AsUUFBUTt3QkFDUixPQUFPO3dCQUNQLFVBQVU7d0JBQ1YsYUFBYTt3QkFDYixjQUFjO3FCQUNmOzhCQUtRLEtBQUs7c0JBQWIsS0FBSztnQkFFSSxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIEV2ZW50RW1pdHRlcixcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIHNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBJb25CdXR0b24sXG4gIElvbkJ1dHRvbnMsXG4gIElvbkNvbnRlbnQsXG4gIElvbkhlYWRlcixcbiAgSW9uSWNvbixcbiAgSW9uTW9kYWwsXG4gIElvblRleHQsXG4gIElvblRvb2xiYXIsXG59IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGgnO1xuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdG9hc3Quc2VydmljZSc7XG5pbXBvcnQgeyBJMThuU2VydmljZSwgSW5wdXRJMThuSGVscGVyIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaTE4bic7XG5pbXBvcnQgeyBGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vZm9ybS9mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbWFnZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL2ltYWdlL2ltYWdlLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBGb3JtTWV0YWRhdGEsXG4gIEZvcm1TdWJtaXQsXG4gIElucHV0VHlwZSxcbiAgQ29tcG9uZW50U3RhdGVzLFxuICBDb21wb25lbnRTdGF0ZSxcbn0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgU29saWREZWZhdWx0QmxvY2sgfSBmcm9tICcuLi8uLi9hdG9tcy9idXR0b24vZmFjdG9yeSc7XG5pbXBvcnQge1xuICBMb2dpbk1ldGFkYXRhLFxuICBMb2dpblN1Y2Nlc3NFdmVudCxcbiAgTG9naW5FcnJvckV2ZW50LFxuICBNRkFSZXF1aXJlZEV2ZW50LFxuICBMT0dJTl9ERUZBVUxUUyxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1sb2dpbicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgSW9uQnV0dG9uLFxuICAgIElvbkJ1dHRvbnMsXG4gICAgSW9uQ29udGVudCxcbiAgICBJb25IZWFkZXIsXG4gICAgSW9uSWNvbixcbiAgICBJb25Nb2RhbCxcbiAgICBJb25UZXh0LFxuICAgIElvblRvb2xiYXIsXG4gICAgRm9ybUNvbXBvbmVudCxcbiAgICBJbWFnZUNvbXBvbmVudCxcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2xvZ2luLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbG9naW4uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgTG9naW5Db21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBwcm9wczogTG9naW5NZXRhZGF0YSA9IHt9O1xuXG4gIEBPdXRwdXQoKSBvblN1Y2Nlc3MgPSBuZXcgRXZlbnRFbWl0dGVyPExvZ2luU3VjY2Vzc0V2ZW50PigpO1xuICBAT3V0cHV0KCkgb25FcnJvciA9IG5ldyBFdmVudEVtaXR0ZXI8TG9naW5FcnJvckV2ZW50PigpO1xuICBAT3V0cHV0KCkgb25NRkFSZXF1aXJlZCA9IG5ldyBFdmVudEVtaXR0ZXI8TUZBUmVxdWlyZWRFdmVudD4oKTtcblxuICAvLyBTZXJ2aWNlc1xuICBhdXRoU2VydmljZSA9IGluamVjdChBdXRoU2VydmljZSk7XG4gIHByaXZhdGUgdG9hc3RTZXJ2aWNlID0gaW5qZWN0KFRvYXN0U2VydmljZSk7XG4gIHByaXZhdGUgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIHByaXZhdGUgaTE4biA9IGluamVjdChJMThuU2VydmljZSk7XG4gIHByaXZhdGUgaTE4bkhlbHBlciA9IGluamVjdChJbnB1dEkxOG5IZWxwZXIpO1xuXG4gIC8qKlxuICAgKiBIZWxwZXIgbWV0aG9kIGZvciB0cmFuc2xhdGluZyBhdXRoLXJlbGF0ZWQgc3RyaW5ncy5cbiAgICogRXhwb3NlZCB0byB0ZW1wbGF0ZSBmb3IgZHluYW1pYyB0ZXh0LlxuICAgKi9cbiAgdChrZXk6IHN0cmluZywgZGF0YT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmkxOG4udChrZXksICdfYXV0aCcsIGRhdGEpO1xuICB9XG5cbiAgLy8gVGltZXJzXG4gIHByaXZhdGUgcmVzZW5kVGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHJlc2V0UmVzZW5kVGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPiB8IG51bGwgPSBudWxsO1xuXG4gIC8vIFN0YXRlXG4gIGlzT0F1dGhMb2FkaW5nID0gZmFsc2U7XG4gIGlzUmVnaXN0ZXJNb2RhbE9wZW4gPSBmYWxzZTtcbiAgaXNWZXJpZnlNb2RhbE9wZW4gPSBmYWxzZTtcbiAgaXNGb3Jnb3RQYXNzd29yZE1vZGFsT3BlbiA9IGZhbHNlO1xuICBpc1Jlc2V0UGFzc3dvcmRNb2RhbE9wZW4gPSBmYWxzZTtcbiAgaXNNRkFWZXJpZnlNb2RhbE9wZW4gPSBmYWxzZTtcblxuICBwZW5kaW5nVmVyaWZpY2F0aW9uRW1haWwgPSAnJztcbiAgcGVuZGluZ1Jlc2V0RW1haWwgPSAnJztcbiAgcmVzZW5kQ29vbGRvd24gPSAwO1xuICByZXNldFJlc2VuZENvb2xkb3duID0gMDtcblxuICAvLyBSZXNvbHZlZCBwcm9wcyB3aXRoIGRlZmF1bHRzXG4gIGdldCBjb25maWcoKTogUmVxdWlyZWQ8T21pdDxMb2dpbk1ldGFkYXRhLCAnbG9nbycgfCAnbGVnYWwnIHwgJ3JlZGlyZWN0T25TdWNjZXNzJz4+ICYgTG9naW5NZXRhZGF0YSB7XG4gICAgcmV0dXJuIHsgLi4uTE9HSU5fREVGQVVMVFMsIC4uLnRoaXMucHJvcHMgfTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBGT1JNIFNUQVRFIFNJR05BTFNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcHJpdmF0ZSBfbG9naW5Gb3JtU3RhdGUgPSBzaWduYWw8Q29tcG9uZW50U3RhdGU+KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgcHJpdmF0ZSBfcmVnaXN0ZXJGb3JtU3RhdGUgPSBzaWduYWw8Q29tcG9uZW50U3RhdGU+KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgcHJpdmF0ZSBfdmVyaWZ5Rm9ybVN0YXRlID0gc2lnbmFsPENvbXBvbmVudFN0YXRlPihDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gIHByaXZhdGUgX3ZlcmlmeUZvcm1TZWN0aW9uTmFtZSA9IHNpZ25hbCgnJyk7XG4gIHByaXZhdGUgX21mYVZlcmlmeUZvcm1TdGF0ZSA9IHNpZ25hbDxDb21wb25lbnRTdGF0ZT4oQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICBwcml2YXRlIF9tZmFNZXRob2QgPSBzaWduYWw8J1RPVFAnIHwgJ0VNQUlMJyB8ICdTTVMnPignVE9UUCcpO1xuICBwcml2YXRlIF9mb3Jnb3RQYXNzd29yZEZvcm1TdGF0ZSA9IHNpZ25hbDxDb21wb25lbnRTdGF0ZT4oQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICBwcml2YXRlIF9yZXNldFBhc3N3b3JkRm9ybVN0YXRlID0gc2lnbmFsPENvbXBvbmVudFN0YXRlPihDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gIHByaXZhdGUgX3Jlc2V0Rm9ybVNlY3Rpb25OYW1lID0gc2lnbmFsKCcnKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTE9HSU4gRk9STSAoY29tcHV0ZWQpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHJlYWRvbmx5IGxvZ2luRm9ybVByb3BzID0gY29tcHV0ZWQ8Rm9ybU1ldGFkYXRhPigoKSA9PlxuICAgIHRoaXMuaTE4bkhlbHBlci5yZXNvbHZlRm9ybSh7XG4gICAgICBuYW1lS2V5OiAnbG9naW5UaXRsZScsXG4gICAgICBpMThuTmFtZXNwYWNlOiAnX2F1dGgnLFxuICAgICAgc2VjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICcnLFxuICAgICAgICAgIG9yZGVyOiAwLFxuICAgICAgICAgIGZpZWxkczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBJbnB1dFR5cGUuRU1BSUwsXG4gICAgICAgICAgICAgIG5hbWU6ICdlbWFpbCcsXG4gICAgICAgICAgICAgIHRva2VuOiAnbG9naW4tZW1haWwnLFxuICAgICAgICAgICAgICBoaW50OiAnJyxcbiAgICAgICAgICAgICAgbGFiZWxLZXk6ICdlbWFpbCcsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyS2V5OiAnZW1haWxQbGFjZWhvbGRlcicsXG4gICAgICAgICAgICAgIGVycm9yS2V5czoge1xuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiAnZW1haWxSZXF1aXJlZCcsXG4gICAgICAgICAgICAgICAgZW1haWw6ICdlbWFpbEludmFsaWQnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5lbWFpbF0sXG4gICAgICAgICAgICAgIG9yZGVyOiAwLFxuICAgICAgICAgICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBJbnB1dFR5cGUuUEFTU1dPUkQsXG4gICAgICAgICAgICAgIG5hbWU6ICdwYXNzd29yZCcsXG4gICAgICAgICAgICAgIHRva2VuOiAnbG9naW4tcGFzc3dvcmQnLFxuICAgICAgICAgICAgICBoaW50OiAnJyxcbiAgICAgICAgICAgICAgbGFiZWxLZXk6ICdwYXNzd29yZCcsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyS2V5OiAncGFzc3dvcmRQbGFjZWhvbGRlcicsXG4gICAgICAgICAgICAgIGVycm9yS2V5czoge1xuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiAncGFzc3dvcmRSZXF1aXJlZCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgICAgICAgb3JkZXI6IDEsXG4gICAgICAgICAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBhY3Rpb25zOiB7XG4gICAgICAgIC4uLlNvbGlkRGVmYXVsdEJsb2NrKCcnLCAnc3VibWl0JyksXG4gICAgICAgIHRva2VuOiAnbG9naW4tc3VibWl0JyxcbiAgICAgICAgdGV4dEtleTogJ2xvZ2luU3VibWl0JyxcbiAgICAgIH0sXG4gICAgICBzdGF0ZTogdGhpcy5fbG9naW5Gb3JtU3RhdGUoKSxcbiAgICB9KVxuICApO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBSRUdJU1RFUiBGT1JNIChjb21wdXRlZClcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcmVhZG9ubHkgcmVnaXN0ZXJGb3JtUHJvcHMgPSBjb21wdXRlZDxGb3JtTWV0YWRhdGE+KCgpID0+XG4gICAgdGhpcy5pMThuSGVscGVyLnJlc29sdmVGb3JtKHtcbiAgICAgIG5hbWVLZXk6ICdyZWdpc3RlclRpdGxlJyxcbiAgICAgIGkxOG5OYW1lc3BhY2U6ICdfYXV0aCcsXG4gICAgICBzZWN0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJycsXG4gICAgICAgICAgb3JkZXI6IDAsXG4gICAgICAgICAgZmllbGRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IElucHV0VHlwZS5URVhULFxuICAgICAgICAgICAgICBuYW1lOiAnbmFtZScsXG4gICAgICAgICAgICAgIHRva2VuOiAncmVnaXN0ZXItbmFtZScsXG4gICAgICAgICAgICAgIGhpbnQ6ICcnLFxuICAgICAgICAgICAgICBsYWJlbEtleTogJ2Z1bGxOYW1lJyxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXJLZXk6ICduYW1lUGxhY2Vob2xkZXInLFxuICAgICAgICAgICAgICBlcnJvcktleXM6IHtcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogJ25hbWVSZXF1aXJlZCcsXG4gICAgICAgICAgICAgICAgbWlubGVuZ3RoOiAnbmFtZU1pbkxlbmd0aCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCgyKV0sXG4gICAgICAgICAgICAgIG9yZGVyOiAwLFxuICAgICAgICAgICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBJbnB1dFR5cGUuRU1BSUwsXG4gICAgICAgICAgICAgIG5hbWU6ICdlbWFpbCcsXG4gICAgICAgICAgICAgIHRva2VuOiAncmVnaXN0ZXItZW1haWwnLFxuICAgICAgICAgICAgICBoaW50OiAnJyxcbiAgICAgICAgICAgICAgbGFiZWxLZXk6ICdlbWFpbCcsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyS2V5OiAnZW1haWxQbGFjZWhvbGRlcicsXG4gICAgICAgICAgICAgIGVycm9yS2V5czoge1xuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiAnZW1haWxSZXF1aXJlZCcsXG4gICAgICAgICAgICAgICAgZW1haWw6ICdlbWFpbEludmFsaWQnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5lbWFpbF0sXG4gICAgICAgICAgICAgIG9yZGVyOiAxLFxuICAgICAgICAgICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBJbnB1dFR5cGUuUEFTU1dPUkQsXG4gICAgICAgICAgICAgIG5hbWU6ICdwYXNzd29yZCcsXG4gICAgICAgICAgICAgIHRva2VuOiAncmVnaXN0ZXItcGFzc3dvcmQnLFxuICAgICAgICAgICAgICBoaW50OiAnJyxcbiAgICAgICAgICAgICAgbGFiZWxLZXk6ICdwYXNzd29yZCcsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyS2V5OiAncGFzc3dvcmRQbGFjZWhvbGRlcicsXG4gICAgICAgICAgICAgIGVycm9yS2V5czoge1xuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiAncGFzc3dvcmRSZXF1aXJlZCcsXG4gICAgICAgICAgICAgICAgbWlubGVuZ3RoOiAncGFzc3dvcmRNaW5MZW5ndGgnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoOCldLFxuICAgICAgICAgICAgICBvcmRlcjogMixcbiAgICAgICAgICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGFjdGlvbnM6IHtcbiAgICAgICAgLi4uU29saWREZWZhdWx0QmxvY2soJycsICdzdWJtaXQnKSxcbiAgICAgICAgdG9rZW46ICdyZWdpc3Rlci1zdWJtaXQnLFxuICAgICAgICB0ZXh0S2V5OiAncmVnaXN0ZXJTdWJtaXQnLFxuICAgICAgfSxcbiAgICAgIHN0YXRlOiB0aGlzLl9yZWdpc3RlckZvcm1TdGF0ZSgpLFxuICAgIH0pXG4gICk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFZFUklGWSBFTUFJTCBGT1JNIChjb21wdXRlZClcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcmVhZG9ubHkgdmVyaWZ5Rm9ybVByb3BzID0gY29tcHV0ZWQ8Rm9ybU1ldGFkYXRhPigoKSA9PiB7XG4gICAgY29uc3Qgc2VjdGlvbk5hbWUgPSB0aGlzLl92ZXJpZnlGb3JtU2VjdGlvbk5hbWUoKSB8fCB0aGlzLnQoJ3ZlcmlmeURlc2NyaXB0aW9uJyk7XG4gICAgcmV0dXJuIHRoaXMuaTE4bkhlbHBlci5yZXNvbHZlRm9ybSh7XG4gICAgICBuYW1lS2V5OiAndmVyaWZ5VGl0bGUnLFxuICAgICAgaTE4bk5hbWVzcGFjZTogJ19hdXRoJyxcbiAgICAgIHNlY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBzZWN0aW9uTmFtZSxcbiAgICAgICAgICBvcmRlcjogMCxcbiAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogSW5wdXRUeXBlLlBJTl9DT0RFLFxuICAgICAgICAgICAgICBsYWJlbDogJycsXG4gICAgICAgICAgICAgIG5hbWU6ICdjb2RlJyxcbiAgICAgICAgICAgICAgdG9rZW46ICd2ZXJpZnktcGluJyxcbiAgICAgICAgICAgICAgaGludDogJycsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAnJyxcbiAgICAgICAgICAgICAgZXJyb3JLZXlzOiB7XG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICdjb2RlUmVxdWlyZWQnLFxuICAgICAgICAgICAgICAgIG1pbmxlbmd0aDogJ2NvZGVNaW5MZW5ndGgnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoNildLFxuICAgICAgICAgICAgICBvcmRlcjogMCxcbiAgICAgICAgICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgICAgICAgICAgICBsZW5ndGg6IDYsXG4gICAgICAgICAgICAgIGFsbG93TnVtYmVyc09ubHk6IHRydWUsXG4gICAgICAgICAgICAgIGF1dG9Gb2N1czogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBhY3Rpb25zOiB7XG4gICAgICAgIC4uLlNvbGlkRGVmYXVsdEJsb2NrKCcnLCAnc3VibWl0JyksXG4gICAgICAgIHRva2VuOiAndmVyaWZ5LXN1Ym1pdCcsXG4gICAgICAgIHRleHRLZXk6ICd2ZXJpZnlTdWJtaXQnLFxuICAgICAgfSxcbiAgICAgIHN0YXRlOiB0aGlzLl92ZXJpZnlGb3JtU3RhdGUoKSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIE1GQSBWRVJJRlkgRk9STSAoY29tcHV0ZWQpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHJlYWRvbmx5IG1mYVZlcmlmeUZvcm1Qcm9wcyA9IGNvbXB1dGVkPEZvcm1NZXRhZGF0YT4oKCkgPT4ge1xuICAgIGNvbnN0IG1ldGhvZCA9IHRoaXMuX21mYU1ldGhvZCgpO1xuICAgIGNvbnN0IHNlY3Rpb25OYW1lID1cbiAgICAgIG1ldGhvZCA9PT0gJ1RPVFAnXG4gICAgICAgID8gdGhpcy50KCdtZmFUT1RQJylcbiAgICAgICAgOiBtZXRob2QgPT09ICdFTUFJTCdcbiAgICAgICAgICA/IHRoaXMudCgnbWZhRW1haWwnKVxuICAgICAgICAgIDogdGhpcy50KCdtZmFTTVMnKTtcblxuICAgIHJldHVybiB0aGlzLmkxOG5IZWxwZXIucmVzb2x2ZUZvcm0oe1xuICAgICAgbmFtZUtleTogJ21mYVRpdGxlJyxcbiAgICAgIGkxOG5OYW1lc3BhY2U6ICdfYXV0aCcsXG4gICAgICBzZWN0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogc2VjdGlvbk5hbWUsXG4gICAgICAgICAgb3JkZXI6IDAsXG4gICAgICAgICAgZmllbGRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IElucHV0VHlwZS5QSU5fQ09ERSxcbiAgICAgICAgICAgICAgbGFiZWw6ICcnLFxuICAgICAgICAgICAgICBuYW1lOiAnY29kZScsXG4gICAgICAgICAgICAgIHRva2VuOiAnbWZhLXBpbicsXG4gICAgICAgICAgICAgIGhpbnQ6ICcnLFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogJycsXG4gICAgICAgICAgICAgIGVycm9yS2V5czoge1xuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiAnY29kZVJlcXVpcmVkJyxcbiAgICAgICAgICAgICAgICBtaW5sZW5ndGg6ICdjb2RlTWluTGVuZ3RoJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDYpXSxcbiAgICAgICAgICAgICAgb3JkZXI6IDAsXG4gICAgICAgICAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgICAgICAgICAgbGVuZ3RoOiA2LFxuICAgICAgICAgICAgICBhbGxvd051bWJlcnNPbmx5OiB0cnVlLFxuICAgICAgICAgICAgICBhdXRvRm9jdXM6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgYWN0aW9uczoge1xuICAgICAgICAuLi5Tb2xpZERlZmF1bHRCbG9jaygnJywgJ3N1Ym1pdCcpLFxuICAgICAgICB0b2tlbjogJ21mYS12ZXJpZnktc3VibWl0JyxcbiAgICAgICAgdGV4dEtleTogJ3ZlcmlmeVN1Ym1pdCcsXG4gICAgICB9LFxuICAgICAgc3RhdGU6IHRoaXMuX21mYVZlcmlmeUZvcm1TdGF0ZSgpLFxuICAgIH0pO1xuICB9KTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRk9SR09UIFBBU1NXT1JEIEZPUk0gKGNvbXB1dGVkKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICByZWFkb25seSBmb3Jnb3RQYXNzd29yZEZvcm1Qcm9wcyA9IGNvbXB1dGVkPEZvcm1NZXRhZGF0YT4oKCkgPT5cbiAgICB0aGlzLmkxOG5IZWxwZXIucmVzb2x2ZUZvcm0oe1xuICAgICAgbmFtZUtleTogJ2ZvcmdvdFRpdGxlJyxcbiAgICAgIGkxOG5OYW1lc3BhY2U6ICdfYXV0aCcsXG4gICAgICBzZWN0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogdGhpcy50KCdmb3Jnb3REZXNjcmlwdGlvbicpLFxuICAgICAgICAgIG9yZGVyOiAwLFxuICAgICAgICAgIGZpZWxkczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBJbnB1dFR5cGUuRU1BSUwsXG4gICAgICAgICAgICAgIGxhYmVsOiAnJyxcbiAgICAgICAgICAgICAgbmFtZTogJ2VtYWlsJyxcbiAgICAgICAgICAgICAgdG9rZW46ICdmb3Jnb3QtZW1haWwnLFxuICAgICAgICAgICAgICBoaW50OiAnJyxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXJLZXk6ICdlbWFpbFBsYWNlaG9sZGVyJyxcbiAgICAgICAgICAgICAgZXJyb3JLZXlzOiB7XG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICdlbWFpbFJlcXVpcmVkJyxcbiAgICAgICAgICAgICAgICBlbWFpbDogJ2VtYWlsSW52YWxpZCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLmVtYWlsXSxcbiAgICAgICAgICAgICAgb3JkZXI6IDAsXG4gICAgICAgICAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBhY3Rpb25zOiB7XG4gICAgICAgIC4uLlNvbGlkRGVmYXVsdEJsb2NrKCcnLCAnc3VibWl0JyksXG4gICAgICAgIHRva2VuOiAnZm9yZ290LXN1Ym1pdCcsXG4gICAgICAgIHRleHRLZXk6ICdmb3Jnb3RTdWJtaXQnLFxuICAgICAgfSxcbiAgICAgIHN0YXRlOiB0aGlzLl9mb3Jnb3RQYXNzd29yZEZvcm1TdGF0ZSgpLFxuICAgIH0pXG4gICk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFJFU0VUIFBBU1NXT1JEIEZPUk0gKGNvbXB1dGVkKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICByZWFkb25seSByZXNldFBhc3N3b3JkRm9ybVByb3BzID0gY29tcHV0ZWQ8Rm9ybU1ldGFkYXRhPigoKSA9PiB7XG4gICAgY29uc3Qgc2VjdGlvbk5hbWUgPSB0aGlzLl9yZXNldEZvcm1TZWN0aW9uTmFtZSgpIHx8IHRoaXMudCgncmVzZXREZXNjcmlwdGlvbicpO1xuICAgIHJldHVybiB0aGlzLmkxOG5IZWxwZXIucmVzb2x2ZUZvcm0oe1xuICAgICAgbmFtZUtleTogJ3Jlc2V0VGl0bGUnLFxuICAgICAgaTE4bk5hbWVzcGFjZTogJ19hdXRoJyxcbiAgICAgIHNlY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBzZWN0aW9uTmFtZSxcbiAgICAgICAgICBvcmRlcjogMCxcbiAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogSW5wdXRUeXBlLlBJTl9DT0RFLFxuICAgICAgICAgICAgICBsYWJlbDogJycsXG4gICAgICAgICAgICAgIG5hbWU6ICdjb2RlJyxcbiAgICAgICAgICAgICAgdG9rZW46ICdyZXNldC1waW4nLFxuICAgICAgICAgICAgICBoaW50OiAnJyxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICcnLFxuICAgICAgICAgICAgICBlcnJvcktleXM6IHtcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogJ2NvZGVSZXF1aXJlZCcsXG4gICAgICAgICAgICAgICAgbWlubGVuZ3RoOiAnY29kZU1pbkxlbmd0aCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCg2KV0sXG4gICAgICAgICAgICAgIG9yZGVyOiAwLFxuICAgICAgICAgICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgICAgICAgICAgIGxlbmd0aDogNixcbiAgICAgICAgICAgICAgYWxsb3dOdW1iZXJzT25seTogdHJ1ZSxcbiAgICAgICAgICAgICAgYXV0b0ZvY3VzOiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogSW5wdXRUeXBlLlBBU1NXT1JELFxuICAgICAgICAgICAgICBuYW1lOiAnbmV3UGFzc3dvcmQnLFxuICAgICAgICAgICAgICB0b2tlbjogJ3Jlc2V0LW5ldy1wYXNzd29yZCcsXG4gICAgICAgICAgICAgIGxhYmVsS2V5OiAnbmV3UGFzc3dvcmQnLFxuICAgICAgICAgICAgICBoaW50S2V5OiAnbmV3UGFzc3dvcmRIaW50JyxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXJLZXk6ICdwYXNzd29yZFBsYWNlaG9sZGVyJyxcbiAgICAgICAgICAgICAgZXJyb3JLZXlzOiB7XG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICdwYXNzd29yZFJlcXVpcmVkJyxcbiAgICAgICAgICAgICAgICBtaW5sZW5ndGg6ICdwYXNzd29yZE1pbkxlbmd0aCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCg4KV0sXG4gICAgICAgICAgICAgIG9yZGVyOiAxLFxuICAgICAgICAgICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgYWN0aW9uczoge1xuICAgICAgICAuLi5Tb2xpZERlZmF1bHRCbG9jaygnJywgJ3N1Ym1pdCcpLFxuICAgICAgICB0b2tlbjogJ3Jlc2V0LXN1Ym1pdCcsXG4gICAgICAgIHRleHRLZXk6ICdyZXNldFN1Ym1pdCcsXG4gICAgICB9LFxuICAgICAgc3RhdGU6IHRoaXMuX3Jlc2V0UGFzc3dvcmRGb3JtU3RhdGUoKSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEhBTkRMRVJTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIGxvZ2luSGFuZGxlcihldmVudDogRm9ybVN1Ym1pdCk6IHZvaWQge1xuICAgIGNvbnN0IGVtYWlsID0gZXZlbnQuZmllbGRzWydlbWFpbCddO1xuICAgIGNvbnN0IHBhc3N3b3JkID0gZXZlbnQuZmllbGRzWydwYXNzd29yZCddO1xuXG4gICAgaWYgKCFlbWFpbCB8fCAhcGFzc3dvcmQpIHtcbiAgICAgIHRoaXMuc2hvd1RvYXN0KHRoaXMudCgnY29tcGxldGVBbGxGaWVsZHMnKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbG9naW5Gb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5XT1JLSU5HKTtcblxuICAgIHRoaXMuYXV0aFNlcnZpY2Uuc2lnbmluKHsgZW1haWwsIHBhc3N3b3JkIH0pLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuX2xvZ2luRm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG5cbiAgICAgICAgaWYgKHRoaXMuYXV0aFNlcnZpY2UubWZhUGVuZGluZygpLnJlcXVpcmVkKSB7XG4gICAgICAgICAgdGhpcy5vcGVuTUZBVmVyaWZ5TW9kYWwoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmhhbmRsZUxvZ2luU3VjY2VzcygpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMuX2xvZ2luRm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG5cbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gKGVyciBhcyB7IGNvZGU/OiBzdHJpbmcgfSk/LmNvZGU7XG4gICAgICAgIGlmIChlcnJvckNvZGUgPT09ICdBVVRIVjJfRU1BSUxfTk9UX1ZFUklGSUVEJykge1xuICAgICAgICAgIHRoaXMub3BlblZlcmlmeU1vZGFsKGVtYWlsKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVyciwgJ3NpZ25pbicpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGxvZ2luV2l0aE9BdXRoKHByb3ZpZGVyOiAnZ29vZ2xlJyB8ICdhcHBsZScgfCAnbWljcm9zb2Z0Jyk6IHZvaWQge1xuICAgIHRoaXMuaXNPQXV0aExvYWRpbmcgPSB0cnVlO1xuXG4gICAgdGhpcy5hdXRoU2VydmljZS5zaWduaW5XaXRoT0F1dGgocHJvdmlkZXIpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNPQXV0aExvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICBpZiAodGhpcy5hdXRoU2VydmljZS5tZmFQZW5kaW5nKCkucmVxdWlyZWQpIHtcbiAgICAgICAgICB0aGlzLm9wZW5NRkFWZXJpZnlNb2RhbCgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGFuZGxlTG9naW5TdWNjZXNzKHByb3ZpZGVyKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICB0aGlzLmlzT0F1dGhMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gKGVyciBhcyB7IGNvZGU/OiBzdHJpbmcgfSk/LmNvZGU7XG4gICAgICAgIGlmIChlcnJvckNvZGUgPT09ICdQT1BVUF9DTE9TRUQnKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIsICdvYXV0aCcpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBSRUdJU1RFUiBIQU5ETEVSU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBvcGVuUmVnaXN0ZXJNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzUmVnaXN0ZXJNb2RhbE9wZW4gPSB0cnVlO1xuICB9XG5cbiAgY2xvc2VSZWdpc3Rlck1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuaXNSZWdpc3Rlck1vZGFsT3BlbiA9IGZhbHNlO1xuICB9XG5cbiAgcmVnaXN0ZXJIYW5kbGVyKGV2ZW50OiBGb3JtU3VibWl0KTogdm9pZCB7XG4gICAgY29uc3QgbmFtZSA9IGV2ZW50LmZpZWxkc1snbmFtZSddO1xuICAgIGNvbnN0IGVtYWlsID0gZXZlbnQuZmllbGRzWydlbWFpbCddO1xuICAgIGNvbnN0IHBhc3N3b3JkID0gZXZlbnQuZmllbGRzWydwYXNzd29yZCddO1xuXG4gICAgaWYgKCFuYW1lIHx8ICFlbWFpbCB8fCAhcGFzc3dvcmQpIHtcbiAgICAgIHRoaXMuc2hvd1RvYXN0KHRoaXMudCgnY29tcGxldGVBbGxGaWVsZHMnKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fcmVnaXN0ZXJGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5XT1JLSU5HKTtcblxuICAgIHRoaXMuYXV0aFNlcnZpY2Uuc2lnbnVwKHsgbmFtZSwgZW1haWwsIHBhc3N3b3JkIH0pLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuX3JlZ2lzdGVyRm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gICAgICAgIHRoaXMuY2xvc2VSZWdpc3Rlck1vZGFsKCk7XG4gICAgICAgIHRoaXMub3BlblZlcmlmeU1vZGFsKGVtYWlsKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICB0aGlzLl9yZWdpc3RlckZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVyciwgJ3NpZ251cCcpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBWRVJJRlkgRU1BSUwgSEFORExFUlNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgb3BlblZlcmlmeU1vZGFsKGVtYWlsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnBlbmRpbmdWZXJpZmljYXRpb25FbWFpbCA9IGVtYWlsO1xuICAgIHRoaXMuX3ZlcmlmeUZvcm1TZWN0aW9uTmFtZS5zZXQoYCR7dGhpcy50KCd2ZXJpZnlEZXNjcmlwdGlvbicpLnJlcGxhY2UoJy4nLCAnJyl9ICgke2VtYWlsfSlgKTtcbiAgICB0aGlzLl92ZXJpZnlGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgICB0aGlzLmlzVmVyaWZ5TW9kYWxPcGVuID0gdHJ1ZTtcbiAgICB0aGlzLnN0YXJ0UmVzZW5kQ29vbGRvd24oKTtcbiAgfVxuXG4gIGNsb3NlVmVyaWZ5TW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5pc1ZlcmlmeU1vZGFsT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMucGVuZGluZ1ZlcmlmaWNhdGlvbkVtYWlsID0gJyc7XG4gICAgdGhpcy5fdmVyaWZ5Rm9ybVNlY3Rpb25OYW1lLnNldCgnJyk7XG4gICAgdGhpcy5zdG9wUmVzZW5kQ29vbGRvd24oKTtcbiAgfVxuXG4gIHZlcmlmeUhhbmRsZXIoZXZlbnQ6IEZvcm1TdWJtaXQpOiB2b2lkIHtcbiAgICBjb25zdCBjb2RlID0gZXZlbnQuZmllbGRzWydjb2RlJ107XG5cbiAgICB0aGlzLl92ZXJpZnlGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5XT1JLSU5HKTtcblxuICAgIHRoaXMuYXV0aFNlcnZpY2VcbiAgICAgIC52ZXJpZnlFbWFpbCh7XG4gICAgICAgIGVtYWlsOiB0aGlzLnBlbmRpbmdWZXJpZmljYXRpb25FbWFpbCxcbiAgICAgICAgY29kZSxcbiAgICAgIH0pXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX3ZlcmlmeUZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICAgICAgICAgIHRoaXMuc2hvd1RvYXN0KHRoaXMudCgnZW1haWxWZXJpZmllZCcpKTtcbiAgICAgICAgICB0aGlzLmNsb3NlVmVyaWZ5TW9kYWwoKTtcbiAgICAgICAgICB0aGlzLmhhbmRsZUxvZ2luU3VjY2VzcygpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgIHRoaXMuX3ZlcmlmeUZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyLCAndmVyaWZ5Jyk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIHJlc2VuZENvZGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVzZW5kQ29vbGRvd24gPiAwKSByZXR1cm47XG5cbiAgICB0aGlzLmF1dGhTZXJ2aWNlXG4gICAgICAucmVzZW5kQ29kZSh7XG4gICAgICAgIGVtYWlsOiB0aGlzLnBlbmRpbmdWZXJpZmljYXRpb25FbWFpbCxcbiAgICAgICAgdHlwZTogJ0VNQUlMX1ZFUklGWScsXG4gICAgICB9KVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnNob3dUb2FzdCh0aGlzLnQoJ2NvZGVTZW50JykpO1xuICAgICAgICAgIHRoaXMuc3RhcnRSZXNlbmRDb29sZG93bigpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyLCAndmVyaWZ5Jyk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBNRkEgSEFORExFUlNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgb3Blbk1GQVZlcmlmeU1vZGFsKCk6IHZvaWQge1xuICAgIGNvbnN0IG1ldGhvZCA9IHRoaXMuYXV0aFNlcnZpY2UubWZhUGVuZGluZygpLm1ldGhvZCBhcyAnVE9UUCcgfCAnRU1BSUwnIHwgJ1NNUyc7XG4gICAgdGhpcy5fbWZhTWV0aG9kLnNldChtZXRob2QpO1xuICAgIHRoaXMuX21mYVZlcmlmeUZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICAgIHRoaXMuaXNNRkFWZXJpZnlNb2RhbE9wZW4gPSB0cnVlO1xuXG4gICAgdGhpcy5vbk1GQVJlcXVpcmVkLmVtaXQoeyBtZXRob2QgfSk7XG4gIH1cblxuICBjbG9zZU1GQVZlcmlmeU1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuaXNNRkFWZXJpZnlNb2RhbE9wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIHZlcmlmeU1GQUhhbmRsZXIoZXZlbnQ6IEZvcm1TdWJtaXQpOiB2b2lkIHtcbiAgICBjb25zdCBjb2RlID0gZXZlbnQuZmllbGRzWydjb2RlJ107XG5cbiAgICB0aGlzLl9tZmFWZXJpZnlGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5XT1JLSU5HKTtcblxuICAgIHRoaXMuYXV0aFNlcnZpY2UudmVyaWZ5TUZBKGNvZGUpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuX21mYVZlcmlmeUZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICAgICAgICB0aGlzLmNsb3NlTUZBVmVyaWZ5TW9kYWwoKTtcbiAgICAgICAgdGhpcy5oYW5kbGVMb2dpblN1Y2Nlc3ModW5kZWZpbmVkLCB0cnVlKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICB0aGlzLl9tZmFWZXJpZnlGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIsICdtZmEnKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRk9SR09UIFBBU1NXT1JEIEhBTkRMRVJTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIG9wZW5Gb3Jnb3RQYXNzd29yZE1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuaXNGb3Jnb3RQYXNzd29yZE1vZGFsT3BlbiA9IHRydWU7XG4gIH1cblxuICBjbG9zZUZvcmdvdFBhc3N3b3JkTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5pc0ZvcmdvdFBhc3N3b3JkTW9kYWxPcGVuID0gZmFsc2U7XG4gIH1cblxuICBmb3Jnb3RQYXNzd29yZEhhbmRsZXIoZXZlbnQ6IEZvcm1TdWJtaXQpOiB2b2lkIHtcbiAgICBjb25zdCBlbWFpbCA9IGV2ZW50LmZpZWxkc1snZW1haWwnXTtcblxuICAgIGlmICghZW1haWwpIHtcbiAgICAgIHRoaXMuc2hvd1RvYXN0KHRoaXMudCgnZW50ZXJFbWFpbCcpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9mb3Jnb3RQYXNzd29yZEZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLldPUktJTkcpO1xuXG4gICAgdGhpcy5hdXRoU2VydmljZS5mb3Jnb3RQYXNzd29yZCh7IGVtYWlsIH0pLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuX2ZvcmdvdFBhc3N3b3JkRm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gICAgICAgIHRoaXMuY2xvc2VGb3Jnb3RQYXNzd29yZE1vZGFsKCk7XG4gICAgICAgIHRoaXMub3BlblJlc2V0UGFzc3dvcmRNb2RhbChlbWFpbCk7XG4gICAgICAgIHRoaXMuc2hvd1RvYXN0KHRoaXMudCgnY29kZVNlbnQnKSk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5fZm9yZ290UGFzc3dvcmRGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIsICdmb3Jnb3QnKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUkVTRVQgUEFTU1dPUkQgSEFORExFUlNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgb3BlblJlc2V0UGFzc3dvcmRNb2RhbChlbWFpbDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wZW5kaW5nUmVzZXRFbWFpbCA9IGVtYWlsO1xuICAgIHRoaXMuX3Jlc2V0Rm9ybVNlY3Rpb25OYW1lLnNldChgJHt0aGlzLnQoJ3Jlc2V0RGVzY3JpcHRpb24nKS5yZXBsYWNlKCcuJywgJycpfSAoJHtlbWFpbH0pYCk7XG4gICAgdGhpcy5fcmVzZXRQYXNzd29yZEZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICAgIHRoaXMuaXNSZXNldFBhc3N3b3JkTW9kYWxPcGVuID0gdHJ1ZTtcbiAgICB0aGlzLnN0YXJ0UmVzZXRSZXNlbmRDb29sZG93bigpO1xuICB9XG5cbiAgY2xvc2VSZXNldFBhc3N3b3JkTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5pc1Jlc2V0UGFzc3dvcmRNb2RhbE9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLnBlbmRpbmdSZXNldEVtYWlsID0gJyc7XG4gICAgdGhpcy5fcmVzZXRGb3JtU2VjdGlvbk5hbWUuc2V0KCcnKTtcbiAgICB0aGlzLnN0b3BSZXNldFJlc2VuZENvb2xkb3duKCk7XG4gIH1cblxuICByZXNldFBhc3N3b3JkSGFuZGxlcihldmVudDogRm9ybVN1Ym1pdCk6IHZvaWQge1xuICAgIGNvbnN0IGNvZGUgPSBldmVudC5maWVsZHNbJ2NvZGUnXTtcbiAgICBjb25zdCBuZXdQYXNzd29yZCA9IGV2ZW50LmZpZWxkc1snbmV3UGFzc3dvcmQnXTtcblxuICAgIHRoaXMuX3Jlc2V0UGFzc3dvcmRGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5XT1JLSU5HKTtcblxuICAgIHRoaXMuYXV0aFNlcnZpY2VcbiAgICAgIC5yZXNldFBhc3N3b3JkKHtcbiAgICAgICAgZW1haWw6IHRoaXMucGVuZGluZ1Jlc2V0RW1haWwsXG4gICAgICAgIGNvZGUsXG4gICAgICAgIG5ld1Bhc3N3b3JkLFxuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fcmVzZXRQYXNzd29yZEZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICAgICAgICAgIHRoaXMuc2hvd1RvYXN0KHRoaXMudCgncGFzc3dvcmRVcGRhdGVkJykpO1xuICAgICAgICAgIHRoaXMuY2xvc2VSZXNldFBhc3N3b3JkTW9kYWwoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICB0aGlzLl9yZXNldFBhc3N3b3JkRm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIsICdyZXNldCcpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gIH1cblxuICByZXNlbmRSZXNldENvZGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVzZXRSZXNlbmRDb29sZG93biA+IDApIHJldHVybjtcblxuICAgIHRoaXMuYXV0aFNlcnZpY2VcbiAgICAgIC5yZXNlbmRDb2RlKHtcbiAgICAgICAgZW1haWw6IHRoaXMucGVuZGluZ1Jlc2V0RW1haWwsXG4gICAgICAgIHR5cGU6ICdQQVNTV09SRF9SRVNFVCcsXG4gICAgICB9KVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnNob3dUb2FzdCh0aGlzLnQoJ2NvZGVTZW50JykpO1xuICAgICAgICAgIHRoaXMuc3RhcnRSZXNldFJlc2VuZENvb2xkb3duKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIsICdyZXNldCcpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gSEVMUEVSU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBwcml2YXRlIGhhbmRsZUxvZ2luU3VjY2VzcyhvYXV0aFByb3ZpZGVyPzogJ2dvb2dsZScgfCAnYXBwbGUnIHwgJ21pY3Jvc29mdCcsIG1mYUNvbXBsZXRlZD86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnNob3dUb2FzdCh0aGlzLnQoJ3dlbGNvbWUnKSk7XG5cbiAgICB0aGlzLm9uU3VjY2Vzcy5lbWl0KHtcbiAgICAgIHVzZXI6IHRoaXMuYXV0aFNlcnZpY2UudXNlcigpLFxuICAgICAgbWZhQ29tcGxldGVkLFxuICAgICAgb2F1dGhQcm92aWRlcixcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnByb3BzLnJlZGlyZWN0T25TdWNjZXNzKSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5wcm9wcy5yZWRpcmVjdE9uU3VjY2Vzc10pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRXJyb3IoZXJyOiB1bmtub3duLCBvcGVyYXRpb246IExvZ2luRXJyb3JFdmVudFsnb3BlcmF0aW9uJ10pOiB2b2lkIHtcbiAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyKTtcbiAgICB0aGlzLnNob3dUb2FzdChtZXNzYWdlKTtcblxuICAgIHRoaXMub25FcnJvci5lbWl0KHtcbiAgICAgIGNvZGU6IChlcnIgYXMgeyBjb2RlPzogc3RyaW5nIH0pPy5jb2RlLFxuICAgICAgbWVzc2FnZSxcbiAgICAgIG9wZXJhdGlvbixcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd1RvYXN0KG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3coe1xuICAgICAgbWVzc2FnZSxcbiAgICAgIGR1cmF0aW9uOiAzNTAwLFxuICAgICAgcG9zaXRpb246ICd0b3AnLFxuICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RXJyb3JNZXNzYWdlKGVycjogdW5rbm93bik6IHN0cmluZyB7XG4gICAgY29uc3QgZXJyb3IgPSBlcnIgYXMge1xuICAgICAgZXJyb3I/OiB7IG1lc3NhZ2U/OiBzdHJpbmc7IGNvZGU/OiBzdHJpbmcgfTtcbiAgICAgIGNvZGU/OiBzdHJpbmc7XG4gICAgfTtcblxuICAgIC8vIE1hcCBlcnJvciBjb2RlcyB0byBpMThuIGtleXNcbiAgICBjb25zdCBlcnJvcktleU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgIC8vIFNpZ25pblxuICAgICAgQVVUSFYyX0lOVkFMSURfQ1JFREVOVElBTFM6ICdlcnJvckludmFsaWRDcmVkZW50aWFscycsXG4gICAgICBBVVRIVjJfRU1BSUxfTk9UX1ZFUklGSUVEOiAnZXJyb3JFbWFpbE5vdFZlcmlmaWVkJyxcbiAgICAgIEFVVEhWMl9BQ0NPVU5UX1NVU1BFTkRFRDogJ2Vycm9yQWNjb3VudFN1c3BlbmRlZCcsXG5cbiAgICAgIC8vIFNpZ251cFxuICAgICAgQVVUSFYyX0VNQUlMX0VYSVNUUzogJ2Vycm9yRW1haWxFeGlzdHMnLFxuICAgICAgQVVUSFYyX1dFQUtfUEFTU1dPUkQ6ICdlcnJvcldlYWtQYXNzd29yZCcsXG5cbiAgICAgIC8vIFZlcmlmaWNhdGlvbiBjb2Rlc1xuICAgICAgQVVUSFYyX0lOVkFMSURfQ09ERTogJ2Vycm9ySW52YWxpZENvZGUnLFxuICAgICAgQVVUSFYyX0VYUElSRURfQ09ERTogJ2Vycm9yRXhwaXJlZENvZGUnLFxuICAgICAgQVVUSFYyX0NPREVfRVhQSVJFRDogJ2Vycm9yRXhwaXJlZENvZGUnLFxuICAgICAgQVVUSFYyX1RPT19NQU5ZX0FUVEVNUFRTOiAnZXJyb3JUb29NYW55QXR0ZW1wdHMnLFxuXG4gICAgICAvLyBNRkFcbiAgICAgIEFVVEhWMl9NRkFfSU5WQUxJRF9DT0RFOiAnZXJyb3JNRkFJbnZhbGlkQ29kZScsXG5cbiAgICAgIC8vIE9BdXRoXG4gICAgICBQT1BVUF9CTE9DS0VEOiAnZXJyb3JQb3B1cEJsb2NrZWQnLFxuICAgICAgT0FVVEhfRkFJTEVEOiAnZXJyb3JPQXV0aEZhaWxlZCcsXG4gICAgfTtcblxuICAgIGNvbnN0IGVycm9yQ29kZSA9IGVycm9yPy5lcnJvcj8uY29kZSB8fCBlcnJvcj8uY29kZTtcbiAgICBpZiAoZXJyb3JDb2RlICYmIGVycm9yS2V5TWFwW2Vycm9yQ29kZV0pIHtcbiAgICAgIHJldHVybiB0aGlzLnQoZXJyb3JLZXlNYXBbZXJyb3JDb2RlXSk7XG4gICAgfVxuXG4gICAgaWYgKGVycm9yPy5lcnJvcj8ubWVzc2FnZSkge1xuICAgICAgcmV0dXJuIGVycm9yLmVycm9yLm1lc3NhZ2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudCgnZXJyb3JHZW5lcmljJyk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gQ09PTERPV04gVElNRVJTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHByaXZhdGUgc3RhcnRSZXNlbmRDb29sZG93bigpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2VuZENvb2xkb3duID0gMzA7XG4gICAgdGhpcy5yZXNlbmRUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMucmVzZW5kQ29vbGRvd24tLTtcbiAgICAgIGlmICh0aGlzLnJlc2VuZENvb2xkb3duIDw9IDApIHtcbiAgICAgICAgdGhpcy5zdG9wUmVzZW5kQ29vbGRvd24oKTtcbiAgICAgIH1cbiAgICB9LCAxMDAwKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcFJlc2VuZENvb2xkb3duKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlc2VuZFRpbWVyKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMucmVzZW5kVGltZXIpO1xuICAgICAgdGhpcy5yZXNlbmRUaW1lciA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMucmVzZW5kQ29vbGRvd24gPSAwO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydFJlc2V0UmVzZW5kQ29vbGRvd24oKTogdm9pZCB7XG4gICAgdGhpcy5yZXNldFJlc2VuZENvb2xkb3duID0gMzA7XG4gICAgdGhpcy5yZXNldFJlc2VuZFRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5yZXNldFJlc2VuZENvb2xkb3duLS07XG4gICAgICBpZiAodGhpcy5yZXNldFJlc2VuZENvb2xkb3duIDw9IDApIHtcbiAgICAgICAgdGhpcy5zdG9wUmVzZXRSZXNlbmRDb29sZG93bigpO1xuICAgICAgfVxuICAgIH0sIDEwMDApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdG9wUmVzZXRSZXNlbmRDb29sZG93bigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZXNldFJlc2VuZFRpbWVyKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMucmVzZXRSZXNlbmRUaW1lcik7XG4gICAgICB0aGlzLnJlc2V0UmVzZW5kVGltZXIgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLnJlc2V0UmVzZW5kQ29vbGRvd24gPSAwO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdG9wUmVzZW5kQ29vbGRvd24oKTtcbiAgICB0aGlzLnN0b3BSZXNldFJlc2VuZENvb2xkb3duKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ2YWwtbG9naW5cIiBbY2xhc3MudmFsLWxvZ2luLS1jYXJkXT1cImNvbmZpZy5zaG93Q2FyZFwiPlxuICA8IS0tIExvZ28gLS0+XG4gIEBpZiAocHJvcHMubG9nbykge1xuICA8ZGl2IGNsYXNzPVwibG9nby1jb250YWluZXJcIj5cbiAgICA8dmFsLWltYWdlIFtwcm9wc109XCJwcm9wcy5sb2dvXCIgLz5cbiAgPC9kaXY+XG4gIH1cblxuICA8IS0tIExvZ2luIEZvcm0gLS0+XG4gIDx2YWwtZm9ybSBbcHJvcHNdPVwibG9naW5Gb3JtUHJvcHMoKVwiIChvblN1Ym1pdCk9XCJsb2dpbkhhbmRsZXIoJGV2ZW50KVwiIC8+XG5cbiAgPCEtLSBPQXV0aCBTZWN0aW9uIC0tPlxuICBAaWYgKGNvbmZpZy5zaG93T0F1dGggJiYgY29uZmlnLm9hdXRoUHJvdmlkZXJzLmxlbmd0aCA+IDApIHtcbiAgPGRpdiBjbGFzcz1cIm9hdXRoLXNlcGFyYXRvclwiPlxuICAgIDxzcGFuPnt7IHQoJ29yQ29udGludWVXaXRoJykgfX08L3NwYW4+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJvYXV0aC1idXR0b25zXCI+XG4gICAgQGZvciAocHJvdmlkZXIgb2YgY29uZmlnLm9hdXRoUHJvdmlkZXJzOyB0cmFjayBwcm92aWRlcikge1xuICAgIDxpb24tYnV0dG9uXG4gICAgICBleHBhbmQ9XCJibG9ja1wiXG4gICAgICBmaWxsPVwib3V0bGluZVwiXG4gICAgICBjb2xvcj1cImRhcmtcIlxuICAgICAgKGNsaWNrKT1cImxvZ2luV2l0aE9BdXRoKHByb3ZpZGVyKVwiXG4gICAgICBbZGlzYWJsZWRdPVwiaXNPQXV0aExvYWRpbmdcIlxuICAgID5cbiAgICAgIEBzd2l0Y2ggKHByb3ZpZGVyKSB7IEBjYXNlICgnZ29vZ2xlJykge1xuICAgICAgPGlvbi1pY29uIHNsb3Q9XCJzdGFydFwiIG5hbWU9XCJsb2dvLWdvb2dsZVwiPjwvaW9uLWljb24+XG4gICAgICB7eyBpc09BdXRoTG9hZGluZyA/IHQoJ2Nvbm5lY3RpbmcnKSA6IHQoJ2NvbnRpbnVlV2l0aEdvb2dsZScpIH19IH0gQGNhc2UgKCdhcHBsZScpIHtcbiAgICAgIDxpb24taWNvbiBzbG90PVwic3RhcnRcIiBuYW1lPVwibG9nby1hcHBsZVwiPjwvaW9uLWljb24+XG4gICAgICB7eyBpc09BdXRoTG9hZGluZyA/IHQoJ2Nvbm5lY3RpbmcnKSA6IHQoJ2NvbnRpbnVlV2l0aEFwcGxlJykgfX0gfSBAY2FzZSAoJ21pY3Jvc29mdCcpIHtcbiAgICAgIDxpb24taWNvbiBzbG90PVwic3RhcnRcIiBuYW1lPVwibG9nby1taWNyb3NvZnRcIj48L2lvbi1pY29uPlxuICAgICAge3sgaXNPQXV0aExvYWRpbmcgPyB0KCdjb25uZWN0aW5nJykgOiB0KCdjb250aW51ZVdpdGhNaWNyb3NvZnQnKSB9fSB9IH1cbiAgICA8L2lvbi1idXR0b24+XG4gICAgfVxuICA8L2Rpdj5cbiAgfVxuXG4gIDwhLS0gUmVnaXN0ZXIgTGluayAtLT5cbiAgQGlmIChjb25maWcuc2hvd1JlZ2lzdGVyKSB7XG4gIDxkaXYgY2xhc3M9XCJhdXRoLWxpbmtcIj5cbiAgICA8aW9uLXRleHQgY29sb3I9XCJkYXJrXCI+XG4gICAgICB7eyB0KCdub0FjY291bnQnKSB9fVxuICAgICAgPGEgKGNsaWNrKT1cIm9wZW5SZWdpc3Rlck1vZGFsKClcIj57eyB0KCdyZWdpc3RlcicpIH19PC9hPlxuICAgIDwvaW9uLXRleHQ+XG4gIDwvZGl2PlxuICB9XG5cbiAgPCEtLSBGb3Jnb3QgUGFzc3dvcmQgTGluayAtLT5cbiAgQGlmIChjb25maWcuc2hvd0ZvcmdvdFBhc3N3b3JkKSB7XG4gIDxkaXYgY2xhc3M9XCJhdXRoLWxpbmsgZm9yZ290LXBhc3N3b3JkXCI+XG4gICAgPGlvbi10ZXh0IGNvbG9yPVwiZGFya1wiPlxuICAgICAge3sgdCgnZm9yZ290TGluaycpIH19XG4gICAgICA8YSAoY2xpY2spPVwib3BlbkZvcmdvdFBhc3N3b3JkTW9kYWwoKVwiPnt7IHQoJ3JlY292ZXJQYXNzd29yZCcpIH19PC9hPlxuICAgIDwvaW9uLXRleHQ+XG4gIDwvZGl2PlxuICB9XG5cbiAgPCEtLSBMZWdhbCBOb3RpY2UgLS0+XG4gIEBpZiAocHJvcHMubGVnYWwpIHtcbiAgPGRpdiBjbGFzcz1cImxlZ2FsLW5vdGljZVwiPlxuICAgIDxpb24tdGV4dCBjb2xvcj1cImRhcmtcIj5cbiAgICAgIDxwPlxuICAgICAgICB7eyB0KCdsZWdhbFByZWZpeCcpIH19IEBpZiAocHJvcHMubGVnYWwuY29tcGFueUxpbmspIHtcbiAgICAgICAgPGEgW2hyZWZdPVwicHJvcHMubGVnYWwuY29tcGFueUxpbmtcIj48c3Ryb25nPnt7IHByb3BzLmxlZ2FsLmNvbXBhbnlOYW1lIH19PC9zdHJvbmc+PC9hPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgPHN0cm9uZz57eyBwcm9wcy5sZWdhbC5jb21wYW55TmFtZSB9fTwvc3Ryb25nPlxuICAgICAgICB9IHt7IHQoJ2xlZ2FsU3VmZml4JykgfX0gQGlmIChwcm9wcy5sZWdhbC50ZXJtc0xpbmspIHtcbiAgICAgICAgPGEgW2hyZWZdPVwicHJvcHMubGVnYWwudGVybXNMaW5rXCI+e3sgdCgndGVybXNBbmRDb25kaXRpb25zJykgfX08L2E+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8c3Bhbj57eyB0KCd0ZXJtc0FuZENvbmRpdGlvbnMnKSB9fTwvc3Bhbj5cbiAgICAgICAgfSB7eyB0KCdhbmQnKSB9fSBAaWYgKHByb3BzLmxlZ2FsLnByaXZhY3lMaW5rKSB7XG4gICAgICAgIDxhIFtocmVmXT1cInByb3BzLmxlZ2FsLnByaXZhY3lMaW5rXCI+e3sgdCgncHJpdmFjeVBvbGljeScpIH19PC9hPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgPHNwYW4+e3sgdCgncHJpdmFjeVBvbGljeScpIH19PC9zcGFuPlxuICAgICAgICB9LlxuICAgICAgPC9wPlxuICAgIDwvaW9uLXRleHQ+XG4gIDwvZGl2PlxuICB9XG48L2Rpdj5cblxuPCEtLSBSZWdpc3RlciBNb2RhbCAtLT5cbjxpb24tbW9kYWwgW2lzT3Blbl09XCJpc1JlZ2lzdGVyTW9kYWxPcGVuXCIgKGRpZERpc21pc3MpPVwiY2xvc2VSZWdpc3Rlck1vZGFsKClcIj5cbiAgPG5nLXRlbXBsYXRlPlxuICAgIDxpb24taGVhZGVyPlxuICAgICAgPGlvbi10b29sYmFyPlxuICAgICAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cImVuZFwiPlxuICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIChjbGljayk9XCJjbG9zZVJlZ2lzdGVyTW9kYWwoKVwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZS1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgICA8L2lvbi10b29sYmFyPlxuICAgIDwvaW9uLWhlYWRlcj5cbiAgICA8aW9uLWNvbnRlbnQgY2xhc3M9XCJpb24tcGFkZGluZ1wiPlxuICAgICAgPHNlY3Rpb24gY2xhc3M9XCJtb2RhbC1mb3JtLXNlY3Rpb25cIj5cbiAgICAgICAgQGlmIChwcm9wcy5sb2dvKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2dvLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDx2YWwtaW1hZ2UgW3Byb3BzXT1cInByb3BzLmxvZ29cIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8dmFsLWZvcm0gW3Byb3BzXT1cInJlZ2lzdGVyRm9ybVByb3BzKClcIiAob25TdWJtaXQpPVwicmVnaXN0ZXJIYW5kbGVyKCRldmVudClcIiAvPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXV0aC1saW5rXCI+XG4gICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwiZGFya1wiPlxuICAgICAgICAgICAge3sgdCgnaGFzQWNjb3VudCcpIH19XG4gICAgICAgICAgICA8YSAoY2xpY2spPVwiY2xvc2VSZWdpc3Rlck1vZGFsKClcIj57eyB0KCdzaWduSW4nKSB9fTwvYT5cbiAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc2VjdGlvbj5cbiAgICA8L2lvbi1jb250ZW50PlxuICA8L25nLXRlbXBsYXRlPlxuPC9pb24tbW9kYWw+XG5cbjwhLS0gVmVyaWZ5IEVtYWlsIE1vZGFsIC0tPlxuPGlvbi1tb2RhbCBbaXNPcGVuXT1cImlzVmVyaWZ5TW9kYWxPcGVuXCIgW2JhY2tkcm9wRGlzbWlzc109XCJmYWxzZVwiPlxuICA8bmctdGVtcGxhdGU+XG4gICAgPGlvbi1oZWFkZXI+XG4gICAgICA8aW9uLXRvb2xiYXI+XG4gICAgICAgIDxpb24tYnV0dG9ucyBzbG90PVwiZW5kXCI+XG4gICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cImNsZWFyXCIgKGNsaWNrKT1cImNsb3NlVmVyaWZ5TW9kYWwoKVwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZS1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgICA8L2lvbi10b29sYmFyPlxuICAgIDwvaW9uLWhlYWRlcj5cbiAgICA8aW9uLWNvbnRlbnQgY2xhc3M9XCJpb24tcGFkZGluZ1wiPlxuICAgICAgPHNlY3Rpb24gY2xhc3M9XCJtb2RhbC1mb3JtLXNlY3Rpb25cIj5cbiAgICAgICAgQGlmIChwcm9wcy5sb2dvKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2dvLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDx2YWwtaW1hZ2UgW3Byb3BzXT1cInByb3BzLmxvZ29cIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8dmFsLWZvcm0gW3Byb3BzXT1cInZlcmlmeUZvcm1Qcm9wcygpXCIgKG9uU3VibWl0KT1cInZlcmlmeUhhbmRsZXIoJGV2ZW50KVwiIC8+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZXNlbmQtbGlua1wiPlxuICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cImRhcmtcIj5cbiAgICAgICAgICAgIHt7IHQoJ25vQ29kZVJlY2VpdmVkJykgfX0gQGlmIChyZXNlbmRDb29sZG93biA+IDApIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29vbGRvd25cIj57eyB0KCdyZXNlbmRJbicsIHsgc2Vjb25kczogcmVzZW5kQ29vbGRvd24udG9TdHJpbmcoKSB9KSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPGEgKGNsaWNrKT1cInJlc2VuZENvZGUoKVwiPnt7IHQoJ3Jlc2VuZCcpIH19PC9hPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvaW9uLWNvbnRlbnQ+XG4gIDwvbmctdGVtcGxhdGU+XG48L2lvbi1tb2RhbD5cblxuPCEtLSBGb3Jnb3QgUGFzc3dvcmQgTW9kYWwgLS0+XG48aW9uLW1vZGFsIFtpc09wZW5dPVwiaXNGb3Jnb3RQYXNzd29yZE1vZGFsT3BlblwiIChkaWREaXNtaXNzKT1cImNsb3NlRm9yZ290UGFzc3dvcmRNb2RhbCgpXCI+XG4gIDxuZy10ZW1wbGF0ZT5cbiAgICA8aW9uLWhlYWRlcj5cbiAgICAgIDxpb24tdG9vbGJhcj5cbiAgICAgICAgPGlvbi1idXR0b25zIHNsb3Q9XCJlbmRcIj5cbiAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwiY2xlYXJcIiAoY2xpY2spPVwiY2xvc2VGb3Jnb3RQYXNzd29yZE1vZGFsKClcIj5cbiAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2xvc2Utb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICA8L2lvbi1idXR0b25zPlxuICAgICAgPC9pb24tdG9vbGJhcj5cbiAgICA8L2lvbi1oZWFkZXI+XG4gICAgPGlvbi1jb250ZW50IGNsYXNzPVwiaW9uLXBhZGRpbmdcIj5cbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwibW9kYWwtZm9ybS1zZWN0aW9uXCI+XG4gICAgICAgIEBpZiAocHJvcHMubG9nbykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwibG9nby1jb250YWluZXJcIj5cbiAgICAgICAgICA8dmFsLWltYWdlIFtwcm9wc109XCJwcm9wcy5sb2dvXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPHZhbC1mb3JtIFtwcm9wc109XCJmb3Jnb3RQYXNzd29yZEZvcm1Qcm9wcygpXCIgKG9uU3VibWl0KT1cImZvcmdvdFBhc3N3b3JkSGFuZGxlcigkZXZlbnQpXCIgLz5cbiAgICAgIDwvc2VjdGlvbj5cbiAgICA8L2lvbi1jb250ZW50PlxuICA8L25nLXRlbXBsYXRlPlxuPC9pb24tbW9kYWw+XG5cbjwhLS0gUmVzZXQgUGFzc3dvcmQgTW9kYWwgLS0+XG48aW9uLW1vZGFsIFtpc09wZW5dPVwiaXNSZXNldFBhc3N3b3JkTW9kYWxPcGVuXCIgW2JhY2tkcm9wRGlzbWlzc109XCJmYWxzZVwiPlxuICA8bmctdGVtcGxhdGU+XG4gICAgPGlvbi1oZWFkZXI+XG4gICAgICA8aW9uLXRvb2xiYXI+XG4gICAgICAgIDxpb24tYnV0dG9ucyBzbG90PVwiZW5kXCI+XG4gICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cImNsZWFyXCIgKGNsaWNrKT1cImNsb3NlUmVzZXRQYXNzd29yZE1vZGFsKClcIj5cbiAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2xvc2Utb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICA8L2lvbi1idXR0b25zPlxuICAgICAgPC9pb24tdG9vbGJhcj5cbiAgICA8L2lvbi1oZWFkZXI+XG4gICAgPGlvbi1jb250ZW50IGNsYXNzPVwiaW9uLXBhZGRpbmdcIj5cbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwibW9kYWwtZm9ybS1zZWN0aW9uXCI+XG4gICAgICAgIEBpZiAocHJvcHMubG9nbykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwibG9nby1jb250YWluZXJcIj5cbiAgICAgICAgICA8dmFsLWltYWdlIFtwcm9wc109XCJwcm9wcy5sb2dvXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPHZhbC1mb3JtIFtwcm9wc109XCJyZXNldFBhc3N3b3JkRm9ybVByb3BzKClcIiAob25TdWJtaXQpPVwicmVzZXRQYXNzd29yZEhhbmRsZXIoJGV2ZW50KVwiIC8+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZXNlbmQtbGlua1wiPlxuICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cImRhcmtcIj5cbiAgICAgICAgICAgIHt7IHQoJ25vQ29kZVJlY2VpdmVkJykgfX0gQGlmIChyZXNldFJlc2VuZENvb2xkb3duID4gMCkge1xuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb29sZG93blwiPnt7IHQoJ3Jlc2VuZEluJywgeyBzZWNvbmRzOiByZXNldFJlc2VuZENvb2xkb3duLnRvU3RyaW5nKCkgfSkgfX08L3NwYW4+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxhIChjbGljayk9XCJyZXNlbmRSZXNldENvZGUoKVwiPnt7IHQoJ3Jlc2VuZCcpIH19PC9hPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvaW9uLWNvbnRlbnQ+XG4gIDwvbmctdGVtcGxhdGU+XG48L2lvbi1tb2RhbD5cblxuPCEtLSBNRkEgVmVyaWZ5IE1vZGFsIC0tPlxuPGlvbi1tb2RhbCBbaXNPcGVuXT1cImlzTUZBVmVyaWZ5TW9kYWxPcGVuXCIgW2JhY2tkcm9wRGlzbWlzc109XCJmYWxzZVwiPlxuICA8bmctdGVtcGxhdGU+XG4gICAgPGlvbi1oZWFkZXI+XG4gICAgICA8aW9uLXRvb2xiYXI+XG4gICAgICAgIDxpb24tYnV0dG9ucyBzbG90PVwiZW5kXCI+XG4gICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cImNsZWFyXCIgKGNsaWNrKT1cImNsb3NlTUZBVmVyaWZ5TW9kYWwoKVwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZS1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgICA8L2lvbi10b29sYmFyPlxuICAgIDwvaW9uLWhlYWRlcj5cbiAgICA8aW9uLWNvbnRlbnQgY2xhc3M9XCJpb24tcGFkZGluZ1wiPlxuICAgICAgPHNlY3Rpb24gY2xhc3M9XCJtb2RhbC1mb3JtLXNlY3Rpb25cIj5cbiAgICAgICAgQGlmIChwcm9wcy5sb2dvKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2dvLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDx2YWwtaW1hZ2UgW3Byb3BzXT1cInByb3BzLmxvZ29cIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8dmFsLWZvcm0gW3Byb3BzXT1cIm1mYVZlcmlmeUZvcm1Qcm9wcygpXCIgKG9uU3VibWl0KT1cInZlcmlmeU1GQUhhbmRsZXIoJGV2ZW50KVwiIC8+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgPC9pb24tY29udGVudD5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvaW9uLW1vZGFsPlxuIl19
|
|
735
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9sb2dpbi9sb2dpbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2xvZ2luL2xvZ2luLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFhLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFNBQVMsRUFDVCxPQUFPLEVBQ1AsUUFBUSxFQUNSLE9BQU8sRUFDUCxVQUFVLEdBQ1gsTUFBTSwyQkFBMkIsQ0FBQztBQUVuQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQTRCLFNBQVMsRUFBRSxlQUFlLEVBQWtCLE1BQU0sYUFBYSxDQUFDO0FBQ25HLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFN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QUNQLFVBQVU7d0JBQ1YsYUFBYTt3QkFDYixjQUFjO3FCQUNmOzhCQUtRLEtBQUs7c0JBQWIsS0FBSztnQkFFSSxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPdXRwdXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtcbiAgSW9uQnV0dG9uLFxuICBJb25CdXR0b25zLFxuICBJb25Db250ZW50LFxuICBJb25IZWFkZXIsXG4gIElvbkljb24sXG4gIElvbk1vZGFsLFxuICBJb25UZXh0LFxuICBJb25Ub29sYmFyLFxufSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcblxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hdXRoJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3RvYXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgSTE4blNlcnZpY2UsIElucHV0STE4bkhlbHBlciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2kxOG4nO1xuaW1wb3J0IHsgRm9ybUNvbXBvbmVudCB9IGZyb20gJy4uL2Zvcm0vZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSW1hZ2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9pbWFnZS9pbWFnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm9ybU1ldGFkYXRhLCBGb3JtU3VibWl0LCBJbnB1dFR5cGUsIENvbXBvbmVudFN0YXRlcywgQ29tcG9uZW50U3RhdGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBTb2xpZERlZmF1bHRCbG9jayB9IGZyb20gJy4uLy4uL2F0b21zL2J1dHRvbi9mYWN0b3J5JztcbmltcG9ydCB7IExvZ2luTWV0YWRhdGEsIExvZ2luU3VjY2Vzc0V2ZW50LCBMb2dpbkVycm9yRXZlbnQsIE1GQVJlcXVpcmVkRXZlbnQsIExPR0lOX0RFRkFVTFRTIH0gZnJvbSAnLi90eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1sb2dpbicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgSW9uQnV0dG9uLFxuICAgIElvbkJ1dHRvbnMsXG4gICAgSW9uQ29udGVudCxcbiAgICBJb25IZWFkZXIsXG4gICAgSW9uSWNvbixcbiAgICBJb25Nb2RhbCxcbiAgICBJb25UZXh0LFxuICAgIElvblRvb2xiYXIsXG4gICAgRm9ybUNvbXBvbmVudCxcbiAgICBJbWFnZUNvbXBvbmVudCxcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2xvZ2luLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbG9naW4uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgTG9naW5Db21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBwcm9wczogTG9naW5NZXRhZGF0YSA9IHt9O1xuXG4gIEBPdXRwdXQoKSBvblN1Y2Nlc3MgPSBuZXcgRXZlbnRFbWl0dGVyPExvZ2luU3VjY2Vzc0V2ZW50PigpO1xuICBAT3V0cHV0KCkgb25FcnJvciA9IG5ldyBFdmVudEVtaXR0ZXI8TG9naW5FcnJvckV2ZW50PigpO1xuICBAT3V0cHV0KCkgb25NRkFSZXF1aXJlZCA9IG5ldyBFdmVudEVtaXR0ZXI8TUZBUmVxdWlyZWRFdmVudD4oKTtcblxuICAvLyBTZXJ2aWNlc1xuICBhdXRoU2VydmljZSA9IGluamVjdChBdXRoU2VydmljZSk7XG4gIHByaXZhdGUgdG9hc3RTZXJ2aWNlID0gaW5qZWN0KFRvYXN0U2VydmljZSk7XG4gIHByaXZhdGUgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIHByaXZhdGUgaTE4biA9IGluamVjdChJMThuU2VydmljZSk7XG4gIHByaXZhdGUgaTE4bkhlbHBlciA9IGluamVjdChJbnB1dEkxOG5IZWxwZXIpO1xuXG4gIC8qKlxuICAgKiBIZWxwZXIgbWV0aG9kIGZvciB0cmFuc2xhdGluZyBhdXRoLXJlbGF0ZWQgc3RyaW5ncy5cbiAgICogRXhwb3NlZCB0byB0ZW1wbGF0ZSBmb3IgZHluYW1pYyB0ZXh0LlxuICAgKi9cbiAgdChrZXk6IHN0cmluZywgZGF0YT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmkxOG4udChrZXksICdfYXV0aCcsIGRhdGEpO1xuICB9XG5cbiAgLy8gVGltZXJzXG4gIHByaXZhdGUgcmVzZW5kVGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHJlc2V0UmVzZW5kVGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPiB8IG51bGwgPSBudWxsO1xuXG4gIC8vIFN0YXRlXG4gIGlzT0F1dGhMb2FkaW5nID0gZmFsc2U7XG4gIGlzUmVnaXN0ZXJNb2RhbE9wZW4gPSBmYWxzZTtcbiAgaXNWZXJpZnlNb2RhbE9wZW4gPSBmYWxzZTtcbiAgaXNGb3Jnb3RQYXNzd29yZE1vZGFsT3BlbiA9IGZhbHNlO1xuICBpc1Jlc2V0UGFzc3dvcmRNb2RhbE9wZW4gPSBmYWxzZTtcbiAgaXNNRkFWZXJpZnlNb2RhbE9wZW4gPSBmYWxzZTtcblxuICBwZW5kaW5nVmVyaWZpY2F0aW9uRW1haWwgPSAnJztcbiAgcGVuZGluZ1Jlc2V0RW1haWwgPSAnJztcbiAgcmVzZW5kQ29vbGRvd24gPSAwO1xuICByZXNldFJlc2VuZENvb2xkb3duID0gMDtcblxuICAvLyBSZXNvbHZlZCBwcm9wcyB3aXRoIGRlZmF1bHRzXG4gIGdldCBjb25maWcoKTogUmVxdWlyZWQ8T21pdDxMb2dpbk1ldGFkYXRhLCAnbG9nbycgfCAnbGVnYWwnIHwgJ3JlZGlyZWN0T25TdWNjZXNzJz4+ICYgTG9naW5NZXRhZGF0YSB7XG4gICAgcmV0dXJuIHsgLi4uTE9HSU5fREVGQVVMVFMsIC4uLnRoaXMucHJvcHMgfTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBGT1JNIFNUQVRFIFNJR05BTFNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcHJpdmF0ZSBfbG9naW5Gb3JtU3RhdGUgPSBzaWduYWw8Q29tcG9uZW50U3RhdGU+KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgcHJpdmF0ZSBfcmVnaXN0ZXJGb3JtU3RhdGUgPSBzaWduYWw8Q29tcG9uZW50U3RhdGU+KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgcHJpdmF0ZSBfdmVyaWZ5Rm9ybVN0YXRlID0gc2lnbmFsPENvbXBvbmVudFN0YXRlPihDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gIHByaXZhdGUgX3ZlcmlmeUZvcm1TZWN0aW9uTmFtZSA9IHNpZ25hbCgnJyk7XG4gIHByaXZhdGUgX21mYVZlcmlmeUZvcm1TdGF0ZSA9IHNpZ25hbDxDb21wb25lbnRTdGF0ZT4oQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICBwcml2YXRlIF9tZmFNZXRob2QgPSBzaWduYWw8J1RPVFAnIHwgJ0VNQUlMJyB8ICdTTVMnPignVE9UUCcpO1xuICBwcml2YXRlIF9mb3Jnb3RQYXNzd29yZEZvcm1TdGF0ZSA9IHNpZ25hbDxDb21wb25lbnRTdGF0ZT4oQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICBwcml2YXRlIF9yZXNldFBhc3N3b3JkRm9ybVN0YXRlID0gc2lnbmFsPENvbXBvbmVudFN0YXRlPihDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gIHByaXZhdGUgX3Jlc2V0Rm9ybVNlY3Rpb25OYW1lID0gc2lnbmFsKCcnKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTE9HSU4gRk9STSAoY29tcHV0ZWQpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHJlYWRvbmx5IGxvZ2luRm9ybVByb3BzID0gY29tcHV0ZWQ8Rm9ybU1ldGFkYXRhPigoKSA9PlxuICAgIHRoaXMuaTE4bkhlbHBlci5yZXNvbHZlRm9ybSh7XG4gICAgICBuYW1lS2V5OiAnbG9naW5UaXRsZScsXG4gICAgICBpMThuTmFtZXNwYWNlOiAnX2F1dGgnLFxuICAgICAgc2VjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICcnLFxuICAgICAgICAgIG9yZGVyOiAwLFxuICAgICAgICAgIGZpZWxkczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBJbnB1dFR5cGUuRU1BSUwsXG4gICAgICAgICAgICAgIG5hbWU6ICdlbWFpbCcsXG4gICAgICAgICAgICAgIHRva2VuOiAnbG9naW4tZW1haWwnLFxuICAgICAgICAgICAgICBoaW50OiAnJyxcbiAgICAgICAgICAgICAgbGFiZWxLZXk6ICdlbWFpbCcsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyS2V5OiAnZW1haWxQbGFjZWhvbGRlcicsXG4gICAgICAgICAgICAgIGVycm9yS2V5czoge1xuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiAnZW1haWxSZXF1aXJlZCcsXG4gICAgICAgICAgICAgICAgZW1haWw6ICdlbWFpbEludmFsaWQnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5lbWFpbF0sXG4gICAgICAgICAgICAgIG9yZGVyOiAwLFxuICAgICAgICAgICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBJbnB1dFR5cGUuUEFTU1dPUkQsXG4gICAgICAgICAgICAgIG5hbWU6ICdwYXNzd29yZCcsXG4gICAgICAgICAgICAgIHRva2VuOiAnbG9naW4tcGFzc3dvcmQnLFxuICAgICAgICAgICAgICBoaW50OiAnJyxcbiAgICAgICAgICAgICAgbGFiZWxLZXk6ICdwYXNzd29yZCcsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyS2V5OiAncGFzc3dvcmRQbGFjZWhvbGRlcicsXG4gICAgICAgICAgICAgIGVycm9yS2V5czoge1xuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiAncGFzc3dvcmRSZXF1aXJlZCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgICAgICAgb3JkZXI6IDEsXG4gICAgICAgICAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBhY3Rpb25zOiB7XG4gICAgICAgIC4uLlNvbGlkRGVmYXVsdEJsb2NrKCcnLCAnc3VibWl0JyksXG4gICAgICAgIHRva2VuOiAnbG9naW4tc3VibWl0JyxcbiAgICAgICAgdGV4dEtleTogJ2xvZ2luU3VibWl0JyxcbiAgICAgIH0sXG4gICAgICBzdGF0ZTogdGhpcy5fbG9naW5Gb3JtU3RhdGUoKSxcbiAgICB9KVxuICApO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBSRUdJU1RFUiBGT1JNIChjb21wdXRlZClcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcmVhZG9ubHkgcmVnaXN0ZXJGb3JtUHJvcHMgPSBjb21wdXRlZDxGb3JtTWV0YWRhdGE+KCgpID0+XG4gICAgdGhpcy5pMThuSGVscGVyLnJlc29sdmVGb3JtKHtcbiAgICAgIG5hbWVLZXk6ICdyZWdpc3RlclRpdGxlJyxcbiAgICAgIGkxOG5OYW1lc3BhY2U6ICdfYXV0aCcsXG4gICAgICBzZWN0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJycsXG4gICAgICAgICAgb3JkZXI6IDAsXG4gICAgICAgICAgZmllbGRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IElucHV0VHlwZS5URVhULFxuICAgICAgICAgICAgICBuYW1lOiAnbmFtZScsXG4gICAgICAgICAgICAgIHRva2VuOiAncmVnaXN0ZXItbmFtZScsXG4gICAgICAgICAgICAgIGhpbnQ6ICcnLFxuICAgICAgICAgICAgICBsYWJlbEtleTogJ2Z1bGxOYW1lJyxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXJLZXk6ICduYW1lUGxhY2Vob2xkZXInLFxuICAgICAgICAgICAgICBlcnJvcktleXM6IHtcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogJ25hbWVSZXF1aXJlZCcsXG4gICAgICAgICAgICAgICAgbWlubGVuZ3RoOiAnbmFtZU1pbkxlbmd0aCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCgyKV0sXG4gICAgICAgICAgICAgIG9yZGVyOiAwLFxuICAgICAgICAgICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBJbnB1dFR5cGUuRU1BSUwsXG4gICAgICAgICAgICAgIG5hbWU6ICdlbWFpbCcsXG4gICAgICAgICAgICAgIHRva2VuOiAncmVnaXN0ZXItZW1haWwnLFxuICAgICAgICAgICAgICBoaW50OiAnJyxcbiAgICAgICAgICAgICAgbGFiZWxLZXk6ICdlbWFpbCcsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyS2V5OiAnZW1haWxQbGFjZWhvbGRlcicsXG4gICAgICAgICAgICAgIGVycm9yS2V5czoge1xuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiAnZW1haWxSZXF1aXJlZCcsXG4gICAgICAgICAgICAgICAgZW1haWw6ICdlbWFpbEludmFsaWQnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5lbWFpbF0sXG4gICAgICAgICAgICAgIG9yZGVyOiAxLFxuICAgICAgICAgICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBJbnB1dFR5cGUuUEFTU1dPUkQsXG4gICAgICAgICAgICAgIG5hbWU6ICdwYXNzd29yZCcsXG4gICAgICAgICAgICAgIHRva2VuOiAncmVnaXN0ZXItcGFzc3dvcmQnLFxuICAgICAgICAgICAgICBoaW50OiAnJyxcbiAgICAgICAgICAgICAgbGFiZWxLZXk6ICdwYXNzd29yZCcsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyS2V5OiAncGFzc3dvcmRQbGFjZWhvbGRlcicsXG4gICAgICAgICAgICAgIGVycm9yS2V5czoge1xuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiAncGFzc3dvcmRSZXF1aXJlZCcsXG4gICAgICAgICAgICAgICAgbWlubGVuZ3RoOiAncGFzc3dvcmRNaW5MZW5ndGgnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoOCldLFxuICAgICAgICAgICAgICBvcmRlcjogMixcbiAgICAgICAgICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGFjdGlvbnM6IHtcbiAgICAgICAgLi4uU29saWREZWZhdWx0QmxvY2soJycsICdzdWJtaXQnKSxcbiAgICAgICAgdG9rZW46ICdyZWdpc3Rlci1zdWJtaXQnLFxuICAgICAgICB0ZXh0S2V5OiAncmVnaXN0ZXJTdWJtaXQnLFxuICAgICAgfSxcbiAgICAgIHN0YXRlOiB0aGlzLl9yZWdpc3RlckZvcm1TdGF0ZSgpLFxuICAgIH0pXG4gICk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFZFUklGWSBFTUFJTCBGT1JNIChjb21wdXRlZClcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcmVhZG9ubHkgdmVyaWZ5Rm9ybVByb3BzID0gY29tcHV0ZWQ8Rm9ybU1ldGFkYXRhPigoKSA9PiB7XG4gICAgY29uc3Qgc2VjdGlvbk5hbWUgPSB0aGlzLl92ZXJpZnlGb3JtU2VjdGlvbk5hbWUoKSB8fCB0aGlzLnQoJ3ZlcmlmeURlc2NyaXB0aW9uJyk7XG4gICAgcmV0dXJuIHRoaXMuaTE4bkhlbHBlci5yZXNvbHZlRm9ybSh7XG4gICAgICBuYW1lS2V5OiAndmVyaWZ5VGl0bGUnLFxuICAgICAgaTE4bk5hbWVzcGFjZTogJ19hdXRoJyxcbiAgICAgIHNlY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBzZWN0aW9uTmFtZSxcbiAgICAgICAgICBvcmRlcjogMCxcbiAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogSW5wdXRUeXBlLlBJTl9DT0RFLFxuICAgICAgICAgICAgICBsYWJlbDogJycsXG4gICAgICAgICAgICAgIG5hbWU6ICdjb2RlJyxcbiAgICAgICAgICAgICAgdG9rZW46ICd2ZXJpZnktcGluJyxcbiAgICAgICAgICAgICAgaGludDogJycsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAnJyxcbiAgICAgICAgICAgICAgZXJyb3JLZXlzOiB7XG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICdjb2RlUmVxdWlyZWQnLFxuICAgICAgICAgICAgICAgIG1pbmxlbmd0aDogJ2NvZGVNaW5MZW5ndGgnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoNildLFxuICAgICAgICAgICAgICBvcmRlcjogMCxcbiAgICAgICAgICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgICAgICAgICAgICBsZW5ndGg6IDYsXG4gICAgICAgICAgICAgIGFsbG93TnVtYmVyc09ubHk6IHRydWUsXG4gICAgICAgICAgICAgIGF1dG9Gb2N1czogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBhY3Rpb25zOiB7XG4gICAgICAgIC4uLlNvbGlkRGVmYXVsdEJsb2NrKCcnLCAnc3VibWl0JyksXG4gICAgICAgIHRva2VuOiAndmVyaWZ5LXN1Ym1pdCcsXG4gICAgICAgIHRleHRLZXk6ICd2ZXJpZnlTdWJtaXQnLFxuICAgICAgfSxcbiAgICAgIHN0YXRlOiB0aGlzLl92ZXJpZnlGb3JtU3RhdGUoKSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIE1GQSBWRVJJRlkgRk9STSAoY29tcHV0ZWQpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHJlYWRvbmx5IG1mYVZlcmlmeUZvcm1Qcm9wcyA9IGNvbXB1dGVkPEZvcm1NZXRhZGF0YT4oKCkgPT4ge1xuICAgIGNvbnN0IG1ldGhvZCA9IHRoaXMuX21mYU1ldGhvZCgpO1xuICAgIGNvbnN0IHNlY3Rpb25OYW1lID1cbiAgICAgIG1ldGhvZCA9PT0gJ1RPVFAnID8gdGhpcy50KCdtZmFUT1RQJykgOiBtZXRob2QgPT09ICdFTUFJTCcgPyB0aGlzLnQoJ21mYUVtYWlsJykgOiB0aGlzLnQoJ21mYVNNUycpO1xuXG4gICAgcmV0dXJuIHRoaXMuaTE4bkhlbHBlci5yZXNvbHZlRm9ybSh7XG4gICAgICBuYW1lS2V5OiAnbWZhVGl0bGUnLFxuICAgICAgaTE4bk5hbWVzcGFjZTogJ19hdXRoJyxcbiAgICAgIHNlY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBzZWN0aW9uTmFtZSxcbiAgICAgICAgICBvcmRlcjogMCxcbiAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogSW5wdXRUeXBlLlBJTl9DT0RFLFxuICAgICAgICAgICAgICBsYWJlbDogJycsXG4gICAgICAgICAgICAgIG5hbWU6ICdjb2RlJyxcbiAgICAgICAgICAgICAgdG9rZW46ICdtZmEtcGluJyxcbiAgICAgICAgICAgICAgaGludDogJycsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAnJyxcbiAgICAgICAgICAgICAgZXJyb3JLZXlzOiB7XG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICdjb2RlUmVxdWlyZWQnLFxuICAgICAgICAgICAgICAgIG1pbmxlbmd0aDogJ2NvZGVNaW5MZW5ndGgnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoNildLFxuICAgICAgICAgICAgICBvcmRlcjogMCxcbiAgICAgICAgICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgICAgICAgICAgICBsZW5ndGg6IDYsXG4gICAgICAgICAgICAgIGFsbG93TnVtYmVyc09ubHk6IHRydWUsXG4gICAgICAgICAgICAgIGF1dG9Gb2N1czogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBhY3Rpb25zOiB7XG4gICAgICAgIC4uLlNvbGlkRGVmYXVsdEJsb2NrKCcnLCAnc3VibWl0JyksXG4gICAgICAgIHRva2VuOiAnbWZhLXZlcmlmeS1zdWJtaXQnLFxuICAgICAgICB0ZXh0S2V5OiAndmVyaWZ5U3VibWl0JyxcbiAgICAgIH0sXG4gICAgICBzdGF0ZTogdGhpcy5fbWZhVmVyaWZ5Rm9ybVN0YXRlKCksXG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBGT1JHT1QgUEFTU1dPUkQgRk9STSAoY29tcHV0ZWQpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHJlYWRvbmx5IGZvcmdvdFBhc3N3b3JkRm9ybVByb3BzID0gY29tcHV0ZWQ8Rm9ybU1ldGFkYXRhPigoKSA9PlxuICAgIHRoaXMuaTE4bkhlbHBlci5yZXNvbHZlRm9ybSh7XG4gICAgICBuYW1lS2V5OiAnZm9yZ290VGl0bGUnLFxuICAgICAgaTE4bk5hbWVzcGFjZTogJ19hdXRoJyxcbiAgICAgIHNlY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiB0aGlzLnQoJ2ZvcmdvdERlc2NyaXB0aW9uJyksXG4gICAgICAgICAgb3JkZXI6IDAsXG4gICAgICAgICAgZmllbGRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IElucHV0VHlwZS5FTUFJTCxcbiAgICAgICAgICAgICAgbGFiZWw6ICcnLFxuICAgICAgICAgICAgICBuYW1lOiAnZW1haWwnLFxuICAgICAgICAgICAgICB0b2tlbjogJ2ZvcmdvdC1lbWFpbCcsXG4gICAgICAgICAgICAgIGhpbnQ6ICcnLFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcktleTogJ2VtYWlsUGxhY2Vob2xkZXInLFxuICAgICAgICAgICAgICBlcnJvcktleXM6IHtcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogJ2VtYWlsUmVxdWlyZWQnLFxuICAgICAgICAgICAgICAgIGVtYWlsOiAnZW1haWxJbnZhbGlkJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMuZW1haWxdLFxuICAgICAgICAgICAgICBvcmRlcjogMCxcbiAgICAgICAgICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGFjdGlvbnM6IHtcbiAgICAgICAgLi4uU29saWREZWZhdWx0QmxvY2soJycsICdzdWJtaXQnKSxcbiAgICAgICAgdG9rZW46ICdmb3Jnb3Qtc3VibWl0JyxcbiAgICAgICAgdGV4dEtleTogJ2ZvcmdvdFN1Ym1pdCcsXG4gICAgICB9LFxuICAgICAgc3RhdGU6IHRoaXMuX2ZvcmdvdFBhc3N3b3JkRm9ybVN0YXRlKCksXG4gICAgfSlcbiAgKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUkVTRVQgUEFTU1dPUkQgRk9STSAoY29tcHV0ZWQpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHJlYWRvbmx5IHJlc2V0UGFzc3dvcmRGb3JtUHJvcHMgPSBjb21wdXRlZDxGb3JtTWV0YWRhdGE+KCgpID0+IHtcbiAgICBjb25zdCBzZWN0aW9uTmFtZSA9IHRoaXMuX3Jlc2V0Rm9ybVNlY3Rpb25OYW1lKCkgfHwgdGhpcy50KCdyZXNldERlc2NyaXB0aW9uJyk7XG4gICAgcmV0dXJuIHRoaXMuaTE4bkhlbHBlci5yZXNvbHZlRm9ybSh7XG4gICAgICBuYW1lS2V5OiAncmVzZXRUaXRsZScsXG4gICAgICBpMThuTmFtZXNwYWNlOiAnX2F1dGgnLFxuICAgICAgc2VjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IHNlY3Rpb25OYW1lLFxuICAgICAgICAgIG9yZGVyOiAwLFxuICAgICAgICAgIGZpZWxkczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBJbnB1dFR5cGUuUElOX0NPREUsXG4gICAgICAgICAgICAgIGxhYmVsOiAnJyxcbiAgICAgICAgICAgICAgbmFtZTogJ2NvZGUnLFxuICAgICAgICAgICAgICB0b2tlbjogJ3Jlc2V0LXBpbicsXG4gICAgICAgICAgICAgIGhpbnQ6ICcnLFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogJycsXG4gICAgICAgICAgICAgIGVycm9yS2V5czoge1xuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiAnY29kZVJlcXVpcmVkJyxcbiAgICAgICAgICAgICAgICBtaW5sZW5ndGg6ICdjb2RlTWluTGVuZ3RoJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDYpXSxcbiAgICAgICAgICAgICAgb3JkZXI6IDAsXG4gICAgICAgICAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgICAgICAgICAgbGVuZ3RoOiA2LFxuICAgICAgICAgICAgICBhbGxvd051bWJlcnNPbmx5OiB0cnVlLFxuICAgICAgICAgICAgICBhdXRvRm9jdXM6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBJbnB1dFR5cGUuUEFTU1dPUkQsXG4gICAgICAgICAgICAgIG5hbWU6ICduZXdQYXNzd29yZCcsXG4gICAgICAgICAgICAgIHRva2VuOiAncmVzZXQtbmV3LXBhc3N3b3JkJyxcbiAgICAgICAgICAgICAgbGFiZWxLZXk6ICduZXdQYXNzd29yZCcsXG4gICAgICAgICAgICAgIGhpbnRLZXk6ICduZXdQYXNzd29yZEhpbnQnLFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcktleTogJ3Bhc3N3b3JkUGxhY2Vob2xkZXInLFxuICAgICAgICAgICAgICBlcnJvcktleXM6IHtcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogJ3Bhc3N3b3JkUmVxdWlyZWQnLFxuICAgICAgICAgICAgICAgIG1pbmxlbmd0aDogJ3Bhc3N3b3JkTWluTGVuZ3RoJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDgpXSxcbiAgICAgICAgICAgICAgb3JkZXI6IDEsXG4gICAgICAgICAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBhY3Rpb25zOiB7XG4gICAgICAgIC4uLlNvbGlkRGVmYXVsdEJsb2NrKCcnLCAnc3VibWl0JyksXG4gICAgICAgIHRva2VuOiAncmVzZXQtc3VibWl0JyxcbiAgICAgICAgdGV4dEtleTogJ3Jlc2V0U3VibWl0JyxcbiAgICAgIH0sXG4gICAgICBzdGF0ZTogdGhpcy5fcmVzZXRQYXNzd29yZEZvcm1TdGF0ZSgpLFxuICAgIH0pO1xuICB9KTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gSEFORExFUlNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgbG9naW5IYW5kbGVyKGV2ZW50OiBGb3JtU3VibWl0KTogdm9pZCB7XG4gICAgY29uc3QgZW1haWwgPSBldmVudC5maWVsZHNbJ2VtYWlsJ107XG4gICAgY29uc3QgcGFzc3dvcmQgPSBldmVudC5maWVsZHNbJ3Bhc3N3b3JkJ107XG5cbiAgICBpZiAoIWVtYWlsIHx8ICFwYXNzd29yZCkge1xuICAgICAgdGhpcy5zaG93VG9hc3QodGhpcy50KCdjb21wbGV0ZUFsbEZpZWxkcycpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2dpbkZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLldPUktJTkcpO1xuXG4gICAgdGhpcy5hdXRoU2VydmljZS5zaWduaW4oeyBlbWFpbCwgcGFzc3dvcmQgfSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgdGhpcy5fbG9naW5Gb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcblxuICAgICAgICBpZiAodGhpcy5hdXRoU2VydmljZS5tZmFQZW5kaW5nKCkucmVxdWlyZWQpIHtcbiAgICAgICAgICB0aGlzLm9wZW5NRkFWZXJpZnlNb2RhbCgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGFuZGxlTG9naW5TdWNjZXNzKCk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgIHRoaXMuX2xvZ2luRm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG5cbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gKGVyciBhcyB7IGNvZGU/OiBzdHJpbmcgfSk/LmNvZGU7XG4gICAgICAgIGlmIChlcnJvckNvZGUgPT09ICdBVVRIVjJfRU1BSUxfTk9UX1ZFUklGSUVEJykge1xuICAgICAgICAgIHRoaXMub3BlblZlcmlmeU1vZGFsKGVtYWlsKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVyciwgJ3NpZ25pbicpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGxvZ2luV2l0aE9BdXRoKHByb3ZpZGVyOiAnZ29vZ2xlJyB8ICdhcHBsZScgfCAnbWljcm9zb2Z0Jyk6IHZvaWQge1xuICAgIHRoaXMuaXNPQXV0aExvYWRpbmcgPSB0cnVlO1xuXG4gICAgdGhpcy5hdXRoU2VydmljZS5zaWduaW5XaXRoT0F1dGgocHJvdmlkZXIpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNPQXV0aExvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICBpZiAodGhpcy5hdXRoU2VydmljZS5tZmFQZW5kaW5nKCkucmVxdWlyZWQpIHtcbiAgICAgICAgICB0aGlzLm9wZW5NRkFWZXJpZnlNb2RhbCgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGFuZGxlTG9naW5TdWNjZXNzKHByb3ZpZGVyKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogZXJyID0+IHtcbiAgICAgICAgdGhpcy5pc09BdXRoTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IChlcnIgYXMgeyBjb2RlPzogc3RyaW5nIH0pPy5jb2RlO1xuICAgICAgICBpZiAoZXJyb3JDb2RlID09PSAnUE9QVVBfQ0xPU0VEJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyLCAnb2F1dGgnKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUkVHSVNURVIgSEFORExFUlNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgb3BlblJlZ2lzdGVyTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5pc1JlZ2lzdGVyTW9kYWxPcGVuID0gdHJ1ZTtcbiAgfVxuXG4gIGNsb3NlUmVnaXN0ZXJNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzUmVnaXN0ZXJNb2RhbE9wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIHJlZ2lzdGVySGFuZGxlcihldmVudDogRm9ybVN1Ym1pdCk6IHZvaWQge1xuICAgIGNvbnN0IG5hbWUgPSBldmVudC5maWVsZHNbJ25hbWUnXTtcbiAgICBjb25zdCBlbWFpbCA9IGV2ZW50LmZpZWxkc1snZW1haWwnXTtcbiAgICBjb25zdCBwYXNzd29yZCA9IGV2ZW50LmZpZWxkc1sncGFzc3dvcmQnXTtcblxuICAgIGlmICghbmFtZSB8fCAhZW1haWwgfHwgIXBhc3N3b3JkKSB7XG4gICAgICB0aGlzLnNob3dUb2FzdCh0aGlzLnQoJ2NvbXBsZXRlQWxsRmllbGRzJykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3JlZ2lzdGVyRm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuV09SS0lORyk7XG5cbiAgICB0aGlzLmF1dGhTZXJ2aWNlLnNpZ251cCh7IG5hbWUsIGVtYWlsLCBwYXNzd29yZCB9KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICB0aGlzLl9yZWdpc3RlckZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICAgICAgICB0aGlzLmNsb3NlUmVnaXN0ZXJNb2RhbCgpO1xuICAgICAgICB0aGlzLm9wZW5WZXJpZnlNb2RhbChlbWFpbCk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgIHRoaXMuX3JlZ2lzdGVyRm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyLCAnc2lnbnVwJyk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFZFUklGWSBFTUFJTCBIQU5ETEVSU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBvcGVuVmVyaWZ5TW9kYWwoZW1haWw6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucGVuZGluZ1ZlcmlmaWNhdGlvbkVtYWlsID0gZW1haWw7XG4gICAgdGhpcy5fdmVyaWZ5Rm9ybVNlY3Rpb25OYW1lLnNldChgJHt0aGlzLnQoJ3ZlcmlmeURlc2NyaXB0aW9uJykucmVwbGFjZSgnLicsICcnKX0gKCR7ZW1haWx9KWApO1xuICAgIHRoaXMuX3ZlcmlmeUZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICAgIHRoaXMuaXNWZXJpZnlNb2RhbE9wZW4gPSB0cnVlO1xuICAgIHRoaXMuc3RhcnRSZXNlbmRDb29sZG93bigpO1xuICB9XG5cbiAgY2xvc2VWZXJpZnlNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzVmVyaWZ5TW9kYWxPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5wZW5kaW5nVmVyaWZpY2F0aW9uRW1haWwgPSAnJztcbiAgICB0aGlzLl92ZXJpZnlGb3JtU2VjdGlvbk5hbWUuc2V0KCcnKTtcbiAgICB0aGlzLnN0b3BSZXNlbmRDb29sZG93bigpO1xuICB9XG5cbiAgdmVyaWZ5SGFuZGxlcihldmVudDogRm9ybVN1Ym1pdCk6IHZvaWQge1xuICAgIGNvbnN0IGNvZGUgPSBldmVudC5maWVsZHNbJ2NvZGUnXTtcblxuICAgIHRoaXMuX3ZlcmlmeUZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLldPUktJTkcpO1xuXG4gICAgdGhpcy5hdXRoU2VydmljZVxuICAgICAgLnZlcmlmeUVtYWlsKHtcbiAgICAgICAgZW1haWw6IHRoaXMucGVuZGluZ1ZlcmlmaWNhdGlvbkVtYWlsLFxuICAgICAgICBjb2RlLFxuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fdmVyaWZ5Rm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gICAgICAgICAgdGhpcy5zaG93VG9hc3QodGhpcy50KCdlbWFpbFZlcmlmaWVkJykpO1xuICAgICAgICAgIHRoaXMuY2xvc2VWZXJpZnlNb2RhbCgpO1xuICAgICAgICAgIHRoaXMuaGFuZGxlTG9naW5TdWNjZXNzKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICAgIHRoaXMuX3ZlcmlmeUZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyLCAndmVyaWZ5Jyk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIHJlc2VuZENvZGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVzZW5kQ29vbGRvd24gPiAwKSByZXR1cm47XG5cbiAgICB0aGlzLmF1dGhTZXJ2aWNlXG4gICAgICAucmVzZW5kQ29kZSh7XG4gICAgICAgIGVtYWlsOiB0aGlzLnBlbmRpbmdWZXJpZmljYXRpb25FbWFpbCxcbiAgICAgICAgdHlwZTogJ0VNQUlMX1ZFUklGWScsXG4gICAgICB9KVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnNob3dUb2FzdCh0aGlzLnQoJ2NvZGVTZW50JykpO1xuICAgICAgICAgIHRoaXMuc3RhcnRSZXNlbmRDb29sZG93bigpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogZXJyID0+IHtcbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVyciwgJ3ZlcmlmeScpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTUZBIEhBTkRMRVJTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIG9wZW5NRkFWZXJpZnlNb2RhbCgpOiB2b2lkIHtcbiAgICBjb25zdCBtZXRob2QgPSB0aGlzLmF1dGhTZXJ2aWNlLm1mYVBlbmRpbmcoKS5tZXRob2QgYXMgJ1RPVFAnIHwgJ0VNQUlMJyB8ICdTTVMnO1xuICAgIHRoaXMuX21mYU1ldGhvZC5zZXQobWV0aG9kKTtcbiAgICB0aGlzLl9tZmFWZXJpZnlGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgICB0aGlzLmlzTUZBVmVyaWZ5TW9kYWxPcGVuID0gdHJ1ZTtcblxuICAgIHRoaXMub25NRkFSZXF1aXJlZC5lbWl0KHsgbWV0aG9kIH0pO1xuICB9XG5cbiAgY2xvc2VNRkFWZXJpZnlNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzTUZBVmVyaWZ5TW9kYWxPcGVuID0gZmFsc2U7XG4gIH1cblxuICB2ZXJpZnlNRkFIYW5kbGVyKGV2ZW50OiBGb3JtU3VibWl0KTogdm9pZCB7XG4gICAgY29uc3QgY29kZSA9IGV2ZW50LmZpZWxkc1snY29kZSddO1xuXG4gICAgdGhpcy5fbWZhVmVyaWZ5Rm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuV09SS0lORyk7XG5cbiAgICB0aGlzLmF1dGhTZXJ2aWNlLnZlcmlmeU1GQShjb2RlKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICB0aGlzLl9tZmFWZXJpZnlGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgICAgICAgdGhpcy5jbG9zZU1GQVZlcmlmeU1vZGFsKCk7XG4gICAgICAgIHRoaXMuaGFuZGxlTG9naW5TdWNjZXNzKHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgIHRoaXMuX21mYVZlcmlmeUZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVyciwgJ21mYScpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBGT1JHT1QgUEFTU1dPUkQgSEFORExFUlNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgb3BlbkZvcmdvdFBhc3N3b3JkTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5pc0ZvcmdvdFBhc3N3b3JkTW9kYWxPcGVuID0gdHJ1ZTtcbiAgfVxuXG4gIGNsb3NlRm9yZ290UGFzc3dvcmRNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzRm9yZ290UGFzc3dvcmRNb2RhbE9wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIGZvcmdvdFBhc3N3b3JkSGFuZGxlcihldmVudDogRm9ybVN1Ym1pdCk6IHZvaWQge1xuICAgIGNvbnN0IGVtYWlsID0gZXZlbnQuZmllbGRzWydlbWFpbCddO1xuXG4gICAgaWYgKCFlbWFpbCkge1xuICAgICAgdGhpcy5zaG93VG9hc3QodGhpcy50KCdlbnRlckVtYWlsJykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2ZvcmdvdFBhc3N3b3JkRm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuV09SS0lORyk7XG5cbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmZvcmdvdFBhc3N3b3JkKHsgZW1haWwgfSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgdGhpcy5fZm9yZ290UGFzc3dvcmRGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgICAgICAgdGhpcy5jbG9zZUZvcmdvdFBhc3N3b3JkTW9kYWwoKTtcbiAgICAgICAgdGhpcy5vcGVuUmVzZXRQYXNzd29yZE1vZGFsKGVtYWlsKTtcbiAgICAgICAgdGhpcy5zaG93VG9hc3QodGhpcy50KCdjb2RlU2VudCcpKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogZXJyID0+IHtcbiAgICAgICAgdGhpcy5fZm9yZ290UGFzc3dvcmRGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIsICdmb3Jnb3QnKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUkVTRVQgUEFTU1dPUkQgSEFORExFUlNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgb3BlblJlc2V0UGFzc3dvcmRNb2RhbChlbWFpbDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wZW5kaW5nUmVzZXRFbWFpbCA9IGVtYWlsO1xuICAgIHRoaXMuX3Jlc2V0Rm9ybVNlY3Rpb25OYW1lLnNldChgJHt0aGlzLnQoJ3Jlc2V0RGVzY3JpcHRpb24nKS5yZXBsYWNlKCcuJywgJycpfSAoJHtlbWFpbH0pYCk7XG4gICAgdGhpcy5fcmVzZXRQYXNzd29yZEZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICAgIHRoaXMuaXNSZXNldFBhc3N3b3JkTW9kYWxPcGVuID0gdHJ1ZTtcbiAgICB0aGlzLnN0YXJ0UmVzZXRSZXNlbmRDb29sZG93bigpO1xuICB9XG5cbiAgY2xvc2VSZXNldFBhc3N3b3JkTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5pc1Jlc2V0UGFzc3dvcmRNb2RhbE9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLnBlbmRpbmdSZXNldEVtYWlsID0gJyc7XG4gICAgdGhpcy5fcmVzZXRGb3JtU2VjdGlvbk5hbWUuc2V0KCcnKTtcbiAgICB0aGlzLnN0b3BSZXNldFJlc2VuZENvb2xkb3duKCk7XG4gIH1cblxuICByZXNldFBhc3N3b3JkSGFuZGxlcihldmVudDogRm9ybVN1Ym1pdCk6IHZvaWQge1xuICAgIGNvbnN0IGNvZGUgPSBldmVudC5maWVsZHNbJ2NvZGUnXTtcbiAgICBjb25zdCBuZXdQYXNzd29yZCA9IGV2ZW50LmZpZWxkc1snbmV3UGFzc3dvcmQnXTtcblxuICAgIHRoaXMuX3Jlc2V0UGFzc3dvcmRGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5XT1JLSU5HKTtcblxuICAgIHRoaXMuYXV0aFNlcnZpY2VcbiAgICAgIC5yZXNldFBhc3N3b3JkKHtcbiAgICAgICAgZW1haWw6IHRoaXMucGVuZGluZ1Jlc2V0RW1haWwsXG4gICAgICAgIGNvZGUsXG4gICAgICAgIG5ld1Bhc3N3b3JkLFxuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fcmVzZXRQYXNzd29yZEZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICAgICAgICAgIHRoaXMuc2hvd1RvYXN0KHRoaXMudCgncGFzc3dvcmRVcGRhdGVkJykpO1xuICAgICAgICAgIHRoaXMuY2xvc2VSZXNldFBhc3N3b3JkTW9kYWwoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgICAgdGhpcy5fcmVzZXRQYXNzd29yZEZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyLCAncmVzZXQnKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG5cbiAgcmVzZW5kUmVzZXRDb2RlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlc2V0UmVzZW5kQ29vbGRvd24gPiAwKSByZXR1cm47XG5cbiAgICB0aGlzLmF1dGhTZXJ2aWNlXG4gICAgICAucmVzZW5kQ29kZSh7XG4gICAgICAgIGVtYWlsOiB0aGlzLnBlbmRpbmdSZXNldEVtYWlsLFxuICAgICAgICB0eXBlOiAnUEFTU1dPUkRfUkVTRVQnLFxuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zaG93VG9hc3QodGhpcy50KCdjb2RlU2VudCcpKTtcbiAgICAgICAgICB0aGlzLnN0YXJ0UmVzZXRSZXNlbmRDb29sZG93bigpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogZXJyID0+IHtcbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVyciwgJ3Jlc2V0Jyk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBIRUxQRVJTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHByaXZhdGUgaGFuZGxlTG9naW5TdWNjZXNzKG9hdXRoUHJvdmlkZXI/OiAnZ29vZ2xlJyB8ICdhcHBsZScgfCAnbWljcm9zb2Z0JywgbWZhQ29tcGxldGVkPzogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuc2hvd1RvYXN0KHRoaXMudCgnd2VsY29tZScpKTtcblxuICAgIHRoaXMub25TdWNjZXNzLmVtaXQoe1xuICAgICAgdXNlcjogdGhpcy5hdXRoU2VydmljZS51c2VyKCksXG4gICAgICBtZmFDb21wbGV0ZWQsXG4gICAgICBvYXV0aFByb3ZpZGVyLFxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMucHJvcHMucmVkaXJlY3RPblN1Y2Nlc3MpIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLnByb3BzLnJlZGlyZWN0T25TdWNjZXNzXSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVFcnJvcihlcnI6IHVua25vd24sIG9wZXJhdGlvbjogTG9naW5FcnJvckV2ZW50WydvcGVyYXRpb24nXSk6IHZvaWQge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZShlcnIpO1xuICAgIHRoaXMuc2hvd1RvYXN0KG1lc3NhZ2UpO1xuXG4gICAgdGhpcy5vbkVycm9yLmVtaXQoe1xuICAgICAgY29kZTogKGVyciBhcyB7IGNvZGU/OiBzdHJpbmcgfSk/LmNvZGUsXG4gICAgICBtZXNzYWdlLFxuICAgICAgb3BlcmF0aW9uLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93VG9hc3QobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvdyh7XG4gICAgICBtZXNzYWdlLFxuICAgICAgZHVyYXRpb246IDM1MDAsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldEVycm9yTWVzc2FnZShlcnI6IHVua25vd24pOiBzdHJpbmcge1xuICAgIGNvbnN0IGVycm9yID0gZXJyIGFzIHtcbiAgICAgIGVycm9yPzogeyBtZXNzYWdlPzogc3RyaW5nOyBjb2RlPzogc3RyaW5nIH07XG4gICAgICBjb2RlPzogc3RyaW5nO1xuICAgIH07XG5cbiAgICAvLyBNYXAgZXJyb3IgY29kZXMgdG8gaTE4biBrZXlzXG4gICAgY29uc3QgZXJyb3JLZXlNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAvLyBTaWduaW5cbiAgICAgIEFVVEhWMl9JTlZBTElEX0NSRURFTlRJQUxTOiAnZXJyb3JJbnZhbGlkQ3JlZGVudGlhbHMnLFxuICAgICAgQVVUSFYyX0VNQUlMX05PVF9WRVJJRklFRDogJ2Vycm9yRW1haWxOb3RWZXJpZmllZCcsXG4gICAgICBBVVRIVjJfQUNDT1VOVF9TVVNQRU5ERUQ6ICdlcnJvckFjY291bnRTdXNwZW5kZWQnLFxuXG4gICAgICAvLyBTaWdudXBcbiAgICAgIEFVVEhWMl9FTUFJTF9FWElTVFM6ICdlcnJvckVtYWlsRXhpc3RzJyxcbiAgICAgIEFVVEhWMl9XRUFLX1BBU1NXT1JEOiAnZXJyb3JXZWFrUGFzc3dvcmQnLFxuXG4gICAgICAvLyBWZXJpZmljYXRpb24gY29kZXNcbiAgICAgIEFVVEhWMl9JTlZBTElEX0NPREU6ICdlcnJvckludmFsaWRDb2RlJyxcbiAgICAgIEFVVEhWMl9FWFBJUkVEX0NPREU6ICdlcnJvckV4cGlyZWRDb2RlJyxcbiAgICAgIEFVVEhWMl9DT0RFX0VYUElSRUQ6ICdlcnJvckV4cGlyZWRDb2RlJyxcbiAgICAgIEFVVEhWMl9UT09fTUFOWV9BVFRFTVBUUzogJ2Vycm9yVG9vTWFueUF0dGVtcHRzJyxcblxuICAgICAgLy8gTUZBXG4gICAgICBBVVRIVjJfTUZBX0lOVkFMSURfQ09ERTogJ2Vycm9yTUZBSW52YWxpZENvZGUnLFxuXG4gICAgICAvLyBPQXV0aFxuICAgICAgUE9QVVBfQkxPQ0tFRDogJ2Vycm9yUG9wdXBCbG9ja2VkJyxcbiAgICAgIE9BVVRIX0ZBSUxFRDogJ2Vycm9yT0F1dGhGYWlsZWQnLFxuICAgIH07XG5cbiAgICBjb25zdCBlcnJvckNvZGUgPSBlcnJvcj8uZXJyb3I/LmNvZGUgfHwgZXJyb3I/LmNvZGU7XG4gICAgaWYgKGVycm9yQ29kZSAmJiBlcnJvcktleU1hcFtlcnJvckNvZGVdKSB7XG4gICAgICByZXR1cm4gdGhpcy50KGVycm9yS2V5TWFwW2Vycm9yQ29kZV0pO1xuICAgIH1cblxuICAgIGlmIChlcnJvcj8uZXJyb3I/Lm1lc3NhZ2UpIHtcbiAgICAgIHJldHVybiBlcnJvci5lcnJvci5tZXNzYWdlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnQoJ2Vycm9yR2VuZXJpYycpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIENPT0xET1dOIFRJTUVSU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBwcml2YXRlIHN0YXJ0UmVzZW5kQ29vbGRvd24oKTogdm9pZCB7XG4gICAgdGhpcy5yZXNlbmRDb29sZG93biA9IDMwO1xuICAgIHRoaXMucmVzZW5kVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICB0aGlzLnJlc2VuZENvb2xkb3duLS07XG4gICAgICBpZiAodGhpcy5yZXNlbmRDb29sZG93biA8PSAwKSB7XG4gICAgICAgIHRoaXMuc3RvcFJlc2VuZENvb2xkb3duKCk7XG4gICAgICB9XG4gICAgfSwgMTAwMCk7XG4gIH1cblxuICBwcml2YXRlIHN0b3BSZXNlbmRDb29sZG93bigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZXNlbmRUaW1lcikge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnJlc2VuZFRpbWVyKTtcbiAgICAgIHRoaXMucmVzZW5kVGltZXIgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLnJlc2VuZENvb2xkb3duID0gMDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRSZXNldFJlc2VuZENvb2xkb3duKCk6IHZvaWQge1xuICAgIHRoaXMucmVzZXRSZXNlbmRDb29sZG93biA9IDMwO1xuICAgIHRoaXMucmVzZXRSZXNlbmRUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMucmVzZXRSZXNlbmRDb29sZG93bi0tO1xuICAgICAgaWYgKHRoaXMucmVzZXRSZXNlbmRDb29sZG93biA8PSAwKSB7XG4gICAgICAgIHRoaXMuc3RvcFJlc2V0UmVzZW5kQ29vbGRvd24oKTtcbiAgICAgIH1cbiAgICB9LCAxMDAwKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcFJlc2V0UmVzZW5kQ29vbGRvd24oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVzZXRSZXNlbmRUaW1lcikge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnJlc2V0UmVzZW5kVGltZXIpO1xuICAgICAgdGhpcy5yZXNldFJlc2VuZFRpbWVyID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5yZXNldFJlc2VuZENvb2xkb3duID0gMDtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcFJlc2VuZENvb2xkb3duKCk7XG4gICAgdGhpcy5zdG9wUmVzZXRSZXNlbmRDb29sZG93bigpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidmFsLWxvZ2luXCIgW2NsYXNzLnZhbC1sb2dpbi0tY2FyZF09XCJjb25maWcuc2hvd0NhcmRcIj5cbiAgPCEtLSBMb2dvIC0tPlxuICBAaWYgKHByb3BzLmxvZ28pIHtcbiAgPGRpdiBjbGFzcz1cImxvZ28tY29udGFpbmVyXCI+XG4gICAgPHZhbC1pbWFnZSBbcHJvcHNdPVwicHJvcHMubG9nb1wiIC8+XG4gIDwvZGl2PlxuICB9XG5cbiAgPCEtLSBMb2dpbiBGb3JtIC0tPlxuICA8dmFsLWZvcm0gW3Byb3BzXT1cImxvZ2luRm9ybVByb3BzKClcIiAob25TdWJtaXQpPVwibG9naW5IYW5kbGVyKCRldmVudClcIiAvPlxuXG4gIDwhLS0gT0F1dGggU2VjdGlvbiAtLT5cbiAgQGlmIChjb25maWcuc2hvd09BdXRoICYmIGNvbmZpZy5vYXV0aFByb3ZpZGVycy5sZW5ndGggPiAwKSB7XG4gIDxkaXYgY2xhc3M9XCJvYXV0aC1zZXBhcmF0b3JcIj5cbiAgICA8c3Bhbj57eyB0KCdvckNvbnRpbnVlV2l0aCcpIH19PC9zcGFuPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwib2F1dGgtYnV0dG9uc1wiPlxuICAgIEBmb3IgKHByb3ZpZGVyIG9mIGNvbmZpZy5vYXV0aFByb3ZpZGVyczsgdHJhY2sgcHJvdmlkZXIpIHtcbiAgICA8aW9uLWJ1dHRvblxuICAgICAgZXhwYW5kPVwiYmxvY2tcIlxuICAgICAgZmlsbD1cIm91dGxpbmVcIlxuICAgICAgY29sb3I9XCJkYXJrXCJcbiAgICAgIChjbGljayk9XCJsb2dpbldpdGhPQXV0aChwcm92aWRlcilcIlxuICAgICAgW2Rpc2FibGVkXT1cImlzT0F1dGhMb2FkaW5nXCJcbiAgICA+XG4gICAgICBAc3dpdGNoIChwcm92aWRlcikgeyBAY2FzZSAoJ2dvb2dsZScpIHtcbiAgICAgIDxpb24taWNvbiBzbG90PVwic3RhcnRcIiBuYW1lPVwibG9nby1nb29nbGVcIj48L2lvbi1pY29uPlxuICAgICAge3sgaXNPQXV0aExvYWRpbmcgPyB0KCdjb25uZWN0aW5nJykgOiB0KCdjb250aW51ZVdpdGhHb29nbGUnKSB9fSB9IEBjYXNlICgnYXBwbGUnKSB7XG4gICAgICA8aW9uLWljb24gc2xvdD1cInN0YXJ0XCIgbmFtZT1cImxvZ28tYXBwbGVcIj48L2lvbi1pY29uPlxuICAgICAge3sgaXNPQXV0aExvYWRpbmcgPyB0KCdjb25uZWN0aW5nJykgOiB0KCdjb250aW51ZVdpdGhBcHBsZScpIH19IH0gQGNhc2UgKCdtaWNyb3NvZnQnKSB7XG4gICAgICA8aW9uLWljb24gc2xvdD1cInN0YXJ0XCIgbmFtZT1cImxvZ28tbWljcm9zb2Z0XCI+PC9pb24taWNvbj5cbiAgICAgIHt7IGlzT0F1dGhMb2FkaW5nID8gdCgnY29ubmVjdGluZycpIDogdCgnY29udGludWVXaXRoTWljcm9zb2Z0JykgfX0gfSB9XG4gICAgPC9pb24tYnV0dG9uPlxuICAgIH1cbiAgPC9kaXY+XG4gIH1cblxuICA8IS0tIFJlZ2lzdGVyIExpbmsgLS0+XG4gIEBpZiAoY29uZmlnLnNob3dSZWdpc3Rlcikge1xuICA8ZGl2IGNsYXNzPVwiYXV0aC1saW5rXCI+XG4gICAgPGlvbi10ZXh0IGNvbG9yPVwiZGFya1wiPlxuICAgICAge3sgdCgnbm9BY2NvdW50JykgfX1cbiAgICAgIDxhIChjbGljayk9XCJvcGVuUmVnaXN0ZXJNb2RhbCgpXCI+e3sgdCgncmVnaXN0ZXInKSB9fTwvYT5cbiAgICA8L2lvbi10ZXh0PlxuICA8L2Rpdj5cbiAgfVxuXG4gIDwhLS0gRm9yZ290IFBhc3N3b3JkIExpbmsgLS0+XG4gIEBpZiAoY29uZmlnLnNob3dGb3Jnb3RQYXNzd29yZCkge1xuICA8ZGl2IGNsYXNzPVwiYXV0aC1saW5rIGZvcmdvdC1wYXNzd29yZFwiPlxuICAgIDxpb24tdGV4dCBjb2xvcj1cImRhcmtcIj5cbiAgICAgIHt7IHQoJ2ZvcmdvdExpbmsnKSB9fVxuICAgICAgPGEgKGNsaWNrKT1cIm9wZW5Gb3Jnb3RQYXNzd29yZE1vZGFsKClcIj57eyB0KCdyZWNvdmVyUGFzc3dvcmQnKSB9fTwvYT5cbiAgICA8L2lvbi10ZXh0PlxuICA8L2Rpdj5cbiAgfVxuXG4gIDwhLS0gTGVnYWwgTm90aWNlIC0tPlxuICBAaWYgKHByb3BzLmxlZ2FsKSB7XG4gIDxkaXYgY2xhc3M9XCJsZWdhbC1ub3RpY2VcIj5cbiAgICA8aW9uLXRleHQgY29sb3I9XCJkYXJrXCI+XG4gICAgICA8cD5cbiAgICAgICAge3sgdCgnbGVnYWxQcmVmaXgnKSB9fSBAaWYgKHByb3BzLmxlZ2FsLmNvbXBhbnlMaW5rKSB7XG4gICAgICAgIDxhIFtocmVmXT1cInByb3BzLmxlZ2FsLmNvbXBhbnlMaW5rXCI+PHN0cm9uZz57eyBwcm9wcy5sZWdhbC5jb21wYW55TmFtZSB9fTwvc3Ryb25nPjwvYT5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxzdHJvbmc+e3sgcHJvcHMubGVnYWwuY29tcGFueU5hbWUgfX08L3N0cm9uZz5cbiAgICAgICAgfSB7eyB0KCdsZWdhbFN1ZmZpeCcpIH19IEBpZiAocHJvcHMubGVnYWwudGVybXNMaW5rKSB7XG4gICAgICAgIDxhIFtocmVmXT1cInByb3BzLmxlZ2FsLnRlcm1zTGlua1wiPnt7IHQoJ3Rlcm1zQW5kQ29uZGl0aW9ucycpIH19PC9hPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgPHNwYW4+e3sgdCgndGVybXNBbmRDb25kaXRpb25zJykgfX08L3NwYW4+XG4gICAgICAgIH0ge3sgdCgnYW5kJykgfX0gQGlmIChwcm9wcy5sZWdhbC5wcml2YWN5TGluaykge1xuICAgICAgICA8YSBbaHJlZl09XCJwcm9wcy5sZWdhbC5wcml2YWN5TGlua1wiPnt7IHQoJ3ByaXZhY3lQb2xpY3knKSB9fTwvYT5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxzcGFuPnt7IHQoJ3ByaXZhY3lQb2xpY3knKSB9fTwvc3Bhbj5cbiAgICAgICAgfS5cbiAgICAgIDwvcD5cbiAgICA8L2lvbi10ZXh0PlxuICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG5cbjwhLS0gUmVnaXN0ZXIgTW9kYWwgLS0+XG48aW9uLW1vZGFsIFtpc09wZW5dPVwiaXNSZWdpc3Rlck1vZGFsT3BlblwiIChkaWREaXNtaXNzKT1cImNsb3NlUmVnaXN0ZXJNb2RhbCgpXCI+XG4gIDxuZy10ZW1wbGF0ZT5cbiAgICA8aW9uLWhlYWRlcj5cbiAgICAgIDxpb24tdG9vbGJhcj5cbiAgICAgICAgPGlvbi1idXR0b25zIHNsb3Q9XCJlbmRcIj5cbiAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwiY2xlYXJcIiAoY2xpY2spPVwiY2xvc2VSZWdpc3Rlck1vZGFsKClcIj5cbiAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2xvc2Utb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICA8L2lvbi1idXR0b25zPlxuICAgICAgPC9pb24tdG9vbGJhcj5cbiAgICA8L2lvbi1oZWFkZXI+XG4gICAgPGlvbi1jb250ZW50IGNsYXNzPVwiaW9uLXBhZGRpbmdcIj5cbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwibW9kYWwtZm9ybS1zZWN0aW9uXCI+XG4gICAgICAgIEBpZiAocHJvcHMubG9nbykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwibG9nby1jb250YWluZXJcIj5cbiAgICAgICAgICA8dmFsLWltYWdlIFtwcm9wc109XCJwcm9wcy5sb2dvXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPHZhbC1mb3JtIFtwcm9wc109XCJyZWdpc3RlckZvcm1Qcm9wcygpXCIgKG9uU3VibWl0KT1cInJlZ2lzdGVySGFuZGxlcigkZXZlbnQpXCIgLz5cbiAgICAgICAgPGRpdiBjbGFzcz1cImF1dGgtbGlua1wiPlxuICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cImRhcmtcIj5cbiAgICAgICAgICAgIHt7IHQoJ2hhc0FjY291bnQnKSB9fVxuICAgICAgICAgICAgPGEgKGNsaWNrKT1cImNsb3NlUmVnaXN0ZXJNb2RhbCgpXCI+e3sgdCgnc2lnbkluJykgfX08L2E+XG4gICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgPC9pb24tY29udGVudD5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvaW9uLW1vZGFsPlxuXG48IS0tIFZlcmlmeSBFbWFpbCBNb2RhbCAtLT5cbjxpb24tbW9kYWwgW2lzT3Blbl09XCJpc1ZlcmlmeU1vZGFsT3BlblwiIFtiYWNrZHJvcERpc21pc3NdPVwiZmFsc2VcIj5cbiAgPG5nLXRlbXBsYXRlPlxuICAgIDxpb24taGVhZGVyPlxuICAgICAgPGlvbi10b29sYmFyPlxuICAgICAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cImVuZFwiPlxuICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIChjbGljayk9XCJjbG9zZVZlcmlmeU1vZGFsKClcIj5cbiAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2xvc2Utb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICA8L2lvbi1idXR0b25zPlxuICAgICAgPC9pb24tdG9vbGJhcj5cbiAgICA8L2lvbi1oZWFkZXI+XG4gICAgPGlvbi1jb250ZW50IGNsYXNzPVwiaW9uLXBhZGRpbmdcIj5cbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwibW9kYWwtZm9ybS1zZWN0aW9uXCI+XG4gICAgICAgIEBpZiAocHJvcHMubG9nbykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwibG9nby1jb250YWluZXJcIj5cbiAgICAgICAgICA8dmFsLWltYWdlIFtwcm9wc109XCJwcm9wcy5sb2dvXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPHZhbC1mb3JtIFtwcm9wc109XCJ2ZXJpZnlGb3JtUHJvcHMoKVwiIChvblN1Ym1pdCk9XCJ2ZXJpZnlIYW5kbGVyKCRldmVudClcIiAvPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVzZW5kLWxpbmtcIj5cbiAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJkYXJrXCI+XG4gICAgICAgICAgICB7eyB0KCdub0NvZGVSZWNlaXZlZCcpIH19IEBpZiAocmVzZW5kQ29vbGRvd24gPiAwKSB7XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvb2xkb3duXCI+e3sgdCgncmVzZW5kSW4nLCB7IHNlY29uZHM6IHJlc2VuZENvb2xkb3duLnRvU3RyaW5nKCkgfSkgfX08L3NwYW4+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxhIChjbGljayk9XCJyZXNlbmRDb2RlKClcIj57eyB0KCdyZXNlbmQnKSB9fTwvYT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc2VjdGlvbj5cbiAgICA8L2lvbi1jb250ZW50PlxuICA8L25nLXRlbXBsYXRlPlxuPC9pb24tbW9kYWw+XG5cbjwhLS0gRm9yZ290IFBhc3N3b3JkIE1vZGFsIC0tPlxuPGlvbi1tb2RhbCBbaXNPcGVuXT1cImlzRm9yZ290UGFzc3dvcmRNb2RhbE9wZW5cIiAoZGlkRGlzbWlzcyk9XCJjbG9zZUZvcmdvdFBhc3N3b3JkTW9kYWwoKVwiPlxuICA8bmctdGVtcGxhdGU+XG4gICAgPGlvbi1oZWFkZXI+XG4gICAgICA8aW9uLXRvb2xiYXI+XG4gICAgICAgIDxpb24tYnV0dG9ucyBzbG90PVwiZW5kXCI+XG4gICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cImNsZWFyXCIgKGNsaWNrKT1cImNsb3NlRm9yZ290UGFzc3dvcmRNb2RhbCgpXCI+XG4gICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNsb3NlLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPC9pb24tYnV0dG9ucz5cbiAgICAgIDwvaW9uLXRvb2xiYXI+XG4gICAgPC9pb24taGVhZGVyPlxuICAgIDxpb24tY29udGVudCBjbGFzcz1cImlvbi1wYWRkaW5nXCI+XG4gICAgICA8c2VjdGlvbiBjbGFzcz1cIm1vZGFsLWZvcm0tc2VjdGlvblwiPlxuICAgICAgICBAaWYgKHByb3BzLmxvZ28pIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImxvZ28tY29udGFpbmVyXCI+XG4gICAgICAgICAgPHZhbC1pbWFnZSBbcHJvcHNdPVwicHJvcHMubG9nb1wiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIDx2YWwtZm9ybSBbcHJvcHNdPVwiZm9yZ290UGFzc3dvcmRGb3JtUHJvcHMoKVwiIChvblN1Ym1pdCk9XCJmb3Jnb3RQYXNzd29yZEhhbmRsZXIoJGV2ZW50KVwiIC8+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgPC9pb24tY29udGVudD5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvaW9uLW1vZGFsPlxuXG48IS0tIFJlc2V0IFBhc3N3b3JkIE1vZGFsIC0tPlxuPGlvbi1tb2RhbCBbaXNPcGVuXT1cImlzUmVzZXRQYXNzd29yZE1vZGFsT3BlblwiIFtiYWNrZHJvcERpc21pc3NdPVwiZmFsc2VcIj5cbiAgPG5nLXRlbXBsYXRlPlxuICAgIDxpb24taGVhZGVyPlxuICAgICAgPGlvbi10b29sYmFyPlxuICAgICAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cImVuZFwiPlxuICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIChjbGljayk9XCJjbG9zZVJlc2V0UGFzc3dvcmRNb2RhbCgpXCI+XG4gICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNsb3NlLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPC9pb24tYnV0dG9ucz5cbiAgICAgIDwvaW9uLXRvb2xiYXI+XG4gICAgPC9pb24taGVhZGVyPlxuICAgIDxpb24tY29udGVudCBjbGFzcz1cImlvbi1wYWRkaW5nXCI+XG4gICAgICA8c2VjdGlvbiBjbGFzcz1cIm1vZGFsLWZvcm0tc2VjdGlvblwiPlxuICAgICAgICBAaWYgKHByb3BzLmxvZ28pIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImxvZ28tY29udGFpbmVyXCI+XG4gICAgICAgICAgPHZhbC1pbWFnZSBbcHJvcHNdPVwicHJvcHMubG9nb1wiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIDx2YWwtZm9ybSBbcHJvcHNdPVwicmVzZXRQYXNzd29yZEZvcm1Qcm9wcygpXCIgKG9uU3VibWl0KT1cInJlc2V0UGFzc3dvcmRIYW5kbGVyKCRldmVudClcIiAvPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVzZW5kLWxpbmtcIj5cbiAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJkYXJrXCI+XG4gICAgICAgICAgICB7eyB0KCdub0NvZGVSZWNlaXZlZCcpIH19IEBpZiAocmVzZXRSZXNlbmRDb29sZG93biA+IDApIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29vbGRvd25cIj57eyB0KCdyZXNlbmRJbicsIHsgc2Vjb25kczogcmVzZXRSZXNlbmRDb29sZG93bi50b1N0cmluZygpIH0pIH19PC9zcGFuPlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8YSAoY2xpY2spPVwicmVzZW5kUmVzZXRDb2RlKClcIj57eyB0KCdyZXNlbmQnKSB9fTwvYT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc2VjdGlvbj5cbiAgICA8L2lvbi1jb250ZW50PlxuICA8L25nLXRlbXBsYXRlPlxuPC9pb24tbW9kYWw+XG5cbjwhLS0gTUZBIFZlcmlmeSBNb2RhbCAtLT5cbjxpb24tbW9kYWwgW2lzT3Blbl09XCJpc01GQVZlcmlmeU1vZGFsT3BlblwiIFtiYWNrZHJvcERpc21pc3NdPVwiZmFsc2VcIj5cbiAgPG5nLXRlbXBsYXRlPlxuICAgIDxpb24taGVhZGVyPlxuICAgICAgPGlvbi10b29sYmFyPlxuICAgICAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cImVuZFwiPlxuICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIChjbGljayk9XCJjbG9zZU1GQVZlcmlmeU1vZGFsKClcIj5cbiAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2xvc2Utb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICA8L2lvbi1idXR0b25zPlxuICAgICAgPC9pb24tdG9vbGJhcj5cbiAgICA8L2lvbi1oZWFkZXI+XG4gICAgPGlvbi1jb250ZW50IGNsYXNzPVwiaW9uLXBhZGRpbmdcIj5cbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwibW9kYWwtZm9ybS1zZWN0aW9uXCI+XG4gICAgICAgIEBpZiAocHJvcHMubG9nbykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwibG9nby1jb250YWluZXJcIj5cbiAgICAgICAgICA8dmFsLWltYWdlIFtwcm9wc109XCJwcm9wcy5sb2dvXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPHZhbC1mb3JtIFtwcm9wc109XCJtZmFWZXJpZnlGb3JtUHJvcHMoKVwiIChvblN1Ym1pdCk9XCJ2ZXJpZnlNRkFIYW5kbGVyKCRldmVudClcIiAvPlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvaW9uLWNvbnRlbnQ+XG4gIDwvbmctdGVtcGxhdGU+XG48L2lvbi1tb2RhbD5cbiJdfQ==
|
|
@@ -6,8 +6,10 @@ import { filter } from 'rxjs';
|
|
|
6
6
|
import { HeaderComponent } from '../../organisms/header/header.component';
|
|
7
7
|
import { CompanyFooterComponent } from '../../organisms/company-footer/company-footer.component';
|
|
8
8
|
import { ContainerComponent } from '../../atoms/container/container.component';
|
|
9
|
+
import { RefresherComponent } from '../../molecules/refresher/refresher.component';
|
|
9
10
|
import { ThemeService } from '../../../services/theme.service';
|
|
10
11
|
import { NavigationService } from '../../../services/navigation';
|
|
12
|
+
import { PageRefreshService } from '../../../services/page-refresh/page-refresh.service';
|
|
11
13
|
import { resolveColor } from '../../../shared/utils/styles';
|
|
12
14
|
import * as i0 from "@angular/core";
|
|
13
15
|
import * as i1 from "@angular/common";
|
|
@@ -37,6 +39,8 @@ export class PageWrapperComponent {
|
|
|
37
39
|
this.theme = inject(ThemeService);
|
|
38
40
|
this.nav = inject(NavigationService);
|
|
39
41
|
this.router = inject(Router);
|
|
42
|
+
/** Bus del pull-to-refresh — la página activa registra su handler aquí. */
|
|
43
|
+
this.pageRefresh = inject(PageRefreshService);
|
|
40
44
|
/**
|
|
41
45
|
* Page wrapper configuration.
|
|
42
46
|
* Signal-based input for full reactivity with computed().
|
|
@@ -97,6 +101,18 @@ export class PageWrapperComponent {
|
|
|
97
101
|
return resolveColor(bg);
|
|
98
102
|
});
|
|
99
103
|
}
|
|
104
|
+
/**
|
|
105
|
+
* Handler del gesto pull-to-refresh. Delega en el handler que registró la
|
|
106
|
+
* página activa (`PageRefreshService.run`) y cierra el spinner al terminar.
|
|
107
|
+
*/
|
|
108
|
+
async onPageRefresh(event) {
|
|
109
|
+
try {
|
|
110
|
+
await this.pageRefresh.run();
|
|
111
|
+
}
|
|
112
|
+
finally {
|
|
113
|
+
event.complete();
|
|
114
|
+
}
|
|
115
|
+
}
|
|
100
116
|
ngOnInit() {
|
|
101
117
|
if (this.props()?.scrollToTopOnNavigate !== false) {
|
|
102
118
|
this.routerSubscription = this.router.events
|
|
@@ -151,6 +167,11 @@ export class PageWrapperComponent {
|
|
|
151
167
|
'--background': background(),
|
|
152
168
|
}"
|
|
153
169
|
>
|
|
170
|
+
<!-- Pull-to-refresh estándar del factory. Se renderiza sólo cuando la
|
|
171
|
+
página activa registró un handler vía PageRefreshService. -->
|
|
172
|
+
@if (pageRefresh.hasHandler()) {
|
|
173
|
+
<val-refresher (refresh)="onPageRefresh($event)" />
|
|
174
|
+
}
|
|
154
175
|
<val-container [props]="{ size: contentMaxWidth() }">
|
|
155
176
|
<main>
|
|
156
177
|
<router-outlet></router-outlet>
|
|
@@ -161,11 +182,19 @@ export class PageWrapperComponent {
|
|
|
161
182
|
}
|
|
162
183
|
</ion-content>
|
|
163
184
|
</div>
|
|
164
|
-
`, isInline: true, styles: ["main{min-height:60vh;padding-bottom:calc(var(--val-bottom-nav-height, 0px) + env(safe-area-inset-bottom,0px) + 16px)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: HeaderComponent, selector: "val-header", inputs: ["props"], outputs: ["onClick"] }, { kind: "component", type: CompanyFooterComponent, selector: "val-company-footer", inputs: ["props"] }, { kind: "component", type: ContainerComponent, selector: "val-container", inputs: ["props"] }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }] }); }
|
|
185
|
+
`, isInline: true, styles: ["main{min-height:60vh;padding-bottom:calc(var(--val-bottom-nav-height, 0px) + env(safe-area-inset-bottom,0px) + 16px)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: HeaderComponent, selector: "val-header", inputs: ["props"], outputs: ["onClick"] }, { kind: "component", type: CompanyFooterComponent, selector: "val-company-footer", inputs: ["props"] }, { kind: "component", type: ContainerComponent, selector: "val-container", inputs: ["props"] }, { kind: "component", type: RefresherComponent, selector: "val-refresher", inputs: ["props"], outputs: ["refresh", "pullProgressChange", "stateChange"] }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }] }); }
|
|
165
186
|
}
|
|
166
187
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PageWrapperComponent, decorators: [{
|
|
167
188
|
type: Component,
|
|
168
|
-
args: [{ selector: 'val-page-wrapper', standalone: true, imports: [
|
|
189
|
+
args: [{ selector: 'val-page-wrapper', standalone: true, imports: [
|
|
190
|
+
CommonModule,
|
|
191
|
+
HeaderComponent,
|
|
192
|
+
CompanyFooterComponent,
|
|
193
|
+
ContainerComponent,
|
|
194
|
+
RefresherComponent,
|
|
195
|
+
RouterOutlet,
|
|
196
|
+
IonContent,
|
|
197
|
+
], template: `
|
|
169
198
|
<div class="ion-page">
|
|
170
199
|
<val-header [props]="headerProps()" (onClick)="onHeaderClickHandler($event)" />
|
|
171
200
|
<ion-content
|
|
@@ -175,6 +204,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
175
204
|
'--background': background(),
|
|
176
205
|
}"
|
|
177
206
|
>
|
|
207
|
+
<!-- Pull-to-refresh estándar del factory. Se renderiza sólo cuando la
|
|
208
|
+
página activa registró un handler vía PageRefreshService. -->
|
|
209
|
+
@if (pageRefresh.hasHandler()) {
|
|
210
|
+
<val-refresher (refresh)="onPageRefresh($event)" />
|
|
211
|
+
}
|
|
178
212
|
<val-container [props]="{ size: contentMaxWidth() }">
|
|
179
213
|
<main>
|
|
180
214
|
<router-outlet></router-outlet>
|
|
@@ -189,4 +223,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
189
223
|
}], propDecorators: { onHeaderClick: [{
|
|
190
224
|
type: Output
|
|
191
225
|
}] } });
|
|
192
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS13cmFwcGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy90ZW1wbGF0ZXMvcGFnZS13cmFwcGVyL3BhZ2Utd3JhcHBlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFVBQVUsRUFBZ0MsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRixPQUFPLEVBQUUsTUFBTSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUM1QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDMUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDakcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFFL0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRWpFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7O0FBRTVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQW9DSCxNQUFNLE9BQU8sb0JBQW9CO0lBbkNqQztRQW9DVSxVQUFLLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdCLFFBQUcsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNoQyxXQUFNLEdBQUcs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RUFBRSxzQkFBc0IsRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsVUFBVSxDQUFDLFlBQ3BHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CVDs4QkE0QlMsYUFBYTtzQkFBdEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBFdmVudEVtaXR0ZXIsIGluamVjdCwgaW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5hdmlnYXRpb25FbmQsIFJvdXRlciwgUm91dGVyT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IElvbkNvbnRlbnQsIFZpZXdXaWxsRW50ZXIsIFZpZXdXaWxsTGVhdmUgfSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IGZpbHRlciwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvaGVhZGVyL2hlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29tcGFueUZvb3RlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9jb21wYW55LWZvb3Rlci9jb21wYW55LWZvb3Rlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29udGFpbmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvY29udGFpbmVyL2NvbnRhaW5lci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29udGFpbmVyU2l6ZSB9IGZyb20gJy4uLy4uL2F0b21zL2NvbnRhaW5lci90eXBlcyc7XG5pbXBvcnQgeyBUaGVtZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy90aGVtZS5zZXJ2aWNlJztcbmltcG9ydCB7IE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbmF2aWdhdGlvbic7XG5pbXBvcnQgeyBQYWdlV3JhcHBlck1ldGFkYXRhIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyByZXNvbHZlQ29sb3IgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvdXRpbHMvc3R5bGVzJztcblxuLyoqXG4gKiB2YWwtcGFnZS13cmFwcGVyXG4gKlxuICogQSBjb21wbGV0ZSBwYWdlIHdyYXBwZXIgdGVtcGxhdGUgd2l0aCBoZWFkZXIsIHJvdXRlciBvdXRsZXQsIGZvb3RlcixcbiAqIGFuZCBhdXRvbWF0aWMgc2Nyb2xsLXRvLXRvcCBvbiBuYXZpZ2F0aW9uLlxuICpcbiAqIEBleGFtcGxlXG4gKiA8dmFsLXBhZ2Utd3JhcHBlclxuICogICBbcHJvcHNdPVwie1xuICogICAgIGhvbWVSb3V0ZTogJy8nLFxuICogICAgIHNjcm9sbFRvVG9wT25OYXZpZ2F0ZTogdHJ1ZSxcbiAqICAgICBmb290ZXI6IHtcbiAqICAgICAgIGxpbmtzOiB7IC4uLiB9LFxuICogICAgICAgcmlnaHRzOiB7IGNvbXBhbnlOYW1lOiAnQWNtZScgfVxuICogICAgIH1cbiAqICAgfVwiXG4gKiA+PC92YWwtcGFnZS13cmFwcGVyPlxuICpcbiAqIEBpbnB1dCBwcm9wcyAtIFBhZ2Ugd3JhcHBlciBjb25maWd1cmF0aW9uXG4gKiBAb3V0cHV0IG9uSGVhZGVyQ2xpY2sgLSBFbWl0cyB3aGVuIGEgaGVhZGVyIGFjdGlvbiBpcyBjbGlja2VkXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1wYWdlLXdyYXBwZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBIZWFkZXJDb21wb25lbnQsIENvbXBhbnlGb290ZXJDb21wb25lbnQsIENvbnRhaW5lckNvbXBvbmVudCwgUm91dGVyT3V0bGV0LCBJb25Db250ZW50XSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiaW9uLXBhZ2VcIj5cbiAgICAgIDx2YWwtaGVhZGVyIFtwcm9wc109XCJoZWFkZXJQcm9wcygpXCIgKG9uQ2xpY2spPVwib25IZWFkZXJDbGlja0hhbmRsZXIoJGV2ZW50KVwiIC8+XG4gICAgICA8aW9uLWNvbnRlbnRcbiAgICAgICAgW2lkXT1cImNvbnRlbnRJZCgpXCJcbiAgICAgICAgW2Z1bGxzY3JlZW5dPVwidHJ1ZVwiXG4gICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAnLS1iYWNrZ3JvdW5kJzogYmFja2dyb3VuZCgpLFxuICAgICAgICB9XCJcbiAgICAgID5cbiAgICAgICAgPHZhbC1jb250YWluZXIgW3Byb3BzXT1cInsgc2l6ZTogY29udGVudE1heFdpZHRoKCkgfVwiPlxuICAgICAgICAgIDxtYWluPlxuICAgICAgICAgICAgPHJvdXRlci1vdXRsZXQ+PC9yb3V0ZXItb3V0bGV0PlxuICAgICAgICAgIDwvbWFpbj5cbiAgICAgICAgPC92YWwtY29udGFpbmVyPlxuICAgICAgICBAaWYgKHByb3BzRm9vdGVyKCkpIHtcbiAgICAgICAgICA8dmFsLWNvbXBhbnktZm9vdGVyIFtwcm9wc109XCJwcm9wc0Zvb3RlcigpXCIgLz5cbiAgICAgICAgfVxuICAgICAgPC9pb24tY29udGVudD5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBgXG4gICAgbWFpbiB7XG4gICAgICBtaW4taGVpZ2h0OiA2MHZoO1xuICAgICAgLyogUmVzZXJ2YSBlc3BhY2lvIHBhcmEgZWwgYm90dG9tLW5hdiBmbG9hdGluZyArIHNhZmUtYXJlYSAoaU9TIGhvbWUgaW5kaWNhdG9yKVxuICAgICAgICAgKyBicmVhdGhpbmcgcm9vbSAoMTZweCkuIFNpbiBlc3RvLCBlbCDDumx0aW1vIGVsZW1lbnRvIHF1ZWRhIHRhcGFkbyBwb3JcbiAgICAgICAgIGVsIG5hdiBlbiBtb2JpbGUvUFdBLiAqL1xuICAgICAgcGFkZGluZy1ib3R0b206IGNhbGModmFyKC0tdmFsLWJvdHRvbS1uYXYtaGVpZ2h0LCAwcHgpICsgZW52KHNhZmUtYXJlYS1pbnNldC1ib3R0b20sIDBweCkgKyAxNnB4KTtcbiAgICB9XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIFBhZ2VXcmFwcGVyQ29tcG9uZW50IGltcGxlbWVudHMgVmlld1dpbGxFbnRlciwgVmlld1dpbGxMZWF2ZSwgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHRoZW1lID0gaW5qZWN0KFRoZW1lU2VydmljZSk7XG4gIHByaXZhdGUgbmF2ID0gaW5qZWN0KE5hdmlnYXRpb25TZXJ2aWNlKTtcbiAgcHJpdmF0ZSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgcHJpdmF0ZSByb3V0ZXJTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgLyoqXG4gICAqIFBhZ2Ugd3JhcHBlciBjb25maWd1cmF0aW9uLlxuICAgKiBTaWduYWwtYmFzZWQgaW5wdXQgZm9yIGZ1bGwgcmVhY3Rpdml0eSB3aXRoIGNvbXB1dGVkKCkuXG4gICAqL1xuICByZWFkb25seSBwcm9wcyA9IGlucHV0PFBhZ2VXcmFwcGVyTWV0YWRhdGE+KHtcbiAgICBzY3JvbGxUb1RvcE9uTmF2aWdhdGU6IHRydWUsXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBFbWl0cyB3aGVuIGEgaGVhZGVyIGFjdGlvbiBpcyBjbGlja2VkLlxuICAgKi9cbiAgQE91dHB1dCgpIG9uSGVhZGVyQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAvKipcbiAgICogRGVmYXVsdCBoZWFkZXIgY29uZmlndXJhdGlvbiAoY2FjaGVkIHRvIGF2b2lkIGluZmluaXRlIGNoYW5nZSBkZXRlY3Rpb24pLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0SGVhZGVyID0ge1xuICAgIGJvcmRlcmVkOiB0cnVlLFxuICAgIHRyYW5zbHVjZW50OiB0cnVlLFxuICAgIHRvb2xiYXI6IHtcbiAgICAgIHdpdGhCYWNrOiBmYWxzZSxcbiAgICAgIHdpdGhBY3Rpb25zOiB0cnVlLFxuICAgICAgdGV4dENvbG9yOiAnZGFyaycgYXMgY29uc3QsXG4gICAgICB3aXRoTWVudTogdHJ1ZSxcbiAgICAgIHRpdGxlOiAnJyxcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHRva2VuOiAnaGVhZGVyLWxvZ28nLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgICAgICBwb3NpdGlvbjogJ2xlZnQnIGFzIGNvbnN0LFxuICAgICAgICAgIHR5cGU6ICdJTUFHRScgYXMgY29uc3QsXG4gICAgICAgICAgaW1hZ2U6IHtcbiAgICAgICAgICAgIHdpZHRoOiAxMCxcbiAgICAgICAgICAgIHNyYzogJy0tbWFpbi1sb2dvJyxcbiAgICAgICAgICAgIGFsdDogJ2hlYWRlciBsb2dvJyxcbiAgICAgICAgICAgIG1vZGU6ICdib3gnIGFzIGNvbnN0LFxuICAgICAgICAgICAgc2hhZGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGJvcmRlcmVkOiBmYWxzZSxcbiAgICAgICAgICAgIHNpemU6ICdzbWFsbCcgYXMgY29uc3QsXG4gICAgICAgICAgICBsaW1pdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGZsZXg6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgfTtcblxuICAvLyBDb21wdXRlZCBoZWxwZXJzIGZvciB0ZW1wbGF0ZSBiaW5kaW5nc1xuICBoZWFkZXJQcm9wcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMucHJvcHMoKT8uaGVhZGVyIHx8IHRoaXMuZGVmYXVsdEhlYWRlcik7XG4gIGNvbnRlbnRJZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMucHJvcHMoKT8uY29udGVudElkIHx8ICdwYWdlLXdyYXBwZXInKTtcbiAgcHJvcHNGb290ZXIgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnByb3BzKCk/LmZvb3Rlcik7XG4gIGNvbnRlbnRNYXhXaWR0aCA9IGNvbXB1dGVkPENvbnRhaW5lclNpemU+KCgpID0+IHRoaXMucHJvcHMoKT8uY29udGVudE1heFdpZHRoID8/ICdmbHVpZCcpO1xuICBiYWNrZ3JvdW5kID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICh0aGlzLnRoZW1lLklzRGFyaykge1xuICAgICAgcmV0dXJuICd2YXIoLS1pb24tYmFja2dyb3VuZC1jb2xvciknO1xuICAgIH1cbiAgICBjb25zdCBiZyA9IHRoaXMucHJvcHMoKT8uYmFja2dyb3VuZDtcbiAgICBpZiAoIWJnKSB7XG4gICAgICByZXR1cm4gJ3ZhcigtLWlvbi1iYWNrZ3JvdW5kLWNvbG9yKSc7XG4gICAgfVxuICAgIHJldHVybiByZXNvbHZlQ29sb3IoYmcpO1xuICB9KTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wcm9wcygpPy5zY3JvbGxUb1RvcE9uTmF2aWdhdGUgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLnJvdXRlclN1YnNjcmlwdGlvbiA9IHRoaXMucm91dGVyLmV2ZW50c1xuICAgICAgICAucGlwZShmaWx0ZXIoZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zY3JvbGxUb1RvcCgpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yb3V0ZXJTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMucm91dGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgaW9uVmlld1dpbGxMZWF2ZSgpOiB2b2lkIHtcbiAgICAvLyBPcHRpb25hbDogY2FuIGFkZCBsb2dpYyBvbiB2aWV3IGxlYXZlXG4gIH1cblxuICBpb25WaWV3V2lsbEVudGVyKCk6IHZvaWQge1xuICAgIHRoaXMuc2Nyb2xsVG9Ub3AoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTY3JvbGxzIHRoZSBjb250ZW50IHRvIHRoZSB0b3AuXG4gICAqL1xuICBwcml2YXRlIHNjcm9sbFRvVG9wKCk6IHZvaWQge1xuICAgIGNvbnN0IGlkID0gdGhpcy5wcm9wcygpPy5jb250ZW50SWQgfHwgJ3BhZ2Utd3JhcHBlcic7XG4gICAgY29uc3QgaW9uQ29udGVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke2lkfWApIGFzIGFueTtcbiAgICBpZiAoaW9uQ29udGVudCAmJiBpb25Db250ZW50LnNjcm9sbFRvVG9wKSB7XG4gICAgICBpb25Db250ZW50LnNjcm9sbFRvVG9wKDMwMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdpbmRvdy5zY3JvbGxUbyh7IHRvcDogMCwgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGhlYWRlciBhY3Rpb24gY2xpY2tzLlxuICAgKi9cbiAgb25IZWFkZXJDbGlja0hhbmRsZXIodG9rZW46IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMub25IZWFkZXJDbGljay5lbWl0KHRva2VuKTtcblxuICAgIGNvbnN0IGhvbWVSb3V0ZSA9IHRoaXMucHJvcHMoKT8uaG9tZVJvdXRlO1xuICAgIGlmICh0b2tlbiA9PT0gJ2hlYWRlci1sb2dvJyAmJiBob21lUm91dGUpIHtcbiAgICAgIHRoaXMubmF2Lm5hdmlnYXRlQnlVcmwoaG9tZVJvdXRlKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
226
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS13cmFwcGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy90ZW1wbGF0ZXMvcGFnZS13cmFwcGVyL3BhZ2Utd3JhcHBlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFVBQVUsRUFBZ0MsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRixPQUFPLEVBQUUsTUFBTSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUM1QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDMUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDakcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFFL0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFFbkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBRXpGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7O0FBRTVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQWlESCxNQUFNLE9BQU8sb0JBQW9CO0lBaERqQztRQWlEVSxVQUFL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MUMsSUFBSSxLQUFLLEtBQUssYUFBYSxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3BDLENBQUM7SUFDSCxDQUFDOytHQW5JVSxvQkFBb0I7bUdBQXBCLG9CQUFvQiw2UEFwQ3JCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUJULGdNQWpDQyxZQUFZLG9IQUNaLGVBQWUsZ0dBQ2Ysc0JBQXNCLGtGQUN0QixrQkFBa0IsNkVBQ2xCLGtCQUFrQix3SUFDbEIsWUFBWSwySkFDWixVQUFVOzs0RkFzQ0Qsb0JBQW9CO2tCQWhEaEMsU0FBUzsrQkFDRSxrQkFBa0IsY0FDaEIsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osZUFBZTt3QkFDZixzQkFBc0I7d0JBQ3RCLGtCQUFrQjt3QkFDbEIsa0JBQWtCO3dCQUNsQixZQUFZO3dCQUNaLFVBQVU7cUJBQ1gsWUFDUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCVDs4QkEyQ1MsYUFBYTtzQkFBdEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBFdmVudEVtaXR0ZXIsIGluamVjdCwgaW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5hdmlnYXRpb25FbmQsIFJvdXRlciwgUm91dGVyT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IElvbkNvbnRlbnQsIFZpZXdXaWxsRW50ZXIsIFZpZXdXaWxsTGVhdmUgfSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IGZpbHRlciwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvaGVhZGVyL2hlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29tcGFueUZvb3RlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9jb21wYW55LWZvb3Rlci9jb21wYW55LWZvb3Rlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29udGFpbmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvY29udGFpbmVyL2NvbnRhaW5lci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29udGFpbmVyU2l6ZSB9IGZyb20gJy4uLy4uL2F0b21zL2NvbnRhaW5lci90eXBlcyc7XG5pbXBvcnQgeyBSZWZyZXNoZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvcmVmcmVzaGVyL3JlZnJlc2hlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmVmcmVzaEV2ZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL3JlZnJlc2hlci90eXBlcyc7XG5pbXBvcnQgeyBUaGVtZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy90aGVtZS5zZXJ2aWNlJztcbmltcG9ydCB7IE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbmF2aWdhdGlvbic7XG5pbXBvcnQgeyBQYWdlUmVmcmVzaFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wYWdlLXJlZnJlc2gvcGFnZS1yZWZyZXNoLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGFnZVdyYXBwZXJNZXRhZGF0YSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgcmVzb2x2ZUNvbG9yIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3V0aWxzL3N0eWxlcyc7XG5cbi8qKlxuICogdmFsLXBhZ2Utd3JhcHBlclxuICpcbiAqIEEgY29tcGxldGUgcGFnZSB3cmFwcGVyIHRlbXBsYXRlIHdpdGggaGVhZGVyLCByb3V0ZXIgb3V0bGV0LCBmb290ZXIsXG4gKiBhbmQgYXV0b21hdGljIHNjcm9sbC10by10b3Agb24gbmF2aWdhdGlvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogPHZhbC1wYWdlLXdyYXBwZXJcbiAqICAgW3Byb3BzXT1cIntcbiAqICAgICBob21lUm91dGU6ICcvJyxcbiAqICAgICBzY3JvbGxUb1RvcE9uTmF2aWdhdGU6IHRydWUsXG4gKiAgICAgZm9vdGVyOiB7XG4gKiAgICAgICBsaW5rczogeyAuLi4gfSxcbiAqICAgICAgIHJpZ2h0czogeyBjb21wYW55TmFtZTogJ0FjbWUnIH1cbiAqICAgICB9XG4gKiAgIH1cIlxuICogPjwvdmFsLXBhZ2Utd3JhcHBlcj5cbiAqXG4gKiBAaW5wdXQgcHJvcHMgLSBQYWdlIHdyYXBwZXIgY29uZmlndXJhdGlvblxuICogQG91dHB1dCBvbkhlYWRlckNsaWNrIC0gRW1pdHMgd2hlbiBhIGhlYWRlciBhY3Rpb24gaXMgY2xpY2tlZFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtcGFnZS13cmFwcGVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBIZWFkZXJDb21wb25lbnQsXG4gICAgQ29tcGFueUZvb3RlckNvbXBvbmVudCxcbiAgICBDb250YWluZXJDb21wb25lbnQsXG4gICAgUmVmcmVzaGVyQ29tcG9uZW50LFxuICAgIFJvdXRlck91dGxldCxcbiAgICBJb25Db250ZW50LFxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJpb24tcGFnZVwiPlxuICAgICAgPHZhbC1oZWFkZXIgW3Byb3BzXT1cImhlYWRlclByb3BzKClcIiAob25DbGljayk9XCJvbkhlYWRlckNsaWNrSGFuZGxlcigkZXZlbnQpXCIgLz5cbiAgICAgIDxpb24tY29udGVudFxuICAgICAgICBbaWRdPVwiY29udGVudElkKClcIlxuICAgICAgICBbZnVsbHNjcmVlbl09XCJ0cnVlXCJcbiAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICctLWJhY2tncm91bmQnOiBiYWNrZ3JvdW5kKCksXG4gICAgICAgIH1cIlxuICAgICAgPlxuICAgICAgICA8IS0tIFB1bGwtdG8tcmVmcmVzaCBlc3TDoW5kYXIgZGVsIGZhY3RvcnkuIFNlIHJlbmRlcml6YSBzw7NsbyBjdWFuZG8gbGFcbiAgICAgICAgICAgICBww6FnaW5hIGFjdGl2YSByZWdpc3Ryw7MgdW4gaGFuZGxlciB2w61hIFBhZ2VSZWZyZXNoU2VydmljZS4gLS0+XG4gICAgICAgIEBpZiAocGFnZVJlZnJlc2guaGFzSGFuZGxlcigpKSB7XG4gICAgICAgICAgPHZhbC1yZWZyZXNoZXIgKHJlZnJlc2gpPVwib25QYWdlUmVmcmVzaCgkZXZlbnQpXCIgLz5cbiAgICAgICAgfVxuICAgICAgICA8dmFsLWNvbnRhaW5lciBbcHJvcHNdPVwieyBzaXplOiBjb250ZW50TWF4V2lkdGgoKSB9XCI+XG4gICAgICAgICAgPG1haW4+XG4gICAgICAgICAgICA8cm91dGVyLW91dGxldD48L3JvdXRlci1vdXRsZXQ+XG4gICAgICAgICAgPC9tYWluPlxuICAgICAgICA8L3ZhbC1jb250YWluZXI+XG4gICAgICAgIEBpZiAocHJvcHNGb290ZXIoKSkge1xuICAgICAgICAgIDx2YWwtY29tcGFueS1mb290ZXIgW3Byb3BzXT1cInByb3BzRm9vdGVyKClcIiAvPlxuICAgICAgICB9XG4gICAgICA8L2lvbi1jb250ZW50PlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IGBcbiAgICBtYWluIHtcbiAgICAgIG1pbi1oZWlnaHQ6IDYwdmg7XG4gICAgICAvKiBSZXNlcnZhIGVzcGFjaW8gcGFyYSBlbCBib3R0b20tbmF2IGZsb2F0aW5nICsgc2FmZS1hcmVhIChpT1MgaG9tZSBpbmRpY2F0b3IpXG4gICAgICAgICArIGJyZWF0aGluZyByb29tICgxNnB4KS4gU2luIGVzdG8sIGVsIMO6bHRpbW8gZWxlbWVudG8gcXVlZGEgdGFwYWRvIHBvclxuICAgICAgICAgZWwgbmF2IGVuIG1vYmlsZS9QV0EuICovXG4gICAgICBwYWRkaW5nLWJvdHRvbTogY2FsYyh2YXIoLS12YWwtYm90dG9tLW5hdi1oZWlnaHQsIDBweCkgKyBlbnYoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSwgMHB4KSArIDE2cHgpO1xuICAgIH1cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgUGFnZVdyYXBwZXJDb21wb25lbnQgaW1wbGVtZW50cyBWaWV3V2lsbEVudGVyLCBWaWV3V2lsbExlYXZlLCBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgdGhlbWUgPSBpbmplY3QoVGhlbWVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBuYXYgPSBpbmplY3QoTmF2aWdhdGlvblNlcnZpY2UpO1xuICBwcml2YXRlIHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICBwcml2YXRlIHJvdXRlclN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICAvKiogQnVzIGRlbCBwdWxsLXRvLXJlZnJlc2gg4oCUIGxhIHDDoWdpbmEgYWN0aXZhIHJlZ2lzdHJhIHN1IGhhbmRsZXIgYXF1w60uICovXG4gIHByb3RlY3RlZCBwYWdlUmVmcmVzaCA9IGluamVjdChQYWdlUmVmcmVzaFNlcnZpY2UpO1xuXG4gIC8qKlxuICAgKiBIYW5kbGVyIGRlbCBnZXN0byBwdWxsLXRvLXJlZnJlc2guIERlbGVnYSBlbiBlbCBoYW5kbGVyIHF1ZSByZWdpc3Ryw7MgbGFcbiAgICogcMOhZ2luYSBhY3RpdmEgKGBQYWdlUmVmcmVzaFNlcnZpY2UucnVuYCkgeSBjaWVycmEgZWwgc3Bpbm5lciBhbCB0ZXJtaW5hci5cbiAgICovXG4gIGFzeW5jIG9uUGFnZVJlZnJlc2goZXZlbnQ6IFJlZnJlc2hFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnBhZ2VSZWZyZXNoLnJ1bigpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBldmVudC5jb21wbGV0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQYWdlIHdyYXBwZXIgY29uZmlndXJhdGlvbi5cbiAgICogU2lnbmFsLWJhc2VkIGlucHV0IGZvciBmdWxsIHJlYWN0aXZpdHkgd2l0aCBjb21wdXRlZCgpLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvcHMgPSBpbnB1dDxQYWdlV3JhcHBlck1ldGFkYXRhPih7XG4gICAgc2Nyb2xsVG9Ub3BPbk5hdmlnYXRlOiB0cnVlLFxuICB9KTtcblxuICAvKipcbiAgICogRW1pdHMgd2hlbiBhIGhlYWRlciBhY3Rpb24gaXMgY2xpY2tlZC5cbiAgICovXG4gIEBPdXRwdXQoKSBvbkhlYWRlckNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgaGVhZGVyIGNvbmZpZ3VyYXRpb24gKGNhY2hlZCB0byBhdm9pZCBpbmZpbml0ZSBjaGFuZ2UgZGV0ZWN0aW9uKS5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdEhlYWRlciA9IHtcbiAgICBib3JkZXJlZDogdHJ1ZSxcbiAgICB0cmFuc2x1Y2VudDogdHJ1ZSxcbiAgICB0b29sYmFyOiB7XG4gICAgICB3aXRoQmFjazogZmFsc2UsXG4gICAgICB3aXRoQWN0aW9uczogdHJ1ZSxcbiAgICAgIHRleHRDb2xvcjogJ2RhcmsnIGFzIGNvbnN0LFxuICAgICAgd2l0aE1lbnU6IHRydWUsXG4gICAgICB0aXRsZTogJycsXG4gICAgICBhY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0b2tlbjogJ2hlYWRlci1sb2dvJyxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICAgICAgcG9zaXRpb246ICdsZWZ0JyBhcyBjb25zdCxcbiAgICAgICAgICB0eXBlOiAnSU1BR0UnIGFzIGNvbnN0LFxuICAgICAgICAgIGltYWdlOiB7XG4gICAgICAgICAgICB3aWR0aDogMTAsXG4gICAgICAgICAgICBzcmM6ICctLW1haW4tbG9nbycsXG4gICAgICAgICAgICBhbHQ6ICdoZWFkZXIgbG9nbycsXG4gICAgICAgICAgICBtb2RlOiAnYm94JyBhcyBjb25zdCxcbiAgICAgICAgICAgIHNoYWRlZDogZmFsc2UsXG4gICAgICAgICAgICBib3JkZXJlZDogZmFsc2UsXG4gICAgICAgICAgICBzaXplOiAnc21hbGwnIGFzIGNvbnN0LFxuICAgICAgICAgICAgbGltaXRlZDogZmFsc2UsXG4gICAgICAgICAgICBmbGV4OiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIH07XG5cbiAgLy8gQ29tcHV0ZWQgaGVscGVycyBmb3IgdGVtcGxhdGUgYmluZGluZ3NcbiAgaGVhZGVyUHJvcHMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnByb3BzKCk/LmhlYWRlciB8fCB0aGlzLmRlZmF1bHRIZWFkZXIpO1xuICBjb250ZW50SWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnByb3BzKCk/LmNvbnRlbnRJZCB8fCAncGFnZS13cmFwcGVyJyk7XG4gIHByb3BzRm9vdGVyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5wcm9wcygpPy5mb290ZXIpO1xuICBjb250ZW50TWF4V2lkdGggPSBjb21wdXRlZDxDb250YWluZXJTaXplPigoKSA9PiB0aGlzLnByb3BzKCk/LmNvbnRlbnRNYXhXaWR0aCA/PyAnZmx1aWQnKTtcbiAgYmFja2dyb3VuZCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAodGhpcy50aGVtZS5Jc0RhcmspIHtcbiAgICAgIHJldHVybiAndmFyKC0taW9uLWJhY2tncm91bmQtY29sb3IpJztcbiAgICB9XG4gICAgY29uc3QgYmcgPSB0aGlzLnByb3BzKCk/LmJhY2tncm91bmQ7XG4gICAgaWYgKCFiZykge1xuICAgICAgcmV0dXJuICd2YXIoLS1pb24tYmFja2dyb3VuZC1jb2xvciknO1xuICAgIH1cbiAgICByZXR1cm4gcmVzb2x2ZUNvbG9yKGJnKTtcbiAgfSk7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJvcHMoKT8uc2Nyb2xsVG9Ub3BPbk5hdmlnYXRlICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5yb3V0ZXJTdWJzY3JpcHRpb24gPSB0aGlzLnJvdXRlci5ldmVudHNcbiAgICAgICAgLnBpcGUoZmlsdGVyKGV2ZW50ID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2Nyb2xsVG9Ub3AoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucm91dGVyU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnJvdXRlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIGlvblZpZXdXaWxsTGVhdmUoKTogdm9pZCB7XG4gICAgLy8gT3B0aW9uYWw6IGNhbiBhZGQgbG9naWMgb24gdmlldyBsZWF2ZVxuICB9XG5cbiAgaW9uVmlld1dpbGxFbnRlcigpOiB2b2lkIHtcbiAgICB0aGlzLnNjcm9sbFRvVG9wKCk7XG4gIH1cblxuICAvKipcbiAgICogU2Nyb2xscyB0aGUgY29udGVudCB0byB0aGUgdG9wLlxuICAgKi9cbiAgcHJpdmF0ZSBzY3JvbGxUb1RvcCgpOiB2b2lkIHtcbiAgICBjb25zdCBpZCA9IHRoaXMucHJvcHMoKT8uY29udGVudElkIHx8ICdwYWdlLXdyYXBwZXInO1xuICAgIGNvbnN0IGlvbkNvbnRlbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtpZH1gKSBhcyBhbnk7XG4gICAgaWYgKGlvbkNvbnRlbnQgJiYgaW9uQ29udGVudC5zY3JvbGxUb1RvcCkge1xuICAgICAgaW9uQ29udGVudC5zY3JvbGxUb1RvcCgzMDApO1xuICAgIH0gZWxzZSB7XG4gICAgICB3aW5kb3cuc2Nyb2xsVG8oeyB0b3A6IDAsIGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBoZWFkZXIgYWN0aW9uIGNsaWNrcy5cbiAgICovXG4gIG9uSGVhZGVyQ2xpY2tIYW5kbGVyKHRva2VuOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLm9uSGVhZGVyQ2xpY2suZW1pdCh0b2tlbik7XG5cbiAgICBjb25zdCBob21lUm91dGUgPSB0aGlzLnByb3BzKCk/LmhvbWVSb3V0ZTtcbiAgICBpZiAodG9rZW4gPT09ICdoZWFkZXItbG9nbycgJiYgaG9tZVJvdXRlKSB7XG4gICAgICB0aGlzLm5hdi5uYXZpZ2F0ZUJ5VXJsKGhvbWVSb3V0ZSk7XG4gICAgfVxuICB9XG59XG4iXX0=
|