valtech-components 4.0.944 → 4.0.945

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.
Files changed (73) hide show
  1. package/esm2022/lib/components/atoms/avatar/avatar.component.mjs +3 -3
  2. package/esm2022/lib/components/atoms/box/box.component.mjs +3 -3
  3. package/esm2022/lib/components/atoms/button/button.component.mjs +15 -5
  4. package/esm2022/lib/components/atoms/container/container.component.mjs +2 -2
  5. package/esm2022/lib/components/atoms/display/display.component.mjs +3 -3
  6. package/esm2022/lib/components/atoms/divider/divider.component.mjs +3 -3
  7. package/esm2022/lib/components/atoms/href/href.component.mjs +3 -3
  8. package/esm2022/lib/components/atoms/icon/icon.component.mjs +3 -3
  9. package/esm2022/lib/components/atoms/image/image.component.mjs +3 -3
  10. package/esm2022/lib/components/atoms/progress-bar/progress-bar.component.mjs +3 -3
  11. package/esm2022/lib/components/atoms/qr-code/qr-code.component.mjs +3 -3
  12. package/esm2022/lib/components/atoms/text/text.component.mjs +3 -3
  13. package/esm2022/lib/components/atoms/title/title.component.mjs +3 -3
  14. package/esm2022/lib/components/molecules/alert-box/alert-box.component.mjs +3 -3
  15. package/esm2022/lib/components/molecules/button-group/button-group.component.mjs +3 -3
  16. package/esm2022/lib/components/molecules/card/card.component.mjs +3 -3
  17. package/esm2022/lib/components/molecules/chip-group/chip-group.component.mjs +3 -3
  18. package/esm2022/lib/components/molecules/code-display/code-display.component.mjs +3 -3
  19. package/esm2022/lib/components/molecules/command-display/command-display.component.mjs +3 -3
  20. package/esm2022/lib/components/molecules/comment/comment.component.mjs +3 -3
  21. package/esm2022/lib/components/molecules/content-loader/content-loader.component.mjs +3 -3
  22. package/esm2022/lib/components/molecules/date-input/date-input.component.mjs +3 -3
  23. package/esm2022/lib/components/molecules/file-input/file-input.component.mjs +3 -3
  24. package/esm2022/lib/components/molecules/glow-card/glow-card.component.mjs +3 -3
  25. package/esm2022/lib/components/molecules/hint/hint.component.mjs +3 -3
  26. package/esm2022/lib/components/molecules/layered-card/layered-card.component.mjs +3 -3
  27. package/esm2022/lib/components/molecules/link/link.component.mjs +3 -3
  28. package/esm2022/lib/components/molecules/links-cake/links-cake.component.mjs +3 -3
  29. package/esm2022/lib/components/molecules/notes-box/notes-box.component.mjs +3 -3
  30. package/esm2022/lib/components/molecules/password-input/password-input.component.mjs +3 -3
  31. package/esm2022/lib/components/molecules/pill/pill.component.mjs +3 -3
  32. package/esm2022/lib/components/molecules/pin-input/pin-input.component.mjs +3 -3
  33. package/esm2022/lib/components/molecules/popover-selector/popover-selector.component.mjs +3 -3
  34. package/esm2022/lib/components/molecules/progress-status/progress-status.component.mjs +3 -3
  35. package/esm2022/lib/components/molecules/prompter/prompter.component.mjs +3 -3
  36. package/esm2022/lib/components/molecules/rating/rating.component.mjs +3 -3
  37. package/esm2022/lib/components/molecules/searchbar/searchbar.component.mjs +3 -3
  38. package/esm2022/lib/components/molecules/select-input/select-input.component.mjs +3 -3
  39. package/esm2022/lib/components/molecules/stepper/stepper.component.mjs +3 -3
  40. package/esm2022/lib/components/molecules/text-input/text-input.component.mjs +3 -3
  41. package/esm2022/lib/components/molecules/title-block/title-block.component.mjs +3 -3
  42. package/esm2022/lib/components/organisms/about-view/about-view.component.mjs +209 -195
  43. package/esm2022/lib/components/organisms/account-view/account-view.component.mjs +315 -309
  44. package/esm2022/lib/components/organisms/api-keys-view/api-keys-view.component.mjs +105 -99
  45. package/esm2022/lib/components/organisms/article/article.component.mjs +3 -3
  46. package/esm2022/lib/components/organisms/banner/banner.component.mjs +3 -3
  47. package/esm2022/lib/components/organisms/comment-section/comment-section.component.mjs +3 -3
  48. package/esm2022/lib/components/organisms/data-table/data-table.component.mjs +3 -3
  49. package/esm2022/lib/components/organisms/form/form.component.mjs +3 -3
  50. package/esm2022/lib/components/organisms/header/header.component.mjs +3 -3
  51. package/esm2022/lib/components/organisms/item-list/item-list.component.mjs +3 -3
  52. package/esm2022/lib/components/organisms/no-content/no-content.component.mjs +3 -3
  53. package/esm2022/lib/components/organisms/notification-preferences-view/notification-preferences-view.component.mjs +217 -204
  54. package/esm2022/lib/components/organisms/notifications-view/notifications-view.component.mjs +277 -271
  55. package/esm2022/lib/components/organisms/organization-view/organization-view.component.mjs +497 -483
  56. package/esm2022/lib/components/organisms/permissions-view/permissions-view.component.mjs +269 -263
  57. package/esm2022/lib/components/organisms/preferences-view/preferences-view.component.mjs +135 -130
  58. package/esm2022/lib/components/organisms/profile-view/profile-content.component.mjs +111 -105
  59. package/esm2022/lib/components/organisms/security-view/security-view.component.mjs +241 -235
  60. package/esm2022/lib/components/organisms/settings-hub/settings-hub.component.mjs +53 -48
  61. package/esm2022/lib/components/organisms/toolbar/toolbar.component.mjs +3 -3
  62. package/esm2022/lib/components/organisms/wizard/wizard.component.mjs +3 -3
  63. package/esm2022/lib/components/templates/simple/simple.component.mjs +3 -3
  64. package/esm2022/lib/components/types.mjs +1 -1
  65. package/esm2022/lib/version.mjs +2 -2
  66. package/fesm2022/valtech-components.mjs +2524 -2438
  67. package/fesm2022/valtech-components.mjs.map +1 -1
  68. package/lib/components/atoms/button/button.component.d.ts +6 -0
  69. package/lib/components/organisms/article/article.component.d.ts +1 -1
  70. package/lib/components/types.d.ts +12 -2
  71. package/lib/version.d.ts +1 -1
  72. package/package.json +1 -1
  73. package/src/lib/components/styles/variables.scss +5 -0
@@ -8,6 +8,7 @@ import { FormComponent } from '../form/form.component';
8
8
  import { ShareProfileModalComponent } from '../share-profile-modal/share-profile-modal.component';
9
9
  import { CtaCardComponent } from '../../molecules/cta-card/cta-card.component';
10
10
  import { SkeletonLayoutComponent } from '../skeleton-layout/skeleton-layout.component';
11
+ import { ContainerComponent } from '../../atoms/container/container.component';
11
12
  import { DisplayComponent } from '../../atoms/display/display.component';
12
13
  import { TextComponent } from '../../atoms/text/text.component';
13
14
  import { TitleComponent } from '../../atoms/title/title.component';
@@ -464,68 +465,70 @@ export class ProfileContentComponent {
464
465
  }
465
466
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ProfileContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
466
467
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ProfileContentComponent, isStandalone: true, selector: "val-profile-content", inputs: { config: "config" }, viewQueries: [{ propertyName: "formCmp", first: true, predicate: ["form"], descendants: true, isSignal: true }], ngImport: i0, template: `
467
- <div class="page">
468
- <header class="page-header">
469
- <val-display [props]="{ size: 'small', color: 'dark', content: t('pageTitle') }" />
470
- <val-title
471
- [props]="{
472
- size: 'large',
473
- color: 'dark',
474
- bold: false,
475
- content: t('pageDescription'),
476
- }"
477
- />
478
- </header>
468
+ <val-container [props]="{ size: 'md', padding: 'none' }">
469
+ <div class="page">
470
+ <header class="page-header">
471
+ <val-display [props]="{ size: 'small', color: 'dark', content: t('pageTitle') }" />
472
+ <val-title
473
+ [props]="{
474
+ size: 'large',
475
+ color: 'dark',
476
+ bold: false,
477
+ content: t('pageDescription'),
478
+ }"
479
+ />
480
+ </header>
479
481
 
480
- @if (loading()) {
481
- <val-skeleton-layout [props]="{ preset: 'form', rows: 3, showAvatar: true }" />
482
- } @else if (errorState()) {
483
- <val-empty-state [props]="errorState()!" />
484
- } @else {
485
- @if (profile(); as p) {
486
- @if (resolvedConfig().showAvatar) {
487
- <section class="settings-section avatar-section">
488
- <val-avatar-upload
489
- [props]="avatarProps()"
490
- (uploaded)="onAvatarUploaded($event)"
491
- (error)="onAvatarError($event)"
492
- />
493
- <div class="avatar-meta">
494
- <val-title
495
- [props]="{
496
- size: 'medium',
497
- color: 'dark',
498
- bold: true,
499
- content: p.name || '—',
500
- }"
501
- />
502
- <val-text
503
- [props]="{
504
- size: 'small',
505
- color: 'dark',
506
- bold: false,
507
- content: p.email,
508
- }"
482
+ @if (loading()) {
483
+ <val-skeleton-layout [props]="{ preset: 'form', rows: 3, showAvatar: true }" />
484
+ } @else if (errorState()) {
485
+ <val-empty-state [props]="errorState()!" />
486
+ } @else {
487
+ @if (profile(); as p) {
488
+ @if (resolvedConfig().showAvatar) {
489
+ <section class="settings-section avatar-section">
490
+ <val-avatar-upload
491
+ [props]="avatarProps()"
492
+ (uploaded)="onAvatarUploaded($event)"
493
+ (error)="onAvatarError($event)"
509
494
  />
510
- @if (p.handle) {
495
+ <div class="avatar-meta">
496
+ <val-title
497
+ [props]="{
498
+ size: 'medium',
499
+ color: 'dark',
500
+ bold: true,
501
+ content: p.name || '—',
502
+ }"
503
+ />
511
504
  <val-text
512
505
  [props]="{
513
506
  size: 'small',
514
507
  color: 'dark',
515
- bold: true,
516
- content: '@' + p.handle,
508
+ bold: false,
509
+ content: p.email,
517
510
  }"
518
511
  />
519
- }
520
- </div>
521
- </section>
522
- }
512
+ @if (p.handle) {
513
+ <val-text
514
+ [props]="{
515
+ size: 'small',
516
+ color: 'dark',
517
+ bold: true,
518
+ content: '@' + p.handle,
519
+ }"
520
+ />
521
+ }
522
+ </div>
523
+ </section>
524
+ }
523
525
 
524
- <val-form #form [props]="formMeta" (onSubmit)="onSubmit($event)" />
526
+ <val-form #form [props]="formMeta" (onSubmit)="onSubmit($event)" />
527
+ }
525
528
  }
526
- }
527
- </div>
528
- `, isInline: true, styles: [".page{padding:16px 0;max-width:720px;margin:0 auto}:host-context([data-menu=\"collapsed\"]) .page{@media (min-width: 1200px){max-width:900px}}.page-header{margin-bottom:16px}.settings-section{padding:16px 0}.settings-section+.settings-section{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08))}.avatar-section{display:flex;align-items:center;gap:16px}.avatar-meta{display:flex;flex-direction:column;gap:2px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: AvatarUploadComponent, selector: "val-avatar-upload", inputs: ["props", "customPath", "customThumbPath", "skipBackendSync"], outputs: ["uploaded", "error", "uploadStart"] }, { kind: "component", type: EmptyStateComponent, selector: "val-empty-state", inputs: ["props"] }, { kind: "component", type: FormComponent, selector: "val-form", inputs: ["props"], outputs: ["onSubmit", "onValueChange", "onInvalid", "onSelectChange"] }, { kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }, { kind: "component", type: SkeletonLayoutComponent, selector: "val-skeleton-layout", inputs: ["props"] }] }); }
529
+ </div>
530
+ </val-container>
531
+ `, isInline: true, styles: [".page{padding:16px 0}.page-header{margin-bottom:16px}.settings-section{padding:16px 0}.settings-section+.settings-section{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08))}.avatar-section{display:flex;align-items:center;gap:16px}.avatar-meta{display:flex;flex-direction:column;gap:2px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: AvatarUploadComponent, selector: "val-avatar-upload", inputs: ["props", "customPath", "customThumbPath", "skipBackendSync"], outputs: ["uploaded", "error", "uploadStart"] }, { kind: "component", type: EmptyStateComponent, selector: "val-empty-state", inputs: ["props"] }, { kind: "component", type: FormComponent, selector: "val-form", inputs: ["props"], outputs: ["onSubmit", "onValueChange", "onInvalid", "onSelectChange"] }, { kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }, { kind: "component", type: SkeletonLayoutComponent, selector: "val-skeleton-layout", inputs: ["props"] }, { kind: "component", type: ContainerComponent, selector: "val-container", inputs: ["props"] }] }); }
529
532
  }
530
533
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ProfileContentComponent, decorators: [{
531
534
  type: Component,
@@ -541,70 +544,73 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
541
544
  SkeletonLayoutComponent,
542
545
  CtaCardComponent,
543
546
  ShareProfileModalComponent,
547
+ ContainerComponent,
544
548
  ], template: `
545
- <div class="page">
546
- <header class="page-header">
547
- <val-display [props]="{ size: 'small', color: 'dark', content: t('pageTitle') }" />
548
- <val-title
549
- [props]="{
550
- size: 'large',
551
- color: 'dark',
552
- bold: false,
553
- content: t('pageDescription'),
554
- }"
555
- />
556
- </header>
549
+ <val-container [props]="{ size: 'md', padding: 'none' }">
550
+ <div class="page">
551
+ <header class="page-header">
552
+ <val-display [props]="{ size: 'small', color: 'dark', content: t('pageTitle') }" />
553
+ <val-title
554
+ [props]="{
555
+ size: 'large',
556
+ color: 'dark',
557
+ bold: false,
558
+ content: t('pageDescription'),
559
+ }"
560
+ />
561
+ </header>
557
562
 
558
- @if (loading()) {
559
- <val-skeleton-layout [props]="{ preset: 'form', rows: 3, showAvatar: true }" />
560
- } @else if (errorState()) {
561
- <val-empty-state [props]="errorState()!" />
562
- } @else {
563
- @if (profile(); as p) {
564
- @if (resolvedConfig().showAvatar) {
565
- <section class="settings-section avatar-section">
566
- <val-avatar-upload
567
- [props]="avatarProps()"
568
- (uploaded)="onAvatarUploaded($event)"
569
- (error)="onAvatarError($event)"
570
- />
571
- <div class="avatar-meta">
572
- <val-title
573
- [props]="{
574
- size: 'medium',
575
- color: 'dark',
576
- bold: true,
577
- content: p.name || '—',
578
- }"
579
- />
580
- <val-text
581
- [props]="{
582
- size: 'small',
583
- color: 'dark',
584
- bold: false,
585
- content: p.email,
586
- }"
563
+ @if (loading()) {
564
+ <val-skeleton-layout [props]="{ preset: 'form', rows: 3, showAvatar: true }" />
565
+ } @else if (errorState()) {
566
+ <val-empty-state [props]="errorState()!" />
567
+ } @else {
568
+ @if (profile(); as p) {
569
+ @if (resolvedConfig().showAvatar) {
570
+ <section class="settings-section avatar-section">
571
+ <val-avatar-upload
572
+ [props]="avatarProps()"
573
+ (uploaded)="onAvatarUploaded($event)"
574
+ (error)="onAvatarError($event)"
587
575
  />
588
- @if (p.handle) {
576
+ <div class="avatar-meta">
577
+ <val-title
578
+ [props]="{
579
+ size: 'medium',
580
+ color: 'dark',
581
+ bold: true,
582
+ content: p.name || '—',
583
+ }"
584
+ />
589
585
  <val-text
590
586
  [props]="{
591
587
  size: 'small',
592
588
  color: 'dark',
593
- bold: true,
594
- content: '@' + p.handle,
589
+ bold: false,
590
+ content: p.email,
595
591
  }"
596
592
  />
597
- }
598
- </div>
599
- </section>
600
- }
593
+ @if (p.handle) {
594
+ <val-text
595
+ [props]="{
596
+ size: 'small',
597
+ color: 'dark',
598
+ bold: true,
599
+ content: '@' + p.handle,
600
+ }"
601
+ />
602
+ }
603
+ </div>
604
+ </section>
605
+ }
601
606
 
602
- <val-form #form [props]="formMeta" (onSubmit)="onSubmit($event)" />
607
+ <val-form #form [props]="formMeta" (onSubmit)="onSubmit($event)" />
608
+ }
603
609
  }
604
- }
605
- </div>
606
- `, styles: [".page{padding:16px 0;max-width:720px;margin:0 auto}:host-context([data-menu=\"collapsed\"]) .page{@media (min-width: 1200px){max-width:900px}}.page-header{margin-bottom:16px}.settings-section{padding:16px 0}.settings-section+.settings-section{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08))}.avatar-section{display:flex;align-items:center;gap:16px}.avatar-meta{display:flex;flex-direction:column;gap:2px}\n"] }]
610
+ </div>
611
+ </val-container>
612
+ `, styles: [".page{padding:16px 0}.page-header{margin-bottom:16px}.settings-section{padding:16px 0}.settings-section+.settings-section{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08))}.avatar-section{display:flex;align-items:center;gap:16px}.avatar-meta{display:flex;flex-direction:column;gap:2px}\n"] }]
607
613
  }], ctorParameters: () => [], propDecorators: { config: [{
608
614
  type: Input
609
615
  }] } });
610
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS1jb250ZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9vcmdhbmlzbXMvcHJvZmlsZS12aWV3L3Byb2ZpbGUtY29udGVudC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsY0FBYyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUVwRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUVqRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFFbEcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFFL0UsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDdkYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUV4RixPQUFPLEVBQUUscUJBQXFC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Q0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksR0FBRyxDQUFDO0lBQzdDLENBQUM7K0dBNWNVLHVCQUF1QjttR0FBdkIsdUJBQXVCLDhOQXBHeEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOERULGdmQTFFQyxZQUFZLDhCQUNaLG1CQUFtQiwrQkFDbkIscUJBQXFCLG9MQUNyQixtQkFBbUIsK0VBQ25CLGFBQWEsK0lBQ2IsZ0JBQWdCLDJFQUNoQixhQUFhLHdFQUNiLGNBQWMseUVBQ2QsdUJBQXVCOzs0RkF3R2QsdUJBQXVCO2tCQXBIbkMsU0FBUzsrQkFDRSxxQkFBcUIsY0FDbkIsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQixxQkFBcUI7d0JBQ3JCLG1CQUFtQjt3QkFDbkIsYUFBYTt3QkFDYixnQkFBZ0I7d0JBQ2hCLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCx1QkFBdUI7d0JBQ3ZCLGdCQUFnQjt3QkFDaEIsMEJBQTBCO3FCQUMzQixZQUNTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThEVDt3REErQ1EsTUFBTTtzQkFBZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0LCBJbnB1dCwgc2lnbmFsLCB2aWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEF2YXRhclVwbG9hZENvbXBvbmVudCB9IGZyb20gJy4uL2F2YXRhci11cGxvYWQvYXZhdGFyLXVwbG9hZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXZhdGFyVXBsb2FkRXJyb3IsIEF2YXRhclVwbG9hZE1ldGFkYXRhLCBBdmF0YXJVcGxvYWRSZXN1bHQgfSBmcm9tICcuLi9hdmF0YXItdXBsb2FkL3R5cGVzJztcbmltcG9ydCB7IEZvcm1Db21wb25lbnQgfSBmcm9tICcuLi9mb3JtL2Zvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IFNoYXJlUHJvZmlsZU1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vc2hhcmUtcHJvZmlsZS1tb2RhbC9zaGFyZS1wcm9maWxlLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTaGFyZVByb2ZpbGVNb2RhbE1ldGFkYXRhIH0gZnJvbSAnLi4vc2hhcmUtcHJvZmlsZS1tb2RhbC90eXBlcyc7XG5pbXBvcnQgeyBDdGFDYXJkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2N0YS1jYXJkL2N0YS1jYXJkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDdGFDYXJkTWV0YWRhdGEgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvY3RhLWNhcmQvdHlwZXMnO1xuaW1wb3J0IHsgU2tlbGV0b25MYXlvdXRDb21wb25lbnQgfSBmcm9tICcuLi9za2VsZXRvbi1sYXlvdXQvc2tlbGV0b24tbGF5b3V0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEaXNwbGF5Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvZGlzcGxheS9kaXNwbGF5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZXh0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvdGV4dC90ZXh0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUaXRsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL3RpdGxlL3RpdGxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFbXB0eVN0YXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2VtcHR5LXN0YXRlL2VtcHR5LXN0YXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFbXB0eVN0YXRlTWV0YWRhdGEgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvZW1wdHktc3RhdGUvdHlwZXMnO1xuaW1wb3J0IHsgY3JlYXRlRXJyb3JTdGF0ZVByb3BzIH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2VtcHR5LXN0YXRlL2ZhY3RvcnknO1xuaW1wb3J0IHsgQnV0dG9uTWV0YWRhdGEsIENvbXBvbmVudFN0YXRlcywgRm9ybU1ldGFkYXRhLCBGb3JtU3VibWl0LCBJbnB1dE1ldGFkYXRhLCBJbnB1dFR5cGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aC9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgR2V0UHJvZmlsZVJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aC90eXBlcyc7XG5pbXBvcnQgeyBGaXJlYmFzZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9maXJlYmFzZS9maXJlYmFzZS5zZXJ2aWNlJztcbmltcG9ydCB7IEZpcmVzdG9yZUNvbGxlY3Rpb25GYWN0b3J5LCBUeXBlZENvbGxlY3Rpb24gfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9maXJlYmFzZS9maXJlc3RvcmUtY29sbGVjdGlvbic7XG5pbXBvcnQgeyBGaXJlc3RvcmVEb2N1bWVudCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2ZpcmViYXNlL3R5cGVzJztcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaTE4bic7XG5pbXBvcnQgeyBjb25uZWN0UGFnZVJlZnJlc2ggfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wYWdlLXJlZnJlc2gvcGFnZS1yZWZyZXNoLnNlcnZpY2UnO1xuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdG9hc3Quc2VydmljZSc7XG5pbXBvcnQgeyBWYWx0ZWNoRXJyb3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZXJyb3JzL3ZhbHRlY2gtZXJyb3Iuc2VydmljZSc7XG5pbXBvcnQgeyBpbnRlcnByZXRFcnJvciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Vycm9ycy9pbnRlcnByZXQtZXJyb3InO1xuXG5pbXBvcnQgeyBQcm9maWxlVmlld0NvbmZpZyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgUFJPRklMRV9WSUVXX0kxOE4gfSBmcm9tICcuL3Byb2ZpbGUtdmlldy5pMThuJztcblxuaW50ZXJmYWNlIFVzZXJNaXJyb3JEb2MgZXh0ZW5kcyBGaXJlc3RvcmVEb2N1bWVudCB7XG4gIHVzZXJJZDogc3RyaW5nO1xuICBlbWFpbDogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICBoYW5kbGU/OiBzdHJpbmc7XG4gIHBob25lPzogc3RyaW5nO1xuICBhdmF0YXJVcmw/OiBzdHJpbmc7XG4gIGF2YXRhclRodW1ibmFpbD86IHN0cmluZztcbn1cblxuY29uc3QgSEFORExFX1BBVFRFUk4gPSAvXlthLXpfXVthLXowLTlfXSokLztcbmNvbnN0IEhBTkRMRV9NSU4gPSAzO1xuY29uc3QgSEFORExFX01BWCA9IDIwO1xuXG5jb25zdCBERUZBVUxUX05BTUVTUEFDRSA9ICdTZXR0aW5ncy5Qcm9maWxlJztcblxuLyoqXG4gKiBgdmFsLXByb2ZpbGUtY29udGVudGAg4oCUIENPTlRFTklETyBkZWwgcGVyZmlsIChhdmF0YXIgKyBoYW5kbGUgKyBub21icmUgKyB0ZWzDqWZvbm9cbiAqIGVuIHVuIGZvcm0gY29uIHVuIGJvdMOzbikuIFByZXNlbnRhY2lvbmFsICsgbMOzZ2ljYSBkZSBkYXRvcywgU0lOIGNyb23DoXRpY2EgZGVcbiAqIHDDoWdpbmE6IE5PIHRvY2EgYE5hdmlnYXRpb25TZXJ2aWNlYCBuaSBlbCBoZWFkZXIgZGVsIHNoZWxsLlxuICpcbiAqIExvIHJldXRpbGl6YW4gdGFudG8gbGEgdmlzdGEgcnV0ZWFkYSAoYHZhbC1wcm9maWxlLXZpZXdgLCBxdWUgc8OtIHNldGVhIGVsIGhlYWRlcilcbiAqIGNvbW8gZWwgbW9kYWwgKGB2YWwtcHJvZmlsZS1tb2RhbGApLiBBc8OtIGVsIG1vZGFsIG5vIGNvbnRhbWluYSBlbCBoZWFkZXIgZGVsIHNoZWxsLlxuICpcbiAqIFRvZGEgbGEgbMOzZ2ljYSAobGVjdHVyYSByZWFjdGl2YSBkZWwgbWlycm9yIEZpcmVzdG9yZSAvdXNlcnMve3VpZH0gKyBmYWxsYmFjayBSRVNULFxuICogc3VibWl0IGNvbiBkaWZmIGhhbmRsZeKGknByb2ZpbGUsIGF2YXRhciB1cGxvYWQsIGVzdGFkb3MsIGkxOG4pIHZpdmUgYXF1w60uXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1wcm9maWxlLWNvbnRlbnQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgQXZhdGFyVXBsb2FkQ29tcG9uZW50LFxuICAgIEVtcHR5U3RhdGVDb21wb25lbnQsXG4gICAgRm9ybUNvbXBvbmVudCxcbiAgICBEaXNwbGF5Q29tcG9uZW50LFxuICAgIFRleHRDb21wb25lbnQsXG4gICAgVGl0bGVDb21wb25lbnQsXG4gICAgU2tlbGV0b25MYXlvdXRDb21wb25lbnQsXG4gICAgQ3RhQ2FyZENvbXBvbmVudCxcbiAgICBTaGFyZVByb2ZpbGVNb2RhbENvbXBvbmVudCxcbiAgXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwicGFnZVwiPlxuICAgICAgPGhlYWRlciBjbGFzcz1cInBhZ2UtaGVhZGVyXCI+XG4gICAgICAgIDx2YWwtZGlzcGxheSBbcHJvcHNdPVwieyBzaXplOiAnc21hbGwnLCBjb2xvcjogJ2RhcmsnLCBjb250ZW50OiB0KCdwYWdlVGl0bGUnKSB9XCIgLz5cbiAgICAgICAgPHZhbC10aXRsZVxuICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICBzaXplOiAnbGFyZ2UnLFxuICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgIGJvbGQ6IGZhbHNlLFxuICAgICAgICAgICAgY29udGVudDogdCgncGFnZURlc2NyaXB0aW9uJyksXG4gICAgICAgICAgfVwiXG4gICAgICAgIC8+XG4gICAgICA8L2hlYWRlcj5cblxuICAgICAgQGlmIChsb2FkaW5nKCkpIHtcbiAgICAgICAgPHZhbC1za2VsZXRvbi1sYXlvdXQgW3Byb3BzXT1cInsgcHJlc2V0OiAnZm9ybScsIHJvd3M6IDMsIHNob3dBdmF0YXI6IHRydWUgfVwiIC8+XG4gICAgICB9IEBlbHNlIGlmIChlcnJvclN0YXRlKCkpIHtcbiAgICAgICAgPHZhbC1lbXB0eS1zdGF0ZSBbcHJvcHNdPVwiZXJyb3JTdGF0ZSgpIVwiIC8+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgQGlmIChwcm9maWxlKCk7IGFzIHApIHtcbiAgICAgICAgICBAaWYgKHJlc29sdmVkQ29uZmlnKCkuc2hvd0F2YXRhcikge1xuICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzZXR0aW5ncy1zZWN0aW9uIGF2YXRhci1zZWN0aW9uXCI+XG4gICAgICAgICAgICAgIDx2YWwtYXZhdGFyLXVwbG9hZFxuICAgICAgICAgICAgICAgIFtwcm9wc109XCJhdmF0YXJQcm9wcygpXCJcbiAgICAgICAgICAgICAgICAodXBsb2FkZWQpPVwib25BdmF0YXJVcGxvYWRlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoZXJyb3IpPVwib25BdmF0YXJFcnJvcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1tZXRhXCI+XG4gICAgICAgICAgICAgICAgPHZhbC10aXRsZVxuICAgICAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgICAgICAgIGJvbGQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHAubmFtZSB8fCAn4oCUJyxcbiAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPHZhbC10ZXh0XG4gICAgICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgICAgICBzaXplOiAnc21hbGwnLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogcC5lbWFpbCxcbiAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgQGlmIChwLmhhbmRsZSkge1xuICAgICAgICAgICAgICAgICAgPHZhbC10ZXh0XG4gICAgICAgICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgc2l6ZTogJ3NtYWxsJyxcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICAgICAgICAgIGJvbGQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgY29udGVudDogJ0AnICsgcC5oYW5kbGUsXG4gICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgIH1cblxuICAgICAgICAgIDx2YWwtZm9ybSAjZm9ybSBbcHJvcHNdPVwiZm9ybU1ldGFcIiAob25TdWJtaXQpPVwib25TdWJtaXQoJGV2ZW50KVwiIC8+XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgLnBhZ2Uge1xuICAgICAgICBwYWRkaW5nOiAxNnB4IDA7XG4gICAgICAgIG1heC13aWR0aDogNzIwcHg7XG4gICAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgfVxuXG4gICAgICAvKiBTZWd1bmRvIGFuY2hvLCBkZXNrdG9wIGNvbiBlbCByYWlsIHJldHJhw61kby4gVmVyIHNldHRpbmdzLWh1YiBwYXJhIGxhXG4gICAgICAgICBleHBsaWNhY2nDs24gY29tcGxldGEgZGVsIG1lY2FuaXNtby4gKi9cbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtbWVudT0nY29sbGFwc2VkJ10pIC5wYWdlIHtcbiAgICAgICAgQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkge1xuICAgICAgICAgIG1heC13aWR0aDogOTAwcHg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC5wYWdlLWhlYWRlciB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XG4gICAgICB9XG4gICAgICAuc2V0dGluZ3Mtc2VjdGlvbiB7XG4gICAgICAgIHBhZGRpbmc6IDE2cHggMDtcbiAgICAgIH1cbiAgICAgIC5zZXR0aW5ncy1zZWN0aW9uICsgLnNldHRpbmdzLXNlY3Rpb24ge1xuICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tdmFsLWJvcmRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjA4KSk7XG4gICAgICB9XG4gICAgICAuYXZhdGFyLXNlY3Rpb24ge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDE2cHg7XG4gICAgICB9XG4gICAgICAuYXZhdGFyLW1ldGEge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDJweDtcbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBQcm9maWxlQ29udGVudENvbXBvbmVudCB7XG4gIHByaXZhdGUgYXV0aCA9IGluamVjdChBdXRoU2VydmljZSk7XG4gIHByaXZhdGUgaTE4biA9IGluamVjdChJMThuU2VydmljZSk7XG4gIHByaXZhdGUgdG9hc3QgPSBpbmplY3QoVG9hc3RTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBlcnJvcnMgPSBpbmplY3QoVmFsdGVjaEVycm9yU2VydmljZSk7XG4gIHByaXZhdGUgZmlyZWJhc2UgPSBpbmplY3QoRmlyZWJhc2VTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBjb2xsZWN0aW9ucyA9IGluamVjdChGaXJlc3RvcmVDb2xsZWN0aW9uRmFjdG9yeSk7XG4gIHByaXZhdGUgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgQElucHV0KCkgY29uZmlnPzogUHJvZmlsZVZpZXdDb25maWc7XG5cbiAgcmVhZG9ubHkgcmVzb2x2ZWRDb25maWcgPSBjb21wdXRlZDxcbiAgICBSZXF1aXJlZDxPbWl0PFByb2ZpbGVWaWV3Q29uZmlnLCAnb25TYXZlZCcgfCAnb25BdmF0YXJVcGxvYWRlZCcgfCAncHJvZmlsZUJhc2VVcmwnPj4gJlxuICAgICAgUGljazxQcm9maWxlVmlld0NvbmZpZywgJ29uU2F2ZWQnIHwgJ29uQXZhdGFyVXBsb2FkZWQnIHwgJ3Byb2ZpbGVCYXNlVXJsJz5cbiAgPigoKSA9PiB7XG4gICAgY29uc3QgZnJvbVJvdXRlID0gKHRoaXMucm91dGU/LnNuYXBzaG90LmRhdGFbJ3Byb2ZpbGVDb25maWcnXSA/PyB7fSkgYXMgUHJvZmlsZVZpZXdDb25maWc7XG4gICAgY29uc3QgbWVyZ2VkOiBQcm9maWxlVmlld0NvbmZpZyA9IHsgLi4uZnJvbVJvdXRlLCAuLi4odGhpcy5jb25maWcgPz8ge30pIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3dBdmF0YXI6IG1lcmdlZC5zaG93QXZhdGFyID8/IHRydWUsXG4gICAgICBzaG93SGFuZGxlOiBtZXJnZWQuc2hvd0hhbmRsZSA/PyB0cnVlLFxuICAgICAgc2hvd1Bob25lOiBtZXJnZWQuc2hvd1Bob25lID8/IHRydWUsXG4gICAgICBzaG93U2hhcmVDdGE6IG1lcmdlZC5zaG93U2hhcmVDdGEgPz8gdHJ1ZSxcbiAgICAgIHByb2ZpbGVCYXNlVXJsOiBtZXJnZWQucHJvZmlsZUJhc2VVcmwgPz8gJycsXG4gICAgICBpMThuTmFtZXNwYWNlOiBtZXJnZWQuaTE4bk5hbWVzcGFjZSA/PyBERUZBVUxUX05BTUVTUEFDRSxcbiAgICAgIG9uU2F2ZWQ6IG1lcmdlZC5vblNhdmVkLFxuICAgICAgb25BdmF0YXJVcGxvYWRlZDogbWVyZ2VkLm9uQXZhdGFyVXBsb2FkZWQsXG4gICAgfTtcbiAgfSk7XG5cbiAgLyoqIE5hbWVzcGFjZSBpMThuIHJlc3VlbHRvIChww7pibGljbyBwYXJhIHF1ZSBsYSB2aXN0YSBydXRlYWRhIGFybWUgZWwgaGVhZGVyKS4gKi9cbiAgZ2V0IG5zKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZWRDb25maWcoKS5pMThuTmFtZXNwYWNlO1xuICB9XG5cbiAgcHJpdmF0ZSB1c2Vyc0NvbDogVHlwZWRDb2xsZWN0aW9uPFVzZXJNaXJyb3JEb2M+ID0gdGhpcy5jb2xsZWN0aW9ucy5jcmVhdGU8VXNlck1pcnJvckRvYz4oJ3VzZXJzJywge1xuICAgIHNraXBBcHBQcmVmaXg6IHRydWUsXG4gIH0pO1xuXG4gIHByaXZhdGUgZm9ybUNtcCA9IHZpZXdDaGlsZDxGb3JtQ29tcG9uZW50PignZm9ybScpO1xuXG4gIHJlYWRvbmx5IHByb2ZpbGUgPSBzaWduYWw8R2V0UHJvZmlsZVJlc3BvbnNlIHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IGxvYWRpbmcgPSBzaWduYWwodHJ1ZSk7XG4gIHJlYWRvbmx5IHNhdmluZyA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGxvYWRFcnJvciA9IHNpZ25hbDx1bmtub3duIHwgbnVsbD4obnVsbCk7XG5cbiAgcmVhZG9ubHkgc2hhcmVPcGVuID0gc2lnbmFsKGZhbHNlKTtcblxuICByZWFkb25seSBzaGFyZUN0YSA9IGNvbXB1dGVkPEN0YUNhcmRNZXRhZGF0YT4oKCkgPT4ge1xuICAgIHRoaXMuaTE4bi5sYW5nKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRpdGxlOiB0aGlzLnQoJ3NoYXJlQ3RhVGl0bGUnKSxcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLnQoJ3NoYXJlQ3RhRGVzYycpLFxuICAgICAgYm9yZGVyZWQ6IHRydWUsXG4gICAgICBhY3Rpb25zOiB7XG4gICAgICAgIHBvc2l0aW9uOiAnbGVmdCcsXG4gICAgICAgIGNvbHVtbmVkOiBmYWxzZSxcbiAgICAgICAgYnV0dG9uczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRleHQ6IHRoaXMudCgnc2hhcmVDdGFCdG4nKSxcbiAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICAgICAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgICAgICAgc3RhdGU6ICdFTkFCTEVEJyxcbiAgICAgICAgICAgIHRva2VuOiAnc2hhcmUnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIH07XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNoYXJlTW9kYWwgPSBjb21wdXRlZDxTaGFyZVByb2ZpbGVNb2RhbE1ldGFkYXRhPigoKSA9PiB7XG4gICAgY29uc3QgcCA9IHRoaXMucHJvZmlsZSgpO1xuICAgIGNvbnN0IGhhbmRsZSA9IHA/LmhhbmRsZSA/PyAnbWUnO1xuICAgIGNvbnN0IGJhc2UgPSB0aGlzLnJlc29sdmVkQ29uZmlnKCkucHJvZmlsZUJhc2VVcmw7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IHA/Lm5hbWUgPz8gJycsXG4gICAgICBoYW5kbGU6IHA/LmhhbmRsZSxcbiAgICAgIGF2YXRhclVybDogcD8uYXZhdGFyVXJsLFxuICAgICAgZW1haWw6IHA/LmVtYWlsLFxuICAgICAgdXJsOiBiYXNlID8gYCR7YmFzZX0vdS8ke2hhbmRsZX1gIDogYC91LyR7aGFuZGxlfWAsXG4gICAgfTtcbiAgfSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfdXNlcklkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5hdXRoLnVzZXIoKT8udXNlcklkID8/IG51bGwpO1xuXG4gIHJlYWRvbmx5IGVycm9yU3RhdGUgPSBjb21wdXRlZDxFbXB0eVN0YXRlTWV0YWRhdGEgfCBudWxsPigoKSA9PiB7XG4gICAgdGhpcy5pMThuLmxhbmcoKTtcbiAgICBjb25zdCBlcnIgPSB0aGlzLmxvYWRFcnJvcigpO1xuICAgIGlmICghZXJyKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gY3JlYXRlRXJyb3JTdGF0ZVByb3BzKGVyciwge1xuICAgICAgdGl0bGU6IHtcbiAgICAgICAgb2ZmbGluZTogdGhpcy50KCdvZmZsaW5lVGl0bGUnKSxcbiAgICAgICAgZXJyb3I6IHRoaXMudCgnZXJyb3JUaXRsZScpLFxuICAgICAgfSxcbiAgICAgIGRlc2NyaXB0aW9uOiB7XG4gICAgICAgIG9mZmxpbmU6IHRoaXMudCgnb2ZmbGluZUhpbnQnKSxcbiAgICAgICAgZXJyb3I6IGludGVycHJldEVycm9yKGVycikubWVzc2FnZSxcbiAgICAgIH0sXG4gICAgICByZXRyeUxhYmVsOiB0aGlzLnQoJ3JldHJ5JyksXG4gICAgICBvblJldHJ5OiAoKSA9PiB0aGlzLmxvYWRGcm9tQXBpKCksXG4gICAgICByZXRyeWluZzogdGhpcy5sb2FkaW5nKCksXG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGF2YXRhclByb3BzID0gY29tcHV0ZWQ8QXZhdGFyVXBsb2FkTWV0YWRhdGE+KCgpID0+IHtcbiAgICB0aGlzLmkxOG4ubGFuZygpO1xuICAgIGNvbnN0IHAgPSB0aGlzLnByb2ZpbGUoKTtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFVybDogcD8uYXZhdGFyVXJsLFxuICAgICAgaW5pdGlhbHM6IHRoaXMuaW5pdGlhbHNGcm9tTmFtZShwPy5uYW1lKSxcbiAgICAgIHNpemU6IDk2LFxuICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICBzaG93Vmlld0J1dHRvbjogdHJ1ZSxcbiAgICAgIGkxOG5OYW1lc3BhY2U6IHRoaXMubnMsXG4gICAgfTtcbiAgfSk7XG5cbiAgZm9ybU1ldGE6IEZvcm1NZXRhZGF0YSA9IHRoaXMuYnVpbGRGb3JtTWV0YSgpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5zID0gdGhpcy5ucztcbiAgICB0aGlzLmkxOG4ucmVnaXN0ZXJEZWZhdWx0cyhucywgUFJPRklMRV9WSUVXX0kxOE4pO1xuXG4gICAgY29ubmVjdFBhZ2VSZWZyZXNoKCgpID0+IHRoaXMubG9hZEZyb21BcGkoKSk7XG5cbiAgICB2b2lkIHRoaXMuZmlyZWJhc2Uud2hlbkZpcmViYXNlQXV0aFJlYWR5KCkudGhlbigoKSA9PiB7XG4gICAgICBjb25zdCB1aWQgPSB0aGlzLl91c2VySWQoKTtcbiAgICAgIGlmICh1aWQpIHtcbiAgICAgICAgdm9pZCB0aGlzLmxvYWRGcm9tQXBpKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBlZmZlY3QoXG4gICAgICBvbkNsZWFudXAgPT4ge1xuICAgICAgICBjb25zdCB1aWQgPSB0aGlzLl91c2VySWQoKTtcbiAgICAgICAgaWYgKCF1aWQpIHtcbiAgICAgICAgICB0aGlzLnByb2ZpbGUuc2V0KG51bGwpO1xuICAgICAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvYWRpbmcuc2V0KHRydWUpO1xuXG4gICAgICAgIGxldCBzdWI6IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xuICAgICAgICBsZXQgY2FuY2VsbGVkID0gZmFsc2U7XG4gICAgICAgIGxldCBhcGlGYWxsYmFja1VzZWQgPSBmYWxzZTtcblxuICAgICAgICB2b2lkIHRoaXMuZmlyZWJhc2Uud2hlbkZpcmViYXNlQXV0aFJlYWR5KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgaWYgKGNhbmNlbGxlZCkgcmV0dXJuO1xuICAgICAgICAgIHN1YiA9IHRoaXMudXNlcnNDb2wud2F0Y2godWlkKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogZG9jID0+IHtcbiAgICAgICAgICAgICAgaWYgKGRvYykge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvZmlsZS5zZXQodGhpcy5tYXBNaXJyb3JUb1Byb2ZpbGUoZG9jKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkRXJyb3Iuc2V0KG51bGwpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFhcGlGYWxsYmFja1VzZWQpIHtcbiAgICAgICAgICAgICAgICBhcGlGYWxsYmFja1VzZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHZvaWQgdGhpcy5sb2FkRnJvbUFwaSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFhcGlGYWxsYmFja1VzZWQpIHtcbiAgICAgICAgICAgICAgICBhcGlGYWxsYmFja1VzZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHZvaWQgdGhpcy5sb2FkRnJvbUFwaSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBvbkNsZWFudXAoKCkgPT4ge1xuICAgICAgICAgIGNhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgICAgc3ViPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICApO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGlzU2F2aW5nID0gdGhpcy5zYXZpbmcoKTtcbiAgICAgIGNvbnN0IHN0YXRlID0gaXNTYXZpbmcgPyBDb21wb25lbnRTdGF0ZXMuV09SS0lORyA6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVEO1xuICAgICAgdGhpcy5mb3JtTWV0YS5zdGF0ZSA9IHN0YXRlO1xuICAgICAgKHRoaXMuZm9ybU1ldGEuYWN0aW9ucyBhcyBCdXR0b25NZXRhZGF0YSkuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICh0aGlzLmZvcm1NZXRhLmFjdGlvbnMgYXMgQnV0dG9uTWV0YWRhdGEpLnRleHQgPSBpc1NhdmluZyA/IHRoaXMudCgnc2F2aW5nJykgOiB0aGlzLnQoJ3NhdmUnKTtcbiAgICB9KTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBwID0gdGhpcy5wcm9maWxlKCk7XG4gICAgICBjb25zdCBmb3JtID0gdGhpcy5mb3JtQ21wKCk/LkZvcm07XG4gICAgICBpZiAoIXAgfHwgIWZvcm0pIHJldHVybjtcbiAgICAgIGZvcm0ucGF0Y2hWYWx1ZShcbiAgICAgICAge1xuICAgICAgICAgIGhhbmRsZTogcC5oYW5kbGUgfHwgJycsXG4gICAgICAgICAgbmFtZTogcC5uYW1lIHx8ICcnLFxuICAgICAgICAgIHBob25lOiBwLnBob25lIHx8ICcnLFxuICAgICAgICB9LFxuICAgICAgICB7IGVtaXRFdmVudDogZmFsc2UgfVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICB0aGlzLmkxOG4ubGFuZygpO1xuICAgICAgdGhpcy5hcHBseUkxOG5MYWJlbHMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRGb3JtTWV0YSgpOiBGb3JtTWV0YWRhdGEge1xuICAgIGNvbnN0IGNmZyA9IHRoaXMucmVzb2x2ZWRDb25maWcoKTtcblxuICAgIGNvbnN0IGhhbmRsZUZpZWxkOiBJbnB1dE1ldGFkYXRhID0ge1xuICAgICAgdG9rZW46ICdwcm9maWxlLWhhbmRsZScsXG4gICAgICBuYW1lOiAnaGFuZGxlJyxcbiAgICAgIGxhYmVsOiB0aGlzLnQoJ2hhbmRsZScpLFxuICAgICAgaGludDogdGhpcy50KCdoYW5kbGVIaW50JyksXG4gICAgICBwbGFjZWhvbGRlcjogdGhpcy50KCdoYW5kbGVQbGFjZWhvbGRlcicpLFxuICAgICAgdHlwZTogSW5wdXRUeXBlLkhBTkRMRSxcbiAgICAgIG9yZGVyOiAxLFxuICAgICAgdmFsaWRhdG9yczogW1xuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgICBWYWxpZGF0b3JzLm1pbkxlbmd0aChIQU5ETEVfTUlOKSxcbiAgICAgICAgVmFsaWRhdG9ycy5tYXhMZW5ndGgoSEFORExFX01BWCksXG4gICAgICAgIFZhbGlkYXRvcnMucGF0dGVybihIQU5ETEVfUEFUVEVSTiksXG4gICAgICBdLFxuICAgICAgZXJyb3JzOiB7XG4gICAgICAgIHJlcXVpcmVkOiB0aGlzLnQoJ3VzZXJuYW1lSW52YWxpZCcpLFxuICAgICAgICBtaW5sZW5ndGg6IHRoaXMudCgndXNlcm5hbWVJbnZhbGlkJyksXG4gICAgICAgIG1heGxlbmd0aDogdGhpcy50KCd1c2VybmFtZUludmFsaWQnKSxcbiAgICAgICAgcGF0dGVybjogdGhpcy50KCd1c2VybmFtZUludmFsaWQnKSxcbiAgICAgIH0sXG4gICAgICB2YWx1ZTogJycsXG4gICAgICByYW5nZTogeyBtaW46IEhBTkRMRV9NSU4sIG1heDogSEFORExFX01BWCB9LFxuICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgIH07XG5cbiAgICBjb25zdCBuYW1lRmllbGQ6IElucHV0TWV0YWRhdGEgPSB7XG4gICAgICB0b2tlbjogJ3Byb2ZpbGUtbmFtZScsXG4gICAgICBuYW1lOiAnbmFtZScsXG4gICAgICBsYWJlbDogdGhpcy50KCduYW1lJyksXG4gICAgICBoaW50OiB0aGlzLnQoJ25hbWVIaW50JyksXG4gICAgICBwbGFjZWhvbGRlcjogdGhpcy50KCduYW1lUGxhY2Vob2xkZXInKSxcbiAgICAgIHR5cGU6IElucHV0VHlwZS5URVhULFxuICAgICAgb3JkZXI6IDIsXG4gICAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoMiksIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDEwMCldLFxuICAgICAgZXJyb3JzOiB7fSxcbiAgICAgIHZhbHVlOiAnJyxcbiAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICB9O1xuXG4gICAgY29uc3QgcGhvbmVGaWVsZDogSW5wdXRNZXRhZGF0YSA9IHtcbiAgICAgIHRva2VuOiAncHJvZmlsZS1waG9uZScsXG4gICAgICBuYW1lOiAncGhvbmUnLFxuICAgICAgbGFiZWw6IHRoaXMudCgncGhvbmUnKSxcbiAgICAgIGhpbnQ6IHRoaXMudCgncGhvbmVIaW50JyksXG4gICAgICBwbGFjZWhvbGRlcjogdGhpcy50KCdwaG9uZVBsYWNlaG9sZGVyJyksXG4gICAgICB0eXBlOiBJbnB1dFR5cGUuUEhPTkUsXG4gICAgICBvcmRlcjogMyxcbiAgICAgIHZhbGlkYXRvcnM6IFtdLFxuICAgICAgZXJyb3JzOiB7fSxcbiAgICAgIHZhbHVlOiAnJyxcbiAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICB9O1xuXG4gICAgY29uc3QgZmllbGRzOiBJbnB1dE1ldGFkYXRhW10gPSBbXTtcbiAgICBpZiAoY2ZnLnNob3dIYW5kbGUpIGZpZWxkcy5wdXNoKGhhbmRsZUZpZWxkKTtcbiAgICBmaWVsZHMucHVzaChuYW1lRmllbGQpO1xuICAgIGlmIChjZmcuc2hvd1Bob25lKSBmaWVsZHMucHVzaChwaG9uZUZpZWxkKTtcblxuICAgIGNvbnN0IHN1Ym1pdEJ1dHRvbjogQnV0dG9uTWV0YWRhdGEgPSB7XG4gICAgICB0ZXh0OiB0aGlzLnQoJ3NhdmUnKSxcbiAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICB0eXBlOiAnc3VibWl0JyxcbiAgICAgIGZpbGw6ICdzb2xpZCcsXG4gICAgICBzaXplOiAnZGVmYXVsdCcsXG4gICAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICAgIGV4cGFuZDogJ2Jsb2NrJyxcbiAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgIHRva2VuOiAncHJvZmlsZS1zYXZlJyxcbiAgICB9IGFzIEJ1dHRvbk1ldGFkYXRhO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6ICcnLFxuICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgICAgc2VjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICcnLFxuICAgICAgICAgIG9yZGVyOiAxLFxuICAgICAgICAgIGZpZWxkcyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBhY3Rpb25zOiBzdWJtaXRCdXR0b24sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlJMThuTGFiZWxzKCk6IHZvaWQge1xuICAgIGNvbnN0IHNlY3Rpb24gPSB0aGlzLmZvcm1NZXRhLnNlY3Rpb25zWzBdO1xuICAgIGZvciAoY29uc3QgZmllbGQgb2Ygc2VjdGlvbi5maWVsZHMpIHtcbiAgICAgIHN3aXRjaCAoZmllbGQubmFtZSkge1xuICAgICAgICBjYXNlICdoYW5kbGUnOlxuICAgICAgICAgIGZpZWxkLmxhYmVsID0gdGhpcy50KCdoYW5kbGUnKTtcbiAgICAgICAgICBmaWVsZC5oaW50ID0gdGhpcy50KCdoYW5kbGVIaW50Jyk7XG4gICAgICAgICAgZmllbGQucGxhY2Vob2xkZXIgPSB0aGlzLnQoJ2hhbmRsZVBsYWNlaG9sZGVyJyk7XG4gICAgICAgICAgZmllbGQuZXJyb3JzID0ge1xuICAgICAgICAgICAgcmVxdWlyZWQ6IHRoaXMudCgndXNlcm5hbWVJbnZhbGlkJyksXG4gICAgICAgICAgICBtaW5sZW5ndGg6IHRoaXMudCgndXNlcm5hbWVJbnZhbGlkJyksXG4gICAgICAgICAgICBtYXhsZW5ndGg6IHRoaXMudCgndXNlcm5hbWVJbnZhbGlkJyksXG4gICAgICAgICAgICBwYXR0ZXJuOiB0aGlzLnQoJ3VzZXJuYW1lSW52YWxpZCcpLFxuICAgICAgICAgIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ25hbWUnOlxuICAgICAgICAgIGZpZWxkLmxhYmVsID0gdGhpcy50KCduYW1lJyk7XG4gICAgICAgICAgZmllbGQuaGludCA9IHRoaXMudCgnbmFtZUhpbnQnKTtcbiAgICAgICAgICBmaWVsZC5wbGFjZWhvbGRlciA9IHRoaXMudCgnbmFtZVBsYWNlaG9sZGVyJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3Bob25lJzpcbiAgICAgICAgICBmaWVsZC5sYWJlbCA9IHRoaXMudCgncGhvbmUnKTtcbiAgICAgICAgICBmaWVsZC5oaW50ID0gdGhpcy50KCdwaG9uZUhpbnQnKTtcbiAgICAgICAgICBmaWVsZC5wbGFjZWhvbGRlciA9IHRoaXMudCgncGhvbmVQbGFjZWhvbGRlcicpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBidXR0b24gPSB0aGlzLmZvcm1NZXRhLmFjdGlvbnMgYXMgQnV0dG9uTWV0YWRhdGE7XG4gICAgYnV0dG9uLnRleHQgPSB0aGlzLnNhdmluZygpID8gdGhpcy50KCdzYXZpbmcnKSA6IHRoaXMudCgnc2F2ZScpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkRnJvbUFwaSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmxvYWRpbmcuc2V0KHRydWUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5hdXRoLmdldFByb2ZpbGUoKSk7XG4gICAgICB0aGlzLnByb2ZpbGUuc2V0KHApO1xuICAgICAgdGhpcy5sb2FkRXJyb3Iuc2V0KG51bGwpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5sb2FkRXJyb3Iuc2V0KGVycik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwTWlycm9yVG9Qcm9maWxlKGRvYzogVXNlck1pcnJvckRvYyk6IEdldFByb2ZpbGVSZXNwb25zZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZXJhdGlvbklkOiAnJyxcbiAgICAgIHVzZXJJZDogZG9jLnVzZXJJZCxcbiAgICAgIGVtYWlsOiBkb2MuZW1haWwsXG4gICAgICBuYW1lOiBkb2MubmFtZSA/PyAnJyxcbiAgICAgIGhhbmRsZTogZG9jLmhhbmRsZSxcbiAgICAgIHBob25lOiBkb2MucGhvbmUsXG4gICAgICBhdmF0YXJVcmw6IGRvYy5hdmF0YXJVcmwsXG4gICAgICBlbWFpbFZlcmlmaWVkOiBmYWxzZSxcbiAgICAgIHBob25lVmVyaWZpZWQ6IGZhbHNlLFxuICAgICAgbWZhRW5hYmxlZDogZmFsc2UsXG4gICAgICBjcmVhdGVkQXQ6ICcnLFxuICAgICAgdXBkYXRlZEF0OiAnJyxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgb25TdWJtaXQoZXZlbnQ6IEZvcm1TdWJtaXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5zYXZpbmcoKSkgcmV0dXJuO1xuXG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMucHJvZmlsZSgpO1xuICAgIGlmICghY3VycmVudCkgcmV0dXJuO1xuXG4gICAgY29uc3QgY2ZnID0gdGhpcy5yZXNvbHZlZENvbmZpZygpO1xuICAgIGNvbnN0IGZpZWxkcyA9IGV2ZW50LmZpZWxkcyB8fCB7fTtcbiAgICBjb25zdCBuZXh0SGFuZGxlID0gU3RyaW5nKGZpZWxkc1snaGFuZGxlJ10gfHwgJycpXG4gICAgICAudHJpbSgpXG4gICAgICAudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBuZXh0TmFtZSA9IFN0cmluZyhmaWVsZHNbJ25hbWUnXSB8fCAnJykudHJpbSgpO1xuICAgIGNvbnN0IG5leHRQaG9uZSA9IFN0cmluZyhmaWVsZHNbJ3Bob25lJ10gfHwgJycpLnRyaW0oKTtcblxuICAgIGNvbnN0IGhhbmRsZUNoYW5nZWQgPSBjZmcuc2hvd0hhbmRsZSAmJiAhIW5leHRIYW5kbGUgJiYgbmV4dEhhbmRsZSAhPT0gKGN1cnJlbnQuaGFuZGxlIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IG5hbWVDaGFuZ2VkID0gISFuZXh0TmFtZSAmJiBuZXh0TmFtZSAhPT0gKGN1cnJlbnQubmFtZSB8fCAnJyk7XG4gICAgY29uc3QgcGhvbmVDaGFuZ2VkID0gY2ZnLnNob3dQaG9uZSAmJiBuZXh0UGhvbmUgIT09IChjdXJyZW50LnBob25lIHx8ICcnKTtcblxuICAgIGlmICghaGFuZGxlQ2hhbmdlZCAmJiAhbmFtZUNoYW5nZWQgJiYgIXBob25lQ2hhbmdlZCkge1xuICAgICAgdGhpcy50b2FzdC5zaG93KHtcbiAgICAgICAgbWVzc2FnZTogdGhpcy50KCdzYXZlU3VjY2VzcycpLFxuICAgICAgICBkdXJhdGlvbjogMjAwMCxcbiAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgcG9zaXRpb246ICd0b3AnLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zYXZpbmcuc2V0KHRydWUpO1xuICAgIHRyeSB7XG4gICAgICBpZiAoaGFuZGxlQ2hhbmdlZCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuYXV0aC51cGRhdGVIYW5kbGUobmV4dEhhbmRsZSkpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aGlzLmVycm9ycy5oYW5kbGUoZXJyLCB7XG4gICAgICAgICAgICBjb250ZXh0OiAncHJvZmlsZS51cGRhdGVIYW5kbGUnLFxuICAgICAgICAgICAgaTE4bk1hcDogeyBBVVRIX1VTRVJOQU1FX0VYSVNUUzogJ2hhbmRsZUluVXNlJyB9LFxuICAgICAgICAgICAgZmFsbGJhY2tLZXk6ICdoYW5kbGVFcnJvcicsXG4gICAgICAgICAgICBpMThuTmFtZXNwYWNlOiB0aGlzLm5zLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGF3YWl0IHRoaXMubG9hZEZyb21BcGkoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG5hbWVDaGFuZ2VkIHx8IHBob25lQ2hhbmdlZCkge1xuICAgICAgICBjb25zdCBwYXlsb2FkOiB7IG5hbWU/OiBzdHJpbmc7IHBob25lPzogc3RyaW5nIH0gPSB7fTtcbiAgICAgICAgaWYgKG5hbWVDaGFuZ2VkKSBwYXlsb2FkLm5hbWUgPSBuZXh0TmFtZTtcbiAgICAgICAgaWYgKHBob25lQ2hhbmdlZCkgcGF5bG9hZC5waG9uZSA9IG5leHRQaG9uZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmF1dGgudXBkYXRlUHJvZmlsZShwYXlsb2FkKSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRoaXMuZXJyb3JzLmhhbmRsZShlcnIsIHtcbiAgICAgICAgICAgIGNvbnRleHQ6ICdwcm9maWxlLnVwZGF0ZVByb2ZpbGUnLFxuICAgICAgICAgICAgaTE4bk1hcDoge1xuICAgICAgICAgICAgICBBVVRIVjJfUEhPTkVfRVhJU1RTOiAncGhvbmVJblVzZScsXG4gICAgICAgICAgICAgIEFVVEhWMl9JTlZBTElEX1BIT05FOiAncGhvbmVJbnZhbGlkJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmYWxsYmFja0tleTogJ3NhdmVFcnJvcicsXG4gICAgICAgICAgICBpMThuTmFtZXNwYWNlOiB0aGlzLm5zLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGF3YWl0IHRoaXMubG9hZEZyb21BcGkoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy50b2FzdC5zaG93KHtcbiAgICAgICAgbWVzc2FnZTogdGhpcy50KCdzYXZlU3VjY2VzcycpLFxuICAgICAgICBkdXJhdGlvbjogMjUwMCxcbiAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgcG9zaXRpb246ICd0b3AnLFxuICAgICAgfSk7XG4gICAgICBjZmcub25TYXZlZD8uKHRoaXMucHJvZmlsZSgpID8/IGN1cnJlbnQpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnNhdmluZy5zZXQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIG9uQXZhdGFyVXBsb2FkZWQocmVzdWx0OiBBdmF0YXJVcGxvYWRSZXN1bHQpOiB2b2lkIHtcbiAgICB0aGlzLnRvYXN0LnNob3coe1xuICAgICAgbWVzc2FnZTogdGhpcy50KCdhdmF0YXJTdWNjZXNzJyksXG4gICAgICBkdXJhdGlvbjogMjUwMCxcbiAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICBwb3NpdGlvbjogJ3RvcCcsXG4gICAgfSk7XG4gICAgdGhpcy5yZXNvbHZlZENvbmZpZygpLm9uQXZhdGFyVXBsb2FkZWQ/LihyZXN1bHQpO1xuICB9XG5cbiAgb25BdmF0YXJFcnJvcihfZXJyOiBBdmF0YXJVcGxvYWRFcnJvcik6IHZvaWQge1xuICAgIHRoaXMudG9hc3Quc2hvdyh7XG4gICAgICBtZXNzYWdlOiB0aGlzLnQoJ2F2YXRhckVycm9yJyksXG4gICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICBwb3NpdGlvbjogJ3RvcCcsXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdChrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaTE4bi50KGtleSwgdGhpcy5ucyk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxzRnJvbU5hbWUobmFtZT86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFuYW1lKSByZXR1cm4gJz8nO1xuICAgIGNvbnN0IHBhcnRzID0gbmFtZS50cmltKCkuc3BsaXQoL1xccysvKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuICc/JztcbiAgICBjb25zdCBmaXJzdCA9IHBhcnRzWzBdPy5bMF0gPz8gJyc7XG4gICAgY29uc3QgbGFzdCA9IHBhcnRzLmxlbmd0aCA+IDEgPyAocGFydHNbcGFydHMubGVuZ3RoIC0gMV0/LlswXSA/PyAnJykgOiAnJztcbiAgICByZXR1cm4gKGZpcnN0ICsgbGFzdCkudG9VcHBlckNhc2UoKSB8fCAnPyc7XG4gIH1cbn1cbiJdfQ==
616
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS1jb250ZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9vcmdhbmlzbXMvcHJvZmlsZS12aWV3L3Byb2ZpbGUtY29udGVudC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsY0FBYyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUVwRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUVqRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFFbEcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFFL0UsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDdkYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDL0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsbUJBQW1C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QUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzFFLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksR0FBRyxDQUFDO0lBQzdDLENBQUM7K0dBNWNVLHVCQUF1QjttR0FBdkIsdUJBQXVCLDhOQTlGeEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnRVQsdVhBN0VDLFlBQVksOEJBQ1osbUJBQW1CLCtCQUNuQixxQkFBcUIsb0xBQ3JCLG1CQUFtQiwrRUFDbkIsYUFBYSwrSUFDYixnQkFBZ0IsMkVBQ2hCLGFBQWEsd0VBQ2IsY0FBYyx5RUFDZCx1QkFBdUIsbUZBR3ZCLGtCQUFrQjs7NEZBZ0dULHVCQUF1QjtrQkEvR25DLFNBQVM7K0JBQ0UscUJBQXFCLGNBQ25CLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIscUJBQXFCO3dCQUNyQixtQkFBbUI7d0JBQ25CLGFBQWE7d0JBQ2IsZ0JBQWdCO3dCQUNoQixhQUFhO3dCQUNiLGNBQWM7d0JBQ2QsdUJBQXVCO3dCQUN2QixnQkFBZ0I7d0JBQ2hCLDBCQUEwQjt3QkFDMUIsa0JBQWtCO3FCQUNuQixZQUNTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBZ0VUO3dEQXVDUSxNQUFNO3NCQUFkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QsIElucHV0LCBzaWduYWwsIHZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQXZhdGFyVXBsb2FkQ29tcG9uZW50IH0gZnJvbSAnLi4vYXZhdGFyLXVwbG9hZC9hdmF0YXItdXBsb2FkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBdmF0YXJVcGxvYWRFcnJvciwgQXZhdGFyVXBsb2FkTWV0YWRhdGEsIEF2YXRhclVwbG9hZFJlc3VsdCB9IGZyb20gJy4uL2F2YXRhci11cGxvYWQvdHlwZXMnO1xuaW1wb3J0IHsgRm9ybUNvbXBvbmVudCB9IGZyb20gJy4uL2Zvcm0vZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2hhcmVQcm9maWxlTW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi9zaGFyZS1wcm9maWxlLW1vZGFsL3NoYXJlLXByb2ZpbGUtbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IFNoYXJlUHJvZmlsZU1vZGFsTWV0YWRhdGEgfSBmcm9tICcuLi9zaGFyZS1wcm9maWxlLW1vZGFsL3R5cGVzJztcbmltcG9ydCB7IEN0YUNhcmRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvY3RhLWNhcmQvY3RhLWNhcmQuY29tcG9uZW50JztcbmltcG9ydCB7IEN0YUNhcmRNZXRhZGF0YSB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9jdGEtY2FyZC90eXBlcyc7XG5pbXBvcnQgeyBTa2VsZXRvbkxheW91dENvbXBvbmVudCB9IGZyb20gJy4uL3NrZWxldG9uLWxheW91dC9za2VsZXRvbi1sYXlvdXQuY29tcG9uZW50JztcbmltcG9ydCB7IENvbnRhaW5lckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL2NvbnRhaW5lci9jb250YWluZXIuY29tcG9uZW50JztcbmltcG9ydCB7IERpc3BsYXlDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9kaXNwbGF5L2Rpc3BsYXkuY29tcG9uZW50JztcbmltcG9ydCB7IFRleHRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy90ZXh0L3RleHQuY29tcG9uZW50JztcbmltcG9ydCB7IFRpdGxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvdGl0bGUvdGl0bGUuY29tcG9uZW50JztcbmltcG9ydCB7IEVtcHR5U3RhdGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvZW1wdHktc3RhdGUvZW1wdHktc3RhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IEVtcHR5U3RhdGVNZXRhZGF0YSB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9lbXB0eS1zdGF0ZS90eXBlcyc7XG5pbXBvcnQgeyBjcmVhdGVFcnJvclN0YXRlUHJvcHMgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvZW1wdHktc3RhdGUvZmFjdG9yeSc7XG5pbXBvcnQgeyBCdXR0b25NZXRhZGF0YSwgQ29tcG9uZW50U3RhdGVzLCBGb3JtTWV0YWRhdGEsIEZvcm1TdWJtaXQsIElucHV0TWV0YWRhdGEsIElucHV0VHlwZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hdXRoL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBHZXRQcm9maWxlUmVzcG9uc2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hdXRoL3R5cGVzJztcbmltcG9ydCB7IEZpcmViYXNlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2ZpcmViYXNlL2ZpcmViYXNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmlyZXN0b3JlQ29sbGVjdGlvbkZhY3RvcnksIFR5cGVkQ29sbGVjdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2ZpcmViYXNlL2ZpcmVzdG9yZS1jb2xsZWN0aW9uJztcbmltcG9ydCB7IEZpcmVzdG9yZURvY3VtZW50IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZmlyZWJhc2UvdHlwZXMnO1xuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9pMThuJztcbmltcG9ydCB7IGNvbm5lY3RQYWdlUmVmcmVzaCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BhZ2UtcmVmcmVzaC9wYWdlLXJlZnJlc2guc2VydmljZSc7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy90b2FzdC5zZXJ2aWNlJztcbmltcG9ydCB7IFZhbHRlY2hFcnJvclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9lcnJvcnMvdmFsdGVjaC1lcnJvci5zZXJ2aWNlJztcbmltcG9ydCB7IGludGVycHJldEVycm9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZXJyb3JzL2ludGVycHJldC1lcnJvcic7XG5cbmltcG9ydCB7IFByb2ZpbGVWaWV3Q29uZmlnIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBQUk9GSUxFX1ZJRVdfSTE4TiB9IGZyb20gJy4vcHJvZmlsZS12aWV3LmkxOG4nO1xuXG5pbnRlcmZhY2UgVXNlck1pcnJvckRvYyBleHRlbmRzIEZpcmVzdG9yZURvY3VtZW50IHtcbiAgdXNlcklkOiBzdHJpbmc7XG4gIGVtYWlsOiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIGhhbmRsZT86IHN0cmluZztcbiAgcGhvbmU/OiBzdHJpbmc7XG4gIGF2YXRhclVybD86IHN0cmluZztcbiAgYXZhdGFyVGh1bWJuYWlsPzogc3RyaW5nO1xufVxuXG5jb25zdCBIQU5ETEVfUEFUVEVSTiA9IC9eW2Etel9dW2EtejAtOV9dKiQvO1xuY29uc3QgSEFORExFX01JTiA9IDM7XG5jb25zdCBIQU5ETEVfTUFYID0gMjA7XG5cbmNvbnN0IERFRkFVTFRfTkFNRVNQQUNFID0gJ1NldHRpbmdzLlByb2ZpbGUnO1xuXG4vKipcbiAqIGB2YWwtcHJvZmlsZS1jb250ZW50YCDigJQgQ09OVEVOSURPIGRlbCBwZXJmaWwgKGF2YXRhciArIGhhbmRsZSArIG5vbWJyZSArIHRlbMOpZm9ub1xuICogZW4gdW4gZm9ybSBjb24gdW4gYm90w7NuKS4gUHJlc2VudGFjaW9uYWwgKyBsw7NnaWNhIGRlIGRhdG9zLCBTSU4gY3JvbcOhdGljYSBkZVxuICogcMOhZ2luYTogTk8gdG9jYSBgTmF2aWdhdGlvblNlcnZpY2VgIG5pIGVsIGhlYWRlciBkZWwgc2hlbGwuXG4gKlxuICogTG8gcmV1dGlsaXphbiB0YW50byBsYSB2aXN0YSBydXRlYWRhIChgdmFsLXByb2ZpbGUtdmlld2AsIHF1ZSBzw60gc2V0ZWEgZWwgaGVhZGVyKVxuICogY29tbyBlbCBtb2RhbCAoYHZhbC1wcm9maWxlLW1vZGFsYCkuIEFzw60gZWwgbW9kYWwgbm8gY29udGFtaW5hIGVsIGhlYWRlciBkZWwgc2hlbGwuXG4gKlxuICogVG9kYSBsYSBsw7NnaWNhIChsZWN0dXJhIHJlYWN0aXZhIGRlbCBtaXJyb3IgRmlyZXN0b3JlIC91c2Vycy97dWlkfSArIGZhbGxiYWNrIFJFU1QsXG4gKiBzdWJtaXQgY29uIGRpZmYgaGFuZGxl4oaScHJvZmlsZSwgYXZhdGFyIHVwbG9hZCwgZXN0YWRvcywgaTE4bikgdml2ZSBhcXXDrS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLXByb2ZpbGUtY29udGVudCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBBdmF0YXJVcGxvYWRDb21wb25lbnQsXG4gICAgRW1wdHlTdGF0ZUNvbXBvbmVudCxcbiAgICBGb3JtQ29tcG9uZW50LFxuICAgIERpc3BsYXlDb21wb25lbnQsXG4gICAgVGV4dENvbXBvbmVudCxcbiAgICBUaXRsZUNvbXBvbmVudCxcbiAgICBTa2VsZXRvbkxheW91dENvbXBvbmVudCxcbiAgICBDdGFDYXJkQ29tcG9uZW50LFxuICAgIFNoYXJlUHJvZmlsZU1vZGFsQ29tcG9uZW50LFxuICAgIENvbnRhaW5lckNvbXBvbmVudCxcbiAgXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8dmFsLWNvbnRhaW5lciBbcHJvcHNdPVwieyBzaXplOiAnbWQnLCBwYWRkaW5nOiAnbm9uZScgfVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInBhZ2VcIj5cbiAgICAgICAgPGhlYWRlciBjbGFzcz1cInBhZ2UtaGVhZGVyXCI+XG4gICAgICAgICAgPHZhbC1kaXNwbGF5IFtwcm9wc109XCJ7IHNpemU6ICdzbWFsbCcsIGNvbG9yOiAnZGFyaycsIGNvbnRlbnQ6IHQoJ3BhZ2VUaXRsZScpIH1cIiAvPlxuICAgICAgICAgIDx2YWwtdGl0bGVcbiAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgIHNpemU6ICdsYXJnZScsXG4gICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgIGJvbGQ6IGZhbHNlLFxuICAgICAgICAgICAgICBjb250ZW50OiB0KCdwYWdlRGVzY3JpcHRpb24nKSxcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvaGVhZGVyPlxuXG4gICAgICAgIEBpZiAobG9hZGluZygpKSB7XG4gICAgICAgICAgPHZhbC1za2VsZXRvbi1sYXlvdXQgW3Byb3BzXT1cInsgcHJlc2V0OiAnZm9ybScsIHJvd3M6IDMsIHNob3dBdmF0YXI6IHRydWUgfVwiIC8+XG4gICAgICAgIH0gQGVsc2UgaWYgKGVycm9yU3RhdGUoKSkge1xuICAgICAgICAgIDx2YWwtZW1wdHktc3RhdGUgW3Byb3BzXT1cImVycm9yU3RhdGUoKSFcIiAvPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICBAaWYgKHByb2ZpbGUoKTsgYXMgcCkge1xuICAgICAgICAgICAgQGlmIChyZXNvbHZlZENvbmZpZygpLnNob3dBdmF0YXIpIHtcbiAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzZXR0aW5ncy1zZWN0aW9uIGF2YXRhci1zZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgPHZhbC1hdmF0YXItdXBsb2FkXG4gICAgICAgICAgICAgICAgICBbcHJvcHNdPVwiYXZhdGFyUHJvcHMoKVwiXG4gICAgICAgICAgICAgICAgICAodXBsb2FkZWQpPVwib25BdmF0YXJVcGxvYWRlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJvbkF2YXRhckVycm9yKCRldmVudClcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1tZXRhXCI+XG4gICAgICAgICAgICAgICAgICA8dmFsLXRpdGxlXG4gICAgICAgICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgICAgICAgICBib2xkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHAubmFtZSB8fCAn4oCUJyxcbiAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPHZhbC10ZXh0XG4gICAgICAgICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgc2l6ZTogJ3NtYWxsJyxcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICAgICAgICAgIGJvbGQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHAuZW1haWwsXG4gICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIEBpZiAocC5oYW5kbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgPHZhbC10ZXh0XG4gICAgICAgICAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6ICdzbWFsbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdAJyArIHAuaGFuZGxlLFxuICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIDx2YWwtZm9ybSAjZm9ybSBbcHJvcHNdPVwiZm9ybU1ldGFcIiAob25TdWJtaXQpPVwib25TdWJtaXQoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L3ZhbC1jb250YWluZXI+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIC8qIEFuY2hvIHkgY3JlY2ltaWVudG8gY29uIGVsIHJhaWwgY29sYXBzYWRvIGxvcyBkYSB2YWwtY29udGFpbmVyIChzaXplXG4gICAgICAgICAnbWQnKSwgbm8gQ1NTIGxvY2FsOiB2ZXIgY29udGFpbmVyLmNvbXBvbmVudC5zY3NzLiAqL1xuICAgICAgLnBhZ2Uge1xuICAgICAgICBwYWRkaW5nOiAxNnB4IDA7XG4gICAgICB9XG4gICAgICAucGFnZS1oZWFkZXIge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICAgICAgfVxuICAgICAgLnNldHRpbmdzLXNlY3Rpb24ge1xuICAgICAgICBwYWRkaW5nOiAxNnB4IDA7XG4gICAgICB9XG4gICAgICAuc2V0dGluZ3Mtc2VjdGlvbiArIC5zZXR0aW5ncy1zZWN0aW9uIHtcbiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLXZhbC1ib3JkZXItY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4wOCkpO1xuICAgICAgfVxuICAgICAgLmF2YXRhci1zZWN0aW9uIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiAxNnB4O1xuICAgICAgfVxuICAgICAgLmF2YXRhci1tZXRhIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAycHg7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgUHJvZmlsZUNvbnRlbnRDb21wb25lbnQge1xuICBwcml2YXRlIGF1dGggPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xuICBwcml2YXRlIGkxOG4gPSBpbmplY3QoSTE4blNlcnZpY2UpO1xuICBwcml2YXRlIHRvYXN0ID0gaW5qZWN0KFRvYXN0U2VydmljZSk7XG4gIHByaXZhdGUgZXJyb3JzID0gaW5qZWN0KFZhbHRlY2hFcnJvclNlcnZpY2UpO1xuICBwcml2YXRlIGZpcmViYXNlID0gaW5qZWN0KEZpcmViYXNlU2VydmljZSk7XG4gIHByaXZhdGUgY29sbGVjdGlvbnMgPSBpbmplY3QoRmlyZXN0b3JlQ29sbGVjdGlvbkZhY3RvcnkpO1xuICBwcml2YXRlIHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIEBJbnB1dCgpIGNvbmZpZz86IFByb2ZpbGVWaWV3Q29uZmlnO1xuXG4gIHJlYWRvbmx5IHJlc29sdmVkQ29uZmlnID0gY29tcHV0ZWQ8XG4gICAgUmVxdWlyZWQ8T21pdDxQcm9maWxlVmlld0NvbmZpZywgJ29uU2F2ZWQnIHwgJ29uQXZhdGFyVXBsb2FkZWQnIHwgJ3Byb2ZpbGVCYXNlVXJsJz4+ICZcbiAgICAgIFBpY2s8UHJvZmlsZVZpZXdDb25maWcsICdvblNhdmVkJyB8ICdvbkF2YXRhclVwbG9hZGVkJyB8ICdwcm9maWxlQmFzZVVybCc+XG4gID4oKCkgPT4ge1xuICAgIGNvbnN0IGZyb21Sb3V0ZSA9ICh0aGlzLnJvdXRlPy5zbmFwc2hvdC5kYXRhWydwcm9maWxlQ29uZmlnJ10gPz8ge30pIGFzIFByb2ZpbGVWaWV3Q29uZmlnO1xuICAgIGNvbnN0IG1lcmdlZDogUHJvZmlsZVZpZXdDb25maWcgPSB7IC4uLmZyb21Sb3V0ZSwgLi4uKHRoaXMuY29uZmlnID8/IHt9KSB9O1xuICAgIHJldHVybiB7XG4gICAgICBzaG93QXZhdGFyOiBtZXJnZWQuc2hvd0F2YXRhciA/PyB0cnVlLFxuICAgICAgc2hvd0hhbmRsZTogbWVyZ2VkLnNob3dIYW5kbGUgPz8gdHJ1ZSxcbiAgICAgIHNob3dQaG9uZTogbWVyZ2VkLnNob3dQaG9uZSA/PyB0cnVlLFxuICAgICAgc2hvd1NoYXJlQ3RhOiBtZXJnZWQuc2hvd1NoYXJlQ3RhID8/IHRydWUsXG4gICAgICBwcm9maWxlQmFzZVVybDogbWVyZ2VkLnByb2ZpbGVCYXNlVXJsID8/ICcnLFxuICAgICAgaTE4bk5hbWVzcGFjZTogbWVyZ2VkLmkxOG5OYW1lc3BhY2UgPz8gREVGQVVMVF9OQU1FU1BBQ0UsXG4gICAgICBvblNhdmVkOiBtZXJnZWQub25TYXZlZCxcbiAgICAgIG9uQXZhdGFyVXBsb2FkZWQ6IG1lcmdlZC5vbkF2YXRhclVwbG9hZGVkLFxuICAgIH07XG4gIH0pO1xuXG4gIC8qKiBOYW1lc3BhY2UgaTE4biByZXN1ZWx0byAocMO6YmxpY28gcGFyYSBxdWUgbGEgdmlzdGEgcnV0ZWFkYSBhcm1lIGVsIGhlYWRlcikuICovXG4gIGdldCBucygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVkQ29uZmlnKCkuaTE4bk5hbWVzcGFjZTtcbiAgfVxuXG4gIHByaXZhdGUgdXNlcnNDb2w6IFR5cGVkQ29sbGVjdGlvbjxVc2VyTWlycm9yRG9jPiA9IHRoaXMuY29sbGVjdGlvbnMuY3JlYXRlPFVzZXJNaXJyb3JEb2M+KCd1c2VycycsIHtcbiAgICBza2lwQXBwUHJlZml4OiB0cnVlLFxuICB9KTtcblxuICBwcml2YXRlIGZvcm1DbXAgPSB2aWV3Q2hpbGQ8Rm9ybUNvbXBvbmVudD4oJ2Zvcm0nKTtcblxuICByZWFkb25seSBwcm9maWxlID0gc2lnbmFsPEdldFByb2ZpbGVSZXNwb25zZSB8IG51bGw+KG51bGwpO1xuICByZWFkb25seSBsb2FkaW5nID0gc2lnbmFsKHRydWUpO1xuICByZWFkb25seSBzYXZpbmcgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBsb2FkRXJyb3IgPSBzaWduYWw8dW5rbm93biB8IG51bGw+KG51bGwpO1xuXG4gIHJlYWRvbmx5IHNoYXJlT3BlbiA9IHNpZ25hbChmYWxzZSk7XG5cbiAgcmVhZG9ubHkgc2hhcmVDdGEgPSBjb21wdXRlZDxDdGFDYXJkTWV0YWRhdGE+KCgpID0+IHtcbiAgICB0aGlzLmkxOG4ubGFuZygpO1xuICAgIHJldHVybiB7XG4gICAgICB0aXRsZTogdGhpcy50KCdzaGFyZUN0YVRpdGxlJyksXG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy50KCdzaGFyZUN0YURlc2MnKSxcbiAgICAgIGJvcmRlcmVkOiB0cnVlLFxuICAgICAgYWN0aW9uczoge1xuICAgICAgICBwb3NpdGlvbjogJ2xlZnQnLFxuICAgICAgICBjb2x1bW5lZDogZmFsc2UsXG4gICAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0ZXh0OiB0aGlzLnQoJ3NoYXJlQ3RhQnRuJyksXG4gICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgc2hhcGU6ICdyb3VuZCcsXG4gICAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgICAgIHN0YXRlOiAnRU5BQkxFRCcsXG4gICAgICAgICAgICB0b2tlbjogJ3NoYXJlJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICB9O1xuICB9KTtcblxuICByZWFkb25seSBzaGFyZU1vZGFsID0gY29tcHV0ZWQ8U2hhcmVQcm9maWxlTW9kYWxNZXRhZGF0YT4oKCkgPT4ge1xuICAgIGNvbnN0IHAgPSB0aGlzLnByb2ZpbGUoKTtcbiAgICBjb25zdCBoYW5kbGUgPSBwPy5oYW5kbGUgPz8gJ21lJztcbiAgICBjb25zdCBiYXNlID0gdGhpcy5yZXNvbHZlZENvbmZpZygpLnByb2ZpbGVCYXNlVXJsO1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBwPy5uYW1lID8/ICcnLFxuICAgICAgaGFuZGxlOiBwPy5oYW5kbGUsXG4gICAgICBhdmF0YXJVcmw6IHA/LmF2YXRhclVybCxcbiAgICAgIGVtYWlsOiBwPy5lbWFpbCxcbiAgICAgIHVybDogYmFzZSA/IGAke2Jhc2V9L3UvJHtoYW5kbGV9YCA6IGAvdS8ke2hhbmRsZX1gLFxuICAgIH07XG4gIH0pO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3VzZXJJZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuYXV0aC51c2VyKCk/LnVzZXJJZCA/PyBudWxsKTtcblxuICByZWFkb25seSBlcnJvclN0YXRlID0gY29tcHV0ZWQ8RW1wdHlTdGF0ZU1ldGFkYXRhIHwgbnVsbD4oKCkgPT4ge1xuICAgIHRoaXMuaTE4bi5sYW5nKCk7XG4gICAgY29uc3QgZXJyID0gdGhpcy5sb2FkRXJyb3IoKTtcbiAgICBpZiAoIWVycikgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGNyZWF0ZUVycm9yU3RhdGVQcm9wcyhlcnIsIHtcbiAgICAgIHRpdGxlOiB7XG4gICAgICAgIG9mZmxpbmU6IHRoaXMudCgnb2ZmbGluZVRpdGxlJyksXG4gICAgICAgIGVycm9yOiB0aGlzLnQoJ2Vycm9yVGl0bGUnKSxcbiAgICAgIH0sXG4gICAgICBkZXNjcmlwdGlvbjoge1xuICAgICAgICBvZmZsaW5lOiB0aGlzLnQoJ29mZmxpbmVIaW50JyksXG4gICAgICAgIGVycm9yOiBpbnRlcnByZXRFcnJvcihlcnIpLm1lc3NhZ2UsXG4gICAgICB9LFxuICAgICAgcmV0cnlMYWJlbDogdGhpcy50KCdyZXRyeScpLFxuICAgICAgb25SZXRyeTogKCkgPT4gdGhpcy5sb2FkRnJvbUFwaSgpLFxuICAgICAgcmV0cnlpbmc6IHRoaXMubG9hZGluZygpLFxuICAgIH0pO1xuICB9KTtcblxuICByZWFkb25seSBhdmF0YXJQcm9wcyA9IGNvbXB1dGVkPEF2YXRhclVwbG9hZE1ldGFkYXRhPigoKSA9PiB7XG4gICAgdGhpcy5pMThuLmxhbmcoKTtcbiAgICBjb25zdCBwID0gdGhpcy5wcm9maWxlKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRVcmw6IHA/LmF2YXRhclVybCxcbiAgICAgIGluaXRpYWxzOiB0aGlzLmluaXRpYWxzRnJvbU5hbWUocD8ubmFtZSksXG4gICAgICBzaXplOiA5NixcbiAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgc2hvd1ZpZXdCdXR0b246IHRydWUsXG4gICAgICBpMThuTmFtZXNwYWNlOiB0aGlzLm5zLFxuICAgIH07XG4gIH0pO1xuXG4gIGZvcm1NZXRhOiBGb3JtTWV0YWRhdGEgPSB0aGlzLmJ1aWxkRm9ybU1ldGEoKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBucyA9IHRoaXMubnM7XG4gICAgdGhpcy5pMThuLnJlZ2lzdGVyRGVmYXVsdHMobnMsIFBST0ZJTEVfVklFV19JMThOKTtcblxuICAgIGNvbm5lY3RQYWdlUmVmcmVzaCgoKSA9PiB0aGlzLmxvYWRGcm9tQXBpKCkpO1xuXG4gICAgdm9pZCB0aGlzLmZpcmViYXNlLndoZW5GaXJlYmFzZUF1dGhSZWFkeSgpLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgdWlkID0gdGhpcy5fdXNlcklkKCk7XG4gICAgICBpZiAodWlkKSB7XG4gICAgICAgIHZvaWQgdGhpcy5sb2FkRnJvbUFwaSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZWZmZWN0KFxuICAgICAgb25DbGVhbnVwID0+IHtcbiAgICAgICAgY29uc3QgdWlkID0gdGhpcy5fdXNlcklkKCk7XG4gICAgICAgIGlmICghdWlkKSB7XG4gICAgICAgICAgdGhpcy5wcm9maWxlLnNldChudWxsKTtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2FkaW5nLnNldCh0cnVlKTtcblxuICAgICAgICBsZXQgc3ViOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcbiAgICAgICAgbGV0IGNhbmNlbGxlZCA9IGZhbHNlO1xuICAgICAgICBsZXQgYXBpRmFsbGJhY2tVc2VkID0gZmFsc2U7XG5cbiAgICAgICAgdm9pZCB0aGlzLmZpcmViYXNlLndoZW5GaXJlYmFzZUF1dGhSZWFkeSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGlmIChjYW5jZWxsZWQpIHJldHVybjtcbiAgICAgICAgICBzdWIgPSB0aGlzLnVzZXJzQ29sLndhdGNoKHVpZCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IGRvYyA9PiB7XG4gICAgICAgICAgICAgIGlmIChkb2MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2ZpbGUuc2V0KHRoaXMubWFwTWlycm9yVG9Qcm9maWxlKGRvYykpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZEVycm9yLnNldChudWxsKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICghYXBpRmFsbGJhY2tVc2VkKSB7XG4gICAgICAgICAgICAgICAgYXBpRmFsbGJhY2tVc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB2b2lkIHRoaXMubG9hZEZyb21BcGkoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghYXBpRmFsbGJhY2tVc2VkKSB7XG4gICAgICAgICAgICAgICAgYXBpRmFsbGJhY2tVc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB2b2lkIHRoaXMubG9hZEZyb21BcGkoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgb25DbGVhbnVwKCgpID0+IHtcbiAgICAgICAgICBjYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICAgIHN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgKTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBpc1NhdmluZyA9IHRoaXMuc2F2aW5nKCk7XG4gICAgICBjb25zdCBzdGF0ZSA9IGlzU2F2aW5nID8gQ29tcG9uZW50U3RhdGVzLldPUktJTkcgOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRDtcbiAgICAgIHRoaXMuZm9ybU1ldGEuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICh0aGlzLmZvcm1NZXRhLmFjdGlvbnMgYXMgQnV0dG9uTWV0YWRhdGEpLnN0YXRlID0gc3RhdGU7XG4gICAgICAodGhpcy5mb3JtTWV0YS5hY3Rpb25zIGFzIEJ1dHRvbk1ldGFkYXRhKS50ZXh0ID0gaXNTYXZpbmcgPyB0aGlzLnQoJ3NhdmluZycpIDogdGhpcy50KCdzYXZlJyk7XG4gICAgfSk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgcCA9IHRoaXMucHJvZmlsZSgpO1xuICAgICAgY29uc3QgZm9ybSA9IHRoaXMuZm9ybUNtcCgpPy5Gb3JtO1xuICAgICAgaWYgKCFwIHx8ICFmb3JtKSByZXR1cm47XG4gICAgICBmb3JtLnBhdGNoVmFsdWUoXG4gICAgICAgIHtcbiAgICAgICAgICBoYW5kbGU6IHAuaGFuZGxlIHx8ICcnLFxuICAgICAgICAgIG5hbWU6IHAubmFtZSB8fCAnJyxcbiAgICAgICAgICBwaG9uZTogcC5waG9uZSB8fCAnJyxcbiAgICAgICAgfSxcbiAgICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgdGhpcy5pMThuLmxhbmcoKTtcbiAgICAgIHRoaXMuYXBwbHlJMThuTGFiZWxzKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRm9ybU1ldGEoKTogRm9ybU1ldGFkYXRhIHtcbiAgICBjb25zdCBjZmcgPSB0aGlzLnJlc29sdmVkQ29uZmlnKCk7XG5cbiAgICBjb25zdCBoYW5kbGVGaWVsZDogSW5wdXRNZXRhZGF0YSA9IHtcbiAgICAgIHRva2VuOiAncHJvZmlsZS1oYW5kbGUnLFxuICAgICAgbmFtZTogJ2hhbmRsZScsXG4gICAgICBsYWJlbDogdGhpcy50KCdoYW5kbGUnKSxcbiAgICAgIGhpbnQ6IHRoaXMudCgnaGFuZGxlSGludCcpLFxuICAgICAgcGxhY2Vob2xkZXI6IHRoaXMudCgnaGFuZGxlUGxhY2Vob2xkZXInKSxcbiAgICAgIHR5cGU6IElucHV0VHlwZS5IQU5ETEUsXG4gICAgICBvcmRlcjogMSxcbiAgICAgIHZhbGlkYXRvcnM6IFtcbiAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcbiAgICAgICAgVmFsaWRhdG9ycy5taW5MZW5ndGgoSEFORExFX01JTiksXG4gICAgICAgIFZhbGlkYXRvcnMubWF4TGVuZ3RoKEhBTkRMRV9NQVgpLFxuICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oSEFORExFX1BBVFRFUk4pLFxuICAgICAgXSxcbiAgICAgIGVycm9yczoge1xuICAgICAgICByZXF1aXJlZDogdGhpcy50KCd1c2VybmFtZUludmFsaWQnKSxcbiAgICAgICAgbWlubGVuZ3RoOiB0aGlzLnQoJ3VzZXJuYW1lSW52YWxpZCcpLFxuICAgICAgICBtYXhsZW5ndGg6IHRoaXMudCgndXNlcm5hbWVJbnZhbGlkJyksXG4gICAgICAgIHBhdHRlcm46IHRoaXMudCgndXNlcm5hbWVJbnZhbGlkJyksXG4gICAgICB9LFxuICAgICAgdmFsdWU6ICcnLFxuICAgICAgcmFuZ2U6IHsgbWluOiBIQU5ETEVfTUlOLCBtYXg6IEhBTkRMRV9NQVggfSxcbiAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICB9O1xuXG4gICAgY29uc3QgbmFtZUZpZWxkOiBJbnB1dE1ldGFkYXRhID0ge1xuICAgICAgdG9rZW46ICdwcm9maWxlLW5hbWUnLFxuICAgICAgbmFtZTogJ25hbWUnLFxuICAgICAgbGFiZWw6IHRoaXMudCgnbmFtZScpLFxuICAgICAgaGludDogdGhpcy50KCduYW1lSGludCcpLFxuICAgICAgcGxhY2Vob2xkZXI6IHRoaXMudCgnbmFtZVBsYWNlaG9sZGVyJyksXG4gICAgICB0eXBlOiBJbnB1dFR5cGUuVEVYVCxcbiAgICAgIG9yZGVyOiAyLFxuICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDIpLCBWYWxpZGF0b3JzLm1heExlbmd0aCgxMDApXSxcbiAgICAgIGVycm9yczoge30sXG4gICAgICB2YWx1ZTogJycsXG4gICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgfTtcblxuICAgIGNvbnN0IHBob25lRmllbGQ6IElucHV0TWV0YWRhdGEgPSB7XG4gICAgICB0b2tlbjogJ3Byb2ZpbGUtcGhvbmUnLFxuICAgICAgbmFtZTogJ3Bob25lJyxcbiAgICAgIGxhYmVsOiB0aGlzLnQoJ3Bob25lJyksXG4gICAgICBoaW50OiB0aGlzLnQoJ3Bob25lSGludCcpLFxuICAgICAgcGxhY2Vob2xkZXI6IHRoaXMudCgncGhvbmVQbGFjZWhvbGRlcicpLFxuICAgICAgdHlwZTogSW5wdXRUeXBlLlBIT05FLFxuICAgICAgb3JkZXI6IDMsXG4gICAgICB2YWxpZGF0b3JzOiBbXSxcbiAgICAgIGVycm9yczoge30sXG4gICAgICB2YWx1ZTogJycsXG4gICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgfTtcblxuICAgIGNvbnN0IGZpZWxkczogSW5wdXRNZXRhZGF0YVtdID0gW107XG4gICAgaWYgKGNmZy5zaG93SGFuZGxlKSBmaWVsZHMucHVzaChoYW5kbGVGaWVsZCk7XG4gICAgZmllbGRzLnB1c2gobmFtZUZpZWxkKTtcbiAgICBpZiAoY2ZnLnNob3dQaG9uZSkgZmllbGRzLnB1c2gocGhvbmVGaWVsZCk7XG5cbiAgICBjb25zdCBzdWJtaXRCdXR0b246IEJ1dHRvbk1ldGFkYXRhID0ge1xuICAgICAgdGV4dDogdGhpcy50KCdzYXZlJyksXG4gICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgdHlwZTogJ3N1Ym1pdCcsXG4gICAgICBmaWxsOiAnc29saWQnLFxuICAgICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgICAgc2hhcGU6ICdyb3VuZCcsXG4gICAgICBleHBhbmQ6ICdibG9jaycsXG4gICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgICB0b2tlbjogJ3Byb2ZpbGUtc2F2ZScsXG4gICAgfSBhcyBCdXR0b25NZXRhZGF0YTtcblxuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiAnJyxcbiAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgIHNlY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgICBvcmRlcjogMSxcbiAgICAgICAgICBmaWVsZHMsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgYWN0aW9uczogc3VibWl0QnV0dG9uLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFwcGx5STE4bkxhYmVscygpOiB2b2lkIHtcbiAgICBjb25zdCBzZWN0aW9uID0gdGhpcy5mb3JtTWV0YS5zZWN0aW9uc1swXTtcbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHNlY3Rpb24uZmllbGRzKSB7XG4gICAgICBzd2l0Y2ggKGZpZWxkLm5hbWUpIHtcbiAgICAgICAgY2FzZSAnaGFuZGxlJzpcbiAgICAgICAgICBmaWVsZC5sYWJlbCA9IHRoaXMudCgnaGFuZGxlJyk7XG4gICAgICAgICAgZmllbGQuaGludCA9IHRoaXMudCgnaGFuZGxlSGludCcpO1xuICAgICAgICAgIGZpZWxkLnBsYWNlaG9sZGVyID0gdGhpcy50KCdoYW5kbGVQbGFjZWhvbGRlcicpO1xuICAgICAgICAgIGZpZWxkLmVycm9ycyA9IHtcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0aGlzLnQoJ3VzZXJuYW1lSW52YWxpZCcpLFxuICAgICAgICAgICAgbWlubGVuZ3RoOiB0aGlzLnQoJ3VzZXJuYW1lSW52YWxpZCcpLFxuICAgICAgICAgICAgbWF4bGVuZ3RoOiB0aGlzLnQoJ3VzZXJuYW1lSW52YWxpZCcpLFxuICAgICAgICAgICAgcGF0dGVybjogdGhpcy50KCd1c2VybmFtZUludmFsaWQnKSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICduYW1lJzpcbiAgICAgICAgICBmaWVsZC5sYWJlbCA9IHRoaXMudCgnbmFtZScpO1xuICAgICAgICAgIGZpZWxkLmhpbnQgPSB0aGlzLnQoJ25hbWVIaW50Jyk7XG4gICAgICAgICAgZmllbGQucGxhY2Vob2xkZXIgPSB0aGlzLnQoJ25hbWVQbGFjZWhvbGRlcicpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdwaG9uZSc6XG4gICAgICAgICAgZmllbGQubGFiZWwgPSB0aGlzLnQoJ3Bob25lJyk7XG4gICAgICAgICAgZmllbGQuaGludCA9IHRoaXMudCgncGhvbmVIaW50Jyk7XG4gICAgICAgICAgZmllbGQucGxhY2Vob2xkZXIgPSB0aGlzLnQoJ3Bob25lUGxhY2Vob2xkZXInKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgYnV0dG9uID0gdGhpcy5mb3JtTWV0YS5hY3Rpb25zIGFzIEJ1dHRvbk1ldGFkYXRhO1xuICAgIGJ1dHRvbi50ZXh0ID0gdGhpcy5zYXZpbmcoKSA/IHRoaXMudCgnc2F2aW5nJykgOiB0aGlzLnQoJ3NhdmUnKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZEZyb21BcGkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2FkaW5nLnNldCh0cnVlKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuYXV0aC5nZXRQcm9maWxlKCkpO1xuICAgICAgdGhpcy5wcm9maWxlLnNldChwKTtcbiAgICAgIHRoaXMubG9hZEVycm9yLnNldChudWxsKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMubG9hZEVycm9yLnNldChlcnIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcE1pcnJvclRvUHJvZmlsZShkb2M6IFVzZXJNaXJyb3JEb2MpOiBHZXRQcm9maWxlUmVzcG9uc2Uge1xuICAgIHJldHVybiB7XG4gICAgICBvcGVyYXRpb25JZDogJycsXG4gICAgICB1c2VySWQ6IGRvYy51c2VySWQsXG4gICAgICBlbWFpbDogZG9jLmVtYWlsLFxuICAgICAgbmFtZTogZG9jLm5hbWUgPz8gJycsXG4gICAgICBoYW5kbGU6IGRvYy5oYW5kbGUsXG4gICAgICBwaG9uZTogZG9jLnBob25lLFxuICAgICAgYXZhdGFyVXJsOiBkb2MuYXZhdGFyVXJsLFxuICAgICAgZW1haWxWZXJpZmllZDogZmFsc2UsXG4gICAgICBwaG9uZVZlcmlmaWVkOiBmYWxzZSxcbiAgICAgIG1mYUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgY3JlYXRlZEF0OiAnJyxcbiAgICAgIHVwZGF0ZWRBdDogJycsXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIG9uU3VibWl0KGV2ZW50OiBGb3JtU3VibWl0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuc2F2aW5nKCkpIHJldHVybjtcblxuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLnByb2ZpbGUoKTtcbiAgICBpZiAoIWN1cnJlbnQpIHJldHVybjtcblxuICAgIGNvbnN0IGNmZyA9IHRoaXMucmVzb2x2ZWRDb25maWcoKTtcbiAgICBjb25zdCBmaWVsZHMgPSBldmVudC5maWVsZHMgfHwge307XG4gICAgY29uc3QgbmV4dEhhbmRsZSA9IFN0cmluZyhmaWVsZHNbJ2hhbmRsZSddIHx8ICcnKVxuICAgICAgLnRyaW0oKVxuICAgICAgLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgbmV4dE5hbWUgPSBTdHJpbmcoZmllbGRzWyduYW1lJ10gfHwgJycpLnRyaW0oKTtcbiAgICBjb25zdCBuZXh0UGhvbmUgPSBTdHJpbmcoZmllbGRzWydwaG9uZSddIHx8ICcnKS50cmltKCk7XG5cbiAgICBjb25zdCBoYW5kbGVDaGFuZ2VkID0gY2ZnLnNob3dIYW5kbGUgJiYgISFuZXh0SGFuZGxlICYmIG5leHRIYW5kbGUgIT09IChjdXJyZW50LmhhbmRsZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBuYW1lQ2hhbmdlZCA9ICEhbmV4dE5hbWUgJiYgbmV4dE5hbWUgIT09IChjdXJyZW50Lm5hbWUgfHwgJycpO1xuICAgIGNvbnN0IHBob25lQ2hhbmdlZCA9IGNmZy5zaG93UGhvbmUgJiYgbmV4dFBob25lICE9PSAoY3VycmVudC5waG9uZSB8fCAnJyk7XG5cbiAgICBpZiAoIWhhbmRsZUNoYW5nZWQgJiYgIW5hbWVDaGFuZ2VkICYmICFwaG9uZUNoYW5nZWQpIHtcbiAgICAgIHRoaXMudG9hc3Quc2hvdyh7XG4gICAgICAgIG1lc3NhZ2U6IHRoaXMudCgnc2F2ZVN1Y2Nlc3MnKSxcbiAgICAgICAgZHVyYXRpb246IDIwMDAsXG4gICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgIHBvc2l0aW9uOiAndG9wJyxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2F2aW5nLnNldCh0cnVlKTtcbiAgICB0cnkge1xuICAgICAgaWYgKGhhbmRsZUNoYW5nZWQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmF1dGgudXBkYXRlSGFuZGxlKG5leHRIYW5kbGUpKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdGhpcy5lcnJvcnMuaGFuZGxlKGVyciwge1xuICAgICAgICAgICAgY29udGV4dDogJ3Byb2ZpbGUudXBkYXRlSGFuZGxlJyxcbiAgICAgICAgICAgIGkxOG5NYXA6IHsgQVVUSF9VU0VSTkFNRV9FWElTVFM6ICdoYW5kbGVJblVzZScgfSxcbiAgICAgICAgICAgIGZhbGxiYWNrS2V5OiAnaGFuZGxlRXJyb3InLFxuICAgICAgICAgICAgaTE4bk5hbWVzcGFjZTogdGhpcy5ucyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRGcm9tQXBpKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChuYW1lQ2hhbmdlZCB8fCBwaG9uZUNoYW5nZWQpIHtcbiAgICAgICAgY29uc3QgcGF5bG9hZDogeyBuYW1lPzogc3RyaW5nOyBwaG9uZT86IHN0cmluZyB9ID0ge307XG4gICAgICAgIGlmIChuYW1lQ2hhbmdlZCkgcGF5bG9hZC5uYW1lID0gbmV4dE5hbWU7XG4gICAgICAgIGlmIChwaG9uZUNoYW5nZWQpIHBheWxvYWQucGhvbmUgPSBuZXh0UGhvbmU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5hdXRoLnVwZGF0ZVByb2ZpbGUocGF5bG9hZCkpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aGlzLmVycm9ycy5oYW5kbGUoZXJyLCB7XG4gICAgICAgICAgICBjb250ZXh0OiAncHJvZmlsZS51cGRhdGVQcm9maWxlJyxcbiAgICAgICAgICAgIGkxOG5NYXA6IHtcbiAgICAgICAgICAgICAgQVVUSFYyX1BIT05FX0VYSVNUUzogJ3Bob25lSW5Vc2UnLFxuICAgICAgICAgICAgICBBVVRIVjJfSU5WQUxJRF9QSE9ORTogJ3Bob25lSW52YWxpZCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmFsbGJhY2tLZXk6ICdzYXZlRXJyb3InLFxuICAgICAgICAgICAgaTE4bk5hbWVzcGFjZTogdGhpcy5ucyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRGcm9tQXBpKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMudG9hc3Quc2hvdyh7XG4gICAgICAgIG1lc3NhZ2U6IHRoaXMudCgnc2F2ZVN1Y2Nlc3MnKSxcbiAgICAgICAgZHVyYXRpb246IDI1MDAsXG4gICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgIHBvc2l0aW9uOiAndG9wJyxcbiAgICAgIH0pO1xuICAgICAgY2ZnLm9uU2F2ZWQ/Lih0aGlzLnByb2ZpbGUoKSA/PyBjdXJyZW50KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5zYXZpbmcuc2V0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBvbkF2YXRhclVwbG9hZGVkKHJlc3VsdDogQXZhdGFyVXBsb2FkUmVzdWx0KTogdm9pZCB7XG4gICAgdGhpcy50b2FzdC5zaG93KHtcbiAgICAgIG1lc3NhZ2U6IHRoaXMudCgnYXZhdGFyU3VjY2VzcycpLFxuICAgICAgZHVyYXRpb246IDI1MDAsXG4gICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgcG9zaXRpb246ICd0b3AnLFxuICAgIH0pO1xuICAgIHRoaXMucmVzb2x2ZWRDb25maWcoKS5vbkF2YXRhclVwbG9hZGVkPy4ocmVzdWx0KTtcbiAgfVxuXG4gIG9uQXZhdGFyRXJyb3IoX2VycjogQXZhdGFyVXBsb2FkRXJyb3IpOiB2b2lkIHtcbiAgICB0aGlzLnRvYXN0LnNob3coe1xuICAgICAgbWVzc2FnZTogdGhpcy50KCdhdmF0YXJFcnJvcicpLFxuICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgcG9zaXRpb246ICd0b3AnLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHQoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmkxOG4udChrZXksIHRoaXMubnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsc0Zyb21OYW1lKG5hbWU/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghbmFtZSkgcmV0dXJuICc/JztcbiAgICBjb25zdCBwYXJ0cyA9IG5hbWUudHJpbSgpLnNwbGl0KC9cXHMrLykuZmlsdGVyKEJvb2xlYW4pO1xuICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDApIHJldHVybiAnPyc7XG4gICAgY29uc3QgZmlyc3QgPSBwYXJ0c1swXT8uWzBdID8/ICcnO1xuICAgIGNvbnN0IGxhc3QgPSBwYXJ0cy5sZW5ndGggPiAxID8gKHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdPy5bMF0gPz8gJycpIDogJyc7XG4gICAgcmV0dXJuIChmaXJzdCArIGxhc3QpLnRvVXBwZXJDYXNlKCkgfHwgJz8nO1xuICB9XG59XG4iXX0=